@tiba-spark/client-shared-lib 25.4.0-723 → 25.4.0-736
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.
- package/esm2022/libraries/modules/user/user.actions.mjs +6 -6
- package/esm2022/libraries/modules/user/user.state.mjs +13 -14
- package/esm2022/libraries/service-proxy/cloud-service-proxies.mjs +171 -55
- package/esm2022/libraries/services/permissions.service.mjs +10 -15
- package/fesm2022/tiba-spark-client-shared-lib.mjs +198 -85
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/modules/user/user.actions.d.ts +2 -2
- package/libraries/modules/user/user.actions.d.ts.map +1 -1
- package/libraries/modules/user/user.state.d.ts +5 -5
- package/libraries/modules/user/user.state.d.ts.map +1 -1
- package/libraries/service-proxy/cloud-service-proxies.d.ts +82 -21
- package/libraries/service-proxy/cloud-service-proxies.d.ts.map +1 -1
- package/libraries/services/permissions.service.d.ts +2 -7
- package/libraries/services/permissions.service.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -75,14 +75,14 @@ export class Disable2FAAction {
|
|
|
75
75
|
this.userId = userId;
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
let
|
|
79
|
-
static { this.type = '[user]
|
|
78
|
+
let LoadUserCapabilitiesAction = class LoadUserCapabilitiesAction {
|
|
79
|
+
static { this.type = '[user] LoadUserCapabilities'; }
|
|
80
80
|
constructor() { }
|
|
81
81
|
};
|
|
82
|
-
|
|
82
|
+
LoadUserCapabilitiesAction = __decorate([
|
|
83
83
|
TrackAction()
|
|
84
|
-
],
|
|
85
|
-
export {
|
|
84
|
+
], LoadUserCapabilitiesAction);
|
|
85
|
+
export { LoadUserCapabilitiesAction };
|
|
86
86
|
export class UpdateAndActivateUserAction {
|
|
87
87
|
static { this.type = '[user] UpdateAndActivateUser'; }
|
|
88
88
|
constructor(user) {
|
|
@@ -95,4 +95,4 @@ export class UpdateTenantSingleSignOnAction {
|
|
|
95
95
|
this.tenantSingleSignOnDto = tenantSingleSignOnDto;
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5hY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9tb2R1bGVzL3VzZXIvdXNlci5hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFHL0QsSUFBTSxlQUFlLEdBQXJCLE1BQU0sZUFBZTthQUNWLFNBQUksR0FBRyxrQkFBa0IsQUFBckIsQ0FBc0I7SUFFMUMsWUFBbUIsSUFBbUI7UUFBbkIsU0FBSSxHQUFKLElBQUksQ0FBZTtJQUFJLENBQUM7O0FBSGhDLGVBQWU7SUFEM0IsV0FBVyxFQUFFO0dBQ0QsZUFBZSxDQUkzQjs7QUFFRCxNQUFNLE9BQU8saUJBQWlCO2FBQ1osU0FBSSxHQUFHLGdCQUFnQixDQUFDO0lBRXhDLFlBQW1CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ2pDLENBQUM7O0FBR0gsTUFBTSxPQUFPLGNBQWM7YUFDVCxTQUFJLEdBQUcsWUFBWSxDQUFDO0lBRXBDLFlBQW1CLEtBQWdCO1FBQWhCLFVBQUssR0FBTCxLQUFLLENBQVc7SUFDbkMsQ0FBQzs7QUFHSCxNQUFNLE9BQU8sZ0JBQWdCO2FBQ1gsU0FBSSxHQUFHLG1CQUFtQixDQUFDO0lBRTNDLGdCQUFnQixDQUFDOztBQUduQixNQUFNLE9BQU8sYUFBYTthQUNELFNBQUksR0FBRyxZQUFZLENBQUM7SUFFM0MsWUFBbUIsWUFBNkI7UUFBN0IsaUJBQVksR0FBWixZQUFZLENBQWlCO0lBQ2hELENBQUM7O0FBR0gsTUFBTSxPQUFPLGdCQUFnQjthQUNKLFNBQUksR0FBRyxlQUFlLENBQUM7SUFFOUMsWUFBbUIsSUFBYTtRQUFiLFNBQUksR0FBSixJQUFJLENBQVM7SUFDaEMsQ0FBQzs7QUFHSCxNQUFNLE9BQU8sY0FBYzthQUNGLFNBQUksR0FBRyxhQUFhLENBQUM7SUFFNUMsWUFBbUIsSUFBYTtRQUFiLFNBQUksR0FBSixJQUFJLENBQVM7SUFDaEMsQ0FBQzs7QUFHSCxNQUFNLE9BQU8sMEJBQTBCO2FBQ2QsU0FBSSxHQUFHLHlCQUF5QixDQUFDO0lBRXhELFlBQW1CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ2pDLENBQUM7O0FBSUgsTUFBTSxPQUFPLG1CQUFtQjthQUNQLFNBQUksR0FBRyxzQkFBc0IsQ0FBQztJQUVyRCxZQUFtQixNQUFjLEVBQVMsTUFBa0I7UUFBekMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUFTLFdBQU0sR0FBTixNQUFNLENBQVk7SUFDNUQsQ0FBQzs7QUFHSCxNQUFNLE9BQU8sbUNBQW1DO2FBQ3ZCLFNBQUksR0FBRyxzQ0FBc0MsQ0FBQztJQUVyRSxZQUFtQixRQUFnQjtRQUFoQixhQUFRLEdBQVIsUUFBUSxDQUFRO0lBQ25DLENBQUM7O0FBR0gsTUFBTSxPQUFPLGVBQWU7YUFDSCxTQUFJLEdBQUcsd0JBQXdCLENBQUM7SUFFdkQsWUFBbUIsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDakMsQ0FBQzs7QUFHSCxNQUFNLE9BQU8sZ0JBQWdCO2FBQ0osU0FBSSxHQUFHLHlCQUF5QixDQUFDO0lBRXhELFlBQW1CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO0lBQ2pDLENBQUM7O0FBSUksSUFBTSwwQkFBMEIsR0FBaEMsTUFBTSwwQkFBMEI7YUFDckIsU0FBSSxHQUFHLDZCQUE2QixBQUFoQyxDQUFpQztJQUVyRCxnQkFBZ0IsQ0FBQzs7QUFITiwwQkFBMEI7SUFEdEMsV0FBVyxFQUFFO0dBQ0QsMEJBQTBCLENBSXRDOztBQUVELE1BQU0sT0FBTywyQkFBMkI7YUFDZixTQUFJLEdBQUcsOEJBQThCLENBQUM7SUFFN0QsWUFBbUIsSUFBYTtRQUFiLFNBQUksR0FBSixJQUFJLENBQVM7SUFDaEMsQ0FBQzs7QUFHSCxNQUFNLE9BQU8sOEJBQThCO2FBQ2xCLFNBQUksR0FBRyxpREFBaUQsQ0FBQztJQUVoRixZQUFtQixxQkFBa0Q7UUFBbEQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUE2QjtJQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXBkYXRlVGVuYW50U2luZ2xlU2lnbk9uRHRvLCBVc2VyRHRvLCBVc2VyRmlsdGVyRHRvLCBVc2VyUmVnaXN0ZXJEdG8sIFVzZXJTdGF0dXMgfSBmcm9tIFwiLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXNcIjtcbmltcG9ydCB7IFRyYWNrQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3V0aWxzL25neHMvdHJhY2stYWN0aW9uLmRlY29yYXRvclwiO1xuXG5AVHJhY2tBY3Rpb24oKVxuZXhwb3J0IGNsYXNzIExvYWRVc2Vyc0FjdGlvbiB7XG4gIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1t1c2VyXSBMb2FkVXNlcnMnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBib2R5OiBVc2VyRmlsdGVyRHRvKSB7IH1cbn1cblxuZXhwb3J0IGNsYXNzIExvYWQyRkFVc2VyQWN0aW9uIHtcbiAgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW3VzZXJdIDJGQVVzZXInO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1c2VySWQ6IG51bWJlcikge1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRVc2Vyc0FjdGlvbiB7XG4gIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1t1c2VyXSBTZXQnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1c2VyczogVXNlckR0b1tdKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIENsZWFyVXNlcnNBY3Rpb24ge1xuICBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbdXNlcl0gQ2xlYXJVc2Vycyc7XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cbn1cblxuZXhwb3J0IGNsYXNzIEFkZFVzZXJBY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW3VzZXJdIEFkZCc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHVzZXJSZWdpc3RlcjogVXNlclJlZ2lzdGVyRHRvKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERlbGV0ZVVzZXJBY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW3VzZXJdIERlbGV0ZSc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHVzZXI6IFVzZXJEdG8pIHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgRWRpdFVzZXJBY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW3VzZXJdIEVkaXQnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1c2VyOiBVc2VyRHRvKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFJlc2VuZFVzZXJJbnZpdGF0aW9uQWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1t1c2VyXSBSZXNlbmRJbnZpdGF0aW9uJztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdXNlcklkOiBudW1iZXIpIHtcbiAgfVxufVxuXG5cbmV4cG9ydCBjbGFzcyBTZXRVc2VyU3RhdHVzQWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1t1c2VyXSBTZXRVc2VyU3RhdHVzJztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdXNlcklkOiBudW1iZXIsIHB1YmxpYyBzdGF0dXM6IFVzZXJTdGF0dXMpIHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVzZW5kUGVuZGluZ0FkbWluSW52aXRhdGlvbnNBY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW3VzZXJdIFJlc2VuZFBlbmRpbmdBZG1pbkludml0YXRpb25zJztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVuYW50SWQ6IG51bWJlcikge1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBFbmFibGUyRkFBY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW3VzZXJdIEVuYWJsZTJGQUFjdGlvbic7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHVzZXJJZDogbnVtYmVyKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIERpc2FibGUyRkFBY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW3VzZXJdIERpc2FibGUyRkFBY3Rpb24nO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1c2VySWQ6IG51bWJlcikge1xuICB9XG59XG5cbkBUcmFja0FjdGlvbigpXG5leHBvcnQgY2xhc3MgTG9hZFVzZXJDYXBhYmlsaXRpZXNBY3Rpb24ge1xuICBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbdXNlcl0gTG9hZFVzZXJDYXBhYmlsaXRpZXMnO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVBbmRBY3RpdmF0ZVVzZXJBY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW3VzZXJdIFVwZGF0ZUFuZEFjdGl2YXRlVXNlcic7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHVzZXI6IFVzZXJEdG8pIHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlVGVuYW50U2luZ2xlU2lnbk9uQWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tUZW5hbnRTZXR0aW5nc10gVXBkYXRlVGVuYW50U2luZ2xlU2lnbk9uQWN0aW9uJztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVuYW50U2luZ2xlU2lnbk9uRHRvOiBVcGRhdGVUZW5hbnRTaW5nbGVTaWduT25EdG8pIHtcbiAgfVxufVxuIl19
|
|
@@ -9,7 +9,7 @@ import { parseApiErrorMessage } from '../../utils/api-helper.util';
|
|
|
9
9
|
import { markEntitiesAsChanged, RowOperation } from '../../utils/helper.util';
|
|
10
10
|
import { SetUserNameAction, UpdateTenantInfoProps } from '../auth/session.actions';
|
|
11
11
|
import { SessionState } from '../auth/session.state';
|
|
12
|
-
import { AddUserAction, ClearUsersAction, DeleteUserAction, Disable2FAAction, EditUserAction, Enable2FAAction, Load2FAUserAction,
|
|
12
|
+
import { AddUserAction, ClearUsersAction, DeleteUserAction, Disable2FAAction, EditUserAction, Enable2FAAction, Load2FAUserAction, LoadUserCapabilitiesAction, LoadUsersAction, ResendPendingAdminInvitationsAction, ResendUserInvitationAction, SetUsersAction, SetUserStatusAction, UpdateAndActivateUserAction, UpdateTenantSingleSignOnAction } from './user.actions';
|
|
13
13
|
import * as i0 from "@angular/core";
|
|
14
14
|
import * as i1 from "@ngxs/store";
|
|
15
15
|
import * as i2 from "../../service-proxy/cloud-service-proxies";
|
|
@@ -37,8 +37,8 @@ let UserState = class UserState {
|
|
|
37
37
|
static displayed(state) {
|
|
38
38
|
return state.displayed;
|
|
39
39
|
}
|
|
40
|
-
static
|
|
41
|
-
return state.
|
|
40
|
+
static capabilities(state) {
|
|
41
|
+
return state.capabilities;
|
|
42
42
|
}
|
|
43
43
|
static userTwoFAStatus(state) {
|
|
44
44
|
return state.userTwoFAStatus;
|
|
@@ -51,14 +51,13 @@ let UserState = class UserState {
|
|
|
51
51
|
});
|
|
52
52
|
}));
|
|
53
53
|
}
|
|
54
|
-
|
|
54
|
+
onLoadUserCapabilitiesAction(ctx, _) {
|
|
55
55
|
ctx.patchState({
|
|
56
|
-
|
|
56
|
+
capabilities: null,
|
|
57
57
|
});
|
|
58
|
-
|
|
59
|
-
return getAvailablePermissionTypes$.pipe(tap(permissionTypes => {
|
|
58
|
+
return this.usersCloudServiceProxy.getCapabilities().pipe(tap(res => {
|
|
60
59
|
ctx.patchState({
|
|
61
|
-
|
|
60
|
+
capabilities: res.data,
|
|
62
61
|
});
|
|
63
62
|
}));
|
|
64
63
|
}
|
|
@@ -306,8 +305,8 @@ __decorate([
|
|
|
306
305
|
Action(Load2FAUserAction)
|
|
307
306
|
], UserState.prototype, "onLoad2FAUserAction", null);
|
|
308
307
|
__decorate([
|
|
309
|
-
Action(
|
|
310
|
-
], UserState.prototype, "
|
|
308
|
+
Action(LoadUserCapabilitiesAction)
|
|
309
|
+
], UserState.prototype, "onLoadUserCapabilitiesAction", null);
|
|
311
310
|
__decorate([
|
|
312
311
|
Action(LoadUsersAction)
|
|
313
312
|
], UserState.prototype, "onLoadUsersAction", null);
|
|
@@ -358,7 +357,7 @@ __decorate([
|
|
|
358
357
|
], UserState, "displayed", null);
|
|
359
358
|
__decorate([
|
|
360
359
|
Selector()
|
|
361
|
-
], UserState, "
|
|
360
|
+
], UserState, "capabilities", null);
|
|
362
361
|
__decorate([
|
|
363
362
|
Selector()
|
|
364
363
|
], UserState, "userTwoFAStatus", null);
|
|
@@ -369,7 +368,7 @@ UserState = __decorate([
|
|
|
369
368
|
archived: [],
|
|
370
369
|
displayed: [],
|
|
371
370
|
counter: 0,
|
|
372
|
-
|
|
371
|
+
capabilities: null,
|
|
373
372
|
userTwoFAStatus: null
|
|
374
373
|
},
|
|
375
374
|
})
|
|
@@ -377,5 +376,5 @@ UserState = __decorate([
|
|
|
377
376
|
export { UserState };
|
|
378
377
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserState, decorators: [{
|
|
379
378
|
type: Injectable
|
|
380
|
-
}], ctorParameters: () => [{ type: i1.Store }, { type: i2.UsersCloudServiceProxy }, { type: i3.UsersIdentityServiceProxy }, { type: i4.MessageBarService }, { type: i5.AppConfigService }, { type: i2.TenantCloudServiceProxy }, { type: i6.TranslateService }, { type: i2.BackofficeCloudServiceProxy }], propDecorators: { onLoad2FAUserAction: [],
|
|
381
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy91c2VyL3VzZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEUsT0FBTyxFQUVtRSxvQkFBb0IsRUFJVyxVQUFVLEVBQ2xILE1BQU0sMkNBQTJDLENBQUM7QUFHbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQ3BHLGlCQUFpQixFQUNqQix5QkFBeUIsRUFBRSxlQUFlLEVBQUUsbUNBQW1DLEVBQUUsMEJBQTBCLEVBQzNHLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSw4QkFBOEIsRUFDakcsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFxQmpC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M0M7QUFJRDtJQURDLE1BQU0sQ0FBQyxlQUFlLENBQUM7a0RBc0J2QjtBQUdEO0lBREMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO21EQXNCeEI7QUFHRDtJQURDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzttREFPeEI7QUFHRDtJQURDLE1BQU0sQ0FBQywyQkFBMkIsQ0FBQzs4REFvQm5DO0FBR0Q7SUFEQyxNQUFNLENBQUMsOEJBQThCLENBQUM7aUVBV3RDO0FBclNhO0lBRGIsUUFBUSxFQUFFOzhCQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7K0JBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtnQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO3NDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7c0NBR1Y7QUFuQ1UsU0FBUztJQVZyQixLQUFLLENBQWlCO1FBQ3JCLElBQUksRUFBRSxPQUFPO1FBQ2IsUUFBUSxFQUFFO1lBQ1IsUUFBUSxFQUFFLEVBQUU7WUFDWixTQUFTLEVBQUUsRUFBRTtZQUNiLE9BQU8sRUFBRSxDQUFDO1lBQ1YsZUFBZSxFQUFFLElBQUk7WUFDckIsZUFBZSxFQUFFLElBQUk7U0FDdEI7S0FDRixDQUFDO0dBQ1csU0FBUyxDQTJWckI7OzRGQTNWWSxTQUFTO2tCQVhyQixVQUFVO3FVQWlEVCxtQkFBbUIsTUFXbkIsMkJBQTJCLE1BYzNCLGlCQUFpQixNQVdqQixvQkFBb0IsTUFPcEIsZUFBZSxNQXVCZixnQkFBZ0IsTUEyQ2hCLGtCQUFrQixNQXdCbEIsNEJBQTRCLE1BTzVCLHFCQUFxQixNQTRCckIscUNBQXFDLE1BV3JDLGlCQUFpQixNQXdCakIsa0JBQWtCLE1Bd0JsQixrQkFBa0IsTUFTbEIsNkJBQTZCLE1Bc0I3QixnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBBY3Rpb24sIFNlbGVjdG9yLCBTdGF0ZSwgU3RhdGVDb250ZXh0LCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IGNsb25lRGVlcCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lc3NhZ2VCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlLWJhci9tZXNzYWdlLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IEFwcFR5cGUsIExvY2FsaXphdGlvbiwgVXNlckNyZWF0aW9uVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7XG4gIEJhY2tvZmZpY2VDbG91ZFNlcnZpY2VQcm94eSxcbiAgT2JqZWN0SHR0cFJlc3BvbnNlRGF0YSwgUGVybWlzc2lvblR5cGUsIFByb2JsZW1EZXRhaWxzSHR0cFJlc3BvbnNlRGF0YSwgU2luZ2xlU2lnbk9uUHJvdmlkZXIsXG4gIFRlbmFudENsb3VkU2VydmljZVByb3h5LCBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEsXG4gIFR3b0ZBVXNlckR0byxcbiAgVXBkYXRlVGVuYW50U2luZ2xlU2lnbk9uRHRvLFxuICBVcGRhdGVUZW5hbnRTaW5nbGVTaWduT25EdG9IdHRwUmVzcG9uc2VEYXRhLCBVc2VyRHRvLCBVc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSwgVXNlcnNDbG91ZFNlcnZpY2VQcm94eSwgVXNlclN0YXR1c1xufSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBVc2Vyc0lkZW50aXR5U2VydmljZVByb3h5IH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBwYXJzZUFwaUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2FwaS1oZWxwZXIudXRpbCc7XG5pbXBvcnQgeyBtYXJrRW50aXRpZXNBc0NoYW5nZWQsIFJvd09wZXJhdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzL2hlbHBlci51dGlsJztcbmltcG9ydCB7IFRlbmFudEluZm8gfSBmcm9tICcuLi9hdXRoL21vZGVsL3RlbmFudC1pbmZvLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTZXRVc2VyTmFtZUFjdGlvbiwgVXBkYXRlVGVuYW50SW5mb1Byb3BzIH0gZnJvbSAnLi4vYXV0aC9zZXNzaW9uLmFjdGlvbnMnO1xuaW1wb3J0IHsgU2Vzc2lvblN0YXRlIH0gZnJvbSAnLi4vYXV0aC9zZXNzaW9uLnN0YXRlJztcbmltcG9ydCB7XG4gIEFkZFVzZXJBY3Rpb24sIENsZWFyVXNlcnNBY3Rpb24sIERlbGV0ZVVzZXJBY3Rpb24sIERpc2FibGUyRkFBY3Rpb24sIEVkaXRVc2VyQWN0aW9uLCBFbmFibGUyRkFBY3Rpb24sXG4gIExvYWQyRkFVc2VyQWN0aW9uLFxuICBMb2FkVXNlclBlcm1pc3Npb25zQWN0aW9uLCBMb2FkVXNlcnNBY3Rpb24sIFJlc2VuZFBlbmRpbmdBZG1pbkludml0YXRpb25zQWN0aW9uLCBSZXNlbmRVc2VySW52aXRhdGlvbkFjdGlvbixcbiAgU2V0VXNlcnNBY3Rpb24sIFNldFVzZXJTdGF0dXNBY3Rpb24sIFVwZGF0ZUFuZEFjdGl2YXRlVXNlckFjdGlvbiwgVXBkYXRlVGVuYW50U2luZ2xlU2lnbk9uQWN0aW9uXG59IGZyb20gJy4vdXNlci5hY3Rpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyU3RhdGVNb2RlbCB7XG4gIGFyY2hpdmVkOiBVc2VyRHRvW107XG4gIGRpc3BsYXllZDogVXNlckR0b1tdO1xuICBjb3VudGVyOiBudW1iZXI7XG4gIHBlcm1pc3Npb25UeXBlczogUGVybWlzc2lvblR5cGVbXTtcbiAgdXNlclR3b0ZBU3RhdHVzPzogVHdvRkFVc2VyRHRvO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5AU3RhdGU8VXNlclN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ3VzZXJzJyxcbiAgZGVmYXVsdHM6IHtcbiAgICBhcmNoaXZlZDogW10sXG4gICAgZGlzcGxheWVkOiBbXSxcbiAgICBjb3VudGVyOiAwLFxuICAgIHBlcm1pc3Npb25UeXBlczogbnVsbCxcbiAgICB1c2VyVHdvRkFTdGF0dXM6IG51bGxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVXNlclN0YXRlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIHVzZXJzQ2xvdWRTZXJ2aWNlUHJveHk6IFVzZXJzQ2xvdWRTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSB1c2Vyc0lkZW50aXR5U2VydmljZVByb3h5OiBVc2Vyc0lkZW50aXR5U2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgbWVzc2FnZUJhclNlcnZpY2U6IE1lc3NhZ2VCYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50Q2xvdWRTZXJ2aWNlUHJveHk6IFRlbmFudENsb3VkU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGJhY2tvZmZpY2VDbG91ZFNlcnZpY2VQcm94eTogQmFja29mZmljZUNsb3VkU2VydmljZVByb3h5KSB7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGNvdW50ZXIoc3RhdGU6IFVzZXJTdGF0ZU1vZGVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RhdGUuY291bnRlcjtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgYXJjaGl2ZWQoc3RhdGU6IFVzZXJTdGF0ZU1vZGVsKTogVXNlckR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuYXJjaGl2ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGRpc3BsYXllZChzdGF0ZTogVXNlclN0YXRlTW9kZWwpOiBVc2VyRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5kaXNwbGF5ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHBlcm1pc3Npb25UeXBlcyhzdGF0ZTogVXNlclN0YXRlTW9kZWwpOiBQZXJtaXNzaW9uVHlwZVtdIHtcbiAgICByZXR1cm4gc3RhdGUucGVybWlzc2lvblR5cGVzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB1c2VyVHdvRkFTdGF0dXMoc3RhdGU6IFVzZXJTdGF0ZU1vZGVsKTogVHdvRkFVc2VyRHRvIHtcbiAgICByZXR1cm4gc3RhdGUudXNlclR3b0ZBU3RhdHVzO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkMkZBVXNlckFjdGlvbilcbiAgb25Mb2FkMkZBVXNlckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIGFjdGlvbjogTG9hZDJGQVVzZXJBY3Rpb24pIHtcbiAgICBjb25zdCBnZXQyRkFVc2VyJCA9IHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS5nZXRVc2VyVHdvRkFTdGF0dXMoYWN0aW9uLnVzZXJJZCk7XG5cbiAgICByZXR1cm4gZ2V0MkZBVXNlciQucGlwZSh0YXAodXNlciA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHVzZXJUd29GQVN0YXR1czogdXNlci5kYXRhLFxuICAgICAgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihMb2FkVXNlclBlcm1pc3Npb25zQWN0aW9uKVxuICBvbkxvYWRVc2VyUGVybWlzc2lvbnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8VXNlclN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRVc2VyUGVybWlzc2lvbnNBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBwZXJtaXNzaW9uVHlwZXM6IG51bGwsXG4gICAgfSk7XG5cbiAgICBjb25zdCBnZXRBdmFpbGFibGVQZXJtaXNzaW9uVHlwZXMkID0gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LmdldEF2YWlsYWJsZVBlcm1pc3Npb25UeXBlcygpO1xuICAgIHJldHVybiBnZXRBdmFpbGFibGVQZXJtaXNzaW9uVHlwZXMkLnBpcGUodGFwKHBlcm1pc3Npb25UeXBlcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIHBlcm1pc3Npb25UeXBlczogcGVybWlzc2lvblR5cGVzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRVc2Vyc0FjdGlvbilcbiAgb25Mb2FkVXNlcnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8VXNlclN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRVc2Vyc0FjdGlvbikge1xuICAgIGNvbnN0IGdldFVzZXJzJCA9IHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS5nZXRBbGxVc2VycyhhY3Rpb24uYm9keSk7XG4gICAgcmV0dXJuIGdldFVzZXJzJC5waXBlKHRhcCh1c2Vyc1dyYXBwZXIgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBhcmNoaXZlZDogdXNlcnNXcmFwcGVyLmRhdGEuZW50aXRpZXMsXG4gICAgICAgIGNvdW50ZXI6IHVzZXJzV3JhcHBlci5kYXRhLmNvdW50ZXIsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFVzZXJzQWN0aW9uKVxuICBvblNldE1vbnRobGllc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0VXNlcnNBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkaXNwbGF5ZWQ6IGFjdGlvbi51c2VycyB8fCBbXSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQWRkVXNlckFjdGlvbilcbiAgb25BZGRVc2VyQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFVzZXJTdGF0ZU1vZGVsPiwgeyB1c2VyUmVnaXN0ZXIgfTogQWRkVXNlckFjdGlvbik6IE9ic2VydmFibGU8VXNlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmluZm8oTG9jYWxpemF0aW9uLnJlZ2lzdGVyX25ld191c2VyKTtcbiAgICByZXR1cm4gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LnJlZ2lzdGVyVXNlcih1c2VyUmVnaXN0ZXIpLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgIGlmIChyZXMuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5hZGRVc2VyVG9TdG9yZShjdHgsIHJlcy5kYXRhKTtcbiAgICAgICAgICBsZXQgaW52aXRlRGlzYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIGlmICh0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLkNsb3VkKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW5hbnRJbmZvOiBUZW5hbnRJbmZvID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudGVuYW50SW5mbyk7XG4gICAgICAgICAgICBpbnZpdGVEaXNhYmxlID0gIXRlbmFudEluZm8/LnByb3BzLmhhc1NtdHBEZXRhaWxzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWFkeUZvclVzZVVzZXIgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS51c2VyQ3JlYXRpb25UeXBlID09PSBVc2VyQ3JlYXRpb25UeXBlLlJlYWR5Rm9yVXNlO1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSByZWFkeUZvclVzZVVzZXIgP1xuICAgICAgICAgICAgTG9jYWxpemF0aW9uLnVzZXJfYWRkZWRfc3VjY2Vzc2Z1bGx5X21zZyA6XG4gICAgICAgICAgICBpbnZpdGVEaXNhYmxlID8gTG9jYWxpemF0aW9uLnVzZXJfY3JlYXRlZF9zdWNjZXNzZnVsbHlfd2l0aG91dF9pbnZpdGVfbXNnIDogTG9jYWxpemF0aW9uLnVzZXJfaW52aXRlZF9zdWNjZXNzZnVsbHlfbXNnO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhzdWNjZXNzTXNnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IocGFyc2VBcGlFcnJvck1lc3NhZ2UoZSkpXG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihFZGl0VXNlckFjdGlvbilcbiAgb25FZGl0VXNlckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHsgdXNlciB9OiBFZGl0VXNlckFjdGlvbik6IE9ic2VydmFibGU8VXNlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmluZm8oTG9jYWxpemF0aW9uLnVwYWR0aW5nX3VzZXIpO1xuICAgIHJldHVybiB0aGlzLnVzZXJzQ2xvdWRTZXJ2aWNlUHJveHkudXBkYXRlVXNlcih1c2VyKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICBpZiAocmVzLmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVXNlckluU3RvcmUoY3R4LCByZXMuZGF0YSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVVc2VyU2Vzc2lvblN0b3JhZ2UocmVzLmRhdGEpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24udXNlcl9lZGl0ZWRfc3VjY2Vzc2Z1bGx5X21zZyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogZSA9PiB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVXNlclNlc3Npb25TdG9yYWdlKHVwZGF0ZWRVc2VyUGF5bG9hZDogVXNlckR0bykge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudXNlckluZm8pO1xuICAgIGlmIChjdXJyZW50VXNlci51c2VySWQgPT09IHVwZGF0ZWRVc2VyUGF5bG9hZC5pZCkge1xuICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBgJHt1cGRhdGVkVXNlclBheWxvYWQubmFtZX0gJHt1cGRhdGVkVXNlclBheWxvYWQubGFzdE5hbWV9YDtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNldFVzZXJOYW1lQWN0aW9uKGRpc3BsYXlOYW1lKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRVc2VyVG9TdG9yZShjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHVzZXI6IFVzZXJEdG8pIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSBjdHguZ2V0U3RhdGUoKS5kaXNwbGF5ZWQ7XG4gICAgbWFya0VudGl0aWVzQXNDaGFuZ2VkKFt1c2VyXSwgUm93T3BlcmF0aW9uLkluc2VydCk7XG4gICAgZGlzcGxheWVkLnVuc2hpZnQodXNlcik7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGlzcGxheWVkOiBbLi4uZGlzcGxheWVkXSxcbiAgICAgIGNvdW50ZXI6IGN0eC5nZXRTdGF0ZSgpLmNvdW50ZXIgKyAxLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVVc2VySW5TdG9yZShjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHVzZXI6IFVzZXJEdG8pIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSBjdHguZ2V0U3RhdGUoKS5kaXNwbGF5ZWQ7XG4gICAgY29uc3QgaW5kZXggPSBkaXNwbGF5ZWQuZmluZEluZGV4KGVudGl0eSA9PiBlbnRpdHkuaWQgPT09IHVzZXIuaWQpO1xuICAgIGRpc3BsYXllZFtpbmRleF0gPSB1c2VyO1xuICAgIG1hcmtFbnRpdGllc0FzQ2hhbmdlZChbdXNlcl0sIFJvd09wZXJhdGlvbi5VcGRhdGUpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGRpc3BsYXllZDogWy4uLmRpc3BsYXllZF0sXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKERlbGV0ZVVzZXJBY3Rpb24pXG4gIG9uRGVsZXRlVXNlckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHsgdXNlciB9OiBEZWxldGVVc2VyQWN0aW9uKTogT2JzZXJ2YWJsZTx2b2lkIHwgVXNlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LmRlbGV0ZVVzZXIodXNlci5pZCkucGlwZSh0YXAoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmRlbGV0ZVVzZXJGcm9tU3RvcmUoY3R4LCB1c2VyKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbi51c2VyX2RlbGV0ZV9zdWNjZXNzKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZSA9PiB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlVXNlckZyb21TdG9yZShjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHVzZXI6IFVzZXJEdG8pIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSBjdHguZ2V0U3RhdGUoKS5kaXNwbGF5ZWQ7XG4gICAgbWFya0VudGl0aWVzQXNDaGFuZ2VkKFt1c2VyXSwgUm93T3BlcmF0aW9uLkRlbGV0ZSk7XG4gICAgbGV0IGNvdW50ZXIgPSBjdHguZ2V0U3RhdGUoKS5jb3VudGVyO1xuICAgIGNvbnN0IGluZGV4ID0gZGlzcGxheWVkLmZpbmRJbmRleChlbnRpdHkgPT4gZW50aXR5LmlkID09PSB1c2VyLmlkKTtcbiAgICBkaXNwbGF5ZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBjb3VudGVyLS07XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGlzcGxheWVkOiBbLi4uZGlzcGxheWVkXSxcbiAgICAgIGNvdW50ZXI6IGNvdW50ZXIsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFJlc2VuZFVzZXJJbnZpdGF0aW9uQWN0aW9uKVxuICBvblJlc2VuZFVzZXJJbnZpdGF0aW9uQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFVzZXJTdGF0ZU1vZGVsPiwgeyB1c2VySWQgfTogUmVzZW5kVXNlckludml0YXRpb25BY3Rpb24pOiBPYnNlcnZhYmxlPHZvaWQgfCBPYmplY3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS5yZXNlbmRVc2VySW52aXRhdGlvbih1c2VySWQpLnBpcGUodGFwKCgpID0+IHtcbiAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24udXNlcl9pbnZpdGVkX21zZyk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihTZXRVc2VyU3RhdHVzQWN0aW9uKVxuICBvblNldFVzZXJTdGF0dXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8VXNlclN0YXRlTW9kZWw+LCB7IHVzZXJJZCwgc3RhdHVzIH06IFNldFVzZXJTdGF0dXNBY3Rpb24pOiBPYnNlcnZhYmxlPFVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS51cGRhdGVTdGF0dXModXNlcklkLCBzdGF0dXMpLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6IHVzZXIgPT4ge1xuICAgICAgICBpZiAodXNlci5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBkaXNwbGF5ZWQ6IFVzZXJEdG9bXSA9IE9iamVjdC5hc3NpZ24oW10sIGN0eC5nZXRTdGF0ZSgpLmRpc3BsYXllZCk7XG4gICAgICAgICAgZGlzcGxheWVkW2Rpc3BsYXllZC5maW5kSW5kZXgodSA9PiB1LmlkID09PSB1c2VySWQpXSA9IHVzZXIuZGF0YTtcbiAgICAgICAgICBtYXJrRW50aXRpZXNBc0NoYW5nZWQoW3VzZXIuZGF0YV0sIFJvd09wZXJhdGlvbi5VcGRhdGUpO1xuICAgICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICAgIGRpc3BsYXllZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLnVzZXJfc3RhdHVzX2NoYW5nZWRfbXNnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtZXNzYWdlUGFyYW1zOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdXNlcjogYCR7dXNlci5kYXRhLm5hbWV9ICR7dXNlci5kYXRhLmxhc3ROYW1lfWAsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc3RhdHVzJHtVc2VyU3RhdHVzW3N0YXR1c119YCksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZTogUHJvYmxlbURldGFpbHNIdHRwUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZT8uZXJyb3JNZXNzYWdlID09PSBMb2NhbGl6YXRpb24udXNlcl9oYXNfbm9fcGVybWlzc2lvbl90b19oYW5kbGVfdXNlcl9lbnRpdHkgP1xuICAgICAgICAgIExvY2FsaXphdGlvbi51c2VyX2hhc19ub19wZXJtaXNzaW9uX3RvX2hhbmRsZV91c2VyX2VudGl0eSA6IExvY2FsaXphdGlvbi5nZW5lcmFsX2Vycm9yKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFJlc2VuZFBlbmRpbmdBZG1pbkludml0YXRpb25zQWN0aW9uKVxuICBvblJlc2VuZFBlbmRpbmdBZG1pbkludml0YXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFVzZXJTdGF0ZU1vZGVsPiwgeyB0ZW5hbnRJZCB9OiBSZXNlbmRQZW5kaW5nQWRtaW5JbnZpdGF0aW9uc0FjdGlvbik6IE9ic2VydmFibGU8dm9pZCB8IE9iamVjdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5iYWNrb2ZmaWNlQ2xvdWRTZXJ2aWNlUHJveHkucmVzZW5kUGVuZGluZ0FkbWluc0ludml0YXRpb25zKHRlbmFudElkKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24udXNlcl9wZW5kaW5nX2FkbWluX2ludml0YXRpb25zX3NlbnQpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IocGFyc2VBcGlFcnJvck1lc3NhZ2UoZSkpXG4gICAgfSkpO1xuICB9XG5cblxuICBAQWN0aW9uKEVuYWJsZTJGQUFjdGlvbilcbiAgb25FbmFibGUyRkFBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8VXNlclN0YXRlTW9kZWw+LCB7IHVzZXJJZCB9OiBFbmFibGUyRkFBY3Rpb24pOiBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHkuZW5hYmxlMkZhY3RvckF1dGhGb3JVc2VyKHVzZXJJZCkucGlwZSh0YXAoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uZGF0YT8uaXNTdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgZGlzcGxheWVkOiBVc2VyRHRvW10gPSBjdHguZ2V0U3RhdGUoKS5kaXNwbGF5ZWQ7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZFVzZXIgPSBkaXNwbGF5ZWQuZmluZCh1ID0+IHUuaWQgPT09IHVzZXJJZCk7XG5cbiAgICAgICAgICBpZiAodXBkYXRlZFVzZXIpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRVc2VyLmVuYWJsZTJGQSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVzZXJJblN0b3JlKGN0eCwgY2xvbmVEZWVwKHVwZGF0ZWRVc2VyKSk7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLnVzZXJfMmZhX2VuYWJsZWRfc3VjY2Vzc2Z1bGx5LCB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VQYXJhbXM6IHsgdXNlck5hbWU6IHVwZGF0ZWRVc2VyLmZ1bGxOYW1lIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKExvY2FsaXphdGlvbi5mYWlsZWQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKERpc2FibGUyRkFBY3Rpb24pXG4gIG9uRGlzYWJsZTJGQUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHsgdXNlcklkIH06IERpc2FibGUyRkFBY3Rpb24pOiBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHkuZGlzYWJsZTJGYWN0b3JBdXRoRm9yVXNlcih1c2VySWQpLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2U/LmRhdGE/LmlzU3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IGRpc3BsYXllZDogVXNlckR0b1tdID0gY3R4LmdldFN0YXRlKCkuZGlzcGxheWVkO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRVc2VyID0gZGlzcGxheWVkLmZpbmQodSA9PiB1LmlkID09PSB1c2VySWQpO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZWRVc2VyKSB7XG4gICAgICAgICAgICB1cGRhdGVkVXNlci5lbmFibGUyRkEgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVXNlckluU3RvcmUoY3R4LCBjbG9uZURlZXAodXBkYXRlZFVzZXIpKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24udXNlcl8yZmFfcmVtb3ZlZF9zdWNjZXNzZnVsbHksIHtcbiAgICAgICAgICAgICAgbWVzc2FnZVBhcmFtczogeyB1c2VyTmFtZTogdXBkYXRlZFVzZXIuZnVsbE5hbWUgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoTG9jYWxpemF0aW9uLmZhaWxlZF9yZW1vdmluZ18yZmEpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyVXNlcnNBY3Rpb24pXG4gIG9uQ2xlYXJVc2Vyc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBhcmNoaXZlZDogW10sXG4gICAgICBkaXNwbGF5ZWQ6IFtdLFxuICAgICAgY291bnRlcjogMCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oVXBkYXRlQW5kQWN0aXZhdGVVc2VyQWN0aW9uKVxuICBvblVwZGF0ZUFuZEFjdGl2YXRlVXNlckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHsgdXNlciB9OiBVcGRhdGVBbmRBY3RpdmF0ZVVzZXJBY3Rpb24pOiBPYnNlcnZhYmxlPFVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKExvY2FsaXphdGlvbi51cGFkdGluZ191c2VyKTtcbiAgICByZXR1cm4gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LnVwZGF0ZUFuZEFjdGl2YXRlVXNlcih1c2VyKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICBpZiAocmVzLmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVXNlckluU3RvcmUoY3R4LCByZXMuZGF0YSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVVc2VyU2Vzc2lvblN0b3JhZ2UocmVzLmRhdGEpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24udXNlcl9zYXZlZF9hbmRfc3RhdHVzX2NoYW5nZWRfbXNnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtZXNzYWdlUGFyYW1zOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdXNlcjogYCR7cmVzLmRhdGEubmFtZX0gJHtyZXMuZGF0YS5sYXN0TmFtZX1gLFxuICAgICAgICAgICAgICAgIHN0YXR1czogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHN0YXR1cyR7VXNlclN0YXR1c1swXX1gKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFVwZGF0ZVRlbmFudFNpbmdsZVNpZ25PbkFjdGlvbilcbiAgb25VcGRhdGVUZW5hbnRTaW5nbGVTaWduT25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8VXNlclN0YXRlTW9kZWw+LCB7IHRlbmFudFNpbmdsZVNpZ25PbkR0byB9OiBVcGRhdGVUZW5hbnRTaW5nbGVTaWduT25BY3Rpb24pOiBPYnNlcnZhYmxlPFVwZGF0ZVRlbmFudFNpbmdsZVNpZ25PbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRDbG91ZFNlcnZpY2VQcm94eS51cGRhdGVUZW5hbnRTaW5nbGVTaWduT24odGVuYW50U2luZ2xlU2lnbk9uRHRvKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICBpZiAocmVzLmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVGVuYW50SW5mb0luU3RvcmFnZShjdHgsIHJlcy5kYXRhKTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLnNzb190ZW5hbnRfc2V0dGluZ3Nfc2F2ZWQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSlcbiAgICB9KSk7XG4gIH1cblxuXG4gIHByaXZhdGUgdXBkYXRlVGVuYW50SW5mb0luU3RvcmFnZShjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHVwZGF0ZVRlbmFudFNpbmdsZVNpZ246IFVwZGF0ZVRlbmFudFNpbmdsZVNpZ25PbkR0bykge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wb3B1bGF0ZVNpbmdsZVNpZ25PblNldHRpbmdzKCk7XG5cbiAgICBpZiAodXBkYXRlVGVuYW50U2luZ2xlU2lnbikge1xuXG4gICAgICBpZiAodXBkYXRlVGVuYW50U2luZ2xlU2lnbi5zaW5nbGVTaWduT25Qcm92aWRlciA9PT0gU2luZ2xlU2lnbk9uUHJvdmlkZXIuTWljcm9zb2Z0KSB7ICAvLyBIYW5kbGluZyBNUyBsb2dpbiB2aWEgQXp1cmVcbiAgICAgICAgcHJvcHMuc3NvLmNvbmZpZ3VyYXRpb25zLmF6dXJlID0gdXBkYXRlVGVuYW50U2luZ2xlU2lnbi5jb25maWd1cmF0aW9uO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodXBkYXRlVGVuYW50U2luZ2xlU2lnbi5zaW5nbGVTaWduT25Qcm92aWRlciA9PT0gU2luZ2xlU2lnbk9uUHJvdmlkZXIuUGluZ0ZlZGVyYXRlKSB7ICAvLyBIYW5kbGluZyBQaW5nRmVkZXJhdGUgbG9naW5cbiAgICAgICAgcHJvcHMuc3NvLmNvbmZpZ3VyYXRpb25zLnBpbmdGZWRlcmF0aW9uID0gdXBkYXRlVGVuYW50U2luZ2xlU2lnbi5jb25maWd1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICBwcm9wcy5zc28uZW5hYmxlZCA9IHVwZGF0ZVRlbmFudFNpbmdsZVNpZ24uaXNFbmFibGVkO1xuICAgICAgcHJvcHMuc3NvLnByb3ZpZGVyID0gdXBkYXRlVGVuYW50U2luZ2xlU2lnbi5zaW5nbGVTaWduT25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVcGRhdGVUZW5hbnRJbmZvUHJvcHMocHJvcHMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVTaW5nbGVTaWduT25TZXR0aW5ncygpIHtcbiAgICBjb25zdCB0ZW5hbnQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKTtcbiAgICBsZXQgcHJvcHMgPSB0ZW5hbnQucHJvcHM7XG5cbiAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KCdzc28nKSkge1xuICAgICAgcHJvcHMuc3NvID0ge307XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wcy5zc28uaGFzT3duUHJvcGVydHkoJ3Byb3ZpZGVyJykpIHtcbiAgICAgIHByb3BzLnNzby5wcm92aWRlciA9IHt9O1xuICAgIH1cblxuICAgIGlmICghcHJvcHMuc3NvLmhhc093blByb3BlcnR5KCdjb25maWd1cmF0aW9ucycpKSB7XG4gICAgICBwcm9wcy5zc28uY29uZmlndXJhdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxufVxuIl19
|
|
379
|
+
}], ctorParameters: () => [{ type: i1.Store }, { type: i2.UsersCloudServiceProxy }, { type: i3.UsersIdentityServiceProxy }, { type: i4.MessageBarService }, { type: i5.AppConfigService }, { type: i2.TenantCloudServiceProxy }, { type: i6.TranslateService }, { type: i2.BackofficeCloudServiceProxy }], propDecorators: { onLoad2FAUserAction: [], onLoadUserCapabilitiesAction: [], onLoadUsersAction: [], onSetMonthliesAction: [], onAddUserAction: [], onEditUserAction: [], onDeleteUserAction: [], onResendUserInvitationAction: [], onSetUserStatusAction: [], onResendPendingAdminInvitationsAction: [], onEnable2FAAction: [], onDisable2FAAction: [], onClearUsersAction: [], onUpdateAndActivateUserAction: [], onUpdateTenantSingleSignOnAction: [] } });
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy91c2VyL3VzZXIuc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ25DLE9BQU8sRUFBYyxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdEUsT0FBTyxFQUNpRyxvQkFBb0IsRUFFVSxVQUFVLEVBQy9JLE1BQU0sMkNBQTJDLENBQUM7QUFHbkQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRTlFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25GLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsYUFBYSxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQ3BHLGlCQUFpQixFQUNqQiwwQkFBMEIsRUFBRSxlQUFlLEVBQUUsbUNBQW1DLEVBQUUsMEJBQTBCLEVBQzVHLGNBQWMsRUFBRSxtQkFBbUIsRUFBRSwyQkFBMkIsRUFBRSw4QkFBOEIsRUFDakcsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFxQmpC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QnZCO0FBR0Q7SUFEQyxNQUFNLENBQUMsZ0JBQWdCLENBQUM7bURBc0J4QjtBQUdEO0lBREMsTUFBTSxDQUFDLGdCQUFnQixDQUFDO21EQU94QjtBQUdEO0lBREMsTUFBTSxDQUFDLDJCQUEyQixDQUFDOzhEQW9CbkM7QUFHRDtJQURDLE1BQU0sQ0FBQyw4QkFBOEIsQ0FBQztpRUFXdEM7QUFwU2E7SUFEYixRQUFRLEVBQUU7OEJBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTsrQkFHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO2dDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7bUNBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtzQ0FHVjtBQW5DVSxTQUFTO0lBVnJCLEtBQUssQ0FBaUI7UUFDckIsSUFBSSxFQUFFLE9BQU87UUFDYixRQUFRLEVBQUU7WUFDUixRQUFRLEVBQUUsRUFBRTtZQUNaLFNBQVMsRUFBRSxFQUFFO1lBQ2IsT0FBTyxFQUFFLENBQUM7WUFDVixZQUFZLEVBQUUsSUFBSTtZQUNsQixlQUFlLEVBQUUsSUFBSTtTQUN0QjtLQUNGLENBQUM7R0FDVyxTQUFTLENBMFZyQjs7NEZBMVZZLFNBQVM7a0JBWHJCLFVBQVU7cVVBaURULG1CQUFtQixNQVduQiw0QkFBNEIsTUFhNUIsaUJBQWlCLE1BV2pCLG9CQUFvQixNQU9wQixlQUFlLE1BdUJmLGdCQUFnQixNQTJDaEIsa0JBQWtCLE1Bd0JsQiw0QkFBNEIsTUFPNUIscUJBQXFCLE1BNEJyQixxQ0FBcUMsTUFXckMsaUJBQWlCLE1Bd0JqQixrQkFBa0IsTUF3QmxCLGtCQUFrQixNQVNsQiw2QkFBNkIsTUFzQjdCLGdDQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgY2xvbmVEZWVwIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IE9ic2VydmFibGUsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVzc2FnZUJhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwVHlwZSwgTG9jYWxpemF0aW9uLCBVc2VyQ3JlYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMnO1xuaW1wb3J0IHtcbiAgQmFja29mZmljZUNsb3VkU2VydmljZVByb3h5LCBDYXBhYmlsaXRpZXNEdG8sIE9iamVjdEh0dHBSZXNwb25zZURhdGEsIFByb2JsZW1EZXRhaWxzSHR0cFJlc3BvbnNlRGF0YSwgU2luZ2xlU2lnbk9uUHJvdmlkZXIsXG4gIFRlbmFudENsb3VkU2VydmljZVByb3h5LCBUb2dnbGUyRmFjdG9yQXV0aEZvclVzZXJSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEsIFR3b0ZBVXNlckR0byxcbiAgVXBkYXRlVGVuYW50U2luZ2xlU2lnbk9uRHRvLCBVcGRhdGVUZW5hbnRTaW5nbGVTaWduT25EdG9IdHRwUmVzcG9uc2VEYXRhLCBVc2VyRHRvLCBVc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSwgVXNlcnNDbG91ZFNlcnZpY2VQcm94eSwgVXNlclN0YXR1c1xufSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBVc2Vyc0lkZW50aXR5U2VydmljZVByb3h5IH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9pZGVudGl0eS1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBwYXJzZUFwaUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2FwaS1oZWxwZXIudXRpbCc7XG5pbXBvcnQgeyBtYXJrRW50aXRpZXNBc0NoYW5nZWQsIFJvd09wZXJhdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzL2hlbHBlci51dGlsJztcbmltcG9ydCB7IFRlbmFudEluZm8gfSBmcm9tICcuLi9hdXRoL21vZGVsL3RlbmFudC1pbmZvLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTZXRVc2VyTmFtZUFjdGlvbiwgVXBkYXRlVGVuYW50SW5mb1Byb3BzIH0gZnJvbSAnLi4vYXV0aC9zZXNzaW9uLmFjdGlvbnMnO1xuaW1wb3J0IHsgU2Vzc2lvblN0YXRlIH0gZnJvbSAnLi4vYXV0aC9zZXNzaW9uLnN0YXRlJztcbmltcG9ydCB7XG4gIEFkZFVzZXJBY3Rpb24sIENsZWFyVXNlcnNBY3Rpb24sIERlbGV0ZVVzZXJBY3Rpb24sIERpc2FibGUyRkFBY3Rpb24sIEVkaXRVc2VyQWN0aW9uLCBFbmFibGUyRkFBY3Rpb24sXG4gIExvYWQyRkFVc2VyQWN0aW9uLFxuICBMb2FkVXNlckNhcGFiaWxpdGllc0FjdGlvbiwgTG9hZFVzZXJzQWN0aW9uLCBSZXNlbmRQZW5kaW5nQWRtaW5JbnZpdGF0aW9uc0FjdGlvbiwgUmVzZW5kVXNlckludml0YXRpb25BY3Rpb24sXG4gIFNldFVzZXJzQWN0aW9uLCBTZXRVc2VyU3RhdHVzQWN0aW9uLCBVcGRhdGVBbmRBY3RpdmF0ZVVzZXJBY3Rpb24sIFVwZGF0ZVRlbmFudFNpbmdsZVNpZ25PbkFjdGlvblxufSBmcm9tICcuL3VzZXIuYWN0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlclN0YXRlTW9kZWwge1xuICBhcmNoaXZlZDogVXNlckR0b1tdO1xuICBkaXNwbGF5ZWQ6IFVzZXJEdG9bXTtcbiAgY291bnRlcjogbnVtYmVyO1xuICBjYXBhYmlsaXRpZXM6IENhcGFiaWxpdGllc0R0bztcbiAgdXNlclR3b0ZBU3RhdHVzPzogVHdvRkFVc2VyRHRvO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5AU3RhdGU8VXNlclN0YXRlTW9kZWw+KHtcbiAgbmFtZTogJ3VzZXJzJyxcbiAgZGVmYXVsdHM6IHtcbiAgICBhcmNoaXZlZDogW10sXG4gICAgZGlzcGxheWVkOiBbXSxcbiAgICBjb3VudGVyOiAwLFxuICAgIGNhcGFiaWxpdGllczogbnVsbCxcbiAgICB1c2VyVHdvRkFTdGF0dXM6IG51bGxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVXNlclN0YXRlIHtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIHVzZXJzQ2xvdWRTZXJ2aWNlUHJveHk6IFVzZXJzQ2xvdWRTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSB1c2Vyc0lkZW50aXR5U2VydmljZVByb3h5OiBVc2Vyc0lkZW50aXR5U2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgbWVzc2FnZUJhclNlcnZpY2U6IE1lc3NhZ2VCYXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwQ29uZmlnOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50Q2xvdWRTZXJ2aWNlUHJveHk6IFRlbmFudENsb3VkU2VydmljZVByb3h5LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGJhY2tvZmZpY2VDbG91ZFNlcnZpY2VQcm94eTogQmFja29mZmljZUNsb3VkU2VydmljZVByb3h5KSB7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGNvdW50ZXIoc3RhdGU6IFVzZXJTdGF0ZU1vZGVsKTogbnVtYmVyIHtcbiAgICByZXR1cm4gc3RhdGUuY291bnRlcjtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgYXJjaGl2ZWQoc3RhdGU6IFVzZXJTdGF0ZU1vZGVsKTogVXNlckR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuYXJjaGl2ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGRpc3BsYXllZChzdGF0ZTogVXNlclN0YXRlTW9kZWwpOiBVc2VyRHRvW10ge1xuICAgIHJldHVybiBzdGF0ZS5kaXNwbGF5ZWQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGNhcGFiaWxpdGllcyhzdGF0ZTogVXNlclN0YXRlTW9kZWwpOiBDYXBhYmlsaXRpZXNEdG8ge1xuICAgIHJldHVybiBzdGF0ZS5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHVzZXJUd29GQVN0YXR1cyhzdGF0ZTogVXNlclN0YXRlTW9kZWwpOiBUd29GQVVzZXJEdG8ge1xuICAgIHJldHVybiBzdGF0ZS51c2VyVHdvRkFTdGF0dXM7XG4gIH1cblxuICBAQWN0aW9uKExvYWQyRkFVc2VyQWN0aW9uKVxuICBvbkxvYWQyRkFVc2VyQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFVzZXJTdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2FkMkZBVXNlckFjdGlvbikge1xuICAgIGNvbnN0IGdldDJGQVVzZXIkID0gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LmdldFVzZXJUd29GQVN0YXR1cyhhY3Rpb24udXNlcklkKTtcblxuICAgIHJldHVybiBnZXQyRkFVc2VyJC5waXBlKHRhcCh1c2VyID0+IHtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgdXNlclR3b0ZBU3RhdHVzOiB1c2VyLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRVc2VyQ2FwYWJpbGl0aWVzQWN0aW9uKVxuICBvbkxvYWRVc2VyQ2FwYWJpbGl0aWVzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFVzZXJTdGF0ZU1vZGVsPiwgXzogTG9hZFVzZXJDYXBhYmlsaXRpZXNBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBjYXBhYmlsaXRpZXM6IG51bGwsXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LmdldENhcGFiaWxpdGllcygpLnBpcGUodGFwKHJlcyA9PiB7XG4gICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgIGNhcGFiaWxpdGllczogcmVzLmRhdGEsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvYWRVc2Vyc0FjdGlvbilcbiAgb25Mb2FkVXNlcnNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8VXNlclN0YXRlTW9kZWw+LCBhY3Rpb246IExvYWRVc2Vyc0FjdGlvbikge1xuICAgIGNvbnN0IGdldFVzZXJzJCA9IHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS5nZXRBbGxVc2VycyhhY3Rpb24uYm9keSk7XG4gICAgcmV0dXJuIGdldFVzZXJzJC5waXBlKHRhcCh1c2Vyc1dyYXBwZXIgPT4ge1xuICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICBhcmNoaXZlZDogdXNlcnNXcmFwcGVyLmRhdGEuZW50aXRpZXMsXG4gICAgICAgIGNvdW50ZXI6IHVzZXJzV3JhcHBlci5kYXRhLmNvdW50ZXIsXG4gICAgICB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFVzZXJzQWN0aW9uKVxuICBvblNldE1vbnRobGllc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIGFjdGlvbjogU2V0VXNlcnNBY3Rpb24pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBkaXNwbGF5ZWQ6IGFjdGlvbi51c2VycyB8fCBbXSxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQWRkVXNlckFjdGlvbilcbiAgb25BZGRVc2VyQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFVzZXJTdGF0ZU1vZGVsPiwgeyB1c2VyUmVnaXN0ZXIgfTogQWRkVXNlckFjdGlvbik6IE9ic2VydmFibGU8VXNlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmluZm8oTG9jYWxpemF0aW9uLnJlZ2lzdGVyX25ld191c2VyKTtcbiAgICByZXR1cm4gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LnJlZ2lzdGVyVXNlcih1c2VyUmVnaXN0ZXIpLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgIGlmIChyZXMuaXNTdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5hZGRVc2VyVG9TdG9yZShjdHgsIHJlcy5kYXRhKTtcbiAgICAgICAgICBsZXQgaW52aXRlRGlzYWJsZSA9IGZhbHNlO1xuICAgICAgICAgIGlmICh0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLkNsb3VkKSB7XG4gICAgICAgICAgICBjb25zdCB0ZW5hbnRJbmZvOiBUZW5hbnRJbmZvID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudGVuYW50SW5mbyk7XG4gICAgICAgICAgICBpbnZpdGVEaXNhYmxlID0gIXRlbmFudEluZm8/LnByb3BzLmhhc1NtdHBEZXRhaWxzO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCByZWFkeUZvclVzZVVzZXIgPSB0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS51c2VyQ3JlYXRpb25UeXBlID09PSBVc2VyQ3JlYXRpb25UeXBlLlJlYWR5Rm9yVXNlO1xuICAgICAgICAgIGNvbnN0IHN1Y2Nlc3NNc2cgPSByZWFkeUZvclVzZVVzZXIgP1xuICAgICAgICAgICAgTG9jYWxpemF0aW9uLnVzZXJfYWRkZWRfc3VjY2Vzc2Z1bGx5X21zZyA6XG4gICAgICAgICAgICBpbnZpdGVEaXNhYmxlID8gTG9jYWxpemF0aW9uLnVzZXJfY3JlYXRlZF9zdWNjZXNzZnVsbHlfd2l0aG91dF9pbnZpdGVfbXNnIDogTG9jYWxpemF0aW9uLnVzZXJfaW52aXRlZF9zdWNjZXNzZnVsbHlfbXNnO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhzdWNjZXNzTXNnKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IocGFyc2VBcGlFcnJvck1lc3NhZ2UoZSkpXG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihFZGl0VXNlckFjdGlvbilcbiAgb25FZGl0VXNlckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHsgdXNlciB9OiBFZGl0VXNlckFjdGlvbik6IE9ic2VydmFibGU8VXNlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmluZm8oTG9jYWxpemF0aW9uLnVwYWR0aW5nX3VzZXIpO1xuICAgIHJldHVybiB0aGlzLnVzZXJzQ2xvdWRTZXJ2aWNlUHJveHkudXBkYXRlVXNlcih1c2VyKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICBpZiAocmVzLmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVXNlckluU3RvcmUoY3R4LCByZXMuZGF0YSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVVc2VyU2Vzc2lvblN0b3JhZ2UocmVzLmRhdGEpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24udXNlcl9lZGl0ZWRfc3VjY2Vzc2Z1bGx5X21zZyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogZSA9PiB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVXNlclNlc3Npb25TdG9yYWdlKHVwZGF0ZWRVc2VyUGF5bG9hZDogVXNlckR0bykge1xuICAgIGNvbnN0IGN1cnJlbnRVc2VyID0gdGhpcy5zdG9yZS5zZWxlY3RTbmFwc2hvdChTZXNzaW9uU3RhdGUudXNlckluZm8pO1xuICAgIGlmIChjdXJyZW50VXNlci51c2VySWQgPT09IHVwZGF0ZWRVc2VyUGF5bG9hZC5pZCkge1xuICAgICAgY29uc3QgZGlzcGxheU5hbWUgPSBgJHt1cGRhdGVkVXNlclBheWxvYWQubmFtZX0gJHt1cGRhdGVkVXNlclBheWxvYWQubGFzdE5hbWV9YDtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFNldFVzZXJOYW1lQWN0aW9uKGRpc3BsYXlOYW1lKSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRVc2VyVG9TdG9yZShjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHVzZXI6IFVzZXJEdG8pIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSBjdHguZ2V0U3RhdGUoKS5kaXNwbGF5ZWQ7XG4gICAgbWFya0VudGl0aWVzQXNDaGFuZ2VkKFt1c2VyXSwgUm93T3BlcmF0aW9uLkluc2VydCk7XG4gICAgZGlzcGxheWVkLnVuc2hpZnQodXNlcik7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGlzcGxheWVkOiBbLi4uZGlzcGxheWVkXSxcbiAgICAgIGNvdW50ZXI6IGN0eC5nZXRTdGF0ZSgpLmNvdW50ZXIgKyAxLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVVc2VySW5TdG9yZShjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHVzZXI6IFVzZXJEdG8pIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSBjdHguZ2V0U3RhdGUoKS5kaXNwbGF5ZWQ7XG4gICAgY29uc3QgaW5kZXggPSBkaXNwbGF5ZWQuZmluZEluZGV4KGVudGl0eSA9PiBlbnRpdHkuaWQgPT09IHVzZXIuaWQpO1xuICAgIGRpc3BsYXllZFtpbmRleF0gPSB1c2VyO1xuICAgIG1hcmtFbnRpdGllc0FzQ2hhbmdlZChbdXNlcl0sIFJvd09wZXJhdGlvbi5VcGRhdGUpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIGRpc3BsYXllZDogWy4uLmRpc3BsYXllZF0sXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKERlbGV0ZVVzZXJBY3Rpb24pXG4gIG9uRGVsZXRlVXNlckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHsgdXNlciB9OiBEZWxldGVVc2VyQWN0aW9uKTogT2JzZXJ2YWJsZTx2b2lkIHwgVXNlckR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LmRlbGV0ZVVzZXIodXNlci5pZCkucGlwZSh0YXAoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmRlbGV0ZVVzZXJGcm9tU3RvcmUoY3R4LCB1c2VyKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbi51c2VyX2RlbGV0ZV9zdWNjZXNzKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZSA9PiB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVsZXRlVXNlckZyb21TdG9yZShjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHVzZXI6IFVzZXJEdG8pIHtcbiAgICBjb25zdCBkaXNwbGF5ZWQgPSBjdHguZ2V0U3RhdGUoKS5kaXNwbGF5ZWQ7XG4gICAgbWFya0VudGl0aWVzQXNDaGFuZ2VkKFt1c2VyXSwgUm93T3BlcmF0aW9uLkRlbGV0ZSk7XG4gICAgbGV0IGNvdW50ZXIgPSBjdHguZ2V0U3RhdGUoKS5jb3VudGVyO1xuICAgIGNvbnN0IGluZGV4ID0gZGlzcGxheWVkLmZpbmRJbmRleChlbnRpdHkgPT4gZW50aXR5LmlkID09PSB1c2VyLmlkKTtcbiAgICBkaXNwbGF5ZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBjb3VudGVyLS07XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgZGlzcGxheWVkOiBbLi4uZGlzcGxheWVkXSxcbiAgICAgIGNvdW50ZXI6IGNvdW50ZXIsXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKFJlc2VuZFVzZXJJbnZpdGF0aW9uQWN0aW9uKVxuICBvblJlc2VuZFVzZXJJbnZpdGF0aW9uQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFVzZXJTdGF0ZU1vZGVsPiwgeyB1c2VySWQgfTogUmVzZW5kVXNlckludml0YXRpb25BY3Rpb24pOiBPYnNlcnZhYmxlPHZvaWQgfCBPYmplY3RIdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS5yZXNlbmRVc2VySW52aXRhdGlvbih1c2VySWQpLnBpcGUodGFwKCgpID0+IHtcbiAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24udXNlcl9pbnZpdGVkX21zZyk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihTZXRVc2VyU3RhdHVzQWN0aW9uKVxuICBvblNldFVzZXJTdGF0dXNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8VXNlclN0YXRlTW9kZWw+LCB7IHVzZXJJZCwgc3RhdHVzIH06IFNldFVzZXJTdGF0dXNBY3Rpb24pOiBPYnNlcnZhYmxlPFVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNDbG91ZFNlcnZpY2VQcm94eS51cGRhdGVTdGF0dXModXNlcklkLCBzdGF0dXMpLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6IHVzZXIgPT4ge1xuICAgICAgICBpZiAodXNlci5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBkaXNwbGF5ZWQ6IFVzZXJEdG9bXSA9IE9iamVjdC5hc3NpZ24oW10sIGN0eC5nZXRTdGF0ZSgpLmRpc3BsYXllZCk7XG4gICAgICAgICAgZGlzcGxheWVkW2Rpc3BsYXllZC5maW5kSW5kZXgodSA9PiB1LmlkID09PSB1c2VySWQpXSA9IHVzZXIuZGF0YTtcbiAgICAgICAgICBtYXJrRW50aXRpZXNBc0NoYW5nZWQoW3VzZXIuZGF0YV0sIFJvd09wZXJhdGlvbi5VcGRhdGUpO1xuICAgICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICAgIGRpc3BsYXllZCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLnVzZXJfc3RhdHVzX2NoYW5nZWRfbXNnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtZXNzYWdlUGFyYW1zOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdXNlcjogYCR7dXNlci5kYXRhLm5hbWV9ICR7dXNlci5kYXRhLmxhc3ROYW1lfWAsXG4gICAgICAgICAgICAgICAgc3RhdHVzOiB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChgc3RhdHVzJHtVc2VyU3RhdHVzW3N0YXR1c119YCksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoZTogUHJvYmxlbURldGFpbHNIdHRwUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZT8uZXJyb3JNZXNzYWdlID09PSBMb2NhbGl6YXRpb24udXNlcl9oYXNfbm9fcGVybWlzc2lvbl90b19oYW5kbGVfdXNlcl9lbnRpdHkgP1xuICAgICAgICAgIExvY2FsaXphdGlvbi51c2VyX2hhc19ub19wZXJtaXNzaW9uX3RvX2hhbmRsZV91c2VyX2VudGl0eSA6IExvY2FsaXphdGlvbi5nZW5lcmFsX2Vycm9yKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFJlc2VuZFBlbmRpbmdBZG1pbkludml0YXRpb25zQWN0aW9uKVxuICBvblJlc2VuZFBlbmRpbmdBZG1pbkludml0YXRpb25zQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFVzZXJTdGF0ZU1vZGVsPiwgeyB0ZW5hbnRJZCB9OiBSZXNlbmRQZW5kaW5nQWRtaW5JbnZpdGF0aW9uc0FjdGlvbik6IE9ic2VydmFibGU8dm9pZCB8IE9iamVjdEh0dHBSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy5iYWNrb2ZmaWNlQ2xvdWRTZXJ2aWNlUHJveHkucmVzZW5kUGVuZGluZ0FkbWluc0ludml0YXRpb25zKHRlbmFudElkKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24udXNlcl9wZW5kaW5nX2FkbWluX2ludml0YXRpb25zX3NlbnQpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IocGFyc2VBcGlFcnJvck1lc3NhZ2UoZSkpXG4gICAgfSkpO1xuICB9XG5cblxuICBAQWN0aW9uKEVuYWJsZTJGQUFjdGlvbilcbiAgb25FbmFibGUyRkFBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8VXNlclN0YXRlTW9kZWw+LCB7IHVzZXJJZCB9OiBFbmFibGUyRkFBY3Rpb24pOiBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHkuZW5hYmxlMkZhY3RvckF1dGhGb3JVc2VyKHVzZXJJZCkucGlwZSh0YXAoe1xuICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25zZT8uZGF0YT8uaXNTdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgZGlzcGxheWVkOiBVc2VyRHRvW10gPSBjdHguZ2V0U3RhdGUoKS5kaXNwbGF5ZWQ7XG4gICAgICAgICAgY29uc3QgdXBkYXRlZFVzZXIgPSBkaXNwbGF5ZWQuZmluZCh1ID0+IHUuaWQgPT09IHVzZXJJZCk7XG5cbiAgICAgICAgICBpZiAodXBkYXRlZFVzZXIpIHtcbiAgICAgICAgICAgIHVwZGF0ZWRVc2VyLmVuYWJsZTJGQSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVVzZXJJblN0b3JlKGN0eCwgY2xvbmVEZWVwKHVwZGF0ZWRVc2VyKSk7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLnVzZXJfMmZhX2VuYWJsZWRfc3VjY2Vzc2Z1bGx5LCB7XG4gICAgICAgICAgICAgIG1lc3NhZ2VQYXJhbXM6IHsgdXNlck5hbWU6IHVwZGF0ZWRVc2VyLmZ1bGxOYW1lIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKExvY2FsaXphdGlvbi5mYWlsZWQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKERpc2FibGUyRkFBY3Rpb24pXG4gIG9uRGlzYWJsZTJGQUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHsgdXNlcklkIH06IERpc2FibGUyRkFBY3Rpb24pOiBPYnNlcnZhYmxlPFRvZ2dsZTJGYWN0b3JBdXRoRm9yVXNlclJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT4ge1xuICAgIHJldHVybiB0aGlzLnVzZXJzSWRlbnRpdHlTZXJ2aWNlUHJveHkuZGlzYWJsZTJGYWN0b3JBdXRoRm9yVXNlcih1c2VySWQpLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAocmVzcG9uc2U/LmRhdGE/LmlzU3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IGRpc3BsYXllZDogVXNlckR0b1tdID0gY3R4LmdldFN0YXRlKCkuZGlzcGxheWVkO1xuICAgICAgICAgIGNvbnN0IHVwZGF0ZWRVc2VyID0gZGlzcGxheWVkLmZpbmQodSA9PiB1LmlkID09PSB1c2VySWQpO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZWRVc2VyKSB7XG4gICAgICAgICAgICB1cGRhdGVkVXNlci5lbmFibGUyRkEgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVXNlckluU3RvcmUoY3R4LCBjbG9uZURlZXAodXBkYXRlZFVzZXIpKTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24udXNlcl8yZmFfcmVtb3ZlZF9zdWNjZXNzZnVsbHksIHtcbiAgICAgICAgICAgICAgbWVzc2FnZVBhcmFtczogeyB1c2VyTmFtZTogdXBkYXRlZFVzZXIuZnVsbE5hbWUgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoTG9jYWxpemF0aW9uLmZhaWxlZF9yZW1vdmluZ18yZmEpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKENsZWFyVXNlcnNBY3Rpb24pXG4gIG9uQ2xlYXJVc2Vyc0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBhcmNoaXZlZDogW10sXG4gICAgICBkaXNwbGF5ZWQ6IFtdLFxuICAgICAgY291bnRlcjogMCxcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oVXBkYXRlQW5kQWN0aXZhdGVVc2VyQWN0aW9uKVxuICBvblVwZGF0ZUFuZEFjdGl2YXRlVXNlckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHsgdXNlciB9OiBVcGRhdGVBbmRBY3RpdmF0ZVVzZXJBY3Rpb24pOiBPYnNlcnZhYmxlPFVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhPiB7XG4gICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKExvY2FsaXphdGlvbi51cGFkdGluZ191c2VyKTtcbiAgICByZXR1cm4gdGhpcy51c2Vyc0Nsb3VkU2VydmljZVByb3h5LnVwZGF0ZUFuZEFjdGl2YXRlVXNlcih1c2VyKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICBpZiAocmVzLmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVXNlckluU3RvcmUoY3R4LCByZXMuZGF0YSk7XG4gICAgICAgICAgdGhpcy51cGRhdGVVc2VyU2Vzc2lvblN0b3JhZ2UocmVzLmRhdGEpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24udXNlcl9zYXZlZF9hbmRfc3RhdHVzX2NoYW5nZWRfbXNnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBtZXNzYWdlUGFyYW1zOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdXNlcjogYCR7cmVzLmRhdGEubmFtZX0gJHtyZXMuZGF0YS5sYXN0TmFtZX1gLFxuICAgICAgICAgICAgICAgIHN0YXR1czogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoYHN0YXR1cyR7VXNlclN0YXR1c1swXX1gKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFVwZGF0ZVRlbmFudFNpbmdsZVNpZ25PbkFjdGlvbilcbiAgb25VcGRhdGVUZW5hbnRTaW5nbGVTaWduT25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8VXNlclN0YXRlTW9kZWw+LCB7IHRlbmFudFNpbmdsZVNpZ25PbkR0byB9OiBVcGRhdGVUZW5hbnRTaW5nbGVTaWduT25BY3Rpb24pOiBPYnNlcnZhYmxlPFVwZGF0ZVRlbmFudFNpbmdsZVNpZ25PbkR0b0h0dHBSZXNwb25zZURhdGE+IHtcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRDbG91ZFNlcnZpY2VQcm94eS51cGRhdGVUZW5hbnRTaW5nbGVTaWduT24odGVuYW50U2luZ2xlU2lnbk9uRHRvKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiByZXMgPT4ge1xuICAgICAgICBpZiAocmVzLmlzU3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMudXBkYXRlVGVuYW50SW5mb0luU3RvcmFnZShjdHgsIHJlcy5kYXRhKTtcbiAgICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLnNzb190ZW5hbnRfc2V0dGluZ3Nfc2F2ZWQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSlcbiAgICB9KSk7XG4gIH1cblxuXG4gIHByaXZhdGUgdXBkYXRlVGVuYW50SW5mb0luU3RvcmFnZShjdHg6IFN0YXRlQ29udGV4dDxVc2VyU3RhdGVNb2RlbD4sIHVwZGF0ZVRlbmFudFNpbmdsZVNpZ246IFVwZGF0ZVRlbmFudFNpbmdsZVNpZ25PbkR0bykge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wb3B1bGF0ZVNpbmdsZVNpZ25PblNldHRpbmdzKCk7XG5cbiAgICBpZiAodXBkYXRlVGVuYW50U2luZ2xlU2lnbikge1xuXG4gICAgICBpZiAodXBkYXRlVGVuYW50U2luZ2xlU2lnbi5zaW5nbGVTaWduT25Qcm92aWRlciA9PT0gU2luZ2xlU2lnbk9uUHJvdmlkZXIuTWljcm9zb2Z0KSB7ICAvLyBIYW5kbGluZyBNUyBsb2dpbiB2aWEgQXp1cmVcbiAgICAgICAgcHJvcHMuc3NvLmNvbmZpZ3VyYXRpb25zLmF6dXJlID0gdXBkYXRlVGVuYW50U2luZ2xlU2lnbi5jb25maWd1cmF0aW9uO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodXBkYXRlVGVuYW50U2luZ2xlU2lnbi5zaW5nbGVTaWduT25Qcm92aWRlciA9PT0gU2luZ2xlU2lnbk9uUHJvdmlkZXIuUGluZ0ZlZGVyYXRlKSB7ICAvLyBIYW5kbGluZyBQaW5nRmVkZXJhdGUgbG9naW5cbiAgICAgICAgcHJvcHMuc3NvLmNvbmZpZ3VyYXRpb25zLnBpbmdGZWRlcmF0aW9uID0gdXBkYXRlVGVuYW50U2luZ2xlU2lnbi5jb25maWd1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICBwcm9wcy5zc28uZW5hYmxlZCA9IHVwZGF0ZVRlbmFudFNpbmdsZVNpZ24uaXNFbmFibGVkO1xuICAgICAgcHJvcHMuc3NvLnByb3ZpZGVyID0gdXBkYXRlVGVuYW50U2luZ2xlU2lnbi5zaW5nbGVTaWduT25Qcm92aWRlcjtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVcGRhdGVUZW5hbnRJbmZvUHJvcHMocHJvcHMpKTtcbiAgfVxuXG4gIHByaXZhdGUgcG9wdWxhdGVTaW5nbGVTaWduT25TZXR0aW5ncygpIHtcbiAgICBjb25zdCB0ZW5hbnQgPSB0aGlzLnN0b3JlLnNlbGVjdFNuYXBzaG90KFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKTtcbiAgICBsZXQgcHJvcHMgPSB0ZW5hbnQucHJvcHM7XG5cbiAgICBpZiAoIXByb3BzLmhhc093blByb3BlcnR5KCdzc28nKSkge1xuICAgICAgcHJvcHMuc3NvID0ge307XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wcy5zc28uaGFzT3duUHJvcGVydHkoJ3Byb3ZpZGVyJykpIHtcbiAgICAgIHByb3BzLnNzby5wcm92aWRlciA9IHt9O1xuICAgIH1cblxuICAgIGlmICghcHJvcHMuc3NvLmhhc093blByb3BlcnR5KCdjb25maWd1cmF0aW9ucycpKSB7XG4gICAgICBwcm9wcy5zc28uY29uZmlndXJhdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxufVxuIl19
|