tango-app-ui-analyse-trax 4.0.52 → 4.0.54

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 (23) hide show
  1. package/esm2022/lib/components/audit-v2/audit-v2-access.mjs +38 -3
  2. package/esm2022/lib/components/audit-v2/audit-v2-layout/audit-v2-layout.component.mjs +27 -3
  3. package/esm2022/lib/components/audit-v2/dashboard/audit-v2-dashboard.component.mjs +39 -28
  4. package/esm2022/lib/components/audit-v2/gallery/audit-v2-gallery.component.mjs +15 -6
  5. package/esm2022/lib/components/audit-v2/reports/audit-v2-report-summary.mjs +39 -11
  6. package/esm2022/lib/components/audit-v2/reports/audit-v2-reports.component.mjs +52 -9
  7. package/esm2022/lib/components/audit-v2/schedule/audit-v2-schedule-editor.component.mjs +12 -26
  8. package/fesm2022/{tango-app-ui-analyse-trax-audit-v2.module-DSYJBHlB.mjs → tango-app-ui-analyse-trax-audit-v2.module-DxAr4Pk5.mjs} +217 -81
  9. package/fesm2022/tango-app-ui-analyse-trax-audit-v2.module-DxAr4Pk5.mjs.map +1 -0
  10. package/fesm2022/{tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-DHocJmzJ.mjs → tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-P9R1N-cb.mjs} +3 -3
  11. package/fesm2022/{tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-DHocJmzJ.mjs.map → tango-app-ui-analyse-trax-tango-app-ui-analyse-trax-P9R1N-cb.mjs.map} +1 -1
  12. package/fesm2022/tango-app-ui-analyse-trax.mjs +1 -1
  13. package/lib/components/add-checklist/add-checklist.component.d.ts +1 -1
  14. package/lib/components/audit-v2/audit-v2-access.d.ts +14 -1
  15. package/lib/components/audit-v2/audit-v2-layout/audit-v2-layout.component.d.ts +8 -0
  16. package/lib/components/audit-v2/dashboard/audit-v2-dashboard.component.d.ts +5 -2
  17. package/lib/components/audit-v2/gallery/audit-v2-gallery.component.d.ts +5 -0
  18. package/lib/components/audit-v2/question-editor/audit-v2-question-editor.component.d.ts +1 -1
  19. package/lib/components/audit-v2/reports/audit-v2-report-summary.d.ts +28 -5
  20. package/lib/components/audit-v2/reports/audit-v2-reports.component.d.ts +9 -0
  21. package/lib/components/audit-v2/schedule/audit-v2-schedule-editor.component.d.ts +4 -10
  22. package/package.json +1 -1
  23. package/fesm2022/tango-app-ui-analyse-trax-audit-v2.module-DSYJBHlB.mjs.map +0 -1
@@ -1,4 +1,31 @@
1
1
  import { map } from 'rxjs';
2
+ /** The Audit menu tabs: route path under /manage/trax/audit-v2 and the Manage Users row (TangoTrax_<key>_*). */
3
+ export const AUDIT_TABS = [
4
+ { key: 'Audit_ActionCenter', path: 'actioncenter' },
5
+ { key: 'Audit_Dashboard', path: 'dashboard' },
6
+ { key: 'Audit_Flags', path: 'flags' },
7
+ { key: 'Audit_Gallery', path: 'gallery' },
8
+ { key: 'Audit_Manage', path: 'manage' },
9
+ { key: 'Audit_Reports', path: 'reports' }
10
+ ];
11
+ /**
12
+ * Audit tabs the user may open, from Manage Users › Tango Trax › Audit's tab rows (TangoTrax_Audit_<Tab>_isAdd /
13
+ * _isEdit; Add or Edit shows the tab). A Tango user sees every tab; a user saved before the tab rows existed (no tab
14
+ * keys) keeps every tab while Audit is on. Same rule as the header tabs (tango-app-shared audit-tab-access.ts).
15
+ */
16
+ export function auditTabsOn(p) {
17
+ if (!p || !traxModuleOn(p, 'Audit')) {
18
+ return [];
19
+ }
20
+ if (fullAuditAccess(p)) {
21
+ return AUDIT_TABS.map(t => t.path);
22
+ }
23
+ return AUDIT_TABS.filter(t => {
24
+ const add = p['TangoTrax_' + t.key + '_isAdd'];
25
+ const edit = p['TangoTrax_' + t.key + '_isEdit'];
26
+ return add === undefined && edit === undefined ? true : !!add || !!edit;
27
+ }).map(t => t.path);
28
+ }
2
29
  export function auditAccess(gs) {
3
30
  return gs.userAccess.pipe(map((p) => ({
4
31
  loaded: !!p,
@@ -11,10 +38,11 @@ export function auditAccess(gs) {
11
38
  canAddTask: !!p?.TangoTrax_Task_isAdd,
12
39
  canEditTask: !!p?.TangoTrax_Task_isEdit,
13
40
  isTango: (p?.userType || storedUserType()) === 'tango',
41
+ tabs: auditTabsOn(p),
14
42
  })));
15
43
  }
16
44
  /**
17
- * Whether the Audit menu / Schedule Info is shown. A Tango (internal) user always sees both. A client user sees a
45
+ * Whether the Audit menu / Schedule Info is shown. A Tango user or client superadmin always sees both. A client user sees a
18
46
  * module when its Add or Edit key is true (TangoTrax_<module>_isAdd / _isEdit, from Manage Users); without those keys
19
47
  * (a user saved before the Audit / Schedules rows, on an API that does not fill them in yet) the Checklist keys decide.
20
48
  */
@@ -22,7 +50,7 @@ export function traxModuleOn(p, module) {
22
50
  if (!p) {
23
51
  return false;
24
52
  }
25
- if (p.userType === 'tango') {
53
+ if (fullAuditAccess(p)) {
26
54
  return true;
27
55
  }
28
56
  const add = p['TangoTrax_' + module + '_isAdd'];
@@ -43,4 +71,11 @@ function storedUserType() {
43
71
  return '';
44
72
  }
45
73
  }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdjItYWNjZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmF4L3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC12Mi9hdWRpdC12Mi1hY2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWdDdkMsTUFBTSxVQUFVLFdBQVcsQ0FBQyxFQUFzQjtJQUNoRCxPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN6QyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDWCxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDakMsZUFBZSxFQUFFLFlBQVksQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDO1FBQzdDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUscUJBQXFCLElBQUksQ0FBQyxFQUFFLHlCQUF5QixDQUFDO1FBQ3BFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsc0JBQXNCLElBQUksQ0FBQyxFQUFFLDBCQUEwQixDQUFDO1FBQ3ZFLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUseUJBQXlCLElBQUksQ0FBQyxFQUFFLHlCQUF5QixDQUFDO1FBQ2hGLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsMEJBQTBCLElBQUksQ0FBQyxFQUFFLDBCQUEwQixDQUFDO1FBQ25GLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLG9CQUFvQjtRQUNyQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxxQkFBcUI7UUFDdkMsT0FBTyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsSUFBSSxjQUFjLEVBQUUsQ0FBQyxLQUFLLE9BQU87S0FDdkQsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxDQUFNLEVBQUUsTUFBNkI7SUFDaEUsSUFBSSxDQUFDLENBQUMsRUFBRTtRQUFFLE9BQU8sS0FBSyxDQUFDO0tBQUU7SUFDekIsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRTtRQUFFLE9BQU8sSUFBSSxDQUFDO0tBQUU7SUFDNUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFlBQVksR0FBRyxNQUFNLEdBQUcsUUFBUSxDQUFDLENBQUM7SUFDaEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxDQUFDLFlBQVksR0FBRyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7SUFDbEQsSUFBSSxHQUFHLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxTQUFTLEVBQUU7UUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztLQUFFO0lBQ3hFLE1BQU0sSUFBSSxHQUFHLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQztJQUN6QyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsMEJBQTBCLENBQUM7SUFDM0MsT0FBTyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDM0IsQ0FBQztBQUVELGlIQUFpSDtBQUNqSCxTQUFTLGNBQWM7SUFDckIsSUFBSTtRQUNGLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLFFBQVEsSUFBSSxFQUFFLENBQUM7S0FDOUU7SUFBQyxNQUFNO1FBQ04sT0FBTyxFQUFFLENBQUM7S0FDWDtBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgR2xvYmFsU3RhdGVTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcblxyXG4vKipcclxuICogV2hhdCB0aGUgc2lnbmVkLWluIHVzZXIgbWF5IGRvIGluIHRoZSBBdWRpdCBtZW51LCBmcm9tIE1hbmFnZSBVc2VycyAtPiBUYW5nbyBUcmF4OiBBdWRpdCAoYXVkaXRzKSBhbmQgU2NoZWR1bGVzXHJcbiAqIChNYW5hZ2UgLT4gU2NoZWR1bGVzKSwgdGhlIHNhbWUgcGVybWlzc2lvbnMgdGhlIC90cmF4L2F1ZGl0Lyogcm91dGVzIGNoZWNrLiBBIHVzZXIgc2F2ZWQgYmVmb3JlIHRob3NlIHR3byByb3dzXHJcbiAqIGV4aXN0ZWQgaGFzIG5laXRoZXIsIHNvIENoZWNrbGlzdCBkZWNpZGVzIGZvciB0aGVtLCBhcyBpdCBkaWQgYmVmb3JlIChhbmQgYXMgdGhlIEFQSSBmYWxscyBiYWNrKS5cclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRBY2Nlc3Mge1xyXG4gIC8qKiBUaGUgc2lnbmVkLWluIHVzZXIncyBwZXJtaXNzaW9ucyBoYXZlIGFycml2ZWQgKGdzLnVzZXJBY2Nlc3Mgc3RhcnRzIG51bGwpOiB2aWV3IGNoZWNrcyBvbmx5IGFjdCBhZnRlciB0aGlzLiAqL1xyXG4gIGxvYWRlZD86IGJvb2xlYW47XHJcbiAgLyoqIFRhbmdvVHJheC9BdWRpdCBhZGQgb3IgZWRpdDogdGhlIEF1ZGl0IG1lbnUgaXMgc2hvd24gYW5kIG9wZW5zIChzaWRlYmFyIFRhbmdvIFRyYXggLT4gQXVkaXQpLiAqL1xyXG4gIGNhblZpZXc/OiBib29sZWFuO1xyXG4gIC8qKiBUYW5nb1RyYXgvU2NoZWR1bGVzIGFkZCBvciBlZGl0OiBNYW5hZ2UgLT4gU2NoZWR1bGUgSW5mbyBpcyBzaG93bi4gKi9cclxuICBjYW5WaWV3U2NoZWR1bGU/OiBib29sZWFuO1xyXG4gIC8qKiBUYW5nb1RyYXgvQXVkaXQgYWRkIChlbHNlIENoZWNrbGlzdCk6IGNyZWF0ZSAvIGR1cGxpY2F0ZSBhdWRpdHMuICovXHJcbiAgY2FuQWRkOiBib29sZWFuO1xyXG4gIC8qKiBUYW5nb1RyYXgvQXVkaXQgZWRpdCAoZWxzZSBDaGVja2xpc3QpOiBlZGl0LCBjb25maWd1cmUsIHB1Ymxpc2gsIGRlbGV0ZSwgYXBwcm92ZSwgcmV2aWV3LiAqL1xyXG4gIGNhbkVkaXQ6IGJvb2xlYW47XHJcbiAgLyoqIFRhbmdvVHJheC9TY2hlZHVsZXMgYWRkIChlbHNlIENoZWNrbGlzdCk6IENyZWF0ZSBzY2hlZHVsZSwgU2NoZWR1bGUsIER1cGxpY2F0ZSBzY2hlZHVsZS4gKi9cclxuICBjYW5BZGRTY2hlZHVsZT86IGJvb2xlYW47XHJcbiAgLyoqIFRhbmdvVHJheC9TY2hlZHVsZXMgZWRpdCAoZWxzZSBDaGVja2xpc3QpOiBlZGl0LCBwdWJsaXNoLCBkZWxldGUgc2NoZWR1bGVzLiAqL1xyXG4gIGNhbkVkaXRTY2hlZHVsZT86IGJvb2xlYW47XHJcbiAgLyoqIFRhbmdvVHJheC90YXNrIGFkZDogTWFuYWdlIC0+IFRhc2sgXCJDcmVhdGUgVGFza1wiICh2MSBtYW5hZ2UtdGFzaykuICovXHJcbiAgY2FuQWRkVGFzaz86IGJvb2xlYW47XHJcbiAgLyoqIFRhbmdvVHJheC90YXNrIGVkaXQ6IHRhc2sgdmlldyAvIGNvbmZpZ3VyZSAvIGR1cGxpY2F0ZSAvIGRlbGV0ZSAvIHB1Ymxpc2ggKHYxIG1hbmFnZS10YXNrKSwgQ3JlYXRlIFRhc2sgZnJvbVxyXG4gICAqICBhIHN1Ym1pdHRlZCBhbnN3ZXIgYW5kIFJlZG8gb2YgYSB0YXNrJ3MgcXVlc3Rpb24gKHYxIGdhbGxlcnkpLiAqL1xyXG4gIGNhbkVkaXRUYXNrPzogYm9vbGVhbjtcclxuICAvKiogQSBUYW5nbyAoaW50ZXJuYWwpIHVzZXI6IHRoZSB2MSBnYWxsZXJ5J3MgUmVkbyAvIENyZWF0ZSBUYXNrIGFyZSBmb3IgY2xpZW50IHVzZXJzIG9ubHkuICovXHJcbiAgaXNUYW5nbz86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBhdWRpdEFjY2VzcyhnczogR2xvYmFsU3RhdGVTZXJ2aWNlKTogT2JzZXJ2YWJsZTxBdWRpdEFjY2Vzcz4ge1xyXG4gIHJldHVybiBncy51c2VyQWNjZXNzLnBpcGUobWFwKChwOiBhbnkpID0+ICh7XHJcbiAgICBsb2FkZWQ6ICEhcCxcclxuICAgIGNhblZpZXc6IHRyYXhNb2R1bGVPbihwLCAnQXVkaXQnKSxcclxuICAgIGNhblZpZXdTY2hlZHVsZTogdHJheE1vZHVsZU9uKHAsICdTY2hlZHVsZXMnKSxcclxuICAgIGNhbkFkZDogISEocD8uVGFuZ29UcmF4X0F1ZGl0X2lzQWRkID8/IHA/LlRhbmdvVHJheF9jaGVja2xpc3RfaXNBZGQpLFxyXG4gICAgY2FuRWRpdDogISEocD8uVGFuZ29UcmF4X0F1ZGl0X2lzRWRpdCA/PyBwPy5UYW5nb1RyYXhfY2hlY2tsaXN0X2lzRWRpdCksXHJcbiAgICBjYW5BZGRTY2hlZHVsZTogISEocD8uVGFuZ29UcmF4X1NjaGVkdWxlc19pc0FkZCA/PyBwPy5UYW5nb1RyYXhfY2hlY2tsaXN0X2lzQWRkKSxcclxuICAgIGNhbkVkaXRTY2hlZHVsZTogISEocD8uVGFuZ29UcmF4X1NjaGVkdWxlc19pc0VkaXQgPz8gcD8uVGFuZ29UcmF4X2NoZWNrbGlzdF9pc0VkaXQpLFxyXG4gICAgY2FuQWRkVGFzazogISFwPy5UYW5nb1RyYXhfVGFza19pc0FkZCxcclxuICAgIGNhbkVkaXRUYXNrOiAhIXA/LlRhbmdvVHJheF9UYXNrX2lzRWRpdCxcclxuICAgIGlzVGFuZ286IChwPy51c2VyVHlwZSB8fCBzdG9yZWRVc2VyVHlwZSgpKSA9PT0gJ3RhbmdvJyxcclxuICB9KSkpO1xyXG59XHJcblxyXG4vKipcclxuICogV2hldGhlciB0aGUgQXVkaXQgbWVudSAvIFNjaGVkdWxlIEluZm8gaXMgc2hvd24uIEEgVGFuZ28gKGludGVybmFsKSB1c2VyIGFsd2F5cyBzZWVzIGJvdGguIEEgY2xpZW50IHVzZXIgc2VlcyBhXHJcbiAqIG1vZHVsZSB3aGVuIGl0cyBBZGQgb3IgRWRpdCBrZXkgaXMgdHJ1ZSAoVGFuZ29UcmF4Xzxtb2R1bGU+X2lzQWRkIC8gX2lzRWRpdCwgZnJvbSBNYW5hZ2UgVXNlcnMpOyB3aXRob3V0IHRob3NlIGtleXNcclxuICogKGEgdXNlciBzYXZlZCBiZWZvcmUgdGhlIEF1ZGl0IC8gU2NoZWR1bGVzIHJvd3MsIG9uIGFuIEFQSSB0aGF0IGRvZXMgbm90IGZpbGwgdGhlbSBpbiB5ZXQpIHRoZSBDaGVja2xpc3Qga2V5cyBkZWNpZGUuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdHJheE1vZHVsZU9uKHA6IGFueSwgbW9kdWxlOiAnQXVkaXQnIHwgJ1NjaGVkdWxlcycpOiBib29sZWFuIHtcclxuICBpZiAoIXApIHsgcmV0dXJuIGZhbHNlOyB9XHJcbiAgaWYgKHAudXNlclR5cGUgPT09ICd0YW5nbycpIHsgcmV0dXJuIHRydWU7IH1cclxuICBjb25zdCBhZGQgPSBwWydUYW5nb1RyYXhfJyArIG1vZHVsZSArICdfaXNBZGQnXTtcclxuICBjb25zdCBlZGl0ID0gcFsnVGFuZ29UcmF4XycgKyBtb2R1bGUgKyAnX2lzRWRpdCddO1xyXG4gIGlmIChhZGQgIT09IHVuZGVmaW5lZCB8fCBlZGl0ICE9PSB1bmRlZmluZWQpIHsgcmV0dXJuICEhYWRkIHx8ICEhZWRpdDsgfVxyXG4gIGNvbnN0IGNBZGQgPSBwLlRhbmdvVHJheF9jaGVja2xpc3RfaXNBZGQ7XHJcbiAgY29uc3QgY0VkaXQgPSBwLlRhbmdvVHJheF9jaGVja2xpc3RfaXNFZGl0O1xyXG4gIHJldHVybiAhIWNBZGQgfHwgISFjRWRpdDtcclxufVxyXG5cclxuLyoqIHVzZXJUeXBlIG9mIHRoZSBzaWduZWQtaW4gdXNlciAobG9jYWxTdG9yYWdlIHVzZXItaW5mbywgYXMgdGhlIHF1ZXN0aW9uIGVkaXRvciByZWFkcyBpdCk7ICcnIHdoZW4gdW5rbm93bi4gKi9cclxuZnVuY3Rpb24gc3RvcmVkVXNlclR5cGUoKTogc3RyaW5nIHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXItaW5mbycpIHx8ICd7fScpPy51c2VyVHlwZSB8fCAnJztcclxuICB9IGNhdGNoIHtcclxuICAgIHJldHVybiAnJztcclxuICB9XHJcbn1cclxuIl19
74
+ /**
75
+ * Users who always get the whole Audit menu: Tango (internal) users, and a client's superadmin (Manage Users shows no
76
+ * permission table for a superadmin, so their Audit rows cannot be set). Client admins and users follow their rows.
77
+ */
78
+ function fullAuditAccess(p) {
79
+ return p?.userType === 'tango' || p?.role === 'superadmin';
80
+ }
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdjItYWNjZXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tYW5hbHlzZS10cmF4L3NyYy9saWIvY29tcG9uZW50cy9hdWRpdC12Mi9hdWRpdC12Mi1hY2Nlc3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWtDdkMsZ0hBQWdIO0FBQ2hILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBeUM7SUFDOUQsRUFBRSxHQUFHLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRTtJQUNuRCxFQUFFLEdBQUcsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO0lBQzdDLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQ3JDLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0lBQ3pDLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQ3ZDLEVBQUUsR0FBRyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO0NBQzFDLENBQUM7QUFFRjs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxDQUFNO0lBQ2hDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFFO1FBQUUsT0FBTyxFQUFFLENBQUM7S0FBRTtJQUNuRCxJQUFJLGVBQWUsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUFFLE9BQU8sVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUFFO0lBQy9ELE9BQU8sVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUMzQixNQUFN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QUM5RTtJQUFDLE1BQU07UUFDTixPQUFPLEVBQUUsQ0FBQztLQUNYO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLENBQU07SUFDN0IsT0FBTyxDQUFDLEVBQUUsUUFBUSxLQUFLLE9BQU8sSUFBSSxDQUFDLEVBQUUsSUFBSSxLQUFLLFlBQVksQ0FBQztBQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5cclxuLyoqXHJcbiAqIFdoYXQgdGhlIHNpZ25lZC1pbiB1c2VyIG1heSBkbyBpbiB0aGUgQXVkaXQgbWVudSwgZnJvbSBNYW5hZ2UgVXNlcnMgLT4gVGFuZ28gVHJheDogQXVkaXQgKGF1ZGl0cykgYW5kIFNjaGVkdWxlc1xyXG4gKiAoTWFuYWdlIC0+IFNjaGVkdWxlcyksIHRoZSBzYW1lIHBlcm1pc3Npb25zIHRoZSAvdHJheC9hdWRpdC8qIHJvdXRlcyBjaGVjay4gQSB1c2VyIHNhdmVkIGJlZm9yZSB0aG9zZSB0d28gcm93c1xyXG4gKiBleGlzdGVkIGhhcyBuZWl0aGVyLCBzbyBDaGVja2xpc3QgZGVjaWRlcyBmb3IgdGhlbSwgYXMgaXQgZGlkIGJlZm9yZSAoYW5kIGFzIHRoZSBBUEkgZmFsbHMgYmFjaykuXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0QWNjZXNzIHtcclxuICAvKiogVGhlIHNpZ25lZC1pbiB1c2VyJ3MgcGVybWlzc2lvbnMgaGF2ZSBhcnJpdmVkIChncy51c2VyQWNjZXNzIHN0YXJ0cyBudWxsKTogdmlldyBjaGVja3Mgb25seSBhY3QgYWZ0ZXIgdGhpcy4gKi9cclxuICBsb2FkZWQ/OiBib29sZWFuO1xyXG4gIC8qKiBUYW5nb1RyYXgvQXVkaXQgYWRkIG9yIGVkaXQ6IHRoZSBBdWRpdCBtZW51IGlzIHNob3duIGFuZCBvcGVucyAoc2lkZWJhciBUYW5nbyBUcmF4IC0+IEF1ZGl0KS4gKi9cclxuICBjYW5WaWV3PzogYm9vbGVhbjtcclxuICAvKiogVGFuZ29UcmF4L1NjaGVkdWxlcyBhZGQgb3IgZWRpdDogTWFuYWdlIC0+IFNjaGVkdWxlIEluZm8gaXMgc2hvd24uICovXHJcbiAgY2FuVmlld1NjaGVkdWxlPzogYm9vbGVhbjtcclxuICAvKiogVGFuZ29UcmF4L0F1ZGl0IGFkZCAoZWxzZSBDaGVja2xpc3QpOiBjcmVhdGUgLyBkdXBsaWNhdGUgYXVkaXRzLiAqL1xyXG4gIGNhbkFkZDogYm9vbGVhbjtcclxuICAvKiogVGFuZ29UcmF4L0F1ZGl0IGVkaXQgKGVsc2UgQ2hlY2tsaXN0KTogZWRpdCwgY29uZmlndXJlLCBwdWJsaXNoLCBkZWxldGUsIGFwcHJvdmUsIHJldmlldy4gKi9cclxuICBjYW5FZGl0OiBib29sZWFuO1xyXG4gIC8qKiBUYW5nb1RyYXgvU2NoZWR1bGVzIGFkZCAoZWxzZSBDaGVja2xpc3QpOiBDcmVhdGUgc2NoZWR1bGUsIFNjaGVkdWxlLCBEdXBsaWNhdGUgc2NoZWR1bGUuICovXHJcbiAgY2FuQWRkU2NoZWR1bGU/OiBib29sZWFuO1xyXG4gIC8qKiBUYW5nb1RyYXgvU2NoZWR1bGVzIGVkaXQgKGVsc2UgQ2hlY2tsaXN0KTogZWRpdCwgcHVibGlzaCwgZGVsZXRlIHNjaGVkdWxlcy4gKi9cclxuICBjYW5FZGl0U2NoZWR1bGU/OiBib29sZWFuO1xyXG4gIC8qKiBUYW5nb1RyYXgvdGFzayBhZGQ6IE1hbmFnZSAtPiBUYXNrIFwiQ3JlYXRlIFRhc2tcIiAodjEgbWFuYWdlLXRhc2spLiAqL1xyXG4gIGNhbkFkZFRhc2s/OiBib29sZWFuO1xyXG4gIC8qKiBUYW5nb1RyYXgvdGFzayBlZGl0OiB0YXNrIHZpZXcgLyBjb25maWd1cmUgLyBkdXBsaWNhdGUgLyBkZWxldGUgLyBwdWJsaXNoICh2MSBtYW5hZ2UtdGFzayksIENyZWF0ZSBUYXNrIGZyb21cclxuICAgKiAgYSBzdWJtaXR0ZWQgYW5zd2VyIGFuZCBSZWRvIG9mIGEgdGFzaydzIHF1ZXN0aW9uICh2MSBnYWxsZXJ5KS4gKi9cclxuICBjYW5FZGl0VGFzaz86IGJvb2xlYW47XHJcbiAgLyoqIEEgVGFuZ28gKGludGVybmFsKSB1c2VyOiB0aGUgdjEgZ2FsbGVyeSdzIFJlZG8gLyBDcmVhdGUgVGFzayBhcmUgZm9yIGNsaWVudCB1c2VycyBvbmx5LiAqL1xyXG4gIGlzVGFuZ28/OiBib29sZWFuO1xyXG4gIC8qKiBBdWRpdCB0YWIgcGF0aHMgKCdhY3Rpb25jZW50ZXInLCAnZGFzaGJvYXJkJywgLi4uKSB0aGUgdXNlciBtYXkgb3BlbiwgaW4gbWVudSBvcmRlciAoc2VlIGF1ZGl0VGFic09uKS4gKi9cclxuICB0YWJzPzogc3RyaW5nW107XHJcbn1cclxuXHJcbi8qKiBUaGUgQXVkaXQgbWVudSB0YWJzOiByb3V0ZSBwYXRoIHVuZGVyIC9tYW5hZ2UvdHJheC9hdWRpdC12MiBhbmQgdGhlIE1hbmFnZSBVc2VycyByb3cgKFRhbmdvVHJheF88a2V5Pl8qKS4gKi9cclxuZXhwb3J0IGNvbnN0IEFVRElUX1RBQlM6IEFycmF5PHsga2V5OiBzdHJpbmc7IHBhdGg6IHN0cmluZyB9PiA9IFtcclxuICB7IGtleTogJ0F1ZGl0X0FjdGlvbkNlbnRlcicsIHBhdGg6ICdhY3Rpb25jZW50ZXInIH0sXHJcbiAgeyBrZXk6ICdBdWRpdF9EYXNoYm9hcmQnLCBwYXRoOiAnZGFzaGJvYXJkJyB9LFxyXG4gIHsga2V5OiAnQXVkaXRfRmxhZ3MnLCBwYXRoOiAnZmxhZ3MnIH0sXHJcbiAgeyBrZXk6ICdBdWRpdF9HYWxsZXJ5JywgcGF0aDogJ2dhbGxlcnknIH0sXHJcbiAgeyBrZXk6ICdBdWRpdF9NYW5hZ2UnLCBwYXRoOiAnbWFuYWdlJyB9LFxyXG4gIHsga2V5OiAnQXVkaXRfUmVwb3J0cycsIHBhdGg6ICdyZXBvcnRzJyB9XHJcbl07XHJcblxyXG4vKipcclxuICogQXVkaXQgdGFicyB0aGUgdXNlciBtYXkgb3BlbiwgZnJvbSBNYW5hZ2UgVXNlcnMg4oC6IFRhbmdvIFRyYXgg4oC6IEF1ZGl0J3MgdGFiIHJvd3MgKFRhbmdvVHJheF9BdWRpdF88VGFiPl9pc0FkZCAvXHJcbiAqIF9pc0VkaXQ7IEFkZCBvciBFZGl0IHNob3dzIHRoZSB0YWIpLiBBIFRhbmdvIHVzZXIgc2VlcyBldmVyeSB0YWI7IGEgdXNlciBzYXZlZCBiZWZvcmUgdGhlIHRhYiByb3dzIGV4aXN0ZWQgKG5vIHRhYlxyXG4gKiBrZXlzKSBrZWVwcyBldmVyeSB0YWIgd2hpbGUgQXVkaXQgaXMgb24uIFNhbWUgcnVsZSBhcyB0aGUgaGVhZGVyIHRhYnMgKHRhbmdvLWFwcC1zaGFyZWQgYXVkaXQtdGFiLWFjY2Vzcy50cykuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gYXVkaXRUYWJzT24ocDogYW55KTogc3RyaW5nW10ge1xyXG4gIGlmICghcCB8fCAhdHJheE1vZHVsZU9uKHAsICdBdWRpdCcpKSB7IHJldHVybiBbXTsgfVxyXG4gIGlmIChmdWxsQXVkaXRBY2Nlc3MocCkpIHsgcmV0dXJuIEFVRElUX1RBQlMubWFwKHQgPT4gdC5wYXRoKTsgfVxyXG4gIHJldHVybiBBVURJVF9UQUJTLmZpbHRlcih0ID0+IHtcclxuICAgIGNvbnN0IGFkZCA9IHBbJ1RhbmdvVHJheF8nICsgdC5rZXkgKyAnX2lzQWRkJ107XHJcbiAgICBjb25zdCBlZGl0ID0gcFsnVGFuZ29UcmF4XycgKyB0LmtleSArICdfaXNFZGl0J107XHJcbiAgICByZXR1cm4gYWRkID09PSB1bmRlZmluZWQgJiYgZWRpdCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6ICEhYWRkIHx8ICEhZWRpdDtcclxuICB9KS5tYXAodCA9PiB0LnBhdGgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYXVkaXRBY2Nlc3MoZ3M6IEdsb2JhbFN0YXRlU2VydmljZSk6IE9ic2VydmFibGU8QXVkaXRBY2Nlc3M+IHtcclxuICByZXR1cm4gZ3MudXNlckFjY2Vzcy5waXBlKG1hcCgocDogYW55KSA9PiAoe1xyXG4gICAgbG9hZGVkOiAhIXAsXHJcbiAgICBjYW5WaWV3OiB0cmF4TW9kdWxlT24ocCwgJ0F1ZGl0JyksXHJcbiAgICBjYW5WaWV3U2NoZWR1bGU6IHRyYXhNb2R1bGVPbihwLCAnU2NoZWR1bGVzJyksXHJcbiAgICBjYW5BZGQ6ICEhKHA/LlRhbmdvVHJheF9BdWRpdF9pc0FkZCA/PyBwPy5UYW5nb1RyYXhfY2hlY2tsaXN0X2lzQWRkKSxcclxuICAgIGNhbkVkaXQ6ICEhKHA/LlRhbmdvVHJheF9BdWRpdF9pc0VkaXQgPz8gcD8uVGFuZ29UcmF4X2NoZWNrbGlzdF9pc0VkaXQpLFxyXG4gICAgY2FuQWRkU2NoZWR1bGU6ICEhKHA/LlRhbmdvVHJheF9TY2hlZHVsZXNfaXNBZGQgPz8gcD8uVGFuZ29UcmF4X2NoZWNrbGlzdF9pc0FkZCksXHJcbiAgICBjYW5FZGl0U2NoZWR1bGU6ICEhKHA/LlRhbmdvVHJheF9TY2hlZHVsZXNfaXNFZGl0ID8/IHA/LlRhbmdvVHJheF9jaGVja2xpc3RfaXNFZGl0KSxcclxuICAgIGNhbkFkZFRhc2s6ICEhcD8uVGFuZ29UcmF4X1Rhc2tfaXNBZGQsXHJcbiAgICBjYW5FZGl0VGFzazogISFwPy5UYW5nb1RyYXhfVGFza19pc0VkaXQsXHJcbiAgICBpc1RhbmdvOiAocD8udXNlclR5cGUgfHwgc3RvcmVkVXNlclR5cGUoKSkgPT09ICd0YW5nbycsXHJcbiAgICB0YWJzOiBhdWRpdFRhYnNPbihwKSxcclxuICB9KSkpO1xyXG59XHJcblxyXG4vKipcclxuICogV2hldGhlciB0aGUgQXVkaXQgbWVudSAvIFNjaGVkdWxlIEluZm8gaXMgc2hvd24uIEEgVGFuZ28gdXNlciBvciBjbGllbnQgc3VwZXJhZG1pbiBhbHdheXMgc2VlcyBib3RoLiBBIGNsaWVudCB1c2VyIHNlZXMgYVxyXG4gKiBtb2R1bGUgd2hlbiBpdHMgQWRkIG9yIEVkaXQga2V5IGlzIHRydWUgKFRhbmdvVHJheF88bW9kdWxlPl9pc0FkZCAvIF9pc0VkaXQsIGZyb20gTWFuYWdlIFVzZXJzKTsgd2l0aG91dCB0aG9zZSBrZXlzXHJcbiAqIChhIHVzZXIgc2F2ZWQgYmVmb3JlIHRoZSBBdWRpdCAvIFNjaGVkdWxlcyByb3dzLCBvbiBhbiBBUEkgdGhhdCBkb2VzIG5vdCBmaWxsIHRoZW0gaW4geWV0KSB0aGUgQ2hlY2tsaXN0IGtleXMgZGVjaWRlLlxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIHRyYXhNb2R1bGVPbihwOiBhbnksIG1vZHVsZTogJ0F1ZGl0JyB8ICdTY2hlZHVsZXMnKTogYm9vbGVhbiB7XHJcbiAgaWYgKCFwKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gIGlmIChmdWxsQXVkaXRBY2Nlc3MocCkpIHsgcmV0dXJuIHRydWU7IH1cclxuICBjb25zdCBhZGQgPSBwWydUYW5nb1RyYXhfJyArIG1vZHVsZSArICdfaXNBZGQnXTtcclxuICBjb25zdCBlZGl0ID0gcFsnVGFuZ29UcmF4XycgKyBtb2R1bGUgKyAnX2lzRWRpdCddO1xyXG4gIGlmIChhZGQgIT09IHVuZGVmaW5lZCB8fCBlZGl0ICE9PSB1bmRlZmluZWQpIHsgcmV0dXJuICEhYWRkIHx8ICEhZWRpdDsgfVxyXG4gIGNvbnN0IGNBZGQgPSBwLlRhbmdvVHJheF9jaGVja2xpc3RfaXNBZGQ7XHJcbiAgY29uc3QgY0VkaXQgPSBwLlRhbmdvVHJheF9jaGVja2xpc3RfaXNFZGl0O1xyXG4gIHJldHVybiAhIWNBZGQgfHwgISFjRWRpdDtcclxufVxyXG5cclxuLyoqIHVzZXJUeXBlIG9mIHRoZSBzaWduZWQtaW4gdXNlciAobG9jYWxTdG9yYWdlIHVzZXItaW5mbywgYXMgdGhlIHF1ZXN0aW9uIGVkaXRvciByZWFkcyBpdCk7ICcnIHdoZW4gdW5rbm93bi4gKi9cclxuZnVuY3Rpb24gc3RvcmVkVXNlclR5cGUoKTogc3RyaW5nIHtcclxuICB0cnkge1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXItaW5mbycpIHx8ICd7fScpPy51c2VyVHlwZSB8fCAnJztcclxuICB9IGNhdGNoIHtcclxuICAgIHJldHVybiAnJztcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVc2VycyB3aG8gYWx3YXlzIGdldCB0aGUgd2hvbGUgQXVkaXQgbWVudTogVGFuZ28gKGludGVybmFsKSB1c2VycywgYW5kIGEgY2xpZW50J3Mgc3VwZXJhZG1pbiAoTWFuYWdlIFVzZXJzIHNob3dzIG5vXHJcbiAqIHBlcm1pc3Npb24gdGFibGUgZm9yIGEgc3VwZXJhZG1pbiwgc28gdGhlaXIgQXVkaXQgcm93cyBjYW5ub3QgYmUgc2V0KS4gQ2xpZW50IGFkbWlucyBhbmQgdXNlcnMgZm9sbG93IHRoZWlyIHJvd3MuXHJcbiAqL1xyXG5mdW5jdGlvbiBmdWxsQXVkaXRBY2Nlc3MocDogYW55KTogYm9vbGVhbiB7XHJcbiAgcmV0dXJuIHA/LnVzZXJUeXBlID09PSAndGFuZ28nIHx8IHA/LnJvbGUgPT09ICdzdXBlcmFkbWluJztcclxufVxyXG4iXX0=
@@ -37,13 +37,37 @@ export class AuditV2LayoutComponent {
37
37
  // The sidebar hides Audit without the permission (Manage Users -> Tango Trax -> Audit); a bookmarked or typed link
38
38
  // lands on Tango Trax instead. Waits for the permissions (they start empty).
39
39
  auditAccess(this.gs).pipe(takeUntil(this.destroy$)).subscribe(access => {
40
- if (access.loaded && !access.canView) {
40
+ this.tabs = access.tabs || [];
41
+ this.permsLoaded = !!access.loaded;
42
+ if (access.loaded && (!access.canView || !this.tabs.length)) {
41
43
  this.router.navigate(['/manage/trax/dashboard'], { replaceUrl: true });
44
+ return;
42
45
  }
46
+ this.guardTab(this.router.url);
43
47
  });
44
48
  this.setPageData(this.router.url);
45
49
  this.router.events.pipe(filter(e => e instanceof NavigationEnd), takeUntil(this.destroy$))
46
- .subscribe(e => this.setPageData(e.urlAfterRedirects));
50
+ .subscribe(e => {
51
+ const url = e.urlAfterRedirects;
52
+ this.setPageData(url);
53
+ this.guardTab(url);
54
+ });
55
+ }
56
+ /** Audit tabs the user may open (Manage Users › Tango Trax › Audit's tab rows). */
57
+ tabs = [];
58
+ permsLoaded = false;
59
+ /**
60
+ * A tab the user may not open (bookmarked or typed link, or the default Action Center) goes to their first allowed
61
+ * tab. Sub pages follow their tab: flags/detail with Flags, manage/editor with Manage, dashboard/store with Dashboard.
62
+ */
63
+ guardTab(url) {
64
+ if (!this.permsLoaded || !this.tabs.length) {
65
+ return;
66
+ }
67
+ const tab = (url.split(/[?#]/)[0].split('/audit-v2/')[1] || '').split('/')[0];
68
+ if (tab && !this.tabs.includes(tab)) {
69
+ this.router.navigate(['/manage/trax/audit-v2', this.tabs[0]], { replaceUrl: true });
70
+ }
47
71
  }
48
72
  ngOnDestroy() {
49
73
  this.destroy$.next();
@@ -71,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
71
95
  type: Component,
72
96
  args: [{ selector: 'lib-audit-v2-layout', template: "<router-outlet></router-outlet>\r\n" }]
73
97
  }], ctorParameters: () => [{ type: i1.Router }, { type: i2.PageInfoService }, { type: i2.GlobalStateService }] });
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdjItbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtdHJheC9zcmMvbGliL2NvbXBvbmVudHMvYXVkaXQtdjIvYXVkaXQtdjItbGF5b3V0L2F1ZGl0LXYyLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGl0LXYyL2F1ZGl0LXYyLWxheW91dC9hdWRpdC12Mi1sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFFakQseUdBQXlHO0FBQ3pHLE1BQU0sTUFBTSxHQUF1QjtJQUNqQyxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUM7SUFDbEMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO0lBQzNCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztJQUNuQixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7SUFDdkIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO0lBQ3JCLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQztDQUN4QixDQUFDO0FBRUYsb0dBQW9HO0FBQ3BHLE1BQU0sU0FBUyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixDQUFDLENBQUM7QUFFL0U7Ozs7O0dBS0c7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LEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO1NBQ25HLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBbkNVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLDJEQy9CbkMscUNBQ0E7OzRGRDhCYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBhdWRpdEFjY2VzcyB9IGZyb20gJy4uL2F1ZGl0LXYyLWFjY2Vzcyc7XHJcblxyXG4vKiogUGFnZSB0aXRsZSBwZXIgQXVkaXQgdGFiICh0aGUgcHJvdG90eXBlJ3MgcGFnZVRpdGxlKTsgZGV0YWlsIGFuZCBzdWIgcGFnZXMga2VlcCB0aGVpciB0YWIncyB0aXRsZS4gKi9cclxuY29uc3QgVElUTEVTOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXHJcbiAgWycvYWN0aW9uY2VudGVyJywgJ0FjdGlvbiBDZW50ZXInXSxcclxuICBbJy9kYXNoYm9hcmQnLCAnRGFzaGJvYXJkJ10sXHJcbiAgWycvZmxhZ3MnLCAnRmxhZ3MnXSxcclxuICBbJy9nYWxsZXJ5JywgJ0dhbGxlcnknXSxcclxuICBbJy9tYW5hZ2UnLCAnTWFuYWdlJ10sXHJcbiAgWycvcmVwb3J0cycsICdSZXBvcnRzJ11cclxuXTtcclxuXHJcbi8qKiBQYWdlcyB0aGF0IHNldCB0aGVpciBvd24gdGl0bGUgYW5kIGJyZWFkY3J1bWJzIChhdWRpdCBxdWVzdGlvbiBlZGl0b3IsIHRhc2sgYnVpbGRlciAvIHNldHVwKS4gKi9cclxuY29uc3QgT1dOX1RJVExFID0gWycvbWFuYWdlL2VkaXRvcicsICcvbWFuYWdlL3Rhc2snLCAnL21hbmFnZS90YXNrLWNvbmZpZ3VyZSddO1xyXG5cclxuLyoqXHJcbiAqIFJvdXRpbmcgc2hlbGwgZm9yIHRoZSBBdWRpdCBtb2R1bGUuIFRoZSBwYWdlIGhlYWRlciBhbmQgbW9kdWxlIHRhYnMgYXJlXHJcbiAqIHN1cHBsaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbidzIHRyYXggaGVhZGVyIGJhbm5lciwgc28gdGhpcyBvbmx5IGhvc3RzIHRoZVxyXG4gKiByb3V0ZWQgc2NyZWVucyBhbmQgc2V0cyB0aGUgaGVhZGVyIHRpdGxlIGFuZCBicmVhZGNydW1iIGZvciBlYWNoIHRhYjpcclxuICogXCJUYW5nbyBUcmF4IOKAuiBBdWRpdCDigLogPHRhYj5cIiwgYXMgaW4gdGhlIHByb3RvdHlwZS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWF1ZGl0LXYyLWxheW91dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F1ZGl0LXYyLWxheW91dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2F1ZGl0LXYyLWxheW91dC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0VjJMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcGFnZUluZm86IFBhZ2VJbmZvU2VydmljZSwgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBUaGUgc2lkZWJhciBoaWRlcyBBdWRpdCB3aXRob3V0IHRoZSBwZXJtaXNzaW9uIChNYW5hZ2UgVXNlcnMgLT4gVGFuZ28gVHJheCAtPiBBdWRpdCk7IGEgYm9va21hcmtlZCBvciB0eXBlZCBsaW5rXHJcbiAgICAvLyBsYW5kcyBvbiBUYW5nbyBUcmF4IGluc3RlYWQuIFdhaXRzIGZvciB0aGUgcGVybWlzc2lvbnMgKHRoZXkgc3RhcnQgZW1wdHkpLlxyXG4gICAgYXVkaXRBY2Nlc3ModGhpcy5ncykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhY2Nlc3MgPT4ge1xyXG4gICAgICBpZiAoYWNjZXNzLmxvYWRlZCAmJiAhYWNjZXNzLmNhblZpZXcpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvdHJheC9kYXNoYm9hcmQnXSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEodGhpcy5yb3V0ZXIudXJsKTtcclxuICAgIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihlID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKGUgPT4gdGhpcy5zZXRQYWdlRGF0YSgoZSBhcyBOYXZpZ2F0aW9uRW5kKS51cmxBZnRlclJlZGlyZWN0cykpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0UGFnZURhdGEodXJsOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBhdGggPSB1cmwuc3BsaXQoL1s/I10vKVswXS5zcGxpdCgnL2F1ZGl0LXYyJylbMV0gfHwgJyc7XHJcbiAgICBpZiAoT1dOX1RJVExFLnNvbWUocCA9PiBwYXRoID09PSBwKSkgeyByZXR1cm47IH1cclxuICAgIGNvbnN0IHRpdGxlID0gVElUTEVTLmZpbmQoKFtwXSkgPT4gcGF0aCA9PT0gcCB8fCBwYXRoLnN0YXJ0c1dpdGgocCArICcvJykpPy5bMV0gfHwgJ0FjdGlvbiBDZW50ZXInO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRUaXRsZSh0aXRsZSk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldERlc2NyaXB0aW9uKCcnKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7IHRpdGxlOiAnVGFuZ28gVHJheCcsIHBhdGg6ICcvbWFuYWdlL3RyYXgvZGFzaGJvYXJkJywgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogJ1RhbmdvIFRyYXgnLCBwYXRoOiAnL21hbmFnZS90cmF4L2Rhc2hib2FyZCcsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IHRydWUgfSxcclxuICAgICAgeyB0aXRsZTogJ0F1ZGl0JywgcGF0aDogJy9tYW5hZ2UvdHJheC9hdWRpdC12Mi9hY3Rpb25jZW50ZXInLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiAnQXVkaXQnLCBwYXRoOiAnL21hbmFnZS90cmF4L2F1ZGl0LXYyL2FjdGlvbmNlbnRlcicsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IHRydWUgfVxyXG4gICAgXSk7XHJcbiAgfVxyXG59XHJcbiIsIjxyb3V0ZXItb3V0bGV0Pjwvcm91dGVyLW91dGxldD5cclxuIl19
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQtdjItbGF5b3V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWFuYWx5c2UtdHJheC9zcmMvbGliL2NvbXBvbmVudHMvYXVkaXQtdjIvYXVkaXQtdjItbGF5b3V0L2F1ZGl0LXYyLWxheW91dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2F1ZGl0LXYyL2F1ZGl0LXYyLWxheW91dC9hdWRpdC12Mi1sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLGFBQWEsRUFBVSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFFakQseUdBQXlHO0FBQ3pHLE1BQU0sTUFBTSxHQUF1QjtJQUNqQyxDQUFDLGVBQWUsRUFBRSxlQUFlLENBQUM7SUFDbEMsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDO0lBQzNCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQztJQUNuQixDQUFDLFVBQVUsRUFBRSxTQUFTLENBQUM7SUFDdkIsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO0lBQ3JCLENBQUMsVUFBVSxFQUFFLFNBQVMsQ0FBQztDQUN4QixDQUFDO0FBRUYsb0dBQW9HO0FBQ3BHLE1BQU0sU0FBUyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixDQUFDLENBQUM7QUFFL0U7Ozs7O0dBS0c7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LEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO1NBQ25HLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBM0RVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLDJEQy9CbkMscUNBQ0E7OzRGRDhCYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1nbG9iYWwnO1xyXG5pbXBvcnQgeyBhdWRpdEFjY2VzcyB9IGZyb20gJy4uL2F1ZGl0LXYyLWFjY2Vzcyc7XHJcblxyXG4vKiogUGFnZSB0aXRsZSBwZXIgQXVkaXQgdGFiICh0aGUgcHJvdG90eXBlJ3MgcGFnZVRpdGxlKTsgZGV0YWlsIGFuZCBzdWIgcGFnZXMga2VlcCB0aGVpciB0YWIncyB0aXRsZS4gKi9cclxuY29uc3QgVElUTEVTOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXHJcbiAgWycvYWN0aW9uY2VudGVyJywgJ0FjdGlvbiBDZW50ZXInXSxcclxuICBbJy9kYXNoYm9hcmQnLCAnRGFzaGJvYXJkJ10sXHJcbiAgWycvZmxhZ3MnLCAnRmxhZ3MnXSxcclxuICBbJy9nYWxsZXJ5JywgJ0dhbGxlcnknXSxcclxuICBbJy9tYW5hZ2UnLCAnTWFuYWdlJ10sXHJcbiAgWycvcmVwb3J0cycsICdSZXBvcnRzJ11cclxuXTtcclxuXHJcbi8qKiBQYWdlcyB0aGF0IHNldCB0aGVpciBvd24gdGl0bGUgYW5kIGJyZWFkY3J1bWJzIChhdWRpdCBxdWVzdGlvbiBlZGl0b3IsIHRhc2sgYnVpbGRlciAvIHNldHVwKS4gKi9cclxuY29uc3QgT1dOX1RJVExFID0gWycvbWFuYWdlL2VkaXRvcicsICcvbWFuYWdlL3Rhc2snLCAnL21hbmFnZS90YXNrLWNvbmZpZ3VyZSddO1xyXG5cclxuLyoqXHJcbiAqIFJvdXRpbmcgc2hlbGwgZm9yIHRoZSBBdWRpdCBtb2R1bGUuIFRoZSBwYWdlIGhlYWRlciBhbmQgbW9kdWxlIHRhYnMgYXJlXHJcbiAqIHN1cHBsaWVkIGJ5IHRoZSBhcHBsaWNhdGlvbidzIHRyYXggaGVhZGVyIGJhbm5lciwgc28gdGhpcyBvbmx5IGhvc3RzIHRoZVxyXG4gKiByb3V0ZWQgc2NyZWVucyBhbmQgc2V0cyB0aGUgaGVhZGVyIHRpdGxlIGFuZCBicmVhZGNydW1iIGZvciBlYWNoIHRhYjpcclxuICogXCJUYW5nbyBUcmF4IOKAuiBBdWRpdCDigLogPHRhYj5cIiwgYXMgaW4gdGhlIHByb3RvdHlwZS5cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWF1ZGl0LXYyLWxheW91dCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2F1ZGl0LXYyLWxheW91dC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2F1ZGl0LXYyLWxheW91dC5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEF1ZGl0VjJMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsIHByaXZhdGUgcGFnZUluZm86IFBhZ2VJbmZvU2VydmljZSwgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAvLyBUaGUgc2lkZWJhciBoaWRlcyBBdWRpdCB3aXRob3V0IHRoZSBwZXJtaXNzaW9uIChNYW5hZ2UgVXNlcnMgLT4gVGFuZ28gVHJheCAtPiBBdWRpdCk7IGEgYm9va21hcmtlZCBvciB0eXBlZCBsaW5rXHJcbiAgICAvLyBsYW5kcyBvbiBUYW5nbyBUcmF4IGluc3RlYWQuIFdhaXRzIGZvciB0aGUgcGVybWlzc2lvbnMgKHRoZXkgc3RhcnQgZW1wdHkpLlxyXG4gICAgYXVkaXRBY2Nlc3ModGhpcy5ncykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShhY2Nlc3MgPT4ge1xyXG4gICAgICB0aGlzLnRhYnMgPSBhY2Nlc3MudGFicyB8fCBbXTtcclxuICAgICAgdGhpcy5wZXJtc0xvYWRlZCA9ICEhYWNjZXNzLmxvYWRlZDtcclxuICAgICAgaWYgKGFjY2Vzcy5sb2FkZWQgJiYgKCFhY2Nlc3MuY2FuVmlldyB8fCAhdGhpcy50YWJzLmxlbmd0aCkpIHtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvdHJheC9kYXNoYm9hcmQnXSwgeyByZXBsYWNlVXJsOiB0cnVlIH0pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmd1YXJkVGFiKHRoaXMucm91dGVyLnVybCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEodGhpcy5yb3V0ZXIudXJsKTtcclxuICAgIHRoaXMucm91dGVyLmV2ZW50cy5waXBlKGZpbHRlcihlID0+IGUgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKGUgPT4ge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IChlIGFzIE5hdmlnYXRpb25FbmQpLnVybEFmdGVyUmVkaXJlY3RzO1xyXG4gICAgICAgIHRoaXMuc2V0UGFnZURhdGEodXJsKTtcclxuICAgICAgICB0aGlzLmd1YXJkVGFiKHVybCk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqIEF1ZGl0IHRhYnMgdGhlIHVzZXIgbWF5IG9wZW4gKE1hbmFnZSBVc2VycyDigLogVGFuZ28gVHJheCDigLogQXVkaXQncyB0YWIgcm93cykuICovXHJcbiAgcHJpdmF0ZSB0YWJzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHByaXZhdGUgcGVybXNMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQSB0YWIgdGhlIHVzZXIgbWF5IG5vdCBvcGVuIChib29rbWFya2VkIG9yIHR5cGVkIGxpbmssIG9yIHRoZSBkZWZhdWx0IEFjdGlvbiBDZW50ZXIpIGdvZXMgdG8gdGhlaXIgZmlyc3QgYWxsb3dlZFxyXG4gICAqIHRhYi4gU3ViIHBhZ2VzIGZvbGxvdyB0aGVpciB0YWI6IGZsYWdzL2RldGFpbCB3aXRoIEZsYWdzLCBtYW5hZ2UvZWRpdG9yIHdpdGggTWFuYWdlLCBkYXNoYm9hcmQvc3RvcmUgd2l0aCBEYXNoYm9hcmQuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBndWFyZFRhYih1cmw6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnBlcm1zTG9hZGVkIHx8ICF0aGlzLnRhYnMubGVuZ3RoKSB7IHJldHVybjsgfVxyXG4gICAgY29uc3QgdGFiID0gKHVybC5zcGxpdCgvWz8jXS8pWzBdLnNwbGl0KCcvYXVkaXQtdjIvJylbMV0gfHwgJycpLnNwbGl0KCcvJylbMF07XHJcbiAgICBpZiAodGFiICYmICF0aGlzLnRhYnMuaW5jbHVkZXModGFiKSkge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9tYW5hZ2UvdHJheC9hdWRpdC12MicsIHRoaXMudGFic1swXV0sIHsgcmVwbGFjZVVybDogdHJ1ZSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFBhZ2VEYXRhKHVybDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBwYXRoID0gdXJsLnNwbGl0KC9bPyNdLylbMF0uc3BsaXQoJy9hdWRpdC12MicpWzFdIHx8ICcnO1xyXG4gICAgaWYgKE9XTl9USVRMRS5zb21lKHAgPT4gcGF0aCA9PT0gcCkpIHsgcmV0dXJuOyB9XHJcbiAgICBjb25zdCB0aXRsZSA9IFRJVExFUy5maW5kKChbcF0pID0+IHBhdGggPT09IHAgfHwgcGF0aC5zdGFydHNXaXRoKHAgKyAnLycpKT8uWzFdIHx8ICdBY3Rpb24gQ2VudGVyJztcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUodGl0bGUpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXREZXNjcmlwdGlvbignJyk7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldEJyZWFkY3J1bWJzKFtcclxuICAgICAgeyB0aXRsZTogJ1RhbmdvIFRyYXgnLCBwYXRoOiAnL21hbmFnZS90cmF4L2Rhc2hib2FyZCcsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IGZhbHNlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICdUYW5nbyBUcmF4JywgcGF0aDogJy9tYW5hZ2UvdHJheC9kYXNoYm9hcmQnLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH0sXHJcbiAgICAgIHsgdGl0bGU6ICdBdWRpdCcsIHBhdGg6ICcvbWFuYWdlL3RyYXgvYXVkaXQtdjIvYWN0aW9uY2VudGVyJywgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogZmFsc2UgfSxcclxuICAgICAgeyB0aXRsZTogJ0F1ZGl0JywgcGF0aDogJy9tYW5hZ2UvdHJheC9hdWRpdC12Mi9hY3Rpb25jZW50ZXInLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH1cclxuICAgIF0pO1xyXG4gIH1cclxufVxyXG4iLCI8cm91dGVyLW91dGxldD48L3JvdXRlci1vdXRsZXQ+XHJcbiJdfQ==