valtech-components 4.0.141 → 4.0.142

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.
@@ -13,7 +13,7 @@ import { I18nService } from '../../../services/i18n';
13
13
  import { NavigationService } from '../../../services/navigation/navigation.service';
14
14
  import { OrgService } from '../../../services/org/org.service';
15
15
  import { connectPageRefresh } from '../../../services/page-refresh/page-refresh.service';
16
- import { PermissionCatalogService, createPermissionLabeler, } from '../../../services/org/permission-catalog.service';
16
+ import { PermissionCatalogService, createPermissionLabeler, groupPermissionsByScope, } from '../../../services/org/permission-catalog.service';
17
17
  import { PERMISSIONS_VIEW_I18N } from './permissions-view.i18n';
18
18
  import * as i0 from "@angular/core";
19
19
  const DEFAULT_NAMESPACE = 'Settings.Permissions';
@@ -102,9 +102,6 @@ export class PermissionsViewComponent {
102
102
  catalog: this.catalog.getCatalog(orgId),
103
103
  }).subscribe({
104
104
  next: ({ roles: rawRoles, catalog }) => {
105
- const byResource = new Map();
106
- for (const r of catalog.permissions)
107
- byResource.set(r.resource, r);
108
105
  const currentAppId = catalog.appId;
109
106
  // Labeler con la SSOT del backend (labels del catálogo) — reemplaza el
110
107
  // mapa hardcodeado `perm*`. Locale del momento de carga (igual que antes:
@@ -118,7 +115,7 @@ export class PermissionsViewComponent {
118
115
  description: r.description,
119
116
  permissions: r.permissions ?? [],
120
117
  isSystem: r.isSystem ?? false,
121
- }, byResource, currentAppId, labeler)));
118
+ }, catalog, currentAppId, labeler)));
122
119
  this.loading.set(false);
123
120
  },
124
121
  error: err => {
@@ -127,64 +124,13 @@ export class PermissionsViewComponent {
127
124
  },
128
125
  });
129
126
  }
130
- buildRoleView(role, byResource, currentAppId, labeler) {
131
- const appPerms = [];
132
- const orgPerms = [];
133
- const otherByApp = new Map();
134
- for (const perm of role.permissions) {
135
- const [resource] = perm.split(':');
136
- const entry = byResource.get(resource);
137
- // Sin entrada en el catálogo (el backend omite los recursos internal para
138
- // no-platform-admins) o entrada internal → NUNCA se muestra a nivel de
139
- // producto. Defensa en profundidad junto al filtro del backend (ADR-024).
140
- // Nota: el rol puede traer el permiso aunque el recurso esté filtrado del
141
- // catálogo (ej. admin tiene templates:*); por eso se descarta lo no resuelto.
142
- if (!entry || entry.scope === 'internal') {
143
- continue;
144
- }
145
- const label = labeler(perm);
146
- if (entry.scope === 'app') {
147
- if (entry.appId === currentAppId) {
148
- appPerms.push(label);
149
- }
150
- else {
151
- const appId = entry.appId ?? '?';
152
- const arr = otherByApp.get(appId) ?? [];
153
- arr.push(label);
154
- otherByApp.set(appId, arr);
155
- }
156
- }
157
- else {
158
- // scope === 'org' → gestión de la organización del cliente
159
- orgPerms.push(label);
160
- }
161
- }
162
- const groups = [];
163
- if (appPerms.length) {
164
- groups.push({
165
- key: 'app',
166
- label: this.tt('groupApp'),
167
- scope: 'app',
168
- perms: appPerms,
169
- });
170
- }
171
- if (orgPerms.length) {
172
- groups.push({
173
- key: 'org',
174
- label: this.tt('groupOrg'),
175
- scope: 'org',
176
- perms: orgPerms,
177
- });
178
- }
179
- for (const [appId, perms] of otherByApp) {
180
- groups.push({
181
- key: `other:${appId}`,
182
- label: `${this.tt('groupOther')}: ${this.appLabel(appId)}`,
183
- scope: 'other',
184
- appId,
185
- perms,
186
- });
187
- }
127
+ buildRoleView(role, catalog, currentAppId, labeler) {
128
+ const groups = groupPermissionsByScope(role.permissions, catalog, currentAppId, labeler, {
129
+ app: this.tt('groupApp'),
130
+ org: this.tt('groupOrg'),
131
+ other: this.tt('groupOther'),
132
+ appLabel: (appId) => this.appLabel(appId),
133
+ });
188
134
  return {
189
135
  id: role.id,
190
136
  name: role.name,
@@ -526,4 +472,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
526
472
  }], isModal: [{
527
473
  type: Input
528
474
  }] } });
529
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3Blcm1pc3Npb25zLXZpZXcvcGVybWlzc2lvbnMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDcEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3pGLE9BQU8s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Ozs7R0FzSlQsd3lEQXZKUyx1QkFBdUIsbUZBQUUsZ0JBQWdCLDJFQUFFLGFBQWEsd0hBQUUsY0FBYyx5RUFBRSxhQUFhLHdFQUFFLGVBQWU7OzRGQXVRdkcsd0JBQXdCO2tCQTFRcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLFlBQ3pHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzSlQ7d0RBNkhRLE1BQU07c0JBQWQsS0FBSztnQkFNRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIElucHV0LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNrZWxldG9uTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2tlbGV0b24tbGF5b3V0L3NrZWxldG9uLWxheW91dC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3BpbGwvcGlsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90aXRsZS90aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTWV0YWRhdGEsIENvbXBvbmVudFN0YXRlcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPcmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL29yZy5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbm5lY3RQYWdlUmVmcmVzaCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtcmVmcmVzaC9wYWdlLXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQge1xuICBQZXJtaXNzaW9uQ2F0YWxvZ1NlcnZpY2UsXG4gIFBlcm1pc3Npb25SZXNvdXJjZSxcbiAgUGVybWlzc2lvbkxhYmVsZXIsXG4gIGNyZWF0ZVBlcm1pc3Npb25MYWJlbGVyLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmcvcGVybWlzc2lvbi1jYXRhbG9nLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQZXJtaXNzaW9uc1ZpZXdDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFBFUk1JU1NJT05TX1ZJRVdfSTE4TiB9IGZyb20gJy4vcGVybWlzc2lvbnMtdmlldy5pMThuJztcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuUGVybWlzc2lvbnMnO1xuXG5pbnRlcmZhY2UgUGVybUdyb3VwVmlldyB7XG4gIGtleTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICAvKiogQWxjYW5jZSBkZWwgZ3J1cG86ICdhcHAnIChhcHAgYWN0dWFsKSDCtyAnb3JnJyAoZ2VuZXJhbCkgwrcgJ290aGVyJyAob3RyYSBhcHApLiAqL1xuICBzY29wZTogJ2FwcCcgfCAnb3JnJyB8ICdvdGhlcic7XG4gIC8qKiBBcHBJZCBkZSBsYSBvdHJhIGFwcCAoc29sbyBjdWFuZG8gc2NvcGUgPT09ICdvdGhlcicpLiAqL1xuICBhcHBJZD86IHN0cmluZztcbiAgcGVybXM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgUm9sZVZpZXcge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpc1N5c3RlbTogYm9vbGVhbjtcbiAgZ3JvdXBzOiBQZXJtR3JvdXBWaWV3W107XG4gIGhhc1Blcm1zOiBib29sZWFuO1xufVxuXG4vKipcbiAqIGB2YWwtcGVybWlzc2lvbnMtdmlld2Ag4oCUIHZpc3RhIFBlcm1pc29zIGZ1bGwtZmVhdHVyZSBhdXRvY29udGVuaWRhIChvcmdhbmlzbSkuXG4gKiBWaXNvciBSQkFDIGRlIHNvbG8gbGVjdHVyYTogbXVlc3RyYSBsb3Mgcm9sZXMgZGVsIHNpc3RlbWEgKFZpc29yL0VkaXRvci9BZG1pbiArXG4gKiByb2xlcyBkZSBwbGF0YWZvcm1hKSB5IGxvcyByb2xlcyBwZXJzb25hbGl6YWRvcyBkZSBsYSBvcmcgYWN0aXZhLCBjb24gZWxcbiAqIGNhdMOhbG9nbyBkZSBwZXJtaXNvcyBhZ3J1cGFkbyBwb3IgYWxjYW5jZSAoYXBwIGFjdHVhbCAvIHBsYXRhZm9ybWEgLyBvdHJhcyBhcHBzKS5cbiAqIFByb21vdmlkYSBkZXNkZSBgc2hvd2Nhc2VgIGJham8gZWwgcHJvY2VzbyBkZSBBRFItMDIxLlxuICpcbiAqICoqUkJBQyBpbnRlcm5vKiogKGNvbW8gYG9yZ2FuaXphdGlvbi12aWV3YCk6IGxlZSBsYSBvcmcgYWN0aXZhIHbDrWFcbiAqIGBBdXRoU2VydmljZS51c2VyKCkuYWN0aXZlT3JnSWRgLiBMYSB2aXN0YSBOTyBtdXRhIG5hZGEg4oCUIGVsIGNvbnRyb2wgZGUgcXVpw6luXG4gKiBwdWVkZSB2ZXJsYSBlcyByZXNwb25zYWJpbGlkYWQgZGVsIGd1YXJkIGRlIHJ1dGEgZGVsIGNvbnN1bWVyOyBubyBoYXkgZ2F0aW5nXG4gKiBmaW5vIGludGVybm8gbmkgc2UgZXhwb25lIGNvbW8gY29uZmlnLlxuICpcbiAqIERhdG9zOiBgZm9ya0pvaW5gIGRlIGBPcmdTZXJ2aWNlLmxpc3RPcmdSb2xlcyhvcmdJZClgIChyb2xlcyBkZSBsYSBvcmcpICtcbiAqIGBQZXJtaXNzaW9uQ2F0YWxvZ1NlcnZpY2UuZ2V0Q2F0YWxvZyhvcmdJZClgIChjYXTDoWxvZ28gKyBhcHBJZCBhY3R1YWwpLiBFbFxuICogY2F0w6Fsb2dvIGRlZmluZSBlbCBhbGNhbmNlIChgc2NvcGVgL2BhcHBJZGApIGRlIGNhZGEgcmVjdXJzbyBwYXJhIGFncnVwYXIuXG4gKlxuICogTk8gcmVuZGVyaXphIGlvbi1jb250ZW50IOKAlCB2aXZlIGRlbnRybyBkZSB2YWwtcGFnZS13cmFwcGVyLiBgQWN0aXZhdGVkUm91dGVgIHNlXG4gKiBpbnllY3RhIGB7IG9wdGlvbmFsOiB0cnVlIH1gIHNvbG8gcGFyYSBsZWVyIGVsIHJvdXRlIGRhdGEgZGUgY29uZmlnLiBBdXRvLXJlZ2lzdHJhXG4gKiBzdXMgZGVmYXVsdHMgaTE4biAoZXMvZW4pIHNpIGVsIGNvbnN1bWVyIG5vIHByb3ZlecOzIGVsIG5hbWVzcGFjZSAoZGVmYXVsdFxuICogYFNldHRpbmdzLlBlcm1pc3Npb25zYCkuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1wZXJtaXNzaW9ucy12aWV3JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1NrZWxldG9uTGF5b3V0Q29tcG9uZW50LCBEaXNwbGF5Q29tcG9uZW50LCBQaWxsQ29tcG9uZW50LCBUaXRsZUNvbXBvbmVudCwgVGV4dENvbXBvbmVudCwgQnV0dG9uQ29tcG9uZW50XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicGFnZVwiPlxuICAgICAgPGhlYWRlciBjbGFzcz1cInBhZ2UtaGVhZGVyXCI+XG4gICAgICAgIDx2YWwtZGlzcGxheSBbcHJvcHNdPVwieyBzaXplOiAnc21hbGwnLCBjb2xvcjogJ2RhcmsnLCBjb250ZW50OiB0dCgncGFnZVRpdGxlJykgfVwiIC8+XG4gICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgc2l6ZTogJ2xhcmdlJyxcbiAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdwYWdlRGVzY3JpcHRpb24nKSxcbiAgICAgICAgICB9XCJcbiAgICAgICAgLz5cbiAgICAgIDwvaGVhZGVyPlxuXG4gICAgICBAaWYgKGxvYWRpbmcoKSkge1xuICAgICAgICA8dmFsLXNrZWxldG9uLWxheW91dCBbcHJvcHNdPVwieyBwcmVzZXQ6ICdsaXN0Jywgcm93czogNCB9XCIgLz5cbiAgICAgIH0gQGVsc2UgaWYgKGxvYWRFcnJvcigpKSB7XG4gICAgICAgIDxkaXYgY2xhc3M9XCJlcnJvci1yb3dcIj5cbiAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdlcnJvclRpdGxlJyksXG4gICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8dmFsLWJ1dHRvbiBbcHJvcHNdPVwicmV0cnlCdXR0b25Qcm9wcygpXCIgKGNsaWNrKT1cImxvYWQoKVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93U3lzdGVtUm9sZXMpIHtcbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInBlcm0tc2VjdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm0tc2VjdGlvbl9faGVhZGVyXCI+XG4gICAgICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdzeXN0ZW1Sb2xlc1RpdGxlJyksXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnc3lzdGVtUm9sZXNIaW50JyksXG4gICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm9sZS1saXN0XCI+XG4gICAgICAgICAgICAgIEBmb3IgKHJvbGUgb2Ygc3lzdGVtUm9sZXMoKTsgdHJhY2sgcm9sZS5pZCkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLWNhcmRfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJvbGUtY2FyZF9fbmFtZVwiPnt7IHJvbGVMYWJlbChyb2xlLm5hbWUpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8dmFsLXBpbGxcbiAgICAgICAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHR0KCdzeXN0ZW1CYWRnZScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdwcmltYXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodDogJ2JvbGQnLFxuICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICBAaWYgKHJvbGUuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyb2xlLWNhcmRfX2Rlc2NcIj57eyByb2xlLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGlmICghcm9sZS5oYXNQZXJtcykge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybS1jaGlwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybS1jaGlwIHBlcm0tY2hpcC0tZW1wdHlcIj57eyB0dCgnbm9QZXJtaXNzaW9ucycpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBAZm9yIChnIG9mIHJvbGUuZ3JvdXBzOyB0cmFjayBnLmtleSkge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidwZXJtLWdyb3VwIHBlcm0tZ3JvdXAtLScgKyBnLnNjb3BlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBlcm0tZ3JvdXBfX2JhZGdlXCI+e3sgZy5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtLWNoaXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHAgb2YgZy5wZXJtczsgdHJhY2sgcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybS1jaGlwXCI+e3sgcCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIChyZXNvbHZlZENvbmZpZygpLnNob3dDdXN0b21Sb2xlcykge1xuICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwicGVybS1zZWN0aW9uXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybS1zZWN0aW9uX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHZhbC10aXRsZVxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnZGFyaycsXG4gICAgICAgICAgICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ2N1c3RvbVJvbGVzVGl0bGUnKSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdjdXN0b21Sb2xlc0hpbnQnKSxcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoY3VzdG9tUm9sZXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdub0N1c3RvbVJvbGVzJyksXG4gICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLWxpc3RcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChyb2xlIG9mIGN1c3RvbVJvbGVzKCk7IHRyYWNrIHJvbGUuaWQpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLWNhcmRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvbGUtY2FyZF9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyb2xlLWNhcmRfX25hbWVcIj57eyByb2xlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICBAaWYgKHJvbGUuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJvbGUtY2FyZF9fZGVzY1wiPnt7IHJvbGUuZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmICghcm9sZS5oYXNQZXJtcykge1xuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtLWNoaXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBlcm0tY2hpcCBwZXJtLWNoaXAtLWVtcHR5XCI+e3sgdHQoJ25vUGVybWlzc2lvbnMnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgQGZvciAoZyBvZiByb2xlLmdyb3VwczsgdHJhY2sgZy5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW2NsYXNzXT1cIidwZXJtLWdyb3VwIHBlcm0tZ3JvdXAtLScgKyBnLnNjb3BlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybS1ncm91cF9fYmFkZ2VcIj57eyBnLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybS1jaGlwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKHAgb2YgZy5wZXJtczsgdHJhY2sgcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJtLWNoaXBcIj57eyBwIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlczogW1xuICAgIGBcbiAgICAgIC5wYWdlIHtcbiAgICAgICAgcGFkZGluZzogMTZweCAwO1xuICAgICAgICBtYXgtd2lkdGg6IDcyMHB4O1xuICAgICAgICBtYXJnaW46IDAgYXV0bztcbiAgICAgIH1cbiAgICAgIC5wYWdlLWhlYWRlciB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gICAgICB9XG4gICAgICAuc3Bpbm5lci1yb3csXG4gICAgICAuZXJyb3Itcm93IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiAxNnB4O1xuICAgICAgICBwYWRkaW5nOiAzMnB4IDA7XG4gICAgICB9XG4gICAgICAucGVybS1zZWN0aW9uIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDtcbiAgICAgIH1cbiAgICAgIC5wZXJtLXNlY3Rpb25fX2hlYWRlciB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7XG4gICAgICB9XG4gICAgICAucm9sZS1saXN0IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLnJvbGUtY2FyZCB7XG4gICAgICAgIGJvcmRlcjogMS41cHggc29saWQgdmFyKC0taW9uLWNvbG9yLWxpZ2h0KTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDtcbiAgICAgICAgcGFkZGluZzogMTRweCAxNnB4O1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDEwcHg7XG4gICAgICB9XG4gICAgICAucm9sZS1jYXJkX19oZWFkZXIge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDhweDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgfVxuICAgICAgLnJvbGUtY2FyZF9fbmFtZSB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC45Mzc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLWRhcmspO1xuICAgICAgfVxuICAgICAgLnJvbGUtY2FyZF9fZGVzYyB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC44MTI1cmVtO1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgICB9XG4gICAgICAucGVybS1ncm91cCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgfVxuICAgICAgLyogQmFkZ2UgZGUgYWxjYW5jZSBkZWwgZ3J1cG8g4oCUIGNvbG9yIGNvbXVuaWNhIHNpIGVsIHBlcm1pc28gZXMgZ2VuZXJhbCxcbiAgICAgICAgIGRlIGxhIGFwcCBhY3R1YWwsIG8gZGUgb3RyYSBhcHAgKGFudGVzIGVyYSB1biBsYWJlbCBncmlzIHBsYW5vKS4gKi9cbiAgICAgIC5wZXJtLWdyb3VwX19iYWRnZSB7XG4gICAgICAgIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBnYXA6IDRweDtcbiAgICAgICAgZm9udC1zaXplOiAwLjY4NzVyZW07XG4gICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA0ZW07XG4gICAgICAgIHBhZGRpbmc6IDNweCA5cHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWdyb3VwLS1hcHAgLnBlcm0tZ3JvdXBfX2JhZGdlIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1wcmltYXJ5KTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1pb24tY29sb3ItcHJpbWFyeS1yZ2IpLCAwLjEyKTtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWdyb3VwLS1vcmcgLnBlcm0tZ3JvdXBfX2JhZGdlIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0tc2hhZGUsIHZhcigtLWlvbi1jb2xvci1tZWRpdW0pKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0LXNoYWRlLCByZ2JhKDAsIDAsIDAsIDAuMDYpKTtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWdyb3VwLS1vdGhlciAucGVybS1ncm91cF9fYmFkZ2Uge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLXRlcnRpYXJ5KTtcbiAgICAgICAgYmFja2dyb3VuZDogcmdiYSh2YXIoLS1pb24tY29sb3ItdGVydGlhcnktcmdiKSwgMC4xMik7XG4gICAgICB9XG4gICAgICAucGVybS1jaGlwcyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgZ2FwOiA2cHg7XG4gICAgICB9XG4gICAgICAucGVybS1jaGlwIHtcbiAgICAgICAgZm9udC1zaXplOiAwLjc1cmVtO1xuICAgICAgICBwYWRkaW5nOiAzcHggMTBweDtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0taW9uLWNvbG9yLWxpZ2h0KTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC8qIFRpbnRlIHN1dGlsIGRlIGxvcyBjaGlwcyBzZWfDum4gYWxjYW5jZSwgZW4gbMOtbmVhIGNvbiBlbCBiYWRnZS4gKi9cbiAgICAgIC5wZXJtLWdyb3VwLS1hcHAgLnBlcm0tY2hpcCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0taW9uLWNvbG9yLXByaW1hcnktcmdiKSwgMC4wOCk7XG4gICAgICB9XG4gICAgICAucGVybS1ncm91cC0tb3RoZXIgLnBlcm0tY2hpcCB7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0taW9uLWNvbG9yLXRlcnRpYXJ5LXJnYiksIDAuMDgpO1xuICAgICAgfVxuICAgICAgLnBlcm0tY2hpcC0tZW1wdHkge1xuICAgICAgICBjb2xvcjogdmFyKC0taW9uLWNvbG9yLW1lZGl1bSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB9XG4gICAgYCxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUGVybWlzc2lvbnNWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBpMThuID0gaW5qZWN0KEkxOG5TZXJ2aWNlKTtcbiAgcHJpdmF0ZSBvcmdTZXJ2aWNlID0gaW5qZWN0KE9yZ1NlcnZpY2UpO1xuICBwcml2YXRlIGNhdGFsb2cgPSBpbmplY3QoUGVybWlzc2lvbkNhdGFsb2dTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBuYXYgPSBpbmplY3QoTmF2aWdhdGlvblNlcnZpY2UpO1xuICBwcml2YXRlIHJvdXRlID0gaW5qZWN0KEFjdGl2YXRlZFJvdXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIC8qKlxuICAgKiBDb25maWcgdsOtYSBASW5wdXQgKG9iamVjdC1maXJzdCkuIFNpIG5vIHNlIHBhc2EsIHNlIGNhZSBhbCByb3V0ZSBkYXRhXG4gICAqIGBwZXJtaXNzaW9uc0NvbmZpZ2AgKHBvYmxhZG8gcG9yIGBwcm92aWRlVmFsdGVjaFBlcm1pc3Npb25zUm91dGVzYCkuXG4gICAqIGByZXNvbHZlZENvbmZpZ2AgbWVyZ2VhIGNvbiBsb3MgZGVmYXVsdHMg4oCUIGBASW5wdXRgIGdhbmEgc29icmUgcm91dGUgZGF0YS5cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZz86IFBlcm1pc3Npb25zVmlld0NvbmZpZztcblxuICAvKipcbiAgICogQ3VhbmRvIGB0cnVlYCwgbGEgdmlzdGEgZXN0w6EgZW1iZWJpZGEgZW4gdW4gbW9kYWwg4oCUIHN1cHJpbWUgZWwgYmFjay1oZWFkZXJcbiAgICogKGxvIGdlc3Rpb25hIGVsIG1vZGFsIHBhZHJlKS4gRGVmYXVsdCBgZmFsc2VgICh1c28gY29tbyBydXRhKS5cbiAgICovXG4gIEBJbnB1dCgpIGlzTW9kYWwgPSBmYWxzZTtcblxuICByZWFkb25seSByZXNvbHZlZENvbmZpZyA9IGNvbXB1dGVkPFJlcXVpcmVkPFBlcm1pc3Npb25zVmlld0NvbmZpZz4+KCgpID0+IHtcbiAgICBjb25zdCBmcm9tUm91dGUgPSAodGhpcy5yb3V0ZT8uc25hcHNob3QuZGF0YVsncGVybWlzc2lvbnNDb25maWcnXSA/PyB7fSkgYXMgUGVybWlzc2lvbnNWaWV3Q29uZmlnO1xuICAgIGNvbnN0IG1lcmdlZDogUGVybWlzc2lvbnNWaWV3Q29uZmlnID0geyAuLi5mcm9tUm91dGUsIC4uLih0aGlzLmNvbmZpZyA/PyB7fSkgfTtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1N5c3RlbVJvbGVzOiBtZXJnZWQuc2hvd1N5c3RlbVJvbGVzID8/IHRydWUsXG4gICAgICBzaG93Q3VzdG9tUm9sZXM6IG1lcmdlZC5zaG93Q3VzdG9tUm9sZXMgPz8gdHJ1ZSxcbiAgICAgIGkxOG5OYW1lc3BhY2U6IG1lcmdlZC5pMThuTmFtZXNwYWNlID8/IERFRkFVTFRfTkFNRVNQQUNFLFxuICAgIH07XG4gIH0pO1xuXG4gIC8qKiBOYW1lc3BhY2UgaTE4biByZXN1ZWx0byAoY2FwdHVyYWRvIHBhcmEgbGxhbWFkYXMgbm8tcmVhY3RpdmFzKS4gKi9cbiAgcHJpdmF0ZSBnZXQgbnMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZENvbmZpZygpLmkxOG5OYW1lc3BhY2U7XG4gIH1cblxuICByZWFkb25seSBsb2FkaW5nID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgbG9hZEVycm9yID0gc2lnbmFsPHVua25vd24gfCBudWxsPihudWxsKTtcbiAgcHJpdmF0ZSByZWFkb25seSByb2xlcyA9IHNpZ25hbDxSb2xlVmlld1tdPihbXSk7XG5cbiAgcmVhZG9ubHkgc3lzdGVtUm9sZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJvbGVzKCkuZmlsdGVyKHIgPT4gci5pc1N5c3RlbSkpO1xuICByZWFkb25seSBjdXN0b21Sb2xlcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMucm9sZXMoKS5maWx0ZXIociA9PiAhci5pc1N5c3RlbSkpO1xuXG4gIHJlYWRvbmx5IGFjdGl2ZU9yZ0lkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHUgPSB0aGlzLmF1dGgudXNlcigpIGFzIHtcbiAgICAgIGFjdGl2ZU9yZ0lkPzogc3RyaW5nO1xuICAgICAgYWN0aXZlT3JnPzogc3RyaW5nO1xuICAgIH0gfCBudWxsO1xuICAgIHJldHVybiB1Py5hY3RpdmVPcmdJZCA/PyB1Py5hY3RpdmVPcmcgPz8gJyc7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHJldHJ5QnV0dG9uUHJvcHMgPSBjb21wdXRlZDxQYXJ0aWFsPEJ1dHRvbk1ldGFkYXRhPj4oKCkgPT4gKHtcbiAgICB0ZXh0OiB0aGlzLnR0KCdyZXRyeScpLFxuICAgIGNvbG9yOiAnZGFyaycsXG4gICAgZmlsbDogJ291dGxpbmUnLFxuICAgIHNpemU6ICdkZWZhdWx0JyxcbiAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICBzdGF0ZTogdGhpcy5sb2FkaW5nKCkgPyBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQgOiBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCxcbiAgfSkpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGNvbnN0IG5zID0gdGhpcy5ucztcbiAgICB0aGlzLmkxOG4ucmVnaXN0ZXJEZWZhdWx0cyhucywgUEVSTUlTU0lPTlNfVklFV19JMThOKTtcbiAgICB0aGlzLmxvYWQoKTtcbiAgICBjb25uZWN0UGFnZVJlZnJlc2goKCkgPT4gdGhpcy5sb2FkKCkpO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzTW9kYWwpIHtcbiAgICAgIHRoaXMubmF2LnNldEJhY2tIZWFkZXIoJ3BhZ2VUaXRsZScsIHRoaXMubnMsIHsgd2l0aE1lbnU6IHRydWUgfSk7XG4gICAgfVxuICB9XG5cbiAgbG9hZCgpOiB2b2lkIHtcbiAgICBjb25zdCBvcmdJZCA9IHRoaXMuYWN0aXZlT3JnSWQoKTtcbiAgICBpZiAoIW9yZ0lkKSByZXR1cm47XG4gICAgdGhpcy5sb2FkaW5nLnNldCh0cnVlKTtcbiAgICB0aGlzLmxvYWRFcnJvci5zZXQobnVsbCk7XG4gICAgZm9ya0pvaW4oe1xuICAgICAgcm9sZXM6IHRoaXMub3JnU2VydmljZS5saXN0T3JnUm9sZXMob3JnSWQpLFxuICAgICAgY2F0YWxvZzogdGhpcy5jYXRhbG9nLmdldENhdGFsb2cob3JnSWQpLFxuICAgIH0pLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoeyByb2xlczogcmF3Um9sZXMsIGNhdGFsb2cgfSkgPT4ge1xuICAgICAgICBjb25zdCBieVJlc291cmNlID0gbmV3IE1hcDxzdHJpbmcsIFBlcm1pc3Npb25SZXNvdXJjZT4oKTtcbiAgICAgICAgZm9yIChjb25zdCByIG9mIGNhdGFsb2cucGVybWlzc2lvbnMpIGJ5UmVzb3VyY2Uuc2V0KHIucmVzb3VyY2UsIHIpO1xuICAgICAgICBjb25zdCBjdXJyZW50QXBwSWQgPSBjYXRhbG9nLmFwcElkO1xuICAgICAgICAvLyBMYWJlbGVyIGNvbiBsYSBTU09UIGRlbCBiYWNrZW5kIChsYWJlbHMgZGVsIGNhdMOhbG9nbykg4oCUIHJlZW1wbGF6YSBlbFxuICAgICAgICAvLyBtYXBhIGhhcmRjb2RlYWRvIGBwZXJtKmAuIExvY2FsZSBkZWwgbW9tZW50byBkZSBjYXJnYSAoaWd1YWwgcXVlIGFudGVzOlxuICAgICAgICAvLyBsb3MgbGFiZWxzIHNlIGhvcm5lYW4gZW4gZWwgUm9sZVZpZXc7IGNhbWJpbyBkZSBpZGlvbWEgcmVxdWllcmUgcmVsb2FkKS5cbiAgICAgICAgY29uc3QgbGFiZWxlciA9IGNyZWF0ZVBlcm1pc3Npb25MYWJlbGVyKGNhdGFsb2csIHRoaXMuaTE4bi5sYW5nKCksIHtcbiAgICAgICAgICBhbGxMYWJlbDogdGhpcy50dCgncGVybUFsbCcpLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yb2xlcy5zZXQoXG4gICAgICAgICAgKHJhd1JvbGVzID8/IFtdKS5tYXAoKHI6IGFueSkgPT5cbiAgICAgICAgICAgIHRoaXMuYnVpbGRSb2xlVmlldyhcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiByLmlkLFxuICAgICAgICAgICAgICAgIG5hbWU6IHIubmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogci5kZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uczogci5wZXJtaXNzaW9ucyA/PyBbXSxcbiAgICAgICAgICAgICAgICBpc1N5c3RlbTogci5pc1N5c3RlbSA/PyBmYWxzZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgYnlSZXNvdXJjZSxcbiAgICAgICAgICAgICAgY3VycmVudEFwcElkLFxuICAgICAgICAgICAgICBsYWJlbGVyXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZXJyID0+IHtcbiAgICAgICAgdGhpcy5sb2FkRXJyb3Iuc2V0KGVycik7XG4gICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRSb2xlVmlldyhcbiAgICByb2xlOiB7XG4gICAgICBpZDogc3RyaW5nO1xuICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICBwZXJtaXNzaW9uczogc3RyaW5nW107XG4gICAgICBpc1N5c3RlbTogYm9vbGVhbjtcbiAgICB9LFxuICAgIGJ5UmVzb3VyY2U6IE1hcDxzdHJpbmcsIFBlcm1pc3Npb25SZXNvdXJjZT4sXG4gICAgY3VycmVudEFwcElkOiBzdHJpbmcsXG4gICAgbGFiZWxlcjogUGVybWlzc2lvbkxhYmVsZXJcbiAgKTogUm9sZVZpZXcge1xuICAgIGNvbnN0IGFwcFBlcm1zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG9yZ1Blcm1zOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IG90aGVyQnlBcHAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nW10+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHBlcm0gb2Ygcm9sZS5wZXJtaXNzaW9ucykge1xuICAgICAgY29uc3QgW3Jlc291cmNlXSA9IHBlcm0uc3BsaXQoJzonKTtcbiAgICAgIGNvbnN0IGVudHJ5ID0gYnlSZXNvdXJjZS5nZXQocmVzb3VyY2UpO1xuICAgICAgLy8gU2luIGVudHJhZGEgZW4gZWwgY2F0w6Fsb2dvIChlbCBiYWNrZW5kIG9taXRlIGxvcyByZWN1cnNvcyBpbnRlcm5hbCBwYXJhXG4gICAgICAvLyBuby1wbGF0Zm9ybS1hZG1pbnMpIG8gZW50cmFkYSBpbnRlcm5hbCDihpIgTlVOQ0Egc2UgbXVlc3RyYSBhIG5pdmVsIGRlXG4gICAgICAvLyBwcm9kdWN0by4gRGVmZW5zYSBlbiBwcm9mdW5kaWRhZCBqdW50byBhbCBmaWx0cm8gZGVsIGJhY2tlbmQgKEFEUi0wMjQpLlxuICAgICAgLy8gTm90YTogZWwgcm9sIHB1ZWRlIHRyYWVyIGVsIHBlcm1pc28gYXVucXVlIGVsIHJlY3Vyc28gZXN0w6kgZmlsdHJhZG8gZGVsXG4gICAgICAvLyBjYXTDoWxvZ28gKGVqLiBhZG1pbiB0aWVuZSB0ZW1wbGF0ZXM6Kik7IHBvciBlc28gc2UgZGVzY2FydGEgbG8gbm8gcmVzdWVsdG8uXG4gICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5LnNjb3BlID09PSAnaW50ZXJuYWwnKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFiZWwgPSBsYWJlbGVyKHBlcm0pO1xuICAgICAgaWYgKGVudHJ5LnNjb3BlID09PSAnYXBwJykge1xuICAgICAgICBpZiAoZW50cnkuYXBwSWQgPT09IGN1cnJlbnRBcHBJZCkge1xuICAgICAgICAgIGFwcFBlcm1zLnB1c2gobGFiZWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGFwcElkID0gZW50cnkuYXBwSWQgPz8gJz8nO1xuICAgICAgICAgIGNvbnN0IGFyciA9IG90aGVyQnlBcHAuZ2V0KGFwcElkKSA/PyBbXTtcbiAgICAgICAgICBhcnIucHVzaChsYWJlbCk7XG4gICAgICAgICAgb3RoZXJCeUFwcC5zZXQoYXBwSWQsIGFycik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHNjb3BlID09PSAnb3JnJyDihpIgZ2VzdGnDs24gZGUgbGEgb3JnYW5pemFjacOzbiBkZWwgY2xpZW50ZVxuICAgICAgICBvcmdQZXJtcy5wdXNoKGxhYmVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBncm91cHM6IFBlcm1Hcm91cFZpZXdbXSA9IFtdO1xuICAgIGlmIChhcHBQZXJtcy5sZW5ndGgpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKHtcbiAgICAgICAga2V5OiAnYXBwJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHQoJ2dyb3VwQXBwJyksXG4gICAgICAgIHNjb3BlOiAnYXBwJyxcbiAgICAgICAgcGVybXM6IGFwcFBlcm1zLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChvcmdQZXJtcy5sZW5ndGgpIHtcbiAgICAgIGdyb3Vwcy5wdXNoKHtcbiAgICAgICAga2V5OiAnb3JnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHQoJ2dyb3VwT3JnJyksXG4gICAgICAgIHNjb3BlOiAnb3JnJyxcbiAgICAgICAgcGVybXM6IG9yZ1Blcm1zLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgW2FwcElkLCBwZXJtc10gb2Ygb3RoZXJCeUFwcCkge1xuICAgICAgZ3JvdXBzLnB1c2goe1xuICAgICAgICBrZXk6IGBvdGhlcjoke2FwcElkfWAsXG4gICAgICAgIGxhYmVsOiBgJHt0aGlzLnR0KCdncm91cE90aGVyJyl9OiAke3RoaXMuYXBwTGFiZWwoYXBwSWQpfWAsXG4gICAgICAgIHNjb3BlOiAnb3RoZXInLFxuICAgICAgICBhcHBJZCxcbiAgICAgICAgcGVybXMsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHJvbGUuaWQsXG4gICAgICBuYW1lOiByb2xlLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcm9sZS5kZXNjcmlwdGlvbixcbiAgICAgIGlzU3lzdGVtOiByb2xlLmlzU3lzdGVtLFxuICAgICAgZ3JvdXBzLFxuICAgICAgaGFzUGVybXM6IGdyb3Vwcy5sZW5ndGggPiAwLFxuICAgIH07XG4gIH1cblxuICBwcm90ZWN0ZWQgdHQoa2V5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmkxOG4udChrZXksIHRoaXMubnMpO1xuICB9XG5cbiAgYXBwTGFiZWwoYXBwSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3Qga2V5ID0gYGFwcF8ke2FwcElkfWA7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLnR0KGtleSk7XG4gICAgcmV0dXJuIGxhYmVsID09PSBrZXkgPyBhcHBJZCA6IGxhYmVsO1xuICB9XG5cbiAgcm9sZUxhYmVsKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgbWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgdmlld2VyOiAncm9sZVZpZXdlcicsXG4gICAgICBlZGl0b3I6ICdyb2xlRWRpdG9yJyxcbiAgICAgIGFkbWluOiAncm9sZUFkbWluJyxcbiAgICAgIHN1cGVyX2FkbWluOiAncm9sZVN1cGVyQWRtaW4nLFxuICAgICAgYmluZ29fYWRtaW46ICdyb2xlQmluZ29BZG1pbicsXG4gICAgICBiaW5nb190ZXNvcmVybzogJ3JvbGVCaW5nb1Rlc29yZXJvJyxcbiAgICAgIGJpbmdvX3RhcXVpbGxhOiAncm9sZUJpbmdvVGFxdWlsbGEnLFxuICAgICAgYmluZ29fb3BlcmF0b3I6ICdyb2xlQmluZ29PcGVyYXRvcicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy50dChtYXBbbmFtZV0gPz8gbmFtZSk7XG4gIH1cbn1cbiJdfQ==
475
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMtdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL3Blcm1pc3Npb25zLXZpZXcvcGVybWlzc2lvbnMtdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFdkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBa0IsZUFBZSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDcEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQy9ELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3pGLE9BQU8s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O1lBQ25DLGNBQWMsRUFBRSxtQkFBbUI7WUFDbkMsY0FBYyxFQUFFLG1CQUFtQjtTQUNwQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDOytHQXRLVSx3QkFBd0I7bUdBQXhCLHdCQUF3QixrSUF0UXpCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzSlQsd3lEQXZKUyx1QkFBdUIsbUZBQUUsZ0JBQWdCLDJFQUFFLGFBQWEsd0hBQUUsY0FBYyx5RUFBRSxhQUFhLHdFQUFFLGVBQWU7OzRGQXVRdkcsd0JBQXdCO2tCQTFRcEMsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQLENBQUMsdUJBQXVCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsZUFBZSxDQUFDLFlBQ3pHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzSlQ7d0RBNkhRLE1BQU07c0JBQWQsS0FBSztnQkFNRyxPQUFPO3NCQUFmLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGNvbXB1dGVkLCBpbmplY3QsIElucHV0LCBPbkluaXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNrZWxldG9uTGF5b3V0Q29tcG9uZW50IH0gZnJvbSAnLi4vc2tlbGV0b24tbGF5b3V0L3NrZWxldG9uLWxheW91dC5jb21wb25lbnQnO1xuXG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9idXR0b24vYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEaXNwbGF5Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvZGlzcGxheS9kaXNwbGF5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3BpbGwvcGlsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RleHQvdGV4dC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGl0bGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy90aXRsZS90aXRsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uTWV0YWRhdGEsIENvbXBvbmVudFN0YXRlcyB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2kxOG4nO1xuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uL25hdmlnYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBPcmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnL29yZy5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbm5lY3RQYWdlUmVmcmVzaCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BhZ2UtcmVmcmVzaC9wYWdlLXJlZnJlc2guc2VydmljZSc7XG5pbXBvcnQge1xuICBQZXJtaXNzaW9uQ2F0YWxvZ1NlcnZpY2UsXG4gIFBlcm1pc3Npb25DYXRhbG9nUmVzcG9uc2UsXG4gIFBlcm1pc3Npb25MYWJlbGVyLFxuICBQZXJtaXNzaW9uU2NvcGVHcm91cCxcbiAgY3JlYXRlUGVybWlzc2lvbkxhYmVsZXIsXG4gIGdyb3VwUGVybWlzc2lvbnNCeVNjb3BlLFxufSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9vcmcvcGVybWlzc2lvbi1jYXRhbG9nLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQZXJtaXNzaW9uc1ZpZXdDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFBFUk1JU1NJT05TX1ZJRVdfSTE4TiB9IGZyb20gJy4vcGVybWlzc2lvbnMtdmlldy5pMThuJztcblxuY29uc3QgREVGQVVMVF9OQU1FU1BBQ0UgPSAnU2V0dGluZ3MuUGVybWlzc2lvbnMnO1xuXG5pbnRlcmZhY2UgUm9sZVZpZXcge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBpc1N5c3RlbTogYm9vbGVhbjtcbiAgZ3JvdXBzOiBQZXJtaXNzaW9uU2NvcGVHcm91cFtdO1xuICBoYXNQZXJtczogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBgdmFsLXBlcm1pc3Npb25zLXZpZXdgIOKAlCB2aXN0YSBQZXJtaXNvcyBmdWxsLWZlYXR1cmUgYXV0b2NvbnRlbmlkYSAob3JnYW5pc20pLlxuICogVmlzb3IgUkJBQyBkZSBzb2xvIGxlY3R1cmE6IG11ZXN0cmEgbG9zIHJvbGVzIGRlbCBzaXN0ZW1hIChWaXNvci9FZGl0b3IvQWRtaW4gK1xuICogcm9sZXMgZGUgcGxhdGFmb3JtYSkgeSBsb3Mgcm9sZXMgcGVyc29uYWxpemFkb3MgZGUgbGEgb3JnIGFjdGl2YSwgY29uIGVsXG4gKiBjYXTDoWxvZ28gZGUgcGVybWlzb3MgYWdydXBhZG8gcG9yIGFsY2FuY2UgKGFwcCBhY3R1YWwgLyBwbGF0YWZvcm1hIC8gb3RyYXMgYXBwcykuXG4gKiBQcm9tb3ZpZGEgZGVzZGUgYHNob3djYXNlYCBiYWpvIGVsIHByb2Nlc28gZGUgQURSLTAyMS5cbiAqXG4gKiAqKlJCQUMgaW50ZXJubyoqIChjb21vIGBvcmdhbml6YXRpb24tdmlld2ApOiBsZWUgbGEgb3JnIGFjdGl2YSB2w61hXG4gKiBgQXV0aFNlcnZpY2UudXNlcigpLmFjdGl2ZU9yZ0lkYC4gTGEgdmlzdGEgTk8gbXV0YSBuYWRhIOKAlCBlbCBjb250cm9sIGRlIHF1acOpblxuICogcHVlZGUgdmVybGEgZXMgcmVzcG9uc2FiaWxpZGFkIGRlbCBndWFyZCBkZSBydXRhIGRlbCBjb25zdW1lcjsgbm8gaGF5IGdhdGluZ1xuICogZmlubyBpbnRlcm5vIG5pIHNlIGV4cG9uZSBjb21vIGNvbmZpZy5cbiAqXG4gKiBEYXRvczogYGZvcmtKb2luYCBkZSBgT3JnU2VydmljZS5saXN0T3JnUm9sZXMob3JnSWQpYCAocm9sZXMgZGUgbGEgb3JnKSArXG4gKiBgUGVybWlzc2lvbkNhdGFsb2dTZXJ2aWNlLmdldENhdGFsb2cob3JnSWQpYCAoY2F0w6Fsb2dvICsgYXBwSWQgYWN0dWFsKS4gRWxcbiAqIGNhdMOhbG9nbyBkZWZpbmUgZWwgYWxjYW5jZSAoYHNjb3BlYC9gYXBwSWRgKSBkZSBjYWRhIHJlY3Vyc28gcGFyYSBhZ3J1cGFyLlxuICpcbiAqIE5PIHJlbmRlcml6YSBpb24tY29udGVudCDigJQgdml2ZSBkZW50cm8gZGUgdmFsLXBhZ2Utd3JhcHBlci4gYEFjdGl2YXRlZFJvdXRlYCBzZVxuICogaW55ZWN0YSBgeyBvcHRpb25hbDogdHJ1ZSB9YCBzb2xvIHBhcmEgbGVlciBlbCByb3V0ZSBkYXRhIGRlIGNvbmZpZy4gQXV0by1yZWdpc3RyYVxuICogc3VzIGRlZmF1bHRzIGkxOG4gKGVzL2VuKSBzaSBlbCBjb25zdW1lciBubyBwcm92ZXnDsyBlbCBuYW1lc3BhY2UgKGRlZmF1bHRcbiAqIGBTZXR0aW5ncy5QZXJtaXNzaW9uc2ApLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWwtcGVybWlzc2lvbnMtdmlldycsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtTa2VsZXRvbkxheW91dENvbXBvbmVudCwgRGlzcGxheUNvbXBvbmVudCwgUGlsbENvbXBvbmVudCwgVGl0bGVDb21wb25lbnQsIFRleHRDb21wb25lbnQsIEJ1dHRvbkNvbXBvbmVudF0sXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiBjbGFzcz1cInBhZ2VcIj5cbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJwYWdlLWhlYWRlclwiPlxuICAgICAgICA8dmFsLWRpc3BsYXkgW3Byb3BzXT1cInsgc2l6ZTogJ3NtYWxsJywgY29sb3I6ICdkYXJrJywgY29udGVudDogdHQoJ3BhZ2VUaXRsZScpIH1cIiAvPlxuICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgIHNpemU6ICdsYXJnZScsXG4gICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgYm9sZDogZmFsc2UsXG4gICAgICAgICAgICBjb250ZW50OiB0dCgncGFnZURlc2NyaXB0aW9uJyksXG4gICAgICAgICAgfVwiXG4gICAgICAgIC8+XG4gICAgICA8L2hlYWRlcj5cblxuICAgICAgQGlmIChsb2FkaW5nKCkpIHtcbiAgICAgICAgPHZhbC1za2VsZXRvbi1sYXlvdXQgW3Byb3BzXT1cInsgcHJlc2V0OiAnbGlzdCcsIHJvd3M6IDQgfVwiIC8+XG4gICAgICB9IEBlbHNlIGlmIChsb2FkRXJyb3IoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwiZXJyb3Itcm93XCI+XG4gICAgICAgICAgPHZhbC10ZXh0XG4gICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICBjb250ZW50OiB0dCgnZXJyb3JUaXRsZScpLFxuICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgY29sb3I6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHZhbC1idXR0b24gW3Byb3BzXT1cInJldHJ5QnV0dG9uUHJvcHMoKVwiIChjbGljayk9XCJsb2FkKClcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAaWYgKHJlc29sdmVkQ29uZmlnKCkuc2hvd1N5c3RlbVJvbGVzKSB7XG4gICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJwZXJtLXNlY3Rpb25cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwZXJtLXNlY3Rpb25fX2hlYWRlclwiPlxuICAgICAgICAgICAgICA8dmFsLXRpdGxlXG4gICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgIHNpemU6ICdtZWRpdW0nLFxuICAgICAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnc3lzdGVtUm9sZXNUaXRsZScpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8dmFsLXRleHRcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgY29udGVudDogdHQoJ3N5c3RlbVJvbGVzSGludCcpLFxuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvbGUtbGlzdFwiPlxuICAgICAgICAgICAgICBAZm9yIChyb2xlIG9mIHN5c3RlbVJvbGVzKCk7IHRyYWNrIHJvbGUuaWQpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm9sZS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm9sZS1jYXJkX19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyb2xlLWNhcmRfX25hbWVcIj57eyByb2xlTGFiZWwocm9sZS5uYW1lKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHZhbC1waWxsXG4gICAgICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0dCgnc3lzdGVtQmFkZ2UnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAncHJpbWFyeScsXG4gICAgICAgICAgICAgICAgICAgICAgICB3ZWlnaHQ6ICdib2xkJyxcbiAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgQGlmIChyb2xlLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicm9sZS1jYXJkX19kZXNjXCI+e3sgcm9sZS5kZXNjcmlwdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoIXJvbGUuaGFzUGVybXMpIHtcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm0tY2hpcHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBlcm0tY2hpcCBwZXJtLWNoaXAtLWVtcHR5XCI+e3sgdHQoJ25vUGVybWlzc2lvbnMnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgQGZvciAoZyBvZiByb2xlLmdyb3VwczsgdHJhY2sgZy5rZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCIncGVybS1ncm91cCBwZXJtLWdyb3VwLS0nICsgZy5zY29wZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJtLWdyb3VwX19iYWRnZVwiPnt7IGcubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybS1jaGlwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChwIG9mIGcucGVybXM7IHRyYWNrIHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBlcm0tY2hpcFwiPnt7IHAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAocmVzb2x2ZWRDb25maWcoKS5zaG93Q3VzdG9tUm9sZXMpIHtcbiAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cInBlcm0tc2VjdGlvblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm0tc2VjdGlvbl9faGVhZGVyXCI+XG4gICAgICAgICAgICAgIDx2YWwtdGl0bGVcbiAgICAgICAgICAgICAgICBbcHJvcHNdPVwie1xuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ2RhcmsnLFxuICAgICAgICAgICAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IHR0KCdjdXN0b21Sb2xlc1RpdGxlJyksXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnY3VzdG9tUm9sZXNIaW50JyksXG4gICAgICAgICAgICAgICAgICBzaXplOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnbWVkaXVtJyxcbiAgICAgICAgICAgICAgICAgIGJvbGQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICBAaWYgKGN1c3RvbVJvbGVzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgIDx2YWwtdGV4dFxuICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICBjb250ZW50OiB0dCgnbm9DdXN0b21Sb2xlcycpLFxuICAgICAgICAgICAgICAgICAgc2l6ZTogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBjb2xvcjogJ21lZGl1bScsXG4gICAgICAgICAgICAgICAgICBib2xkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm9sZS1saXN0XCI+XG4gICAgICAgICAgICAgICAgQGZvciAocm9sZSBvZiBjdXN0b21Sb2xlcygpOyB0cmFjayByb2xlLmlkKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm9sZS1jYXJkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb2xlLWNhcmRfX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicm9sZS1jYXJkX19uYW1lXCI+e3sgcm9sZS5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChyb2xlLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyb2xlLWNhcmRfX2Rlc2NcIj57eyByb2xlLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIXJvbGUuaGFzUGVybXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGVybS1jaGlwc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwZXJtLWNoaXAgcGVybS1jaGlwLS1lbXB0eVwiPnt7IHR0KCdub1Blcm1pc3Npb25zJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGcgb2Ygcm9sZS5ncm91cHM7IHRyYWNrIGcua2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtjbGFzc109XCIncGVybS1ncm91cCBwZXJtLWdyb3VwLS0nICsgZy5zY29wZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBlcm0tZ3JvdXBfX2JhZGdlXCI+e3sgZy5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBlcm0tY2hpcHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChwIG9mIGcucGVybXM7IHRyYWNrIHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGVybS1jaGlwXCI+e3sgcCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZXM6IFtcbiAgICBgXG4gICAgICAucGFnZSB7XG4gICAgICAgIHBhZGRpbmc6IDE2cHggMDtcbiAgICAgICAgbWF4LXdpZHRoOiA3MjBweDtcbiAgICAgICAgbWFyZ2luOiAwIGF1dG87XG4gICAgICB9XG4gICAgICAucGFnZS1oZWFkZXIge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4O1xuICAgICAgfVxuICAgICAgLnNwaW5uZXItcm93LFxuICAgICAgLmVycm9yLXJvdyB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogMTZweDtcbiAgICAgICAgcGFkZGluZzogMzJweCAwO1xuICAgICAgfVxuICAgICAgLnBlcm0tc2VjdGlvbiB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7XG4gICAgICB9XG4gICAgICAucGVybS1zZWN0aW9uX19oZWFkZXIge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xuICAgICAgfVxuICAgICAgLnJvbGUtbGlzdCB7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTBweDtcbiAgICAgIH1cbiAgICAgIC5yb2xlLWNhcmQge1xuICAgICAgICBib3JkZXI6IDEuNXB4IHNvbGlkIHZhcigtLWlvbi1jb2xvci1saWdodCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7XG4gICAgICAgIHBhZGRpbmc6IDE0cHggMTZweDtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiAxMHB4O1xuICAgICAgfVxuICAgICAgLnJvbGUtY2FyZF9faGVhZGVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA4cHg7XG4gICAgICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICAgIH1cbiAgICAgIC5yb2xlLWNhcmRfX25hbWUge1xuICAgICAgICBmb250LXNpemU6IDAuOTM3NXJlbTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1kYXJrKTtcbiAgICAgIH1cbiAgICAgIC5yb2xlLWNhcmRfX2Rlc2Mge1xuICAgICAgICBmb250LXNpemU6IDAuODEyNXJlbTtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgICBsaW5lLWhlaWdodDogMS40O1xuICAgICAgfVxuICAgICAgLnBlcm0tZ3JvdXAge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgICBnYXA6IDZweDtcbiAgICAgIH1cbiAgICAgIC8qIEJhZGdlIGRlIGFsY2FuY2UgZGVsIGdydXBvIOKAlCBjb2xvciBjb211bmljYSBzaSBlbCBwZXJtaXNvIGVzIGdlbmVyYWwsXG4gICAgICAgICBkZSBsYSBhcHAgYWN0dWFsLCBvIGRlIG90cmEgYXBwIChhbnRlcyBlcmEgdW4gbGFiZWwgZ3JpcyBwbGFubykuICovXG4gICAgICAucGVybS1ncm91cF9fYmFkZ2Uge1xuICAgICAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiA0cHg7XG4gICAgICAgIGZvbnQtc2l6ZTogMC42ODc1cmVtO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNGVtO1xuICAgICAgICBwYWRkaW5nOiAzcHggOXB4O1xuICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7XG4gICAgICB9XG4gICAgICAucGVybS1ncm91cC0tYXBwIC5wZXJtLWdyb3VwX19iYWRnZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItcHJpbWFyeSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0taW9uLWNvbG9yLXByaW1hcnktcmdiKSwgMC4xMik7XG4gICAgICB9XG4gICAgICAucGVybS1ncm91cC0tb3JnIC5wZXJtLWdyb3VwX19iYWRnZSB7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItbWVkaXVtLXNoYWRlLCB2YXIoLS1pb24tY29sb3ItbWVkaXVtKSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodC1zaGFkZSwgcmdiYSgwLCAwLCAwLCAwLjA2KSk7XG4gICAgICB9XG4gICAgICAucGVybS1ncm91cC0tb3RoZXIgLnBlcm0tZ3JvdXBfX2JhZGdlIHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci10ZXJ0aWFyeSk7XG4gICAgICAgIGJhY2tncm91bmQ6IHJnYmEodmFyKC0taW9uLWNvbG9yLXRlcnRpYXJ5LXJnYiksIDAuMTIpO1xuICAgICAgfVxuICAgICAgLnBlcm0tY2hpcHMge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgICAgIGdhcDogNnB4O1xuICAgICAgfVxuICAgICAgLnBlcm0tY2hpcCB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICAgICAgcGFkZGluZzogM3B4IDEwcHg7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWlvbi1jb2xvci1saWdodCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1pb24tY29sb3ItZGFyayk7XG4gICAgICB9XG4gICAgICAvKiBUaW50ZSBzdXRpbCBkZSBsb3MgY2hpcHMgc2Vnw7puIGFsY2FuY2UsIGVuIGzDrW5lYSBjb24gZWwgYmFkZ2UuICovXG4gICAgICAucGVybS1ncm91cC0tYXBwIC5wZXJtLWNoaXAge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWlvbi1jb2xvci1wcmltYXJ5LXJnYiksIDAuMDgpO1xuICAgICAgfVxuICAgICAgLnBlcm0tZ3JvdXAtLW90aGVyIC5wZXJtLWNoaXAge1xuICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKHZhcigtLWlvbi1jb2xvci10ZXJ0aWFyeS1yZ2IpLCAwLjA4KTtcbiAgICAgIH1cbiAgICAgIC5wZXJtLWNoaXAtLWVtcHR5IHtcbiAgICAgICAgY29sb3I6IHZhcigtLWlvbi1jb2xvci1tZWRpdW0pO1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25zVmlld0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgaTE4biA9IGluamVjdChJMThuU2VydmljZSk7XG4gIHByaXZhdGUgb3JnU2VydmljZSA9IGluamVjdChPcmdTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBjYXRhbG9nID0gaW5qZWN0KFBlcm1pc3Npb25DYXRhbG9nU2VydmljZSk7XG4gIHByaXZhdGUgYXV0aCA9IGluamVjdChBdXRoU2VydmljZSk7XG4gIHByaXZhdGUgbmF2ID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgcHJpdmF0ZSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAvKipcbiAgICogQ29uZmlnIHbDrWEgQElucHV0IChvYmplY3QtZmlyc3QpLiBTaSBubyBzZSBwYXNhLCBzZSBjYWUgYWwgcm91dGUgZGF0YVxuICAgKiBgcGVybWlzc2lvbnNDb25maWdgIChwb2JsYWRvIHBvciBgcHJvdmlkZVZhbHRlY2hQZXJtaXNzaW9uc1JvdXRlc2ApLlxuICAgKiBgcmVzb2x2ZWRDb25maWdgIG1lcmdlYSBjb24gbG9zIGRlZmF1bHRzIOKAlCBgQElucHV0YCBnYW5hIHNvYnJlIHJvdXRlIGRhdGEuXG4gICAqL1xuICBASW5wdXQoKSBjb25maWc/OiBQZXJtaXNzaW9uc1ZpZXdDb25maWc7XG5cbiAgLyoqXG4gICAqIEN1YW5kbyBgdHJ1ZWAsIGxhIHZpc3RhIGVzdMOhIGVtYmViaWRhIGVuIHVuIG1vZGFsIOKAlCBzdXByaW1lIGVsIGJhY2staGVhZGVyXG4gICAqIChsbyBnZXN0aW9uYSBlbCBtb2RhbCBwYWRyZSkuIERlZmF1bHQgYGZhbHNlYCAodXNvIGNvbW8gcnV0YSkuXG4gICAqL1xuICBASW5wdXQoKSBpc01vZGFsID0gZmFsc2U7XG5cbiAgcmVhZG9ubHkgcmVzb2x2ZWRDb25maWcgPSBjb21wdXRlZDxSZXF1aXJlZDxQZXJtaXNzaW9uc1ZpZXdDb25maWc+PigoKSA9PiB7XG4gICAgY29uc3QgZnJvbVJvdXRlID0gKHRoaXMucm91dGU/LnNuYXBzaG90LmRhdGFbJ3Blcm1pc3Npb25zQ29uZmlnJ10gPz8ge30pIGFzIFBlcm1pc3Npb25zVmlld0NvbmZpZztcbiAgICBjb25zdCBtZXJnZWQ6IFBlcm1pc3Npb25zVmlld0NvbmZpZyA9IHsgLi4uZnJvbVJvdXRlLCAuLi4odGhpcy5jb25maWcgPz8ge30pIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dTeXN0ZW1Sb2xlczogbWVyZ2VkLnNob3dTeXN0ZW1Sb2xlcyA/PyB0cnVlLFxuICAgICAgc2hvd0N1c3RvbVJvbGVzOiBtZXJnZWQuc2hvd0N1c3RvbVJvbGVzID8/IHRydWUsXG4gICAgICBpMThuTmFtZXNwYWNlOiBtZXJnZWQuaTE4bk5hbWVzcGFjZSA/PyBERUZBVUxUX05BTUVTUEFDRSxcbiAgICB9O1xuICB9KTtcblxuICAvKiogTmFtZXNwYWNlIGkxOG4gcmVzdWVsdG8gKGNhcHR1cmFkbyBwYXJhIGxsYW1hZGFzIG5vLXJlYWN0aXZhcykuICovXG4gIHByaXZhdGUgZ2V0IG5zKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZWRDb25maWcoKS5pMThuTmFtZXNwYWNlO1xuICB9XG5cbiAgcmVhZG9ubHkgbG9hZGluZyA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGxvYWRFcnJvciA9IHNpZ25hbDx1bmtub3duIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcm9sZXMgPSBzaWduYWw8Um9sZVZpZXdbXT4oW10pO1xuXG4gIHJlYWRvbmx5IHN5c3RlbVJvbGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yb2xlcygpLmZpbHRlcihyID0+IHIuaXNTeXN0ZW0pKTtcbiAgcmVhZG9ubHkgY3VzdG9tUm9sZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJvbGVzKCkuZmlsdGVyKHIgPT4gIXIuaXNTeXN0ZW0pKTtcblxuICByZWFkb25seSBhY3RpdmVPcmdJZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB1ID0gdGhpcy5hdXRoLnVzZXIoKSBhcyB7XG4gICAgICBhY3RpdmVPcmdJZD86IHN0cmluZztcbiAgICAgIGFjdGl2ZU9yZz86IHN0cmluZztcbiAgICB9IHwgbnVsbDtcbiAgICByZXR1cm4gdT8uYWN0aXZlT3JnSWQgPz8gdT8uYWN0aXZlT3JnID8/ICcnO1xuICB9KTtcblxuICByZWFkb25seSByZXRyeUJ1dHRvblByb3BzID0gY29tcHV0ZWQ8UGFydGlhbDxCdXR0b25NZXRhZGF0YT4+KCgpID0+ICh7XG4gICAgdGV4dDogdGhpcy50dCgncmV0cnknKSxcbiAgICBjb2xvcjogJ2RhcmsnLFxuICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICBzaXplOiAnZGVmYXVsdCcsXG4gICAgdHlwZTogJ2J1dHRvbicsXG4gICAgc3RhdGU6IHRoaXMubG9hZGluZygpID8gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEIDogQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQsXG4gIH0pKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCBucyA9IHRoaXMubnM7XG4gICAgdGhpcy5pMThuLnJlZ2lzdGVyRGVmYXVsdHMobnMsIFBFUk1JU1NJT05TX1ZJRVdfSTE4Tik7XG4gICAgdGhpcy5sb2FkKCk7XG4gICAgY29ubmVjdFBhZ2VSZWZyZXNoKCgpID0+IHRoaXMubG9hZCgpKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc01vZGFsKSB7XG4gICAgICB0aGlzLm5hdi5zZXRCYWNrSGVhZGVyKCdwYWdlVGl0bGUnLCB0aGlzLm5zLCB7IHdpdGhNZW51OiB0cnVlIH0pO1xuICAgIH1cbiAgfVxuXG4gIGxvYWQoKTogdm9pZCB7XG4gICAgY29uc3Qgb3JnSWQgPSB0aGlzLmFjdGl2ZU9yZ0lkKCk7XG4gICAgaWYgKCFvcmdJZCkgcmV0dXJuO1xuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XG4gICAgdGhpcy5sb2FkRXJyb3Iuc2V0KG51bGwpO1xuICAgIGZvcmtKb2luKHtcbiAgICAgIHJvbGVzOiB0aGlzLm9yZ1NlcnZpY2UubGlzdE9yZ1JvbGVzKG9yZ0lkKSxcbiAgICAgIGNhdGFsb2c6IHRoaXMuY2F0YWxvZy5nZXRDYXRhbG9nKG9yZ0lkKSxcbiAgICB9KS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHsgcm9sZXM6IHJhd1JvbGVzLCBjYXRhbG9nIH0pID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudEFwcElkID0gY2F0YWxvZy5hcHBJZDtcbiAgICAgICAgLy8gTGFiZWxlciBjb24gbGEgU1NPVCBkZWwgYmFja2VuZCAobGFiZWxzIGRlbCBjYXTDoWxvZ28pIOKAlCByZWVtcGxhemEgZWxcbiAgICAgICAgLy8gbWFwYSBoYXJkY29kZWFkbyBgcGVybSpgLiBMb2NhbGUgZGVsIG1vbWVudG8gZGUgY2FyZ2EgKGlndWFsIHF1ZSBhbnRlczpcbiAgICAgICAgLy8gbG9zIGxhYmVscyBzZSBob3JuZWFuIGVuIGVsIFJvbGVWaWV3OyBjYW1iaW8gZGUgaWRpb21hIHJlcXVpZXJlIHJlbG9hZCkuXG4gICAgICAgIGNvbnN0IGxhYmVsZXIgPSBjcmVhdGVQZXJtaXNzaW9uTGFiZWxlcihjYXRhbG9nLCB0aGlzLmkxOG4ubGFuZygpLCB7XG4gICAgICAgICAgYWxsTGFiZWw6IHRoaXMudHQoJ3Blcm1BbGwnKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm9sZXMuc2V0KFxuICAgICAgICAgIChyYXdSb2xlcyA/PyBbXSkubWFwKChyOiBhbnkpID0+XG4gICAgICAgICAgICB0aGlzLmJ1aWxkUm9sZVZpZXcoXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogci5pZCxcbiAgICAgICAgICAgICAgICBuYW1lOiByLm5hbWUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHIuZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgcGVybWlzc2lvbnM6IHIucGVybWlzc2lvbnMgPz8gW10sXG4gICAgICAgICAgICAgICAgaXNTeXN0ZW06IHIuaXNTeXN0ZW0gPz8gZmFsc2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGNhdGFsb2csXG4gICAgICAgICAgICAgIGN1cnJlbnRBcHBJZCxcbiAgICAgICAgICAgICAgbGFiZWxlclxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgIHRoaXMubG9hZEVycm9yLnNldChlcnIpO1xuICAgICAgICB0aGlzLmxvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkUm9sZVZpZXcoXG4gICAgcm9sZToge1xuICAgICAgaWQ6IHN0cmluZztcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgcGVybWlzc2lvbnM6IHN0cmluZ1tdO1xuICAgICAgaXNTeXN0ZW06IGJvb2xlYW47XG4gICAgfSxcbiAgICBjYXRhbG9nOiBQaWNrPFBlcm1pc3Npb25DYXRhbG9nUmVzcG9uc2UsICdwZXJtaXNzaW9ucyc+LFxuICAgIGN1cnJlbnRBcHBJZDogc3RyaW5nLFxuICAgIGxhYmVsZXI6IFBlcm1pc3Npb25MYWJlbGVyXG4gICk6IFJvbGVWaWV3IHtcbiAgICBjb25zdCBncm91cHMgPSBncm91cFBlcm1pc3Npb25zQnlTY29wZShyb2xlLnBlcm1pc3Npb25zLCBjYXRhbG9nLCBjdXJyZW50QXBwSWQsIGxhYmVsZXIsIHtcbiAgICAgIGFwcDogdGhpcy50dCgnZ3JvdXBBcHAnKSxcbiAgICAgIG9yZzogdGhpcy50dCgnZ3JvdXBPcmcnKSxcbiAgICAgIG90aGVyOiB0aGlzLnR0KCdncm91cE90aGVyJyksXG4gICAgICBhcHBMYWJlbDogKGFwcElkOiBzdHJpbmcpID0+IHRoaXMuYXBwTGFiZWwoYXBwSWQpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiByb2xlLmlkLFxuICAgICAgbmFtZTogcm9sZS5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHJvbGUuZGVzY3JpcHRpb24sXG4gICAgICBpc1N5c3RlbTogcm9sZS5pc1N5c3RlbSxcbiAgICAgIGdyb3VwcyxcbiAgICAgIGhhc1Blcm1zOiBncm91cHMubGVuZ3RoID4gMCxcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIHR0KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5pMThuLnQoa2V5LCB0aGlzLm5zKTtcbiAgfVxuXG4gIGFwcExhYmVsKGFwcElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleSA9IGBhcHBfJHthcHBJZH1gO1xuICAgIGNvbnN0IGxhYmVsID0gdGhpcy50dChrZXkpO1xuICAgIHJldHVybiBsYWJlbCA9PT0ga2V5ID8gYXBwSWQgOiBsYWJlbDtcbiAgfVxuXG4gIHJvbGVMYWJlbChuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIHZpZXdlcjogJ3JvbGVWaWV3ZXInLFxuICAgICAgZWRpdG9yOiAncm9sZUVkaXRvcicsXG4gICAgICBhZG1pbjogJ3JvbGVBZG1pbicsXG4gICAgICBzdXBlcl9hZG1pbjogJ3JvbGVTdXBlckFkbWluJyxcbiAgICAgIGJpbmdvX2FkbWluOiAncm9sZUJpbmdvQWRtaW4nLFxuICAgICAgYmluZ29fdGVzb3Jlcm86ICdyb2xlQmluZ29UZXNvcmVybycsXG4gICAgICBiaW5nb190YXF1aWxsYTogJ3JvbGVCaW5nb1RhcXVpbGxhJyxcbiAgICAgIGJpbmdvX29wZXJhdG9yOiAncm9sZUJpbmdvT3BlcmF0b3InLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMudHQobWFwW25hbWVdID8/IG5hbWUpO1xuICB9XG59XG4iXX0=
@@ -72,4 +72,64 @@ export function createPermissionLabeler(catalog, locale, opts) {
72
72
  return `${res}: ${act}`;
73
73
  };
74
74
  }
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1jYXRhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL29yZy9wZXJtaXNzaW9uLWNhdGFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUluRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBeUJyRDs7Ozs7Ozs7O0dBU0c7QUFFSCxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQ3VDLE1BQXlCLEVBQ3RELElBQWdCO1FBRGEsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDdEQsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUN2QixDQUFDO0lBRUosVUFBVSxDQUFDLEtBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sUUFBUSxLQUFLLHNCQUFzQixDQUN6RCxDQUFDO0lBQ0osQ0FBQzsrR0FWVSx3QkFBd0Isa0JBRXpCLG1CQUFtQjttSEFGbEIsd0JBQXdCLGNBRFgsTUFBTTs7NEZBQ25CLHdCQUF3QjtrQkFEcEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQUc3QixNQUFNOzJCQUFDLG1CQUFtQjs7QUFXL0I7OztHQUdHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxJQUFZO0lBQzFDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDckIsT0FBTyxJQUFJO1NBQ1IsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNiLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsQ0FBQztBQUtEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLHVCQUF1QixDQUNyQyxPQUF3RSxFQUN4RSxNQUFjLEVBQ2QsSUFBNEI7SUFFNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUM7SUFDekQsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxJQUFJLEVBQUU7UUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7SUFDaEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxFQUFFLFFBQVEsSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRSxNQUFNLFFBQVEsR0FBRyxDQUFDLFFBQWdCLEVBQUUsRUFBRSxDQUNwQyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hGLE1BQU0sUUFBUSxHQUFHLENBQUMsTUFBYyxFQUFFLEVBQUUsQ0FDbEMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFbkUsT0FBTyxDQUFDLElBQVksRUFBVSxFQUFFO1FBQzlCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxJQUFJLFFBQVEsS0FBSyxHQUFHO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDdEMsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pELE9BQU8sR0FBRyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgVkFMVEVDSF9BVVRIX0NPTkZJRyB9IGZyb20gJy4uL2F1dGgvY29uZmlnJztcbmltcG9ydCB7IFZhbHRlY2hBdXRoQ29uZmlnIH0gZnJvbSAnLi4vYXV0aC90eXBlcyc7XG5cbmV4cG9ydCB0eXBlIFBlcm1pc3Npb25TY29wZSA9ICdhcHAnIHwgJ29yZycgfCAnaW50ZXJuYWwnO1xuXG4vKiogRXRpcXVldGEgbGVnaWJsZSBwb3IgaWRpb21hIChlcy9lbikuIEVsIGJhY2tlbmQgZXMgYXV0b3JpdGF0aXZvIChBRFItMDI0KS4gKi9cbmV4cG9ydCB0eXBlIExvY2FsaXplZExhYmVsID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uUmVzb3VyY2Uge1xuICByZXNvdXJjZTogc3RyaW5nO1xuICBzY29wZTogUGVybWlzc2lvblNjb3BlO1xuICBhcHBJZD86IHN0cmluZztcbiAgYWN0aW9uczogc3RyaW5nW107XG4gIC8qKiBOb21icmUgbGVnaWJsZSBkZWwgcmVjdXJzbyAoZXMvZW4pLCBwcm92aXN0byBwb3IgZWwgYmFja2VuZC4gKi9cbiAgbGFiZWw/OiBMb2NhbGl6ZWRMYWJlbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uQ2F0YWxvZ1Jlc3BvbnNlIHtcbiAgb3BlcmF0aW9uSWQ6IHN0cmluZztcbiAgYXBwSWQ6IHN0cmluZztcbiAgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25SZXNvdXJjZVtdO1xuICAvKiogTm9tYnJlIGxlZ2libGUgKGVzL2VuKSBwb3IgYWNjacOzbiwgdHJhbnN2ZXJzYWwgYSBsb3MgcmVjdXJzb3MuICovXG4gIGFjdGlvbkxhYmVscz86IFJlY29yZDxzdHJpbmcsIExvY2FsaXplZExhYmVsPjtcbn1cblxuLyoqXG4gKiBDb25zdW1lIGVsIGNhdMOhbG9nbyBkZSBwZXJtaXNvcyBkZWwgYmFja2VuZCAoYEdFVCAvb3JnL3tvcmdJZH0vcGVybWlzc2lvbnMtY2F0YWxvZ2ApLlxuICogRWwgYmFja2VuZCBlcyBsYSBmdWVudGUgZGUgdmVyZGFkIGRlIHF1w6kgcGVybWlzb3MgZXhpc3RlbiB5IGRlIHN1IGFsY2FuY2VcbiAqIChnbG9iYWxlcyBkZSBwbGF0YWZvcm1hIHZzLiBwcm9waW9zIGRlIHVuYSBhcHApLiBMYSByZXNwdWVzdGEgaW5jbHV5ZSBlbFxuICogYGFwcElkYCBkZWwgcmVxdWVzdCBwYXJhIHF1ZSBsYSB2aXN0YSBkaXN0aW5nYSBsYSBhcHAgYWN0dWFsLlxuICpcbiAqIFByb21vdmlkbyBkZXNkZSBgc2hvd2Nhc2VgIGEgbGEgbGliIGJham8gZWwgcHJvY2VzbyBkZSBBRFItMDIxLiBVc2FcbiAqIGBWQUxURUNIX0FVVEhfQ09ORklHLmFwaVVybGAgKGNvbW8gYE9yZ1NlcnZpY2VgKSBlbiB2ZXogZGVsIGBlbnZpcm9ubWVudGAgZGUgbGFcbiAqIGFwcCDigJQgbGEgbGliIG5vIGltcG9ydGEgZWwgZW52aXJvbm1lbnQgZGVsIGNvbnN1bWVyLlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25DYXRhbG9nU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVkFMVEVDSF9BVVRIX0NPTkZJRykgcHJpdmF0ZSBjb25maWc6IFZhbHRlY2hBdXRoQ29uZmlnLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudFxuICApIHt9XG5cbiAgZ2V0Q2F0YWxvZyhvcmdJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQZXJtaXNzaW9uQ2F0YWxvZ1Jlc3BvbnNlPiB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8UGVybWlzc2lvbkNhdGFsb2dSZXNwb25zZT4oXG4gICAgICBgJHt0aGlzLmNvbmZpZy5hcGlVcmx9L29yZy8ke29yZ0lkfS9wZXJtaXNzaW9ucy1jYXRhbG9nYFxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBIdW1hbml6YSB1biBjw7NkaWdvIGNydWRvIChgYXBpLWtleXNgIOKGkiBcIkFwaSBLZXlzXCIsIGByZXNldC1wYXNzd29yZGAg4oaSIFwiUmVzZXRcbiAqIFBhc3N3b3JkXCIpIGNvbW8gw7psdGltbyByZWN1cnNvIGN1YW5kbyBlbCBjYXTDoWxvZ28gbm8gdHJhZSBsYWJlbCBwYXJhIMOpbC5cbiAqL1xuZnVuY3Rpb24gaHVtYW5pemVQZXJtaXNzaW9uQ29kZShjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWNvZGUpIHJldHVybiAnJztcbiAgcmV0dXJuIGNvZGVcbiAgICAuc3BsaXQoL1stX10vKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAubWFwKHcgPT4gdy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHcuc2xpY2UoMSkpXG4gICAgLmpvaW4oJyAnKTtcbn1cblxuLyoqIEZ1bmNpw7NuIHF1ZSByZXN1ZWx2ZSB1biBwZXJtaXNvIGByZXNvdXJjZTphY3Rpb25gIGEgc3UgbGFiZWwgbGVnaWJsZS4gKi9cbmV4cG9ydCB0eXBlIFBlcm1pc3Npb25MYWJlbGVyID0gKHBlcm06IHN0cmluZykgPT4gc3RyaW5nO1xuXG4vKipcbiAqIENvbnN0cnV5ZSBlbCByZXNvbHZlZG9yIGRlIGxhYmVscyBkZSBwZXJtaXNvcyBhIHBhcnRpciBkZWwgY2F0w6Fsb2dvIGRlbCBiYWNrZW5kXG4gKiAoZnVlbnRlIMO6bmljYSBkZSB2ZXJkYWQgZGUgbG9zIGxhYmVscywgQURSLTAyNCkuIExvcyBjb25zdW1lcnMgKHBlcm1pc3Npb25zLXZpZXcsXG4gKiBvcmdhbml6YXRpb24tdmlldywgbWVtYmVyLWRldGFpbC1tb2RhbCkgdXNhbiBlc3RvIGVuIHZleiBkZSBkdXBsaWNhciBtYXBhc1xuICogaGFyZGNvZGVhZG9zIGByZXNvdXJjZeKGkmtleWAvYGFjdGlvbuKGkmtleWAuXG4gKlxuICogLSBSZWN1cnNvIOKGkiBgcGVybWlzc2lvbnNbXS5sYWJlbFtsb2NhbGVdYDsgYWNjacOzbiDihpIgYGFjdGlvbkxhYmVsc1thY3Rpb25dW2xvY2FsZV1gLlxuICogLSBXaWxkY2FyZHMgKGAqOipgLCBgcmVzb3VyY2U6KmAsIGAqYCkgdXNhbiBgYWxsTGFiZWxgIChlbCBjYXTDoWxvZ28gbm8gbW9kZWxhIGVsXG4gKiAgIGNvbW9kw61uOyBlbCBjb25zdW1lciBwYXNhIHN1IHN0cmluZyBpMThuLCBwLmVqLiBcIlRvZG9zIGxvcyBwZXJtaXNvc1wiKS5cbiAqIC0gRmFsbGJhY2sgaHVtYW5pemFkbyBzaSBlbCBjYXTDoWxvZ28gbm8gdHJhZSBsYWJlbCAoZXZpdGEgc2FsaWRhcyB2YWPDrWFzIGNvbW9cbiAqICAgXCI6IEdlc3Rpb25hclwiIGFudGUgdW4gcmVjdXJzby9hY2Npw7NuIG51ZXZvIGHDum4gc2luIGV0aXF1ZXRhIGVuIGVsIGJhY2tlbmQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUGVybWlzc2lvbkxhYmVsZXIoXG4gIGNhdGFsb2c6IFBpY2s8UGVybWlzc2lvbkNhdGFsb2dSZXNwb25zZSwgJ3Blcm1pc3Npb25zJyB8ICdhY3Rpb25MYWJlbHMnPixcbiAgbG9jYWxlOiBzdHJpbmcsXG4gIG9wdHM/OiB7IGFsbExhYmVsPzogc3RyaW5nIH1cbik6IFBlcm1pc3Npb25MYWJlbGVyIHtcbiAgY29uc3QgYnlSZXNvdXJjZSA9IG5ldyBNYXA8c3RyaW5nLCBQZXJtaXNzaW9uUmVzb3VyY2U+KCk7XG4gIGZvciAoY29uc3QgciBvZiBjYXRhbG9nLnBlcm1pc3Npb25zID8/IFtdKSBieVJlc291cmNlLnNldChyLnJlc291cmNlLCByKTtcbiAgY29uc3QgYWN0aW9uTGFiZWxzID0gY2F0YWxvZy5hY3Rpb25MYWJlbHMgPz8ge307XG4gIGNvbnN0IGFsbExhYmVsID0gb3B0cz8uYWxsTGFiZWwgPz8gaHVtYW5pemVQZXJtaXNzaW9uQ29kZSgnYWxsJyk7XG5cbiAgY29uc3QgcmVzTGFiZWwgPSAocmVzb3VyY2U6IHN0cmluZykgPT5cbiAgICBieVJlc291cmNlLmdldChyZXNvdXJjZSk/LmxhYmVsPy5bbG9jYWxlXSA/PyBodW1hbml6ZVBlcm1pc3Npb25Db2RlKHJlc291cmNlKTtcbiAgY29uc3QgYWN0TGFiZWwgPSAoYWN0aW9uOiBzdHJpbmcpID0+XG4gICAgYWN0aW9uTGFiZWxzW2FjdGlvbl0/Lltsb2NhbGVdID8/IGh1bWFuaXplUGVybWlzc2lvbkNvZGUoYWN0aW9uKTtcblxuICByZXR1cm4gKHBlcm06IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgW3Jlc291cmNlLCBhY3Rpb25dID0gcGVybS5zcGxpdCgnOicpO1xuICAgIGlmIChyZXNvdXJjZSA9PT0gJyonKSByZXR1cm4gYWxsTGFiZWw7XG4gICAgY29uc3QgcmVzID0gcmVzTGFiZWwocmVzb3VyY2UpO1xuICAgIGNvbnN0IGFjdCA9IGFjdGlvbiA9PT0gJyonID8gYWxsTGFiZWwgOiBhY3RMYWJlbChhY3Rpb24pO1xuICAgIHJldHVybiBgJHtyZXN9OiAke2FjdH1gO1xuICB9O1xufVxuIl19
75
+ /**
76
+ * Agrupa una lista de permisos (`resource:action`) por alcance — app actual /
77
+ * organización / otras apps — usando el catálogo del backend como SSOT del scope
78
+ * (`PermissionResource.scope` + `appId`). Cada permiso se etiqueta con `labeler`.
79
+ *
80
+ * Reutilizado por `val-permissions-view` y `val-member-detail-modal` para que
81
+ * ambos muestren los chips agrupados y tintados de forma idéntica. Función pura
82
+ * (sin Angular DI) — el consumer pasa los labels i18n ya resueltos.
83
+ *
84
+ * - Recursos ausentes del catálogo o con `scope === 'internal'` se descartan
85
+ * (defensa en profundidad junto al filtro del backend, ADR-024).
86
+ * - `scope === 'app'` con `appId === currentAppId` → grupo `app`; otro appId →
87
+ * grupo `other:{appId}`. `scope === 'org'` → grupo `org`.
88
+ */
89
+ export function groupPermissionsByScope(permissions, catalog, currentAppId, labeler, labels) {
90
+ const byResource = new Map();
91
+ for (const r of catalog.permissions ?? [])
92
+ byResource.set(r.resource, r);
93
+ const appPerms = [];
94
+ const orgPerms = [];
95
+ const otherByApp = new Map();
96
+ for (const perm of permissions ?? []) {
97
+ const [resource] = perm.split(':');
98
+ const entry = byResource.get(resource);
99
+ if (!entry || entry.scope === 'internal')
100
+ continue;
101
+ const label = labeler(perm);
102
+ if (entry.scope === 'app') {
103
+ if (entry.appId === currentAppId) {
104
+ appPerms.push(label);
105
+ }
106
+ else {
107
+ const appId = entry.appId ?? '?';
108
+ const arr = otherByApp.get(appId) ?? [];
109
+ arr.push(label);
110
+ otherByApp.set(appId, arr);
111
+ }
112
+ }
113
+ else {
114
+ orgPerms.push(label);
115
+ }
116
+ }
117
+ const groups = [];
118
+ if (appPerms.length) {
119
+ groups.push({ key: 'app', label: labels.app, scope: 'app', perms: appPerms });
120
+ }
121
+ if (orgPerms.length) {
122
+ groups.push({ key: 'org', label: labels.org, scope: 'org', perms: orgPerms });
123
+ }
124
+ for (const [appId, perms] of otherByApp) {
125
+ groups.push({
126
+ key: `other:${appId}`,
127
+ label: `${labels.other}: ${labels.appLabel(appId)}`,
128
+ scope: 'other',
129
+ appId,
130
+ perms,
131
+ });
132
+ }
133
+ return groups;
134
+ }
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi1jYXRhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3NlcnZpY2VzL29yZy9wZXJtaXNzaW9uLWNhdGFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUluRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBeUJyRDs7Ozs7Ozs7O0dBU0c7QUFFSCxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DLFlBQ3VDLE1BQXlCLEVBQ3RELElBQWdCO1FBRGEsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7UUFDdEQsU0FBSSxHQUFKLElBQUksQ0FBWTtJQUN2QixDQUFDO0lBRUosVUFBVSxDQUFDLEtBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FDbEIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sUUFBUSxLQUFLLHNCQUFzQixDQUN6RCxDQUFDO0lBQ0osQ0FBQzsrR0FWVSx3QkFBd0Isa0JBRXpCLG1CQUFtQjttSEFGbEIsd0JBQXdCLGNBRFgsTUFBTTs7NEZBQ25CLHdCQUF3QjtrQkFEcEMsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQUc3QixNQUFNOzJCQUFDLG1CQUFtQjs7QUFXL0I7OztHQUdHO0FBQ0gsU0FBUyxzQkFBc0IsQ0FBQyxJQUFZO0lBQzFDLElBQUksQ0FBQyxJQUFJO1FBQUUsT0FBTyxFQUFFLENBQUM7SUFDckIsT0FBTyxJQUFJO1NBQ1IsS0FBSyxDQUFDLE1BQU0sQ0FBQztTQUNiLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDZixHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxH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SUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQztnQkFDakMsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ3hDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO2FBQU0sQ0FBQztZQUNOLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO0lBQzFDLElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUNELElBQUksUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDaEYsQ0FBQztJQUNELEtBQUssTUFBTSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ1YsR0FBRyxFQUFFLFNBQVMsS0FBSyxFQUFFO1lBQ3JCLEtBQUssRUFBRSxHQUFHLE1BQU0sQ0FBQyxLQUFLLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNuRCxLQUFLLEVBQUUsT0FBTztZQUNkLEtBQUs7WUFDTCxLQUFLO1NBQ04sQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFZBTFRFQ0hfQVVUSF9DT05GSUcgfSBmcm9tICcuLi9hdXRoL2NvbmZpZyc7XG5pbXBvcnQgeyBWYWx0ZWNoQXV0aENvbmZpZyB9IGZyb20gJy4uL2F1dGgvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBQZXJtaXNzaW9uU2NvcGUgPSAnYXBwJyB8ICdvcmcnIHwgJ2ludGVybmFsJztcblxuLyoqIEV0aXF1ZXRhIGxlZ2libGUgcG9yIGlkaW9tYSAoZXMvZW4pLiBFbCBiYWNrZW5kIGVzIGF1dG9yaXRhdGl2byAoQURSLTAyNCkuICovXG5leHBvcnQgdHlwZSBMb2NhbGl6ZWRMYWJlbCA9IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvblJlc291cmNlIHtcbiAgcmVzb3VyY2U6IHN0cmluZztcbiAgc2NvcGU6IFBlcm1pc3Npb25TY29wZTtcbiAgYXBwSWQ/OiBzdHJpbmc7XG4gIGFjdGlvbnM6IHN0cmluZ1tdO1xuICAvKiogTm9tYnJlIGxlZ2libGUgZGVsIHJlY3Vyc28gKGVzL2VuKSwgcHJvdmlzdG8gcG9yIGVsIGJhY2tlbmQuICovXG4gIGxhYmVsPzogTG9jYWxpemVkTGFiZWw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvbkNhdGFsb2dSZXNwb25zZSB7XG4gIG9wZXJhdGlvbklkOiBzdHJpbmc7XG4gIGFwcElkOiBzdHJpbmc7XG4gIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9uUmVzb3VyY2VbXTtcbiAgLyoqIE5vbWJyZSBsZWdpYmxlIChlcy9lbikgcG9yIGFjY2nDs24sIHRyYW5zdmVyc2FsIGEgbG9zIHJlY3Vyc29zLiAqL1xuICBhY3Rpb25MYWJlbHM/OiBSZWNvcmQ8c3RyaW5nLCBMb2NhbGl6ZWRMYWJlbD47XG59XG5cbi8qKlxuICogQ29uc3VtZSBlbCBjYXTDoWxvZ28gZGUgcGVybWlzb3MgZGVsIGJhY2tlbmQgKGBHRVQgL29yZy97b3JnSWR9L3Blcm1pc3Npb25zLWNhdGFsb2dgKS5cbiAqIEVsIGJhY2tlbmQgZXMgbGEgZnVlbnRlIGRlIHZlcmRhZCBkZSBxdcOpIHBlcm1pc29zIGV4aXN0ZW4geSBkZSBzdSBhbGNhbmNlXG4gKiAoZ2xvYmFsZXMgZGUgcGxhdGFmb3JtYSB2cy4gcHJvcGlvcyBkZSB1bmEgYXBwKS4gTGEgcmVzcHVlc3RhIGluY2x1eWUgZWxcbiAqIGBhcHBJZGAgZGVsIHJlcXVlc3QgcGFyYSBxdWUgbGEgdmlzdGEgZGlzdGluZ2EgbGEgYXBwIGFjdHVhbC5cbiAqXG4gKiBQcm9tb3ZpZG8gZGVzZGUgYHNob3djYXNlYCBhIGxhIGxpYiBiYWpvIGVsIHByb2Nlc28gZGUgQURSLTAyMS4gVXNhXG4gKiBgVkFMVEVDSF9BVVRIX0NPTkZJRy5hcGlVcmxgIChjb21vIGBPcmdTZXJ2aWNlYCkgZW4gdmV6IGRlbCBgZW52aXJvbm1lbnRgIGRlIGxhXG4gKiBhcHAg4oCUIGxhIGxpYiBubyBpbXBvcnRhIGVsIGVudmlyb25tZW50IGRlbCBjb25zdW1lci5cbiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBQZXJtaXNzaW9uQ2F0YWxvZ1NlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFZBTFRFQ0hfQVVUSF9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBWYWx0ZWNoQXV0aENvbmZpZyxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnRcbiAgKSB7fVxuXG4gIGdldENhdGFsb2cob3JnSWQ6IHN0cmluZyk6IE9ic2VydmFibGU8UGVybWlzc2lvbkNhdGFsb2dSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0PFBlcm1pc3Npb25DYXRhbG9nUmVzcG9uc2U+KFxuICAgICAgYCR7dGhpcy5jb25maWcuYXBpVXJsfS9vcmcvJHtvcmdJZH0vcGVybWlzc2lvbnMtY2F0YWxvZ2BcbiAgICApO1xuICB9XG59XG5cbi8qKlxuICogSHVtYW5pemEgdW4gY8OzZGlnbyBjcnVkbyAoYGFwaS1rZXlzYCDihpIgXCJBcGkgS2V5c1wiLCBgcmVzZXQtcGFzc3dvcmRgIOKGkiBcIlJlc2V0XG4gKiBQYXNzd29yZFwiKSBjb21vIMO6bHRpbW8gcmVjdXJzbyBjdWFuZG8gZWwgY2F0w6Fsb2dvIG5vIHRyYWUgbGFiZWwgcGFyYSDDqWwuXG4gKi9cbmZ1bmN0aW9uIGh1bWFuaXplUGVybWlzc2lvbkNvZGUoY29kZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFjb2RlKSByZXR1cm4gJyc7XG4gIHJldHVybiBjb2RlXG4gICAgLnNwbGl0KC9bLV9dLylcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLm1hcCh3ID0+IHcuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3LnNsaWNlKDEpKVxuICAgIC5qb2luKCcgJyk7XG59XG5cbi8qKiBGdW5jacOzbiBxdWUgcmVzdWVsdmUgdW4gcGVybWlzbyBgcmVzb3VyY2U6YWN0aW9uYCBhIHN1IGxhYmVsIGxlZ2libGUuICovXG5leHBvcnQgdHlwZSBQZXJtaXNzaW9uTGFiZWxlciA9IChwZXJtOiBzdHJpbmcpID0+IHN0cmluZztcblxuLyoqXG4gKiBDb25zdHJ1eWUgZWwgcmVzb2x2ZWRvciBkZSBsYWJlbHMgZGUgcGVybWlzb3MgYSBwYXJ0aXIgZGVsIGNhdMOhbG9nbyBkZWwgYmFja2VuZFxuICogKGZ1ZW50ZSDDum5pY2EgZGUgdmVyZGFkIGRlIGxvcyBsYWJlbHMsIEFEUi0wMjQpLiBMb3MgY29uc3VtZXJzIChwZXJtaXNzaW9ucy12aWV3LFxuICogb3JnYW5pemF0aW9uLXZpZXcsIG1lbWJlci1kZXRhaWwtbW9kYWwpIHVzYW4gZXN0byBlbiB2ZXogZGUgZHVwbGljYXIgbWFwYXNcbiAqIGhhcmRjb2RlYWRvcyBgcmVzb3VyY2XihpJrZXlgL2BhY3Rpb27ihpJrZXlgLlxuICpcbiAqIC0gUmVjdXJzbyDihpIgYHBlcm1pc3Npb25zW10ubGFiZWxbbG9jYWxlXWA7IGFjY2nDs24g4oaSIGBhY3Rpb25MYWJlbHNbYWN0aW9uXVtsb2NhbGVdYC5cbiAqIC0gV2lsZGNhcmRzIChgKjoqYCwgYHJlc291cmNlOipgLCBgKmApIHVzYW4gYGFsbExhYmVsYCAoZWwgY2F0w6Fsb2dvIG5vIG1vZGVsYSBlbFxuICogICBjb21vZMOtbjsgZWwgY29uc3VtZXIgcGFzYSBzdSBzdHJpbmcgaTE4biwgcC5lai4gXCJUb2RvcyBsb3MgcGVybWlzb3NcIikuXG4gKiAtIEZhbGxiYWNrIGh1bWFuaXphZG8gc2kgZWwgY2F0w6Fsb2dvIG5vIHRyYWUgbGFiZWwgKGV2aXRhIHNhbGlkYXMgdmFjw61hcyBjb21vXG4gKiAgIFwiOiBHZXN0aW9uYXJcIiBhbnRlIHVuIHJlY3Vyc28vYWNjacOzbiBudWV2byBhw7puIHNpbiBldGlxdWV0YSBlbiBlbCBiYWNrZW5kKS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBlcm1pc3Npb25MYWJlbGVyKFxuICBjYXRhbG9nOiBQaWNrPFBlcm1pc3Npb25DYXRhbG9nUmVzcG9uc2UsICdwZXJtaXNzaW9ucycgfCAnYWN0aW9uTGFiZWxzJz4sXG4gIGxvY2FsZTogc3RyaW5nLFxuICBvcHRzPzogeyBhbGxMYWJlbD86IHN0cmluZyB9XG4pOiBQZXJtaXNzaW9uTGFiZWxlciB7XG4gIGNvbnN0IGJ5UmVzb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgUGVybWlzc2lvblJlc291cmNlPigpO1xuICBmb3IgKGNvbnN0IHIgb2YgY2F0YWxvZy5wZXJtaXNzaW9ucyA/PyBbXSkgYnlSZXNvdXJjZS5zZXQoci5yZXNvdXJjZSwgcik7XG4gIGNvbnN0IGFjdGlvbkxhYmVscyA9IGNhdGFsb2cuYWN0aW9uTGFiZWxzID8/IHt9O1xuICBjb25zdCBhbGxMYWJlbCA9IG9wdHM/LmFsbExhYmVsID8/IGh1bWFuaXplUGVybWlzc2lvbkNvZGUoJ2FsbCcpO1xuXG4gIGNvbnN0IHJlc0xhYmVsID0gKHJlc291cmNlOiBzdHJpbmcpID0+XG4gICAgYnlSZXNvdXJjZS5nZXQocmVzb3VyY2UpPy5sYWJlbD8uW2xvY2FsZV0gPz8gaHVtYW5pemVQZXJtaXNzaW9uQ29kZShyZXNvdXJjZSk7XG4gIGNvbnN0IGFjdExhYmVsID0gKGFjdGlvbjogc3RyaW5nKSA9PlxuICAgIGFjdGlvbkxhYmVsc1thY3Rpb25dPy5bbG9jYWxlXSA/PyBodW1hbml6ZVBlcm1pc3Npb25Db2RlKGFjdGlvbik7XG5cbiAgcmV0dXJuIChwZXJtOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IFtyZXNvdXJjZSwgYWN0aW9uXSA9IHBlcm0uc3BsaXQoJzonKTtcbiAgICBpZiAocmVzb3VyY2UgPT09ICcqJykgcmV0dXJuIGFsbExhYmVsO1xuICAgIGNvbnN0IHJlcyA9IHJlc0xhYmVsKHJlc291cmNlKTtcbiAgICBjb25zdCBhY3QgPSBhY3Rpb24gPT09ICcqJyA/IGFsbExhYmVsIDogYWN0TGFiZWwoYWN0aW9uKTtcbiAgICByZXR1cm4gYCR7cmVzfTogJHthY3R9YDtcbiAgfTtcbn1cblxuLyoqIEFsY2FuY2UgZGUgdW4gZ3J1cG8gZGUgcGVybWlzb3M6IGFwcCBhY3R1YWwgwrcgb3JnYW5pemFjacOzbiDCtyBvdHJhIGFwcC4gKi9cbmV4cG9ydCB0eXBlIFBlcm1pc3Npb25Hcm91cFNjb3BlID0gJ2FwcCcgfCAnb3JnJyB8ICdvdGhlcic7XG5cbi8qKiBHcnVwbyBkZSBwZXJtaXNvcyBhZ3J1cGFkb3MgcG9yIGFsY2FuY2UsIGNvbiBzdXMgbGFiZWxzIHlhIHJlc3VlbHRvcy4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGVybWlzc2lvblNjb3BlR3JvdXAge1xuICAvKiogQ2xhdmUgZXN0YWJsZSBkZSB0cmFjayAoYGFwcGAgwrcgYG9yZ2AgwrcgYG90aGVyOnthcHBJZH1gKS4gKi9cbiAga2V5OiBzdHJpbmc7XG4gIC8qKiBMYWJlbCBkZWwgYmFkZ2UgZGUgYWxjYW5jZSAoeWEgdHJhZHVjaWRvKS4gKi9cbiAgbGFiZWw6IHN0cmluZztcbiAgc2NvcGU6IFBlcm1pc3Npb25Hcm91cFNjb3BlO1xuICAvKiogQXBwSWQgZGUgbGEgb3RyYSBhcHAgKHNvbG8gY3VhbmRvIGBzY29wZSA9PT0gJ290aGVyJ2ApLiAqL1xuICBhcHBJZD86IHN0cmluZztcbiAgLyoqIExhYmVscyBkZSBjYWRhIHBlcm1pc28gZGVsIGdydXBvICh5YSByZXN1ZWx0b3MgcG9yIGVsIGxhYmVsZXIpLiAqL1xuICBwZXJtczogc3RyaW5nW107XG59XG5cbi8qKlxuICogRXRpcXVldGFzIGkxOG4gZGUgbG9zIGdydXBvcyBkZSBhbGNhbmNlICsgcmVzb2x2ZWRvciBkZSBub21icmUgZGUgYXBwLCBxdWUgZWxcbiAqIGNvbnN1bWVyIHBhc2EgeWEgdHJhZHVjaWRvcyAobGEgbGliIG5vIHJlc3VlbHZlIGkxOG4gcG9yIHN1IGN1ZW50YSBhY8OhKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJtaXNzaW9uR3JvdXBMYWJlbHMge1xuICAvKiogTGFiZWwgZGVsIGdydXBvIFwiUGVybWlzb3MgZGUgbGEgYXBwXCIuICovXG4gIGFwcDogc3RyaW5nO1xuICAvKiogTGFiZWwgZGVsIGdydXBvIFwiUGVybWlzb3MgZGUgbGEgb3JnYW5pemFjacOzblwiLiAqL1xuICBvcmc6IHN0cmluZztcbiAgLyoqIFByZWZpam8gZGVsIGdydXBvIGRlIG90cmEgYXBwIChzZSBjb25jYXRlbmEgY29uIGVsIG5vbWJyZSBkZSBsYSBhcHApLiAqL1xuICBvdGhlcjogc3RyaW5nO1xuICAvKiogUmVzdWVsdmUgZWwgbm9tYnJlIGxlZ2libGUgZGUgdW5hIGFwcCBwb3Igc3UgYXBwSWQuICovXG4gIGFwcExhYmVsOiAoYXBwSWQ6IHN0cmluZykgPT4gc3RyaW5nO1xufVxuXG4vKipcbiAqIEFncnVwYSB1bmEgbGlzdGEgZGUgcGVybWlzb3MgKGByZXNvdXJjZTphY3Rpb25gKSBwb3IgYWxjYW5jZSDigJQgYXBwIGFjdHVhbCAvXG4gKiBvcmdhbml6YWNpw7NuIC8gb3RyYXMgYXBwcyDigJQgdXNhbmRvIGVsIGNhdMOhbG9nbyBkZWwgYmFja2VuZCBjb21vIFNTT1QgZGVsIHNjb3BlXG4gKiAoYFBlcm1pc3Npb25SZXNvdXJjZS5zY29wZWAgKyBgYXBwSWRgKS4gQ2FkYSBwZXJtaXNvIHNlIGV0aXF1ZXRhIGNvbiBgbGFiZWxlcmAuXG4gKlxuICogUmV1dGlsaXphZG8gcG9yIGB2YWwtcGVybWlzc2lvbnMtdmlld2AgeSBgdmFsLW1lbWJlci1kZXRhaWwtbW9kYWxgIHBhcmEgcXVlXG4gKiBhbWJvcyBtdWVzdHJlbiBsb3MgY2hpcHMgYWdydXBhZG9zIHkgdGludGFkb3MgZGUgZm9ybWEgaWTDqW50aWNhLiBGdW5jacOzbiBwdXJhXG4gKiAoc2luIEFuZ3VsYXIgREkpIOKAlCBlbCBjb25zdW1lciBwYXNhIGxvcyBsYWJlbHMgaTE4biB5YSByZXN1ZWx0b3MuXG4gKlxuICogLSBSZWN1cnNvcyBhdXNlbnRlcyBkZWwgY2F0w6Fsb2dvIG8gY29uIGBzY29wZSA9PT0gJ2ludGVybmFsJ2Agc2UgZGVzY2FydGFuXG4gKiAgIChkZWZlbnNhIGVuIHByb2Z1bmRpZGFkIGp1bnRvIGFsIGZpbHRybyBkZWwgYmFja2VuZCwgQURSLTAyNCkuXG4gKiAtIGBzY29wZSA9PT0gJ2FwcCdgIGNvbiBgYXBwSWQgPT09IGN1cnJlbnRBcHBJZGAg4oaSIGdydXBvIGBhcHBgOyBvdHJvIGFwcElkIOKGklxuICogICBncnVwbyBgb3RoZXI6e2FwcElkfWAuIGBzY29wZSA9PT0gJ29yZydgIOKGkiBncnVwbyBgb3JnYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwUGVybWlzc2lvbnNCeVNjb3BlKFxuICBwZXJtaXNzaW9uczogc3RyaW5nW10sXG4gIGNhdGFsb2c6IFBpY2s8UGVybWlzc2lvbkNhdGFsb2dSZXNwb25zZSwgJ3Blcm1pc3Npb25zJz4sXG4gIGN1cnJlbnRBcHBJZDogc3RyaW5nLFxuICBsYWJlbGVyOiBQZXJtaXNzaW9uTGFiZWxlcixcbiAgbGFiZWxzOiBQZXJtaXNzaW9uR3JvdXBMYWJlbHNcbik6IFBlcm1pc3Npb25TY29wZUdyb3VwW10ge1xuICBjb25zdCBieVJlc291cmNlID0gbmV3IE1hcDxzdHJpbmcsIFBlcm1pc3Npb25SZXNvdXJjZT4oKTtcbiAgZm9yIChjb25zdCByIG9mIGNhdGFsb2cucGVybWlzc2lvbnMgPz8gW10pIGJ5UmVzb3VyY2Uuc2V0KHIucmVzb3VyY2UsIHIpO1xuXG4gIGNvbnN0IGFwcFBlcm1zOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBvcmdQZXJtczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3Qgb3RoZXJCeUFwcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmdbXT4oKTtcblxuICBmb3IgKGNvbnN0IHBlcm0gb2YgcGVybWlzc2lvbnMgPz8gW10pIHtcbiAgICBjb25zdCBbcmVzb3VyY2VdID0gcGVybS5zcGxpdCgnOicpO1xuICAgIGNvbnN0IGVudHJ5ID0gYnlSZXNvdXJjZS5nZXQocmVzb3VyY2UpO1xuICAgIGlmICghZW50cnkgfHwgZW50cnkuc2NvcGUgPT09ICdpbnRlcm5hbCcpIGNvbnRpbnVlO1xuICAgIGNvbnN0IGxhYmVsID0gbGFiZWxlcihwZXJtKTtcbiAgICBpZiAoZW50cnkuc2NvcGUgPT09ICdhcHAnKSB7XG4gICAgICBpZiAoZW50cnkuYXBwSWQgPT09IGN1cnJlbnRBcHBJZCkge1xuICAgICAgICBhcHBQZXJtcy5wdXNoKGxhYmVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFwcElkID0gZW50cnkuYXBwSWQgPz8gJz8nO1xuICAgICAgICBjb25zdCBhcnIgPSBvdGhlckJ5QXBwLmdldChhcHBJZCkgPz8gW107XG4gICAgICAgIGFyci5wdXNoKGxhYmVsKTtcbiAgICAgICAgb3RoZXJCeUFwcC5zZXQoYXBwSWQsIGFycik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yZ1Blcm1zLnB1c2gobGFiZWwpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGdyb3VwczogUGVybWlzc2lvblNjb3BlR3JvdXBbXSA9IFtdO1xuICBpZiAoYXBwUGVybXMubGVuZ3RoKSB7XG4gICAgZ3JvdXBzLnB1c2goeyBrZXk6ICdhcHAnLCBsYWJlbDogbGFiZWxzLmFwcCwgc2NvcGU6ICdhcHAnLCBwZXJtczogYXBwUGVybXMgfSk7XG4gIH1cbiAgaWYgKG9yZ1Blcm1zLmxlbmd0aCkge1xuICAgIGdyb3Vwcy5wdXNoKHsga2V5OiAnb3JnJywgbGFiZWw6IGxhYmVscy5vcmcsIHNjb3BlOiAnb3JnJywgcGVybXM6IG9yZ1Blcm1zIH0pO1xuICB9XG4gIGZvciAoY29uc3QgW2FwcElkLCBwZXJtc10gb2Ygb3RoZXJCeUFwcCkge1xuICAgIGdyb3Vwcy5wdXNoKHtcbiAgICAgIGtleTogYG90aGVyOiR7YXBwSWR9YCxcbiAgICAgIGxhYmVsOiBgJHtsYWJlbHMub3RoZXJ9OiAke2xhYmVscy5hcHBMYWJlbChhcHBJZCl9YCxcbiAgICAgIHNjb3BlOiAnb3RoZXInLFxuICAgICAgYXBwSWQsXG4gICAgICBwZXJtcyxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gZ3JvdXBzO1xufVxuIl19
@@ -2,5 +2,5 @@
2
2
  * Current version of valtech-components.
3
3
  * This is automatically updated during the publish process.
4
4
  */
5
- export const VERSION = '4.0.141';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4xNDEnO1xuIl19
5
+ export const VERSION = '4.0.142';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXJyZW50IHZlcnNpb24gb2YgdmFsdGVjaC1jb21wb25lbnRzLlxuICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IHVwZGF0ZWQgZHVyaW5nIHRoZSBwdWJsaXNoIHByb2Nlc3MuXG4gKi9cbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzQuMC4xNDInO1xuIl19