tnx-shared 6.0.7 → 6.0.8

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.
@@ -93,6 +93,14 @@ export class T06HelperService {
93
93
  const positionMap = yield this.createPositionMap(password);
94
94
  const reverseMap = new Map();
95
95
  positionMap.forEach((value, key) => reverseMap.set(value, key));
96
+ console.log("indexString____", indexString
97
+ .split(',')
98
+ .map(part => {
99
+ var _a;
100
+ const position = parseInt(part, 10);
101
+ return (_a = reverseMap.get(position)) !== null && _a !== void 0 ? _a : '';
102
+ })
103
+ .join(''));
96
104
  return indexString
97
105
  .split(',')
98
106
  .map(part => {
@@ -108,4 +116,4 @@ T06HelperService.ɵprov = i0.ɵɵdefineInjectable({ factory: function T06HelperS
108
116
  T06HelperService.decorators = [
109
117
  { type: Injectable, args: [{ providedIn: 'root' },] }
110
118
  ];
111
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidDA2aGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NvbW1vbi90MDZoZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxnQkFBZ0I7SUFFM0IsK0VBQStFO0lBQy9FLG9FQUFvRTtJQUM1RCxrQkFBa0IsQ0FBQyxJQUFZO1FBQ3JDLE1BQU0sSUFBSSxHQUFJLFVBQVUsQ0FBQyxDQUFDLGlCQUFpQjtRQUMzQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksS0FBSyxHQUFLLENBQUMsQ0FBQztRQUNoQixJQUFJLE1BQU0sR0FBSSxFQUFFLENBQUM7UUFFakIsc0VBQXNFO1FBQ3RFLE1BQU0sV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLElBQUksRUFBRSxHQUFHLEtBQUssR0FBRyxXQUFXLENBQUM7UUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUFFLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDdkIsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFWCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNCLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUs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QUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRTtnQkFDekIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdkUsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO0tBQUE7SUFFRCw4REFBOEQ7SUFDeEQsZUFBZSxDQUFDLFdBQW1CLEVBQUUsUUFBZ0I7O1lBQ3pELElBQUksQ0FBQyxXQUFXO2dCQUFFLE9BQU8sRUFBRSxDQUFDO1lBRTVCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzNELE1BQU0sVUFBVSxHQUFJLElBQUksR0FBRyxFQUFrQixDQUFDO1lBQzlDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRWhFLE9BQU8sV0FBVztpQkFDZixLQUFLLENBQUMsR0FBRyxDQUFDO2lCQUNWLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTs7Z0JBQ1YsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDcEMsYUFBTyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQ0FBSSxFQUFFLENBQUM7WUFDeEMsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNkLENBQUM7S0FBQTs7OztZQTNHRixVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFQwNkhlbHBlclNlcnZpY2Uge1xyXG5cclxuICAvLyBQb3J0IGNow61uaCB4w6FjIHRodeG6rXQgdG/DoW4gU3lzdGVtLlJhbmRvbShzZWVkKSBj4bunYSBDIyAoc3VidHJhY3RpdmUgYWxnb3JpdGhtKVxyXG4gIC8vIG5ldyBSYW5kb20oc2VlZCkgdHJvbmcgbeG7jWkgcGhpw6puIGLhuqNuIC5ORVQgxJHhu4F1IGTDuW5nIHRodeG6rXQgdG/DoW4gbsOgeVxyXG4gIHByaXZhdGUgY3JlYXRlQ1NoYXJwUmFuZG9tKHNlZWQ6IG51bWJlcikge1xyXG4gICAgY29uc3QgTUJJRyAgPSAyMTQ3NDgzNjQ3OyAvLyBJbnQzMi5NYXhWYWx1ZVxyXG4gICAgY29uc3QgTVNFRUQgPSAxNjE4MDMzOTg7XHJcbiAgICBjb25zdCBzZWVkQXJyYXkgPSBuZXcgQXJyYXkoNTYpLmZpbGwoMCk7XHJcbiAgICBsZXQgaW5leHQgICA9IDA7XHJcbiAgICBsZXQgaW5leHRwICA9IDIxO1xyXG5cclxuICAgIC8vIEMjIHjhu60gbMO9IMSR4bq3YyBiaeG7h3Q6IE1hdGguQWJzKEludDMyLk1pblZhbHVlKSB0aHJvdyBPdmVyZmxvd0V4Y2VwdGlvblxyXG4gICAgY29uc3Qgc3VidHJhY3Rpb24gPSBzZWVkID09PSAtMjE0NzQ4MzY0OCA/IDIxNDc0ODM2NDcgOiBNYXRoLmFicyhzZWVkKTtcclxuICAgIGxldCBtaiA9IE1TRUVEIC0gc3VidHJhY3Rpb247XHJcbiAgICBpZiAobWogPCAwKSBtaiArPSBNQklHO1xyXG4gICAgc2VlZEFycmF5WzU1XSA9IG1qO1xyXG4gICAgbGV0IG1rID0gMTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDU1OyBpKyspIHtcclxuICAgICAgY29uc3QgaWkgPSAoMjEgKiBpKSAlIDU1O1xyXG4gICAgICBzZWVkQXJyYXlbaWldID0gbWs7XHJcbiAgICAgIG1rID0gbWogLSBtaztcclxuICAgICAgaWYgKG1rIDwgMCkgbWsgKz0gTUJJRztcclxuICAgICAgbWogPSBzZWVkQXJyYXlbaWldO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGsgPSAxOyBrIDwgNTsgaysrKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgNTY7IGkrKykge1xyXG4gICAgICAgIGxldCBuID0gaSArIDMwO1xyXG4gICAgICAgIGlmIChuID49IDU1KSBuIC09IDU1O1xyXG4gICAgICAgIHNlZWRBcnJheVtpXSAtPSBzZWVkQXJyYXlbMSArIG5dO1xyXG4gICAgICAgIGlmIChzZWVkQXJyYXlbaV0gPCAwKSBzZWVkQXJyYXlbaV0gKz0gTUJJRztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGludGVybmFsU2FtcGxlID0gKCk6IG51bWJlciA9PiB7XHJcbiAgICAgIGxldCBsb2NJTmV4dCAgPSBpbmV4dDtcclxuICAgICAgbGV0IGxvY0lOZXh0cCA9IGluZXh0cDtcclxuICAgICAgaWYgKCsrbG9jSU5leHQgID49IDU2KSBsb2NJTmV4dCAgPSAxO1xyXG4gICAgICBpZiAoKytsb2NJTmV4dHAgPj0gNTYpIGxvY0lOZXh0cCA9IDE7XHJcbiAgICAgIGxldCByZXRWYWwgPSBzZWVkQXJyYXlbbG9jSU5leHRdIC0gc2VlZEFycmF5W2xvY0lOZXh0cF07XHJcbiAgICAgIGlmIChyZXRWYWwgPT09IE1CSUcpIHJldFZhbC0tO1xyXG4gICAgICBpZiAocmV0VmFsIDwgMCkgICAgICByZXRWYWwgKz0gTUJJRztcclxuICAgICAgc2VlZEFycmF5W2xvY0lOZXh0XSA9IHJldFZhbDtcclxuICAgICAgaW5leHQgICA9IGxvY0lOZXh0O1xyXG4gICAgICBpbmV4dHAgID0gbG9jSU5leHRwO1xyXG4gICAgICByZXR1cm4gcmV0VmFsO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAvLyBUxrDGoW5nIMSRxrDGoW5nIEMjOiAoaW50KShJbnRlcm5hbFNhbXBsZSgpICogKDEuMC9NQklHKSAqIG1heFZhbHVlKVxyXG4gICAgICBuZXh0OiAobWF4VmFsdWU6IG51bWJlcikgPT4gTWF0aC5mbG9vcihpbnRlcm5hbFNhbXBsZSgpICogKDEuMCAvIE1CSUcpICogbWF4VmFsdWUpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2h1ZmZsZVdpdGhTZWVkKGxpc3Q6IG51bWJlcltdLCBzZWVkOiBudW1iZXIpOiBudW1iZXJbXSB7XHJcbiAgICBjb25zdCBybmcgICAgICA9IHRoaXMuY3JlYXRlQ1NoYXJwUmFuZG9tKHNlZWQpO1xyXG4gICAgY29uc3Qgc2h1ZmZsZWQgPSBbLi4ubGlzdF07XHJcbiAgICBmb3IgKGxldCBpID0gc2h1ZmZsZWQubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBqID0gcm5nLm5leHQoaSArIDEpO1xyXG4gICAgICBbc2h1ZmZsZWRbaV0sIHNodWZmbGVkW2pdXSA9IFtzaHVmZmxlZFtqXSwgc2h1ZmZsZWRbaV1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNodWZmbGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVQb3NpdGlvbk1hcChwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBudW1iZXI+PiB7XHJcbiAgICBjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXHJcbiAgICAgICdTSEEtMjU2JyxcclxuICAgICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBhc3N3b3JkKSxcclxuICAgICk7XHJcblxyXG4gICAgLy8gQml0Q29udmVydGVyLlRvSW50MzIoaGFzaCwgMCkgdsOgIChoYXNoLCA0KSDigJQgxJHhu41jIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludDMyXHJcbiAgICBjb25zdCB2aWV3ICA9IG5ldyBEYXRhVmlldyhoYXNoQnVmZmVyKTtcclxuICAgIGNvbnN0IHNlZWQxID0gdmlldy5nZXRJbnQzMigwLCB0cnVlKTsgLy8gYnl0ZXMgMC0zXHJcbiAgICBjb25zdCBzZWVkMiA9IHZpZXcuZ2V0SW50MzIoNCwgdHJ1ZSk7IC8vIGJ5dGVzIDQtN1xyXG5cclxuICAgIGxldCBsZXR0ZXJOdW1iZXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjYgfSwgKF8sIGkpID0+IDEwMDEgKyBpKTtcclxuICAgIGxldCBkaWdpdE51bWJlcnMgID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTAgfSwgKF8sIGkpID0+IDIwMDAgKyBpKTtcclxuXHJcbiAgICBsZXR0ZXJOdW1iZXJzID0gdGhpcy5zaHVmZmxlV2l0aFNlZWQobGV0dGVyTnVtYmVycywgc2VlZDEpO1xyXG4gICAgZGlnaXROdW1iZXJzICA9IHRoaXMuc2h1ZmZsZVdpdGhTZWVkKGRpZ2l0TnVtYmVycywgIHNlZWQyKTtcclxuXHJcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNjsgaSsrKVxyXG4gICAgICBtYXAuc2V0KFN0cmluZy5mcm9tQ2hhckNvZGUoJ2EnLmNoYXJDb2RlQXQoMCkgKyBpKSwgbGV0dGVyTnVtYmVyc1tpXSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspXHJcbiAgICAgIG1hcC5zZXQoU3RyaW5nLmZyb21DaGFyQ29kZSgnMCcuY2hhckNvZGVBdCgwKSArIGkpLCBkaWdpdE51bWJlcnNbaV0pO1xyXG5cclxuICAgIHJldHVybiBtYXA7XHJcbiAgfVxyXG5cclxuICAvLyBUxrDGoW5nIMSRxrDGoW5nIEMjOiB0MDZnMkZyb21JbmRleFN0cmluZyhpbmRleFN0cmluZywgcGFzc3dvcmQpXHJcbiAgYXN5bmMgZnJvbUluZGV4U3RyaW5nKGluZGV4U3RyaW5nOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgaWYgKCFpbmRleFN0cmluZykgcmV0dXJuICcnO1xyXG5cclxuICAgIGNvbnN0IHBvc2l0aW9uTWFwID0gYXdhaXQgdGhpcy5jcmVhdGVQb3NpdGlvbk1hcChwYXNzd29yZCk7XHJcbiAgICBjb25zdCByZXZlcnNlTWFwICA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XHJcbiAgICBwb3NpdGlvbk1hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiByZXZlcnNlTWFwLnNldCh2YWx1ZSwga2V5KSk7XHJcblxyXG4gICAgcmV0dXJuIGluZGV4U3RyaW5nXHJcbiAgICAgIC5zcGxpdCgnLCcpXHJcbiAgICAgIC5tYXAocGFydCA9PiB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBwYXJzZUludChwYXJ0LCAxMCk7XHJcbiAgICAgICAgcmV0dXJuIHJldmVyc2VNYXAuZ2V0KHBvc2l0aW9uKSA/PyAnJztcclxuICAgICAgfSlcclxuICAgICAgLmpvaW4oJycpO1xyXG4gIH1cclxufSJdfQ==
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidDA2aGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2NvbW1vbi90MDZoZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRzNDLE1BQU0sT0FBTyxnQkFBZ0I7SUFFM0IsK0VBQStFO0lBQy9FLG9FQUFvRTtJQUM1RCxrQkFBa0IsQ0FBQyxJQUFZO1FBQ3JDLE1BQU0sSUFBSSxHQUFJLFVBQVUsQ0FBQyxDQUFDLGlCQUFpQjtRQUMzQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDeEIsTUFBTSxTQUFTLEdBQUcsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUksS0FBSyxHQUFLLENBQUMsQ0FBQztRQUNoQixJQUFJLE1BQU0sR0FBSSxFQUFFLENBQUM7UUFFakIsc0VBQXNFO1FBQ3RFLE1BQU0sV0FBVyxHQUFHLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZFLElBQUksRUFBRSxHQUFHLEtBQUssR0FBRyxXQUFXLENBQUM7UUFDN0IsSUFBSSxFQUFFLEdBQUcsQ0FBQztZQUFFLEVBQUUsSUFBSSxJQUFJLENBQUM7UUFDdkIsU0FBUyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFWCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNCLE1BQU0sRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUs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QztnQkFDcEMsYUFBTyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxtQ0FBSSxFQUFFLENBQUM7WUFDeEMsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNkLENBQUM7S0FBQTs7OztZQWpIRixVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcclxuZXhwb3J0IGNsYXNzIFQwNkhlbHBlclNlcnZpY2Uge1xyXG5cclxuICAvLyBQb3J0IGNow61uaCB4w6FjIHRodeG6rXQgdG/DoW4gU3lzdGVtLlJhbmRvbShzZWVkKSBj4bunYSBDIyAoc3VidHJhY3RpdmUgYWxnb3JpdGhtKVxyXG4gIC8vIG5ldyBSYW5kb20oc2VlZCkgdHJvbmcgbeG7jWkgcGhpw6puIGLhuqNuIC5ORVQgxJHhu4F1IGTDuW5nIHRodeG6rXQgdG/DoW4gbsOgeVxyXG4gIHByaXZhdGUgY3JlYXRlQ1NoYXJwUmFuZG9tKHNlZWQ6IG51bWJlcikge1xyXG4gICAgY29uc3QgTUJJRyAgPSAyMTQ3NDgzNjQ3OyAvLyBJbnQzMi5NYXhWYWx1ZVxyXG4gICAgY29uc3QgTVNFRUQgPSAxNjE4MDMzOTg7XHJcbiAgICBjb25zdCBzZWVkQXJyYXkgPSBuZXcgQXJyYXkoNTYpLmZpbGwoMCk7XHJcbiAgICBsZXQgaW5leHQgICA9IDA7XHJcbiAgICBsZXQgaW5leHRwICA9IDIxO1xyXG5cclxuICAgIC8vIEMjIHjhu60gbMO9IMSR4bq3YyBiaeG7h3Q6IE1hdGguQWJzKEludDMyLk1pblZhbHVlKSB0aHJvdyBPdmVyZmxvd0V4Y2VwdGlvblxyXG4gICAgY29uc3Qgc3VidHJhY3Rpb24gPSBzZWVkID09PSAtMjE0NzQ4MzY0OCA/IDIxNDc0ODM2NDcgOiBNYXRoLmFicyhzZWVkKTtcclxuICAgIGxldCBtaiA9IE1TRUVEIC0gc3VidHJhY3Rpb247XHJcbiAgICBpZiAobWogPCAwKSBtaiArPSBNQklHO1xyXG4gICAgc2VlZEFycmF5WzU1XSA9IG1qO1xyXG4gICAgbGV0IG1rID0gMTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IDU1OyBpKyspIHtcclxuICAgICAgY29uc3QgaWkgPSAoMjEgKiBpKSAlIDU1O1xyXG4gICAgICBzZWVkQXJyYXlbaWldID0gbWs7XHJcbiAgICAgIG1rID0gbWogLSBtaztcclxuICAgICAgaWYgKG1rIDwgMCkgbWsgKz0gTUJJRztcclxuICAgICAgbWogPSBzZWVkQXJyYXlbaWldO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGsgPSAxOyBrIDwgNTsgaysrKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgNTY7IGkrKykge1xyXG4gICAgICAgIGxldCBuID0gaSArIDMwO1xyXG4gICAgICAgIGlmIChuID49IDU1KSBuIC09IDU1O1xyXG4gICAgICAgIHNlZWRBcnJheVtpXSAtPSBzZWVkQXJyYXlbMSArIG5dO1xyXG4gICAgICAgIGlmIChzZWVkQXJyYXlbaV0gPCAwKSBzZWVkQXJyYXlbaV0gKz0gTUJJRztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGludGVybmFsU2FtcGxlID0gKCk6IG51bWJlciA9PiB7XHJcbiAgICAgIGxldCBsb2NJTmV4dCAgPSBpbmV4dDtcclxuICAgICAgbGV0IGxvY0lOZXh0cCA9IGluZXh0cDtcclxuICAgICAgaWYgKCsrbG9jSU5leHQgID49IDU2KSBsb2NJTmV4dCAgPSAxO1xyXG4gICAgICBpZiAoKytsb2NJTmV4dHAgPj0gNTYpIGxvY0lOZXh0cCA9IDE7XHJcbiAgICAgIGxldCByZXRWYWwgPSBzZWVkQXJyYXlbbG9jSU5leHRdIC0gc2VlZEFycmF5W2xvY0lOZXh0cF07XHJcbiAgICAgIGlmIChyZXRWYWwgPT09IE1CSUcpIHJldFZhbC0tO1xyXG4gICAgICBpZiAocmV0VmFsIDwgMCkgICAgICByZXRWYWwgKz0gTUJJRztcclxuICAgICAgc2VlZEFycmF5W2xvY0lOZXh0XSA9IHJldFZhbDtcclxuICAgICAgaW5leHQgICA9IGxvY0lOZXh0O1xyXG4gICAgICBpbmV4dHAgID0gbG9jSU5leHRwO1xyXG4gICAgICByZXR1cm4gcmV0VmFsO1xyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAvLyBUxrDGoW5nIMSRxrDGoW5nIEMjOiAoaW50KShJbnRlcm5hbFNhbXBsZSgpICogKDEuMC9NQklHKSAqIG1heFZhbHVlKVxyXG4gICAgICBuZXh0OiAobWF4VmFsdWU6IG51bWJlcikgPT4gTWF0aC5mbG9vcihpbnRlcm5hbFNhbXBsZSgpICogKDEuMCAvIE1CSUcpICogbWF4VmFsdWUpLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2h1ZmZsZVdpdGhTZWVkKGxpc3Q6IG51bWJlcltdLCBzZWVkOiBudW1iZXIpOiBudW1iZXJbXSB7XHJcbiAgICBjb25zdCBybmcgICAgICA9IHRoaXMuY3JlYXRlQ1NoYXJwUmFuZG9tKHNlZWQpO1xyXG4gICAgY29uc3Qgc2h1ZmZsZWQgPSBbLi4ubGlzdF07XHJcbiAgICBmb3IgKGxldCBpID0gc2h1ZmZsZWQubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xyXG4gICAgICBjb25zdCBqID0gcm5nLm5leHQoaSArIDEpO1xyXG4gICAgICBbc2h1ZmZsZWRbaV0sIHNodWZmbGVkW2pdXSA9IFtzaHVmZmxlZFtqXSwgc2h1ZmZsZWRbaV1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHNodWZmbGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBjcmVhdGVQb3NpdGlvbk1hcChwYXNzd29yZDogc3RyaW5nKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBudW1iZXI+PiB7XHJcbiAgICBjb25zdCBoYXNoQnVmZmVyID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoXHJcbiAgICAgICdTSEEtMjU2JyxcclxuICAgICAgbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHBhc3N3b3JkKSxcclxuICAgICk7XHJcblxyXG4gICAgLy8gQml0Q29udmVydGVyLlRvSW50MzIoaGFzaCwgMCkgdsOgIChoYXNoLCA0KSDigJQgxJHhu41jIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludDMyXHJcbiAgICBjb25zdCB2aWV3ICA9IG5ldyBEYXRhVmlldyhoYXNoQnVmZmVyKTtcclxuICAgIGNvbnN0IHNlZWQxID0gdmlldy5nZXRJbnQzMigwLCB0cnVlKTsgLy8gYnl0ZXMgMC0zXHJcbiAgICBjb25zdCBzZWVkMiA9IHZpZXcuZ2V0SW50MzIoNCwgdHJ1ZSk7IC8vIGJ5dGVzIDQtN1xyXG5cclxuICAgIGxldCBsZXR0ZXJOdW1iZXJzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMjYgfSwgKF8sIGkpID0+IDEwMDEgKyBpKTtcclxuICAgIGxldCBkaWdpdE51bWJlcnMgID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogMTAgfSwgKF8sIGkpID0+IDIwMDAgKyBpKTtcclxuXHJcbiAgICBsZXR0ZXJOdW1iZXJzID0gdGhpcy5zaHVmZmxlV2l0aFNlZWQobGV0dGVyTnVtYmVycywgc2VlZDEpO1xyXG4gICAgZGlnaXROdW1iZXJzICA9IHRoaXMuc2h1ZmZsZVdpdGhTZWVkKGRpZ2l0TnVtYmVycywgIHNlZWQyKTtcclxuXHJcbiAgICBjb25zdCBtYXAgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyNjsgaSsrKVxyXG4gICAgICBtYXAuc2V0KFN0cmluZy5mcm9tQ2hhckNvZGUoJ2EnLmNoYXJDb2RlQXQoMCkgKyBpKSwgbGV0dGVyTnVtYmVyc1tpXSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspXHJcbiAgICAgIG1hcC5zZXQoU3RyaW5nLmZyb21DaGFyQ29kZSgnMCcuY2hhckNvZGVBdCgwKSArIGkpLCBkaWdpdE51bWJlcnNbaV0pO1xyXG5cclxuICAgIHJldHVybiBtYXA7XHJcbiAgfVxyXG5cclxuICAvLyBUxrDGoW5nIMSRxrDGoW5nIEMjOiB0MDZnMkZyb21JbmRleFN0cmluZyhpbmRleFN0cmluZywgcGFzc3dvcmQpXHJcbiAgYXN5bmMgZnJvbUluZGV4U3RyaW5nKGluZGV4U3RyaW5nOiBzdHJpbmcsIHBhc3N3b3JkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgaWYgKCFpbmRleFN0cmluZykgcmV0dXJuICcnO1xyXG5cclxuICAgIGNvbnN0IHBvc2l0aW9uTWFwID0gYXdhaXQgdGhpcy5jcmVhdGVQb3NpdGlvbk1hcChwYXNzd29yZCk7XHJcbiAgICBjb25zdCByZXZlcnNlTWFwICA9IG5ldyBNYXA8bnVtYmVyLCBzdHJpbmc+KCk7XHJcbiAgICBwb3NpdGlvbk1hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiByZXZlcnNlTWFwLnNldCh2YWx1ZSwga2V5KSk7XHJcbiAgICBjb25zb2xlLmxvZyhcImluZGV4U3RyaW5nX19fX1wiLCBpbmRleFN0cmluZ1xyXG4gICAgICAuc3BsaXQoJywnKVxyXG4gICAgICAubWFwKHBhcnQgPT4ge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gcGFyc2VJbnQocGFydCwgMTApO1xyXG4gICAgICAgIHJldHVybiByZXZlcnNlTWFwLmdldChwb3NpdGlvbikgPz8gJyc7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5qb2luKCcnKSk7XHJcbiAgICByZXR1cm4gaW5kZXhTdHJpbmdcclxuICAgICAgLnNwbGl0KCcsJylcclxuICAgICAgLm1hcChwYXJ0ID0+IHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHBhcnNlSW50KHBhcnQsIDEwKTtcclxuICAgICAgICByZXR1cm4gcmV2ZXJzZU1hcC5nZXQocG9zaXRpb24pID8/ICcnO1xyXG4gICAgICB9KVxyXG4gICAgICAuam9pbignJyk7XHJcbiAgfVxyXG59Il19
@@ -386,11 +386,12 @@ export class PermissionService extends BaseService {
386
386
  if (storageItem && storageItem !== 'null') {
387
387
  const result = JSON.parse(storageItem);
388
388
  if (result != null && result.length > 0) {
389
+ console.log("result____", result);
389
390
  result.forEach(element => {
390
391
  element = this.t6helper.fromIndexString(element, this.t6str);
391
392
  });
392
393
  }
393
- console.log(`Lấy quyền từ local storage với key [${key}] và giá trị ${result}`);
394
+ // console.log(`Lấy quyền từ local storage với key [${key}] và giá trị ${result}`);
394
395
  return result;
395
396
  }
396
397
  }
@@ -437,4 +438,4 @@ PermissionService.ctorParameters = () => [
437
438
  { type: Common },
438
439
  { type: T06HelperService }
439
440
  ];
440
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFLdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7OztBQUV0RCxNQUFNLE9BQU8sY0FBYztJQVN2QixZQUFZLElBQW9CO1FBTGhDLGVBQVUsR0FBYyxFQUFFLENBQUM7UUFDM0Isa0JBQWEsR0FBYyxFQUFFLENBQUM7UUFDOUIscUJBQWdCLEdBQWMsRUFBRSxDQUFDO1FBQ2pDLHdCQUFtQixHQUFjLEVBQUUsQ0FBQztRQUdoQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztDQUNKO0FBS0QsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFVOUMsWUFDSSxJQUFnQixFQUNo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QUFDLEdBQUcsQ0FBQyxpREFBaUQsR0FBRyxnQkFBZ0IsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDakcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7S0FBQTtJQUVELHdCQUF3QixDQUFDLFVBQWtCLEVBQUUsTUFBYztRQUN2RCxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLDZCQUE2QixVQUFVLElBQUksTUFBTSxFQUFFLENBQUM7UUFDbEYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFxQjtRQUNwQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLHFCQUFxQixDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7OztZQXZhSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQWpDUSxVQUFVO1lBQ0UsUUFBUTtZQVNwQixtQkFBbUI7WUFDbkIsV0FBVztZQVRYLFlBQVk7WUFFWix5QkFBeUI7WUFRekIsTUFBTTtZQUNOLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcblxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbiB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgVG5Vc2VyIH0gZnJvbSAnLi4vbW9kZWxzL3RuLXVzZXInO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vY29tbW9uL2NvbW1vbic7XHJcbmltcG9ydCB7IFQwNkhlbHBlclNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi90MDZoZWxwZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBoYW5RdXllbk1vZGVsIHtcclxuICAgIHN1YmplY3RUeXBlOiBudW1iZXI7XHJcbiAgICBpZFVzZXJHcm91cHM/OiBzdHJpbmdbXTtcclxuICAgIGlkVXNlcnM/OiBzdHJpbmdbXTtcclxuICAgIGFkZFJvbGVJZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcmVtb3ZlUm9sZUlkcz86IHN0cmluZ1tdID0gW107XHJcbiAgICBhZGRQZXJtaXNzaW9uSWRzPzogc3RyaW5nW10gPSBbXTtcclxuICAgIHJlbW92ZVBlcm1pc3Npb25JZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGluaXQ6IFBoYW5RdXllbk1vZGVsKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW5pdCkge1xyXG4gICAgICAgICAgICB0aGlzW2tleV0gPSBpbml0W2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25TZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xyXG5cclxuICAgIHQ2c3RyOiBhbnkgPSBcIjY0QjZFQ0MwMUYxQjM5RDk3NzIwQzQxNEVGQ0RFNEIyM0REOUE0Q0NGMzgwQzdDQzJBM0VFRjRFNEQzNkQ5N0NcIjtcclxuICAgIHJlYWRvbmx5IHN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZTtcclxuICAgIHJlYWRvbmx5IF9jb25maWc6IGFueTtcclxuICAgIHJlYWRvbmx5IGlnbm9yZUFkbWluID0gZmFsc2U7XHJcbiAgICBkZWxheUNoZWNrUGVybWlzc2lvbnMgPSBbXTtcclxuICAgIHJvb3Q6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xyXG4gICAgYXBwQ29kZTogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9vYXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9hcHBDb250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlLCBwcml2YXRlIGNvbW1vbjogQ29tbW9uLCBwcml2YXRlIHQ2aGVscGVyOiAgVDA2SGVscGVyU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke2NvbW1vbi50Nm0yKGNvbW1vbi5BVV9FUCl9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vcGVybWlzc2lvbmApO1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IHRoaXMuY29tbW9uLnQ2bTIoY29tbW9uLkFVX0VQKTtcclxuICAgICAgICB0aGlzLmlnbm9yZUFkbWluID0gdGhpcy5fY29uZmlnLmVudmlyb25tZW50LmlzSWdub3JlQWRtaW47XHJcbiAgICAgICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fY29uZmlnLmFwcENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJQZXJtaXNzaW9uQ2FjaGVBbGwoKSB7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICBjb25zdCBsc3RBcGlFbmRwb2ludCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFwaURvbWFpbiA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW47XHJcbiAgICAgICAgZm9yIChjb25zdCBkb21haW5OYW1lIGluIGFwaURvbWFpbikge1xyXG4gICAgICAgICAgICBpZiAoZG9tYWluTmFtZS5zdGFydHNXaXRoKCctJykgfHwgZG9tYWluTmFtZS5zdGFydHNXaXRoKCcxJykgfHwgZG9tYWluTmFtZSA9PSAnZ2F0ZXdheScpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCByZWFsRG9tYWluTmFtZSA9IGRvbWFpbk5hbWUuc3BsaXQoJ0VuZHBvaW50JykgPyBkb21haW5OYW1lLnNwbGl0KCdFbmRwb2ludCcpWzBdIDogZG9tYWluTmFtZTtcclxuICAgICAgICAgICAgbHN0QXBpRW5kcG9pbnQucHVzaChyZWFsRG9tYWluTmFtZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYXJQZXJtaXNzaW9uQ2FjaGUoWy4uLmxzdEFwcENvZGVzLCAuLi5sc3RBcGlFbmRwb2ludF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyUGVybWlzc2lvbkNhY2hlKGxzdE1vZHVsZTogc3RyaW5nW10pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NsZWFyUGVybWlzc2lvbkNhY2hlYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGxzdE1vZHVsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEN1cnJlbnRVc2VyUGVybWlzc2lvbmA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEFsbEJhc2VQZXJtaXNzaW9uKHVzZXJJZD86IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWxsQmFzZVBlcm1pc3Npb25gO1xyXG4gICAgICAgIC8vIHJldHVybiBz4bubbSB2w6wgxJHDonkgbMOgIHRyxrDhu51uZyBo4bujcCBs4bqleSBwZXJtaXNzaW9uIHRoZW8gSWQgY+G7p2EgVXNlclxyXG4gICAgICAgIC8vIGtvIHNldCBsb2NhbCBzdG9yYWdlIHbDrCBz4bq9IGzDoG0gaOG7j25nIHF1eeG7gW4gY+G7p2EgbmfGsOG7nWkgZMO5bmcgaGnhu4duIHThuqFpXHJcbiAgICAgICAgaWYgKHVzZXJJZCAmJiB1c2VySWQgIT0gJycgJiYgdXNlcklkICE9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwgKyBgP3VzZXJJZD0ke3VzZXJJZH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICBpZiAodXNlclxyXG4gICAgICAgICAgICAmJiAodXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKVxyXG4gICAgICAgICAgICB8fCAodXNlci5pc2FkbWluICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICAvLyBO4bq/dSBDw7MgZXJyb3IgbOG6pXkgZOG7ryBsaeG7h3UgcXV54buBbiB04buVbmcgaOG7o3AgdGjDrCBxdWF5IHbhu4EgbOG6pXkgZOG7ryBsaeG7h3UgcXV54buBbiBk4buxYSB2w6BvIHThu6tuZyBtb2R1bGVcclxuICAgICAgICBpZiAoIXJlcyB8fCAhcmVzLnN1Y2Nlc3MgfHwgcmVzLmRhdGEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlQXJyOiBQcm9taXNlPHN0cmluZ1tdPltdID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiBsc3RBcHBDb2Rlcykge1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZUFyci5wdXNoKHRoaXMuZ2V0U2VydmljZVBlcm1pc3Npb24oY29kZSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXQgbG9jYWwgc3RvcmFnZSBjaG8gcGVybWlzc2lvbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiBsc3RBcHBDb2Rlcykge1xyXG4gICAgICAgICAgICBsZXQgcGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUNvZGUgPSBzZXJ2aWNlLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5LnRvVXBwZXJDYXNlKCkgIT0gc2VydmljZUNvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zID0gcmVzLmRhdGFba2V5XTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGBBVC4ke3NlcnZpY2VDb2RlfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2VJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShwZXJtaXNzaW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRydXnhu4FuIHbDoG8gZGFuaCBzw6FjaCBwZXJtaXNpb24gY+G6p24gY2hlY2tcclxuICAgICAqIEBwYXJhbSBsc3RQZXJtaXNzaW9uQ29kZSBuaOG7r25nIHBlcnJtaXNpb24gY29kZSBj4bqnbiBjaGVjayA9PiBuw6puIGTDuW5nIHRyb25nIHRyxrDhu51uZyBo4bujcCBjaGVjayBjw6FjIGJ1dHRvbiB0cm9uZyBjb2RlXHJcbiAgICAgKiBAcmV0dXJucyB0cuG6oyByYSBjw6FjIHBlcnJtaXNpb25Db2RlIGPDsyBxdXnhu4FuXHJcbiAgICAgKi9cclxuICAgIGdldFBlcm1pc3Npb25BdXRob3JpemVkKGxzdFBlcm1pc3Npb25Db2RlOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbHN0UGVybWlzc2lvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmlzQXV0aG9yaXplZFBlcm1pc3Npb24oaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGlzQXV0aG9yaXplZFBlcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xyXG4gICAgICAgIHdoaWxlICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jb21tb25TZXJ2aWNlLmRlbGF5KDEwMCk7XHJcbiAgICAgICAgICAgIHJldHJ5Q291bnQrKztcclxuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPiA1MCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tQZXJtaXNzaW9uKHRoaXMuYXBwQ29kZSwgcGVybWlzc2lvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaXNBdXRob3JpemVkKHNlcnZpY2U6IHN0cmluZywgcGVybWlzc2lvbjogc3RyaW5nLCBjaGVjRm9yTWVudTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5fYXBwQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcclxuICAgICAgICB3aGlsZSAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5kZWxheSgxMDApO1xyXG4gICAgICAgICAgICByZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gNTApIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNoZWNrUGVybWlzc2lvbihzZXJ2aWNlLCBwZXJtaXNzaW9uLCBjaGVjRm9yTWVudSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tQZXJtaXNzaW9uKHNlcnZpY2UsIHBlcm1pc3Npb25Ub0NoZWNrOiBzdHJpbmcsIGNoZWNrRm9yTWVudTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlSXNEZXZNb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIHZhbHVlSXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgdmFsdWVJc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbiAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4gJiYgdmFsdWVJc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IGF3YWl0IHRoaXMuZ2V0U2VydmljZVBlcm1pc3Npb24oc2VydmljZSk7XHJcbiAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvbnMgJiYgdXNlclBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGVja0Zvck1lbnVcclxuICAgICAgICAgICAgICAgICAgICA/IHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uVG9DaGVjaylcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2NoZWNrUGVybWlzc2lvbih1c2VyUGVybWlzc2lvbnMsIHBlcm1pc3Npb25Ub0NoZWNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBLaMO0bmcgY8OzIHF1eeG7gW4gduG7m2kgcGjDom4gaOG7hyBbJHtzZXJ2aWNlfV1gKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrUGVybWlzc2lvbih1c2VyUGVybWlzc2lvbnM6IHN0cmluZ1tdLCBwZXJtaXNzaW9uVG9DaGVjazogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGlzQXV0aG9yaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIC8vIGNoZWNrIHBlcm1pc3Npb24gY+G7p2EgbmfGsOG7nWkgZMO5bmdcclxuICAgICAgICAvLyBkdXnhu4d0IHF1YSB04burbmcgcGVybWlzc2lvbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgIGZvciAoY29uc3QgdXNlclBlcm1pc3Npb24gb2YgdXNlclBlcm1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIC8vIGJp4bq/biDEkeG7gyBicmVhayBraOG7j2kgdsOybmcga2hpIG5nxrDhu51pIGTDuW5nIMSRxrDhu6NjIGF1dGhvcml6ZWRcclxuICAgICAgICAgICAgbGV0IGJyZWFrT3V0ZXJMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIHBvaW50ZXIgcGVybWlzc2lvbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgICAgICBsZXQgdXNlclBlcm1pc3Npb25Qb2ludGVyID0gMDtcclxuICAgICAgICAgICAgLy8gcG9pbnRlciBwZXJtaXNzaW9uIMSRYW5nIGNoZWNrXHJcbiAgICAgICAgICAgIGxldCBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAvLyBtYXJrIGNvIHRoZSBjaGVjayBxdWVyeSBwYXJhbVxyXG4gICAgICAgICAgICBsZXQgYWJvdXRUb0NoZWNrUXVlcnlQYXJhbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBjaGVjayB04burbmcgY2hhciBj4bunYSAyIG3huqNuZ1xyXG4gICAgICAgICAgICBmb3IgKDsgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyIDwgcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoOykge1xyXG4gICAgICAgICAgICAgICAgLy8gbuG6v3UgY2hhciBsw6Aga8O9IHThu7EgYuG6r3QgxJHhuqd1IHRlbXBsYXRlID0+IHThu4tuaCB0aeG6v24gcG9pbnRlciBj4bunYSAyIG3huqNuZ1xyXG4gICAgICAgICAgICAgICAgbGV0IG5lZWRSZWNoZWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSA9PSAneycpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjaG8gxJHhur9uIGtoaSB0w6xtIMSRxrDhu6NjIGvDvSB04buxICcvJyB0aeG6v3AgdGhlbyB0aMOsIGThu6tuZyBs4bqhaVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIgPCB1c2VyUGVybWlzc2lvbi5sZW5ndGg7IHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblBvaW50ZXIgPT0gdXNlclBlcm1pc3Npb24ubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0gIT0gJ30nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSA9PT0gJz8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm91dFRvQ2hlY2tRdWVyeVBhcmFtID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICArK3VzZXJQZXJtaXNzaW9uUG9pbnRlcjsgLy8gdGnhur9uIHRp4bq/biDEkeG6v24ga8O9IHThu7Egc2F1IGvhur90IHRow7pjIHRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRyxrDhu51uZyBo4bujcCB0csaw4budbmcgaOG7o3AgY2h14buXaSB0ZW1wbGF0ZSBjw7MgZOG6oW5nIFwie3RlbXBsYXRlfWFjc2VramZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA9PiBj4bqnbiBjaGVjayBjw6FjIGvDvSB04buxIHNhdSB0ZW1wbGF0ZSB2w6AgdHLGsOG7m2Mga8O9IHThu7EgJy8nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdICE9ICcvJyAmJiAoYWJvdXRUb0NoZWNrUXVlcnlQYXJhbSAmJiB1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdICE9ICcmJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRSZWNoZWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIgPCB1c2VyUGVybWlzc2lvbi5sZW5ndGg7IHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9PSB1c2VyUGVybWlzc2lvbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSAhPSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyIDwgcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoOyBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvblRvQ2hlY2tQb2ludGVyID09IHBlcm1pc3Npb25Ub0NoZWNrLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uVG9DaGVja1twZXJtaXNzaW9uVG9DaGVja1BvaW50ZXJdID09ICcvJyB8fCAoYWJvdXRUb0NoZWNrUXVlcnlQYXJhbSAmJiBwZXJtaXNzaW9uVG9DaGVja1twZXJtaXNzaW9uVG9DaGVja1BvaW50ZXJdID09ICcmJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBicmVha0lubmVyTG9vcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5lZWRSZWNoZWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgbOG6oWkgY2hvIHRyxrDhu51uZyBo4bujcCBjaHXhu5dpIHRlbXBsYXRlIGPDsyBk4bqhbmcgXCJ7dGVtcGxhdGV9YWNzbGVrZmpcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGR1eeG7h3QgbmfGsOG7o2MgbOG6oWkgY2hvIMSR4bq/biBraGkgZ+G6t3Aga8O9IHThu7Ega+G6v3QgdGjDumMgdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcFVzZXJQb2ludGVyID0gdXNlclBlcm1pc3Npb25Qb2ludGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wVG9DaGVja1BvaW50ZXIgPSBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHVzZXJQZXJtaXNzaW9uW3RlbXBVc2VyUG9pbnRlcl0gIT0gJ30nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGvDvSB04buxIGtow6FjIG5oYXUgPT4gYnJlYWsga2jhu49pIHbDsm5nIGtp4buDbSB0cmEgdHJvbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uW3RlbXBVc2VyUG9pbnRlcl0udG9Mb3dlckNhc2UoKSAhPSBwZXJtaXNzaW9uVG9DaGVja1t0ZW1wVG9DaGVja1BvaW50ZXJdLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrSW5uZXJMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBVc2VyUG9pbnRlci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wVG9DaGVja1BvaW50ZXItLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrSW5uZXJMb29wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlckNoYXIgPSB1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0b0NoZWNrQ2hhciA9IHBlcm1pc3Npb25Ub0NoZWNrW3Blcm1pc3Npb25Ub0NoZWNrUG9pbnRlcl0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIC8vIG7hur91IHVzZXJQZXJtaXNzaW9uIMSRYW5nIOG7nyBpbmRleCBjdeG7kWlcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblBvaW50ZXIgPT0gdXNlclBlcm1pc3Npb24ubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoYXIgY3Xhu5FpIGPhu6dhIDIgbeG6o25nICh0cuG7qyBraGkgbMOgIGvDvSB04buxIGvhur90IHRow7pjIHRlbXBsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHbDoCBjxaluZyBwaOG6o2kgbMOgIGNoYXIgY3Xhu5FpIGPhu6dhIG3huqNuZyBwZXJtaXNzaW9uIGPhuqduIGNoZWNrXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gPT4gbmfGsOG7nWkgZMO5bmcgYXV0aG9yaXplZCB2w6AgYnJlYWsga2jhu49pIHbDsm5nIGzhurdwIG5nb8OgaSBjw7luZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgodXNlckNoYXIgPT0gJ30nIHx8IHVzZXJDaGFyID09IHRvQ2hlY2tDaGFyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIgPT0gcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha091dGVyTG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoYXIgY8OzIGdp4buRbmcgbmhhdSBraMO0bmcsIGtow7RuZyBnaeG7kW5nIHRow6wgYnJlYWsga2jhu49pIHbDsm5nIGNoZWNrXHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckNoYXIgIT0gdG9DaGVja0NoYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBu4bq/dSBjaGFyIGdp4buRbmcgbmhhdSB0aMOsIHRp4bq/cCB04bulYyB2w7JuZyBsxINwXHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIrKztcclxuICAgICAgICAgICAgICAgIHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChicmVha091dGVyTG9vcCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzQXV0aG9yaXplZDtcclxuICAgIH1cclxuXHJcbiAgICBfY2hlY2tQZXJtaXNzaW9uT2xkKHVzZXJQZXJtaXNzaW9uczogc3RyaW5nW10sIHBlcm1pc3Npb25Ub0NoZWNrOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY2hlY2sgcXV54buBbiB0aGVvIGPDoWNoIGPFqSBu4bq/dSB0csaw4budbmcgaOG7jXAgbMOgIHBow6JuIHF1eeG7gW4gbW9kdWxlXHJcbiAgICAgICAgaWYgKHBlcm1pc3Npb25Ub0NoZWNrLmluY2x1ZGVzKCdNT0RVTEUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXNlclBlcm1pc3Npb25zLmluY2x1ZGVzKHBlcm1pc3Npb25Ub0NoZWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCB1c2VyUGVybWlzc2lvbiBvZiB1c2VyUGVybWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgLy8gQ+G6r3QgY2h14buXaSBwZXJtaXNzaW9uIHRow6BuaCBt4bqjbmcgxJHhu4MgeGVtIG3hu5dpIGZyYWdlbWVudCBjw7Mga2jhu5twIG5oYXUga2jDtG5nXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9uRnJhZ21lbnRzID0gKHVzZXJQZXJtaXNzaW9uIGFzIHN0cmluZykuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbkZyYWdtZW50cyA9IHBlcm1pc3Npb25Ub0NoZWNrLnNwbGl0KCcvJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBN4bqjbmcga2jDoWMgxJHhu5kgZMOgaSB0aMOsIHRob8OhdCBz4bubbVxyXG4gICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25GcmFnbWVudHMubGVuZ3RoICE9IHBlcm1pc3Npb25GcmFnbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYmnhur9uIGZsYWcgcmEgaGnhu4d1IG5nxrDhu51pIGTDuW5nIGF1dGhvcml6ZWQgdsOgIG91dCB2w7JuZ1xyXG4gICAgICAgICAgICBsZXQgYnJlYWtMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIG7hur91IHThuqV0IGPhuqMgcGjhuqduIHThu60ga2jhu5twIG5oYXUgPT4gcGVybWlzc2lvbiBuw6B5IHRyw7luZyB2w6AgbmfGsOG7nWkgZMO5bmcgxJHGsOG7o2MgYXV0aG9yaXplZFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJGcmFnZW1lbnQgPSB1c2VyUGVybWlzc2lvbkZyYWdtZW50c1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uRnJhZ21lbnQgPSBwZXJtaXNzaW9uRnJhZ21lbnRzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIC8vIHNraXAgcXVhIGPDoWMgcGjhuqduIHThu60gY8OzIGvDvSB04buxIGLhuq90IMSR4bqndSBsw6AgJ3snXHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckZyYWdlbWVudFswXSA9PSAneycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrTG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJGcmFnZW1lbnQudG9Mb3dlckNhc2UoKSAhPSBwZXJtaXNzaW9uRnJhZ21lbnQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IHBlcm1pc3Npb25GcmFnbWVudHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYnJlYWtMb29wKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNBdXRob3JpemVkO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpc0F1dGhvcml6ZWRCeVBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBBcnJheTxQZXJtaXNzaW9uPiwgb3BlcmF0b3IgPSAnT1InLCBpZ25vcmVBZG1pbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAoYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSkgYXMgVG5Vc2VyO1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wZXJhdG9yLnRvVXBwZXJDYXNlKCkgPT0gJ09SJykge1xyXG4gICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlcnZpY2VQZXJtaXNzaW9uKGl0ZW0uc2VydmljZSkudGhlbihwZXJtaXNzaW9uUmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IudG9VcHBlckNhc2UoKSA9PSAnT1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGl0ZW0ucGVybWlzc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGVybWlzc2lvblJlc3VsdC5pbmNsdWRlcyhpdGVtLnBlcm1pc3Npb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShpc0F1dGhvcml6ZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFNlcnZpY2VQZXJtaXNzaW9uKHNlcnZpY2UsIG92ZXJyaWRlTG9jYWxTdG9yYWdlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gYEFULiR7c2VydmljZS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICAgICAgaWYgKCFvdmVycmlkZUxvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlSXRlbSAmJiBzdG9yYWdlSXRlbSAhPT0gJ251bGwnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdCE9bnVsbCAmJiByZXN1bHQubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLnQ2aGVscGVyLmZyb21JbmRleFN0cmluZyhlbGVtZW50LCB0aGlzLnQ2c3RyKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBM4bqleSBxdXnhu4FuIHThu6sgbG9jYWwgc3RvcmFnZSB24bubaSBrZXkgWyR7a2V5fV0gdsOgIGdpw6EgdHLhu4sgJHtyZXN1bHR9YCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25zQnlTZXJ2aWNlP3NlcnZpY2U9JHtzZXJ2aWNlfWA7XHJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgICAgICBpZiAoIXJlc3BvbnNlIHx8ICFyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG92ZXJyaWRlTG9jYWxTdG9yYWdlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkocmVzcG9uc2UuZGF0YSkpO1xyXG4gICAgICAgIGlmKHJlc3BvbnNlLmRhdGEhPW51bGwgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudCA9IHRoaXMudDZoZWxwZXIuZnJvbUluZGV4U3RyaW5nKGVsZW1lbnQsIHRoaXMudDZzdHIpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coYEzhuqV5IHF1eeG7gW4gdOG7qyBHZXRQZXJtaXNzaW9uc0J5U2VydmljZSB24bubaSBrZXkgWyR7a2V5fV0gdsOgIGdpw6EgdHLhu4sgJHtyZXNwb25zZS5kYXRhfWApO1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBlcm1pc3Npb25JZHNCeU1vZHVsZShtb2R1bGVDb2RlOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQZXJtaXNzaW9uSWRzQnlNb2R1bGUvJHttb2R1bGVDb2RlfS8ke3VzZXJJZH1gO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcclxuICAgIH1cclxuXHJcbiAgICBwaGFuUXV5ZW5OZ3VvaUR1bmcobW9kZWw6IFBoYW5RdXllbk1vZGVsKSB7XHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9QaGFuUXV5ZW5OZ3VvaUR1bmdgO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgbW9kZWwpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
441
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFLdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7OztBQUV0RCxNQUFNLE9BQU8sY0FBYztJQVN2QixZQUFZLElBQW9CO1FBTGhDLGVBQVUsR0FBYyxFQUFFLENBQUM7UUFDM0Isa0JBQWEsR0FBYyxFQUFFLENBQUM7UUFDOUIscUJBQWdCLEdBQWMsRUFBRSxDQUFDO1FBQ2pDLHdCQUFtQixHQUFjLEVBQUUsQ0FBQztRQUdoQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtZQUNwQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztDQUNKO0FBS0QsTUFBTSxPQUFPLGlCQUFrQixTQUFRLFdBQVc7SUFVOUMsWUFDSSxJQUFnQixFQUNo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QUFDLEdBQUcsQ0FBQyxpREFBaUQsR0FBRyxnQkFBZ0IsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDakcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ3pCLENBQUM7S0FBQTtJQUVELHdCQUF3QixDQUFDLFVBQWtCLEVBQUUsTUFBYztRQUN2RCxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLDZCQUE2QixVQUFVLElBQUksTUFBTSxFQUFFLENBQUM7UUFDbEYsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxLQUFxQjtRQUNwQyxNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLHFCQUFxQixDQUFDO1FBQ3BELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQzs7OztZQXphSixVQUFVLFNBQUM7Z0JBQ1IsVUFBVSxFQUFFLE1BQU07YUFDckI7OztZQWpDUSxVQUFVO1lBQ0UsUUFBUTtZQVNwQixtQkFBbUI7WUFDbkIsV0FBVztZQVRYLFlBQVk7WUFFWix5QkFBeUI7WUFRekIsTUFBTTtZQUNOLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT0F1dGhTZXJ2aWNlIH0gZnJvbSAnYW5ndWxhci1vYXV0aDItb2lkYyc7XHJcblxyXG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvbiB9IGZyb20gJy4uL21vZGVscy9wZXJtaXNzaW9uJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgVG5Vc2VyIH0gZnJvbSAnLi4vbW9kZWxzL3RuLXVzZXInO1xyXG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4vYmFzZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vY29tbW9uL2NvbW1vbic7XHJcbmltcG9ydCB7IFQwNkhlbHBlclNlcnZpY2UgfSBmcm9tICcuL2NvbW1vbi90MDZoZWxwZXInO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBoYW5RdXllbk1vZGVsIHtcclxuICAgIHN1YmplY3RUeXBlOiBudW1iZXI7XHJcbiAgICBpZFVzZXJHcm91cHM/OiBzdHJpbmdbXTtcclxuICAgIGlkVXNlcnM/OiBzdHJpbmdbXTtcclxuICAgIGFkZFJvbGVJZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgcmVtb3ZlUm9sZUlkcz86IHN0cmluZ1tdID0gW107XHJcbiAgICBhZGRQZXJtaXNzaW9uSWRzPzogc3RyaW5nW10gPSBbXTtcclxuICAgIHJlbW92ZVBlcm1pc3Npb25JZHM/OiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGluaXQ6IFBoYW5RdXllbk1vZGVsKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gaW5pdCkge1xyXG4gICAgICAgICAgICB0aGlzW2tleV0gPSBpbml0W2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25TZXJ2aWNlIGV4dGVuZHMgQmFzZVNlcnZpY2Uge1xyXG5cclxuICAgIHQ2c3RyOiBhbnkgPSBcIjY0QjZFQ0MwMUYxQjM5RDk3NzIwQzQxNEVGQ0RFNEIyM0REOUE0Q0NGMzgwQzdDQzJBM0VFRjRFNEQzNkQ5N0NcIjtcclxuICAgIHJlYWRvbmx5IHN0b3JhZ2UgPSBzZXNzaW9uU3RvcmFnZTtcclxuICAgIHJlYWRvbmx5IF9jb25maWc6IGFueTtcclxuICAgIHJlYWRvbmx5IGlnbm9yZUFkbWluID0gZmFsc2U7XHJcbiAgICBkZWxheUNoZWNrUGVybWlzc2lvbnMgPSBbXTtcclxuICAgIHJvb3Q6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xyXG4gICAgYXBwQ29kZTogc3RyaW5nID0gbnVsbDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgICAgIGluamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBwcml2YXRlIF9tb2R1bGVDb25maWdTZXJ2aWNlOiBNb2R1bGVDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgX3VzZXJTZXJ2aWNlOiBVc2VyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9vYXV0aFNlcnZpY2U6IE9BdXRoU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9hcHBDb250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlLCBwcml2YXRlIGNvbW1vbjogQ29tbW9uLCBwcml2YXRlIHQ2aGVscGVyOiAgVDA2SGVscGVyU2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgc3VwZXIoaHR0cCwgaW5qZWN0b3IsIGAke2NvbW1vbi50Nm0yKGNvbW1vbi5BVV9FUCl9LyR7X21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYXBpVmVyc2lvbn0vcGVybWlzc2lvbmApO1xyXG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCk7XHJcbiAgICAgICAgdGhpcy5lbmRQb2ludCA9IHRoaXMuY29tbW9uLnQ2bTIoY29tbW9uLkFVX0VQKTtcclxuICAgICAgICB0aGlzLmlnbm9yZUFkbWluID0gdGhpcy5fY29uZmlnLmVudmlyb25tZW50LmlzSWdub3JlQWRtaW47XHJcbiAgICAgICAgdGhpcy5hcHBDb2RlID0gdGhpcy5fY29uZmlnLmFwcENvZGU7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJQZXJtaXNzaW9uQ2FjaGVBbGwoKSB7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICBjb25zdCBsc3RBcGlFbmRwb2ludCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGFwaURvbWFpbiA9IHRoaXMuX2NvbmZpZy5lbnZpcm9ubWVudC5hcGlEb21haW47XHJcbiAgICAgICAgZm9yIChjb25zdCBkb21haW5OYW1lIGluIGFwaURvbWFpbikge1xyXG4gICAgICAgICAgICBpZiAoZG9tYWluTmFtZS5zdGFydHNXaXRoKCctJykgfHwgZG9tYWluTmFtZS5zdGFydHNXaXRoKCcxJykgfHwgZG9tYWluTmFtZSA9PSAnZ2F0ZXdheScpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCByZWFsRG9tYWluTmFtZSA9IGRvbWFpbk5hbWUuc3BsaXQoJ0VuZHBvaW50JykgPyBkb21haW5OYW1lLnNwbGl0KCdFbmRwb2ludCcpWzBdIDogZG9tYWluTmFtZTtcclxuICAgICAgICAgICAgbHN0QXBpRW5kcG9pbnQucHVzaChyZWFsRG9tYWluTmFtZS50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xlYXJQZXJtaXNzaW9uQ2FjaGUoWy4uLmxzdEFwcENvZGVzLCAuLi5sc3RBcGlFbmRwb2ludF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyUGVybWlzc2lvbkNhY2hlKGxzdE1vZHVsZTogc3RyaW5nW10pIHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NsZWFyUGVybWlzc2lvbkNhY2hlYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGxzdE1vZHVsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFVzZXJQZXJtaXNzaW9uKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcclxuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEN1cnJlbnRVc2VyUGVybWlzc2lvbmA7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEFsbEJhc2VQZXJtaXNzaW9uKHVzZXJJZD86IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWxsQmFzZVBlcm1pc3Npb25gO1xyXG4gICAgICAgIC8vIHJldHVybiBz4bubbSB2w6wgxJHDonkgbMOgIHRyxrDhu51uZyBo4bujcCBs4bqleSBwZXJtaXNzaW9uIHRoZW8gSWQgY+G7p2EgVXNlclxyXG4gICAgICAgIC8vIGtvIHNldCBsb2NhbCBzdG9yYWdlIHbDrCBz4bq9IGzDoG0gaOG7j25nIHF1eeG7gW4gY+G7p2EgbmfGsOG7nWkgZMO5bmcgaGnhu4duIHThuqFpXHJcbiAgICAgICAgaWYgKHVzZXJJZCAmJiB1c2VySWQgIT0gJycgJiYgdXNlcklkICE9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwgKyBgP3VzZXJJZD0ke3VzZXJJZH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKTtcclxuICAgICAgICBpZiAodXNlclxyXG4gICAgICAgICAgICAmJiAodXNlci5pc3N1cGVydXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKVxyXG4gICAgICAgICAgICB8fCAodXNlci5pc2FkbWluICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICAgICAgY29uc3QgbHN0QXBwQ29kZXMgPSB0aGlzLl9jb25maWcuZW52aXJvbm1lbnQuYXBwTWV0YWRhdGE/LmFwcFN3aXRjaGVyPy5tYXAoYXBwID0+IGFwcC5jb2RlKSA/PyBbXTtcclxuICAgICAgICAvLyBO4bq/dSBDw7MgZXJyb3IgbOG6pXkgZOG7ryBsaeG7h3UgcXV54buBbiB04buVbmcgaOG7o3AgdGjDrCBxdWF5IHbhu4EgbOG6pXkgZOG7ryBsaeG7h3UgcXV54buBbiBk4buxYSB2w6BvIHThu6tuZyBtb2R1bGVcclxuICAgICAgICBpZiAoIXJlcyB8fCAhcmVzLnN1Y2Nlc3MgfHwgcmVzLmRhdGEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlQXJyOiBQcm9taXNlPHN0cmluZ1tdPltdID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kZSBvZiBsc3RBcHBDb2Rlcykge1xyXG4gICAgICAgICAgICAgICAgcHJvbWlzZUFyci5wdXNoKHRoaXMuZ2V0U2VydmljZVBlcm1pc3Npb24oY29kZSwgdHJ1ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBTZXQgbG9jYWwgc3RvcmFnZSBjaG8gcGVybWlzc2lvbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgIGZvciAoY29uc3Qgc2VydmljZSBvZiBsc3RBcHBDb2Rlcykge1xyXG4gICAgICAgICAgICBsZXQgcGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUNvZGUgPSBzZXJ2aWNlLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHJlcy5kYXRhKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5LnRvVXBwZXJDYXNlKCkgIT0gc2VydmljZUNvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHBlcm1pc3Npb25zID0gcmVzLmRhdGFba2V5XTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGBBVC4ke3NlcnZpY2VDb2RlfWA7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oa2V5KTtcclxuICAgICAgICAgICAgaWYgKHN0b3JhZ2VJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShwZXJtaXNzaW9ucykpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRydXnhu4FuIHbDoG8gZGFuaCBzw6FjaCBwZXJtaXNpb24gY+G6p24gY2hlY2tcclxuICAgICAqIEBwYXJhbSBsc3RQZXJtaXNzaW9uQ29kZSBuaOG7r25nIHBlcnJtaXNpb24gY29kZSBj4bqnbiBjaGVjayA9PiBuw6puIGTDuW5nIHRyb25nIHRyxrDhu51uZyBo4bujcCBjaGVjayBjw6FjIGJ1dHRvbiB0cm9uZyBjb2RlXHJcbiAgICAgKiBAcmV0dXJucyB0cuG6oyByYSBjw6FjIHBlcnJtaXNpb25Db2RlIGPDsyBxdXnhu4FuXHJcbiAgICAgKi9cclxuICAgIGdldFBlcm1pc3Npb25BdXRob3JpemVkKGxzdFBlcm1pc3Npb25Db2RlOiBzdHJpbmdbXSk6IFByb21pc2U8c3RyaW5nW10+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyID0gKGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkpIGFzIFRuVXNlcjtcclxuICAgICAgICAgICAgaWYgKHVzZXIgJiYgdXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09ICd0cnVlJykge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09ICd0cnVlJyAmJiAhdGhpcy5pZ25vcmVBZG1pbikge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShsc3RQZXJtaXNzaW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbHN0UGVybWlzc2lvbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhd2FpdCB0aGlzLmlzQXV0aG9yaXplZFBlcm1pc3Npb24oaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGlzQXV0aG9yaXplZFBlcm1pc3Npb24ocGVybWlzc2lvbjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgbGV0IHJldHJ5Q291bnQgPSAwO1xyXG4gICAgICAgIHdoaWxlICghdGhpcy5fb2F1dGhTZXJ2aWNlLmhhc1ZhbGlkQWNjZXNzVG9rZW4oKSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9jb21tb25TZXJ2aWNlLmRlbGF5KDEwMCk7XHJcbiAgICAgICAgICAgIHJldHJ5Q291bnQrKztcclxuICAgICAgICAgICAgaWYgKHJldHJ5Q291bnQgPiA1MCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY2hlY2tQZXJtaXNzaW9uKHRoaXMuYXBwQ29kZSwgcGVybWlzc2lvbik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaXNBdXRob3JpemVkKHNlcnZpY2U6IHN0cmluZywgcGVybWlzc2lvbjogc3RyaW5nLCBjaGVjRm9yTWVudTogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5yb290ID0gdGhpcy5fYXBwQ29udGV4dC5nZXRSb290Q29udGV4dCgpO1xyXG4gICAgICAgIGxldCByZXRyeUNvdW50ID0gMDtcclxuICAgICAgICB3aGlsZSAoIXRoaXMuX29hdXRoU2VydmljZS5oYXNWYWxpZEFjY2Vzc1Rva2VuKCkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5fY29tbW9uU2VydmljZS5kZWxheSgxMDApO1xyXG4gICAgICAgICAgICByZXRyeUNvdW50Kys7XHJcbiAgICAgICAgICAgIGlmIChyZXRyeUNvdW50ID4gNTApIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNoZWNrUGVybWlzc2lvbihzZXJ2aWNlLCBwZXJtaXNzaW9uLCBjaGVjRm9yTWVudSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tQZXJtaXNzaW9uKHNlcnZpY2UsIHBlcm1pc3Npb25Ub0NoZWNrOiBzdHJpbmcsIGNoZWNrRm9yTWVudTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlSXNEZXZNb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIHZhbHVlSXNEZXZNb2RlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyICYmIHVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgdmFsdWVJc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh1c2VyICYmIHVzZXIuaXNhZG1pbiAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4gJiYgdmFsdWVJc0Rldk1vZGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IGF3YWl0IHRoaXMuZ2V0U2VydmljZVBlcm1pc3Npb24oc2VydmljZSk7XHJcbiAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvbnMgJiYgdXNlclBlcm1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBjaGVja0Zvck1lbnVcclxuICAgICAgICAgICAgICAgICAgICA/IHVzZXJQZXJtaXNzaW9ucy5pbmNsdWRlcyhwZXJtaXNzaW9uVG9DaGVjaylcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2NoZWNrUGVybWlzc2lvbih1c2VyUGVybWlzc2lvbnMsIHBlcm1pc3Npb25Ub0NoZWNrKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBLaMO0bmcgY8OzIHF1eeG7gW4gduG7m2kgcGjDom4gaOG7hyBbJHtzZXJ2aWNlfV1gKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX2NoZWNrUGVybWlzc2lvbih1c2VyUGVybWlzc2lvbnM6IHN0cmluZ1tdLCBwZXJtaXNzaW9uVG9DaGVjazogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGlzQXV0aG9yaXplZCA9IGZhbHNlO1xyXG4gICAgICAgIC8vIGNoZWNrIHBlcm1pc3Npb24gY+G7p2EgbmfGsOG7nWkgZMO5bmdcclxuICAgICAgICAvLyBkdXnhu4d0IHF1YSB04burbmcgcGVybWlzc2lvbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgIGZvciAoY29uc3QgdXNlclBlcm1pc3Npb24gb2YgdXNlclBlcm1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIC8vIGJp4bq/biDEkeG7gyBicmVhayBraOG7j2kgdsOybmcga2hpIG5nxrDhu51pIGTDuW5nIMSRxrDhu6NjIGF1dGhvcml6ZWRcclxuICAgICAgICAgICAgbGV0IGJyZWFrT3V0ZXJMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIHBvaW50ZXIgcGVybWlzc2lvbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgICAgICBsZXQgdXNlclBlcm1pc3Npb25Qb2ludGVyID0gMDtcclxuICAgICAgICAgICAgLy8gcG9pbnRlciBwZXJtaXNzaW9uIMSRYW5nIGNoZWNrXHJcbiAgICAgICAgICAgIGxldCBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAvLyBtYXJrIGNvIHRoZSBjaGVjayBxdWVyeSBwYXJhbVxyXG4gICAgICAgICAgICBsZXQgYWJvdXRUb0NoZWNrUXVlcnlQYXJhbSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBjaGVjayB04burbmcgY2hhciBj4bunYSAyIG3huqNuZ1xyXG4gICAgICAgICAgICBmb3IgKDsgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyIDwgcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoOykge1xyXG4gICAgICAgICAgICAgICAgLy8gbuG6v3UgY2hhciBsw6Aga8O9IHThu7EgYuG6r3QgxJHhuqd1IHRlbXBsYXRlID0+IHThu4tuaCB0aeG6v24gcG9pbnRlciBj4bunYSAyIG3huqNuZ1xyXG4gICAgICAgICAgICAgICAgbGV0IG5lZWRSZWNoZWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSA9PSAneycpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjaG8gxJHhur9uIGtoaSB0w6xtIMSRxrDhu6NjIGvDvSB04buxICcvJyB0aeG6v3AgdGhlbyB0aMOsIGThu6tuZyBs4bqhaVxyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIgPCB1c2VyUGVybWlzc2lvbi5sZW5ndGg7IHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblBvaW50ZXIgPT0gdXNlclBlcm1pc3Npb24ubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uW3VzZXJQZXJtaXNzaW9uUG9pbnRlcl0gIT0gJ30nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSA9PT0gJz8nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm91dFRvQ2hlY2tRdWVyeVBhcmFtID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICArK3VzZXJQZXJtaXNzaW9uUG9pbnRlcjsgLy8gdGnhur9uIHRp4bq/biDEkeG6v24ga8O9IHThu7Egc2F1IGvhur90IHRow7pjIHRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIHRyxrDhu51uZyBo4bujcCB0csaw4budbmcgaOG7o3AgY2h14buXaSB0ZW1wbGF0ZSBjw7MgZOG6oW5nIFwie3RlbXBsYXRlfWFjc2VramZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyA9PiBj4bqnbiBjaGVjayBjw6FjIGvDvSB04buxIHNhdSB0ZW1wbGF0ZSB2w6AgdHLGsOG7m2Mga8O9IHThu7EgJy8nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdICE9ICcvJyAmJiAoYWJvdXRUb0NoZWNrUXVlcnlQYXJhbSAmJiB1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdICE9ICcmJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRSZWNoZWNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoOyB1c2VyUGVybWlzc2lvblBvaW50ZXIgPCB1c2VyUGVybWlzc2lvbi5sZW5ndGg7IHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uUG9pbnRlciA9PSB1c2VyUGVybWlzc2lvbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25bdXNlclBlcm1pc3Npb25Qb2ludGVyXSAhPSAnLycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBmb3IgKDsgcGVybWlzc2lvblRvQ2hlY2tQb2ludGVyIDwgcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoOyBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGVybWlzc2lvblRvQ2hlY2tQb2ludGVyID09IHBlcm1pc3Npb25Ub0NoZWNrLmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uVG9DaGVja1twZXJtaXNzaW9uVG9DaGVja1BvaW50ZXJdID09ICcvJyB8fCAoYWJvdXRUb0NoZWNrUXVlcnlQYXJhbSAmJiBwZXJtaXNzaW9uVG9DaGVja1twZXJtaXNzaW9uVG9DaGVja1BvaW50ZXJdID09ICcmJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBicmVha0lubmVyTG9vcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5lZWRSZWNoZWNrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY2hlY2sgbOG6oWkgY2hvIHRyxrDhu51uZyBo4bujcCBjaHXhu5dpIHRlbXBsYXRlIGPDsyBk4bqhbmcgXCJ7dGVtcGxhdGV9YWNzbGVrZmpcIlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGR1eeG7h3QgbmfGsOG7o2MgbOG6oWkgY2hvIMSR4bq/biBraGkgZ+G6t3Aga8O9IHThu7Ega+G6v3QgdGjDumMgdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGVtcFVzZXJQb2ludGVyID0gdXNlclBlcm1pc3Npb25Qb2ludGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ZW1wVG9DaGVja1BvaW50ZXIgPSBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHVzZXJQZXJtaXNzaW9uW3RlbXBVc2VyUG9pbnRlcl0gIT0gJ30nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGvDvSB04buxIGtow6FjIG5oYXUgPT4gYnJlYWsga2jhu49pIHbDsm5nIGtp4buDbSB0cmEgdHJvbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVzZXJQZXJtaXNzaW9uW3RlbXBVc2VyUG9pbnRlcl0udG9Mb3dlckNhc2UoKSAhPSBwZXJtaXNzaW9uVG9DaGVja1t0ZW1wVG9DaGVja1BvaW50ZXJdLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrSW5uZXJMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBVc2VyUG9pbnRlci0tO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wVG9DaGVja1BvaW50ZXItLTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrSW5uZXJMb29wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlckNoYXIgPSB1c2VyUGVybWlzc2lvblt1c2VyUGVybWlzc2lvblBvaW50ZXJdLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0b0NoZWNrQ2hhciA9IHBlcm1pc3Npb25Ub0NoZWNrW3Blcm1pc3Npb25Ub0NoZWNrUG9pbnRlcl0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgICAgIC8vIG7hur91IHVzZXJQZXJtaXNzaW9uIMSRYW5nIOG7nyBpbmRleCBjdeG7kWlcclxuICAgICAgICAgICAgICAgIGlmICh1c2VyUGVybWlzc2lvblBvaW50ZXIgPT0gdXNlclBlcm1pc3Npb24ubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoYXIgY3Xhu5FpIGPhu6dhIDIgbeG6o25nICh0cuG7qyBraGkgbMOgIGvDvSB04buxIGvhur90IHRow7pjIHRlbXBsYXRlKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHbDoCBjxaluZyBwaOG6o2kgbMOgIGNoYXIgY3Xhu5FpIGPhu6dhIG3huqNuZyBwZXJtaXNzaW9uIGPhuqduIGNoZWNrXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gPT4gbmfGsOG7nWkgZMO5bmcgYXV0aG9yaXplZCB2w6AgYnJlYWsga2jhu49pIHbDsm5nIGzhurdwIG5nb8OgaSBjw7luZ1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgodXNlckNoYXIgPT0gJ30nIHx8IHVzZXJDaGFyID09IHRvQ2hlY2tDaGFyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIgPT0gcGVybWlzc2lvblRvQ2hlY2subGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha091dGVyTG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNoYXIgY8OzIGdp4buRbmcgbmhhdSBraMO0bmcsIGtow7RuZyBnaeG7kW5nIHRow6wgYnJlYWsga2jhu49pIHbDsm5nIGNoZWNrXHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckNoYXIgIT0gdG9DaGVja0NoYXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAvLyBu4bq/dSBjaGFyIGdp4buRbmcgbmhhdSB0aMOsIHRp4bq/cCB04bulYyB2w7JuZyBsxINwXHJcbiAgICAgICAgICAgICAgICBwZXJtaXNzaW9uVG9DaGVja1BvaW50ZXIrKztcclxuICAgICAgICAgICAgICAgIHVzZXJQZXJtaXNzaW9uUG9pbnRlcisrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChicmVha091dGVyTG9vcCkge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGlzQXV0aG9yaXplZDtcclxuICAgIH1cclxuXHJcbiAgICBfY2hlY2tQZXJtaXNzaW9uT2xkKHVzZXJQZXJtaXNzaW9uczogc3RyaW5nW10sIHBlcm1pc3Npb25Ub0NoZWNrOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY2hlY2sgcXV54buBbiB0aGVvIGPDoWNoIGPFqSBu4bq/dSB0csaw4budbmcgaOG7jXAgbMOgIHBow6JuIHF1eeG7gW4gbW9kdWxlXHJcbiAgICAgICAgaWYgKHBlcm1pc3Npb25Ub0NoZWNrLmluY2x1ZGVzKCdNT0RVTEUnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdXNlclBlcm1pc3Npb25zLmluY2x1ZGVzKHBlcm1pc3Npb25Ub0NoZWNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChjb25zdCB1c2VyUGVybWlzc2lvbiBvZiB1c2VyUGVybWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgLy8gQ+G6r3QgY2h14buXaSBwZXJtaXNzaW9uIHRow6BuaCBt4bqjbmcgxJHhu4MgeGVtIG3hu5dpIGZyYWdlbWVudCBjw7Mga2jhu5twIG5oYXUga2jDtG5nXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJQZXJtaXNzaW9uRnJhZ21lbnRzID0gKHVzZXJQZXJtaXNzaW9uIGFzIHN0cmluZykuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbkZyYWdtZW50cyA9IHBlcm1pc3Npb25Ub0NoZWNrLnNwbGl0KCcvJyk7XHJcblxyXG4gICAgICAgICAgICAvLyBN4bqjbmcga2jDoWMgxJHhu5kgZMOgaSB0aMOsIHRob8OhdCBz4bubbVxyXG4gICAgICAgICAgICBpZiAodXNlclBlcm1pc3Npb25GcmFnbWVudHMubGVuZ3RoICE9IHBlcm1pc3Npb25GcmFnbWVudHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYmnhur9uIGZsYWcgcmEgaGnhu4d1IG5nxrDhu51pIGTDuW5nIGF1dGhvcml6ZWQgdsOgIG91dCB2w7JuZ1xyXG4gICAgICAgICAgICBsZXQgYnJlYWtMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIG7hur91IHThuqV0IGPhuqMgcGjhuqduIHThu60ga2jhu5twIG5oYXUgPT4gcGVybWlzc2lvbiBuw6B5IHRyw7luZyB2w6AgbmfGsOG7nWkgZMO5bmcgxJHGsOG7o2MgYXV0aG9yaXplZFxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJGcmFnZW1lbnQgPSB1c2VyUGVybWlzc2lvbkZyYWdtZW50c1tpbmRleF07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uRnJhZ21lbnQgPSBwZXJtaXNzaW9uRnJhZ21lbnRzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIC8vIHNraXAgcXVhIGPDoWMgcGjhuqduIHThu60gY8OzIGvDvSB04buxIGLhuq90IMSR4bqndSBsw6AgJ3snXHJcbiAgICAgICAgICAgICAgICBpZiAodXNlckZyYWdlbWVudFswXSA9PSAneycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPT0gcGVybWlzc2lvbkZyYWdtZW50cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrTG9vcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHVzZXJGcmFnZW1lbnQudG9Mb3dlckNhc2UoKSAhPSBwZXJtaXNzaW9uRnJhZ21lbnQudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID09IHBlcm1pc3Npb25GcmFnbWVudHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtMb29wID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYnJlYWtMb29wKSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaXNBdXRob3JpemVkO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpc0F1dGhvcml6ZWRCeVBlcm1pc3Npb25zKHBlcm1pc3Npb25zOiBBcnJheTxQZXJtaXNzaW9uPiwgb3BlcmF0b3IgPSAnT1InLCBpZ25vcmVBZG1pbjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSAoYXdhaXQgdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSkgYXMgVG5Vc2VyO1xyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT0gJ3RydWUnKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodXNlciAmJiB1c2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PSAndHJ1ZScgJiYgIXRoaXMuaWdub3JlQWRtaW4pIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGxldCBpc0F1dGhvcml6ZWQgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgaWYgKG9wZXJhdG9yLnRvVXBwZXJDYXNlKCkgPT0gJ09SJykge1xyXG4gICAgICAgICAgICAgICAgaXNBdXRob3JpemVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBlcm1pc3Npb25zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlcnZpY2VQZXJtaXNzaW9uKGl0ZW0uc2VydmljZSkudGhlbihwZXJtaXNzaW9uUmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BlcmF0b3IudG9VcHBlckNhc2UoKSA9PSAnT1InKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uUmVzdWx0LmluY2x1ZGVzKGl0ZW0ucGVybWlzc2lvbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aG9yaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcGVybWlzc2lvblJlc3VsdC5pbmNsdWRlcyhpdGVtLnBlcm1pc3Npb24pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0F1dGhvcml6ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShpc0F1dGhvcml6ZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFNlcnZpY2VQZXJtaXNzaW9uKHNlcnZpY2UsIG92ZXJyaWRlTG9jYWxTdG9yYWdlOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHN0cmluZ1tdPiB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gYEFULiR7c2VydmljZS50b1VwcGVyQ2FzZSgpfWA7XHJcbiAgICAgICAgaWYgKCFvdmVycmlkZUxvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XHJcbiAgICAgICAgICAgIGlmIChzdG9yYWdlSXRlbSAmJiBzdG9yYWdlSXRlbSAhPT0gJ251bGwnKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBKU09OLnBhcnNlKHN0b3JhZ2VJdGVtKTtcclxuICAgICAgICAgICAgICAgIGlmKHJlc3VsdCE9bnVsbCAmJiByZXN1bHQubGVuZ3RoID4gMCl7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVzdWx0X19fX1wiLCByZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50ID0gdGhpcy50NmhlbHBlci5mcm9tSW5kZXhTdHJpbmcoZWxlbWVudCwgdGhpcy50NnN0cik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgTOG6pXkgcXV54buBbiB04burIGxvY2FsIHN0b3JhZ2UgduG7m2kga2V5IFske2tleX1dIHbDoCBnacOhIHRy4buLICR7cmVzdWx0fWApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRQZXJtaXNzaW9uc0J5U2VydmljZT9zZXJ2aWNlPSR7c2VydmljZX1gO1xyXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChvdmVycmlkZUxvY2FsU3RvcmFnZSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnN0b3JhZ2Uuc2V0SXRlbShrZXksIEpTT04uc3RyaW5naWZ5KHJlc3BvbnNlLmRhdGEpKTtcclxuICAgICAgICBpZihyZXNwb25zZS5kYXRhIT1udWxsICYmIHJlc3BvbnNlLmRhdGEubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLnQ2aGVscGVyLmZyb21JbmRleFN0cmluZyhlbGVtZW50LCB0aGlzLnQ2c3RyKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKGBM4bqleSBxdXnhu4FuIHThu6sgR2V0UGVybWlzc2lvbnNCeVNlcnZpY2UgduG7m2kga2V5IFske2tleX1dIHbDoCBnacOhIHRy4buLICR7cmVzcG9uc2UuZGF0YX1gKTtcclxuICAgICAgICByZXR1cm4gcmVzcG9uc2UuZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQZXJtaXNzaW9uSWRzQnlNb2R1bGUobW9kdWxlQ29kZTogc3RyaW5nLCB1c2VySWQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0UGVybWlzc2lvbklkc0J5TW9kdWxlLyR7bW9kdWxlQ29kZX0vJHt1c2VySWR9YDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XHJcbiAgICB9XHJcblxyXG4gICAgcGhhblF1eWVuTmd1b2lEdW5nKG1vZGVsOiBQaGFuUXV5ZW5Nb2RlbCkge1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vUGhhblF1eWVuTmd1b2lEdW5nYDtcclxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIG1vZGVsKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -18429,6 +18429,14 @@ class T06HelperService {
18429
18429
  const positionMap = yield this.createPositionMap(password);
18430
18430
  const reverseMap = new Map();
18431
18431
  positionMap.forEach((value, key) => reverseMap.set(value, key));
18432
+ console.log("indexString____", indexString
18433
+ .split(',')
18434
+ .map(part => {
18435
+ var _a;
18436
+ const position = parseInt(part, 10);
18437
+ return (_a = reverseMap.get(position)) !== null && _a !== void 0 ? _a : '';
18438
+ })
18439
+ .join(''));
18432
18440
  return indexString
18433
18441
  .split(',')
18434
18442
  .map(part => {
@@ -18815,11 +18823,12 @@ class PermissionService extends BaseService {
18815
18823
  if (storageItem && storageItem !== 'null') {
18816
18824
  const result = JSON.parse(storageItem);
18817
18825
  if (result != null && result.length > 0) {
18826
+ console.log("result____", result);
18818
18827
  result.forEach(element => {
18819
18828
  element = this.t6helper.fromIndexString(element, this.t6str);
18820
18829
  });
18821
18830
  }
18822
- console.log(`Lấy quyền từ local storage với key [${key}] và giá trị ${result}`);
18831
+ // console.log(`Lấy quyền từ local storage với key [${key}] và giá trị ${result}`);
18823
18832
  return result;
18824
18833
  }
18825
18834
  }