@alauda-fe/common 1.2.1 → 1.3.0-beta.1

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 (94) hide show
  1. package/api/api-gateway.service.d.ts +1 -11
  2. package/api/public-api.d.ts +0 -1
  3. package/array-form-table/key-value-form/component.d.ts +3 -2
  4. package/async-data/async-data.module.d.ts +6 -0
  5. package/authorization/public-api.d.ts +1 -0
  6. package/authorization/state.service.d.ts +13 -20
  7. package/authorization/storage-token.d.ts +11 -0
  8. package/chart/common/tooltip/tooltip.component.d.ts +2 -1
  9. package/core/abstract/base-form-container.d.ts +1 -1
  10. package/core/constants/tokens.d.ts +0 -18
  11. package/core/module.d.ts +16 -15
  12. package/core/services/k8s-util.service.d.ts +0 -5
  13. package/core/types/k8s/crd.d.ts +2 -1
  14. package/core/utils/common.d.ts +2 -1
  15. package/esm2022/api/api-gateway.service.mjs +10 -20
  16. package/esm2022/api/product.service.mjs +4 -4
  17. package/esm2022/api/project-api.service.mjs +4 -4
  18. package/esm2022/api/public-api.mjs +1 -2
  19. package/esm2022/array-form-table/key-value-form/component.mjs +65 -43
  20. package/esm2022/async-data/async-data.module.mjs +17 -5
  21. package/esm2022/authorization/public-api.mjs +2 -1
  22. package/esm2022/authorization/state.service.mjs +86 -115
  23. package/esm2022/authorization/storage-token.mjs +82 -0
  24. package/esm2022/business/resource-select/exports/cluster-selector/component.mjs +2 -2
  25. package/esm2022/business/resource-select/exports/mesh-group-selector/component.mjs +2 -2
  26. package/esm2022/business/resource-select/exports/namespace-selector/component.mjs +2 -2
  27. package/esm2022/business/resource-select/exports/project-selector/component.mjs +2 -2
  28. package/esm2022/business/resource-select/module.mjs +9 -9
  29. package/esm2022/chart/chart.module.mjs +1 -1
  30. package/esm2022/chart/common/tooltip/tooltip.component.mjs +5 -2
  31. package/esm2022/core/abstract/base-form-container.mjs +1 -1
  32. package/esm2022/core/abstract/base-nested-form-control.mjs +2 -2
  33. package/esm2022/core/constants/tokens.mjs +1 -46
  34. package/esm2022/core/module.mjs +10 -3
  35. package/esm2022/core/pipes/page-env.pipe.mjs +6 -3
  36. package/esm2022/core/services/feature-gate.service.mjs +3 -3
  37. package/esm2022/core/services/k8s-util.service.mjs +1 -13
  38. package/esm2022/core/types/k8s/crd.mjs +1 -1
  39. package/esm2022/core/utils/common.mjs +11 -9
  40. package/esm2022/disabled-container/disabled-container.component.mjs +2 -2
  41. package/esm2022/form/validators/utils.mjs +37 -34
  42. package/esm2022/graph-canvas/graph-store.service.mjs +2 -2
  43. package/esm2022/help-document/service.mjs +3 -2
  44. package/esm2022/lazy-component/lazy-load-component.mjs +138 -0
  45. package/esm2022/lazy-component/public-api.mjs +14 -0
  46. package/esm2022/lazy-component/visibility.service.mjs +37 -0
  47. package/esm2022/list-display/component.mjs +159 -0
  48. package/esm2022/list-display/public-api.mjs +2 -0
  49. package/esm2022/metric-chart/metric-chart.component.mjs +2 -2
  50. package/esm2022/multi-search/action-input/component.mjs +2 -2
  51. package/esm2022/notification/feedback-notification/component.mjs +10 -4
  52. package/esm2022/notification/public-api.mjs +1 -2
  53. package/esm2022/page-scaffold/navigation/lottie-icons/animation-data.mjs +3 -1
  54. package/esm2022/page-scaffold/navigation/lottie-icons/animations/dashboard.json +1 -0
  55. package/esm2022/page-scaffold/navigation/nav-menu/nav-menu.types.mjs +1 -1
  56. package/esm2022/page-scaffold/page-header/common-layout/product-select/component.mjs +10 -13
  57. package/esm2022/page-scaffold/page-header/help-menu/component/component.mjs +3 -3
  58. package/esm2022/public-api.mjs +4 -4
  59. package/esm2022/table/component.mjs +5 -5
  60. package/esm2022/table/types.mjs +1 -1
  61. package/esm2022/translate/translate.service.mjs +7 -1
  62. package/esm2022/view-chart/view-chart.module.mjs +1 -1
  63. package/esm2022/view-zchart/custom-template/dropdown-legend.mjs +3 -3
  64. package/esm2022/view-zchart/legend/legend.component.mjs +8 -8
  65. package/esm2022/view-zchart/units.mjs +13 -1
  66. package/esm2022/view-zchart/view-zchart.component.mjs +2 -2
  67. package/esm2022/view-zchart/view-zchart.module.mjs +1 -1
  68. package/esm2022/widget/foldable-item-in-table/component.mjs +2 -2
  69. package/esm2022/widget/search-panel/component.mjs +4 -4
  70. package/esm2022/window-channel/plugin-window-channel.service.mjs +8 -3
  71. package/esm2022/xterm/xterm-terminal/xterm-terminal.component.mjs +66 -69
  72. package/esm2022/xterm/xterm.component.mjs +11 -3
  73. package/form/validators/utils.d.ts +7 -0
  74. package/lazy-component/lazy-load-component.d.ts +25 -0
  75. package/lazy-component/public-api.d.ts +9 -0
  76. package/lazy-component/visibility.service.d.ts +11 -0
  77. package/list-display/component.d.ts +15 -0
  78. package/list-display/public-api.d.ts +1 -0
  79. package/notification/feedback-notification/component.d.ts +1 -5
  80. package/notification/public-api.d.ts +0 -1
  81. package/package.json +1 -1
  82. package/page-scaffold/navigation/nav-menu/nav-menu.types.d.ts +1 -0
  83. package/page-scaffold/page-header/common-layout/product-select/component.d.ts +1 -2
  84. package/public-api.d.ts +3 -3
  85. package/styles/global.scss +6 -0
  86. package/styles/mixins.scss +20 -0
  87. package/styles/reset-browser.scss +4 -0
  88. package/styles/tailwind-preset.scss +1 -1
  89. package/table/types.d.ts +2 -0
  90. package/translate/translate.service.d.ts +2 -0
  91. package/view-zchart/custom-template/dropdown-legend.d.ts +1 -1
  92. package/view-zchart/units.d.ts +3 -0
  93. package/xterm/xterm-terminal/xterm-terminal.component.d.ts +4 -3
  94. package/xterm/xterm.component.d.ts +4 -2
@@ -3,25 +3,25 @@
3
3
  * @module authorization
4
4
  */
5
5
  import { HttpClient } from '@angular/common/http';
6
- import { Inject, Injectable } from '@angular/core';
6
+ import { Injectable, inject } from '@angular/core';
7
7
  import { decodeUrl } from 'ab64';
8
- import { EMPTY, Subject, concat, of, catchError, map, shareReplay, switchMap, takeUntil, tap, } from 'rxjs';
9
- import { API_GATEWAY, CODE_KEY, ID_TOKEN_KEY, NOT_NOTIFY_ON_ERROR_HEADERS, REFRESH_TOKEN_KEY, TOKEN_CALLBACK_API, TOKEN_INFO_API, TOKEN_LOGIN_API, TOKEN_REFRESH_API, publishRef, getTopWindow, } from '../core/public-api';
8
+ import { EMPTY, Subject, concat, of, catchError, map, shareReplay, switchMap, tap, pipe, from, } from 'rxjs';
9
+ import { API_GATEWAY, NOT_NOTIFY_ON_ERROR_HEADERS, publishRef, getTopWindow, } from '../core/public-api';
10
10
  import { getInitUrl } from './app-init-url';
11
+ import { asyncReadStorageToken, cleanStorageToken, readStorageToken, readStorageType, writeStorageToken, } from './storage-token';
11
12
  import * as i0 from "@angular/core";
12
- import * as i1 from "@angular/common/http";
13
+ export const STORAGE_TYPE_KEY = 'token_storage';
14
+ export const ID_TOKEN_KEY = 'id_token';
15
+ export const REFRESH_TOKEN_KEY = 'refresh_token';
16
+ export const CODE_KEY = 'code';
17
+ const LOGIN_API = '/console/api/v1/token/login';
18
+ const CALLBACK_API = '/console/api/v1/token/callback';
19
+ const TOKEN_REFRESH_API = '/console/api/v1/token/refresh';
20
+ const TOKEN_INFO_API = '/console/api/v1/token/info';
13
21
  const REDIRECT_URIS = new Set(['redirect_uri', 'post_logout_redirect_uri']);
14
22
  export class AuthorizationStateService {
15
- constructor(http, idTokenKey, refreshTokenKey, codeKey, apiTokenLogin, apiTokenCallback, apiRefreshToken, apiTokenInfo) {
16
- this.http = http;
17
- this.idTokenKey = idTokenKey;
18
- this.refreshTokenKey = refreshTokenKey;
19
- this.codeKey = codeKey;
20
- this.apiTokenLogin = apiTokenLogin;
21
- this.apiTokenCallback = apiTokenCallback;
22
- this.apiRefreshToken = apiRefreshToken;
23
- this.apiTokenInfo = apiTokenInfo;
24
- this.destroy$$ = new Subject();
23
+ constructor() {
24
+ this.http = inject(HttpClient);
25
25
  this.refreshToken$$ = new Subject();
26
26
  this.state$ = this.getAuthConfiguration().pipe(switchMap(config => concat(this.getExistedToken(config), this.refreshToken$$).pipe(map(token => ({ ...config, ...token })))), tap(state => {
27
27
  this.stateSnapshot = state;
@@ -29,50 +29,47 @@ export class AuthorizationStateService {
29
29
  this.logout(true);
30
30
  }
31
31
  this.payloadSnapshot = getAccountInfo(state);
32
- }), takeUntil(this.destroy$$), shareReplay(1));
32
+ }), shareReplay(1));
33
33
  this.checkTokenCache = {};
34
34
  this.stateSnapshot = null;
35
35
  }
36
36
  logout(specificUrl = false) {
37
- localStorage.removeItem(this.idTokenKey);
38
- localStorage.removeItem(this.refreshTokenKey);
39
- this.redirectToUrl(specificUrl && location.href);
37
+ cleanStorageToken();
38
+ this.redirectToDex(specificUrl && location.href);
40
39
  }
41
40
  logoutAudit() {
42
41
  return this.http.post(`${API_GATEWAY}/auth/v1/logout`, {}, {
43
42
  headers: NOT_NOTIFY_ON_ERROR_HEADERS,
44
43
  });
45
44
  }
46
- redirectToUrl(href = '') {
47
- if (this.stateSnapshot) {
48
- let url = '';
49
- /**
50
- * 已存在授权信息(logoutUrl idToken 都存在)场景:
51
- * 1、主动登出(退出登录,此时 href 为空)时不记录任何信息,再次登录后重定向到平台首页。
52
- * 2、被动登出(token 过期、失效,此时 href 不为空)时替换 post_logout_redirect_uri 为 href,再次登录后重定向到 href 页面。
53
- * 不存在授权信息场景:
54
- * 1、存在 href(未登录时直接访问 href)授权后重定向到 href 页面。
55
- * 2、不存在 href(登录页进入)否则授权后重定向到平台首页。
56
- */
57
- if (this.stateSnapshot.logoutUrl && this.stateSnapshot.idToken) {
58
- const logoutUrl = `${this.stateSnapshot.logoutUrl}&id_token_hint=${this.stateSnapshot.idToken}`;
59
- url = href ? this.replaceRedirectUrl(logoutUrl, href) : logoutUrl;
60
- }
61
- else {
62
- const authUrl = this.stateSnapshot.authUrl;
63
- url = href ? this.replaceRedirectUrl(authUrl, href) : authUrl;
64
- }
45
+ async redirectToDex(redirectUrl = null) {
46
+ if (!this.stateSnapshot) {
47
+ return;
48
+ }
49
+ // 主动退出或 session 模式跳转到 dex 前需要主动清除 `user_login` cookie 防止自动授权
50
+ if (!!this.stateSnapshot.idToken || readStorageType() === 'session') {
65
51
  try {
66
- getTopWindow().location.href = url;
52
+ await fetch(`${this.stateSnapshot.logoutUrl}&id_token_hint=${
53
+ // 主动退出时禁用现有 token
54
+ this.stateSnapshot.idToken || ''}`);
67
55
  }
68
- catch {
69
- // should never happen, just for robustness in case of cross-origin iframe
70
- location.href = url;
56
+ catch (e) {
57
+ console.error(e);
71
58
  }
72
59
  }
60
+ const href = redirectUrl
61
+ ? replaceRedirectUrl(this.stateSnapshot.authUrl, redirectUrl)
62
+ : this.stateSnapshot.authUrl;
63
+ try {
64
+ getTopWindow().location.href = href;
65
+ }
66
+ catch {
67
+ // should never happen, just for robustness in case of cross-origin iframe
68
+ location.href = href;
69
+ }
73
70
  }
74
71
  refreshToken() {
75
- const refreshToken = localStorage.getItem(this.refreshTokenKey);
72
+ const refreshToken = readStorageToken()?.refreshToken;
76
73
  if (refreshToken) {
77
74
  if (!this.refreshTokenCache$) {
78
75
  this.refreshTokenCache$ = this.getTokenByRefreshToken(refreshToken).pipe(tap(token => {
@@ -91,7 +88,7 @@ export class AuthorizationStateService {
91
88
  checkToken(token) {
92
89
  if (!this.checkTokenCache[token]) {
93
90
  this.checkTokenCache[token] = this.http
94
- .get(this.apiTokenInfo, {
91
+ .get(TOKEN_INFO_API, {
95
92
  headers: {
96
93
  Authorization: `Bearer ${token}`,
97
94
  },
@@ -119,13 +116,9 @@ export class AuthorizationStateService {
119
116
  }
120
117
  return this.state$.pipe(map(state => getAccountInfo(state) || {}));
121
118
  }
122
- ngOnDestroy() {
123
- this.destroy$$.next();
124
- this.destroy$$.complete();
125
- }
126
119
  getAuthConfiguration() {
127
120
  return this.http
128
- .get(this.apiTokenLogin)
121
+ .get(LOGIN_API)
129
122
  .pipe(map(res => ({
130
123
  authUrl: res.auth_url,
131
124
  state: res.state,
@@ -140,48 +133,38 @@ export class AuthorizationStateService {
140
133
  }
141
134
  getTokenFromLocal(config) {
142
135
  const { queryParams, hashParams } = this.getParams();
143
- const code = queryParams[this.codeKey] || hashParams[this.codeKey];
136
+ const code = queryParams[CODE_KEY] || hashParams[CODE_KEY];
144
137
  if (code) {
145
138
  return this.getTokenByCode(code, config.state);
146
139
  }
147
- const refreshToken = queryParams[this.refreshTokenKey] || hashParams[this.refreshTokenKey];
140
+ const refreshToken = queryParams[REFRESH_TOKEN_KEY] || hashParams[REFRESH_TOKEN_KEY];
148
141
  if (refreshToken) {
149
142
  return this.getTokenByRefreshToken(refreshToken);
150
143
  }
151
- const idToken = queryParams[this.idTokenKey] || hashParams[this.idTokenKey];
144
+ const idToken = queryParams[ID_TOKEN_KEY] || hashParams[ID_TOKEN_KEY];
152
145
  if (idToken) {
153
- localStorage.setItem(this.idTokenKey, idToken);
146
+ writeStorageToken({
147
+ storageType: (queryParams[STORAGE_TYPE_KEY] ||
148
+ hashParams[STORAGE_TYPE_KEY]),
149
+ idToken,
150
+ refreshToken: '',
151
+ });
154
152
  }
155
- return of({
156
- idToken: idToken ?? localStorage.getItem(this.idTokenKey) ?? '',
157
- refreshToken: localStorage.getItem(this.refreshTokenKey) ?? '',
158
- });
153
+ return from(asyncReadStorageToken());
159
154
  }
160
155
  getTokenByRefreshToken(refreshToken) {
161
156
  return this.http
162
- .get(this.apiRefreshToken, {
157
+ .get(TOKEN_REFRESH_API, {
163
158
  params: { refresh_token: refreshToken },
164
159
  })
165
- .pipe(tap(({ id_token, refresh_token }) => {
166
- localStorage.setItem(this.idTokenKey, id_token);
167
- localStorage.setItem(this.refreshTokenKey, refresh_token);
168
- }), map(({ id_token, refresh_token }) => ({
169
- idToken: id_token,
170
- refreshToken: refresh_token,
171
- })));
160
+ .pipe(mapTokenResponse());
172
161
  }
173
162
  getTokenByCode(code, state) {
174
163
  return this.http
175
- .get(this.apiTokenCallback, {
164
+ .get(CALLBACK_API, {
176
165
  params: { code, state },
177
166
  })
178
- .pipe(tap(({ id_token, refresh_token }) => {
179
- localStorage.setItem(this.idTokenKey, id_token);
180
- localStorage.setItem(this.refreshTokenKey, refresh_token);
181
- }), map(({ id_token, refresh_token }) => ({
182
- idToken: id_token,
183
- refreshToken: refresh_token,
184
- })));
167
+ .pipe(mapTokenResponse());
185
168
  }
186
169
  getParams() {
187
170
  const initUrl = getInitUrl();
@@ -190,47 +173,26 @@ export class AuthorizationStateService {
190
173
  const hashParams = parseParams(initLocation.hash ? initLocation.hash.slice(1) : '');
191
174
  return { queryParams, hashParams };
192
175
  }
193
- replaceRedirectUrl(authUrl, href) {
194
- const [path, queryParams] = authUrl.split('?');
195
- const replacedQueryParams = queryParams
196
- .split('&')
197
- .map(pair => {
198
- const [key, value] = pair.split('=');
199
- return REDIRECT_URIS.has(key)
200
- ? `${key}=${encodeURIComponent(href) || value}`
201
- : `${key}=${value}`;
202
- })
203
- .join('&');
204
- return `${path}?${replacedQueryParams}`;
205
- }
206
- static { this.ɵfac = function AuthorizationStateService_Factory(t) { return new (t || AuthorizationStateService)(i0.ɵɵinject(i1.HttpClient), i0.ɵɵinject(ID_TOKEN_KEY), i0.ɵɵinject(REFRESH_TOKEN_KEY), i0.ɵɵinject(CODE_KEY), i0.ɵɵinject(TOKEN_LOGIN_API), i0.ɵɵinject(TOKEN_CALLBACK_API), i0.ɵɵinject(TOKEN_REFRESH_API), i0.ɵɵinject(TOKEN_INFO_API)); }; }
176
+ static { this.ɵfac = function AuthorizationStateService_Factory(t) { return new (t || AuthorizationStateService)(); }; }
207
177
  static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: AuthorizationStateService, factory: AuthorizationStateService.ɵfac, providedIn: 'root' }); }
208
178
  }
209
179
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(AuthorizationStateService, [{
210
180
  type: Injectable,
211
181
  args: [{ providedIn: 'root' }]
212
- }], function () { return [{ type: i1.HttpClient }, { type: undefined, decorators: [{
213
- type: Inject,
214
- args: [ID_TOKEN_KEY]
215
- }] }, { type: undefined, decorators: [{
216
- type: Inject,
217
- args: [REFRESH_TOKEN_KEY]
218
- }] }, { type: undefined, decorators: [{
219
- type: Inject,
220
- args: [CODE_KEY]
221
- }] }, { type: undefined, decorators: [{
222
- type: Inject,
223
- args: [TOKEN_LOGIN_API]
224
- }] }, { type: undefined, decorators: [{
225
- type: Inject,
226
- args: [TOKEN_CALLBACK_API]
227
- }] }, { type: undefined, decorators: [{
228
- type: Inject,
229
- args: [TOKEN_REFRESH_API]
230
- }] }, { type: undefined, decorators: [{
231
- type: Inject,
232
- args: [TOKEN_INFO_API]
233
- }] }]; }, null); })();
182
+ }], null, null); })();
183
+ function replaceRedirectUrl(dexUrl, redirectUrl) {
184
+ const [path, queryParams] = dexUrl.split('?');
185
+ const replacedQueryParams = queryParams
186
+ .split('&')
187
+ .map(pair => {
188
+ const [key, value] = pair.split('=');
189
+ return REDIRECT_URIS.has(key)
190
+ ? `${key}=${encodeURIComponent(redirectUrl)}`
191
+ : `${key}=${value}`;
192
+ })
193
+ .join('&');
194
+ return `${path}?${replacedQueryParams}`;
195
+ }
234
196
  function parseParams(query) {
235
197
  if (!query) {
236
198
  return {};
@@ -244,11 +206,20 @@ function parseParams(query) {
244
206
  }, {});
245
207
  }
246
208
  function getAccountInfo(state) {
247
- let accountInfo;
248
- try {
249
- accountInfo = JSON.parse(decodeUrl(state.idToken.split('.')[1]));
250
- }
251
- catch { }
252
- return accountInfo;
209
+ return state.idToken
210
+ ? JSON.parse(decodeUrl(state.idToken.split('.')[1]))
211
+ : null;
212
+ }
213
+ function mapTokenResponse() {
214
+ return pipe(tap(({ token_storage, id_token, refresh_token }) => {
215
+ writeStorageToken({
216
+ storageType: token_storage,
217
+ idToken: id_token,
218
+ refreshToken: refresh_token,
219
+ });
220
+ }), map(({ id_token, refresh_token }) => ({
221
+ idToken: id_token,
222
+ refreshToken: refresh_token,
223
+ })));
253
224
  }
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL3N0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUNMLEtBQUssRUFFTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLEVBQUUsRUFDRixVQUFVLEVBQ1YsR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFFTCxXQUFXLEVBQ1gsUUFBUSxFQUNSLFlBQVksRUFDWiwyQkFBMkIsRUFDM0IsaUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixjQUFjLEVBQ2QsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsWUFBWSxHQUNiLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFVNUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO0FBRTVFLE1BQU0sT0FBTyx5QkFBeUI7SUErQnBDLFlBQ21CLElBQWdCLEVBQ00sVUFBa0IsRUFDYixlQUF1QixFQUNoQyxPQUFlLEVBQ1IsYUFBcUIsRUFDbEIsZ0JBQXdCLEVBQ3pCLGVBQXVCLEVBQzFCLFlBQW9CO1FBUDVDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDTSxlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ2Isb0JBQWUsR0FBZixlQUFlLENBQVE7UUFDaEMsWUFBTyxHQUFQLE9BQU8sQ0FBUTtRQUNSLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQ2xCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBUTtRQUN6QixvQkFBZSxHQUFmLGVBQWUsQ0FBUTtRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBUTtRQXRDOUMsY0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFDaEMsbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFHekMsQ0FBQztRQUVZLFdBQU0sR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxJQUFJLENBQ3hELFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUNqQixNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsSUFBSSxDQUM1RCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQ3hDLENBQ0YsRUFDRCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtnQkFDbEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUNuQjtZQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDZixDQUFDO1FBRU0sb0JBQWUsR0FBd0MsRUFBRSxDQUFDO1FBR2xFLGtCQUFhLEdBQXVCLElBQUksQ0FBQztJQWF0QyxDQUFDO0lBRUosTUFBTSxDQUFDLFdBQVcsR0FBRyxLQUFLO1FBQ3hCLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pDLFlBQVksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQ25CLEdBQUcsV0FBVyxpQkFBaUIsRUFDL0IsRUFBRSxFQUNGO1lBQ0UsT0FBTyxFQUFFLDJCQUEyQjtTQUNyQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLElBQUksR0FBRyxFQUFFO1FBQ3JCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUN0QixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDYjs7Ozs7OztlQU9HO1lBQ0gsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRTtnQkFDOUQsTUFBTSxTQUFTLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsa0JBQWtCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hHLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzthQUNuRTtpQkFBTTtnQkFDTCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztnQkFDM0MsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO2FBQy9EO1lBQ0QsSUFBSTtnQkFDRixZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQzthQUNwQztZQUFDLE1BQU07Z0JBQ04sMEVBQTBFO2dCQUMxRSxRQUFRLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQzthQUNyQjtTQUNGO0lBQ0gsQ0FBQztJQUVELFlBQVk7UUFDVixNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNoRSxJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO2dCQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUNuRCxZQUFZLENBQ2IsQ0FBQyxJQUFJLENBQ0osR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUNWLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7b0JBQy9CLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNsQyxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFDN0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNsQixPQUFPLEtBQUssQ0FBQztnQkFDZixDQUFDLENBQUMsRUFDRixVQUFVLEVBQUUsQ0FDYixDQUFDO2FBQ0g7WUFDRCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztTQUNoQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQWE7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSTtpQkFDcEMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3RCLE9BQU8sRUFBRTtvQkFDUCxhQUFhLEVBQUUsVUFBVSxLQUFLLEVBQUU7aUJBQ2pDO2FBQ0YsQ0FBQztpQkFDRCxJQUFJLENBQ0gsR0FBRyxDQUFDO2dCQUNGLElBQUksRUFBRSxHQUFHLEVBQUU7b0JBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLENBQUM7Z0JBQ0QsS0FBSyxFQUFFLEdBQUcsRUFBRTtvQkFDVixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDckMsQ0FBQzthQUNGLENBQUMsRUFDRixVQUFVLEVBQUUsQ0FDYixDQUFDO1NBQ0w7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNqQztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixPQUFPLElBQUksQ0FBQyxJQUFJO2FBQ2IsR0FBRyxDQUNGLElBQUksQ0FBQyxhQUFhLENBQ25CO2FBQ0EsSUFBSSxDQUNILEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDVixPQUFPLEVBQUUsR0FBRyxDQUFDLFFBQVE7WUFDckIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO1lBQ2hCLFNBQVMsRUFBRSxHQUFHLENBQUMsVUFBVSxJQUFJLEVBQUU7U0FDaEMsQ0FBQyxDQUFDLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFTyxlQUFlLENBQUMsTUFBMEI7UUFDaEQsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUN4QyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixPQUFPLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDL0MsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxNQUEwQjtRQUNsRCxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUVyRCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbkUsSUFBSSxJQUFJLEVBQUU7WUFDUixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoRDtRQUVELE1BQU0sWUFBWSxHQUNoQixXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDeEUsSUFBSSxZQUFZLEVBQUU7WUFDaEIsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDbEQ7UUFFRCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDNUUsSUFBSSxPQUFPLEVBQUU7WUFDWCxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDaEQ7UUFFRCxPQUFPLEVBQUUsQ0FBQztZQUNSLE9BQU8sRUFBRSxPQUFPLElBQUksWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRTtZQUMvRCxZQUFZLEVBQUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRTtTQUMvRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsWUFBb0I7UUFDakQsT0FBTyxJQUFJLENBQUMsSUFBSTthQUNiLEdBQUcsQ0FBOEMsSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN0RSxNQUFNLEVBQUUsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFO1NBQ3hDLENBQUM7YUFDRCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRTtZQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDaEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLFlBQVksRUFBRSxhQUFhO1NBQzVCLENBQUMsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRU8sY0FBYyxDQUFDLElBQVksRUFBRSxLQUFhO1FBQ2hELE9BQU8sSUFBSSxDQUFDLElBQUk7YUFDYixHQUFHLENBQThDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN2RSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFO1NBQ3hCLENBQUM7YUFDRCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRTtZQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDaEQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQyxFQUNGLEdBQUcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLE9BQU8sRUFBRSxRQUFRO1lBQ2pCLFlBQVksRUFBRSxhQUFhO1NBQzVCLENBQUMsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRU8sU0FBUztRQUNmLE1BQU0sT0FBTyxHQUFHLFVBQVUsRUFBRSxDQUFDO1FBRTdCLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXRDLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FDN0IsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDeEQsQ0FBQztRQUVGLE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FDNUIsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDcEQsQ0FBQztRQUVGLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVPLGtCQUFrQixDQUFDLE9BQWUsRUFBRSxJQUFZO1FBQ3RELE1BQU0sQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUUvQyxNQUFNLG1CQUFtQixHQUFHLFdBQVc7YUFDcEMsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNWLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNWLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNyQyxPQUFPLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDO2dCQUMzQixDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxFQUFFO2dCQUMvQyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWIsT0FBTyxHQUFHLElBQUksSUFBSSxtQkFBbUIsRUFBRSxDQUFDO0lBQzFDLENBQUM7MEZBMVFVLHlCQUF5QiwwQ0FpQzFCLFlBQVksZUFDWixpQkFBaUIsZUFDakIsUUFBUSxlQUNSLGVBQWUsZUFDZixrQkFBa0IsZUFDbEIsaUJBQWlCLGVBQ2pCLGNBQWM7dUVBdkNiLHlCQUF5QixXQUF6Qix5QkFBeUIsbUJBRFosTUFBTTs7dUZBQ25CLHlCQUF5QjtjQURyQyxVQUFVO2VBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztzQkFrQzdCLE1BQU07dUJBQUMsWUFBWTs7c0JBQ25CLE1BQU07dUJBQUMsaUJBQWlCOztzQkFDeEIsTUFBTTt1QkFBQyxRQUFROztzQkFDZixNQUFNO3VCQUFDLGVBQWU7O3NCQUN0QixNQUFNO3VCQUFDLGtCQUFrQjs7c0JBQ3pCLE1BQU07dUJBQUMsaUJBQWlCOztzQkFDeEIsTUFBTTt1QkFBQyxjQUFjOztBQXNPMUIsU0FBUyxXQUFXLENBQUMsS0FBYTtJQUNoQyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxFQUFFLENBQUM7S0FDWDtJQUVELE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDNUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXRDLE9BQU87WUFDTCxHQUFHLEdBQUc7WUFDTixDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUs7U0FDYixDQUFDO0lBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQUVELFNBQVMsY0FBYyxDQUFDLEtBQXlCO0lBQy9DLElBQUksV0FBVyxDQUFDO0lBQ2hCLElBQUk7UUFDRixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDdEIsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3hCLENBQUM7S0FDbEI7SUFBQyxNQUFNLEdBQUc7SUFDWCxPQUFPLFdBQVcsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgYXV0aG9yaXphdGlvblxuICovXG5cbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVjb2RlVXJsIH0gZnJvbSAnYWI2NCc7XG5pbXBvcnQge1xuICBFTVBUWSxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgY29uY2F0LFxuICBvZixcbiAgY2F0Y2hFcnJvcixcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbiAgc3dpdGNoTWFwLFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7XG4gIFN0cmluZ01hcCxcbiAgQVBJX0dBVEVXQVksXG4gIENPREVfS0VZLFxuICBJRF9UT0tFTl9LRVksXG4gIE5PVF9OT1RJRllfT05fRVJST1JfSEVBREVSUyxcbiAgUkVGUkVTSF9UT0tFTl9LRVksXG4gIFRPS0VOX0NBTExCQUNLX0FQSSxcbiAgVE9LRU5fSU5GT19BUEksXG4gIFRPS0VOX0xPR0lOX0FQSSxcbiAgVE9LRU5fUkVGUkVTSF9BUEksXG4gIHB1Ymxpc2hSZWYsXG4gIGdldFRvcFdpbmRvdyxcbn0gZnJvbSAnLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IEFjY291bnRJbmZvIH0gZnJvbSAnLi4vcGFnZS1zY2FmZm9sZC9wdWJsaWMtYXBpJztcblxuaW1wb3J0IHsgZ2V0SW5pdFVybCB9IGZyb20gJy4vYXBwLWluaXQtdXJsJztcblxuZXhwb3J0IGludGVyZmFjZSBBdXRob3JpemF0aW9uU3RhdGUge1xuICBpZFRva2VuPzogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIGF1dGhVcmw/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xuICBsb2dvdXRVcmw/OiBzdHJpbmc7XG59XG5cbmNvbnN0IFJFRElSRUNUX1VSSVMgPSBuZXcgU2V0KFsncmVkaXJlY3RfdXJpJywgJ3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSddKTtcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXV0aG9yaXphdGlvblN0YXRlU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZWZyZXNoVG9rZW4kJCA9IG5ldyBTdWJqZWN0PHtcbiAgICBpZFRva2VuOiBzdHJpbmc7XG4gICAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gIH0+KCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdGF0ZSQgPSB0aGlzLmdldEF1dGhDb25maWd1cmF0aW9uKCkucGlwZShcbiAgICBzd2l0Y2hNYXAoY29uZmlnID0+XG4gICAgICBjb25jYXQodGhpcy5nZXRFeGlzdGVkVG9rZW4oY29uZmlnKSwgdGhpcy5yZWZyZXNoVG9rZW4kJCkucGlwZShcbiAgICAgICAgbWFwKHRva2VuID0+ICh7IC4uLmNvbmZpZywgLi4udG9rZW4gfSkpLFxuICAgICAgKSxcbiAgICApLFxuICAgIHRhcChzdGF0ZSA9PiB7XG4gICAgICB0aGlzLnN0YXRlU25hcHNob3QgPSBzdGF0ZTtcbiAgICAgIGlmICghc3RhdGUuaWRUb2tlbikge1xuICAgICAgICB0aGlzLmxvZ291dCh0cnVlKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGF5bG9hZFNuYXBzaG90ID0gZ2V0QWNjb3VudEluZm8oc3RhdGUpO1xuICAgIH0pLFxuICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkJCksXG4gICAgc2hhcmVSZXBsYXkoMSksXG4gICk7XG5cbiAgcHJpdmF0ZSBjaGVja1Rva2VuQ2FjaGU6IFJlY29yZDxzdHJpbmcsIE9ic2VydmFibGU8dW5rbm93bj4+ID0ge307XG4gIHByaXZhdGUgcmVmcmVzaFRva2VuQ2FjaGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XG5cbiAgc3RhdGVTbmFwc2hvdDogQXV0aG9yaXphdGlvblN0YXRlID0gbnVsbDtcblxuICBwYXlsb2FkU25hcHNob3Q6IEFjY291bnRJbmZvO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KElEX1RPS0VOX0tFWSkgcHJpdmF0ZSByZWFkb25seSBpZFRva2VuS2V5OiBzdHJpbmcsXG4gICAgQEluamVjdChSRUZSRVNIX1RPS0VOX0tFWSkgcHJpdmF0ZSByZWFkb25seSByZWZyZXNoVG9rZW5LZXk6IHN0cmluZyxcbiAgICBASW5qZWN0KENPREVfS0VZKSBwcml2YXRlIHJlYWRvbmx5IGNvZGVLZXk6IHN0cmluZyxcbiAgICBASW5qZWN0KFRPS0VOX0xPR0lOX0FQSSkgcHJpdmF0ZSByZWFkb25seSBhcGlUb2tlbkxvZ2luOiBzdHJpbmcsXG4gICAgQEluamVjdChUT0tFTl9DQUxMQkFDS19BUEkpIHByaXZhdGUgcmVhZG9ubHkgYXBpVG9rZW5DYWxsYmFjazogc3RyaW5nLFxuICAgIEBJbmplY3QoVE9LRU5fUkVGUkVTSF9BUEkpIHByaXZhdGUgcmVhZG9ubHkgYXBpUmVmcmVzaFRva2VuOiBzdHJpbmcsXG4gICAgQEluamVjdChUT0tFTl9JTkZPX0FQSSkgcHJpdmF0ZSByZWFkb25seSBhcGlUb2tlbkluZm86IHN0cmluZyxcbiAgKSB7fVxuXG4gIGxvZ291dChzcGVjaWZpY1VybCA9IGZhbHNlKSB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5pZFRva2VuS2V5KTtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnJlZnJlc2hUb2tlbktleSk7XG4gICAgdGhpcy5yZWRpcmVjdFRvVXJsKHNwZWNpZmljVXJsICYmIGxvY2F0aW9uLmhyZWYpO1xuICB9XG5cbiAgbG9nb3V0QXVkaXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgYCR7QVBJX0dBVEVXQVl9L2F1dGgvdjEvbG9nb3V0YCxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBoZWFkZXJzOiBOT1RfTk9USUZZX09OX0VSUk9SX0hFQURFUlMsXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICByZWRpcmVjdFRvVXJsKGhyZWYgPSAnJykge1xuICAgIGlmICh0aGlzLnN0YXRlU25hcHNob3QpIHtcbiAgICAgIGxldCB1cmwgPSAnJztcbiAgICAgIC8qKlxuICAgICAgICog5bey5a2Y5Zyo5o6I5p2D5L+h5oGv77yIbG9nb3V0VXJsIOWSjCBpZFRva2VuIOmDveWtmOWcqO+8ieWcuuaZr++8mlxuICAgICAgICogMeOAgeS4u+WKqOeZu+WHuu+8iOmAgOWHuueZu+W9le+8jOatpOaXtiBocmVmIOS4uuepuu+8ieaXtuS4jeiusOW9leS7u+S9leS/oeaBr++8jOWGjeasoeeZu+W9leWQjumHjeWumuWQkeWIsOW5s+WPsOmmlumhteOAglxuICAgICAgICogMuOAgeiiq+WKqOeZu+WHuu+8iHRva2VuIOi/h+acn+OAgeWkseaViO+8jOatpOaXtiBocmVmIOS4jeS4uuepuu+8ieaXtuabv+aNoiBwb3N0X2xvZ291dF9yZWRpcmVjdF91cmkg5Li6IGhyZWbvvIzlho3mrKHnmbvlvZXlkI7ph43lrprlkJHliLAgaHJlZiDpobXpnaLjgIJcbiAgICAgICAqIOS4jeWtmOWcqOaOiOadg+S/oeaBr+WcuuaZr++8mlxuICAgICAgICogMeOAgeWtmOWcqCBocmVm77yI5pyq55m75b2V5pe255u05o6l6K6/6ZeuIGhyZWbvvInmjojmnYPlkI7ph43lrprlkJHliLAgaHJlZiDpobXpnaLjgIJcbiAgICAgICAqIDLjgIHkuI3lrZjlnKggaHJlZu+8iOeZu+W9lemhtei/m+WFpe+8ieWQpuWImeaOiOadg+WQjumHjeWumuWQkeWIsOW5s+WPsOmmlumhteOAglxuICAgICAgICovXG4gICAgICBpZiAodGhpcy5zdGF0ZVNuYXBzaG90LmxvZ291dFVybCAmJiB0aGlzLnN0YXRlU25hcHNob3QuaWRUb2tlbikge1xuICAgICAgICBjb25zdCBsb2dvdXRVcmwgPSBgJHt0aGlzLnN0YXRlU25hcHNob3QubG9nb3V0VXJsfSZpZF90b2tlbl9oaW50PSR7dGhpcy5zdGF0ZVNuYXBzaG90LmlkVG9rZW59YDtcbiAgICAgICAgdXJsID0gaHJlZiA/IHRoaXMucmVwbGFjZVJlZGlyZWN0VXJsKGxvZ291dFVybCwgaHJlZikgOiBsb2dvdXRVcmw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhdXRoVXJsID0gdGhpcy5zdGF0ZVNuYXBzaG90LmF1dGhVcmw7XG4gICAgICAgIHVybCA9IGhyZWYgPyB0aGlzLnJlcGxhY2VSZWRpcmVjdFVybChhdXRoVXJsLCBocmVmKSA6IGF1dGhVcmw7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBnZXRUb3BXaW5kb3coKS5sb2NhdGlvbi5ocmVmID0gdXJsO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIHNob3VsZCBuZXZlciBoYXBwZW4sIGp1c3QgZm9yIHJvYnVzdG5lc3MgaW4gY2FzZSBvZiBjcm9zcy1vcmlnaW4gaWZyYW1lXG4gICAgICAgIGxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVmcmVzaFRva2VuKCkge1xuICAgIGNvbnN0IHJlZnJlc2hUb2tlbiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMucmVmcmVzaFRva2VuS2V5KTtcbiAgICBpZiAocmVmcmVzaFRva2VuKSB7XG4gICAgICBpZiAoIXRoaXMucmVmcmVzaFRva2VuQ2FjaGUkKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaFRva2VuQ2FjaGUkID0gdGhpcy5nZXRUb2tlbkJ5UmVmcmVzaFRva2VuKFxuICAgICAgICAgIHJlZnJlc2hUb2tlbixcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIHRhcCh0b2tlbiA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbkNhY2hlJCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiQkLm5leHQodG9rZW4pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1hcCgoeyBpZFRva2VuIH0pID0+IGlkVG9rZW4pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dvdXQodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcHVibGlzaFJlZigpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuQ2FjaGUkO1xuICAgIH1cbiAgICB0aGlzLmxvZ291dCh0cnVlKTtcbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cblxuICBjaGVja1Rva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tUb2tlbkNhY2hlW3Rva2VuXSkge1xuICAgICAgdGhpcy5jaGVja1Rva2VuQ2FjaGVbdG9rZW5dID0gdGhpcy5odHRwXG4gICAgICAgIC5nZXQodGhpcy5hcGlUb2tlbkluZm8sIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoe1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNoZWNrVG9rZW5DYWNoZVt0b2tlbl0gPSBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tUb2tlbkNhY2hlW3Rva2VuXSA9IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tUb2tlbkNhY2hlW3Rva2VuXTtcbiAgfVxuXG4gIGdldFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKG1hcChzdGF0ZSA9PiBzdGF0ZS5pZFRva2VuKSk7XG4gIH1cblxuICBnZXRUb2tlblBheWxvYWQ8VD4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUkLnBpcGUobWFwKHN0YXRlID0+IGdldEFjY291bnRJbmZvKHN0YXRlKSBhcyBUKSk7XG4gIH1cblxuICBnZXRBY2NvdW50SW5mbygpIHtcbiAgICBpZiAodGhpcy5wYXlsb2FkU25hcHNob3QpIHtcbiAgICAgIHJldHVybiBvZih0aGlzLnBheWxvYWRTbmFwc2hvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKG1hcChzdGF0ZSA9PiBnZXRBY2NvdW50SW5mbyhzdGF0ZSkgfHwge30pKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZGVzdHJveSQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBdXRoQ29uZmlndXJhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PHsgYXV0aF91cmw6IHN0cmluZzsgc3RhdGU6IHN0cmluZzsgbG9nb3V0X3VybDogc3RyaW5nIH0+KFxuICAgICAgICB0aGlzLmFwaVRva2VuTG9naW4sXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiAoe1xuICAgICAgICAgIGF1dGhVcmw6IHJlcy5hdXRoX3VybCxcbiAgICAgICAgICBzdGF0ZTogcmVzLnN0YXRlLFxuICAgICAgICAgIGxvZ291dFVybDogcmVzLmxvZ291dF91cmwgfHwgJycsXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEV4aXN0ZWRUb2tlbihjb25maWc6IEF1dGhvcml6YXRpb25TdGF0ZSkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuRnJvbUxvY2FsKGNvbmZpZykucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKHsgaWRUb2tlbjogJycsIHJlZnJlc2hUb2tlbjogJycgfSk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb2tlbkZyb21Mb2NhbChjb25maWc6IEF1dGhvcml6YXRpb25TdGF0ZSkge1xuICAgIGNvbnN0IHsgcXVlcnlQYXJhbXMsIGhhc2hQYXJhbXMgfSA9IHRoaXMuZ2V0UGFyYW1zKCk7XG5cbiAgICBjb25zdCBjb2RlID0gcXVlcnlQYXJhbXNbdGhpcy5jb2RlS2V5XSB8fCBoYXNoUGFyYW1zW3RoaXMuY29kZUtleV07XG5cbiAgICBpZiAoY29kZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5CeUNvZGUoY29kZSwgY29uZmlnLnN0YXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPVxuICAgICAgcXVlcnlQYXJhbXNbdGhpcy5yZWZyZXNoVG9rZW5LZXldIHx8IGhhc2hQYXJhbXNbdGhpcy5yZWZyZXNoVG9rZW5LZXldO1xuICAgIGlmIChyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFRva2VuQnlSZWZyZXNoVG9rZW4ocmVmcmVzaFRva2VuKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZFRva2VuID0gcXVlcnlQYXJhbXNbdGhpcy5pZFRva2VuS2V5XSB8fCBoYXNoUGFyYW1zW3RoaXMuaWRUb2tlbktleV07XG4gICAgaWYgKGlkVG9rZW4pIHtcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuaWRUb2tlbktleSwgaWRUb2tlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKHtcbiAgICAgIGlkVG9rZW46IGlkVG9rZW4gPz8gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5pZFRva2VuS2V5KSA/PyAnJyxcbiAgICAgIHJlZnJlc2hUb2tlbjogbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5yZWZyZXNoVG9rZW5LZXkpID8/ICcnLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb2tlbkJ5UmVmcmVzaFRva2VuKHJlZnJlc2hUb2tlbjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDx7IGlkX3Rva2VuOiBzdHJpbmc7IHJlZnJlc2hfdG9rZW46IHN0cmluZyB9Pih0aGlzLmFwaVJlZnJlc2hUb2tlbiwge1xuICAgICAgICBwYXJhbXM6IHsgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuIH0sXG4gICAgICB9KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoeyBpZF90b2tlbiwgcmVmcmVzaF90b2tlbiB9KSA9PiB7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5pZFRva2VuS2V5LCBpZF90b2tlbik7XG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0odGhpcy5yZWZyZXNoVG9rZW5LZXksIHJlZnJlc2hfdG9rZW4pO1xuICAgICAgICB9KSxcbiAgICAgICAgbWFwKCh7IGlkX3Rva2VuLCByZWZyZXNoX3Rva2VuIH0pID0+ICh7XG4gICAgICAgICAgaWRUb2tlbjogaWRfdG9rZW4sXG4gICAgICAgICAgcmVmcmVzaFRva2VuOiByZWZyZXNoX3Rva2VuLFxuICAgICAgICB9KSksXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb2tlbkJ5Q29kZShjb2RlOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PHsgaWRfdG9rZW46IHN0cmluZzsgcmVmcmVzaF90b2tlbjogc3RyaW5nIH0+KHRoaXMuYXBpVG9rZW5DYWxsYmFjaywge1xuICAgICAgICBwYXJhbXM6IHsgY29kZSwgc3RhdGUgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShcbiAgICAgICAgdGFwKCh7IGlkX3Rva2VuLCByZWZyZXNoX3Rva2VuIH0pID0+IHtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLmlkVG9rZW5LZXksIGlkX3Rva2VuKTtcbiAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSh0aGlzLnJlZnJlc2hUb2tlbktleSwgcmVmcmVzaF90b2tlbik7XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAoKHsgaWRfdG9rZW4sIHJlZnJlc2hfdG9rZW4gfSkgPT4gKHtcbiAgICAgICAgICBpZFRva2VuOiBpZF90b2tlbixcbiAgICAgICAgICByZWZyZXNoVG9rZW46IHJlZnJlc2hfdG9rZW4sXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldFBhcmFtcygpIHtcbiAgICBjb25zdCBpbml0VXJsID0gZ2V0SW5pdFVybCgpO1xuXG4gICAgY29uc3QgaW5pdExvY2F0aW9uID0gbmV3IFVSTChpbml0VXJsKTtcblxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gcGFyc2VQYXJhbXMoXG4gICAgICBpbml0TG9jYXRpb24uc2VhcmNoID8gaW5pdExvY2F0aW9uLnNlYXJjaC5zbGljZSgxKSA6ICcnLFxuICAgICk7XG5cbiAgICBjb25zdCBoYXNoUGFyYW1zID0gcGFyc2VQYXJhbXMoXG4gICAgICBpbml0TG9jYXRpb24uaGFzaCA/IGluaXRMb2NhdGlvbi5oYXNoLnNsaWNlKDEpIDogJycsXG4gICAgKTtcblxuICAgIHJldHVybiB7IHF1ZXJ5UGFyYW1zLCBoYXNoUGFyYW1zIH07XG4gIH1cblxuICBwcml2YXRlIHJlcGxhY2VSZWRpcmVjdFVybChhdXRoVXJsOiBzdHJpbmcsIGhyZWY6IHN0cmluZykge1xuICAgIGNvbnN0IFtwYXRoLCBxdWVyeVBhcmFtc10gPSBhdXRoVXJsLnNwbGl0KCc/Jyk7XG5cbiAgICBjb25zdCByZXBsYWNlZFF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXNcbiAgICAgIC5zcGxpdCgnJicpXG4gICAgICAubWFwKHBhaXIgPT4ge1xuICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYWlyLnNwbGl0KCc9Jyk7XG4gICAgICAgIHJldHVybiBSRURJUkVDVF9VUklTLmhhcyhrZXkpXG4gICAgICAgICAgPyBgJHtrZXl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGhyZWYpIHx8IHZhbHVlfWBcbiAgICAgICAgICA6IGAke2tleX09JHt2YWx1ZX1gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcmJyk7XG5cbiAgICByZXR1cm4gYCR7cGF0aH0/JHtyZXBsYWNlZFF1ZXJ5UGFyYW1zfWA7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJhbXMocXVlcnk6IHN0cmluZyk6IFN0cmluZ01hcCB7XG4gIGlmICghcXVlcnkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4gcXVlcnkuc3BsaXQoJyYnKS5yZWR1Y2UoKGFjYywgcGFyYW0pID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJhbS5zcGxpdCgnPScpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjYyxcbiAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICB9O1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGdldEFjY291bnRJbmZvKHN0YXRlOiBBdXRob3JpemF0aW9uU3RhdGUpIHtcbiAgbGV0IGFjY291bnRJbmZvO1xuICB0cnkge1xuICAgIGFjY291bnRJbmZvID0gSlNPTi5wYXJzZShcbiAgICAgIGRlY29kZVVybChzdGF0ZS5pZFRva2VuLnNwbGl0KCcuJylbMV0pLFxuICAgICkgYXMgQWNjb3VudEluZm87XG4gIH0gY2F0Y2ggeyB9XG4gIHJldHVybiBhY2NvdW50SW5mbztcbn1cbiJdfQ==
225
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL3N0YXRlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUNMLEtBQUssRUFFTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLEVBQUUsRUFDRixVQUFVLEVBQ1YsR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsR0FBRyxFQUNILElBQUksRUFDSixJQUFJLEdBQ0wsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBRUwsV0FBVyxFQUNYLDJCQUEyQixFQUMzQixVQUFVLEVBQ1YsWUFBWSxHQUNiLE1BQU0sb0JBQW9CLENBQUM7QUFHNUIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFDTCxxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsaUJBQWlCLEdBQ2xCLE1BQU0saUJBQWlCLENBQUM7O0FBa0J6QixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQztBQUN2QyxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUM7QUFDakQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQztBQUUvQixNQUFNLFNBQVMsR0FBRyw2QkFBNkIsQ0FBQztBQUNoRCxNQUFNLFlBQVksR0FBRyxnQ0FBZ0MsQ0FBQztBQUN0RCxNQUFN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QztBQUVELFNBQVMsY0FBYyxDQUFDLEtBQXlCO0lBQy9DLE9BQU8sS0FBSyxDQUFDLE9BQU87UUFDbEIsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNYLENBQUM7QUFFRCxTQUFTLGdCQUFnQjtJQUN2QixPQUFPLElBQUksQ0FDVCxHQUFHLENBQUMsQ0FBQyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFpQixFQUFFLEVBQUU7UUFDaEUsaUJBQWlCLENBQUM7WUFDaEIsV0FBVyxFQUFFLGFBQWE7WUFDMUIsT0FBTyxFQUFFLFFBQVE7WUFDakIsWUFBWSxFQUFFLGFBQWE7U0FDNUIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEMsT0FBTyxFQUFFLFFBQVE7UUFDakIsWUFBWSxFQUFFLGFBQWE7S0FDNUIsQ0FBQyxDQUFDLENBQ0osQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICogQG1vZHVsZSBhdXRob3JpemF0aW9uXG4gKi9cblxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZGVjb2RlVXJsIH0gZnJvbSAnYWI2NCc7XG5pbXBvcnQge1xuICBFTVBUWSxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgY29uY2F0LFxuICBvZixcbiAgY2F0Y2hFcnJvcixcbiAgbWFwLFxuICBzaGFyZVJlcGxheSxcbiAgc3dpdGNoTWFwLFxuICB0YXAsXG4gIHBpcGUsXG4gIGZyb20sXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBTdHJpbmdNYXAsXG4gIEFQSV9HQVRFV0FZLFxuICBOT1RfTk9USUZZX09OX0VSUk9SX0hFQURFUlMsXG4gIHB1Ymxpc2hSZWYsXG4gIGdldFRvcFdpbmRvdyxcbn0gZnJvbSAnLi4vY29yZS9wdWJsaWMtYXBpJztcbmltcG9ydCB7IEFjY291bnRJbmZvIH0gZnJvbSAnLi4vcGFnZS1zY2FmZm9sZC9wdWJsaWMtYXBpJztcblxuaW1wb3J0IHsgZ2V0SW5pdFVybCB9IGZyb20gJy4vYXBwLWluaXQtdXJsJztcbmltcG9ydCB7XG4gIGFzeW5jUmVhZFN0b3JhZ2VUb2tlbixcbiAgY2xlYW5TdG9yYWdlVG9rZW4sXG4gIHJlYWRTdG9yYWdlVG9rZW4sXG4gIHJlYWRTdG9yYWdlVHlwZSxcbiAgd3JpdGVTdG9yYWdlVG9rZW4sXG59IGZyb20gJy4vc3RvcmFnZS10b2tlbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXV0aG9yaXphdGlvblN0YXRlIHtcbiAgaWRUb2tlbj86IHN0cmluZztcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbiAgYXV0aFVybD86IHN0cmluZztcbiAgbG9nb3V0VXJsPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRva2VuUmVzcG9uc2Uge1xuICB0b2tlbl9zdG9yYWdlOiBTdG9yYWdlVHlwZTtcbiAgaWRfdG9rZW46IHN0cmluZztcbiAgcmVmcmVzaF90b2tlbjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBTdG9yYWdlVHlwZSA9ICdsb2NhbCcgfCAnc2Vzc2lvbic7XG5cbmV4cG9ydCBjb25zdCBTVE9SQUdFX1RZUEVfS0VZID0gJ3Rva2VuX3N0b3JhZ2UnO1xuZXhwb3J0IGNvbnN0IElEX1RPS0VOX0tFWSA9ICdpZF90b2tlbic7XG5leHBvcnQgY29uc3QgUkVGUkVTSF9UT0tFTl9LRVkgPSAncmVmcmVzaF90b2tlbic7XG5leHBvcnQgY29uc3QgQ09ERV9LRVkgPSAnY29kZSc7XG5cbmNvbnN0IExPR0lOX0FQSSA9ICcvY29uc29sZS9hcGkvdjEvdG9rZW4vbG9naW4nO1xuY29uc3QgQ0FMTEJBQ0tfQVBJID0gJy9jb25zb2xlL2FwaS92MS90b2tlbi9jYWxsYmFjayc7XG5jb25zdCBUT0tFTl9SRUZSRVNIX0FQSSA9ICcvY29uc29sZS9hcGkvdjEvdG9rZW4vcmVmcmVzaCc7XG5jb25zdCBUT0tFTl9JTkZPX0FQSSA9ICcvY29uc29sZS9hcGkvdjEvdG9rZW4vaW5mbyc7XG5cbmNvbnN0IFJFRElSRUNUX1VSSVMgPSBuZXcgU2V0KFsncmVkaXJlY3RfdXJpJywgJ3Bvc3RfbG9nb3V0X3JlZGlyZWN0X3VyaSddKTtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdXRob3JpemF0aW9uU3RhdGVTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVmcmVzaFRva2VuJCQgPSBuZXcgU3ViamVjdDx7XG4gICAgaWRUb2tlbjogc3RyaW5nO1xuICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICB9PigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc3RhdGUkID0gdGhpcy5nZXRBdXRoQ29uZmlndXJhdGlvbigpLnBpcGUoXG4gICAgc3dpdGNoTWFwKGNvbmZpZyA9PlxuICAgICAgY29uY2F0KHRoaXMuZ2V0RXhpc3RlZFRva2VuKGNvbmZpZyksIHRoaXMucmVmcmVzaFRva2VuJCQpLnBpcGUoXG4gICAgICAgIG1hcCh0b2tlbiA9PiAoeyAuLi5jb25maWcsIC4uLnRva2VuIH0pKSxcbiAgICAgICksXG4gICAgKSxcbiAgICB0YXAoc3RhdGUgPT4ge1xuICAgICAgdGhpcy5zdGF0ZVNuYXBzaG90ID0gc3RhdGU7XG4gICAgICBpZiAoIXN0YXRlLmlkVG9rZW4pIHtcbiAgICAgICAgdGhpcy5sb2dvdXQodHJ1ZSk7XG4gICAgICB9XG4gICAgICB0aGlzLnBheWxvYWRTbmFwc2hvdCA9IGdldEFjY291bnRJbmZvKHN0YXRlKTtcbiAgICB9KSxcbiAgICBzaGFyZVJlcGxheSgxKSxcbiAgKTtcblxuICBwcml2YXRlIGNoZWNrVG9rZW5DYWNoZTogUmVjb3JkPHN0cmluZywgT2JzZXJ2YWJsZTx1bmtub3duPj4gPSB7fTtcbiAgcHJpdmF0ZSByZWZyZXNoVG9rZW5DYWNoZSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBzdGF0ZVNuYXBzaG90OiBBdXRob3JpemF0aW9uU3RhdGUgPSBudWxsO1xuXG4gIHBheWxvYWRTbmFwc2hvdDogQWNjb3VudEluZm87XG5cbiAgbG9nb3V0KHNwZWNpZmljVXJsID0gZmFsc2UpIHtcbiAgICBjbGVhblN0b3JhZ2VUb2tlbigpO1xuICAgIHRoaXMucmVkaXJlY3RUb0RleChzcGVjaWZpY1VybCAmJiBsb2NhdGlvbi5ocmVmKTtcbiAgfVxuXG4gIGxvZ291dEF1ZGl0KCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIGAke0FQSV9HQVRFV0FZfS9hdXRoL3YxL2xvZ291dGAsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgaGVhZGVyczogTk9UX05PVElGWV9PTl9FUlJPUl9IRUFERVJTLFxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVkaXJlY3RUb0RleChyZWRpcmVjdFVybDogc3RyaW5nID0gbnVsbCkge1xuICAgIGlmICghdGhpcy5zdGF0ZVNuYXBzaG90KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8g5Li75Yqo6YCA5Ye65oiWIHNlc3Npb24g5qih5byP6Lez6L2s5YiwIGRleCDliY3pnIDopoHkuLvliqjmuIXpmaQgYHVzZXJfbG9naW5gIGNvb2tpZSDpmLLmraLoh6rliqjmjojmnYNcbiAgICBpZiAoISF0aGlzLnN0YXRlU25hcHNob3QuaWRUb2tlbiB8fCByZWFkU3RvcmFnZVR5cGUoKSA9PT0gJ3Nlc3Npb24nKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmZXRjaChcbiAgICAgICAgICBgJHt0aGlzLnN0YXRlU25hcHNob3QubG9nb3V0VXJsfSZpZF90b2tlbl9oaW50PSR7XG4gICAgICAgICAgICAvLyDkuLvliqjpgIDlh7rml7bnpoHnlKjnjrDmnIkgdG9rZW5cbiAgICAgICAgICAgIHRoaXMuc3RhdGVTbmFwc2hvdC5pZFRva2VuIHx8ICcnXG4gICAgICAgICAgfWAsXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaHJlZiA9IHJlZGlyZWN0VXJsXG4gICAgICA/IHJlcGxhY2VSZWRpcmVjdFVybCh0aGlzLnN0YXRlU25hcHNob3QuYXV0aFVybCwgcmVkaXJlY3RVcmwpXG4gICAgICA6IHRoaXMuc3RhdGVTbmFwc2hvdC5hdXRoVXJsO1xuXG4gICAgdHJ5IHtcbiAgICAgIGdldFRvcFdpbmRvdygpLmxvY2F0aW9uLmhyZWYgPSBocmVmO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gc2hvdWxkIG5ldmVyIGhhcHBlbiwganVzdCBmb3Igcm9idXN0bmVzcyBpbiBjYXNlIG9mIGNyb3NzLW9yaWdpbiBpZnJhbWVcbiAgICAgIGxvY2F0aW9uLmhyZWYgPSBocmVmO1xuICAgIH1cbiAgfVxuXG4gIHJlZnJlc2hUb2tlbigpIHtcbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPSByZWFkU3RvcmFnZVRva2VuKCk/LnJlZnJlc2hUb2tlbjtcbiAgICBpZiAocmVmcmVzaFRva2VuKSB7XG4gICAgICBpZiAoIXRoaXMucmVmcmVzaFRva2VuQ2FjaGUkKSB7XG4gICAgICAgIHRoaXMucmVmcmVzaFRva2VuQ2FjaGUkID0gdGhpcy5nZXRUb2tlbkJ5UmVmcmVzaFRva2VuKFxuICAgICAgICAgIHJlZnJlc2hUb2tlbixcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgIHRhcCh0b2tlbiA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbkNhY2hlJCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hUb2tlbiQkLm5leHQodG9rZW4pO1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG1hcCgoeyBpZFRva2VuIH0pID0+IGlkVG9rZW4pLFxuICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dvdXQodHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgcHVibGlzaFJlZigpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucmVmcmVzaFRva2VuQ2FjaGUkO1xuICAgIH1cbiAgICB0aGlzLmxvZ291dCh0cnVlKTtcbiAgICByZXR1cm4gRU1QVFk7XG4gIH1cblxuICBjaGVja1Rva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tUb2tlbkNhY2hlW3Rva2VuXSkge1xuICAgICAgdGhpcy5jaGVja1Rva2VuQ2FjaGVbdG9rZW5dID0gdGhpcy5odHRwXG4gICAgICAgIC5nZXQoVE9LRU5fSU5GT19BUEksIHtcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICAucGlwZShcbiAgICAgICAgICB0YXAoe1xuICAgICAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNoZWNrVG9rZW5DYWNoZVt0b2tlbl0gPSBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tUb2tlbkNhY2hlW3Rva2VuXSA9IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHB1Ymxpc2hSZWYoKSxcbiAgICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tUb2tlbkNhY2hlW3Rva2VuXTtcbiAgfVxuXG4gIGdldFRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKG1hcChzdGF0ZSA9PiBzdGF0ZS5pZFRva2VuKSk7XG4gIH1cblxuICBnZXRUb2tlblBheWxvYWQ8VD4oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUkLnBpcGUobWFwKHN0YXRlID0+IGdldEFjY291bnRJbmZvKHN0YXRlKSBhcyBUKSk7XG4gIH1cblxuICBnZXRBY2NvdW50SW5mbygpIHtcbiAgICBpZiAodGhpcy5wYXlsb2FkU25hcHNob3QpIHtcbiAgICAgIHJldHVybiBvZih0aGlzLnBheWxvYWRTbmFwc2hvdCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0YXRlJC5waXBlKG1hcChzdGF0ZSA9PiBnZXRBY2NvdW50SW5mbyhzdGF0ZSkgfHwge30pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXV0aENvbmZpZ3VyYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldDx7IGF1dGhfdXJsOiBzdHJpbmc7IHN0YXRlOiBzdHJpbmc7IGxvZ291dF91cmw6IHN0cmluZyB9PihMT0dJTl9BUEkpXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHJlcyA9PiAoe1xuICAgICAgICAgIGF1dGhVcmw6IHJlcy5hdXRoX3VybCxcbiAgICAgICAgICBzdGF0ZTogcmVzLnN0YXRlLFxuICAgICAgICAgIGxvZ291dFVybDogcmVzLmxvZ291dF91cmwgfHwgJycsXG4gICAgICAgIH0pKSxcbiAgICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEV4aXN0ZWRUb2tlbihjb25maWc6IEF1dGhvcml6YXRpb25TdGF0ZSkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuRnJvbUxvY2FsKGNvbmZpZykucGlwZShcbiAgICAgIGNhdGNoRXJyb3IoZXJyb3IgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgcmV0dXJuIG9mKHsgaWRUb2tlbjogJycsIHJlZnJlc2hUb2tlbjogJycgfSk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb2tlbkZyb21Mb2NhbChcbiAgICBjb25maWc6IEF1dGhvcml6YXRpb25TdGF0ZSxcbiAgKTogT2JzZXJ2YWJsZTx7IGlkVG9rZW4/OiBzdHJpbmc7IHJlZnJlc2hUb2tlbj86IHN0cmluZyB9PiB7XG4gICAgY29uc3QgeyBxdWVyeVBhcmFtcywgaGFzaFBhcmFtcyB9ID0gdGhpcy5nZXRQYXJhbXMoKTtcblxuICAgIGNvbnN0IGNvZGUgPSBxdWVyeVBhcmFtc1tDT0RFX0tFWV0gfHwgaGFzaFBhcmFtc1tDT0RFX0tFWV07XG5cbiAgICBpZiAoY29kZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5CeUNvZGUoY29kZSwgY29uZmlnLnN0YXRlKTtcbiAgICB9XG5cbiAgICBjb25zdCByZWZyZXNoVG9rZW4gPVxuICAgICAgcXVlcnlQYXJhbXNbUkVGUkVTSF9UT0tFTl9LRVldIHx8IGhhc2hQYXJhbXNbUkVGUkVTSF9UT0tFTl9LRVldO1xuXG4gICAgaWYgKHJlZnJlc2hUb2tlbikge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5CeVJlZnJlc2hUb2tlbihyZWZyZXNoVG9rZW4pO1xuICAgIH1cblxuICAgIGNvbnN0IGlkVG9rZW4gPSBxdWVyeVBhcmFtc1tJRF9UT0tFTl9LRVldIHx8IGhhc2hQYXJhbXNbSURfVE9LRU5fS0VZXTtcblxuICAgIGlmIChpZFRva2VuKSB7XG4gICAgICB3cml0ZVN0b3JhZ2VUb2tlbih7XG4gICAgICAgIHN0b3JhZ2VUeXBlOiAocXVlcnlQYXJhbXNbU1RPUkFHRV9UWVBFX0tFWV0gfHxcbiAgICAgICAgICBoYXNoUGFyYW1zW1NUT1JBR0VfVFlQRV9LRVldKSBhcyBUb2tlblJlc3BvbnNlWyd0b2tlbl9zdG9yYWdlJ10sXG4gICAgICAgIGlkVG9rZW4sXG4gICAgICAgIHJlZnJlc2hUb2tlbjogJycsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZnJvbShhc3luY1JlYWRTdG9yYWdlVG9rZW4oKSk7XG4gIH1cblxuICBwcml2YXRlIGdldFRva2VuQnlSZWZyZXNoVG9rZW4ocmVmcmVzaFRva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PFRva2VuUmVzcG9uc2U+KFRPS0VOX1JFRlJFU0hfQVBJLCB7XG4gICAgICAgIHBhcmFtczogeyByZWZyZXNoX3Rva2VuOiByZWZyZXNoVG9rZW4gfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUb2tlblJlc3BvbnNlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUb2tlbkJ5Q29kZShjb2RlOiBzdHJpbmcsIHN0YXRlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0PFRva2VuUmVzcG9uc2U+KENBTExCQUNLX0FQSSwge1xuICAgICAgICBwYXJhbXM6IHsgY29kZSwgc3RhdGUgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZShtYXBUb2tlblJlc3BvbnNlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQYXJhbXMoKSB7XG4gICAgY29uc3QgaW5pdFVybCA9IGdldEluaXRVcmwoKTtcblxuICAgIGNvbnN0IGluaXRMb2NhdGlvbiA9IG5ldyBVUkwoaW5pdFVybCk7XG5cbiAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHBhcnNlUGFyYW1zKFxuICAgICAgaW5pdExvY2F0aW9uLnNlYXJjaCA/IGluaXRMb2NhdGlvbi5zZWFyY2guc2xpY2UoMSkgOiAnJyxcbiAgICApO1xuXG4gICAgY29uc3QgaGFzaFBhcmFtcyA9IHBhcnNlUGFyYW1zKFxuICAgICAgaW5pdExvY2F0aW9uLmhhc2ggPyBpbml0TG9jYXRpb24uaGFzaC5zbGljZSgxKSA6ICcnLFxuICAgICk7XG5cbiAgICByZXR1cm4geyBxdWVyeVBhcmFtcywgaGFzaFBhcmFtcyB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxhY2VSZWRpcmVjdFVybChkZXhVcmw6IHN0cmluZywgcmVkaXJlY3RVcmw6IHN0cmluZykge1xuICBjb25zdCBbcGF0aCwgcXVlcnlQYXJhbXNdID0gZGV4VXJsLnNwbGl0KCc/Jyk7XG5cbiAgY29uc3QgcmVwbGFjZWRRdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zXG4gICAgLnNwbGl0KCcmJylcbiAgICAubWFwKHBhaXIgPT4ge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFpci5zcGxpdCgnPScpO1xuICAgICAgcmV0dXJuIFJFRElSRUNUX1VSSVMuaGFzKGtleSlcbiAgICAgICAgPyBgJHtrZXl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0VXJsKX1gXG4gICAgICAgIDogYCR7a2V5fT0ke3ZhbHVlfWA7XG4gICAgfSlcbiAgICAuam9pbignJicpO1xuXG4gIHJldHVybiBgJHtwYXRofT8ke3JlcGxhY2VkUXVlcnlQYXJhbXN9YDtcbn1cblxuZnVuY3Rpb24gcGFyc2VQYXJhbXMocXVlcnk6IHN0cmluZyk6IFN0cmluZ01hcCB7XG4gIGlmICghcXVlcnkpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICByZXR1cm4gcXVlcnkuc3BsaXQoJyYnKS5yZWR1Y2UoKGFjYywgcGFyYW0pID0+IHtcbiAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYXJhbS5zcGxpdCgnPScpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmFjYyxcbiAgICAgIFtrZXldOiB2YWx1ZSxcbiAgICB9O1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGdldEFjY291bnRJbmZvKHN0YXRlOiBBdXRob3JpemF0aW9uU3RhdGUpOiBBY2NvdW50SW5mbyB7XG4gIHJldHVybiBzdGF0ZS5pZFRva2VuXG4gICAgPyBKU09OLnBhcnNlKGRlY29kZVVybChzdGF0ZS5pZFRva2VuLnNwbGl0KCcuJylbMV0pKVxuICAgIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gbWFwVG9rZW5SZXNwb25zZSgpIHtcbiAgcmV0dXJuIHBpcGUoXG4gICAgdGFwKCh7IHRva2VuX3N0b3JhZ2UsIGlkX3Rva2VuLCByZWZyZXNoX3Rva2VuIH06IFRva2VuUmVzcG9uc2UpID0+IHtcbiAgICAgIHdyaXRlU3RvcmFnZVRva2VuKHtcbiAgICAgICAgc3RvcmFnZVR5cGU6IHRva2VuX3N0b3JhZ2UsXG4gICAgICAgIGlkVG9rZW46IGlkX3Rva2VuLFxuICAgICAgICByZWZyZXNoVG9rZW46IHJlZnJlc2hfdG9rZW4sXG4gICAgICB9KTtcbiAgICB9KSxcbiAgICBtYXAoKHsgaWRfdG9rZW4sIHJlZnJlc2hfdG9rZW4gfSkgPT4gKHtcbiAgICAgIGlkVG9rZW46IGlkX3Rva2VuLFxuICAgICAgcmVmcmVzaFRva2VuOiByZWZyZXNoX3Rva2VuLFxuICAgIH0pKSxcbiAgKTtcbn1cbiJdfQ==
@@ -0,0 +1,82 @@
1
+ import { ID_TOKEN_KEY, REFRESH_TOKEN_KEY, STORAGE_TYPE_KEY, } from './state.service';
2
+ const getStorage = (storageType) => storageType === 'session' ? sessionStorage : localStorage;
3
+ let sessionTokenShareChannel;
4
+ const SESSION_TOKEN_SHARE_CHANNEL = 'SESSION_TOKEN_SHARE_CHANNEL';
5
+ export function readStorageType() {
6
+ return (localStorage.getItem(STORAGE_TYPE_KEY) === 'session' ? 'session' : 'local');
7
+ }
8
+ export function cleanStorageToken() {
9
+ localStorage.removeItem(ID_TOKEN_KEY);
10
+ localStorage.removeItem(REFRESH_TOKEN_KEY);
11
+ sessionStorage.removeItem(ID_TOKEN_KEY);
12
+ sessionStorage.removeItem(REFRESH_TOKEN_KEY);
13
+ }
14
+ export function writeStorageToken(token) {
15
+ cleanStorageToken();
16
+ localStorage.setItem(STORAGE_TYPE_KEY, token.storageType);
17
+ const storage = getStorage(token.storageType);
18
+ storage.setItem(ID_TOKEN_KEY, token.idToken);
19
+ storage.setItem(REFRESH_TOKEN_KEY, token.refreshToken);
20
+ if (token.storageType === 'session') {
21
+ setupRequestSessionTokenChannel();
22
+ }
23
+ else {
24
+ closeRequestSessionTokenChannel();
25
+ }
26
+ }
27
+ export function readStorageToken() {
28
+ const storageType = readStorageType();
29
+ if (storageType === 'session') {
30
+ setupRequestSessionTokenChannel();
31
+ }
32
+ const storage = getStorage(storageType);
33
+ return {
34
+ storageType,
35
+ idToken: storage.getItem(ID_TOKEN_KEY),
36
+ refreshToken: storage.getItem(REFRESH_TOKEN_KEY),
37
+ };
38
+ }
39
+ export function asyncReadStorageToken() {
40
+ const storageToken = readStorageToken();
41
+ if (storageToken.storageType === 'session' && !storageToken.idToken) {
42
+ return new Promise(resolve => {
43
+ const timer = window.setTimeout(() => {
44
+ console.warn('request session token timeout');
45
+ sessionTokenShareChannel.removeEventListener('message', receiveSessionToken);
46
+ resolve({});
47
+ }, 50);
48
+ function receiveSessionToken({ data, }) {
49
+ if (data.type === 'provide') {
50
+ window.clearTimeout(timer);
51
+ sessionTokenShareChannel.removeEventListener('message', receiveSessionToken);
52
+ writeStorageToken(data.token);
53
+ resolve(data.token);
54
+ }
55
+ }
56
+ sessionTokenShareChannel.addEventListener('message', receiveSessionToken);
57
+ sessionTokenShareChannel.postMessage({ type: 'request' });
58
+ });
59
+ }
60
+ return Promise.resolve(storageToken);
61
+ }
62
+ function setupRequestSessionTokenChannel() {
63
+ if (sessionTokenShareChannel) {
64
+ return;
65
+ }
66
+ sessionTokenShareChannel = new BroadcastChannel(SESSION_TOKEN_SHARE_CHANNEL);
67
+ sessionTokenShareChannel.addEventListener('message', ({ data }) => {
68
+ if (data.type === 'request') {
69
+ sessionTokenShareChannel.postMessage({
70
+ type: 'provide',
71
+ token: readStorageToken(),
72
+ });
73
+ }
74
+ });
75
+ }
76
+ function closeRequestSessionTokenChannel() {
77
+ if (sessionTokenShareChannel) {
78
+ sessionTokenShareChannel.close();
79
+ sessionTokenShareChannel = null;
80
+ }
81
+ }
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS10b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hdXRob3JpemF0aW9uL3N0b3JhZ2UtdG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFlBQVksRUFDWixpQkFBaUIsRUFDakIsZ0JBQWdCLEdBRWpCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsTUFBTSxVQUFVLEdBQUcsQ0FBQyxXQUF3QixFQUFXLEVBQUUsQ0FDdkQsV0FBVyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7QUFFNUQsSUFBSSx3QkFBMEMsQ0FBQztBQUUvQyxNQUFNLDJCQUEyQixHQUFHLDZCQUE2QixDQUFDO0FBZWxFLE1BQU0sVUFBVSxlQUFlO0lBQzdCLE9BQU8sQ0FDTCxZQUFZLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FDNUQsQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQjtJQUMvQixZQUFZLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3RDLFlBQVksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUUzQyxjQUFjLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3hDLGNBQWMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQW1CO0lBQ25ELGlCQUFpQixFQUFFLENBQUM7SUFFcEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFMUQsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMs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QzVCLHdCQUF3QixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2pDLHdCQUF3QixHQUFHLElBQUksQ0FBQztLQUNqQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBJRF9UT0tFTl9LRVksXG4gIFJFRlJFU0hfVE9LRU5fS0VZLFxuICBTVE9SQUdFX1RZUEVfS0VZLFxuICBTdG9yYWdlVHlwZSxcbn0gZnJvbSAnLi9zdGF0ZS5zZXJ2aWNlJztcblxuY29uc3QgZ2V0U3RvcmFnZSA9IChzdG9yYWdlVHlwZTogU3RvcmFnZVR5cGUpOiBTdG9yYWdlID0+XG4gIHN0b3JhZ2VUeXBlID09PSAnc2Vzc2lvbicgPyBzZXNzaW9uU3RvcmFnZSA6IGxvY2FsU3RvcmFnZTtcblxubGV0IHNlc3Npb25Ub2tlblNoYXJlQ2hhbm5lbDogQnJvYWRjYXN0Q2hhbm5lbDtcblxuY29uc3QgU0VTU0lPTl9UT0tFTl9TSEFSRV9DSEFOTkVMID0gJ1NFU1NJT05fVE9LRU5fU0hBUkVfQ0hBTk5FTCc7XG5cbnR5cGUgU2Vzc2lvblRva2VuU2hhcmVEYXRhID1cbiAgfCB7XG4gICAgICB0eXBlOiAncHJvdmlkZSc7XG4gICAgICB0b2tlbjogU3RvcmFnZVRva2VuO1xuICAgIH1cbiAgfCB7IHR5cGU6ICdyZXF1ZXN0JyB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JhZ2VUb2tlbiB7XG4gIHN0b3JhZ2VUeXBlOiBTdG9yYWdlVHlwZTtcbiAgaWRUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW46IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTdG9yYWdlVHlwZSgpIHtcbiAgcmV0dXJuIChcbiAgICBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX1RZUEVfS0VZKSA9PT0gJ3Nlc3Npb24nID8gJ3Nlc3Npb24nIDogJ2xvY2FsJ1xuICApIGFzIFN0b3JhZ2VUeXBlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5TdG9yYWdlVG9rZW4oKSB7XG4gIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKElEX1RPS0VOX0tFWSk7XG4gIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFJFRlJFU0hfVE9LRU5fS0VZKTtcblxuICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKElEX1RPS0VOX0tFWSk7XG4gIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oUkVGUkVTSF9UT0tFTl9LRVkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JpdGVTdG9yYWdlVG9rZW4odG9rZW46IFN0b3JhZ2VUb2tlbikge1xuICBjbGVhblN0b3JhZ2VUb2tlbigpO1xuXG4gIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfVFlQRV9LRVksIHRva2VuLnN0b3JhZ2VUeXBlKTtcblxuICBjb25zdCBzdG9yYWdlID0gZ2V0U3RvcmFnZSh0b2tlbi5zdG9yYWdlVHlwZSk7XG5cbiAgc3RvcmFnZS5zZXRJdGVtKElEX1RPS0VOX0tFWSwgdG9rZW4uaWRUb2tlbik7XG4gIHN0b3JhZ2Uuc2V0SXRlbShSRUZSRVNIX1RPS0VOX0tFWSwgdG9rZW4ucmVmcmVzaFRva2VuKTtcblxuICBpZiAodG9rZW4uc3RvcmFnZVR5cGUgPT09ICdzZXNzaW9uJykge1xuICAgIHNldHVwUmVxdWVzdFNlc3Npb25Ub2tlbkNoYW5uZWwoKTtcbiAgfSBlbHNlIHtcbiAgICBjbG9zZVJlcXVlc3RTZXNzaW9uVG9rZW5DaGFubmVsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlYWRTdG9yYWdlVG9rZW4oKTogUGFydGlhbDxTdG9yYWdlVG9rZW4+IHtcbiAgY29uc3Qgc3RvcmFnZVR5cGUgPSByZWFkU3RvcmFnZVR5cGUoKTtcblxuICBpZiAoc3RvcmFnZVR5cGUgPT09ICdzZXNzaW9uJykge1xuICAgIHNldHVwUmVxdWVzdFNlc3Npb25Ub2tlbkNoYW5uZWwoKTtcbiAgfVxuXG4gIGNvbnN0IHN0b3JhZ2UgPSBnZXRTdG9yYWdlKHN0b3JhZ2VUeXBlKTtcblxuICByZXR1cm4ge1xuICAgIHN0b3JhZ2VUeXBlLFxuICAgIGlkVG9rZW46IHN0b3JhZ2UuZ2V0SXRlbShJRF9UT0tFTl9LRVkpLFxuICAgIHJlZnJlc2hUb2tlbjogc3RvcmFnZS5nZXRJdGVtKFJFRlJFU0hfVE9LRU5fS0VZKSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzeW5jUmVhZFN0b3JhZ2VUb2tlbigpOiBQcm9taXNlPFBhcnRpYWw8U3RvcmFnZVRva2VuPj4ge1xuICBjb25zdCBzdG9yYWdlVG9rZW4gPSByZWFkU3RvcmFnZVRva2VuKCk7XG5cbiAgaWYgKHN0b3JhZ2VUb2tlbi5zdG9yYWdlVHlwZSA9PT0gJ3Nlc3Npb24nICYmICFzdG9yYWdlVG9rZW4uaWRUb2tlbikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGNvbnN0IHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ3JlcXVlc3Qgc2Vzc2lvbiB0b2tlbiB0aW1lb3V0Jyk7XG4gICAgICAgIHNlc3Npb25Ub2tlblNoYXJlQ2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAgICdtZXNzYWdlJyxcbiAgICAgICAgICByZWNlaXZlU2Vzc2lvblRva2VuLFxuICAgICAgICApO1xuICAgICAgICByZXNvbHZlKHt9KTtcbiAgICAgIH0sIDUwKTtcblxuICAgICAgZnVuY3Rpb24gcmVjZWl2ZVNlc3Npb25Ub2tlbih7XG4gICAgICAgIGRhdGEsXG4gICAgICB9OiBNZXNzYWdlRXZlbnQ8U2Vzc2lvblRva2VuU2hhcmVEYXRhPikge1xuICAgICAgICBpZiAoZGF0YS50eXBlID09PSAncHJvdmlkZScpIHtcbiAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICBzZXNzaW9uVG9rZW5TaGFyZUNoYW5uZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgICAgICAgICAgICdtZXNzYWdlJyxcbiAgICAgICAgICAgIHJlY2VpdmVTZXNzaW9uVG9rZW4sXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHdyaXRlU3RvcmFnZVRva2VuKGRhdGEudG9rZW4pO1xuICAgICAgICAgIHJlc29sdmUoZGF0YS50b2tlbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2Vzc2lvblRva2VuU2hhcmVDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCByZWNlaXZlU2Vzc2lvblRva2VuKTtcblxuICAgICAgc2Vzc2lvblRva2VuU2hhcmVDaGFubmVsLnBvc3RNZXNzYWdlKHsgdHlwZTogJ3JlcXVlc3QnIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShzdG9yYWdlVG9rZW4pO1xufVxuXG5mdW5jdGlvbiBzZXR1cFJlcXVlc3RTZXNzaW9uVG9rZW5DaGFubmVsKCkge1xuICBpZiAoc2Vzc2lvblRva2VuU2hhcmVDaGFubmVsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc2Vzc2lvblRva2VuU2hhcmVDaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoU0VTU0lPTl9UT0tFTl9TSEFSRV9DSEFOTkVMKTtcblxuICBzZXNzaW9uVG9rZW5TaGFyZUNoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICAnbWVzc2FnZScsXG4gICAgKHsgZGF0YSB9OiBNZXNzYWdlRXZlbnQ8U2Vzc2lvblRva2VuU2hhcmVEYXRhPikgPT4ge1xuICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ3JlcXVlc3QnKSB7XG4gICAgICAgIHNlc3Npb25Ub2tlblNoYXJlQ2hhbm5lbC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgdHlwZTogJ3Byb3ZpZGUnLFxuICAgICAgICAgIHRva2VuOiByZWFkU3RvcmFnZVRva2VuKCksXG4gICAgICAgIH0gYXMgU2Vzc2lvblRva2VuU2hhcmVEYXRhKTtcbiAgICAgIH1cbiAgICB9LFxuICApO1xufVxuXG5mdW5jdGlvbiBjbG9zZVJlcXVlc3RTZXNzaW9uVG9rZW5DaGFubmVsKCkge1xuICBpZiAoc2Vzc2lvblRva2VuU2hhcmVDaGFubmVsKSB7XG4gICAgc2Vzc2lvblRva2VuU2hhcmVDaGFubmVsLmNsb3NlKCk7XG4gICAgc2Vzc2lvblRva2VuU2hhcmVDaGFubmVsID0gbnVsbDtcbiAgfVxufVxuIl19
@@ -80,11 +80,11 @@ export class ClusterSelectorComponent {
80
80
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(6, 3, "cluster"), " ");
81
81
  i0.ɵɵadvance(3);
82
82
  i0.ɵɵtextInterpolate(ctx.value);
83
- } }, styles: ["[_nghost-%COMP%]{display:flex}[_nghost-%COMP%] .icon-wrapper{position:relative;display:flex;justify-content:center;align-items:center;width:16px;height:16px;flex-shrink:0;font-size:var(--aui-icon-size-m)}:root [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}html[aui-theme-mode=light] [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}}html[aui-theme-mode=dark] [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}[_nghost-%COMP%] .with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}[_nghost-%COMP%] .with-colon:after{content:\":\";margin-right:8px}[_nghost-%COMP%] .text-truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}[_nghost-%COMP%] .acl-resource-selector{user-select:none;display:flex;color:var(--acl-page-header-title-color);cursor:pointer;padding:0 8px}[_nghost-%COMP%] .acl-resource-selector .selected-name{color:var(--acl-page-header-text-color)}[_nghost-%COMP%] .acl-resource-selector--active, [_nghost-%COMP%] .acl-resource-selector:hover{background-color:rgb(var(--aui-color-primary));color:#fff;border-radius:2px}:root [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, :root [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}html[aui-theme-mode=light] [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, html[aui-theme-mode=light] [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, html[aui-theme-mode=system] [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}}html[aui-theme-mode=dark] [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, html[aui-theme-mode=dark] [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}[_nghost-%COMP%] .acl-resource-selector--active .selected-name, [_nghost-%COMP%] .acl-resource-selector:hover .selected-name{color:#fff}[_nghost-%COMP%] .acl-resource-selector--lite{padding:0 4px}[_nghost-%COMP%] .acl-resource-selector--lite:hover{background-color:rgb(var(--aui-color-b-6))}[_nghost-%COMP%] .acl-resource-selector--lite:hover .selected-name, [_nghost-%COMP%] .acl-resource-selector--lite:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-n-2))}[_nghost-%COMP%] .acl-resource-selector--lite .acl-resource-selector__item{height:20px}[_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active:hover{background-color:rgb(var(--aui-color-b-5))}[_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active .selected-name, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active .acl-resource-selector__arrow, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active:hover .selected-name, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-primary))}[_nghost-%COMP%] .acl-resource-selector__item{margin-right:20px;height:32px;display:inline-flex;align-items:center;font-size:12px;max-width:270px}@media screen and (max-width: 1280px){[_nghost-%COMP%] .acl-resource-selector__item{max-width:178px;margin-right:8px}}[_nghost-%COMP%] .acl-resource-selector__item .icon-wrapper{margin-right:4px}[_nghost-%COMP%] .acl-resource-selector__arrow{margin-left:-16px;align-items:center;display:inline-flex;width:16px;justify-content:center}"], changeDetection: 0 }); }
83
+ } }, styles: ["[_nghost-%COMP%]{display:flex}[_nghost-%COMP%] .icon-wrapper{position:relative;display:flex;justify-content:center;align-items:center;width:16px;height:16px;flex-shrink:0;font-size:var(--aui-icon-size-m)}:root [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}html[aui-theme-mode=light] [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}}html[aui-theme-mode=dark] [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}[_nghost-%COMP%] .with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}[_nghost-%COMP%] .with-colon:after{content:\":\";margin-right:8px}[_nghost-%COMP%] .text-truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}[_nghost-%COMP%] .acl-resource-selector{user-select:none;display:flex;color:var(--acl-page-header-title-color);cursor:pointer;padding:0 8px}[_nghost-%COMP%] .acl-resource-selector .selected-name{color:var(--acl-page-header-text-color)}[_nghost-%COMP%] .acl-resource-selector--active, [_nghost-%COMP%] .acl-resource-selector:hover{background-color:rgb(var(--aui-color-primary));color:#fff;border-radius:2px}:root [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, :root [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}html[aui-theme-mode=light] [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, html[aui-theme-mode=light] [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, html[aui-theme-mode=system] [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}}html[aui-theme-mode=dark] [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, html[aui-theme-mode=dark] [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}[_nghost-%COMP%] .acl-resource-selector--active .selected-name, [_nghost-%COMP%] .acl-resource-selector:hover .selected-name{color:#fff}[_nghost-%COMP%] .acl-resource-selector--lite{padding:0 4px}[_nghost-%COMP%] .acl-resource-selector--lite:hover{background-color:rgb(var(--aui-color-b-6))}[_nghost-%COMP%] .acl-resource-selector--lite:hover .selected-name, [_nghost-%COMP%] .acl-resource-selector--lite:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-n-2))}[_nghost-%COMP%] .acl-resource-selector--lite .acl-resource-selector__item{height:20px}[_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active:hover{background-color:rgb(var(--aui-color-b-5))}[_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active .selected-name, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active .acl-resource-selector__arrow, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active:hover .selected-name, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-primary))}[_nghost-%COMP%] .acl-resource-selector__item{margin-right:20px;height:32px;display:inline-flex;align-items:center;font-size:12px;max-width:270px}@media screen and (max-width: 1280px){[_nghost-%COMP%] .acl-resource-selector__item{max-width:178px;margin-right:8px}}[_nghost-%COMP%] .acl-resource-selector__item .icon-wrapper{margin-right:4px}[_nghost-%COMP%] .acl-resource-selector__arrow{margin-left:-16px;align-items:center;display:inline-flex;width:16px;justify-content:center}@media screen and (max-width: 1280px){[_nghost-%COMP%] .acl-resource-selector__arrow{margin-left:-4px}}"], changeDetection: 0 }); }
84
84
  }
85
85
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ClusterSelectorComponent, [{
86
86
  type: Component,
87
- args: [{ selector: 'acl-cluster-selector', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"acl-resource-selector\"\n [ngClass]=\"{ 'acl-resource-selector--active': isActive }\"\n (click)=\"openPopup()\"\n>\n <div class=\"acl-resource-selector__item project\">\n <span class=\"icon-wrapper tw-flex\">\n <aui-icon icon=\"bicolor:server\"></aui-icon>\n </span>\n <span class=\"with-colon\">\n {{ 'cluster' | translate }}\n </span>\n <span class=\"selected-name text-truncate\">{{ value }}</span>\n </div>\n <div class=\"acl-resource-selector__arrow\">\n <aui-icon icon=\"caret_down_s\"></aui-icon>\n </div>\n</div>\n\n<ng-template #popup>\n <acl-cluster-list\n [context]=\"'popup'\"\n [fields]=\"fields || displayFields\"\n (selectItem)=\"onSelect($event)\"\n [value]=\"value\"\n ></acl-cluster-list>\n</ng-template>\n", styles: [":host{display:flex}:host::ng-deep .icon-wrapper{position:relative;display:flex;justify-content:center;align-items:center;width:16px;height:16px;flex-shrink:0;font-size:var(--aui-icon-size-m)}:root :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}html[aui-theme-mode=light] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}}html[aui-theme-mode=dark] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}:host::ng-deep .with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}:host::ng-deep .with-colon:after{content:\":\";margin-right:8px}:host::ng-deep .text-truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host::ng-deep .acl-resource-selector{user-select:none;display:flex;color:var(--acl-page-header-title-color);cursor:pointer;padding:0 8px}:host::ng-deep .acl-resource-selector .selected-name{color:var(--acl-page-header-text-color)}:host::ng-deep .acl-resource-selector--active,:host::ng-deep .acl-resource-selector:hover{background-color:rgb(var(--aui-color-primary));color:#fff;border-radius:2px}:root :host::ng-deep .acl-resource-selector--active .icon-wrapper,:root :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}html[aui-theme-mode=light] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=light] :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=system] :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}}html[aui-theme-mode=dark] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=dark] :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}:host::ng-deep .acl-resource-selector--active .selected-name,:host::ng-deep .acl-resource-selector:hover .selected-name{color:#fff}:host::ng-deep .acl-resource-selector--lite{padding:0 4px}:host::ng-deep .acl-resource-selector--lite:hover{background-color:rgb(var(--aui-color-b-6))}:host::ng-deep .acl-resource-selector--lite:hover .selected-name,:host::ng-deep .acl-resource-selector--lite:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-n-2))}:host::ng-deep .acl-resource-selector--lite .acl-resource-selector__item{height:20px}:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active:hover{background-color:rgb(var(--aui-color-b-5))}:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active .selected-name,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active .acl-resource-selector__arrow,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active:hover .selected-name,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-primary))}:host::ng-deep .acl-resource-selector__item{margin-right:20px;height:32px;display:inline-flex;align-items:center;font-size:12px;max-width:270px}@media screen and (max-width: 1280px){:host::ng-deep .acl-resource-selector__item{max-width:178px;margin-right:8px}}:host::ng-deep .acl-resource-selector__item .icon-wrapper{margin-right:4px}:host::ng-deep .acl-resource-selector__arrow{margin-left:-16px;align-items:center;display:inline-flex;width:16px;justify-content:center}\n"] }]
87
+ args: [{ selector: 'acl-cluster-selector', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"acl-resource-selector\"\n [ngClass]=\"{ 'acl-resource-selector--active': isActive }\"\n (click)=\"openPopup()\"\n>\n <div class=\"acl-resource-selector__item project\">\n <span class=\"icon-wrapper tw-flex\">\n <aui-icon icon=\"bicolor:server\"></aui-icon>\n </span>\n <span class=\"with-colon\">\n {{ 'cluster' | translate }}\n </span>\n <span class=\"selected-name text-truncate\">{{ value }}</span>\n </div>\n <div class=\"acl-resource-selector__arrow\">\n <aui-icon icon=\"caret_down_s\"></aui-icon>\n </div>\n</div>\n\n<ng-template #popup>\n <acl-cluster-list\n [context]=\"'popup'\"\n [fields]=\"fields || displayFields\"\n (selectItem)=\"onSelect($event)\"\n [value]=\"value\"\n ></acl-cluster-list>\n</ng-template>\n", styles: [":host{display:flex}:host::ng-deep .icon-wrapper{position:relative;display:flex;justify-content:center;align-items:center;width:16px;height:16px;flex-shrink:0;font-size:var(--aui-icon-size-m)}:root :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}html[aui-theme-mode=light] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}}html[aui-theme-mode=dark] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}:host::ng-deep .with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}:host::ng-deep .with-colon:after{content:\":\";margin-right:8px}:host::ng-deep .text-truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host::ng-deep .acl-resource-selector{user-select:none;display:flex;color:var(--acl-page-header-title-color);cursor:pointer;padding:0 8px}:host::ng-deep .acl-resource-selector .selected-name{color:var(--acl-page-header-text-color)}:host::ng-deep .acl-resource-selector--active,:host::ng-deep .acl-resource-selector:hover{background-color:rgb(var(--aui-color-primary));color:#fff;border-radius:2px}:root :host::ng-deep .acl-resource-selector--active .icon-wrapper,:root :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}html[aui-theme-mode=light] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=light] :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=system] :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}}html[aui-theme-mode=dark] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=dark] :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}:host::ng-deep .acl-resource-selector--active .selected-name,:host::ng-deep .acl-resource-selector:hover .selected-name{color:#fff}:host::ng-deep .acl-resource-selector--lite{padding:0 4px}:host::ng-deep .acl-resource-selector--lite:hover{background-color:rgb(var(--aui-color-b-6))}:host::ng-deep .acl-resource-selector--lite:hover .selected-name,:host::ng-deep .acl-resource-selector--lite:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-n-2))}:host::ng-deep .acl-resource-selector--lite .acl-resource-selector__item{height:20px}:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active:hover{background-color:rgb(var(--aui-color-b-5))}:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active .selected-name,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active .acl-resource-selector__arrow,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active:hover .selected-name,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-primary))}:host::ng-deep .acl-resource-selector__item{margin-right:20px;height:32px;display:inline-flex;align-items:center;font-size:12px;max-width:270px}@media screen and (max-width: 1280px){:host::ng-deep .acl-resource-selector__item{max-width:178px;margin-right:8px}}:host::ng-deep .acl-resource-selector__item .icon-wrapper{margin-right:4px}:host::ng-deep .acl-resource-selector__arrow{margin-left:-16px;align-items:center;display:inline-flex;width:16px;justify-content:center}@media screen and (max-width: 1280px){:host::ng-deep .acl-resource-selector__arrow{margin-left:-4px}}\n"] }]
88
88
  }], function () { return [{ type: i1.ResourceSelectorPopupService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, { popupTemplate: [{
89
89
  type: ViewChild,
90
90
  args: ['popup', { static: true }]
@@ -78,11 +78,11 @@ export class ServiceMeshGroupSelectorComponent {
78
78
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(6, 3, "service_meshes"), " ");
79
79
  i0.ɵɵadvance(3);
80
80
  i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(9, 5, ctx.value));
81
- } }, styles: ["[_nghost-%COMP%]{display:flex}[_nghost-%COMP%] .icon-wrapper{position:relative;display:flex;justify-content:center;align-items:center;width:16px;height:16px;flex-shrink:0;font-size:var(--aui-icon-size-m)}:root [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}html[aui-theme-mode=light] [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}}html[aui-theme-mode=dark] [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}[_nghost-%COMP%] .with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}[_nghost-%COMP%] .with-colon:after{content:\":\";margin-right:8px}[_nghost-%COMP%] .text-truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}[_nghost-%COMP%] .acl-resource-selector{user-select:none;display:flex;color:var(--acl-page-header-title-color);cursor:pointer;padding:0 8px}[_nghost-%COMP%] .acl-resource-selector .selected-name{color:var(--acl-page-header-text-color)}[_nghost-%COMP%] .acl-resource-selector--active, [_nghost-%COMP%] .acl-resource-selector:hover{background-color:rgb(var(--aui-color-primary));color:#fff;border-radius:2px}:root [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, :root [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}html[aui-theme-mode=light] [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, html[aui-theme-mode=light] [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, html[aui-theme-mode=system] [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}}html[aui-theme-mode=dark] [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, html[aui-theme-mode=dark] [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}[_nghost-%COMP%] .acl-resource-selector--active .selected-name, [_nghost-%COMP%] .acl-resource-selector:hover .selected-name{color:#fff}[_nghost-%COMP%] .acl-resource-selector--lite{padding:0 4px}[_nghost-%COMP%] .acl-resource-selector--lite:hover{background-color:rgb(var(--aui-color-b-6))}[_nghost-%COMP%] .acl-resource-selector--lite:hover .selected-name, [_nghost-%COMP%] .acl-resource-selector--lite:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-n-2))}[_nghost-%COMP%] .acl-resource-selector--lite .acl-resource-selector__item{height:20px}[_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active:hover{background-color:rgb(var(--aui-color-b-5))}[_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active .selected-name, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active .acl-resource-selector__arrow, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active:hover .selected-name, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-primary))}[_nghost-%COMP%] .acl-resource-selector__item{margin-right:20px;height:32px;display:inline-flex;align-items:center;font-size:12px;max-width:270px}@media screen and (max-width: 1280px){[_nghost-%COMP%] .acl-resource-selector__item{max-width:178px;margin-right:8px}}[_nghost-%COMP%] .acl-resource-selector__item .icon-wrapper{margin-right:4px}[_nghost-%COMP%] .acl-resource-selector__arrow{margin-left:-16px;align-items:center;display:inline-flex;width:16px;justify-content:center}"], changeDetection: 0 }); }
81
+ } }, styles: ["[_nghost-%COMP%]{display:flex}[_nghost-%COMP%] .icon-wrapper{position:relative;display:flex;justify-content:center;align-items:center;width:16px;height:16px;flex-shrink:0;font-size:var(--aui-icon-size-m)}:root [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}html[aui-theme-mode=light] [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}}html[aui-theme-mode=dark] [_nghost-%COMP%] .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}[_nghost-%COMP%] .with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}[_nghost-%COMP%] .with-colon:after{content:\":\";margin-right:8px}[_nghost-%COMP%] .text-truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}[_nghost-%COMP%] .acl-resource-selector{user-select:none;display:flex;color:var(--acl-page-header-title-color);cursor:pointer;padding:0 8px}[_nghost-%COMP%] .acl-resource-selector .selected-name{color:var(--acl-page-header-text-color)}[_nghost-%COMP%] .acl-resource-selector--active, [_nghost-%COMP%] .acl-resource-selector:hover{background-color:rgb(var(--aui-color-primary));color:#fff;border-radius:2px}:root [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, :root [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}html[aui-theme-mode=light] [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, html[aui-theme-mode=light] [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, html[aui-theme-mode=system] [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}}html[aui-theme-mode=dark] [_nghost-%COMP%] .acl-resource-selector--active .icon-wrapper, html[aui-theme-mode=dark] [_nghost-%COMP%] .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}[_nghost-%COMP%] .acl-resource-selector--active .selected-name, [_nghost-%COMP%] .acl-resource-selector:hover .selected-name{color:#fff}[_nghost-%COMP%] .acl-resource-selector--lite{padding:0 4px}[_nghost-%COMP%] .acl-resource-selector--lite:hover{background-color:rgb(var(--aui-color-b-6))}[_nghost-%COMP%] .acl-resource-selector--lite:hover .selected-name, [_nghost-%COMP%] .acl-resource-selector--lite:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-n-2))}[_nghost-%COMP%] .acl-resource-selector--lite .acl-resource-selector__item{height:20px}[_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active:hover{background-color:rgb(var(--aui-color-b-5))}[_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active .selected-name, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active .acl-resource-selector__arrow, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active:hover .selected-name, [_nghost-%COMP%] .acl-resource-selector--lite.acl-resource-selector--active:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-primary))}[_nghost-%COMP%] .acl-resource-selector__item{margin-right:20px;height:32px;display:inline-flex;align-items:center;font-size:12px;max-width:270px}@media screen and (max-width: 1280px){[_nghost-%COMP%] .acl-resource-selector__item{max-width:178px;margin-right:8px}}[_nghost-%COMP%] .acl-resource-selector__item .icon-wrapper{margin-right:4px}[_nghost-%COMP%] .acl-resource-selector__arrow{margin-left:-16px;align-items:center;display:inline-flex;width:16px;justify-content:center}@media screen and (max-width: 1280px){[_nghost-%COMP%] .acl-resource-selector__arrow{margin-left:-4px}}"], changeDetection: 0 }); }
82
82
  }
83
83
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ServiceMeshGroupSelectorComponent, [{
84
84
  type: Component,
85
- args: [{ selector: 'acl-servicemesh-selector', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"acl-resource-selector\"\n [ngClass]=\"{ 'acl-resource-selector--active': isActive }\"\n (click)=\"openPopup()\"\n>\n <div class=\"acl-resource-selector__item project\">\n <span class=\"icon-wrapper tw-flex\">\n <aui-icon icon=\"bicolor:service_mesh\"></aui-icon>\n </span>\n <span class=\"with-colon\">\n {{ 'service_meshes' | translate }}\n </span>\n <span class=\"selected-name text-truncate\">{{\n value | aclFieldNotAvailable\n }}</span>\n </div>\n <div class=\"acl-resource-selector__arrow\">\n <aui-icon icon=\"caret_down_s\"></aui-icon>\n </div>\n</div>\n\n<ng-template #popup>\n <acl-mesh-group-list\n [context]=\"'popup'\"\n [fields]=\"fields || displayFields\"\n (selectItem)=\"onSelect($event)\"\n [value]=\"value\"\n ></acl-mesh-group-list>\n</ng-template>\n", styles: [":host{display:flex}:host::ng-deep .icon-wrapper{position:relative;display:flex;justify-content:center;align-items:center;width:16px;height:16px;flex-shrink:0;font-size:var(--aui-icon-size-m)}:root :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}html[aui-theme-mode=light] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}}html[aui-theme-mode=dark] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}:host::ng-deep .with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}:host::ng-deep .with-colon:after{content:\":\";margin-right:8px}:host::ng-deep .text-truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host::ng-deep .acl-resource-selector{user-select:none;display:flex;color:var(--acl-page-header-title-color);cursor:pointer;padding:0 8px}:host::ng-deep .acl-resource-selector .selected-name{color:var(--acl-page-header-text-color)}:host::ng-deep .acl-resource-selector--active,:host::ng-deep .acl-resource-selector:hover{background-color:rgb(var(--aui-color-primary));color:#fff;border-radius:2px}:root :host::ng-deep .acl-resource-selector--active .icon-wrapper,:root :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}html[aui-theme-mode=light] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=light] :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=system] :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}}html[aui-theme-mode=dark] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=dark] :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}:host::ng-deep .acl-resource-selector--active .selected-name,:host::ng-deep .acl-resource-selector:hover .selected-name{color:#fff}:host::ng-deep .acl-resource-selector--lite{padding:0 4px}:host::ng-deep .acl-resource-selector--lite:hover{background-color:rgb(var(--aui-color-b-6))}:host::ng-deep .acl-resource-selector--lite:hover .selected-name,:host::ng-deep .acl-resource-selector--lite:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-n-2))}:host::ng-deep .acl-resource-selector--lite .acl-resource-selector__item{height:20px}:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active:hover{background-color:rgb(var(--aui-color-b-5))}:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active .selected-name,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active .acl-resource-selector__arrow,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active:hover .selected-name,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-primary))}:host::ng-deep .acl-resource-selector__item{margin-right:20px;height:32px;display:inline-flex;align-items:center;font-size:12px;max-width:270px}@media screen and (max-width: 1280px){:host::ng-deep .acl-resource-selector__item{max-width:178px;margin-right:8px}}:host::ng-deep .acl-resource-selector__item .icon-wrapper{margin-right:4px}:host::ng-deep .acl-resource-selector__arrow{margin-left:-16px;align-items:center;display:inline-flex;width:16px;justify-content:center}\n"] }]
85
+ args: [{ selector: 'acl-servicemesh-selector', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"acl-resource-selector\"\n [ngClass]=\"{ 'acl-resource-selector--active': isActive }\"\n (click)=\"openPopup()\"\n>\n <div class=\"acl-resource-selector__item project\">\n <span class=\"icon-wrapper tw-flex\">\n <aui-icon icon=\"bicolor:service_mesh\"></aui-icon>\n </span>\n <span class=\"with-colon\">\n {{ 'service_meshes' | translate }}\n </span>\n <span class=\"selected-name text-truncate\">{{\n value | aclFieldNotAvailable\n }}</span>\n </div>\n <div class=\"acl-resource-selector__arrow\">\n <aui-icon icon=\"caret_down_s\"></aui-icon>\n </div>\n</div>\n\n<ng-template #popup>\n <acl-mesh-group-list\n [context]=\"'popup'\"\n [fields]=\"fields || displayFields\"\n (selectItem)=\"onSelect($event)\"\n [value]=\"value\"\n ></acl-mesh-group-list>\n</ng-template>\n", styles: [":host{display:flex}:host::ng-deep .icon-wrapper{position:relative;display:flex;justify-content:center;align-items:center;width:16px;height:16px;flex-shrink:0;font-size:var(--aui-icon-size-m)}:root :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}html[aui-theme-mode=light] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}}html[aui-theme-mode=dark] :host::ng-deep .icon-wrapper{--bicolor-main: rgb(var(--aui-color-primary));--bicolor-secondary: rgb(var(--aui-color-p-3))}:host::ng-deep .with-colon{display:inline-flex;word-break:keep-all;flex-shrink:0;font-weight:500}:host::ng-deep .with-colon:after{content:\":\";margin-right:8px}:host::ng-deep .text-truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host::ng-deep .acl-resource-selector{user-select:none;display:flex;color:var(--acl-page-header-title-color);cursor:pointer;padding:0 8px}:host::ng-deep .acl-resource-selector .selected-name{color:var(--acl-page-header-text-color)}:host::ng-deep .acl-resource-selector--active,:host::ng-deep .acl-resource-selector:hover{background-color:rgb(var(--aui-color-primary));color:#fff;border-radius:2px}:root :host::ng-deep .acl-resource-selector--active .icon-wrapper,:root :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}html[aui-theme-mode=light] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=light] :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: rgb(var(--aui-color-p-4))}@media (prefers-color-scheme: dark){html[aui-theme-mode=system] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=system] :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}}html[aui-theme-mode=dark] :host::ng-deep .acl-resource-selector--active .icon-wrapper,html[aui-theme-mode=dark] :host::ng-deep .acl-resource-selector:hover .icon-wrapper{--bicolor-main: white;--bicolor-secondary: #b3d7fc}:host::ng-deep .acl-resource-selector--active .selected-name,:host::ng-deep .acl-resource-selector:hover .selected-name{color:#fff}:host::ng-deep .acl-resource-selector--lite{padding:0 4px}:host::ng-deep .acl-resource-selector--lite:hover{background-color:rgb(var(--aui-color-b-6))}:host::ng-deep .acl-resource-selector--lite:hover .selected-name,:host::ng-deep .acl-resource-selector--lite:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-n-2))}:host::ng-deep .acl-resource-selector--lite .acl-resource-selector__item{height:20px}:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active:hover{background-color:rgb(var(--aui-color-b-5))}:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active .selected-name,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active .acl-resource-selector__arrow,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active:hover .selected-name,:host::ng-deep .acl-resource-selector--lite.acl-resource-selector--active:hover .acl-resource-selector__arrow{color:rgb(var(--aui-color-primary))}:host::ng-deep .acl-resource-selector__item{margin-right:20px;height:32px;display:inline-flex;align-items:center;font-size:12px;max-width:270px}@media screen and (max-width: 1280px){:host::ng-deep .acl-resource-selector__item{max-width:178px;margin-right:8px}}:host::ng-deep .acl-resource-selector__item .icon-wrapper{margin-right:4px}:host::ng-deep .acl-resource-selector__arrow{margin-left:-16px;align-items:center;display:inline-flex;width:16px;justify-content:center}@media screen and (max-width: 1280px){:host::ng-deep .acl-resource-selector__arrow{margin-left:-4px}}\n"] }]
86
86
  }], function () { return [{ type: i1.ResourceSelectorPopupService }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, { popupTemplate: [{
87
87
  type: ViewChild,
88
88
  args: ['popup', { static: true }]