stream-chat-angular 4.65.0 → 4.65.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- export const version = '4.65.0';
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICc0LjY1LjAnO1xuIl19
1
+ export const version = '4.65.2';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2Fzc2V0cy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9ICc0LjY1LjInO1xuIl19
@@ -118,6 +118,7 @@ export class AvatarComponent {
118
118
  });
119
119
  }
120
120
  else {
121
+ this.isOnline = false;
121
122
  (_a = this.isOnlineSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
122
123
  }
123
124
  }
@@ -168,4 +169,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
168
169
  }], initialsType: [{
169
170
  type: Input
170
171
  }] } });
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsS0FBSyxHQUtOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQVN4Qzs7R0FFRztBQU1ILE1BQU0sT0FBTyxlQUFlO0lBa0QxQixZQUNVLGlCQUFvQyxFQUNwQyxNQUFjLEVBQ2QsS0FBd0I7UUFGeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUExQ2xDOztXQUVHO1FBQ00sU0FBSSxHQUFHLEVBQUUsQ0FBQztRQWlCbkI7O1dBRUc7UUFDTSx3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDcEM7O1dBRUc7UUFDTSxpQkFBWSxHQUVhLDRCQUE0QixDQUFDO1FBQy9ELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBR2QsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0lBTXhDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFBLENBQUMs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b0IsMENBQUUsV0FBVyxFQUFFLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQzNCLENBQUM7SUFFTywrQkFBK0I7O1FBQ3JDLE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ2hDLENBQUEsTUFBQSxNQUFBLElBQUksQ0FBQyxPQUFPLDBDQUFFLEtBQUssMENBQUUsT0FBTyxLQUFJLEVBQUUsQ0FDbkMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNDLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDN0IsT0FBTyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1NBQzdCO2FBQU07WUFDTCxPQUFPLFNBQVMsQ0FBQztTQUNsQjtJQUNILENBQUM7OzRHQW5LVSxlQUFlO2dHQUFmLGVBQWUsd1JDNUI1QiwraERBMENBOzJGRGRhLGVBQWU7a0JBTDNCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFdBQVcsRUFBRSx5QkFBeUI7b0JBQ3RDLFNBQVMsRUFBRSxDQUFDLHlCQUF5QixDQUFDO2lCQUN2Qzs2SkFPVSxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBSUcsWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ2hhbm5lbCwgVXNlciB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQge1xuICBBdmF0YXJMb2NhdGlvbixcbiAgQXZhdGFyVHlwZSxcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIFRoZSBgQXZhdGFyYCBjb21wb25lbnQgZGlzcGxheXMgdGhlIHByb3ZpZGVkIGltYWdlLCB3aXRoIGZhbGxiYWNrIHRvIHRoZSBmaXJzdCBsZXR0ZXIgb2YgdGhlIG9wdGlvbmFsIG5hbWUgaW5wdXQuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1hdmF0YXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYXZhdGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXZhdGFyLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEF2YXRhckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcbntcbiAgLyoqXG4gICAqIEFuIG9wdGlvbmFsIG5hbWUgb2YgdGhlIGltYWdlLCB1c2VkIGZvciBmYWxsYmFjayBpbWFnZSBvciBpbWFnZSB0aXRsZSAoaWYgYGltYWdlVXJsYCBpcyBwcm92aWRlZClcbiAgICovXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIFRoZSBVUkwgb2YgdGhlIGltYWdlIHRvIGJlIGRpc3BsYXllZC4gSWYgdGhlIGltYWdlIGNhbid0IGJlIGRpc3BsYXllZCB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBuYW1lIGlucHV0IGlzIGRpc3BsYXllZC5cbiAgICovXG4gIEBJbnB1dCgpIGltYWdlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBpbiBwaXhlbHMgb2YgdGhlIGF2YXRhciBpbWFnZS5cbiAgICovXG4gIEBJbnB1dCgpIHNpemUgPSAzMjtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiB0aGUgYXZhdGFyIHdpbGwgYmUgZGlzcGxheWVkIGluXG4gICAqL1xuICBASW5wdXQoKSBsb2NhdGlvbjogQXZhdGFyTG9jYXRpb24gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgY2hhbm5lbCB0aGUgYXZhdGFyIGJlbG9uZ3MgdG8gKGlmIGF2YXRhciBvZiBhIGNoYW5uZWwgaXMgZGlzcGxheWVkKVxuICAgKi9cbiAgQElucHV0KCkgY2hhbm5lbD86IENoYW5uZWw8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz47XG4gIC8qKlxuICAgKiBUaGUgdXNlciB0aGUgYXZhdGFyIGJlbG9uZ3MgdG8gKGlmIGF2YXRhciBvZiBhIHVzZXIgaXMgZGlzcGxheWVkKVxuICAgKi9cbiAgQElucHV0KCkgdXNlcj86IFVzZXI8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz47XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiB0aGUgYXZhdGFyOiBjaGFubmVsIGlmIGNoYW5uZWwgYXZhdGFyIGlzIGRpc3BsYXllZCwgdXNlciBpZiB1c2VyIGF2YXRhciBpcyBkaXNwbGF5ZWRcbiAgICovXG4gIEBJbnB1dCgpIHR5cGU6IEF2YXRhclR5cGUgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBJZiBhIGNoYW5uZWwgYXZhdGFyIGlzIGRpc3BsYXllZCwgYW5kIGlmIHRoZSBjaGFubmVsIGhhcyBleGFjdGx5IHR3byBtZW1iZXJzIGEgZ3JlZW4gZG90IGlzIGRpc3BsYXllZCBpZiB0aGUgb3RoZXIgbWVtYmVyIGlzIG9ubGluZS4gU2V0IHRoaXMgZmxhZyB0byBgZmFsc2VgIHRvIHR1cm4gb2ZmIHRoaXMgYmVoYXZpb3IuXG4gICAqL1xuICBASW5wdXQoKSBzaG93T25saW5lSW5kaWNhdG9yID0gdHJ1ZTtcbiAgLyoqXG4gICAqIElmIGNoYW5uZWwvdXNlciBpbWFnZSBpc24ndCBwcm92aWRlZCB0aGUgaW5pdGlhbHMgb2YgdGhlIG5hbWUgb2YgdGhlIGNoYW5uZWwvdXNlciBpcyBzaG93biBpbnN0ZWFkLCB5b3UgY2FuIGNob29zZSBob3cgdGhlIGluaXRhbHMgc2hvdWxkIGJlIGNvbXB1dGVkXG4gICAqL1xuICBASW5wdXQoKSBpbml0aWFsc1R5cGU6XG4gICAgfCAnZmlyc3QtbGV0dGVyLW9mLWZpcnN0LXdvcmQnXG4gICAgfCAnZmlyc3QtbGV0dGVyLW9mLWVhY2gtd29yZCcgPSAnZmlyc3QtbGV0dGVyLW9mLWZpcnN0LXdvcmQnO1xuICBpc0Vycm9yID0gZmFsc2U7XG4gIGlzT25saW5lID0gZmFsc2U7XG4gIHByaXZhdGUgaXNPbmxpbmVTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gIGluaXRpYWxzOiBzdHJpbmcgPSAnJztcbiAgZmFsbGJhY2tDaGFubmVsSW1hZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSB1c2VySWQ/OiBzdHJpbmc7XG4gIHByaXZhdGUgaXNWaWV3SW5pdGVkID0gZmFsc2U7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYXRDbGllbnRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY2hhdENsaWVudFNlcnZpY2UudXNlciQuc3Vic2NyaWJlKCh1KSA9PiB7XG4gICAgICAgIGlmICh1Py5pZCAhPT0gdGhpcy51c2VySWQpIHtcbiAgICAgICAgICB0aGlzLnVzZXJJZCA9IHU/LmlkO1xuICAgICAgICAgIGlmICh0aGlzLnR5cGUgfHwgdGhpcy5jaGFubmVsIHx8IHRoaXMubmFtZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbml0aWFscygpO1xuICAgICAgICAgICAgdGhpcy5zZXRGYWxsYmFja0NoYW5uZWxJbWFnZSgpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJc09ubGluZVN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5pc1ZpZXdJbml0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydjaGFubmVsJ10pIHtcbiAgICAgIHRoaXMudXBkYXRlSXNPbmxpbmVTdWJzY3JpcHRpb24oKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMudHlwZSB8fCBjaGFuZ2VzLm5hbWUgfHwgY2hhbmdlcy5jaGFubmVsKSB7XG4gICAgICB0aGlzLnNldEluaXRpYWxzKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMudHlwZSB8fCBjaGFuZ2VzLmNoYW5uZWwpIHtcbiAgICAgIHRoaXMuc2V0RmFsbGJhY2tDaGFubmVsSW1hZ2UoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEZhbGxiYWNrQ2hhbm5lbEltYWdlKCkge1xuICAgIGlmICh0aGlzLnR5cGUgIT09ICdjaGFubmVsJykge1xuICAgICAgdGhpcy5mYWxsYmFja0NoYW5uZWxJbWFnZSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3RoZXJNZW1iZXIgPSB0aGlzLmdldE90aGVyTWVtYmVySWZPbmVUb09uZUNoYW5uZWwoKTtcbiAgICAgIGlmIChvdGhlck1lbWJlcikge1xuICAgICAgICB0aGlzLmZhbGxiYWNrQ2hhbm5lbEltYWdlID0gb3RoZXJNZW1iZXIuaW1hZ2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZhbGxiYWNrQ2hhbm5lbEltYWdlID0gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0SW5pdGlhbHMoKSB7XG4gICAgbGV0IHJlc3VsdDogc3RyaW5nID0gJyc7XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gJ3VzZXInKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLm5hbWU/LnRvU3RyaW5nKCkgfHwgJyc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT09ICdjaGFubmVsJykge1xuICAgICAgaWYgKHRoaXMuY2hhbm5lbD8uZGF0YT8ubmFtZSkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLmNoYW5uZWw/LmRhdGE/Lm5hbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBvdGhlck1lbWJlciA9IHRoaXMuZ2V0T3RoZXJNZW1iZXJJZk9uZVRvT25lQ2hhbm5lbCgpO1xuICAgICAgICBpZiAob3RoZXJNZW1iZXIpIHtcbiAgICAgICAgICByZXN1bHQgPSBvdGhlck1lbWJlci5uYW1lIHx8IG90aGVyTWVtYmVyLmlkIHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc3VsdCA9ICcjJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdvcmRzID0gcmVzdWx0LnNwbGl0KCcgJyk7XG4gICAgbGV0IGluaXRpYWxzOiBzdHJpbmc7XG4gICAgaWYgKHRoaXMuaW5pdGlhbHNUeXBlID09PSAnZmlyc3QtbGV0dGVyLW9mLWVhY2gtd29yZCcpIHtcbiAgICAgIGluaXRpYWxzID0gd29yZHMubWFwKCh3KSA9PiB3LmNoYXJBdCgwKSB8fCAnJykuam9pbignJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluaXRpYWxzID0gd29yZHNbMF0uY2hhckF0KDApIHx8ICcnO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxzID0gaW5pdGlhbHM7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUlzT25saW5lU3Vic2NyaXB0aW9uKCkge1xuICAgIGlmICh0aGlzLmNoYW5uZWwpIHtcbiAgICAgIGNvbnN0IG90aGVyTWVtYmVyID0gdGhpcy5nZXRPdGhlck1lbWJlcklmT25lVG9PbmVDaGFubmVsKCk7XG4gICAgICBpZiAob3RoZXJNZW1iZXIpIHtcbiAgICAgICAgdGhpcy5pc09ubGluZSA9IG90aGVyTWVtYmVyLm9ubGluZSB8fCBmYWxzZTtcbiAgICAgICAgdGhpcy5pc09ubGluZVN1YnNjcmlwdGlvbiA9IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuZXZlbnRzJFxuICAgICAgICAgIC5waXBlKGZpbHRlcigoZSkgPT4gZS5ldmVudFR5cGUgPT09ICd1c2VyLnByZXNlbmNlLmNoYW5nZWQnKSlcbiAgICAgICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmV2ZW50LnVzZXI/LmlkID09PSBvdGhlck1lbWJlci5pZCkge1xuICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPbmxpbmUgPSBldmVudC5ldmVudC51c2VyPy5vbmxpbmUgfHwgZmFsc2U7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc09ubGluZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc09ubGluZSA9IGZhbHNlO1xuICAgICAgdGhpcy5pc09ubGluZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZpZXdJbml0ZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdGhlck1lbWJlcklmT25lVG9PbmVDaGFubmVsKCkge1xuICAgIGNvbnN0IG90aGVyTWVtYmVycyA9IE9iamVjdC52YWx1ZXMoXG4gICAgICB0aGlzLmNoYW5uZWw/LnN0YXRlPy5tZW1iZXJzIHx8IHt9XG4gICAgKS5maWx0ZXIoKG0pID0+IG0udXNlcl9pZCAhPT0gdGhpcy51c2VySWQpO1xuICAgIGlmIChvdGhlck1lbWJlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gb3RoZXJNZW1iZXJzWzBdLnVzZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic3RyLWNoYXRfX2F2YXRhciBzdHItY2hhdF9fYXZhdGFyLS1jaXJjbGUgc3RyZWFtLWNoYXRfX2F2YXRhci0te3tcbiAgICBsb2NhdGlvblxuICB9fVwiXG4gIHRpdGxlPVwie3sgbmFtZSB9fVwiXG4gIFtuZ1N0eWxlXT1cIntcbiAgICBmbGV4QmFzaXM6ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgKyAnKScsXG4gICAgZm9udFNpemU6XG4gICAgICBpbml0aWFsc1R5cGUgPT09ICdmaXJzdC1sZXR0ZXItb2YtZmlyc3Qtd29yZCdcbiAgICAgICAgPyAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplIC8gMiArICcpJ1xuICAgICAgICA6ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgLyAzICsgJyknLFxuICAgIGhlaWdodDogJ2NhbGModmFyKC0tc3RyLWNoYXRfX3NwYWNpbmctcHgsIDFweCkgKiAnICsgc2l6ZSArICcpJyxcbiAgICBsaW5lSGVpZ2h0OiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplICsgJyknLFxuICAgIHdpZHRoOiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplICsgJyknXG4gIH1cIlxuPlxuICA8aW1nXG4gICAgKm5nSWY9XCIoaW1hZ2VVcmwgfHwgZmFsbGJhY2tDaGFubmVsSW1hZ2UpICYmICFpc0Vycm9yOyBlbHNlIGZhbGxiYWNrXCJcbiAgICBjbGFzcz1cInN0ci1jaGF0X19hdmF0YXItaW1hZ2Ugc3RyLWNoYXRfX2F2YXRhci1pbWFnZVwiXG4gICAgc3JjPVwie3sgaW1hZ2VVcmwgfHwgZmFsbGJhY2tDaGFubmVsSW1hZ2UgfX1cIlxuICAgIGFsdD1cInt7IGluaXRpYWxzIH19XCJcbiAgICBkYXRhLXRlc3RpZD1cImF2YXRhci1pbWdcIlxuICAgIChlcnJvcik9XCJpc0Vycm9yID0gdHJ1ZVwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgZmxleEJhc2lzOiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplICsgJyknLFxuICAgICAgaGVpZ2h0OiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplICsgJyknLFxuICAgICAgb2JqZWN0Rml0OiAnY292ZXInLFxuICAgICAgd2lkdGg6ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgKyAnKSdcbiAgICB9XCJcbiAgICBmZXRjaHByaW9yaXR5PVwiaGlnaFwiXG4gIC8+XG4gIDxuZy10ZW1wbGF0ZSAjZmFsbGJhY2s+XG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImZhbGxiYWNrLWltZ1wiIGNsYXNzPVwic3RyLWNoYXRfX2F2YXRhci1mYWxsYmFja1wiPlxuICAgICAge3sgaW5pdGlhbHMgfX1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGRhdGEtdGVzdGlkPVwib25saW5lLWluZGljYXRvclwiXG4gICAgKm5nSWY9XCJpc09ubGluZSAmJiBzaG93T25saW5lSW5kaWNhdG9yXCJcbiAgICBjbGFzcz1cInN0ci1jaGF0X19hdmF0YXItLW9ubGluZS1pbmRpY2F0b3JcIlxuICA+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBQ1QsS0FBSyxHQUtOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQVN4Qzs7R0FFRztBQU1ILE1BQU0sT0FBTyxlQUFlO0lBa0QxQixZQUNVLGlCQUFvQyxFQUNwQyxNQUFjLEVBQ2QsS0FBd0I7UUFGeEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUExQ2xDOztXQUVHO1FBQ00sU0FBSSxHQUFHLEVBQUUsQ0FBQztRQWlCbkI7O1dBRUc7UUFDTSx3QkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDcEM7O1dBRUc7UUFDTSxpQkFBWSxHQUVhLDRCQUE0QixDQUFDO1FBQy9ELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBR2QsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsa0JBQWEsR0FBbUIsRUFBRSxDQUFDO0lBTXhDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxDQUFBLENBQUMsYUFBRCxDQUFDLHVCQUFELENBQUMsQ0FBRSxFQUFFLE1BQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsRUFBRSxDQUFDO2dCQUNwQixJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO29CQUMxQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQ25CLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO29CQUMvQixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztpQkFDbkM7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUM1QjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7U0FDbkM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25ELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjtRQUVELElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ25DLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVPLHVCQUF1QjtRQUM3QixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQzNCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7U0FDdkM7YUFBTTtZQUNMLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1lBQzNELElBQUksV0FBVyxFQUFFO2dCQUNmLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO2FBQy9DO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7YUFDdkM7U0FDRjtJQUNILENBQUM7SUFFTyxXQUFXOztRQUNqQixJQUFJLE1BQU0sR0FBVyxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRTtZQUN4QixNQUFNLEdBQUcsQ0FBQSxNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLFFBQVEsRUFBRSxLQUFJLEVBQUUsQ0FBQztTQUN0QzthQUFNLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7WUFDbEMsSUFBSSxNQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsSUFBSSwwQ0FBRSxJQUFJLEVBQUU7Z0JBQzVCLE1BQU0sR0FBRyxNQUFBLE1BQUEsSUFBSSxDQUFDLE9BQU8sMENBQUUsSUFBSSwwQ0FBRSxJQUFJLENBQUM7YUFDbkM7aUJBQU07Z0JBQ0wsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7Z0JBQzNELElBQUksV0FBVyxFQUFFO29CQUNmLE1BQU0sR0FBRyxXQUFXLENBQUMsSUFBSSxJQUFJLFdBQVcsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO2lCQUNuRDtxQkFBTTtvQkFDTCxNQUFNLEdBQUcsR0FBRyxDQUFDO2lCQUNkO2FBQ0Y7U0FDRjtRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsSUFBSSxRQUFnQixDQUFDO1FBQ3JCLElBQUksSUFBSSxDQUFDLFlBQVksS0FBSywyQkFBMkIsRUFBRTtZQUNyRCxRQUFRLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekQ7YUFBTTtZQUNMLFFBQVEsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzNCLENBQUM7SUFFTywwQkFBMEI7O1FBQ2hDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztZQUMzRCxJQUFJLFdBQVcsRUFBRTtnQkFDZixJQUFJLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU87cUJBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEtBQUssdUJBQXVCLENBQUMsQ0FBQztxQkFDNUQsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7O29CQUNuQixJQUFJLENBQUEsTUFBQSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksMENBQUUsRUFBRSxNQUFLLFdBQVcsQ0FBQyxFQUFFLEVBQUU7d0JBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTs7NEJBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQSxNQUFBLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSwwQ0FBRSxNQUFNLEtBQUksS0FBSyxDQUFDO3dCQUNwRCxDQUFDLENBQUMsQ0FBQztxQkFDSjtnQkFDSCxDQUFDLENBQUMsQ0FBQzthQUNOO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixNQUFBLElBQUksQ0FBQyxvQkFBb0IsMENBQUUsV0FBVyxFQUFFLENBQUM7YUFDMUM7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7WUFDdEIsTUFBQSxJQUFJLENBQUMsb0JBQW9CLDBDQUFFLFdBQVcsRUFBRSxDQUFDO1NBQzFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUMzQixDQUFDO0lBRU8sK0JBQStCOztRQUNyQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNoQyxDQUFBLE1BQUEsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxLQUFLLDBDQUFFLE9BQU8sS0FBSSxFQUFFLENBQ25DLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQzdCLE9BQU8sWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUM3QjthQUFNO1lBQ0wsT0FBTyxTQUFTLENBQUM7U0FDbEI7SUFDSCxDQUFDOzs0R0FwS1UsZUFBZTtnR0FBZixlQUFlLHdSQzVCNUIsK2hEQTBDQTsyRkRkYSxlQUFlO2tCQUwzQixTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxlQUFlO29CQUN6QixXQUFXLEVBQUUseUJBQXlCO29CQUN0QyxTQUFTLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQztpQkFDdkM7NkpBT1UsSUFBSTtzQkFBWixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUlHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsT0FBTztzQkFBZixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBSUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IENoYW5uZWwsIFVzZXIgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBDaGF0Q2xpZW50U2VydmljZSB9IGZyb20gJy4uL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQXZhdGFyTG9jYXRpb24sXG4gIEF2YXRhclR5cGUsXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG59IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBUaGUgYEF2YXRhcmAgY29tcG9uZW50IGRpc3BsYXlzIHRoZSBwcm92aWRlZCBpbWFnZSwgd2l0aCBmYWxsYmFjayB0byB0aGUgZmlyc3QgbGV0dGVyIG9mIHRoZSBvcHRpb25hbCBuYW1lIGlucHV0LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tYXZhdGFyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2F2YXRhci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2F2YXRhci5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBBdmF0YXJDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0XG57XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBuYW1lIG9mIHRoZSBpbWFnZSwgdXNlZCBmb3IgZmFsbGJhY2sgaW1hZ2Ugb3IgaW1hZ2UgdGl0bGUgKGlmIGBpbWFnZVVybGAgaXMgcHJvdmlkZWQpXG4gICAqL1xuICBASW5wdXQoKSBuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgVVJMIG9mIHRoZSBpbWFnZSB0byBiZSBkaXNwbGF5ZWQuIElmIHRoZSBpbWFnZSBjYW4ndCBiZSBkaXNwbGF5ZWQgdGhlIGZpcnN0IGxldHRlciBvZiB0aGUgbmFtZSBpbnB1dCBpcyBkaXNwbGF5ZWQuXG4gICAqL1xuICBASW5wdXQoKSBpbWFnZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIHNpemUgaW4gcGl4ZWxzIG9mIHRoZSBhdmF0YXIgaW1hZ2UuXG4gICAqL1xuICBASW5wdXQoKSBzaXplID0gMzI7XG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gdGhlIGF2YXRhciB3aWxsIGJlIGRpc3BsYXllZCBpblxuICAgKi9cbiAgQElucHV0KCkgbG9jYXRpb246IEF2YXRhckxvY2F0aW9uIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIGNoYW5uZWwgdGhlIGF2YXRhciBiZWxvbmdzIHRvIChpZiBhdmF0YXIgb2YgYSBjaGFubmVsIGlzIGRpc3BsYXllZClcbiAgICovXG4gIEBJbnB1dCgpIGNoYW5uZWw/OiBDaGFubmVsPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xuICAvKipcbiAgICogVGhlIHVzZXIgdGhlIGF2YXRhciBiZWxvbmdzIHRvIChpZiBhdmF0YXIgb2YgYSB1c2VyIGlzIGRpc3BsYXllZClcbiAgICovXG4gIEBJbnB1dCgpIHVzZXI/OiBVc2VyPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+O1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgdGhlIGF2YXRhcjogY2hhbm5lbCBpZiBjaGFubmVsIGF2YXRhciBpcyBkaXNwbGF5ZWQsIHVzZXIgaWYgdXNlciBhdmF0YXIgaXMgZGlzcGxheWVkXG4gICAqL1xuICBASW5wdXQoKSB0eXBlOiBBdmF0YXJUeXBlIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogSWYgYSBjaGFubmVsIGF2YXRhciBpcyBkaXNwbGF5ZWQsIGFuZCBpZiB0aGUgY2hhbm5lbCBoYXMgZXhhY3RseSB0d28gbWVtYmVycyBhIGdyZWVuIGRvdCBpcyBkaXNwbGF5ZWQgaWYgdGhlIG90aGVyIG1lbWJlciBpcyBvbmxpbmUuIFNldCB0aGlzIGZsYWcgdG8gYGZhbHNlYCB0byB0dXJuIG9mZiB0aGlzIGJlaGF2aW9yLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd09ubGluZUluZGljYXRvciA9IHRydWU7XG4gIC8qKlxuICAgKiBJZiBjaGFubmVsL3VzZXIgaW1hZ2UgaXNuJ3QgcHJvdmlkZWQgdGhlIGluaXRpYWxzIG9mIHRoZSBuYW1lIG9mIHRoZSBjaGFubmVsL3VzZXIgaXMgc2hvd24gaW5zdGVhZCwgeW91IGNhbiBjaG9vc2UgaG93IHRoZSBpbml0YWxzIHNob3VsZCBiZSBjb21wdXRlZFxuICAgKi9cbiAgQElucHV0KCkgaW5pdGlhbHNUeXBlOlxuICAgIHwgJ2ZpcnN0LWxldHRlci1vZi1maXJzdC13b3JkJ1xuICAgIHwgJ2ZpcnN0LWxldHRlci1vZi1lYWNoLXdvcmQnID0gJ2ZpcnN0LWxldHRlci1vZi1maXJzdC13b3JkJztcbiAgaXNFcnJvciA9IGZhbHNlO1xuICBpc09ubGluZSA9IGZhbHNlO1xuICBwcml2YXRlIGlzT25saW5lU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuICBpbml0aWFsczogc3RyaW5nID0gJyc7XG4gIGZhbGxiYWNrQ2hhbm5lbEltYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgdXNlcklkPzogc3RyaW5nO1xuICBwcml2YXRlIGlzVmlld0luaXRlZCA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLnVzZXIkLnN1YnNjcmliZSgodSkgPT4ge1xuICAgICAgICBpZiAodT8uaWQgIT09IHRoaXMudXNlcklkKSB7XG4gICAgICAgICAgdGhpcy51c2VySWQgPSB1Py5pZDtcbiAgICAgICAgICBpZiAodGhpcy50eXBlIHx8IHRoaXMuY2hhbm5lbCB8fCB0aGlzLm5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5pdGlhbHMoKTtcbiAgICAgICAgICAgIHRoaXMuc2V0RmFsbGJhY2tDaGFubmVsSW1hZ2UoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXNPbmxpbmVTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlc1snY2hhbm5lbCddKSB7XG4gICAgICB0aGlzLnVwZGF0ZUlzT25saW5lU3Vic2NyaXB0aW9uKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLnR5cGUgfHwgY2hhbmdlcy5uYW1lIHx8IGNoYW5nZXMuY2hhbm5lbCkge1xuICAgICAgdGhpcy5zZXRJbml0aWFscygpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLnR5cGUgfHwgY2hhbmdlcy5jaGFubmVsKSB7XG4gICAgICB0aGlzLnNldEZhbGxiYWNrQ2hhbm5lbEltYWdlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRGYWxsYmFja0NoYW5uZWxJbWFnZSgpIHtcbiAgICBpZiAodGhpcy50eXBlICE9PSAnY2hhbm5lbCcpIHtcbiAgICAgIHRoaXMuZmFsbGJhY2tDaGFubmVsSW1hZ2UgPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG90aGVyTWVtYmVyID0gdGhpcy5nZXRPdGhlck1lbWJlcklmT25lVG9PbmVDaGFubmVsKCk7XG4gICAgICBpZiAob3RoZXJNZW1iZXIpIHtcbiAgICAgICAgdGhpcy5mYWxsYmFja0NoYW5uZWxJbWFnZSA9IG90aGVyTWVtYmVyLmltYWdlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mYWxsYmFja0NoYW5uZWxJbWFnZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxzKCkge1xuICAgIGxldCByZXN1bHQ6IHN0cmluZyA9ICcnO1xuICAgIGlmICh0aGlzLnR5cGUgPT09ICd1c2VyJykge1xuICAgICAgcmVzdWx0ID0gdGhpcy5uYW1lPy50b1N0cmluZygpIHx8ICcnO1xuICAgIH0gZWxzZSBpZiAodGhpcy50eXBlID09PSAnY2hhbm5lbCcpIHtcbiAgICAgIGlmICh0aGlzLmNoYW5uZWw/LmRhdGE/Lm5hbWUpIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5jaGFubmVsPy5kYXRhPy5uYW1lO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgb3RoZXJNZW1iZXIgPSB0aGlzLmdldE90aGVyTWVtYmVySWZPbmVUb09uZUNoYW5uZWwoKTtcbiAgICAgICAgaWYgKG90aGVyTWVtYmVyKSB7XG4gICAgICAgICAgcmVzdWx0ID0gb3RoZXJNZW1iZXIubmFtZSB8fCBvdGhlck1lbWJlci5pZCB8fCAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXN1bHQgPSAnIyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3b3JkcyA9IHJlc3VsdC5zcGxpdCgnICcpO1xuICAgIGxldCBpbml0aWFsczogc3RyaW5nO1xuICAgIGlmICh0aGlzLmluaXRpYWxzVHlwZSA9PT0gJ2ZpcnN0LWxldHRlci1vZi1lYWNoLXdvcmQnKSB7XG4gICAgICBpbml0aWFscyA9IHdvcmRzLm1hcCgodykgPT4gdy5jaGFyQXQoMCkgfHwgJycpLmpvaW4oJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbml0aWFscyA9IHdvcmRzWzBdLmNoYXJBdCgwKSB8fCAnJztcbiAgICB9XG4gICAgdGhpcy5pbml0aWFscyA9IGluaXRpYWxzO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVJc09ubGluZVN1YnNjcmlwdGlvbigpIHtcbiAgICBpZiAodGhpcy5jaGFubmVsKSB7XG4gICAgICBjb25zdCBvdGhlck1lbWJlciA9IHRoaXMuZ2V0T3RoZXJNZW1iZXJJZk9uZVRvT25lQ2hhbm5lbCgpO1xuICAgICAgaWYgKG90aGVyTWVtYmVyKSB7XG4gICAgICAgIHRoaXMuaXNPbmxpbmUgPSBvdGhlck1lbWJlci5vbmxpbmUgfHwgZmFsc2U7XG4gICAgICAgIHRoaXMuaXNPbmxpbmVTdWJzY3JpcHRpb24gPSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmV2ZW50cyRcbiAgICAgICAgICAucGlwZShmaWx0ZXIoKGUpID0+IGUuZXZlbnRUeXBlID09PSAndXNlci5wcmVzZW5jZS5jaGFuZ2VkJykpXG4gICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5ldmVudC51c2VyPy5pZCA9PT0gb3RoZXJNZW1iZXIuaWQpIHtcbiAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT25saW5lID0gZXZlbnQuZXZlbnQudXNlcj8ub25saW5lIHx8IGZhbHNlO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaXNPbmxpbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pc09ubGluZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc09ubGluZSA9IGZhbHNlO1xuICAgICAgdGhpcy5pc09ubGluZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZpZXdJbml0ZWQgPSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPdGhlck1lbWJlcklmT25lVG9PbmVDaGFubmVsKCkge1xuICAgIGNvbnN0IG90aGVyTWVtYmVycyA9IE9iamVjdC52YWx1ZXMoXG4gICAgICB0aGlzLmNoYW5uZWw/LnN0YXRlPy5tZW1iZXJzIHx8IHt9XG4gICAgKS5maWx0ZXIoKG0pID0+IG0udXNlcl9pZCAhPT0gdGhpcy51c2VySWQpO1xuICAgIGlmIChvdGhlck1lbWJlcnMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gb3RoZXJNZW1iZXJzWzBdLnVzZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic3RyLWNoYXRfX2F2YXRhciBzdHItY2hhdF9fYXZhdGFyLS1jaXJjbGUgc3RyZWFtLWNoYXRfX2F2YXRhci0te3tcbiAgICBsb2NhdGlvblxuICB9fVwiXG4gIHRpdGxlPVwie3sgbmFtZSB9fVwiXG4gIFtuZ1N0eWxlXT1cIntcbiAgICBmbGV4QmFzaXM6ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgKyAnKScsXG4gICAgZm9udFNpemU6XG4gICAgICBpbml0aWFsc1R5cGUgPT09ICdmaXJzdC1sZXR0ZXItb2YtZmlyc3Qtd29yZCdcbiAgICAgICAgPyAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplIC8gMiArICcpJ1xuICAgICAgICA6ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgLyAzICsgJyknLFxuICAgIGhlaWdodDogJ2NhbGModmFyKC0tc3RyLWNoYXRfX3NwYWNpbmctcHgsIDFweCkgKiAnICsgc2l6ZSArICcpJyxcbiAgICBsaW5lSGVpZ2h0OiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplICsgJyknLFxuICAgIHdpZHRoOiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplICsgJyknXG4gIH1cIlxuPlxuICA8aW1nXG4gICAgKm5nSWY9XCIoaW1hZ2VVcmwgfHwgZmFsbGJhY2tDaGFubmVsSW1hZ2UpICYmICFpc0Vycm9yOyBlbHNlIGZhbGxiYWNrXCJcbiAgICBjbGFzcz1cInN0ci1jaGF0X19hdmF0YXItaW1hZ2Ugc3RyLWNoYXRfX2F2YXRhci1pbWFnZVwiXG4gICAgc3JjPVwie3sgaW1hZ2VVcmwgfHwgZmFsbGJhY2tDaGFubmVsSW1hZ2UgfX1cIlxuICAgIGFsdD1cInt7IGluaXRpYWxzIH19XCJcbiAgICBkYXRhLXRlc3RpZD1cImF2YXRhci1pbWdcIlxuICAgIChlcnJvcik9XCJpc0Vycm9yID0gdHJ1ZVwiXG4gICAgW25nU3R5bGVdPVwie1xuICAgICAgZmxleEJhc2lzOiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplICsgJyknLFxuICAgICAgaGVpZ2h0OiAnY2FsYyh2YXIoLS1zdHItY2hhdF9fc3BhY2luZy1weCwgMXB4KSAqICcgKyBzaXplICsgJyknLFxuICAgICAgb2JqZWN0Rml0OiAnY292ZXInLFxuICAgICAgd2lkdGg6ICdjYWxjKHZhcigtLXN0ci1jaGF0X19zcGFjaW5nLXB4LCAxcHgpICogJyArIHNpemUgKyAnKSdcbiAgICB9XCJcbiAgICBmZXRjaHByaW9yaXR5PVwiaGlnaFwiXG4gIC8+XG4gIDxuZy10ZW1wbGF0ZSAjZmFsbGJhY2s+XG4gICAgPGRpdiBkYXRhLXRlc3RpZD1cImZhbGxiYWNrLWltZ1wiIGNsYXNzPVwic3RyLWNoYXRfX2F2YXRhci1mYWxsYmFja1wiPlxuICAgICAge3sgaW5pdGlhbHMgfX1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiAgPGRpdlxuICAgIGRhdGEtdGVzdGlkPVwib25saW5lLWluZGljYXRvclwiXG4gICAgKm5nSWY9XCJpc09ubGluZSAmJiBzaG93T25saW5lSW5kaWNhdG9yXCJcbiAgICBjbGFzcz1cInN0ci1jaGF0X19hdmF0YXItLW9ubGluZS1pbmRpY2F0b3JcIlxuICA+PC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -411,7 +411,7 @@ export class MessageInputComponent {
411
411
  }
412
412
  }
413
413
  MessageInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageInputComponent, deps: [{ token: i1.ChannelService }, { token: i2.NotificationService }, { token: i3.AttachmentService }, { token: i4.MessageInputConfigService }, { token: textareaInjectionToken }, { token: i0.ComponentFactoryResolver }, { token: i0.ChangeDetectorRef }, { token: i5.ChatClientService }, { token: i6.EmojiInputService }, { token: i7.CustomTemplatesService }, { token: i8.ThemeService }], target: i0.ɵɵFactoryTarget.Component });
414
- MessageInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageInputComponent, selector: "stream-message-input", inputs: { isFileUploadEnabled: "isFileUploadEnabled", areMentionsEnabled: "areMentionsEnabled", mentionScope: "mentionScope", mode: "mode", isMultipleFileUploadEnabled: "isMultipleFileUploadEnabled", message: "message", sendMessage$: "sendMessage$", inputMode: "inputMode", autoFocus: "autoFocus" }, outputs: { messageUpdate: "messageUpdate" }, host: { properties: { "class": "this.class" } }, providers: [AttachmentService, EmojiInputService], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "textareaAnchor", first: true, predicate: TextareaDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"themeVersion !== '2'\"\n class=\"{{\n mode === 'main' ? 'str-chat__input-flat' : 'str-chat__small-message-input'\n }}\"\n [class.str-chat__input-flat-has-attachments]=\"\n (attachmentUploads$ | async)!.length > 0\n \"\n [class.str-chat__input-flat-quoted]=\"!!quotedMessage\"\n>\n <div class=\"quoted-message-preview\" *ngIf=\"quotedMessage\">\n <div class=\"quoted-message-preview-header\">\n <div>{{ \"streamChat.Reply to Message\" | translate }}</div>\n <button\n class=\"str-chat__square-button\"\n data-testid=\"remove-quote\"\n (click)=\"deselectMessageToQuote()\"\n (keyup.enter)=\"deselectMessageToQuote()\"\n >\n <stream-icon-placeholder\n icon=\"close-no-outline\"\n ></stream-icon-placeholder>\n </button>\n </div>\n <div class=\"quoted-message-preview-content\">\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"quotedMessage?.user?.image\"\n [name]=\"quotedMessage?.user?.name || quotedMessage?.user?.id\"\n [size]=\"20\"\n type=\"user\"\n location=\"quoted-message-sender\"\n [user]=\"quotedMessage?.user || undefined\"\n ></stream-avatar-placeholder>\n <div class=\"quoted-message-preview-content-inner\">\n <stream-attachment-list\n *ngIf=\"\n quotedMessage?.attachments && quotedMessage?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"quotedMessage?.id\"\n ></stream-attachment-list>\n <div\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"\n message?.quoted_message?.translation ||\n quotedMessage?.html ||\n quotedMessage?.text\n \"\n ></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__input-flat-wrapper\">\n <div\n class=\"{{\n mode === 'main'\n ? 'str-chat__input-flat--textarea-wrapper'\n : 'str-chat__small-message-input--textarea-wrapper'\n }}\"\n >\n <ng-template\n #defaultAttachmentsPreview\n let-attachmentUploads$=\"attachmentUploads$\"\n let-retryUploadHandler=\"retryUploadHandler\"\n let-deleteUploadHandler=\"deleteUploadHandler\"\n >\n <stream-attachment-preview-list\n [attachmentUploads$]=\"attachmentUploads$\"\n (retryAttachmentUpload)=\"retryUploadHandler($event)\"\n (deleteAttachment)=\"deleteUploadHandler($event)\"\n class=\"rfu-image-previewer-angular-host\"\n ></stream-attachment-preview-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentPreviewListTemplate || defaultAttachmentsPreview;\n context: getAttachmentPreviewListContext()\n \"\n ></ng-container>\n <div class=\"rta str-chat__textarea str-chat-angular__textarea\">\n <ng-container *ngIf=\"emojiPickerTemplate\" data-testid=\"emoji-picker\">\n <div\n class=\"\n str-chat__input-flat-emojiselect\n str-chat-angular__emojiselect\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n emojiPickerTemplate;\n context: getEmojiPickerContext()\n \"\n ></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"canSendMessages; else disabledTextarea\">\n <ng-container\n streamTextarea\n [(value)]=\"textareaValue\"\n (valueChange)=\"typingStart$.next()\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionScope]=\"mentionScope\"\n [placeholder]=\"textareaPlaceholder\"\n [inputMode]=\"inputMode\"\n [autoFocus]=\"autoFocus\"\n ></ng-container>\n </ng-container>\n <ng-template #disabledTextarea>\n <textarea\n disabled\n rows=\"1\"\n [value]=\"disabledTextareaText | translate\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n data-testid=\"disabled-textarea\"\n ></textarea>\n </ng-template>\n </div>\n <ng-container\n *ngIf=\"isFileUploadEnabled && isFileUploadAuthorized && canSendMessages\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n customAttachmentUploadTemplate || defaultAttachmentUpload;\n context: getAttachmentUploadContext()\n \"\n ></ng-container>\n <ng-template #defaultAttachmentUpload>\n <div\n class=\"str-chat__fileupload-wrapper\"\n data-testid=\"file-upload-button\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Attach files\" | translate }}\n </div>\n <div class=\"rfu-file-upload-button\">\n <label>\n <input\n #fileInput\n type=\"file\"\n class=\"rfu-file-input\"\n data-testid=\"file-input\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n />\n <span class=\"str-chat__input-flat-fileupload\">\n <stream-icon-placeholder\n icon=\"file-upload\"\n ></stream-icon-placeholder>\n </span>\n </label>\n </div>\n </div>\n </ng-template>\n </ng-container>\n </div>\n <button\n *ngIf=\"canSendMessages && !isCooldownInProgress\"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon-placeholder\n class=\"str-chat__send-button-angular\"\n icon=\"send\"\n ></stream-icon-placeholder>\n </button>\n <div\n class=\"str-chat__input-flat-cooldown\"\n *ngIf=\"isCooldownInProgress\"\n data-testid=\"cooldown-timer\"\n >\n <div class=\"str-chat__message-input-cooldown-text\">\n {{ cooldown$ | async }}\n </div>\n </div>\n </div>\n</div>\n\n<div\n *ngIf=\"themeVersion === '2'\"\n class=\"str-chat__message-input str-chat-angular__message-input\"\n>\n <div *ngIf=\"quotedMessage\" class=\"str-chat__quoted-message-preview-header\">\n <div class=\"str-chat__quoted-message-reply-to-message\">\n {{ \"streamChat.Reply to Message\" | translate }}\n </div>\n <button\n class=\"str-chat__quoted-message-remove\"\n data-testid=\"remove-quote\"\n (click)=\"deselectMessageToQuote()\"\n (keyup.enter)=\"deselectMessageToQuote()\"\n >\n <stream-icon-placeholder\n icon=\"close-no-outline\"\n ></stream-icon-placeholder>\n </button>\n </div>\n <ng-container *ngIf=\"canSendMessages; else notAllowed\">\n <div\n class=\"\n str-chat__message-input-inner\n str-chat-angular__message-input-inner\n \"\n >\n <ng-container\n *ngIf=\"isFileUploadEnabled && isFileUploadAuthorized && canSendMessages\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n customAttachmentUploadTemplate || defaultAttachmentUpload;\n context: getAttachmentUploadContext()\n \"\n ></ng-container>\n <ng-template #defaultAttachmentUpload>\n <div\n class=\"str-chat__file-input-container\"\n data-testid=\"file-upload-button\"\n >\n <input\n #fileInput\n type=\"file\"\n class=\"str-chat__file-input\"\n data-testid=\"file-input\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n id=\"{{ fileInputId }}\"\n />\n <label class=\"str-chat__file-input-label\" for=\"{{ fileInputId }}\">\n <stream-icon-placeholder icon=\"attach\"></stream-icon-placeholder>\n </label>\n </div>\n </ng-template>\n </ng-container>\n <div class=\"str-chat__message-textarea-container\">\n <div\n data-testid=\"quoted-message-container\"\n class=\"str-chat__quoted-message-preview\"\n *ngIf=\"quotedMessage\"\n >\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"\n str-chat-angular__avatar-host\n str-chat__message-sender-avatar\n \"\n [imageUrl]=\"quotedMessage?.user?.image\"\n [name]=\"quotedMessage?.user?.name || quotedMessage?.user?.id\"\n [size]=\"20\"\n type=\"user\"\n location=\"quoted-message-sender\"\n [user]=\"quotedMessage?.user || undefined\"\n ></stream-avatar-placeholder>\n <div\n class=\"\n quoted-message-preview-content-inner\n str-chat__quoted-message-bubble\n \"\n >\n <stream-attachment-list\n *ngIf=\"\n quotedMessage?.attachments && quotedMessage?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"quotedMessage?.id\"\n ></stream-attachment-list>\n <div\n class=\"str-chat__quoted-message-text\"\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"\n quotedMessage?.translation ||\n quotedMessage?.html ||\n quotedMessage?.text\n \"\n ></div>\n </div>\n </div>\n <ng-template\n #defaultAttachmentsPreview\n let-attachmentUploads$=\"attachmentUploads$\"\n let-retryUploadHandler=\"retryUploadHandler\"\n let-deleteUploadHandler=\"deleteUploadHandler\"\n >\n <stream-attachment-preview-list\n [attachmentUploads$]=\"attachmentUploads$\"\n (retryAttachmentUpload)=\"retryUploadHandler($event)\"\n (deleteAttachment)=\"deleteUploadHandler($event)\"\n class=\"str-chat__attachment-preview-list-angular-host\"\n ></stream-attachment-preview-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentPreviewListTemplate || defaultAttachmentsPreview;\n context: getAttachmentPreviewListContext()\n \"\n ></ng-container>\n <div class=\"str-chat__message-textarea-with-emoji-picker\">\n <ng-container\n streamTextarea\n [(value)]=\"textareaValue\"\n (valueChange)=\"typingStart$.next()\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionScope]=\"mentionScope\"\n [inputMode]=\"inputMode\"\n [autoFocus]=\"autoFocus\"\n [placeholder]=\"textareaPlaceholder\"\n ></ng-container>\n <div class=\"str-chat__message-textarea-emoji-picker\">\n <ng-container\n *ngIf=\"emojiPickerTemplate\"\n data-testid=\"emoji-picker\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n emojiPickerTemplate;\n context: getEmojiPickerContext()\n \"\n ></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n <button\n *ngIf=\"canSendMessages && !isCooldownInProgress && !message\"\n [disabled]=\"\n (attachmentUploadInProgressCounter$ | async)! > 0 ||\n (!textareaValue && (attachmentUploads$ | async)!.length === 0)\n \"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon-placeholder icon=\"send\"></stream-icon-placeholder>\n </button>\n <div\n class=\"str-chat__message-input-cooldown\"\n *ngIf=\"isCooldownInProgress\"\n data-testid=\"cooldown-timer\"\n >\n {{ cooldown$ | async }}\n </div>\n </div>\n </ng-container>\n <ng-template #notAllowed>\n <div\n class=\"str-chat__message-input-not-allowed\"\n data-testid=\"disabled-textarea\"\n >\n {{ disabledTextareaText | translate }}\n </div>\n </ng-template>\n</div>\n", components: [{ type: i9.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i10.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { type: i11.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "parentMessageId", "attachments"], outputs: ["imageModalStateChange"] }, { type: i12.AttachmentPreviewListComponent, selector: "stream-attachment-preview-list", inputs: ["attachmentUploads$"], outputs: ["retryAttachmentUpload", "deleteAttachment"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i14.TextareaDirective, selector: "[streamTextarea]", inputs: ["componentRef", "areMentionsEnabled", "mentionScope", "inputMode", "value", "placeholder", "autoFocus"], outputs: ["valueChange", "send", "userMentions"] }], pipes: { "async": i13.AsyncPipe, "translate": i15.TranslatePipe } });
414
+ MessageInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageInputComponent, selector: "stream-message-input", inputs: { isFileUploadEnabled: "isFileUploadEnabled", areMentionsEnabled: "areMentionsEnabled", mentionScope: "mentionScope", mode: "mode", isMultipleFileUploadEnabled: "isMultipleFileUploadEnabled", message: "message", sendMessage$: "sendMessage$", inputMode: "inputMode", autoFocus: "autoFocus" }, outputs: { messageUpdate: "messageUpdate" }, host: { properties: { "class": "this.class" } }, providers: [AttachmentService, EmojiInputService], viewQueries: [{ propertyName: "fileInput", first: true, predicate: ["fileInput"], descendants: true }, { propertyName: "textareaAnchor", first: true, predicate: TextareaDirective, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"themeVersion !== '2'\"\n class=\"{{\n mode === 'main' ? 'str-chat__input-flat' : 'str-chat__small-message-input'\n }}\"\n [class.str-chat__input-flat-has-attachments]=\"\n (attachmentUploads$ | async)!.length > 0\n \"\n [class.str-chat__input-flat-quoted]=\"!!quotedMessage\"\n>\n <div class=\"quoted-message-preview\" *ngIf=\"quotedMessage\">\n <div class=\"quoted-message-preview-header\">\n <div>{{ \"streamChat.Reply to Message\" | translate }}</div>\n <button\n class=\"str-chat__square-button\"\n data-testid=\"remove-quote\"\n (click)=\"deselectMessageToQuote()\"\n (keyup.enter)=\"deselectMessageToQuote()\"\n >\n <stream-icon-placeholder\n icon=\"close-no-outline\"\n ></stream-icon-placeholder>\n </button>\n </div>\n <div class=\"quoted-message-preview-content\">\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"str-chat-angular__avatar-host\"\n [imageUrl]=\"quotedMessage?.user?.image\"\n [name]=\"quotedMessage?.user?.name || quotedMessage?.user?.id\"\n [size]=\"20\"\n type=\"user\"\n location=\"quoted-message-sender\"\n [user]=\"quotedMessage?.user || undefined\"\n ></stream-avatar-placeholder>\n <div class=\"quoted-message-preview-content-inner\">\n <stream-attachment-list\n *ngIf=\"\n quotedMessage?.attachments && quotedMessage?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"quotedMessage?.id\"\n ></stream-attachment-list>\n <div\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"\n message?.quoted_message?.translation ||\n quotedMessage?.html ||\n quotedMessage?.text\n \"\n ></div>\n </div>\n </div>\n </div>\n <div class=\"str-chat__input-flat-wrapper\">\n <div\n class=\"{{\n mode === 'main'\n ? 'str-chat__input-flat--textarea-wrapper'\n : 'str-chat__small-message-input--textarea-wrapper'\n }}\"\n >\n <ng-template\n #defaultAttachmentsPreview\n let-attachmentUploads$=\"attachmentUploads$\"\n let-retryUploadHandler=\"retryUploadHandler\"\n let-deleteUploadHandler=\"deleteUploadHandler\"\n >\n <stream-attachment-preview-list\n [attachmentUploads$]=\"attachmentUploads$\"\n (retryAttachmentUpload)=\"retryUploadHandler($event)\"\n (deleteAttachment)=\"deleteUploadHandler($event)\"\n class=\"rfu-image-previewer-angular-host\"\n ></stream-attachment-preview-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentPreviewListTemplate || defaultAttachmentsPreview;\n context: getAttachmentPreviewListContext()\n \"\n ></ng-container>\n <div class=\"rta str-chat__textarea str-chat-angular__textarea\">\n <ng-container *ngIf=\"emojiPickerTemplate\" data-testid=\"emoji-picker\">\n <div\n class=\"\n str-chat__input-flat-emojiselect\n str-chat-angular__emojiselect\n \"\n >\n <ng-container\n *ngTemplateOutlet=\"\n emojiPickerTemplate;\n context: getEmojiPickerContext()\n \"\n ></ng-container>\n </div>\n </ng-container>\n <ng-container *ngIf=\"canSendMessages; else disabledTextarea\">\n <ng-container\n streamTextarea\n [(value)]=\"textareaValue\"\n (valueChange)=\"typingStart$.next()\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionScope]=\"mentionScope\"\n [placeholder]=\"textareaPlaceholder\"\n [inputMode]=\"inputMode\"\n [autoFocus]=\"autoFocus\"\n ></ng-container>\n </ng-container>\n <ng-template #disabledTextarea>\n <textarea\n disabled\n rows=\"1\"\n [value]=\"disabledTextareaText | translate\"\n class=\"rta__textarea str-chat__textarea__textarea\"\n data-testid=\"disabled-textarea\"\n ></textarea>\n </ng-template>\n </div>\n <ng-container\n *ngIf=\"isFileUploadEnabled && isFileUploadAuthorized && canSendMessages\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n customAttachmentUploadTemplate || defaultAttachmentUpload;\n context: getAttachmentUploadContext()\n \"\n ></ng-container>\n <ng-template #defaultAttachmentUpload>\n <div\n class=\"str-chat__fileupload-wrapper\"\n data-testid=\"file-upload-button\"\n >\n <div class=\"str-chat__tooltip\">\n {{ \"streamChat.Attach files\" | translate }}\n </div>\n <div class=\"rfu-file-upload-button\">\n <label>\n <input\n #fileInput\n type=\"file\"\n class=\"rfu-file-input\"\n data-testid=\"file-input\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n />\n <span class=\"str-chat__input-flat-fileupload\">\n <stream-icon-placeholder\n icon=\"file-upload\"\n ></stream-icon-placeholder>\n </span>\n </label>\n </div>\n </div>\n </ng-template>\n </ng-container>\n </div>\n <button\n *ngIf=\"canSendMessages && !isCooldownInProgress\"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon-placeholder\n class=\"str-chat__send-button-angular\"\n icon=\"send\"\n ></stream-icon-placeholder>\n </button>\n <div\n class=\"str-chat__input-flat-cooldown\"\n *ngIf=\"isCooldownInProgress\"\n data-testid=\"cooldown-timer\"\n >\n <div class=\"str-chat__message-input-cooldown-text\">\n {{ cooldown$ | async }}\n </div>\n </div>\n </div>\n</div>\n\n<div\n *ngIf=\"themeVersion === '2'\"\n class=\"str-chat__message-input str-chat-angular__message-input\"\n>\n <div *ngIf=\"quotedMessage\" class=\"str-chat__quoted-message-preview-header\">\n <div class=\"str-chat__quoted-message-reply-to-message\">\n {{ \"streamChat.Reply to Message\" | translate }}\n </div>\n <button\n class=\"str-chat__quoted-message-remove\"\n data-testid=\"remove-quote\"\n (click)=\"deselectMessageToQuote()\"\n (keyup.enter)=\"deselectMessageToQuote()\"\n >\n <stream-icon-placeholder\n icon=\"close-no-outline\"\n ></stream-icon-placeholder>\n </button>\n </div>\n <ng-container *ngIf=\"canSendMessages; else notAllowed\">\n <div\n class=\"\n str-chat__message-input-inner\n str-chat-angular__message-input-inner\n \"\n >\n <ng-container\n *ngIf=\"isFileUploadEnabled && isFileUploadAuthorized && canSendMessages\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n customAttachmentUploadTemplate || defaultAttachmentUpload;\n context: getAttachmentUploadContext()\n \"\n ></ng-container>\n <ng-template #defaultAttachmentUpload>\n <div\n class=\"str-chat__file-input-container\"\n data-testid=\"file-upload-button\"\n >\n <input\n #fileInput\n type=\"file\"\n class=\"str-chat__file-input\"\n data-testid=\"file-input\"\n [multiple]=\"isMultipleFileUploadEnabled\"\n (change)=\"filesSelected(fileInput.files)\"\n id=\"{{ fileInputId }}\"\n />\n <label class=\"str-chat__file-input-label\" for=\"{{ fileInputId }}\">\n <stream-icon-placeholder icon=\"attach\"></stream-icon-placeholder>\n </label>\n </div>\n </ng-template>\n </ng-container>\n <div class=\"str-chat__message-textarea-container\">\n <div\n data-testid=\"quoted-message-container\"\n class=\"str-chat__quoted-message-preview\"\n *ngIf=\"quotedMessage\"\n >\n <stream-avatar-placeholder\n data-testid=\"qouted-message-avatar\"\n class=\"\n str-chat-angular__avatar-host\n str-chat__message-sender-avatar\n \"\n [imageUrl]=\"quotedMessage?.user?.image\"\n [name]=\"quotedMessage?.user?.name || quotedMessage?.user?.id\"\n [size]=\"20\"\n type=\"user\"\n location=\"quoted-message-sender\"\n [user]=\"quotedMessage?.user || undefined\"\n ></stream-avatar-placeholder>\n <div\n class=\"\n quoted-message-preview-content-inner\n str-chat__quoted-message-bubble\n \"\n >\n <stream-attachment-list\n *ngIf=\"\n quotedMessage?.attachments && quotedMessage?.attachments?.length\n \"\n [attachments]=\"quotedMessageAttachments\"\n [messageId]=\"quotedMessage?.id\"\n ></stream-attachment-list>\n <div\n class=\"str-chat__quoted-message-text\"\n data-testid=\"quoted-message-text\"\n [innerHTML]=\"\n quotedMessage?.translation ||\n quotedMessage?.html ||\n quotedMessage?.text\n \"\n ></div>\n </div>\n </div>\n <ng-template\n #defaultAttachmentsPreview\n let-attachmentUploads$=\"attachmentUploads$\"\n let-retryUploadHandler=\"retryUploadHandler\"\n let-deleteUploadHandler=\"deleteUploadHandler\"\n >\n <stream-attachment-preview-list\n [attachmentUploads$]=\"attachmentUploads$\"\n (retryAttachmentUpload)=\"retryUploadHandler($event)\"\n (deleteAttachment)=\"deleteUploadHandler($event)\"\n class=\"str-chat__attachment-preview-list-angular-host\"\n ></stream-attachment-preview-list>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n attachmentPreviewListTemplate || defaultAttachmentsPreview;\n context: getAttachmentPreviewListContext()\n \"\n ></ng-container>\n <div class=\"str-chat__message-textarea-with-emoji-picker\">\n <ng-container\n streamTextarea\n [(value)]=\"textareaValue\"\n (valueChange)=\"typingStart$.next()\"\n (send)=\"messageSent()\"\n [componentRef]=\"textareaRef\"\n (userMentions)=\"mentionedUsers = $event\"\n [areMentionsEnabled]=\"areMentionsEnabled\"\n [mentionScope]=\"mentionScope\"\n [inputMode]=\"inputMode\"\n [autoFocus]=\"autoFocus\"\n [placeholder]=\"textareaPlaceholder\"\n ></ng-container>\n <ng-container *ngIf=\"emojiPickerTemplate\" data-testid=\"emoji-picker\">\n <ng-container\n *ngTemplateOutlet=\"\n emojiPickerTemplate;\n context: getEmojiPickerContext()\n \"\n ></ng-container>\n </ng-container>\n </div>\n </div>\n <button\n *ngIf=\"canSendMessages && !isCooldownInProgress && !message\"\n [disabled]=\"\n (attachmentUploadInProgressCounter$ | async)! > 0 ||\n (!textareaValue && (attachmentUploads$ | async)!.length === 0)\n \"\n data-testid=\"send-button\"\n class=\"str-chat__send-button\"\n (click)=\"messageSent()\"\n (keyup.enter)=\"messageSent()\"\n >\n <stream-icon-placeholder icon=\"send\"></stream-icon-placeholder>\n </button>\n <div\n class=\"str-chat__message-input-cooldown\"\n *ngIf=\"isCooldownInProgress\"\n data-testid=\"cooldown-timer\"\n >\n {{ cooldown$ | async }}\n </div>\n </div>\n </ng-container>\n <ng-template #notAllowed>\n <div\n class=\"str-chat__message-input-not-allowed\"\n data-testid=\"disabled-textarea\"\n >\n {{ disabledTextareaText | translate }}\n </div>\n </ng-template>\n</div>\n", components: [{ type: i9.IconPlaceholderComponent, selector: "stream-icon-placeholder", inputs: ["icon", "size"] }, { type: i10.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { type: i11.AttachmentListComponent, selector: "stream-attachment-list", inputs: ["messageId", "parentMessageId", "attachments"], outputs: ["imageModalStateChange"] }, { type: i12.AttachmentPreviewListComponent, selector: "stream-attachment-preview-list", inputs: ["attachmentUploads$"], outputs: ["retryAttachmentUpload", "deleteAttachment"] }], directives: [{ type: i13.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i13.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i14.TextareaDirective, selector: "[streamTextarea]", inputs: ["componentRef", "areMentionsEnabled", "mentionScope", "inputMode", "value", "placeholder", "autoFocus"], outputs: ["valueChange", "send", "userMentions"] }], pipes: { "async": i13.AsyncPipe, "translate": i15.TranslatePipe } });
415
415
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageInputComponent, decorators: [{
416
416
  type: Component,
417
417
  args: [{
@@ -452,4 +452,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
452
452
  type: ViewChild,
453
453
  args: [TextareaDirective, { static: false }]
454
454
  }] } });
455
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1pbnB1dC9tZXNzYWdlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L21lc3NhZ2UtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHTCxTQUFTLEVBSVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFJTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQWdCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFXN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzFELE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVwQzs7R0FFRztBQU9ILE1BQU0sT0FBTyxxQkFBcUI7SUErRWhDLFlBQ1UsY0FBOEIsRUFDOUIsbUJBQXdDLEVBQ3hDLGlCQUFvQyxFQUNw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QixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDO0lBQzdELENBQUM7O2tIQXZpQlUscUJBQXFCLDZKQW9GdEIsc0JBQXNCO3NHQXBGckIscUJBQXFCLHliQUZyQixDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLG1LQXVFdEMsaUJBQWlCLHFFQzNIOUIsK3JaQXlXQTsyRkRuVGEscUJBQXFCO2tCQU5qQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFdBQVcsRUFBRSxnQ0FBZ0M7b0JBQzdDLE1BQU0sRUFBRSxFQUFFO29CQUNWLFNBQVMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDO2lCQUNsRDs7MEJBcUZJLE1BQU07MkJBQUMsc0JBQXNCO21QQTlFdkIsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUlHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBSUcsT0FBTztzQkFBZixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlhLGFBQWE7c0JBQS9CLE1BQU07Z0JBR1EsS0FBSztzQkFBbkIsV0FBVztnQkF1Qm9CLFNBQVM7c0JBQXhDLFNBQVM7dUJBQUMsV0FBVztnQkFFZCxjQUFjO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpcnN0LCBtYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFwcFNldHRpbmdzLCBDaGFubmVsLCBVc2VyUmVzcG9uc2UgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBBdHRhY2htZW50U2VydmljZSB9IGZyb20gJy4uL2F0dGFjaG1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyB0ZXh0YXJlYUluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vaW5qZWN0aW9uLXRva2Vucyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dCxcbiAgQXR0YWNobWVudFVwbG9hZCxcbiAgQ3VzdG9tQXR0YWNobWVudFVwbG9hZENvbnRleHQsXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG4gIEVtb2ppUGlja2VyQ29udGV4dCxcbiAgU3RyZWFtTWVzc2FnZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZSB9IGZyb20gJy4vbWVzc2FnZS1pbnB1dC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBUZXh0YXJlYURpcmVjdGl2ZSB9IGZyb20gJy4vdGV4dGFyZWEuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRleHRhcmVhSW50ZXJmYWNlIH0gZnJvbSAnLi90ZXh0YXJlYS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgaXNJbWFnZUZpbGUgfSBmcm9tICcuLi9pcy1pbWFnZS1maWxlJztcbmltcG9ydCB7IEVtb2ppSW5wdXRTZXJ2aWNlIH0gZnJvbSAnLi9lbW9qaS1pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUuc2VydmljZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuLyoqXG4gKiBUaGUgYE1lc3NhZ2VJbnB1dGAgY29tcG9uZW50IGRpc3BsYXlzIGFuIGlucHV0IHdoZXJlIHVzZXJzIGNhbiB0eXBlIHRoZWlyIG1lc3NhZ2VzIGFuZCB1cGxvYWQgZmlsZXMsIGFuZCBzZW5kcyB0aGUgbWVzc2FnZSB0byB0aGUgYWN0aXZlIGNoYW5uZWwuIFRoZSBjb21wb25lbnQgY2FuIGJlIHVzZWQgdG8gY29tcG9zZSBuZXcgbWVzc2FnZXMgb3IgdXBkYXRlIGV4aXN0aW5nIG9uZXMuIFRvIHNlbmQgbWVzc2FnZXMsIHRoZSBjaGF0IHVzZXIgbmVlZHMgdG8gaGF2ZSB0aGUgbmVjZXNzYXJ5IFtjaGFubmVsIGNhcGFiaWxpdHldKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L2NoYW5uZWxfY2FwYWJpbGl0aWVzLz9sYW5ndWFnZT1qYXZhc2NyaXB0KS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG4gIHByb3ZpZGVyczogW0F0dGFjaG1lbnRTZXJ2aWNlLCBFbW9qaUlucHV0U2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VJbnB1dENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbntcbiAgLyoqXG4gICAqIElmIGZpbGUgdXBsb2FkIGlzIGVuYWJsZWQsIHRoZSB1c2VyIGNhbiBvcGVuIGEgZmlsZSBzZWxlY3RvciBmcm9tIHRoZSBpbnB1dC4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgdXNlciBhbHNvIG5lZWRzIHRvIGhhdmUgdGhlIG5lY2Vzc2FyeSBbY2hhbm5lbCBjYXBhYmlsaXR5XShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9jaGFubmVsX2NhcGFiaWxpdGllcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCBpcyBzZXQgZnJvbSB0aGUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpLlxuICAgKi9cbiAgQElucHV0KCkgaXNGaWxlVXBsb2FkRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIElmIHRydWUsIHVzZXJzIGNhbiBtZW50aW9uIG90aGVyIHVzZXJzIGluIG1lc3NhZ2VzLiBZb3UgYWxzbyBbbmVlZCB0byB1c2UgdGhlIGBBdXRvY29tcGxldGVUZXh0YXJlYWBdKC4uL2NvbmNlcHRzL29wdC1pbi1hcmNoaXRlY3R1cmUubWR4KSBmb3IgdGhpcyBmZWF0dXJlIHRvIHdvcmsuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCBpcyBzZXQgZnJvbSB0aGUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpLlxuICAgKi9cbiAgQElucHV0KCkgYXJlTWVudGlvbnNFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIHNjb3BlIGZvciB1c2VyIG1lbnRpb25zLCBlaXRoZXIgbWVtYmVycyBvZiB0aGUgY3VycmVudCBjaGFubmVsIG9mIG1lbWJlcnMgb2YgdGhlIGFwcGxpY2F0aW9uLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgaXMgc2V0IGZyb20gdGhlIFtgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZWBdKC4uL3NlcnZpY2VzL01lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UubWR4KS5cbiAgICovXG4gIEBJbnB1dCgpIG1lbnRpb25TY29wZTogJ2NoYW5uZWwnIHwgJ2FwcGxpY2F0aW9uJyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIG1lc3NhZ2UgaXMgYmVpbmcgZGlzcGFseWVkIGluIGEgY2hhbm5lbCBvciBpbiBhIFt0aHJlYWRdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3RocmVhZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZTogJ3RocmVhZCcgfCAnbWFpbicgPSAnbWFpbic7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB1c2VycyBjYW4gc2VsZWN0IG11bHRpcGxlIGZpbGVzIHRvIHVwbG9hZC4gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIGl0IGlzIHNldCBmcm9tIHRoZSBbYE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2VgXSguLi9zZXJ2aWNlcy9NZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlLm1keCkuXG4gICAqL1xuICBASW5wdXQoKSBpc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBlZGl0XG4gICAqL1xuICBASW5wdXQoKSBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHRyaWdnZXIgbWVzc2FnZSBzZW5kaW5nIGZyb20gdGhlIG91dHNpZGVcbiAgICovXG4gIEBJbnB1dCgpIHNlbmRNZXNzYWdlJDogT2JzZXJ2YWJsZTx2b2lkPiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEluIGBkZXNrdG9wYCBtb2RlIHRoZSBgRW50ZXJgIGtleSB3aWxsIHRyaWdnZXIgbWVzc2FnZSBzZW5kaW5nLCBpbiBgbW9iaWxlYCBtb2RlIHRoZSBgRW50ZXJgIGtleSB3aWxsIGluc2VydCBhIG5ldyBsaW5lIHRvIHRoZSBtZXNzYWdlIGlucHV0LiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgaXMgc2V0IGZyb20gdGhlIFtgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZWBdKC4uL3NlcnZpY2VzL01lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UubWR4KS5cbiAgICovXG4gIEBJbnB1dCgpIGlucHV0TW9kZTogJ2Rlc2t0b3AnIHwgJ21vYmlsZSc7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGF1dG8gZm9jdXMgb24gdGhlIHRleHRhcmVhIGVsZW1lbnRcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IHRydWU7XG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIGEgbWVzc2FnZSB3YXMgc3VjY2Vzc2Z1bHkgc2VudCBvciB1cGRhdGVkXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbWVzc2FnZVVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U7XG4gIH0+KCk7XG4gIEBIb3N0QmluZGluZygpIGNsYXNzID0gJ3N0ci1jaGF0X19tZXNzYWdlLWlucHV0LWFuZ3VsYXItaG9zdCc7XG4gIGlzRmlsZVVwbG9hZEF1dGhvcml6ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGNhblNlbmRMaW5rczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgY2FuU2VuZE1lc3NhZ2VzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBhdHRhY2htZW50VXBsb2FkcyQ6IE9ic2VydmFibGU8QXR0YWNobWVudFVwbG9hZFtdPjtcbiAgYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICB0ZXh0YXJlYVZhbHVlID0gJyc7XG4gIHRleHRhcmVhUmVmOiBDb21wb25lbnRSZWY8VGV4dGFyZWFJbnRlcmZhY2UgJiBQYXJ0aWFsPE9uQ2hhbmdlcz4+IHwgdW5kZWZpbmVkO1xuICBtZW50aW9uZWRVc2VyczogVXNlclJlc3BvbnNlW10gPSBbXTtcbiAgcXVvdGVkTWVzc2FnZTogdW5kZWZpbmVkIHwgU3RyZWFtTWVzc2FnZTtcbiAgdHlwaW5nU3RhcnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29vbGRvd24kOiBPYnNlcnZhYmxlPG51bWJlcj4gfCB1bmRlZmluZWQ7XG4gIGlzQ29vbGRvd25JblByb2dyZXNzID0gZmFsc2U7XG4gIGVtb2ppUGlja2VyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEVtb2ppUGlja2VyQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIGN1c3RvbUF0dGFjaG1lbnRVcGxvYWRUZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPEN1c3RvbUF0dGFjaG1lbnRVcGxvYWRDb250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICBhdHRhY2htZW50UHJldmlld0xpc3RUZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQ+XG4gICAgfCB1bmRlZmluZWQ7XG4gIHRleHRhcmVhUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgdGhlbWVWZXJzaW9uOiAnMScgfCAnMic7XG4gIGZpbGVJbnB1dElkID0gdXVpZHY0KCk7XG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIHByaXZhdGUgZmlsZUlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChUZXh0YXJlYURpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgdGV4dGFyZWFBbmNob3IhOiBUZXh0YXJlYURpcmVjdGl2ZTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIGhpZGVOb3RpZmljYXRpb246IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzVmlld0luaXRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGFwcFNldHRpbmdzOiBBcHBTZXR0aW5ncyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBjaGFubmVsOiBDaGFubmVsPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHNlbmRNZXNzYWdlU3ViY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0VGV4dGFyZWFQbGFjZWhvbGRlciA9ICdzdHJlYW1DaGF0LlR5cGUgeW91ciBtZXNzYWdlJztcbiAgcHJpdmF0ZSByZWFkb25seSBzbG93TW9kZVRleHRhcmVhUGxhY2Vob2xkZXIgPSAnc3RyZWFtQ2hhdC5TbG93IE1vZGUgT04nO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdHRhY2htZW50U2VydmljZTogQXR0YWNobWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlLFxuICAgIEBJbmplY3QodGV4dGFyZWFJbmplY3Rpb25Ub2tlbilcbiAgICBwcml2YXRlIHRleHRhcmVhVHlwZTogVHlwZTxUZXh0YXJlYUludGVyZmFjZT4sXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNoYXRDbGllbnQ6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW1vamlJbnB1dFNlcnZpY2U6IEVtb2ppSW5wdXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVzU2VydmljZTogQ3VzdG9tVGVtcGxhdGVzU2VydmljZSxcbiAgICB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZVxuICApIHtcbiAgICB0aGlzLnRoZW1lVmVyc2lvbiA9IHRoZW1lU2VydmljZS50aGVtZVZlcnNpb247XG4gICAgdGhpcy50ZXh0YXJlYVBsYWNlaG9sZGVyID0gdGhpcy5kZWZhdWx0VGV4dGFyZWFQbGFjZWhvbGRlcjtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJC5zdWJzY3JpYmUoXG4gICAgICAgIChjb3VudGVyKSA9PiB7XG4gICAgICAgICAgaWYgKGNvdW50ZXIgPT09IDAgJiYgdGhpcy5oaWRlTm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVOb3RpZmljYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJC5zdWJzY3JpYmUoKGNoYW5uZWwpID0+IHtcbiAgICAgICAgaWYgKGNoYW5uZWwgJiYgdGhpcy5jaGFubmVsICYmIGNoYW5uZWwuaWQgIT09IHRoaXMuY2hhbm5lbC5pZCkge1xuICAgICAgICAgIHRoaXMudGV4dGFyZWFWYWx1ZSA9ICcnO1xuICAgICAgICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UucmVzZXRBdHRhY2htZW50VXBsb2FkcygpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IGNoYW5uZWw/LmRhdGE/Lm93bl9jYXBhYmlsaXRpZXMgYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChjYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICB0aGlzLmlzRmlsZVVwbG9hZEF1dGhvcml6ZWQgPVxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzLmluZGV4T2YoJ3VwbG9hZC1maWxlJykgIT09IC0xO1xuICAgICAgICAgIHRoaXMuY2FuU2VuZExpbmtzID0gY2FwYWJpbGl0aWVzLmluZGV4T2YoJ3NlbmQtbGlua3MnKSAhPT0gLTE7XG4gICAgICAgICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbDtcbiAgICAgICAgICB0aGlzLnNldENhblNlbmRNZXNzYWdlcygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYXRDbGllbnQuYXBwU2V0dGluZ3MkLnN1YnNjcmliZShcbiAgICAgICAgKGFwcFNldHRpbmdzKSA9PiAodGhpcy5hcHBTZXR0aW5ncyA9IGFwcFNldHRpbmdzKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLm1lc3NhZ2VUb1F1b3RlJC5zdWJzY3JpYmUoKG0pID0+IHtcbiAgICAgICAgY29uc3QgaXNUaHJlYWRSZXBseSA9IG0gJiYgbS5wYXJlbnRfaWQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGhpcy5tb2RlID09PSAndGhyZWFkJyAmJiBpc1RocmVhZFJlcGx5KSB8fFxuICAgICAgICAgICh0aGlzLm1vZGUgPT09ICd0aHJlYWQnICYmIHRoaXMucXVvdGVkTWVzc2FnZSAmJiAhbSkgfHxcbiAgICAgICAgICAodGhpcy5tb2RlID09PSAnbWFpbicgJiYgIWlzVGhyZWFkUmVwbHkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucXVvdGVkTWVzc2FnZSA9IG07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzJCA9IHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZHMkO1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJCA9XG4gICAgICB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciQ7XG4gICAgdGhpcy5pc0ZpbGVVcGxvYWRFbmFibGVkID0gdGhpcy5jb25maWdTZXJ2aWNlLmlzRmlsZVVwbG9hZEVuYWJsZWQ7XG4gICAgdGhpcy5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQgPVxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDtcbiAgICB0aGlzLmFyZU1lbnRpb25zRW5hYmxlZCA9IHRoaXMuY29uZmlnU2VydmljZS5hcmVNZW50aW9uc0VuYWJsZWQ7XG4gICAgdGhpcy5tZW50aW9uU2NvcGUgPSB0aGlzLmNvbmZpZ1NlcnZpY2UubWVudGlvblNjb3BlO1xuICAgIHRoaXMuaW5wdXRNb2RlID0gdGhpcy5jb25maWdTZXJ2aWNlLmlucHV0TW9kZTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy50eXBpbmdTdGFydCQuc3Vic2NyaWJlKFxuICAgICAgICAoKSA9PiB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UudHlwaW5nU3RhcnRlZCh0aGlzLnBhcmVudE1lc3NhZ2VJZClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5sYXRlc3RNZXNzYWdlRGF0ZUJ5VXNlckJ5Q2hhbm5lbHMkLFxuICAgICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLFxuICAgICAgXSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKFxuICAgICAgICAgICAgKFtsYXRlc3RNZXNzYWdlcywgY2hhbm5lbF0pOiBbXG4gICAgICAgICAgICAgIERhdGUgfCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIENoYW5uZWw8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4gfCB1bmRlZmluZWRcbiAgICAgICAgICAgIF0gPT4gW2xhdGVzdE1lc3NhZ2VzW2NoYW5uZWw/LmNpZCB8fCAnJ10sIGNoYW5uZWwhXVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChbbGF0ZXN0TWVzc2FnZURhdGUsIGNoYW5uZWxdKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29vbGRvd24gPVxuICAgICAgICAgICAgKGNoYW5uZWw/LmRhdGE/LmNvb2xkb3duIGFzIG51bWJlcikgJiZcbiAgICAgICAgICAgIGxhdGVzdE1lc3NhZ2VEYXRlICYmXG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAoY2hhbm5lbD8uZGF0YT8uY29vbGRvd24gYXMgbnVtYmVyKSAtXG4gICAgICAgICAgICAgICAgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbGF0ZXN0TWVzc2FnZURhdGUuZ2V0VGltZSgpKSAvIDEwMDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29vbGRvd24gJiZcbiAgICAgICAgICAgIGNvb2xkb3duID4gMCAmJlxuICAgICAgICAgICAgKGNoYW5uZWw/LmRhdGE/Lm93bl9jYXBhYmlsaXRpZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKCdzbG93LW1vZGUnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zdGFydENvb2xkb3duKGNvb2xkb3duKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb29sZG93bkluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcENvb2xkb3duKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5lbW9qaVBpY2tlclRlbXBsYXRlJC5zdWJzY3JpYmUoKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgIHRoaXMuZW1vamlQaWNrZXJUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5hdHRhY2htZW50UHJldmlld0xpc3RUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRQcmV2aWV3TGlzdFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmN1c3RvbUF0dGFjaG1lbnRVcGxvYWRUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLmN1c3RvbUF0dGFjaG1lbnRVcGxvYWRUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlld0luaXRlZCA9IHRydWU7XG4gICAgdGhpcy5pbml0VGV4dGFyZWEoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5tZXNzYWdlKSB7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLnJlc2V0QXR0YWNobWVudFVwbG9hZHMoKTtcbiAgICAgIGlmICh0aGlzLmlzVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UuY3JlYXRlRnJvbUF0dGFjaG1lbnRzKFxuICAgICAgICAgIHRoaXMubWVzc2FnZSEuYXR0YWNobWVudHMgfHwgW11cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50ZXh0YXJlYVZhbHVlID0gdGhpcy5tZXNzYWdlIS50ZXh0IHx8ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5pc0ZpbGVVcGxvYWRFbmFibGVkKSB7XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaXNGaWxlVXBsb2FkRW5hYmxlZCA9IHRoaXMuaXNGaWxlVXBsb2FkRW5hYmxlZDtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkKSB7XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkID1cbiAgICAgICAgdGhpcy5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQ7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmFyZU1lbnRpb25zRW5hYmxlZCkge1xuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmFyZU1lbnRpb25zRW5hYmxlZCA9IHRoaXMuYXJlTWVudGlvbnNFbmFibGVkO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5tZW50aW9uU2NvcGUpIHtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5tZW50aW9uU2NvcGUgPSB0aGlzLm1lbnRpb25TY29wZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMubW9kZSkge1xuICAgICAgdGhpcy5zZXRDYW5TZW5kTWVzc2FnZXMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaW5wdXRNb2RlKSB7XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaW5wdXRNb2RlID0gdGhpcy5pbnB1dE1vZGU7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLnNlbmRNZXNzYWdlJCkge1xuICAgICAgaWYgKHRoaXMuc2VuZE1lc3NhZ2VTdWJjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnNlbmRNZXNzYWdlU3ViY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbmRNZXNzYWdlJCkge1xuICAgICAgICB0aGlzLnNlbmRNZXNzYWdlU3ViY3JpcHRpb24gPSB0aGlzLnNlbmRNZXNzYWdlJC5zdWJzY3JpYmUoXG4gICAgICAgICAgKCkgPT4gdm9pZCB0aGlzLm1lc3NhZ2VTZW50KClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZW5kTWVzc2FnZVN1YmNyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlU3ViY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBhc3luYyBtZXNzYWdlU2VudCgpIHtcbiAgICBpZiAodGhpcy5pc0Nvb2xkb3duSW5Qcm9ncmVzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyITogbnVtYmVyO1xuICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJFxuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNvdW50ZXIpID0+IChhdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIgPSBjb3VudGVyKSk7XG4gICAgaWYgKGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciA+IDApIHtcbiAgICAgIGlmICghdGhpcy5oaWRlTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbiA9XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFBlcm1hbmVudE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgICdzdHJlYW1DaGF0LldhaXQgdW50aWwgYWxsIGF0dGFjaG1lbnRzIGhhdmUgdXBsb2FkZWQnXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXR0YWNobWVudHMgPSB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLm1hcFRvQXR0YWNobWVudHMoKTtcbiAgICBsZXQgdGV4dCA9IHRoaXMudGV4dGFyZWFWYWx1ZTtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9eXFxuKy9nLCAnJyk7IC8vIGxlYWRpbmcgZW1wdHkgbGluZXNcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXG4rJC9nLCAnJyk7IC8vIGVuZGluZyBlbXB0eSBsaW5lc1xuICAgIGNvbnN0IHRleHRDb250YWluc09ubHlTcGFjZUNoYXJzID0gIXRleHQucmVwbGFjZSgvIC9nLCAnJyk7IC8vc3BjYWVcbiAgICBpZiAoXG4gICAgICAoIXRleHQgfHwgdGV4dENvbnRhaW5zT25seVNwYWNlQ2hhcnMpICYmXG4gICAgICAoIWF0dGFjaG1lbnRzIHx8IGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRleHRDb250YWluc09ubHlTcGFjZUNoYXJzKSB7XG4gICAgICB0ZXh0ID0gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbnRhaW5zTGlua3MgJiYgIXRoaXMuY2FuU2VuZExpbmtzKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAnc3RyZWFtQ2hhdC5TZW5kaW5nIGxpbmtzIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udmVyc2F0aW9uJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVXBkYXRlKSB7XG4gICAgICB0aGlzLnRleHRhcmVhVmFsdWUgPSAnJztcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCAodGhpcy5pc1VwZGF0ZVxuICAgICAgICA/IHRoaXMuY2hhbm5lbFNlcnZpY2UudXBkYXRlTWVzc2FnZSh7XG4gICAgICAgICAgICAuLi50aGlzLm1lc3NhZ2UhLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBhdHRhY2htZW50cyxcbiAgICAgICAgICB9KVxuICAgICAgICA6IHRoaXMuY2hhbm5lbFNlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICAgICAgICB0aGlzLm1lbnRpb25lZFVzZXJzLFxuICAgICAgICAgICAgdGhpcy5wYXJlbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICB0aGlzLnF1b3RlZE1lc3NhZ2U/LmlkXG4gICAgICAgICAgKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VVcGRhdGUuZW1pdCh7IG1lc3NhZ2UgfSk7XG4gICAgICBpZiAoIXRoaXMuaXNVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5yZXNldEF0dGFjaG1lbnRVcGxvYWRzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0aGlzLmlzVXBkYXRlKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgJ3N0cmVhbUNoYXQuRWRpdCBtZXNzYWdlIHJlcXVlc3QgZmFpbGVkJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UudHlwaW5nU3RvcHBlZCh0aGlzLnBhcmVudE1lc3NhZ2VJZCk7XG4gICAgaWYgKHRoaXMucXVvdGVkTWVzc2FnZSkge1xuICAgICAgdGhpcy5kZXNlbGVjdE1lc3NhZ2VUb1F1b3RlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbnRhaW5zTGlua3MoKSB7XG4gICAgcmV0dXJuIC8oPzooPzpodHRwcz98ZnRwKTpcXC9cXC8pP1tcXHcvXFwtPz0lLl0rXFwuW1xcdy9cXC0mPz0lLl0rLy50ZXN0KFxuICAgICAgdGhpcy50ZXh0YXJlYVZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIGdldCBxdW90ZWRNZXNzYWdlQXR0YWNobWVudHMoKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBdHRhY2htZW50cyA9IHRoaXMucXVvdGVkTWVzc2FnZT8uYXR0YWNobWVudHM7XG4gICAgcmV0dXJuIG9yaWdpbmFsQXR0YWNobWVudHMgJiYgb3JpZ2luYWxBdHRhY2htZW50cy5sZW5ndGhcbiAgICAgID8gW29yaWdpbmFsQXR0YWNobWVudHNbMF1dXG4gICAgICA6IFtdO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkVGV4dGFyZWFUZXh0KCkge1xuICAgIGlmICghdGhpcy5jYW5TZW5kTWVzc2FnZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICd0aHJlYWQnXG4gICAgICAgID8gXCJzdHJlYW1DaGF0LllvdSBjYW4ndCBzZW5kIHRocmVhZCByZXBsaWVzIGluIHRoaXMgY2hhbm5lbFwiXG4gICAgICAgIDogXCJzdHJlYW1DaGF0LllvdSBjYW4ndCBzZW5kIG1lc3NhZ2VzIGluIHRoaXMgY2hhbm5lbFwiO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBhc3luYyBmaWxlc1NlbGVjdGVkKGZpbGVMaXN0OiBGaWxlTGlzdCB8IG51bGwpIHtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmFyZUF0dGFjaGVtbnRzVmFsaWQoZmlsZUxpc3QpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmZpbGVzU2VsZWN0ZWQoZmlsZUxpc3QpO1xuICAgIHRoaXMuY2xlYXJGaWxlSW5wdXQoKTtcbiAgfVxuXG4gIGRlc2VsZWN0TWVzc2FnZVRvUXVvdGUoKSB7XG4gICAgdGhpcy5jaGFubmVsU2VydmljZS5zZWxlY3RNZXNzYWdlVG9RdW90ZSh1bmRlZmluZWQpO1xuICB9XG5cbiAgZ2V0RW1vamlQaWNrZXJDb250ZXh0KCk6IEVtb2ppUGlja2VyQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVtb2ppSW5wdXQkOiB0aGlzLmVtb2ppSW5wdXRTZXJ2aWNlLmVtb2ppSW5wdXQkLFxuICAgIH07XG4gIH1cblxuICBnZXRBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0KCk6IEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRhY2htZW50VXBsb2FkcyQ6IHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZHMkLFxuICAgICAgZGVsZXRlVXBsb2FkSGFuZGxlcjogdGhpcy5kZWxldGVVcGxvYWQuYmluZCh0aGlzKSxcbiAgICAgIHJldHJ5VXBsb2FkSGFuZGxlcjogdGhpcy5yZXRyeVVwbG9hZC5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICBnZXRBdHRhY2htZW50VXBsb2FkQ29udGV4dCgpOiBDdXN0b21BdHRhY2htZW50VXBsb2FkQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDogdGhpcy5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQsXG4gICAgICBhdHRhY2htZW50U2VydmljZTogdGhpcy5hdHRhY2htZW50U2VydmljZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVVcGxvYWQodXBsb2FkOiBBdHRhY2htZW50VXBsb2FkKSB7XG4gICAgaWYgKHRoaXMuaXNVcGRhdGUpIHtcbiAgICAgIC8vIERlbGF5IGRlbGV0ZSB0byBhdm9pZCBtb2RhbCBkZXRlY3RpbmcgdGhpcyBjbGljayBhcyBvdXRzaWRlIGNsaWNrXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdm9pZCB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmRlbGV0ZUF0dGFjaG1lbnQodXBsb2FkKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIHRoaXMuYXR0YWNobWVudFNlcnZpY2UuZGVsZXRlQXR0YWNobWVudCh1cGxvYWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmV0cnlVcGxvYWQoZmlsZTogRmlsZSkge1xuICAgIHZvaWQgdGhpcy5hdHRhY2htZW50U2VydmljZS5yZXRyeUF0dGFjaG1lbnRVcGxvYWQoZmlsZSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRmlsZUlucHV0KCkge1xuICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzVXBkYXRlKCkge1xuICAgIHJldHVybiAhIXRoaXMubWVzc2FnZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFRleHRhcmVhKCkge1xuICAgIC8vIGNsZWFudXAgcHJldmlvdXNseSBidWlsdCB0ZXh0YXJlYVxuICAgIGlmICghdGhpcy5jYW5TZW5kTWVzc2FnZXMpIHtcbiAgICAgIHRoaXMudGV4dGFyZWFSZWYgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNhblNlbmRNZXNzYWdlcyB8fCB0aGlzLnRleHRhcmVhUmVmIHx8ICF0aGlzLnRleHRhcmVhQW5jaG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9XG4gICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0aGlzLnRleHRhcmVhVHlwZSk7XG4gICAgdGhpcy50ZXh0YXJlYVJlZiA9XG4gICAgICB0aGlzLnRleHRhcmVhQW5jaG9yLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50PGFueT4oXG4gICAgICAgIGNvbXBvbmVudEZhY3RvcnlcbiAgICAgICk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFyZUF0dGFjaGVtbnRzVmFsaWQoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgbnVsbCkge1xuICAgIGlmICghZmlsZUxpc3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYXBwU2V0dGluZ3MpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hhdENsaWVudC5nZXRBcHBTZXR0aW5ncygpO1xuICAgIH1cbiAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgQXJyYXkuZnJvbShmaWxlTGlzdCkuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgbGV0IGhhc0Jsb2NrZWRFeHRlbnNpb246IGJvb2xlYW47XG4gICAgICBsZXQgaGFzQmxvY2tlZE1pbWVUeXBlOiBib29sZWFuO1xuICAgICAgbGV0IGhhc05vdEFsbG93ZWRFeHRlbnNpb246IGJvb2xlYW47XG4gICAgICBsZXQgaGFzTm90QWxsb3dlZE1pbWVUeXBlOiBib29sZWFuO1xuICAgICAgaWYgKGlzSW1hZ2VGaWxlKGYpKSB7XG4gICAgICAgIGhhc0Jsb2NrZWRFeHRlbnNpb24gPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc0Jsb2NrZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5ibG9ja2VkX21pbWVfdHlwZXM/LmZpbmQoXG4gICAgICAgICAgICAodHlwZSkgPT4gZi50eXBlID09PSB0eXBlXG4gICAgICAgICAgKTtcbiAgICAgICAgaGFzTm90QWxsb3dlZEV4dGVuc2lvbiA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX2ZpbGVfZXh0ZW5zaW9uc1xuICAgICAgICAgICAgPy5sZW5ndGggJiZcbiAgICAgICAgICAhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX21pbWVfdHlwZXM/Lmxlbmd0aCAmJlxuICAgICAgICAgICF0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX21pbWVfdHlwZXM/LmZpbmQoXG4gICAgICAgICAgICAodHlwZSkgPT4gZi50eXBlID09PSB0eXBlXG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhc0Jsb2NrZWRFeHRlbnNpb24gPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uZmlsZV91cGxvYWRfY29uZmlnPy5ibG9ja2VkX2ZpbGVfZXh0ZW5zaW9ucz8uZmluZChcbiAgICAgICAgICAgIChleHQpID0+IGYubmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgKTtcbiAgICAgICAgaGFzQmxvY2tlZE1pbWVUeXBlID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uZmlsZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX2ZpbGVfZXh0ZW5zaW9uc1xuICAgICAgICAgICAgPy5sZW5ndGggJiZcbiAgICAgICAgICAhdGhpcy5hcHBTZXR0aW5ncz8uZmlsZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucz8uZmluZChcbiAgICAgICAgICAgIChleHQpID0+IGYubmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgKTtcbiAgICAgICAgaGFzTm90QWxsb3dlZE1pbWVUeXBlID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5sZW5ndGggJiZcbiAgICAgICAgICAhdGhpcy5hcHBTZXR0aW5ncz8uZmlsZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX21pbWVfdHlwZXM/LmZpbmQoXG4gICAgICAgICAgICAodHlwZSkgPT4gZi50eXBlID09PSB0eXBlXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgaGFzQmxvY2tlZEV4dGVuc2lvbiB8fFxuICAgICAgICBoYXNCbG9ja2VkTWltZVR5cGUgfHxcbiAgICAgICAgaGFzTm90QWxsb3dlZEV4dGVuc2lvbiB8fFxuICAgICAgICBoYXNOb3RBbGxvd2VkTWltZVR5cGVcbiAgICAgICkge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICdzdHJlYW1DaGF0LkVycm9yIHVwbG9hZGluZyBmaWxlLCBleHRlbnNpb24gbm90IHN1cHBvcnRlZCcsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB7IG5hbWU6IGYubmFtZSwgZXh0OiBmLnR5cGUgfVxuICAgICAgICApO1xuICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzVmFsaWQ7XG4gIH1cblxuICBwcml2YXRlIHNldENhblNlbmRNZXNzYWdlcygpIHtcbiAgICBjb25zdCBjYXBhYmlsaXRpZXMgPSB0aGlzLmNoYW5uZWw/LmRhdGE/Lm93bl9jYXBhYmlsaXRpZXMgYXMgc3RyaW5nW107XG4gICAgaWYgKCFjYXBhYmlsaXRpZXMpIHtcbiAgICAgIHRoaXMuY2FuU2VuZE1lc3NhZ2VzID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FuU2VuZE1lc3NhZ2VzID1cbiAgICAgICAgY2FwYWJpbGl0aWVzLmluZGV4T2YoXG4gICAgICAgICAgdGhpcy5tb2RlID09PSAnbWFpbicgPyAnc2VuZC1tZXNzYWdlJyA6ICdzZW5kLXJlcGx5J1xuICAgICAgICApICE9PSAtMTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuaW5pdFRleHRhcmVhKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcGFyZW50TWVzc2FnZUlkKCkge1xuICAgIGxldCBwYXJlbnRNZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5tb2RlID09PSAndGhyZWFkJykge1xuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVQYXJlbnRNZXNzYWdlSWQkXG4gICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGlkKSA9PiAocGFyZW50TWVzc2FnZUlkID0gaWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50TWVzc2FnZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydENvb2xkb3duKGNvb2xkb3duOiBudW1iZXIpIHtcbiAgICB0aGlzLnRleHRhcmVhUGxhY2Vob2xkZXIgPSB0aGlzLnNsb3dNb2RlVGV4dGFyZWFQbGFjZWhvbGRlcjtcbiAgICB0aGlzLmlzQ29vbGRvd25JblByb2dyZXNzID0gdHJ1ZTtcbiAgICB0aGlzLmNvb2xkb3duJCA9IHRpbWVyKDAsIDEwMDApLnBpcGUoXG4gICAgICB0YWtlKGNvb2xkb3duICsgMSksXG4gICAgICBtYXAoKHYpID0+IGNvb2xkb3duIC0gdiksXG4gICAgICB0YXAoKHYpID0+IHtcbiAgICAgICAgaWYgKHYgPT09IDApIHtcbiAgICAgICAgICB0aGlzLnN0b3BDb29sZG93bigpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BDb29sZG93bigpIHtcbiAgICB0aGlzLmNvb2xkb3duJCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzQ29vbGRvd25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgdGhpcy50ZXh0YXJlYVBsYWNlaG9sZGVyID0gdGhpcy5kZWZhdWx0VGV4dGFyZWFQbGFjZWhvbGRlcjtcbiAgfVxufVxuIiwiPGRpdlxuICAqbmdJZj1cInRoZW1lVmVyc2lvbiAhPT0gJzInXCJcbiAgY2xhc3M9XCJ7e1xuICAgIG1vZGUgPT09ICdtYWluJyA/ICdzdHItY2hhdF9faW5wdXQtZmxhdCcgOiAnc3RyLWNoYXRfX3NtYWxsLW1lc3NhZ2UtaW5wdXQnXG4gIH19XCJcbiAgW2NsYXNzLnN0ci1jaGF0X19pbnB1dC1mbGF0LWhhcy1hdHRhY2htZW50c109XCJcbiAgICAoYXR0YWNobWVudFVwbG9hZHMkIHwgYXN5bmMpIS5sZW5ndGggPiAwXG4gIFwiXG4gIFtjbGFzcy5zdHItY2hhdF9faW5wdXQtZmxhdC1xdW90ZWRdPVwiISFxdW90ZWRNZXNzYWdlXCJcbj5cbiAgPGRpdiBjbGFzcz1cInF1b3RlZC1tZXNzYWdlLXByZXZpZXdcIiAqbmdJZj1cInF1b3RlZE1lc3NhZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtcHJldmlldy1oZWFkZXJcIj5cbiAgICAgIDxkaXY+e3sgXCJzdHJlYW1DaGF0LlJlcGx5IHRvIE1lc3NhZ2VcIiB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19zcXVhcmUtYnV0dG9uXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJyZW1vdmUtcXVvdGVcIlxuICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RNZXNzYWdlVG9RdW90ZSgpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImRlc2VsZWN0TWVzc2FnZVRvUXVvdGUoKVwiXG4gICAgICA+XG4gICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgIGljb249XCJjbG9zZS1uby1vdXRsaW5lXCJcbiAgICAgICAgPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtcHJldmlldy1jb250ZW50XCI+XG4gICAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgICBkYXRhLXRlc3RpZD1cInFvdXRlZC1tZXNzYWdlLWF2YXRhclwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXQtYW5ndWxhcl9fYXZhdGFyLWhvc3RcIlxuICAgICAgICBbaW1hZ2VVcmxdPVwicXVvdGVkTWVzc2FnZT8udXNlcj8uaW1hZ2VcIlxuICAgICAgICBbbmFtZV09XCJxdW90ZWRNZXNzYWdlPy51c2VyPy5uYW1lIHx8IHF1b3RlZE1lc3NhZ2U/LnVzZXI/LmlkXCJcbiAgICAgICAgW3NpemVdPVwiMjBcIlxuICAgICAgICB0eXBlPVwidXNlclwiXG4gICAgICAgIGxvY2F0aW9uPVwicXVvdGVkLW1lc3NhZ2Utc2VuZGVyXCJcbiAgICAgICAgW3VzZXJdPVwicXVvdGVkTWVzc2FnZT8udXNlciB8fCB1bmRlZmluZWRcIlxuICAgICAgPjwvc3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJxdW90ZWQtbWVzc2FnZS1wcmV2aWV3LWNvbnRlbnQtaW5uZXJcIj5cbiAgICAgICAgPHN0cmVhbS1hdHRhY2htZW50LWxpc3RcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVvdGVkTWVzc2FnZT8uYXR0YWNobWVudHMgJiYgcXVvdGVkTWVzc2FnZT8uYXR0YWNobWVudHM/Lmxlbmd0aFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dGFjaG1lbnRzXT1cInF1b3RlZE1lc3NhZ2VBdHRhY2htZW50c1wiXG4gICAgICAgICAgW21lc3NhZ2VJZF09XCJxdW90ZWRNZXNzYWdlPy5pZFwiXG4gICAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LWxpc3Q+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1b3RlZC1tZXNzYWdlLXRleHRcIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICBtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8udHJhbnNsYXRpb24gfHxcbiAgICAgICAgICAgIHF1b3RlZE1lc3NhZ2U/Lmh0bWwgfHxcbiAgICAgICAgICAgIHF1b3RlZE1lc3NhZ2U/LnRleHRcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9faW5wdXQtZmxhdC13cmFwcGVyXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ7e1xuICAgICAgICBtb2RlID09PSAnbWFpbidcbiAgICAgICAgICA/ICdzdHItY2hhdF9faW5wdXQtZmxhdC0tdGV4dGFyZWEtd3JhcHBlcidcbiAgICAgICAgICA6ICdzdHItY2hhdF9fc21hbGwtbWVzc2FnZS1pbnB1dC0tdGV4dGFyZWEtd3JhcHBlcidcbiAgICAgIH19XCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgI2RlZmF1bHRBdHRhY2htZW50c1ByZXZpZXdcbiAgICAgICAgbGV0LWF0dGFjaG1lbnRVcGxvYWRzJD1cImF0dGFjaG1lbnRVcGxvYWRzJFwiXG4gICAgICAgIGxldC1yZXRyeVVwbG9hZEhhbmRsZXI9XCJyZXRyeVVwbG9hZEhhbmRsZXJcIlxuICAgICAgICBsZXQtZGVsZXRlVXBsb2FkSGFuZGxlcj1cImRlbGV0ZVVwbG9hZEhhbmRsZXJcIlxuICAgICAgPlxuICAgICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtcHJldmlldy1saXN0XG4gICAgICAgICAgW2F0dGFjaG1lbnRVcGxvYWRzJF09XCJhdHRhY2htZW50VXBsb2FkcyRcIlxuICAgICAgICAgIChyZXRyeUF0dGFjaG1lbnRVcGxvYWQpPVwicmV0cnlVcGxvYWRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgIChkZWxldGVBdHRhY2htZW50KT1cImRlbGV0ZVVwbG9hZEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJyZnUtaW1hZ2UtcHJldmlld2VyLWFuZ3VsYXItaG9zdFwiXG4gICAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LXByZXZpZXctbGlzdD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRzUHJldmlldztcbiAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0KClcbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJydGEgc3RyLWNoYXRfX3RleHRhcmVhIHN0ci1jaGF0LWFuZ3VsYXJfX3RleHRhcmVhXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbW9qaVBpY2tlclRlbXBsYXRlXCIgZGF0YS10ZXN0aWQ9XCJlbW9qaS1waWNrZXJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9faW5wdXQtZmxhdC1lbW9qaXNlbGVjdFxuICAgICAgICAgICAgICBzdHItY2hhdC1hbmd1bGFyX19lbW9qaXNlbGVjdFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgZW1vamlQaWNrZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBnZXRFbW9qaVBpY2tlckNvbnRleHQoKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhblNlbmRNZXNzYWdlczsgZWxzZSBkaXNhYmxlZFRleHRhcmVhXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgc3RyZWFtVGV4dGFyZWFcbiAgICAgICAgICAgIFsodmFsdWUpXT1cInRleHRhcmVhVmFsdWVcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInR5cGluZ1N0YXJ0JC5uZXh0KClcIlxuICAgICAgICAgICAgKHNlbmQpPVwibWVzc2FnZVNlbnQoKVwiXG4gICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRleHRhcmVhUmVmXCJcbiAgICAgICAgICAgICh1c2VyTWVudGlvbnMpPVwibWVudGlvbmVkVXNlcnMgPSAkZXZlbnRcIlxuICAgICAgICAgICAgW2FyZU1lbnRpb25zRW5hYmxlZF09XCJhcmVNZW50aW9uc0VuYWJsZWRcIlxuICAgICAgICAgICAgW21lbnRpb25TY29wZV09XCJtZW50aW9uU2NvcGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInRleHRhcmVhUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2lucHV0TW9kZV09XCJpbnB1dE1vZGVcIlxuICAgICAgICAgICAgW2F1dG9Gb2N1c109XCJhdXRvRm9jdXNcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzYWJsZWRUZXh0YXJlYT5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICByb3dzPVwiMVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZGlzYWJsZWRUZXh0YXJlYVRleHQgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJydGFfX3RleHRhcmVhIHN0ci1jaGF0X190ZXh0YXJlYV9fdGV4dGFyZWFcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkaXNhYmxlZC10ZXh0YXJlYVwiXG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJpc0ZpbGVVcGxvYWRFbmFibGVkICYmIGlzRmlsZVVwbG9hZEF1dGhvcml6ZWQgJiYgY2FuU2VuZE1lc3NhZ2VzXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBjdXN0b21BdHRhY2htZW50VXBsb2FkVGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRVcGxvYWQ7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50VXBsb2FkQ29udGV4dCgpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRBdHRhY2htZW50VXBsb2FkPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2ZpbGV1cGxvYWQtd3JhcHBlclwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImZpbGUtdXBsb2FkLWJ1dHRvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwXCI+XG4gICAgICAgICAgICAgIHt7IFwic3RyZWFtQ2hhdC5BdHRhY2ggZmlsZXNcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmZ1LWZpbGUtdXBsb2FkLWJ1dHRvblwiPlxuICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJmdS1maWxlLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsZXNTZWxlY3RlZChmaWxlSW5wdXQuZmlsZXMpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RyLWNoYXRfX2lucHV0LWZsYXQtZmlsZXVwbG9hZFwiPlxuICAgICAgICAgICAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmaWxlLXVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiY2FuU2VuZE1lc3NhZ2VzICYmICFpc0Nvb2xkb3duSW5Qcm9ncmVzc1wiXG4gICAgICBkYXRhLXRlc3RpZD1cInNlbmQtYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3NlbmQtYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJtZXNzYWdlU2VudCgpXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJtZXNzYWdlU2VudCgpXCJcbiAgICA+XG4gICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fc2VuZC1idXR0b24tYW5ndWxhclwiXG4gICAgICAgIGljb249XCJzZW5kXCJcbiAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2lucHV0LWZsYXQtY29vbGRvd25cIlxuICAgICAgKm5nSWY9XCJpc0Nvb2xkb3duSW5Qcm9ncmVzc1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImNvb2xkb3duLXRpbWVyXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtaW5wdXQtY29vbGRvd24tdGV4dFwiPlxuICAgICAgICB7eyBjb29sZG93biQgfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXZcbiAgKm5nSWY9XCJ0aGVtZVZlcnNpb24gPT09ICcyJ1wiXG4gIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtaW5wdXQgc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1pbnB1dFwiXG4+XG4gIDxkaXYgKm5nSWY9XCJxdW90ZWRNZXNzYWdlXCIgY2xhc3M9XCJzdHItY2hhdF9fcXVvdGVkLW1lc3NhZ2UtcHJldmlldy1oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3F1b3RlZC1tZXNzYWdlLXJlcGx5LXRvLW1lc3NhZ2VcIj5cbiAgICAgIHt7IFwic3RyZWFtQ2hhdC5SZXBseSB0byBNZXNzYWdlXCIgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19xdW90ZWQtbWVzc2FnZS1yZW1vdmVcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJyZW1vdmUtcXVvdGVcIlxuICAgICAgKGNsaWNrKT1cImRlc2VsZWN0TWVzc2FnZVRvUXVvdGUoKVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwiZGVzZWxlY3RNZXNzYWdlVG9RdW90ZSgpXCJcbiAgICA+XG4gICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgaWNvbj1cImNsb3NlLW5vLW91dGxpbmVcIlxuICAgICAgPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuU2VuZE1lc3NhZ2VzOyBlbHNlIG5vdEFsbG93ZWRcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIlxuICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1pbnB1dC1pbm5lclxuICAgICAgICBzdHItY2hhdC1hbmd1bGFyX19tZXNzYWdlLWlucHV0LWlubmVyXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJpc0ZpbGVVcGxvYWRFbmFibGVkICYmIGlzRmlsZVVwbG9hZEF1dGhvcml6ZWQgJiYgY2FuU2VuZE1lc3NhZ2VzXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBjdXN0b21BdHRhY2htZW50VXBsb2FkVGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRVcGxvYWQ7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50VXBsb2FkQ29udGV4dCgpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRBdHRhY2htZW50VXBsb2FkPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2ZpbGUtaW5wdXQtY29udGFpbmVyXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZmlsZS11cGxvYWQtYnV0dG9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgI2ZpbGVJbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2ZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJmaWxlc1NlbGVjdGVkKGZpbGVJbnB1dC5maWxlcylcIlxuICAgICAgICAgICAgICBpZD1cInt7IGZpbGVJbnB1dElkIH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdHItY2hhdF9fZmlsZS1pbnB1dC1sYWJlbFwiIGZvcj1cInt7IGZpbGVJbnB1dElkIH19XCI+XG4gICAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlciBpY29uPVwiYXR0YWNoXCI+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS10ZXh0YXJlYS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVvdGVkLW1lc3NhZ2UtY29udGFpbmVyXCJcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19xdW90ZWQtbWVzc2FnZS1wcmV2aWV3XCJcbiAgICAgICAgICAqbmdJZj1cInF1b3RlZE1lc3NhZ2VcIlxuICAgICAgICA+XG4gICAgICAgICAgPHN0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicW91dGVkLW1lc3NhZ2UtYXZhdGFyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICAgIHN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0XG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNlbmRlci1hdmF0YXJcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbaW1hZ2VVcmxdPVwicXVvdGVkTWVzc2FnZT8udXNlcj8uaW1hZ2VcIlxuICAgICAgICAgICAgW25hbWVdPVwicXVvdGVkTWVzc2FnZT8udXNlcj8ubmFtZSB8fCBxdW90ZWRNZXNzYWdlPy51c2VyPy5pZFwiXG4gICAgICAgICAgICBbc2l6ZV09XCIyMFwiXG4gICAgICAgICAgICB0eXBlPVwidXNlclwiXG4gICAgICAgICAgICBsb2NhdGlvbj1cInF1b3RlZC1tZXNzYWdlLXNlbmRlclwiXG4gICAgICAgICAgICBbdXNlcl09XCJxdW90ZWRNZXNzYWdlPy51c2VyIHx8IHVuZGVmaW5lZFwiXG4gICAgICAgICAgPjwvc3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlcj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBxdW90ZWQtbWVzc2FnZS1wcmV2aWV3LWNvbnRlbnQtaW5uZXJcbiAgICAgICAgICAgICAgc3RyLWNoYXRfX3F1b3RlZC1tZXNzYWdlLWJ1YmJsZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtbGlzdFxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHF1b3RlZE1lc3NhZ2U/LmF0dGFjaG1lbnRzICYmIHF1b3RlZE1lc3NhZ2U/LmF0dGFjaG1lbnRzPy5sZW5ndGhcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2F0dGFjaG1lbnRzXT1cInF1b3RlZE1lc3NhZ2VBdHRhY2htZW50c1wiXG4gICAgICAgICAgICAgIFttZXNzYWdlSWRdPVwicXVvdGVkTWVzc2FnZT8uaWRcIlxuICAgICAgICAgICAgPjwvc3RyZWFtLWF0dGFjaG1lbnQtbGlzdD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fcXVvdGVkLW1lc3NhZ2UtdGV4dFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVvdGVkLW1lc3NhZ2UtdGV4dFwiXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgcXVvdGVkTWVzc2FnZT8udHJhbnNsYXRpb24gfHxcbiAgICAgICAgICAgICAgICBxdW90ZWRNZXNzYWdlPy5odG1sIHx8XG4gICAgICAgICAgICAgICAgcXVvdGVkTWVzc2FnZT8udGV4dFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgI2RlZmF1bHRBdHRhY2htZW50c1ByZXZpZXdcbiAgICAgICAgICBsZXQtYXR0YWNobWVudFVwbG9hZHMkPVwiYXR0YWNobWVudFVwbG9hZHMkXCJcbiAgICAgICAgICBsZXQtcmV0cnlVcGxvYWRIYW5kbGVyPVwicmV0cnlVcGxvYWRIYW5kbGVyXCJcbiAgICAgICAgICBsZXQtZGVsZXRlVXBsb2FkSGFuZGxlcj1cImRlbGV0ZVVwbG9hZEhhbmRsZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPHN0cmVhbS1hdHRhY2htZW50LXByZXZpZXctbGlzdFxuICAgICAgICAgICAgW2F0dGFjaG1lbnRVcGxvYWRzJF09XCJhdHRhY2htZW50VXBsb2FkcyRcIlxuICAgICAgICAgICAgKHJldHJ5QXR0YWNobWVudFVwbG9hZCk9XCJyZXRyeVVwbG9hZEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZGVsZXRlQXR0YWNobWVudCk9XCJkZWxldGVVcGxvYWRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LWxpc3QtYW5ndWxhci1ob3N0XCJcbiAgICAgICAgICA+PC9zdHJlYW0tYXR0YWNobWVudC1wcmV2aWV3LWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRzUHJldmlldztcbiAgICAgICAgICAgIGNvbnRleHQ6IGdldEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQoKVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXRleHRhcmVhLXdpdGgtZW1vamktcGlja2VyXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgc3RyZWFtVGV4dGFyZWFcbiAgICAgICAgICAgIFsodmFsdWUpXT1cInRleHRhcmVhVmFsdWVcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInR5cGluZ1N0YXJ0JC5uZXh0KClcIlxuICAgICAgICAgICAgKHNlbmQpPVwibWVzc2FnZVNlbnQoKVwiXG4gICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRleHRhcmVhUmVmXCJcbiAgICAgICAgICAgICh1c2VyTWVudGlvbnMpPVwibWVudGlvbmVkVXNlcnMgPSAkZXZlbnRcIlxuICAgICAgICAgICAgW2FyZU1lbnRpb25zRW5hYmxlZF09XCJhcmVNZW50aW9uc0VuYWJsZWRcIlxuICAgICAgICAgICAgW21lbnRpb25TY29wZV09XCJtZW50aW9uU2NvcGVcIlxuICAgICAgICAgICAgW2lucHV0TW9kZV09XCJpbnB1dE1vZGVcIlxuICAgICAgICAgICAgW2F1dG9Gb2N1c109XCJhdXRvRm9jdXNcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInRleHRhcmVhUGxhY2Vob2xkZXJcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtdGV4dGFyZWEtZW1vamktcGlja2VyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ0lmPVwiZW1vamlQaWNrZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZW1vamktcGlja2VyXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICBlbW9qaVBpY2tlclRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgY29udGV4dDogZ2V0RW1vamlQaWNrZXJDb250ZXh0KClcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJjYW5TZW5kTWVzc2FnZXMgJiYgIWlzQ29vbGRvd25JblByb2dyZXNzICYmICFtZXNzYWdlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgIChhdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIkIHwgYXN5bmMpISA+IDAgfHxcbiAgICAgICAgICAoIXRleHRhcmVhVmFsdWUgJiYgKGF0dGFjaG1lbnRVcGxvYWRzJCB8IGFzeW5jKSEubGVuZ3RoID09PSAwKVxuICAgICAgICBcIlxuICAgICAgICBkYXRhLXRlc3RpZD1cInNlbmQtYnV0dG9uXCJcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fc2VuZC1idXR0b25cIlxuICAgICAgICAoY2xpY2spPVwibWVzc2FnZVNlbnQoKVwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJtZXNzYWdlU2VudCgpXCJcbiAgICAgID5cbiAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyIGljb249XCJzZW5kXCI+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWlucHV0LWNvb2xkb3duXCJcbiAgICAgICAgKm5nSWY9XCJpc0Nvb2xkb3duSW5Qcm9ncmVzc1wiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiY29vbGRvd24tdGltZXJcIlxuICAgICAgPlxuICAgICAgICB7eyBjb29sZG93biQgfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvbmctY29udGFpbmVyPlxuICA8bmctdGVtcGxhdGUgI25vdEFsbG93ZWQ+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1pbnB1dC1ub3QtYWxsb3dlZFwiXG4gICAgICBkYXRhLXRlc3RpZD1cImRpc2FibGVkLXRleHRhcmVhXCJcbiAgICA+XG4gICAgICB7eyBkaXNhYmxlZFRleHRhcmVhVGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9kaXY+XG4iXX0=
455
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1pbnB1dC9tZXNzYWdlLWlucHV0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L21lc3NhZ2UtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFHTCxTQUFTLEVBSVQsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sS0FBSyxFQUlMLE1BQU0sRUFJTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGFBQWEsRUFBYyxPQUFPLEVBQWdCLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFXN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRzFELE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVwQzs7R0FFRztBQU9ILE1BQU0sT0FBTyxxQkFBcUI7SUErRWhDLFlBQ1UsY0FBOEIsRUFDOUIsbUJBQXdDLEVBQ3hDLGlCQUFvQyxFQUNw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QixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDO0lBQzdELENBQUM7O2tIQXZpQlUscUJBQXFCLDZKQW9GdEIsc0JBQXNCO3NHQXBGckIscUJBQXFCLHliQUZyQixDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLG1LQXVFdEMsaUJBQWlCLHFFQzNIOUIsOGlaQW9XQTsyRkQ5U2EscUJBQXFCO2tCQU5qQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFdBQVcsRUFBRSxnQ0FBZ0M7b0JBQzdDLE1BQU0sRUFBRSxFQUFFO29CQUNWLFNBQVMsRUFBRSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDO2lCQUNsRDs7MEJBcUZJLE1BQU07MkJBQUMsc0JBQXNCO21QQTlFdkIsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUlHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLElBQUk7c0JBQVosS0FBSztnQkFJRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBSUcsT0FBTztzQkFBZixLQUFLO2dCQUlHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlhLGFBQWE7c0JBQS9CLE1BQU07Z0JBR1EsS0FBSztzQkFBbkIsV0FBVztnQkF1Qm9CLFNBQVM7c0JBQXhDLFNBQVM7dUJBQUMsV0FBVztnQkFFZCxjQUFjO3NCQURyQixTQUFTO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgQ29tcG9uZW50UmVmLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBUeXBlLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpcnN0LCBtYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFwcFNldHRpbmdzLCBDaGFubmVsLCBVc2VyUmVzcG9uc2UgfSBmcm9tICdzdHJlYW0tY2hhdCc7XG5pbXBvcnQgeyBBdHRhY2htZW50U2VydmljZSB9IGZyb20gJy4uL2F0dGFjaG1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyB0ZXh0YXJlYUluamVjdGlvblRva2VuIH0gZnJvbSAnLi4vaW5qZWN0aW9uLXRva2Vucyc7XG5pbXBvcnQgeyBOb3RpZmljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQXR0YWNobWVudFByZXZpZXdMaXN0Q29udGV4dCxcbiAgQXR0YWNobWVudFVwbG9hZCxcbiAgQ3VzdG9tQXR0YWNobWVudFVwbG9hZENvbnRleHQsXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG4gIEVtb2ppUGlja2VyQ29udGV4dCxcbiAgU3RyZWFtTWVzc2FnZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZSB9IGZyb20gJy4vbWVzc2FnZS1pbnB1dC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBUZXh0YXJlYURpcmVjdGl2ZSB9IGZyb20gJy4vdGV4dGFyZWEuZGlyZWN0aXZlJztcbmltcG9ydCB7IFRleHRhcmVhSW50ZXJmYWNlIH0gZnJvbSAnLi90ZXh0YXJlYS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgaXNJbWFnZUZpbGUgfSBmcm9tICcuLi9pcy1pbWFnZS1maWxlJztcbmltcG9ydCB7IEVtb2ppSW5wdXRTZXJ2aWNlIH0gZnJvbSAnLi9lbW9qaS1pbnB1dC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi4vdGhlbWUuc2VydmljZSc7XG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJztcblxuLyoqXG4gKiBUaGUgYE1lc3NhZ2VJbnB1dGAgY29tcG9uZW50IGRpc3BsYXlzIGFuIGlucHV0IHdoZXJlIHVzZXJzIGNhbiB0eXBlIHRoZWlyIG1lc3NhZ2VzIGFuZCB1cGxvYWQgZmlsZXMsIGFuZCBzZW5kcyB0aGUgbWVzc2FnZSB0byB0aGUgYWN0aXZlIGNoYW5uZWwuIFRoZSBjb21wb25lbnQgY2FuIGJlIHVzZWQgdG8gY29tcG9zZSBuZXcgbWVzc2FnZXMgb3IgdXBkYXRlIGV4aXN0aW5nIG9uZXMuIFRvIHNlbmQgbWVzc2FnZXMsIHRoZSBjaGF0IHVzZXIgbmVlZHMgdG8gaGF2ZSB0aGUgbmVjZXNzYXJ5IFtjaGFubmVsIGNhcGFiaWxpdHldKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L2NoYW5uZWxfY2FwYWJpbGl0aWVzLz9sYW5ndWFnZT1qYXZhc2NyaXB0KS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtaW5wdXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG4gIHByb3ZpZGVyczogW0F0dGFjaG1lbnRTZXJ2aWNlLCBFbW9qaUlucHV0U2VydmljZV0sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VJbnB1dENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbntcbiAgLyoqXG4gICAqIElmIGZpbGUgdXBsb2FkIGlzIGVuYWJsZWQsIHRoZSB1c2VyIGNhbiBvcGVuIGEgZmlsZSBzZWxlY3RvciBmcm9tIHRoZSBpbnB1dC4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgdXNlciBhbHNvIG5lZWRzIHRvIGhhdmUgdGhlIG5lY2Vzc2FyeSBbY2hhbm5lbCBjYXBhYmlsaXR5XShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9jaGFubmVsX2NhcGFiaWxpdGllcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCBpcyBzZXQgZnJvbSB0aGUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpLlxuICAgKi9cbiAgQElucHV0KCkgaXNGaWxlVXBsb2FkRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIElmIHRydWUsIHVzZXJzIGNhbiBtZW50aW9uIG90aGVyIHVzZXJzIGluIG1lc3NhZ2VzLiBZb3UgYWxzbyBbbmVlZCB0byB1c2UgdGhlIGBBdXRvY29tcGxldGVUZXh0YXJlYWBdKC4uL2NvbmNlcHRzL29wdC1pbi1hcmNoaXRlY3R1cmUubWR4KSBmb3IgdGhpcyBmZWF0dXJlIHRvIHdvcmsuIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBpdCBpcyBzZXQgZnJvbSB0aGUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpLlxuICAgKi9cbiAgQElucHV0KCkgYXJlTWVudGlvbnNFbmFibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIHNjb3BlIGZvciB1c2VyIG1lbnRpb25zLCBlaXRoZXIgbWVtYmVycyBvZiB0aGUgY3VycmVudCBjaGFubmVsIG9mIG1lbWJlcnMgb2YgdGhlIGFwcGxpY2F0aW9uLiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgaXMgc2V0IGZyb20gdGhlIFtgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZWBdKC4uL3NlcnZpY2VzL01lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UubWR4KS5cbiAgICovXG4gIEBJbnB1dCgpIG1lbnRpb25TY29wZTogJ2NoYW5uZWwnIHwgJ2FwcGxpY2F0aW9uJyB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIG1lc3NhZ2UgaXMgYmVpbmcgZGlzcGFseWVkIGluIGEgY2hhbm5lbCBvciBpbiBhIFt0aHJlYWRdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3RocmVhZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZTogJ3RocmVhZCcgfCAnbWFpbicgPSAnbWFpbic7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCB1c2VycyBjYW4gc2VsZWN0IG11bHRpcGxlIGZpbGVzIHRvIHVwbG9hZC4gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIGl0IGlzIHNldCBmcm9tIHRoZSBbYE1lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2VgXSguLi9zZXJ2aWNlcy9NZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlLm1keCkuXG4gICAqL1xuICBASW5wdXQoKSBpc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0byBlZGl0XG4gICAqL1xuICBASW5wdXQoKSBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogQW4gb2JzZXJ2YWJsZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHRyaWdnZXIgbWVzc2FnZSBzZW5kaW5nIGZyb20gdGhlIG91dHNpZGVcbiAgICovXG4gIEBJbnB1dCgpIHNlbmRNZXNzYWdlJDogT2JzZXJ2YWJsZTx2b2lkPiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIEluIGBkZXNrdG9wYCBtb2RlIHRoZSBgRW50ZXJgIGtleSB3aWxsIHRyaWdnZXIgbWVzc2FnZSBzZW5kaW5nLCBpbiBgbW9iaWxlYCBtb2RlIHRoZSBgRW50ZXJgIGtleSB3aWxsIGluc2VydCBhIG5ldyBsaW5lIHRvIHRoZSBtZXNzYWdlIGlucHV0LiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgaXQgaXMgc2V0IGZyb20gdGhlIFtgTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZWBdKC4uL3NlcnZpY2VzL01lc3NhZ2VJbnB1dENvbmZpZ1NlcnZpY2UubWR4KS5cbiAgICovXG4gIEBJbnB1dCgpIGlucHV0TW9kZTogJ2Rlc2t0b3AnIHwgJ21vYmlsZSc7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGF1dG8gZm9jdXMgb24gdGhlIHRleHRhcmVhIGVsZW1lbnRcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IHRydWU7XG4gIC8qKlxuICAgKiBFbWl0cyB3aGVuIGEgbWVzc2FnZSB3YXMgc3VjY2Vzc2Z1bHkgc2VudCBvciB1cGRhdGVkXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgbWVzc2FnZVVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U7XG4gIH0+KCk7XG4gIEBIb3N0QmluZGluZygpIGNsYXNzID0gJ3N0ci1jaGF0X19tZXNzYWdlLWlucHV0LWFuZ3VsYXItaG9zdCc7XG4gIGlzRmlsZVVwbG9hZEF1dGhvcml6ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGNhblNlbmRMaW5rczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgY2FuU2VuZE1lc3NhZ2VzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBhdHRhY2htZW50VXBsb2FkcyQ6IE9ic2VydmFibGU8QXR0YWNobWVudFVwbG9hZFtdPjtcbiAgYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICB0ZXh0YXJlYVZhbHVlID0gJyc7XG4gIHRleHRhcmVhUmVmOiBDb21wb25lbnRSZWY8VGV4dGFyZWFJbnRlcmZhY2UgJiBQYXJ0aWFsPE9uQ2hhbmdlcz4+IHwgdW5kZWZpbmVkO1xuICBtZW50aW9uZWRVc2VyczogVXNlclJlc3BvbnNlW10gPSBbXTtcbiAgcXVvdGVkTWVzc2FnZTogdW5kZWZpbmVkIHwgU3RyZWFtTWVzc2FnZTtcbiAgdHlwaW5nU3RhcnQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgY29vbGRvd24kOiBPYnNlcnZhYmxlPG51bWJlcj4gfCB1bmRlZmluZWQ7XG4gIGlzQ29vbGRvd25JblByb2dyZXNzID0gZmFsc2U7XG4gIGVtb2ppUGlja2VyVGVtcGxhdGU6IFRlbXBsYXRlUmVmPEVtb2ppUGlja2VyQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIGN1c3RvbUF0dGFjaG1lbnRVcGxvYWRUZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPEN1c3RvbUF0dGFjaG1lbnRVcGxvYWRDb250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICBhdHRhY2htZW50UHJldmlld0xpc3RUZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQ+XG4gICAgfCB1bmRlZmluZWQ7XG4gIHRleHRhcmVhUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgdGhlbWVWZXJzaW9uOiAnMScgfCAnMic7XG4gIGZpbGVJbnB1dElkID0gdXVpZHY0KCk7XG4gIEBWaWV3Q2hpbGQoJ2ZpbGVJbnB1dCcpIHByaXZhdGUgZmlsZUlucHV0ITogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcbiAgQFZpZXdDaGlsZChUZXh0YXJlYURpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHByaXZhdGUgdGV4dGFyZWFBbmNob3IhOiBUZXh0YXJlYURpcmVjdGl2ZTtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIGhpZGVOb3RpZmljYXRpb246IEZ1bmN0aW9uIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGlzVmlld0luaXRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGFwcFNldHRpbmdzOiBBcHBTZXR0aW5ncyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBjaGFubmVsOiBDaGFubmVsPERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3M+IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHNlbmRNZXNzYWdlU3ViY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0VGV4dGFyZWFQbGFjZWhvbGRlciA9ICdzdHJlYW1DaGF0LlR5cGUgeW91ciBtZXNzYWdlJztcbiAgcHJpdmF0ZSByZWFkb25seSBzbG93TW9kZVRleHRhcmVhUGxhY2Vob2xkZXIgPSAnc3RyZWFtQ2hhdC5TbG93IE1vZGUgT04nO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhdHRhY2htZW50U2VydmljZTogQXR0YWNobWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlLFxuICAgIEBJbmplY3QodGV4dGFyZWFJbmplY3Rpb25Ub2tlbilcbiAgICBwcml2YXRlIHRleHRhcmVhVHlwZTogVHlwZTxUZXh0YXJlYUludGVyZmFjZT4sXG4gICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNoYXRDbGllbnQ6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgZW1vamlJbnB1dFNlcnZpY2U6IEVtb2ppSW5wdXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVzU2VydmljZTogQ3VzdG9tVGVtcGxhdGVzU2VydmljZSxcbiAgICB0aGVtZVNlcnZpY2U6IFRoZW1lU2VydmljZVxuICApIHtcbiAgICB0aGlzLnRoZW1lVmVyc2lvbiA9IHRoZW1lU2VydmljZS50aGVtZVZlcnNpb247XG4gICAgdGhpcy50ZXh0YXJlYVBsYWNlaG9sZGVyID0gdGhpcy5kZWZhdWx0VGV4dGFyZWFQbGFjZWhvbGRlcjtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJC5zdWJzY3JpYmUoXG4gICAgICAgIChjb3VudGVyKSA9PiB7XG4gICAgICAgICAgaWYgKGNvdW50ZXIgPT09IDAgJiYgdGhpcy5oaWRlTm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGVOb3RpZmljYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJC5zdWJzY3JpYmUoKGNoYW5uZWwpID0+IHtcbiAgICAgICAgaWYgKGNoYW5uZWwgJiYgdGhpcy5jaGFubmVsICYmIGNoYW5uZWwuaWQgIT09IHRoaXMuY2hhbm5lbC5pZCkge1xuICAgICAgICAgIHRoaXMudGV4dGFyZWFWYWx1ZSA9ICcnO1xuICAgICAgICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UucmVzZXRBdHRhY2htZW50VXBsb2FkcygpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGllcyA9IGNoYW5uZWw/LmRhdGE/Lm93bl9jYXBhYmlsaXRpZXMgYXMgc3RyaW5nW107XG4gICAgICAgIGlmIChjYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICB0aGlzLmlzRmlsZVVwbG9hZEF1dGhvcml6ZWQgPVxuICAgICAgICAgICAgY2FwYWJpbGl0aWVzLmluZGV4T2YoJ3VwbG9hZC1maWxlJykgIT09IC0xO1xuICAgICAgICAgIHRoaXMuY2FuU2VuZExpbmtzID0gY2FwYWJpbGl0aWVzLmluZGV4T2YoJ3NlbmQtbGlua3MnKSAhPT0gLTE7XG4gICAgICAgICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbDtcbiAgICAgICAgICB0aGlzLnNldENhblNlbmRNZXNzYWdlcygpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYXRDbGllbnQuYXBwU2V0dGluZ3MkLnN1YnNjcmliZShcbiAgICAgICAgKGFwcFNldHRpbmdzKSA9PiAodGhpcy5hcHBTZXR0aW5ncyA9IGFwcFNldHRpbmdzKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLm1lc3NhZ2VUb1F1b3RlJC5zdWJzY3JpYmUoKG0pID0+IHtcbiAgICAgICAgY29uc3QgaXNUaHJlYWRSZXBseSA9IG0gJiYgbS5wYXJlbnRfaWQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAodGhpcy5tb2RlID09PSAndGhyZWFkJyAmJiBpc1RocmVhZFJlcGx5KSB8fFxuICAgICAgICAgICh0aGlzLm1vZGUgPT09ICd0aHJlYWQnICYmIHRoaXMucXVvdGVkTWVzc2FnZSAmJiAhbSkgfHxcbiAgICAgICAgICAodGhpcy5tb2RlID09PSAnbWFpbicgJiYgIWlzVGhyZWFkUmVwbHkpXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucXVvdGVkTWVzc2FnZSA9IG07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRVcGxvYWRzJCA9IHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZHMkO1xuICAgIHRoaXMuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJCA9XG4gICAgICB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciQ7XG4gICAgdGhpcy5pc0ZpbGVVcGxvYWRFbmFibGVkID0gdGhpcy5jb25maWdTZXJ2aWNlLmlzRmlsZVVwbG9hZEVuYWJsZWQ7XG4gICAgdGhpcy5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQgPVxuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDtcbiAgICB0aGlzLmFyZU1lbnRpb25zRW5hYmxlZCA9IHRoaXMuY29uZmlnU2VydmljZS5hcmVNZW50aW9uc0VuYWJsZWQ7XG4gICAgdGhpcy5tZW50aW9uU2NvcGUgPSB0aGlzLmNvbmZpZ1NlcnZpY2UubWVudGlvblNjb3BlO1xuICAgIHRoaXMuaW5wdXRNb2RlID0gdGhpcy5jb25maWdTZXJ2aWNlLmlucHV0TW9kZTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy50eXBpbmdTdGFydCQuc3Vic2NyaWJlKFxuICAgICAgICAoKSA9PiB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UudHlwaW5nU3RhcnRlZCh0aGlzLnBhcmVudE1lc3NhZ2VJZClcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5sYXRlc3RNZXNzYWdlRGF0ZUJ5VXNlckJ5Q2hhbm5lbHMkLFxuICAgICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLFxuICAgICAgXSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgbWFwKFxuICAgICAgICAgICAgKFtsYXRlc3RNZXNzYWdlcywgY2hhbm5lbF0pOiBbXG4gICAgICAgICAgICAgIERhdGUgfCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIENoYW5uZWw8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz4gfCB1bmRlZmluZWRcbiAgICAgICAgICAgIF0gPT4gW2xhdGVzdE1lc3NhZ2VzW2NoYW5uZWw/LmNpZCB8fCAnJ10sIGNoYW5uZWwhXVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChbbGF0ZXN0TWVzc2FnZURhdGUsIGNoYW5uZWxdKSA9PiB7XG4gICAgICAgICAgY29uc3QgY29vbGRvd24gPVxuICAgICAgICAgICAgKGNoYW5uZWw/LmRhdGE/LmNvb2xkb3duIGFzIG51bWJlcikgJiZcbiAgICAgICAgICAgIGxhdGVzdE1lc3NhZ2VEYXRlICYmXG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAoY2hhbm5lbD8uZGF0YT8uY29vbGRvd24gYXMgbnVtYmVyKSAtXG4gICAgICAgICAgICAgICAgKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC0gbGF0ZXN0TWVzc2FnZURhdGUuZ2V0VGltZSgpKSAvIDEwMDBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29vbGRvd24gJiZcbiAgICAgICAgICAgIGNvb2xkb3duID4gMCAmJlxuICAgICAgICAgICAgKGNoYW5uZWw/LmRhdGE/Lm93bl9jYXBhYmlsaXRpZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKCdzbG93LW1vZGUnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zdGFydENvb2xkb3duKGNvb2xkb3duKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDb29sZG93bkluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcENvb2xkb3duKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5lbW9qaVBpY2tlclRlbXBsYXRlJC5zdWJzY3JpYmUoKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgIHRoaXMuZW1vamlQaWNrZXJUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5hdHRhY2htZW50UHJldmlld0xpc3RUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLmF0dGFjaG1lbnRQcmV2aWV3TGlzdFRlbXBsYXRlID0gdGVtcGxhdGU7XG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLmN1c3RvbUF0dGFjaG1lbnRVcGxvYWRUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+IHtcbiAgICAgICAgICB0aGlzLmN1c3RvbUF0dGFjaG1lbnRVcGxvYWRUZW1wbGF0ZSA9IHRlbXBsYXRlO1xuICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzVmlld0luaXRlZCA9IHRydWU7XG4gICAgdGhpcy5pbml0VGV4dGFyZWEoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5tZXNzYWdlKSB7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLnJlc2V0QXR0YWNobWVudFVwbG9hZHMoKTtcbiAgICAgIGlmICh0aGlzLmlzVXBkYXRlKSB7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UuY3JlYXRlRnJvbUF0dGFjaG1lbnRzKFxuICAgICAgICAgIHRoaXMubWVzc2FnZSEuYXR0YWNobWVudHMgfHwgW11cbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50ZXh0YXJlYVZhbHVlID0gdGhpcy5tZXNzYWdlIS50ZXh0IHx8ICcnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5pc0ZpbGVVcGxvYWRFbmFibGVkKSB7XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaXNGaWxlVXBsb2FkRW5hYmxlZCA9IHRoaXMuaXNGaWxlVXBsb2FkRW5hYmxlZDtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkKSB7XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkID1cbiAgICAgICAgdGhpcy5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQ7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmFyZU1lbnRpb25zRW5hYmxlZCkge1xuICAgICAgdGhpcy5jb25maWdTZXJ2aWNlLmFyZU1lbnRpb25zRW5hYmxlZCA9IHRoaXMuYXJlTWVudGlvbnNFbmFibGVkO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5tZW50aW9uU2NvcGUpIHtcbiAgICAgIHRoaXMuY29uZmlnU2VydmljZS5tZW50aW9uU2NvcGUgPSB0aGlzLm1lbnRpb25TY29wZTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMubW9kZSkge1xuICAgICAgdGhpcy5zZXRDYW5TZW5kTWVzc2FnZXMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaW5wdXRNb2RlKSB7XG4gICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuaW5wdXRNb2RlID0gdGhpcy5pbnB1dE1vZGU7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLnNlbmRNZXNzYWdlJCkge1xuICAgICAgaWYgKHRoaXMuc2VuZE1lc3NhZ2VTdWJjcmlwdGlvbikge1xuICAgICAgICB0aGlzLnNlbmRNZXNzYWdlU3ViY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbmRNZXNzYWdlJCkge1xuICAgICAgICB0aGlzLnNlbmRNZXNzYWdlU3ViY3JpcHRpb24gPSB0aGlzLnNlbmRNZXNzYWdlJC5zdWJzY3JpYmUoXG4gICAgICAgICAgKCkgPT4gdm9pZCB0aGlzLm1lc3NhZ2VTZW50KClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZW5kTWVzc2FnZVN1YmNyaXB0aW9uKSB7XG4gICAgICB0aGlzLnNlbmRNZXNzYWdlU3ViY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBhc3luYyBtZXNzYWdlU2VudCgpIHtcbiAgICBpZiAodGhpcy5pc0Nvb2xkb3duSW5Qcm9ncmVzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyITogbnVtYmVyO1xuICAgIHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZEluUHJvZ3Jlc3NDb3VudGVyJFxuICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNvdW50ZXIpID0+IChhdHRhY2htZW50VXBsb2FkSW5Qcm9ncmVzc0NvdW50ZXIgPSBjb3VudGVyKSk7XG4gICAgaWYgKGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciA+IDApIHtcbiAgICAgIGlmICghdGhpcy5oaWRlTm90aWZpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuaGlkZU5vdGlmaWNhdGlvbiA9XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmFkZFBlcm1hbmVudE5vdGlmaWNhdGlvbihcbiAgICAgICAgICAgICdzdHJlYW1DaGF0LldhaXQgdW50aWwgYWxsIGF0dGFjaG1lbnRzIGhhdmUgdXBsb2FkZWQnXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYXR0YWNobWVudHMgPSB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLm1hcFRvQXR0YWNobWVudHMoKTtcbiAgICBsZXQgdGV4dCA9IHRoaXMudGV4dGFyZWFWYWx1ZTtcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9eXFxuKy9nLCAnJyk7IC8vIGxlYWRpbmcgZW1wdHkgbGluZXNcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXG4rJC9nLCAnJyk7IC8vIGVuZGluZyBlbXB0eSBsaW5lc1xuICAgIGNvbnN0IHRleHRDb250YWluc09ubHlTcGFjZUNoYXJzID0gIXRleHQucmVwbGFjZSgvIC9nLCAnJyk7IC8vc3BjYWVcbiAgICBpZiAoXG4gICAgICAoIXRleHQgfHwgdGV4dENvbnRhaW5zT25seVNwYWNlQ2hhcnMpICYmXG4gICAgICAoIWF0dGFjaG1lbnRzIHx8IGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRleHRDb250YWluc09ubHlTcGFjZUNoYXJzKSB7XG4gICAgICB0ZXh0ID0gJyc7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbnRhaW5zTGlua3MgJiYgIXRoaXMuY2FuU2VuZExpbmtzKSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAnc3RyZWFtQ2hhdC5TZW5kaW5nIGxpbmtzIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udmVyc2F0aW9uJ1xuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmlzVXBkYXRlKSB7XG4gICAgICB0aGlzLnRleHRhcmVhVmFsdWUgPSAnJztcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCAodGhpcy5pc1VwZGF0ZVxuICAgICAgICA/IHRoaXMuY2hhbm5lbFNlcnZpY2UudXBkYXRlTWVzc2FnZSh7XG4gICAgICAgICAgICAuLi50aGlzLm1lc3NhZ2UhLFxuICAgICAgICAgICAgdGV4dDogdGV4dCxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzOiBhdHRhY2htZW50cyxcbiAgICAgICAgICB9KVxuICAgICAgICA6IHRoaXMuY2hhbm5lbFNlcnZpY2Uuc2VuZE1lc3NhZ2UoXG4gICAgICAgICAgICB0ZXh0LFxuICAgICAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICAgICAgICB0aGlzLm1lbnRpb25lZFVzZXJzLFxuICAgICAgICAgICAgdGhpcy5wYXJlbnRNZXNzYWdlSWQsXG4gICAgICAgICAgICB0aGlzLnF1b3RlZE1lc3NhZ2U/LmlkXG4gICAgICAgICAgKSk7XG4gICAgICB0aGlzLm1lc3NhZ2VVcGRhdGUuZW1pdCh7IG1lc3NhZ2UgfSk7XG4gICAgICBpZiAoIXRoaXMuaXNVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5hdHRhY2htZW50U2VydmljZS5yZXNldEF0dGFjaG1lbnRVcGxvYWRzKCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICh0aGlzLmlzVXBkYXRlKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgJ3N0cmVhbUNoYXQuRWRpdCBtZXNzYWdlIHJlcXVlc3QgZmFpbGVkJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UudHlwaW5nU3RvcHBlZCh0aGlzLnBhcmVudE1lc3NhZ2VJZCk7XG4gICAgaWYgKHRoaXMucXVvdGVkTWVzc2FnZSkge1xuICAgICAgdGhpcy5kZXNlbGVjdE1lc3NhZ2VUb1F1b3RlKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGNvbnRhaW5zTGlua3MoKSB7XG4gICAgcmV0dXJuIC8oPzooPzpodHRwcz98ZnRwKTpcXC9cXC8pP1tcXHcvXFwtPz0lLl0rXFwuW1xcdy9cXC0mPz0lLl0rLy50ZXN0KFxuICAgICAgdGhpcy50ZXh0YXJlYVZhbHVlXG4gICAgKTtcbiAgfVxuXG4gIGdldCBxdW90ZWRNZXNzYWdlQXR0YWNobWVudHMoKSB7XG4gICAgY29uc3Qgb3JpZ2luYWxBdHRhY2htZW50cyA9IHRoaXMucXVvdGVkTWVzc2FnZT8uYXR0YWNobWVudHM7XG4gICAgcmV0dXJuIG9yaWdpbmFsQXR0YWNobWVudHMgJiYgb3JpZ2luYWxBdHRhY2htZW50cy5sZW5ndGhcbiAgICAgID8gW29yaWdpbmFsQXR0YWNobWVudHNbMF1dXG4gICAgICA6IFtdO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkVGV4dGFyZWFUZXh0KCkge1xuICAgIGlmICghdGhpcy5jYW5TZW5kTWVzc2FnZXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09ICd0aHJlYWQnXG4gICAgICAgID8gXCJzdHJlYW1DaGF0LllvdSBjYW4ndCBzZW5kIHRocmVhZCByZXBsaWVzIGluIHRoaXMgY2hhbm5lbFwiXG4gICAgICAgIDogXCJzdHJlYW1DaGF0LllvdSBjYW4ndCBzZW5kIG1lc3NhZ2VzIGluIHRoaXMgY2hhbm5lbFwiO1xuICAgIH1cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBhc3luYyBmaWxlc1NlbGVjdGVkKGZpbGVMaXN0OiBGaWxlTGlzdCB8IG51bGwpIHtcbiAgICBpZiAoIShhd2FpdCB0aGlzLmFyZUF0dGFjaGVtbnRzVmFsaWQoZmlsZUxpc3QpKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmZpbGVzU2VsZWN0ZWQoZmlsZUxpc3QpO1xuICAgIHRoaXMuY2xlYXJGaWxlSW5wdXQoKTtcbiAgfVxuXG4gIGRlc2VsZWN0TWVzc2FnZVRvUXVvdGUoKSB7XG4gICAgdGhpcy5jaGFubmVsU2VydmljZS5zZWxlY3RNZXNzYWdlVG9RdW90ZSh1bmRlZmluZWQpO1xuICB9XG5cbiAgZ2V0RW1vamlQaWNrZXJDb250ZXh0KCk6IEVtb2ppUGlja2VyQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVtb2ppSW5wdXQkOiB0aGlzLmVtb2ppSW5wdXRTZXJ2aWNlLmVtb2ppSW5wdXQkLFxuICAgIH07XG4gIH1cblxuICBnZXRBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0KCk6IEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBhdHRhY2htZW50VXBsb2FkcyQ6IHRoaXMuYXR0YWNobWVudFNlcnZpY2UuYXR0YWNobWVudFVwbG9hZHMkLFxuICAgICAgZGVsZXRlVXBsb2FkSGFuZGxlcjogdGhpcy5kZWxldGVVcGxvYWQuYmluZCh0aGlzKSxcbiAgICAgIHJldHJ5VXBsb2FkSGFuZGxlcjogdGhpcy5yZXRyeVVwbG9hZC5iaW5kKHRoaXMpLFxuICAgIH07XG4gIH1cblxuICBnZXRBdHRhY2htZW50VXBsb2FkQ29udGV4dCgpOiBDdXN0b21BdHRhY2htZW50VXBsb2FkQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTXVsdGlwbGVGaWxlVXBsb2FkRW5hYmxlZDogdGhpcy5pc011bHRpcGxlRmlsZVVwbG9hZEVuYWJsZWQsXG4gICAgICBhdHRhY2htZW50U2VydmljZTogdGhpcy5hdHRhY2htZW50U2VydmljZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBkZWxldGVVcGxvYWQodXBsb2FkOiBBdHRhY2htZW50VXBsb2FkKSB7XG4gICAgaWYgKHRoaXMuaXNVcGRhdGUpIHtcbiAgICAgIC8vIERlbGF5IGRlbGV0ZSB0byBhdm9pZCBtb2RhbCBkZXRlY3RpbmcgdGhpcyBjbGljayBhcyBvdXRzaWRlIGNsaWNrXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdm9pZCB0aGlzLmF0dGFjaG1lbnRTZXJ2aWNlLmRlbGV0ZUF0dGFjaG1lbnQodXBsb2FkKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIHRoaXMuYXR0YWNobWVudFNlcnZpY2UuZGVsZXRlQXR0YWNobWVudCh1cGxvYWQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmV0cnlVcGxvYWQoZmlsZTogRmlsZSkge1xuICAgIHZvaWQgdGhpcy5hdHRhY2htZW50U2VydmljZS5yZXRyeUF0dGFjaG1lbnRVcGxvYWQoZmlsZSk7XG4gIH1cblxuICBwcml2YXRlIGNsZWFyRmlsZUlucHV0KCkge1xuICAgIHRoaXMuZmlsZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGlzVXBkYXRlKCkge1xuICAgIHJldHVybiAhIXRoaXMubWVzc2FnZTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFRleHRhcmVhKCkge1xuICAgIC8vIGNsZWFudXAgcHJldmlvdXNseSBidWlsdCB0ZXh0YXJlYVxuICAgIGlmICghdGhpcy5jYW5TZW5kTWVzc2FnZXMpIHtcbiAgICAgIHRoaXMudGV4dGFyZWFSZWYgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNhblNlbmRNZXNzYWdlcyB8fCB0aGlzLnRleHRhcmVhUmVmIHx8ICF0aGlzLnRleHRhcmVhQW5jaG9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tcG9uZW50RmFjdG9yeSA9XG4gICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0aGlzLnRleHRhcmVhVHlwZSk7XG4gICAgdGhpcy50ZXh0YXJlYVJlZiA9XG4gICAgICB0aGlzLnRleHRhcmVhQW5jaG9yLnZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50PGFueT4oXG4gICAgICAgIGNvbXBvbmVudEZhY3RvcnlcbiAgICAgICk7XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFyZUF0dGFjaGVtbnRzVmFsaWQoZmlsZUxpc3Q6IEZpbGVMaXN0IHwgbnVsbCkge1xuICAgIGlmICghZmlsZUxpc3QpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuYXBwU2V0dGluZ3MpIHtcbiAgICAgIGF3YWl0IHRoaXMuY2hhdENsaWVudC5nZXRBcHBTZXR0aW5ncygpO1xuICAgIH1cbiAgICBsZXQgaXNWYWxpZCA9IHRydWU7XG4gICAgQXJyYXkuZnJvbShmaWxlTGlzdCkuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgbGV0IGhhc0Jsb2NrZWRFeHRlbnNpb246IGJvb2xlYW47XG4gICAgICBsZXQgaGFzQmxvY2tlZE1pbWVUeXBlOiBib29sZWFuO1xuICAgICAgbGV0IGhhc05vdEFsbG93ZWRFeHRlbnNpb246IGJvb2xlYW47XG4gICAgICBsZXQgaGFzTm90QWxsb3dlZE1pbWVUeXBlOiBib29sZWFuO1xuICAgICAgaWYgKGlzSW1hZ2VGaWxlKGYpKSB7XG4gICAgICAgIGhhc0Jsb2NrZWRFeHRlbnNpb24gPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc0Jsb2NrZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5ibG9ja2VkX21pbWVfdHlwZXM/LmZpbmQoXG4gICAgICAgICAgICAodHlwZSkgPT4gZi50eXBlID09PSB0eXBlXG4gICAgICAgICAgKTtcbiAgICAgICAgaGFzTm90QWxsb3dlZEV4dGVuc2lvbiA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX2ZpbGVfZXh0ZW5zaW9uc1xuICAgICAgICAgICAgPy5sZW5ndGggJiZcbiAgICAgICAgICAhdGhpcy5hcHBTZXR0aW5ncz8uaW1hZ2VfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9maWxlX2V4dGVuc2lvbnM/LmZpbmQoXG4gICAgICAgICAgICAoZXh0KSA9PiBmLm5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRNaW1lVHlwZSA9XG4gICAgICAgICAgISF0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX21pbWVfdHlwZXM/Lmxlbmd0aCAmJlxuICAgICAgICAgICF0aGlzLmFwcFNldHRpbmdzPy5pbWFnZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX21pbWVfdHlwZXM/LmZpbmQoXG4gICAgICAgICAgICAodHlwZSkgPT4gZi50eXBlID09PSB0eXBlXG4gICAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhhc0Jsb2NrZWRFeHRlbnNpb24gPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uZmlsZV91cGxvYWRfY29uZmlnPy5ibG9ja2VkX2ZpbGVfZXh0ZW5zaW9ucz8uZmluZChcbiAgICAgICAgICAgIChleHQpID0+IGYubmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgKTtcbiAgICAgICAgaGFzQmxvY2tlZE1pbWVUeXBlID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYmxvY2tlZF9taW1lX3R5cGVzPy5maW5kKFxuICAgICAgICAgICAgKHR5cGUpID0+IGYudHlwZSA9PT0gdHlwZVxuICAgICAgICAgICk7XG4gICAgICAgIGhhc05vdEFsbG93ZWRFeHRlbnNpb24gPVxuICAgICAgICAgICEhdGhpcy5hcHBTZXR0aW5ncz8uZmlsZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX2ZpbGVfZXh0ZW5zaW9uc1xuICAgICAgICAgICAgPy5sZW5ndGggJiZcbiAgICAgICAgICAhdGhpcy5hcHBTZXR0aW5ncz8uZmlsZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX2ZpbGVfZXh0ZW5zaW9ucz8uZmluZChcbiAgICAgICAgICAgIChleHQpID0+IGYubmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgKTtcbiAgICAgICAgaGFzTm90QWxsb3dlZE1pbWVUeXBlID1cbiAgICAgICAgICAhIXRoaXMuYXBwU2V0dGluZ3M/LmZpbGVfdXBsb2FkX2NvbmZpZz8uYWxsb3dlZF9taW1lX3R5cGVzPy5sZW5ndGggJiZcbiAgICAgICAgICAhdGhpcy5hcHBTZXR0aW5ncz8uZmlsZV91cGxvYWRfY29uZmlnPy5hbGxvd2VkX21pbWVfdHlwZXM/LmZpbmQoXG4gICAgICAgICAgICAodHlwZSkgPT4gZi50eXBlID09PSB0eXBlXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgaGFzQmxvY2tlZEV4dGVuc2lvbiB8fFxuICAgICAgICBoYXNCbG9ja2VkTWltZVR5cGUgfHxcbiAgICAgICAgaGFzTm90QWxsb3dlZEV4dGVuc2lvbiB8fFxuICAgICAgICBoYXNOb3RBbGxvd2VkTWltZVR5cGVcbiAgICAgICkge1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICdzdHJlYW1DaGF0LkVycm9yIHVwbG9hZGluZyBmaWxlLCBleHRlbnNpb24gbm90IHN1cHBvcnRlZCcsXG4gICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICB7IG5hbWU6IGYubmFtZSwgZXh0OiBmLnR5cGUgfVxuICAgICAgICApO1xuICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGlzVmFsaWQ7XG4gIH1cblxuICBwcml2YXRlIHNldENhblNlbmRNZXNzYWdlcygpIHtcbiAgICBjb25zdCBjYXBhYmlsaXRpZXMgPSB0aGlzLmNoYW5uZWw/LmRhdGE/Lm93bl9jYXBhYmlsaXRpZXMgYXMgc3RyaW5nW107XG4gICAgaWYgKCFjYXBhYmlsaXRpZXMpIHtcbiAgICAgIHRoaXMuY2FuU2VuZE1lc3NhZ2VzID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FuU2VuZE1lc3NhZ2VzID1cbiAgICAgICAgY2FwYWJpbGl0aWVzLmluZGV4T2YoXG4gICAgICAgICAgdGhpcy5tb2RlID09PSAnbWFpbicgPyAnc2VuZC1tZXNzYWdlJyA6ICdzZW5kLXJlcGx5J1xuICAgICAgICApICE9PSAtMTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuaW5pdFRleHRhcmVhKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXQgcGFyZW50TWVzc2FnZUlkKCkge1xuICAgIGxldCBwYXJlbnRNZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5tb2RlID09PSAndGhyZWFkJykge1xuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVQYXJlbnRNZXNzYWdlSWQkXG4gICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGlkKSA9PiAocGFyZW50TWVzc2FnZUlkID0gaWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50TWVzc2FnZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGFydENvb2xkb3duKGNvb2xkb3duOiBudW1iZXIpIHtcbiAgICB0aGlzLnRleHRhcmVhUGxhY2Vob2xkZXIgPSB0aGlzLnNsb3dNb2RlVGV4dGFyZWFQbGFjZWhvbGRlcjtcbiAgICB0aGlzLmlzQ29vbGRvd25JblByb2dyZXNzID0gdHJ1ZTtcbiAgICB0aGlzLmNvb2xkb3duJCA9IHRpbWVyKDAsIDEwMDApLnBpcGUoXG4gICAgICB0YWtlKGNvb2xkb3duICsgMSksXG4gICAgICBtYXAoKHYpID0+IGNvb2xkb3duIC0gdiksXG4gICAgICB0YXAoKHYpID0+IHtcbiAgICAgICAgaWYgKHYgPT09IDApIHtcbiAgICAgICAgICB0aGlzLnN0b3BDb29sZG93bigpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHN0b3BDb29sZG93bigpIHtcbiAgICB0aGlzLmNvb2xkb3duJCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmlzQ29vbGRvd25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgdGhpcy50ZXh0YXJlYVBsYWNlaG9sZGVyID0gdGhpcy5kZWZhdWx0VGV4dGFyZWFQbGFjZWhvbGRlcjtcbiAgfVxufVxuIiwiPGRpdlxuICAqbmdJZj1cInRoZW1lVmVyc2lvbiAhPT0gJzInXCJcbiAgY2xhc3M9XCJ7e1xuICAgIG1vZGUgPT09ICdtYWluJyA/ICdzdHItY2hhdF9faW5wdXQtZmxhdCcgOiAnc3RyLWNoYXRfX3NtYWxsLW1lc3NhZ2UtaW5wdXQnXG4gIH19XCJcbiAgW2NsYXNzLnN0ci1jaGF0X19pbnB1dC1mbGF0LWhhcy1hdHRhY2htZW50c109XCJcbiAgICAoYXR0YWNobWVudFVwbG9hZHMkIHwgYXN5bmMpIS5sZW5ndGggPiAwXG4gIFwiXG4gIFtjbGFzcy5zdHItY2hhdF9faW5wdXQtZmxhdC1xdW90ZWRdPVwiISFxdW90ZWRNZXNzYWdlXCJcbj5cbiAgPGRpdiBjbGFzcz1cInF1b3RlZC1tZXNzYWdlLXByZXZpZXdcIiAqbmdJZj1cInF1b3RlZE1lc3NhZ2VcIj5cbiAgICA8ZGl2IGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtcHJldmlldy1oZWFkZXJcIj5cbiAgICAgIDxkaXY+e3sgXCJzdHJlYW1DaGF0LlJlcGx5IHRvIE1lc3NhZ2VcIiB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19zcXVhcmUtYnV0dG9uXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJyZW1vdmUtcXVvdGVcIlxuICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RNZXNzYWdlVG9RdW90ZSgpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cImRlc2VsZWN0TWVzc2FnZVRvUXVvdGUoKVwiXG4gICAgICA+XG4gICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlclxuICAgICAgICAgIGljb249XCJjbG9zZS1uby1vdXRsaW5lXCJcbiAgICAgICAgPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicXVvdGVkLW1lc3NhZ2UtcHJldmlldy1jb250ZW50XCI+XG4gICAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgICBkYXRhLXRlc3RpZD1cInFvdXRlZC1tZXNzYWdlLWF2YXRhclwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXQtYW5ndWxhcl9fYXZhdGFyLWhvc3RcIlxuICAgICAgICBbaW1hZ2VVcmxdPVwicXVvdGVkTWVzc2FnZT8udXNlcj8uaW1hZ2VcIlxuICAgICAgICBbbmFtZV09XCJxdW90ZWRNZXNzYWdlPy51c2VyPy5uYW1lIHx8IHF1b3RlZE1lc3NhZ2U/LnVzZXI/LmlkXCJcbiAgICAgICAgW3NpemVdPVwiMjBcIlxuICAgICAgICB0eXBlPVwidXNlclwiXG4gICAgICAgIGxvY2F0aW9uPVwicXVvdGVkLW1lc3NhZ2Utc2VuZGVyXCJcbiAgICAgICAgW3VzZXJdPVwicXVvdGVkTWVzc2FnZT8udXNlciB8fCB1bmRlZmluZWRcIlxuICAgICAgPjwvc3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJxdW90ZWQtbWVzc2FnZS1wcmV2aWV3LWNvbnRlbnQtaW5uZXJcIj5cbiAgICAgICAgPHN0cmVhbS1hdHRhY2htZW50LWxpc3RcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgcXVvdGVkTWVzc2FnZT8uYXR0YWNobWVudHMgJiYgcXVvdGVkTWVzc2FnZT8uYXR0YWNobWVudHM/Lmxlbmd0aFxuICAgICAgICAgIFwiXG4gICAgICAgICAgW2F0dGFjaG1lbnRzXT1cInF1b3RlZE1lc3NhZ2VBdHRhY2htZW50c1wiXG4gICAgICAgICAgW21lc3NhZ2VJZF09XCJxdW90ZWRNZXNzYWdlPy5pZFwiXG4gICAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LWxpc3Q+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInF1b3RlZC1tZXNzYWdlLXRleHRcIlxuICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICBtZXNzYWdlPy5xdW90ZWRfbWVzc2FnZT8udHJhbnNsYXRpb24gfHxcbiAgICAgICAgICAgIHF1b3RlZE1lc3NhZ2U/Lmh0bWwgfHxcbiAgICAgICAgICAgIHF1b3RlZE1lc3NhZ2U/LnRleHRcbiAgICAgICAgICBcIlxuICAgICAgICA+PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9faW5wdXQtZmxhdC13cmFwcGVyXCI+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJ7e1xuICAgICAgICBtb2RlID09PSAnbWFpbidcbiAgICAgICAgICA/ICdzdHItY2hhdF9faW5wdXQtZmxhdC0tdGV4dGFyZWEtd3JhcHBlcidcbiAgICAgICAgICA6ICdzdHItY2hhdF9fc21hbGwtbWVzc2FnZS1pbnB1dC0tdGV4dGFyZWEtd3JhcHBlcidcbiAgICAgIH19XCJcbiAgICA+XG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgI2RlZmF1bHRBdHRhY2htZW50c1ByZXZpZXdcbiAgICAgICAgbGV0LWF0dGFjaG1lbnRVcGxvYWRzJD1cImF0dGFjaG1lbnRVcGxvYWRzJFwiXG4gICAgICAgIGxldC1yZXRyeVVwbG9hZEhhbmRsZXI9XCJyZXRyeVVwbG9hZEhhbmRsZXJcIlxuICAgICAgICBsZXQtZGVsZXRlVXBsb2FkSGFuZGxlcj1cImRlbGV0ZVVwbG9hZEhhbmRsZXJcIlxuICAgICAgPlxuICAgICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtcHJldmlldy1saXN0XG4gICAgICAgICAgW2F0dGFjaG1lbnRVcGxvYWRzJF09XCJhdHRhY2htZW50VXBsb2FkcyRcIlxuICAgICAgICAgIChyZXRyeUF0dGFjaG1lbnRVcGxvYWQpPVwicmV0cnlVcGxvYWRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgIChkZWxldGVBdHRhY2htZW50KT1cImRlbGV0ZVVwbG9hZEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJyZnUtaW1hZ2UtcHJldmlld2VyLWFuZ3VsYXItaG9zdFwiXG4gICAgICAgID48L3N0cmVhbS1hdHRhY2htZW50LXByZXZpZXctbGlzdD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRzUHJldmlldztcbiAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50UHJldmlld0xpc3RDb250ZXh0KClcbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJydGEgc3RyLWNoYXRfX3RleHRhcmVhIHN0ci1jaGF0LWFuZ3VsYXJfX3RleHRhcmVhXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbW9qaVBpY2tlclRlbXBsYXRlXCIgZGF0YS10ZXN0aWQ9XCJlbW9qaS1waWNrZXJcIj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBzdHItY2hhdF9faW5wdXQtZmxhdC1lbW9qaXNlbGVjdFxuICAgICAgICAgICAgICBzdHItY2hhdC1hbmd1bGFyX19lbW9qaXNlbGVjdFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgZW1vamlQaWNrZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBnZXRFbW9qaVBpY2tlckNvbnRleHQoKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNhblNlbmRNZXNzYWdlczsgZWxzZSBkaXNhYmxlZFRleHRhcmVhXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgc3RyZWFtVGV4dGFyZWFcbiAgICAgICAgICAgIFsodmFsdWUpXT1cInRleHRhcmVhVmFsdWVcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInR5cGluZ1N0YXJ0JC5uZXh0KClcIlxuICAgICAgICAgICAgKHNlbmQpPVwibWVzc2FnZVNlbnQoKVwiXG4gICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRleHRhcmVhUmVmXCJcbiAgICAgICAgICAgICh1c2VyTWVudGlvbnMpPVwibWVudGlvbmVkVXNlcnMgPSAkZXZlbnRcIlxuICAgICAgICAgICAgW2FyZU1lbnRpb25zRW5hYmxlZF09XCJhcmVNZW50aW9uc0VuYWJsZWRcIlxuICAgICAgICAgICAgW21lbnRpb25TY29wZV09XCJtZW50aW9uU2NvcGVcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInRleHRhcmVhUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgW2lucHV0TW9kZV09XCJpbnB1dE1vZGVcIlxuICAgICAgICAgICAgW2F1dG9Gb2N1c109XCJhdXRvRm9jdXNcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzYWJsZWRUZXh0YXJlYT5cbiAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgIGRpc2FibGVkXG4gICAgICAgICAgICByb3dzPVwiMVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiZGlzYWJsZWRUZXh0YXJlYVRleHQgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJydGFfX3RleHRhcmVhIHN0ci1jaGF0X190ZXh0YXJlYV9fdGV4dGFyZWFcIlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJkaXNhYmxlZC10ZXh0YXJlYVwiXG4gICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJpc0ZpbGVVcGxvYWRFbmFibGVkICYmIGlzRmlsZVVwbG9hZEF1dGhvcml6ZWQgJiYgY2FuU2VuZE1lc3NhZ2VzXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBjdXN0b21BdHRhY2htZW50VXBsb2FkVGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRVcGxvYWQ7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50VXBsb2FkQ29udGV4dCgpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRBdHRhY2htZW50VXBsb2FkPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2ZpbGV1cGxvYWQtd3JhcHBlclwiXG4gICAgICAgICAgICBkYXRhLXRlc3RpZD1cImZpbGUtdXBsb2FkLWJ1dHRvblwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190b29sdGlwXCI+XG4gICAgICAgICAgICAgIHt7IFwic3RyZWFtQ2hhdC5BdHRhY2ggZmlsZXNcIiB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmZ1LWZpbGUtdXBsb2FkLWJ1dHRvblwiPlxuICAgICAgICAgICAgICA8bGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAjZmlsZUlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJmdS1maWxlLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZmlsZS1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiZmlsZXNTZWxlY3RlZChmaWxlSW5wdXQuZmlsZXMpXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3RyLWNoYXRfX2lucHV0LWZsYXQtZmlsZXVwbG9hZFwiPlxuICAgICAgICAgICAgICAgICAgPHN0cmVhbS1pY29uLXBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJmaWxlLXVwbG9hZFwiXG4gICAgICAgICAgICAgICAgICA+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxidXR0b25cbiAgICAgICpuZ0lmPVwiY2FuU2VuZE1lc3NhZ2VzICYmICFpc0Nvb2xkb3duSW5Qcm9ncmVzc1wiXG4gICAgICBkYXRhLXRlc3RpZD1cInNlbmQtYnV0dG9uXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3NlbmQtYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJtZXNzYWdlU2VudCgpXCJcbiAgICAgIChrZXl1cC5lbnRlcik9XCJtZXNzYWdlU2VudCgpXCJcbiAgICA+XG4gICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fc2VuZC1idXR0b24tYW5ndWxhclwiXG4gICAgICAgIGljb249XCJzZW5kXCJcbiAgICAgID48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2lucHV0LWZsYXQtY29vbGRvd25cIlxuICAgICAgKm5nSWY9XCJpc0Nvb2xkb3duSW5Qcm9ncmVzc1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImNvb2xkb3duLXRpbWVyXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtaW5wdXQtY29vbGRvd24tdGV4dFwiPlxuICAgICAgICB7eyBjb29sZG93biQgfCBhc3luYyB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxkaXZcbiAgKm5nSWY9XCJ0aGVtZVZlcnNpb24gPT09ICcyJ1wiXG4gIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtaW5wdXQgc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1pbnB1dFwiXG4+XG4gIDxkaXYgKm5nSWY9XCJxdW90ZWRNZXNzYWdlXCIgY2xhc3M9XCJzdHItY2hhdF9fcXVvdGVkLW1lc3NhZ2UtcHJldmlldy1oZWFkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3F1b3RlZC1tZXNzYWdlLXJlcGx5LXRvLW1lc3NhZ2VcIj5cbiAgICAgIHt7IFwic3RyZWFtQ2hhdC5SZXBseSB0byBNZXNzYWdlXCIgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19xdW90ZWQtbWVzc2FnZS1yZW1vdmVcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJyZW1vdmUtcXVvdGVcIlxuICAgICAgKGNsaWNrKT1cImRlc2VsZWN0TWVzc2FnZVRvUXVvdGUoKVwiXG4gICAgICAoa2V5dXAuZW50ZXIpPVwiZGVzZWxlY3RNZXNzYWdlVG9RdW90ZSgpXCJcbiAgICA+XG4gICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXJcbiAgICAgICAgaWNvbj1cImNsb3NlLW5vLW91dGxpbmVcIlxuICAgICAgPjwvc3RyZWFtLWljb24tcGxhY2Vob2xkZXI+XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuU2VuZE1lc3NhZ2VzOyBlbHNlIG5vdEFsbG93ZWRcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIlxuICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS1pbnB1dC1pbm5lclxuICAgICAgICBzdHItY2hhdC1hbmd1bGFyX19tZXNzYWdlLWlucHV0LWlubmVyXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nSWY9XCJpc0ZpbGVVcGxvYWRFbmFibGVkICYmIGlzRmlsZVVwbG9hZEF1dGhvcml6ZWQgJiYgY2FuU2VuZE1lc3NhZ2VzXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBjdXN0b21BdHRhY2htZW50VXBsb2FkVGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRVcGxvYWQ7XG4gICAgICAgICAgICBjb250ZXh0OiBnZXRBdHRhY2htZW50VXBsb2FkQ29udGV4dCgpXG4gICAgICAgICAgXCJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRBdHRhY2htZW50VXBsb2FkPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2ZpbGUtaW5wdXQtY29udGFpbmVyXCJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwiZmlsZS11cGxvYWQtYnV0dG9uXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgI2ZpbGVJbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2ZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgICBkYXRhLXRlc3RpZD1cImZpbGUtaW5wdXRcIlxuICAgICAgICAgICAgICBbbXVsdGlwbGVdPVwiaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkXCJcbiAgICAgICAgICAgICAgKGNoYW5nZSk9XCJmaWxlc1NlbGVjdGVkKGZpbGVJbnB1dC5maWxlcylcIlxuICAgICAgICAgICAgICBpZD1cInt7IGZpbGVJbnB1dElkIH19XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzdHItY2hhdF9fZmlsZS1pbnB1dC1sYWJlbFwiIGZvcj1cInt7IGZpbGVJbnB1dElkIH19XCI+XG4gICAgICAgICAgICAgIDxzdHJlYW0taWNvbi1wbGFjZWhvbGRlciBpY29uPVwiYXR0YWNoXCI+PC9zdHJlYW0taWNvbi1wbGFjZWhvbGRlcj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS10ZXh0YXJlYS1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVvdGVkLW1lc3NhZ2UtY29udGFpbmVyXCJcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19xdW90ZWQtbWVzc2FnZS1wcmV2aWV3XCJcbiAgICAgICAgICAqbmdJZj1cInF1b3RlZE1lc3NhZ2VcIlxuICAgICAgICA+XG4gICAgICAgICAgPHN0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXJcbiAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicW91dGVkLW1lc3NhZ2UtYXZhdGFyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiXG4gICAgICAgICAgICAgIHN0ci1jaGF0LWFuZ3VsYXJfX2F2YXRhci1ob3N0XG4gICAgICAgICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXNlbmRlci1hdmF0YXJcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbaW1hZ2VVcmxdPVwicXVvdGVkTWVzc2FnZT8udXNlcj8uaW1hZ2VcIlxuICAgICAgICAgICAgW25hbWVdPVwicXVvdGVkTWVzc2FnZT8udXNlcj8ubmFtZSB8fCBxdW90ZWRNZXNzYWdlPy51c2VyPy5pZFwiXG4gICAgICAgICAgICBbc2l6ZV09XCIyMFwiXG4gICAgICAgICAgICB0eXBlPVwidXNlclwiXG4gICAgICAgICAgICBsb2NhdGlvbj1cInF1b3RlZC1tZXNzYWdlLXNlbmRlclwiXG4gICAgICAgICAgICBbdXNlcl09XCJxdW90ZWRNZXNzYWdlPy51c2VyIHx8IHVuZGVmaW5lZFwiXG4gICAgICAgICAgPjwvc3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlcj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIlxuICAgICAgICAgICAgICBxdW90ZWQtbWVzc2FnZS1wcmV2aWV3LWNvbnRlbnQtaW5uZXJcbiAgICAgICAgICAgICAgc3RyLWNoYXRfX3F1b3RlZC1tZXNzYWdlLWJ1YmJsZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8c3RyZWFtLWF0dGFjaG1lbnQtbGlzdFxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgIHF1b3RlZE1lc3NhZ2U/LmF0dGFjaG1lbnRzICYmIHF1b3RlZE1lc3NhZ2U/LmF0dGFjaG1lbnRzPy5sZW5ndGhcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgW2F0dGFjaG1lbnRzXT1cInF1b3RlZE1lc3NhZ2VBdHRhY2htZW50c1wiXG4gICAgICAgICAgICAgIFttZXNzYWdlSWRdPVwicXVvdGVkTWVzc2FnZT8uaWRcIlxuICAgICAgICAgICAgPjwvc3RyZWFtLWF0dGFjaG1lbnQtbGlzdD5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fcXVvdGVkLW1lc3NhZ2UtdGV4dFwiXG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwicXVvdGVkLW1lc3NhZ2UtdGV4dFwiXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgcXVvdGVkTWVzc2FnZT8udHJhbnNsYXRpb24gfHxcbiAgICAgICAgICAgICAgICBxdW90ZWRNZXNzYWdlPy5odG1sIHx8XG4gICAgICAgICAgICAgICAgcXVvdGVkTWVzc2FnZT8udGV4dFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICAgI2RlZmF1bHRBdHRhY2htZW50c1ByZXZpZXdcbiAgICAgICAgICBsZXQtYXR0YWNobWVudFVwbG9hZHMkPVwiYXR0YWNobWVudFVwbG9hZHMkXCJcbiAgICAgICAgICBsZXQtcmV0cnlVcGxvYWRIYW5kbGVyPVwicmV0cnlVcGxvYWRIYW5kbGVyXCJcbiAgICAgICAgICBsZXQtZGVsZXRlVXBsb2FkSGFuZGxlcj1cImRlbGV0ZVVwbG9hZEhhbmRsZXJcIlxuICAgICAgICA+XG4gICAgICAgICAgPHN0cmVhbS1hdHRhY2htZW50LXByZXZpZXctbGlzdFxuICAgICAgICAgICAgW2F0dGFjaG1lbnRVcGxvYWRzJF09XCJhdHRhY2htZW50VXBsb2FkcyRcIlxuICAgICAgICAgICAgKHJldHJ5QXR0YWNobWVudFVwbG9hZCk9XCJyZXRyeVVwbG9hZEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAoZGVsZXRlQXR0YWNobWVudCk9XCJkZWxldGVVcGxvYWRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXR0YWNobWVudC1wcmV2aWV3LWxpc3QtYW5ndWxhci1ob3N0XCJcbiAgICAgICAgICA+PC9zdHJlYW0tYXR0YWNobWVudC1wcmV2aWV3LWxpc3Q+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgYXR0YWNobWVudFByZXZpZXdMaXN0VGVtcGxhdGUgfHwgZGVmYXVsdEF0dGFjaG1lbnRzUHJldmlldztcbiAgICAgICAgICAgIGNvbnRleHQ6IGdldEF0dGFjaG1lbnRQcmV2aWV3TGlzdENvbnRleHQoKVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLXRleHRhcmVhLXdpdGgtZW1vamktcGlja2VyXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgc3RyZWFtVGV4dGFyZWFcbiAgICAgICAgICAgIFsodmFsdWUpXT1cInRleHRhcmVhVmFsdWVcIlxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInR5cGluZ1N0YXJ0JC5uZXh0KClcIlxuICAgICAgICAgICAgKHNlbmQpPVwibWVzc2FnZVNlbnQoKVwiXG4gICAgICAgICAgICBbY29tcG9uZW50UmVmXT1cInRleHRhcmVhUmVmXCJcbiAgICAgICAgICAgICh1c2VyTWVudGlvbnMpPVwibWVudGlvbmVkVXNlcnMgPSAkZXZlbnRcIlxuICAgICAgICAgICAgW2FyZU1lbnRpb25zRW5hYmxlZF09XCJhcmVNZW50aW9uc0VuYWJsZWRcIlxuICAgICAgICAgICAgW21lbnRpb25TY29wZV09XCJtZW50aW9uU2NvcGVcIlxuICAgICAgICAgICAgW2lucHV0TW9kZV09XCJpbnB1dE1vZGVcIlxuICAgICAgICAgICAgW2F1dG9Gb2N1c109XCJhdXRvRm9jdXNcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInRleHRhcmVhUGxhY2Vob2xkZXJcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW1vamlQaWNrZXJUZW1wbGF0ZVwiIGRhdGEtdGVzdGlkPVwiZW1vamktcGlja2VyXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgZW1vamlQaWNrZXJUZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBnZXRFbW9qaVBpY2tlckNvbnRleHQoKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICAqbmdJZj1cImNhblNlbmRNZXNzYWdlcyAmJiAhaXNDb29sZG93bkluUHJvZ3Jlc3MgJiYgIW1lc3NhZ2VcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgKGF0dGFjaG1lbnRVcGxvYWRJblByb2dyZXNzQ291bnRlciQgfCBhc3luYykhID4gMCB8fFxuICAgICAgICAgICghdGV4dGFyZWFWYWx1ZSAmJiAoYXR0YWNobWVudFVwbG9hZHMkIHwgYXN5bmMpIS5sZW5ndGggPT09IDApXG4gICAgICAgIFwiXG4gICAgICAgIGRhdGEtdGVzdGlkPVwic2VuZC1idXR0b25cIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19zZW5kLWJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJtZXNzYWdlU2VudCgpXCJcbiAgICAgICAgKGtleXVwLmVudGVyKT1cIm1lc3NhZ2VTZW50KClcIlxuICAgICAgPlxuICAgICAgICA8c3RyZWFtLWljb24tcGxhY2Vob2xkZXIgaWNvbj1cInNlbmRcIj48L3N0cmVhbS1pY29uLXBsYWNlaG9sZGVyPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtaW5wdXQtY29vbGRvd25cIlxuICAgICAgICAqbmdJZj1cImlzQ29vbGRvd25JblByb2dyZXNzXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJjb29sZG93bi10aW1lclwiXG4gICAgICA+XG4gICAgICAgIHt7IGNvb2xkb3duJCB8IGFzeW5jIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG4gIDxuZy10ZW1wbGF0ZSAjbm90QWxsb3dlZD5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWlucHV0LW5vdC1hbGxvd2VkXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiZGlzYWJsZWQtdGV4dGFyZWFcIlxuICAgID5cbiAgICAgIHt7IGRpc2FibGVkVGV4dGFyZWFUZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG48L2Rpdj5cbiJdfQ==