valtech-components 4.0.410 → 4.0.412
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/lib/components/organisms/mini-games/chessimals-engine.mjs +113 -20
- package/esm2022/lib/components/organisms/mini-games/chessimals-game.component.mjs +241 -78
- package/esm2022/lib/components/organisms/mini-games/chessimals-online.service.mjs +10 -8
- package/esm2022/lib/components/organisms/mini-games/mini-games.i18n.mjs +49 -3
- package/esm2022/lib/components/organisms/mini-games/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +409 -105
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/organisms/mini-games/chessimals-engine.d.ts +3 -2
- package/lib/components/organisms/mini-games/chessimals-game.component.d.ts +19 -1
- package/lib/components/organisms/mini-games/chessimals-online.service.d.ts +1 -1
- package/lib/components/organisms/mini-games/types.d.ts +8 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -241,7 +241,7 @@ export class ChessimalsOnlineService {
|
|
|
241
241
|
async requestRematch(gameId) {
|
|
242
242
|
const normalizedGameId = this.normalizeGameId(gameId);
|
|
243
243
|
const uid = await this.ensureUser();
|
|
244
|
-
|
|
244
|
+
return runTransaction(this.firestore, async (transaction) => {
|
|
245
245
|
const ref = this.gameRef(normalizedGameId);
|
|
246
246
|
const snapshot = await transaction.get(ref);
|
|
247
247
|
if (!snapshot.exists())
|
|
@@ -249,16 +249,16 @@ export class ChessimalsOnlineService {
|
|
|
249
249
|
const state = snapshot.data();
|
|
250
250
|
this.assertNotExpired(state);
|
|
251
251
|
if (state.status !== 'finished')
|
|
252
|
-
return;
|
|
252
|
+
return undefined;
|
|
253
253
|
if (!this.isParticipant(state, uid))
|
|
254
|
-
return;
|
|
254
|
+
return undefined;
|
|
255
255
|
const participants = state.online?.participants;
|
|
256
256
|
if (!participants?.white || !participants.black || !state.online)
|
|
257
|
-
return;
|
|
257
|
+
return undefined;
|
|
258
258
|
const currentParticipant = this.participantForSide(state, this.participantSide(state, uid));
|
|
259
259
|
const requestKey = this.participantKey(currentParticipant);
|
|
260
260
|
if (!requestKey)
|
|
261
|
-
return;
|
|
261
|
+
return undefined;
|
|
262
262
|
const requests = Array.from(new Set([...(state.online.rematchRequests ?? []), requestKey]));
|
|
263
263
|
const bothReady = [participants.white, participants.black].every((item) => this.participantRequestKeys(item).some((key) => requests.includes(key)));
|
|
264
264
|
const now = new Date();
|
|
@@ -267,7 +267,7 @@ export class ChessimalsOnlineService {
|
|
|
267
267
|
...state,
|
|
268
268
|
online: { ...state.online, updatedAt: now.toISOString(), rematchRequests: requests },
|
|
269
269
|
}));
|
|
270
|
-
return;
|
|
270
|
+
return undefined;
|
|
271
271
|
}
|
|
272
272
|
const [white, black] = Math.random() > 0.5
|
|
273
273
|
? [participants.white, participants.black]
|
|
@@ -287,7 +287,9 @@ export class ChessimalsOnlineService {
|
|
|
287
287
|
rematchRequests: [],
|
|
288
288
|
},
|
|
289
289
|
});
|
|
290
|
-
|
|
290
|
+
const sanitizedNext = this.withoutUndefined(next);
|
|
291
|
+
transaction.set(ref, sanitizedNext);
|
|
292
|
+
return sanitizedNext;
|
|
291
293
|
});
|
|
292
294
|
}
|
|
293
295
|
participantSide(state, uid = this.currentUid) {
|
|
@@ -606,4 +608,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
606
608
|
type: Injectable,
|
|
607
609
|
args: [{ providedIn: 'root' }]
|
|
608
610
|
}] });
|
|
609
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1vbmxpbmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9jaGVzc2ltYWxzLW9ubGluZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFDZCxTQUFTLEVBQ1QsR0FBRyxFQUNILE9BQU8sRUFDUCxLQUFLLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxjQUFjLEVBQ2QsTUFBTSxHQUNQLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBV2xGLE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFDO0FBQ3JELE1BQU0sV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUd4QyxNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBRW1CLGlCQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0IsY0FBUyxH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RU8saUJBQWlCO1FBQ3ZCLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLFlBQVksSUFBSSxNQUFNO1lBQUUsT0FBTyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEYsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDakYsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFXO1FBQzdCLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUN6QyxDQUFDOytHQWxwQlUsdUJBQXVCO21IQUF2Qix1QkFBdUIsY0FEVixNQUFNOzs0RkFDbkIsdUJBQXVCO2tCQURuQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXV0aCB9IGZyb20gJ0Bhbmd1bGFyL2ZpcmUvYXV0aCc7XG5pbXBvcnQge1xuICBjb2xsZWN0aW9uLFxuICBjb2xsZWN0aW9uRGF0YSxcbiAgRmlyZXN0b3JlLFxuICBkb2MsXG4gIGRvY0RhdGEsXG4gIGxpbWl0LFxuICBvcmRlckJ5LFxuICBxdWVyeSxcbiAgcnVuVHJhbnNhY3Rpb24sXG4gIHNldERvYyxcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9maXJlc3RvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwLCBvZiwgdGFwIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC9hdXRoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlyZWJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZmlyZWJhc2UvZmlyZWJhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBhcHBseUNoZXNzaW1hbHNNb3ZlLCBjcmVhdGVDaGVzc2ltYWxzR2FtZSwgcmVzaWduQ2hlc3NpbWFsc0dhbWUgfSBmcm9tICcuL2NoZXNzaW1hbHMtZW5naW5lJztcbmltcG9ydCB7IE1pbmlHYW1lUGxheWVyUHJvZmlsZVNlcnZpY2UgfSBmcm9tICcuL21pbmktZ2FtZS1wbGF5ZXItcHJvZmlsZS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENoZXNzaW1hbHNCb2FyZFNpemUsXG4gIENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gIENoZXNzaW1hbHNIaXN0b3J5RW50cnksXG4gIENoZXNzaW1hbHNNb3ZlLFxuICBDaGVzc2ltYWxzTW92ZUxvZ0VudHJ5LFxuICBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQsXG4gIENoZXNzaW1hbHNQbGF5ZXJDb2xvcixcbn0gZnJvbSAnLi90eXBlcyc7XG5cbmNvbnN0IENPTExFQ1RJT05fUEFUSCA9ICdtaW5pR2FtZXMvY2hlc3NpbWFscy9nYW1lcyc7XG5jb25zdCBHQU1FX1RUTF9NUyA9IDI0ICogNjAgKiA2MCAqIDEwMDA7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQ2hlc3NpbWFsc09ubGluZVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcmViYXNlQXV0aCA9IGluamVjdChBdXRoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoID0gaW5qZWN0KEF1dGhTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaXJlc3RvcmUgPSBpbmplY3QoRmlyZXN0b3JlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaXJlYmFzZSA9IGluamVjdChGaXJlYmFzZVNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IHByb2ZpbGVzID0gaW5qZWN0KE1pbmlHYW1lUGxheWVyUHJvZmlsZVNlcnZpY2UpO1xuXG4gIGdldCBjdXJyZW50VWlkKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZmlyZWJhc2VBdXRoLmN1cnJlbnRVc2VyPy51aWQ7XG4gIH1cblxuICBub3JtYWxpemVHYW1lSWQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcmF3ID0gKHZhbHVlID8/ICcnKS50cmltKCkudG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBkZWNvZGVkID0gdGhpcy5kZWNvZGVJbnB1dChyYXcpO1xuICAgIGNvbnN0IHBhdGhTZWdtZW50ID0gZGVjb2RlZC5zcGxpdCgvWz8jXS8pWzBdLnNwbGl0KCcvJykuZmlsdGVyKEJvb2xlYW4pLnBvcCgpID8/IGRlY29kZWQ7XG4gICAgY29uc3QgbWF0Y2ggPSBwYXRoU2VnbWVudC5tYXRjaCgvW0EtWjAtOV17NH0tP1tBLVowLTldezR9Lyk/LlswXVxuICAgICAgPz8gZGVjb2RlZC5tYXRjaCgvW0EtWjAtOV17NH0tP1tBLVowLTldezR9Lyk/LlswXVxuICAgICAgPz8gZGVjb2RlZDtcbiAgICBjb25zdCBjb21wYWN0ID0gbWF0Y2gucmVwbGFjZSgvW15BLVowLTldL2csICcnKS5zbGljZSgwLCA4KTtcbiAgICBpZiAoY29tcGFjdC5sZW5ndGggPD0gNCkgcmV0dXJuIGNvbXBhY3Q7XG4gICAgcmV0dXJuIGAke2NvbXBhY3Quc2xpY2UoMCwgNCl9LSR7Y29tcGFjdC5zbGljZSg0LCA4KX1gO1xuICB9XG5cbiAgaXNWYWxpZEdhbWVJZCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eW0EtWjAtOV17NH0tW0EtWjAtOV17NH0kLy50ZXN0KHRoaXMubm9ybWFsaXplR2FtZUlkKHZhbHVlKSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVHYW1lKGJvYXJkU2l6ZTogQ2hlc3NpbWFsc0JvYXJkU2l6ZSk6IFByb21pc2U8Q2hlc3NpbWFsc0dhbWVTdGF0ZT4ge1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgZXhwaXJlc0F0ID0gbmV3IERhdGUobm93LmdldFRpbWUoKSArIEdBTUVfVFRMX01TKTtcbiAgICBjb25zdCBnYW1lSWQgPSB0aGlzLmNyZWF0ZUdhbWVJZCgpO1xuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmNyZWF0ZVBhcnRpY2lwYW50KHVpZCwgbm93LnRvSVNPU3RyaW5nKCkpO1xuICAgIGNvbnN0IHN0YXRlID0gY3JlYXRlQ2hlc3NpbWFsc0dhbWUoYm9hcmRTaXplLCB7XG4gICAgICBpZDogZ2FtZUlkLFxuICAgICAgbW9kZTogJ29ubGluZScsXG4gICAgICBzdGF0dXM6ICd3YWl0aW5nJyxcbiAgICAgIG9ubGluZToge1xuICAgICAgICBnYW1lSWQsXG4gICAgICAgIGhvc3RVaWQ6IHVpZCxcbiAgICAgICAgY3JlYXRlZEF0OiBub3cudG9JU09TdHJpbmcoKSxcbiAgICAgICAgdXBkYXRlZEF0OiBub3cudG9JU09TdHJpbmcoKSxcbiAgICAgICAgZXhwaXJlc0F0OiBleHBpcmVzQXQudG9JU09TdHJpbmcoKSxcbiAgICAgICAgZXhwaXJlc0F0TXM6IGV4cGlyZXNBdC5nZXRUaW1lKCksXG4gICAgICAgIHJvdW5kOiAxLFxuICAgICAgICBsb2JieTogaG9zdCxcbiAgICAgICAgcmVtYXRjaFJlcXVlc3RzOiBbXSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICBjb25zdCBuZXh0ID0gdGhpcy53aXRoVXBkYXRlZEF0KHN0YXRlLCBub3cpO1xuICAgIGF3YWl0IHNldERvYyh0aGlzLmdhbWVSZWYoZ2FtZUlkKSwgbmV4dCk7XG4gICAgYXdhaXQgdGhpcy5zYXZlQ3VycmVudFVzZXJIaXN0b3J5KG5leHQpO1xuICAgIHJldHVybiBuZXh0O1xuICB9XG5cbiAgd2F0Y2hHYW1lKGdhbWVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGVzc2ltYWxzR2FtZVN0YXRlIHwgbnVsbD4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRHYW1lSWQgPSB0aGlzLm5vcm1hbGl6ZUdhbWVJZChnYW1lSWQpO1xuICAgIHJldHVybiBkb2NEYXRhKHRoaXMuZ2FtZVJlZihub3JtYWxpemVkR2FtZUlkKSkucGlwZShcbiAgICAgIG1hcCgodmFsdWUpID0+ICh2YWx1ZSA/ICh2YWx1ZSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlKSA6IG51bGwpKSxcbiAgICAgIHRhcCgoc3RhdGUpID0+IHtcbiAgICAgICAgaWYgKHN0YXRlKSB2b2lkIHRoaXMuc2F2ZUN1cnJlbnRVc2VySGlzdG9yeShzdGF0ZSk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgd2F0Y2hIaXN0b3J5KGxpbWl0Q291bnQgPSA4KTogT2JzZXJ2YWJsZTxDaGVzc2ltYWxzSGlzdG9yeUVudHJ5W10+IHtcbiAgICBjb25zdCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQ7XG4gICAgaWYgKCF1aWQpIHJldHVybiBvZihbXSk7XG4gICAgY29uc3QgaGlzdG9yeVF1ZXJ5ID0gcXVlcnkoXG4gICAgICBjb2xsZWN0aW9uKHRoaXMuZmlyZXN0b3JlLCB0aGlzLmhpc3RvcnlQYXRoKHVpZCkpLFxuICAgICAgb3JkZXJCeSgndXBkYXRlZEF0JywgJ2Rlc2MnKSxcbiAgICAgIGxpbWl0KGxpbWl0Q291bnQpLFxuICAgICk7XG4gICAgcmV0dXJuIGNvbGxlY3Rpb25EYXRhKGhpc3RvcnlRdWVyeSkucGlwZShtYXAoKGl0ZW1zKSA9PiBpdGVtcyBhcyBDaGVzc2ltYWxzSGlzdG9yeUVudHJ5W10pKTtcbiAgfVxuXG4gIGFzeW5jIGpvaW5HYW1lKGdhbWVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEdhbWVJZCA9IHRoaXMubm9ybWFsaXplR2FtZUlkKGdhbWVJZCk7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgYXdhaXQgcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGFzeW5jICh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0cmFuc2FjdGlvbi5nZXQocmVmKTtcbiAgICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX05PVF9GT1VORCcpO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LmRhdGEoKSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgICAgdGhpcy5hc3NlcnROb3RFeHBpcmVkKHN0YXRlKTtcblxuICAgICAgaWYgKHRoaXMuaXNQYXJ0aWNpcGFudChzdGF0ZSwgdWlkKSkgcmV0dXJuO1xuICAgICAgaWYgKHRoaXMuaXNIb3N0V2FpdGluZyhzdGF0ZSwgdWlkKSkgcmV0dXJuO1xuICAgICAgaWYgKHN0YXRlLnN0YXR1cyAhPT0gJ3dhaXRpbmcnIHx8ICFzdGF0ZS5vbmxpbmU/LmxvYmJ5KSByZXR1cm47XG5cbiAgICAgIGlmICh0aGlzLmlzUGVuZGluZ0d1ZXN0KHN0YXRlLCB1aWQpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBndWVzdCA9IHRoaXMuY3JlYXRlUGFydGljaXBhbnQodWlkLCBub3cudG9JU09TdHJpbmcoKSk7XG4gICAgICBjb25zdCBuZXh0OiBDaGVzc2ltYWxzR2FtZVN0YXRlID0ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgb25saW5lOiB7XG4gICAgICAgICAgLi4uc3RhdGUub25saW5lLFxuICAgICAgICAgIHVwZGF0ZWRBdDogbm93LnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgcGVuZGluZ0d1ZXN0OiBndWVzdCxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIHRoaXMud2l0aG91dFVuZGVmaW5lZChuZXh0KSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhY2NlcHRHdWVzdChnYW1lSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRHYW1lSWQgPSB0aGlzLm5vcm1hbGl6ZUdhbWVJZChnYW1lSWQpO1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGF3YWl0IHJ1blRyYW5zYWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBhc3luYyAodHJhbnNhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZ2FtZVJlZihub3JtYWxpemVkR2FtZUlkKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgdHJhbnNhY3Rpb24uZ2V0KHJlZik7XG4gICAgICBpZiAoIXNuYXBzaG90LmV4aXN0cygpKSB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfR0FNRV9OT1RfRk9VTkQnKTtcblxuICAgICAgY29uc3Qgc3RhdGUgPSBzbmFwc2hvdC5kYXRhKCkgYXMgQ2hlc3NpbWFsc0dhbWVTdGF0ZTtcbiAgICAgIHRoaXMuYXNzZXJ0Tm90RXhwaXJlZChzdGF0ZSk7XG4gICAgICBpZiAoIXRoaXMuaXNIb3N0V2FpdGluZyhzdGF0ZSwgdWlkKSB8fCAhc3RhdGUub25saW5lLnBlbmRpbmdHdWVzdCkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgICAgY29uc3QgW2hvc3RTaWRlLCBndWVzdFNpZGVdID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IFsnd2hpdGUnLCAnYmxhY2snXSA6IFsnYmxhY2snLCAnd2hpdGUnXTtcbiAgICAgIGNvbnN0IGxvYmJ5ID0gc3RhdGUub25saW5lLmxvYmJ5O1xuICAgICAgY29uc3QgZ3Vlc3QgPSBzdGF0ZS5vbmxpbmUucGVuZGluZ0d1ZXN0O1xuICAgICAgY29uc3Qgb25saW5lOiBOb25OdWxsYWJsZTxDaGVzc2ltYWxzR2FtZVN0YXRlWydvbmxpbmUnXT4gPSB7IC4uLnN0YXRlLm9ubGluZSB9O1xuICAgICAgZGVsZXRlIG9ubGluZS5sb2JieTtcbiAgICAgIGRlbGV0ZSBvbmxpbmUucGVuZGluZ0d1ZXN0O1xuXG4gICAgICBjb25zdCBuZXh0OiBDaGVzc2ltYWxzR2FtZVN0YXRlID0ge1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnLFxuICAgICAgICBjdXJyZW50VHVybjogJ3doaXRlJyxcbiAgICAgICAgb25saW5lOiB7XG4gICAgICAgICAgLi4ub25saW5lLFxuICAgICAgICAgIHVwZGF0ZWRBdDogbm93LnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgcGFydGljaXBhbnRzOiB7XG4gICAgICAgICAgICBbaG9zdFNpZGVdOiB7IC4uLmxvYmJ5LCBzaWRlOiBob3N0U2lkZSBhcyBDaGVzc2ltYWxzUGxheWVyQ29sb3IgfSxcbiAgICAgICAgICAgIFtndWVzdFNpZGVdOiB7IC4uLmd1ZXN0LCBzaWRlOiBndWVzdFNpZGUgYXMgQ2hlc3NpbWFsc1BsYXllckNvbG9yIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZW1hdGNoUmVxdWVzdHM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgdHJhbnNhY3Rpb24uc2V0KHJlZiwgdGhpcy53aXRob3V0VW5kZWZpbmVkKG5leHQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlamVjdEd1ZXN0KGdhbWVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEdhbWVJZCA9IHRoaXMubm9ybWFsaXplR2FtZUlkKGdhbWVJZCk7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgYXdhaXQgcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGFzeW5jICh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0cmFuc2FjdGlvbi5nZXQocmVmKTtcbiAgICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX05PVF9GT1VORCcpO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LmRhdGEoKSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgICAgdGhpcy5hc3NlcnROb3RFeHBpcmVkKHN0YXRlKTtcbiAgICAgIGlmICghdGhpcy5pc0hvc3RXYWl0aW5nKHN0YXRlLCB1aWQpIHx8ICFzdGF0ZS5vbmxpbmUucGVuZGluZ0d1ZXN0KSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBvbmxpbmU6IE5vbk51bGxhYmxlPENoZXNzaW1hbHNHYW1lU3RhdGVbJ29ubGluZSddPiA9IHsgLi4uc3RhdGUub25saW5lLCB1cGRhdGVkQXQ6IG5vdy50b0lTT1N0cmluZygpIH07XG4gICAgICBkZWxldGUgb25saW5lLnBlbmRpbmdHdWVzdDtcbiAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIHRoaXMud2l0aG91dFVuZGVmaW5lZCh7IC4uLnN0YXRlLCBvbmxpbmUgfSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgbW92ZShnYW1lSWQ6IHN0cmluZywgbW92ZTogQ2hlc3NpbWFsc01vdmUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBub3JtYWxpemVkR2FtZUlkID0gdGhpcy5ub3JtYWxpemVHYW1lSWQoZ2FtZUlkKTtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBjb25zdCBvcGVyYXRpb25JZCA9IHRoaXMuY3JlYXRlT3BlcmF0aW9uSWQoKTtcbiAgICBsZXQgcmVqZWN0ZWRFcnJvcjogRXJyb3IgfCB1bmRlZmluZWQ7XG4gICAgYXdhaXQgcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGFzeW5jICh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0cmFuc2FjdGlvbi5nZXQocmVmKTtcbiAgICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX05PVF9GT1VORCcpO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LmRhdGEoKSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgICAgY29uc3Qgc2lkZSA9IHRoaXMucGFydGljaXBhbnRTaWRlKHN0YXRlLCB1aWQpO1xuICAgICAgY29uc3QgcmVqZWN0ID0gKGNvZGU6IHN0cmluZywgZXJyb3I/OiB1bmtub3duKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IG5leHRFcnJvciA9IG5ldyBFcnJvcihjb2RlKTtcbiAgICAgICAgcmVqZWN0ZWRFcnJvciA9IG5leHRFcnJvcjtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmNyZWF0ZU1vdmVMb2dFbnRyeSh7XG4gICAgICAgICAgaWQ6IG9wZXJhdGlvbklkLFxuICAgICAgICAgIHVpZCxcbiAgICAgICAgICBzaWRlLFxuICAgICAgICAgIHN0YXR1czogJ3JlamVjdGVkJyxcbiAgICAgICAgICBjb2RlLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogY29kZSxcbiAgICAgICAgICBtb3ZlLFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICB9KTtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0KHJlZiwgdGhpcy53aXRoTW92ZUxvZyhzdGF0ZSwgZW50cnkpKTtcbiAgICAgIH07XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuYXNzZXJ0Tm90RXhwaXJlZChzdGF0ZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZWplY3QoJ0NIRVNTSU1BTFNfR0FNRV9FWFBJUkVEJywgZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghc2lkZSB8fCBzaWRlICE9PSBzdGF0ZS5jdXJyZW50VHVybikge1xuICAgICAgICByZWplY3QoJ0NIRVNTSU1BTFNfTk9UX1lPVVJfVFVSTicpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWQgPSBhcHBseUNoZXNzaW1hbHNNb3ZlKHN0YXRlLCBtb3ZlKTtcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmNyZWF0ZU1vdmVMb2dFbnRyeSh7XG4gICAgICAgICAgaWQ6IG9wZXJhdGlvbklkLFxuICAgICAgICAgIHVpZCxcbiAgICAgICAgICBzaWRlLFxuICAgICAgICAgIHN0YXR1czogJ2FjY2VwdGVkJyxcbiAgICAgICAgICBtb3ZlLFxuICAgICAgICAgIHN0YXRlLFxuICAgICAgICAgIHVwZGF0ZWQsXG4gICAgICAgIH0pO1xuICAgICAgICB0cmFuc2FjdGlvbi5zZXQocmVmLCB0aGlzLndpdGhNb3ZlTG9nKHVwZGF0ZWQsIGVudHJ5KSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnQ0hFU1NJTUFMU19JTExFR0FMX01PVkUnLCBlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHJlamVjdGVkRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0NoZXNzaW1hbHNdIG9ubGluZSBtb3ZlIHJlamVjdGVkJywgeyBnYW1lSWQ6IG5vcm1hbGl6ZWRHYW1lSWQsIG9wZXJhdGlvbklkLCBtb3ZlLCBjb2RlOiByZWplY3RlZEVycm9yLm1lc3NhZ2UgfSk7XG4gICAgICB0aHJvdyByZWplY3RlZEVycm9yO1xuICAgIH1cbiAgICBjb25zb2xlLmluZm8oJ1tDaGVzc2ltYWxzXSBvbmxpbmUgbW92ZSBhY2NlcHRlZCcsIHsgZ2FtZUlkOiBub3JtYWxpemVkR2FtZUlkLCBvcGVyYXRpb25JZCwgbW92ZSB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlc2lnbihnYW1lSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRHYW1lSWQgPSB0aGlzLm5vcm1hbGl6ZUdhbWVJZChnYW1lSWQpO1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGF3YWl0IHJ1blRyYW5zYWN0aW9uKHRoaXMuZmlyZXN0b3JlLCBhc3luYyAodHJhbnNhY3Rpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuZ2FtZVJlZihub3JtYWxpemVkR2FtZUlkKTtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gYXdhaXQgdHJhbnNhY3Rpb24uZ2V0KHJlZik7XG4gICAgICBpZiAoIXNuYXBzaG90LmV4aXN0cygpKSB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfR0FNRV9OT1RfRk9VTkQnKTtcblxuICAgICAgY29uc3Qgc3RhdGUgPSBzbmFwc2hvdC5kYXRhKCkgYXMgQ2hlc3NpbWFsc0dhbWVTdGF0ZTtcbiAgICAgIHRoaXMuYXNzZXJ0Tm90RXhwaXJlZChzdGF0ZSk7XG4gICAgICBjb25zdCBzaWRlID0gdGhpcy5wYXJ0aWNpcGFudFNpZGUoc3RhdGUsIHVpZCk7XG4gICAgICBpZiAoIXNpZGUgfHwgc3RhdGUuc3RhdHVzID09PSAnZmluaXNoZWQnKSByZXR1cm47XG5cbiAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIHRoaXMud2l0aFVwZGF0ZWRBdChyZXNpZ25DaGVzc2ltYWxzR2FtZShzdGF0ZSwgc2lkZSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHJlcXVlc3RSZW1hdGNoKGdhbWVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEdhbWVJZCA9IHRoaXMubm9ybWFsaXplR2FtZUlkKGdhbWVJZCk7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgYXdhaXQgcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGFzeW5jICh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0cmFuc2FjdGlvbi5nZXQocmVmKTtcbiAgICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX05PVF9GT1VORCcpO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LmRhdGEoKSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgICAgdGhpcy5hc3NlcnROb3RFeHBpcmVkKHN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZS5zdGF0dXMgIT09ICdmaW5pc2hlZCcpIHJldHVybjtcbiAgICAgIGlmICghdGhpcy5pc1BhcnRpY2lwYW50KHN0YXRlLCB1aWQpKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHBhcnRpY2lwYW50cyA9IHN0YXRlLm9ubGluZT8ucGFydGljaXBhbnRzO1xuICAgICAgaWYgKCFwYXJ0aWNpcGFudHM/LndoaXRlIHx8ICFwYXJ0aWNpcGFudHMuYmxhY2sgfHwgIXN0YXRlLm9ubGluZSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBjdXJyZW50UGFydGljaXBhbnQgPSB0aGlzLnBhcnRpY2lwYW50Rm9yU2lkZShzdGF0ZSwgdGhpcy5wYXJ0aWNpcGFudFNpZGUoc3RhdGUsIHVpZCkpO1xuICAgICAgY29uc3QgcmVxdWVzdEtleSA9IHRoaXMucGFydGljaXBhbnRLZXkoY3VycmVudFBhcnRpY2lwYW50KTtcbiAgICAgIGlmICghcmVxdWVzdEtleSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCByZXF1ZXN0cyA9IEFycmF5LmZyb20obmV3IFNldChbLi4uKHN0YXRlLm9ubGluZS5yZW1hdGNoUmVxdWVzdHMgPz8gW10pLCByZXF1ZXN0S2V5XSkpO1xuICAgICAgY29uc3QgYm90aFJlYWR5ID0gW3BhcnRpY2lwYW50cy53aGl0ZSwgcGFydGljaXBhbnRzLmJsYWNrXS5ldmVyeSgoaXRlbSkgPT5cbiAgICAgICAgdGhpcy5wYXJ0aWNpcGFudFJlcXVlc3RLZXlzKGl0ZW0pLnNvbWUoKGtleSkgPT4gcmVxdWVzdHMuaW5jbHVkZXMoa2V5KSksXG4gICAgICApO1xuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcblxuICAgICAgaWYgKCFib3RoUmVhZHkpIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0KHJlZiwgdGhpcy53aXRob3V0VW5kZWZpbmVkKHtcbiAgICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgICBvbmxpbmU6IHsgLi4uc3RhdGUub25saW5lLCB1cGRhdGVkQXQ6IG5vdy50b0lTT1N0cmluZygpLCByZW1hdGNoUmVxdWVzdHM6IHJlcXVlc3RzIH0sXG4gICAgICAgIH0pKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBbd2hpdGUsIGJsYWNrXSA9IE1hdGgucmFuZG9tKCkgPiAwLjVcbiAgICAgICAgPyBbcGFydGljaXBhbnRzLndoaXRlLCBwYXJ0aWNpcGFudHMuYmxhY2tdXG4gICAgICAgIDogW3BhcnRpY2lwYW50cy5ibGFjaywgcGFydGljaXBhbnRzLndoaXRlXTtcbiAgICAgIGNvbnN0IG5leHQgPSBjcmVhdGVDaGVzc2ltYWxzR2FtZShzdGF0ZS5ib2FyZFNpemUsIHtcbiAgICAgICAgaWQ6IHN0YXRlLmlkLFxuICAgICAgICBtb2RlOiAnb25saW5lJyxcbiAgICAgICAgc3RhdHVzOiAnaW5fcHJvZ3Jlc3MnLFxuICAgICAgICBvbmxpbmU6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5vbmxpbmUsXG4gICAgICAgICAgdXBkYXRlZEF0OiBub3cudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICByb3VuZDogc3RhdGUub25saW5lLnJvdW5kICsgMSxcbiAgICAgICAgICBwYXJ0aWNpcGFudHM6IHtcbiAgICAgICAgICAgIHdoaXRlOiB7IC4uLndoaXRlLCBzaWRlOiAnd2hpdGUnIH0sXG4gICAgICAgICAgICBibGFjazogeyAuLi5ibGFjaywgc2lkZTogJ2JsYWNrJyB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVtYXRjaFJlcXVlc3RzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuXG4gICAgICB0cmFuc2FjdGlvbi5zZXQocmVmLCB0aGlzLndpdGhvdXRVbmRlZmluZWQobmV4dCkpO1xuICAgIH0pO1xuICB9XG5cbiAgcGFydGljaXBhbnRTaWRlKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBDaGVzc2ltYWxzUGxheWVyQ29sb3IgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGVudHJpZXMgPSB0aGlzLnBhcnRpY2lwYW50RW50cmllcyhzdGF0ZSk7XG4gICAgY29uc3QgY3VycmVudFNlYXRLZXkgPSB0aGlzLmN1cnJlbnRTZWF0S2V5KHVpZCk7XG4gICAgaWYgKGN1cnJlbnRTZWF0S2V5KSB7XG4gICAgICBjb25zdCBzZWF0TWF0Y2ggPSBlbnRyaWVzLmZpbmQoKFssIHBhcnRpY2lwYW50XSkgPT4gdGhpcy5wYXJ0aWNpcGFudEtleShwYXJ0aWNpcGFudCkgPT09IGN1cnJlbnRTZWF0S2V5KTtcbiAgICAgIGlmIChzZWF0TWF0Y2gpIHJldHVybiBzZWF0TWF0Y2hbMF07XG4gICAgfVxuXG4gICAgaWYgKHVpZCkge1xuICAgICAgY29uc3QgY3VycmVudFByb2ZpbGUgPSB0aGlzLnByb2ZpbGVzLmFjdGl2ZVByb2ZpbGUoKTtcbiAgICAgIGlmIChjdXJyZW50UHJvZmlsZSkge1xuICAgICAgICBjb25zdCBsZWdhY3lQcm9maWxlTWF0Y2ggPSBlbnRyaWVzLmZpbmQoKFssIHBhcnRpY2lwYW50XSkgPT5cbiAgICAgICAgICBwYXJ0aWNpcGFudC51aWQgPT09IHVpZFxuICAgICAgICAgICYmIHBhcnRpY2lwYW50LmF2YXRhciA9PT0gY3VycmVudFByb2ZpbGUuYXZhdGFyXG4gICAgICAgICAgJiYgdGhpcy5ub3JtYWxpemVDb2xvcihwYXJ0aWNpcGFudC5jb2xvcikgPT09IHRoaXMubm9ybWFsaXplQ29sb3IoY3VycmVudFByb2ZpbGUuY29sb3IpLFxuICAgICAgICApO1xuICAgICAgICBpZiAobGVnYWN5UHJvZmlsZU1hdGNoKSByZXR1cm4gbGVnYWN5UHJvZmlsZU1hdGNoWzBdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB1aWRNYXRjaGVzID0gZW50cmllcy5maWx0ZXIoKFssIHBhcnRpY2lwYW50XSkgPT4gcGFydGljaXBhbnQudWlkID09PSB1aWQpO1xuICAgICAgaWYgKHVpZE1hdGNoZXMubGVuZ3RoID09PSAxKSByZXR1cm4gdWlkTWF0Y2hlc1swXVswXTtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NvdW50VXNlcklkID0gdGhpcy5hdXRoLnVzZXIoKT8udXNlcklkO1xuICAgIGlmIChhY2NvdW50VXNlcklkKSB7XG4gICAgICBjb25zdCBhY2NvdW50TWF0Y2hlcyA9IGVudHJpZXMuZmlsdGVyKChbLCBwYXJ0aWNpcGFudF0pID0+IHBhcnRpY2lwYW50LmFjY291bnRVc2VySWQgPT09IGFjY291bnRVc2VySWQpO1xuICAgICAgaWYgKGFjY291bnRNYXRjaGVzLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGFjY291bnRNYXRjaGVzWzBdWzBdO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpc1BhcnRpY2lwYW50KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnBhcnRpY2lwYW50U2lkZShzdGF0ZSwgdWlkKTtcbiAgfVxuXG4gIGlzSG9zdFdhaXRpbmcoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIHVpZCA9IHRoaXMuY3VycmVudFVpZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5zdGF0dXMgPT09ICd3YWl0aW5nJyAmJiB0aGlzLm1hdGNoZXNDdXJyZW50UGFydGljaXBhbnQoc3RhdGUub25saW5lPy5sb2JieSwgdWlkKTtcbiAgfVxuXG4gIGlzUGVuZGluZ0d1ZXN0KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc3RhdGUuc3RhdHVzID09PSAnd2FpdGluZycgJiYgdGhpcy5tYXRjaGVzQ3VycmVudFBhcnRpY2lwYW50KHN0YXRlLm9ubGluZT8ucGVuZGluZ0d1ZXN0LCB1aWQpO1xuICB9XG5cbiAgaGFzQ3VycmVudFJlbWF0Y2hSZXF1ZXN0KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBib29sZWFuIHtcbiAgICBjb25zdCBzaWRlID0gdGhpcy5wYXJ0aWNpcGFudFNpZGUoc3RhdGUsIHVpZCk7XG4gICAgY29uc3QgcGFydGljaXBhbnQgPSB0aGlzLnBhcnRpY2lwYW50Rm9yU2lkZShzdGF0ZSwgc2lkZSk7XG4gICAgcmV0dXJuIHRoaXMucGFydGljaXBhbnRSZXF1ZXN0S2V5cyhwYXJ0aWNpcGFudCkuc29tZSgoa2V5KSA9PiAoc3RhdGUub25saW5lPy5yZW1hdGNoUmVxdWVzdHMgPz8gW10pLmluY2x1ZGVzKGtleSkpO1xuICB9XG5cbiAgaGFzT3Bwb25lbnRSZW1hdGNoUmVxdWVzdChzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgdWlkID0gdGhpcy5jdXJyZW50VWlkKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgc2lkZSA9IHRoaXMucGFydGljaXBhbnRTaWRlKHN0YXRlLCB1aWQpO1xuICAgIGlmICghc2lkZSkgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IG9wcG9uZW50ID0gdGhpcy5wYXJ0aWNpcGFudEZvclNpZGUoc3RhdGUsIHNpZGUgPT09ICd3aGl0ZScgPyAnYmxhY2snIDogJ3doaXRlJyk7XG4gICAgcmV0dXJuIHRoaXMucGFydGljaXBhbnRSZXF1ZXN0S2V5cyhvcHBvbmVudCkuc29tZSgoa2V5KSA9PiAoc3RhdGUub25saW5lPy5yZW1hdGNoUmVxdWVzdHMgPz8gW10pLmluY2x1ZGVzKGtleSkpO1xuICB9XG5cbiAgcGFydGljaXBhbnRLZXkocGFydGljaXBhbnQ/OiBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBwYXJ0aWNpcGFudD8uc2VhdEtleVxuICAgICAgfHwgdGhpcy5idWlsZFNlYXRLZXkocGFydGljaXBhbnQ/LnVpZCwgcGFydGljaXBhbnQ/LnByb2ZpbGVJZClcbiAgICAgIHx8IHBhcnRpY2lwYW50Py5wcm9maWxlSWRcbiAgICAgIHx8IHBhcnRpY2lwYW50Py5hY2NvdW50VXNlcklkXG4gICAgICB8fCBwYXJ0aWNpcGFudD8udWlkXG4gICAgICB8fCAnJztcbiAgfVxuXG4gIHNoYXJlVXJsKGdhbWVJZDogc3RyaW5nLCBiYXNlUm91dGUgPSAnL21pbmktZ2FtZXMnKTogc3RyaW5nIHtcbiAgICBjb25zdCBvcmlnaW4gPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/ICcnIDogd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcbiAgICBjb25zdCBub3JtYWxpemVkQmFzZVJvdXRlID0gYC8ke2Jhc2VSb3V0ZS5yZXBsYWNlKC9eXFwvK3xcXC8rJC9nLCAnJykgfHwgJ21pbmktZ2FtZXMnfWA7XG4gICAgcmV0dXJuIGAke29yaWdpbn0ke25vcm1hbGl6ZWRCYXNlUm91dGV9L2NoZXNzaW1hbHMvJHtlbmNvZGVVUklDb21wb25lbnQodGhpcy5ub3JtYWxpemVHYW1lSWQoZ2FtZUlkKSl9YDtcbiAgfVxuXG4gIHByb2plY3Rpb25TaGFyZVVybChnYW1lSWQ6IHN0cmluZywgYmFzZVJvdXRlID0gJy9taW5pLWdhbWVzJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3RoaXMuc2hhcmVVcmwoZ2FtZUlkLCBiYXNlUm91dGUpfS9wcm9qZWN0aW9uYDtcbiAgfVxuXG4gIGFzeW5jIHNhdmVDdXJyZW50VXNlckhpc3Rvcnkoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQ7XG4gICAgaWYgKCF1aWQgfHwgc3RhdGUubW9kZSAhPT0gJ29ubGluZScpIHJldHVybjtcbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuY3JlYXRlSGlzdG9yeUVudHJ5KHN0YXRlLCB1aWQpO1xuICAgIGlmICghZW50cnkpIHJldHVybjtcbiAgICBhd2FpdCBzZXREb2ModGhpcy5oaXN0b3J5UmVmKHVpZCwgc3RhdGUuaWQpLCB0aGlzLndpdGhvdXRVbmRlZmluZWQoZW50cnkpLCB7IG1lcmdlOiB0cnVlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnYW1lUmVmKGdhbWVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvYyh0aGlzLmZpcmVzdG9yZSwgYCR7Q09MTEVDVElPTl9QQVRIfS8ke2dhbWVJZH1gKTtcbiAgfVxuXG4gIHByaXZhdGUgaGlzdG9yeVBhdGgodWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgdXNlcnMvJHt1aWR9L21pbmlHYW1lcy9jaGVzc2ltYWxzL2hpc3RvcnlgO1xuICB9XG5cbiAgcHJpdmF0ZSBoaXN0b3J5UmVmKHVpZDogc3RyaW5nLCBnYW1lSWQ6IHN0cmluZykge1xuICAgIHJldHVybiBkb2ModGhpcy5maXJlc3RvcmUsIGAke3RoaXMuaGlzdG9yeVBhdGgodWlkKX0vJHtnYW1lSWR9YCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGVuc3VyZVVzZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBhd2FpdCB0aGlzLmZpcmViYXNlLndoZW5GaXJlYmFzZUF1dGhSZWFkeSgpO1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmZpcmViYXNlQXV0aC5jdXJyZW50VXNlcjtcbiAgICBpZiAodXNlcj8udWlkKSB7XG4gICAgICBhd2FpdCB1c2VyLmdldElkVG9rZW4oKTtcbiAgICAgIHJldHVybiB1c2VyLnVpZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0xPR0lOX1JFUVVJUkVEJyk7XG4gIH1cblxuICBwcml2YXRlIGRlY29kZUlucHV0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVBhcnRpY2lwYW50KHVpZDogc3RyaW5nLCBqb2luZWRBdDogc3RyaW5nKTogQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50IHtcbiAgICBjb25zdCB1c2VyID0gdGhpcy5hdXRoLnVzZXIoKTtcbiAgICBjb25zdCBmaXJlYmFzZVVzZXIgPSB0aGlzLmZpcmViYXNlQXV0aC5jdXJyZW50VXNlcjtcbiAgICBjb25zdCBwcm9maWxlID0gdGhpcy5wcm9maWxlcy5hY3RpdmVQcm9maWxlKCk7XG4gICAgY29uc3QgaGFuZGxlID0gdGhpcy5ub3JtYWxpemVIYW5kbGUodXNlcj8uaGFuZGxlKTtcbiAgICBjb25zdCBhdmF0YXJVcmwgPSB1c2VyPy5hdmF0YXJVcmw/LnRyaW0oKSB8fCBmaXJlYmFzZVVzZXI/LnBob3RvVVJMPy50cmltKCkgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGVtYWlsID0gdXNlcj8uZW1haWw/LnRyaW0oKSB8fCBmaXJlYmFzZVVzZXI/LmVtYWlsPy50cmltKCkgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2ZpbGVJZCA9IHByb2ZpbGU/LmlkID8/IHVzZXI/LnVzZXJJZCA/PyB1aWQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdWlkLFxuICAgICAgYWNjb3VudFVzZXJJZDogdXNlcj8udXNlcklkLFxuICAgICAgcHJvZmlsZUlkLFxuICAgICAgc2VhdEtleTogdGhpcy5idWlsZFNlYXRLZXkodWlkLCBwcm9maWxlSWQpLFxuICAgICAgbmFtZTogdXNlcj8ubmFtZT8udHJpbSgpXG4gICAgICAgIHx8IGZpcmViYXNlVXNlcj8uZGlzcGxheU5hbWU/LnRyaW0oKVxuICAgICAgICB8fCBlbWFpbFxuICAgICAgICB8fCB0aGlzLnByb2ZpbGVzLmRpc3BsYXlOYW1lKHByb2ZpbGUsICdKdWdhZG9yJyksXG4gICAgICBoYW5kbGUsXG4gICAgICBlbWFpbCxcbiAgICAgIGF2YXRhcjogcHJvZmlsZT8uYXZhdGFyID8/ICfimZ/vuI8nLFxuICAgICAgYXZhdGFyVXJsLFxuICAgICAgY29sb3I6IHByb2ZpbGU/LmNvbG9yID8/ICcjZmYwMGIyJyxcbiAgICAgIGpvaW5lZEF0LFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUhhbmRsZShoYW5kbGU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHRyaW1tZWQgPSBoYW5kbGU/LnRyaW0oKTtcbiAgICBpZiAoIXRyaW1tZWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRyaW1tZWQuc3RhcnRzV2l0aCgnQCcpID8gdHJpbW1lZCA6IGBAJHt0cmltbWVkfWA7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU2VhdEtleSh1aWQ/OiBzdHJpbmcsIHByb2ZpbGVJZD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFVpZCA9IHVpZD8udHJpbSgpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9maWxlSWQgPSBwcm9maWxlSWQ/LnRyaW0oKTtcbiAgICBpZiAoIW5vcm1hbGl6ZWRVaWQgfHwgIW5vcm1hbGl6ZWRQcm9maWxlSWQpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGAke25vcm1hbGl6ZWRVaWR9OiR7bm9ybWFsaXplZFByb2ZpbGVJZH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBjdXJyZW50U2VhdEtleSh1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkU2VhdEtleSh1aWQsIHRoaXMucHJvZmlsZXMuYWN0aXZlUHJvZmlsZSgpPy5pZCk7XG4gIH1cblxuICBwcml2YXRlIHBhcnRpY2lwYW50Rm9yU2lkZShcbiAgICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgICBzaWRlPzogQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxuICApOiBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQgfCB1bmRlZmluZWQge1xuICAgIGlmICghc2lkZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RhdGUub25saW5lPy5wYXJ0aWNpcGFudHM/LltzaWRlXTtcbiAgfVxuXG4gIHByaXZhdGUgcGFydGljaXBhbnRFbnRyaWVzKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlKTogW0NoZXNzaW1hbHNQbGF5ZXJDb2xvciwgQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50XVtdIHtcbiAgICBjb25zdCBwYXJ0aWNpcGFudHMgPSBzdGF0ZS5vbmxpbmU/LnBhcnRpY2lwYW50cztcbiAgICByZXR1cm4gKFsnd2hpdGUnLCAnYmxhY2snXSBhcyBDaGVzc2ltYWxzUGxheWVyQ29sb3JbXSlcbiAgICAgIC5tYXAoKHNpZGUpID0+IFtzaWRlLCBwYXJ0aWNpcGFudHM/LltzaWRlXV0gYXMgW0NoZXNzaW1hbHNQbGF5ZXJDb2xvciwgQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50IHwgdW5kZWZpbmVkXSlcbiAgICAgIC5maWx0ZXIoKGVudHJ5KTogZW50cnkgaXMgW0NoZXNzaW1hbHNQbGF5ZXJDb2xvciwgQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50XSA9PiAhIWVudHJ5WzFdKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFydGljaXBhbnRSZXF1ZXN0S2V5cyhwYXJ0aWNpcGFudD86IENoZXNzaW1hbHNPbmxpbmVQYXJ0aWNpcGFudCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXBhcnRpY2lwYW50KSByZXR1cm4gW107XG4gICAgY29uc3Qga2V5cyA9IFtcbiAgICAgIHRoaXMucGFydGljaXBhbnRLZXkocGFydGljaXBhbnQpLFxuICAgICAgcGFydGljaXBhbnQudWlkLFxuICAgICAgcGFydGljaXBhbnQuYWNjb3VudFVzZXJJZCxcbiAgICAgIHBhcnRpY2lwYW50LnByb2ZpbGVJZCxcbiAgICBdO1xuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoa2V5cy5maWx0ZXIoKGtleSk6IGtleSBpcyBzdHJpbmcgPT4gISFrZXkpKSk7XG4gIH1cblxuICBwcml2YXRlIG1hdGNoZXNDdXJyZW50UGFydGljaXBhbnQocGFydGljaXBhbnQ/OiBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQsIHVpZCA9IHRoaXMuY3VycmVudFVpZCk6IGJvb2xlYW4ge1xuICAgIGlmICghcGFydGljaXBhbnQpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHNlYXRLZXkgPSB0aGlzLmN1cnJlbnRTZWF0S2V5KHVpZCk7XG4gICAgaWYgKHNlYXRLZXkgJiYgdGhpcy5wYXJ0aWNpcGFudEtleShwYXJ0aWNpcGFudCkgPT09IHNlYXRLZXkpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgcHJvZmlsZSA9IHRoaXMucHJvZmlsZXMuYWN0aXZlUHJvZmlsZSgpO1xuICAgIGlmICh1aWQgJiYgcHJvZmlsZSkge1xuICAgICAgcmV0dXJuIHBhcnRpY2lwYW50LnVpZCA9PT0gdWlkXG4gICAgICAgICYmIHBhcnRpY2lwYW50LmF2YXRhciA9PT0gcHJvZmlsZS5hdmF0YXJcbiAgICAgICAgJiYgdGhpcy5ub3JtYWxpemVDb2xvcihwYXJ0aWNpcGFudC5jb2xvcikgPT09IHRoaXMubm9ybWFsaXplQ29sb3IocHJvZmlsZS5jb2xvcik7XG4gICAgfVxuXG4gICAgaWYgKHVpZCAmJiBwYXJ0aWNpcGFudC51aWQgPT09IHVpZCkgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgYWNjb3VudFVzZXJJZCA9IHRoaXMuYXV0aC51c2VyKCk/LnVzZXJJZDtcbiAgICByZXR1cm4gISFhY2NvdW50VXNlcklkICYmIHBhcnRpY2lwYW50LmFjY291bnRVc2VySWQgPT09IGFjY291bnRVc2VySWQ7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZUNvbG9yKGNvbG9yPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKGNvbG9yID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgd2l0aFVwZGF0ZWRBdChzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgZGF0ZSA9IG5ldyBEYXRlKCkpOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgICBpZiAoIXN0YXRlLm9ubGluZSkgcmV0dXJuIHN0YXRlO1xuICAgIHJldHVybiB0aGlzLndpdGhvdXRVbmRlZmluZWQoeyAuLi5zdGF0ZSwgb25saW5lOiB7IC4uLnN0YXRlLm9ubGluZSwgdXBkYXRlZEF0OiBkYXRlLnRvSVNPU3RyaW5nKCkgfSB9KSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRoTW92ZUxvZyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgZW50cnk6IENoZXNzaW1hbHNNb3ZlTG9nRW50cnksIGRhdGUgPSBuZXcgRGF0ZSgpKTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSB7XG4gICAgaWYgKCFzdGF0ZS5vbmxpbmUpIHJldHVybiB0aGlzLndpdGhVcGRhdGVkQXQoc3RhdGUsIGRhdGUpO1xuICAgIHJldHVybiB0aGlzLndpdGhvdXRVbmRlZmluZWQoe1xuICAgICAgLi4uc3RhdGUsXG4gICAgICBvbmxpbmU6IHtcbiAgICAgICAgLi4uc3RhdGUub25saW5lLFxuICAgICAgICB1cGRhdGVkQXQ6IGRhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgICAgbW92ZUxvZzogWy4uLihzdGF0ZS5vbmxpbmUubW92ZUxvZyA/PyBbXSksIGVudHJ5XS5zbGljZSgtODApLFxuICAgICAgfSxcbiAgICB9KSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNb3ZlTG9nRW50cnkoYXJnczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgdWlkOiBzdHJpbmc7XG4gICAgc2lkZT86IENoZXNzaW1hbHNQbGF5ZXJDb2xvcjtcbiAgICBzdGF0dXM6IENoZXNzaW1hbHNNb3ZlTG9nRW50cnlbJ3N0YXR1cyddO1xuICAgIGNvZGU/OiBzdHJpbmc7XG4gICAgbWVzc2FnZT86IHN0cmluZztcbiAgICBtb3ZlOiBDaGVzc2ltYWxzTW92ZTtcbiAgICBzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZTtcbiAgICB1cGRhdGVkPzogQ2hlc3NpbWFsc0dhbWVTdGF0ZTtcbiAgfSk6IENoZXNzaW1hbHNNb3ZlTG9nRW50cnkge1xuICAgIGNvbnN0IHBhcnRpY2lwYW50ID0gdGhpcy5wYXJ0aWNpcGFudEZvclNpZGUoYXJncy5zdGF0ZSwgYXJncy5zaWRlKTtcbiAgICByZXR1cm4gdGhpcy53aXRob3V0VW5kZWZpbmVkKHtcbiAgICAgIGlkOiBhcmdzLmlkLFxuICAgICAgYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHVpZDogYXJncy51aWQsXG4gICAgICBwcm9maWxlSWQ6IHBhcnRpY2lwYW50Py5wcm9maWxlSWQsXG4gICAgICBzZWF0S2V5OiB0aGlzLnBhcnRpY2lwYW50S2V5KHBhcnRpY2lwYW50KSB8fCB1bmRlZmluZWQsXG4gICAgICBzaWRlOiBhcmdzLnNpZGUsXG4gICAgICBzdGF0dXM6IGFyZ3Muc3RhdHVzLFxuICAgICAgY29kZTogYXJncy5jb2RlLFxuICAgICAgbWVzc2FnZTogYXJncy5tZXNzYWdlLFxuICAgICAgbW92ZTogdGhpcy5zYW5pdGl6ZU1vdmUoYXJncy5tb3ZlKSxcbiAgICAgIG1vdmVDb3VudEJlZm9yZTogYXJncy5zdGF0ZS5tb3ZlQ291bnQsXG4gICAgICBtb3ZlQ291bnRBZnRlcjogYXJncy51cGRhdGVkPy5tb3ZlQ291bnQsXG4gICAgICBjdXJyZW50VHVybkJlZm9yZTogYXJncy5zdGF0ZS5jdXJyZW50VHVybixcbiAgICB9KSBhcyBDaGVzc2ltYWxzTW92ZUxvZ0VudHJ5O1xuICB9XG5cbiAgcHJpdmF0ZSBzYW5pdGl6ZU1vdmUobW92ZTogQ2hlc3NpbWFsc01vdmUpOiBDaGVzc2ltYWxzTW92ZSB7XG4gICAgcmV0dXJuIHRoaXMud2l0aG91dFVuZGVmaW5lZCh7XG4gICAgICBwaWVjZUlkOiBtb3ZlLnBpZWNlSWQsXG4gICAgICBmcm9tOiB7IC4uLm1vdmUuZnJvbSB9LFxuICAgICAgdG86IHsgLi4ubW92ZS50byB9LFxuICAgICAga2luZDogbW92ZS5raW5kLFxuICAgICAgYW5pbWFsOiBtb3ZlLmFuaW1hbCxcbiAgICAgIGNhcHR1cmVzUGllY2VJZDogbW92ZS5jYXB0dXJlc1BpZWNlSWQsXG4gICAgfSkgYXMgQ2hlc3NpbWFsc01vdmU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUhpc3RvcnlFbnRyeShzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgdWlkOiBzdHJpbmcpOiBDaGVzc2ltYWxzSGlzdG9yeUVudHJ5IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXN0YXRlLm9ubGluZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHNpZGUgPSB0aGlzLnBhcnRpY2lwYW50U2lkZShzdGF0ZSwgdWlkKTtcbiAgICBjb25zdCBpc0xvYmJ5SG9zdCA9IHRoaXMuaXNIb3N0V2FpdGluZyhzdGF0ZSwgdWlkKTtcbiAgICBjb25zdCBpc1BlbmRpbmdHdWVzdCA9IHRoaXMuaXNQZW5kaW5nR3Vlc3Qoc3RhdGUsIHVpZCk7XG4gICAgaWYgKCFzaWRlICYmICFpc0xvYmJ5SG9zdCAmJiAhaXNQZW5kaW5nR3Vlc3QpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBvcHBvbmVudCA9IHNpZGVcbiAgICAgID8gc2lkZSA9PT0gJ3doaXRlJ1xuICAgICAgICA/IHN0YXRlLm9ubGluZS5wYXJ0aWNpcGFudHM/LmJsYWNrXG4gICAgICAgIDogc3RhdGUub25saW5lLnBhcnRpY2lwYW50cz8ud2hpdGVcbiAgICAgIDogaXNMb2JieUhvc3RcbiAgICAgICAgPyBzdGF0ZS5vbmxpbmUucGVuZGluZ0d1ZXN0XG4gICAgICAgIDogc3RhdGUub25saW5lLmxvYmJ5O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGdhbWVJZDogc3RhdGUuaWQsXG4gICAgICBtb2RlOiAnb25saW5lJyxcbiAgICAgIGJvYXJkU2l6ZTogc3RhdGUuYm9hcmRTaXplLFxuICAgICAgc3RhdHVzOiBzdGF0ZS5zdGF0dXMsXG4gICAgICBvdXRjb21lOiB0aGlzLmhpc3RvcnlPdXRjb21lKHN0YXRlLCB1aWQsIHNpZGUsIGlzUGVuZGluZ0d1ZXN0KSxcbiAgICAgIHNpZGUsXG4gICAgICBvcHBvbmVudFVpZDogb3Bwb25lbnQ/LnVpZCxcbiAgICAgIG9wcG9uZW50TmFtZTogb3Bwb25lbnQ/Lm5hbWUsXG4gICAgICB3aW5uZXI6IHN0YXRlLndpbm5lcixcbiAgICAgIHdpbm5lclJlYXNvbjogc3RhdGUud2lubmVyUmVhc29uLFxuICAgICAgbW92ZUNvdW50OiBzdGF0ZS5tb3ZlQ291bnQsXG4gICAgICByb3VuZDogc3RhdGUub25saW5lLnJvdW5kLFxuICAgICAgY3JlYXRlZEF0OiBzdGF0ZS5vbmxpbmUuY3JlYXRlZEF0LFxuICAgICAgdXBkYXRlZEF0OiBzdGF0ZS5vbmxpbmUudXBkYXRlZEF0LFxuICAgICAgZmluaXNoZWRBdDogc3RhdGUuc3RhdHVzID09PSAnZmluaXNoZWQnID8gc3RhdGUub25saW5lLnVwZGF0ZWRBdCA6IHVuZGVmaW5lZCxcbiAgICAgIGV4cGlyZXNBdDogc3RhdGUub25saW5lLmV4cGlyZXNBdCxcbiAgICAgIHJlbWF0Y2hPZjogc3RhdGUub25saW5lLnJlbWF0Y2hPZixcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRob3V0VW5kZWZpbmVkPFQgZXh0ZW5kcyBvYmplY3Q+KHZhbHVlOiBUKTogUGFydGlhbDxUPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaXBVbmRlZmluZWQodmFsdWUpIGFzIFBhcnRpYWw8VD47XG4gIH1cblxuICBwcml2YXRlIHN0cmlwVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogdW5rbm93biB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUubWFwKChlbnRyeSkgPT4gdGhpcy5zdHJpcFVuZGVmaW5lZChlbnRyeSkpO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcbiAgICAgICAgICAuZmlsdGVyKChbLCBlbnRyeV0pID0+IGVudHJ5ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgLm1hcCgoW2tleSwgZW50cnldKSA9PiBba2V5LCB0aGlzLnN0cmlwVW5kZWZpbmVkKGVudHJ5KV0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGhpc3RvcnlPdXRjb21lKFxuICAgIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICAgIHVpZDogc3RyaW5nLFxuICAgIHNpZGU6IENoZXNzaW1hbHNQbGF5ZXJDb2xvciB8IHVuZGVmaW5lZCxcbiAgICBpc1BlbmRpbmdHdWVzdDogYm9vbGVhbixcbiAgKTogQ2hlc3NpbWFsc0hpc3RvcnlFbnRyeVsnb3V0Y29tZSddIHtcbiAgICBpZiAoc3RhdGUuc3RhdHVzID09PSAnZmluaXNoZWQnICYmIHNpZGUgJiYgc3RhdGUud2lubmVyKSByZXR1cm4gc3RhdGUud2lubmVyID09PSBzaWRlID8gJ3dvbicgOiAnbG9zdCc7XG4gICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gJ2luX3Byb2dyZXNzJykgcmV0dXJuICdpbl9wcm9ncmVzcyc7XG4gICAgaWYgKGlzUGVuZGluZ0d1ZXN0KSByZXR1cm4gJ3BlbmRpbmcnO1xuICAgIHJldHVybiAnd2FpdGluZyc7XG4gIH1cblxuICBwcml2YXRlIGFzc2VydE5vdEV4cGlyZWQoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUpOiB2b2lkIHtcbiAgICBpZiAoKHN0YXRlLm9ubGluZT8uZXhwaXJlc0F0TXMgPz8gMCkgPCBEYXRlLm5vdygpKSB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfR0FNRV9FWFBJUkVEJyk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUdhbWVJZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFscGhhYmV0ID0gJ0FCQ0RFRkdISktMTU5QUVJTVFVWV1hZWjIzNDU2Nzg5JztcbiAgICBjb25zdCBtYWtlUGFydCA9ICgpOiBzdHJpbmcgPT4gQXJyYXkuZnJvbSh7IGxlbmd0aDogNCB9LCAoKSA9PiBhbHBoYWJldFt0aGlzLnJhbmRvbUluZGV4KGFscGhhYmV0Lmxlbmd0aCldKS5qb2luKCcnKTtcbiAgICByZXR1cm4gYCR7bWFrZVBhcnQoKX0tJHttYWtlUGFydCgpfWA7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU9wZXJhdGlvbklkKCk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmICdyYW5kb21VVUlEJyBpbiBjcnlwdG8pIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuICAgIHJldHVybiBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMCl9YDtcbiAgfVxuXG4gIHByaXZhdGUgcmFuZG9tSW5kZXgobWF4OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmICh0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBuZXcgVWludDMyQXJyYXkoMSk7XG4gICAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHZhbHVlcyk7XG4gICAgICByZXR1cm4gdmFsdWVzWzBdICUgbWF4O1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWF4KTtcbiAgfVxuXG59XG4iXX0=
|
|
611
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlc3NpbWFscy1vbmxpbmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9vcmdhbmlzbXMvbWluaS1nYW1lcy9jaGVzc2ltYWxzLW9ubGluZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMxQyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGNBQWMsRUFDZCxTQUFTLEVBQ1QsR0FBRyxFQUNILE9BQU8sRUFDUCxLQUFLLEVBQ0wsT0FBTyxFQUNQLEtBQUssRUFDTCxjQUFjLEVBQ2QsTUFBTSxHQUNQLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFjLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWhELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBV2xGLE1BQU0sZUFBZSxHQUFHLDRCQUE0QixDQUFDO0FBQ3JELE1BQU0sV0FBVyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztBQUd4QyxNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBRW1CLGlCQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVCLFNBQUksR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0IsY0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM5QixhQUFRLEdBQUcsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ25DLGFBQVEsR0FBRyxNQUFNLENBQUMsNEJBQTRCLENBQUMsQ0FBQztLQWlwQmxFO0lBL29CQyxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQztJQUM1QyxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQWE7UUFDM0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksT0FBTyxDQUFDO1FBQ3pGLE1BQU0sS0FBSyxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsMEJBQTBCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztlQUMzRCxPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7ZUFDOUMsT0FBTyxDQUFDO1FBQ2IsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RCxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQztZQUFFLE9BQU8sT0FBTyxDQUFDO1FBQ3hDLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixPQUFPLDJCQUEyQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBOEI7UUFDN0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QixNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUM7UUFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDNUQsTUFBTSxLQUFLLEdBQUcsb0JBQW9CLENBQUMsU0FBUyxFQUFFO1lBQzVDLEVBQUUsRUFBRSxNQUFNO1lBQ1YsSUFBSSxFQUFFLFFBQVE7WUFDZCxNQUFNLEVBQUUsU0FBUztZQUNqQixNQUFNLEVBQUU7Z0JBQ04sTUFBTTtnQkFDTixPQUFPLEVBQUUsR0FBRztnQkFDWixTQUFTLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRTtnQkFDNUIsU0FBUyxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUU7Z0JBQzVCLFNBQVMsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFO2dCQUNsQyxXQUFXLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDaEMsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsS0FBSyxFQUFFLElBQUk7Z0JBQ1gsZUFBZSxFQUFFLEVBQUU7YUFDcEI7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM1QyxNQUFNLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELFNBQVMsQ0FBQyxNQUFjO1FBQ3RCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQ2pELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFFLEtBQTZCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQy9ELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ1osSUFBSSxLQUFLO2dCQUFFLEtBQUssSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUFDLFVBQVUsR0FBRyxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQ3hCLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDakQsT0FBTyxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsRUFDNUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUNsQixDQUFDO1FBQ0YsT0FBTyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBaUMsQ0FBQyxDQUFDLENBQUM7SUFDOUYsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBYztRQUMzQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEMsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUU7WUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFFckUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBeUIsQ0FBQztZQUNyRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFN0IsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7Z0JBQUUsT0FBTztZQUMzQyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztnQkFBRSxPQUFPO1lBQzNDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUs7Z0JBQUUsT0FBTztZQUUvRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQztnQkFBRSxPQUFPO1lBRTVDLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUM3RCxNQUFNLElBQUksR0FBd0I7Z0JBQ2hDLEdBQUcsS0FBSztnQkFDUixNQUFNLEVBQUU7b0JBQ04sR0FBRyxLQUFLLENBQUMsTUFBTTtvQkFDZixTQUFTLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRTtvQkFDNUIsWUFBWSxFQUFFLEtBQUs7aUJBQ3BCO2FBQ0YsQ0FBQztZQUVGLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBYztRQUM5QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEMsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUU7WUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFFckUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBeUIsQ0FBQztZQUNyRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZO2dCQUFFLE9BQU87WUFFMUUsTUFBTSxHQUFHLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN2QixNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM1RixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztZQUNqQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUN4QyxNQUFNLE1BQU0sR0FBK0MsRUFBRSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvRSxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEIsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDO1lBRTNCLE1BQU0sSUFBSSxHQUF3QjtnQkFDaEMsR0FBRyxLQUFLO2dCQUNSLE1BQU0sRUFBRSxhQUFhO2dCQUNyQixXQUFXLEVBQUUsT0FBTztnQkFDcEIsTUFBTSxFQUFFO29CQUNOLEdBQUcsTUFBTTtvQkFDVCxTQUFTLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRTtvQkFDNUIsWUFBWSxFQUFFO3dCQUNaLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBaUMsRUFBRTt3QkFDakUsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxTQUFrQyxFQUFFO3FCQUNwRTtvQkFDRCxlQUFlLEVBQUUsRUFBRTtpQkFDcEI7YUFDRixDQUFDO1lBRUYsV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDcEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFjO1FBQzlCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQyxNQUFNLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTtZQUN6RCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDM0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUVyRSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxFQUF5QixDQUFDO1lBQ3JELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVk7Z0JBQUUsT0FBTztZQUUxRSxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sTUFBTSxHQUErQyxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDN0csT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDO1lBQzNCLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQWMsRUFBRSxJQUFvQjtRQUM3QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0MsSUFBSSxhQUFnQyxDQUFDO1FBQ3JDLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxFQUFFO1lBQ3pELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO1lBRXJFLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxJQUFJLEVBQXlCLENBQUM7WUFDckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFZLEVBQUUsS0FBZSxFQUFRLEVBQUU7Z0JBQ3JELE1BQU0sU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQyxhQUFhLEdBQUcsU0FBUyxDQUFDO2dCQUMxQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7b0JBQ3BDLEVBQUUsRUFBRSxXQUFXO29CQUNmLEdBQUc7b0JBQ0gsSUFBSTtvQkFDSixNQUFNLEVBQUUsVUFBVTtvQkFDbEIsSUFBSTtvQkFDSixPQUFPLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSTtvQkFDdEQsSUFBSTtvQkFDSixLQUFLO2lCQUNOLENBQUMsQ0FBQztnQkFDSCxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FBQztZQUVGLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDL0IsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN6QyxPQUFPO1lBQ1QsQ0FBQztZQUVELElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7Z0JBQ25DLE9BQU87WUFDVCxDQUFDO1lBRUQsSUFBSSxDQUFDO2dCQUNILE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDakQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO29CQUNwQyxFQUFFLEVBQUUsV0FBVztvQkFDZixHQUFHO29CQUNILElBQUk7b0JBQ0osTUFBTSxFQUFFLFVBQVU7b0JBQ2xCLElBQUk7b0JBQ0osS0FBSztvQkFDTCxPQUFPO2lCQUNSLENBQUMsQ0FBQztnQkFDSCxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3pELENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNwRixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUUsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDaEksTUFBTSxhQUFhLENBQUM7UUFDdEIsQ0FBQztRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUUsRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBYztRQUN6QixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdEQsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEMsTUFBTSxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEVBQUU7WUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtnQkFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFFckUsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBeUIsQ0FBQztZQUNyRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVU7Z0JBQUUsT0FBTztZQUVqRCxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxNQUFjO1FBQ2pDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN0RCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNwQyxPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRTtZQUMxRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDM0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFO2dCQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkJBQTJCLENBQUMsQ0FBQztZQUVyRSxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsSUFBSSxFQUF5QixDQUFDO1lBQ3JELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVTtnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUNsRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDO2dCQUFFLE9BQU8sU0FBUyxDQUFDO1lBRXRELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDO1lBQ2hELElBQUksQ0FBQyxZQUFZLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUFFLE9BQU8sU0FBUyxDQUFDO1lBRW5GLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzVGLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsa0JBQWtCLENBQUMsQ0FBQztZQUMzRCxJQUFJLENBQUMsVUFBVTtnQkFBRSxPQUFPLFNBQVMsQ0FBQztZQUVsQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RixNQUFNLFNBQVMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ3hFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDeEUsQ0FBQztZQUNGLE1BQU0sR0FBRyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFFdkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNmLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztvQkFDekMsR0FBRyxLQUFLO29CQUNSLE1BQU0sRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLFdBQVcsRUFBRSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUU7aUJBQ3JGLENBQUMsQ0FBQyxDQUFDO2dCQUNKLE9BQU8sU0FBUyxDQUFDO1lBQ25CLENBQUM7WUFFRCxNQUFNLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHO2dCQUN4QyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdDLE1BQU0sSUFBSSxHQUFHLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7Z0JBQ2pELEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDWixJQUFJLEVBQUUsUUFBUTtnQkFDZCxNQUFNLEVBQUUsYUFBYTtnQkFDckIsTUFBTSxFQUFFO29CQUNOLEdBQUcsS0FBSyxDQUFDLE1BQU07b0JBQ2YsU0FBUyxFQUFFLEdBQUcsQ0FBQyxXQUFXLEVBQUU7b0JBQzVCLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDO29CQUM3QixZQUFZLEVBQUU7d0JBQ1osS0FBSyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTt3QkFDbEMsS0FBSyxFQUFFLEVBQUUsR0FBRyxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtxQkFDbkM7b0JBQ0QsZUFBZSxFQUFFLEVBQUU7aUJBQ3BCO2FBQ0YsQ0FBQyxDQUFDO1lBRUgsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBd0IsQ0FBQztZQUN6RSxXQUFXLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNwQyxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBMEIsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVU7UUFDL0QsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9DLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxLQUFLLGNBQWMsQ0FBQyxDQUFDO1lBQ3pHLElBQUksU0FBUztnQkFBRSxPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyQyxDQUFDO1FBRUQsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDckQsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FDMUQsV0FBVyxDQUFDLEdBQUcsS0FBSyxHQUFHO3VCQUNwQixXQUFXLENBQUMsTUFBTSxLQUFLLGNBQWMsQ0FBQyxNQUFNO3VCQUM1QyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FDeEYsQ0FBQztnQkFDRixJQUFJLGtCQUFrQjtvQkFBRSxPQUFPLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1lBQ2hGLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUMvQyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEtBQUssYUFBYSxDQUFDLENBQUM7WUFDeEcsSUFBSSxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUM7Z0JBQUUsT0FBTyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBMEIsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVU7UUFDN0QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELGFBQWEsQ0FBQyxLQUEwQixFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVTtRQUM3RCxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQTBCLEVBQUUsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVO1FBQzlELE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUEwQixFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsVUFBVTtRQUN4RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUM5QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBMEIsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVU7UUFDekUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUN4QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdEYsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFRCxjQUFjLENBQUMsV0FBeUM7UUFDdEQsT0FBTyxXQUFXLEVBQUUsT0FBTztlQUN0QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsQ0FBQztlQUMzRCxXQUFXLEVBQUUsU0FBUztlQUN0QixXQUFXLEVBQUUsYUFBYTtlQUMxQixXQUFXLEVBQUUsR0FBRztlQUNoQixFQUFFLENBQUM7SUFDVixDQUFDO0lBRUQsUUFBUSxDQUFDLE1BQWMsRUFBRSxTQUFTLEdBQUcsYUFBYTtRQUNoRCxNQUFNLE1BQU0sR0FBRyxPQUFPLE1BQU0sS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUM7UUFDM0UsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3RGLE9BQU8sR0FBRyxNQUFNLEdBQUcsbUJBQW1CLGVBQWUsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDMUcsQ0FBQztJQUVELGtCQUFrQixDQUFDLE1BQWMsRUFBRSxTQUFTLEdBQUcsYUFBYTtRQUMxRCxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLGFBQWEsQ0FBQztJQUMxRCxDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQixDQUFDLEtBQTBCO1FBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDNUIsSUFBSSxDQUFDLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVE7WUFBRSxPQUFPO1FBQzVDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBQ25CLE1BQU0sTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRU8sT0FBTyxDQUFDLE1BQWM7UUFDNUIsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLGVBQWUsSUFBSSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFTyxXQUFXLENBQUMsR0FBVztRQUM3QixPQUFPLFNBQVMsR0FBRywrQkFBK0IsQ0FBQztJQUNyRCxDQUFDO0lBRU8sVUFBVSxDQUFDLEdBQVcsRUFBRSxNQUFjO1FBQzVDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVPLEtBQUssQ0FBQyxVQUFVO1FBQ3RCLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1FBQzVDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDO1FBQzNDLElBQUksSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2QsTUFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQ2xCLENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFhO1FBQy9CLElBQUksQ0FBQztZQUNILE9BQU8sa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxHQUFXLEVBQUUsUUFBZ0I7UUFDckQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM5QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUNuRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELE1BQU0sU0FBUyxHQUFHLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLElBQUksWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsSUFBSSxTQUFTLENBQUM7UUFDekYsTUFBTSxLQUFLLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLFNBQVMsQ0FBQztRQUM5RSxNQUFNLFNBQVMsR0FBRyxPQUFPLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxNQUFNLElBQUksR0FBRyxDQUFDO1FBRXJELE9BQU87WUFDTCxHQUFHO1lBQ0gsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNO1lBQzNCLFNBQVM7WUFDVCxPQUFPLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDO1lBQzFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRTttQkFDbkIsWUFBWSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUU7bUJBQ2pDLEtBQUs7bUJBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFNBQVMsQ0FBQztZQUNsRCxNQUFNO1lBQ04sS0FBSztZQUNMLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLElBQUk7WUFDL0IsU0FBUztZQUNULEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLFNBQVM7WUFDbEMsUUFBUTtTQUNULENBQUM7SUFDSixDQUFDO0lBRU8sZUFBZSxDQUFDLE1BQWU7UUFDckMsTUFBTSxPQUFPLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFDL0IsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7SUFDM0QsQ0FBQztJQUVPLFlBQVksQ0FBQyxHQUFZLEVBQUUsU0FBa0I7UUFDbkQsTUFBTSxhQUFhLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ2xDLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQzlDLElBQUksQ0FBQyxhQUFhLElBQUksQ0FBQyxtQkFBbUI7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM3RCxPQUFPLEdBQUcsYUFBYSxJQUFJLG1CQUFtQixFQUFFLENBQUM7SUFDbkQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVU7UUFDMUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFTyxrQkFBa0IsQ0FDeEIsS0FBMEIsRUFDMUIsSUFBNEI7UUFFNUIsSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUM1QixPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEtBQTBCO1FBQ25ELE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDO1FBQ2hELE9BQVEsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUE2QjthQUNuRCxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFxRSxDQUFDO2FBQy9HLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBaUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsRyxDQUFDO0lBRU8sc0JBQXNCLENBQUMsV0FBeUM7UUFDdEUsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUM1QixNQUFNLElBQUksR0FBRztZQUNYLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDO1lBQ2hDLFdBQVcsQ0FBQyxHQUFHO1lBQ2YsV0FBVyxDQUFDLGFBQWE7WUFDekIsV0FBVyxDQUFDLFNBQVM7U0FDdEIsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFpQixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU8seUJBQXlCLENBQUMsV0FBeUMsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVU7UUFDaEcsSUFBSSxDQUFDLFdBQVc7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUUvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssT0FBTztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBRXpFLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDOUMsSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7WUFDbkIsT0FBTyxXQUFXLENBQUMsR0FBRyxLQUFLLEdBQUc7bUJBQ3pCLFdBQVcsQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLE1BQU07bUJBQ3JDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JGLENBQUM7UUFFRCxJQUFJLEdBQUcsSUFBSSxXQUFXLENBQUMsR0FBRyxLQUFLLEdBQUc7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNoRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQztRQUMvQyxPQUFPLENBQUMsQ0FBQyxhQUFhLElBQUksV0FBVyxDQUFDLGFBQWEsS0FBSyxhQUFhLENBQUM7SUFDeEUsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFjO1FBQ25DLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVPLGFBQWEsQ0FBQyxLQUEwQixFQUFFLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtRQUNqRSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNoQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUcsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBd0IsQ0FBQztJQUNoSSxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQTBCLEVBQUUsS0FBNkIsRUFBRSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDOUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztZQUMzQixHQUFHLEtBQUs7WUFDUixNQUFNLEVBQUU7Z0JBQ04sR0FBRyxLQUFLLENBQUMsTUFBTTtnQkFDZixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDN0IsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQzthQUM3RDtTQUNGLENBQXdCLENBQUM7SUFDNUIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBVTFCO1FBQ0MsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25FLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1lBQzNCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNYLEVBQUUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTtZQUM1QixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixTQUFTLEVBQUUsV0FBVyxFQUFFLFNBQVM7WUFDakMsT0FBTyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLElBQUksU0FBUztZQUN0RCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbEMsZUFBZSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUztZQUNyQyxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxTQUFTO1lBQ3ZDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVztTQUMxQyxDQUEyQixDQUFDO0lBQy9CLENBQUM7SUFFTyxZQUFZLENBQUMsSUFBb0I7UUFDdkMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLElBQUksRUFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksRUFBRTtZQUN0QixFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUU7WUFDbEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLGVBQWUsRUFBRSxJQUFJLENBQUMsZUFBZTtTQUN0QyxDQUFtQixDQUFDO0lBQ3ZCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUEwQixFQUFFLEdBQVc7UUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQUUsT0FBTyxTQUFTLENBQUM7UUFFcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDOUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDbkQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLGNBQWM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUUvRCxNQUFNLFFBQVEsR0FBRyxJQUFJO1lBQ25CLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTztnQkFDaEIsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLEtBQUs7Z0JBQ2xDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxLQUFLO1lBQ3BDLENBQUMsQ0FBQyxXQUFXO2dCQUNYLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVk7Z0JBQzNCLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUV6QixPQUFPO1lBQ0wsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2hCLElBQUksRUFBRSxRQUFRO1lBQ2QsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO1lBQzFCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUM7WUFDOUQsSUFBSTtZQUNKLFdBQVcsRUFBRSxRQUFRLEVBQUUsR0FBRztZQUMxQixZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUk7WUFDNUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3BCLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFNBQVM7WUFDMUIsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN6QixTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQ2pDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVM7WUFDakMsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUztZQUM1RSxTQUFTLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTO1lBQ2pDLFNBQVMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVM7U0FDbEMsQ0FBQztJQUNKLENBQUM7SUFFTyxnQkFBZ0IsQ0FBbUIsS0FBUTtRQUNqRCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFlLENBQUM7SUFDbEQsQ0FBQztJQUVPLGNBQWMsQ0FBQyxLQUFjO1FBQ25DLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCxJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN2QyxPQUFPLE1BQU0sQ0FBQyxXQUFXLENBQ3ZCLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBZ0MsQ0FBQztpQkFDN0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDO2lCQUMxQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQzVELENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sY0FBYyxDQUNwQixLQUEwQixFQUMxQixHQUFXLEVBQ1gsSUFBdUMsRUFDdkMsY0FBdUI7UUFFdkIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFVBQVUsSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLE1BQU07WUFBRSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUN2RyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssYUFBYTtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBQ3pELElBQUksY0FBYztZQUFFLE9BQU8sU0FBUyxDQUFDO1FBQ3JDLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUEwQjtRQUNqRCxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxXQUFXLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUFFLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNoRyxDQUFDO0lBRU8sWUFBWTtRQUNsQixNQUFNLFFBQVEsR0FBRyxrQ0FBa0MsQ0FBQztRQUNwRCxNQUFNLFFBQVEsR0FBRyxHQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3JILE9BQU8sR0FBRyxRQUFRLEVBQUUsSUFBSSxRQUFRLEVBQUUsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksWUFBWSxJQUFJLE1BQU07WUFBRSxPQUFPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN4RixPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNqRixDQUFDO0lBRU8sV0FBVyxDQUFDLEdBQVc7UUFDN0IsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzVELE1BQU0sTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQ3pCLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7K0dBcHBCVSx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQURWLE1BQU07OzRGQUNuQix1QkFBdUI7a0JBRG5DLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdXRoIH0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9hdXRoJztcbmltcG9ydCB7XG4gIGNvbGxlY3Rpb24sXG4gIGNvbGxlY3Rpb25EYXRhLFxuICBGaXJlc3RvcmUsXG4gIGRvYyxcbiAgZG9jRGF0YSxcbiAgbGltaXQsXG4gIG9yZGVyQnksXG4gIHF1ZXJ5LFxuICBydW5UcmFuc2FjdGlvbixcbiAgc2V0RG9jLFxufSBmcm9tICdAYW5ndWxhci9maXJlL2ZpcmVzdG9yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIG9mLCB0YXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRoL2F1dGguc2VydmljZSc7XG5pbXBvcnQgeyBGaXJlYmFzZVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9maXJlYmFzZS9maXJlYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IGFwcGx5Q2hlc3NpbWFsc01vdmUsIGNyZWF0ZUNoZXNzaW1hbHNHYW1lLCByZXNpZ25DaGVzc2ltYWxzR2FtZSB9IGZyb20gJy4vY2hlc3NpbWFscy1lbmdpbmUnO1xuaW1wb3J0IHsgTWluaUdhbWVQbGF5ZXJQcm9maWxlU2VydmljZSB9IGZyb20gJy4vbWluaS1nYW1lLXBsYXllci1wcm9maWxlLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ2hlc3NpbWFsc0JvYXJkU2l6ZSxcbiAgQ2hlc3NpbWFsc0dhbWVTdGF0ZSxcbiAgQ2hlc3NpbWFsc0hpc3RvcnlFbnRyeSxcbiAgQ2hlc3NpbWFsc01vdmUsXG4gIENoZXNzaW1hbHNNb3ZlTG9nRW50cnksXG4gIENoZXNzaW1hbHNPbmxpbmVQYXJ0aWNpcGFudCxcbiAgQ2hlc3NpbWFsc1BsYXllckNvbG9yLFxufSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgQ09MTEVDVElPTl9QQVRIID0gJ21pbmlHYW1lcy9jaGVzc2ltYWxzL2dhbWVzJztcbmNvbnN0IEdBTUVfVFRMX01TID0gMjQgKiA2MCAqIDYwICogMTAwMDtcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBDaGVzc2ltYWxzT25saW5lU2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlyZWJhc2VBdXRoID0gaW5qZWN0KEF1dGgpO1xuICBwcml2YXRlIHJlYWRvbmx5IGF1dGggPSBpbmplY3QoQXV0aFNlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcmVzdG9yZSA9IGluamVjdChGaXJlc3RvcmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGZpcmViYXNlID0gaW5qZWN0KEZpcmViYXNlU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvZmlsZXMgPSBpbmplY3QoTWluaUdhbWVQbGF5ZXJQcm9maWxlU2VydmljZSk7XG5cbiAgZ2V0IGN1cnJlbnRVaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5maXJlYmFzZUF1dGguY3VycmVudFVzZXI/LnVpZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZUdhbWVJZCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCByYXcgPSAodmFsdWUgPz8gJycpLnRyaW0oKS50b1VwcGVyQ2FzZSgpO1xuICAgIGNvbnN0IGRlY29kZWQgPSB0aGlzLmRlY29kZUlucHV0KHJhdyk7XG4gICAgY29uc3QgcGF0aFNlZ21lbnQgPSBkZWNvZGVkLnNwbGl0KC9bPyNdLylbMF0uc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbikucG9wKCkgPz8gZGVjb2RlZDtcbiAgICBjb25zdCBtYXRjaCA9IHBhdGhTZWdtZW50Lm1hdGNoKC9bQS1aMC05XXs0fS0/W0EtWjAtOV17NH0vKT8uWzBdXG4gICAgICA/PyBkZWNvZGVkLm1hdGNoKC9bQS1aMC05XXs0fS0/W0EtWjAtOV17NH0vKT8uWzBdXG4gICAgICA/PyBkZWNvZGVkO1xuICAgIGNvbnN0IGNvbXBhY3QgPSBtYXRjaC5yZXBsYWNlKC9bXkEtWjAtOV0vZywgJycpLnNsaWNlKDAsIDgpO1xuICAgIGlmIChjb21wYWN0Lmxlbmd0aCA8PSA0KSByZXR1cm4gY29tcGFjdDtcbiAgICByZXR1cm4gYCR7Y29tcGFjdC5zbGljZSgwLCA0KX0tJHtjb21wYWN0LnNsaWNlKDQsIDgpfWA7XG4gIH1cblxuICBpc1ZhbGlkR2FtZUlkKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL15bQS1aMC05XXs0fS1bQS1aMC05XXs0fSQvLnRlc3QodGhpcy5ub3JtYWxpemVHYW1lSWQodmFsdWUpKTtcbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUdhbWUoYm9hcmRTaXplOiBDaGVzc2ltYWxzQm9hcmRTaXplKTogUHJvbWlzZTxDaGVzc2ltYWxzR2FtZVN0YXRlPiB7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBleHBpcmVzQXQgPSBuZXcgRGF0ZShub3cuZ2V0VGltZSgpICsgR0FNRV9UVExfTVMpO1xuICAgIGNvbnN0IGdhbWVJZCA9IHRoaXMuY3JlYXRlR2FtZUlkKCk7XG4gICAgY29uc3QgaG9zdCA9IHRoaXMuY3JlYXRlUGFydGljaXBhbnQodWlkLCBub3cudG9JU09TdHJpbmcoKSk7XG4gICAgY29uc3Qgc3RhdGUgPSBjcmVhdGVDaGVzc2ltYWxzR2FtZShib2FyZFNpemUsIHtcbiAgICAgIGlkOiBnYW1lSWQsXG4gICAgICBtb2RlOiAnb25saW5lJyxcbiAgICAgIHN0YXR1czogJ3dhaXRpbmcnLFxuICAgICAgb25saW5lOiB7XG4gICAgICAgIGdhbWVJZCxcbiAgICAgICAgaG9zdFVpZDogdWlkLFxuICAgICAgICBjcmVhdGVkQXQ6IG5vdy50b0lTT1N0cmluZygpLFxuICAgICAgICB1cGRhdGVkQXQ6IG5vdy50b0lTT1N0cmluZygpLFxuICAgICAgICBleHBpcmVzQXQ6IGV4cGlyZXNBdC50b0lTT1N0cmluZygpLFxuICAgICAgICBleHBpcmVzQXRNczogZXhwaXJlc0F0LmdldFRpbWUoKSxcbiAgICAgICAgcm91bmQ6IDEsXG4gICAgICAgIGxvYmJ5OiBob3N0LFxuICAgICAgICByZW1hdGNoUmVxdWVzdHM6IFtdLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IG5leHQgPSB0aGlzLndpdGhVcGRhdGVkQXQoc3RhdGUsIG5vdyk7XG4gICAgYXdhaXQgc2V0RG9jKHRoaXMuZ2FtZVJlZihnYW1lSWQpLCBuZXh0KTtcbiAgICBhd2FpdCB0aGlzLnNhdmVDdXJyZW50VXNlckhpc3RvcnkobmV4dCk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cblxuICB3YXRjaEdhbWUoZ2FtZUlkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPENoZXNzaW1hbHNHYW1lU3RhdGUgfCBudWxsPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEdhbWVJZCA9IHRoaXMubm9ybWFsaXplR2FtZUlkKGdhbWVJZCk7XG4gICAgcmV0dXJuIGRvY0RhdGEodGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpKS5waXBlKFxuICAgICAgbWFwKCh2YWx1ZSkgPT4gKHZhbHVlID8gKHZhbHVlIGFzIENoZXNzaW1hbHNHYW1lU3RhdGUpIDogbnVsbCkpLFxuICAgICAgdGFwKChzdGF0ZSkgPT4ge1xuICAgICAgICBpZiAoc3RhdGUpIHZvaWQgdGhpcy5zYXZlQ3VycmVudFVzZXJIaXN0b3J5KHN0YXRlKTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICB3YXRjaEhpc3RvcnkobGltaXRDb3VudCA9IDgpOiBPYnNlcnZhYmxlPENoZXNzaW1hbHNIaXN0b3J5RW50cnlbXT4ge1xuICAgIGNvbnN0IHVpZCA9IHRoaXMuY3VycmVudFVpZDtcbiAgICBpZiAoIXVpZCkgcmV0dXJuIG9mKFtdKTtcbiAgICBjb25zdCBoaXN0b3J5UXVlcnkgPSBxdWVyeShcbiAgICAgIGNvbGxlY3Rpb24odGhpcy5maXJlc3RvcmUsIHRoaXMuaGlzdG9yeVBhdGgodWlkKSksXG4gICAgICBvcmRlckJ5KCd1cGRhdGVkQXQnLCAnZGVzYycpLFxuICAgICAgbGltaXQobGltaXRDb3VudCksXG4gICAgKTtcbiAgICByZXR1cm4gY29sbGVjdGlvbkRhdGEoaGlzdG9yeVF1ZXJ5KS5waXBlKG1hcCgoaXRlbXMpID0+IGl0ZW1zIGFzIENoZXNzaW1hbHNIaXN0b3J5RW50cnlbXSkpO1xuICB9XG5cbiAgYXN5bmMgam9pbkdhbWUoZ2FtZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBub3JtYWxpemVkR2FtZUlkID0gdGhpcy5ub3JtYWxpemVHYW1lSWQoZ2FtZUlkKTtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBhd2FpdCBydW5UcmFuc2FjdGlvbih0aGlzLmZpcmVzdG9yZSwgYXN5bmMgKHRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLmdhbWVSZWYobm9ybWFsaXplZEdhbWVJZCk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRyYW5zYWN0aW9uLmdldChyZWYpO1xuICAgICAgaWYgKCFzbmFwc2hvdC5leGlzdHMoKSkgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0dBTUVfTk9UX0ZPVU5EJyk7XG5cbiAgICAgIGNvbnN0IHN0YXRlID0gc25hcHNob3QuZGF0YSgpIGFzIENoZXNzaW1hbHNHYW1lU3RhdGU7XG4gICAgICB0aGlzLmFzc2VydE5vdEV4cGlyZWQoc3RhdGUpO1xuXG4gICAgICBpZiAodGhpcy5pc1BhcnRpY2lwYW50KHN0YXRlLCB1aWQpKSByZXR1cm47XG4gICAgICBpZiAodGhpcy5pc0hvc3RXYWl0aW5nKHN0YXRlLCB1aWQpKSByZXR1cm47XG4gICAgICBpZiAoc3RhdGUuc3RhdHVzICE9PSAnd2FpdGluZycgfHwgIXN0YXRlLm9ubGluZT8ubG9iYnkpIHJldHVybjtcblxuICAgICAgaWYgKHRoaXMuaXNQZW5kaW5nR3Vlc3Qoc3RhdGUsIHVpZCkpIHJldHVybjtcblxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IGd1ZXN0ID0gdGhpcy5jcmVhdGVQYXJ0aWNpcGFudCh1aWQsIG5vdy50b0lTT1N0cmluZygpKTtcbiAgICAgIGNvbnN0IG5leHQ6IENoZXNzaW1hbHNHYW1lU3RhdGUgPSB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBvbmxpbmU6IHtcbiAgICAgICAgICAuLi5zdGF0ZS5vbmxpbmUsXG4gICAgICAgICAgdXBkYXRlZEF0OiBub3cudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBwZW5kaW5nR3Vlc3Q6IGd1ZXN0LFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgdHJhbnNhY3Rpb24uc2V0KHJlZiwgdGhpcy53aXRob3V0VW5kZWZpbmVkKG5leHQpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFjY2VwdEd1ZXN0KGdhbWVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEdhbWVJZCA9IHRoaXMubm9ybWFsaXplR2FtZUlkKGdhbWVJZCk7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgYXdhaXQgcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGFzeW5jICh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0cmFuc2FjdGlvbi5nZXQocmVmKTtcbiAgICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX05PVF9GT1VORCcpO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LmRhdGEoKSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgICAgdGhpcy5hc3NlcnROb3RFeHBpcmVkKHN0YXRlKTtcbiAgICAgIGlmICghdGhpcy5pc0hvc3RXYWl0aW5nKHN0YXRlLCB1aWQpIHx8ICFzdGF0ZS5vbmxpbmUucGVuZGluZ0d1ZXN0KSByZXR1cm47XG5cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgICBjb25zdCBbaG9zdFNpZGUsIGd1ZXN0U2lkZV0gPSBNYXRoLnJhbmRvbSgpID4gMC41ID8gWyd3aGl0ZScsICdibGFjayddIDogWydibGFjaycsICd3aGl0ZSddO1xuICAgICAgY29uc3QgbG9iYnkgPSBzdGF0ZS5vbmxpbmUubG9iYnk7XG4gICAgICBjb25zdCBndWVzdCA9IHN0YXRlLm9ubGluZS5wZW5kaW5nR3Vlc3Q7XG4gICAgICBjb25zdCBvbmxpbmU6IE5vbk51bGxhYmxlPENoZXNzaW1hbHNHYW1lU3RhdGVbJ29ubGluZSddPiA9IHsgLi4uc3RhdGUub25saW5lIH07XG4gICAgICBkZWxldGUgb25saW5lLmxvYmJ5O1xuICAgICAgZGVsZXRlIG9ubGluZS5wZW5kaW5nR3Vlc3Q7XG5cbiAgICAgIGNvbnN0IG5leHQ6IENoZXNzaW1hbHNHYW1lU3RhdGUgPSB7XG4gICAgICAgIC4uLnN0YXRlLFxuICAgICAgICBzdGF0dXM6ICdpbl9wcm9ncmVzcycsXG4gICAgICAgIGN1cnJlbnRUdXJuOiAnd2hpdGUnLFxuICAgICAgICBvbmxpbmU6IHtcbiAgICAgICAgICAuLi5vbmxpbmUsXG4gICAgICAgICAgdXBkYXRlZEF0OiBub3cudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBwYXJ0aWNpcGFudHM6IHtcbiAgICAgICAgICAgIFtob3N0U2lkZV06IHsgLi4ubG9iYnksIHNpZGU6IGhvc3RTaWRlIGFzIENoZXNzaW1hbHNQbGF5ZXJDb2xvciB9LFxuICAgICAgICAgICAgW2d1ZXN0U2lkZV06IHsgLi4uZ3Vlc3QsIHNpZGU6IGd1ZXN0U2lkZSBhcyBDaGVzc2ltYWxzUGxheWVyQ29sb3IgfSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlbWF0Y2hSZXF1ZXN0czogW10sXG4gICAgICAgIH0sXG4gICAgICB9O1xuXG4gICAgICB0cmFuc2FjdGlvbi5zZXQocmVmLCB0aGlzLndpdGhvdXRVbmRlZmluZWQobmV4dCkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVqZWN0R3Vlc3QoZ2FtZUlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBub3JtYWxpemVkR2FtZUlkID0gdGhpcy5ub3JtYWxpemVHYW1lSWQoZ2FtZUlkKTtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICBhd2FpdCBydW5UcmFuc2FjdGlvbih0aGlzLmZpcmVzdG9yZSwgYXN5bmMgKHRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLmdhbWVSZWYobm9ybWFsaXplZEdhbWVJZCk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRyYW5zYWN0aW9uLmdldChyZWYpO1xuICAgICAgaWYgKCFzbmFwc2hvdC5leGlzdHMoKSkgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0dBTUVfTk9UX0ZPVU5EJyk7XG5cbiAgICAgIGNvbnN0IHN0YXRlID0gc25hcHNob3QuZGF0YSgpIGFzIENoZXNzaW1hbHNHYW1lU3RhdGU7XG4gICAgICB0aGlzLmFzc2VydE5vdEV4cGlyZWQoc3RhdGUpO1xuICAgICAgaWYgKCF0aGlzLmlzSG9zdFdhaXRpbmcoc3RhdGUsIHVpZCkgfHwgIXN0YXRlLm9ubGluZS5wZW5kaW5nR3Vlc3QpIHJldHVybjtcblxuICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICAgIGNvbnN0IG9ubGluZTogTm9uTnVsbGFibGU8Q2hlc3NpbWFsc0dhbWVTdGF0ZVsnb25saW5lJ10+ID0geyAuLi5zdGF0ZS5vbmxpbmUsIHVwZGF0ZWRBdDogbm93LnRvSVNPU3RyaW5nKCkgfTtcbiAgICAgIGRlbGV0ZSBvbmxpbmUucGVuZGluZ0d1ZXN0O1xuICAgICAgdHJhbnNhY3Rpb24uc2V0KHJlZiwgdGhpcy53aXRob3V0VW5kZWZpbmVkKHsgLi4uc3RhdGUsIG9ubGluZSB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBtb3ZlKGdhbWVJZDogc3RyaW5nLCBtb3ZlOiBDaGVzc2ltYWxzTW92ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRHYW1lSWQgPSB0aGlzLm5vcm1hbGl6ZUdhbWVJZChnYW1lSWQpO1xuICAgIGNvbnN0IHVpZCA9IGF3YWl0IHRoaXMuZW5zdXJlVXNlcigpO1xuICAgIGNvbnN0IG9wZXJhdGlvbklkID0gdGhpcy5jcmVhdGVPcGVyYXRpb25JZCgpO1xuICAgIGxldCByZWplY3RlZEVycm9yOiBFcnJvciB8IHVuZGVmaW5lZDtcbiAgICBhd2FpdCBydW5UcmFuc2FjdGlvbih0aGlzLmZpcmVzdG9yZSwgYXN5bmMgKHRyYW5zYWN0aW9uKSA9PiB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLmdhbWVSZWYobm9ybWFsaXplZEdhbWVJZCk7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRyYW5zYWN0aW9uLmdldChyZWYpO1xuICAgICAgaWYgKCFzbmFwc2hvdC5leGlzdHMoKSkgdGhyb3cgbmV3IEVycm9yKCdDSEVTU0lNQUxTX0dBTUVfTk9UX0ZPVU5EJyk7XG5cbiAgICAgIGNvbnN0IHN0YXRlID0gc25hcHNob3QuZGF0YSgpIGFzIENoZXNzaW1hbHNHYW1lU3RhdGU7XG4gICAgICBjb25zdCBzaWRlID0gdGhpcy5wYXJ0aWNpcGFudFNpZGUoc3RhdGUsIHVpZCk7XG4gICAgICBjb25zdCByZWplY3QgPSAoY29kZTogc3RyaW5nLCBlcnJvcj86IHVua25vd24pOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgbmV4dEVycm9yID0gbmV3IEVycm9yKGNvZGUpO1xuICAgICAgICByZWplY3RlZEVycm9yID0gbmV4dEVycm9yO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuY3JlYXRlTW92ZUxvZ0VudHJ5KHtcbiAgICAgICAgICBpZDogb3BlcmF0aW9uSWQsXG4gICAgICAgICAgdWlkLFxuICAgICAgICAgIHNpZGUsXG4gICAgICAgICAgc3RhdHVzOiAncmVqZWN0ZWQnLFxuICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBjb2RlLFxuICAgICAgICAgIG1vdmUsXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgIH0pO1xuICAgICAgICB0cmFuc2FjdGlvbi5zZXQocmVmLCB0aGlzLndpdGhNb3ZlTG9nKHN0YXRlLCBlbnRyeSkpO1xuICAgICAgfTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5hc3NlcnROb3RFeHBpcmVkKHN0YXRlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlamVjdCgnQ0hFU1NJTUFMU19HQU1FX0VYUElSRUQnLCBlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFzaWRlIHx8IHNpZGUgIT09IHN0YXRlLmN1cnJlbnRUdXJuKSB7XG4gICAgICAgIHJlamVjdCgnQ0hFU1NJTUFMU19OT1RfWU9VUl9UVVJOJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IGFwcGx5Q2hlc3NpbWFsc01vdmUoc3RhdGUsIG1vdmUpO1xuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuY3JlYXRlTW92ZUxvZ0VudHJ5KHtcbiAgICAgICAgICBpZDogb3BlcmF0aW9uSWQsXG4gICAgICAgICAgdWlkLFxuICAgICAgICAgIHNpZGUsXG4gICAgICAgICAgc3RhdHVzOiAnYWNjZXB0ZWQnLFxuICAgICAgICAgIG1vdmUsXG4gICAgICAgICAgc3RhdGUsXG4gICAgICAgICAgdXBkYXRlZCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIHRoaXMud2l0aE1vdmVMb2codXBkYXRlZCwgZW50cnkpKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdDSEVTU0lNQUxTX0lMTEVHQUxfTU9WRScsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAocmVqZWN0ZWRFcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKCdbQ2hlc3NpbWFsc10gb25saW5lIG1vdmUgcmVqZWN0ZWQnLCB7IGdhbWVJZDogbm9ybWFsaXplZEdhbWVJZCwgb3BlcmF0aW9uSWQsIG1vdmUsIGNvZGU6IHJlamVjdGVkRXJyb3IubWVzc2FnZSB9KTtcbiAgICAgIHRocm93IHJlamVjdGVkRXJyb3I7XG4gICAgfVxuICAgIGNvbnNvbGUuaW5mbygnW0NoZXNzaW1hbHNdIG9ubGluZSBtb3ZlIGFjY2VwdGVkJywgeyBnYW1lSWQ6IG5vcm1hbGl6ZWRHYW1lSWQsIG9wZXJhdGlvbklkLCBtb3ZlIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVzaWduKGdhbWVJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZEdhbWVJZCA9IHRoaXMubm9ybWFsaXplR2FtZUlkKGdhbWVJZCk7XG4gICAgY29uc3QgdWlkID0gYXdhaXQgdGhpcy5lbnN1cmVVc2VyKCk7XG4gICAgYXdhaXQgcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGFzeW5jICh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0cmFuc2FjdGlvbi5nZXQocmVmKTtcbiAgICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX05PVF9GT1VORCcpO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LmRhdGEoKSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgICAgdGhpcy5hc3NlcnROb3RFeHBpcmVkKHN0YXRlKTtcbiAgICAgIGNvbnN0IHNpZGUgPSB0aGlzLnBhcnRpY2lwYW50U2lkZShzdGF0ZSwgdWlkKTtcbiAgICAgIGlmICghc2lkZSB8fCBzdGF0ZS5zdGF0dXMgPT09ICdmaW5pc2hlZCcpIHJldHVybjtcblxuICAgICAgdHJhbnNhY3Rpb24uc2V0KHJlZiwgdGhpcy53aXRoVXBkYXRlZEF0KHJlc2lnbkNoZXNzaW1hbHNHYW1lKHN0YXRlLCBzaWRlKSkpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcmVxdWVzdFJlbWF0Y2goZ2FtZUlkOiBzdHJpbmcpOiBQcm9taXNlPENoZXNzaW1hbHNHYW1lU3RhdGUgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBub3JtYWxpemVkR2FtZUlkID0gdGhpcy5ub3JtYWxpemVHYW1lSWQoZ2FtZUlkKTtcbiAgICBjb25zdCB1aWQgPSBhd2FpdCB0aGlzLmVuc3VyZVVzZXIoKTtcbiAgICByZXR1cm4gcnVuVHJhbnNhY3Rpb24odGhpcy5maXJlc3RvcmUsIGFzeW5jICh0cmFuc2FjdGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5nYW1lUmVmKG5vcm1hbGl6ZWRHYW1lSWQpO1xuICAgICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0cmFuc2FjdGlvbi5nZXQocmVmKTtcbiAgICAgIGlmICghc25hcHNob3QuZXhpc3RzKCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX05PVF9GT1VORCcpO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IHNuYXBzaG90LmRhdGEoKSBhcyBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgICAgdGhpcy5hc3NlcnROb3RFeHBpcmVkKHN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZS5zdGF0dXMgIT09ICdmaW5pc2hlZCcpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICBpZiAoIXRoaXMuaXNQYXJ0aWNpcGFudChzdGF0ZSwgdWlkKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgcGFydGljaXBhbnRzID0gc3RhdGUub25saW5lPy5wYXJ0aWNpcGFudHM7XG4gICAgICBpZiAoIXBhcnRpY2lwYW50cz8ud2hpdGUgfHwgIXBhcnRpY2lwYW50cy5ibGFjayB8fCAhc3RhdGUub25saW5lKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICBjb25zdCBjdXJyZW50UGFydGljaXBhbnQgPSB0aGlzLnBhcnRpY2lwYW50Rm9yU2lkZShzdGF0ZSwgdGhpcy5wYXJ0aWNpcGFudFNpZGUoc3RhdGUsIHVpZCkpO1xuICAgICAgY29uc3QgcmVxdWVzdEtleSA9IHRoaXMucGFydGljaXBhbnRLZXkoY3VycmVudFBhcnRpY2lwYW50KTtcbiAgICAgIGlmICghcmVxdWVzdEtleSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgcmVxdWVzdHMgPSBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLihzdGF0ZS5vbmxpbmUucmVtYXRjaFJlcXVlc3RzID8/IFtdKSwgcmVxdWVzdEtleV0pKTtcbiAgICAgIGNvbnN0IGJvdGhSZWFkeSA9IFtwYXJ0aWNpcGFudHMud2hpdGUsIHBhcnRpY2lwYW50cy5ibGFja10uZXZlcnkoKGl0ZW0pID0+XG4gICAgICAgIHRoaXMucGFydGljaXBhbnRSZXF1ZXN0S2V5cyhpdGVtKS5zb21lKChrZXkpID0+IHJlcXVlc3RzLmluY2x1ZGVzKGtleSkpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG5cbiAgICAgIGlmICghYm90aFJlYWR5KSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIHRoaXMud2l0aG91dFVuZGVmaW5lZCh7XG4gICAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgICAgb25saW5lOiB7IC4uLnN0YXRlLm9ubGluZSwgdXBkYXRlZEF0OiBub3cudG9JU09TdHJpbmcoKSwgcmVtYXRjaFJlcXVlc3RzOiByZXF1ZXN0cyB9LFxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFt3aGl0ZSwgYmxhY2tdID0gTWF0aC5yYW5kb20oKSA+IDAuNVxuICAgICAgICA/IFtwYXJ0aWNpcGFudHMud2hpdGUsIHBhcnRpY2lwYW50cy5ibGFja11cbiAgICAgICAgOiBbcGFydGljaXBhbnRzLmJsYWNrLCBwYXJ0aWNpcGFudHMud2hpdGVdO1xuICAgICAgY29uc3QgbmV4dCA9IGNyZWF0ZUNoZXNzaW1hbHNHYW1lKHN0YXRlLmJvYXJkU2l6ZSwge1xuICAgICAgICBpZDogc3RhdGUuaWQsXG4gICAgICAgIG1vZGU6ICdvbmxpbmUnLFxuICAgICAgICBzdGF0dXM6ICdpbl9wcm9ncmVzcycsXG4gICAgICAgIG9ubGluZToge1xuICAgICAgICAgIC4uLnN0YXRlLm9ubGluZSxcbiAgICAgICAgICB1cGRhdGVkQXQ6IG5vdy50b0lTT1N0cmluZygpLFxuICAgICAgICAgIHJvdW5kOiBzdGF0ZS5vbmxpbmUucm91bmQgKyAxLFxuICAgICAgICAgIHBhcnRpY2lwYW50czoge1xuICAgICAgICAgICAgd2hpdGU6IHsgLi4ud2hpdGUsIHNpZGU6ICd3aGl0ZScgfSxcbiAgICAgICAgICAgIGJsYWNrOiB7IC4uLmJsYWNrLCBzaWRlOiAnYmxhY2snIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZW1hdGNoUmVxdWVzdHM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHNhbml0aXplZE5leHQgPSB0aGlzLndpdGhvdXRVbmRlZmluZWQobmV4dCkgYXMgQ2hlc3NpbWFsc0dhbWVTdGF0ZTtcbiAgICAgIHRyYW5zYWN0aW9uLnNldChyZWYsIHNhbml0aXplZE5leHQpO1xuICAgICAgcmV0dXJuIHNhbml0aXplZE5leHQ7XG4gICAgfSk7XG4gIH1cblxuICBwYXJ0aWNpcGFudFNpZGUoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIHVpZCA9IHRoaXMuY3VycmVudFVpZCk6IENoZXNzaW1hbHNQbGF5ZXJDb2xvciB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZW50cmllcyA9IHRoaXMucGFydGljaXBhbnRFbnRyaWVzKHN0YXRlKTtcbiAgICBjb25zdCBjdXJyZW50U2VhdEtleSA9IHRoaXMuY3VycmVudFNlYXRLZXkodWlkKTtcbiAgICBpZiAoY3VycmVudFNlYXRLZXkpIHtcbiAgICAgIGNvbnN0IHNlYXRNYXRjaCA9IGVudHJpZXMuZmluZCgoWywgcGFydGljaXBhbnRdKSA9PiB0aGlzLnBhcnRpY2lwYW50S2V5KHBhcnRpY2lwYW50KSA9PT0gY3VycmVudFNlYXRLZXkpO1xuICAgICAgaWYgKHNlYXRNYXRjaCkgcmV0dXJuIHNlYXRNYXRjaFswXTtcbiAgICB9XG5cbiAgICBpZiAodWlkKSB7XG4gICAgICBjb25zdCBjdXJyZW50UHJvZmlsZSA9IHRoaXMucHJvZmlsZXMuYWN0aXZlUHJvZmlsZSgpO1xuICAgICAgaWYgKGN1cnJlbnRQcm9maWxlKSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeVByb2ZpbGVNYXRjaCA9IGVudHJpZXMuZmluZCgoWywgcGFydGljaXBhbnRdKSA9PlxuICAgICAgICAgIHBhcnRpY2lwYW50LnVpZCA9PT0gdWlkXG4gICAgICAgICAgJiYgcGFydGljaXBhbnQuYXZhdGFyID09PSBjdXJyZW50UHJvZmlsZS5hdmF0YXJcbiAgICAgICAgICAmJiB0aGlzLm5vcm1hbGl6ZUNvbG9yKHBhcnRpY2lwYW50LmNvbG9yKSA9PT0gdGhpcy5ub3JtYWxpemVDb2xvcihjdXJyZW50UHJvZmlsZS5jb2xvciksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChsZWdhY3lQcm9maWxlTWF0Y2gpIHJldHVybiBsZWdhY3lQcm9maWxlTWF0Y2hbMF07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHVpZE1hdGNoZXMgPSBlbnRyaWVzLmZpbHRlcigoWywgcGFydGljaXBhbnRdKSA9PiBwYXJ0aWNpcGFudC51aWQgPT09IHVpZCk7XG4gICAgICBpZiAodWlkTWF0Y2hlcy5sZW5ndGggPT09IDEpIHJldHVybiB1aWRNYXRjaGVzWzBdWzBdO1xuICAgIH1cblxuICAgIGNvbnN0IGFjY291bnRVc2VySWQgPSB0aGlzLmF1dGgudXNlcigpPy51c2VySWQ7XG4gICAgaWYgKGFjY291bnRVc2VySWQpIHtcbiAgICAgIGNvbnN0IGFjY291bnRNYXRjaGVzID0gZW50cmllcy5maWx0ZXIoKFssIHBhcnRpY2lwYW50XSkgPT4gcGFydGljaXBhbnQuYWNjb3VudFVzZXJJZCA9PT0gYWNjb3VudFVzZXJJZCk7XG4gICAgICBpZiAoYWNjb3VudE1hdGNoZXMubGVuZ3RoID09PSAxKSByZXR1cm4gYWNjb3VudE1hdGNoZXNbMF1bMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzUGFydGljaXBhbnQoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIHVpZCA9IHRoaXMuY3VycmVudFVpZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucGFydGljaXBhbnRTaWRlKHN0YXRlLCB1aWQpO1xuICB9XG5cbiAgaXNIb3N0V2FpdGluZyhzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSwgdWlkID0gdGhpcy5jdXJyZW50VWlkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0YXRlLnN0YXR1cyA9PT0gJ3dhaXRpbmcnICYmIHRoaXMubWF0Y2hlc0N1cnJlbnRQYXJ0aWNpcGFudChzdGF0ZS5vbmxpbmU/LmxvYmJ5LCB1aWQpO1xuICB9XG5cbiAgaXNQZW5kaW5nR3Vlc3Qoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIHVpZCA9IHRoaXMuY3VycmVudFVpZCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdGF0ZS5zdGF0dXMgPT09ICd3YWl0aW5nJyAmJiB0aGlzLm1hdGNoZXNDdXJyZW50UGFydGljaXBhbnQoc3RhdGUub25saW5lPy5wZW5kaW5nR3Vlc3QsIHVpZCk7XG4gIH1cblxuICBoYXNDdXJyZW50UmVtYXRjaFJlcXVlc3Qoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsIHVpZCA9IHRoaXMuY3VycmVudFVpZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNpZGUgPSB0aGlzLnBhcnRpY2lwYW50U2lkZShzdGF0ZSwgdWlkKTtcbiAgICBjb25zdCBwYXJ0aWNpcGFudCA9IHRoaXMucGFydGljaXBhbnRGb3JTaWRlKHN0YXRlLCBzaWRlKTtcbiAgICByZXR1cm4gdGhpcy5wYXJ0aWNpcGFudFJlcXVlc3RLZXlzKHBhcnRpY2lwYW50KS5zb21lKChrZXkpID0+IChzdGF0ZS5vbmxpbmU/LnJlbWF0Y2hSZXF1ZXN0cyA/PyBbXSkuaW5jbHVkZXMoa2V5KSk7XG4gIH1cblxuICBoYXNPcHBvbmVudFJlbWF0Y2hSZXF1ZXN0KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCB1aWQgPSB0aGlzLmN1cnJlbnRVaWQpOiBib29sZWFuIHtcbiAgICBjb25zdCBzaWRlID0gdGhpcy5wYXJ0aWNpcGFudFNpZGUoc3RhdGUsIHVpZCk7XG4gICAgaWYgKCFzaWRlKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3Qgb3Bwb25lbnQgPSB0aGlzLnBhcnRpY2lwYW50Rm9yU2lkZShzdGF0ZSwgc2lkZSA9PT0gJ3doaXRlJyA/ICdibGFjaycgOiAnd2hpdGUnKTtcbiAgICByZXR1cm4gdGhpcy5wYXJ0aWNpcGFudFJlcXVlc3RLZXlzKG9wcG9uZW50KS5zb21lKChrZXkpID0+IChzdGF0ZS5vbmxpbmU/LnJlbWF0Y2hSZXF1ZXN0cyA/PyBbXSkuaW5jbHVkZXMoa2V5KSk7XG4gIH1cblxuICBwYXJ0aWNpcGFudEtleShwYXJ0aWNpcGFudD86IENoZXNzaW1hbHNPbmxpbmVQYXJ0aWNpcGFudCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHBhcnRpY2lwYW50Py5zZWF0S2V5XG4gICAgICB8fCB0aGlzLmJ1aWxkU2VhdEtleShwYXJ0aWNpcGFudD8udWlkLCBwYXJ0aWNpcGFudD8ucHJvZmlsZUlkKVxuICAgICAgfHwgcGFydGljaXBhbnQ/LnByb2ZpbGVJZFxuICAgICAgfHwgcGFydGljaXBhbnQ/LmFjY291bnRVc2VySWRcbiAgICAgIHx8IHBhcnRpY2lwYW50Py51aWRcbiAgICAgIHx8ICcnO1xuICB9XG5cbiAgc2hhcmVVcmwoZ2FtZUlkOiBzdHJpbmcsIGJhc2VSb3V0ZSA9ICcvbWluaS1nYW1lcycpOiBzdHJpbmcge1xuICAgIGNvbnN0IG9yaWdpbiA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnID8gJycgOiB3aW5kb3cubG9jYXRpb24ub3JpZ2luO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRCYXNlUm91dGUgPSBgLyR7YmFzZVJvdXRlLnJlcGxhY2UoL15cXC8rfFxcLyskL2csICcnKSB8fCAnbWluaS1nYW1lcyd9YDtcbiAgICByZXR1cm4gYCR7b3JpZ2lufSR7bm9ybWFsaXplZEJhc2VSb3V0ZX0vY2hlc3NpbWFscy8ke2VuY29kZVVSSUNvbXBvbmVudCh0aGlzLm5vcm1hbGl6ZUdhbWVJZChnYW1lSWQpKX1gO1xuICB9XG5cbiAgcHJvamVjdGlvblNoYXJlVXJsKGdhbWVJZDogc3RyaW5nLCBiYXNlUm91dGUgPSAnL21pbmktZ2FtZXMnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5zaGFyZVVybChnYW1lSWQsIGJhc2VSb3V0ZSl9L3Byb2plY3Rpb25gO1xuICB9XG5cbiAgYXN5bmMgc2F2ZUN1cnJlbnRVc2VySGlzdG9yeShzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHVpZCA9IHRoaXMuY3VycmVudFVpZDtcbiAgICBpZiAoIXVpZCB8fCBzdGF0ZS5tb2RlICE9PSAnb25saW5lJykgcmV0dXJuO1xuICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5jcmVhdGVIaXN0b3J5RW50cnkoc3RhdGUsIHVpZCk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuO1xuICAgIGF3YWl0IHNldERvYyh0aGlzLmhpc3RvcnlSZWYodWlkLCBzdGF0ZS5pZCksIHRoaXMud2l0aG91dFVuZGVmaW5lZChlbnRyeSksIHsgbWVyZ2U6IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIGdhbWVSZWYoZ2FtZUlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZG9jKHRoaXMuZmlyZXN0b3JlLCBgJHtDT0xMRUNUSU9OX1BBVEh9LyR7Z2FtZUlkfWApO1xuICB9XG5cbiAgcHJpdmF0ZSBoaXN0b3J5UGF0aCh1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGB1c2Vycy8ke3VpZH0vbWluaUdhbWVzL2NoZXNzaW1hbHMvaGlzdG9yeWA7XG4gIH1cblxuICBwcml2YXRlIGhpc3RvcnlSZWYodWlkOiBzdHJpbmcsIGdhbWVJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGRvYyh0aGlzLmZpcmVzdG9yZSwgYCR7dGhpcy5oaXN0b3J5UGF0aCh1aWQpfS8ke2dhbWVJZH1gKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5zdXJlVXNlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGF3YWl0IHRoaXMuZmlyZWJhc2Uud2hlbkZpcmViYXNlQXV0aFJlYWR5KCk7XG4gICAgY29uc3QgdXNlciA9IHRoaXMuZmlyZWJhc2VBdXRoLmN1cnJlbnRVc2VyO1xuICAgIGlmICh1c2VyPy51aWQpIHtcbiAgICAgIGF3YWl0IHVzZXIuZ2V0SWRUb2tlbigpO1xuICAgICAgcmV0dXJuIHVzZXIudWlkO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NIRVNTSU1BTFNfTE9HSU5fUkVRVUlSRUQnKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVjb2RlSW5wdXQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUGFydGljaXBhbnQodWlkOiBzdHJpbmcsIGpvaW5lZEF0OiBzdHJpbmcpOiBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQge1xuICAgIGNvbnN0IHVzZXIgPSB0aGlzLmF1dGgudXNlcigpO1xuICAgIGNvbnN0IGZpcmViYXNlVXNlciA9IHRoaXMuZmlyZWJhc2VBdXRoLmN1cnJlbnRVc2VyO1xuICAgIGNvbnN0IHByb2ZpbGUgPSB0aGlzLnByb2ZpbGVzLmFjdGl2ZVByb2ZpbGUoKTtcbiAgICBjb25zdCBoYW5kbGUgPSB0aGlzLm5vcm1hbGl6ZUhhbmRsZSh1c2VyPy5oYW5kbGUpO1xuICAgIGNvbnN0IGF2YXRhclVybCA9IHVzZXI/LmF2YXRhclVybD8udHJpbSgpIHx8IGZpcmViYXNlVXNlcj8ucGhvdG9VUkw/LnRyaW0oKSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc3QgZW1haWwgPSB1c2VyPy5lbWFpbD8udHJpbSgpIHx8IGZpcmViYXNlVXNlcj8uZW1haWw/LnRyaW0oKSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc3QgcHJvZmlsZUlkID0gcHJvZmlsZT8uaWQgPz8gdXNlcj8udXNlcklkID8/IHVpZDtcblxuICAgIHJldHVybiB7XG4gICAgICB1aWQsXG4gICAgICBhY2NvdW50VXNlcklkOiB1c2VyPy51c2VySWQsXG4gICAgICBwcm9maWxlSWQsXG4gICAgICBzZWF0S2V5OiB0aGlzLmJ1aWxkU2VhdEtleSh1aWQsIHByb2ZpbGVJZCksXG4gICAgICBuYW1lOiB1c2VyPy5uYW1lPy50cmltKClcbiAgICAgICAgfHwgZmlyZWJhc2VVc2VyPy5kaXNwbGF5TmFtZT8udHJpbSgpXG4gICAgICAgIHx8IGVtYWlsXG4gICAgICAgIHx8IHRoaXMucHJvZmlsZXMuZGlzcGxheU5hbWUocHJvZmlsZSwgJ0p1Z2Fkb3InKSxcbiAgICAgIGhhbmRsZSxcbiAgICAgIGVtYWlsLFxuICAgICAgYXZhdGFyOiBwcm9maWxlPy5hdmF0YXIgPz8gJ+KZn++4jycsXG4gICAgICBhdmF0YXJVcmwsXG4gICAgICBjb2xvcjogcHJvZmlsZT8uY29sb3IgPz8gJyNmZjAwYjInLFxuICAgICAgam9pbmVkQXQsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplSGFuZGxlKGhhbmRsZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdHJpbW1lZCA9IGhhbmRsZT8udHJpbSgpO1xuICAgIGlmICghdHJpbW1lZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gdHJpbW1lZC5zdGFydHNXaXRoKCdAJykgPyB0cmltbWVkIDogYEAke3RyaW1tZWR9YDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTZWF0S2V5KHVpZD86IHN0cmluZywgcHJvZmlsZUlkPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBub3JtYWxpemVkVWlkID0gdWlkPy50cmltKCk7XG4gICAgY29uc3Qgbm9ybWFsaXplZFByb2ZpbGVJZCA9IHByb2ZpbGVJZD8udHJpbSgpO1xuICAgIGlmICghbm9ybWFsaXplZFVpZCB8fCAhbm9ybWFsaXplZFByb2ZpbGVJZCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYCR7bm9ybWFsaXplZFVpZH06JHtub3JtYWxpemVkUHJvZmlsZUlkfWA7XG4gIH1cblxuICBwcml2YXRlIGN1cnJlbnRTZWF0S2V5KHVpZCA9IHRoaXMuY3VycmVudFVpZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRTZWF0S2V5KHVpZCwgdGhpcy5wcm9maWxlcy5hY3RpdmVQcm9maWxlKCk/LmlkKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFydGljaXBhbnRGb3JTaWRlKFxuICAgIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLFxuICAgIHNpZGU/OiBDaGVzc2ltYWxzUGxheWVyQ29sb3IsXG4gICk6IENoZXNzaW1hbHNPbmxpbmVQYXJ0aWNpcGFudCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKCFzaWRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBzdGF0ZS5vbmxpbmU/LnBhcnRpY2lwYW50cz8uW3NpZGVdO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJ0aWNpcGFudEVudHJpZXMoc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUpOiBbQ2hlc3NpbWFsc1BsYXllckNvbG9yLCBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnRdW10ge1xuICAgIGNvbnN0IHBhcnRpY2lwYW50cyA9IHN0YXRlLm9ubGluZT8ucGFydGljaXBhbnRzO1xuICAgIHJldHVybiAoWyd3aGl0ZScsICdibGFjayddIGFzIENoZXNzaW1hbHNQbGF5ZXJDb2xvcltdKVxuICAgICAgLm1hcCgoc2lkZSkgPT4gW3NpZGUsIHBhcnRpY2lwYW50cz8uW3NpZGVdXSBhcyBbQ2hlc3NpbWFsc1BsYXllckNvbG9yLCBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnQgfCB1bmRlZmluZWRdKVxuICAgICAgLmZpbHRlcigoZW50cnkpOiBlbnRyeSBpcyBbQ2hlc3NpbWFsc1BsYXllckNvbG9yLCBDaGVzc2ltYWxzT25saW5lUGFydGljaXBhbnRdID0+ICEhZW50cnlbMV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXJ0aWNpcGFudFJlcXVlc3RLZXlzKHBhcnRpY2lwYW50PzogQ2hlc3NpbWFsc09ubGluZVBhcnRpY2lwYW50KTogc3RyaW5nW10ge1xuICAgIGlmICghcGFydGljaXBhbnQpIHJldHVybiBbXTtcbiAgICBjb25zdCBrZXlzID0gW1xuICAgICAgdGhpcy5wYXJ0aWNpcGFudEtleShwYXJ0aWNpcGFudCksXG4gICAgICBwYXJ0aWNpcGFudC51aWQsXG4gICAgICBwYXJ0aWNpcGFudC5hY2NvdW50VXNlcklkLFxuICAgICAgcGFydGljaXBhbnQucHJvZmlsZUlkLFxuICAgIF07XG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChrZXlzLmZpbHRlcigoa2V5KToga2V5IGlzIHN0cmluZyA9PiAhIWtleSkpKTtcbiAgfVxuXG4gIHByaXZhdGUgbWF0Y2hlc0N1cnJlbnRQYXJ0aWNpcGFudChwYXJ0aWNpcGFudD86IENoZXNzaW1hbHNPbmxpbmVQYXJ0aWNpcGFudCwgdWlkID0gdGhpcy5jdXJyZW50VWlkKTogYm9vbGVhbiB7XG4gICAgaWYgKCFwYXJ0aWNpcGFudCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3Qgc2VhdEtleSA9IHRoaXMuY3VycmVudFNlYXRLZXkodWlkKTtcbiAgICBpZiAoc2VhdEtleSAmJiB0aGlzLnBhcnRpY2lwYW50S2V5KHBhcnRpY2lwYW50KSA9PT0gc2VhdEtleSkgcmV0dXJuIHRydWU7XG5cbiAgICBjb25zdCBwcm9maWxlID0gdGhpcy5wcm9maWxlcy5hY3RpdmVQcm9maWxlKCk7XG4gICAgaWYgKHVpZCAmJiBwcm9maWxlKSB7XG4gICAgICByZXR1cm4gcGFydGljaXBhbnQudWlkID09PSB1aWRcbiAgICAgICAgJiYgcGFydGljaXBhbnQuYXZhdGFyID09PSBwcm9maWxlLmF2YXRhclxuICAgICAgICAmJiB0aGlzLm5vcm1hbGl6ZUNvbG9yKHBhcnRpY2lwYW50LmNvbG9yKSA9PT0gdGhpcy5ub3JtYWxpemVDb2xvcihwcm9maWxlLmNvbG9yKTtcbiAgICB9XG5cbiAgICBpZiAodWlkICYmIHBhcnRpY2lwYW50LnVpZCA9PT0gdWlkKSByZXR1cm4gdHJ1ZTtcbiAgICBjb25zdCBhY2NvdW50VXNlcklkID0gdGhpcy5hdXRoLnVzZXIoKT8udXNlcklkO1xuICAgIHJldHVybiAhIWFjY291bnRVc2VySWQgJiYgcGFydGljaXBhbnQuYWNjb3VudFVzZXJJZCA9PT0gYWNjb3VudFVzZXJJZDtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplQ29sb3IoY29sb3I/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiAoY29sb3IgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB3aXRoVXBkYXRlZEF0KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBkYXRlID0gbmV3IERhdGUoKSk6IENoZXNzaW1hbHNHYW1lU3RhdGUge1xuICAgIGlmICghc3RhdGUub25saW5lKSByZXR1cm4gc3RhdGU7XG4gICAgcmV0dXJuIHRoaXMud2l0aG91dFVuZGVmaW5lZCh7IC4uLnN0YXRlLCBvbmxpbmU6IHsgLi4uc3RhdGUub25saW5lLCB1cGRhdGVkQXQ6IGRhdGUudG9JU09TdHJpbmcoKSB9IH0pIGFzIENoZXNzaW1hbHNHYW1lU3RhdGU7XG4gIH1cblxuICBwcml2YXRlIHdpdGhNb3ZlTG9nKHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCBlbnRyeTogQ2hlc3NpbWFsc01vdmVMb2dFbnRyeSwgZGF0ZSA9IG5ldyBEYXRlKCkpOiBDaGVzc2ltYWxzR2FtZVN0YXRlIHtcbiAgICBpZiAoIXN0YXRlLm9ubGluZSkgcmV0dXJuIHRoaXMud2l0aFVwZGF0ZWRBdChzdGF0ZSwgZGF0ZSk7XG4gICAgcmV0dXJuIHRoaXMud2l0aG91dFVuZGVmaW5lZCh7XG4gICAgICAuLi5zdGF0ZSxcbiAgICAgIG9ubGluZToge1xuICAgICAgICAuLi5zdGF0ZS5vbmxpbmUsXG4gICAgICAgIHVwZGF0ZWRBdDogZGF0ZS50b0lTT1N0cmluZygpLFxuICAgICAgICBtb3ZlTG9nOiBbLi4uKHN0YXRlLm9ubGluZS5tb3ZlTG9nID8/IFtdKSwgZW50cnldLnNsaWNlKC04MCksXG4gICAgICB9LFxuICAgIH0pIGFzIENoZXNzaW1hbHNHYW1lU3RhdGU7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU1vdmVMb2dFbnRyeShhcmdzOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICB1aWQ6IHN0cmluZztcbiAgICBzaWRlPzogQ2hlc3NpbWFsc1BsYXllckNvbG9yO1xuICAgIHN0YXR1czogQ2hlc3NpbWFsc01vdmVMb2dFbnRyeVsnc3RhdHVzJ107XG4gICAgY29kZT86IHN0cmluZztcbiAgICBtZXNzYWdlPzogc3RyaW5nO1xuICAgIG1vdmU6IENoZXNzaW1hbHNNb3ZlO1xuICAgIHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICAgIHVwZGF0ZWQ/OiBDaGVzc2ltYWxzR2FtZVN0YXRlO1xuICB9KTogQ2hlc3NpbWFsc01vdmVMb2dFbnRyeSB7XG4gICAgY29uc3QgcGFydGljaXBhbnQgPSB0aGlzLnBhcnRpY2lwYW50Rm9yU2lkZShhcmdzLnN0YXRlLCBhcmdzLnNpZGUpO1xuICAgIHJldHVybiB0aGlzLndpdGhvdXRVbmRlZmluZWQoe1xuICAgICAgaWQ6IGFyZ3MuaWQsXG4gICAgICBhdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgdWlkOiBhcmdzLnVpZCxcbiAgICAgIHByb2ZpbGVJZDogcGFydGljaXBhbnQ/LnByb2ZpbGVJZCxcbiAgICAgIHNlYXRLZXk6IHRoaXMucGFydGljaXBhbnRLZXkocGFydGljaXBhbnQpIHx8IHVuZGVmaW5lZCxcbiAgICAgIHNpZGU6IGFyZ3Muc2lkZSxcbiAgICAgIHN0YXR1czogYXJncy5zdGF0dXMsXG4gICAgICBjb2RlOiBhcmdzLmNvZGUsXG4gICAgICBtZXNzYWdlOiBhcmdzLm1lc3NhZ2UsXG4gICAgICBtb3ZlOiB0aGlzLnNhbml0aXplTW92ZShhcmdzLm1vdmUpLFxuICAgICAgbW92ZUNvdW50QmVmb3JlOiBhcmdzLnN0YXRlLm1vdmVDb3VudCxcbiAgICAgIG1vdmVDb3VudEFmdGVyOiBhcmdzLnVwZGF0ZWQ/Lm1vdmVDb3VudCxcbiAgICAgIGN1cnJlbnRUdXJuQmVmb3JlOiBhcmdzLnN0YXRlLmN1cnJlbnRUdXJuLFxuICAgIH0pIGFzIENoZXNzaW1hbHNNb3ZlTG9nRW50cnk7XG4gIH1cblxuICBwcml2YXRlIHNhbml0aXplTW92ZShtb3ZlOiBDaGVzc2ltYWxzTW92ZSk6IENoZXNzaW1hbHNNb3ZlIHtcbiAgICByZXR1cm4gdGhpcy53aXRob3V0VW5kZWZpbmVkKHtcbiAgICAgIHBpZWNlSWQ6IG1vdmUucGllY2VJZCxcbiAgICAgIGZyb206IHsgLi4ubW92ZS5mcm9tIH0sXG4gICAgICB0bzogeyAuLi5tb3ZlLnRvIH0sXG4gICAgICBraW5kOiBtb3ZlLmtpbmQsXG4gICAgICBhbmltYWw6IG1vdmUuYW5pbWFsLFxuICAgICAgY2FwdHVyZXNQaWVjZUlkOiBtb3ZlLmNhcHR1cmVzUGllY2VJZCxcbiAgICB9KSBhcyBDaGVzc2ltYWxzTW92ZTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlSGlzdG9yeUVudHJ5KHN0YXRlOiBDaGVzc2ltYWxzR2FtZVN0YXRlLCB1aWQ6IHN0cmluZyk6IENoZXNzaW1hbHNIaXN0b3J5RW50cnkgfCB1bmRlZmluZWQge1xuICAgIGlmICghc3RhdGUub25saW5lKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgc2lkZSA9IHRoaXMucGFydGljaXBhbnRTaWRlKHN0YXRlLCB1aWQpO1xuICAgIGNvbnN0IGlzTG9iYnlIb3N0ID0gdGhpcy5pc0hvc3RXYWl0aW5nKHN0YXRlLCB1aWQpO1xuICAgIGNvbnN0IGlzUGVuZGluZ0d1ZXN0ID0gdGhpcy5pc1BlbmRpbmdHdWVzdChzdGF0ZSwgdWlkKTtcbiAgICBpZiAoIXNpZGUgJiYgIWlzTG9iYnlIb3N0ICYmICFpc1BlbmRpbmdHdWVzdCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IG9wcG9uZW50ID0gc2lkZVxuICAgICAgPyBzaWRlID09PSAnd2hpdGUnXG4gICAgICAgID8gc3RhdGUub25saW5lLnBhcnRpY2lwYW50cz8uYmxhY2tcbiAgICAgICAgOiBzdGF0ZS5vbmxpbmUucGFydGljaXBhbnRzPy53aGl0ZVxuICAgICAgOiBpc0xvYmJ5SG9zdFxuICAgICAgICA/IHN0YXRlLm9ubGluZS5wZW5kaW5nR3Vlc3RcbiAgICAgICAgOiBzdGF0ZS5vbmxpbmUubG9iYnk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2FtZUlkOiBzdGF0ZS5pZCxcbiAgICAgIG1vZGU6ICdvbmxpbmUnLFxuICAgICAgYm9hcmRTaXplOiBzdGF0ZS5ib2FyZFNpemUsXG4gICAgICBzdGF0dXM6IHN0YXRlLnN0YXR1cyxcbiAgICAgIG91dGNvbWU6IHRoaXMuaGlzdG9yeU91dGNvbWUoc3RhdGUsIHVpZCwgc2lkZSwgaXNQZW5kaW5nR3Vlc3QpLFxuICAgICAgc2lkZSxcbiAgICAgIG9wcG9uZW50VWlkOiBvcHBvbmVudD8udWlkLFxuICAgICAgb3Bwb25lbnROYW1lOiBvcHBvbmVudD8ubmFtZSxcbiAgICAgIHdpbm5lcjogc3RhdGUud2lubmVyLFxuICAgICAgd2lubmVyUmVhc29uOiBzdGF0ZS53aW5uZXJSZWFzb24sXG4gICAgICBtb3ZlQ291bnQ6IHN0YXRlLm1vdmVDb3VudCxcbiAgICAgIHJvdW5kOiBzdGF0ZS5vbmxpbmUucm91bmQsXG4gICAgICBjcmVhdGVkQXQ6IHN0YXRlLm9ubGluZS5jcmVhdGVkQXQsXG4gICAgICB1cGRhdGVkQXQ6IHN0YXRlLm9ubGluZS51cGRhdGVkQXQsXG4gICAgICBmaW5pc2hlZEF0OiBzdGF0ZS5zdGF0dXMgPT09ICdmaW5pc2hlZCcgPyBzdGF0ZS5vbmxpbmUudXBkYXRlZEF0IDogdW5kZWZpbmVkLFxuICAgICAgZXhwaXJlc0F0OiBzdGF0ZS5vbmxpbmUuZXhwaXJlc0F0LFxuICAgICAgcmVtYXRjaE9mOiBzdGF0ZS5vbmxpbmUucmVtYXRjaE9mLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHdpdGhvdXRVbmRlZmluZWQ8VCBleHRlbmRzIG9iamVjdD4odmFsdWU6IFQpOiBQYXJ0aWFsPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5zdHJpcFVuZGVmaW5lZCh2YWx1ZSkgYXMgUGFydGlhbDxUPjtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaXBVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiB1bmtub3duIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGVudHJ5KSA9PiB0aGlzLnN0cmlwVW5kZWZpbmVkKGVudHJ5KSk7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuICAgICAgICAgIC5maWx0ZXIoKFssIGVudHJ5XSkgPT4gZW50cnkgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAubWFwKChba2V5LCBlbnRyeV0pID0+IFtrZXksIHRoaXMuc3RyaXBVbmRlZmluZWQoZW50cnkpXSksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaGlzdG9yeU91dGNvbWUoXG4gICAgc3RhdGU6IENoZXNzaW1hbHNHYW1lU3RhdGUsXG4gICAgdWlkOiBzdHJpbmcsXG4gICAgc2lkZTogQ2hlc3NpbWFsc1BsYXllckNvbG9yIHwgdW5kZWZpbmVkLFxuICAgIGlzUGVuZGluZ0d1ZXN0OiBib29sZWFuLFxuICApOiBDaGVzc2ltYWxzSGlzdG9yeUVudHJ5WydvdXRjb21lJ10ge1xuICAgIGlmIChzdGF0ZS5zdGF0dXMgPT09ICdmaW5pc2hlZCcgJiYgc2lkZSAmJiBzdGF0ZS53aW5uZXIpIHJldHVybiBzdGF0ZS53aW5uZXIgPT09IHNpZGUgPyAnd29uJyA6ICdsb3N0JztcbiAgICBpZiAoc3RhdGUuc3RhdHVzID09PSAnaW5fcHJvZ3Jlc3MnKSByZXR1cm4gJ2luX3Byb2dyZXNzJztcbiAgICBpZiAoaXNQZW5kaW5nR3Vlc3QpIHJldHVybiAncGVuZGluZyc7XG4gICAgcmV0dXJuICd3YWl0aW5nJztcbiAgfVxuXG4gIHByaXZhdGUgYXNzZXJ0Tm90RXhwaXJlZChzdGF0ZTogQ2hlc3NpbWFsc0dhbWVTdGF0ZSk6IHZvaWQge1xuICAgIGlmICgoc3RhdGUub25saW5lPy5leHBpcmVzQXRNcyA/PyAwKSA8IERhdGUubm93KCkpIHRocm93IG5ldyBFcnJvcignQ0hFU1NJTUFMU19HQU1FX0VYUElSRUQnKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlR2FtZUlkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYWxwaGFiZXQgPSAnQUJDREVGR0hKS0xNTlBRUlNUVVZXWFlaMjM0NTY3ODknO1xuICAgIGNvbnN0IG1ha2VQYXJ0ID0gKCk6IHN0cmluZyA9PiBBcnJheS5mcm9tKHsgbGVuZ3RoOiA0IH0sICgpID0+IGFscGhhYmV0W3RoaXMucmFuZG9tSW5kZXgoYWxwaGFiZXQubGVuZ3RoKV0pLmpvaW4oJycpO1xuICAgIHJldHVybiBgJHttYWtlUGFydCgpfS0ke21ha2VQYXJ0KCl9YDtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT3BlcmF0aW9uSWQoKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgJ3JhbmRvbVVVSUQnIGluIGNyeXB0bykgcmV0dXJuIGNyeXB0by5yYW5kb21VVUlEKCk7XG4gICAgcmV0dXJuIGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xuICB9XG5cbiAgcHJpdmF0ZSByYW5kb21JbmRleChtYXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBVaW50MzJBcnJheSgxKTtcbiAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModmFsdWVzKTtcbiAgICAgIHJldHVybiB2YWx1ZXNbMF0gJSBtYXg7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBtYXgpO1xuICB9XG5cbn1cbiJdfQ==
|