bways-report 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +64 -0
  2. package/esm2022/lib/core/config/bways-report-config.mjs +1 -1
  3. package/esm2022/lib/core/models/report-grid.model.mjs +1 -1
  4. package/esm2022/lib/core/services/report-overlay.service.mjs +79 -0
  5. package/esm2022/lib/core/services/report-session-context.service.mjs +1 -44
  6. package/esm2022/lib/core/utils/report-parameter.util.mjs +81 -16
  7. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +10 -2
  8. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +10 -1
  9. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +10 -1
  10. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +10 -1
  11. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +6 -4
  12. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +11 -10
  13. package/esm2022/lib/features/designer/components/property-editor/parameter-binding-editor.component.mjs +93 -7
  14. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +9 -7
  15. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +9 -16
  16. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +5 -3
  17. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +11 -11
  18. package/esm2022/lib/features/designer/designer.component.mjs +12 -7
  19. package/esm2022/lib/features/designer/services/designer-state.service.mjs +5 -3
  20. package/esm2022/lib/features/runtime/dynamic-renderer.component.mjs +2 -2
  21. package/esm2022/lib/features/runtime/report-execution.service.mjs +35 -4
  22. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +15 -20
  23. package/esm2022/lib/primitives/components/dropdown/rpt-dropdown.component.mjs +22 -11
  24. package/esm2022/lib/primitives/components/radio/rpt-radio.component.mjs +15 -5
  25. package/esm2022/lib/primitives/components/searchable-select/rpt-searchable-select.component.mjs +6 -6
  26. package/fesm2022/bways-report.mjs +414 -165
  27. package/fesm2022/bways-report.mjs.map +1 -1
  28. package/lib/core/config/bways-report-config.d.ts +3 -0
  29. package/lib/core/models/report-grid.model.d.ts +1 -1
  30. package/lib/core/services/report-overlay.service.d.ts +14 -0
  31. package/lib/core/services/report-session-context.service.d.ts +0 -5
  32. package/lib/core/utils/report-parameter.util.d.ts +15 -1
  33. package/lib/features/designer/components/property-editor/parameter-binding-editor.component.d.ts +12 -0
  34. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +1 -0
  35. package/lib/features/designer/designer.component.d.ts +1 -0
  36. package/lib/features/runtime/report-grid-bridge.component.d.ts +2 -2
  37. package/lib/primitives/components/dropdown/rpt-dropdown.component.d.ts +1 -2
  38. package/lib/primitives/components/searchable-select/rpt-searchable-select.component.d.ts +0 -1
  39. package/package.json +8 -5
  40. package/styles/theme.css +181 -0
  41. package/third-party-notices/angular-cdk-LICENSE.txt +21 -0
package/README.md CHANGED
@@ -593,3 +593,67 @@ const dataSource: ReportDataSourceDefinition = {
593
593
  The adapter sends `columns`, `top` and resolved `filter` values to the execution API. Unmapped form parameters are not automatically treated as SQL column names. The supplied backend defaults table/view results to 1,000 rows and caps requests at 10,000; lookups default to 500. Table/view limits run inside SQL. Stored procedure results are capped in the response; expensive procedures should implement their own SQL-side paging/limits.
594
594
 
595
595
  Generic backend execution preserves supplied values and leaves omitted procedure arguments for SQL Server to handle. ERP-specific synthetic defaults, flag coercions and legacy fallback behavior require the explicit `legacyErpDefaults` option. See the [backend compatibility settings](../../backend/README.md#query-limits-and-erp-compatibility).
596
+
597
+ ## Automatic overlay positioning
598
+
599
+ The save-review dialog includes its backdrop automatically. It stays within the viewport, keeps its action buttons visible, and scrolls settings and preview content on smaller screens. Nested report wrappers do not require modal positioning CSS.
600
+
601
+ No host import of `@angular/cdk/overlay-prebuilt.css` is required for library dropdowns, searchable selects or designer save dialogs. Their minimal structural CSS is embedded in the library and installed once per document, including standalone-component usage. The installer respects Angular's `CSP_NONCE` and can create styles in an SSR document. Existing CDK stylesheet imports remain compatible.
602
+
603
+ Menus use CDK's anchor positioning, viewport margins, above/below fallback and push behavior. Internal canvas, preview, properties and save-dialog scrollers register with CDK. A capture listener covers unregistered native host ancestors, throttled to one animation frame and removed when the overlay closes; menu-list scrolling does not reposition its own overlay.
604
+
605
+ The optional visual theme is available from the published package:
606
+
607
+ ```scss
608
+ /* Optional: colors, typography, drag previews and library dialog appearance. */
609
+ @import 'bways-report/styles/theme.css';
610
+ ```
611
+
612
+ The theme no longer forces positioning, centering or margins on all of the consuming application's CDK overlays. Overlay container stacking defaults to the CDK layer (1000), and can be changed through the inherited `--rpt-overlay-z-index` CSS variable when required by the host's layering scheme. Arbitrary host rules overriding CDK positioning or a custom OverlayContainer inside a transformed ancestor still need to preserve CDK's positioning contract. A normal nested div, including a transformed report wrapper, does not require a custom overlay container.
613
+
614
+ ## Date parameters
615
+
616
+ In a procedure parameter's **Field** tab, select a Date field (or a date range's **From** / **To** field), then choose **Execution date format**. This also works when the SQL parameter is text, such as `chrFromDate`.
617
+
618
+ Supported formats: `yyyy-MM-dd`, `yyyyMMdd`, `dd/MM/yyyy`, `MM/dd/yyyy`, and `dd-MM-yyyy`. For example, November 4, 2026 becomes `"20261104"` with `yyyyMMdd`. Uppercase `MM` means month. The browser controls the picker's visual date display; this setting controls the value sent to the backend.
619
+
620
+ The choice is saved in DEFJSON using the existing parameter mappings:
621
+
622
+ ```json
623
+ {
624
+ "parameterMappings": {
625
+ "@chrFromDate": "{{fromDate | date:yyyyMMdd}}",
626
+ "@chrToDate": "{{period.to | date:yyyyMMdd}}"
627
+ }
628
+ }
629
+ ```
630
+
631
+ Existing `{{fromDate}}` bindings retain their original values. Date formatting runs in the shared resolver for canvas, preview, runtime and dependent lookups without changing the entered form values. Fixed values remain literal values.
632
+
633
+ Grid row selection defaults to enabled with multiple-row selection, row checkboxes and a select-all header. Set `grid.options.selectable: false` to disable selection, or `checkboxSelection: false` to keep row-click selection without checkboxes. Explicit settings on saved reports are preserved.
634
+
635
+ ## Procedure execution arguments
636
+
637
+ Stored procedures receive one argument per mapped name, without a leading `@`. Saved mapping keys such as `@chrFromDate` remain supported. Equal aliases are collapsed case-insensitively; conflicting values fail before the request is sent.
638
+
639
+ Canvas fields are inputs to mappings, so unrelated field names are excluded from procedure arguments. Session context remains separate in headers / `sessionContext`; map a session value explicitly when a procedure needs it, for example `"@chrCompUnitId": "{{session.companyId}}"`.
640
+
641
+ Reports can explicitly supply additional arguments using a data source's `parameterKeys`. Older reports without mappings may use declared report parameters or a component's `binding.parameterKey`. An empty mapping object sends no implicit canvas arguments. Date formatting and zero/false values are preserved.
642
+
643
+ ## Dropdown values used by grid parameters
644
+
645
+ A dropdown separates its displayed label from its submitted value. For lookup rows such as `{ "CODE": 101, "NAME": "Main" }`, configure the dropdown's **Value Field** as `CODE` and **Display Field** as `NAME`. Selecting **Main** supplies `101`. For static options, use `{ "key": 101, "label": "Main" }`.
646
+
647
+ In **Grid ? Procedure Parameters ? Field**, select that canvas dropdown. A dropdown with field key `unitField` binds the procedure argument using `"chrUnitId": "{{unitField}}"`; execution sends `{ "chrUnitId": 101 }`. The Field card identifies the value column sent and the display-label column. To send a different column, change the dropdown's Value Field.
648
+
649
+ The user's current selection is read when executing; it is not a fixed default copied from the designer. Numeric option values remain numeric, and string values such as `"00101"` retain leading zeros. An unselected linked field blocks execution with a missing-filter message. Editing a binding replaces stale aliases for that same parameter.
650
+
651
+ ## Explicit session sources
652
+
653
+ Session values come only from a configured `session` / `sessionProvider`, explicit session-context DI tokens, an inherited application session, or manual session-service setters. The library does not inspect your application's localStorage or sessionStorage to discover login/company/branch values.
654
+
655
+ Without any configured session source, the context is empty and no company/branch session headers are added. Unavailable `{{session.companyId}}` mappings in saved reports are omitted from execution and lookup arguments; the parameter card explains how to configure a session or replace the binding with Field / Fixed. If the stored procedure requires that argument, provide it explicitly.
656
+
657
+ Use `autoParameter: false` to disable automatic session bindings. Explicit saved mappings and manually entered fixed values remain intentional configuration. A page inherits an explicitly configured application session when its local session is omitted; set `session: {}` on that page to isolate it from the inherited session.
658
+
659
+ The designer header defines its own compact control sizing and system-font fallback, so generic host button rules and inherited page fonts do not determine its layout. Override `--rpt-font-family` on the designer container to intentionally change its font. Default theme font-size tokens use pixels to remain consistent when the host changes its root font size; browser zoom remains supported.
@@ -79,4 +79,4 @@ export function normalizeBwaysConfig(config) {
79
79
  function cleanUrl(url) {
80
80
  return url.trim().replace(/\/+$/, '');
81
81
  }
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYndheXMtcmVwb3J0LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvY29uZmlnL2J3YXlzLXJlcG9ydC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFnQ3ZFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQW9DO0lBQ25FLFVBQVUsRUFBRSxPQUFPO0lBQ25CLGFBQWEsRUFBRSxRQUFRO0lBQ3ZCLGFBQWEsRUFBRSxTQUFTO0lBQ3hCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUM7QUE0TEY7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE1BQXlCO0lBQzVELG1FQUFtRTtJQUNuRSxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsQ0FBVSxFQUFFLENBQUM7UUFDcEksSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzRixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsR0FBRywwQ0FBMEMsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLG9CQUFvQixDQUFVLEVBQUUsQ0FBQztRQUNyRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBRSxJQUFJLENBQUMsQ0FBQztZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsR0FBRyxHQUFHLDhCQUE4QixDQUFDLENBQUM7SUFDL0ksQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLGlCQUFpQixLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2hJLElBQUksQ0FBQztZQUFDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssTUFBTSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQUMsQ0FBQztRQUN4SixNQUFNLENBQUM7WUFBQyxPQUFPLElBQUksQ0FBQztRQUFDLENBQUM7SUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFGQUFxRixDQUFDLENBQUM7SUFFNUcsbUNBQW1DO0lBQ25DLElBQUksaUJBQWlCLEdBQW9CLElBQUksQ0FBQztJQUM5QyxJQUFJLE1BQU0sQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEQsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNyRCxNQUFNLFFBQVEsR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNoRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxDQUFDLElBQUksQ0FDViw4Q0FBOEMsUUFBUSxLQUFLO29CQUMzRCxrQkFBa0IsTUFBTSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsRSxDQUFDO2dCQUNGLE9BQU8sUUFBUSxDQUFDLENBQUMsd0NBQXdDO1lBQzNELENBQUM7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUV2RCxNQUFNLGNBQWMsR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLElBQUksRUFBRTtRQUNsRCxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7UUFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUM5QyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN0RSxDQUFDLENBQUMsSUFBSSxDQUFDO0lBRVQsT0FBTztRQUNMLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2hFLGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzVFLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQy9FLGNBQWM7UUFDZCxlQUFlO1FBQ2YsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDaEYsWUFBWSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBRTNFLGlCQUFpQjtRQUNqQixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsS0FBSyxLQUFLLEVBQUUsZUFBZTtRQUM5RCxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxTQUFTO1FBQ2hELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUk7UUFDL0IsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlLElBQUksSUFBSTtRQUUvQyxhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJO1FBQ2xDLGNBQWMsRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUk7UUFFcEMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlLElBQUksRUFBRTtRQUM3QyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsSUFBSSxZQUFZO1FBQzdDLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZSxJQUFJLE1BQU07UUFDakQsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtRQUM3QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCLElBQUksRUFBRTtLQUNsRCxDQUFDO0FBQ0osQ0FBQztBQUVELHlDQUF5QztBQUN6QyxTQUFTLFFBQVEsQ0FBQyxHQUFXO0lBQzNCLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc29sdmVSZXBvcnRzRW5kcG9pbnQgfSBmcm9tICcuLi91dGlscy9yZXBvcnQtZW5kcG9pbnQudXRpbCc7XG4vKipcbiAqIFNpbXBsaWZpZWQgY29uZmlndXJhdGlvbiBmb3IgYndheXMtcmVwb3J0LlxuICpcbiAqIFRoaXMgaXMgdGhlIGRldmVsb3Blci1mYWNpbmcgY29uZmlnIG9iamVjdCB0aGF0IG1ha2VzIGludGVncmF0aW9uXG4gKiBhcyBzaW1wbGUgYXMgM+KAkzQgZW5kcG9pbnQgVVJMcyArIG9wdGlvbmFsIG92ZXJyaWRlcy5cbiAqIFRoZSBub3JtYWxpemVyIGNvbnZlcnRzIHRoaXMgaW50byB0aGUgaW50ZXJuYWwgYFJlcG9ydGluZ0NvbmZpZ2BcbiAqIHBsdXMgYWRhcHRlciB3aXJpbmcgZGVjaXNpb25zLlxuICovXG5cbmltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlc3Npb25Db250ZXh0UHJvdmlkZXIsIFNlc3Npb25Db250ZXh0U291cmNlIH0gZnJvbSAnLi4vdG9rZW5zL3Nlc3Npb24tY29udGV4dC50b2tlbic7XG5pbXBvcnQgeyBSZXBvcnRBcGlFbmRwb2ludERlZmluaXRpb24gfSBmcm9tICcuLi9tb2RlbHMvcmVwb3J0LWFwaS1lbmRwb2ludC5tb2RlbCc7XG5cbi8qKlxuICogUGFsZXR0ZSBjb21wb25lbnQgY2F0ZWdvcnkgbmFtZXMgdGhlIGRldmVsb3BlciBjYW4gdXNlXG4gKiB3aGVuIHJlc3RyaWN0aW5nIHRoZSBkZXNpZ25lciBjb21wb25lbnQgcGFsZXR0ZS5cbiAqXG4gKiBNYXBzIHRvIGludGVybmFsIHJlZ2lzdHJ5IGNhdGVnb3J5IElEczpcbiAqIC0gYGZvcm1JbnB1dHNgICAgIOKGkiBgaW5wdXRgXG4gKiAtIGBhY3Rpb25CdXR0b25zYCDihpIgYGFjdGlvbmBcbiAqIC0gYGRpc3BsYXlMYWJlbHNgIOKGkiBgZGlzcGxheWBcbiAqIC0gYGRhdGFMb29rdXBzYCAgIOKGkiBgZGF0YWBcbiAqIC0gYGxheW91dGAgICAgICAgIOKGkiBgbGF5b3V0YFxuICovXG5leHBvcnQgdHlwZSBQYWxldHRlQ2F0ZWdvcnkgPVxuICB8ICdmb3JtSW5wdXRzJ1xuICB8ICdhY3Rpb25CdXR0b25zJ1xuICB8ICdkaXNwbGF5TGFiZWxzJ1xuICB8ICdkYXRhTG9va3VwcydcbiAgfCAnbGF5b3V0JztcblxuLyoqXG4gKiBNYXBwaW5nIGZyb20gZnJpZW5kbHkgcGFsZXR0ZSBjYXRlZ29yeSBuYW1lcyB0byBpbnRlcm5hbCBjYXRlZ29yeSBJRHMuXG4gKi9cbmV4cG9ydCBjb25zdCBQQUxFVFRFX0NBVEVHT1JZX01BUDogUmVjb3JkPFBhbGV0dGVDYXRlZ29yeSwgc3RyaW5nPiA9IHtcbiAgZm9ybUlucHV0czogJ2lucHV0JyxcbiAgYWN0aW9uQnV0dG9uczogJ2FjdGlvbicsXG4gIGRpc3BsYXlMYWJlbHM6ICdkaXNwbGF5JyxcbiAgZGF0YUxvb2t1cHM6ICdkYXRhJyxcbiAgbGF5b3V0OiAnbGF5b3V0Jyxcbn07XG5cbi8qKlxuICogU2ltcGxpZmllZCwgZGV2ZWxvcGVyLWZhY2luZyBjb25maWd1cmF0aW9uIGZvciBid2F5cy1yZXBvcnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlcG9ydENvbmZpZzogQndheXNSZXBvcnRDb25maWcgPSB7XG4gKiAgIHNwRW5kcG9pbnQ6ICAgICAgJy9hcGkvcmVwb3J0aW5nL3Byb2NlZHVyZXMnLFxuICogICB0YWJsZXNFbmRwb2ludDogICcvYXBpL3JlcG9ydGluZy90YWJsZXMnLFxuICogICBleGVjdXRlRW5kcG9pbnQ6ICcvYXBpL3JlcG9ydGluZy9leGVjdXRlJyxcbiAqICAgcmVwb3J0c0VuZHBvaW50OiAnL2FwaS9yZXBvcnRpbmcvcmVwb3J0cycsXG4gKiAgIGNvbXBvbmVudHM6IFsnZm9ybUlucHV0cycsICdhY3Rpb25CdXR0b25zJywgJ2Rpc3BsYXlMYWJlbHMnXSxcbiAqICAgYXV0b1BhcmFtZXRlcjogdHJ1ZSxcbiAqICAgc2Vzc2lvbjogKCkgPT4gaW5qZWN0KEF1dGhTZXJ2aWNlKS5zZXNzaW9uKCksXG4gKiAgIHJvdXRlQmFzZTogJ3JlcG9ydHMnLFxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ3YXlzUmVwb3J0Q29uZmlnIHtcbiAgLy8g4pSA4pSA4pSAIEJhY2tlbmQgZW5kcG9pbnRzICh0aGUgM+KAkzQgZW5kcG9pbnQgY29udHJhY3QpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBHRVQgZW5kcG9pbnQgcmV0dXJuaW5nIHRoZSBsaXN0IG9mIHN0b3JlZCBwcm9jZWR1cmVzIHdpdGggdGhlaXIgcGFyYW1ldGVycy5cbiAgICogUmVzcG9uc2U6IGBbeyBuYW1lLCBzY2hlbWEsIHBhcmFtZXRlcnM6IFt7IG5hbWUsIHNxbFR5cGUsIHJlcXVpcmVkLCBkZWZhdWx0VmFsdWU/IH1dIH1dYFxuICAgKi9cbiAgc3BFbmRwb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogR0VUIGVuZHBvaW50IHJldHVybmluZyB0aGUgbGlzdCBvZiB0YWJsZXMvdmlld3Mgd2l0aCB0aGVpciBjb2x1bW5zLlxuICAgKiBSZXNwb25zZTogYFt7IG5hbWUsIHNjaGVtYSwgdHlwZTogJ3RhYmxlJ3wndmlldycsIGNvbHVtbnM6IFt7IG5hbWUsIHNxbFR5cGUgfV0gfV1gXG4gICAqL1xuICB0YWJsZXNFbmRwb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogUE9TVCBlbmRwb2ludCB0aGF0IHJ1bnMgYSBzdG9yZWQgcHJvY2VkdXJlIG9yIHRhYmxlIHF1ZXJ5IGFuZCByZXR1cm5zIHJvd3MuXG4gICAqIEJvZHk6IGB7IGtpbmQ6ICdwcm9jZWR1cmUnfCd0YWJsZScsIG5hbWUsIHNjaGVtYSwgcGFyYW1ldGVycywgY29sdW1ucz8sIHRvcD8gfWBcbiAgICogUmVzcG9uc2U6IGByb3dzW11gXG4gICAqL1xuICBleGVjdXRlRW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIFBPU1QgZW5kcG9pbnQgZm9yIGZldGNoaW5nIGRyb3Bkb3duIG1hc3RlciBkYXRhIGFuZCBsb29rdXAgb3B0aW9ucy5cbiAgICogRGVmYXVsdHMgdG8gcmVwbGFjaW5nIGAvZXhlY3V0ZWAgd2l0aCBgL2xvb2t1cGAgaWYgb21pdHRlZC5cbiAgICovXG4gIGxvb2t1cEVuZHBvaW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBDUlVEIGVuZHBvaW50IGZvciBzYXZpbmcvbG9hZGluZyByZXBvcnQgcGFnZSBkZWZpbml0aW9ucy5cbiAgICogV2hlbiBvbWl0dGVkLCB1c2VzIHRoZSByZXBvcnRpbmcgc2VydmljZSBiYXNlIGluZmVycmVkIGZyb20gdGhlIGNvbmZpZ3VyZWQgZW5kcG9pbnRzLlxuICAgKiBEZWZhdWx0cyB0byAvYXBpL3JlcG9ydGluZy9yZXBvcnRzOyB0aGUgYmFja2VuZCBzdG9yZXMgZGVmaW5pdGlvbnMgaW4gZGJvLkNORlJFUE9SVERFRi5cbiAgICogLSBHRVQgICAg4oaSIGxpc3Qgc2F2ZWQgcmVwb3J0c1xuICAgKiAtIEdFVCAvOmlkIOKGkiBsb2FkIGEgc3BlY2lmaWMgcmVwb3J0XG4gICAqIC0gUE9TVCAgIOKGkiBzYXZlIGEgbmV3IG9yIHVwZGF0ZWQgcmVwb3J0XG4gICAqIC0gREVMRVRFIC86aWQg4oaSIGRlbGV0ZSBhIHJlcG9ydFxuICAgKi9cbiAgcmVwb3J0c0VuZHBvaW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBHRVQgZW5kcG9pbnQgcmV0dXJuaW5nIHRoZSBjYXRhbG9nIG9mIHJlZ2lzdGVyZWQgUkVTVCBBUElzLlxuICAgKiBSZXNwb25zZTogUmVwb3J0QXBpRW5kcG9pbnREZWZpbml0aW9uW11cbiAgICovXG4gIGFwaXNFbmRwb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgc3RhdGljL2luLW1lbW9yeSBBUEkgZW5kcG9pbnRzIHJlZ2lzdGVyZWQgZGlyZWN0bHkgaW4gdGhlIGhvc3QgYXBwbGljYXRpb24uXG4gICAqIE1lcmdlZCB3aXRoIGJhY2tlbmQtZGlzY292ZXJlZCBBUElzIGluIHRoZSBWaXN1YWwgRGVzaWduZXIuXG4gICAqL1xuICBhcGlFbmRwb2ludHM/OiBSZXBvcnRBcGlFbmRwb2ludERlZmluaXRpb25bXTtcblxuICAvLyDilIDilIDilIAgRGVzaWduZXIgb3B0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQ29tcG9uZW50IHBhbGV0dGUgZ3JvdXBzIHRvIHNob3cgaW4gdGhlIGRlc2lnbmVyLlxuICAgKiBEZWZhdWx0cyB0byBhbGwgZ3JvdXBzIHdoZW4gbm90IHNwZWNpZmllZC5cbiAgICpcbiAgICogQGV4YW1wbGUgWydmb3JtSW5wdXRzJywgJ2FjdGlvbkJ1dHRvbnMnLCAnZGlzcGxheUxhYmVscyddXG4gICAqL1xuICBjb21wb25lbnRzPzogUGFsZXR0ZUNhdGVnb3J5W107XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgc3RvcmVkIHByb2NlZHVyZSBwYXJhbWV0ZXJzIGxpa2UgYEBCcmFuY2hJZGAsIGBAQ29tcGFueUlkYFxuICAgKiBhcmUgYXV0b21hdGljYWxseSBib3VuZCBmcm9tIHRoZSBzZXNzaW9uIGNvbnRleHQuXG4gICAqIFJlcXVpcmVzIGBzZXNzaW9uYCB0byBiZSBwcm92aWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b1BhcmFtZXRlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNlc3Npb24gY29udGV4dCBwcm92aWRlciBmb3IgYXV0by1wYXJhbWV0ZXIgYmluZGluZy5cbiAgICogQ2FuIGJlIGEgc2VydmljZSBjbGFzcyBpbXBsZW1lbnRpbmcgYFNlc3Npb25Db250ZXh0UHJvdmlkZXJgLFxuICAgKiBhIHBsYWluIG9iamVjdCwgYSBmYWN0b3J5IGZ1bmN0aW9uLCBhbiBPYnNlcnZhYmxlLCBvciBhIFNpZ25hbC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogc2Vzc2lvbjogUGxheWdyb3VuZFNlc3Npb25TZXJ2aWNlXG4gICAqIHNlc3Npb246ICgpID0+IGluamVjdChBdXRoU2VydmljZSkuc2Vzc2lvbigpXG4gICAqIHNlc3Npb246IHsgYnJhbmNoSWQ6IDEsIGNvbXBhbnlJZDogMTAgfVxuICAgKi9cbiAgc2Vzc2lvbj86IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBTZXNzaW9uQ29udGV4dFNvdXJjZSB8ICgoKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHNlcnZpY2UgY2xhc3MgaW1wbGVtZW50aW5nIGBTZXNzaW9uQ29udGV4dFByb3ZpZGVyYC5cbiAgICogRXF1aXZhbGVudCB0byBgc2Vzc2lvbjogTXlTZXNzaW9uU2VydmljZWAuXG4gICAqL1xuICBzZXNzaW9uUHJvdmlkZXI/OiBUeXBlPFNlc3Npb25Db250ZXh0UHJvdmlkZXI+O1xuXG4gIC8vIOKUgOKUgOKUgCBMaXZlIHBhZ2Ugb3B0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQmFzZSBwYXRoIGZvciBsaXZlIHJlcG9ydCBwYWdlcy5cbiAgICogR2VuZXJhdGVkIHJlcG9ydCBwYWdlcyBvcGVuIGF0IGAvPHJvdXRlQmFzZT4vPHNsdWc+YC5cbiAgICpcbiAgICogQGRlZmF1bHQgJ3JlcG9ydHMnXG4gICAqL1xuICByb3V0ZUJhc2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIEFuZ3VsYXIgY29tcG9uZW50IGZvciByZW5kZXJpbmcgZGF0YSBncmlkcy5cbiAgICogUGFzcyB5b3VyIGdyaWQgY29tcG9uZW50IChCV2F5cy1ncmlkLCBBRyBHcmlkIHdyYXBwZXIsIGV0Yy4pLlxuICAgKi9cbiAgZ3JpZD86IFR5cGU8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIEFuZ3VsYXIgY29tcG9uZW50IGZvciByZW5kZXJpbmcgY2hhcnRzLlxuICAgKi9cbiAgY2hhcnQ/OiBUeXBlPHVua25vd24+O1xuXG4gIC8vIOKUgOKUgOKUgCBHZW5lcmFsIG9wdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIERlZmF1bHQgcGFnZSBzaXplIGZvciBncmlkIHJlc3VsdHMuIEBkZWZhdWx0IDI1ICovXG4gIGRlZmF1bHRQYWdlU2l6ZT86IG51bWJlcjtcblxuICAvKiogRGF0ZSBmb3JtYXQgc3RyaW5nIHVzZWQgYWNyb3NzIHRoZSBsaWJyYXJ5LiBAZGVmYXVsdCAnZGQvTU0veXl5eScgKi9cbiAgZGF0ZUZvcm1hdD86IHN0cmluZztcblxuICAvKiogVGltZW91dCBpbiBtcyBmb3IgbG9va3VwL2V4ZWN1dGUgcXVlcmllcy4gQGRlZmF1bHQgMzAwMDAwICovXG4gIGxvb2t1cFRpbWVvdXRNcz86IG51bWJlcjtcblxuICAvKiogTWF4aW11bSBkdXJhdGlvbiBvZiBhbiBleGVjdXRpb24gcmVxdWVzdCAoZGVmYXVsdHMgdG8gbG9va3VwVGltZW91dE1zKS4gKi9cbiAgZXhlY3V0aW9uVGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogRXhhY3QgSFRUUChTKSBvcmlnaW5zIHBlcm1pdHRlZCB0byByZWNlaXZlIEFQSSBjcmVkZW50aWFscyBhbmQgY3VzdG9tIGhlYWRlcnMuIFNhbWUtb3JpZ2luIGlzIHRydXN0ZWQgYnkgZGVmYXVsdC4gKi9cbiAgdHJ1c3RlZEFwaU9yaWdpbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Ygbm9ybWFsaXppbmcgYSBgQndheXNSZXBvcnRDb25maWdgIGZvciBpbnRlcm5hbCB1c2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9ybWFsaXplZEJ3YXlzQ29uZmlnIHtcbiAgLyoqIEVuZHBvaW50IFVSTHMgKi9cbiAgc3BFbmRwb2ludDogc3RyaW5nO1xuICB0YWJsZXNFbmRwb2ludDogc3RyaW5nO1xuICBleGVjdXRlRW5kcG9pbnQ6IHN0cmluZztcbiAgbG9va3VwRW5kcG9pbnQ6IHN0cmluZyB8IG51bGw7XG4gIHJlcG9ydHNFbmRwb2ludDogc3RyaW5nIHwgbnVsbDtcbiAgYXBpc0VuZHBvaW50OiBzdHJpbmcgfCBudWxsO1xuICBhcGlFbmRwb2ludHM6IFJlcG9ydEFwaUVuZHBvaW50RGVmaW5pdGlvbltdO1xuXG4gIC8qKiBSZXNvbHZlZCBpbnRlcm5hbCBjYXRlZ29yeSBJRHMgKGUuZy4gWydpbnB1dCcsICdhY3Rpb24nLCAnZGlzcGxheSddKSAqL1xuICBhbGxvd2VkQ2F0ZWdvcmllczogc3RyaW5nW10gfCBudWxsO1xuXG4gIC8qKiBXaGV0aGVyIGF1dG8tcGFyYW1ldGVyIGJpbmRpbmcgaXMgZW5hYmxlZCAqL1xuICBhdXRvUGFyYW1ldGVyOiBib29sZWFuO1xuXG4gIC8qKiBSb3V0ZSBiYXNlIHBhdGggKi9cbiAgcm91dGVCYXNlOiBzdHJpbmc7XG5cbiAgLyoqIFNlc3Npb24gc291cmNlICovXG4gIHNlc3Npb246IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBTZXNzaW9uQ29udGV4dFNvdXJjZSB8ICgoKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfCBudWxsO1xuICBzZXNzaW9uUHJvdmlkZXI6IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBudWxsO1xuXG4gIC8qKiBHcmlkIGNvbXBvbmVudCAqL1xuICBncmlkQ29tcG9uZW50OiBUeXBlPHVua25vd24+IHwgbnVsbDtcblxuICAvKiogQ2hhcnQgY29tcG9uZW50ICovXG4gIGNoYXJ0Q29tcG9uZW50OiBUeXBlPHVua25vd24+IHwgbnVsbDtcblxuICAvKiogR2VuZXJhbCBjb25maWcgdmFsdWVzICovXG4gIGRlZmF1bHRQYWdlU2l6ZTogbnVtYmVyO1xuICBkYXRlRm9ybWF0OiBzdHJpbmc7XG4gIGxvb2t1cFRpbWVvdXRNczogbnVtYmVyO1xuXG4gIC8qKiBNYXhpbXVtIGR1cmF0aW9uIG9mIGFuIGV4ZWN1dGlvbiByZXF1ZXN0IChkZWZhdWx0cyB0byBsb29rdXBUaW1lb3V0TXMpLiAqL1xuICBleGVjdXRpb25UaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBFeGFjdCBIVFRQKFMpIG9yaWdpbnMgcGVybWl0dGVkIHRvIHJlY2VpdmUgQVBJIGNyZWRlbnRpYWxzIGFuZCBjdXN0b20gaGVhZGVycy4gU2FtZS1vcmlnaW4gaXMgdHJ1c3RlZCBieSBkZWZhdWx0LiAqL1xuICB0cnVzdGVkQXBpT3JpZ2lucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBgQndheXNSZXBvcnRDb25maWdgIGludG8gdGhlIGludGVybmFsIGZvcm1hdC5cbiAqIFZhbGlkYXRlcyBzdXBwbGllZCBlbmRwb2ludHMgYW5kIG1hcHMgZnJpZW5kbHkgbmFtZXMgdG8gaW50ZXJuYWwgSURzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQndheXNDb25maWcoY29uZmlnOiBCd2F5c1JlcG9ydENvbmZpZyk6IE5vcm1hbGl6ZWRCd2F5c0NvbmZpZyB7XG4gIC8vIENhcGFiaWxpdGllcyBhcmUgb3B0aW9uYWw7IHZhbGlkYXRlIG9ubHkgVVJMcyB0aGUgaG9zdCBzdXBwbGllcy5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydzcEVuZHBvaW50JywgJ3RhYmxlc0VuZHBvaW50JywgJ2V4ZWN1dGVFbmRwb2ludCcsICdsb29rdXBFbmRwb2ludCcsICdyZXBvcnRzRW5kcG9pbnQnLCAnYXBpc0VuZHBvaW50J10gYXMgY29uc3QpIHtcbiAgICBpZiAoY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGNvbmZpZ1trZXldICE9PSAnc3RyaW5nJyB8fCAhY29uZmlnW2tleV0/LnRyaW0oKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW2J3YXlzLXJlcG9ydF0gXCInICsga2V5ICsgJ1wiIG11c3QgYmUgYSBub24tZW1wdHkgVVJMIHdoZW4gc3VwcGxpZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydsb29rdXBUaW1lb3V0TXMnLCAnZXhlY3V0aW9uVGltZW91dE1zJ10gYXMgY29uc3QpIHtcbiAgICBpZiAoY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25maWdba2V5XSkgfHwgY29uZmlnW2tleV0hIDw9IDApKSB0aHJvdyBuZXcgRXJyb3Ioa2V5ICsgJyBtdXN0IGJlIGEgcG9zaXRpdmUgdGltZW91dC4nKTtcbiAgfVxuICBpZiAoY29uZmlnLnRydXN0ZWRBcGlPcmlnaW5zICE9PSB1bmRlZmluZWQgJiYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy50cnVzdGVkQXBpT3JpZ2lucykgfHwgY29uZmlnLnRydXN0ZWRBcGlPcmlnaW5zLnNvbWUob3JpZ2luID0+IHtcbiAgICB0cnkgeyBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKG9yaWdpbik7IHJldHVybiAhL15odHRwcz86JC8udGVzdChwYXJzZWQucHJvdG9jb2wpIHx8IHBhcnNlZC5vcmlnaW4gIT09IG9yaWdpbiB8fCAhIXBhcnNlZC51c2VybmFtZSB8fCAhIXBhcnNlZC5wYXNzd29yZDsgfVxuICAgIGNhdGNoIHsgcmV0dXJuIHRydWU7IH1cbiAgfSkpKSB0aHJvdyBuZXcgRXJyb3IoJ3RydXN0ZWRBcGlPcmlnaW5zIG11c3QgY29udGFpbiBleGFjdCBIVFRQKFMpIG9yaWdpbnMsIHdpdGhvdXQgcGF0aHMgb3IgY3JlZGVudGlhbHMuJyk7XG5cbiAgLy8gTWFwIGNvbXBvbmVudCBwYWxldHRlIGNhdGVnb3JpZXNcbiAgbGV0IGFsbG93ZWRDYXRlZ29yaWVzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuICBpZiAoY29uZmlnLmNvbXBvbmVudHMgJiYgY29uZmlnLmNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xuICAgIGFsbG93ZWRDYXRlZ29yaWVzID0gY29uZmlnLmNvbXBvbmVudHMubWFwKChmcmllbmRseSkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJuYWwgPSBQQUxFVFRFX0NBVEVHT1JZX01BUFtmcmllbmRseV07XG4gICAgICBpZiAoIWludGVybmFsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW2J3YXlzLXJlcG9ydF0gVW5rbm93biBjb21wb25lbnQgY2F0ZWdvcnkgXCIke2ZyaWVuZGx5fVwiLiBgICtcbiAgICAgICAgICBgVmFsaWQgb3B0aW9uczogJHtPYmplY3Qua2V5cyhQQUxFVFRFX0NBVEVHT1JZX01BUCkuam9pbignLCAnKX0uYFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZnJpZW5kbHk7IC8vIFBhc3MgdGhyb3VnaCB1bmtub3duIGNhdGVnb3JpZXMgYXMtaXNcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnRlcm5hbDtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlcG9ydHNFbmRwb2ludCA9IHJlc29sdmVSZXBvcnRzRW5kcG9pbnQoY29uZmlnKTtcblxuICBjb25zdCBsb29rdXBFbmRwb2ludCA9IGNvbmZpZy5sb29rdXBFbmRwb2ludD8udHJpbSgpXG4gICAgPyBjbGVhblVybChjb25maWcubG9va3VwRW5kcG9pbnQpXG4gICAgOiBjb25maWcuZXhlY3V0ZUVuZHBvaW50Py5pbmNsdWRlcygnL2V4ZWN1dGUnKVxuICAgID8gY2xlYW5VcmwoY29uZmlnLmV4ZWN1dGVFbmRwb2ludC5yZXBsYWNlKC9cXC9leGVjdXRlXFwvPyQvLCAnL2xvb2t1cCcpKVxuICAgIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIHNwRW5kcG9pbnQ6IGNvbmZpZy5zcEVuZHBvaW50ID8gY2xlYW5VcmwoY29uZmlnLnNwRW5kcG9pbnQpIDogJycsXG4gICAgdGFibGVzRW5kcG9pbnQ6IGNvbmZpZy50YWJsZXNFbmRwb2ludCA/IGNsZWFuVXJsKGNvbmZpZy50YWJsZXNFbmRwb2ludCkgOiAnJyxcbiAgICBleGVjdXRlRW5kcG9pbnQ6IGNvbmZpZy5leGVjdXRlRW5kcG9pbnQgPyBjbGVhblVybChjb25maWcuZXhlY3V0ZUVuZHBvaW50KSA6ICcnLFxuICAgIGxvb2t1cEVuZHBvaW50LFxuICAgIHJlcG9ydHNFbmRwb2ludCxcbiAgICBhcGlzRW5kcG9pbnQ6IGNvbmZpZy5hcGlzRW5kcG9pbnQ/LnRyaW0oKSA/IGNsZWFuVXJsKGNvbmZpZy5hcGlzRW5kcG9pbnQpIDogbnVsbCxcbiAgICBhcGlFbmRwb2ludHM6IEFycmF5LmlzQXJyYXkoY29uZmlnLmFwaUVuZHBvaW50cykgPyBjb25maWcuYXBpRW5kcG9pbnRzIDogW10sXG5cbiAgICBhbGxvd2VkQ2F0ZWdvcmllcyxcbiAgICBhdXRvUGFyYW1ldGVyOiBjb25maWcuYXV0b1BhcmFtZXRlciAhPT0gZmFsc2UsIC8vIGRlZmF1bHQgdHJ1ZVxuICAgIHJvdXRlQmFzZTogY29uZmlnLnJvdXRlQmFzZT8udHJpbSgpIHx8ICdyZXBvcnRzJyxcbiAgICBzZXNzaW9uOiBjb25maWcuc2Vzc2lvbiA/PyBudWxsLFxuICAgIHNlc3Npb25Qcm92aWRlcjogY29uZmlnLnNlc3Npb25Qcm92aWRlciA/PyBudWxsLFxuXG4gICAgZ3JpZENvbXBvbmVudDogY29uZmlnLmdyaWQgPz8gbnVsbCxcbiAgICBjaGFydENvbXBvbmVudDogY29uZmlnLmNoYXJ0ID8/IG51bGwsXG5cbiAgICBkZWZhdWx0UGFnZVNpemU6IGNvbmZpZy5kZWZhdWx0UGFnZVNpemUgPz8gMjUsXG4gICAgZGF0ZUZvcm1hdDogY29uZmlnLmRhdGVGb3JtYXQgPz8gJ2RkL01NL3l5eXknLFxuICAgIGxvb2t1cFRpbWVvdXRNczogY29uZmlnLmxvb2t1cFRpbWVvdXRNcyA/PyAzMDAwMDAsXG4gICAgZXhlY3V0aW9uVGltZW91dE1zOiBjb25maWcuZXhlY3V0aW9uVGltZW91dE1zLFxuICAgIHRydXN0ZWRBcGlPcmlnaW5zOiBjb25maWcudHJ1c3RlZEFwaU9yaWdpbnMgPz8gW10sXG4gIH07XG59XG5cbi8qKiBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIGEgVVJMICovXG5mdW5jdGlvbiBjbGVhblVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB1cmwudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgJycpO1xufVxuIl19
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYndheXMtcmVwb3J0LWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvY29uZmlnL2J3YXlzLXJlcG9ydC1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFnQ3ZFOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQW9DO0lBQ25FLFVBQVUsRUFBRSxPQUFPO0lBQ25CLGFBQWEsRUFBRSxRQUFRO0lBQ3ZCLGFBQWEsRUFBRSxTQUFTO0lBQ3hCLFdBQVcsRUFBRSxNQUFNO0lBQ25CLE1BQU0sRUFBRSxRQUFRO0NBQ2pCLENBQUM7QUErTEY7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLG9CQUFvQixDQUFDLE1BQXlCO0lBQzVELG1FQUFtRTtJQUNuRSxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGlCQUFpQixFQUFFLGNBQWMsQ0FBVSxFQUFFLENBQUM7UUFDcEksSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUMzRixNQUFNLElBQUksS0FBSyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsR0FBRywwQ0FBMEMsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLG9CQUFvQixDQUFVLEVBQUUsQ0FBQztRQUNyRSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxTQUFTLElBQUksQ0FB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LENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7UUFDaEYsWUFBWSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBRTNFLGlCQUFpQjtRQUNqQixhQUFhLEVBQUUsTUFBTSxDQUFDLGFBQWEsS0FBSyxLQUFLLEVBQUUsZUFBZTtRQUM5RCxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsSUFBSSxTQUFTO1FBQ2hELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTyxJQUFJLElBQUk7UUFDL0IsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlLElBQUksSUFBSTtRQUUvQyxhQUFhLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxJQUFJO1FBQ2xDLGNBQWMsRUFBRSxNQUFNLENBQUMsS0FBSyxJQUFJLElBQUk7UUFFcEMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxlQUFlLElBQUksRUFBRTtRQUM3QyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsSUFBSSxZQUFZO1FBQzdDLGVBQWUsRUFBRSxNQUFNLENBQUMsZUFBZSxJQUFJLE1BQU07UUFDakQsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLGtCQUFrQjtRQUM3QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCLElBQUksRUFBRTtLQUNsRCxDQUFDO0FBQ0osQ0FBQztBQUVELHlDQUF5QztBQUN6QyxTQUFTLFFBQVEsQ0FBQyxHQUFXO0lBQzNCLE9BQU8sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDeEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc29sdmVSZXBvcnRzRW5kcG9pbnQgfSBmcm9tICcuLi91dGlscy9yZXBvcnQtZW5kcG9pbnQudXRpbCc7XG4vKipcbiAqIFNpbXBsaWZpZWQgY29uZmlndXJhdGlvbiBmb3IgYndheXMtcmVwb3J0LlxuICpcbiAqIFRoaXMgaXMgdGhlIGRldmVsb3Blci1mYWNpbmcgY29uZmlnIG9iamVjdCB0aGF0IG1ha2VzIGludGVncmF0aW9uXG4gKiBhcyBzaW1wbGUgYXMgM+KAkzQgZW5kcG9pbnQgVVJMcyArIG9wdGlvbmFsIG92ZXJyaWRlcy5cbiAqIFRoZSBub3JtYWxpemVyIGNvbnZlcnRzIHRoaXMgaW50byB0aGUgaW50ZXJuYWwgYFJlcG9ydGluZ0NvbmZpZ2BcbiAqIHBsdXMgYWRhcHRlciB3aXJpbmcgZGVjaXNpb25zLlxuICovXG5cbmltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNlc3Npb25Db250ZXh0UHJvdmlkZXIsIFNlc3Npb25Db250ZXh0U291cmNlIH0gZnJvbSAnLi4vdG9rZW5zL3Nlc3Npb24tY29udGV4dC50b2tlbic7XG5pbXBvcnQgeyBSZXBvcnRBcGlFbmRwb2ludERlZmluaXRpb24gfSBmcm9tICcuLi9tb2RlbHMvcmVwb3J0LWFwaS1lbmRwb2ludC5tb2RlbCc7XG5cbi8qKlxuICogUGFsZXR0ZSBjb21wb25lbnQgY2F0ZWdvcnkgbmFtZXMgdGhlIGRldmVsb3BlciBjYW4gdXNlXG4gKiB3aGVuIHJlc3RyaWN0aW5nIHRoZSBkZXNpZ25lciBjb21wb25lbnQgcGFsZXR0ZS5cbiAqXG4gKiBNYXBzIHRvIGludGVybmFsIHJlZ2lzdHJ5IGNhdGVnb3J5IElEczpcbiAqIC0gYGZvcm1JbnB1dHNgICAgIOKGkiBgaW5wdXRgXG4gKiAtIGBhY3Rpb25CdXR0b25zYCDihpIgYGFjdGlvbmBcbiAqIC0gYGRpc3BsYXlMYWJlbHNgIOKGkiBgZGlzcGxheWBcbiAqIC0gYGRhdGFMb29rdXBzYCAgIOKGkiBgZGF0YWBcbiAqIC0gYGxheW91dGAgICAgICAgIOKGkiBgbGF5b3V0YFxuICovXG5leHBvcnQgdHlwZSBQYWxldHRlQ2F0ZWdvcnkgPVxuICB8ICdmb3JtSW5wdXRzJ1xuICB8ICdhY3Rpb25CdXR0b25zJ1xuICB8ICdkaXNwbGF5TGFiZWxzJ1xuICB8ICdkYXRhTG9va3VwcydcbiAgfCAnbGF5b3V0JztcblxuLyoqXG4gKiBNYXBwaW5nIGZyb20gZnJpZW5kbHkgcGFsZXR0ZSBjYXRlZ29yeSBuYW1lcyB0byBpbnRlcm5hbCBjYXRlZ29yeSBJRHMuXG4gKi9cbmV4cG9ydCBjb25zdCBQQUxFVFRFX0NBVEVHT1JZX01BUDogUmVjb3JkPFBhbGV0dGVDYXRlZ29yeSwgc3RyaW5nPiA9IHtcbiAgZm9ybUlucHV0czogJ2lucHV0JyxcbiAgYWN0aW9uQnV0dG9uczogJ2FjdGlvbicsXG4gIGRpc3BsYXlMYWJlbHM6ICdkaXNwbGF5JyxcbiAgZGF0YUxvb2t1cHM6ICdkYXRhJyxcbiAgbGF5b3V0OiAnbGF5b3V0Jyxcbn07XG5cbi8qKlxuICogU2ltcGxpZmllZCwgZGV2ZWxvcGVyLWZhY2luZyBjb25maWd1cmF0aW9uIGZvciBid2F5cy1yZXBvcnQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlcG9ydENvbmZpZzogQndheXNSZXBvcnRDb25maWcgPSB7XG4gKiAgIHNwRW5kcG9pbnQ6ICAgICAgJy9hcGkvcmVwb3J0aW5nL3Byb2NlZHVyZXMnLFxuICogICB0YWJsZXNFbmRwb2ludDogICcvYXBpL3JlcG9ydGluZy90YWJsZXMnLFxuICogICBleGVjdXRlRW5kcG9pbnQ6ICcvYXBpL3JlcG9ydGluZy9leGVjdXRlJyxcbiAqICAgcmVwb3J0c0VuZHBvaW50OiAnL2FwaS9yZXBvcnRpbmcvcmVwb3J0cycsXG4gKiAgIGNvbXBvbmVudHM6IFsnZm9ybUlucHV0cycsICdhY3Rpb25CdXR0b25zJywgJ2Rpc3BsYXlMYWJlbHMnXSxcbiAqICAgYXV0b1BhcmFtZXRlcjogdHJ1ZSxcbiAqICAgc2Vzc2lvbjogKCkgPT4gaW5qZWN0KEF1dGhTZXJ2aWNlKS5zZXNzaW9uKCksXG4gKiAgIHJvdXRlQmFzZTogJ3JlcG9ydHMnLFxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ3YXlzUmVwb3J0Q29uZmlnIHtcbiAgLy8g4pSA4pSA4pSAIEJhY2tlbmQgZW5kcG9pbnRzICh0aGUgM+KAkzQgZW5kcG9pbnQgY29udHJhY3QpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBHRVQgZW5kcG9pbnQgcmV0dXJuaW5nIHRoZSBsaXN0IG9mIHN0b3JlZCBwcm9jZWR1cmVzIHdpdGggdGhlaXIgcGFyYW1ldGVycy5cbiAgICogUmVzcG9uc2U6IGBbeyBuYW1lLCBzY2hlbWEsIHBhcmFtZXRlcnM6IFt7IG5hbWUsIHNxbFR5cGUsIHJlcXVpcmVkLCBkZWZhdWx0VmFsdWU/IH1dIH1dYFxuICAgKi9cbiAgc3BFbmRwb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogR0VUIGVuZHBvaW50IHJldHVybmluZyB0aGUgbGlzdCBvZiB0YWJsZXMvdmlld3Mgd2l0aCB0aGVpciBjb2x1bW5zLlxuICAgKiBSZXNwb25zZTogYFt7IG5hbWUsIHNjaGVtYSwgdHlwZTogJ3RhYmxlJ3wndmlldycsIGNvbHVtbnM6IFt7IG5hbWUsIHNxbFR5cGUgfV0gfV1gXG4gICAqL1xuICB0YWJsZXNFbmRwb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogUE9TVCBlbmRwb2ludCB0aGF0IHJ1bnMgYSBzdG9yZWQgcHJvY2VkdXJlIG9yIHRhYmxlIHF1ZXJ5IGFuZCByZXR1cm5zIHJvd3MuXG4gICAqIEJvZHk6IGB7IGtpbmQ6ICdwcm9jZWR1cmUnfCd0YWJsZScsIG5hbWUsIHNjaGVtYSwgcGFyYW1ldGVycywgY29sdW1ucz8sIHRvcD8gfWBcbiAgICogUmVzcG9uc2U6IGByb3dzW11gXG4gICAqL1xuICBleGVjdXRlRW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIFBPU1QgZW5kcG9pbnQgZm9yIGZldGNoaW5nIGRyb3Bkb3duIG1hc3RlciBkYXRhIGFuZCBsb29rdXAgb3B0aW9ucy5cbiAgICogRGVmYXVsdHMgdG8gcmVwbGFjaW5nIGAvZXhlY3V0ZWAgd2l0aCBgL2xvb2t1cGAgaWYgb21pdHRlZC5cbiAgICovXG4gIGxvb2t1cEVuZHBvaW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBDUlVEIGVuZHBvaW50IGZvciBzYXZpbmcvbG9hZGluZyByZXBvcnQgcGFnZSBkZWZpbml0aW9ucy5cbiAgICogV2hlbiBvbWl0dGVkLCB1c2VzIHRoZSByZXBvcnRpbmcgc2VydmljZSBiYXNlIGluZmVycmVkIGZyb20gdGhlIGNvbmZpZ3VyZWQgZW5kcG9pbnRzLlxuICAgKiBEZWZhdWx0cyB0byAvYXBpL3JlcG9ydGluZy9yZXBvcnRzOyB0aGUgYmFja2VuZCBzdG9yZXMgZGVmaW5pdGlvbnMgaW4gZGJvLkNORlJFUE9SVERFRi5cbiAgICogLSBHRVQgICAg4oaSIGxpc3Qgc2F2ZWQgcmVwb3J0c1xuICAgKiAtIEdFVCAvOmlkIOKGkiBsb2FkIGEgc3BlY2lmaWMgcmVwb3J0XG4gICAqIC0gUE9TVCAgIOKGkiBzYXZlIGEgbmV3IG9yIHVwZGF0ZWQgcmVwb3J0XG4gICAqIC0gREVMRVRFIC86aWQg4oaSIGRlbGV0ZSBhIHJlcG9ydFxuICAgKi9cbiAgcmVwb3J0c0VuZHBvaW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBHRVQgZW5kcG9pbnQgcmV0dXJuaW5nIHRoZSBjYXRhbG9nIG9mIHJlZ2lzdGVyZWQgUkVTVCBBUElzLlxuICAgKiBSZXNwb25zZTogUmVwb3J0QXBpRW5kcG9pbnREZWZpbml0aW9uW11cbiAgICovXG4gIGFwaXNFbmRwb2ludD86IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgc3RhdGljL2luLW1lbW9yeSBBUEkgZW5kcG9pbnRzIHJlZ2lzdGVyZWQgZGlyZWN0bHkgaW4gdGhlIGhvc3QgYXBwbGljYXRpb24uXG4gICAqIE1lcmdlZCB3aXRoIGJhY2tlbmQtZGlzY292ZXJlZCBBUElzIGluIHRoZSBWaXN1YWwgRGVzaWduZXIuXG4gICAqL1xuICBhcGlFbmRwb2ludHM/OiBSZXBvcnRBcGlFbmRwb2ludERlZmluaXRpb25bXTtcblxuICAvLyDilIDilIDilIAgRGVzaWduZXIgb3B0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQ29tcG9uZW50IHBhbGV0dGUgZ3JvdXBzIHRvIHNob3cgaW4gdGhlIGRlc2lnbmVyLlxuICAgKiBEZWZhdWx0cyB0byBhbGwgZ3JvdXBzIHdoZW4gbm90IHNwZWNpZmllZC5cbiAgICpcbiAgICogQGV4YW1wbGUgWydmb3JtSW5wdXRzJywgJ2FjdGlvbkJ1dHRvbnMnLCAnZGlzcGxheUxhYmVscyddXG4gICAqL1xuICBjb21wb25lbnRzPzogUGFsZXR0ZUNhdGVnb3J5W107XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSwgc3RvcmVkIHByb2NlZHVyZSBwYXJhbWV0ZXJzIGxpa2UgYEBCcmFuY2hJZGAsIGBAQ29tcGFueUlkYFxuICAgKiBhcmUgYXV0b21hdGljYWxseSBib3VuZCBmcm9tIHRoZSBzZXNzaW9uIGNvbnRleHQuXG4gICAqIFJlcXVpcmVzIGBzZXNzaW9uYCB0byBiZSBwcm92aWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b1BhcmFtZXRlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNlc3Npb24gY29udGV4dCBwcm92aWRlciBmb3IgYXV0by1wYXJhbWV0ZXIgYmluZGluZy5cbiAgICogQ2FuIGJlIGEgc2VydmljZSBjbGFzcyBpbXBsZW1lbnRpbmcgYFNlc3Npb25Db250ZXh0UHJvdmlkZXJgLFxuICAgKiBhIHBsYWluIG9iamVjdCwgYSBmYWN0b3J5IGZ1bmN0aW9uLCBhbiBPYnNlcnZhYmxlLCBvciBhIFNpZ25hbC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogQnJvd3NlciBsb2dpbiBzdG9yYWdlIGlzIG5ldmVyIGluc3BlY3RlZCBhdXRvbWF0aWNhbGx5LiBPbWl0dGVkIHBhZ2Ugc2Vzc2lvbnMgaW5oZXJpdFxuICAgKiBleHBsaWNpdGx5IGNvbmZpZ3VyZWQgYXBwbGljYXRpb24gc2Vzc2lvbnM7IHVzZSBzZXNzaW9uOiB7fSB0byBpc29sYXRlIGEgcGFnZS5cbiAgICpcbiAgICogc2Vzc2lvbjogUGxheWdyb3VuZFNlc3Npb25TZXJ2aWNlXG4gICAqIHNlc3Npb246ICgpID0+IGluamVjdChBdXRoU2VydmljZSkuc2Vzc2lvbigpXG4gICAqIHNlc3Npb246IHsgYnJhbmNoSWQ6IDEsIGNvbXBhbnlJZDogMTAgfVxuICAgKi9cbiAgc2Vzc2lvbj86IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBTZXNzaW9uQ29udGV4dFNvdXJjZSB8ICgoKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIHNlcnZpY2UgY2xhc3MgaW1wbGVtZW50aW5nIGBTZXNzaW9uQ29udGV4dFByb3ZpZGVyYC5cbiAgICogRXF1aXZhbGVudCB0byBgc2Vzc2lvbjogTXlTZXNzaW9uU2VydmljZWAuXG4gICAqL1xuICBzZXNzaW9uUHJvdmlkZXI/OiBUeXBlPFNlc3Npb25Db250ZXh0UHJvdmlkZXI+O1xuXG4gIC8vIOKUgOKUgOKUgCBMaXZlIHBhZ2Ugb3B0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogQmFzZSBwYXRoIGZvciBsaXZlIHJlcG9ydCBwYWdlcy5cbiAgICogR2VuZXJhdGVkIHJlcG9ydCBwYWdlcyBvcGVuIGF0IGAvPHJvdXRlQmFzZT4vPHNsdWc+YC5cbiAgICpcbiAgICogQGRlZmF1bHQgJ3JlcG9ydHMnXG4gICAqL1xuICByb3V0ZUJhc2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIEFuZ3VsYXIgY29tcG9uZW50IGZvciByZW5kZXJpbmcgZGF0YSBncmlkcy5cbiAgICogUGFzcyB5b3VyIGdyaWQgY29tcG9uZW50IChCV2F5cy1ncmlkLCBBRyBHcmlkIHdyYXBwZXIsIGV0Yy4pLlxuICAgKi9cbiAgZ3JpZD86IFR5cGU8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIEFuZ3VsYXIgY29tcG9uZW50IGZvciByZW5kZXJpbmcgY2hhcnRzLlxuICAgKi9cbiAgY2hhcnQ/OiBUeXBlPHVua25vd24+O1xuXG4gIC8vIOKUgOKUgOKUgCBHZW5lcmFsIG9wdGlvbnMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgLyoqIERlZmF1bHQgcGFnZSBzaXplIGZvciBncmlkIHJlc3VsdHMuIEBkZWZhdWx0IDI1ICovXG4gIGRlZmF1bHRQYWdlU2l6ZT86IG51bWJlcjtcblxuICAvKiogRGF0ZSBmb3JtYXQgc3RyaW5nIHVzZWQgYWNyb3NzIHRoZSBsaWJyYXJ5LiBAZGVmYXVsdCAnZGQvTU0veXl5eScgKi9cbiAgZGF0ZUZvcm1hdD86IHN0cmluZztcblxuICAvKiogVGltZW91dCBpbiBtcyBmb3IgbG9va3VwL2V4ZWN1dGUgcXVlcmllcy4gQGRlZmF1bHQgMzAwMDAwICovXG4gIGxvb2t1cFRpbWVvdXRNcz86IG51bWJlcjtcblxuICAvKiogTWF4aW11bSBkdXJhdGlvbiBvZiBhbiBleGVjdXRpb24gcmVxdWVzdCAoZGVmYXVsdHMgdG8gbG9va3VwVGltZW91dE1zKS4gKi9cbiAgZXhlY3V0aW9uVGltZW91dE1zPzogbnVtYmVyO1xuICAvKiogRXhhY3QgSFRUUChTKSBvcmlnaW5zIHBlcm1pdHRlZCB0byByZWNlaXZlIEFQSSBjcmVkZW50aWFscyBhbmQgY3VzdG9tIGhlYWRlcnMuIFNhbWUtb3JpZ2luIGlzIHRydXN0ZWQgYnkgZGVmYXVsdC4gKi9cbiAgdHJ1c3RlZEFwaU9yaWdpbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2Ygbm9ybWFsaXppbmcgYSBgQndheXNSZXBvcnRDb25maWdgIGZvciBpbnRlcm5hbCB1c2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTm9ybWFsaXplZEJ3YXlzQ29uZmlnIHtcbiAgLyoqIEVuZHBvaW50IFVSTHMgKi9cbiAgc3BFbmRwb2ludDogc3RyaW5nO1xuICB0YWJsZXNFbmRwb2ludDogc3RyaW5nO1xuICBleGVjdXRlRW5kcG9pbnQ6IHN0cmluZztcbiAgbG9va3VwRW5kcG9pbnQ6IHN0cmluZyB8IG51bGw7XG4gIHJlcG9ydHNFbmRwb2ludDogc3RyaW5nIHwgbnVsbDtcbiAgYXBpc0VuZHBvaW50OiBzdHJpbmcgfCBudWxsO1xuICBhcGlFbmRwb2ludHM6IFJlcG9ydEFwaUVuZHBvaW50RGVmaW5pdGlvbltdO1xuXG4gIC8qKiBSZXNvbHZlZCBpbnRlcm5hbCBjYXRlZ29yeSBJRHMgKGUuZy4gWydpbnB1dCcsICdhY3Rpb24nLCAnZGlzcGxheSddKSAqL1xuICBhbGxvd2VkQ2F0ZWdvcmllczogc3RyaW5nW10gfCBudWxsO1xuXG4gIC8qKiBXaGV0aGVyIGF1dG8tcGFyYW1ldGVyIGJpbmRpbmcgaXMgZW5hYmxlZCAqL1xuICBhdXRvUGFyYW1ldGVyOiBib29sZWFuO1xuXG4gIC8qKiBSb3V0ZSBiYXNlIHBhdGggKi9cbiAgcm91dGVCYXNlOiBzdHJpbmc7XG5cbiAgLyoqIFNlc3Npb24gc291cmNlICovXG4gIHNlc3Npb246IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBTZXNzaW9uQ29udGV4dFNvdXJjZSB8ICgoKSA9PiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgfCBudWxsO1xuICBzZXNzaW9uUHJvdmlkZXI6IFR5cGU8U2Vzc2lvbkNvbnRleHRQcm92aWRlcj4gfCBudWxsO1xuXG4gIC8qKiBHcmlkIGNvbXBvbmVudCAqL1xuICBncmlkQ29tcG9uZW50OiBUeXBlPHVua25vd24+IHwgbnVsbDtcblxuICAvKiogQ2hhcnQgY29tcG9uZW50ICovXG4gIGNoYXJ0Q29tcG9uZW50OiBUeXBlPHVua25vd24+IHwgbnVsbDtcblxuICAvKiogR2VuZXJhbCBjb25maWcgdmFsdWVzICovXG4gIGRlZmF1bHRQYWdlU2l6ZTogbnVtYmVyO1xuICBkYXRlRm9ybWF0OiBzdHJpbmc7XG4gIGxvb2t1cFRpbWVvdXRNczogbnVtYmVyO1xuXG4gIC8qKiBNYXhpbXVtIGR1cmF0aW9uIG9mIGFuIGV4ZWN1dGlvbiByZXF1ZXN0IChkZWZhdWx0cyB0byBsb29rdXBUaW1lb3V0TXMpLiAqL1xuICBleGVjdXRpb25UaW1lb3V0TXM/OiBudW1iZXI7XG4gIC8qKiBFeGFjdCBIVFRQKFMpIG9yaWdpbnMgcGVybWl0dGVkIHRvIHJlY2VpdmUgQVBJIGNyZWRlbnRpYWxzIGFuZCBjdXN0b20gaGVhZGVycy4gU2FtZS1vcmlnaW4gaXMgdHJ1c3RlZCBieSBkZWZhdWx0LiAqL1xuICB0cnVzdGVkQXBpT3JpZ2lucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBgQndheXNSZXBvcnRDb25maWdgIGludG8gdGhlIGludGVybmFsIGZvcm1hdC5cbiAqIFZhbGlkYXRlcyBzdXBwbGllZCBlbmRwb2ludHMgYW5kIG1hcHMgZnJpZW5kbHkgbmFtZXMgdG8gaW50ZXJuYWwgSURzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQndheXNDb25maWcoY29uZmlnOiBCd2F5c1JlcG9ydENvbmZpZyk6IE5vcm1hbGl6ZWRCd2F5c0NvbmZpZyB7XG4gIC8vIENhcGFiaWxpdGllcyBhcmUgb3B0aW9uYWw7IHZhbGlkYXRlIG9ubHkgVVJMcyB0aGUgaG9zdCBzdXBwbGllcy5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydzcEVuZHBvaW50JywgJ3RhYmxlc0VuZHBvaW50JywgJ2V4ZWN1dGVFbmRwb2ludCcsICdsb29rdXBFbmRwb2ludCcsICdyZXBvcnRzRW5kcG9pbnQnLCAnYXBpc0VuZHBvaW50J10gYXMgY29uc3QpIHtcbiAgICBpZiAoY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIGNvbmZpZ1trZXldICE9PSAnc3RyaW5nJyB8fCAhY29uZmlnW2tleV0/LnRyaW0oKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignW2J3YXlzLXJlcG9ydF0gXCInICsga2V5ICsgJ1wiIG11c3QgYmUgYSBub24tZW1wdHkgVVJMIHdoZW4gc3VwcGxpZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBrZXkgb2YgWydsb29rdXBUaW1lb3V0TXMnLCAnZXhlY3V0aW9uVGltZW91dE1zJ10gYXMgY29uc3QpIHtcbiAgICBpZiAoY29uZmlnW2tleV0gIT09IHVuZGVmaW5lZCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25maWdba2V5XSkgfHwgY29uZmlnW2tleV0hIDw9IDApKSB0aHJvdyBuZXcgRXJyb3Ioa2V5ICsgJyBtdXN0IGJlIGEgcG9zaXRpdmUgdGltZW91dC4nKTtcbiAgfVxuICBpZiAoY29uZmlnLnRydXN0ZWRBcGlPcmlnaW5zICE9PSB1bmRlZmluZWQgJiYgKCFBcnJheS5pc0FycmF5KGNvbmZpZy50cnVzdGVkQXBpT3JpZ2lucykgfHwgY29uZmlnLnRydXN0ZWRBcGlPcmlnaW5zLnNvbWUob3JpZ2luID0+IHtcbiAgICB0cnkgeyBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKG9yaWdpbik7IHJldHVybiAhL15odHRwcz86JC8udGVzdChwYXJzZWQucHJvdG9jb2wpIHx8IHBhcnNlZC5vcmlnaW4gIT09IG9yaWdpbiB8fCAhIXBhcnNlZC51c2VybmFtZSB8fCAhIXBhcnNlZC5wYXNzd29yZDsgfVxuICAgIGNhdGNoIHsgcmV0dXJuIHRydWU7IH1cbiAgfSkpKSB0aHJvdyBuZXcgRXJyb3IoJ3RydXN0ZWRBcGlPcmlnaW5zIG11c3QgY29udGFpbiBleGFjdCBIVFRQKFMpIG9yaWdpbnMsIHdpdGhvdXQgcGF0aHMgb3IgY3JlZGVudGlhbHMuJyk7XG5cbiAgLy8gTWFwIGNvbXBvbmVudCBwYWxldHRlIGNhdGVnb3JpZXNcbiAgbGV0IGFsbG93ZWRDYXRlZ29yaWVzOiBzdHJpbmdbXSB8IG51bGwgPSBudWxsO1xuICBpZiAoY29uZmlnLmNvbXBvbmVudHMgJiYgY29uZmlnLmNvbXBvbmVudHMubGVuZ3RoID4gMCkge1xuICAgIGFsbG93ZWRDYXRlZ29yaWVzID0gY29uZmlnLmNvbXBvbmVudHMubWFwKChmcmllbmRseSkgPT4ge1xuICAgICAgY29uc3QgaW50ZXJuYWwgPSBQQUxFVFRFX0NBVEVHT1JZX01BUFtmcmllbmRseV07XG4gICAgICBpZiAoIWludGVybmFsKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW2J3YXlzLXJlcG9ydF0gVW5rbm93biBjb21wb25lbnQgY2F0ZWdvcnkgXCIke2ZyaWVuZGx5fVwiLiBgICtcbiAgICAgICAgICBgVmFsaWQgb3B0aW9uczogJHtPYmplY3Qua2V5cyhQQUxFVFRFX0NBVEVHT1JZX01BUCkuam9pbignLCAnKX0uYFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZnJpZW5kbHk7IC8vIFBhc3MgdGhyb3VnaCB1bmtub3duIGNhdGVnb3JpZXMgYXMtaXNcbiAgICAgIH1cbiAgICAgIHJldHVybiBpbnRlcm5hbDtcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IHJlcG9ydHNFbmRwb2ludCA9IHJlc29sdmVSZXBvcnRzRW5kcG9pbnQoY29uZmlnKTtcblxuICBjb25zdCBsb29rdXBFbmRwb2ludCA9IGNvbmZpZy5sb29rdXBFbmRwb2ludD8udHJpbSgpXG4gICAgPyBjbGVhblVybChjb25maWcubG9va3VwRW5kcG9pbnQpXG4gICAgOiBjb25maWcuZXhlY3V0ZUVuZHBvaW50Py5pbmNsdWRlcygnL2V4ZWN1dGUnKVxuICAgID8gY2xlYW5VcmwoY29uZmlnLmV4ZWN1dGVFbmRwb2ludC5yZXBsYWNlKC9cXC9leGVjdXRlXFwvPyQvLCAnL2xvb2t1cCcpKVxuICAgIDogbnVsbDtcblxuICByZXR1cm4ge1xuICAgIHNwRW5kcG9pbnQ6IGNvbmZpZy5zcEVuZHBvaW50ID8gY2xlYW5VcmwoY29uZmlnLnNwRW5kcG9pbnQpIDogJycsXG4gICAgdGFibGVzRW5kcG9pbnQ6IGNvbmZpZy50YWJsZXNFbmRwb2ludCA/IGNsZWFuVXJsKGNvbmZpZy50YWJsZXNFbmRwb2ludCkgOiAnJyxcbiAgICBleGVjdXRlRW5kcG9pbnQ6IGNvbmZpZy5leGVjdXRlRW5kcG9pbnQgPyBjbGVhblVybChjb25maWcuZXhlY3V0ZUVuZHBvaW50KSA6ICcnLFxuICAgIGxvb2t1cEVuZHBvaW50LFxuICAgIHJlcG9ydHNFbmRwb2ludCxcbiAgICBhcGlzRW5kcG9pbnQ6IGNvbmZpZy5hcGlzRW5kcG9pbnQ/LnRyaW0oKSA/IGNsZWFuVXJsKGNvbmZpZy5hcGlzRW5kcG9pbnQpIDogbnVsbCxcbiAgICBhcGlFbmRwb2ludHM6IEFycmF5LmlzQXJyYXkoY29uZmlnLmFwaUVuZHBvaW50cykgPyBjb25maWcuYXBpRW5kcG9pbnRzIDogW10sXG5cbiAgICBhbGxvd2VkQ2F0ZWdvcmllcyxcbiAgICBhdXRvUGFyYW1ldGVyOiBjb25maWcuYXV0b1BhcmFtZXRlciAhPT0gZmFsc2UsIC8vIGRlZmF1bHQgdHJ1ZVxuICAgIHJvdXRlQmFzZTogY29uZmlnLnJvdXRlQmFzZT8udHJpbSgpIHx8ICdyZXBvcnRzJyxcbiAgICBzZXNzaW9uOiBjb25maWcuc2Vzc2lvbiA/PyBudWxsLFxuICAgIHNlc3Npb25Qcm92aWRlcjogY29uZmlnLnNlc3Npb25Qcm92aWRlciA/PyBudWxsLFxuXG4gICAgZ3JpZENvbXBvbmVudDogY29uZmlnLmdyaWQgPz8gbnVsbCxcbiAgICBjaGFydENvbXBvbmVudDogY29uZmlnLmNoYXJ0ID8/IG51bGwsXG5cbiAgICBkZWZhdWx0UGFnZVNpemU6IGNvbmZpZy5kZWZhdWx0UGFnZVNpemUgPz8gMjUsXG4gICAgZGF0ZUZvcm1hdDogY29uZmlnLmRhdGVGb3JtYXQgPz8gJ2RkL01NL3l5eXknLFxuICAgIGxvb2t1cFRpbWVvdXRNczogY29uZmlnLmxvb2t1cFRpbWVvdXRNcyA/PyAzMDAwMDAsXG4gICAgZXhlY3V0aW9uVGltZW91dE1zOiBjb25maWcuZXhlY3V0aW9uVGltZW91dE1zLFxuICAgIHRydXN0ZWRBcGlPcmlnaW5zOiBjb25maWcudHJ1c3RlZEFwaU9yaWdpbnMgPz8gW10sXG4gIH07XG59XG5cbi8qKiBSZW1vdmUgdHJhaWxpbmcgc2xhc2hlcyBmcm9tIGEgVVJMICovXG5mdW5jdGlvbiBjbGVhblVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB1cmwudHJpbSgpLnJlcGxhY2UoL1xcLyskLywgJycpO1xufVxuIl19
@@ -7,4 +7,4 @@
7
7
  * whatever the host's grid component (BWays-grid, AG Grid, etc.) expects.
8
8
  */
9
9
  export {};
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZ3JpZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnQgZ3JpZCBkZWZpbml0aW9ucy5cbiAqXG4gKiBEZXNjcmliZXMgdGhlIGxvZ2ljYWwgc3RydWN0dXJlIG9mIHRoZSByZXN1bHQgZ3JpZCDigJQgY29sdW1ucywgZmllbGRzLFxuICogZm9ybWF0dGluZywgc29ydGluZywgYW5kIGZpbHRlcmluZy4gVGhpcyBpcyAqKm5vdCoqIGEgc3BlY2lmaWMgZ3JpZFxuICogbGlicmFyeSdzIEFQSS4gVGhlIGBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50YCB0cmFuc2xhdGVzIHRoaXMgaW50b1xuICogd2hhdGV2ZXIgdGhlIGhvc3QncyBncmlkIGNvbXBvbmVudCAoQldheXMtZ3JpZCwgQUcgR3JpZCwgZXRjLikgZXhwZWN0cy5cbiAqL1xuXG4vKipcbiAqIEludGVyYWN0aXZlIGFjdGlvbiB0cmlnZ2VyZWQgd2hlbiBhIHJvdyBvciBjZWxsIGluIHRoZSByZXN1bHQgZ3JpZCBpcyBjbGlja2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRSb3dDbGlja0FjdGlvbiB7XG4gIC8qKlxuICAgKiBBY3Rpb24gdHlwZTpcbiAgICogLSAnZHJpbGxkb3duLXJlcG9ydCc6IG5hdmlnYXRlcyB0byBvciBvcGVucyBhIHRhcmdldCBzdWItcmVwb3J0XG4gICAqIC0gJ29wZW4tZHJhd2VyJzogb3BlbnMgYW4gaW4tcGFnZSBzbGlkZS1vdmVyIGRyYXdlciBydW5uaW5nIHRoZSB0YXJnZXQgcmVwb3J0XG4gICAqIC0gJ25hdmlnYXRlJzogb3BlbnMgYW4gZXh0ZXJuYWwgVVJMIG9yIGFwcGxpY2F0aW9uIHJvdXRlXG4gICAqIC0gJ2VtaXQtY3VzdG9tJzogZW1pdHMgYSBjdXN0b20gZXZlbnQgZm9yIHRoZSBob3N0IGFwcGxpY2F0aW9uXG4gICAqL1xuICB0eXBlOiAnZHJpbGxkb3duLXJlcG9ydCcgfCAnb3Blbi1kcmF3ZXInIHwgJ25hdmlnYXRlJyB8ICdlbWl0LWN1c3RvbSc7XG5cbiAgLyoqIFRhcmdldCByZXBvcnQgSUQgdG8gb3Blbi9kcmlsbCBpbnRvIChlLmcuICdyZXBfY3VzdG9tZXJfbGVkZ2VyJykuICovXG4gIHRhcmdldFJlcG9ydElkPzogc3RyaW5nO1xuXG4gIC8qKiBFeHRlcm5hbCBVUkwgb3Igcm91dGUgdGVtcGxhdGUgaWYgdHlwZSA9PT0gJ25hdmlnYXRlJy4gU3VwcG9ydHMgYHt7cm93LmZpZWxkfX1gIHJlcGxhY2VtZW50cy4gKi9cbiAgdGFyZ2V0VXJsPzogc3RyaW5nO1xuXG4gIC8qKiBUYXJnZXQgYnJvd3NpbmcgY29udGV4dDogJ19ibGFuaycgfCAnX3NlbGYnIHdoZW4gbmF2aWdhdGluZy4gKi9cbiAgb3Blbk5ld1RhYj86IGJvb2xlYW47XG5cbiAgLyoqIFRpdGxlIGZvciB0aGUgc2xpZGUtb3ZlciBkcmF3ZXIgb3IgZGlhbG9nLiBTdXBwb3J0cyBge3tyb3cuZmllbGR9fWAgcmVwbGFjZW1lbnRzLiAqL1xuICBkcmF3ZXJUaXRsZT86IHN0cmluZztcblxuICAvKiogV2lkdGggb2YgdGhlIHNsaWRlIGRyYXdlciAoQ1NTIHZhbHVlLCBlLmcuICc2ODBweCcsICc1MHZ3JykuIERlZmF1bHQ6ICc3MjBweCcuICovXG4gIGRyYXdlcldpZHRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXBzIHBhcmFtZXRlciBrZXlzIG9mIHRoZSB0YXJnZXQgc3ViLXJlcG9ydCB0byBleHByZXNzaW9uczpcbiAgICogZS5nLiB7IFwiQEN1c3RDb2RlXCI6IFwicm93LmN1c3RvbWVySWRcIiwgXCJAQnJhbmNoSWRcIjogXCJzZXNzaW9uLmJyYW5jaElkXCIsIFwiZnJvbURhdGVcIjogXCJmb3JtLmZyb21EYXRlXCIgfVxuICAgKi9cbiAgcGFyYW1ldGVyTWFwcGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqIEN1c3RvbSBldmVudCBvciBhY3Rpb24gaWRlbnRpZmllciB3aGVuIHR5cGUgPT09ICdlbWl0LWN1c3RvbScuICovXG4gIGN1c3RvbUFjdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgcmVzdWx0IGdyaWQgZm9yIGEgcmVwb3J0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEdyaWREZWZpbml0aW9uIHtcbiAgLyoqIFRoZSBkYXRhIHNvdXJjZSBJRCB0aGF0IHByb3ZpZGVzIGRhdGEgZm9yIHRoaXMgZ3JpZC4gKi9cbiAgZGF0YVNvdXJjZUlkOiBzdHJpbmc7XG5cbiAgLyoqIENvbHVtbiBkZWZpbml0aW9ucy4gKi9cbiAgY29sdW1uczogR3JpZENvbHVtbkRlZmluaXRpb25bXTtcblxuICAvKiogR3JpZC1sZXZlbCBvcHRpb25zLiAqL1xuICBvcHRpb25zPzogR3JpZE9wdGlvbnNEZWZpbml0aW9uO1xuXG4gIC8qKiBEZWNsYXJhdGl2ZSByb3ctY2xpY2sgYWN0aW9uIGZvciBtYXN0ZXItZGV0YWlsIGRyaWxsLWRvd25zLiAqL1xuICByb3dDbGlja0FjdGlvbj86IEdyaWRSb3dDbGlja0FjdGlvbjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgc2luZ2xlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IGdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZENvbHVtbkRlZmluaXRpb24ge1xuICAvKiogVGhlIGZpZWxkIG5hbWUgaW4gdGhlIGRhdGEgcm93IG9iamVjdC4gKi9cbiAgZmllbGQ6IHN0cmluZztcblxuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIGNvbHVtbiBoZWFkZXIuICovXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqIENvbHVtbiBkYXRhIHR5cGUg4oCUIHVzZWQgZm9yIGZvcm1hdHRpbmcgYW5kIHNvcnRpbmcuICovXG4gIGRhdGFUeXBlPzogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICdib29sZWFuJyB8ICdjdXJyZW5jeSc7XG5cbiAgLyoqIERpc3BsYXkgZm9ybWF0IChlLmcuLCAnZGQvTU0veXl5eScgZm9yIGRhdGVzLCAnMS4yLTInIGZvciBudW1iZXJzKS4gKi9cbiAgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKiBDb2x1bW4gd2lkdGggKENTUyB2YWx1ZSwgZS5nLiwgJzE1MHB4JywgJzIwJScpLiAqL1xuICB3aWR0aD86IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGlzIGNvbHVtbiBpcyBzb3J0YWJsZS4gRGVmYXVsdHMgdG8gYHRydWVgLiAqL1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBjb2x1bW4gaXMgZmlsdGVyYWJsZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gKi9cbiAgZmlsdGVyYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFRleHQgYWxpZ25tZW50LiAqL1xuICBhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcblxuICAvKiogV2hldGhlciB0aGlzIGNvbHVtbiBpcyB2aXNpYmxlLiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIHZpc2libGU/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgY29sdW1uIGlzIHBpbm5lZC9mcm96ZW4uICovXG4gIHBpbm5lZD86ICdsZWZ0JyB8ICdyaWdodCcgfCBmYWxzZTtcblxuICAvKiogQ29sdW1uIGRpc3BsYXkgb3JkZXIgKGxvd2VyID0gZmlyc3QpLiAqL1xuICBvcmRlcj86IG51bWJlcjtcblxuICAvKiogQWdncmVnYXRlIGZ1bmN0aW9uIHRvIGRpc3BsYXkgaW4gYSBmb290ZXIgcm93LiAqL1xuICBhZ2dyZWdhdGU/OiAnc3VtJyB8ICdhdmcnIHwgJ2NvdW50JyB8ICdtaW4nIHwgJ21heCcgfCAnbm9uZSc7XG5cbiAgLyoqIFdoZXRoZXIgdG8gcmVuZGVyIGEgc2VsZWN0aW9uIGNoZWNrYm94IGluIHRoaXMgY29sdW1uJ3MgY2VsbHMuICovXG4gIGNoZWNrYm94U2VsZWN0aW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byByZW5kZXIgYSBzZWxlY3QtYWxsIGNoZWNrYm94IGluIHRoaXMgY29sdW1uJ3MgaGVhZGVyLiAqL1xuICBoZWFkZXJDaGVja2JveFNlbGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqIE9wdGlvbmFsIGNlbGwtc3BlY2lmaWMgY2xpY2sgYWN0aW9uIChvdmVycmlkZXMgZ3JpZC1sZXZlbCByb3dDbGlja0FjdGlvbiBmb3IgdGhpcyBjb2x1bW4pLiAqL1xuICBhY3Rpb24/OiBHcmlkUm93Q2xpY2tBY3Rpb247XG59XG5cbi8qKlxuICogR3JpZC1sZXZlbCBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRPcHRpb25zRGVmaW5pdGlvbiB7XG4gIC8qKiBOdW1iZXIgb2Ygcm93cyBwZXIgcGFnZS4gKi9cbiAgcGFnZVNpemU/OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgcGFnaW5hdGlvbiBpcyBlbmFibGVkLiAqL1xuICBwYWdpbmF0aW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciByb3cgc2VsZWN0aW9uIGlzIGVuYWJsZWQuICovXG4gIHNlbGVjdGFibGU/OiBib29sZWFuO1xuXG4gIC8qKiBTZWxlY3Rpb24gbW9kZSB3aGVuIHNlbGVjdGFibGUgaXMgdHJ1ZS4gRGVmYXVsdHMgdG8gJ211bHRpcGxlJy4gKi9cbiAgc2VsZWN0aW9uTW9kZT86ICdzaW5nbGUnIHwgJ211bHRpcGxlJztcblxuICAvKiogU2VsZWN0aW9uIG1vZGUgYWxpYXMgKGNvbXBhdGlibGUgd2l0aCBVbHRyYUdyaWQgYW5kIEFHIEdyaWQgcm93U2VsZWN0aW9uKS4gKi9cbiAgcm93U2VsZWN0aW9uPzogJ3NpbmdsZScgfCAnbXVsdGlwbGUnO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHJlbmRlciBzZWxlY3Rpb24gY2hlY2tib3hlcyBvbiByb3dzLiBEZWZhdWx0cyB0byB0cnVlIHdoZW4gc2VsZWN0YWJsZSBpcyB0cnVlLiAqL1xuICBjaGVja2JveFNlbGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gcmVuZGVyIGEgc2VsZWN0LWFsbCBjaGVja2JveCBpbiB0aGUgaGVhZGVyLiBEZWZhdWx0cyB0byB0cnVlIHdoZW4gbXVsdGktcm93IGNoZWNrYm94IHNlbGVjdGlvbiBpcyBhY3RpdmUuICovXG4gIGhlYWRlckNoZWNrYm94U2VsZWN0aW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byBzaG93IHJvdyBudW1iZXJzLiAqL1xuICBzaG93Um93TnVtYmVycz86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgY29sdW1uIHJlb3JkZXJpbmcuICovXG4gIGFsbG93Q29sdW1uUmVvcmRlcj86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gYWxsb3cgZXhwb3J0aW5nLiAqL1xuICBhbGxvd0V4cG9ydD86IGJvb2xlYW47XG5cbiAgLyoqIEV4cG9ydCBmb3JtYXRzIHRvIG9mZmVyLiAqL1xuICBleHBvcnRGb3JtYXRzPzogKCdjc3YnIHwgJ2V4Y2VsJyB8ICdwZGYnKVtdO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHNob3cgYSBmb290ZXIgcm93IHdpdGggYWdncmVnYXRlcy4gKi9cbiAgc2hvd0Zvb3Rlcj86IGJvb2xlYW47XG5cbiAgLyoqIEhlaWdodCBvZiB0aGUgZ3JpZCAoQ1NTIHZhbHVlKS4gKi9cbiAgaGVpZ2h0Pzogc3RyaW5nO1xuXG4gIC8qKiBBY3RpdmUgY29sdW1uIGdyb3VwaW5nIGZpZWxkcyBpbiBvcmRlciAoZS5nLiBbJ2JyYW5jaCcsICdjdXN0b21lciddKS4gKi9cbiAgZ3JvdXBNb2RlbD86IHN0cmluZ1tdO1xuXG4gIC8qKiBBY3RpdmUgc29ydCBtb2RlbCBkZWZpbml0aW9ucy4gKi9cbiAgc29ydE1vZGVsPzogdW5rbm93bltdO1xuXG4gIC8qKiBDb21wbGV0ZSBzZXJpYWxpemVkIGdyaWQgcmVwb3J0IHN0YXRlIChmaWx0ZXJzLCBoaWdobGlnaHRzLCBncm91cHMpLiAqL1xuICByZXBvcnRTdGF0ZT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIC8qKiBWaWV3IHByZXNldHMgLyBzYXZlZCBjdXN0b20gZ3JpZCB2aWV3cy4gKi9cbiAgcHJlc2V0cz86IHVua25vd25bXTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ3JpZCBzaWRlIHBhbmVsICh0b29sIHBhbmVscyBmb3IgY29sdW1ucywgZmlsdGVycywgaGlnaGxpZ2h0cywgZXhwb3J0LCBhbmFseXRpY3MsIEFJIGNoYXQpIGlzIGVuYWJsZWQuXG4gICAqIFN0YW5kYXJkIEJXYXlzLWdyaWQgLyBVbHRyYUdyaWQgZmVhdHVyZS4gRGVmYXVsdHMgdG8gYHRydWVgLlxuICAgKi9cbiAgc2lkZUJhcj86IGJvb2xlYW4gfCB7XG4gICAgdmlzaWJsZT86IGJvb2xlYW47XG4gICAgcGFuZWw/OiAoJ2NvbHVtbnMnIHwgJ2ZpbHRlcnMnIHwgJ2hpZ2hsaWdodHMnIHwgJ2V4cG9ydCcgfCAnYW5hbHl0aWNzJyB8ICdjaGF0JylbXTtcbiAgfTtcblxuICAvKiogV2hldGhlciB0aGUgcmVhbC10aW1lIGdsb2JhbCBzZWFyY2ggYmFyIGlzIGVuYWJsZWQuIERlZmF1bHRzIHRvIGB0cnVlYC4gKi9cbiAgZ2xvYmFsU2VhcmNoPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0aGUgYm90dG9tIHN0YXR1cyBiYXIgaXMgZW5hYmxlZC4gRGVmYXVsdHMgdG8gYHRydWVgLiAqL1xuICBzdGF0dXNCYXI/OiBib29sZWFuO1xuXG4gIC8qKiBEZWNsYXJhdGl2ZSByb3ctY2xpY2sgYWN0aW9uIGZvciBtYXN0ZXItZGV0YWlsIGRyaWxsLWRvd25zLiAqL1xuICByb3dDbGlja0FjdGlvbj86IEdyaWRSb3dDbGlja0FjdGlvbjtcbn1cbiJdfQ==
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9id2F5cy1yZXBvcnQvc3JjL2xpYi9jb3JlL21vZGVscy9yZXBvcnQtZ3JpZC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXBvcnQgZ3JpZCBkZWZpbml0aW9ucy5cbiAqXG4gKiBEZXNjcmliZXMgdGhlIGxvZ2ljYWwgc3RydWN0dXJlIG9mIHRoZSByZXN1bHQgZ3JpZCDigJQgY29sdW1ucywgZmllbGRzLFxuICogZm9ybWF0dGluZywgc29ydGluZywgYW5kIGZpbHRlcmluZy4gVGhpcyBpcyAqKm5vdCoqIGEgc3BlY2lmaWMgZ3JpZFxuICogbGlicmFyeSdzIEFQSS4gVGhlIGBSZXBvcnRHcmlkQnJpZGdlQ29tcG9uZW50YCB0cmFuc2xhdGVzIHRoaXMgaW50b1xuICogd2hhdGV2ZXIgdGhlIGhvc3QncyBncmlkIGNvbXBvbmVudCAoQldheXMtZ3JpZCwgQUcgR3JpZCwgZXRjLikgZXhwZWN0cy5cbiAqL1xuXG4vKipcbiAqIEludGVyYWN0aXZlIGFjdGlvbiB0cmlnZ2VyZWQgd2hlbiBhIHJvdyBvciBjZWxsIGluIHRoZSByZXN1bHQgZ3JpZCBpcyBjbGlja2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRSb3dDbGlja0FjdGlvbiB7XG4gIC8qKlxuICAgKiBBY3Rpb24gdHlwZTpcbiAgICogLSAnZHJpbGxkb3duLXJlcG9ydCc6IG5hdmlnYXRlcyB0byBvciBvcGVucyBhIHRhcmdldCBzdWItcmVwb3J0XG4gICAqIC0gJ29wZW4tZHJhd2VyJzogb3BlbnMgYW4gaW4tcGFnZSBzbGlkZS1vdmVyIGRyYXdlciBydW5uaW5nIHRoZSB0YXJnZXQgcmVwb3J0XG4gICAqIC0gJ25hdmlnYXRlJzogb3BlbnMgYW4gZXh0ZXJuYWwgVVJMIG9yIGFwcGxpY2F0aW9uIHJvdXRlXG4gICAqIC0gJ2VtaXQtY3VzdG9tJzogZW1pdHMgYSBjdXN0b20gZXZlbnQgZm9yIHRoZSBob3N0IGFwcGxpY2F0aW9uXG4gICAqL1xuICB0eXBlOiAnZHJpbGxkb3duLXJlcG9ydCcgfCAnb3Blbi1kcmF3ZXInIHwgJ25hdmlnYXRlJyB8ICdlbWl0LWN1c3RvbSc7XG5cbiAgLyoqIFRhcmdldCByZXBvcnQgSUQgdG8gb3Blbi9kcmlsbCBpbnRvIChlLmcuICdyZXBfY3VzdG9tZXJfbGVkZ2VyJykuICovXG4gIHRhcmdldFJlcG9ydElkPzogc3RyaW5nO1xuXG4gIC8qKiBFeHRlcm5hbCBVUkwgb3Igcm91dGUgdGVtcGxhdGUgaWYgdHlwZSA9PT0gJ25hdmlnYXRlJy4gU3VwcG9ydHMgYHt7cm93LmZpZWxkfX1gIHJlcGxhY2VtZW50cy4gKi9cbiAgdGFyZ2V0VXJsPzogc3RyaW5nO1xuXG4gIC8qKiBUYXJnZXQgYnJvd3NpbmcgY29udGV4dDogJ19ibGFuaycgfCAnX3NlbGYnIHdoZW4gbmF2aWdhdGluZy4gKi9cbiAgb3Blbk5ld1RhYj86IGJvb2xlYW47XG5cbiAgLyoqIFRpdGxlIGZvciB0aGUgc2xpZGUtb3ZlciBkcmF3ZXIgb3IgZGlhbG9nLiBTdXBwb3J0cyBge3tyb3cuZmllbGR9fWAgcmVwbGFjZW1lbnRzLiAqL1xuICBkcmF3ZXJUaXRsZT86IHN0cmluZztcblxuICAvKiogV2lkdGggb2YgdGhlIHNsaWRlIGRyYXdlciAoQ1NTIHZhbHVlLCBlLmcuICc2ODBweCcsICc1MHZ3JykuIERlZmF1bHQ6ICc3MjBweCcuICovXG4gIGRyYXdlcldpZHRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXBzIHBhcmFtZXRlciBrZXlzIG9mIHRoZSB0YXJnZXQgc3ViLXJlcG9ydCB0byBleHByZXNzaW9uczpcbiAgICogZS5nLiB7IFwiQEN1c3RDb2RlXCI6IFwicm93LmN1c3RvbWVySWRcIiwgXCJAQnJhbmNoSWRcIjogXCJzZXNzaW9uLmJyYW5jaElkXCIsIFwiZnJvbURhdGVcIjogXCJmb3JtLmZyb21EYXRlXCIgfVxuICAgKi9cbiAgcGFyYW1ldGVyTWFwcGluZz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqIEN1c3RvbSBldmVudCBvciBhY3Rpb24gaWRlbnRpZmllciB3aGVuIHR5cGUgPT09ICdlbWl0LWN1c3RvbScuICovXG4gIGN1c3RvbUFjdGlvbk5hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgcmVzdWx0IGdyaWQgZm9yIGEgcmVwb3J0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlcG9ydEdyaWREZWZpbml0aW9uIHtcbiAgLyoqIFRoZSBkYXRhIHNvdXJjZSBJRCB0aGF0IHByb3ZpZGVzIGRhdGEgZm9yIHRoaXMgZ3JpZC4gKi9cbiAgZGF0YVNvdXJjZUlkOiBzdHJpbmc7XG5cbiAgLyoqIENvbHVtbiBkZWZpbml0aW9ucy4gKi9cbiAgY29sdW1uczogR3JpZENvbHVtbkRlZmluaXRpb25bXTtcblxuICAvKiogR3JpZC1sZXZlbCBvcHRpb25zLiAqL1xuICBvcHRpb25zPzogR3JpZE9wdGlvbnNEZWZpbml0aW9uO1xuXG4gIC8qKiBEZWNsYXJhdGl2ZSByb3ctY2xpY2sgYWN0aW9uIGZvciBtYXN0ZXItZGV0YWlsIGRyaWxsLWRvd25zLiAqL1xuICByb3dDbGlja0FjdGlvbj86IEdyaWRSb3dDbGlja0FjdGlvbjtcbn1cblxuLyoqXG4gKiBEZWZpbmVzIGEgc2luZ2xlIGNvbHVtbiBpbiB0aGUgcmVzdWx0IGdyaWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZENvbHVtbkRlZmluaXRpb24ge1xuICAvKiogVGhlIGZpZWxkIG5hbWUgaW4gdGhlIGRhdGEgcm93IG9iamVjdC4gKi9cbiAgZmllbGQ6IHN0cmluZztcblxuICAvKiogRGlzcGxheSBsYWJlbCBmb3IgdGhlIGNvbHVtbiBoZWFkZXIuICovXG4gIGxhYmVsOiBzdHJpbmc7XG5cbiAgLyoqIENvbHVtbiBkYXRhIHR5cGUg4oCUIHVzZWQgZm9yIGZvcm1hdHRpbmcgYW5kIHNvcnRpbmcuICovXG4gIGRhdGFUeXBlPzogJ3N0cmluZycgfCAnbnVtYmVyJyB8ICdkYXRlJyB8ICdib29sZWFuJyB8ICdjdXJyZW5jeSc7XG5cbiAgLyoqIERpc3BsYXkgZm9ybWF0IChlLmcuLCAnZGQvTU0veXl5eScgZm9yIGRhdGVzLCAnMS4yLTInIGZvciBudW1iZXJzKS4gKi9cbiAgZm9ybWF0Pzogc3RyaW5nO1xuXG4gIC8qKiBDb2x1bW4gd2lkdGggKENTUyB2YWx1ZSwgZS5nLiwgJzE1MHB4JywgJzIwJScpLiAqL1xuICB3aWR0aD86IHN0cmluZztcblxuICAvKiogV2hldGhlciB0aGlzIGNvbHVtbiBpcyBzb3J0YWJsZS4gRGVmYXVsdHMgdG8gYHRydWVgLiAqL1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhpcyBjb2x1bW4gaXMgZmlsdGVyYWJsZS4gRGVmYXVsdHMgdG8gYGZhbHNlYC4gKi9cbiAgZmlsdGVyYWJsZT86IGJvb2xlYW47XG5cbiAgLyoqIFRleHQgYWxpZ25tZW50LiAqL1xuICBhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0JztcblxuICAvKiogV2hldGhlciB0aGlzIGNvbHVtbiBpcyB2aXNpYmxlLiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIHZpc2libGU/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRoaXMgY29sdW1uIGlzIHBpbm5lZC9mcm96ZW4uICovXG4gIHBpbm5lZD86ICdsZWZ0JyB8ICdyaWdodCcgfCBmYWxzZTtcblxuICAvKiogQ29sdW1uIGRpc3BsYXkgb3JkZXIgKGxvd2VyID0gZmlyc3QpLiAqL1xuICBvcmRlcj86IG51bWJlcjtcblxuICAvKiogQWdncmVnYXRlIGZ1bmN0aW9uIHRvIGRpc3BsYXkgaW4gYSBmb290ZXIgcm93LiAqL1xuICBhZ2dyZWdhdGU/OiAnc3VtJyB8ICdhdmcnIHwgJ2NvdW50JyB8ICdtaW4nIHwgJ21heCcgfCAnbm9uZSc7XG5cbiAgLyoqIFdoZXRoZXIgdG8gcmVuZGVyIGEgc2VsZWN0aW9uIGNoZWNrYm94IGluIHRoaXMgY29sdW1uJ3MgY2VsbHMuICovXG4gIGNoZWNrYm94U2VsZWN0aW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciB0byByZW5kZXIgYSBzZWxlY3QtYWxsIGNoZWNrYm94IGluIHRoaXMgY29sdW1uJ3MgaGVhZGVyLiAqL1xuICBoZWFkZXJDaGVja2JveFNlbGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqIE9wdGlvbmFsIGNlbGwtc3BlY2lmaWMgY2xpY2sgYWN0aW9uIChvdmVycmlkZXMgZ3JpZC1sZXZlbCByb3dDbGlja0FjdGlvbiBmb3IgdGhpcyBjb2x1bW4pLiAqL1xuICBhY3Rpb24/OiBHcmlkUm93Q2xpY2tBY3Rpb247XG59XG5cbi8qKlxuICogR3JpZC1sZXZlbCBvcHRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdyaWRPcHRpb25zRGVmaW5pdGlvbiB7XG4gIC8qKiBOdW1iZXIgb2Ygcm93cyBwZXIgcGFnZS4gKi9cbiAgcGFnZVNpemU/OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgcGFnaW5hdGlvbiBpcyBlbmFibGVkLiAqL1xuICBwYWdpbmF0aW9uPzogYm9vbGVhbjtcblxuICAvKiogV2hldGhlciByb3cgc2VsZWN0aW9uIGlzIGVuYWJsZWQuIERlZmF1bHRzIHRvIHRydWU7IHNldCBmYWxzZSB0byBkaXNhYmxlLiAqL1xuICBzZWxlY3RhYmxlPzogYm9vbGVhbjtcblxuICAvKiogU2VsZWN0aW9uIG1vZGUgd2hlbiBzZWxlY3RhYmxlIGlzIHRydWUuIERlZmF1bHRzIHRvICdtdWx0aXBsZScuICovXG4gIHNlbGVjdGlvbk1vZGU/OiAnc2luZ2xlJyB8ICdtdWx0aXBsZSc7XG5cbiAgLyoqIFNlbGVjdGlvbiBtb2RlIGFsaWFzIChjb21wYXRpYmxlIHdpdGggVWx0cmFHcmlkIGFuZCBBRyBHcmlkIHJvd1NlbGVjdGlvbikuICovXG4gIHJvd1NlbGVjdGlvbj86ICdzaW5nbGUnIHwgJ211bHRpcGxlJztcblxuICAvKiogV2hldGhlciB0byByZW5kZXIgc2VsZWN0aW9uIGNoZWNrYm94ZXMgb24gcm93cy4gRGVmYXVsdHMgdG8gdHJ1ZSB3aGVuIHNlbGVjdGFibGUgaXMgdHJ1ZS4gKi9cbiAgY2hlY2tib3hTZWxlY3Rpb24/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIHJlbmRlciBhIHNlbGVjdC1hbGwgY2hlY2tib3ggaW4gdGhlIGhlYWRlci4gRGVmYXVsdHMgdG8gdHJ1ZSB3aGVuIG11bHRpLXJvdyBjaGVja2JveCBzZWxlY3Rpb24gaXMgYWN0aXZlLiAqL1xuICBoZWFkZXJDaGVja2JveFNlbGVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdG8gc2hvdyByb3cgbnVtYmVycy4gKi9cbiAgc2hvd1Jvd051bWJlcnM/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFsbG93IGNvbHVtbiByZW9yZGVyaW5nLiAqL1xuICBhbGxvd0NvbHVtblJlb3JkZXI/OiBib29sZWFuO1xuXG4gIC8qKiBXaGV0aGVyIHRvIGFsbG93IGV4cG9ydGluZy4gKi9cbiAgYWxsb3dFeHBvcnQ/OiBib29sZWFuO1xuXG4gIC8qKiBFeHBvcnQgZm9ybWF0cyB0byBvZmZlci4gKi9cbiAgZXhwb3J0Rm9ybWF0cz86ICgnY3N2JyB8ICdleGNlbCcgfCAncGRmJylbXTtcblxuICAvKiogV2hldGhlciB0byBzaG93IGEgZm9vdGVyIHJvdyB3aXRoIGFnZ3JlZ2F0ZXMuICovXG4gIHNob3dGb290ZXI/OiBib29sZWFuO1xuXG4gIC8qKiBIZWlnaHQgb2YgdGhlIGdyaWQgKENTUyB2YWx1ZSkuICovXG4gIGhlaWdodD86IHN0cmluZztcblxuICAvKiogQWN0aXZlIGNvbHVtbiBncm91cGluZyBmaWVsZHMgaW4gb3JkZXIgKGUuZy4gWydicmFuY2gnLCAnY3VzdG9tZXInXSkuICovXG4gIGdyb3VwTW9kZWw/OiBzdHJpbmdbXTtcblxuICAvKiogQWN0aXZlIHNvcnQgbW9kZWwgZGVmaW5pdGlvbnMuICovXG4gIHNvcnRNb2RlbD86IHVua25vd25bXTtcblxuICAvKiogQ29tcGxldGUgc2VyaWFsaXplZCBncmlkIHJlcG9ydCBzdGF0ZSAoZmlsdGVycywgaGlnaGxpZ2h0cywgZ3JvdXBzKS4gKi9cbiAgcmVwb3J0U3RhdGU/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvKiogVmlldyBwcmVzZXRzIC8gc2F2ZWQgY3VzdG9tIGdyaWQgdmlld3MuICovXG4gIHByZXNldHM/OiB1bmtub3duW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGdyaWQgc2lkZSBwYW5lbCAodG9vbCBwYW5lbHMgZm9yIGNvbHVtbnMsIGZpbHRlcnMsIGhpZ2hsaWdodHMsIGV4cG9ydCwgYW5hbHl0aWNzLCBBSSBjaGF0KSBpcyBlbmFibGVkLlxuICAgKiBTdGFuZGFyZCBCV2F5cy1ncmlkIC8gVWx0cmFHcmlkIGZlYXR1cmUuIERlZmF1bHRzIHRvIGB0cnVlYC5cbiAgICovXG4gIHNpZGVCYXI/OiBib29sZWFuIHwge1xuICAgIHZpc2libGU/OiBib29sZWFuO1xuICAgIHBhbmVsPzogKCdjb2x1bW5zJyB8ICdmaWx0ZXJzJyB8ICdoaWdobGlnaHRzJyB8ICdleHBvcnQnIHwgJ2FuYWx5dGljcycgfCAnY2hhdCcpW107XG4gIH07XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHJlYWwtdGltZSBnbG9iYWwgc2VhcmNoIGJhciBpcyBlbmFibGVkLiBEZWZhdWx0cyB0byBgdHJ1ZWAuICovXG4gIGdsb2JhbFNlYXJjaD86IGJvb2xlYW47XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGJvdHRvbSBzdGF0dXMgYmFyIGlzIGVuYWJsZWQuIERlZmF1bHRzIHRvIGB0cnVlYC4gKi9cbiAgc3RhdHVzQmFyPzogYm9vbGVhbjtcblxuICAvKiogRGVjbGFyYXRpdmUgcm93LWNsaWNrIGFjdGlvbiBmb3IgbWFzdGVyLWRldGFpbCBkcmlsbC1kb3ducy4gKi9cbiAgcm93Q2xpY2tBY3Rpb24/OiBHcmlkUm93Q2xpY2tBY3Rpb247XG59XG4iXX0=
@@ -0,0 +1,79 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { CSP_NONCE, Injectable, NgZone, inject } from '@angular/core';
3
+ import { Overlay } from '@angular/cdk/overlay';
4
+ import { ScrollDispatcher } from '@angular/cdk/scrolling';
5
+ import * as i0 from "@angular/core";
6
+ /** CDK structural styles, embedded so standalone components need no host CSS import.
7
+ * Compatible with CDK's overlay-prebuilt.css; no theme or !important overrides.
8
+ * CDK structural CSS is MIT licensed; see third-party-notices/angular-cdk-LICENSE.txt.
9
+ */
10
+ const OVERLAY_STYLES = ".cdk-overlay-container,.cdk-global-overlay-wrapper{pointer-events:none;top:0;left:0;height:100%;width:100%}.cdk-overlay-container{position:fixed;z-index:var(--rpt-overlay-z-index,1000)}.cdk-overlay-container:empty{display:none}.cdk-global-overlay-wrapper{display:flex;position:absolute;z-index:1000}.cdk-overlay-pane{position:absolute;pointer-events:auto;box-sizing:border-box;z-index:1000;display:flex;max-width:100%;max-height:100%}.cdk-overlay-backdrop{position:absolute;top:0;bottom:0;left:0;right:0;z-index:1000;pointer-events:auto;-webkit-tap-highlight-color:rgba(0,0,0,0);transition:opacity 400ms cubic-bezier(0.25, 0.8, 0.25, 1);opacity:0}.cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:1}.cdk-high-contrast-active .cdk-overlay-backdrop.cdk-overlay-backdrop-showing{opacity:.6}.cdk-overlay-dark-backdrop{background:rgba(0,0,0,.32)}.cdk-overlay-transparent-backdrop{transition:visibility 1ms linear,opacity 1ms linear;visibility:hidden;opacity:1}.cdk-overlay-transparent-backdrop.cdk-overlay-backdrop-showing{opacity:0;visibility:visible}.cdk-overlay-backdrop-noop-animation{transition:none}.cdk-overlay-connected-position-bounding-box{position:absolute;z-index:1000;display:flex;flex-direction:column;min-width:1px;min-height:1px}.cdk-global-scrollblock{position:fixed;width:100%;overflow-y:scroll}";
11
+ // Library modal appearance must also work without the optional theme asset.
12
+ const DIALOG_STYLES = '.rpt-dialog-backdrop{background-color:rgba(15,23,42,.48);backdrop-filter:blur(3px)}';
13
+ const STYLE_ID = 'rpt-overlay-base-styles';
14
+ export class ReportOverlayService {
15
+ document = inject(DOCUMENT);
16
+ nonce = inject(CSP_NONCE, { optional: true });
17
+ overlay = inject(Overlay);
18
+ scrollDispatcher = inject(ScrollDispatcher);
19
+ zone = inject(NgZone);
20
+ ensureStyles() {
21
+ if (this.document.getElementById(STYLE_ID))
22
+ return;
23
+ const style = this.document.createElement('style');
24
+ style.id = STYLE_ID;
25
+ if (this.nonce)
26
+ style.setAttribute('nonce', this.nonce);
27
+ style.textContent = OVERLAY_STYLES + DIALOG_STYLES;
28
+ (this.document.head ?? this.document.documentElement).appendChild(style);
29
+ }
30
+ /** Retain CDK's scroll strategy; cover native, unregistered host ancestors too. */
31
+ scrollStrategy(origin) {
32
+ this.ensureStyles();
33
+ const delegate = this.overlay.scrollStrategies.reposition({ scrollThrottle: 16 });
34
+ const view = this.document.defaultView;
35
+ let overlayRef;
36
+ let frame;
37
+ let enabled = false;
38
+ const onScroll = (event) => {
39
+ const target = event.target;
40
+ if (!target || target.nodeType !== 1 || !target.contains(origin()))
41
+ return;
42
+ // Registered ancestors already notify the delegate. Menu-list scrolling
43
+ // is excluded because the menu does not contain its trigger.
44
+ if (this.scrollDispatcher.getAncestorScrollContainers(origin()).some(container => container.getElementRef().nativeElement === target))
45
+ return;
46
+ if (frame === undefined && view)
47
+ frame = view.requestAnimationFrame(() => {
48
+ frame = undefined;
49
+ if (enabled && overlayRef?.hasAttached())
50
+ overlayRef.updatePosition();
51
+ });
52
+ };
53
+ return {
54
+ attach: ref => { overlayRef = ref; delegate.attach(ref); },
55
+ enable: () => {
56
+ if (enabled)
57
+ return;
58
+ enabled = true;
59
+ delegate.enable();
60
+ this.zone.runOutsideAngular(() => this.document.addEventListener('scroll', onScroll, true));
61
+ },
62
+ disable: () => {
63
+ enabled = false;
64
+ delegate.disable();
65
+ this.document.removeEventListener('scroll', onScroll, true);
66
+ if (frame !== undefined && view)
67
+ view.cancelAnimationFrame(frame);
68
+ frame = undefined;
69
+ },
70
+ };
71
+ }
72
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportOverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
73
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportOverlayService, providedIn: 'root' });
74
+ }
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ReportOverlayService, decorators: [{
76
+ type: Injectable,
77
+ args: [{ providedIn: 'root' }]
78
+ }] });
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LW92ZXJsYXkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2NvcmUvc2VydmljZXMvcmVwb3J0LW92ZXJsYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUE4QixNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUUxRDs7O0dBR0c7QUFDSCxNQUFNLGNBQWMsR0FBRyx1eUNBQXV5QyxDQUFDO0FBQy96Qyw0RUFBNEU7QUFDNUUsTUFBTSxhQUFhLEdBQUcscUZBQXFGLENBQUM7QUFDNUcsTUFBTSxRQUFRLEdBQUcseUJBQXlCLENBQUM7QUFHM0MsTUFBTSxPQUFPLG9CQUFvQjtJQUNkLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5QyxPQUFPLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFCLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFdkMsWUFBWTtRQUNWLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1lBQUUsT0FBTztRQUNuRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FB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WUFDcEIsQ0FBQztTQUNGLENBQUM7SUFDSixDQUFDO3dHQWpEVSxvQkFBb0I7NEdBQXBCLG9CQUFvQixjQURQLE1BQU07OzRGQUNuQixvQkFBb0I7a0JBRGhDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ1NQX05PTkNFLCBJbmplY3RhYmxlLCBOZ1pvbmUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiwgU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBTY3JvbGxEaXNwYXRjaGVyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3Njcm9sbGluZyc7XG5cbi8qKiBDREsgc3RydWN0dXJhbCBzdHlsZXMsIGVtYmVkZGVkIHNvIHN0YW5kYWxvbmUgY29tcG9uZW50cyBuZWVkIG5vIGhvc3QgQ1NTIGltcG9ydC5cbiAqIENvbXBhdGlibGUgd2l0aCBDREsncyBvdmVybGF5LXByZWJ1aWx0LmNzczsgbm8gdGhlbWUgb3IgIWltcG9ydGFudCBvdmVycmlkZXMuXG4gKiBDREsgc3RydWN0dXJhbCBDU1MgaXMgTUlUIGxpY2Vuc2VkOyBzZWUgdGhpcmQtcGFydHktbm90aWNlcy9hbmd1bGFyLWNkay1MSUNFTlNFLnR4dC5cbiAqL1xuY29uc3QgT1ZFUkxBWV9TVFlMRVMgPSBcIi5jZGstb3ZlcmxheS1jb250YWluZXIsLmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye3BvaW50ZXItZXZlbnRzOm5vbmU7dG9wOjA7bGVmdDowO2hlaWdodDoxMDAlO3dpZHRoOjEwMCV9LmNkay1vdmVybGF5LWNvbnRhaW5lcntwb3NpdGlvbjpmaXhlZDt6LWluZGV4OnZhcigtLXJwdC1vdmVybGF5LXotaW5kZXgsMTAwMCl9LmNkay1vdmVybGF5LWNvbnRhaW5lcjplbXB0eXtkaXNwbGF5Om5vbmV9LmNkay1nbG9iYWwtb3ZlcmxheS13cmFwcGVye2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjEwMDB9LmNkay1vdmVybGF5LXBhbmV7cG9zaXRpb246YWJzb2x1dGU7cG9pbnRlci1ldmVudHM6YXV0bztib3gtc2l6aW5nOmJvcmRlci1ib3g7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDttYXgtd2lkdGg6MTAwJTttYXgtaGVpZ2h0OjEwMCV9LmNkay1vdmVybGF5LWJhY2tkcm9we3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2JvdHRvbTowO2xlZnQ6MDtyaWdodDowO3otaW5kZXg6MTAwMDtwb2ludGVyLWV2ZW50czphdXRvOy13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjpyZ2JhKDAsMCwwLDApO3RyYW5zaXRpb246b3BhY2l0eSA0MDBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKTtvcGFjaXR5OjB9LmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eToxfS5jZGstaGlnaC1jb250cmFzdC1hY3RpdmUgLmNkay1vdmVybGF5LWJhY2tkcm9wLmNkay1vdmVybGF5LWJhY2tkcm9wLXNob3dpbmd7b3BhY2l0eTouNn0uY2RrLW92ZXJsYXktZGFyay1iYWNrZHJvcHtiYWNrZ3JvdW5kOnJnYmEoMCwwLDAsLjMyKX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3B7dHJhbnNpdGlvbjp2aXNpYmlsaXR5IDFtcyBsaW5lYXIsb3BhY2l0eSAxbXMgbGluZWFyO3Zpc2liaWxpdHk6aGlkZGVuO29wYWNpdHk6MX0uY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AuY2RrLW92ZXJsYXktYmFja2Ryb3Atc2hvd2luZ3tvcGFjaXR5OjA7dmlzaWJpbGl0eTp2aXNpYmxlfS5jZGstb3ZlcmxheS1iYWNrZHJvcC1ub29wLWFuaW1hdGlvbnt0cmFuc2l0aW9uOm5vbmV9LmNkay1vdmVybGF5LWNvbm5lY3RlZC1wb3NpdGlvbi1ib3VuZGluZy1ib3h7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDAwO2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47bWluLXdpZHRoOjFweDttaW4taGVpZ2h0OjFweH0uY2RrLWdsb2JhbC1zY3JvbGxibG9ja3twb3NpdGlvbjpmaXhlZDt3aWR0aDoxMDAlO292ZXJmbG93LXk6c2Nyb2xsfVwiO1xuLy8gTGlicmFyeSBtb2RhbCBhcHBlYXJhbmNlIG11c3QgYWxzbyB3b3JrIHdpdGhvdXQgdGhlIG9wdGlvbmFsIHRoZW1lIGFzc2V0LlxuY29uc3QgRElBTE9HX1NUWUxFUyA9ICcucnB0LWRpYWxvZy1iYWNrZHJvcHtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMTUsMjMsNDIsLjQ4KTtiYWNrZHJvcC1maWx0ZXI6Ymx1cigzcHgpfSc7XG5jb25zdCBTVFlMRV9JRCA9ICdycHQtb3ZlcmxheS1iYXNlLXN0eWxlcyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUmVwb3J0T3ZlcmxheVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSBub25jZSA9IGluamVjdChDU1BfTk9OQ0UsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzY3JvbGxEaXNwYXRjaGVyID0gaW5qZWN0KFNjcm9sbERpc3BhdGNoZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IHpvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICBlbnN1cmVTdHlsZXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoU1RZTEVfSUQpKSByZXR1cm47XG4gICAgY29uc3Qgc3R5bGUgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgc3R5bGUuaWQgPSBTVFlMRV9JRDtcbiAgICBpZiAodGhpcy5ub25jZSkgc3R5bGUuc2V0QXR0cmlidXRlKCdub25jZScsIHRoaXMubm9uY2UpO1xuICAgIHN0eWxlLnRleHRDb250ZW50ID0gT1ZFUkxBWV9TVFlMRVMgKyBESUFMT0dfU1RZTEVTO1xuICAgICh0aGlzLmRvY3VtZW50LmhlYWQgPz8gdGhpcy5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIC8qKiBSZXRhaW4gQ0RLJ3Mgc2Nyb2xsIHN0cmF0ZWd5OyBjb3ZlciBuYXRpdmUsIHVucmVnaXN0ZXJlZCBob3N0IGFuY2VzdG9ycyB0b28uICovXG4gIHNjcm9sbFN0cmF0ZWd5KG9yaWdpbjogKCkgPT4gSFRNTEVsZW1lbnQpOiBTY3JvbGxTdHJhdGVneSB7XG4gICAgdGhpcy5lbnN1cmVTdHlsZXMoKTtcbiAgICBjb25zdCBkZWxlZ2F0ZSA9IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oeyBzY3JvbGxUaHJvdHRsZTogMTYgfSk7XG4gICAgY29uc3QgdmlldyA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgbGV0IG92ZXJsYXlSZWY6IE92ZXJsYXlSZWYgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZyYW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbGV0IGVuYWJsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBvblNjcm9sbCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCB8IG51bGw7XG4gICAgICBpZiAoIXRhcmdldCB8fCB0YXJnZXQubm9kZVR5cGUgIT09IDEgfHwgIXRhcmdldC5jb250YWlucyhvcmlnaW4oKSkpIHJldHVybjtcbiAgICAgIC8vIFJlZ2lzdGVyZWQgYW5jZXN0b3JzIGFscmVhZHkgbm90aWZ5IHRoZSBkZWxlZ2F0ZS4gTWVudS1saXN0IHNjcm9sbGluZ1xuICAgICAgLy8gaXMgZXhjbHVkZWQgYmVjYXVzZSB0aGUgbWVudSBkb2VzIG5vdCBjb250YWluIGl0cyB0cmlnZ2VyLlxuICAgICAgaWYgKHRoaXMuc2Nyb2xsRGlzcGF0Y2hlci5nZXRBbmNlc3RvclNjcm9sbENvbnRhaW5lcnMob3JpZ2luKCkpLnNvbWUoY29udGFpbmVyID0+IGNvbnRhaW5lci5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudCA9PT0gdGFyZ2V0KSkgcmV0dXJuO1xuICAgICAgaWYgKGZyYW1lID09PSB1bmRlZmluZWQgJiYgdmlldykgZnJhbWUgPSB2aWV3LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGZyYW1lID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZW5hYmxlZCAmJiBvdmVybGF5UmVmPy5oYXNBdHRhY2hlZCgpKSBvdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiB7XG4gICAgICBhdHRhY2g6IHJlZiA9PiB7IG92ZXJsYXlSZWYgPSByZWY7IGRlbGVnYXRlLmF0dGFjaChyZWYpOyB9LFxuICAgICAgZW5hYmxlOiAoKSA9PiB7XG4gICAgICAgIGlmIChlbmFibGVkKSByZXR1cm47XG4gICAgICAgIGVuYWJsZWQgPSB0cnVlOyBkZWxlZ2F0ZS5lbmFibGUoKTtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25TY3JvbGwsIHRydWUpKTtcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlOiAoKSA9PiB7XG4gICAgICAgIGVuYWJsZWQgPSBmYWxzZTsgZGVsZWdhdGUuZGlzYWJsZSgpO1xuICAgICAgICB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsLCB0cnVlKTtcbiAgICAgICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQgJiYgdmlldykgdmlldy5jYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZSk7XG4gICAgICAgIGZyYW1lID0gdW5kZWZpbmVkO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -92,9 +92,7 @@ export class ReportSessionContextService {
92
92
  }
93
93
  }
94
94
  const manualMap = this.manualRuntimeContext();
95
- const autoDetected = this.detectBrowserSession();
96
95
  return {
97
- ...autoDetected,
98
96
  ...providerMap,
99
97
  ...tokenMap,
100
98
  ...manualMap,
@@ -259,47 +257,6 @@ export class ReportSessionContextService {
259
257
  return {};
260
258
  }
261
259
  }
262
- /**
263
- * Safely detects session parameters from host project browser storage
264
- * (sessionStorage: user_Info, currentUser; localStorage: currentUser, CompanyData, user_Info).
265
- */
266
- detectBrowserSession() {
267
- const result = {};
268
- if (typeof window === 'undefined')
269
- return result;
270
- const sources = [
271
- { storage: typeof sessionStorage !== 'undefined' ? sessionStorage : null, key: 'user_Info' },
272
- { storage: typeof localStorage !== 'undefined' ? localStorage : null, key: 'currentUser' },
273
- { storage: typeof localStorage !== 'undefined' ? localStorage : null, key: 'CompanyData' },
274
- { storage: typeof sessionStorage !== 'undefined' ? sessionStorage : null, key: 'currentUser' },
275
- { storage: typeof localStorage !== 'undefined' ? localStorage : null, key: 'user_Info' },
276
- ];
277
- for (const src of sources) {
278
- if (!src.storage)
279
- continue;
280
- try {
281
- const item = src.storage.getItem(src.key);
282
- if (item) {
283
- const parsed = JSON.parse(item);
284
- if (parsed && typeof parsed === 'object') {
285
- for (const [k, v] of Object.entries(parsed)) {
286
- if (v !== undefined &&
287
- v !== null &&
288
- (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')) {
289
- if (!(k in result)) {
290
- result[k] = v;
291
- }
292
- }
293
- }
294
- }
295
- }
296
- }
297
- catch {
298
- // Ignore JSON parse errors in storage
299
- }
300
- }
301
- return result;
302
- }
303
260
  /**
304
261
  * Normalizes a parameter or session key into a lowercase alphanumeric string
305
262
  * for reliable, case-insensitive, and symbol-insensitive matching.
@@ -429,4 +386,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
429
386
  providedIn: 'root',
430
387
  }]
431
388
  }], ctorParameters: () => [] });
432
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsRUFDUixxQkFBcUIsRUFFckIsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHVCQUF1QixHQUt4QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQWtCbkU7Ozs7OztHQU1HO0FBSUgsTUFBTSxPQUFPLDJCQUEyQjtJQUNyQixRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLGdCQUFnQixHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0YsV0FBVyxHQUFHLE1BQU0sQ0FBbUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsVUFBVSxHQUFHLE1BQU0sQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFDcEQsWUFBWSxDQUFjO0lBQzFCLGdCQUFnQixDQUFzRTtJQUU3RSxTQUFTLEdBQUcsTUFBTSxDQUE4QixzQkFBc0IsRUFBRTtRQUN2RixRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FB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QUFFLENBQUM7Z0JBQ3BFLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO2dCQUM1QyxTQUFTO1lBQ1gsQ0FBQztZQUVELGdDQUFnQztZQUNoQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDbkIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLENBQUM7UUFDSCxDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksR0FBRyxLQUFLLFNBQVMsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDN0UsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUN6QixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU87WUFDTCxVQUFVLEVBQUUsV0FBVztZQUN2QixpQkFBaUIsRUFBRSxXQUFXO1lBQzlCLHdCQUF3QixFQUFFLGtCQUFrQjtTQUM3QyxDQUFDO0lBQ0osQ0FBQzt3R0F0YVUsMkJBQTJCOzRHQUEzQiwyQkFBMkIsY0FGMUIsTUFBTTs7NEZBRVAsMkJBQTJCO2tCQUh2QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ3YXlzUmVwb3J0Q29uZmlnIH0gZnJvbSAnLi4vY29uZmlnL2J3YXlzLXJlcG9ydC1jb25maWcnO1xuaW1wb3J0IHtcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgSW5qZWN0YWJsZSxcbiAgSW5qZWN0b3IsXG4gIHJ1bkluSW5qZWN0aW9uQ29udGV4dCxcbiAgT25EZXN0cm95LFxuICBzaWduYWwsXG4gIFNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0b09ic2VydmFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgUkVQT1JUX1NFU1NJT05fQ09OVEVYVCxcbiAgUkVQT1JUX1NFU1NJT05fUFJPVklERVIsXG4gIFNlc3Npb25Db250ZXh0TWFwLFxuICBTZXNzaW9uQ29udGV4dFByb3ZpZGVyLFxuICBTZXNzaW9uQ29udGV4dFNvdXJjZSxcbiAgU2Vzc2lvblBhcmFtUHJpbWl0aXZlLFxufSBmcm9tICcuLi90b2tlbnMvc2Vzc2lvbi1jb250ZXh0LnRva2VuJztcbmltcG9ydCB7IFJFUE9SVElOR19DT05GSUcgfSBmcm9tICcuLi90b2tlbnMvcmVwb3J0aW5nLWNvbmZpZy50b2tlbic7XG5pbXBvcnQgeyBQcm9jZWR1cmVQYXJhbWV0ZXJNZXRhZGF0YSB9IGZyb20gJy4uLy4uL2RhdGEtYWNjZXNzL2NvbnRyYWN0cy9zY2hlbWEtZGlzY292ZXJ5LmNvbnRyYWN0JztcbmltcG9ydCB7IGh1bWFuaXplSWRlbnRpZmllciB9IGZyb20gJy4uL3V0aWxzL2lkZW50aWZpZXItaHVtYW5pemVyJztcblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uUGFyYW1NYXRjaCB7XG4gIGlzTWF0Y2hlZDogYm9vbGVhbjtcbiAgc2Vzc2lvbktleTogc3RyaW5nO1xuICB2YWx1ZTogU2Vzc2lvblBhcmFtUHJpbWl0aXZlO1xuICBmcmllbmRseUxhYmVsOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGVyaXZlZFBhcmFtZXRlcnNSZXN1bHQge1xuICAvKiogVGhlIGNvbnNvbGlkYXRlZCBwYXJhbWV0ZXIgcGF5bG9hZCBmb3Igc3RvcmVkIHByb2NlZHVyZSBleGVjdXRpb24gKi9cbiAgcGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIC8qKiBNYXAgb2Ygd2hpY2ggU1AgcGFyYW1ldGVycyB3ZXJlIGF1dG8tZGVyaXZlZCBmcm9tIHNlc3Npb24gY29udGV4dCAqL1xuICBhdXRvRGVyaXZlZFBhcmFtczogUmVjb3JkPHN0cmluZywgU2Vzc2lvblBhcmFtTWF0Y2g+O1xuICAvKiogQW55IHJlcXVpcmVkIHBhcmFtZXRlcnMgdGhhdCB3ZXJlIG5laXRoZXIgaW4gc2Vzc2lvbiBjb250ZXh0IG5vciBleHBsaWNpdGx5IG1hcHBlZCAqL1xuICB1bnJlc29sdmVkUmVxdWlyZWRQYXJhbXM6IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW107XG59XG5cbi8qKlxuICogU2VydmljZSB0aGF0IG1hbmFnZXMgaG9zdCBhcHBsaWNhdGlvbiBzZXNzaW9uIGNvbnRleHQgcGFyYW1ldGVycyAoZS5nLiBicmFuY2hJZCwgY29tcGFueUlkLCB1c2VySWQpXG4gKiBhdCBydW50aW1lIGFuZCBhdXRvbWF0aWNhbGx5IGRldGVjdHMgYW5kIGJpbmRzIHRoZW0gdG8gU3RvcmVkIFByb2NlZHVyZSBwYXJhbWV0ZXJzLlxuICpcbiAqIERlc2lnbmVkIHRvIGNvbXBsZXRlbHkgc2hpZWxkIGVuZCB1c2VycyBmcm9tIGVudGVyaW5nIHRlY2huaWNhbCBzZXNzaW9uIHBhcmFtZXRlcnMgd2hpbGVcbiAqIGVsaW1pbmF0aW5nIHNpbGVudCBmYWlsdXJlcyBvciB0aHJlYWQgY3Jhc2hlcyBpbiBob3N0IGludGVncmF0aW9ucy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IGluaGVyaXRlZFNlc3Npb24gPSBpbmplY3QoUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlLCB7IHNraXBTZWxmOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbFJlYWRlciA9IHNpZ25hbDwoKCkgPT4gU2Vzc2lvbkNvbnRleHRNYXApIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxBc3luYyA9IHNpZ25hbDxTZXNzaW9uQ29udGV4dE1hcD4oe30pO1xuICBwcml2YXRlIGxvY2FsQ2xlYW51cD86ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgY29uZmlndXJlZFNvdXJjZTogQndheXNSZXBvcnRDb25maWdbJ3Nlc3Npb24nXSB8IEJ3YXlzUmVwb3J0Q29uZmlnWydzZXNzaW9uUHJvdmlkZXInXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJhd1NvdXJjZSA9IGluamVjdDxTZXNzaW9uQ29udGV4dFNvdXJjZSB8IG51bGw+KFJFUE9SVF9TRVNTSU9OX0NPTlRFWFQsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc2Vzc2lvblByb3ZpZGVyID0gaW5qZWN0PFNlc3Npb25Db250ZXh0UHJvdmlkZXIgfCBudWxsPihSRVBPUlRfU0VTU0lPTl9QUk9WSURFUiwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvcnRpbmdDb25maWcgPSBpbmplY3QoUkVQT1JUSU5HX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKiogSW50ZXJuYWwgbWFudWFsIHJ1bnRpbWUgc2Vzc2lvbiBvdmVycmlkZXMgKGUuZy4gc2V0IHZpYSBzZXRTZXNzaW9uQ29udGV4dCBvciBzZXRTZXNzaW9uUGFyYW1ldGVyKSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IG1hbnVhbFJ1bnRpbWVDb250ZXh0ID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbGF0ZXN0T2JzZXJ2YWJsZVZhbHVlID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUgPSBzaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+KHt9KTtcblxuICBwcml2YXRlIG9ic2VydmFibGVTdWI/OiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgcHJvdmlkZXJTdWI/OiBTdWJzY3JpcHRpb247XG5cbiAgLyoqXG4gICAqIFJlYWN0aXZlIHNpZ25hbCBleHBvc2luZyB0aGUgbGl2ZSBzZXNzaW9uIGNvbnRleHQgcGFyYW1ldGVycy5cbiAgICogVXBkYXRlcyBhdXRvbWF0aWNhbGx5IHdoZW4gaG9zdCBhcHAgbXV0YXRlcyBydW50aW1lIHN0YXRlLCB3aGVuIG9ic2VydmFibGVzIGVtaXQsXG4gICAqIG9yIHdoZW4gcmVhY3RpdmUgc2lnbmFscyB1cGRhdGUuXG4gICAqL1xuICByZWFkb25seSBzZXNzaW9uQ29udGV4dDogU2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBsb2NhbCA9IHRoaXMubG9jYWxSZWFkZXIoKTtcbiAgICBpZiAobG9jYWwpIHJldHVybiB7IC4uLmxvY2FsKCksIC4uLnRoaXMubWFudWFsUnVudGltZUNvbnRleHQoKSB9O1xuICAgIGlmICh0aGlzLmluaGVyaXRlZFNlc3Npb24pIHJldHVybiB7IC4uLnRoaXMuaW5oZXJpdGVkU2Vzc2lvbi5zZXNzaW9uQ29udGV4dCgpLCAuLi50aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0KCkgfTtcbiAgICBsZXQgcHJvdmlkZXJNYXA6IFNlc3Npb25Db250ZXh0TWFwID0ge307XG4gICAgaWYgKHRoaXMuc2Vzc2lvblByb3ZpZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNlc3Npb25Qcm92aWRlci5nZXRTZXNzaW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnN0IHZhbCA9IChyZXMgYXMgKCkgPT4gU2Vzc2lvbkNvbnRleHRNYXApKCk7XG4gICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcHJvdmlkZXJNYXAgPSB2YWw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShyZXMpKSB7XG4gICAgICAgICAgcHJvdmlkZXJNYXAgPSB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAocmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmICEoJ3RoZW4nIGluIHJlcykpIHtcbiAgICAgICAgICBwcm92aWRlck1hcCA9IHJlcyBhcyBTZXNzaW9uQ29udGV4dE1hcDtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgcmVhZGluZyBTZXNzaW9uQ29udGV4dFByb3ZpZGVyOicsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRva2VuTWFwOiBTZXNzaW9uQ29udGV4dE1hcCA9IHt9O1xuICAgIGlmICh0aGlzLnJhd1NvdXJjZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZSh0aGlzLnJhd1NvdXJjZSkpIHtcbiAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmF3U291cmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgcmVzID0gdGhpcy5yYXdTb3VyY2UoKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgaW5uZXJSZXMgPSAocmVzIGFzICgpID0+IHVua25vd24pKCk7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IGlubmVyUmVzICYmIHR5cGVvZiBpbm5lclJlcyA9PT0gJ29iamVjdCcgPyAoaW5uZXJSZXMgYXMgU2Vzc2lvbkNvbnRleHRNYXApIDoge307XG4gICAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUocmVzKSkge1xuICAgICAgICAgICAgdG9rZW5NYXAgPSB0aGlzLmxhdGVzdE9ic2VydmFibGVWYWx1ZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IHJlcyAmJiB0eXBlb2YgcmVzID09PSAnb2JqZWN0JyA/IChyZXMgYXMgU2Vzc2lvbkNvbnRleHRNYXApIDoge307XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnJhd1NvdXJjZSA9PT0gJ29iamVjdCcgJiYgdGhpcy5yYXdTb3VyY2UgIT09IG51bGwpIHtcbiAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMucmF3U291cmNlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBldmFsdWF0aW5nIHJhdyBzZXNzaW9uIHNvdXJjZTonLCBlcnIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG1hbnVhbE1hcCA9IHRoaXMubWFudWFsUnVudGltZUNvbnRleHQoKTtcbiAgICBjb25zdCBhdXRvRGV0ZWN0ZWQgPSB0aGlzLmRldGVjdEJyb3dzZXJTZXNzaW9uKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uYXV0b0RldGVjdGVkLFxuICAgICAgLi4ucHJvdmlkZXJNYXAsXG4gICAgICAuLi50b2tlbk1hcCxcbiAgICAgIC4uLm1hbnVhbE1hcCxcbiAgICB9O1xuICB9KTtcblxuICAvKipcbiAgICogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgbGl2ZSBzZXNzaW9uIHBhcmFtZXRlcnMgZm9yIFJ4SlMtYmFzZWQgaW50ZWdyYXRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgc2Vzc2lvbkNvbnRleHQkOiBPYnNlcnZhYmxlPFNlc3Npb25Db250ZXh0TWFwPiA9IHRvT2JzZXJ2YWJsZSh0aGlzLnNlc3Npb25Db250ZXh0KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAoIXRoaXMuaW5oZXJpdGVkU2Vzc2lvbikgdGhpcy5pbml0U3Vic2NyaXB0aW9ucygpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5vYnNlcnZhYmxlU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucHJvdmlkZXJTdWI/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5sb2NhbENsZWFudXA/LigpO1xuICB9XG5cbiAgLyoqIEludGVybmFsOiBjaGFuZ2VzIG9ubHkgdGhlIHNlc3Npb24gb3duZWQgYnkgYW4gZW1iZWRkZWQgZGVzaWduZXIuICovXG4gIGNvbmZpZ3VyZURlc2lnbmVyU2Vzc2lvbihjb25maWc6IEJ3YXlzUmVwb3J0Q29uZmlnIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IHNvdXJjZSA9IGNvbmZpZz8uc2Vzc2lvblByb3ZpZGVyID8/IGNvbmZpZz8uc2Vzc2lvbjtcbiAgICBpZiAoc291cmNlID09PSB0aGlzLmNvbmZpZ3VyZWRTb3VyY2UpIHJldHVybjtcbiAgICB0aGlzLmNvbmZpZ3VyZWRTb3VyY2UgPSBzb3VyY2U7XG4gICAgdGhpcy5sb2NhbENsZWFudXA/LigpO1xuICAgIHRoaXMubG9jYWxDbGVhbnVwID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubG9jYWxBc3luYy5zZXQoe30pO1xuICAgIHRoaXMubWFudWFsUnVudGltZUNvbnRleHQuc2V0KHt9KTtcbiAgICBpZiAoc291cmNlID09PSB1bmRlZmluZWQpIHsgdGhpcy5sb2NhbFJlYWRlci5zZXQobnVsbCk7IHJldHVybjsgfVxuICAgIGxldCBjaGlsZDogSW5qZWN0b3IgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHRhcmdldDogYW55ID0gc291cmNlO1xuICAgIGlmICh0eXBlb2Ygc291cmNlID09PSAnZnVuY3Rpb24nICYmIHNvdXJjZS5wcm90b3R5cGU/LmdldFNlc3Npb25Db250ZXh0KSB7XG4gICAgICB0YXJnZXQgPSB0aGlzLmluamVjdG9yLmdldChzb3VyY2UgYXMgYW55LCBudWxsKTtcbiAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgIGNoaWxkID0gSW5qZWN0b3IuY3JlYXRlKHsgcHJvdmlkZXJzOiBbc291cmNlIGFzIGFueV0sIHBhcmVudDogdGhpcy5pbmplY3RvciB9KTtcbiAgICAgICAgdGFyZ2V0ID0gY2hpbGQuZ2V0KHNvdXJjZSBhcyBhbnkpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCByZWFkID0gKCk6IGFueSA9PiBydW5JbkluamVjdGlvbkNvbnRleHQodGhpcy5pbmplY3RvciwgKCkgPT4ge1xuICAgICAgbGV0IHJlc3VsdCA9IHRhcmdldD8uZ2V0U2Vzc2lvbkNvbnRleHQgPyB0YXJnZXQuZ2V0U2Vzc2lvbkNvbnRleHQoKSA6IHRhcmdldDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyB0eXBlb2YgcmVzdWx0ID09PSAnZnVuY3Rpb24nICYmIGkgPCAzOyBpKyspIHJlc3VsdCA9IHJlc3VsdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICBjb25zdCBpbml0aWFsID0gcmVhZCgpO1xuICAgIGxldCBhY3RpdmUgPSB0cnVlO1xuICAgIGxldCBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgICBpZiAoaXNPYnNlcnZhYmxlKGluaXRpYWwpKSB7XG4gICAgICBzdWJzY3JpcHRpb24gPSBpbml0aWFsLnN1YnNjcmliZSh7IG5leHQ6IHZhbHVlID0+IHRoaXMubG9jYWxBc3luYy5zZXQodmFsdWUgYXMgU2Vzc2lvbkNvbnRleHRNYXAgPz8ge30pLFxuICAgICAgICBlcnJvcjogKCkgPT4gdGhpcy5sb2NhbEFzeW5jLnNldCh7fSkgfSk7XG4gICAgICB0aGlzLmxvY2FsUmVhZGVyLnNldCgoKSA9PiB0aGlzLmxvY2FsQXN5bmMoKSk7XG4gICAgfSBlbHNlIGlmIChpbml0aWFsICYmIHR5cGVvZiBpbml0aWFsLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGluaXRpYWwudGhlbigodmFsdWU6IFNlc3Npb25Db250ZXh0TWFwKSA9PiB7IGlmIChhY3RpdmUpIHRoaXMubG9jYWxBc3luYy5zZXQodmFsdWUgPz8ge30pOyB9LFxuICAgICAgICAoKSA9PiB7IGlmIChhY3RpdmUpIHRoaXMubG9jYWxBc3luYy5zZXQoe30pOyB9KTtcbiAgICAgIHRoaXMubG9jYWxSZWFkZXIuc2V0KCgpID0+IHRoaXMubG9jYWxBc3luYygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5sb2NhbFJlYWRlci5zZXQoKCkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJlYWQoKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgIWlzT2JzZXJ2YWJsZSh2YWx1ZSkgPyB2YWx1ZSA6IHt9O1xuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMubG9jYWxDbGVhbnVwID0gKCkgPT4ge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgICBzdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICBpZiAoY2hpbGQgJiYgJ2Rlc3Ryb3knIGluIGNoaWxkKSAoY2hpbGQgYXMgYW55KS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFN1YnNjcmlwdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmF3U291cmNlICYmIGlzT2JzZXJ2YWJsZSh0aGlzLnJhd1NvdXJjZSkpIHtcbiAgICAgIHRoaXMub2JzZXJ2YWJsZVN1YiA9IHRoaXMucmF3U291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICh2YWwpID0+IHtcbiAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdE9ic2VydmFibGVWYWx1ZS5zZXQoeyAuLi52YWwgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgZnJvbSBzZXNzaW9uIGNvbnRleHQgb2JzZXJ2YWJsZTonLCBlcnIpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Vzc2lvblByb3ZpZGVyKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXMgPSB0aGlzLnNlc3Npb25Qcm92aWRlci5nZXRTZXNzaW9uQ29udGV4dCgpO1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlcykpIHtcbiAgICAgICAgICB0aGlzLnByb3ZpZGVyU3ViID0gcmVzLnN1YnNjcmliZSh7XG4gICAgICAgICAgICBuZXh0OiAodmFsKSA9PiB7XG4gICAgICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb3ZpZGVyT2JzZXJ2YWJsZVZhbHVlLnNldCh7IC4uLnZhbCB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgZnJvbSBzZXNzaW9uIHByb3ZpZGVyIG9ic2VydmFibGU6JywgZXJyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgcmVzICYmXG4gICAgICAgICAgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAndGhlbicgaW4gcmVzICYmXG4gICAgICAgICAgdHlwZW9mIChyZXMgYXMgUHJvbWlzZTx1bmtub3duPikudGhlbiA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICApIHtcbiAgICAgICAgICAocmVzIGFzIFByb21pc2U8U2Vzc2lvbkNvbnRleHRNYXA+KVxuICAgICAgICAgICAgLnRoZW4oKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm92aWRlck9ic2VydmFibGVWYWx1ZS5zZXQoeyAuLi52YWwgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEVycm9yIGZyb20gc2Vzc2lvbiBwcm92aWRlciBwcm9taXNlOicsIGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRXJyb3IgaW5pdGlhbGl6aW5nIHNlc3Npb24gcHJvdmlkZXI6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBvciByZXBsYWNlcyB0aGUgcnVudGltZSBzZXNzaW9uIGNvbnRleHQuXG4gICAqIENhbiBiZSBjYWxsZWQgZHluYW1pY2FsbHkgYWZ0ZXIgdXNlciBhdXRoZW50aWNhdGlvbiwgYnJhbmNoIGNoYW5nZSwgZXRjLlxuICAgKi9cbiAgc2V0U2Vzc2lvbkNvbnRleHQoY29udGV4dDogU2Vzc2lvbkNvbnRleHRNYXApOiB2b2lkIHtcbiAgICBpZiAoY29udGV4dCAmJiB0eXBlb2YgY29udGV4dCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMubWFudWFsUnVudGltZUNvbnRleHQuc2V0KHsgLi4uY29udGV4dCB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC5zZXQoe30pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIG9yIHNldHMgYSBzcGVjaWZpYyBzZXNzaW9uIHBhcmFtZXRlciBhdCBydW50aW1lIChlLmcuIGJyYW5jaElkID0gMikuXG4gICAqL1xuICBzZXRTZXNzaW9uUGFyYW1ldGVyKGtleTogc3RyaW5nLCB2YWx1ZTogU2Vzc2lvblBhcmFtUHJpbWl0aXZlKTogdm9pZCB7XG4gICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnVwZGF0ZSgoY3VycmVudCkgPT4gKHtcbiAgICAgIC4uLmN1cnJlbnQsXG4gICAgICBba2V5XTogdmFsdWUsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFycyBhbnkgcnVudGltZSBzZXNzaW9uIHBhcmFtZXRlcnMgc2V0IHZpYSBgc2V0U2Vzc2lvbkNvbnRleHRgIG9yIGBzZXRTZXNzaW9uUGFyYW1ldGVyYC5cbiAgICovXG4gIGNsZWFyU2Vzc2lvbkNvbnRleHQoKTogdm9pZCB7XG4gICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC5zZXQoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSByZXR1cm5zIHRoZSBjdXJyZW50IHNlc3Npb24gY29udGV4dCBtYXAuXG4gICAqIEFsd2F5cyBwdWxscyB0aGUgbGF0ZXN0IHJ1bnRpbWUgc3RhdGUuIE5ldmVyIHRocm93cyBvciBjcmFzaGVzIHRoZSB0aHJlYWQuXG4gICAqL1xuICBnZXRDdXJyZW50U2Vzc2lvbkNvbnRleHQoKTogU2Vzc2lvbkNvbnRleHRNYXAge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5zZXNzaW9uQ29udGV4dCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBGYWlsZWQgdG8gZXZhbHVhdGUgc2Vzc2lvbiBjb250ZXh0OicsIGVycik7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhZmVseSBkZXRlY3RzIHNlc3Npb24gcGFyYW1ldGVycyBmcm9tIGhvc3QgcHJvamVjdCBicm93c2VyIHN0b3JhZ2VcbiAgICogKHNlc3Npb25TdG9yYWdlOiB1c2VyX0luZm8sIGN1cnJlbnRVc2VyOyBsb2NhbFN0b3JhZ2U6IGN1cnJlbnRVc2VyLCBDb21wYW55RGF0YSwgdXNlcl9JbmZvKS5cbiAgICovXG4gIHByaXZhdGUgZGV0ZWN0QnJvd3NlclNlc3Npb24oKTogU2Vzc2lvbkNvbnRleHRNYXAge1xuICAgIGNvbnN0IHJlc3VsdDogU2Vzc2lvbkNvbnRleHRNYXAgPSB7fTtcbiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiByZXN1bHQ7XG5cbiAgICBjb25zdCBzb3VyY2VzOiBBcnJheTx7IHN0b3JhZ2U6IFN0b3JhZ2UgfCBudWxsOyBrZXk6IHN0cmluZyB9PiA9IFtcbiAgICAgIHsgc3RvcmFnZTogdHlwZW9mIHNlc3Npb25TdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IHNlc3Npb25TdG9yYWdlIDogbnVsbCwga2V5OiAndXNlcl9JbmZvJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZSA6IG51bGwsIGtleTogJ2N1cnJlbnRVc2VyJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2YgbG9jYWxTdG9yYWdlICE9PSAndW5kZWZpbmVkJyA/IGxvY2FsU3RvcmFnZSA6IG51bGwsIGtleTogJ0NvbXBhbnlEYXRhJyB9LFxuICAgICAgeyBzdG9yYWdlOiB0eXBlb2Ygc2Vzc2lvblN0b3JhZ2UgIT09ICd1bmRlZmluZWQnID8gc2Vzc2lvblN0b3JhZ2UgOiBudWxsLCBrZXk6ICdjdXJyZW50VXNlcicgfSxcbiAgICAgIHsgc3RvcmFnZTogdHlwZW9mIGxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcgPyBsb2NhbFN0b3JhZ2UgOiBudWxsLCBrZXk6ICd1c2VyX0luZm8nIH0sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3Qgc3JjIG9mIHNvdXJjZXMpIHtcbiAgICAgIGlmICghc3JjLnN0b3JhZ2UpIGNvbnRpbnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHNyYy5zdG9yYWdlLmdldEl0ZW0oc3JjLmtleSk7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShpdGVtKTtcbiAgICAgICAgICBpZiAocGFyc2VkICYmIHR5cGVvZiBwYXJzZWQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyhwYXJzZWQpKSB7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB2ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICB2ICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgKHR5cGVvZiB2ID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHYgPT09ICdib29sZWFuJylcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoayBpbiByZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgICByZXN1bHRba10gPSB2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIElnbm9yZSBKU09OIHBhcnNlIGVycm9ycyBpbiBzdG9yYWdlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgcGFyYW1ldGVyIG9yIHNlc3Npb24ga2V5IGludG8gYSBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHN0cmluZ1xuICAgKiBmb3IgcmVsaWFibGUsIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBzeW1ib2wtaW5zZW5zaXRpdmUgbWF0Y2hpbmcuXG4gICAqIFN0cmlwcyBTUUwgU2VydmVyIEh1bmdhcmlhbiB0eXBlIHByZWZpeGVzIChlLmcuICdAY2hyQ29tcGFueUlkJyAtPiAnY29tcGFueWlkJykuXG4gICAqL1xuICBub3JtYWxpemVLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICgha2V5IHx8IHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGtleVxuICAgICAgLnJlcGxhY2UoL15AKy8sICcnKVxuICAgICAgLnJlcGxhY2UoL14oY2hyfGludHx2Y2hyfG5jaHJ8ZHR8c3RyfG51bXxiaXR8ZGVjfGZsdCkrL2ksICcnKVxuICAgICAgLnJlcGxhY2UoL1tfXFwtXFxzXSsvZywgJycpXG4gICAgICAudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyIG1hdGNoZXMgYW55IGtleSBpbiB0aGUgYWN0aXZlIHNlc3Npb24gY29udGV4dC5cbiAgICogU3VwcG9ydHMgZXhhY3QsIG5vcm1hbGl6ZWQsIGFuZCBjb21tb24gRVJQIHN5bm9ueW1zLlxuICAgKi9cbiAgbWF0Y2hQYXJhbWV0ZXIocGFyYW1OYW1lOiBzdHJpbmcpOiBTZXNzaW9uUGFyYW1NYXRjaCB8IG51bGwge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpO1xuICAgIGNvbnN0IHNlc3Npb25LZXlzID0gT2JqZWN0LmtleXMoc2Vzc2lvbik7XG4gICAgaWYgKHNlc3Npb25LZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBub3JtYWxpemVkUGFyYW0gPSB0aGlzLm5vcm1hbGl6ZUtleShwYXJhbU5hbWUpO1xuXG4gICAgLy8gMS4gRXhhY3QgbWF0Y2ggb24gcmF3IG5hbWVcbiAgICBpZiAocGFyYW1OYW1lIGluIHNlc3Npb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgc2Vzc2lvbktleTogcGFyYW1OYW1lLFxuICAgICAgICB2YWx1ZTogc2Vzc2lvbltwYXJhbU5hbWVdLFxuICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIocGFyYW1OYW1lKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gMi4gRGlyZWN0IG5vcm1hbGl6ZWQgbWF0Y2hcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzZXNzaW9uS2V5cykge1xuICAgICAgaWYgKHRoaXMubm9ybWFsaXplS2V5KGtleSkgPT09IG5vcm1hbGl6ZWRQYXJhbSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgICBzZXNzaW9uS2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHNlc3Npb25ba2V5XSxcbiAgICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBDb21tb24gRVJQIHN5bm9ueW0gZ3JvdXBzIChiaWRpcmVjdGlvbmFsIG1hdGNoaW5nKVxuICAgIGNvbnN0IHN5bm9ueW1Hcm91cHM6IHN0cmluZ1tdW10gPSBbXG4gICAgICBbJ2JyYW5jaCcsICdicmFuY2hpZCcsICdiaWQnLCAnYnJhbmNoY29kZScsICdsb2NhdGlvbmlkJywgJ2xvY2F0aW9uJywgJ2NvbXB1bml0JywgJ2NvbXB1bml0aWQnLCAndW5pdGNvZGUnLCAndW5pdGlkJywgJ2NvbXB1bml0cyddLFxuICAgICAgWydjb21wYW55JywgJ2NvbXBhbnlpZCcsICdjaWQnLCAnY29tcGFueWNvZGUnLCAndGVuYW50JywgJ3RlbmFudGlkJ10sXG4gICAgICBbJ3VzZXInLCAndXNlcmlkJywgJ3VpZCcsICd1c2VyY29kZScsICdvcGVyYXRvcmlkJywgJ2xvZ2ludXNlcicsICd1c2VybmFtZSddLFxuICAgICAgWydmaW5hbmNpYWx5ZWFyJywgJ2ZpbmFuY2lhbHllYXJpZCcsICd5ZWFyaWQnLCAnZnllYXInLCAnZmlzY2FseWVhcicsICdmaW55ZWFyJ10sXG4gICAgICBbJ2xvZ2luaWRlbnRpdHknLCAnbG9naW5faWRlbnRpdHknLCAnc3RhdHVzY29kZScsICdzdGF0dXNfY29kZSddLFxuICAgICAgWydvcmcnLCAnb3JnaWQnLCAnb3JnYW5pemF0aW9uJywgJ29yZ2FuaXphdGlvbmlkJ10sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc3lub255bUdyb3Vwcykge1xuICAgICAgaWYgKGdyb3VwLmluY2x1ZGVzKG5vcm1hbGl6ZWRQYXJhbSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2Vzc2lvbktleXMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXAuaW5jbHVkZXModGhpcy5ub3JtYWxpemVLZXkoa2V5KSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2Vzc2lvbktleToga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogc2Vzc2lvbltrZXldLFxuICAgICAgICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGRlcml2ZXMgYWxsIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyczpcbiAgICogLSBQcmVzZXJ2ZXMgZXhwbGljaXQgb3ZlcnJpZGVzIChlLmcuIGZyb20gY2FudmFzIGZvcm0gY29udHJvbHMgb3IgbWFudWFsIGlucHV0cylcbiAgICogLSBBdXRvbWF0aWNhbGx5IGluamVjdHMgbWF0Y2hlZCBzZXNzaW9uIHBhcmFtZXRlcnNcbiAgICogLSBWYWxpZGF0ZXMgd2hldGhlciByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBmdWxmaWxsZWRcbiAgICovXG4gIGRlcml2ZVBhcmFtZXRlcnMoXG4gICAgc3BQYXJhbXM6IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10sXG4gICAgZXhwbGljaXRNYXBwaW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fVxuICApOiBEZXJpdmVkUGFyYW1ldGVyc1Jlc3VsdCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCk7XG4gICAgY29uc3QgZmluYWxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgY29uc3QgYXV0b0Rlcml2ZWQ6IFJlY29yZDxzdHJpbmcsIFNlc3Npb25QYXJhbU1hdGNoPiA9IHt9O1xuICAgIGNvbnN0IHVucmVzb2x2ZWRSZXF1aXJlZDogUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBzcFBhcmFtcykge1xuICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFyYW0ubmFtZTtcbiAgICAgIGNvbnN0IGV4cGxpY2l0VmFsID0gZXhwbGljaXRNYXBwaW5nc1twYXJhbU5hbWVdO1xuXG4gICAgICAvLyBDaGVjayBpZiB1c2VyIG9yIGNhbnZhcyBleHBsaWNpdGx5IHByb3ZpZGVkIGEgdmFsdWUgKGFuZCBub3QgYW4gZW1wdHkgcGxhY2Vob2xkZXIpXG4gICAgICBjb25zdCBoYXNFeHBsaWNpdCA9IGV4cGxpY2l0VmFsICE9PSB1bmRlZmluZWQgJiYgZXhwbGljaXRWYWwgIT09ICcnICYmIGV4cGxpY2l0VmFsICE9PSBudWxsO1xuXG4gICAgICBpZiAoaGFzRXhwbGljaXQpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IGV4cGxpY2l0VmFsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHNlc3Npb24gY29udGV4dCBtYXRjaCAoc2tpcCB3aGVuIGF1dG9QYXJhbWV0ZXIgaXMgZGlzYWJsZWQpXG4gICAgICBpZiAodGhpcy5yZXBvcnRpbmdDb25maWc/LmF1dG9QYXJhbWV0ZXIgIT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25NYXRjaCA9IHRoaXMubWF0Y2hQYXJhbWV0ZXIocGFyYW1OYW1lKTtcbiAgICAgICAgaWYgKHNlc3Npb25NYXRjaCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBmaW5hbFBhcmFtc1twYXJhbU5hbWVdID0gc2Vzc2lvbk1hdGNoLnZhbHVlO1xuICAgICAgICAgIGF1dG9EZXJpdmVkW3BhcmFtTmFtZV0gPSBzZXNzaW9uTWF0Y2g7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgZGVmYXVsdCB2YWx1ZSBpcyBwcm92aWRlZCBpbiBTUCBtZXRhZGF0YVxuICAgICAgaWYgKHBhcmFtLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtLmRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBmaW5hbFBhcmFtc1twYXJhbU5hbWVdID0gcGFyYW0uZGVmYXVsdFZhbHVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgcmVxdWlyZWQgYnV0IG5vdCBzYXRpc2ZpZWRcbiAgICAgIGlmIChwYXJhbS5yZXF1aXJlZCkge1xuICAgICAgICB1bnJlc29sdmVkUmVxdWlyZWQucHVzaChwYXJhbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxzbyBpbmNsdWRlIGFueSBleHRyYSBleHBsaWNpdCBtYXBwaW5ncyB0aGF0IGRpZG4ndCBtYXRjaCBwYXJhbWV0ZXIgbGlzdFxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhleHBsaWNpdE1hcHBpbmdzKSkge1xuICAgICAgaWYgKCEoa2V5IGluIGZpbmFsUGFyYW1zKSAmJiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgdmFsICE9PSAnJykge1xuICAgICAgICBmaW5hbFBhcmFtc1trZXldID0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwYXJhbWV0ZXJzOiBmaW5hbFBhcmFtcyxcbiAgICAgIGF1dG9EZXJpdmVkUGFyYW1zOiBhdXRvRGVyaXZlZCxcbiAgICAgIHVucmVzb2x2ZWRSZXF1aXJlZFBhcmFtczogdW5yZXNvbHZlZFJlcXVpcmVkLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
389
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LXNlc3Npb24tY29udGV4dC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYndheXMtcmVwb3J0L3NyYy9saWIvY29yZS9zZXJ2aWNlcy9yZXBvcnQtc2Vzc2lvbi1jb250ZXh0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLFFBQVEsRUFDUixxQkFBcUIsRUFFckIsTUFBTSxHQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsWUFBWSxFQUE0QixNQUFNLE1BQU0sQ0FBQztBQUM5RCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLHVCQUF1QixHQUt4QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRXBFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLCtCQUErQixDQUFDOztBQWtCbkU7Ozs7OztHQU1HO0FBSUgsTUFBTSxPQUFPLDJCQUEyQjtJQUNyQixRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVCLGdCQUFnQixHQUFHLE1BQU0sQ0FBQywyQkFBMkIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDM0YsV0FBVyxHQUFHLE1BQU0sQ0FBbUMsSUFBSSxDQUFDLENBQUM7SUFDN0QsVUFBVSxHQUFHLE1BQU0sQ0FBb0IsRUFBRSxDQUFDLENBQUM7SUFDcEQsWUFBWSxDQUFjO0lBQzFCLGdCQUFnQixDQUFzRTtJQUU3RSxTQUFTLEdBQUcsTUFBTSxDQUE4QixzQkFBc0IsRUFBRTtRQUN2RixRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FB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UCwyQkFBMkI7a0JBSHZDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQndheXNSZXBvcnRDb25maWcgfSBmcm9tICcuLi9jb25maWcvYndheXMtcmVwb3J0LWNvbmZpZyc7XG5pbXBvcnQge1xuICBjb21wdXRlZCxcbiAgaW5qZWN0LFxuICBJbmplY3RhYmxlLFxuICBJbmplY3RvcixcbiAgcnVuSW5JbmplY3Rpb25Db250ZXh0LFxuICBPbkRlc3Ryb3ksXG4gIHNpZ25hbCxcbiAgU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvT2JzZXJ2YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBSRVBPUlRfU0VTU0lPTl9DT05URVhULFxuICBSRVBPUlRfU0VTU0lPTl9QUk9WSURFUixcbiAgU2Vzc2lvbkNvbnRleHRNYXAsXG4gIFNlc3Npb25Db250ZXh0UHJvdmlkZXIsXG4gIFNlc3Npb25Db250ZXh0U291cmNlLFxuICBTZXNzaW9uUGFyYW1QcmltaXRpdmUsXG59IGZyb20gJy4uL3Rva2Vucy9zZXNzaW9uLWNvbnRleHQudG9rZW4nO1xuaW1wb3J0IHsgUkVQT1JUSU5HX0NPTkZJRyB9IGZyb20gJy4uL3Rva2Vucy9yZXBvcnRpbmctY29uZmlnLnRva2VuJztcbmltcG9ydCB7IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhIH0gZnJvbSAnLi4vLi4vZGF0YS1hY2Nlc3MvY29udHJhY3RzL3NjaGVtYS1kaXNjb3ZlcnkuY29udHJhY3QnO1xuaW1wb3J0IHsgaHVtYW5pemVJZGVudGlmaWVyIH0gZnJvbSAnLi4vdXRpbHMvaWRlbnRpZmllci1odW1hbml6ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25QYXJhbU1hdGNoIHtcbiAgaXNNYXRjaGVkOiBib29sZWFuO1xuICBzZXNzaW9uS2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBTZXNzaW9uUGFyYW1QcmltaXRpdmU7XG4gIGZyaWVuZGx5TGFiZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZXJpdmVkUGFyYW1ldGVyc1Jlc3VsdCB7XG4gIC8qKiBUaGUgY29uc29saWRhdGVkIHBhcmFtZXRlciBwYXlsb2FkIGZvciBzdG9yZWQgcHJvY2VkdXJlIGV4ZWN1dGlvbiAqL1xuICBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgLyoqIE1hcCBvZiB3aGljaCBTUCBwYXJhbWV0ZXJzIHdlcmUgYXV0by1kZXJpdmVkIGZyb20gc2Vzc2lvbiBjb250ZXh0ICovXG4gIGF1dG9EZXJpdmVkUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBTZXNzaW9uUGFyYW1NYXRjaD47XG4gIC8qKiBBbnkgcmVxdWlyZWQgcGFyYW1ldGVycyB0aGF0IHdlcmUgbmVpdGhlciBpbiBzZXNzaW9uIGNvbnRleHQgbm9yIGV4cGxpY2l0bHkgbWFwcGVkICovXG4gIHVucmVzb2x2ZWRSZXF1aXJlZFBhcmFtczogUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXTtcbn1cblxuLyoqXG4gKiBTZXJ2aWNlIHRoYXQgbWFuYWdlcyBob3N0IGFwcGxpY2F0aW9uIHNlc3Npb24gY29udGV4dCBwYXJhbWV0ZXJzIChlLmcuIGJyYW5jaElkLCBjb21wYW55SWQsIHVzZXJJZClcbiAqIGF0IHJ1bnRpbWUgYW5kIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBhbmQgYmluZHMgdGhlbSB0byBTdG9yZWQgUHJvY2VkdXJlIHBhcmFtZXRlcnMuXG4gKlxuICogRGVzaWduZWQgdG8gY29tcGxldGVseSBzaGllbGQgZW5kIHVzZXJzIGZyb20gZW50ZXJpbmcgdGVjaG5pY2FsIHNlc3Npb24gcGFyYW1ldGVycyB3aGlsZVxuICogZWxpbWluYXRpbmcgc2lsZW50IGZhaWx1cmVzIG9yIHRocmVhZCBjcmFzaGVzIGluIGhvc3QgaW50ZWdyYXRpb25zLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgaW5oZXJpdGVkU2Vzc2lvbiA9IGluamVjdChSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2UsIHsgc2tpcFNlbGY6IHRydWUsIG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsUmVhZGVyID0gc2lnbmFsPCgoKSA9PiBTZXNzaW9uQ29udGV4dE1hcCkgfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2NhbEFzeW5jID0gc2lnbmFsPFNlc3Npb25Db250ZXh0TWFwPih7fSk7XG4gIHByaXZhdGUgbG9jYWxDbGVhbnVwPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBjb25maWd1cmVkU291cmNlOiBCd2F5c1JlcG9ydENvbmZpZ1snc2Vzc2lvbiddIHwgQndheXNSZXBvcnRDb25maWdbJ3Nlc3Npb25Qcm92aWRlciddO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmF3U291cmNlID0gaW5qZWN0PFNlc3Npb25Db250ZXh0U291cmNlIHwgbnVsbD4oUkVQT1JUX1NFU1NJT05fQ09OVEVYVCwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzZXNzaW9uUHJvdmlkZXIgPSBpbmplY3Q8U2Vzc2lvbkNvbnRleHRQcm92aWRlciB8IG51bGw+KFJFUE9SVF9TRVNTSU9OX1BST1ZJREVSLCB7XG4gICAgb3B0aW9uYWw6IHRydWUsXG4gIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9ydGluZ0NvbmZpZyA9IGluamVjdChSRVBPUlRJTkdfQ09ORklHLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKiBJbnRlcm5hbCBtYW51YWwgcnVudGltZSBzZXNzaW9uIG92ZXJyaWRlcyAoZS5nLiBzZXQgdmlhIHNldFNlc3Npb25Db250ZXh0IG9yIHNldFNlc3Npb25QYXJhbWV0ZXIpICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFudWFsUnVudGltZUNvbnRleHQgPSBzaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+KHt9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBsYXRlc3RPYnNlcnZhYmxlVmFsdWUgPSBzaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+KHt9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm92aWRlck9ic2VydmFibGVWYWx1ZSA9IHNpZ25hbDxTZXNzaW9uQ29udGV4dE1hcD4oe30pO1xuXG4gIHByaXZhdGUgb2JzZXJ2YWJsZVN1Yj86IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBwcm92aWRlclN1Yj86IFN1YnNjcmlwdGlvbjtcblxuICAvKipcbiAgICogUmVhY3RpdmUgc2lnbmFsIGV4cG9zaW5nIHRoZSBsaXZlIHNlc3Npb24gY29udGV4dCBwYXJhbWV0ZXJzLlxuICAgKiBVcGRhdGVzIGF1dG9tYXRpY2FsbHkgd2hlbiBob3N0IGFwcCBtdXRhdGVzIHJ1bnRpbWUgc3RhdGUsIHdoZW4gb2JzZXJ2YWJsZXMgZW1pdCxcbiAgICogb3Igd2hlbiByZWFjdGl2ZSBzaWduYWxzIHVwZGF0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25Db250ZXh0OiBTaWduYWw8U2Vzc2lvbkNvbnRleHRNYXA+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGxvY2FsID0gdGhpcy5sb2NhbFJlYWRlcigpO1xuICAgIGlmIChsb2NhbCkgcmV0dXJuIHsgLi4ubG9jYWwoKSwgLi4udGhpcy5tYW51YWxSdW50aW1lQ29udGV4dCgpIH07XG4gICAgaWYgKHRoaXMuaW5oZXJpdGVkU2Vzc2lvbikgcmV0dXJuIHsgLi4udGhpcy5pbmhlcml0ZWRTZXNzaW9uLnNlc3Npb25Db250ZXh0KCksIC4uLnRoaXMubWFudWFsUnVudGltZUNvbnRleHQoKSB9O1xuICAgIGxldCBwcm92aWRlck1hcDogU2Vzc2lvbkNvbnRleHRNYXAgPSB7fTtcbiAgICBpZiAodGhpcy5zZXNzaW9uUHJvdmlkZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IHRoaXMuc2Vzc2lvblByb3ZpZGVyLmdldFNlc3Npb25Db250ZXh0KCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc3QgdmFsID0gKHJlcyBhcyAoKSA9PiBTZXNzaW9uQ29udGV4dE1hcCkoKTtcbiAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBwcm92aWRlck1hcCA9IHZhbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKHJlcykpIHtcbiAgICAgICAgICBwcm92aWRlck1hcCA9IHRoaXMucHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChyZXMgJiYgdHlwZW9mIHJlcyA9PT0gJ29iamVjdCcgJiYgISgndGhlbicgaW4gcmVzKSkge1xuICAgICAgICAgIHByb3ZpZGVyTWFwID0gcmVzIGFzIFNlc3Npb25Db250ZXh0TWFwO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciByZWFkaW5nIFNlc3Npb25Db250ZXh0UHJvdmlkZXI6JywgZXJyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdG9rZW5NYXA6IFNlc3Npb25Db250ZXh0TWFwID0ge307XG4gICAgaWYgKHRoaXMucmF3U291cmNlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHRoaXMucmF3U291cmNlKSkge1xuICAgICAgICAgIHRva2VuTWFwID0gdGhpcy5sYXRlc3RPYnNlcnZhYmxlVmFsdWUoKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5yYXdTb3VyY2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBjb25zdCByZXMgPSB0aGlzLnJhd1NvdXJjZSgpO1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjb25zdCBpbm5lclJlcyA9IChyZXMgYXMgKCkgPT4gdW5rbm93bikoKTtcbiAgICAgICAgICAgIHRva2VuTWFwID0gaW5uZXJSZXMgJiYgdHlwZW9mIGlubmVyUmVzID09PSAnb2JqZWN0JyA/IChpbm5lclJlcyBhcyBTZXNzaW9uQ29udGV4dE1hcCkgOiB7fTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShyZXMpKSB7XG4gICAgICAgICAgICB0b2tlbk1hcCA9IHRoaXMubGF0ZXN0T2JzZXJ2YWJsZVZhbHVlKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRva2VuTWFwID0gcmVzICYmIHR5cGVvZiByZXMgPT09ICdvYmplY3QnID8gKHJlcyBhcyBTZXNzaW9uQ29udGV4dE1hcCkgOiB7fTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMucmF3U291cmNlID09PSAnb2JqZWN0JyAmJiB0aGlzLnJhd1NvdXJjZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRva2VuTWFwID0gdGhpcy5yYXdTb3VyY2U7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEVycm9yIGV2YWx1YXRpbmcgcmF3IHNlc3Npb24gc291cmNlOicsIGVycik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbWFudWFsTWFwID0gdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnByb3ZpZGVyTWFwLFxuICAgICAgLi4udG9rZW5NYXAsXG4gICAgICAuLi5tYW51YWxNYXAsXG4gICAgfTtcbiAgfSk7XG5cbiAgLyoqXG4gICAqIE9ic2VydmFibGUgc3RyZWFtIG9mIGxpdmUgc2Vzc2lvbiBwYXJhbWV0ZXJzIGZvciBSeEpTLWJhc2VkIGludGVncmF0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IHNlc3Npb25Db250ZXh0JDogT2JzZXJ2YWJsZTxTZXNzaW9uQ29udGV4dE1hcD4gPSB0b09ic2VydmFibGUodGhpcy5zZXNzaW9uQ29udGV4dCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmluaGVyaXRlZFNlc3Npb24pIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMub2JzZXJ2YWJsZVN1Yj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnByb3ZpZGVyU3ViPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMubG9jYWxDbGVhbnVwPy4oKTtcbiAgfVxuXG4gIC8qKiBJbnRlcm5hbDogY2hhbmdlcyBvbmx5IHRoZSBzZXNzaW9uIG93bmVkIGJ5IGFuIGVtYmVkZGVkIGRlc2lnbmVyLiAqL1xuICBjb25maWd1cmVEZXNpZ25lclNlc3Npb24oY29uZmlnOiBCd2F5c1JlcG9ydENvbmZpZyB8IG51bGwgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBzb3VyY2UgPSBjb25maWc/LnNlc3Npb25Qcm92aWRlciA/PyBjb25maWc/LnNlc3Npb247XG4gICAgaWYgKHNvdXJjZSA9PT0gdGhpcy5jb25maWd1cmVkU291cmNlKSByZXR1cm47XG4gICAgdGhpcy5jb25maWd1cmVkU291cmNlID0gc291cmNlO1xuICAgIHRoaXMubG9jYWxDbGVhbnVwPy4oKTtcbiAgICB0aGlzLmxvY2FsQ2xlYW51cCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmxvY2FsQXN5bmMuc2V0KHt9KTtcbiAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnNldCh7fSk7XG4gICAgaWYgKHNvdXJjZSA9PT0gdW5kZWZpbmVkKSB7IHRoaXMubG9jYWxSZWFkZXIuc2V0KG51bGwpOyByZXR1cm47IH1cbiAgICBsZXQgY2hpbGQ6IEluamVjdG9yIHwgdW5kZWZpbmVkO1xuICAgIGxldCB0YXJnZXQ6IGFueSA9IHNvdXJjZTtcbiAgICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ2Z1bmN0aW9uJyAmJiBzb3VyY2UucHJvdG90eXBlPy5nZXRTZXNzaW9uQ29udGV4dCkge1xuICAgICAgdGFyZ2V0ID0gdGhpcy5pbmplY3Rvci5nZXQoc291cmNlIGFzIGFueSwgbnVsbCk7XG4gICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICBjaGlsZCA9IEluamVjdG9yLmNyZWF0ZSh7IHByb3ZpZGVyczogW3NvdXJjZSBhcyBhbnldLCBwYXJlbnQ6IHRoaXMuaW5qZWN0b3IgfSk7XG4gICAgICAgIHRhcmdldCA9IGNoaWxkLmdldChzb3VyY2UgYXMgYW55KTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVhZCA9ICgpOiBhbnkgPT4gcnVuSW5JbmplY3Rpb25Db250ZXh0KHRoaXMuaW5qZWN0b3IsICgpID0+IHtcbiAgICAgIGxldCByZXN1bHQgPSB0YXJnZXQ/LmdldFNlc3Npb25Db250ZXh0ID8gdGFyZ2V0LmdldFNlc3Npb25Db250ZXh0KCkgOiB0YXJnZXQ7XG4gICAgICBmb3IgKGxldCBpID0gMDsgdHlwZW9mIHJlc3VsdCA9PT0gJ2Z1bmN0aW9uJyAmJiBpIDwgMzsgaSsrKSByZXN1bHQgPSByZXN1bHQoKTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgY29uc3QgaW5pdGlhbCA9IHJlYWQoKTtcbiAgICBsZXQgYWN0aXZlID0gdHJ1ZTtcbiAgICBsZXQgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JzZXJ2YWJsZShpbml0aWFsKSkge1xuICAgICAgc3Vic2NyaXB0aW9uID0gaW5pdGlhbC5zdWJzY3JpYmUoeyBuZXh0OiB2YWx1ZSA9PiB0aGlzLmxvY2FsQXN5bmMuc2V0KHZhbHVlIGFzIFNlc3Npb25Db250ZXh0TWFwID8/IHt9KSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMubG9jYWxBc3luYy5zZXQoe30pIH0pO1xuICAgICAgdGhpcy5sb2NhbFJlYWRlci5zZXQoKCkgPT4gdGhpcy5sb2NhbEFzeW5jKCkpO1xuICAgIH0gZWxzZSBpZiAoaW5pdGlhbCAmJiB0eXBlb2YgaW5pdGlhbC50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpbml0aWFsLnRoZW4oKHZhbHVlOiBTZXNzaW9uQ29udGV4dE1hcCkgPT4geyBpZiAoYWN0aXZlKSB0aGlzLmxvY2FsQXN5bmMuc2V0KHZhbHVlID8/IHt9KTsgfSxcbiAgICAgICAgKCkgPT4geyBpZiAoYWN0aXZlKSB0aGlzLmxvY2FsQXN5bmMuc2V0KHt9KTsgfSk7XG4gICAgICB0aGlzLmxvY2FsUmVhZGVyLnNldCgoKSA9PiB0aGlzLmxvY2FsQXN5bmMoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubG9jYWxSZWFkZXIuc2V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSByZWFkKCk7XG4gICAgICAgIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFpc09ic2VydmFibGUodmFsdWUpID8gdmFsdWUgOiB7fTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmxvY2FsQ2xlYW51cCA9ICgpID0+IHtcbiAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgaWYgKGNoaWxkICYmICdkZXN0cm95JyBpbiBjaGlsZCkgKGNoaWxkIGFzIGFueSkuZGVzdHJveSgpO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGluaXRTdWJzY3JpcHRpb25zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJhd1NvdXJjZSAmJiBpc09ic2VydmFibGUodGhpcy5yYXdTb3VyY2UpKSB7XG4gICAgICB0aGlzLm9ic2VydmFibGVTdWIgPSB0aGlzLnJhd1NvdXJjZS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAodmFsKSA9PiB7XG4gICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGhpcy5sYXRlc3RPYnNlcnZhYmxlVmFsdWUuc2V0KHsgLi4udmFsIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEVycm9yIGZyb20gc2Vzc2lvbiBjb250ZXh0IG9ic2VydmFibGU6JywgZXJyKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlc3Npb25Qcm92aWRlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzID0gdGhpcy5zZXNzaW9uUHJvdmlkZXIuZ2V0U2Vzc2lvbkNvbnRleHQoKTtcbiAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShyZXMpKSB7XG4gICAgICAgICAgdGhpcy5wcm92aWRlclN1YiA9IHJlcy5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogKHZhbCkgPT4ge1xuICAgICAgICAgICAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm92aWRlck9ic2VydmFibGVWYWx1ZS5zZXQoeyAuLi52YWwgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEVycm9yIGZyb20gc2Vzc2lvbiBwcm92aWRlciBvYnNlcnZhYmxlOicsIGVycik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHJlcyAmJlxuICAgICAgICAgIHR5cGVvZiByZXMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgJ3RoZW4nIGluIHJlcyAmJlxuICAgICAgICAgIHR5cGVvZiAocmVzIGFzIFByb21pc2U8dW5rbm93bj4pLnRoZW4gPT09ICdmdW5jdGlvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgKHJlcyBhcyBQcm9taXNlPFNlc3Npb25Db250ZXh0TWFwPilcbiAgICAgICAgICAgIC50aGVuKCh2YWwpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvdmlkZXJPYnNlcnZhYmxlVmFsdWUuc2V0KHsgLi4udmFsIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdbUmVwb3J0U2Vzc2lvbkNvbnRleHRTZXJ2aWNlXSBFcnJvciBmcm9tIHNlc3Npb24gcHJvdmlkZXIgcHJvbWlzZTonLCBlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1tSZXBvcnRTZXNzaW9uQ29udGV4dFNlcnZpY2VdIEVycm9yIGluaXRpYWxpemluZyBzZXNzaW9uIHByb3ZpZGVyOicsIGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgb3IgcmVwbGFjZXMgdGhlIHJ1bnRpbWUgc2Vzc2lvbiBjb250ZXh0LlxuICAgKiBDYW4gYmUgY2FsbGVkIGR5bmFtaWNhbGx5IGFmdGVyIHVzZXIgYXV0aGVudGljYXRpb24sIGJyYW5jaCBjaGFuZ2UsIGV0Yy5cbiAgICovXG4gIHNldFNlc3Npb25Db250ZXh0KGNvbnRleHQ6IFNlc3Npb25Db250ZXh0TWFwKTogdm9pZCB7XG4gICAgaWYgKGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQgPT09ICdvYmplY3QnKSB7XG4gICAgICB0aGlzLm1hbnVhbFJ1bnRpbWVDb250ZXh0LnNldCh7IC4uLmNvbnRleHQgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWFudWFsUnVudGltZUNvbnRleHQuc2V0KHt9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyBvciBzZXRzIGEgc3BlY2lmaWMgc2Vzc2lvbiBwYXJhbWV0ZXIgYXQgcnVudGltZSAoZS5nLiBicmFuY2hJZCA9IDIpLlxuICAgKi9cbiAgc2V0U2Vzc2lvblBhcmFtZXRlcihrZXk6IHN0cmluZywgdmFsdWU6IFNlc3Npb25QYXJhbVByaW1pdGl2ZSk6IHZvaWQge1xuICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgdGhpcy5tYW51YWxSdW50aW1lQ29udGV4dC51cGRhdGUoKGN1cnJlbnQpID0+ICh7XG4gICAgICAuLi5jdXJyZW50LFxuICAgICAgW2tleV06IHZhbHVlLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYW55IHJ1bnRpbWUgc2Vzc2lvbiBwYXJhbWV0ZXJzIHNldCB2aWEgYHNldFNlc3Npb25Db250ZXh0YCBvciBgc2V0U2Vzc2lvblBhcmFtZXRlcmAuXG4gICAqL1xuICBjbGVhclNlc3Npb25Db250ZXh0KCk6IHZvaWQge1xuICAgIHRoaXMubWFudWFsUnVudGltZUNvbnRleHQuc2V0KHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYWZlbHkgcmV0dXJucyB0aGUgY3VycmVudCBzZXNzaW9uIGNvbnRleHQgbWFwLlxuICAgKiBBbHdheXMgcHVsbHMgdGhlIGxhdGVzdCBydW50aW1lIHN0YXRlLiBOZXZlciB0aHJvd3Mgb3IgY3Jhc2hlcyB0aGUgdGhyZWFkLlxuICAgKi9cbiAgZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCk6IFNlc3Npb25Db250ZXh0TWFwIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuc2Vzc2lvbkNvbnRleHQoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1JlcG9ydFNlc3Npb25Db250ZXh0U2VydmljZV0gRmFpbGVkIHRvIGV2YWx1YXRlIHNlc3Npb24gY29udGV4dDonLCBlcnIpO1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgcGFyYW1ldGVyIG9yIHNlc3Npb24ga2V5IGludG8gYSBsb3dlcmNhc2UgYWxwaGFudW1lcmljIHN0cmluZ1xuICAgKiBmb3IgcmVsaWFibGUsIGNhc2UtaW5zZW5zaXRpdmUsIGFuZCBzeW1ib2wtaW5zZW5zaXRpdmUgbWF0Y2hpbmcuXG4gICAqIFN0cmlwcyBTUUwgU2VydmVyIEh1bmdhcmlhbiB0eXBlIHByZWZpeGVzIChlLmcuICdAY2hyQ29tcGFueUlkJyAtPiAnY29tcGFueWlkJykuXG4gICAqL1xuICBub3JtYWxpemVLZXkoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICgha2V5IHx8IHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIGtleVxuICAgICAgLnJlcGxhY2UoL15AKy8sICcnKVxuICAgICAgLnJlcGxhY2UoL14oY2hyfGludHx2Y2hyfG5jaHJ8ZHR8c3RyfG51bXxiaXR8ZGVjfGZsdCkrL2ksICcnKVxuICAgICAgLnJlcGxhY2UoL1tfXFwtXFxzXSsvZywgJycpXG4gICAgICAudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBhIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyIG1hdGNoZXMgYW55IGtleSBpbiB0aGUgYWN0aXZlIHNlc3Npb24gY29udGV4dC5cbiAgICogU3VwcG9ydHMgZXhhY3QsIG5vcm1hbGl6ZWQsIGFuZCBjb21tb24gRVJQIHN5bm9ueW1zLlxuICAgKi9cbiAgbWF0Y2hQYXJhbWV0ZXIocGFyYW1OYW1lOiBzdHJpbmcpOiBTZXNzaW9uUGFyYW1NYXRjaCB8IG51bGwge1xuICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLmdldEN1cnJlbnRTZXNzaW9uQ29udGV4dCgpO1xuICAgIGNvbnN0IHNlc3Npb25LZXlzID0gT2JqZWN0LmtleXMoc2Vzc2lvbik7XG4gICAgaWYgKHNlc3Npb25LZXlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBub3JtYWxpemVkUGFyYW0gPSB0aGlzLm5vcm1hbGl6ZUtleShwYXJhbU5hbWUpO1xuXG4gICAgLy8gMS4gRXhhY3QgbWF0Y2ggb24gcmF3IG5hbWVcbiAgICBpZiAocGFyYW1OYW1lIGluIHNlc3Npb24pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgc2Vzc2lvbktleTogcGFyYW1OYW1lLFxuICAgICAgICB2YWx1ZTogc2Vzc2lvbltwYXJhbU5hbWVdLFxuICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIocGFyYW1OYW1lKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gMi4gRGlyZWN0IG5vcm1hbGl6ZWQgbWF0Y2hcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBzZXNzaW9uS2V5cykge1xuICAgICAgaWYgKHRoaXMubm9ybWFsaXplS2V5KGtleSkgPT09IG5vcm1hbGl6ZWRQYXJhbSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgICBzZXNzaW9uS2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHNlc3Npb25ba2V5XSxcbiAgICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBDb21tb24gRVJQIHN5bm9ueW0gZ3JvdXBzIChiaWRpcmVjdGlvbmFsIG1hdGNoaW5nKVxuICAgIGNvbnN0IHN5bm9ueW1Hcm91cHM6IHN0cmluZ1tdW10gPSBbXG4gICAgICBbJ2JyYW5jaCcsICdicmFuY2hpZCcsICdiaWQnLCAnYnJhbmNoY29kZScsICdsb2NhdGlvbmlkJywgJ2xvY2F0aW9uJywgJ2NvbXB1bml0JywgJ2NvbXB1bml0aWQnLCAndW5pdGNvZGUnLCAndW5pdGlkJywgJ2NvbXB1bml0cyddLFxuICAgICAgWydjb21wYW55JywgJ2NvbXBhbnlpZCcsICdjaWQnLCAnY29tcGFueWNvZGUnLCAndGVuYW50JywgJ3RlbmFudGlkJ10sXG4gICAgICBbJ3VzZXInLCAndXNlcmlkJywgJ3VpZCcsICd1c2VyY29kZScsICdvcGVyYXRvcmlkJywgJ2xvZ2ludXNlcicsICd1c2VybmFtZSddLFxuICAgICAgWydmaW5hbmNpYWx5ZWFyJywgJ2ZpbmFuY2lhbHllYXJpZCcsICd5ZWFyaWQnLCAnZnllYXInLCAnZmlzY2FseWVhcicsICdmaW55ZWFyJ10sXG4gICAgICBbJ2xvZ2luaWRlbnRpdHknLCAnbG9naW5faWRlbnRpdHknLCAnc3RhdHVzY29kZScsICdzdGF0dXNfY29kZSddLFxuICAgICAgWydvcmcnLCAnb3JnaWQnLCAnb3JnYW5pemF0aW9uJywgJ29yZ2FuaXphdGlvbmlkJ10sXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygc3lub255bUdyb3Vwcykge1xuICAgICAgaWYgKGdyb3VwLmluY2x1ZGVzKG5vcm1hbGl6ZWRQYXJhbSkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2Vzc2lvbktleXMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXAuaW5jbHVkZXModGhpcy5ub3JtYWxpemVLZXkoa2V5KSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGlzTWF0Y2hlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgc2Vzc2lvbktleToga2V5LFxuICAgICAgICAgICAgICB2YWx1ZTogc2Vzc2lvbltrZXldLFxuICAgICAgICAgICAgICBmcmllbmRseUxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoa2V5KSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgYW5kIGRlcml2ZXMgYWxsIHN0b3JlZCBwcm9jZWR1cmUgcGFyYW1ldGVyczpcbiAgICogLSBQcmVzZXJ2ZXMgZXhwbGljaXQgb3ZlcnJpZGVzIChlLmcuIGZyb20gY2FudmFzIGZvcm0gY29udHJvbHMgb3IgbWFudWFsIGlucHV0cylcbiAgICogLSBBdXRvbWF0aWNhbGx5IGluamVjdHMgbWF0Y2hlZCBzZXNzaW9uIHBhcmFtZXRlcnNcbiAgICogLSBWYWxpZGF0ZXMgd2hldGhlciByZXF1aXJlZCBwYXJhbWV0ZXJzIGFyZSBmdWxmaWxsZWRcbiAgICovXG4gIGRlcml2ZVBhcmFtZXRlcnMoXG4gICAgc3BQYXJhbXM6IFByb2NlZHVyZVBhcmFtZXRlck1ldGFkYXRhW10sXG4gICAgZXhwbGljaXRNYXBwaW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fVxuICApOiBEZXJpdmVkUGFyYW1ldGVyc1Jlc3VsdCB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMuZ2V0Q3VycmVudFNlc3Npb25Db250ZXh0KCk7XG4gICAgY29uc3QgZmluYWxQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgY29uc3QgYXV0b0Rlcml2ZWQ6IFJlY29yZDxzdHJpbmcsIFNlc3Npb25QYXJhbU1hdGNoPiA9IHt9O1xuICAgIGNvbnN0IHVucmVzb2x2ZWRSZXF1aXJlZDogUHJvY2VkdXJlUGFyYW1ldGVyTWV0YWRhdGFbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBwYXJhbSBvZiBzcFBhcmFtcykge1xuICAgICAgY29uc3QgcGFyYW1OYW1lID0gcGFyYW0ubmFtZTtcbiAgICAgIGNvbnN0IGV4cGxpY2l0VmFsID0gZXhwbGljaXRNYXBwaW5nc1twYXJhbU5hbWVdO1xuXG4gICAgICAvLyBDaGVjayBpZiB1c2VyIG9yIGNhbnZhcyBleHBsaWNpdGx5IHByb3ZpZGVkIGEgdmFsdWUgKGFuZCBub3QgYW4gZW1wdHkgcGxhY2Vob2xkZXIpXG4gICAgICBjb25zdCBoYXNFeHBsaWNpdCA9IGV4cGxpY2l0VmFsICE9PSB1bmRlZmluZWQgJiYgZXhwbGljaXRWYWwgIT09ICcnICYmIGV4cGxpY2l0VmFsICE9PSBudWxsO1xuXG4gICAgICBpZiAoaGFzRXhwbGljaXQpIHtcbiAgICAgICAgZmluYWxQYXJhbXNbcGFyYW1OYW1lXSA9IGV4cGxpY2l0VmFsO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZm9yIHNlc3Npb24gY29udGV4dCBtYXRjaCAoc2tpcCB3aGVuIGF1dG9QYXJhbWV0ZXIgaXMgZGlzYWJsZWQpXG4gICAgICBpZiAodGhpcy5yZXBvcnRpbmdDb25maWc/LmF1dG9QYXJhbWV0ZXIgIT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHNlc3Npb25NYXRjaCA9IHRoaXMubWF0Y2hQYXJhbWV0ZXIocGFyYW1OYW1lKTtcbiAgICAgICAgaWYgKHNlc3Npb25NYXRjaCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBzZXNzaW9uTWF0Y2gudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBmaW5hbFBhcmFtc1twYXJhbU5hbWVdID0gc2Vzc2lvbk1hdGNoLnZhbHVlO1xuICAgICAgICAgIGF1dG9EZXJpdmVkW3BhcmFtTmFtZV0gPSBzZXNzaW9uTWF0Y2g7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgZGVmYXVsdCB2YWx1ZSBpcyBwcm92aWRlZCBpbiBTUCBtZXRhZGF0YVxuICAgICAgaWYgKHBhcmFtLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmIHBhcmFtLmRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBmaW5hbFBhcmFtc1twYXJhbU5hbWVdID0gcGFyYW0uZGVmYXVsdFZhbHVlO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgcmVxdWlyZWQgYnV0IG5vdCBzYXRpc2ZpZWRcbiAgICAgIGlmIChwYXJhbS5yZXF1aXJlZCkge1xuICAgICAgICB1bnJlc29sdmVkUmVxdWlyZWQucHVzaChwYXJhbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWxzbyBpbmNsdWRlIGFueSBleHRyYSBleHBsaWNpdCBtYXBwaW5ncyB0aGF0IGRpZG4ndCBtYXRjaCBwYXJhbWV0ZXIgbGlzdFxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhleHBsaWNpdE1hcHBpbmdzKSkge1xuICAgICAgaWYgKCEoa2V5IGluIGZpbmFsUGFyYW1zKSAmJiB2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgdmFsICE9PSAnJykge1xuICAgICAgICBmaW5hbFBhcmFtc1trZXldID0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwYXJhbWV0ZXJzOiBmaW5hbFBhcmFtcyxcbiAgICAgIGF1dG9EZXJpdmVkUGFyYW1zOiBhdXRvRGVyaXZlZCxcbiAgICAgIHVucmVzb2x2ZWRSZXF1aXJlZFBhcmFtczogdW5yZXNvbHZlZFJlcXVpcmVkLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==