@lifeready/core 1.0.0 → 1.0.2

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.
@@ -1,21 +1,15 @@
1
1
  import { __awaiter, __decorate } from "tslib";
2
- import { Hub } from '@aws-amplify/core';
3
2
  import { Inject, Injectable, Injector, NgZone } from '@angular/core';
4
3
  import { EncryptionService } from '../cryptography/encryption.service';
5
4
  import { KeyGraphService } from '../cryptography/key-graph.service';
6
5
  import { LR_CONFIG } from '../life-ready.config';
7
6
  import * as slip from '../cryptography/slip39.service';
8
- import { JWK } from 'node-jose';
9
- import { LrBadStateException, LrException } from '../_common/exceptions';
10
- import { CompleteTpPasswordResetRequestMutation, CreateTpAssemblyKeyChallengeMutation, PreCompleteTpPasswordResetRequestMutation, } from './tp-password-reset.gql';
11
7
  import { PasswordService } from '../auth/password.service';
12
8
  import { HttpClient } from '@angular/common/http';
13
9
  import { AuthClass } from '@aws-amplify/auth/lib-esm/Auth';
14
- import { TpPasswordResetService, } from './tp-password-reset.service';
15
10
  import { LifeReadyAuthService } from '../auth/life-ready-auth.service';
16
11
  import { KeyFactoryService } from '../cryptography/key-factory.service';
17
- import { TpClaimState } from '../api/types';
18
- import { LrMutation, LrService } from '../api/lr-graphql';
12
+ import { LrService } from '../api/lr-graphql';
19
13
  import { RunOutsideAngular } from '../_common/run-outside-angular';
20
14
  import * as i0 from "@angular/core";
21
15
  import * as i1 from "../life-ready.config";
@@ -41,7 +35,6 @@ let TpPasswordResetUserService = class TpPasswordResetUserService extends LrServ
41
35
  this.http = http;
42
36
  this.auth = auth;
43
37
  this.lrAuth = lrAuth;
44
- this.CLIENT_NONCE_LENGTH = 32;
45
38
  }
46
39
  verifyEmailContact(email) {
47
40
  return __awaiter(this, void 0, void 0, function* () {
@@ -107,136 +100,6 @@ let TpPasswordResetUserService = class TpPasswordResetUserService extends LrServ
107
100
  };
108
101
  });
109
102
  }
110
- getResetUser(reload = false) {
111
- return __awaiter(this, void 0, void 0, function* () {
112
- if (!reload && this.resetUser) {
113
- return this.resetUser;
114
- }
115
- this.resetUser = yield this.lrAuth.loadResetUser();
116
- return this.resetUser;
117
- });
118
- }
119
- recoverAssemblyKey(resetUser) {
120
- return __awaiter(this, void 0, void 0, function* () {
121
- // Recover the assembly key.
122
- let assemblyKeyParams;
123
- const prk = yield this.keyGraphService.getKey(resetUser.pxk.id);
124
- const shares = yield Promise.all(resetUser.approvals.map((approval) => __awaiter(this, void 0, void 0, function* () {
125
- const partialAssemblyKey = yield this.encryptionService.decrypt(prk, approval.receiverCipherPartialAssemblyKey);
126
- if (assemblyKeyParams) {
127
- if (JSON.stringify(assemblyKeyParams) !==
128
- JSON.stringify(partialAssemblyKey.assemblyKeyParams)) {
129
- throw new LrBadStateException('The assembly key parameters are different between the approvals.');
130
- }
131
- }
132
- else {
133
- assemblyKeyParams = partialAssemblyKey.assemblyKeyParams;
134
- }
135
- return partialAssemblyKey.slip39.share.mnemonics;
136
- })));
137
- console.log('recoverAssemblyKey()', shares);
138
- const rawAssemblyKey = yield this.slip39Service.recoverSecret(shares, TpPasswordResetService.SLIP39_PASSPHRASE);
139
- return JWK.asKey(Object.assign(Object.assign({}, assemblyKeyParams), { k: rawAssemblyKey }));
140
- });
141
- }
142
- completeRequest(newPassword) {
143
- return __awaiter(this, void 0, void 0, function* () {
144
- const resetUser = yield this.getResetUser(true);
145
- if (resetUser.state !== TpClaimState.APPROVED) {
146
- throw new LrBadStateException('Password reset request has not been approved.');
147
- }
148
- // --------------------------------------------------------------
149
- // Prepare all materials to ensure there are no errors.
150
- // --------------------------------------------------------------
151
- const assemblyKey = yield this.recoverAssemblyKey(resetUser);
152
- const { rootKey } = yield this.encryptionService.decrypt(assemblyKey, resetUser.assemblyCipherData);
153
- console.log(rootKey);
154
- // Making sure it's a valid key.
155
- const rootKeyJwk = yield JWK.asKey(rootKey);
156
- const masterKey = yield this.keyGraphService.getKey(resetUser.masterKey.id);
157
- const masterKeyWrappedRootKey = yield this.encryptionService.encryptToString(masterKey.jwk, rootKeyJwk.toJSON(true));
158
- // The new password
159
- const newPassIdpResult = yield this.keyFactory.derivePassIdp(Object.assign({ password: newPassword }, resetUser.passKey.passIdpParams));
160
- const newIdpPassword = this.passwordService.getPassIdpString(newPassIdpResult.jwk);
161
- // --------------------------------------------------------------
162
- // Get assembly key challenge
163
- // --------------------------------------------------------------
164
- const challenge = (yield this.mutate(new LrMutation({
165
- mutation: CreateTpAssemblyKeyChallengeMutation,
166
- variables: {
167
- input: {},
168
- },
169
- }), {
170
- includeKeyGraph: false,
171
- })).createTpAssemblyKeyChallenge.challenge;
172
- console.log(challenge);
173
- // Sign the challenge
174
- // Generate a client side nonce that's no in the server's control.
175
- challenge.clientNonce = this.keyFactory.randomString(this.CLIENT_NONCE_LENGTH);
176
- console.log(challenge);
177
- const assemblyKeyVerifierPrk = yield this.encryptionService.decrypt(assemblyKey, resetUser.wrappedAssemblyKeyVerifierPrk);
178
- const signedChallenge = yield this.encryptionService.sign(assemblyKeyVerifierPrk, challenge);
179
- // --------------------------------------------------------------
180
- // Change password for the original user
181
- // --------------------------------------------------------------
182
- const tempIdpPassword = (yield this.mutate(new LrMutation({
183
- mutation: PreCompleteTpPasswordResetRequestMutation,
184
- variables: {
185
- input: {
186
- signedChallenge: JSON.stringify(signedChallenge),
187
- },
188
- },
189
- }), {
190
- includeKeyGraph: false,
191
- })).preCompleteTpPasswordResetRequest.idpPassword;
192
- // --------------------------------------------------------------
193
- // Login as the original user using new temporary password
194
- // --------------------------------------------------------------
195
- // At this point, the original account's password has been changed
196
- // to a temporary password. It is no longer possible for the user
197
- // to use the original password to login. Any successful login
198
- // can only be using the temporary password. So it's safe to assume
199
- // that we want to "complete" the password reset.
200
- // The maybe 2FA so we listen for the auth event from Amplify.
201
- const retPromise = new Promise((resolve) => {
202
- const listener = (data) => __awaiter(this, void 0, void 0, function* () {
203
- if (data.payload.event !== 'signIn') {
204
- return;
205
- }
206
- Hub.remove('auth', listener);
207
- console.log(data.payload);
208
- yield this.auth.signIn(resetUser.username, newIdpPassword);
209
- // Switch over to the new set of keys
210
- yield this.mutate(new LrMutation({
211
- mutation: CompleteTpPasswordResetRequestMutation,
212
- variables: {
213
- input: {
214
- masterKeyWrappedRootKey,
215
- masterKeyId: masterKey.id,
216
- },
217
- },
218
- }));
219
- resolve();
220
- });
221
- Hub.listen('auth', listener);
222
- });
223
- // Signin as the original user. Password has been reset to temporary one. It should return
224
- // with NEW_PASSWORD_REQUIRED
225
- let user = yield this.auth.signIn(resetUser.username, tempIdpPassword, {
226
- noProxy: 'true',
227
- });
228
- if (user.challengeName !== 'NEW_PASSWORD_REQUIRED') {
229
- throw new LrException({
230
- message: 'Internal error. Expecting Cognito to have done a password reset after call to PreCompleteTpPasswordResetRequestMutation.',
231
- });
232
- }
233
- // Set new password on Idp
234
- // the awsFetch() function passes NEW_PASSWORD_REQUIRED directly to AWS without
235
- // going through the proxy.
236
- user = yield this.auth.completeNewPassword(user, newIdpPassword, {});
237
- return retPromise;
238
- });
239
- }
240
103
  };
241
104
  TpPasswordResetUserService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TpPasswordResetUserService_Factory() { return new TpPasswordResetUserService(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.LR_CONFIG), i0.ɵɵinject(i2.KeyFactoryService), i0.ɵɵinject(i3.EncryptionService), i0.ɵɵinject(i4.KeyGraphService), i0.ɵɵinject(i5.Slip39Service), i0.ɵɵinject(i6.PasswordService), i0.ɵɵinject(i7.HttpClient), i0.ɵɵinject(i8.AuthClass), i0.ɵɵinject(i9.LifeReadyAuthService)); }, token: TpPasswordResetUserService, providedIn: "root" });
242
105
  TpPasswordResetUserService.decorators = [
@@ -263,4 +126,4 @@ TpPasswordResetUserService = __decorate([
263
126
  })
264
127
  ], TpPasswordResetUserService);
265
128
  export { TpPasswordResetUserService };
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAtcGFzc3dvcmQtcmVzZXQtdXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi90cnVzdGVkLXBhcnRpZXMvdHAtcGFzc3dvcmQtcmVzZXQtdXNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFtQixTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRSxPQUFPLEtBQUssSUFBSSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxzQ0FBc0MsRUFDdEMsb0NBQW9DLEVBQ3BDLHlDQUF5QyxHQUMxQyxNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFFTCxzQkFBc0IsR0FDdkIsTUFBTSw2QkFBNkIsQ0FBQztBQUVyQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUN2RSxPQUFP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ICdAYXdzLWFtcGxpZnkvY29yZSc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBOZ1pvbmUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2VuY3J5cHRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWdyYXBoLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGlmZVJlYWR5Q29uZmlnLCBMUl9DT05GSUcgfSBmcm9tICcuLi9saWZlLXJlYWR5LmNvbmZpZyc7XG5pbXBvcnQgKiBhcyBzbGlwIGZyb20gJy4uL2NyeXB0b2dyYXBoeS9zbGlwMzkuc2VydmljZSc7XG5pbXBvcnQgeyBKV0sgfSBmcm9tICdub2RlLWpvc2UnO1xuaW1wb3J0IHsgTHJCYWRTdGF0ZUV4Y2VwdGlvbiwgTHJFeGNlcHRpb24gfSBmcm9tICcuLi9fY29tbW9uL2V4Y2VwdGlvbnMnO1xuaW1wb3J0IHtcbiAgQ29tcGxldGVUcFBhc3N3b3JkUmVzZXRSZXF1ZXN0TXV0YXRpb24sXG4gIENyZWF0ZVRwQXNzZW1ibHlLZXlDaGFsbGVuZ2VNdXRhdGlvbixcbiAgUHJlQ29tcGxldGVUcFBhc3N3b3JkUmVzZXRSZXF1ZXN0TXV0YXRpb24sXG59IGZyb20gJy4vdHAtcGFzc3dvcmQtcmVzZXQuZ3FsJztcbmltcG9ydCB7IFBhc3N3b3JkU2VydmljZSB9IGZyb20gJy4uL2F1dGgvcGFzc3dvcmQuc2VydmljZSc7XG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgQXV0aENsYXNzIH0gZnJvbSAnQGF3cy1hbXBsaWZ5L2F1dGgvbGliLWVzbS9BdXRoJztcbmltcG9ydCB7XG4gIFJlcXVlc3RSZXNldFJlc3VsdCxcbiAgVHBQYXNzd29yZFJlc2V0U2VydmljZSxcbn0gZnJvbSAnLi90cC1wYXNzd29yZC1yZXNldC5zZXJ2aWNlJztcbmltcG9ydCB7IElTaWduVXBSZXN1bHQgfSBmcm9tICdhbWF6b24tY29nbml0by1pZGVudGl0eS1qcyc7XG5pbXBvcnQgeyBMaWZlUmVhZHlBdXRoU2VydmljZSB9IGZyb20gJy4uL2F1dGgvbGlmZS1yZWFkeS1hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgS2V5RmFjdG9yeVNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWZhY3Rvcnkuc2VydmljZSc7XG5pbXBvcnQgeyBUcENsYWltU3RhdGUsIFRwUGFzc3dvcmRSZXNldFVzZXJOb2RlIH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IExyTXV0YXRpb24sIExyU2VydmljZSB9IGZyb20gJy4uL2FwaS9sci1ncmFwaHFsJztcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcblxuQFJ1bk91dHNpZGVBbmd1bGFyKHtcbiAgbmdab25lTmFtZTogJ25nWm9uZScsXG59KVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRwUGFzc3dvcmRSZXNldFVzZXJTZXJ2aWNlIGV4dGVuZHMgTHJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBDTElFTlRfTk9OQ0VfTEVOR1RIID0gMzI7XG4gIHByaXZhdGUgcmVzZXRVc2VyOiBUcFBhc3N3b3JkUmVzZXRVc2VyTm9kZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIEBJbmplY3QoTFJfQ09ORklHKSBwcml2YXRlIGNvbmZpZzogTGlmZVJlYWR5Q29uZmlnLFxuICAgIHByaXZhdGUga2V5RmFjdG9yeTogS2V5RmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaFNlcnZpY2U6IEtleUdyYXBoU2VydmljZSxcbiAgICBwcml2YXRlIHNsaXAzOVNlcnZpY2U6IHNsaXAuU2xpcDM5U2VydmljZSxcbiAgICBwcml2YXRlIHBhc3N3b3JkU2VydmljZTogUGFzc3dvcmRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICBwcml2YXRlIGF1dGg6IEF1dGhDbGFzcyxcbiAgICBwcml2YXRlIGxyQXV0aDogTGlmZVJlYWR5QXV0aFNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5RW1haWxDb250YWN0KGVtYWlsKTogUHJvbWlzZTx7IGNsYWltSWQ6IHN0cmluZyB9PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgZW1haWwsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucG9zdDxhbnk+KFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy5hdXRoVXJsfXRwL3Bhc3N3b3JkLXJlc2V0L3ZlcmlmeS1jb250YWN0L2AsXG4gICAgICAgIHBhcmFtc1xuICAgICAgKVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5Q29udGFjdFJlc3BvbmQoXG4gICAgY2xhaW1JZDogc3RyaW5nLFxuICAgIGNsYWltQ29kZTogc3RyaW5nXG4gICk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgeyB0b2tlbiB9ID0gYXdhaXQgdGhpcy5odHRwXG4gICAgICAucG9zdDx7IHRva2VuIH0+KGAke3RoaXMuY29uZmlnLmF1dGhVcmx9Y292ZS9yZXNwb25kL2AsIHtcbiAgICAgICAgY2xhaW1faWQ6IGNsYWltSWQsXG4gICAgICAgIHZfY29kZTogY2xhaW1Db2RlLFxuICAgICAgfSlcbiAgICAgIC50b1Byb21pc2UoKTtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICBhc3luYyByZXF1ZXN0UmVzZXQoXG4gICAgcGFzc3dvcmQ6IHN0cmluZyxcbiAgICBjbGFpbUlkOiBzdHJpbmcsXG4gICAgY2xhaW1Ub2tlbjogc3RyaW5nXG4gICk6IFByb21pc2U8e1xuICAgIHJlcXVlc3RSZXNldFJlc3VsdDogUmVxdWVzdFJlc2V0UmVzdWx0O1xuICAgIHNpZ25VcFJlc3VsdDogSVNpZ25VcFJlc3VsdDtcbiAgfT4ge1xuICAgIC8vIEdlbmVyYXRlIHRoZSBrZXkgbWF0ZXJpYWxzXG4gICAgY29uc3QgcGFzc0tleUJ1bmRsZSA9IGF3YWl0IHRoaXMucGFzc3dvcmRTZXJ2aWNlLmNyZWF0ZVBhc3NLZXlCdW5kbGUoXG4gICAgICBwYXNzd29yZFxuICAgICk7XG5cbiAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlS2V5KCk7XG4gICAgY29uc3Qgd3JhcHBlZE1hc3RlcktleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChcbiAgICAgIHBhc3NLZXlCdW5kbGUucGFzc0tleSxcbiAgICAgIG1hc3RlcktleS50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgLy8gRXBoZW1lcmFsIFBLQyBrZXlcbiAgICBjb25zdCBwcmsgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlUGtjS2V5KCk7XG4gICAgY29uc3QgbWFzdGVyS2V5V3JhcHBlZFByayA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdChcbiAgICAgIG1hc3RlcktleSxcbiAgICAgIHByay50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgLy8gQVBJIGNhbGwgdG8gc2V0dXAgcmVzZXQgcmVxdWVzdFxuICAgIGNvbnN0IHJlcXVlc3RSZXNldFJlc3VsdCA9IGF3YWl0IHRoaXMuaHR0cFxuICAgICAgLnBvc3Q8UmVxdWVzdFJlc2V0UmVzdWx0PihcbiAgICAgICAgYCR7dGhpcy5jb25maWcuYXV0aFVybH10cC9wYXNzd29yZC1yZXNldC9yZXF1ZXN0L2AsXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFpbUlkLFxuICAgICAgICAgIGNsYWltVG9rZW4sXG4gICAgICAgICAgcGFzc19rZXlfcGFyYW1zOiBwYXNzS2V5QnVuZGxlLnBhc3NLZXlQYXJhbXMsXG4gICAgICAgICAgcGFzc19pZHBfcGFyYW1zOiBwYXNzS2V5QnVuZGxlLnBhc3NJZHBQYXJhbXMsXG4gICAgICAgICAgcGFzc19pZHBfdmVyaWZpZXJfcGJrOiBwYXNzS2V5QnVuZGxlLnBhc3NJZHBWZXJpZmllci50b0pTT04oKSwgLy8gcHVibGljIGtleVxuICAgICAgICAgIHdyYXBwZWRfcGFzc19pZHBfdmVyaWZpZXJfcHJrOlxuICAgICAgICAgICAgcGFzc0tleUJ1bmRsZS53cmFwcGVkUGFzc0lkcFZlcmlmaWVyUHJrLFxuICAgICAgICAgIHdyYXBwZWRfbWFzdGVyX2tleTogd3JhcHBlZE1hc3RlcktleSxcbiAgICAgICAgICBwYms6IHByay50b0pTT04oKSwgLy8gZXBoZW1lcmFsIHB1YmxpYyBrZXlcbiAgICAgICAgICBtYXN0ZXJfa2V5X3dyYXBwZWRfcHJrOiBtYXN0ZXJLZXlXcmFwcGVkUHJrLFxuICAgICAgICB9XG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKCk7XG5cbiAgICBjb25zb2xlLmxvZyhyZXF1ZXN0UmVzZXRSZXN1bHQpO1xuICAgIGNvbnNvbGUubG9nKFxuICAgICAgJ1VzaW5nIG5ldyBwYXNzd29yZDogJyxcbiAgICAgIHRoaXMucGFzc3dvcmRTZXJ2aWNlLmdldFBhc3NJZHBTdHJpbmcocGFzc0tleUJ1bmRsZS5wYXNzSWRwKVxuICAgICk7XG5cbiAgICAvLyBBUEkgY2FsbCB0byBjcmVhdGUgdXNlciBvbiBjb2duaXRvXG4gICAgY29uc3Qgc2lnblVwUmVzdWx0ID0gYXdhaXQgdGhpcy5hdXRoLnNpZ25VcCh7XG4gICAgICB1c2VybmFtZTogcmVxdWVzdFJlc2V0UmVzdWx0LnJlc2V0X3VzZXJuYW1lLFxuICAgICAgcGFzc3dvcmQ6IHRoaXMucGFzc3dvcmRTZXJ2aWNlLmdldFBhc3NJZHBTdHJpbmcocGFzc0tleUJ1bmRsZS5wYXNzSWRwKSxcbiAgICAgIGNsaWVudE1ldGFkYXRhOiB7XG4gICAgICAgIHRwX3Bhc3N3b3JkX3Jlc2V0X3JlcXVlc3Q6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBpZDogcmVxdWVzdFJlc2V0UmVzdWx0LmlkLFxuICAgICAgICAgIGFzc29jaWF0ZV9yZXNldF91c2VyX3Rva2VuOlxuICAgICAgICAgICAgcmVxdWVzdFJlc2V0UmVzdWx0LmFzc29jaWF0ZV9yZXNldF91c2VyX3Rva2VuLFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZygncmVxdWVzdFJlc3QgZG9uZTogJywgc2lnblVwUmVzdWx0KTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXF1ZXN0UmVzZXRSZXN1bHQsXG4gICAgICBzaWduVXBSZXN1bHQsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIGdldFJlc2V0VXNlcihcbiAgICByZWxvYWQ6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBQcm9taXNlPFRwUGFzc3dvcmRSZXNldFVzZXJOb2RlPiB7XG4gICAgaWYgKCFyZWxvYWQgJiYgdGhpcy5yZXNldFVzZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlc2V0VXNlcjtcbiAgICB9XG4gICAgdGhpcy5yZXNldFVzZXIgPSBhd2FpdCB0aGlzLmxyQXV0aC5sb2FkUmVzZXRVc2VyKCk7XG4gICAgcmV0dXJuIHRoaXMucmVzZXRVc2VyO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyByZWNvdmVyQXNzZW1ibHlLZXkoXG4gICAgcmVzZXRVc2VyOiBUcFBhc3N3b3JkUmVzZXRVc2VyTm9kZVxuICApOiBQcm9taXNlPEpXSy5LZXk+IHtcbiAgICAvLyBSZWNvdmVyIHRoZSBhc3NlbWJseSBrZXkuXG4gICAgbGV0IGFzc2VtYmx5S2V5UGFyYW1zOiBvYmplY3Q7XG5cbiAgICBjb25zdCBwcmsgPSBhd2FpdCB0aGlzLmtleUdyYXBoU2VydmljZS5nZXRLZXkocmVzZXRVc2VyLnB4ay5pZCk7XG5cbiAgICBjb25zdCBzaGFyZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIHJlc2V0VXNlci5hcHByb3ZhbHMubWFwKGFzeW5jIChhcHByb3ZhbCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJ0aWFsQXNzZW1ibHlLZXkgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmRlY3J5cHQoXG4gICAgICAgICAgcHJrLFxuICAgICAgICAgIGFwcHJvdmFsLnJlY2VpdmVyQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5XG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGFzc2VtYmx5S2V5UGFyYW1zKSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoYXNzZW1ibHlLZXlQYXJhbXMpICE9PVxuICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkocGFydGlhbEFzc2VtYmx5S2V5LmFzc2VtYmx5S2V5UGFyYW1zKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IExyQmFkU3RhdGVFeGNlcHRpb24oXG4gICAgICAgICAgICAgICdUaGUgYXNzZW1ibHkga2V5IHBhcmFtZXRlcnMgYXJlIGRpZmZlcmVudCBiZXR3ZWVuIHRoZSBhcHByb3ZhbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXNzZW1ibHlLZXlQYXJhbXMgPSBwYXJ0aWFsQXNzZW1ibHlLZXkuYXNzZW1ibHlLZXlQYXJhbXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnRpYWxBc3NlbWJseUtleS5zbGlwMzkuc2hhcmUubW5lbW9uaWNzO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgY29uc29sZS5sb2coJ3JlY292ZXJBc3NlbWJseUtleSgpJywgc2hhcmVzKTtcblxuICAgIGNvbnN0IHJhd0Fzc2VtYmx5S2V5ID0gYXdhaXQgdGhpcy5zbGlwMzlTZXJ2aWNlLnJlY292ZXJTZWNyZXQoXG4gICAgICBzaGFyZXMsXG4gICAgICBUcFBhc3N3b3JkUmVzZXRTZXJ2aWNlLlNMSVAzOV9QQVNTUEhSQVNFXG4gICAgKTtcblxuICAgIHJldHVybiBKV0suYXNLZXkoe1xuICAgICAgLi4uYXNzZW1ibHlLZXlQYXJhbXMsXG4gICAgICBrOiByYXdBc3NlbWJseUtleSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGNvbXBsZXRlUmVxdWVzdChuZXdQYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVzZXRVc2VyID0gYXdhaXQgdGhpcy5nZXRSZXNldFVzZXIodHJ1ZSk7XG4gICAgaWYgKHJlc2V0VXNlci5zdGF0ZSAhPT0gVHBDbGFpbVN0YXRlLkFQUFJPVkVEKSB7XG4gICAgICB0aHJvdyBuZXcgTHJCYWRTdGF0ZUV4Y2VwdGlvbihcbiAgICAgICAgJ1Bhc3N3b3JkIHJlc2V0IHJlcXVlc3QgaGFzIG5vdCBiZWVuIGFwcHJvdmVkLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBQcmVwYXJlIGFsbCBtYXRlcmlhbHMgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBlcnJvcnMuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBhc3NlbWJseUtleSA9IGF3YWl0IHRoaXMucmVjb3ZlckFzc2VtYmx5S2V5KHJlc2V0VXNlcik7XG5cbiAgICBjb25zdCB7IHJvb3RLZXkgfSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZGVjcnlwdChcbiAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgcmVzZXRVc2VyLmFzc2VtYmx5Q2lwaGVyRGF0YVxuICAgICk7XG4gICAgY29uc29sZS5sb2cocm9vdEtleSk7XG5cbiAgICAvLyBNYWtpbmcgc3VyZSBpdCdzIGEgdmFsaWQga2V5LlxuICAgIGNvbnN0IHJvb3RLZXlKd2sgPSBhd2FpdCBKV0suYXNLZXkocm9vdEtleSk7XG5cbiAgICBjb25zdCBtYXN0ZXJLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoU2VydmljZS5nZXRLZXkocmVzZXRVc2VyLm1hc3RlcktleS5pZCk7XG5cbiAgICBjb25zdCBtYXN0ZXJLZXlXcmFwcGVkUm9vdEtleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgbWFzdGVyS2V5Lmp3ayxcbiAgICAgIHJvb3RLZXlKd2sudG9KU09OKHRydWUpXG4gICAgKTtcblxuICAgIC8vIFRoZSBuZXcgcGFzc3dvcmRcbiAgICBjb25zdCBuZXdQYXNzSWRwUmVzdWx0ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmRlcml2ZVBhc3NJZHAoe1xuICAgICAgcGFzc3dvcmQ6IG5ld1Bhc3N3b3JkLFxuICAgICAgLi4ucmVzZXRVc2VyLnBhc3NLZXkucGFzc0lkcFBhcmFtcyxcbiAgICB9KTtcblxuICAgIGNvbnN0IG5ld0lkcFBhc3N3b3JkID0gdGhpcy5wYXNzd29yZFNlcnZpY2UuZ2V0UGFzc0lkcFN0cmluZyhcbiAgICAgIG5ld1Bhc3NJZHBSZXN1bHQuandrXG4gICAgKTtcblxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gR2V0IGFzc2VtYmx5IGtleSBjaGFsbGVuZ2VcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGNoYWxsZW5nZSA9IChcbiAgICAgIGF3YWl0IHRoaXMubXV0YXRlKFxuICAgICAgICBuZXcgTHJNdXRhdGlvbih7XG4gICAgICAgICAgbXV0YXRpb246IENyZWF0ZVRwQXNzZW1ibHlLZXlDaGFsbGVuZ2VNdXRhdGlvbixcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGlucHV0OiB7fSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAge1xuICAgICAgICAgIGluY2x1ZGVLZXlHcmFwaDogZmFsc2UsXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApLmNyZWF0ZVRwQXNzZW1ibHlLZXlDaGFsbGVuZ2UuY2hhbGxlbmdlO1xuXG4gICAgY29uc29sZS5sb2coY2hhbGxlbmdlKTtcblxuICAgIC8vIFNpZ24gdGhlIGNoYWxsZW5nZVxuICAgIC8vIEdlbmVyYXRlIGEgY2xpZW50IHNpZGUgbm9uY2UgdGhhdCdzIG5vIGluIHRoZSBzZXJ2ZXIncyBjb250cm9sLlxuICAgIGNoYWxsZW5nZS5jbGllbnROb25jZSA9IHRoaXMua2V5RmFjdG9yeS5yYW5kb21TdHJpbmcoXG4gICAgICB0aGlzLkNMSUVOVF9OT05DRV9MRU5HVEhcbiAgICApO1xuICAgIGNvbnNvbGUubG9nKGNoYWxsZW5nZSk7XG5cbiAgICBjb25zdCBhc3NlbWJseUtleVZlcmlmaWVyUHJrID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5kZWNyeXB0KFxuICAgICAgYXNzZW1ibHlLZXksXG4gICAgICByZXNldFVzZXIud3JhcHBlZEFzc2VtYmx5S2V5VmVyaWZpZXJQcmtcbiAgICApO1xuICAgIGNvbnN0IHNpZ25lZENoYWxsZW5nZSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2Uuc2lnbihcbiAgICAgIGFzc2VtYmx5S2V5VmVyaWZpZXJQcmssXG4gICAgICBjaGFsbGVuZ2VcbiAgICApO1xuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBDaGFuZ2UgcGFzc3dvcmQgZm9yIHRoZSBvcmlnaW5hbCB1c2VyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB0ZW1wSWRwUGFzc3dvcmQgPSAoXG4gICAgICBhd2FpdCB0aGlzLm11dGF0ZShcbiAgICAgICAgbmV3IExyTXV0YXRpb24oe1xuICAgICAgICAgIG11dGF0aW9uOiBQcmVDb21wbGV0ZVRwUGFzc3dvcmRSZXNldFJlcXVlc3RNdXRhdGlvbixcbiAgICAgICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgICAgIHNpZ25lZENoYWxsZW5nZTogSlNPTi5zdHJpbmdpZnkoc2lnbmVkQ2hhbGxlbmdlKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICBpbmNsdWRlS2V5R3JhcGg6IGZhbHNlLFxuICAgICAgICB9XG4gICAgICApXG4gICAgKS5wcmVDb21wbGV0ZVRwUGFzc3dvcmRSZXNldFJlcXVlc3QuaWRwUGFzc3dvcmQ7XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIExvZ2luIGFzIHRoZSBvcmlnaW5hbCB1c2VyIHVzaW5nIG5ldyB0ZW1wb3JhcnkgcGFzc3dvcmRcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEF0IHRoaXMgcG9pbnQsIHRoZSBvcmlnaW5hbCBhY2NvdW50J3MgcGFzc3dvcmQgaGFzIGJlZW4gY2hhbmdlZFxuICAgIC8vIHRvIGEgdGVtcG9yYXJ5IHBhc3N3b3JkLiBJdCBpcyBubyBsb25nZXIgcG9zc2libGUgZm9yIHRoZSB1c2VyXG4gICAgLy8gdG8gdXNlIHRoZSBvcmlnaW5hbCBwYXNzd29yZCB0byBsb2dpbi4gQW55IHN1Y2Nlc3NmdWwgbG9naW5cbiAgICAvLyBjYW4gb25seSBiZSB1c2luZyB0aGUgdGVtcG9yYXJ5IHBhc3N3b3JkLiBTbyBpdCdzIHNhZmUgdG8gYXNzdW1lXG4gICAgLy8gdGhhdCB3ZSB3YW50IHRvIFwiY29tcGxldGVcIiB0aGUgcGFzc3dvcmQgcmVzZXQuXG5cbiAgICAvLyBUaGUgbWF5YmUgMkZBIHNvIHdlIGxpc3RlbiBmb3IgdGhlIGF1dGggZXZlbnQgZnJvbSBBbXBsaWZ5LlxuICAgIGNvbnN0IHJldFByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgbGlzdGVuZXIgPSBhc3luYyAoZGF0YSkgPT4ge1xuICAgICAgICBpZiAoZGF0YS5wYXlsb2FkLmV2ZW50ICE9PSAnc2lnbkluJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIEh1Yi5yZW1vdmUoJ2F1dGgnLCBsaXN0ZW5lcik7XG5cbiAgICAgICAgY29uc29sZS5sb2coZGF0YS5wYXlsb2FkKTtcblxuICAgICAgICBhd2FpdCB0aGlzLmF1dGguc2lnbkluKHJlc2V0VXNlci51c2VybmFtZSwgbmV3SWRwUGFzc3dvcmQpO1xuXG4gICAgICAgIC8vIFN3aXRjaCBvdmVyIHRvIHRoZSBuZXcgc2V0IG9mIGtleXNcbiAgICAgICAgYXdhaXQgdGhpcy5tdXRhdGUoXG4gICAgICAgICAgbmV3IExyTXV0YXRpb24oe1xuICAgICAgICAgICAgbXV0YXRpb246IENvbXBsZXRlVHBQYXNzd29yZFJlc2V0UmVxdWVzdE11dGF0aW9uLFxuICAgICAgICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgICAgICAgbWFzdGVyS2V5V3JhcHBlZFJvb3RLZXksXG4gICAgICAgICAgICAgICAgbWFzdGVyS2V5SWQ6IG1hc3RlcktleS5pZCxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9O1xuXG4gICAgICBIdWIubGlzdGVuKCdhdXRoJywgbGlzdGVuZXIpO1xuICAgIH0pO1xuXG4gICAgLy8gU2lnbmluIGFzIHRoZSBvcmlnaW5hbCB1c2VyLiBQYXNzd29yZCBoYXMgYmVlbiByZXNldCB0byB0ZW1wb3Jhcnkgb25lLiBJdCBzaG91bGQgcmV0dXJuXG4gICAgLy8gd2l0aCBORVdfUEFTU1dPUkRfUkVRVUlSRURcbiAgICBsZXQgdXNlciA9IGF3YWl0IHRoaXMuYXV0aC5zaWduSW4ocmVzZXRVc2VyLnVzZXJuYW1lLCB0ZW1wSWRwUGFzc3dvcmQsIHtcbiAgICAgIG5vUHJveHk6ICd0cnVlJyxcbiAgICB9KTtcblxuICAgIGlmICh1c2VyLmNoYWxsZW5nZU5hbWUgIT09ICdORVdfUEFTU1dPUkRfUkVRVUlSRUQnKSB7XG4gICAgICB0aHJvdyBuZXcgTHJFeGNlcHRpb24oe1xuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICdJbnRlcm5hbCBlcnJvci4gRXhwZWN0aW5nIENvZ25pdG8gdG8gaGF2ZSBkb25lIGEgcGFzc3dvcmQgcmVzZXQgYWZ0ZXIgY2FsbCB0byBQcmVDb21wbGV0ZVRwUGFzc3dvcmRSZXNldFJlcXVlc3RNdXRhdGlvbi4nLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IG5ldyBwYXNzd29yZCBvbiBJZHBcbiAgICAvLyB0aGUgYXdzRmV0Y2goKSBmdW5jdGlvbiBwYXNzZXMgTkVXX1BBU1NXT1JEX1JFUVVJUkVEIGRpcmVjdGx5IHRvIEFXUyB3aXRob3V0XG4gICAgLy8gZ29pbmcgdGhyb3VnaCB0aGUgcHJveHkuXG4gICAgdXNlciA9IGF3YWl0IHRoaXMuYXV0aC5jb21wbGV0ZU5ld1Bhc3N3b3JkKHVzZXIsIG5ld0lkcFBhc3N3b3JkLCB7fSk7XG5cbiAgICByZXR1cm4gcmV0UHJvbWlzZTtcbiAgfVxufVxuIl19
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAtcGFzc3dvcmQtcmVzZXQtdXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi90cnVzdGVkLXBhcnRpZXMvdHAtcGFzc3dvcmQtcmVzZXQtdXNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNwRSxPQUFPLEVBQW1CLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sS0FBSyxJQUFJLE1BQU0sZ0NBQWdDLENBQUM7QUFRdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFNM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFeEUsT0FBTyxFQUFjLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7Ozs7OztJQVN0RCwwQkFBMEIsU0FBMUIsMEJBQTJCLFNBQVEsU0FBUztJQUN2RCxZQUNVLE1BQWMsRUFDZCxRQUFrQixFQUNDLE1BQXVCLEVBQzFDLFVBQTZCLEVBQzdCLGlCQUFvQyxFQUNwQyxlQUFnQyxFQUNoQyxhQUFpQyxF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QUFHLENBQ1Qsc0JBQXNCLEVBQ3RCLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUM3RCxDQUFDO1lBRUYscUNBQXFDO1lBQ3JDLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQzFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxjQUFjO2dCQUMzQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO2dCQUN0RSxjQUFjLEVBQUU7b0JBQ2QseUJBQXlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQzt3QkFDeEMsRUFBRSxFQUFFLGtCQUFrQixDQUFDLEVBQUU7d0JBQ3pCLDBCQUEwQixFQUN4QixrQkFBa0IsQ0FBQywwQkFBMEI7cUJBQ2hELENBQUM7aUJBQ0g7YUFDRixDQUFDLENBQUM7WUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLFlBQVksQ0FBQyxDQUFDO1lBRWhELE9BQU87Z0JBQ0wsa0JBQWtCO2dCQUNsQixZQUFZO2FBQ2IsQ0FBQztRQUNKLENBQUM7S0FBQTtDQUNGLENBQUE7OztZQXBIQSxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQWhDc0MsTUFBTTtZQUFoQixRQUFROzRDQXFDaEMsTUFBTSxTQUFDLFNBQVM7WUFoQlosaUJBQWlCO1lBcEJqQixpQkFBaUI7WUFDakIsZUFBZTtZQUVaLElBQUksQ0FxQ2dCLGFBQWE7WUE3QnBDLGVBQWU7WUFDZixVQUFVO1lBQ1YsU0FBUztZQU1ULG9CQUFvQjs7QUFhaEIsMEJBQTBCO0lBTnRDLGlCQUFpQixDQUFDO1FBQ2pCLFVBQVUsRUFBRSxRQUFRO0tBQ3JCLENBQUM7R0FJVywwQkFBMEIsQ0FpSHRDO1NBakhZLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh1YiB9IGZyb20gJ0Bhd3MtYW1wbGlmeS9jb3JlJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRW5jcnlwdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvZW5jcnlwdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEtleUdyYXBoU2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZ3JhcGguc2VydmljZSc7XG5pbXBvcnQgeyBMaWZlUmVhZHlDb25maWcsIExSX0NPTkZJRyB9IGZyb20gJy4uL2xpZmUtcmVhZHkuY29uZmlnJztcbmltcG9ydCAqIGFzIHNsaXAgZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L3NsaXAzOS5zZXJ2aWNlJztcbmltcG9ydCB7IEpXSyB9IGZyb20gJ25vZGUtam9zZSc7XG5pbXBvcnQgeyBMckJhZFN0YXRlRXhjZXB0aW9uLCBMckV4Y2VwdGlvbiB9IGZyb20gJy4uL19jb21tb24vZXhjZXB0aW9ucyc7XG5pbXBvcnQge1xuICBDb21wbGV0ZVRwUGFzc3dvcmRSZXNldFJlcXVlc3RNdXRhdGlvbixcbiAgQ3JlYXRlVHBBc3NlbWJseUtleUNoYWxsZW5nZU11dGF0aW9uLFxuICBQcmVDb21wbGV0ZVRwUGFzc3dvcmRSZXNldFJlcXVlc3RNdXRhdGlvbixcbn0gZnJvbSAnLi90cC1wYXNzd29yZC1yZXNldC5ncWwnO1xuaW1wb3J0IHsgUGFzc3dvcmRTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC9wYXNzd29yZC5zZXJ2aWNlJztcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBBdXRoQ2xhc3MgfSBmcm9tICdAYXdzLWFtcGxpZnkvYXV0aC9saWItZXNtL0F1dGgnO1xuaW1wb3J0IHtcbiAgUmVxdWVzdFJlc2V0UmVzdWx0LFxuICBUcFBhc3N3b3JkUmVzZXRTZXJ2aWNlLFxufSBmcm9tICcuL3RwLXBhc3N3b3JkLXJlc2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgSVNpZ25VcFJlc3VsdCB9IGZyb20gJ2FtYXpvbi1jb2duaXRvLWlkZW50aXR5LWpzJztcbmltcG9ydCB7IExpZmVSZWFkeUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vYXV0aC9saWZlLXJlYWR5LWF1dGguc2VydmljZSc7XG5pbXBvcnQgeyBLZXlGYWN0b3J5U2VydmljZSB9IGZyb20gJy4uL2NyeXB0b2dyYXBoeS9rZXktZmFjdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IFRwQ2xhaW1TdGF0ZSwgVHBQYXNzd29yZFJlc2V0VXNlck5vZGUgfSBmcm9tICcuLi9hcGkvdHlwZXMnO1xuaW1wb3J0IHsgTHJNdXRhdGlvbiwgTHJTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWdyYXBocWwnO1xuaW1wb3J0IHsgUnVuT3V0c2lkZUFuZ3VsYXIgfSBmcm9tICcuLi9fY29tbW9uL3J1bi1vdXRzaWRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgVHBQYXNzd29yZFJlc2V0VXNlciB9IGZyb20gJy4uL2F1dGgvYXV0aC50eXBlcyc7XG5cbkBSdW5PdXRzaWRlQW5ndWxhcih7XG4gIG5nWm9uZU5hbWU6ICduZ1pvbmUnLFxufSlcbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUcFBhc3N3b3JkUmVzZXRVc2VyU2VydmljZSBleHRlbmRzIExyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgQEluamVjdChMUl9DT05GSUcpIHByaXZhdGUgY29uZmlnOiBMaWZlUmVhZHlDb25maWcsXG4gICAgcHJpdmF0ZSBrZXlGYWN0b3J5OiBLZXlGYWN0b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGtleUdyYXBoU2VydmljZTogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2xpcDM5U2VydmljZTogc2xpcC5TbGlwMzlTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGFzc3dvcmRTZXJ2aWNlOiBQYXNzd29yZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIHByaXZhdGUgYXV0aDogQXV0aENsYXNzLFxuICAgIHByaXZhdGUgbHJBdXRoOiBMaWZlUmVhZHlBdXRoU2VydmljZVxuICApIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlFbWFpbENvbnRhY3QoZW1haWwpOiBQcm9taXNlPHsgY2xhaW1JZDogc3RyaW5nIH0+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBlbWFpbCxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PGFueT4oXG4gICAgICAgIGAke3RoaXMuY29uZmlnLmF1dGhVcmx9dHAvcGFzc3dvcmQtcmVzZXQvdmVyaWZ5LWNvbnRhY3QvYCxcbiAgICAgICAgcGFyYW1zXG4gICAgICApXG4gICAgICAudG9Qcm9taXNlKCk7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlDb250YWN0UmVzcG9uZChcbiAgICBjbGFpbUlkOiBzdHJpbmcsXG4gICAgY2xhaW1Db2RlOiBzdHJpbmdcbiAgKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB7IHRva2VuIH0gPSBhd2FpdCB0aGlzLmh0dHBcbiAgICAgIC5wb3N0PHsgdG9rZW4gfT4oYCR7dGhpcy5jb25maWcuYXV0aFVybH1jb3ZlL3Jlc3BvbmQvYCwge1xuICAgICAgICBjbGFpbV9pZDogY2xhaW1JZCxcbiAgICAgICAgdl9jb2RlOiBjbGFpbUNvZGUsXG4gICAgICB9KVxuICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuXG4gIGFzeW5jIHJlcXVlc3RSZXNldChcbiAgICBwYXNzd29yZDogc3RyaW5nLFxuICAgIGNsYWltSWQ6IHN0cmluZyxcbiAgICBjbGFpbVRva2VuOiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7XG4gICAgcmVxdWVzdFJlc2V0UmVzdWx0OiBSZXF1ZXN0UmVzZXRSZXN1bHQ7XG4gICAgc2lnblVwUmVzdWx0OiBJU2lnblVwUmVzdWx0O1xuICB9PiB7XG4gICAgLy8gR2VuZXJhdGUgdGhlIGtleSBtYXRlcmlhbHNcbiAgICBjb25zdCBwYXNzS2V5QnVuZGxlID0gYXdhaXQgdGhpcy5wYXNzd29yZFNlcnZpY2UuY3JlYXRlUGFzc0tleUJ1bmRsZShcbiAgICAgIHBhc3N3b3JkXG4gICAgKTtcblxuICAgIGNvbnN0IG1hc3RlcktleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcbiAgICBjb25zdCB3cmFwcGVkTWFzdGVyS2V5ID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxuICAgICAgcGFzc0tleUJ1bmRsZS5wYXNzS2V5LFxuICAgICAgbWFzdGVyS2V5LnRvSlNPTih0cnVlKVxuICAgICk7XG5cbiAgICAvLyBFcGhlbWVyYWwgUEtDIGtleVxuICAgIGNvbnN0IHByayA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVQa2NLZXkoKTtcbiAgICBjb25zdCBtYXN0ZXJLZXlXcmFwcGVkUHJrID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0KFxuICAgICAgbWFzdGVyS2V5LFxuICAgICAgcHJrLnRvSlNPTih0cnVlKVxuICAgICk7XG5cbiAgICAvLyBBUEkgY2FsbCB0byBzZXR1cCByZXNldCByZXF1ZXN0XG4gICAgY29uc3QgcmVxdWVzdFJlc2V0UmVzdWx0ID0gYXdhaXQgdGhpcy5odHRwXG4gICAgICAucG9zdDxSZXF1ZXN0UmVzZXRSZXN1bHQ+KFxuICAgICAgICBgJHt0aGlzLmNvbmZpZy5hdXRoVXJsfXRwL3Bhc3N3b3JkLXJlc2V0L3JlcXVlc3QvYCxcbiAgICAgICAge1xuICAgICAgICAgIGNsYWltSWQsXG4gICAgICAgICAgY2xhaW1Ub2tlbixcbiAgICAgICAgICBwYXNzX2tleV9wYXJhbXM6IHBhc3NLZXlCdW5kbGUucGFzc0tleVBhcmFtcyxcbiAgICAgICAgICBwYXNzX2lkcF9wYXJhbXM6IHBhc3NLZXlCdW5kbGUucGFzc0lkcFBhcmFtcyxcbiAgICAgICAgICBwYXNzX2lkcF92ZXJpZmllcl9wYms6IHBhc3NLZXlCdW5kbGUucGFzc0lkcFZlcmlmaWVyLnRvSlNPTigpLCAvLyBwdWJsaWMga2V5XG4gICAgICAgICAgd3JhcHBlZF9wYXNzX2lkcF92ZXJpZmllcl9wcms6XG4gICAgICAgICAgICBwYXNzS2V5QnVuZGxlLndyYXBwZWRQYXNzSWRwVmVyaWZpZXJQcmssXG4gICAgICAgICAgd3JhcHBlZF9tYXN0ZXJfa2V5OiB3cmFwcGVkTWFzdGVyS2V5LFxuICAgICAgICAgIHBiazogcHJrLnRvSlNPTigpLCAvLyBlcGhlbWVyYWwgcHVibGljIGtleVxuICAgICAgICAgIG1hc3Rlcl9rZXlfd3JhcHBlZF9wcms6IG1hc3RlcktleVdyYXBwZWRQcmssXG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC50b1Byb21pc2UoKTtcblxuICAgIGNvbnNvbGUubG9nKHJlcXVlc3RSZXNldFJlc3VsdCk7XG4gICAgY29uc29sZS5sb2coXG4gICAgICAnVXNpbmcgbmV3IHBhc3N3b3JkOiAnLFxuICAgICAgdGhpcy5wYXNzd29yZFNlcnZpY2UuZ2V0UGFzc0lkcFN0cmluZyhwYXNzS2V5QnVuZGxlLnBhc3NJZHApXG4gICAgKTtcblxuICAgIC8vIEFQSSBjYWxsIHRvIGNyZWF0ZSB1c2VyIG9uIGNvZ25pdG9cbiAgICBjb25zdCBzaWduVXBSZXN1bHQgPSBhd2FpdCB0aGlzLmF1dGguc2lnblVwKHtcbiAgICAgIHVzZXJuYW1lOiByZXF1ZXN0UmVzZXRSZXN1bHQucmVzZXRfdXNlcm5hbWUsXG4gICAgICBwYXNzd29yZDogdGhpcy5wYXNzd29yZFNlcnZpY2UuZ2V0UGFzc0lkcFN0cmluZyhwYXNzS2V5QnVuZGxlLnBhc3NJZHApLFxuICAgICAgY2xpZW50TWV0YWRhdGE6IHtcbiAgICAgICAgdHBfcGFzc3dvcmRfcmVzZXRfcmVxdWVzdDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGlkOiByZXF1ZXN0UmVzZXRSZXN1bHQuaWQsXG4gICAgICAgICAgYXNzb2NpYXRlX3Jlc2V0X3VzZXJfdG9rZW46XG4gICAgICAgICAgICByZXF1ZXN0UmVzZXRSZXN1bHQuYXNzb2NpYXRlX3Jlc2V0X3VzZXJfdG9rZW4sXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnNvbGUubG9nKCdyZXF1ZXN0UmVzdCBkb25lOiAnLCBzaWduVXBSZXN1bHQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHJlcXVlc3RSZXNldFJlc3VsdCxcbiAgICAgIHNpZ25VcFJlc3VsdCxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export const TP_PASSWORD_RESET_CLIENT_NONCE_LENGTH = 32;
2
+ export const TP_PASSWORD_RESET_SLIP39_PASSPHRASE = 'lifeready';
3
+ export const TP_PASSWORD_RESET_USERNAME_SUFFIX = '.tp_password_reset';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAtcGFzc3dvcmQtcmVzZXQuY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6Ii9vcHQvYXRsYXNzaWFuL3BpcGVsaW5lcy9hZ2VudC9idWlsZC9wcm9qZWN0cy9jb3JlL3NyYy8iLCJzb3VyY2VzIjpbImxpYi90cnVzdGVkLXBhcnRpZXMvdHAtcGFzc3dvcmQtcmVzZXQuY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLHFDQUFxQyxHQUFHLEVBQUUsQ0FBQztBQUN4RCxNQUFNLENBQUMsTUFBTSxtQ0FBbUMsR0FBRyxXQUFXLENBQUM7QUFDL0QsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgVFBfUEFTU1dPUkRfUkVTRVRfQ0xJRU5UX05PTkNFX0xFTkdUSCA9IDMyO1xuZXhwb3J0IGNvbnN0IFRQX1BBU1NXT1JEX1JFU0VUX1NMSVAzOV9QQVNTUEhSQVNFID0gJ2xpZmVyZWFkeSc7XG5leHBvcnQgY29uc3QgVFBfUEFTU1dPUkRfUkVTRVRfVVNFUk5BTUVfU1VGRklYID0gJy50cF9wYXNzd29yZF9yZXNldCc7XG4iXX0=
@@ -1,4 +1,3 @@
1
- var TpPasswordResetService_1;
2
1
  import { __awaiter, __decorate, __rest } from "tslib";
3
2
  import { Injectable, Injector, NgZone } from '@angular/core';
4
3
  import { KeyService } from '../cryptography/key.service';
@@ -10,6 +9,7 @@ import { LrBadArgumentException, LrBadLogicException, } from '../_common/excepti
10
9
  import { KeyFactoryService } from '../cryptography/key-factory.service';
11
10
  import { LrMutation, LrService } from '../api/lr-graphql';
12
11
  import { RunOutsideAngular } from '../_common/run-outside-angular';
12
+ import { TP_PASSWORD_RESET_SLIP39_PASSPHRASE } from './tp-password-reset.constants';
13
13
  import * as i0 from "@angular/core";
14
14
  import * as i1 from "../cryptography/key.service";
15
15
  import * as i2 from "../cryptography/key-factory.service";
@@ -24,7 +24,7 @@ export class CreateTpPasswordResetInput {
24
24
  }
25
25
  export class UpdateTpPasswordResetInput extends CreateTpPasswordResetInput {
26
26
  }
27
- let TpPasswordResetService = TpPasswordResetService_1 = class TpPasswordResetService extends LrService {
27
+ let TpPasswordResetService = class TpPasswordResetService extends LrService {
28
28
  constructor(ngZone, injector, keyService, keyFactory, encryptionService, keyGraph, slip39Service) {
29
29
  super(injector);
30
30
  this.ngZone = ngZone;
@@ -211,7 +211,7 @@ let TpPasswordResetService = TpPasswordResetService_1 = class TpPasswordResetSer
211
211
  }
212
212
  slipAssembly.addSubAssembly(new slip.SubAssembly(index, sa.quorum, approverCount));
213
213
  });
214
- yield this.slip39Service.generateShares(rawAssemblyKey, TpPasswordResetService_1.SLIP39_PASSPHRASE, slipAssembly);
214
+ yield this.slip39Service.generateShares(rawAssemblyKey, TP_PASSWORD_RESET_SLIP39_PASSPHRASE, slipAssembly);
215
215
  return slipAssembly;
216
216
  });
217
217
  }
@@ -275,7 +275,6 @@ let TpPasswordResetService = TpPasswordResetService_1 = class TpPasswordResetSer
275
275
  });
276
276
  }
277
277
  };
278
- TpPasswordResetService.SLIP39_PASSPHRASE = 'lifeready';
279
278
  TpPasswordResetService.ɵprov = i0.ɵɵdefineInjectable({ factory: function TpPasswordResetService_Factory() { return new TpPasswordResetService(i0.ɵɵinject(i0.NgZone), i0.ɵɵinject(i0.INJECTOR), i0.ɵɵinject(i1.KeyService), i0.ɵɵinject(i2.KeyFactoryService), i0.ɵɵinject(i3.EncryptionService), i0.ɵɵinject(i4.KeyGraphService), i0.ɵɵinject(i5.Slip39Service)); }, token: TpPasswordResetService, providedIn: "root" });
280
279
  TpPasswordResetService.decorators = [
281
280
  { type: Injectable, args: [{
@@ -291,10 +290,10 @@ TpPasswordResetService.ctorParameters = () => [
291
290
  { type: KeyGraphService },
292
291
  { type: slip.Slip39Service }
293
292
  ];
294
- TpPasswordResetService = TpPasswordResetService_1 = __decorate([
293
+ TpPasswordResetService = __decorate([
295
294
  RunOutsideAngular({
296
295
  ngZoneName: 'ngZone',
297
296
  })
298
297
  ], TpPasswordResetService);
299
298
  export { TpPasswordResetService };
300
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAtcGFzc3dvcmQtcmVzZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvdHJ1c3RlZC1wYXJ0aWVzL3RwLXBhc3N3b3JkLXJlc2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsNkJBQTZCLEVBQzdCLG9CQUFvQixFQUNwQiw2QkFBNkIsRUFDN0Isb0NBQW9DLEdBQ3JDLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3BFLE9BQU8sS0FBSyxJQUFJLE1BQU0sZ0NBQWdDLENBQUM7QUFDdkQsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixtQkFBbUIsR0FDcEIsTUFBTSx1QkFBdUIsQ0FBQztBQUkvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4RSxPQUFPLEVBQW9CLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7OztBQUVuRSxNQUFNLE9BQU8sd0JBQXdCO0NBS3BDO0FBRUQsTUFBTSxPQUFPLHdCQUF5QixTQUFRLHdCQUF3QjtDQUVyRTtBQUVELE1BQU0sT0FBTywwQkFBMEI7Q0FJdEM7QUFFRCxNQUFNLE9BQU8sMEJBQTJCLFNBQVEsMEJBQTBCO0NBRXpFO0lBbURZLHNCQUFzQixvQ0FB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Q0FDcEMsc0JBQXNCLENBQUMsTUFBTSxFQUFFLENBQ2hDO3dCQUNELDZCQUE2QjtxQkFDOUI7aUJBQ0Y7YUFDRixDQUFDO1FBQ0osQ0FBQztLQUFBO0NBQ0YsQ0FBQTtBQWxZZSx3Q0FBaUIsR0FBRyxXQUFXLENBQUM7OztZQUovQyxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTdGOEIsTUFBTTtZQUFoQixRQUFRO1lBQ3BCLFVBQVU7WUFrQlYsaUJBQWlCO1lBakJqQixpQkFBaUI7WUFRakIsZUFBZTtZQUNaLElBQUksQ0E2RmdCLGFBQWE7O0FBVmhDLHNCQUFzQjtJQU5sQyxpQkFBaUIsQ0FBQztRQUNqQixVQUFVLEVBQUUsUUFBUTtLQUNyQixDQUFDO0dBSVcsc0JBQXNCLENBbVlsQztTQW5ZWSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2VuY3J5cHRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBDcmVhdGVUcFBhc3N3b3JkUmVzZXRNdXRhdGlvbixcbiAgRGVsZXRlVHBQYXNzd29yZFJlc2V0TXV0YXRpb24sXG4gIFRwUGFzc3dvcmRSZXNldFF1ZXJ5LFxuICBVcGRhdGVUcFBhc3N3b3JkUmVzZXRNdXRhdGlvbixcbiAgQ2FuY2VsVHBQYXNzd29yZFJlc2V0UmVxdWVzdE11dGF0aW9uLFxufSBmcm9tICcuL3RwLXBhc3N3b3JkLXJlc2V0LmdxbCc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWdyYXBoLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgc2xpcCBmcm9tICcuLi9jcnlwdG9ncmFwaHkvc2xpcDM5LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgTHJCYWRBcmd1bWVudEV4Y2VwdGlvbixcbiAgTHJCYWRMb2dpY0V4Y2VwdGlvbixcbn0gZnJvbSAnLi4vX2NvbW1vbi9leGNlcHRpb25zJztcbmltcG9ydCB7IFBhcnRpYWxBc3NlbWJseUtleSB9IGZyb20gJy4uL3NjZW5hcmlvL3NjZW5hcmlvLnR5cGVzJztcbmltcG9ydCB7IEpXSyB9IGZyb20gJ25vZGUtam9zZSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvY3J5cHRvZ3JhcGh5LnR5cGVzJztcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1mYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTHJHcmFwaFFMU2VydmljZSwgTHJNdXRhdGlvbiwgTHJTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWdyYXBocWwnO1xuaW1wb3J0IHsgVHBOb2RlIH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcblxuZXhwb3J0IGNsYXNzIENyZWF0ZVN1YkFzc2VtYmxpZXNJbnB1dCB7XG4gIG5hbWU6IHN0cmluZztcbiAgcXVvcnVtOiBudW1iZXI7XG4gIHNpbmdsZVJlamVjdDogYm9vbGVhbjtcbiAgYXBwcm92ZXJUcHM6IFRwTm9kZVtdO1xufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlU3ViQXNzZW1ibGllc0lucHV0IGV4dGVuZHMgQ3JlYXRlU3ViQXNzZW1ibGllc0lucHV0IHtcbiAgaWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENyZWF0ZVRwUGFzc3dvcmRSZXNldElucHV0IHtcbiAgcXVvcnVtOiBudW1iZXI7XG4gIHNpbmdsZVJlamVjdDogYm9vbGVhbjtcbiAgY3JlYXRlU3ViQXNzZW1ibGllczogQ3JlYXRlU3ViQXNzZW1ibGllc0lucHV0W107XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVUcFBhc3N3b3JkUmVzZXRJbnB1dCBleHRlbmRzIENyZWF0ZVRwUGFzc3dvcmRSZXNldElucHV0IHtcbiAgdXBkYXRlU3ViQXNzZW1ibGllczogVXBkYXRlU3ViQXNzZW1ibGllc0lucHV0W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHBBc3NlbWJseUFwcHJvdmVycyB7XG4gIGlkOiBzdHJpbmc7XG4gIHRwOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgfTtcbiAgc2hhcmVkS2V5OiBLZXk7XG4gIHNoYXJlZENpcGhlckRhdGE/OiBzdHJpbmc7XG4gIHNoYXJlZENpcGhlckRhdGFDbGVhckpzb24/OiBhbnk7XG4gIHNoYXJlZENpcGhlckFwcHJvdmFsRGF0YT86IHN0cmluZztcbiAgc2hhcmVkQ2lwaGVyQXBwcm92YWxEYXRhQ2xlYXJKc29uPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRwU3ViQXNzZW1ibHkge1xuICBpZDogc3RyaW5nO1xuICBzaW5nbGVSZWplY3Q6IGJvb2xlYW47XG4gIHF1b3J1bTogbnVtYmVyO1xuICBzdWJqZWN0Q2lwaGVyRGF0YTogc3RyaW5nO1xuICBwbGFpblN1YmplY3RDaXBoZXJEYXRhOiBhbnk7XG4gIGFwcHJvdmVyczogVHBBc3NlbWJseUFwcHJvdmVyc1tdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRwQXNzZW1ibHkge1xuICBzaW5nbGVSZWplY3Q6IGJvb2xlYW47XG4gIHF1b3J1bTogbnVtYmVyO1xuICBzdWJqZWN0S2V5OiBLZXk7XG4gIGFzc2VtYmx5S2V5OiBLZXk7XG4gIGFzc2VtYmx5Q2lwaGVyRGF0YTogc3RyaW5nO1xuICBwbGFpbkFzc2VtYmx5Q2lwaGVyRGF0YTogYW55O1xuICBzdWJBc3NlbWJsaWVzOiBUcFN1YkFzc2VtYmx5W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHBQYXNzd29yZFJlc2V0IHtcbiAgaWQ6IHN0cmluZztcbiAgYXNzZW1ibHk6IFRwQXNzZW1ibHk7XG4gIGFwcGxpZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdFJlc2V0UmVzdWx0IHtcbiAgaWQ6IHN0cmluZztcbiAgYXNzb2NpYXRlX3Jlc2V0X3VzZXJfdG9rZW46IHN0cmluZztcbiAgcmVzZXRfdXNlcm5hbWU6IHN0cmluZztcbn1cblxuQFJ1bk91dHNpZGVBbmd1bGFyKHtcbiAgbmdab25lTmFtZTogJ25nWm9uZScsXG59KVxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFRwUGFzc3dvcmRSZXNldFNlcnZpY2UgZXh0ZW5kcyBMclNlcnZpY2Uge1xuICBwdWJsaWMgc3RhdGljIFNMSVAzOV9QQVNTUEhSQVNFID0gJ2xpZmVyZWFkeSc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGtleVNlcnZpY2U6IEtleVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrZXlGYWN0b3J5OiBLZXlGYWN0b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGVuY3J5cHRpb25TZXJ2aWNlOiBFbmNyeXB0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGtleUdyYXBoOiBLZXlHcmFwaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzbGlwMzlTZXJ2aWNlOiBzbGlwLlNsaXAzOVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoaW5qZWN0b3IpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmVzZXQoKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMucXVlcnkoe1xuICAgICAgICBxdWVyeTogVHBQYXNzd29yZFJlc2V0UXVlcnksXG4gICAgICB9KVxuICAgICkudHBQYXNzd29yZFJlc2V0O1xuICB9XG5cbiAgY3JlYXRlUmVzZXQoaW5wdXQ6IENyZWF0ZVRwUGFzc3dvcmRSZXNldElucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY3JlYXRlUmVzZXRNdXRhdGlvbihpbnB1dCkpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlUmVzZXRNdXRhdGlvbihpbnB1dDogQ3JlYXRlVHBQYXNzd29yZFJlc2V0SW5wdXQpIHtcbiAgICBjb25zdCB7IG11dGF0aW9uSW5wdXQgfSA9IGF3YWl0IHRoaXMuX2NyZWF0ZVJlc2V0KFxuICAgICAgaW5wdXQsXG4gICAgICBhc3luYyAocmF3QXNzZW1ibHlLZXkpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZVNsaXAzOShcbiAgICAgICAgICBpbnB1dC5jcmVhdGVTdWJBc3NlbWJsaWVzLFxuICAgICAgICAgIGlucHV0LnF1b3J1bSxcbiAgICAgICAgICByYXdBc3NlbWJseUtleVxuICAgICAgICApO1xuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENyZWF0ZVRwUGFzc3dvcmRSZXNldE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiBtdXRhdGlvbklucHV0LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGRlbGV0ZVJlc2V0KCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmRlbGV0ZVJlc2V0TXV0YXRpb24oKSk7XG4gIH1cblxuICBkZWxldGVSZXNldE11dGF0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogRGVsZXRlVHBQYXNzd29yZFJlc2V0TXV0YXRpb24sXG4gICAgfSk7XG4gIH1cblxuICB1cGRhdGVSZXNldChpbnB1dDogVXBkYXRlVHBQYXNzd29yZFJlc2V0SW5wdXQpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy51cGRhdGVSZXNldE11dGF0aW9uKGlucHV0KSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGVSZXNldE11dGF0aW9uKGlucHV0OiBVcGRhdGVUcFBhc3N3b3JkUmVzZXRJbnB1dCkge1xuICAgIGNvbnN0IHBhc3N3b3JkUmVzZXQgPSBhd2FpdCB0aGlzLmdldFJlc2V0KCk7XG5cbiAgICBjb25zdCB7XG4gICAgICBtdXRhdGlvbklucHV0LFxuICAgICAgc3ViamVjdEtleSxcbiAgICAgIHNsaXBBc3NlbWJseSxcbiAgICAgIGFzc2VtYmx5S2V5UGFyYW1zLFxuICAgIH0gPSBhd2FpdCB0aGlzLl9jcmVhdGVSZXNldChpbnB1dCwgYXN5bmMgKHJhd0Fzc2VtYmx5S2V5KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5wcmVwYXJlU2xpcDM5KFxuICAgICAgICBpbnB1dC5jcmVhdGVTdWJBc3NlbWJsaWVzLmNvbmNhdChpbnB1dC51cGRhdGVTdWJBc3NlbWJsaWVzKSxcbiAgICAgICAgaW5wdXQucXVvcnVtLFxuICAgICAgICByYXdBc3NlbWJseUtleVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHVwZGF0ZVN1YkFzc2VtYmxpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGlucHV0LnVwZGF0ZVN1YkFzc2VtYmxpZXMubWFwKGFzeW5jIChzYSwgc2FJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0Q2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICAgIHN1YmplY3RLZXksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogc2EubmFtZSxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBleGlzdGluZyBzdWItYXNzZW1ibHlcbiAgICAgICAgY29uc3QgZXhpc3RpbmdTYSA9IHBhc3N3b3JkUmVzZXQuYXNzZW1ibHkuc3ViQXNzZW1ibGllcy5lZGdlcy5maW5kKFxuICAgICAgICAgIChlZGdlKSA9PiBlZGdlLm5vZGUuaWQgPT09IHNhLmlkXG4gICAgICAgICkubm9kZTtcblxuICAgICAgICAvLyBHZXQgYXBwcm92ZXJzIHRoYXQgZG8gbm90IGV4aXN0IHlldFxuICAgICAgICBjb25zdCBjcmVhdGVBcHByb3ZlcnMgPSBbXTtcbiAgICAgICAgY29uc3QgdXBkYXRlQXBwcm92ZXJzID0gW107XG5cbiAgICAgICAgc2EuYXBwcm92ZXJUcHMuZm9yRWFjaCgodHApID0+IHtcbiAgICAgICAgICBjb25zdCBhcHByb3ZlciA9IGV4aXN0aW5nU2EuYXBwcm92ZXJzLmVkZ2VzLmZpbmQoXG4gICAgICAgICAgICAoZWRnZSkgPT4gZWRnZS5ub2RlLnRwLmlkID09PSB0cC5pZFxuICAgICAgICAgICk/Lm5vZGU7XG4gICAgICAgICAgaWYgKGFwcHJvdmVyKSB7XG4gICAgICAgICAgICB1cGRhdGVBcHByb3ZlcnMucHVzaCh7XG4gICAgICAgICAgICAgIHRwLFxuICAgICAgICAgICAgICBhcHByb3ZlcklkOiBhcHByb3Zlci5pZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjcmVhdGVBcHByb3ZlcnMucHVzaCh7XG4gICAgICAgICAgICAgIHRwLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN1YkFzc2VtYmx5SWQ6IHNhLmlkLFxuICAgICAgICAgIHNpbmdsZVJlamVjdDogc2Euc2luZ2xlUmVqZWN0LFxuICAgICAgICAgIHF1b3J1bTogc2EucXVvcnVtLFxuICAgICAgICAgIHN1YmplY3RDaXBoZXJEYXRhLFxuICAgICAgICAgIGNyZWF0ZUFwcHJvdmVyczogYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBjcmVhdGVBcHByb3ZlcnMubWFwKGFzeW5jICh7IHRwIH0sIGFwcHJvdmVySW5kZXgpID0+XG4gICAgICAgICAgICAgIHRoaXMucHJlcGFyZUFwcHJvdmVyKHtcbiAgICAgICAgICAgICAgICB0cCxcbiAgICAgICAgICAgICAgICBhcHByb3ZlckluZGV4LFxuICAgICAgICAgICAgICAgIHNhSW5kZXg6IHNhSW5kZXggKyBpbnB1dC5jcmVhdGVTdWJBc3NlbWJsaWVzLmxlbmd0aCwgLy8gc2xpcEFzc2VtYmx5IGlzIGFsbCBzdWItYXNzZW1ibGllcyBjb21iaW5lZFxuICAgICAgICAgICAgICAgIHNsaXBBc3NlbWJseSxcbiAgICAgICAgICAgICAgICBhc3NlbWJseUtleVBhcmFtcyxcbiAgICAgICAgICAgICAgICBzdWJqZWN0S2V5LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgICAgdXBkYXRlQXBwcm92ZXJzOiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHVwZGF0ZUFwcHJvdmVycy5tYXAoYXN5bmMgKHsgdHAsIGFwcHJvdmVySWQgfSwgYXBwcm92ZXJJbmRleCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlQXBwcm92ZXIoe1xuICAgICAgICAgICAgICAgIGFwcHJvdmVySWQsXG4gICAgICAgICAgICAgICAgdHAsXG4gICAgICAgICAgICAgICAgYXBwcm92ZXJJbmRleDogYXBwcm92ZXJJbmRleCArIGNyZWF0ZUFwcHJvdmVycy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgc2FJbmRleDogc2FJbmRleCArIGlucHV0LmNyZWF0ZVN1YkFzc2VtYmxpZXMubGVuZ3RoLCAvLyBzbGlwQXNzZW1ibHkgaXMgYWxsIHN1Yi1hc3NlbWJsaWVzIGNvbWJpbmVkXG4gICAgICAgICAgICAgICAgc2xpcEFzc2VtYmx5LFxuICAgICAgICAgICAgICAgIGFzc2VtYmx5S2V5UGFyYW1zLFxuICAgICAgICAgICAgICAgIHN1YmplY3RLZXksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogVXBkYXRlVHBQYXNzd29yZFJlc2V0TXV0YXRpb24sXG4gICAgICB2YXJpYWJsZXM6IHtcbiAgICAgICAgaW5wdXQ6IHtcbiAgICAgICAgICAuLi5tdXRhdGlvbklucHV0LFxuICAgICAgICAgIGFzc2VtYmx5OiB7XG4gICAgICAgICAgICAuLi5tdXRhdGlvbklucHV0LmFzc2VtYmx5LFxuICAgICAgICAgICAgdXBkYXRlU3ViQXNzZW1ibGllcyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbFJlc2V0UmVxdWVzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5jYW5jZWxSZXNldFJlcXVlc3RNdXRhdGlvbigpKTtcbiAgfVxuXG4gIGNhbmNlbFJlc2V0UmVxdWVzdE11dGF0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTHJNdXRhdGlvbih7XG4gICAgICBtdXRhdGlvbjogQ2FuY2VsVHBQYXNzd29yZFJlc2V0UmVxdWVzdE11dGF0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVBcHByb3ZlcnMoYXBwcm92ZXJzOiBUcE5vZGVbXSk6IHZvaWQge1xuICAgIC8vIEVuc3VyZSBhbGwgYXBwcm92ZXJzIGhhdmUgbWtTaGFyZWRLZXkuXG4gICAgZm9yIChjb25zdCB0cCBvZiBhcHByb3ZlcnMpIHtcbiAgICAgIGlmICghdHAuY3VycmVudFVzZXJTaGFyZWRLZXkudXNlclNoYXJlZEtleS5ta1NoYXJlZEtleSkge1xuICAgICAgICBjb25zdCBtc2cgPSBgdHAgJHt0cC5vdGhlci51c2VybmFtZX0gZG9lcyBub3QgaGF2ZSBta1NoYXJlZEtleWA7XG4gICAgICAgIGNvbnNvbGUubG9nKG1zZyk7XG4gICAgICAgIHRocm93IG5ldyBMckJhZEFyZ3VtZW50RXhjZXB0aW9uKG1zZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlQXBwcm92ZXIoe1xuICAgIGFwcHJvdmVySWQsXG4gICAgdHAsXG4gICAgYXBwcm92ZXJJbmRleCxcbiAgICBzYUluZGV4LFxuICAgIHNsaXBBc3NlbWJseSxcbiAgICBhc3NlbWJseUtleVBhcmFtcyxcbiAgICBzdWJqZWN0S2V5LFxuICB9OiB7XG4gICAgYXBwcm92ZXJJZD86IHN0cmluZztcbiAgICB0cDogVHBOb2RlO1xuICAgIGFwcHJvdmVySW5kZXg6IG51bWJlcjtcbiAgICBzYUluZGV4OiBudW1iZXI7XG4gICAgc2xpcEFzc2VtYmx5OiBzbGlwLkFzc2VtYmx5O1xuICAgIGFzc2VtYmx5S2V5UGFyYW1zOiBvYmplY3Q7XG4gICAgc3ViamVjdEtleTogSldLLktleTtcbiAgfSkge1xuICAgIGlmICghdHAuY3VycmVudFVzZXJTaGFyZWRLZXkudXNlclNoYXJlZEtleS5ta1NoYXJlZEtleSkge1xuICAgICAgdGhyb3cgbmV3IExyQmFkQXJndW1lbnRFeGNlcHRpb24oXG4gICAgICAgIGBUcCAke3RwLm90aGVyLnVzZXJuYW1lfSBkb2VzIG5vdCBoYXZlIG1rU2hhcmVkS2V5LiBOZWVkIHRvIHJlc2hhcmVkIGl0IGZpcnN0LmBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xuICAgIGNvbnN0IHRwTWtTaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmtleUdyYXBoLmdldEtleShcbiAgICAgIHRwLmN1cnJlbnRVc2VyU2hhcmVkS2V5LnVzZXJTaGFyZWRLZXkubWtTaGFyZWRLZXkuaWRcbiAgICApO1xuICAgIC8vIEZvciBUUCB0byBhY2Nlc3Mgc2hhcmVkX2tleVxuICAgIGNvbnN0IHRwTWtTaGFyZWRLZXlXcmFwcGVkU2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICB0cE1rU2hhcmVkS2V5Lmp3ayxcbiAgICAgIHNoYXJlZEtleS50b0pTT04odHJ1ZSlcbiAgICApO1xuICAgIC8vIEZvciBzdWJqZWN0IHRvIGFjY2VzcyBzaGFyZWRfa2V5XG4gICAgY29uc3Qgc3ViamVjdEtleVdyYXBwZWRTaGFyZWRLZXkgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIHN1YmplY3RLZXksXG4gICAgICBzaGFyZWRLZXkudG9KU09OKHRydWUpXG4gICAgKTtcblxuICAgIGNvbnN0IHNhU2xpcCA9IHNsaXBBc3NlbWJseS5zdWJBc3NlbWJsaWVzW3NhSW5kZXhdO1xuICAgIGlmIChzYVNsaXAuaW5kZXggIT09IHNhSW5kZXgpIHtcbiAgICAgIC8vIFBhcmFub2lhXG4gICAgICB0aHJvdyBuZXcgTHJCYWRMb2dpY0V4Y2VwdGlvbihcbiAgICAgICAgJ3NsaXAgc3ViIGFzc2VtYmx5IGluZGV4IHNob3VsZCBtYXRjaCB3aXRoIGFycmF5IGluZGV4J1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBJZiBxdW9ydW0gaXMgMSwgdGhlbiB1c2luZyB0aGUgc2FtZSBzaGFyZSBmb3IgZXZlcnkgbWVtYmVyLlxuICAgIGNvbnN0IHNoYXJlID1cbiAgICAgIHNhU2xpcC50aHJlc2hvbGQgPT09IDEgPyBzYVNsaXAuc2hhcmVzWzBdIDogc2FTbGlwLnNoYXJlc1thcHByb3ZlckluZGV4XTtcblxuICAgIGNvbnN0IHBhcnRpYWxBc3NlbWJseUtleTogUGFydGlhbEFzc2VtYmx5S2V5ID0ge1xuICAgICAgc2xpcDM5OiB7XG4gICAgICAgIHNoYXJlLFxuICAgICAgICBzdWJBc3NlbWJseToge1xuICAgICAgICAgIHF1b3J1bTogc2FTbGlwLnRocmVzaG9sZCxcbiAgICAgICAgICBzaXplOiBzYVNsaXAuc2l6ZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBhc3NlbWJseUtleVBhcmFtcyxcbiAgICB9O1xuXG4gICAgY29uc29sZS5sb2coJ3BhcnRpYWxBc3NlbWJseUtleScsIHBhcnRpYWxBc3NlbWJseUtleSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHBNa1NoYXJlZEtleUlkOiB0cE1rU2hhcmVkS2V5LmlkLFxuICAgICAgdHBNa1NoYXJlZEtleVdyYXBwZWRTaGFyZWRLZXksXG4gICAgICBzdWJqZWN0S2V5V3JhcHBlZFNoYXJlZEtleSxcbiAgICAgIHNoYXJlZENpcGhlckRhdGE6IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICBzaGFyZWRLZXksXG4gICAgICAgIHsgYTogJzEyMycgfVxuICAgICAgKSxcbiAgICAgIHNoYXJlZENpcGhlckFwcHJvdmFsRGF0YTogJycsXG4gICAgICBzaGFyZWRDaXBoZXJQYXJ0aWFsQXNzZW1ibHlLZXk6IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICBzaGFyZWRLZXksXG4gICAgICAgIHBhcnRpYWxBc3NlbWJseUtleVxuICAgICAgKSxcbiAgICAgIGFwcHJvdmVySWQ6IGFwcHJvdmVySWQgfHwgdm9pZCAwLFxuICAgICAgdHBJZDogYXBwcm92ZXJJZCA/IHZvaWQgMCA6IHRwLmlkLFxuICAgIH07XG4gIH1cblxuICAvLyBQcmVwYXJlIHNsaXAzOVxuICBwcml2YXRlIGFzeW5jIHByZXBhcmVTbGlwMzkoXG4gICAgc3ViQXNzZW1ibGllcyxcbiAgICBhc3NlbWJseVF1b3J1bTogbnVtYmVyLFxuICAgIHJhd0Fzc2VtYmx5S2V5OiBzdHJpbmdcbiAgKTogUHJvbWlzZTxzbGlwLkFzc2VtYmx5PiB7XG4gICAgLy8gSXMgdGhlcmUgZW5vdWdoIHN1YiBhc3NlbWJsaWVzIHRvIG1lZXQgcXVvcnVtXG4gICAgaWYgKHN1YkFzc2VtYmxpZXMubGVuZ3RoIDwgYXNzZW1ibHlRdW9ydW0pIHtcbiAgICAgIHRocm93IG5ldyBMckJhZEFyZ3VtZW50RXhjZXB0aW9uKFxuICAgICAgICAnTm90IGVub3VnaCBzdWIgYXNzZW1ibGllcyB0byBtZWV0IHF1b3J1bSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2xpcEFzc2VtYmx5ID0gbmV3IHNsaXAuQXNzZW1ibHkoYXNzZW1ibHlRdW9ydW0pO1xuXG4gICAgc3ViQXNzZW1ibGllcy5mb3JFYWNoKChzYSwgaW5kZXgpID0+IHtcbiAgICAgIGxldCBhcHByb3ZlckNvdW50ID0gc2EuYXBwcm92ZXJUcHMubGVuZ3RoO1xuXG4gICAgICAvLyBzbGlwMzkgcmVzdHJpY3RzIHF1b3J1bSA9PSAxIHRvIGhhdmUgb25seSAxIG1lbWJlci4gU28gd2UganVzdCBzaGFyZSB0aGUgc2FtZVxuICAgICAgLy8gcGFydGlhbCBrZXkgZm9yIGFsbCBzdWIgYXNzZW1ibHkgbWVtYmVycy5cbiAgICAgIGlmIChzYS5xdW9ydW0gPT09IDEpIHtcbiAgICAgICAgYXBwcm92ZXJDb3VudCA9IDE7XG4gICAgICB9XG4gICAgICBzbGlwQXNzZW1ibHkuYWRkU3ViQXNzZW1ibHkoXG4gICAgICAgIG5ldyBzbGlwLlN1YkFzc2VtYmx5KGluZGV4LCBzYS5xdW9ydW0sIGFwcHJvdmVyQ291bnQpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgYXdhaXQgdGhpcy5zbGlwMzlTZXJ2aWNlLmdlbmVyYXRlU2hhcmVzKFxuICAgICAgcmF3QXNzZW1ibHlLZXksXG4gICAgICBUcFBhc3N3b3JkUmVzZXRTZXJ2aWNlLlNMSVAzOV9QQVNTUEhSQVNFLFxuICAgICAgc2xpcEFzc2VtYmx5XG4gICAgKTtcbiAgICByZXR1cm4gc2xpcEFzc2VtYmx5O1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfY3JlYXRlUmVzZXQoXG4gICAgaW5wdXQ6IENyZWF0ZVRwUGFzc3dvcmRSZXNldElucHV0LFxuICAgIGNyZWF0ZVNsaXBBc3NlbWJseVxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIENyZWF0ZSBzdWJqZWN0IGtleVxuICAgIGNvbnN0IG1hc3RlcktleSA9IGF3YWl0IHRoaXMua2V5U2VydmljZS5nZXRDdXJyZW50TWFzdGVyS2V5KCk7XG4gICAgY29uc3Qgc3ViamVjdEtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcbiAgICBjb25zdCBhc3NlbWJseUtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcbiAgICBjb25zdCB7IGs6IHJhd0Fzc2VtYmx5S2V5LCAuLi5hc3NlbWJseUtleVBhcmFtcyB9ID0gYXNzZW1ibHlLZXkudG9KU09OKFxuICAgICAgdHJ1ZVxuICAgICkgYXMgYW55O1xuICAgIGNvbnN0IGFzc2VtYmx5S2V5VmVyaWZpZXJQcmsgPSBhd2FpdCB0aGlzLmtleUZhY3RvcnkuY3JlYXRlUGtjU2lnbktleSgpO1xuICAgIGNvbnN0IHdyYXBwZWRBc3NlbWJseUtleVZlcmlmaWVyUHJrID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBhc3NlbWJseUtleSxcbiAgICAgIGFzc2VtYmx5S2V5VmVyaWZpZXJQcmsudG9KU09OKHRydWUpXG4gICAgKTtcblxuICAgIGNvbnN0IG1hc3RlcktleVdyYXBwZWRTdWJqZWN0S2V5ID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBtYXN0ZXJLZXkuandrLFxuICAgICAgc3ViamVjdEtleS50b0pTT04odHJ1ZSlcbiAgICApO1xuICAgIGNvbnN0IHN1YmplY3RLZXlXcmFwcGVkQXNzZW1ibHlLZXkgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIHN1YmplY3RLZXksXG4gICAgICBhc3NlbWJseUtleS50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgLy8gRW5jcnlwdCB0aGUgcm9vdEtleSB3aXRoIHRoZSBhc3NlbWJseUtleVxuICAgIGNvbnN0IHJvb3RLZXkgPSBhd2FpdCB0aGlzLmtleVNlcnZpY2UuZ2V0Q3VycmVudFJvb3RLZXkoKTtcblxuICAgIGNvbnN0IGFzc2VtYmx5Q2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgYXNzZW1ibHlLZXksXG4gICAgICB7XG4gICAgICAgIHJvb3RLZXk6IHJvb3RLZXkuandrLnRvSlNPTih0cnVlKSxcbiAgICAgIH1cbiAgICApO1xuXG4gICAgY29uc3Qgc2xpcEFzc2VtYmx5ID0gYXdhaXQgY3JlYXRlU2xpcEFzc2VtYmx5KHJhd0Fzc2VtYmx5S2V5KTtcbiAgICAvLyBjb25zdCBzbGlwQXNzZW1ibHkgPSBhd2FpdCB0aGlzLnByZXBhcmVTbGlwMzkoaW5wdXQuY3JlYXRlU3ViQXNzZW1ibGllcywgaW5wdXQucXVvcnVtLCByYXdBc3NlbWJseUtleSk7XG5cbiAgICBjb25zdCBjcmVhdGVTdWJBc3NlbWJsaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBpbnB1dC5jcmVhdGVTdWJBc3NlbWJsaWVzLm1hcChhc3luYyAoc2EsIHNhSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViamVjdENpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgICBzdWJqZWN0S2V5LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHNhLm5hbWUsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2luZ2xlUmVqZWN0OiBzYS5zaW5nbGVSZWplY3QsXG4gICAgICAgICAgcXVvcnVtOiBzYS5xdW9ydW0sXG4gICAgICAgICAgc3ViamVjdENpcGhlckRhdGEsXG4gICAgICAgICAgY3JlYXRlQXBwcm92ZXJzOiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgIHNhLmFwcHJvdmVyVHBzLm1hcChhc3luYyAoYXBwcm92ZXJUcCwgYXBwcm92ZXJJbmRleCkgPT5cbiAgICAgICAgICAgICAgdGhpcy5wcmVwYXJlQXBwcm92ZXIoe1xuICAgICAgICAgICAgICAgIHRwOiBhcHByb3ZlclRwLFxuICAgICAgICAgICAgICAgIGFwcHJvdmVySW5kZXgsXG4gICAgICAgICAgICAgICAgc2FJbmRleCxcbiAgICAgICAgICAgICAgICBzbGlwQXNzZW1ibHksXG4gICAgICAgICAgICAgICAgYXNzZW1ibHlLZXlQYXJhbXMsXG4gICAgICAgICAgICAgICAgc3ViamVjdEtleSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1YmplY3RLZXksXG4gICAgICBzbGlwQXNzZW1ibHksXG4gICAgICBhc3NlbWJseUtleVBhcmFtcyxcbiAgICAgIG11dGF0aW9uSW5wdXQ6IHtcbiAgICAgICAgYXNzZW1ibHk6IHtcbiAgICAgICAgICBzaW5nbGVSZWplY3Q6IGlucHV0LnNpbmdsZVJlamVjdCxcbiAgICAgICAgICBxdW9ydW06IGlucHV0LnF1b3J1bSxcbiAgICAgICAgICBtYXN0ZXJLZXlJZDogbWFzdGVyS2V5LmlkLFxuICAgICAgICAgIG1hc3RlcktleVdyYXBwZWRTdWJqZWN0S2V5LFxuICAgICAgICAgIHN1YmplY3RLZXlXcmFwcGVkQXNzZW1ibHlLZXksXG4gICAgICAgICAgc3ViamVjdENpcGhlckRhdGE6ICcnLFxuICAgICAgICAgIGFzc2VtYmx5Q2lwaGVyRGF0YSxcbiAgICAgICAgICBjcmVhdGVTdWJBc3NlbWJsaWVzLFxuICAgICAgICAgIGFzc2VtYmx5S2V5VmVyaWZpZXJQYms6IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgYXNzZW1ibHlLZXlWZXJpZmllclByay50b0pTT04oKVxuICAgICAgICAgICksXG4gICAgICAgICAgd3JhcHBlZEFzc2VtYmx5S2V5VmVyaWZpZXJQcmssXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
299
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHAtcGFzc3dvcmQtcmVzZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIvb3B0L2F0bGFzc2lhbi9waXBlbGluZXMvYWdlbnQvYnVpbGQvcHJvamVjdHMvY29yZS9zcmMvIiwic291cmNlcyI6WyJsaWIvdHJ1c3RlZC1wYXJ0aWVzL3RwLXBhc3N3b3JkLXJlc2V0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDekQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUNMLDZCQUE2QixFQUM3Qiw2QkFBNkIsRUFDN0Isb0JBQW9CLEVBQ3BCLDZCQUE2QixFQUM3QixvQ0FBb0MsR0FDckMsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxLQUFLLElBQUksTUFBTSxnQ0FBZ0MsQ0FBQztBQUN2RCxPQUFPLEVBQ0wsc0JBQXNCLEVBQ3RCLG1CQUFtQixHQUNwQixNQUFNLHVCQUF1QixDQUFDO0FBSS9CLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3hFLE9BQU8sRUFBb0IsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRTVFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7Ozs7O0FBRXBGLE1BQU0sT0FBTyx3QkFBd0I7Q0FLcEM7QUFFRCxNQUFNLE9BQU8sd0JBQXlCLFNBQVEsd0JBQXdCO0NBRXJFO0FBRUQsTUFBTSxPQUFPLDBCQUEwQjtDQUl0QztBQUVELE1BQU0sT0FB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Q25CLHNCQUFzQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQ3BDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxDQUNoQzt3QkFDRCw2QkFBNkI7cUJBQzlCO2lCQUNGO2FBQ0YsQ0FBQztRQUNKLENBQUM7S0FBQTtDQUNGLENBQUE7OztZQXBZQSxVQUFVLFNBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkI7OztZQTlGOEIsTUFBTTtZQUFoQixRQUFRO1lBQ3BCLFVBQVU7WUFrQlYsaUJBQWlCO1lBakJqQixpQkFBaUI7WUFRakIsZUFBZTtZQUNaLElBQUksQ0E0RmdCLGFBQWE7O0FBUmhDLHNCQUFzQjtJQU5sQyxpQkFBaUIsQ0FBQztRQUNqQixVQUFVLEVBQUUsUUFBUTtLQUNyQixDQUFDO0dBSVcsc0JBQXNCLENBaVlsQztTQWpZWSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBLZXlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS5zZXJ2aWNlJztcbmltcG9ydCB7IEVuY3J5cHRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2VuY3J5cHRpb24uc2VydmljZSc7XG5pbXBvcnQge1xuICBDcmVhdGVUcFBhc3N3b3JkUmVzZXRNdXRhdGlvbixcbiAgRGVsZXRlVHBQYXNzd29yZFJlc2V0TXV0YXRpb24sXG4gIFRwUGFzc3dvcmRSZXNldFF1ZXJ5LFxuICBVcGRhdGVUcFBhc3N3b3JkUmVzZXRNdXRhdGlvbixcbiAgQ2FuY2VsVHBQYXNzd29yZFJlc2V0UmVxdWVzdE11dGF0aW9uLFxufSBmcm9tICcuL3RwLXBhc3N3b3JkLXJlc2V0LmdxbCc7XG5pbXBvcnQgeyBLZXlHcmFwaFNlcnZpY2UgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkva2V5LWdyYXBoLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgc2xpcCBmcm9tICcuLi9jcnlwdG9ncmFwaHkvc2xpcDM5LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgTHJCYWRBcmd1bWVudEV4Y2VwdGlvbixcbiAgTHJCYWRMb2dpY0V4Y2VwdGlvbixcbn0gZnJvbSAnLi4vX2NvbW1vbi9leGNlcHRpb25zJztcbmltcG9ydCB7IFBhcnRpYWxBc3NlbWJseUtleSB9IGZyb20gJy4uL3NjZW5hcmlvL3NjZW5hcmlvLnR5cGVzJztcbmltcG9ydCB7IEpXSyB9IGZyb20gJ25vZGUtam9zZSc7XG5pbXBvcnQgeyBLZXkgfSBmcm9tICcuLi9jcnlwdG9ncmFwaHkvY3J5cHRvZ3JhcGh5LnR5cGVzJztcbmltcG9ydCB7IEtleUZhY3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vY3J5cHRvZ3JhcGh5L2tleS1mYWN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgTHJHcmFwaFFMU2VydmljZSwgTHJNdXRhdGlvbiwgTHJTZXJ2aWNlIH0gZnJvbSAnLi4vYXBpL2xyLWdyYXBocWwnO1xuaW1wb3J0IHsgVHBOb2RlIH0gZnJvbSAnLi4vYXBpL3R5cGVzJztcbmltcG9ydCB7IFJ1bk91dHNpZGVBbmd1bGFyIH0gZnJvbSAnLi4vX2NvbW1vbi9ydW4tb3V0c2lkZS1hbmd1bGFyJztcbmltcG9ydCB7IFRQX1BBU1NXT1JEX1JFU0VUX1NMSVAzOV9QQVNTUEhSQVNFIH0gZnJvbSAnLi90cC1wYXNzd29yZC1yZXNldC5jb25zdGFudHMnO1xuXG5leHBvcnQgY2xhc3MgQ3JlYXRlU3ViQXNzZW1ibGllc0lucHV0IHtcbiAgbmFtZTogc3RyaW5nO1xuICBxdW9ydW06IG51bWJlcjtcbiAgc2luZ2xlUmVqZWN0OiBib29sZWFuO1xuICBhcHByb3ZlclRwczogVHBOb2RlW107XG59XG5cbmV4cG9ydCBjbGFzcyBVcGRhdGVTdWJBc3NlbWJsaWVzSW5wdXQgZXh0ZW5kcyBDcmVhdGVTdWJBc3NlbWJsaWVzSW5wdXQge1xuICBpZDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgQ3JlYXRlVHBQYXNzd29yZFJlc2V0SW5wdXQge1xuICBxdW9ydW06IG51bWJlcjtcbiAgc2luZ2xlUmVqZWN0OiBib29sZWFuO1xuICBjcmVhdGVTdWJBc3NlbWJsaWVzOiBDcmVhdGVTdWJBc3NlbWJsaWVzSW5wdXRbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZVRwUGFzc3dvcmRSZXNldElucHV0IGV4dGVuZHMgQ3JlYXRlVHBQYXNzd29yZFJlc2V0SW5wdXQge1xuICB1cGRhdGVTdWJBc3NlbWJsaWVzOiBVcGRhdGVTdWJBc3NlbWJsaWVzSW5wdXRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcEFzc2VtYmx5QXBwcm92ZXJzIHtcbiAgaWQ6IHN0cmluZztcbiAgdHA6IHtcbiAgICBpZDogc3RyaW5nO1xuICB9O1xuICBzaGFyZWRLZXk6IEtleTtcbiAgc2hhcmVkQ2lwaGVyRGF0YT86IHN0cmluZztcbiAgc2hhcmVkQ2lwaGVyRGF0YUNsZWFySnNvbj86IGFueTtcbiAgc2hhcmVkQ2lwaGVyQXBwcm92YWxEYXRhPzogc3RyaW5nO1xuICBzaGFyZWRDaXBoZXJBcHByb3ZhbERhdGFDbGVhckpzb24/OiBhbnk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHBTdWJBc3NlbWJseSB7XG4gIGlkOiBzdHJpbmc7XG4gIHNpbmdsZVJlamVjdDogYm9vbGVhbjtcbiAgcXVvcnVtOiBudW1iZXI7XG4gIHN1YmplY3RDaXBoZXJEYXRhOiBzdHJpbmc7XG4gIHBsYWluU3ViamVjdENpcGhlckRhdGE6IGFueTtcbiAgYXBwcm92ZXJzOiBUcEFzc2VtYmx5QXBwcm92ZXJzW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHBBc3NlbWJseSB7XG4gIHNpbmdsZVJlamVjdDogYm9vbGVhbjtcbiAgcXVvcnVtOiBudW1iZXI7XG4gIHN1YmplY3RLZXk6IEtleTtcbiAgYXNzZW1ibHlLZXk6IEtleTtcbiAgYXNzZW1ibHlDaXBoZXJEYXRhOiBzdHJpbmc7XG4gIHBsYWluQXNzZW1ibHlDaXBoZXJEYXRhOiBhbnk7XG4gIHN1YkFzc2VtYmxpZXM6IFRwU3ViQXNzZW1ibHlbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUcFBhc3N3b3JkUmVzZXQge1xuICBpZDogc3RyaW5nO1xuICBhc3NlbWJseTogVHBBc3NlbWJseTtcbiAgYXBwbGllZDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0UmVzZXRSZXN1bHQge1xuICBpZDogc3RyaW5nO1xuICBhc3NvY2lhdGVfcmVzZXRfdXNlcl90b2tlbjogc3RyaW5nO1xuICByZXNldF91c2VybmFtZTogc3RyaW5nO1xufVxuXG5AUnVuT3V0c2lkZUFuZ3VsYXIoe1xuICBuZ1pvbmVOYW1lOiAnbmdab25lJyxcbn0pXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVHBQYXNzd29yZFJlc2V0U2VydmljZSBleHRlbmRzIExyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBrZXlTZXJ2aWNlOiBLZXlTZXJ2aWNlLFxuICAgIHByaXZhdGUga2V5RmFjdG9yeTogS2V5RmFjdG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbmNyeXB0aW9uU2VydmljZTogRW5jcnlwdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBrZXlHcmFwaDogS2V5R3JhcGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2xpcDM5U2VydmljZTogc2xpcC5TbGlwMzlTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgfVxuXG4gIGFzeW5jIGdldFJlc2V0KCkge1xuICAgIHJldHVybiAoXG4gICAgICBhd2FpdCB0aGlzLnF1ZXJ5KHtcbiAgICAgICAgcXVlcnk6IFRwUGFzc3dvcmRSZXNldFF1ZXJ5LFxuICAgICAgfSlcbiAgICApLnRwUGFzc3dvcmRSZXNldDtcbiAgfVxuXG4gIGNyZWF0ZVJlc2V0KGlucHV0OiBDcmVhdGVUcFBhc3N3b3JkUmVzZXRJbnB1dCkge1xuICAgIHJldHVybiB0aGlzLm11dGF0ZSh0aGlzLmNyZWF0ZVJlc2V0TXV0YXRpb24oaW5wdXQpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZVJlc2V0TXV0YXRpb24oaW5wdXQ6IENyZWF0ZVRwUGFzc3dvcmRSZXNldElucHV0KSB7XG4gICAgY29uc3QgeyBtdXRhdGlvbklucHV0IH0gPSBhd2FpdCB0aGlzLl9jcmVhdGVSZXNldChcbiAgICAgIGlucHV0LFxuICAgICAgYXN5bmMgKHJhd0Fzc2VtYmx5S2V5KSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVTbGlwMzkoXG4gICAgICAgICAgaW5wdXQuY3JlYXRlU3ViQXNzZW1ibGllcyxcbiAgICAgICAgICBpbnB1dC5xdW9ydW0sXG4gICAgICAgICAgcmF3QXNzZW1ibHlLZXlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBMck11dGF0aW9uKHtcbiAgICAgIG11dGF0aW9uOiBDcmVhdGVUcFBhc3N3b3JkUmVzZXRNdXRhdGlvbixcbiAgICAgIHZhcmlhYmxlczoge1xuICAgICAgICBpbnB1dDogbXV0YXRpb25JbnB1dCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBkZWxldGVSZXNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5tdXRhdGUodGhpcy5kZWxldGVSZXNldE11dGF0aW9uKCkpO1xuICB9XG5cbiAgZGVsZXRlUmVzZXRNdXRhdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IERlbGV0ZVRwUGFzc3dvcmRSZXNldE11dGF0aW9uLFxuICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlUmVzZXQoaW5wdXQ6IFVwZGF0ZVRwUGFzc3dvcmRSZXNldElucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMudXBkYXRlUmVzZXRNdXRhdGlvbihpbnB1dCkpO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlUmVzZXRNdXRhdGlvbihpbnB1dDogVXBkYXRlVHBQYXNzd29yZFJlc2V0SW5wdXQpIHtcbiAgICBjb25zdCBwYXNzd29yZFJlc2V0ID0gYXdhaXQgdGhpcy5nZXRSZXNldCgpO1xuXG4gICAgY29uc3Qge1xuICAgICAgbXV0YXRpb25JbnB1dCxcbiAgICAgIHN1YmplY3RLZXksXG4gICAgICBzbGlwQXNzZW1ibHksXG4gICAgICBhc3NlbWJseUtleVBhcmFtcyxcbiAgICB9ID0gYXdhaXQgdGhpcy5fY3JlYXRlUmVzZXQoaW5wdXQsIGFzeW5jIChyYXdBc3NlbWJseUtleSkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZVNsaXAzOShcbiAgICAgICAgaW5wdXQuY3JlYXRlU3ViQXNzZW1ibGllcy5jb25jYXQoaW5wdXQudXBkYXRlU3ViQXNzZW1ibGllcyksXG4gICAgICAgIGlucHV0LnF1b3J1bSxcbiAgICAgICAgcmF3QXNzZW1ibHlLZXlcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB1cGRhdGVTdWJBc3NlbWJsaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBpbnB1dC51cGRhdGVTdWJBc3NlbWJsaWVzLm1hcChhc3luYyAoc2EsIHNhSW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViamVjdENpcGhlckRhdGEgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgICBzdWJqZWN0S2V5LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IHNhLm5hbWUsXG4gICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEdldCB0aGUgZXhpc3Rpbmcgc3ViLWFzc2VtYmx5XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU2EgPSBwYXNzd29yZFJlc2V0LmFzc2VtYmx5LnN1YkFzc2VtYmxpZXMuZWRnZXMuZmluZChcbiAgICAgICAgICAoZWRnZSkgPT4gZWRnZS5ub2RlLmlkID09PSBzYS5pZFxuICAgICAgICApLm5vZGU7XG5cbiAgICAgICAgLy8gR2V0IGFwcHJvdmVycyB0aGF0IGRvIG5vdCBleGlzdCB5ZXRcbiAgICAgICAgY29uc3QgY3JlYXRlQXBwcm92ZXJzID0gW107XG4gICAgICAgIGNvbnN0IHVwZGF0ZUFwcHJvdmVycyA9IFtdO1xuXG4gICAgICAgIHNhLmFwcHJvdmVyVHBzLmZvckVhY2goKHRwKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXBwcm92ZXIgPSBleGlzdGluZ1NhLmFwcHJvdmVycy5lZGdlcy5maW5kKFxuICAgICAgICAgICAgKGVkZ2UpID0+IGVkZ2Uubm9kZS50cC5pZCA9PT0gdHAuaWRcbiAgICAgICAgICApPy5ub2RlO1xuICAgICAgICAgIGlmIChhcHByb3Zlcikge1xuICAgICAgICAgICAgdXBkYXRlQXBwcm92ZXJzLnB1c2goe1xuICAgICAgICAgICAgICB0cCxcbiAgICAgICAgICAgICAgYXBwcm92ZXJJZDogYXBwcm92ZXIuaWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3JlYXRlQXBwcm92ZXJzLnB1c2goe1xuICAgICAgICAgICAgICB0cCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdWJBc3NlbWJseUlkOiBzYS5pZCxcbiAgICAgICAgICBzaW5nbGVSZWplY3Q6IHNhLnNpbmdsZVJlamVjdCxcbiAgICAgICAgICBxdW9ydW06IHNhLnF1b3J1bSxcbiAgICAgICAgICBzdWJqZWN0Q2lwaGVyRGF0YSxcbiAgICAgICAgICBjcmVhdGVBcHByb3ZlcnM6IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgY3JlYXRlQXBwcm92ZXJzLm1hcChhc3luYyAoeyB0cCB9LCBhcHByb3ZlckluZGV4KSA9PlxuICAgICAgICAgICAgICB0aGlzLnByZXBhcmVBcHByb3Zlcih7XG4gICAgICAgICAgICAgICAgdHAsXG4gICAgICAgICAgICAgICAgYXBwcm92ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBzYUluZGV4OiBzYUluZGV4ICsgaW5wdXQuY3JlYXRlU3ViQXNzZW1ibGllcy5sZW5ndGgsIC8vIHNsaXBBc3NlbWJseSBpcyBhbGwgc3ViLWFzc2VtYmxpZXMgY29tYmluZWRcbiAgICAgICAgICAgICAgICBzbGlwQXNzZW1ibHksXG4gICAgICAgICAgICAgICAgYXNzZW1ibHlLZXlQYXJhbXMsXG4gICAgICAgICAgICAgICAgc3ViamVjdEtleSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICApLFxuICAgICAgICAgIHVwZGF0ZUFwcHJvdmVyczogYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICB1cGRhdGVBcHByb3ZlcnMubWFwKGFzeW5jICh7IHRwLCBhcHByb3ZlcklkIH0sIGFwcHJvdmVySW5kZXgpID0+XG4gICAgICAgICAgICAgIHRoaXMucHJlcGFyZUFwcHJvdmVyKHtcbiAgICAgICAgICAgICAgICBhcHByb3ZlcklkLFxuICAgICAgICAgICAgICAgIHRwLFxuICAgICAgICAgICAgICAgIGFwcHJvdmVySW5kZXg6IGFwcHJvdmVySW5kZXggKyBjcmVhdGVBcHByb3ZlcnMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHNhSW5kZXg6IHNhSW5kZXggKyBpbnB1dC5jcmVhdGVTdWJBc3NlbWJsaWVzLmxlbmd0aCwgLy8gc2xpcEFzc2VtYmx5IGlzIGFsbCBzdWItYXNzZW1ibGllcyBjb21iaW5lZFxuICAgICAgICAgICAgICAgIHNsaXBBc3NlbWJseSxcbiAgICAgICAgICAgICAgICBhc3NlbWJseUtleVBhcmFtcyxcbiAgICAgICAgICAgICAgICBzdWJqZWN0S2V5LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IFVwZGF0ZVRwUGFzc3dvcmRSZXNldE11dGF0aW9uLFxuICAgICAgdmFyaWFibGVzOiB7XG4gICAgICAgIGlucHV0OiB7XG4gICAgICAgICAgLi4ubXV0YXRpb25JbnB1dCxcbiAgICAgICAgICBhc3NlbWJseToge1xuICAgICAgICAgICAgLi4ubXV0YXRpb25JbnB1dC5hc3NlbWJseSxcbiAgICAgICAgICAgIHVwZGF0ZVN1YkFzc2VtYmxpZXMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBjYW5jZWxSZXNldFJlcXVlc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMubXV0YXRlKHRoaXMuY2FuY2VsUmVzZXRSZXF1ZXN0TXV0YXRpb24oKSk7XG4gIH1cblxuICBjYW5jZWxSZXNldFJlcXVlc3RNdXRhdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IExyTXV0YXRpb24oe1xuICAgICAgbXV0YXRpb246IENhbmNlbFRwUGFzc3dvcmRSZXNldFJlcXVlc3RNdXRhdGlvbixcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlQXBwcm92ZXJzKGFwcHJvdmVyczogVHBOb2RlW10pOiB2b2lkIHtcbiAgICAvLyBFbnN1cmUgYWxsIGFwcHJvdmVycyBoYXZlIG1rU2hhcmVkS2V5LlxuICAgIGZvciAoY29uc3QgdHAgb2YgYXBwcm92ZXJzKSB7XG4gICAgICBpZiAoIXRwLmN1cnJlbnRVc2VyU2hhcmVkS2V5LnVzZXJTaGFyZWRLZXkubWtTaGFyZWRLZXkpIHtcbiAgICAgICAgY29uc3QgbXNnID0gYHRwICR7dHAub3RoZXIudXNlcm5hbWV9IGRvZXMgbm90IGhhdmUgbWtTaGFyZWRLZXlgO1xuICAgICAgICBjb25zb2xlLmxvZyhtc2cpO1xuICAgICAgICB0aHJvdyBuZXcgTHJCYWRBcmd1bWVudEV4Y2VwdGlvbihtc2cpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJlcGFyZUFwcHJvdmVyKHtcbiAgICBhcHByb3ZlcklkLFxuICAgIHRwLFxuICAgIGFwcHJvdmVySW5kZXgsXG4gICAgc2FJbmRleCxcbiAgICBzbGlwQXNzZW1ibHksXG4gICAgYXNzZW1ibHlLZXlQYXJhbXMsXG4gICAgc3ViamVjdEtleSxcbiAgfToge1xuICAgIGFwcHJvdmVySWQ/OiBzdHJpbmc7XG4gICAgdHA6IFRwTm9kZTtcbiAgICBhcHByb3ZlckluZGV4OiBudW1iZXI7XG4gICAgc2FJbmRleDogbnVtYmVyO1xuICAgIHNsaXBBc3NlbWJseTogc2xpcC5Bc3NlbWJseTtcbiAgICBhc3NlbWJseUtleVBhcmFtczogb2JqZWN0O1xuICAgIHN1YmplY3RLZXk6IEpXSy5LZXk7XG4gIH0pIHtcbiAgICBpZiAoIXRwLmN1cnJlbnRVc2VyU2hhcmVkS2V5LnVzZXJTaGFyZWRLZXkubWtTaGFyZWRLZXkpIHtcbiAgICAgIHRocm93IG5ldyBMckJhZEFyZ3VtZW50RXhjZXB0aW9uKFxuICAgICAgICBgVHAgJHt0cC5vdGhlci51c2VybmFtZX0gZG9lcyBub3QgaGF2ZSBta1NoYXJlZEtleS4gTmVlZCB0byByZXNoYXJlZCBpdCBmaXJzdC5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNoYXJlZEtleSA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVLZXkoKTtcbiAgICBjb25zdCB0cE1rU2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5rZXlHcmFwaC5nZXRLZXkoXG4gICAgICB0cC5jdXJyZW50VXNlclNoYXJlZEtleS51c2VyU2hhcmVkS2V5Lm1rU2hhcmVkS2V5LmlkXG4gICAgKTtcbiAgICAvLyBGb3IgVFAgdG8gYWNjZXNzIHNoYXJlZF9rZXlcbiAgICBjb25zdCB0cE1rU2hhcmVkS2V5V3JhcHBlZFNoYXJlZEtleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgdHBNa1NoYXJlZEtleS5qd2ssXG4gICAgICBzaGFyZWRLZXkudG9KU09OKHRydWUpXG4gICAgKTtcbiAgICAvLyBGb3Igc3ViamVjdCB0byBhY2Nlc3Mgc2hhcmVkX2tleVxuICAgIGNvbnN0IHN1YmplY3RLZXlXcmFwcGVkU2hhcmVkS2V5ID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBzdWJqZWN0S2V5LFxuICAgICAgc2hhcmVkS2V5LnRvSlNPTih0cnVlKVxuICAgICk7XG5cbiAgICBjb25zdCBzYVNsaXAgPSBzbGlwQXNzZW1ibHkuc3ViQXNzZW1ibGllc1tzYUluZGV4XTtcbiAgICBpZiAoc2FTbGlwLmluZGV4ICE9PSBzYUluZGV4KSB7XG4gICAgICAvLyBQYXJhbm9pYVxuICAgICAgdGhyb3cgbmV3IExyQmFkTG9naWNFeGNlcHRpb24oXG4gICAgICAgICdzbGlwIHN1YiBhc3NlbWJseSBpbmRleCBzaG91bGQgbWF0Y2ggd2l0aCBhcnJheSBpbmRleCdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gSWYgcXVvcnVtIGlzIDEsIHRoZW4gdXNpbmcgdGhlIHNhbWUgc2hhcmUgZm9yIGV2ZXJ5IG1lbWJlci5cbiAgICBjb25zdCBzaGFyZSA9XG4gICAgICBzYVNsaXAudGhyZXNob2xkID09PSAxID8gc2FTbGlwLnNoYXJlc1swXSA6IHNhU2xpcC5zaGFyZXNbYXBwcm92ZXJJbmRleF07XG5cbiAgICBjb25zdCBwYXJ0aWFsQXNzZW1ibHlLZXk6IFBhcnRpYWxBc3NlbWJseUtleSA9IHtcbiAgICAgIHNsaXAzOToge1xuICAgICAgICBzaGFyZSxcbiAgICAgICAgc3ViQXNzZW1ibHk6IHtcbiAgICAgICAgICBxdW9ydW06IHNhU2xpcC50aHJlc2hvbGQsXG4gICAgICAgICAgc2l6ZTogc2FTbGlwLnNpemUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXNzZW1ibHlLZXlQYXJhbXMsXG4gICAgfTtcblxuICAgIGNvbnNvbGUubG9nKCdwYXJ0aWFsQXNzZW1ibHlLZXknLCBwYXJ0aWFsQXNzZW1ibHlLZXkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRwTWtTaGFyZWRLZXlJZDogdHBNa1NoYXJlZEtleS5pZCxcbiAgICAgIHRwTWtTaGFyZWRLZXlXcmFwcGVkU2hhcmVkS2V5LFxuICAgICAgc3ViamVjdEtleVdyYXBwZWRTaGFyZWRLZXksXG4gICAgICBzaGFyZWRDaXBoZXJEYXRhOiBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgc2hhcmVkS2V5LFxuICAgICAgICB7IGE6ICcxMjMnIH1cbiAgICAgICksXG4gICAgICBzaGFyZWRDaXBoZXJBcHByb3ZhbERhdGE6ICcnLFxuICAgICAgc2hhcmVkQ2lwaGVyUGFydGlhbEFzc2VtYmx5S2V5OiBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgICAgc2hhcmVkS2V5LFxuICAgICAgICBwYXJ0aWFsQXNzZW1ibHlLZXlcbiAgICAgICksXG4gICAgICBhcHByb3ZlcklkOiBhcHByb3ZlcklkIHx8IHZvaWQgMCxcbiAgICAgIHRwSWQ6IGFwcHJvdmVySWQgPyB2b2lkIDAgOiB0cC5pZCxcbiAgICB9O1xuICB9XG5cbiAgLy8gUHJlcGFyZSBzbGlwMzlcbiAgcHJpdmF0ZSBhc3luYyBwcmVwYXJlU2xpcDM5KFxuICAgIHN1YkFzc2VtYmxpZXMsXG4gICAgYXNzZW1ibHlRdW9ydW06IG51bWJlcixcbiAgICByYXdBc3NlbWJseUtleTogc3RyaW5nXG4gICk6IFByb21pc2U8c2xpcC5Bc3NlbWJseT4ge1xuICAgIC8vIElzIHRoZXJlIGVub3VnaCBzdWIgYXNzZW1ibGllcyB0byBtZWV0IHF1b3J1bVxuICAgIGlmIChzdWJBc3NlbWJsaWVzLmxlbmd0aCA8IGFzc2VtYmx5UXVvcnVtKSB7XG4gICAgICB0aHJvdyBuZXcgTHJCYWRBcmd1bWVudEV4Y2VwdGlvbihcbiAgICAgICAgJ05vdCBlbm91Z2ggc3ViIGFzc2VtYmxpZXMgdG8gbWVldCBxdW9ydW0nXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNsaXBBc3NlbWJseSA9IG5ldyBzbGlwLkFzc2VtYmx5KGFzc2VtYmx5UXVvcnVtKTtcblxuICAgIHN1YkFzc2VtYmxpZXMuZm9yRWFjaCgoc2EsIGluZGV4KSA9PiB7XG4gICAgICBsZXQgYXBwcm92ZXJDb3VudCA9IHNhLmFwcHJvdmVyVHBzLmxlbmd0aDtcblxuICAgICAgLy8gc2xpcDM5IHJlc3RyaWN0cyBxdW9ydW0gPT0gMSB0byBoYXZlIG9ubHkgMSBtZW1iZXIuIFNvIHdlIGp1c3Qgc2hhcmUgdGhlIHNhbWVcbiAgICAgIC8vIHBhcnRpYWwga2V5IGZvciBhbGwgc3ViIGFzc2VtYmx5IG1lbWJlcnMuXG4gICAgICBpZiAoc2EucXVvcnVtID09PSAxKSB7XG4gICAgICAgIGFwcHJvdmVyQ291bnQgPSAxO1xuICAgICAgfVxuICAgICAgc2xpcEFzc2VtYmx5LmFkZFN1YkFzc2VtYmx5KFxuICAgICAgICBuZXcgc2xpcC5TdWJBc3NlbWJseShpbmRleCwgc2EucXVvcnVtLCBhcHByb3ZlckNvdW50KVxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuc2xpcDM5U2VydmljZS5nZW5lcmF0ZVNoYXJlcyhcbiAgICAgIHJhd0Fzc2VtYmx5S2V5LFxuICAgICAgVFBfUEFTU1dPUkRfUkVTRVRfU0xJUDM5X1BBU1NQSFJBU0UsXG4gICAgICBzbGlwQXNzZW1ibHlcbiAgICApO1xuICAgIHJldHVybiBzbGlwQXNzZW1ibHk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9jcmVhdGVSZXNldChcbiAgICBpbnB1dDogQ3JlYXRlVHBQYXNzd29yZFJlc2V0SW5wdXQsXG4gICAgY3JlYXRlU2xpcEFzc2VtYmx5XG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgLy8gQ3JlYXRlIHN1YmplY3Qga2V5XG4gICAgY29uc3QgbWFzdGVyS2V5ID0gYXdhaXQgdGhpcy5rZXlTZXJ2aWNlLmdldEN1cnJlbnRNYXN0ZXJLZXkoKTtcbiAgICBjb25zdCBzdWJqZWN0S2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xuICAgIGNvbnN0IGFzc2VtYmx5S2V5ID0gYXdhaXQgdGhpcy5rZXlGYWN0b3J5LmNyZWF0ZUtleSgpO1xuICAgIGNvbnN0IHsgazogcmF3QXNzZW1ibHlLZXksIC4uLmFzc2VtYmx5S2V5UGFyYW1zIH0gPSBhc3NlbWJseUtleS50b0pTT04oXG4gICAgICB0cnVlXG4gICAgKSBhcyBhbnk7XG4gICAgY29uc3QgYXNzZW1ibHlLZXlWZXJpZmllclByayA9IGF3YWl0IHRoaXMua2V5RmFjdG9yeS5jcmVhdGVQa2NTaWduS2V5KCk7XG4gICAgY29uc3Qgd3JhcHBlZEFzc2VtYmx5S2V5VmVyaWZpZXJQcmsgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIGFzc2VtYmx5S2V5LFxuICAgICAgYXNzZW1ibHlLZXlWZXJpZmllclByay50b0pTT04odHJ1ZSlcbiAgICApO1xuXG4gICAgY29uc3QgbWFzdGVyS2V5V3JhcHBlZFN1YmplY3RLZXkgPSBhd2FpdCB0aGlzLmVuY3J5cHRpb25TZXJ2aWNlLmVuY3J5cHRUb1N0cmluZyhcbiAgICAgIG1hc3RlcktleS5qd2ssXG4gICAgICBzdWJqZWN0S2V5LnRvSlNPTih0cnVlKVxuICAgICk7XG4gICAgY29uc3Qgc3ViamVjdEtleVdyYXBwZWRBc3NlbWJseUtleSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgc3ViamVjdEtleSxcbiAgICAgIGFzc2VtYmx5S2V5LnRvSlNPTih0cnVlKVxuICAgICk7XG5cbiAgICAvLyBFbmNyeXB0IHRoZSByb290S2V5IHdpdGggdGhlIGFzc2VtYmx5S2V5XG4gICAgY29uc3Qgcm9vdEtleSA9IGF3YWl0IHRoaXMua2V5U2VydmljZS5nZXRDdXJyZW50Um9vdEtleSgpO1xuXG4gICAgY29uc3QgYXNzZW1ibHlDaXBoZXJEYXRhID0gYXdhaXQgdGhpcy5lbmNyeXB0aW9uU2VydmljZS5lbmNyeXB0VG9TdHJpbmcoXG4gICAgICBhc3NlbWJseUtleSxcbiAgICAgIHtcbiAgICAgICAgcm9vdEtleTogcm9vdEtleS5qd2sudG9KU09OKHRydWUpLFxuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25zdCBzbGlwQXNzZW1ibHkgPSBhd2FpdCBjcmVhdGVTbGlwQXNzZW1ibHkocmF3QXNzZW1ibHlLZXkpO1xuICAgIC8vIGNvbnN0IHNsaXBBc3NlbWJseSA9IGF3YWl0IHRoaXMucHJlcGFyZVNsaXAzOShpbnB1dC5jcmVhdGVTdWJBc3NlbWJsaWVzLCBpbnB1dC5xdW9ydW0sIHJhd0Fzc2VtYmx5S2V5KTtcblxuICAgIGNvbnN0IGNyZWF0ZVN1YkFzc2VtYmxpZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGlucHV0LmNyZWF0ZVN1YkFzc2VtYmxpZXMubWFwKGFzeW5jIChzYSwgc2FJbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBzdWJqZWN0Q2lwaGVyRGF0YSA9IGF3YWl0IHRoaXMuZW5jcnlwdGlvblNlcnZpY2UuZW5jcnlwdFRvU3RyaW5nKFxuICAgICAgICAgIHN1YmplY3RLZXksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogc2EubmFtZSxcbiAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzaW5nbGVSZWplY3Q6IHNhLnNpbmdsZVJlamVjdCxcbiAgICAgICAgICBxdW9ydW06IHNhLnF1b3J1bSxcbiAgICAgICAgICBzdWJqZWN0Q2lwaGVyRGF0YSxcbiAgICAgICAgICBjcmVhdGVBcHByb3ZlcnM6IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgc2EuYXBwcm92ZXJUcHMubWFwKGFzeW5jIChhcHByb3ZlclRwLCBhcHByb3ZlckluZGV4KSA9PlxuICAgICAgICAgICAgICB0aGlzLnByZXBhcmVBcHByb3Zlcih7XG4gICAgICAgICAgICAgICAgdHA6IGFwcHJvdmVyVHAsXG4gICAgICAgICAgICAgICAgYXBwcm92ZXJJbmRleCxcbiAgICAgICAgICAgICAgICBzYUluZGV4LFxuICAgICAgICAgICAgICAgIHNsaXBBc3NlbWJseSxcbiAgICAgICAgICAgICAgICBhc3NlbWJseUtleVBhcmFtcyxcbiAgICAgICAgICAgICAgICBzdWJqZWN0S2V5LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICksXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3ViamVjdEtleSxcbiAgICAgIHNsaXBBc3NlbWJseSxcbiAgICAgIGFzc2VtYmx5S2V5UGFyYW1zLFxuICAgICAgbXV0YXRpb25JbnB1dDoge1xuICAgICAgICBhc3NlbWJseToge1xuICAgICAgICAgIHNpbmdsZVJlamVjdDogaW5wdXQuc2luZ2xlUmVqZWN0LFxuICAgICAgICAgIHF1b3J1bTogaW5wdXQucXVvcnVtLFxuICAgICAgICAgIG1hc3RlcktleUlkOiBtYXN0ZXJLZXkuaWQsXG4gICAgICAgICAgbWFzdGVyS2V5V3JhcHBlZFN1YmplY3RLZXksXG4gICAgICAgICAgc3ViamVjdEtleVdyYXBwZWRBc3NlbWJseUtleSxcbiAgICAgICAgICBzdWJqZWN0Q2lwaGVyRGF0YTogJycsXG4gICAgICAgICAgYXNzZW1ibHlDaXBoZXJEYXRhLFxuICAgICAgICAgIGNyZWF0ZVN1YkFzc2VtYmxpZXMsXG4gICAgICAgICAgYXNzZW1ibHlLZXlWZXJpZmllclBiazogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICBhc3NlbWJseUtleVZlcmlmaWVyUHJrLnRvSlNPTigpXG4gICAgICAgICAgKSxcbiAgICAgICAgICB3cmFwcGVkQXNzZW1ibHlLZXlWZXJpZmllclByayxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIl19