@c8y/ngx-components 1021.22.138 → 1021.22.139

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.
@@ -17,6 +17,7 @@ export class BridgeService {
17
17
  this.fixE2eIssues();
18
18
  this.$ng1RouteChangeSuccess = this.fromNg1Event(this.injector.get('$rootScope'), '$routeChangeSuccess');
19
19
  this.$ng1RouteChangeStart = this.fromNg1Event(this.injector.get('$rootScope'), '$routeChangeStart');
20
+ this.$ng1RouteUpdate = this.fromNg1Event(this.injector.get('$rootScope'), '$routeUpdate');
20
21
  this.hookLanguage();
21
22
  this.hookTab();
22
23
  this.hookNavigator();
@@ -34,21 +35,11 @@ export class BridgeService {
34
35
  // fix to trigger an angularjs route change success
35
36
  // event on context route match to make legacy
36
37
  // view-providers resolve.
37
- // reloadOnUrl: true ensures that navigating between different IDs
38
- // (e.g., /device/123 -> /device/456) triggers $routeChangeSuccess
39
- // reloadOnSearch: true ensures that navigating to different subpaths with the same ID
40
- // (e.g., /group/123/dashboard -> /group/123/subassets) also triggers $routeChangeSuccess
41
- // Both are needed because AngularJS checks: "is update-only if reloadOnUrl is set
42
- // BUT reloadOnSearch is false AND pathParams are equal"
43
38
  c8yViews.when('/device/:id', {
44
- template: '',
45
- reloadOnUrl: true,
46
- reloadOnSearch: true
39
+ template: ''
47
40
  });
48
41
  c8yViews.when('/group/:id', {
49
- template: '',
50
- reloadOnUrl: true,
51
- reloadOnSearch: true
42
+ template: ''
52
43
  });
53
44
  c8yViews.contextViews.subscribe(cfg => this.addRoute(cfg));
54
45
  }
@@ -91,9 +82,7 @@ export class BridgeService {
91
82
  fallbackRoutes.push({
92
83
  keys: [{ name: ViewContextLegacyParameter[context], optional: false }],
93
84
  regexp,
94
- template,
95
- reloadOnUrl: true,
96
- reloadOnSearch: true
85
+ template
97
86
  });
98
87
  }
99
88
  /**
@@ -201,8 +190,15 @@ export class BridgeService {
201
190
  liveTabs = [];
202
191
  this.$liveTabs.next(liveTabs);
203
192
  });
204
- this.$ng1RouteChangeSuccess.subscribe(() => {
193
+ const syncRouters = () => {
205
194
  const path = $location.path();
195
+ // Don't sync if Angular Router is using secondary outlets
196
+ // (e.g., /device/123/(dashboard-details:general))
197
+ // Let Angular Router handle these advanced navigation scenarios
198
+ if (this.router.url.includes('(') && this.router.url.includes(':')) {
199
+ return;
200
+ }
201
+ // Only sync if paths differ and initial navigation is complete
206
202
  if (this.router.url !== path) {
207
203
  this.router.navigate(path === '/' ? '' : path.split('/'), {
208
204
  queryParams: $location.search(),
@@ -212,7 +208,18 @@ export class BridgeService {
212
208
  if (this.actionService) {
213
209
  this.actionService.refresh();
214
210
  }
215
- });
211
+ };
212
+ // Listen to $routeChangeSuccess (full navigation - always sync)
213
+ this.$ng1RouteChangeSuccess.subscribe(syncRouters);
214
+ // Listen to $routeUpdate (skip if query-param-only)
215
+ this.$ng1RouteUpdate
216
+ .pipe(filter(() => {
217
+ const path = $location.path();
218
+ const angularPath = this.router.url.split('?')[0];
219
+ // Only process if path actually changed (not just query params)
220
+ return angularPath !== path;
221
+ }))
222
+ .subscribe(syncRouters);
216
223
  this.$routeChanges = merge(this.$ng1RouteChangeSuccess, this.fromNg1Event(c8yTabs, c8yTabs.EVENT_UPDATE), of(1)).pipe(debounceTime(100));
217
224
  }
218
225
  hookNavigator() {
@@ -337,4 +344,4 @@ export const bridgeServiceProvider = {
337
344
  PluginsResolveService
338
345
  ]
339
346
  };
340
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJpZGdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91cGdyYWRlL2JyaWRnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxhQUFhLEVBQ2IsZUFBZSxFQUlmLGNBQWMsRUFDZCxPQUFPLEVBQ1AscUJBQXFCLEVBQ3JCLGFBQWEsRUFHYixXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsS0FBSyxFQUNMLFVBQVUsRUFDVixFQUFFLEVBRUgsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsTUFBTSxPQUFPLGFBQWE7SUFNeEIsWUFDUyxRQUFhLEVBQ1osUUFBeUIsRUFDMUIsTUFBYyxFQUNiLE1BQWMsRUFDZCxhQUE0QixFQUM1QixhQUE0QixFQUNwQyxPQUE4QjtRQU52QixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQVJ0QyxjQUFTLEdBQW1CLElBQUksZUFBZSxDQUFD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QUNkLGFBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLE9BQThCO0lBRTlCLE9BQU8sSUFBSSxhQUFhLENBQ3RCLFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixhQUFhLEVBQ2IsYUFBYSxFQUNiLE9BQU8sQ0FDUixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25DLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsSUFBSSxFQUFFO1FBQ0osV0FBVztRQUNYLGVBQWU7UUFDZixNQUFNO1FBQ04sTUFBTTtRQUNOLGFBQWE7UUFDYixhQUFhO1FBQ2IscUJBQXFCO0tBQ3RCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjdGlvbixcbiAgQWN0aW9uQmFySXRlbSxcbiAgQWN0aW9uU2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCcmVhZGNydW1iLFxuICBCcmVhZGNydW1iSXRlbSxcbiAgRG9jTGluayxcbiAgRW1wdHlDb21wb25lbnQsXG4gIGdldHRleHQsXG4gIFBsdWdpbnNSZXNvbHZlU2VydmljZSxcbiAgUm91dGVyU2VydmljZSxcbiAgU2VhcmNoLFxuICBUYWIsXG4gIFZpZXdDb250ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZyb20sXG4gIGZyb21FdmVudFBhdHRlcm4sXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBWaWV3Q29udGV4dExlZ2FjeVBhcmFtZXRlciB9IGZyb20gJy4vbmcxL3ZpZXdzLnByb3ZpZGVyJztcblxuZXhwb3J0IGNsYXNzIEJyaWRnZVNlcnZpY2Uge1xuICAkcm91dGVDaGFuZ2VzOiBPYnNlcnZhYmxlPGFueT47XG4gICRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3M6IE9ic2VydmFibGU8YW55PjtcbiAgJG5nMVJvdXRlQ2hhbmdlU3RhcnQ6IE9ic2VydmFibGU8YW55PjtcbiAgJGxpdmVUYWJzOiBTdWJqZWN0PFRhYltdPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoW10pO1xuICBuYXZpZ2F0aW9uTm9kZXMkOiBPYnNlcnZhYmxlPGFueT47XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbmplY3RvcjogYW55LFxuICAgIHByaXZhdGUgYXBwU3RhdGU6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIHJvdXRlclNlcnZpY2U6IFJvdXRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25TZXJ2aWNlOiBBY3Rpb25TZXJ2aWNlLFxuICAgIHBsdWdpbnM6IFBsdWdpbnNSZXNvbHZlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmZpeEUyZUlzc3VlcygpO1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3VjY2VzcyA9IHRoaXMuZnJvbU5nMUV2ZW50KFxuICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKSxcbiAgICAgICckcm91dGVDaGFuZ2VTdWNjZXNzJ1xuICAgICk7XG4gICAgdGhpcy4kbmcxUm91dGVDaGFuZ2VTdGFydCA9IHRoaXMuZnJvbU5nMUV2ZW50KFxuICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKSxcbiAgICAgICckcm91dGVDaGFuZ2VTdGFydCdcbiAgICApO1xuICAgIHRoaXMuaG9va0xhbmd1YWdlKCk7XG4gICAgdGhpcy5ob29rVGFiKCk7XG4gICAgdGhpcy5ob29rTmF2aWdhdG9yKCk7XG4gICAgdGhpcy5ob29rVXNlck1lbnUoKTtcbiAgICB0aGlzLmhvb2tWaWV3UHJvdmlkZXIoKTtcbiAgICBwbHVnaW5zLmFsbFBsdWdpbnNMb2FkZWQkXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKHRtcCA9PiAhIXRtcCksXG4gICAgICAgIHRha2UoMSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvdXRlci5pbml0aWFsTmF2aWdhdGlvbigpO1xuICAgICAgfSk7XG4gICAgdGhpcy5uZzFSb3V0ZXMoKTtcbiAgfVxuXG4gIGhvb2tWaWV3UHJvdmlkZXIoKSB7XG4gICAgY29uc3QgYzh5Vmlld3MgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5Vmlld3MnKTtcbiAgICAvLyBmaXggdG8gdHJpZ2dlciBhbiBhbmd1bGFyanMgcm91dGUgY2hhbmdlIHN1Y2Nlc3NcbiAgICAvLyBldmVudCBvbiBjb250ZXh0IHJvdXRlIG1hdGNoIHRvIG1ha2UgbGVnYWN5XG4gICAgLy8gdmlldy1wcm92aWRlcnMgcmVzb2x2ZS5cbiAgICAvLyByZWxvYWRPblVybDogdHJ1ZSBlbnN1cmVzIHRoYXQgbmF2aWdhdGluZyBiZXR3ZWVuIGRpZmZlcmVudCBJRHNcbiAgICAvLyAoZS5nLiwgL2RldmljZS8xMjMgLT4gL2RldmljZS80NTYpIHRyaWdnZXJzICRyb3V0ZUNoYW5nZVN1Y2Nlc3NcbiAgICAvLyByZWxvYWRPblNlYXJjaDogdHJ1ZSBlbnN1cmVzIHRoYXQgbmF2aWdhdGluZyB0byBkaWZmZXJlbnQgc3VicGF0aHMgd2l0aCB0aGUgc2FtZSBJRFxuICAgIC8vIChlLmcuLCAvZ3JvdXAvMTIzL2Rhc2hib2FyZCAtPiAvZ3JvdXAvMTIzL3N1YmFzc2V0cykgYWxzbyB0cmlnZ2VycyAkcm91dGVDaGFuZ2VTdWNjZXNzXG4gICAgLy8gQm90aCBhcmUgbmVlZGVkIGJlY2F1c2UgQW5ndWxhckpTIGNoZWNrczogXCJpcyB1cGRhdGUtb25seSBpZiByZWxvYWRPblVybCBpcyBzZXRcbiAgICAvLyBCVVQgcmVsb2FkT25TZWFyY2ggaXMgZmFsc2UgQU5EIHBhdGhQYXJhbXMgYXJlIGVxdWFsXCJcbiAgICBjOHlWaWV3cy53aGVuKCcvZGV2aWNlLzppZCcsIHtcbiAgICAgIHRlbXBsYXRlOiAnJyxcbiAgICAgIHJlbG9hZE9uVXJsOiB0cnVlLFxuICAgICAgcmVsb2FkT25TZWFyY2g6IHRydWVcbiAgICB9KTtcbiAgICBjOHlWaWV3cy53aGVuKCcvZ3JvdXAvOmlkJywge1xuICAgICAgdGVtcGxhdGU6ICcnLFxuICAgICAgcmVsb2FkT25Vcmw6IHRydWUsXG4gICAgICByZWxvYWRPblNlYXJjaDogdHJ1ZVxuICAgIH0pO1xuICAgIGM4eVZpZXdzLmNvbnRleHRWaWV3cy5zdWJzY3JpYmUoY2ZnID0+IHRoaXMuYWRkUm91dGUoY2ZnKSk7XG4gIH1cblxuICBhZGRSb3V0ZShjZmcpIHtcbiAgICB0aGlzLnJvdXRlclNlcnZpY2UuYWRkUm91dGUoe1xuICAgICAgbGFiZWw6IGNmZy5sYWJlbCB8fCBjZmcubmFtZSxcbiAgICAgIHBhdGg6IGNmZy5wYXRoLFxuICAgICAgaWNvbjogY2ZnLmljb24sXG4gICAgICBjb250ZXh0OiBWaWV3Q29udGV4dFtjZmcuY29udGV4dEtleV0gYXMgVmlld0NvbnRleHQsXG4gICAgICBwcmlvcml0eTogY2ZnLnByaW9yaXR5LFxuICAgICAgY29tcG9uZW50OiBFbXB0eUNvbXBvbmVudCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgc2hvd0lmOiBjZmcuc2hvd0lmXG4gICAgICAgICAgPyBuZ3hSb3V0ZSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi5uZ3hSb3V0ZS5wYXJhbXMsXG4gICAgICAgICAgICAgICAgW1ZpZXdDb250ZXh0TGVnYWN5UGFyYW1ldGVyW2NmZy5jb250ZXh0S2V5XV06IG5neFJvdXRlLnBhcmFtcy5pZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBjb25zdCBzaG93SWZSZXN1bHQgPSB0aGlzLmluamVjdG9yLmludm9rZShjZmcuc2hvd0lmLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgICAgICAkcm91dGVQYXJhbXM6IHBhcmFtc1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHNob3dJZiByZXN1bHQgaXMgYSBwcm9taXNlIHdpdGggYm9vbGVhbiByZXN1bHQ6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLmdldCgnJHEnKS53aGVuKHNob3dJZlJlc3VsdCkudGhlbihCb29sZWFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIC4uLihjZmcuZmVhdHVyZUlkICYmIHsgZmVhdHVyZUlkOiBjZmcuZmVhdHVyZUlkIH0pXG4gICAgfSk7XG5cbiAgICBpZiAoY2ZnLnJ1blBoYXNlKSB7XG4gICAgICB0aGlzLnJvdXRlclNlcnZpY2UucmVmcmVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nMVJvdXRlcygpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZSA9ICcnO1xuICAgIGNvbnN0IGZhbGxiYWNrUm91dGVzID0gW107XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGZvcmluXG4gICAgZm9yIChjb25zdCBjb250ZXh0IGluIFZpZXdDb250ZXh0KSB7XG4gICAgICBjb25zdCBwYXRoID0gVmlld0NvbnRleHRbY29udGV4dF0ubWF0Y2goLyhcXHcrKVxcLy8pWzFdO1xuICAgICAgY29uc3QgcmVnZXhwID0gbmV3IFJlZ0V4cChgXi8ke3BhdGh9Lyg/OihbXi9dKykpLiokYCk7XG4gICAgICBmYWxsYmFja1JvdXRlcy5wdXNoKHtcbiAgICAgICAga2V5czogW3sgbmFtZTogVmlld0NvbnRleHRMZWdhY3lQYXJhbWV0ZXJbY29udGV4dF0sIG9wdGlvbmFsOiBmYWxzZSB9XSxcbiAgICAgICAgcmVnZXhwLFxuICAgICAgICB0ZW1wbGF0ZSxcbiAgICAgICAgcmVsb2FkT25Vcmw6IHRydWUsXG4gICAgICAgIHJlbG9hZE9uU2VhcmNoOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGFzc2V0IGRldGFpbCByb3V0ZXMgKC9kZXZpY2UvOmlkLCAgL2dyb3VwLzppZCkgYXJlIG1hdGNoZWQgaW4gQW5ndWxhciBSb3V0ZXIsIG5nUm91dGUgaW5cbiAgICAgKiBhbmd1bGFyLmpzIG11c3QgYWxzbyBoYXZlIG1hdGNoaW5nIGdlbmVyaWMgcm91dGVzIHNvIHRoYXQgdGhlIGlkcyBjYW4gYmUgZXh0cmFjdGVkIGZyb20gdGhlIHBhdGhzIGFuZFxuICAgICAqIGluamVjdGVkIGluIG11bHRpcGxlIGNhbGxzIChzaG93SWYsIGM4eUFjdGlvbnMsIGV0YykgYXMgcHJvcGVydGllcyBvZiAkcm91dGVQYXJhbXMuXG4gICAgICpcbiAgICAgKiBUaGUgZnVuY3Rpb24gaW4gc3JjL25nUm91dGUvcm91dGUuanMgKGFuZ3VsYXIuanMpIHdoZXJlIHRoZSByb3V0ZXMgYXJlIG1hdGNoZWQgaXMgY2FsbGVkIHBhcnNlUm91dGUoKS4gVGhpc1xuICAgICAqIGZ1bmN0aW9uIGNhbGxzIGFuZ3VsYXIuZm9yRWFjaCBhbmQgaW4gdHVybiB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgZm9yRWFjaCBtZXRob2QgYmVmb3JlXG4gICAgICogdHJ5aW5nIG9iamVjdCBrZXkgaXRlcmF0aW9uLlxuICAgICAqIEJ5IGF0dGFjaGluZyBhIG5vbiBlbnVtZXJhYmxlIGZvckVhY2ggbWV0aG9kIHRvIHRoZSByb3V0ZXMgb2JqZWN0IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBmYWxsYmFjayBnZW5lcmljIHJvdXRlc1xuICAgICAqIGFyZSBvbmx5IG1hdGNoZWQgYWZ0ZXIgYW55IG90aGVyIHJlZ2lzdGVyZWQgdGhyb3VnaCAkcm91dGVQcm92aWRlci53aGVuLlxuICAgICAqL1xuICAgIGNvbnN0ICRyb3V0ZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KCckcm91dGUnKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoJHJvdXRlLnJvdXRlcywgJ2ZvckVhY2gnLCB7XG4gICAgICAvLyBtYWtlIG5vbiBlbnVtZXJhYmxlXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGZvcmluXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMpIHtcbiAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHRoaXNba2V5XSwga2V5LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBmYWxsYmFja1JvdXRlcy5mb3JFYWNoKHIgPT4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCByKSk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTb21lIGZ1bmN0aW9ucyB1c2UgdGhlIGN1cnJlbnQgY29udGV4dC4gQXMgc29tZSBwYXJ0cyBhcmUgdXBncmFkZWQgYW5kIHNvbWUgbm90LCB0aGUgZm9sbG93aW5nIHVwZGF0ZXMgdGhlXG4gICAgICogYW5ndWxhcmpzIGdldENvbnRleHQgZnVuY3Rpb24gdG8gcmVzb2x2ZSBhbHdheXMgdGhlIHJpZ2h0IGNvbnRleHQuXG4gICAgICovXG4gICAgY29uc3QgYzh5VWlVdGlsID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVVpVXRpbCcpO1xuICAgIGNvbnN0IF9nZXRDb250ZXh0ID0gYzh5VWlVdGlsLmdldENvbnRleHQ7XG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBBY3RpdmF0aW9uRW5kKSA9PiB7XG4gICAgICAgIGlmIChldmVudC5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRoID09PSAnKionKSB7XG4gICAgICAgICAgYzh5VWlVdGlsLmdldENvbnRleHQgPSBfZ2V0Q29udGV4dDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5zbmFwc2hvdC5kYXRhICYmIGV2ZW50LnNuYXBzaG90LmRhdGEuY29udGV4dCkge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGV4dDogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0LnJlcGxhY2UoJy86aWQnLCAnJyksXG4gICAgICAgICAgICAgIGlkOiBldmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhLmlkLFxuICAgICAgICAgICAgICBjb250ZXh0RGF0YTogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4gKHsgY29udGV4dDogbnVsbCwgaWQ6IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZml4RTJlSXNzdWVzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5nWm9uZSB9ID0gdGhpcztcbiAgICAgIGNvbnN0IHsgVXRpbHMgfSA9ICh3aW5kb3cgYXMgYW55KS5vcmcuY29tZXRkO1xuICAgICAgY29uc3QgdGltZW91dEZuID0gVXRpbHMuc2V0VGltZW91dDtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgVXRpbHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGltZW91dEZuLmFwcGx5KFV0aWxzLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBhY2UgfSA9IHdpbmRvdyBhcyBhbnk7XG4gICAgICBjb25zdCBlZGl0Rm4gPSBhY2UuZWRpdDtcbiAgICAgIGNvbnN0IHsgbmdab25lIH0gPSB0aGlzO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9ubHktYXJyb3ctZnVuY3Rpb25zXG4gICAgICBhY2UuZWRpdCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gZWRpdEZuLmFwcGx5KGFjZSwgYXJncykpO1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgaG9va0xhbmd1YWdlKCkge1xuICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgdGhpcy5hcHBTdGF0ZVxuICAgICAgLm1hcChzdG9yZSA9PiBzdG9yZS5sYW5nKVxuICAgICAgLnN1YnNjcmliZShsYW5nID0+IHtcbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUxvY2FsZXMnKS5zd2l0Y2hUb0xhbmd1YWdlKGxhbmcpO1xuICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKS4kYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBob29rVGFiKCkge1xuICAgIC8vIEp1c3QgZm9yIGluc3RhbnRpYXRpb24gb2YgdGhlIGM4eUFjdGlvbiBzZXJ2aWNlXG4gICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbnMnKTtcbiAgICBjb25zdCAkbG9jYXRpb24gPSB0aGlzLmluamVjdG9yLmdldCgnJGxvY2F0aW9uJyk7XG4gICAgY29uc3QgYzh5VGFicyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlUYWJzJyk7XG4gICAgbGV0IGxpdmVUYWJzID0gW107XG4gICAgYzh5VGFicy5hZGRUYWIgPSB0YWIgPT4ge1xuICAgICAgbGl2ZVRhYnMucHVzaCh7XG4gICAgICAgIC4uLnRhYixcbiAgICAgICAgbGFiZWw6IHRhYi5sYWJlbCB8fCB0YWIubmFtZSxcbiAgICAgICAgcGF0aDogZGVjb2RlVVJJQ29tcG9uZW50KHRhYi5wYXRoKVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9O1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGxpdmVUYWJzID0gW107XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9KTtcbiAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3Muc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGNvbnN0IHBhdGggPSAkbG9jYXRpb24ucGF0aCgpO1xuICAgICAgaWYgKHRoaXMucm91dGVyLnVybCAhPT0gcGF0aCkge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShwYXRoID09PSAnLycgPyAnJyA6IHBhdGguc3BsaXQoJy8nKSwge1xuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiAkbG9jYXRpb24uc2VhcmNoKCksXG4gICAgICAgICAgc2tpcExvY2F0aW9uQ2hhbmdlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWN0aW9uU2VydmljZSkge1xuICAgICAgICB0aGlzLmFjdGlvblNlcnZpY2UucmVmcmVzaCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuJHJvdXRlQ2hhbmdlcyA9IG1lcmdlKFxuICAgICAgdGhpcy4kbmcxUm91dGVDaGFuZ2VTdWNjZXNzLFxuICAgICAgdGhpcy5mcm9tTmcxRXZlbnQoYzh5VGFicywgYzh5VGFicy5FVkVOVF9VUERBVEUpLFxuICAgICAgb2YoMSlcbiAgICApLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpO1xuICB9XG5cbiAgaG9va05hdmlnYXRvcigpIHtcbiAgICB0aGlzLm5hdmlnYXRpb25Ob2RlcyQgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5TmF2aWdhdG9yJykucm9vdE5vZGVzJDtcbiAgfVxuXG4gIGdldFRhYnMoKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBvbmx5VmlzaWJsZSA9ICh7IHNob3cgfSkgPT4gc2hvdztcbiAgICBjb25zdCB1cGdyYWRlVGFiID0gdGFiID0+ICh7XG4gICAgICAuLi50YWIsXG4gICAgICBsYWJlbDogdGFiLmxhYmVsIHx8IHRhYi5uYW1lLFxuICAgICAgcGF0aDogZGVjb2RlVVJJQ29tcG9uZW50KHRhYi5wYXRoKVxuICAgIH0pO1xuICAgIGNvbnN0IHJvdXRlVGFicyA9IHRoaXMuJHJvdXRlQ2hhbmdlcy5waXBlKFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3Qgcm91dGVzID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVRhYnMnKS5yb3V0ZVRhYnM7XG4gICAgICAgIGNvbnN0IHZpc2liaWxpdHlQcm9taXNlID0gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgcm91dGVzLm1hcCgoeyBjaGVja2luZ1Zpc2liaWxpdHkgfSkgPT4gY2hlY2tpbmdWaXNpYmlsaXR5KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdmlzaWJpbGl0eVByb21pc2UudGhlbigoKSA9PiByb3V0ZXMuZmlsdGVyKG9ubHlWaXNpYmxlKS5tYXAodXBncmFkZVRhYikpO1xuICAgICAgfSksXG4gICAgICBzdGFydFdpdGgoW10pXG4gICAgKTtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbcm91dGVUYWJzLCB0aGlzLiRsaXZlVGFic10pLnBpcGUoXG4gICAgICBtYXAoKFtyb3V0ZSwgbGl2ZV0pID0+IHJvdXRlLmNvbmNhdChsaXZlKSlcbiAgICApO1xuICB9XG5cbiAgZ2V0UXVpY2tMaW5rcygpOiBQcm9taXNlPERvY0xpbmtbXT4ge1xuICAgIGNvbnN0IGM4eVF1aWNrTGlua3MgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5UXVpY2tMaW5rcycpO1xuICAgIHJldHVybiBjOHlRdWlja0xpbmtzLmxpc3QoKTtcbiAgfVxuXG4gIGdldEFjdGlvbkJhckl0ZW1zKCk6IE9ic2VydmFibGU8QWN0aW9uQmFySXRlbT4ge1xuICAgIGNvbnN0IGM4eUFjdGlvbkJhciA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlBY3Rpb25CYXInKTtcbiAgICBjb25zdCAkcm9vdFNjb3BlID0gdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKTtcbiAgICBjb25zdCBnZXRBY3Rpb25CYXJFbGVtZW50cyA9ICgpID0+XG4gICAgICBjOHlBY3Rpb25CYXIuZWxlbWVudHMubWFwKGVsZW1lbnQgPT4gKHtcbiAgICAgICAgcHJpb3JpdHk6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdhY3Rpb24tYmFyLXByaW9yaXR5JykgfHwgMCxcbiAgICAgICAgdGVtcGxhdGU6IGVsZW1lbnQsXG4gICAgICAgIHBsYWNlbWVudDogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbi1iYXItcG9zaXRpb24nKSB8fCAncmlnaHQnXG4gICAgICB9KSk7XG4gICAgcmV0dXJuIHRoaXMuZnJvbU5nMUV2ZW50KCRyb290U2NvcGUsICdjOHlBY3Rpb25CYXJDaGFuZ2VkJykucGlwZShcbiAgICAgIHN0YXJ0V2l0aCgxKSxcbiAgICAgIG1hcChnZXRBY3Rpb25CYXJFbGVtZW50cylcbiAgICApO1xuICB9XG5cbiAgZ2V0QnJlYWRjcnVtYnMoKTogT2JzZXJ2YWJsZTxCcmVhZGNydW1iW10+IHtcbiAgICBjb25zdCAkbG9jYXRpb24gPSB0aGlzLmluamVjdG9yLmdldCgnJGxvY2F0aW9uJyk7XG4gICAgY29uc3QgYzh5QnJlYWRjcnVtYnMgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5QnJlYWRjcnVtYnMnKTtcbiAgICBjb25zdCBicmVhZGNydW1ic1VwZGF0ZSQgPSBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmVyID0+XG4gICAgICBjOHlCcmVhZGNydW1icy4kb24oJ3VwZGF0ZScsICgpID0+IHN1YnNjcmliZXIubmV4dCgpKVxuICAgICk7XG4gICAgcmV0dXJuIGJyZWFkY3J1bWJzVXBkYXRlJC5waXBlKFxuICAgICAgc3RhcnRXaXRoKDApLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgY29uc3QgcGF0aCA9ICRsb2NhdGlvbi5wYXRoKCk7XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzID0gYzh5QnJlYWRjcnVtYnMuZ2V0KHBhdGgpIHx8IHt9O1xuICAgICAgICBjb25zdCBicmVhZGNydW1ic0RhdGEgPSB0aGlzLnJlc29sdmVCcmVhZGNydW1ic0RhdGEoYnJlYWRjcnVtYnMuZGF0YSk7XG4gICAgICAgIHJldHVybiBmcm9tKGJyZWFkY3J1bWJzRGF0YSkucGlwZShcbiAgICAgICAgICBtYXAoKHZhbHVlOiBhbnlbXSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGl2ZUJyZWFkY3J1bWJzID0gYzh5QnJlYWRjcnVtYnMuZ2V0TGl2ZUJyZWFkY3J1bWJzKCk7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmNvbmNhdChsaXZlQnJlYWRjcnVtYnMpO1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChpdGVtcyA9PiAoeyBpdGVtczogaXRlbXMgYXMgQnJlYWRjcnVtYkl0ZW1bXSB9KSBhcyBCcmVhZGNydW1iKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcmVzb2x2ZUJyZWFkY3J1bWJzRGF0YShkYXRhKTogT2JzZXJ2YWJsZTxhbnlbXT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5pbmplY3Rvci5pbnZva2UoZGF0YSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIC8vIGVtcHR5XG4gICAgfVxuICAgIGlmIChpc0FycmF5KGRhdGEpKSB7XG4gICAgICByZXR1cm4gb2YoW2RhdGFdKTtcbiAgICB9XG4gICAgcmV0dXJuIG9mKFtdKTtcbiAgfVxuXG4gIGdldFNlYXJjaCgpOiBTZWFyY2hbXSB7XG4gICAgY29uc3QgYzh5U2VhcmNoID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVNlYXJjaCcpO1xuICAgIHJldHVybiBjOHlTZWFyY2gubGlzdCgpLm1hcChpdGVtID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGljb246ICdzZWFyY2gnLFxuICAgICAgICBuYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgIHRlcm06ICcnLFxuICAgICAgICBvblNlYXJjaCgpIHtcbiAgICAgICAgICBpZiAodGhpcy50ZXJtKSB7XG4gICAgICAgICAgICBjOHlTZWFyY2guc2VhcmNoKHRoaXMudGVybSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGFzIFNlYXJjaDtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEFjdGlvbnMoKTogT2JzZXJ2YWJsZTxBY3Rpb24+IHtcbiAgICBjb25zdCByZWdpc3RlcmVkQWN0aW9ucyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlBY3Rpb25zJykucmVnaXN0ZXJlZEFjdGlvbnM7XG4gICAgcmV0dXJuIG9mKFxuICAgICAgcmVnaXN0ZXJlZEFjdGlvbnNcbiAgICAgICAgLmZpbHRlcihhY3Rpb24gPT4gIWFjdGlvbi5oaWRkZW4pXG4gICAgICAgIC5tYXAoYWN0aW9uID0+ICh7XG4gICAgICAgICAgLy8gVGhlIHByaW9yaXR5IHdhcyByZXZlcnNlZDogQWxpZ25lZCBpdCB0byBkYXNoYm9hcmQsIGhpZ2ggZmlyc3QsIGxvdyBsYXN0LlxuICAgICAgICAgIHByaW9yaXR5OiAoYWN0aW9uLnByaW9yaXR5IHx8IDApICogLTEsXG4gICAgICAgICAgbGFiZWw6IGFjdGlvbi50ZXh0LFxuICAgICAgICAgIGljb246IGFjdGlvbi5pY29uLFxuICAgICAgICAgIGRpc2FibGVkOiBhY3Rpb24uZGlzYWJsZWQsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluamVjdG9yLmludm9rZShhY3Rpb24uYWN0aW9uLCBhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkpXG4gICAgKTtcbiAgfVxuXG4gIGZyb21OZzFFdmVudChvYmosIGV2dCkge1xuICAgIGxldCBzdG9wTGlzdGVuaW5nO1xuICAgIGZ1bmN0aW9uIGFkZChoYW5kbGVyKSB7XG4gICAgICBzdG9wTGlzdGVuaW5nID0gb2JqLiRvbihldnQsIGhhbmRsZXIpO1xuICAgIH1cbiAgICByZXR1cm4gZnJvbUV2ZW50UGF0dGVybihhZGQsICgpID0+IHN0b3BMaXN0ZW5pbmcoKSk7XG4gIH1cblxuICBwcml2YXRlIGhvb2tVc2VyTWVudSgpIHtcbiAgICBjb25zdCB1c2VyTWVudVNlcnZpY2UgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5VXNlck1lbnVTZXJ2aWNlJyk7XG4gICAgY29uc3QgYzh5QWNjZXNzRGVuaWVkID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjY2Vzc0RlbmllZCcpO1xuICAgIHVzZXJNZW51U2VydmljZS5hZGQoe1xuICAgICAgaWNvbjogJ2FjY2VzcycsXG4gICAgICBwcmlvcml0eTogMTAsXG4gICAgICBsYWJlbDogZ2V0dGV4dCgnQWNjZXNzIGRlbmllZCByZXF1ZXN0cycpLFxuICAgICAgY2xpY2s6IGM4eUFjY2Vzc0RlbmllZC5zaG93QWNjZXNzRGVuaWVkUmVxdWVzdHNMaXN0XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJyaWRnZVNlcnZpY2VGYWN0b3J5KFxuICBpbmplY3RvcjogYW55LFxuICBhcHBTdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICByb3V0ZXI6IFJvdXRlcixcbiAgbmdab25lOiBOZ1pvbmUsXG4gIHJvdXRlclNlcnZpY2U6IFJvdXRlclNlcnZpY2UsXG4gIGFjdGlvblNlcnZpY2U6IEFjdGlvblNlcnZpY2UsXG4gIHBsdWdpbnM6IFBsdWdpbnNSZXNvbHZlU2VydmljZVxuKSB7XG4gIHJldHVybiBuZXcgQnJpZGdlU2VydmljZShcbiAgICBpbmplY3RvcixcbiAgICBhcHBTdGF0ZSxcbiAgICByb3V0ZXIsXG4gICAgbmdab25lLFxuICAgIHJvdXRlclNlcnZpY2UsXG4gICAgYWN0aW9uU2VydmljZSxcbiAgICBwbHVnaW5zXG4gICk7XG59XG5cbmV4cG9ydCBjb25zdCBicmlkZ2VTZXJ2aWNlUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IEJyaWRnZVNlcnZpY2UsXG4gIHVzZUZhY3Rvcnk6IGJyaWRnZVNlcnZpY2VGYWN0b3J5LFxuICBkZXBzOiBbXG4gICAgJyRpbmplY3RvcicsXG4gICAgQXBwU3RhdGVTZXJ2aWNlLFxuICAgIFJvdXRlcixcbiAgICBOZ1pvbmUsXG4gICAgUm91dGVyU2VydmljZSxcbiAgICBBY3Rpb25TZXJ2aWNlLFxuICAgIFBsdWdpbnNSZXNvbHZlU2VydmljZVxuICBdXG59O1xuIl19
347
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJpZGdlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi91cGdyYWRlL2JyaWRnZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxhQUFhLEVBQ2IsZUFBZSxFQUlmLGNBQWMsRUFDZCxPQUFPLEVBQ1AscUJBQXFCLEVBQ3JCLGFBQWEsRUFHYixXQUFXLEVBQ1osTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLElBQUksRUFDSixnQkFBZ0IsRUFDaEIsS0FBSyxFQUNMLFVBQVUsRUFDVixFQUFFLEVBRUgsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFbEUsTUFBTSxPQUFPLGFBQWE7SUFPeEIsWUFDUyxRQUFhLEVBQ1osUUFBeUIsRUFDMUIsTUFBYyxFQUNiLE1BQWMsRUFDZCxhQUE0QixFQUM1QixhQUE0QixFQUNwQyxPQUE4QjtRQU52QixhQUFRLEdBQVIsUUFBUSxDQUFLO1FBQ1osYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQVJ0QyxjQUFTLEdBQW1CLElBQUksZUFBZSxDQUFD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Z0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sWUFBWTtRQUNsQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ2hFLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0QsZUFBZSxDQUFDLEdBQUcsQ0FBQztZQUNsQixJQUFJLEVBQUUsUUFBUTtZQUNkLFFBQVEsRUFBRSxFQUFFO1lBQ1osS0FBSyxFQUFFLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQztZQUN4QyxLQUFLLEVBQUUsZUFBZSxDQUFDLDRCQUE0QjtTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLFFBQWEsRUFDYixRQUF5QixFQUN6QixNQUFjLEVBQ2QsTUFBYyxFQUNkLGFBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLE9BQThCO0lBRTlCLE9BQU8sSUFBSSxhQUFhLENBQ3RCLFFBQVEsRUFDUixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixhQUFhLEVBQ2IsYUFBYSxFQUNiLE9BQU8sQ0FDUixDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHO0lBQ25DLE9BQU8sRUFBRSxhQUFhO0lBQ3RCLFVBQVUsRUFBRSxvQkFBb0I7SUFDaEMsSUFBSSxFQUFFO1FBQ0osV0FBVztRQUNYLGVBQWU7UUFDZixNQUFNO1FBQ04sTUFBTTtRQUNOLGFBQWE7UUFDYixhQUFhO1FBQ2IscUJBQXFCO0tBQ3RCO0NBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjdGlvbixcbiAgQWN0aW9uQmFySXRlbSxcbiAgQWN0aW9uU2VydmljZSxcbiAgQXBwU3RhdGVTZXJ2aWNlLFxuICBCcmVhZGNydW1iLFxuICBCcmVhZGNydW1iSXRlbSxcbiAgRG9jTGluayxcbiAgRW1wdHlDb21wb25lbnQsXG4gIGdldHRleHQsXG4gIFBsdWdpbnNSZXNvbHZlU2VydmljZSxcbiAgUm91dGVyU2VydmljZSxcbiAgU2VhcmNoLFxuICBUYWIsXG4gIFZpZXdDb250ZXh0XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZyb20sXG4gIGZyb21FdmVudFBhdHRlcm4sXG4gIG1lcmdlLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgU3ViamVjdFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRpb25FbmQsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBWaWV3Q29udGV4dExlZ2FjeVBhcmFtZXRlciB9IGZyb20gJy4vbmcxL3ZpZXdzLnByb3ZpZGVyJztcblxuZXhwb3J0IGNsYXNzIEJyaWRnZVNlcnZpY2Uge1xuICAkcm91dGVDaGFuZ2VzOiBPYnNlcnZhYmxlPGFueT47XG4gICRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3M6IE9ic2VydmFibGU8YW55PjtcbiAgJG5nMVJvdXRlQ2hhbmdlU3RhcnQ6IE9ic2VydmFibGU8YW55PjtcbiAgJG5nMVJvdXRlVXBkYXRlOiBPYnNlcnZhYmxlPGFueT47XG4gICRsaXZlVGFiczogU3ViamVjdDxUYWJbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KFtdKTtcbiAgbmF2aWdhdGlvbk5vZGVzJDogT2JzZXJ2YWJsZTxhbnk+O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgaW5qZWN0b3I6IGFueSxcbiAgICBwcml2YXRlIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByb3V0ZXJTZXJ2aWNlOiBSb3V0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWN0aW9uU2VydmljZTogQWN0aW9uU2VydmljZSxcbiAgICBwbHVnaW5zOiBQbHVnaW5zUmVzb2x2ZVNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5maXhFMmVJc3N1ZXMoKTtcbiAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3MgPSB0aGlzLmZyb21OZzFFdmVudChcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksXG4gICAgICAnJHJvdXRlQ2hhbmdlU3VjY2VzcydcbiAgICApO1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3RhcnQgPSB0aGlzLmZyb21OZzFFdmVudChcbiAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksXG4gICAgICAnJHJvdXRlQ2hhbmdlU3RhcnQnXG4gICAgKTtcbiAgICB0aGlzLiRuZzFSb3V0ZVVwZGF0ZSA9IHRoaXMuZnJvbU5nMUV2ZW50KHRoaXMuaW5qZWN0b3IuZ2V0KCckcm9vdFNjb3BlJyksICckcm91dGVVcGRhdGUnKTtcbiAgICB0aGlzLmhvb2tMYW5ndWFnZSgpO1xuICAgIHRoaXMuaG9va1RhYigpO1xuICAgIHRoaXMuaG9va05hdmlnYXRvcigpO1xuICAgIHRoaXMuaG9va1VzZXJNZW51KCk7XG4gICAgdGhpcy5ob29rVmlld1Byb3ZpZGVyKCk7XG4gICAgcGx1Z2lucy5hbGxQbHVnaW5zTG9hZGVkJFxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcih0bXAgPT4gISF0bXApLFxuICAgICAgICB0YWtlKDEpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0ZXIuaW5pdGlhbE5hdmlnYXRpb24oKTtcbiAgICAgIH0pO1xuICAgIHRoaXMubmcxUm91dGVzKCk7XG4gIH1cblxuICBob29rVmlld1Byb3ZpZGVyKCkge1xuICAgIGNvbnN0IGM4eVZpZXdzID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVZpZXdzJyk7XG4gICAgLy8gZml4IHRvIHRyaWdnZXIgYW4gYW5ndWxhcmpzIHJvdXRlIGNoYW5nZSBzdWNjZXNzXG4gICAgLy8gZXZlbnQgb24gY29udGV4dCByb3V0ZSBtYXRjaCB0byBtYWtlIGxlZ2FjeVxuICAgIC8vIHZpZXctcHJvdmlkZXJzIHJlc29sdmUuXG4gICAgYzh5Vmlld3Mud2hlbignL2RldmljZS86aWQnLCB7XG4gICAgICB0ZW1wbGF0ZTogJydcbiAgICB9KTtcbiAgICBjOHlWaWV3cy53aGVuKCcvZ3JvdXAvOmlkJywge1xuICAgICAgdGVtcGxhdGU6ICcnXG4gICAgfSk7XG4gICAgYzh5Vmlld3MuY29udGV4dFZpZXdzLnN1YnNjcmliZShjZmcgPT4gdGhpcy5hZGRSb3V0ZShjZmcpKTtcbiAgfVxuXG4gIGFkZFJvdXRlKGNmZykge1xuICAgIHRoaXMucm91dGVyU2VydmljZS5hZGRSb3V0ZSh7XG4gICAgICBsYWJlbDogY2ZnLmxhYmVsIHx8IGNmZy5uYW1lLFxuICAgICAgcGF0aDogY2ZnLnBhdGgsXG4gICAgICBpY29uOiBjZmcuaWNvbixcbiAgICAgIGNvbnRleHQ6IFZpZXdDb250ZXh0W2NmZy5jb250ZXh0S2V5XSBhcyBWaWV3Q29udGV4dCxcbiAgICAgIHByaW9yaXR5OiBjZmcucHJpb3JpdHksXG4gICAgICBjb21wb25lbnQ6IEVtcHR5Q29tcG9uZW50LFxuICAgICAgZGF0YToge1xuICAgICAgICBzaG93SWY6IGNmZy5zaG93SWZcbiAgICAgICAgICA/IG5neFJvdXRlID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgICAgIC4uLm5neFJvdXRlLnBhcmFtcyxcbiAgICAgICAgICAgICAgICBbVmlld0NvbnRleHRMZWdhY3lQYXJhbWV0ZXJbY2ZnLmNvbnRleHRLZXldXTogbmd4Um91dGUucGFyYW1zLmlkXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIGNvbnN0IHNob3dJZlJlc3VsdCA9IHRoaXMuaW5qZWN0b3IuaW52b2tlKGNmZy5zaG93SWYsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICRyb3V0ZVBhcmFtczogcGFyYW1zXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgc2hvd0lmIHJlc3VsdCBpcyBhIHByb21pc2Ugd2l0aCBib29sZWFuIHJlc3VsdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5qZWN0b3IuZ2V0KCckcScpLndoZW4oc2hvd0lmUmVzdWx0KS50aGVuKEJvb2xlYW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICB9LFxuICAgICAgLi4uKGNmZy5mZWF0dXJlSWQgJiYgeyBmZWF0dXJlSWQ6IGNmZy5mZWF0dXJlSWQgfSlcbiAgICB9KTtcblxuICAgIGlmIChjZmcucnVuUGhhc2UpIHtcbiAgICAgIHRoaXMucm91dGVyU2VydmljZS5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgbmcxUm91dGVzKCkge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gJyc7XG4gICAgY29uc3QgZmFsbGJhY2tSb3V0ZXMgPSBbXTtcblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZm9yaW5cbiAgICBmb3IgKGNvbnN0IGNvbnRleHQgaW4gVmlld0NvbnRleHQpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBWaWV3Q29udGV4dFtjb250ZXh0XS5tYXRjaCgvKFxcdyspXFwvLylbMV07XG4gICAgICBjb25zdCByZWdleHAgPSBuZXcgUmVnRXhwKGBeLyR7cGF0aH0vKD86KFteL10rKSkuKiRgKTtcbiAgICAgIGZhbGxiYWNrUm91dGVzLnB1c2goe1xuICAgICAgICBrZXlzOiBbeyBuYW1lOiBWaWV3Q29udGV4dExlZ2FjeVBhcmFtZXRlcltjb250ZXh0XSwgb3B0aW9uYWw6IGZhbHNlIH1dLFxuICAgICAgICByZWdleHAsXG4gICAgICAgIHRlbXBsYXRlXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIGFzc2V0IGRldGFpbCByb3V0ZXMgKC9kZXZpY2UvOmlkLCAgL2dyb3VwLzppZCkgYXJlIG1hdGNoZWQgaW4gQW5ndWxhciBSb3V0ZXIsIG5nUm91dGUgaW5cbiAgICAgKiBhbmd1bGFyLmpzIG11c3QgYWxzbyBoYXZlIG1hdGNoaW5nIGdlbmVyaWMgcm91dGVzIHNvIHRoYXQgdGhlIGlkcyBjYW4gYmUgZXh0cmFjdGVkIGZyb20gdGhlIHBhdGhzIGFuZFxuICAgICAqIGluamVjdGVkIGluIG11bHRpcGxlIGNhbGxzIChzaG93SWYsIGM4eUFjdGlvbnMsIGV0YykgYXMgcHJvcGVydGllcyBvZiAkcm91dGVQYXJhbXMuXG4gICAgICpcbiAgICAgKiBUaGUgZnVuY3Rpb24gaW4gc3JjL25nUm91dGUvcm91dGUuanMgKGFuZ3VsYXIuanMpIHdoZXJlIHRoZSByb3V0ZXMgYXJlIG1hdGNoZWQgaXMgY2FsbGVkIHBhcnNlUm91dGUoKS4gVGhpc1xuICAgICAqIGZ1bmN0aW9uIGNhbGxzIGFuZ3VsYXIuZm9yRWFjaCBhbmQgaW4gdHVybiB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgZm9yRWFjaCBtZXRob2QgYmVmb3JlXG4gICAgICogdHJ5aW5nIG9iamVjdCBrZXkgaXRlcmF0aW9uLlxuICAgICAqIEJ5IGF0dGFjaGluZyBhIG5vbiBlbnVtZXJhYmxlIGZvckVhY2ggbWV0aG9kIHRvIHRoZSByb3V0ZXMgb2JqZWN0IHdlIGd1YXJhbnRlZSB0aGF0IHRoZSBmYWxsYmFjayBnZW5lcmljIHJvdXRlc1xuICAgICAqIGFyZSBvbmx5IG1hdGNoZWQgYWZ0ZXIgYW55IG90aGVyIHJlZ2lzdGVyZWQgdGhyb3VnaCAkcm91dGVQcm92aWRlci53aGVuLlxuICAgICAqL1xuICAgIGNvbnN0ICRyb3V0ZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KCckcm91dGUnKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoJHJvdXRlLnJvdXRlcywgJ2ZvckVhY2gnLCB7XG4gICAgICAvLyBtYWtlIG5vbiBlbnVtZXJhYmxlXG4gICAgICB2YWx1ZTogZnVuY3Rpb24gZm9yRWFjaChpdGVyYXRvciwgY29udGV4dCkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGZvcmluXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMpIHtcbiAgICAgICAgICBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHRoaXNba2V5XSwga2V5LCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBmYWxsYmFja1JvdXRlcy5mb3JFYWNoKHIgPT4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCByKSk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiBTb21lIGZ1bmN0aW9ucyB1c2UgdGhlIGN1cnJlbnQgY29udGV4dC4gQXMgc29tZSBwYXJ0cyBhcmUgdXBncmFkZWQgYW5kIHNvbWUgbm90LCB0aGUgZm9sbG93aW5nIHVwZGF0ZXMgdGhlXG4gICAgICogYW5ndWxhcmpzIGdldENvbnRleHQgZnVuY3Rpb24gdG8gcmVzb2x2ZSBhbHdheXMgdGhlIHJpZ2h0IGNvbnRleHQuXG4gICAgICovXG4gICAgY29uc3QgYzh5VWlVdGlsID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eVVpVXRpbCcpO1xuICAgIGNvbnN0IF9nZXRDb250ZXh0ID0gYzh5VWlVdGlsLmdldENvbnRleHQ7XG4gICAgdGhpcy5yb3V0ZXIuZXZlbnRzXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBBY3RpdmF0aW9uRW5kKSA9PiB7XG4gICAgICAgIGlmIChldmVudC5zbmFwc2hvdC5yb3V0ZUNvbmZpZy5wYXRoID09PSAnKionKSB7XG4gICAgICAgICAgYzh5VWlVdGlsLmdldENvbnRleHQgPSBfZ2V0Q29udGV4dDtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC5zbmFwc2hvdC5kYXRhICYmIGV2ZW50LnNuYXBzaG90LmRhdGEuY29udGV4dCkge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29udGV4dDogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0LnJlcGxhY2UoJy86aWQnLCAnJyksXG4gICAgICAgICAgICAgIGlkOiBldmVudC5zbmFwc2hvdC5kYXRhLmNvbnRleHREYXRhLmlkLFxuICAgICAgICAgICAgICBjb250ZXh0RGF0YTogZXZlbnQuc25hcHNob3QuZGF0YS5jb250ZXh0RGF0YVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGM4eVVpVXRpbC5nZXRDb250ZXh0ID0gKCkgPT4gKHsgY29udGV4dDogbnVsbCwgaWQ6IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZml4RTJlSXNzdWVzKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5nWm9uZSB9ID0gdGhpcztcbiAgICAgIGNvbnN0IHsgVXRpbHMgfSA9ICh3aW5kb3cgYXMgYW55KS5vcmcuY29tZXRkO1xuICAgICAgY29uc3QgdGltZW91dEZuID0gVXRpbHMuc2V0VGltZW91dDtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpvbmx5LWFycm93LWZ1bmN0aW9uc1xuICAgICAgVXRpbHMuc2V0VGltZW91dCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gdGltZW91dEZuLmFwcGx5KFV0aWxzLCBhcmdzKSk7XG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGRvIG5vdGhpbmdcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBhY2UgfSA9IHdpbmRvdyBhcyBhbnk7XG4gICAgICBjb25zdCBlZGl0Rm4gPSBhY2UuZWRpdDtcbiAgICAgIGNvbnN0IHsgbmdab25lIH0gPSB0aGlzO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm9ubHktYXJyb3ctZnVuY3Rpb25zXG4gICAgICBhY2UuZWRpdCA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4gZWRpdEZuLmFwcGx5KGFjZSwgYXJncykpO1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBkbyBub3RoaW5nXG4gICAgfVxuICB9XG5cbiAgaG9va0xhbmd1YWdlKCkge1xuICAgIGxldCBmaXJzdCA9IHRydWU7XG4gICAgdGhpcy5hcHBTdGF0ZVxuICAgICAgLm1hcChzdG9yZSA9PiBzdG9yZS5sYW5nKVxuICAgICAgLnN1YnNjcmliZShsYW5nID0+IHtcbiAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUxvY2FsZXMnKS5zd2l0Y2hUb0xhbmd1YWdlKGxhbmcpO1xuICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgdGhpcy5pbmplY3Rvci5nZXQoJyRyb290U2NvcGUnKS4kYXBwbHkoKTtcbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlO1xuICAgICAgfSk7XG4gIH1cblxuICBob29rVGFiKCkge1xuICAgIC8vIEp1c3QgZm9yIGluc3RhbnRpYXRpb24gb2YgdGhlIGM4eUFjdGlvbiBzZXJ2aWNlXG4gICAgdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbnMnKTtcbiAgICBjb25zdCAkbG9jYXRpb24gPSB0aGlzLmluamVjdG9yLmdldCgnJGxvY2F0aW9uJyk7XG4gICAgY29uc3QgYzh5VGFicyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlUYWJzJyk7XG4gICAgbGV0IGxpdmVUYWJzID0gW107XG4gICAgYzh5VGFicy5hZGRUYWIgPSB0YWIgPT4ge1xuICAgICAgbGl2ZVRhYnMucHVzaCh7XG4gICAgICAgIC4uLnRhYixcbiAgICAgICAgbGFiZWw6IHRhYi5sYWJlbCB8fCB0YWIubmFtZSxcbiAgICAgICAgcGF0aDogZGVjb2RlVVJJQ29tcG9uZW50KHRhYi5wYXRoKVxuICAgICAgfSk7XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9O1xuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3RhcnQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIGxpdmVUYWJzID0gW107XG4gICAgICB0aGlzLiRsaXZlVGFicy5uZXh0KGxpdmVUYWJzKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHN5bmNSb3V0ZXJzID0gKCkgPT4ge1xuICAgICAgY29uc3QgcGF0aCA9ICRsb2NhdGlvbi5wYXRoKCk7XG5cbiAgICAgIC8vIERvbid0IHN5bmMgaWYgQW5ndWxhciBSb3V0ZXIgaXMgdXNpbmcgc2Vjb25kYXJ5IG91dGxldHNcbiAgICAgIC8vIChlLmcuLCAvZGV2aWNlLzEyMy8oZGFzaGJvYXJkLWRldGFpbHM6Z2VuZXJhbCkpXG4gICAgICAvLyBMZXQgQW5ndWxhciBSb3V0ZXIgaGFuZGxlIHRoZXNlIGFkdmFuY2VkIG5hdmlnYXRpb24gc2NlbmFyaW9zXG4gICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCcoJykgJiYgdGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCc6JykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHN5bmMgaWYgcGF0aHMgZGlmZmVyIGFuZCBpbml0aWFsIG5hdmlnYXRpb24gaXMgY29tcGxldGVcbiAgICAgIGlmICh0aGlzLnJvdXRlci51cmwgIT09IHBhdGgpIHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUocGF0aCA9PT0gJy8nID8gJycgOiBwYXRoLnNwbGl0KCcvJyksIHtcbiAgICAgICAgICBxdWVyeVBhcmFtczogJGxvY2F0aW9uLnNlYXJjaCgpLFxuICAgICAgICAgIHNraXBMb2NhdGlvbkNoYW5nZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmFjdGlvblNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5hY3Rpb25TZXJ2aWNlLnJlZnJlc2goKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gTGlzdGVuIHRvICRyb3V0ZUNoYW5nZVN1Y2Nlc3MgKGZ1bGwgbmF2aWdhdGlvbiAtIGFsd2F5cyBzeW5jKVxuICAgIHRoaXMuJG5nMVJvdXRlQ2hhbmdlU3VjY2Vzcy5zdWJzY3JpYmUoc3luY1JvdXRlcnMpO1xuICAgIC8vIExpc3RlbiB0byAkcm91dGVVcGRhdGUgKHNraXAgaWYgcXVlcnktcGFyYW0tb25seSlcbiAgICB0aGlzLiRuZzFSb3V0ZVVwZGF0ZVxuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoKSA9PiB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9ICRsb2NhdGlvbi5wYXRoKCk7XG4gICAgICAgICAgY29uc3QgYW5ndWxhclBhdGggPSB0aGlzLnJvdXRlci51cmwuc3BsaXQoJz8nKVswXTtcbiAgICAgICAgICAvLyBPbmx5IHByb2Nlc3MgaWYgcGF0aCBhY3R1YWxseSBjaGFuZ2VkIChub3QganVzdCBxdWVyeSBwYXJhbXMpXG4gICAgICAgICAgcmV0dXJuIGFuZ3VsYXJQYXRoICE9PSBwYXRoO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShzeW5jUm91dGVycyk7XG4gICAgdGhpcy4kcm91dGVDaGFuZ2VzID0gbWVyZ2UoXG4gICAgICB0aGlzLiRuZzFSb3V0ZUNoYW5nZVN1Y2Nlc3MsXG4gICAgICB0aGlzLmZyb21OZzFFdmVudChjOHlUYWJzLCBjOHlUYWJzLkVWRU5UX1VQREFURSksXG4gICAgICBvZigxKVxuICAgICkucGlwZShkZWJvdW5jZVRpbWUoMTAwKSk7XG4gIH1cblxuICBob29rTmF2aWdhdG9yKCkge1xuICAgIHRoaXMubmF2aWdhdGlvbk5vZGVzJCA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlOYXZpZ2F0b3InKS5yb290Tm9kZXMkO1xuICB9XG5cbiAgZ2V0VGFicygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IG9ubHlWaXNpYmxlID0gKHsgc2hvdyB9KSA9PiBzaG93O1xuICAgIGNvbnN0IHVwZ3JhZGVUYWIgPSB0YWIgPT4gKHtcbiAgICAgIC4uLnRhYixcbiAgICAgIGxhYmVsOiB0YWIubGFiZWwgfHwgdGFiLm5hbWUsXG4gICAgICBwYXRoOiBkZWNvZGVVUklDb21wb25lbnQodGFiLnBhdGgpXG4gICAgfSk7XG4gICAgY29uc3Qgcm91dGVUYWJzID0gdGhpcy4kcm91dGVDaGFuZ2VzLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCByb3V0ZXMgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5VGFicycpLnJvdXRlVGFicztcbiAgICAgICAgY29uc3QgdmlzaWJpbGl0eVByb21pc2UgPSBQcm9taXNlLmFsbChcbiAgICAgICAgICByb3V0ZXMubWFwKCh7IGNoZWNraW5nVmlzaWJpbGl0eSB9KSA9PiBjaGVja2luZ1Zpc2liaWxpdHkpXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB2aXNpYmlsaXR5UHJvbWlzZS50aGVuKCgpID0+IHJvdXRlcy5maWx0ZXIob25seVZpc2libGUpLm1hcCh1cGdyYWRlVGFiKSk7XG4gICAgICB9KSxcbiAgICAgIHN0YXJ0V2l0aChbXSlcbiAgICApO1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtyb3V0ZVRhYnMsIHRoaXMuJGxpdmVUYWJzXSkucGlwZShcbiAgICAgIG1hcCgoW3JvdXRlLCBsaXZlXSkgPT4gcm91dGUuY29uY2F0KGxpdmUpKVxuICAgICk7XG4gIH1cblxuICBnZXRRdWlja0xpbmtzKCk6IFByb21pc2U8RG9jTGlua1tdPiB7XG4gICAgY29uc3QgYzh5UXVpY2tMaW5rcyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlRdWlja0xpbmtzJyk7XG4gICAgcmV0dXJuIGM4eVF1aWNrTGlua3MubGlzdCgpO1xuICB9XG5cbiAgZ2V0QWN0aW9uQmFySXRlbXMoKTogT2JzZXJ2YWJsZTxBY3Rpb25CYXJJdGVtPiB7XG4gICAgY29uc3QgYzh5QWN0aW9uQmFyID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbkJhcicpO1xuICAgIGNvbnN0ICRyb290U2NvcGUgPSB0aGlzLmluamVjdG9yLmdldCgnJHJvb3RTY29wZScpO1xuICAgIGNvbnN0IGdldEFjdGlvbkJhckVsZW1lbnRzID0gKCkgPT5cbiAgICAgIGM4eUFjdGlvbkJhci5lbGVtZW50cy5tYXAoZWxlbWVudCA9PiAoe1xuICAgICAgICBwcmlvcml0eTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FjdGlvbi1iYXItcHJpb3JpdHknKSB8fCAwLFxuICAgICAgICB0ZW1wbGF0ZTogZWxlbWVudCxcbiAgICAgICAgcGxhY2VtZW50OiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnYWN0aW9uLWJhci1wb3NpdGlvbicpIHx8ICdyaWdodCdcbiAgICAgIH0pKTtcbiAgICByZXR1cm4gdGhpcy5mcm9tTmcxRXZlbnQoJHJvb3RTY29wZSwgJ2M4eUFjdGlvbkJhckNoYW5nZWQnKS5waXBlKFxuICAgICAgc3RhcnRXaXRoKDEpLFxuICAgICAgbWFwKGdldEFjdGlvbkJhckVsZW1lbnRzKVxuICAgICk7XG4gIH1cblxuICBnZXRCcmVhZGNydW1icygpOiBPYnNlcnZhYmxlPEJyZWFkY3J1bWJbXT4ge1xuICAgIGNvbnN0ICRsb2NhdGlvbiA9IHRoaXMuaW5qZWN0b3IuZ2V0KCckbG9jYXRpb24nKTtcbiAgICBjb25zdCBjOHlCcmVhZGNydW1icyA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlCcmVhZGNydW1icycpO1xuICAgIGNvbnN0IGJyZWFkY3J1bWJzVXBkYXRlJCA9IG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT5cbiAgICAgIGM4eUJyZWFkY3J1bWJzLiRvbigndXBkYXRlJywgKCkgPT4gc3Vic2NyaWJlci5uZXh0KCkpXG4gICAgKTtcbiAgICByZXR1cm4gYnJlYWRjcnVtYnNVcGRhdGUkLnBpcGUoXG4gICAgICBzdGFydFdpdGgoMCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXRoID0gJGxvY2F0aW9uLnBhdGgoKTtcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYnMgPSBjOHlCcmVhZGNydW1icy5nZXQocGF0aCkgfHwge307XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJzRGF0YSA9IHRoaXMucmVzb2x2ZUJyZWFkY3J1bWJzRGF0YShicmVhZGNydW1icy5kYXRhKTtcbiAgICAgICAgcmV0dXJuIGZyb20oYnJlYWRjcnVtYnNEYXRhKS5waXBlKFxuICAgICAgICAgIG1hcCgodmFsdWU6IGFueVtdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaXZlQnJlYWRjcnVtYnMgPSBjOHlCcmVhZGNydW1icy5nZXRMaXZlQnJlYWRjcnVtYnMoKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY29uY2F0KGxpdmVCcmVhZGNydW1icyk7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUubWFwKGl0ZW1zID0+ICh7IGl0ZW1zOiBpdGVtcyBhcyBCcmVhZGNydW1iSXRlbVtdIH0pIGFzIEJyZWFkY3J1bWIpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICByZXNvbHZlQnJlYWRjcnVtYnNEYXRhKGRhdGEpOiBPYnNlcnZhYmxlPGFueVtdPiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmluamVjdG9yLmludm9rZShkYXRhKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgLy8gZW1wdHlcbiAgICB9XG4gICAgaWYgKGlzQXJyYXkoZGF0YSkpIHtcbiAgICAgIHJldHVybiBvZihbZGF0YV0pO1xuICAgIH1cbiAgICByZXR1cm4gb2YoW10pO1xuICB9XG5cbiAgZ2V0U2VhcmNoKCk6IFNlYXJjaFtdIHtcbiAgICBjb25zdCBjOHlTZWFyY2ggPSB0aGlzLmluamVjdG9yLmdldCgnYzh5U2VhcmNoJyk7XG4gICAgcmV0dXJuIGM4eVNlYXJjaC5saXN0KCkubWFwKGl0ZW0gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaWNvbjogJ3NlYXJjaCcsXG4gICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgdGVybTogJycsXG4gICAgICAgIG9uU2VhcmNoKCkge1xuICAgICAgICAgIGlmICh0aGlzLnRlcm0pIHtcbiAgICAgICAgICAgIGM4eVNlYXJjaC5zZWFyY2godGhpcy50ZXJtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gYXMgU2VhcmNoO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0QWN0aW9ucygpOiBPYnNlcnZhYmxlPEFjdGlvbj4ge1xuICAgIGNvbnN0IHJlZ2lzdGVyZWRBY3Rpb25zID0gdGhpcy5pbmplY3Rvci5nZXQoJ2M4eUFjdGlvbnMnKS5yZWdpc3RlcmVkQWN0aW9ucztcbiAgICByZXR1cm4gb2YoXG4gICAgICByZWdpc3RlcmVkQWN0aW9uc1xuICAgICAgICAuZmlsdGVyKGFjdGlvbiA9PiAhYWN0aW9uLmhpZGRlbilcbiAgICAgICAgLm1hcChhY3Rpb24gPT4gKHtcbiAgICAgICAgICAvLyBUaGUgcHJpb3JpdHkgd2FzIHJldmVyc2VkOiBBbGlnbmVkIGl0IHRvIGRhc2hib2FyZCwgaGlnaCBmaXJzdCwgbG93IGxhc3QuXG4gICAgICAgICAgcHJpb3JpdHk6IChhY3Rpb24ucHJpb3JpdHkgfHwgMCkgKiAtMSxcbiAgICAgICAgICBsYWJlbDogYWN0aW9uLnRleHQsXG4gICAgICAgICAgaWNvbjogYWN0aW9uLmljb24sXG4gICAgICAgICAgZGlzYWJsZWQ6IGFjdGlvbi5kaXNhYmxlZCxcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5qZWN0b3IuaW52b2tlKGFjdGlvbi5hY3Rpb24sIGFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KSlcbiAgICApO1xuICB9XG5cbiAgZnJvbU5nMUV2ZW50KG9iaiwgZXZ0KSB7XG4gICAgbGV0IHN0b3BMaXN0ZW5pbmc7XG4gICAgZnVuY3Rpb24gYWRkKGhhbmRsZXIpIHtcbiAgICAgIHN0b3BMaXN0ZW5pbmcgPSBvYmouJG9uKGV2dCwgaGFuZGxlcik7XG4gICAgfVxuICAgIHJldHVybiBmcm9tRXZlbnRQYXR0ZXJuKGFkZCwgKCkgPT4gc3RvcExpc3RlbmluZygpKTtcbiAgfVxuXG4gIHByaXZhdGUgaG9va1VzZXJNZW51KCkge1xuICAgIGNvbnN0IHVzZXJNZW51U2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KCdjOHlVc2VyTWVudVNlcnZpY2UnKTtcbiAgICBjb25zdCBjOHlBY2Nlc3NEZW5pZWQgPSB0aGlzLmluamVjdG9yLmdldCgnYzh5QWNjZXNzRGVuaWVkJyk7XG4gICAgdXNlck1lbnVTZXJ2aWNlLmFkZCh7XG4gICAgICBpY29uOiAnYWNjZXNzJyxcbiAgICAgIHByaW9yaXR5OiAxMCxcbiAgICAgIGxhYmVsOiBnZXR0ZXh0KCdBY2Nlc3MgZGVuaWVkIHJlcXVlc3RzJyksXG4gICAgICBjbGljazogYzh5QWNjZXNzRGVuaWVkLnNob3dBY2Nlc3NEZW5pZWRSZXF1ZXN0c0xpc3RcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnJpZGdlU2VydmljZUZhY3RvcnkoXG4gIGluamVjdG9yOiBhbnksXG4gIGFwcFN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gIHJvdXRlcjogUm91dGVyLFxuICBuZ1pvbmU6IE5nWm9uZSxcbiAgcm91dGVyU2VydmljZTogUm91dGVyU2VydmljZSxcbiAgYWN0aW9uU2VydmljZTogQWN0aW9uU2VydmljZSxcbiAgcGx1Z2luczogUGx1Z2luc1Jlc29sdmVTZXJ2aWNlXG4pIHtcbiAgcmV0dXJuIG5ldyBCcmlkZ2VTZXJ2aWNlKFxuICAgIGluamVjdG9yLFxuICAgIGFwcFN0YXRlLFxuICAgIHJvdXRlcixcbiAgICBuZ1pvbmUsXG4gICAgcm91dGVyU2VydmljZSxcbiAgICBhY3Rpb25TZXJ2aWNlLFxuICAgIHBsdWdpbnNcbiAgKTtcbn1cblxuZXhwb3J0IGNvbnN0IGJyaWRnZVNlcnZpY2VQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogQnJpZGdlU2VydmljZSxcbiAgdXNlRmFjdG9yeTogYnJpZGdlU2VydmljZUZhY3RvcnksXG4gIGRlcHM6IFtcbiAgICAnJGluamVjdG9yJyxcbiAgICBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgUm91dGVyLFxuICAgIE5nWm9uZSxcbiAgICBSb3V0ZXJTZXJ2aWNlLFxuICAgIEFjdGlvblNlcnZpY2UsXG4gICAgUGx1Z2luc1Jlc29sdmVTZXJ2aWNlXG4gIF1cbn07XG4iXX0=
@@ -207,6 +207,7 @@ class BridgeService {
207
207
  this.fixE2eIssues();
208
208
  this.$ng1RouteChangeSuccess = this.fromNg1Event(this.injector.get('$rootScope'), '$routeChangeSuccess');
209
209
  this.$ng1RouteChangeStart = this.fromNg1Event(this.injector.get('$rootScope'), '$routeChangeStart');
210
+ this.$ng1RouteUpdate = this.fromNg1Event(this.injector.get('$rootScope'), '$routeUpdate');
210
211
  this.hookLanguage();
211
212
  this.hookTab();
212
213
  this.hookNavigator();
@@ -224,21 +225,11 @@ class BridgeService {
224
225
  // fix to trigger an angularjs route change success
225
226
  // event on context route match to make legacy
226
227
  // view-providers resolve.
227
- // reloadOnUrl: true ensures that navigating between different IDs
228
- // (e.g., /device/123 -> /device/456) triggers $routeChangeSuccess
229
- // reloadOnSearch: true ensures that navigating to different subpaths with the same ID
230
- // (e.g., /group/123/dashboard -> /group/123/subassets) also triggers $routeChangeSuccess
231
- // Both are needed because AngularJS checks: "is update-only if reloadOnUrl is set
232
- // BUT reloadOnSearch is false AND pathParams are equal"
233
228
  c8yViews.when('/device/:id', {
234
- template: '',
235
- reloadOnUrl: true,
236
- reloadOnSearch: true
229
+ template: ''
237
230
  });
238
231
  c8yViews.when('/group/:id', {
239
- template: '',
240
- reloadOnUrl: true,
241
- reloadOnSearch: true
232
+ template: ''
242
233
  });
243
234
  c8yViews.contextViews.subscribe(cfg => this.addRoute(cfg));
244
235
  }
@@ -281,9 +272,7 @@ class BridgeService {
281
272
  fallbackRoutes.push({
282
273
  keys: [{ name: ViewContextLegacyParameter[context], optional: false }],
283
274
  regexp,
284
- template,
285
- reloadOnUrl: true,
286
- reloadOnSearch: true
275
+ template
287
276
  });
288
277
  }
289
278
  /**
@@ -391,8 +380,15 @@ class BridgeService {
391
380
  liveTabs = [];
392
381
  this.$liveTabs.next(liveTabs);
393
382
  });
394
- this.$ng1RouteChangeSuccess.subscribe(() => {
383
+ const syncRouters = () => {
395
384
  const path = $location.path();
385
+ // Don't sync if Angular Router is using secondary outlets
386
+ // (e.g., /device/123/(dashboard-details:general))
387
+ // Let Angular Router handle these advanced navigation scenarios
388
+ if (this.router.url.includes('(') && this.router.url.includes(':')) {
389
+ return;
390
+ }
391
+ // Only sync if paths differ and initial navigation is complete
396
392
  if (this.router.url !== path) {
397
393
  this.router.navigate(path === '/' ? '' : path.split('/'), {
398
394
  queryParams: $location.search(),
@@ -402,7 +398,18 @@ class BridgeService {
402
398
  if (this.actionService) {
403
399
  this.actionService.refresh();
404
400
  }
405
- });
401
+ };
402
+ // Listen to $routeChangeSuccess (full navigation - always sync)
403
+ this.$ng1RouteChangeSuccess.subscribe(syncRouters);
404
+ // Listen to $routeUpdate (skip if query-param-only)
405
+ this.$ng1RouteUpdate
406
+ .pipe(filter(() => {
407
+ const path = $location.path();
408
+ const angularPath = this.router.url.split('?')[0];
409
+ // Only process if path actually changed (not just query params)
410
+ return angularPath !== path;
411
+ }))
412
+ .subscribe(syncRouters);
406
413
  this.$routeChanges = merge(this.$ng1RouteChangeSuccess, this.fromNg1Event(c8yTabs, c8yTabs.EVENT_UPDATE), of(1)).pipe(debounceTime(100));
407
414
  }
408
415
  hookNavigator() {