@tiba-spark/client-shared-lib 25.1.0-672 → 25.1.0-676
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/auth/session.actions.mjs +7 -1
- package/esm2022/libraries/modules/auth/session.state.mjs +10 -3
- package/esm2022/libraries/modules/login/login.state.mjs +7 -3
- package/esm2022/libraries/service-proxy/identity-service-proxies.mjs +3 -1
- package/fesm2022/tiba-spark-client-shared-lib.mjs +21 -2
- package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
- package/libraries/modules/auth/session.actions.d.ts +5 -0
- package/libraries/modules/auth/session.actions.d.ts.map +1 -1
- package/libraries/modules/auth/session.state.d.ts +2 -1
- package/libraries/modules/auth/session.state.d.ts.map +1 -1
- package/libraries/modules/login/login.state.d.ts +1 -1
- package/libraries/modules/login/login.state.d.ts.map +1 -1
- package/libraries/service-proxy/identity-service-proxies.d.ts +2 -0
- package/libraries/service-proxy/identity-service-proxies.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -40,6 +40,12 @@ export class SetStateAction {
|
|
|
40
40
|
this.refresh = refresh;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
+
export class UpdateAuthTokenAction {
|
|
44
|
+
static { this.type = '[Session] Update Auth Token'; }
|
|
45
|
+
constructor(authToken) {
|
|
46
|
+
this.authToken = authToken;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
43
49
|
export class SetUserNameAction {
|
|
44
50
|
static { this.type = '[Session] SetUserName'; }
|
|
45
51
|
constructor(userName) {
|
|
@@ -93,4 +99,4 @@ export class Authenticate2FAforUser {
|
|
|
93
99
|
static { this.type = '[Session] Authenticate2FAforUser'; }
|
|
94
100
|
constructor() { }
|
|
95
101
|
}
|
|
96
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5hY3Rpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXNoYXJlZC1saWIvc3JjL2xpYnJhcmllcy9tb2R1bGVzL2F1dGgvc2Vzc2lvbi5hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE1BQU0sT0FBTyxrQkFBa0I7YUFDTixTQUFJLEdBQUcsaUJBQWlCLENBQUM7SUFFaEQsWUFBbUIsUUFBZ0IsRUFBUyxRQUFnQixFQUFTLGlCQUEwQixLQUFLO1FBQWpGLGFBQVEsR0FBUixRQUFRLENBQVE7UUFBUyxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQVMsbUJBQWMsR0FBZCxjQUFjLENBQWlCO0lBQ3BHLENBQUM7O0FBR0gsTUFBTSxPQUFPLHVCQUF1QjthQUNYLFNBQUksR0FBRywwQkFBMEIsQ0FBQztJQUV6RCxZQUFtQixjQUF1QjtRQUF2QixtQkFBYyxHQUFkLGNBQWMsQ0FBUztJQUMxQyxDQUFDOztBQUdILE1BQU0sT0FBTyxZQUFZO2FBQ0EsU0FBSSxHQUFHLGtCQUFrQixDQUFDO0lBRWpELFlBQW1CLGNBQXVCLElBQUk7UUFBM0IsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO0lBQzlDLENBQUM7O0FBR0gsTUFBTSxPQUFPLGtCQUFrQjthQUNOLFNBQUksR0FBRyx3QkFBd0IsQ0FBQztJQUN2RDtJQUNBLENBQUM7O0FBR0gsTUFBTSxPQUFPLGlCQUFpQjthQUNMLFNBQUksR0FBRyx3QkFBd0IsQ0FBQztJQUV2RDtJQUNBLENBQUM7O0FBR0gsTUFBTSxPQUFPLGlDQUFpQzthQUNyQixTQUFJLEdBQUcscUNBQXFDLENBQUM7SUFFcEU7SUFDQSxDQUFDOztBQUdILE1BQU0sT0FBTyxjQUFjO2FBQ0YsU0FBSSxHQUFHLHFCQUFxQixDQUFDO0lBRXBELFlBQW1CLFNBQWlCLEVBQVMsT0FBb0I7UUFBOUMsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUFTLFlBQU8sR0FBUCxPQUFPLENBQWE7SUFDakUsQ0FBQzs7QUFHSCxNQUFNLE9BQU8scUJBQXFCO2FBQ1QsU0FBSSxHQUFHLDZCQUE2QixDQUFDO0lBRTVELFlBQW1CLFNBQWlCO1FBQWpCLGNBQVMsR0FBVCxTQUFTLENBQVE7SUFDcEMsQ0FBQzs7QUFJSCxNQUFNLE9BQU8saUJBQWlCO2FBQ0wsU0FBSSxHQUFHLHVCQUF1QixDQUFDO0lBRXRELFlBQW1CLFFBQWdCO1FBQWhCLGFBQVEsR0FBUixRQUFRLENBQVE7SUFDbkMsQ0FBQzs7QUFHSCxNQUFNLE9BQU8sWUFBWTthQUNBLFNBQUksR0FBRyx5QkFBeUIsQ0FBQztJQUV4RDtJQUNBLENBQUM7O0FBRUgsTUFBTSxPQUFPLGdCQUFnQjthQUNKLFNBQUksR0FBRyx3QkFBd0IsQ0FBQztJQUV2RCxZQUFtQixNQUFrQjtRQUFsQixXQUFNLEdBQU4sTUFBTSxDQUFZO0lBQ3JDLENBQUM7O0FBR0gsTUFBTSxPQUFPLGlCQUFpQjthQUNMLFNBQUksR0FBRyx5QkFBeUIsQ0FBQztJQUV4RDtJQUNBLENBQUM7O0FBR0gsTUFBTSxPQUFPLFlBQVk7YUFDQSxTQUFJLEdBQUcsdUJBQXVCLENBQUM7SUFFdEQ7SUFDQSxDQUFDOztBQUdILE1BQU0sT0FBTyxpQ0FBaUM7YUFDckIsU0FBSSxHQUFHLCtCQUErQixDQUFDO0lBRTlELFlBQW1CLFlBQWdDO1FBQWhDLGlCQUFZLEdBQVosWUFBWSxDQUFvQjtJQUNuRCxDQUFDOztBQUdILE1BQU0sT0FBTyxxQkFBcUI7YUFDVCxTQUFJLEdBQUcsb0NBQW9DLENBQUM7SUFFbkUsWUFBbUIsS0FBVTtRQUFWLFVBQUssR0FBTCxLQUFLLENBQUs7SUFDN0IsQ0FBQzs7QUFHSCxNQUFNLE9BQU8sbUJBQW1CO2FBQ1AsU0FBSSxHQUFHLDJCQUEyQixDQUFDO0lBRTFELFlBQW1CLFlBQTBCO1FBQTFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO0lBQUksQ0FBQzs7QUFHcEQsTUFBTSxPQUFPLDBCQUEwQjthQUNkLFNBQUksR0FBRyxrQ0FBa0MsQ0FBQztJQUVqRSxnQkFBZ0IsQ0FBQzs7QUFHbkIsTUFBTSxPQUFPLHNCQUFzQjthQUNWLFNBQUksR0FBRyxrQ0FBa0MsQ0FBQztJQUVqRSxnQkFBZ0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNwYXJrU2Vzc2lvbiB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvc3Bhcmstc2Vzc2lvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU3BhcmtTZXR0aW5nc0R0byB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IExvZ2luUmVxdWVzdCB9IGZyb20gJy4vbW9kZWwvbG9naW4tcmVxdWVzdC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVmcmVzaEluZm8gfSBmcm9tICcuL21vZGVsL3JlZnJlc2gtaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVGVuYW50SW5mbyB9IGZyb20gJy4vbW9kZWwvdGVuYW50LWluZm8uaW50ZXJmYWNlJztcblxuZXhwb3J0IGNsYXNzIExvZ2luUmVxdWVzdEFjdGlvbiBpbXBsZW1lbnRzIExvZ2luUmVxdWVzdCB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbU2Vzc2lvbl0gTG9naW4nO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1c2VybmFtZTogc3RyaW5nLCBwdWJsaWMgcGFzc3dvcmQ6IHN0cmluZywgcHVibGljIGtlZXBNZUxvZ2dlZEluOiBib29sZWFuID0gZmFsc2UpIHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0a2VlcE1lTG9nZ2VkSW5BY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW1Nlc3Npb25dIGtlZXBNZUxvZ2dlZEluJztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMga2VlcE1lTG9nZ2VkSW46IGJvb2xlYW4pIHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9nb3V0QWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tTZXNzaW9uXSBMb2dvdXQnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBsb2dvdXRBdWRpdDogYm9vbGVhbiA9IHRydWUpIHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9nb3V0TW9iaWxlQWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tTZXNzaW9uXSBMb2dvdXRNb2JpbGUnO1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgQXVkaXRMb2dvdXRBY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW1Nlc3Npb25dIEF1ZGl0IExvZ291dCc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEluaXRTZXNzaW9uRnJvbUxvY2FsU3RvcmFnZUFjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbU2Vzc2lvbl0gTG9hZCBTZXNzaW9uIEZyb20gU3RvcmFnZSc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFNldFN0YXRlQWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tTZXNzaW9uXSBTZXQgU3RhdGUnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBhdXRoVG9rZW46IHN0cmluZywgcHVibGljIHJlZnJlc2g6IFJlZnJlc2hJbmZvKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUF1dGhUb2tlbkFjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbU2Vzc2lvbl0gVXBkYXRlIEF1dGggVG9rZW4nO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBhdXRoVG9rZW46IHN0cmluZykge1xuICB9XG59XG5cblxuZXhwb3J0IGNsYXNzIFNldFVzZXJOYW1lQWN0aW9uIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tTZXNzaW9uXSBTZXRVc2VyTmFtZSc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHVzZXJOYW1lOiBzdHJpbmcpIHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9naW5TdWNjZXNzIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tTZXNzaW9uXSBMb2dpbiBTdWNjZXNzJztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxufVxuZXhwb3J0IGNsYXNzIFRlbmFudExvYWRBY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW1Nlc3Npb25dIFRlbmFudCBMb2FkICc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHRlbmFudDogVGVuYW50SW5mbykge1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBUZW5hbnRDbGVhckFjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbU2Vzc2lvbl0gVGVuYW50IENsZWFyICc7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEhlYWx0aEFjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbU2Vzc2lvbl0gSGVhbHRoIExvYWQnO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVVc2VyU2V0dGluZ3NJblNlc3Npb25BY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW1Nlc3Npb25dIFVwZGF0ZSBVc2VyIFNldHRpbmcnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyB1c2VyU2V0dGluZ3M6IFNwYXJrU2V0dGluZ3NEdG9bXSkge1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVUZW5hbnRJbmZvUHJvcHMge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW1Nlc3Npb25dIFVwZGF0ZSBUZW5hbnQgSW5mbyBQcm9wcyc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHByb3BzOiBhbnkpIHtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgU2V0VGVuYW50VXNlckFjdGlvbiB7XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbU2Vzc2lvbl0gU2V0IFRlbmFudCBVc2VyJztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgc3BhcmtTZXNzaW9uOiBTcGFya1Nlc3Npb24pIHsgfVxufVxuXG5leHBvcnQgY2xhc3MgTG9hZEFwcENvbmZpZ3VyYXRpb25BY3Rpb24ge1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW1Nlc3Npb25dIEFwcCBDb25maWd1cmF0aW9uIExvYWQnO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG59XG5cbmV4cG9ydCBjbGFzcyBBdXRoZW50aWNhdGUyRkFmb3JVc2VyIHtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tTZXNzaW9uXSBBdXRoZW50aWNhdGUyRkFmb3JVc2VyJztcblxuICBjb25zdHJ1Y3RvcigpIHsgfVxufVxuIl19
|
|
@@ -13,7 +13,7 @@ import { SingleSignOnProvider, SparkSettingsDto } from '../../service-proxy/clou
|
|
|
13
13
|
import { parseApiErrorMessage } from '../../utils/api-helper.util';
|
|
14
14
|
import { getNavigationRoute } from '../../utils/route.util';
|
|
15
15
|
import { UnloadParkingLotAction } from '../facility/facility.actions';
|
|
16
|
-
import { AuditLogoutAction, Authenticate2FAforUser, HealthAction, InitSessionFromLocalStorageAction, LoadAppConfigurationAction, LoginRequestAction, LogoutAction, LogoutMobileAction, SetStateAction, SetTenantUserAction, SetUserNameAction, TenantClearAction, TenantLoadAction, UpdateTenantInfoProps, UpdateUserSettingsInSessionAction } from './session.actions';
|
|
16
|
+
import { AuditLogoutAction, Authenticate2FAforUser, HealthAction, InitSessionFromLocalStorageAction, LoadAppConfigurationAction, LoginRequestAction, LogoutAction, LogoutMobileAction, SetStateAction, SetTenantUserAction, SetUserNameAction, TenantClearAction, TenantLoadAction, UpdateAuthTokenAction, UpdateTenantInfoProps, UpdateUserSettingsInSessionAction } from './session.actions';
|
|
17
17
|
import * as i0 from "@angular/core";
|
|
18
18
|
import * as i1 from "../../services/session-storage.service";
|
|
19
19
|
import * as i2 from "../../services/local-storage.service";
|
|
@@ -138,6 +138,10 @@ let SessionState = SessionState_1 = class SessionState {
|
|
|
138
138
|
}
|
|
139
139
|
this.setSparkSessions(ctx, sparkSessions);
|
|
140
140
|
}
|
|
141
|
+
onUpdateAuthTokenAction(ctx, action) {
|
|
142
|
+
const sparkSessions = this.getSparkSessions();
|
|
143
|
+
sparkSessions[this.sessionStorageService.tenant].authToken = action.authToken;
|
|
144
|
+
}
|
|
141
145
|
setSessionState(ctx, action) {
|
|
142
146
|
const sparkSessions = this.getSparkSessions();
|
|
143
147
|
sparkSessions[this.sessionStorageService.tenant].authToken = action.authToken;
|
|
@@ -293,6 +297,9 @@ __decorate([
|
|
|
293
297
|
__decorate([
|
|
294
298
|
Action(SetTenantUserAction)
|
|
295
299
|
], SessionState.prototype, "onSetTenantUserAction", null);
|
|
300
|
+
__decorate([
|
|
301
|
+
Action(UpdateAuthTokenAction)
|
|
302
|
+
], SessionState.prototype, "onUpdateAuthTokenAction", null);
|
|
296
303
|
__decorate([
|
|
297
304
|
Action(SetStateAction)
|
|
298
305
|
], SessionState.prototype, "setSessionState", null);
|
|
@@ -374,5 +381,5 @@ SessionState = SessionState_1 = __decorate([
|
|
|
374
381
|
export { SessionState };
|
|
375
382
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SessionState, decorators: [{
|
|
376
383
|
type: Injectable
|
|
377
|
-
}], ctorParameters: function () { return [{ type: i1.SessionStorageService }, { type: i2.LocalStorageService }, { type: i3.Store }, { type: i4.AppConfigService }, { type: i5.AuthService }, { type: i6.ConfigurationServiceProxy }, { type: i7.Router }, { type: i8.HttpCancelService }, { type: i9.TranslateService }, { type: i10.MsalService }, { type: i6.UsersServiceProxy }, { type: i11.OpenIdAuthService }, { type: i12.MessageBarService }]; }, propDecorators: { onLogin: [], onSetTenantUserAction: [], setSessionState: [], SetUserNameAction: [], AuditLogoutAction: [], onLogout: [], onTenantLoadAction: [], onTenantClearAction: [], onHealthActionAction: [], onUpdateUserSettings: [], onUpdateTenantInfoProps: [], onAuthenticate2FAforUser: [], onLoadSessionFromLocalStorageAction: [], onAppConfigurationAction: [] } });
|
|
378
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9hdXRoL3Nlc3Npb24uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUl4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFcEQsT0FBTyxFQUErQyxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBcUIsTUFBTSwyQ0FBMkMsQ0FBQztBQU1uSyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUl0RSxPQUFPLEVBQ0wsaUJBQWlCLEVBQUUsc0JBQXNC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LHVCQUF1QixNQU92Qix3QkFBd0IsTUFTeEIsbUNBQW1DLE1BaUJuQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcbmltcG9ydCB7IENsZWFyQ2FjaGVSZXF1ZXN0IH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0ZSB9IGZyb20gJ0BuZ3hzL3JvdXRlci1wbHVnaW4nO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgb2YsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZXNzYWdlQmFyUG9zaXRpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLXBvc2l0aW9uLmVudW0nO1xuaW1wb3J0IHsgTWVzc2FnZUJhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTE9DQUxfRU5HTElTSF9MQU5HVUFHRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcbmltcG9ydCB7IEVOVklST05NRU5ULCBMT0dHRURfVEVOQU5UX0tFWSwgU0VTU0lPTiwgVEVOQU5UX0tFWSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9rZXlzLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBTcGFya1Nlc3Npb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NwYXJrLXNlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlUHJveHksIFNldHRpbmdzQ2F0ZWdvcnksIFNpbmdsZVNpZ25PblByb3ZpZGVyLCBTcGFya1NldHRpbmdzRHRvLCBVc2Vyc1NlcnZpY2VQcm94eSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cENhbmNlbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwLWNhbmNlbC5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3BlbklkQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcGVuaWQtYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBhcnNlQXBpRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLWhlbHBlci51dGlsJztcbmltcG9ydCB7IFN0cmluZ01hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBnZXROYXZpZ2F0aW9uUm91dGUgfSBmcm9tICcuLi8uLi91dGlscy9yb3V0ZS51dGlsJztcbmltcG9ydCB7IFVubG9hZFBhcmtpbmdMb3RBY3Rpb24gfSBmcm9tICcuLi9mYWNpbGl0eS9mYWNpbGl0eS5hY3Rpb25zJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25JbmZvIH0gZnJvbSAnLi9tb2RlbC9hcHBsaWNhdGlvbi1pbmZvLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUZW5hbnRJbmZvIH0gZnJvbSAnLi9tb2RlbC90ZW5hbnQtaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQXVkaXRMb2dvdXRBY3Rpb24sIEF1dGhlbnRpY2F0ZTJGQWZvclVzZXIsIEhlYWx0aEFjdGlvbiwgSW5pdFNlc3Npb25Gcm9tTG9jYWxTdG9yYWdlQWN0aW9uLCBMb2FkQXBwQ29uZmlndXJhdGlvbkFjdGlvbixcbiAgTG9naW5SZXF1ZXN0QWN0aW9uLCBMb2dvdXRBY3Rpb24sIExvZ291dE1vYmlsZUFjdGlvbiwgU2V0U3RhdGVBY3Rpb24sIFNldFRlbmFudFVzZXJBY3Rpb24sIFNldFVzZXJOYW1lQWN0aW9uLFxuICBUZW5hbnRDbGVhckFjdGlvbiwgVGVuYW50TG9hZEFjdGlvbiwgVXBkYXRlVGVuYW50SW5mb1Byb3BzLCBVcGRhdGVVc2VyU2V0dGluZ3NJblNlc3Npb25BY3Rpb25cbn0gZnJvbSAnLi9zZXNzaW9uLmFjdGlvbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb25TdGF0ZU1vZGVsIHtcbiAgc3BhcmtTZXNzaW9uczogU3RyaW5nTWFwPFNwYXJrU2Vzc2lvbj47XG4gIGFwcGxpY2F0aW9uPzogQXBwbGljYXRpb25JbmZvO1xuICBzZXJ2ZXJFbnZpcm9ubWVudE1vZGU/OiBzdHJpbmc7XG59XG5cbmNvbnN0IGRlZmF1bHRTZXNzaW9uU3RhdGUgPSB7XG4gIHNwYXJrU2Vzc2lvbnM6IHt9LFxuICBhcHBsaWNhdGlvbjogeyB2ZXJzaW9uOiBudWxsLCByZWxlYXNlRGF0ZTogbnVsbCwgZmVhdHVyZXM6IHt9IH0sXG59XG5cbkBTdGF0ZTxTZXNzaW9uU3RhdGVNb2RlbD4oe1xuICBuYW1lOiAnc2Vzc2lvbicsXG4gIGRlZmF1bHRzOiBkZWZhdWx0U2Vzc2lvblN0YXRlLFxufSlcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTZXNzaW9uU3RhdGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlOiBTZXNzaW9uU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2NhbFN0b3JhZ2VTZXJ2aWNlOiBMb2NhbFN0b3JhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgYXBwQ29uZmlnU2VydmljZTogQXBwQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ3VyYXRpb25TZXJ2aWNlUHJveHk6IENvbmZpZ3VyYXRpb25TZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGh0dHBDYW5jZWxTZXJ2aWNlOiBIdHRwQ2FuY2VsU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtc2FsU2VydmljZTogTXNhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2Vyc1NlcnZpY2VQcm94eTogVXNlcnNTZXJ2aWNlUHJveHksXG4gICAgcHJpdmF0ZSBvcGVuSWRBdXRoU2VydmljZTogT3BlbklkQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlQmFyU2VydmljZTogTWVzc2FnZUJhclNlcnZpY2UpIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgaXNVc2VyQXV0aGVudGljYXRlZFdpdGhTU08oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlcj8uc3NvQXV0aGVudGljYXRlZDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgaXNVc2VyQXV0aGVudGljYXRlZFdpdGgyRkEoc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlci5hdXRoZW50aWNhdGVkMkZBO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBzZXJ2ZXJFbnZpcm9ubWVudE1vZGUoc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgcmV0dXJuIHN0YXRlLnNlcnZlckVudmlyb25tZW50TW9kZTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdXNlckluZm8oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlcjtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgbG9nZ2VkVXNlckluZm8oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oTE9HR0VEX1RFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnVzZXI7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRlbmFudEluZm8oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udGVuYW50O1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0aGlyZFBhcnR5VG9rZW4oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udGhpcmRQYXJ0eVRva2VuO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBsb2dnZWRUZW5hbnRJbmZvKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKExPR0dFRF9URU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS50ZW5hbnQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHVzZXJTZXR0aW5ncyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpOiBTcGFya1NldHRpbmdzRHRvW10ge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnVzZXIuc2V0dGluZ3MgYXMgU3BhcmtTZXR0aW5nc0R0b1tdO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBtYXBwZWRVc2VyU2V0dGluZ3Moc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlci5zZXR0aW5ncy5yZWR1Y2UoKHNldHRpbmdzTWFwLCB1c2VyU2V0dGluZykgPT5cbiAgICAgIHNldHRpbmdzTWFwLnNldCh1c2VyU2V0dGluZy5jYXRlZ29yeSwgSlNPTi5wYXJzZSh1c2VyU2V0dGluZy5zZXR0aW5nc0pzb24pKSwgbmV3IE1hcDxTZXR0aW5nc0NhdGVnb3J5LCBhbnk+KCkpO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBhcHBDb25maWd1cmF0aW9uKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCkge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKExPR0dFRF9URU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS5hcHBDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBrZWVwTWVMb2dnZWRJbihzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpOiBib29sZWFuIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS51c2VyLmtlZXBNZUxvZ2dlZEluID8/IGZhbHNlO1xuICB9XG5cbiAgQEFjdGlvbihMb2dpblJlcXVlc3RBY3Rpb24pXG4gIHB1YmxpYyBvbkxvZ2luKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgYWN0aW9uOiBMb2dpblJlcXVlc3RBY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5sb2dpbihhY3Rpb24pLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6IHNwYXJrU2Vzc2lvbiA9PiB7XG4gICAgICAgIHRoaXMuU2V0VGVuYW50VXNlckFjdGlvbihjdHgsIHNwYXJrU2Vzc2lvbik7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gcGFyc2VBcGlFcnJvck1lc3NhZ2UoZSk7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQobWVzc2FnZSksIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICB9XG4gICAgfSkpXG4gIH1cblxuICBAQWN0aW9uKFNldFRlbmFudFVzZXJBY3Rpb24pXG4gIHB1YmxpYyBvblNldFRlbmFudFVzZXJBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCB7IHNwYXJrU2Vzc2lvbiB9OiBTZXRUZW5hbnRVc2VyQWN0aW9uKSB7XG4gICAgdGhpcy5TZXRUZW5hbnRVc2VyQWN0aW9uKGN0eCwgc3BhcmtTZXNzaW9uKTtcbiAgfVxuXG4gIHByaXZhdGUgU2V0VGVuYW50VXNlckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHNwYXJrU2Vzc2lvbjogU3BhcmtTZXNzaW9uKSB7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIGNvbnN0IHsgdXNlciwgYXV0aFRva2VuLCByZWZyZXNoLCB0aGlyZFBhcnR5VG9rZW4gfSA9IHNwYXJrU2Vzc2lvbjtcbiAgICB1c2VyLnNldHRpbmdzID0gdXNlci5zZXR0aW5ncy5tYXAocyA9PiB7XG4gICAgICByZXR1cm4gbmV3IFNwYXJrU2V0dGluZ3NEdG8oe1xuICAgICAgICBjYXRlZ29yeTogcy5jYXRlZ29yeSxcbiAgICAgICAgc2V0dGluZ3NKc29uOiBKU09OLnBhcnNlKHMuc2V0dGluZ3NKc29uKVxuICAgICAgfSlcbiAgICB9KTtcblxuICAgIGlmICghc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdKSB7XG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0gPSB7IHVzZXIsIGF1dGhUb2tlbiwgcmVmcmVzaCwgdGVuYW50OiBudWxsLCB0aGlyZFBhcnR5VG9rZW4gfTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnVzZXIgPSB1c2VyO1xuICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLmF1dGhUb2tlbiA9IGF1dGhUb2tlbjtcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5yZWZyZXNoID0gcmVmcmVzaDtcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS50aGlyZFBhcnR5VG9rZW4gPSB0aGlyZFBhcnR5VG9rZW47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XG4gIH1cblxuICBAQWN0aW9uKFNldFN0YXRlQWN0aW9uKVxuICBwdWJsaWMgc2V0U2Vzc2lvblN0YXRlKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXRTdGF0ZUFjdGlvbikge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0uYXV0aFRva2VuID0gYWN0aW9uLmF1dGhUb2tlbjtcbiAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0ucmVmcmVzaCA9IGFjdGlvbi5yZWZyZXNoO1xuXG4gICAgY29uc3QgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uSW5mbyA9IHtcbiAgICAgIHZlcnNpb246IHRoaXMuYXBwQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5wYWNrYWdlSW5mby52ZXJzaW9uLFxuICAgICAgcmVsZWFzZURhdGU6IG51bGwsXG4gICAgICBmZWF0dXJlczoge30sXG4gICAgfTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IGFwcGxpY2F0aW9uIH0pO1xuICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICB9XG5cbiAgQEFjdGlvbihTZXRVc2VyTmFtZUFjdGlvbilcbiAgcHVibGljIFNldFVzZXJOYW1lQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgYWN0aW9uOiBTZXRVc2VyTmFtZUFjdGlvbikge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBzcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnVzZXIuZGlzcGxheU5hbWUgPSBhY3Rpb24udXNlck5hbWU7XG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XG4gIH1cblxuICBAQWN0aW9uKEF1ZGl0TG9nb3V0QWN0aW9uKVxuICBwdWJsaWMgQXVkaXRMb2dvdXRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IEF1ZGl0TG9nb3V0QWN0aW9uKSB7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xuICAgIGNvbnN0IHRlbmFudEluZm8gPSBjdHguZ2V0U3RhdGUoKS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnRlbmFudDtcbiAgICBpZiAodGhpcy5pc1RlbmFudFVuZGVmaW5lZCh0ZW5hbnRJbmZvLCBzcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdKSkge1xuICAgICAgcmV0dXJuIG9mKG51bGwpOyAvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGVuYW50IG9yIHNwYXJrU2Vzc2lvbnMgYXJlIHVuZGVmaW5lZFxuICAgIH1cbiAgICByZXR1cm4gdGhpcy51c2Vyc1NlcnZpY2VQcm94eS5hdWRpdExvZ291dCgpLnBpcGUoXG4gICAgICB0YXAoKCkgPT4geyB9KSk7XG4gIH1cblxuICBAQWN0aW9uKExvZ291dEFjdGlvbilcbiAgcHVibGljIG9uTG9nb3V0KGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyBsb2dvdXRBdWRpdCB9OiBMb2dvdXRBY3Rpb24pIHtcbiAgICBjb25zdCBhcHBUeXBlID0gdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmFwcFR5cGU7XG4gICAgdGhpcy5odHRwQ2FuY2VsU2VydmljZS5jYW5jZWxQZW5kaW5nUmVxdWVzdHMoKTtcblxuICAgIGlmIChhcHBUeXBlID09PSBBcHBUeXBlLk1vYmlsZSkge1xuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBMb2dvdXRNb2JpbGVBY3Rpb24oKSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcGF0aCA9IGdldE5hdmlnYXRpb25Sb3V0ZShTZXNzaW9uU3RhdGUudGVuYW50SW5mbyhjdHguZ2V0U3RhdGUoKSksIGFwcFR5cGUsIFsnYWNjb3VudCcsICdsb2dpbiddKTtcbiAgICAgIGN0eC5kaXNwYXRjaChuZXcgTmF2aWdhdGUocGF0aCkpO1xuICAgIH1cblxuICAgIGlmIChsb2dvdXRBdWRpdCkge1xuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBBdWRpdExvZ291dEFjdGlvbigpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yb3V0ZXIuZXZlbnRzLnBpcGUoIC8vIG9ic2VydmUgYWxsIHJvdXRlIGV2ZW50c1xuICAgICAgZmlsdGVyKGUgPT4gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgZS51cmwuaW5jbHVkZXMoJy9hY2NvdW50L2xvZ2luJykpLCAvLyBmaWx0ZXIgb25seSBOYXZpZ2F0aW9uRW5kIGV2ZW50c1xuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIGZpcnN0KCksXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hdXRoU2VydmljZS5sb2dvdXQoKS5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgICAgICAgICBjb25zdCB0ZW5hbnQgPSBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF07XG4gICAgICAgICAgICBjb25zdCBzc29FbmFibGVkID0gdGVuYW50Py51c2VyPy5zc29BdXRoZW50aWNhdGVkO1xuICAgICAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShMT0NBTF9FTkdMSVNIX0xBTkdVQUdFKTtcbiAgICAgICAgICAgIGN0eC5kaXNwYXRjaChuZXcgVGVuYW50Q2xlYXJBY3Rpb24oKSk7XG4gICAgICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFVubG9hZFBhcmtpbmdMb3RBY3Rpb24oKSk7XG4gICAgICAgICAgICBpZiAoc3NvRW5hYmxlZCkge1xuICAgICAgICAgICAgICBjb25zdCB0ZW5hbnROYW1lID0gdGVuYW50Py50ZW5hbnQ/LnRlbmFudE5hbWU7XG4gICAgICAgICAgICAgIGNvbnN0IHByb3ZpZGVyID0gdGVuYW50Py50ZW5hbnQucHJvcHM/LnNzbz8ucHJvdmlkZXI7XG4gICAgICAgICAgICAgIGlmIChwcm92aWRlciA9PSBTaW5nbGVTaWduT25Qcm92aWRlci5NaWNyb3NvZnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ291dFJlZGlyZWN0KHtcbiAgICAgICAgICAgICAgICAgIHBvc3RMb2dvdXRSZWRpcmVjdFVyaTogYC8ke3RlbmFudE5hbWV9YFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2UgaWYgKHByb3ZpZGVyID09IFNpbmdsZVNpZ25PblByb3ZpZGVyLlBpbmdGZWRlcmF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbklkQXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vdGhpcy5zaWxlbnRMb2dPdXRNc2woY3R4LCBhcHBUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSk7XG4gICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGlzVGVuYW50VW5kZWZpbmVkID0gKHRlbmFudDogVGVuYW50SW5mbywgc2Vzc2lvbjogU3BhcmtTZXNzaW9uKSA9PiAhdGVuYW50IHx8ICFzZXNzaW9uO1xuXG4gIHNpbGVudExvZ091dE1zbChjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFwcFR5cGU6IEFwcFR5cGUpIHtcbiAgICBjb25zdCBjbGVhckNhY2hlUmVxdWVzdDogQ2xlYXJDYWNoZVJlcXVlc3QgPSB7XG4gICAgICBhY2NvdW50OiB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF0sXG4gICAgfTtcblxuICAgIHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuY2xlYXJDYWNoZShjbGVhckNhY2hlUmVxdWVzdCk7XG4gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XG4gICAgc2Vzc2lvblN0b3JhZ2UuY2xlYXIoKTtcblxuICAgIGNvbnN0IHBhdGggPSBnZXROYXZpZ2F0aW9uUm91dGUoU2Vzc2lvblN0YXRlLnRlbmFudEluZm8oY3R4LmdldFN0YXRlKCkpLCBhcHBUeXBlLCBbJ2FjY291bnQnLCAnbG9naW4nXSk7XG4gICAgY3R4LmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZShwYXRoKSk7XG4gIH1cblxuICBAQWN0aW9uKFRlbmFudExvYWRBY3Rpb24pXG4gIHB1YmxpYyBvblRlbmFudExvYWRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IFRlbmFudExvYWRBY3Rpb24pIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gYWN0aW9uLnRlbmFudD8udGVuYW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IFVwZGF0ZVRlbmFudEluZm9Qcm9wcyhhY3Rpb24udGVuYW50Py5wcm9wcykpO1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBpZiAoIXNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0pIHtcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0gPSB7IHVzZXI6IG51bGwsIGF1dGhUb2tlbjogbnVsbCwgcmVmcmVzaDogbnVsbCwgdGVuYW50OiBhY3Rpb24udGVuYW50IH07XG4gICAgfVxuXG4gICAgc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS50ZW5hbnQgPSBhY3Rpb24udGVuYW50O1xuICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICB9XG5cbiAgQEFjdGlvbihUZW5hbnRDbGVhckFjdGlvbilcbiAgcHVibGljIG9uVGVuYW50Q2xlYXJBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBfOiBUZW5hbnRDbGVhckFjdGlvbikge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBjb25zdCBzcGFya1Nlc3Npb24gPSBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF07XG4gICAgaWYgKHNwYXJrU2Vzc2lvbikge1xuICAgICAgc3BhcmtTZXNzaW9uLnVzZXIgPSBudWxsO1xuICAgICAgc3BhcmtTZXNzaW9uLnJlZnJlc2ggPSBudWxsO1xuICAgICAgc3BhcmtTZXNzaW9uLmF1dGhUb2tlbiA9IG51bGw7XG4gICAgICBpZiAoc3BhcmtTZXNzaW9uLmFwcENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgc3BhcmtTZXNzaW9uLmFwcENvbmZpZ3VyYXRpb24uYW5hbHl0aWNzVG9rZW4gPSAnJztcbiAgICAgICAgc3BhcmtTZXNzaW9uLmFwcENvbmZpZ3VyYXRpb24uZmVlZGJhY2tUb2tlbiA9ICcnO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihIZWFsdGhBY3Rpb24pXG4gIHB1YmxpYyBvbkhlYWx0aEFjdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4pIHtcbiAgICBjb25zdCBlbnZpcm9ubWVudFZhcmlhYmxlJCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2VQcm94eS5nZXRIZWFsdGgoKTtcbiAgICByZXR1cm4gZW52aXJvbm1lbnRWYXJpYWJsZSQucGlwZSh0YXAoZW52aXJvbm1lbnRWYXJpYWJsZSA9PiB7XG4gICAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKEVOVklST05NRU5ULCBKU09OLnN0cmluZ2lmeShlbnZpcm9ubWVudFZhcmlhYmxlLmRhdGEuZW52aXJvbm1lbnQpKTtcbiAgICAgIGN0eC5wYXRjaFN0YXRlKHsgc2VydmVyRW52aXJvbm1lbnRNb2RlOiBlbnZpcm9ubWVudFZhcmlhYmxlLmRhdGEuZW52aXJvbm1lbnQgfSk7XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihVcGRhdGVVc2VyU2V0dGluZ3NJblNlc3Npb25BY3Rpb24pXG4gIHB1YmxpYyBvblVwZGF0ZVVzZXJTZXR0aW5ncyhjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHsgdXNlclNldHRpbmdzIH0pIHtcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnVzZXIuc2V0dGluZ3MgPSB1c2VyU2V0dGluZ3M7XG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XG4gIH1cblxuICBAQWN0aW9uKFVwZGF0ZVRlbmFudEluZm9Qcm9wcylcbiAgcHVibGljIG9uVXBkYXRlVGVuYW50SW5mb1Byb3BzKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyBwcm9wcyB9KSB7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS50ZW5hbnQucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgfVxuXG4gIEBBY3Rpb24oQXV0aGVudGljYXRlMkZBZm9yVXNlcilcbiAgcHVibGljIG9uQXV0aGVudGljYXRlMkZBZm9yVXNlcihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHsgfSkge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBpZiAoc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdPy51c2VyKSB7XG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0udXNlci5hdXRoZW50aWNhdGVkMkZBID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oSW5pdFNlc3Npb25Gcm9tTG9jYWxTdG9yYWdlQWN0aW9uKVxuICBwdWJsaWMgb25Mb2FkU2Vzc2lvbkZyb21Mb2NhbFN0b3JhZ2VBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBfOiBJbml0U2Vzc2lvbkZyb21Mb2NhbFN0b3JhZ2VBY3Rpb24pIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oU0VTU0lPTik7XG4gICAgY29uc3Qgc2Vzc2lvbjoge1xuICAgICAgYXBwbGljYXRpb246IEFwcGxpY2F0aW9uSW5mbyxcbiAgICAgIHNwYXJrU2Vzc2lvbnM6IFN0cmluZ01hcDxTcGFya1Nlc3Npb24+LFxuICAgIH0gPSBkYXRhID8gSlNPTi5wYXJzZShkYXRhKSA6IGRlZmF1bHRTZXNzaW9uU3RhdGU7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgYXBwbGljYXRpb246IHNlc3Npb24uYXBwbGljYXRpb24sXG4gICAgICBzcGFya1Nlc3Npb25zOiBzZXNzaW9uLnNwYXJrU2Vzc2lvbnNcbiAgICB9KTtcbiAgICBpZiAodGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50KSB7XG4gICAgICBjb25zdCBzcGFya1Nlc3Npb24gPSBzZXNzaW9uLnNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XTtcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEF1dGhTZXNzaW9uKHNwYXJrU2Vzc2lvbj8uYXV0aFRva2VuLCBzcGFya1Nlc3Npb24/LnJlZnJlc2gpO1xuICAgIH1cbiAgfVxuXG4gIEBBY3Rpb24oTG9hZEFwcENvbmZpZ3VyYXRpb25BY3Rpb24pXG4gIHB1YmxpYyBvbkFwcENvbmZpZ3VyYXRpb25BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+KSB7XG4gICAgY29uc3QgYXBwQ29uZmlndXJhdGlvbiQgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlUHJveHkuZ2V0QXBwQ29uZmlndXJhdGlvbigpO1xuICAgIHJldHVybiBhcHBDb25maWd1cmF0aW9uJC5waXBlKHRhcChhcHBDb25maWd1cmF0aW9uID0+IHtcbiAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnQpIHtcbiAgICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLmFwcENvbmZpZ3VyYXRpb24gPSBhcHBDb25maWd1cmF0aW9uLmRhdGE7XG4gICAgICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3BhcmtTZXNzaW9ucyA9ICgpOiBTdHJpbmdNYXA8U3BhcmtTZXNzaW9uPiA9PiBKU09OLnBhcnNlKHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5nZXRJdGVtKFNFU1NJT04pKT8uc3BhcmtTZXNzaW9ucyA/PyB7fTtcbiAgcHJpdmF0ZSBzZXRTcGFya1Nlc3Npb25zID0gKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgc3BhcmtTZXNzaW9uczogU3RyaW5nTWFwPFNwYXJrU2Vzc2lvbj4pOiB2b2lkID0+IHtcbiAgICBjb25zdCBhcHBsaWNhdGlvbiA9IGN0eC5nZXRTdGF0ZSgpLmFwcGxpY2F0aW9uO1xuICAgIHRoaXMubG9jYWxTdG9yYWdlU2VydmljZS5zZXRJdGVtKFNFU1NJT04sIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGFwcGxpY2F0aW9uLFxuICAgICAgc3BhcmtTZXNzaW9uczogc3BhcmtTZXNzaW9uc1xuICAgIH0pKTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7IHNwYXJrU2Vzc2lvbnMgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
384
|
+
}], ctorParameters: function () { return [{ type: i1.SessionStorageService }, { type: i2.LocalStorageService }, { type: i3.Store }, { type: i4.AppConfigService }, { type: i5.AuthService }, { type: i6.ConfigurationServiceProxy }, { type: i7.Router }, { type: i8.HttpCancelService }, { type: i9.TranslateService }, { type: i10.MsalService }, { type: i6.UsersServiceProxy }, { type: i11.OpenIdAuthService }, { type: i12.MessageBarService }]; }, propDecorators: { onLogin: [], onSetTenantUserAction: [], onUpdateAuthTokenAction: [], setSessionState: [], SetUserNameAction: [], AuditLogoutAction: [], onLogout: [], onTenantLoadAction: [], onTenantClearAction: [], onHealthActionAction: [], onUpdateUserSettings: [], onUpdateTenantInfoProps: [], onAuthenticate2FAforUser: [], onLoadSessionFromLocalStorageAction: [], onAppConfigurationAction: [] } });
|
|
385
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5zdGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC1zaGFyZWQtbGliL3NyYy9saWJyYXJpZXMvbW9kdWxlcy9hdXRoL3Nlc3Npb24uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxhQUFhLEVBQVUsTUFBTSxpQkFBaUIsQ0FBQztBQUl4RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUF1QixNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFcEQsT0FBTyxFQUErQyxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBcUIsTUFBTSwyQ0FBMkMsQ0FBQztBQU1uSyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUl0RSxPQUFPLEVBQ0wsaUJBQWlCLEVBQUUsc0JBQXNC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QUksRUFBRSxTQUFTO1FBQ2YsUUFBUSxFQUFFLG1CQUFtQjtLQUM5QixDQUFDO0dBRVcsWUFBWSxDQTBVeEI7U0ExVVksWUFBWTs0RkFBWixZQUFZO2tCQUR4QixVQUFVO29kQTJGRixPQUFPLE1BYVAscUJBQXFCLE1BMkJyQix1QkFBdUIsTUFNdkIsZUFBZSxNQWVmLGlCQUFpQixNQVFqQixpQkFBaUIsTUFZakIsUUFBUSxNQTZEUixrQkFBa0IsTUFhbEIsbUJBQW1CLE1BZ0JuQixvQkFBb0IsTUFTcEIsb0JBQW9CLE1BT3BCLHVCQUF1QixNQU92Qix3QkFBd0IsTUFTeEIsbUNBQW1DLE1BaUJuQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uRW5kLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcbmltcG9ydCB7IENsZWFyQ2FjaGVSZXF1ZXN0IH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0ZSB9IGZyb20gJ0BuZ3hzL3JvdXRlci1wbHVnaW4nO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmaXJzdCwgb2YsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNZXNzYWdlQmFyUG9zaXRpb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLXBvc2l0aW9uLmVudW0nO1xuaW1wb3J0IHsgTWVzc2FnZUJhclNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21lc3NhZ2UtYmFyL21lc3NhZ2UtYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTE9DQUxfRU5HTElTSF9MQU5HVUFHRSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9nbG9iYWwtY29uc3RhbnRzJztcbmltcG9ydCB7IEVOVklST05NRU5ULCBMT0dHRURfVEVOQU5UX0tFWSwgU0VTU0lPTiwgVEVOQU5UX0tFWSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9rZXlzLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBTcGFya1Nlc3Npb24gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NwYXJrLXNlc3Npb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25TZXJ2aWNlUHJveHksIFNldHRpbmdzQ2F0ZWdvcnksIFNpbmdsZVNpZ25PblByb3ZpZGVyLCBTcGFya1NldHRpbmdzRHRvLCBVc2Vyc1NlcnZpY2VQcm94eSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvY2xvdWQtc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHR0cENhbmNlbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9odHRwLWNhbmNlbC5zZXJ2aWNlJztcbmltcG9ydCB7IExvY2FsU3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2NhbC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3BlbklkQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcGVuaWQtYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBhcnNlQXBpRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLWhlbHBlci51dGlsJztcbmltcG9ydCB7IFN0cmluZ01hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBnZXROYXZpZ2F0aW9uUm91dGUgfSBmcm9tICcuLi8uLi91dGlscy9yb3V0ZS51dGlsJztcbmltcG9ydCB7IFVubG9hZFBhcmtpbmdMb3RBY3Rpb24gfSBmcm9tICcuLi9mYWNpbGl0eS9mYWNpbGl0eS5hY3Rpb25zJztcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25JbmZvIH0gZnJvbSAnLi9tb2RlbC9hcHBsaWNhdGlvbi1pbmZvLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUZW5hbnRJbmZvIH0gZnJvbSAnLi9tb2RlbC90ZW5hbnQtaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQXVkaXRMb2dvdXRBY3Rpb24sIEF1dGhlbnRpY2F0ZTJGQWZvclVzZXIsIEhlYWx0aEFjdGlvbiwgSW5pdFNlc3Npb25Gcm9tTG9jYWxTdG9yYWdlQWN0aW9uLCBMb2FkQXBwQ29uZmlndXJhdGlvbkFjdGlvbixcbiAgTG9naW5SZXF1ZXN0QWN0aW9uLCBMb2dvdXRBY3Rpb24sIExvZ291dE1vYmlsZUFjdGlvbiwgU2V0U3RhdGVBY3Rpb24sIFNldFRlbmFudFVzZXJBY3Rpb24sIFNldFVzZXJOYW1lQWN0aW9uLFxuICBUZW5hbnRDbGVhckFjdGlvbiwgVGVuYW50TG9hZEFjdGlvbiwgVXBkYXRlQXV0aFRva2VuQWN0aW9uLCBVcGRhdGVUZW5hbnRJbmZvUHJvcHMsIFVwZGF0ZVVzZXJTZXR0aW5nc0luU2Vzc2lvbkFjdGlvblxufSBmcm9tICcuL3Nlc3Npb24uYWN0aW9ucyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2Vzc2lvblN0YXRlTW9kZWwge1xuICBzcGFya1Nlc3Npb25zOiBTdHJpbmdNYXA8U3BhcmtTZXNzaW9uPjtcbiAgYXBwbGljYXRpb24/OiBBcHBsaWNhdGlvbkluZm87XG4gIHNlcnZlckVudmlyb25tZW50TW9kZT86IHN0cmluZztcbn1cblxuY29uc3QgZGVmYXVsdFNlc3Npb25TdGF0ZSA9IHtcbiAgc3BhcmtTZXNzaW9uczoge30sXG4gIGFwcGxpY2F0aW9uOiB7IHZlcnNpb246IG51bGwsIHJlbGVhc2VEYXRlOiBudWxsLCBmZWF0dXJlczoge30gfSxcbn1cblxuQFN0YXRlPFNlc3Npb25TdGF0ZU1vZGVsPih7XG4gIG5hbWU6ICdzZXNzaW9uJyxcbiAgZGVmYXVsdHM6IGRlZmF1bHRTZXNzaW9uU3RhdGUsXG59KVxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TdGF0ZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGxvY2FsU3RvcmFnZVNlcnZpY2U6IExvY2FsU3RvcmFnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBhcHBDb25maWdTZXJ2aWNlOiBBcHBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aFNlcnZpY2U6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlndXJhdGlvblNlcnZpY2VQcm94eTogQ29uZmlndXJhdGlvblNlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgaHR0cENhbmNlbFNlcnZpY2U6IEh0dHBDYW5jZWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG1zYWxTZXJ2aWNlOiBNc2FsU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXJzU2VydmljZVByb3h5OiBVc2Vyc1NlcnZpY2VQcm94eSxcbiAgICBwcml2YXRlIG9wZW5JZEF1dGhTZXJ2aWNlOiBPcGVuSWRBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIG1lc3NhZ2VCYXJTZXJ2aWNlOiBNZXNzYWdlQmFyU2VydmljZSkge1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBpc1VzZXJBdXRoZW50aWNhdGVkV2l0aFNTTyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS51c2VyPy5zc29BdXRoZW50aWNhdGVkO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBpc1VzZXJBdXRoZW50aWNhdGVkV2l0aDJGQShzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS51c2VyLmF1dGhlbnRpY2F0ZWQyRkE7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHNlcnZlckVudmlyb25tZW50TW9kZShzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcbiAgICByZXR1cm4gc3RhdGUuc2VydmVyRW52aXJvbm1lbnRNb2RlO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB1c2VySW5mbyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS51c2VyO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBsb2dnZWRVc2VySW5mbyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShMT0dHRURfVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlcjtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGVuYW50SW5mbyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS50ZW5hbnQ7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRoaXJkUGFydHlUb2tlbihzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS50aGlyZFBhcnR5VG9rZW47XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGxvZ2dlZFRlbmFudEluZm8oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oTE9HR0VEX1RFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnRlbmFudDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdXNlclNldHRpbmdzKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCk6IFNwYXJrU2V0dGluZ3NEdG9bXSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgcmV0dXJuIHN0YXRlLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlci5zZXR0aW5ncyBhcyBTcGFya1NldHRpbmdzRHRvW107XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIG1hcHBlZFVzZXJTZXR0aW5ncyhzdGF0ZTogU2Vzc2lvblN0YXRlTW9kZWwpIHtcbiAgICBjb25zdCB0ZW5hbnROYW1lID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShURU5BTlRfS0VZKTtcbiAgICByZXR1cm4gc3RhdGUuc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXS51c2VyLnNldHRpbmdzLnJlZHVjZSgoc2V0dGluZ3NNYXAsIHVzZXJTZXR0aW5nKSA9PlxuICAgICAgc2V0dGluZ3NNYXAuc2V0KHVzZXJTZXR0aW5nLmNhdGVnb3J5LCBKU09OLnBhcnNlKHVzZXJTZXR0aW5nLnNldHRpbmdzSnNvbikpLCBuZXcgTWFwPFNldHRpbmdzQ2F0ZWdvcnksIGFueT4oKSk7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFwcENvbmZpZ3VyYXRpb24oc3RhdGU6IFNlc3Npb25TdGF0ZU1vZGVsKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oTE9HR0VEX1RFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLmFwcENvbmZpZ3VyYXRpb247XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGtlZXBNZUxvZ2dlZEluKHN0YXRlOiBTZXNzaW9uU3RhdGVNb2RlbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFRFTkFOVF9LRVkpO1xuICAgIHJldHVybiBzdGF0ZS5zcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnVzZXIua2VlcE1lTG9nZ2VkSW4gPz8gZmFsc2U7XG4gIH1cblxuICBAQWN0aW9uKExvZ2luUmVxdWVzdEFjdGlvbilcbiAgcHVibGljIG9uTG9naW4oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IExvZ2luUmVxdWVzdEFjdGlvbikge1xuICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmxvZ2luKGFjdGlvbikucGlwZSh0YXAoe1xuICAgICAgbmV4dDogc3BhcmtTZXNzaW9uID0+IHtcbiAgICAgICAgdGhpcy5TZXRUZW5hbnRVc2VyQWN0aW9uKGN0eCwgc3BhcmtTZXNzaW9uKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogZSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBwYXJzZUFwaUVycm9yTWVzc2FnZShlKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcih0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChtZXNzYWdlKSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9KTtcbiAgICAgIH1cbiAgICB9KSlcbiAgfVxuXG4gIEBBY3Rpb24oU2V0VGVuYW50VXNlckFjdGlvbilcbiAgcHVibGljIG9uU2V0VGVuYW50VXNlckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIHsgc3BhcmtTZXNzaW9uIH06IFNldFRlbmFudFVzZXJBY3Rpb24pIHtcbiAgICB0aGlzLlNldFRlbmFudFVzZXJBY3Rpb24oY3R4LCBzcGFya1Nlc3Npb24pO1xuICB9XG5cbiAgcHJpdmF0ZSBTZXRUZW5hbnRVc2VyQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgc3BhcmtTZXNzaW9uOiBTcGFya1Nlc3Npb24pIHtcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgY29uc3QgeyB1c2VyLCBhdXRoVG9rZW4sIHJlZnJlc2gsIHRoaXJkUGFydHlUb2tlbiB9ID0gc3BhcmtTZXNzaW9uO1xuICAgIHVzZXIuc2V0dGluZ3MgPSB1c2VyLnNldHRpbmdzLm1hcChzID0+IHtcbiAgICAgIHJldHVybiBuZXcgU3BhcmtTZXR0aW5nc0R0byh7XG4gICAgICAgIGNhdGVnb3J5OiBzLmNhdGVnb3J5LFxuICAgICAgICBzZXR0aW5nc0pzb246IEpTT04ucGFyc2Uocy5zZXR0aW5nc0pzb24pXG4gICAgICB9KVxuICAgIH0pO1xuXG4gICAgaWYgKCFzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0pIHtcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XSA9IHsgdXNlciwgYXV0aFRva2VuLCByZWZyZXNoLCB0ZW5hbnQ6IG51bGwsIHRoaXJkUGFydHlUb2tlbiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0udXNlciA9IHVzZXI7XG4gICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0uYXV0aFRva2VuID0gYXV0aFRva2VuO1xuICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnJlZnJlc2ggPSByZWZyZXNoO1xuICAgICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnRoaXJkUGFydHlUb2tlbiA9IHRoaXJkUGFydHlUb2tlbjtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgfVxuXG4gIEBBY3Rpb24oVXBkYXRlQXV0aFRva2VuQWN0aW9uKVxuICBwdWJsaWMgb25VcGRhdGVBdXRoVG9rZW5BY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IFVwZGF0ZUF1dGhUb2tlbkFjdGlvbikge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0uYXV0aFRva2VuID0gYWN0aW9uLmF1dGhUb2tlbjtcbiAgfVxuXG4gIEBBY3Rpb24oU2V0U3RhdGVBY3Rpb24pXG4gIHB1YmxpYyBzZXRTZXNzaW9uU3RhdGUoY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFN0YXRlQWN0aW9uKSB7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5hdXRoVG9rZW4gPSBhY3Rpb24uYXV0aFRva2VuO1xuICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS5yZWZyZXNoID0gYWN0aW9uLnJlZnJlc2g7XG5cbiAgICBjb25zdCBhcHBsaWNhdGlvbjogQXBwbGljYXRpb25JbmZvID0ge1xuICAgICAgdmVyc2lvbjogdGhpcy5hcHBDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLnBhY2thZ2VJbmZvLnZlcnNpb24sXG4gICAgICByZWxlYXNlRGF0ZTogbnVsbCxcbiAgICAgIGZlYXR1cmVzOiB7fSxcbiAgICB9O1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgYXBwbGljYXRpb24gfSk7XG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XG4gIH1cblxuICBAQWN0aW9uKFNldFVzZXJOYW1lQWN0aW9uKVxuICBwdWJsaWMgU2V0VXNlck5hbWVBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBhY3Rpb246IFNldFVzZXJOYW1lQWN0aW9uKSB7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udXNlci5kaXNwbGF5TmFtZSA9IGFjdGlvbi51c2VyTmFtZTtcbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgfVxuXG4gIEBBY3Rpb24oQXVkaXRMb2dvdXRBY3Rpb24pXG4gIHB1YmxpYyBBdWRpdExvZ291dEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogQXVkaXRMb2dvdXRBY3Rpb24pIHtcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgY29uc3QgdGVuYW50TmFtZSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oVEVOQU5UX0tFWSk7XG4gICAgY29uc3QgdGVuYW50SW5mbyA9IGN0eC5nZXRTdGF0ZSgpLnNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0udGVuYW50O1xuICAgIGlmICh0aGlzLmlzVGVuYW50VW5kZWZpbmVkKHRlbmFudEluZm8sIHNwYXJrU2Vzc2lvbnNbdGVuYW50TmFtZV0pKSB7XG4gICAgICByZXR1cm4gb2YobnVsbCk7IC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0ZW5hbnQgb3Igc3BhcmtTZXNzaW9ucyBhcmUgdW5kZWZpbmVkXG4gICAgfVxuICAgIHJldHVybiB0aGlzLnVzZXJzU2VydmljZVByb3h5LmF1ZGl0TG9nb3V0KCkucGlwZShcbiAgICAgIHRhcCgoKSA9PiB7IH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTG9nb3V0QWN0aW9uKVxuICBwdWJsaWMgb25Mb2dvdXQoY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCB7IGxvZ291dEF1ZGl0IH06IExvZ291dEFjdGlvbikge1xuICAgIGNvbnN0IGFwcFR5cGUgPSB0aGlzLmFwcENvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuYXBwVHlwZTtcbiAgICB0aGlzLmh0dHBDYW5jZWxTZXJ2aWNlLmNhbmNlbFBlbmRpbmdSZXF1ZXN0cygpO1xuXG4gICAgaWYgKGFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlKSB7XG4gICAgICBjdHguZGlzcGF0Y2gobmV3IExvZ291dE1vYmlsZUFjdGlvbigpKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwYXRoID0gZ2V0TmF2aWdhdGlvblJvdXRlKFNlc3Npb25TdGF0ZS50ZW5hbnRJbmZvKGN0eC5nZXRTdGF0ZSgpKSwgYXBwVHlwZSwgWydhY2NvdW50JywgJ2xvZ2luJ10pO1xuICAgICAgY3R4LmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZShwYXRoKSk7XG4gICAgfVxuXG4gICAgaWYgKGxvZ291dEF1ZGl0KSB7XG4gICAgICBjdHguZGlzcGF0Y2gobmV3IEF1ZGl0TG9nb3V0QWN0aW9uKCkpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJvdXRlci5ldmVudHMucGlwZSggLy8gb2JzZXJ2ZSBhbGwgcm91dGUgZXZlbnRzXG4gICAgICBmaWx0ZXIoZSA9PiBlIGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCAmJiBlLnVybC5pbmNsdWRlcygnL2FjY291bnQvbG9naW4nKSksIC8vIGZpbHRlciBvbmx5IE5hdmlnYXRpb25FbmQgZXZlbnRzXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgZmlyc3QoKSxcbiAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1dGhTZXJ2aWNlLmxvZ291dCgpLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICAgICAgICAgIGNvbnN0IHRlbmFudCA9IHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XTtcbiAgICAgICAgICAgIGNvbnN0IHNzb0VuYWJsZWQgPSB0ZW5hbnQ/LnVzZXI/LnNzb0F1dGhlbnRpY2F0ZWQ7XG4gICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKExPQ0FMX0VOR0xJU0hfTEFOR1VBR0UpO1xuICAgICAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBUZW5hbnRDbGVhckFjdGlvbigpKTtcbiAgICAgICAgICAgIGN0eC5kaXNwYXRjaChuZXcgVW5sb2FkUGFya2luZ0xvdEFjdGlvbigpKTtcbiAgICAgICAgICAgIGlmIChzc29FbmFibGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRlbmFudE5hbWUgPSB0ZW5hbnQ/LnRlbmFudD8udGVuYW50TmFtZTtcbiAgICAgICAgICAgICAgY29uc3QgcHJvdmlkZXIgPSB0ZW5hbnQ/LnRlbmFudC5wcm9wcz8uc3NvPy5wcm92aWRlcjtcbiAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyID09IFNpbmdsZVNpZ25PblByb3ZpZGVyLk1pY3Jvc29mdCkge1xuICAgICAgICAgICAgICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0UmVkaXJlY3Qoe1xuICAgICAgICAgICAgICAgICAgcG9zdExvZ291dFJlZGlyZWN0VXJpOiBgLyR7dGVuYW50TmFtZX1gXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZSBpZiAocHJvdmlkZXIgPT0gU2luZ2xlU2lnbk9uUHJvdmlkZXIuUGluZ0ZlZGVyYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuSWRBdXRoU2VydmljZS5zaWduT3V0KCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy90aGlzLnNpbGVudExvZ091dE1zbChjdHgsIGFwcFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pKTtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNUZW5hbnRVbmRlZmluZWQgPSAodGVuYW50OiBUZW5hbnRJbmZvLCBzZXNzaW9uOiBTcGFya1Nlc3Npb24pID0+ICF0ZW5hbnQgfHwgIXNlc3Npb247XG5cbiAgc2lsZW50TG9nT3V0TXNsKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgYXBwVHlwZTogQXBwVHlwZSkge1xuICAgIGNvbnN0IGNsZWFyQ2FjaGVSZXF1ZXN0OiBDbGVhckNhY2hlUmVxdWVzdCA9IHtcbiAgICAgIGFjY291bnQ6IHRoaXMubXNhbFNlcnZpY2UuaW5zdGFuY2UuZ2V0QWxsQWNjb3VudHMoKVswXSxcbiAgICB9O1xuXG4gICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5jbGVhckNhY2hlKGNsZWFyQ2FjaGVSZXF1ZXN0KTtcbiAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgICBzZXNzaW9uU3RvcmFnZS5jbGVhcigpO1xuXG4gICAgY29uc3QgcGF0aCA9IGdldE5hdmlnYXRpb25Sb3V0ZShTZXNzaW9uU3RhdGUudGVuYW50SW5mbyhjdHguZ2V0U3RhdGUoKSksIGFwcFR5cGUsIFsnYWNjb3VudCcsICdsb2dpbiddKTtcbiAgICBjdHguZGlzcGF0Y2gobmV3IE5hdmlnYXRlKHBhdGgpKTtcbiAgfVxuXG4gIEBBY3Rpb24oVGVuYW50TG9hZEFjdGlvbilcbiAgcHVibGljIG9uVGVuYW50TG9hZEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIGFjdGlvbjogVGVuYW50TG9hZEFjdGlvbikge1xuICAgIGNvbnN0IHRlbmFudE5hbWUgPSBhY3Rpb24udGVuYW50Py50ZW5hbnROYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChuZXcgVXBkYXRlVGVuYW50SW5mb1Byb3BzKGFjdGlvbi50ZW5hbnQ/LnByb3BzKSk7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIGlmICghc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXSkge1xuICAgICAgc3BhcmtTZXNzaW9uc1t0ZW5hbnROYW1lXSA9IHsgdXNlcjogbnVsbCwgYXV0aFRva2VuOiBudWxsLCByZWZyZXNoOiBudWxsLCB0ZW5hbnQ6IGFjdGlvbi50ZW5hbnQgfTtcbiAgICB9XG5cbiAgICBzcGFya1Nlc3Npb25zW3RlbmFudE5hbWVdLnRlbmFudCA9IGFjdGlvbi50ZW5hbnQ7XG4gICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XG4gIH1cblxuICBAQWN0aW9uKFRlbmFudENsZWFyQWN0aW9uKVxuICBwdWJsaWMgb25UZW5hbnRDbGVhckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIF86IFRlbmFudENsZWFyQWN0aW9uKSB7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbiA9IHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XTtcbiAgICBpZiAoc3BhcmtTZXNzaW9uKSB7XG4gICAgICBzcGFya1Nlc3Npb24udXNlciA9IG51bGw7XG4gICAgICBzcGFya1Nlc3Npb24ucmVmcmVzaCA9IG51bGw7XG4gICAgICBzcGFya1Nlc3Npb24uYXV0aFRva2VuID0gbnVsbDtcbiAgICAgIGlmIChzcGFya1Nlc3Npb24uYXBwQ29uZmlndXJhdGlvbikge1xuICAgICAgICBzcGFya1Nlc3Npb24uYXBwQ29uZmlndXJhdGlvbi5hbmFseXRpY3NUb2tlbiA9ICcnO1xuICAgICAgICBzcGFya1Nlc3Npb24uYXBwQ29uZmlndXJhdGlvbi5mZWVkYmFja1Rva2VuID0gJyc7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgICB9XG4gIH1cblxuICBAQWN0aW9uKEhlYWx0aEFjdGlvbilcbiAgcHVibGljIG9uSGVhbHRoQWN0aW9uQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPikge1xuICAgIGNvbnN0IGVudmlyb25tZW50VmFyaWFibGUkID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZVByb3h5LmdldEhlYWx0aCgpO1xuICAgIHJldHVybiBlbnZpcm9ubWVudFZhcmlhYmxlJC5waXBlKHRhcChlbnZpcm9ubWVudFZhcmlhYmxlID0+IHtcbiAgICAgIHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oRU5WSVJPTk1FTlQsIEpTT04uc3RyaW5naWZ5KGVudmlyb25tZW50VmFyaWFibGUuZGF0YS5lbnZpcm9ubWVudCkpO1xuICAgICAgY3R4LnBhdGNoU3RhdGUoeyBzZXJ2ZXJFbnZpcm9ubWVudE1vZGU6IGVudmlyb25tZW50VmFyaWFibGUuZGF0YS5lbnZpcm9ubWVudCB9KTtcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFVwZGF0ZVVzZXJTZXR0aW5nc0luU2Vzc2lvbkFjdGlvbilcbiAgcHVibGljIG9uVXBkYXRlVXNlclNldHRpbmdzKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyB1c2VyU2V0dGluZ3MgfSkge1xuICAgIGNvbnN0IHNwYXJrU2Vzc2lvbnMgPSB0aGlzLmdldFNwYXJrU2Vzc2lvbnMoKTtcbiAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0udXNlci5zZXR0aW5ncyA9IHVzZXJTZXR0aW5ncztcbiAgICB0aGlzLnNldFNwYXJrU2Vzc2lvbnMoY3R4LCBzcGFya1Nlc3Npb25zKTtcbiAgfVxuXG4gIEBBY3Rpb24oVXBkYXRlVGVuYW50SW5mb1Byb3BzKVxuICBwdWJsaWMgb25VcGRhdGVUZW5hbnRJbmZvUHJvcHMoY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCB7IHByb3BzIH0pIHtcbiAgICBjb25zdCBzcGFya1Nlc3Npb25zID0gdGhpcy5nZXRTcGFya1Nlc3Npb25zKCk7XG4gICAgc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdLnRlbmFudC5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMuc2V0U3BhcmtTZXNzaW9ucyhjdHgsIHNwYXJrU2Vzc2lvbnMpO1xuICB9XG5cbiAgQEFjdGlvbihBdXRoZW50aWNhdGUyRkFmb3JVc2VyKVxuICBwdWJsaWMgb25BdXRoZW50aWNhdGUyRkFmb3JVc2VyKGN0eDogU3RhdGVDb250ZXh0PFNlc3Npb25TdGF0ZU1vZGVsPiwgeyB9KSB7XG4gICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgIGlmIChzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0/LnVzZXIpIHtcbiAgICAgIHNwYXJrU2Vzc2lvbnNbdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudGVuYW50XS51c2VyLmF1dGhlbnRpY2F0ZWQyRkEgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihJbml0U2Vzc2lvbkZyb21Mb2NhbFN0b3JhZ2VBY3Rpb24pXG4gIHB1YmxpYyBvbkxvYWRTZXNzaW9uRnJvbUxvY2FsU3RvcmFnZUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4sIF86IEluaXRTZXNzaW9uRnJvbUxvY2FsU3RvcmFnZUFjdGlvbikge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmxvY2FsU3RvcmFnZVNlcnZpY2UuZ2V0SXRlbShTRVNTSU9OKTtcbiAgICBjb25zdCBzZXNzaW9uOiB7XG4gICAgICBhcHBsaWNhdGlvbjogQXBwbGljYXRpb25JbmZvLFxuICAgICAgc3BhcmtTZXNzaW9uczogU3RyaW5nTWFwPFNwYXJrU2Vzc2lvbj4sXG4gICAgfSA9IGRhdGEgPyBKU09OLnBhcnNlKGRhdGEpIDogZGVmYXVsdFNlc3Npb25TdGF0ZTtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICBhcHBsaWNhdGlvbjogc2Vzc2lvbi5hcHBsaWNhdGlvbixcbiAgICAgIHNwYXJrU2Vzc2lvbnM6IHNlc3Npb24uc3BhcmtTZXNzaW9uc1xuICAgIH0pO1xuICAgIGlmICh0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnQpIHtcbiAgICAgIGNvbnN0IHNwYXJrU2Vzc2lvbiA9IHNlc3Npb24uc3BhcmtTZXNzaW9uc1t0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS50ZW5hbnRdO1xuICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2Uuc2V0QXV0aFNlc3Npb24oc3BhcmtTZXNzaW9uPy5hdXRoVG9rZW4sIHNwYXJrU2Vzc2lvbj8ucmVmcmVzaCk7XG4gICAgfVxuICB9XG5cbiAgQEFjdGlvbihMb2FkQXBwQ29uZmlndXJhdGlvbkFjdGlvbilcbiAgcHVibGljIG9uQXBwQ29uZmlndXJhdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxTZXNzaW9uU3RhdGVNb2RlbD4pIHtcbiAgICBjb25zdCBhcHBDb25maWd1cmF0aW9uJCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2VQcm94eS5nZXRBcHBDb25maWd1cmF0aW9uKCk7XG4gICAgcmV0dXJuIGFwcENvbmZpZ3VyYXRpb24kLnBpcGUodGFwKGFwcENvbmZpZ3VyYXRpb24gPT4ge1xuICAgICAgY29uc3Qgc3BhcmtTZXNzaW9ucyA9IHRoaXMuZ2V0U3BhcmtTZXNzaW9ucygpO1xuICAgICAgaWYgKHRoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudCkge1xuICAgICAgICBzcGFya1Nlc3Npb25zW3RoaXMuc2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLnRlbmFudF0uYXBwQ29uZmlndXJhdGlvbiA9IGFwcENvbmZpZ3VyYXRpb24uZGF0YTtcbiAgICAgICAgdGhpcy5zZXRTcGFya1Nlc3Npb25zKGN0eCwgc3BhcmtTZXNzaW9ucyk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTcGFya1Nlc3Npb25zID0gKCk6IFN0cmluZ01hcDxTcGFya1Nlc3Npb24+ID0+IEpTT04ucGFyc2UodGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLmdldEl0ZW0oU0VTU0lPTikpPy5zcGFya1Nlc3Npb25zID8/IHt9O1xuICBwcml2YXRlIHNldFNwYXJrU2Vzc2lvbnMgPSAoY3R4OiBTdGF0ZUNvbnRleHQ8U2Vzc2lvblN0YXRlTW9kZWw+LCBzcGFya1Nlc3Npb25zOiBTdHJpbmdNYXA8U3BhcmtTZXNzaW9uPik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGFwcGxpY2F0aW9uID0gY3R4LmdldFN0YXRlKCkuYXBwbGljYXRpb247XG4gICAgdGhpcy5sb2NhbFN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0oU0VTU0lPTiwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgYXBwbGljYXRpb24sXG4gICAgICBzcGFya1Nlc3Npb25zOiBzcGFya1Nlc3Npb25zXG4gICAgfSkpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHsgc3BhcmtTZXNzaW9ucyB9KTtcbiAgfVxufVxuIl19
|
|
@@ -5,15 +5,15 @@ import { Action, Selector, State } from '@ngxs/store';
|
|
|
5
5
|
import { catchError, map, tap, throwError } from 'rxjs';
|
|
6
6
|
import { MessageBarPosition } from '../../components/message-bar/message-bar-position.enum';
|
|
7
7
|
import { RESET_PASSWORD_EMAIL } from '../../constants/keys-constants';
|
|
8
|
+
import { VERSION_V1 } from '../../constants/version-constants';
|
|
8
9
|
import { AppType } from '../../enums/app-type.enum';
|
|
9
10
|
import { Localization } from '../../enums/localization.enum';
|
|
10
11
|
import { ActivateUserDto, UserStatus } from '../../service-proxy/cloud-service-proxies';
|
|
11
12
|
import { SingleSignOnProvider, UserUpdatePasswordDto } from '../../service-proxy/edge-service-proxies';
|
|
12
13
|
import { AuthenticateRequestDto, PasswordChangeType, Verify2FactorAuthRequestDto } from '../../service-proxy/identity-service-proxies';
|
|
13
14
|
import { parseApiErrorData, parseApiErrorMessage } from '../../utils/api-helper.util';
|
|
14
|
-
import { HealthAction, LoadAppConfigurationAction, SetTenantUserAction } from '../auth/session.actions';
|
|
15
|
+
import { HealthAction, LoadAppConfigurationAction, SetTenantUserAction, UpdateAuthTokenAction } from '../auth/session.actions';
|
|
15
16
|
import { AccountSetPasswordAction, AccountSetPasswordErrorAction, AccountSetPasswordInitAction, AuthenticateMultipleTenantsAction, ForgotPasswordAction, ForgotPasswordTenantlessAction, MobileAuthenticateMultipleTenantsAction, OpenIdAutheticateAction, SetTFASetupAction, ValidateUserTokenAction, Verify2FactorAuthenticationAction } from './login.actions';
|
|
16
|
-
import { VERSION_V1 } from '../../constants/version-constants';
|
|
17
17
|
import * as i0 from "@angular/core";
|
|
18
18
|
import * as i1 from "../../service-proxy/cloud-service-proxies";
|
|
19
19
|
import * as i2 from "../../service-proxy/edge-service-proxies";
|
|
@@ -207,6 +207,10 @@ let LoginState = class LoginState {
|
|
|
207
207
|
verify2FactorAuth$ = this.usersServiceProxyIdentity.verify2FactorAuthenticationLogin(verify2FactorAuthRequestDto);
|
|
208
208
|
}
|
|
209
209
|
return verify2FactorAuth$.pipe(tap({
|
|
210
|
+
next: (verify2FactorAuthResponset) => {
|
|
211
|
+
this.sessionStorageService.accessToken = verify2FactorAuthResponset.data.accessToken;
|
|
212
|
+
this.store.dispatch(new UpdateAuthTokenAction(verify2FactorAuthResponset.data.accessToken));
|
|
213
|
+
},
|
|
210
214
|
error: e => {
|
|
211
215
|
this.messageBarService.error(parseApiErrorMessage(e), this.messageOptions);
|
|
212
216
|
}
|
|
@@ -359,4 +363,4 @@ export { LoginState };
|
|
|
359
363
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoginState, decorators: [{
|
|
360
364
|
type: Injectable
|
|
361
365
|
}], ctorParameters: function () { return [{ type: i1.UsersServiceProxy }, { type: i2.UsersServiceProxy }, { type: i3.OpenIdAuthService }, { type: i4.UsersServiceProxyIdentity }, { type: i5.AuthService }, { type: i6.SessionStorageService }, { type: i7.LoginService }, { type: i8.TranslateService }, { type: i9.MsalService }, { type: i10.MessageBarService }, { type: i11.AppConfigService }, { type: i12.RouteService }, { type: i13.Store }, { type: i4.MobileServiceProxyIdentity }]; }, propDecorators: { onAuthenticateMultipleTenantsAction: [], onMobileAuthenticateMultipleTenantsAction: [], onForgotPassword: [], onForgotPasswordTenantless: [], onAccountSetPasswordInitAction: [], onAccountSetPasswordErrorAction: [], onAccountSetPasswordAction: [], onValidateUserTokenAction: [], onVerify2FactorAuthenticationAction: [], onSetTFASetupAction: [], onOpenIdAutheticateAction: [] } });
|
|
362
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvbG9naW4vbG9naW4uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQWMsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdELE9BQU8sRUFBdUMsZUFBZSxFQUFtSCxVQUFVLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUM5TyxPQUFPLEVBQUUsb0JBQW9CLEVBQThDLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkosT0FBTyxFQUFnQyxzQkFBc0IsRUFBb0Usa0JBQWtCLEVBQW9HLDJCQUEyQixFQUFpRCxNQUFNLDhDQUE4QyxDQUFDO0FBS3hYLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSXRGLE9BQU8sRUFBRSxZQUFZLEVBQUUsMEJBQTBCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RyxPQUFPLEVBQUUsd0JB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R0Q7SUFEQyxNQUFNLENBQUMsaUNBQWlDLENBQUM7cUVBa0J6QztBQUdEO0lBREMsTUFBTSxDQUFDLGlCQUFpQixDQUFDO3FEQUt6QjtBQXFDRDtJQURDLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQzsyREE4Qi9CO0FBOVFhO0lBRGIsUUFBUSxFQUFFOzZDQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7a0NBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTtnQ0FHVjtBQUdhO0lBRGIsUUFBUSxFQUFFO29DQUdWO0FBR2E7SUFEYixRQUFRLEVBQUU7Z0NBR1Y7QUFHYTtJQURiLFFBQVEsRUFBRTttQ0FHVjtBQXpDVSxVQUFVO0lBWHRCLEtBQUssQ0FBa0I7UUFDdEIsSUFBSSxFQUFFLE9BQU87UUFDYixRQUFRLEVBQUU7WUFDUixRQUFRLEVBQUUsU0FBUztZQUNuQixVQUFVLEVBQUUsRUFBRTtZQUNkLGtCQUFrQixFQUFFLFNBQVM7WUFDN0IsUUFBUSxFQUFFLEVBQUU7WUFDWixXQUFXLEVBQUUsRUFBRTtZQUNmLFFBQVEsRUFBRSxTQUFTO1NBQ3BCO0tBQ0YsQ0FBQztHQUNXLFVBQVUsQ0FrVHRCO1NBbFRZLFVBQVU7NEZBQVYsVUFBVTtrQkFadEIsVUFBVTs2ZkF3REYsbUNBQW1DLE1Ba0JuQyx5Q0FBeUMsTUFnQnpDLGdCQUFnQixNQVloQiwwQkFBMEIsTUFPMUIsOEJBQThCLE1BUTlCLCtCQUErQixNQVMvQiwwQkFBMEIsTUF3QzFCLHlCQUF5QixNQXdDekIsbUNBQW1DLE1Bb0JuQyxtQkFBbUIsTUF5Q25CLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1zYWxTZXJ2aWNlIH0gZnJvbSAnQGF6dXJlL21zYWwtYW5ndWxhcic7XG5pbXBvcnQgeyBDbGVhckNhY2hlUmVxdWVzdCB9IGZyb20gJ0BhenVyZS9tc2FsLWJyb3dzZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGUgfSBmcm9tICdAbmd4cy9yb3V0ZXItcGx1Z2luJztcbmltcG9ydCB7IEFjdGlvbiwgU2VsZWN0b3IsIFN0YXRlLCBTdGF0ZUNvbnRleHQsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgbWFwLCBPYnNlcnZhYmxlLCB0YXAsIHRocm93RXJyb3IgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE1lc3NhZ2VCYXJQb3NpdGlvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS1iYXIvbWVzc2FnZS1iYXItcG9zaXRpb24uZW51bSc7XG5pbXBvcnQgeyBNZXNzYWdlQmFyU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS1iYXIvbWVzc2FnZS1iYXIuc2VydmljZSc7XG5pbXBvcnQgeyBSRVNFVF9QQVNTV09SRF9FTUFJTCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9rZXlzLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBBcHBUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvYXBwLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBMb2NhbGl6YXRpb24gfSBmcm9tICcuLi8uLi9lbnVtcy9sb2NhbGl6YXRpb24uZW51bSc7XG5pbXBvcnQgeyBBY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSwgQWN0aXZhdGVVc2VyRHRvLCBBcGlFeGNlcHRpb24sIFByb2JsZW1EZXRhaWxzLCBUZmFTZXR1cER0bywgVXNlckR0b0h0dHBSZXNwb25zZURhdGEsIFVzZXJzU2VydmljZVByb3h5IGFzIFVzZXJzU2VydmljZVByb3h5Q2xvdWQsIFVzZXJTdGF0dXMgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2Nsb3VkLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBTaW5nbGVTaWduT25Qcm92aWRlciwgVXNlcnNTZXJ2aWNlUHJveHkgYXMgVXNlcnNTZXJ2aWNlUHJveHlFZGdlLCBVc2VyVXBkYXRlUGFzc3dvcmREdG8gfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2VkZ2Utc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8sIEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8sIEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvLCBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEsIFBhc3N3b3JkQ2hhbmdlVHlwZSwgTW9iaWxlU2VydmljZVByb3h5SWRlbnRpdHksIFVzZXJzU2VydmljZVByb3h5SWRlbnRpdHksIFZhbGlkYXRlQWN0aXZhdGlvblVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhLCBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8sIFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YSB9IGZyb20gJy4uLy4uL3NlcnZpY2UtcHJveHkvaWRlbnRpdHktc2VydmljZS1wcm94aWVzJztcbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgT3BlbklkQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vcGVuaWQtYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFJvdXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JvdXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2Vzc2lvbi1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgcGFyc2VBcGlFcnJvckRhdGEsIHBhcnNlQXBpRXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLWhlbHBlci51dGlsJztcbmltcG9ydCB7IFN0cmluZ01hcCB9IGZyb20gJy4uLy4uL3V0aWxzL2xhbmcudXRpbCc7XG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGgvYXV0aC5zZXJ2aWNlJztcbmltcG9ydCB7IFVzZXJJbmZvIH0gZnJvbSAnLi4vYXV0aC9tb2RlbC91c2VyLWluZm8uaW50ZXJmYWNlJztcbmltcG9ydCB7IEhlYWx0aEFjdGlvbiwgTG9hZEFwcENvbmZpZ3VyYXRpb25BY3Rpb24sIFNldFRlbmFudFVzZXJBY3Rpb24gfSBmcm9tICcuLi9hdXRoL3Nlc3Npb24uYWN0aW9ucyc7XG5pbXBvcnQgeyBBY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24sIEFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uLCBBY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uLCBBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24sIEZvcmdvdFBhc3N3b3JkQWN0aW9uLCBGb3Jnb3RQYXNzd29yZFRlbmFudGxlc3NBY3Rpb24sIE1vYmlsZUF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbiwgT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24sIFNldFRGQVNldHVwQWN0aW9uLCBWYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbiwgVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uQWN0aW9uIH0gZnJvbSAnLi9sb2dpbi5hY3Rpb25zJztcbmltcG9ydCB7IExvZ2luU2VydmljZSB9IGZyb20gJy4vbG9naW4uc2VydmljZSc7XG5pbXBvcnQgeyBWRVJTSU9OX1YxIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3ZlcnNpb24tY29uc3RhbnRzJztcblxuZXhwb3J0IGludGVyZmFjZSBMb2dpblN0YXRlTW9kZWwge1xuICB1c2VySW5mbzogVXNlckluZm87XG4gIHRlbmFudE5hbWU6IHN0cmluZztcbiAgcGFzc3dvcmRDaGFuZ2VUeXBlOiBQYXNzd29yZENoYW5nZVR5cGU7XG4gIGFjY291bnRzOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b1tdO1xuICBhY2NvdW50c01hcDogU3RyaW5nTWFwPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvPjtcbiAgdGZhU2V0dXA6IFRmYVNldHVwRHRvO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5AU3RhdGU8TG9naW5TdGF0ZU1vZGVsPih7XG4gIG5hbWU6ICdsb2dpbicsXG4gIGRlZmF1bHRzOiB7XG4gICAgdXNlckluZm86IHVuZGVmaW5lZCxcbiAgICB0ZW5hbnROYW1lOiAnJyxcbiAgICBwYXNzd29yZENoYW5nZVR5cGU6IHVuZGVmaW5lZCxcbiAgICBhY2NvdW50czogW10sXG4gICAgYWNjb3VudHNNYXA6IHt9LFxuICAgIHRmYVNldHVwOiB1bmRlZmluZWQsXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgTG9naW5TdGF0ZSB7XG5cbiAgcHJpdmF0ZSBtZXNzYWdlT3B0aW9ucyA9IHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHVzZXJzU2VydmljZVByb3h5Q2xvdWQ6IFVzZXJzU2VydmljZVByb3h5Q2xvdWQsXG4gICAgcHJpdmF0ZSB1c2Vyc1NlcnZpY2VQcm94eUVkZ2U6IFVzZXJzU2VydmljZVByb3h5RWRnZSwgcHJpdmF0ZSBvcGVuSWRBdXRoU2VydmljZTogT3BlbklkQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5OiBVc2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5LCBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcbiAgICBwcml2YXRlIHNlc3Npb25TdG9yYWdlU2VydmljZTogU2Vzc2lvblN0b3JhZ2VTZXJ2aWNlLCBwcml2YXRlIGxvZ2luU2VydmljZTogTG9naW5TZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtc2FsU2VydmljZTogTXNhbFNlcnZpY2UsIHByaXZhdGUgbWVzc2FnZUJhclNlcnZpY2U6IE1lc3NhZ2VCYXJTZXJ2aWNlLCBwcml2YXRlIGFwcENvbmZpZzogQXBwQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlU2VydmljZTogUm91dGVTZXJ2aWNlLCBwcml2YXRlIHN0b3JlOiBTdG9yZSwgcHJpdmF0ZSBtb2JpbGVTZXJ2aWNlUHJveHlJZGVudGl0eTogTW9iaWxlU2VydmljZVByb3h5SWRlbnRpdHkpIHtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdHdvRmFjdG9yU2V0dXBGb3JVc2VyKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBUZmFTZXR1cER0byB7XG4gICAgcmV0dXJuIHN0YXRlLnRmYVNldHVwO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB0ZW5hbnROYW1lKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdGF0ZS50ZW5hbnROYW1lO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyB1c2VySW5mbyhzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogVXNlckluZm8ge1xuICAgIHJldHVybiBzdGF0ZS51c2VySW5mbztcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGVtcGxhdGVUeXBlKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBQYXNzd29yZENoYW5nZVR5cGUge1xuICAgIHJldHVybiBzdGF0ZS5wYXNzd29yZENoYW5nZVR5cGU7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFjY291bnRzKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b1tdIHtcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudHM7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIGFjY291bnRzTWFwKHN0YXRlOiBMb2dpblN0YXRlTW9kZWwpOiBTdHJpbmdNYXA8QXV0aGVudGljYXRlUmVzcG9uc2VEdG8+IHtcbiAgICByZXR1cm4gc3RhdGUuYWNjb3VudHNNYXA7XG4gIH1cblxuICBAQWN0aW9uKEF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbilcbiAgcHVibGljIG9uQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlcm5hbWUsIHBhc3N3b3JkIH06IEF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbikge1xuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0bygpO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udXNlcm5hbWUgPSB1c2VybmFtZTtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by50ZW5hbnROYW1lID0gJyc7XG5cbiAgICByZXR1cm4gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5Lm11bHRpVGVuYW50c0F1dGhlbnRpY2F0ZShhdXRoZW50aWNhdGVSZXF1ZXN0RHRvKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhY2NvdW50c0h0dHBSZXNwb25zZURhdGEgPT4ge1xuICAgICAgICBjb25zdCBhY2NvdW50cyA9IGFjY291bnRzSHR0cFJlc3BvbnNlRGF0YS5kYXRhO1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgYWNjb3VudHNcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZUJhcihlKVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oTW9iaWxlQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKVxuICBwdWJsaWMgb25Nb2JpbGVBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB1c2VybmFtZSwgcGFzc3dvcmQsIHRlbmFudE5hbWUgfTogTW9iaWxlQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKSB7XG4gICAgY29uc3QgYXV0aGVudGljYXRlUmVxdWVzdER0byA9IG5ldyBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvKCk7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by51c2VybmFtZSA9IHVzZXJuYW1lO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8ucGFzc3dvcmQgPSBwYXNzd29yZDtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnRlbmFudE5hbWUgPSB0ZW5hbnROYW1lO1xuICAgIHJldHVybiB0aGlzLm1vYmlsZVNlcnZpY2VQcm94eUlkZW50aXR5Lm1vYmlsZUF1dGhlbnRpY2F0ZShWRVJTSU9OX1YxLCBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhY2NvdW50cyA9PiB7XG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICBhY2NvdW50c01hcDogYWNjb3VudHMuZGF0YSxcbiAgICAgICAgfSk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4gdGhpcy5hdXRoZW50aWNhdGlvbkVycm9yTWVzc2FnZUJhcihlKVxuICAgIH0pKTtcbiAgfVxuXG4gIEBBY3Rpb24oRm9yZ290UGFzc3dvcmRBY3Rpb24pXG4gIHB1YmxpYyBvbkZvcmdvdFBhc3N3b3JkKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgZW1haWwsIHRlbmFudElkIH06IEZvcmdvdFBhc3N3b3JkQWN0aW9uKSB7XG4gICAgY29uc3QgaXNNb2JpbGVBcHBNb2RlID0gdGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5Nb2JpbGU7XG4gICAgY29uc3QgcGF0aCA9IFsnYWNjb3VudCcsICdmb3Jnb3QtcGFzc3dvcmQtc3VjY2VzcyddO1xuICAgIGNvbnN0IHVybCA9IGlzTW9iaWxlQXBwTW9kZSA/IHBhdGggOiB0aGlzLnJvdXRlU2VydmljZS5nZXROYXZpZ2F0aW9uUm91dGUocGF0aCk7XG5cbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS5zZXRJdGVtKFJFU0VUX1BBU1NXT1JEX0VNQUlMLCBKU09OLnN0cmluZ2lmeShlbWFpbCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IE5hdmlnYXRlKHVybCkpO1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uuc3VjY2VzcyhMb2NhbGl6YXRpb24uZm9yZ290X3Bhc3N3b3JkX2VtYWlsX3NlbnRfbXNnLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICByZXR1cm4gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUNsb3VkLmZvcmdvdFBhc3N3b3JkKGVtYWlsLCB0ZW5hbnRJZCk7XG4gIH1cblxuICBAQWN0aW9uKEZvcmdvdFBhc3N3b3JkVGVuYW50bGVzc0FjdGlvbilcbiAgcHVibGljIG9uRm9yZ290UGFzc3dvcmRUZW5hbnRsZXNzKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgZW1haWwgfTogRm9yZ290UGFzc3dvcmRBY3Rpb24pIHtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLmZvcmdvdF9wYXNzd29yZF9lbWFpbF9zZW50X21zZywgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlUHJveHlDbG91ZC5mb3Jnb3RQYXNzd29yZFRlbmFudGxlc3MoZW1haWwpO1xuICB9XG5cblxuICBAQWN0aW9uKEFjY291bnRTZXRQYXNzd29yZEluaXRBY3Rpb24pXG4gIHB1YmxpYyBvbkFjY291bnRTZXRQYXNzd29yZEluaXRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB1c2VySW5mbywgY29tcG9uZW50VHlwZSB9KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgdXNlckluZm8sXG4gICAgICBwYXNzd29yZENoYW5nZVR5cGU6IGNvbXBvbmVudFR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQWNjb3VudFNldFBhc3N3b3JkRXJyb3JBY3Rpb24pXG4gIHB1YmxpYyBvbkFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgZXJyb3JNc2csIHVzZXJuYW1lIH0pIHtcbiAgICBjb25zdCB1c2VySW5mbzogVXNlckluZm8gPSB7IC4uLnVzZXJuYW1lIH07XG4gICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihlcnJvck1zZywgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgdXNlckluZm9cbiAgICB9KTtcbiAgfVxuXG4gIEBBY3Rpb24oQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uKVxuICBwdWJsaWMgb25BY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyBwYXNzd29yZCB9OiBBY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24pIHtcbiAgICBjb25zdCB1c2VySW5mbyA9IGN0eC5nZXRTdGF0ZSgpLnVzZXJJbmZvO1xuICAgIGxldCBkYXRhOiBhbnk7XG4gICAgbGV0IHNldFBhc3N3b3JkJDogT2JzZXJ2YWJsZTxVc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSB8IEFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhPjtcblxuICAgIGlmICh0aGlzLmFwcENvbmZpZy5nZXRDb25maWcoKS5hcHBUeXBlID09PSBBcHBUeXBlLkNsb3VkKSB7XG4gICAgICBkYXRhID0gbmV3IEFjdGl2YXRlVXNlckR0byh7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBjdXJyZW50UGFzc3dvcmQ6IG51bGwsXG4gICAgICAgIHVzZXJTdGF0dXM6IHVzZXJJbmZvLnN0YXR1cyBhcyBVc2VyU3RhdHVzXG4gICAgICB9KTtcblxuICAgICAgc2V0UGFzc3dvcmQkID0gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUNsb3VkLmFjdGl2YXRlKGRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkYXRhID0gbmV3IFVzZXJVcGRhdGVQYXNzd29yZER0byh7XG4gICAgICAgIHBhc3N3b3JkLFxuICAgICAgICBjdXJyZW50UGFzc3dvcmQ6IG51bGxcbiAgICAgIH0pO1xuICAgICAgc2V0UGFzc3dvcmQkID0gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUVkZ2UudXBkYXRlVXNlclBhc3N3b3JkKGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBzZXRQYXNzd29yZCQucGlwZShcbiAgICAgIG1hcCgoYWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE6IEFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKSA9PiB7XG4gICAgICAgIGlmIChhY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5kYXRhLmlzU3VjY2Vzcykge1xuICAgICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICAgIHRmYVNldHVwOiBhY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YS5kYXRhPy50ZmFTZXR1cCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZGF0YS5lcnJvck1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGNhdGNoRXJyb3IoZSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGUgaW5zdGFuY2VvZiBFcnJvciA/IGUubWVzc2FnZSA6IGU7XG4gICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3JNZXNzYWdlKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIEBBY3Rpb24oVmFsaWRhdGVVc2VyVG9rZW5BY3Rpb24pXG4gIHB1YmxpYyBvblZhbGlkYXRlVXNlclRva2VuQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdG9rZW4sIHRva2VuVHlwZSB9OiBWYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbikge1xuICAgIGNvbnN0IHBjdDogYW55ID0gUGFzc3dvcmRDaGFuZ2VUeXBlW3Rva2VuVHlwZV07XG4gICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eS52YWxpZGF0ZUFjdGl2YXRpb24odG9rZW4sIFBhc3N3b3JkQ2hhbmdlVHlwZVtQYXNzd29yZENoYW5nZVR5cGVbdG9rZW5UeXBlXV0pLnBpcGUodGFwKHtcbiAgICAgIG5leHQ6ICh1c2VyOiBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAodXNlcj8uZGF0YSkge1xuICAgICAgICAgIGNvbnN0IHVzZXJJbmZvOiBVc2VySW5mbyA9IHtcbiAgICAgICAgICAgIHVzZXJJZDogdXNlci5kYXRhLmlkLFxuICAgICAgICAgICAgdXNlcm5hbWU6IHVzZXIuZGF0YS51TmFtZSxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHt1c2VyLmRhdGEubmFtZX0gJHt1c2VyLmRhdGEubGFzdE5hbWV9YCxcbiAgICAgICAgICAgIHN0YXR1czogdXNlci5kYXRhLnN0YXR1cyxcbiAgICAgICAgICAgIHBtbDogdXNlci5kYXRhLnBtbFxuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKHVzZXIuZGF0YS5zdGF0dXMgIT09IFVzZXJTdGF0dXMuQmxvY2tlZCkge1xuICAgICAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgICAgICB1c2VySW5mbyxcbiAgICAgICAgICAgICAgcGFzc3dvcmRDaGFuZ2VUeXBlOiBwY3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihMb2NhbGl6YXRpb24ubm9uX2FjdGl2ZV91c2VyLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICAgICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICAgICAgdXNlckluZm8sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogZSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9ySnNvbjogUHJvYmxlbURldGFpbHMgPSBKU09OLnBhcnNlKGUucmVzcG9uc2UpIGFzIFByb2JsZW1EZXRhaWxzO1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgIHVzZXJJbmZvOiB7XG4gICAgICAgICAgICB1c2VybmFtZTogZXJyb3JKc29uLmluc3RhbmNlLFxuICAgICAgICAgICAgdXNlcklkOiBudWxsLFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IG51bGxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkFjdGlvbilcbiAgcHVibGljIG9uVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlck5hbWUsIGNvZGUsIHNldHVwMkZhIH06IFZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkFjdGlvbikge1xuICAgIGNvbnN0IHZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byA9IG5ldyBWZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8oe1xuICAgICAgY29kZSxcbiAgICAgIHVzZXJOYW1lXG4gICAgfSk7XG5cbiAgICBsZXQgdmVyaWZ5MkZhY3RvckF1dGgkOiBPYnNlcnZhYmxlPFZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0RHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgaWYgKHNldHVwMkZhKSB7XG4gICAgICB2ZXJpZnkyRmFjdG9yQXV0aCQgPSB0aGlzLnVzZXJzU2VydmljZVByb3h5SWRlbnRpdHkudmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uKHZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byk7XG4gICAgfSBlbHNlIHsgLy8gbG9naW4gZm9yIHVzZXIgd2l0aCAyRkEgKGFscmVhZHkgc2V0IHVwKVxuICAgICAgdmVyaWZ5MkZhY3RvckF1dGgkID0gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5LnZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkxvZ2luKHZlcmlmeTJGYWN0b3JBdXRoUmVxdWVzdER0byk7XG4gICAgfVxuICAgIHJldHVybiB2ZXJpZnkyRmFjdG9yQXV0aCQucGlwZSh0YXAoe1xuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKHBhcnNlQXBpRXJyb3JNZXNzYWdlKGUpLCB0aGlzLm1lc3NhZ2VPcHRpb25zKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKFNldFRGQVNldHVwQWN0aW9uKVxuICBwdWJsaWMgb25TZXRURkFTZXR1cEFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHRmYVNldHVwRHRvIH0pIHtcbiAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICB0ZmFTZXR1cDogdGZhU2V0dXBEdG9cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2VCYXIoZXJyb3I6IEFwaUV4Y2VwdGlvbikge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IHBhcnNlQXBpRXJyb3JNZXNzYWdlKGVycm9yKTtcbiAgICBjb25zdCBkYXRhID0gcGFyc2VBcGlFcnJvckRhdGE8QXV0aGVudGljYXRlRXJyb3JSZXNwb25zZUR0bz4oZXJyb3IpO1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZXJyb3JNZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljLCBtZXNzYWdlUGFyYW1zOiB7IHRlbXBvcmFyeUxvY2tlZE1pbnV0ZXM6IGRhdGE/LnRlbXBvcmFyeUJsb2NrZWRUaW1lIH0gfSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyTXNsTG9naW5DYWNoZSgpIHtcbiAgICBjb25zdCBjbGVhckNhY2hlUmVxdWVzdDogQ2xlYXJDYWNoZVJlcXVlc3QgPSB7XG4gICAgICBhY2NvdW50OiB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmdldEFsbEFjY291bnRzKClbMF0sXG4gICAgfTtcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmluc3RhbmNlLmNsZWFyQ2FjaGUoY2xlYXJDYWNoZVJlcXVlc3QpO1xuICAgIHRoaXMubXNhbFNlcnZpY2UubG9nb3V0KCk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyU2luZ2xlU2luZ09uQ2FjaGUoc2luZ2xlU2lnbk9uUHJvdmlkZXI6IFNpbmdsZVNpZ25PblByb3ZpZGVyKSB7XG4gICAgc3dpdGNoIChzaW5nbGVTaWduT25Qcm92aWRlcikge1xuICAgICAgY2FzZSBTaW5nbGVTaWduT25Qcm92aWRlci5NaWNyb3NvZnQ6XG4gICAgICAgIHRoaXMuY2xlYXJNc2xMb2dpbkNhY2hlKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNpbmdsZVNpZ25PblByb3ZpZGVyLlBpbmdGZWRlcmF0ZTpcbiAgICAgICAgdGhpcy5vcGVuSWRBdXRoU2VydmljZS5zaWduT3V0KCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBsb2NhbFN0b3JhZ2UuY2xlYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgdXNlclN0YXR1c0lzQXdhaXRpbmdBY2Nlc3MgPSAoYXV0aFJlc3BvbnNlOiBBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEpOiBib29sZWFuID0+XG4gICAgYXV0aFJlc3BvbnNlLmRhdGEuc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8/LmlzQXV0aGVudGljYXRlZCA9PT0gZmFsc2UgJiZcbiAgICBhdXRoUmVzcG9uc2UuZGF0YS5zaW5nbGVTaWduT25BdXRoZW50aWNhdGlvbkR0bz8udXNlclN0YXR1cyA9PT0gVXNlclN0YXR1cy5Bd2FpdGluZ0FjY2VzcztcblxuXG4gIEBBY3Rpb24oT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24pXG4gIHB1YmxpYyBvbk9wZW5JZEF1dGhldGljYXRlQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdG9rZW4sIHNpbmdsZVNpZ25PblByb3ZpZGVyLCB0ZW5hbnRJbmZvIH06IE9wZW5JZEF1dGhldGljYXRlQWN0aW9uKSB7XG4gICAgbGV0IGF1dGhlbnRpY2F0ZU9pZGMkOiBPYnNlcnZhYmxlPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG4gICAgYXV0aGVudGljYXRlT2lkYyQgPSB0aGlzLnVzZXJzU2VydmljZVByb3h5SWRlbnRpdHkub3BlbklkQXV0aGVudGljYXRlKHRva2VuLCB0ZW5hbnRJbmZvLnRlbmFudE5hbWUpO1xuICAgIHJldHVybiBhdXRoZW50aWNhdGVPaWRjJC5waXBlKHRhcCh7XG4gICAgICBuZXh0OiBhdXRoUmVzcG9uc2UgPT4ge1xuICAgICAgICBpZiAoYXV0aFJlc3BvbnNlLmRhdGEubWVzc2FnZSA9PT0gTG9jYWxpemF0aW9uLnNzb19wZW5kaW5nX2FwcHJvdmFsKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgICAgdGhpcy5jbGVhclNpbmdsZVNpbmdPbkNhY2hlKHNpbmdsZVNpZ25PblByb3ZpZGVyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzcGFya1Nlc3Npb24gPSB0aGlzLmF1dGhTZXJ2aWNlLnByb2Nlc3NBdXRoZW50aWNhdGUoYXV0aFJlc3BvbnNlLmRhdGEpO1xuICAgICAgICBjdHguZGlzcGF0Y2gobmV3IFNldFRlbmFudFVzZXJBY3Rpb24oc3BhcmtTZXNzaW9uKSk7XG5cbiAgICAgICAgaWYgKHRoaXMudXNlclN0YXR1c0lzQXdhaXRpbmdBY2Nlc3MoYXV0aFJlc3BvbnNlKSkge1xuICAgICAgICAgIHRoaXMuY2xlYXJTaW5nbGVTaW5nT25DYWNoZShzaW5nbGVTaWduT25Qcm92aWRlcik7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS53YXJuKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gQWZ0ZXIgYXV0aGVudGljYXRpb24gZ2V0IGFwcCBjb25maWd1cmF0aW9uXG4gICAgICAgICAgdGhpcy5sb2dpblRvU3BhcmsoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHtcbiAgICAgICAgdGhpcy5zaW5nbGVTaW5nT25FcnJvckhhbmRsaW5nKGUpO1xuICAgICAgfVxuICAgIH0pKTtcbiAgfVxuXG4gIHNpbmdsZVNpbmdPbkVycm9ySGFuZGxpbmcoZTogYW55KSB7XG4gICAgaWYgKGUuZXJyb3JNZXNzYWdlID09IExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCkge1xuICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCk7XG4gICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmluZm8obWVzc2FnZSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYyB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZS5lcnJvck1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlLmVycm9yTWVzc2FnZSk7XG4gICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgbG9naW5Ub1NwYXJrKCkge1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IExvYWRBcHBDb25maWd1cmF0aW9uQWN0aW9uKCkpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2gobmV3IEhlYWx0aEFjdGlvbigpKTtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlU2VydmljZS51cGRhdGVMb2dnZWRUZW5hbnQoKTtcbiAgICB0aGlzLmxvZ2luU2VydmljZS5sb2dpblRvU3BhcmsoKTtcbiAgfVxufVxuIl19
|
|
366
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtc2hhcmVkLWxpYi9zcmMvbGlicmFyaWVzL21vZHVsZXMvbG9naW4vbG9naW4uc3RhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBdUIsTUFBTSxhQUFhLENBQUM7QUFDM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQWMsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3REFBd0QsQ0FBQztBQUU1RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQXVDLGVBQWUsRUFBbUgsVUFBVSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDOU8sT0FBTyxFQUFFLG9CQUFvQixFQUE4QyxxQkFBcUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ25KLE9BQU8sRUFBZ0Msc0JBQXNCLEVBQWdHLGtCQUFrQixFQUF3RSwyQkFBMkIsRUFBaUQsTUFBTSw4Q0FBOEMsQ0FBQztBQUt4WCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUl0RixPQUFPLEVBQUUsWUFBWSxFQUFFLDBCQUEwQixFQUFFLG1CQUFt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eUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTXNhbFNlcnZpY2UgfSBmcm9tICdAYXp1cmUvbXNhbC1hbmd1bGFyJztcbmltcG9ydCB7IENsZWFyQ2FjaGVSZXF1ZXN0IH0gZnJvbSAnQGF6dXJlL21zYWwtYnJvd3Nlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBOYXZpZ2F0ZSB9IGZyb20gJ0BuZ3hzL3JvdXRlci1wbHVnaW4nO1xuaW1wb3J0IHsgQWN0aW9uLCBTZWxlY3RvciwgU3RhdGUsIFN0YXRlQ29udGV4dCwgU3RvcmUgfSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBtYXAsIE9ic2VydmFibGUsIHRhcCwgdGhyb3dFcnJvciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVzc2FnZUJhclBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlLWJhci9tZXNzYWdlLWJhci1wb3NpdGlvbi5lbnVtJztcbmltcG9ydCB7IE1lc3NhZ2VCYXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlLWJhci9tZXNzYWdlLWJhci5zZXJ2aWNlJztcbmltcG9ydCB7IFJFU0VUX1BBU1NXT1JEX0VNQUlMIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2tleXMtY29uc3RhbnRzJztcbmltcG9ydCB7IFZFUlNJT05fVjEgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdmVyc2lvbi1jb25zdGFudHMnO1xuaW1wb3J0IHsgQXBwVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2FwcC10eXBlLmVudW0nO1xuaW1wb3J0IHsgTG9jYWxpemF0aW9uIH0gZnJvbSAnLi4vLi4vZW51bXMvbG9jYWxpemF0aW9uLmVudW0nO1xuaW1wb3J0IHsgQWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEsIEFjdGl2YXRlVXNlckR0bywgQXBpRXhjZXB0aW9uLCBQcm9ibGVtRGV0YWlscywgVGZhU2V0dXBEdG8sIFVzZXJEdG9IdHRwUmVzcG9uc2VEYXRhLCBVc2Vyc1NlcnZpY2VQcm94eSBhcyBVc2Vyc1NlcnZpY2VQcm94eUNsb3VkLCBVc2VyU3RhdHVzIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9jbG91ZC1zZXJ2aWNlLXByb3hpZXMnO1xuaW1wb3J0IHsgU2luZ2xlU2lnbk9uUHJvdmlkZXIsIFVzZXJzU2VydmljZVByb3h5IGFzIFVzZXJzU2VydmljZVByb3h5RWRnZSwgVXNlclVwZGF0ZVBhc3N3b3JkRHRvIH0gZnJvbSAnLi4vLi4vc2VydmljZS1wcm94eS9lZGdlLXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGVFcnJvclJlc3BvbnNlRHRvLCBBdXRoZW50aWNhdGVSZXF1ZXN0RHRvLCBBdXRoZW50aWNhdGVSZXNwb25zZUR0bywgQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLCBNb2JpbGVTZXJ2aWNlUHJveHlJZGVudGl0eSwgUGFzc3dvcmRDaGFuZ2VUeXBlLCBVc2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5LCBWYWxpZGF0ZUFjdGl2YXRpb25Vc2VyRHRvSHR0cFJlc3BvbnNlRGF0YSwgVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvLCBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEgfSBmcm9tICcuLi8uLi9zZXJ2aWNlLXByb3h5L2lkZW50aXR5LXNlcnZpY2UtcHJveGllcyc7XG5pbXBvcnQgeyBBcHBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE9wZW5JZEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvb3BlbmlkLWF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yb3V0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlc3Npb24tc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IHBhcnNlQXBpRXJyb3JEYXRhLCBwYXJzZUFwaUVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL3V0aWxzL2FwaS1oZWxwZXIudXRpbCc7XG5pbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tICcuLi8uLi91dGlscy9sYW5nLnV0aWwnO1xuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBVc2VySW5mbyB9IGZyb20gJy4uL2F1dGgvbW9kZWwvdXNlci1pbmZvLmludGVyZmFjZSc7XG5pbXBvcnQgeyBIZWFsdGhBY3Rpb24sIExvYWRBcHBDb25maWd1cmF0aW9uQWN0aW9uLCBTZXRUZW5hbnRVc2VyQWN0aW9uLCBVcGRhdGVBdXRoVG9rZW5BY3Rpb24gfSBmcm9tICcuLi9hdXRoL3Nlc3Npb24uYWN0aW9ucyc7XG5pbXBvcnQgeyBBY2NvdW50U2V0UGFzc3dvcmRBY3Rpb24sIEFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uLCBBY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uLCBBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24sIEZvcmdvdFBhc3N3b3JkQWN0aW9uLCBGb3Jnb3RQYXNzd29yZFRlbmFudGxlc3NBY3Rpb24sIE1vYmlsZUF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbiwgT3BlbklkQXV0aGV0aWNhdGVBY3Rpb24sIFNldFRGQVNldHVwQWN0aW9uLCBWYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbiwgVmVyaWZ5MkZhY3RvckF1dGhlbnRpY2F0aW9uQWN0aW9uIH0gZnJvbSAnLi9sb2dpbi5hY3Rpb25zJztcbmltcG9ydCB7IExvZ2luU2VydmljZSB9IGZyb20gJy4vbG9naW4uc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9naW5TdGF0ZU1vZGVsIHtcbiAgdXNlckluZm86IFVzZXJJbmZvO1xuICB0ZW5hbnROYW1lOiBzdHJpbmc7XG4gIHBhc3N3b3JkQ2hhbmdlVHlwZTogUGFzc3dvcmRDaGFuZ2VUeXBlO1xuICBhY2NvdW50czogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9bXTtcbiAgYWNjb3VudHNNYXA6IFN0cmluZ01hcDxBdXRoZW50aWNhdGVSZXNwb25zZUR0bz47XG4gIHRmYVNldHVwOiBUZmFTZXR1cER0bztcbn1cblxuQEluamVjdGFibGUoKVxuQFN0YXRlPExvZ2luU3RhdGVNb2RlbD4oe1xuICBuYW1lOiAnbG9naW4nLFxuICBkZWZhdWx0czoge1xuICAgIHVzZXJJbmZvOiB1bmRlZmluZWQsXG4gICAgdGVuYW50TmFtZTogJycsXG4gICAgcGFzc3dvcmRDaGFuZ2VUeXBlOiB1bmRlZmluZWQsXG4gICAgYWNjb3VudHM6IFtdLFxuICAgIGFjY291bnRzTWFwOiB7fSxcbiAgICB0ZmFTZXR1cDogdW5kZWZpbmVkLFxuICB9XG59KVxuZXhwb3J0IGNsYXNzIExvZ2luU3RhdGUge1xuXG4gIHByaXZhdGUgbWVzc2FnZU9wdGlvbnMgPSB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljIH07XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB1c2Vyc1NlcnZpY2VQcm94eUNsb3VkOiBVc2Vyc1NlcnZpY2VQcm94eUNsb3VkLFxuICAgIHByaXZhdGUgdXNlcnNTZXJ2aWNlUHJveHlFZGdlOiBVc2Vyc1NlcnZpY2VQcm94eUVkZ2UsIHByaXZhdGUgb3BlbklkQXV0aFNlcnZpY2U6IE9wZW5JZEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eTogVXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eSwgcHJpdmF0ZSBhdXRoU2VydmljZTogQXV0aFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZXNzaW9uU3RvcmFnZVNlcnZpY2U6IFNlc3Npb25TdG9yYWdlU2VydmljZSwgcHJpdmF0ZSBsb2dpblNlcnZpY2U6IExvZ2luU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbXNhbFNlcnZpY2U6IE1zYWxTZXJ2aWNlLCBwcml2YXRlIG1lc3NhZ2VCYXJTZXJ2aWNlOiBNZXNzYWdlQmFyU2VydmljZSwgcHJpdmF0ZSBhcHBDb25maWc6IEFwcENvbmZpZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZVNlcnZpY2U6IFJvdXRlU2VydmljZSwgcHJpdmF0ZSBzdG9yZTogU3RvcmUsIHByaXZhdGUgbW9iaWxlU2VydmljZVByb3h5SWRlbnRpdHk6IE1vYmlsZVNlcnZpY2VQcm94eUlkZW50aXR5KSB7XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHR3b0ZhY3RvclNldHVwRm9yVXNlcihzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogVGZhU2V0dXBEdG8ge1xuICAgIHJldHVybiBzdGF0ZS50ZmFTZXR1cDtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdGVuYW50TmFtZShzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RhdGUudGVuYW50TmFtZTtcbiAgfVxuXG4gIEBTZWxlY3RvcigpXG4gIHB1YmxpYyBzdGF0aWMgdXNlckluZm8oc3RhdGU6IExvZ2luU3RhdGVNb2RlbCk6IFVzZXJJbmZvIHtcbiAgICByZXR1cm4gc3RhdGUudXNlckluZm87XG4gIH1cblxuICBAU2VsZWN0b3IoKVxuICBwdWJsaWMgc3RhdGljIHRlbXBsYXRlVHlwZShzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogUGFzc3dvcmRDaGFuZ2VUeXBlIHtcbiAgICByZXR1cm4gc3RhdGUucGFzc3dvcmRDaGFuZ2VUeXBlO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBhY2NvdW50cyhzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9bXSB7XG4gICAgcmV0dXJuIHN0YXRlLmFjY291bnRzO1xuICB9XG5cbiAgQFNlbGVjdG9yKClcbiAgcHVibGljIHN0YXRpYyBhY2NvdW50c01hcChzdGF0ZTogTG9naW5TdGF0ZU1vZGVsKTogU3RyaW5nTWFwPEF1dGhlbnRpY2F0ZVJlc3BvbnNlRHRvPiB7XG4gICAgcmV0dXJuIHN0YXRlLmFjY291bnRzTWFwO1xuICB9XG5cbiAgQEFjdGlvbihBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24pXG4gIHB1YmxpYyBvbkF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHVzZXJuYW1lLCBwYXNzd29yZCB9OiBBdXRoZW50aWNhdGVNdWx0aXBsZVRlbmFudHNBY3Rpb24pIHtcbiAgICBjb25zdCBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvID0gbmV3IEF1dGhlbnRpY2F0ZVJlcXVlc3REdG8oKTtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnVzZXJuYW1lID0gdXNlcm5hbWU7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by5wYXNzd29yZCA9IHBhc3N3b3JkO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udGVuYW50TmFtZSA9ICcnO1xuXG4gICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eS5tdWx0aVRlbmFudHNBdXRoZW50aWNhdGUoYXV0aGVudGljYXRlUmVxdWVzdER0bykucGlwZSh0YXAoe1xuICAgICAgbmV4dDogYWNjb3VudHNIdHRwUmVzcG9uc2VEYXRhID0+IHtcbiAgICAgICAgY29uc3QgYWNjb3VudHMgPSBhY2NvdW50c0h0dHBSZXNwb25zZURhdGEuZGF0YTtcbiAgICAgICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgICAgIGFjY291bnRzXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2VCYXIoZSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKE1vYmlsZUF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbilcbiAgcHVibGljIG9uTW9iaWxlQXV0aGVudGljYXRlTXVsdGlwbGVUZW5hbnRzQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlcm5hbWUsIHBhc3N3b3JkLCB0ZW5hbnROYW1lIH06IE1vYmlsZUF1dGhlbnRpY2F0ZU11bHRpcGxlVGVuYW50c0FjdGlvbikge1xuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8gPSBuZXcgQXV0aGVudGljYXRlUmVxdWVzdER0bygpO1xuICAgIGF1dGhlbnRpY2F0ZVJlcXVlc3REdG8udXNlcm5hbWUgPSB1c2VybmFtZTtcbiAgICBhdXRoZW50aWNhdGVSZXF1ZXN0RHRvLnBhc3N3b3JkID0gcGFzc3dvcmQ7XG4gICAgYXV0aGVudGljYXRlUmVxdWVzdER0by50ZW5hbnROYW1lID0gdGVuYW50TmFtZTtcbiAgICByZXR1cm4gdGhpcy5tb2JpbGVTZXJ2aWNlUHJveHlJZGVudGl0eS5tb2JpbGVBdXRoZW50aWNhdGUoVkVSU0lPTl9WMSwgYXV0aGVudGljYXRlUmVxdWVzdER0bykucGlwZSh0YXAoe1xuICAgICAgbmV4dDogYWNjb3VudHMgPT4ge1xuICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgYWNjb3VudHNNYXA6IGFjY291bnRzLmRhdGEsXG4gICAgICAgIH0pO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHRoaXMuYXV0aGVudGljYXRpb25FcnJvck1lc3NhZ2VCYXIoZSlcbiAgICB9KSk7XG4gIH1cblxuICBAQWN0aW9uKEZvcmdvdFBhc3N3b3JkQWN0aW9uKVxuICBwdWJsaWMgb25Gb3Jnb3RQYXNzd29yZChjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IGVtYWlsLCB0ZW5hbnRJZCB9OiBGb3Jnb3RQYXNzd29yZEFjdGlvbikge1xuICAgIGNvbnN0IGlzTW9iaWxlQXBwTW9kZSA9IHRoaXMuYXBwQ29uZmlnLmdldENvbmZpZygpLmFwcFR5cGUgPT09IEFwcFR5cGUuTW9iaWxlO1xuICAgIGNvbnN0IHBhdGggPSBbJ2FjY291bnQnLCAnZm9yZ290LXBhc3N3b3JkLXN1Y2Nlc3MnXTtcbiAgICBjb25zdCB1cmwgPSBpc01vYmlsZUFwcE1vZGUgPyBwYXRoIDogdGhpcy5yb3V0ZVNlcnZpY2UuZ2V0TmF2aWdhdGlvblJvdXRlKHBhdGgpO1xuXG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShSRVNFVF9QQVNTV09SRF9FTUFJTCwgSlNPTi5zdHJpbmdpZnkoZW1haWwpKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBOYXZpZ2F0ZSh1cmwpKTtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLnN1Y2Nlc3MoTG9jYWxpemF0aW9uLmZvcmdvdF9wYXNzd29yZF9lbWFpbF9zZW50X21zZywgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMudXNlcnNTZXJ2aWNlUHJveHlDbG91ZC5mb3Jnb3RQYXNzd29yZChlbWFpbCwgdGVuYW50SWQpO1xuICB9XG5cbiAgQEFjdGlvbihGb3Jnb3RQYXNzd29yZFRlbmFudGxlc3NBY3Rpb24pXG4gIHB1YmxpYyBvbkZvcmdvdFBhc3N3b3JkVGVuYW50bGVzcyhjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IGVtYWlsIH06IEZvcmdvdFBhc3N3b3JkQWN0aW9uKSB7XG4gICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5zdWNjZXNzKExvY2FsaXphdGlvbi5mb3Jnb3RfcGFzc3dvcmRfZW1haWxfc2VudF9tc2csIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgIHJldHVybiB0aGlzLnVzZXJzU2VydmljZVByb3h5Q2xvdWQuZm9yZ290UGFzc3dvcmRUZW5hbnRsZXNzKGVtYWlsKTtcbiAgfVxuXG5cbiAgQEFjdGlvbihBY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uKVxuICBwdWJsaWMgb25BY2NvdW50U2V0UGFzc3dvcmRJbml0QWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgdXNlckluZm8sIGNvbXBvbmVudFR5cGUgfSkge1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHVzZXJJbmZvLFxuICAgICAgcGFzc3dvcmRDaGFuZ2VUeXBlOiBjb21wb25lbnRUeXBlXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKEFjY291bnRTZXRQYXNzd29yZEVycm9yQWN0aW9uKVxuICBwdWJsaWMgb25BY2NvdW50U2V0UGFzc3dvcmRFcnJvckFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IGVycm9yTXNnLCB1c2VybmFtZSB9KSB7XG4gICAgY29uc3QgdXNlckluZm86IFVzZXJJbmZvID0geyAuLi51c2VybmFtZSB9O1xuICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoZXJyb3JNc2csIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgIHVzZXJJbmZvXG4gICAgfSk7XG4gIH1cblxuICBAQWN0aW9uKEFjY291bnRTZXRQYXNzd29yZEFjdGlvbilcbiAgcHVibGljIG9uQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uKGN0eDogU3RhdGVDb250ZXh0PExvZ2luU3RhdGVNb2RlbD4sIHsgcGFzc3dvcmQgfTogQWNjb3VudFNldFBhc3N3b3JkQWN0aW9uKSB7XG4gICAgY29uc3QgdXNlckluZm8gPSBjdHguZ2V0U3RhdGUoKS51c2VySW5mbztcbiAgICBsZXQgZGF0YTogYW55O1xuICAgIGxldCBzZXRQYXNzd29yZCQ6IE9ic2VydmFibGU8VXNlckR0b0h0dHBSZXNwb25zZURhdGEgfCBBY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YT47XG5cbiAgICBpZiAodGhpcy5hcHBDb25maWcuZ2V0Q29uZmlnKCkuYXBwVHlwZSA9PT0gQXBwVHlwZS5DbG91ZCkge1xuICAgICAgZGF0YSA9IG5ldyBBY3RpdmF0ZVVzZXJEdG8oe1xuICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgY3VycmVudFBhc3N3b3JkOiBudWxsLFxuICAgICAgICB1c2VyU3RhdHVzOiB1c2VySW5mby5zdGF0dXMgYXMgVXNlclN0YXR1c1xuICAgICAgfSk7XG5cbiAgICAgIHNldFBhc3N3b3JkJCA9IHRoaXMudXNlcnNTZXJ2aWNlUHJveHlDbG91ZC5hY3RpdmF0ZShkYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF0YSA9IG5ldyBVc2VyVXBkYXRlUGFzc3dvcmREdG8oe1xuICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgY3VycmVudFBhc3N3b3JkOiBudWxsXG4gICAgICB9KTtcbiAgICAgIHNldFBhc3N3b3JkJCA9IHRoaXMudXNlcnNTZXJ2aWNlUHJveHlFZGdlLnVwZGF0ZVVzZXJQYXNzd29yZChkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0UGFzc3dvcmQkLnBpcGUoXG4gICAgICBtYXAoKGFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhOiBBY3RpdmF0ZVJlc3BvbnNlRHRvSHR0cFJlc3BvbnNlRGF0YSkgPT4ge1xuICAgICAgICBpZiAoYWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZGF0YS5pc1N1Y2Nlc3MpIHtcbiAgICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgICB0ZmFTZXR1cDogYWN0aXZhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGEuZGF0YT8udGZhU2V0dXAsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGFjdGl2YXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhLmRhdGEuZXJyb3JNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKGUgPT4ge1xuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlIGluc3RhbmNlb2YgRXJyb3IgPyBlLm1lc3NhZ2UgOiBlO1xuICAgICAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGVycm9yTWVzc2FnZSk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBAQWN0aW9uKFZhbGlkYXRlVXNlclRva2VuQWN0aW9uKVxuICBwdWJsaWMgb25WYWxpZGF0ZVVzZXJUb2tlbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHRva2VuLCB0b2tlblR5cGUgfTogVmFsaWRhdGVVc2VyVG9rZW5BY3Rpb24pIHtcbiAgICBjb25zdCBwY3Q6IGFueSA9IFBhc3N3b3JkQ2hhbmdlVHlwZVt0b2tlblR5cGVdO1xuICAgIHJldHVybiB0aGlzLnVzZXJzU2VydmljZVByb3h5SWRlbnRpdHkudmFsaWRhdGVBY3RpdmF0aW9uKHRva2VuLCBQYXNzd29yZENoYW5nZVR5cGVbUGFzc3dvcmRDaGFuZ2VUeXBlW3Rva2VuVHlwZV1dKS5waXBlKHRhcCh7XG4gICAgICBuZXh0OiAodXNlcjogVmFsaWRhdGVBY3RpdmF0aW9uVXNlckR0b0h0dHBSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgaWYgKHVzZXI/LmRhdGEpIHtcbiAgICAgICAgICBjb25zdCB1c2VySW5mbzogVXNlckluZm8gPSB7XG4gICAgICAgICAgICB1c2VySWQ6IHVzZXIuZGF0YS5pZCxcbiAgICAgICAgICAgIHVzZXJuYW1lOiB1c2VyLmRhdGEudU5hbWUsXG4gICAgICAgICAgICBkaXNwbGF5TmFtZTogYCR7dXNlci5kYXRhLm5hbWV9ICR7dXNlci5kYXRhLmxhc3ROYW1lfWAsXG4gICAgICAgICAgICBzdGF0dXM6IHVzZXIuZGF0YS5zdGF0dXMsXG4gICAgICAgICAgICBwbWw6IHVzZXIuZGF0YS5wbWxcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmICh1c2VyLmRhdGEuc3RhdHVzICE9PSBVc2VyU3RhdHVzLkJsb2NrZWQpIHtcbiAgICAgICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICAgICAgdXNlckluZm8sXG4gICAgICAgICAgICAgIHBhc3N3b3JkQ2hhbmdlVHlwZTogcGN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IoTG9jYWxpemF0aW9uLm5vbl9hY3RpdmVfdXNlciwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICAgICAgICBjdHgucGF0Y2hTdGF0ZSh7XG4gICAgICAgICAgICAgIHVzZXJJbmZvLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6IGUgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckpzb246IFByb2JsZW1EZXRhaWxzID0gSlNPTi5wYXJzZShlLnJlc3BvbnNlKSBhcyBQcm9ibGVtRGV0YWlscztcbiAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICAgIGN0eC5wYXRjaFN0YXRlKHtcbiAgICAgICAgICB1c2VySW5mbzoge1xuICAgICAgICAgICAgdXNlcm5hbWU6IGVycm9ySnNvbi5pbnN0YW5jZSxcbiAgICAgICAgICAgIHVzZXJJZDogbnVsbCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBudWxsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25BY3Rpb24pXG4gIHB1YmxpYyBvblZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbkFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHVzZXJOYW1lLCBjb2RlLCBzZXR1cDJGYSB9OiBWZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25BY3Rpb24pIHtcbiAgICBjb25zdCB2ZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8gPSBuZXcgVmVyaWZ5MkZhY3RvckF1dGhSZXF1ZXN0RHRvKHtcbiAgICAgIGNvZGUsXG4gICAgICB1c2VyTmFtZVxuICAgIH0pO1xuXG4gICAgbGV0IHZlcmlmeTJGYWN0b3JBdXRoJDogT2JzZXJ2YWJsZTxWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgIGlmIChzZXR1cDJGYSkge1xuICAgICAgdmVyaWZ5MkZhY3RvckF1dGgkID0gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5LnZlcmlmeTJGYWN0b3JBdXRoZW50aWNhdGlvbih2ZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8pO1xuICAgIH0gZWxzZSB7IC8vIGxvZ2luIGZvciB1c2VyIHdpdGggMkZBIChhbHJlYWR5IHNldCB1cClcbiAgICAgIHZlcmlmeTJGYWN0b3JBdXRoJCA9IHRoaXMudXNlcnNTZXJ2aWNlUHJveHlJZGVudGl0eS52ZXJpZnkyRmFjdG9yQXV0aGVudGljYXRpb25Mb2dpbih2ZXJpZnkyRmFjdG9yQXV0aFJlcXVlc3REdG8pO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZnkyRmFjdG9yQXV0aCQucGlwZSh0YXAoe1xuICAgICAgbmV4dDogKHZlcmlmeTJGYWN0b3JBdXRoUmVzcG9uc2V0OiBWZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldER0b0h0dHBSZXNwb25zZURhdGEpID0+IHtcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UuYWNjZXNzVG9rZW4gPSB2ZXJpZnkyRmFjdG9yQXV0aFJlc3BvbnNldC5kYXRhLmFjY2Vzc1Rva2VuO1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBVcGRhdGVBdXRoVG9rZW5BY3Rpb24odmVyaWZ5MkZhY3RvckF1dGhSZXNwb25zZXQuZGF0YS5hY2Nlc3NUb2tlbikpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBlID0+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihwYXJzZUFwaUVycm9yTWVzc2FnZShlKSwgdGhpcy5tZXNzYWdlT3B0aW9ucyk7XG4gICAgICB9XG4gICAgfSkpO1xuICB9XG5cbiAgQEFjdGlvbihTZXRURkFTZXR1cEFjdGlvbilcbiAgcHVibGljIG9uU2V0VEZBU2V0dXBBY3Rpb24oY3R4OiBTdGF0ZUNvbnRleHQ8TG9naW5TdGF0ZU1vZGVsPiwgeyB0ZmFTZXR1cER0byB9KSB7XG4gICAgY3R4LnBhdGNoU3RhdGUoe1xuICAgICAgdGZhU2V0dXA6IHRmYVNldHVwRHRvXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGF1dGhlbnRpY2F0aW9uRXJyb3JNZXNzYWdlQmFyKGVycm9yOiBBcGlFeGNlcHRpb24pIHtcbiAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBwYXJzZUFwaUVycm9yTWVzc2FnZShlcnJvcik7XG4gICAgY29uc3QgZGF0YSA9IHBhcnNlQXBpRXJyb3JEYXRhPEF1dGhlbnRpY2F0ZUVycm9yUmVzcG9uc2VEdG8+KGVycm9yKTtcbiAgICB0aGlzLm1lc3NhZ2VCYXJTZXJ2aWNlLmVycm9yKGVycm9yTWVzc2FnZSwgeyBwb3NpdGlvbjogTWVzc2FnZUJhclBvc2l0aW9uLlN0YXRpYywgbWVzc2FnZVBhcmFtczogeyB0ZW1wb3JhcnlMb2NrZWRNaW51dGVzOiBkYXRhPy50ZW1wb3JhcnlCbG9ja2VkVGltZSB9IH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhck1zbExvZ2luQ2FjaGUoKSB7XG4gICAgY29uc3QgY2xlYXJDYWNoZVJlcXVlc3Q6IENsZWFyQ2FjaGVSZXF1ZXN0ID0ge1xuICAgICAgYWNjb3VudDogdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5nZXRBbGxBY2NvdW50cygpWzBdLFxuICAgIH07XG4gICAgdGhpcy5tc2FsU2VydmljZS5pbnN0YW5jZS5jbGVhckNhY2hlKGNsZWFyQ2FjaGVSZXF1ZXN0KTtcbiAgICB0aGlzLm1zYWxTZXJ2aWNlLmxvZ291dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclNpbmdsZVNpbmdPbkNhY2hlKHNpbmdsZVNpZ25PblByb3ZpZGVyOiBTaW5nbGVTaWduT25Qcm92aWRlcikge1xuICAgIHN3aXRjaCAoc2luZ2xlU2lnbk9uUHJvdmlkZXIpIHtcbiAgICAgIGNhc2UgU2luZ2xlU2lnbk9uUHJvdmlkZXIuTWljcm9zb2Z0OlxuICAgICAgICB0aGlzLmNsZWFyTXNsTG9naW5DYWNoZSgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBTaW5nbGVTaWduT25Qcm92aWRlci5QaW5nRmVkZXJhdGU6XG4gICAgICAgIHRoaXMub3BlbklkQXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbG9jYWxTdG9yYWdlLmNsZWFyKCk7XG4gIH1cblxuICBwcml2YXRlIHVzZXJTdGF0dXNJc0F3YWl0aW5nQWNjZXNzID0gKGF1dGhSZXNwb25zZTogQXV0aGVudGljYXRlUmVzcG9uc2VEdG9IdHRwUmVzcG9uc2VEYXRhKTogYm9vbGVhbiA9PlxuICAgIGF1dGhSZXNwb25zZS5kYXRhLnNpbmdsZVNpZ25PbkF1dGhlbnRpY2F0aW9uRHRvPy5pc0F1dGhlbnRpY2F0ZWQgPT09IGZhbHNlICYmXG4gICAgYXV0aFJlc3BvbnNlLmRhdGEuc2luZ2xlU2lnbk9uQXV0aGVudGljYXRpb25EdG8/LnVzZXJTdGF0dXMgPT09IFVzZXJTdGF0dXMuQXdhaXRpbmdBY2Nlc3M7XG5cblxuICBAQWN0aW9uKE9wZW5JZEF1dGhldGljYXRlQWN0aW9uKVxuICBwdWJsaWMgb25PcGVuSWRBdXRoZXRpY2F0ZUFjdGlvbihjdHg6IFN0YXRlQ29udGV4dDxMb2dpblN0YXRlTW9kZWw+LCB7IHRva2VuLCBzaW5nbGVTaWduT25Qcm92aWRlciwgdGVuYW50SW5mbyB9OiBPcGVuSWRBdXRoZXRpY2F0ZUFjdGlvbikge1xuICAgIGxldCBhdXRoZW50aWNhdGVPaWRjJDogT2JzZXJ2YWJsZTxBdXRoZW50aWNhdGVSZXNwb25zZUR0b0h0dHBSZXNwb25zZURhdGE+O1xuICAgIGF1dGhlbnRpY2F0ZU9pZGMkID0gdGhpcy51c2Vyc1NlcnZpY2VQcm94eUlkZW50aXR5Lm9wZW5JZEF1dGhlbnRpY2F0ZSh0b2tlbiwgdGVuYW50SW5mby50ZW5hbnROYW1lKTtcbiAgICByZXR1cm4gYXV0aGVudGljYXRlT2lkYyQucGlwZSh0YXAoe1xuICAgICAgbmV4dDogYXV0aFJlc3BvbnNlID0+IHtcbiAgICAgICAgaWYgKGF1dGhSZXNwb25zZS5kYXRhLm1lc3NhZ2UgPT09IExvY2FsaXphdGlvbi5zc29fcGVuZGluZ19hcHByb3ZhbCkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuaW5mbyhtZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljIH0pO1xuICAgICAgICAgIHRoaXMuY2xlYXJTaW5nbGVTaW5nT25DYWNoZShzaW5nbGVTaWduT25Qcm92aWRlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3BhcmtTZXNzaW9uID0gdGhpcy5hdXRoU2VydmljZS5wcm9jZXNzQXV0aGVudGljYXRlKGF1dGhSZXNwb25zZS5kYXRhKTtcbiAgICAgICAgY3R4LmRpc3BhdGNoKG5ldyBTZXRUZW5hbnRVc2VyQWN0aW9uKHNwYXJrU2Vzc2lvbikpO1xuXG4gICAgICAgIGlmICh0aGlzLnVzZXJTdGF0dXNJc0F3YWl0aW5nQWNjZXNzKGF1dGhSZXNwb25zZSkpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyU2luZ2xlU2luZ09uQ2FjaGUoc2luZ2xlU2lnbk9uUHJvdmlkZXIpO1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpO1xuICAgICAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2Uud2FybihtZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIEFmdGVyIGF1dGhlbnRpY2F0aW9uIGdldCBhcHAgY29uZmlndXJhdGlvblxuICAgICAgICAgIHRoaXMubG9naW5Ub1NwYXJrKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogZSA9PiB7XG4gICAgICAgIHRoaXMuc2luZ2xlU2luZ09uRXJyb3JIYW5kbGluZyhlKTtcbiAgICAgIH1cbiAgICB9KSk7XG4gIH1cblxuICBzaW5nbGVTaW5nT25FcnJvckhhbmRsaW5nKGU6IGFueSkge1xuICAgIGlmIChlLmVycm9yTWVzc2FnZSA9PSBMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChMb2NhbGl6YXRpb24uc3NvX3BlbmRpbmdfYXBwcm92YWwpO1xuICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5pbmZvKG1lc3NhZ2UsIHsgcG9zaXRpb246IE1lc3NhZ2VCYXJQb3NpdGlvbi5TdGF0aWMgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGUuZXJyb3JNZXNzYWdlKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZS5lcnJvck1lc3NhZ2UpO1xuICAgICAgdGhpcy5tZXNzYWdlQmFyU2VydmljZS5lcnJvcihtZXNzYWdlLCB7IHBvc2l0aW9uOiBNZXNzYWdlQmFyUG9zaXRpb24uU3RhdGljIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMubWVzc2FnZUJhclNlcnZpY2UuZXJyb3IocGFyc2VBcGlFcnJvck1lc3NhZ2UoZSksIHRoaXMubWVzc2FnZU9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIGxvZ2luVG9TcGFyaygpIHtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBMb2FkQXBwQ29uZmlndXJhdGlvbkFjdGlvbigpKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKG5ldyBIZWFsdGhBY3Rpb24oKSk7XG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZVNlcnZpY2UudXBkYXRlTG9nZ2VkVGVuYW50KCk7XG4gICAgdGhpcy5sb2dpblNlcnZpY2UubG9naW5Ub1NwYXJrKCk7XG4gIH1cbn1cbiJdfQ==
|