igniteui-angular 14.0.11 → 14.0.14

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.
@@ -110,8 +110,13 @@ export class IgxGridNavigationService {
110
110
  if (shouldClearSelection || (this.grid.cellSelection !== GridSelectionMode.multiple)) {
111
111
  this.grid.clearCellSelection();
112
112
  this.grid.navigateTo(this.activeNode.row, this.activeNode.column, (obj) => {
113
- obj.target?.activate(event);
114
- this.grid.cdr.detectChanges();
113
+ if (this.activeNode.row === obj.target.row.index) {
114
+ obj.target?.activate(event);
115
+ this.grid.cdr.detectChanges();
116
+ }
117
+ else {
118
+ this.grid.navigateTo(this.activeNode.row, this.activeNode.column);
119
+ }
115
120
  });
116
121
  }
117
122
  else {
@@ -736,4 +741,4 @@ IgxGridNavigationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0
736
741
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: IgxGridNavigationService, decorators: [{
737
742
  type: Injectable
738
743
  }], ctorParameters: function () { return [{ type: i1.PlatformUtil }]; } });
739
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUNILGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFFZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXlCLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXRGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFjdkUsY0FBYztBQUVkLE1BQU0sT0FBTyx3QkFBd0I7SUFjakMsWUFBc0IsUUFBc0I7UUFBdEIsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQVpyQyxnQkFBVyxHQUFnQixFQUFpQixDQUFDO1FBQzdDLG1CQUFjLEdBQWdCLEVBQWlCLENBQUM7UUFDN0Msc0JBQWlCLEdBQUcsS0FBSyxDQUFDO0lBVVksQ0FBQztJQVJqRCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLFVBQVUsQ0FBQyxLQUFrQjtRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBSU0sZ0JBQWdCLENBQUMsS0FBb0I7UUFDeEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFD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RyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUN6RyxDQUFDO0lBRU8sV0FBVyxDQUFDLEdBQVc7UUFDM0IsT0FBTyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQVc7UUFDeEIsT0FBTyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7O3FIQWp3QlEsd0JBQXdCO3lIQUF4Qix3QkFBd0I7MkZBQXhCLHdCQUF3QjtrQkFEcEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpcnN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSWd4Rm9yT2ZEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2Zvci1vZi9mb3Jfb2YuZGlyZWN0aXZlJztcbmltcG9ydCB7IEdyaWRUeXBlIH0gZnJvbSAnLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgICBOQVZJR0FUSU9OX0tFWVMsXG4gICAgUk9XX0NPTExBUFNFX0tFWVMsXG4gICAgUk9XX0VYUEFORF9LRVlTLFxuICAgIFNVUFBPUlRFRF9LRVlTLFxuICAgIEhPUklaT05UQUxfTkFWX0tFWVMsXG4gICAgSEVBREVSX0tFWVMsXG4gICAgUk9XX0FERF9LRVlTLFxuICAgIFBsYXRmb3JtVXRpbFxufSBmcm9tICcuLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSwgR3JpZFNlbGVjdGlvbk1vZGUsIEZpbHRlck1vZGUgfSBmcm9tICcuL2NvbW1vbi9lbnVtcyc7XG5pbXBvcnQgeyBJQWN0aXZlTm9kZUNoYW5nZUV2ZW50QXJncyB9IGZyb20gJy4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBJZ3hHcmlkR3JvdXBCeVJvd0NvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC9ncm91cGJ5LXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSU11bHRpUm93TGF5b3V0Tm9kZSB9IGZyb20gJy4vY29tbW9uL3R5cGVzJztcbmltcG9ydCB7IFNvcnRpbmdEaXJlY3Rpb24gfSBmcm9tICcuLi9kYXRhLW9wZXJhdGlvbnMvc29ydGluZy1zdHJhdGVneSc7XG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbkdyb3Vwc0NhY2hlIHtcbiAgICBsZXZlbDogbnVtYmVyO1xuICAgIHZpc2libGVJbmRleDogbnVtYmVyO1xufVxuZXhwb3J0IGludGVyZmFjZSBJQWN0aXZlTm9kZSB7XG4gICAgZ3JpZElEPzogc3RyaW5nO1xuICAgIHJvdzogbnVtYmVyO1xuICAgIGNvbHVtbj86IG51bWJlcjtcbiAgICBsZXZlbD86IG51bWJlcjtcbiAgICBtY2hDYWNoZT86IENvbHVtbkdyb3Vwc0NhY2hlO1xuICAgIGxheW91dD86IElNdWx0aVJvd0xheW91dE5vZGU7XG59XG5cbi8qKiBAaGlkZGVuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZE5hdmlnYXRpb25TZXJ2aWNlIHtcbiAgICBwdWJsaWMgZ3JpZDogR3JpZFR5cGU7XG4gICAgcHVibGljIF9hY3RpdmVOb2RlOiBJQWN0aXZlTm9kZSA9IHt9IGFzIElBY3RpdmVOb2RlO1xuICAgIHB1YmxpYyBsYXN0QWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUgPSB7fSBhcyBJQWN0aXZlTm9kZTtcbiAgICBwcm90ZWN0ZWQgcGVuZGluZ05hdmlnYXRpb24gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBnZXQgYWN0aXZlTm9kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBhY3RpdmVOb2RlKHZhbHVlOiBJQWN0aXZlTm9kZSkge1xuICAgICAgICB0aGlzLl9hY3RpdmVOb2RlID0gdmFsdWU7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwpIHsgfVxuXG4gICAgcHVibGljIGhhbmRsZU5hdmlnYXRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCAmJiBOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQucmVwZWF0ICYmIFNVUFBPUlRFRF9LRVlTLmhhcyhrZXkpIHx8IChrZXkgPT09ICd0YWInICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQucmVwZWF0KSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCksIDEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkaXNwYXRjaEV2ZW50KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSB8fCAhKFNVUFBPUlRFRF9LRVlTLmhhcyhrZXkpIHx8IChrZXkgPT09ICd0YWInICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsKSkgJiZcbiAgICAgICAgICAgICF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93RWRpdGluZ0Jsb2NrZWQgJiYgIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2hpZnQgPSBldmVudC5zaGlmdEtleTtcbiAgICAgICAgY29uc3QgY3RybCA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkgJiYgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbikge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLmlzRGF0YVJvdyh0aGlzLmFjdGl2ZU5vZGUucm93KSA/ICdkYXRhQ2VsbCcgOlxuICAgICAgICAgICAgdGhpcy5pc0RhdGFSb3codGhpcy5hY3RpdmVOb2RlLnJvdywgdHJ1ZSkgPyAnc3VtbWFyeUNlbGwnIDogJ2dyb3VwUm93JztcbiAgICAgICAgaWYgKHRoaXMuZW1pdEtleURvd24odHlwZSwgdGhpcy5hY3RpdmVOb2RlLnJvdywgZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmFsdEtleSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVBbHQoa2V5LCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFsnICcsICdzcGFjZWJhcicsICdzcGFjZSddLmluZGV4T2Yoa2V5KSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmtleWJvYXJkU3RhdGVPbktleWRvd24odGhpcy5hY3RpdmVOb2RlLCBzaGlmdCwgc2hpZnQgJiYga2V5ID09PSAndGFiJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLmdldE5leHRQb3NpdGlvbih0aGlzLmFjdGl2ZU5vZGUucm93LCB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBrZXksIHNoaWZ0LCBjdHJsLCBldmVudCk7XG4gICAgICAgIGlmIChOQVZJR0FUSU9OX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlSW5Cb2R5KHBvc2l0aW9uLnJvd0luZGV4LCBwb3NpdGlvbi5jb2xJbmRleCwgKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIG9iai50YXJnZXQuYWN0aXZhdGUoZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHN1bW1hcnlOYXYoZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNTdW1tYXJpemVkQ29sdW1ucykge1xuICAgICAgICAgICAgdGhpcy5ob3Jpem9udGFsTmF2KGV2ZW50LCBldmVudC5rZXkudG9Mb3dlckNhc2UoKSwgdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCwgJ3N1bW1hcnlDZWxsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGVhZGVyTmF2aWdhdGlvbihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCFIRUFERVJfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgY3RybCA9IGV2ZW50LmN0cmxLZXk7XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gZXZlbnQuc2hpZnRLZXk7XG4gICAgICAgIGNvbnN0IGFsdCA9IGV2ZW50LmFsdEtleTtcblxuICAgICAgICB0aGlzLnBlcmZvcm1IZWFkZXJLZXlDb21iaW5hdGlvbih0aGlzLmN1cnJlbnRBY3RpdmVDb2x1bW4sIGtleSwgc2hpZnQsIGN0cmwsIGFsdCwgZXZlbnQpO1xuICAgICAgICBpZiAoc2hpZnQgfHwgYWx0IHx8IChjdHJsICYmIChrZXkuaW5jbHVkZXMoJ2Rvd24nKSB8fCBrZXkuaW5jbHVkZXMoJ2Rvd24nKSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5oYXNDb2x1bW5Hcm91cHMpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlTUNIZWFkZXJOYXYoa2V5LCBjdHJsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbE5hdihldmVudCwga2V5LCAtMSwgJ2hlYWRlckNlbGwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c1Rib2R5KGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGdyaWRSb3dzID0gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnRvdGFsSXRlbUNvdW50ID8/IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGg7XG4gICAgICAgIGlmIChncmlkUm93cyA8IDEpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZSA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUgfHwgIU9iamVjdC5rZXlzKHRoaXMuYWN0aXZlTm9kZSkubGVuZ3RoIHx8IHRoaXMuYWN0aXZlTm9kZS5yb3cgPCAwIHx8IHRoaXMuYWN0aXZlTm9kZS5yb3cgPiBncmlkUm93cyAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0xhc3RBY3RpdmVOb2RlID0gT2JqZWN0LmtleXModGhpcy5sYXN0QWN0aXZlTm9kZSkubGVuZ3RoO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkQ2xlYXJTZWxlY3Rpb24gPSBoYXNMYXN0QWN0aXZlTm9kZSAmJiAodGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cgPCAwIHx8IHRoaXMubGFzdEFjdGl2ZU5vZGUucm93ID4gZ3JpZFJvd3MgLSAxKTtcbiAgICAgICAgICAgIHRoaXMuc2V0QWN0aXZlTm9kZSh0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyA+PSAwICYmIHRoaXMubGFzdEFjdGl2ZU5vZGUucm93IDwgZ3JpZFJvd3MgP1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RWaXNpYmxlTm9kZSh0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdykgOiB0aGlzLmZpcnN0VmlzaWJsZU5vZGUoKSk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkQ2xlYXJTZWxlY3Rpb24gfHwgKHRoaXMuZ3JpZC5jZWxsU2VsZWN0aW9uICE9PSBHcmlkU2VsZWN0aW9uTW9kZS5tdWx0aXBsZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY2xlYXJDZWxsU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8odGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiwgKG9iaikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYmoudGFyZ2V0Py5hY3RpdmF0ZShldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYW5nZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgcm93U3RhcnQ6IHRoaXMuYWN0aXZlTm9kZS5yb3csIHJvd0VuZDogdGhpcy5hY3RpdmVOb2RlLnJvdyxcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uU3RhcnQ6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sIGNvbHVtbkVuZDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtblxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdFJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGZvY3VzRmlyc3RDZWxsKGhlYWRlciA9IHRydWUpIHtcbiAgICAgICAgaWYgKChoZWFkZXIgfHwgdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCkgJiYgdGhpcy5hY3RpdmVOb2RlICYmXG4gICAgICAgICAgICAodGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gLTEgfHwgdGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgICghaGVhZGVyICYmICF0aGlzLmdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnMpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNob3VsZFNjcm9sbEludG9WaWV3ID0gdGhpcy5sYXN0QWN0aXZlTm9kZSAmJiAoaGVhZGVyICYmIHRoaXMubGFzdEFjdGl2ZU5vZGUucm93ICE9PSAtMSkgfHxcbiAgICAgICAgICAgICghaGVhZGVyICYmIHRoaXMubGFzdEFjdGl2ZU5vZGUucm93ICE9PSB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVOb2RlKHRoaXMuZmlyc3RWaXNpYmxlTm9kZShoZWFkZXIgPyAtMSA6IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGgpKTtcbiAgICAgICAgaWYgKHNob3VsZFNjcm9sbEludG9WaWV3KSB7XG4gICAgICAgICAgICB0aGlzLnBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsVG9DZWxsKHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzQ29sdW1uRnVsbHlWaXNpYmxlKGNvbHVtbkluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKGNvbHVtbkluZGV4IDwgMCB8fCB0aGlzLmlzQ29sdW1uUGlubmVkKGNvbHVtbkluZGV4LCB0aGlzLmZvck9mRGlyKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0Q29sdW1uVW5waW5uZWRJbmRleChjb2x1bW5JbmRleCk7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5mb3JPZkRpcigpLmdldENvbHVtblNjcm9sbExlZnQoaW5kZXggKyAxKSAtIHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4KTtcbiAgICAgICAgaWYgKHRoaXMuZGlzcGxheUNvbnRhaW5lcldpZHRoIDwgd2lkdGggJiYgdGhpcy5kaXNwbGF5Q29udGFpbmVyU2Nyb2xsTGVmdCA9PT0gdGhpcy5mb3JPZkRpcigpLmdldENvbHVtblNjcm9sbExlZnQoaW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5Q29udGFpbmVyV2lkdGggPj0gdGhpcy5mb3JPZkRpcigpLmdldENvbHVtblNjcm9sbExlZnQoaW5kZXggKyAxKSAtIHRoaXMuZGlzcGxheUNvbnRhaW5lclNjcm9sbExlZnQgJiZcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheUNvbnRhaW5lclNjcm9sbExlZnQgPD0gdGhpcy5mb3JPZkRpcigpLmdldENvbHVtblNjcm9sbExlZnQoaW5kZXgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG91bGRQZXJmb3JtSG9yaXpvbnRhbFNjcm9sbCh2aXNpYmxlQ29sSW5kZXg6IG51bWJlciwgcm93SW5kZXggPSAtMSkge1xuICAgICAgICBpZiAodmlzaWJsZUNvbEluZGV4IDwgMCB8fCB2aXNpYmxlQ29sSW5kZXggPiB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dJbmRleCA8IDAgfHwgcm93SW5kZXggPiB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmlzQ29sdW1uRnVsbHlWaXNpYmxlKHZpc2libGVDb2xJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ncmlkLmRhdGFWaWV3W3Jvd0luZGV4XTtcbiAgICAgICAgcmV0dXJuIHJvdy5leHByZXNzaW9uIHx8IHJvdy5kZXRhaWxzRGF0YSA/IGZhbHNlIDogIXRoaXMuaXNDb2x1bW5GdWxseVZpc2libGUodmlzaWJsZUNvbEluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKHRhcmdldFJvd0luZGV4OiBudW1iZXIsIHZpc2libGVDb2xJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaXNSZWNvcmRQaW5uZWRCeVZpZXdJbmRleCh0YXJnZXRSb3dJbmRleCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzY3JvbGxSb3dJbmRleCA9IHRoaXMuZ3JpZC5oYXNQaW5uZWRSZWNvcmRzICYmIHRoaXMuZ3JpZC5pc1Jvd1Bpbm5pbmdUb1RvcCA/XG4gICAgICAgICAgICB0YXJnZXRSb3dJbmRleCAtIHRoaXMuZ3JpZC5waW5uZWREYXRhVmlldy5sZW5ndGggOiB0YXJnZXRSb3dJbmRleDtcbiAgICAgICAgY29uc3QgdGFyZ2V0Um93ID0gdGhpcy5nZXRSb3dFbGVtZW50QnlJbmRleCh0YXJnZXRSb3dJbmRleCk7XG4gICAgICAgIGNvbnN0IHJvd0hlaWdodCA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5nZXRTaXplQXQoc2Nyb2xsUm93SW5kZXgpO1xuICAgICAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSB0aGlzLmdyaWQuY2FsY0hlaWdodCA/IE1hdGguY2VpbCh0aGlzLmdyaWQuY2FsY0hlaWdodCkgOiAwO1xuICAgICAgICBjb25zdCBlbmRUb3BPZmZzZXQgPSB0YXJnZXRSb3cgPyB0YXJnZXRSb3cub2Zmc2V0VG9wICsgcm93SGVpZ2h0ICsgdGhpcy5jb250YWluZXJUb3BPZmZzZXQgOiBjb250YWluZXJIZWlnaHQgKyByb3dIZWlnaHQ7XG4gICAgICAgIC8vIHRoaXMgaXMgd29ya2Fyb3VuZDogZW5kVG9wT2Zmc2V0IC0gY29udGFpbmVySGVpZ2h0ID4gNSBhbmQgc2hvdWxkIGJlIHJlcGxhY2VkIHdpdGg6IGNvbnRhaW5lckhlaWdodCA8IGVuZFRvcE9mZnNldFxuICAgICAgICAvLyB3aGVuIHRoZSBwYWdlIGlzIHpvb21lZCB0aGUgZ3JpZCBkb2VzIG5vdCBzY3JvbGwgdGhlIHJvdyBjb21wbGV0ZWx5IGluIHRoZSB2aWV3XG4gICAgICAgIHJldHVybiAhdGFyZ2V0Um93IHx8IHRhcmdldFJvdy5vZmZzZXRUb3AgPCBNYXRoLmFicyh0aGlzLmNvbnRhaW5lclRvcE9mZnNldClcbiAgICAgICAgICAgIHx8IGNvbnRhaW5lckhlaWdodCAmJiBlbmRUb3BPZmZzZXQgLSBjb250YWluZXJIZWlnaHQgPiA1O1xuICAgIH1cblxuICAgIHB1YmxpYyBwZXJmb3JtVmVydGljYWxTY3JvbGxUb0NlbGwocm93SW5kZXg6IG51bWJlciwgdmlzaWJsZUNvbEluZGV4ID0gLTEsIGNiPzogKCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgIC8vIE9ubHkgZm9yIHRvcCBwaW5uaW5nIHdlIG5lZWQgdG8gc3VidHJhY3QgcGlubmVkIGNvdW50IGJlY2F1c2UgdmlydHVhbGl6YXRpb24gaW5kZXhpbmcgZG9lc24ndCBjb3VudCBwaW5uZWQgcm93cy5cbiAgICAgICAgY29uc3Qgc2Nyb2xsUm93SW5kZXggPSB0aGlzLmdyaWQuaGFzUGlubmVkUmVjb3JkcyAmJiB0aGlzLmdyaWQuaXNSb3dQaW5uaW5nVG9Ub3AgP1xuICAgICAgICAgICAgcm93SW5kZXggLSB0aGlzLmdyaWQucGlubmVkRGF0YVZpZXcubGVuZ3RoIDogcm93SW5kZXg7XG4gICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5zY3JvbGxUbyhzY3JvbGxSb3dJbmRleCk7XG4gICAgICAgIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5jaHVua0xvYWRcbiAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlmIChjYikge1xuICAgICAgICAgICAgICAgICAgICBjYigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBwZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbCh2aXNpYmxlQ29sdW1uSW5kZXg6IG51bWJlciwgY2I/OiAoKSA9PiB2b2lkKSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQucm93TGlzdCA8IDEgJiYgdGhpcy5ncmlkLnN1bW1hcmllc1Jvd0xpc3QubGVuZ3RoIDwgMSAmJiB0aGlzLmdyaWQuaGFzQ29sdW1uR3JvdXBzKSB7XG4gICAgICAgICAgICBsZXQgY29sdW1uID0gdGhpcy5ncmlkLmdldENvbHVtbkJ5VmlzaWJsZUluZGV4KHZpc2libGVDb2x1bW5JbmRleCk7XG4gICAgICAgICAgICB3aGlsZSAoY29sdW1uLnBhcmVudCkge1xuICAgICAgICAgICAgICAgIGNvbHVtbiA9IGNvbHVtbi5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uSW5kZXggPSB0aGlzLmZvck9mRGlyKCkuaWd4Rm9yT2YuaW5kZXhPZihjb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5zaG91bGRQZXJmb3JtSG9yaXpvbnRhbFNjcm9sbCh2aXNpYmxlQ29sdW1uSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nTmF2aWdhdGlvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuZ3JpZC5wYXJlbnRWaXJ0RGlyLmNodW5rTG9hZFxuICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5mb3JPZkRpcigpLnNjcm9sbFRvKHRoaXMuZ2V0Q29sdW1uVW5waW5uZWRJbmRleCh2aXNpYmxlQ29sdW1uSW5kZXgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNEYXRhUm93KHJvd0luZGV4OiBudW1iZXIsIGluY2x1ZGVTdW1tYXJ5ID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IGN1clJvdzogYW55O1xuXG4gICAgICAgIGlmIChyb3dJbmRleCA8IDAgfHwgcm93SW5kZXggPiB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY3VyUm93ID0gdGhpcy5ncmlkLmRhdGFWaWV3W3Jvd0luZGV4IC0gdGhpcy5ncmlkLnZpcnR1YWxpemF0aW9uU3RhdGUuc3RhcnRJbmRleF07XG4gICAgICAgICAgICBpZiAoIWN1clJvdykge1xuICAgICAgICAgICAgICAgIC8vIGlmIGRhdGEgaXMgcmVtb3RlLCByZWNvcmQgbWlnaHQgbm90IGJlIGluIHRoZSB2aWV3IHlldC5cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmlzUmVtb3RlICYmIHJvd0luZGV4ID49IDAgJiYgcm93SW5kZXggPD0gKHRoaXMuZ3JpZCBhcyBhbnkpLnRvdGFsSXRlbUNvdW50IC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1clJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tyb3dJbmRleF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1clJvdyAmJiAhdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChjdXJSb3cpICYmICF0aGlzLmdyaWQuaXNEZXRhaWxSZWNvcmQoY3VyUm93KVxuICAgICAgICAgICAgJiYgIWN1clJvdy5jaGlsZEdyaWRzRGF0YSAmJiAoaW5jbHVkZVN1bW1hcnkgfHwgIWN1clJvdy5zdW1tYXJpZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0dyb3VwUm93KHJvd0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHJvd0luZGV4IDwgMCB8fCByb3dJbmRleCA+IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyUm93ID0gdGhpcy5ncmlkLmRhdGFWaWV3W3Jvd0luZGV4XTtcbiAgICAgICAgcmV0dXJuIGN1clJvdyAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKGN1clJvdyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEFjdGl2ZU5vZGUoYWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQWN0aXZlTm9kZUNoYW5nZWQoYWN0aXZlTm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSBhY3RpdmVOb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmFjdGl2ZU5vZGUsIGFjdGl2ZU5vZGUpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbYWN0aXZlTm9kZS5yb3ddO1xuICAgICAgICBjb25zdCB0eXBlOiBHcmlkS2V5ZG93blRhcmdldFR5cGUgPSBhY3RpdmVOb2RlLnJvdyA8IDAgPyAnaGVhZGVyQ2VsbCcgOlxuICAgICAgICAgICAgdGhpcy5pc0RhdGFSb3coYWN0aXZlTm9kZS5yb3cpID8gJ2RhdGFDZWxsJyA6XG4gICAgICAgICAgICAgICAgY3VyclJvdyAmJiB0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKGN1cnJSb3cpID8gJ2dyb3VwUm93JyA6XG4gICAgICAgICAgICAgICAgICAgIGN1cnJSb3cgJiYgdGhpcy5ncmlkLmlzRGV0YWlsUmVjb3JkKGN1cnJSb3cpID8gJ21hc3RlckRldGFpbFJvdycgOiAnc3VtbWFyeUNlbGwnO1xuXG4gICAgICAgIGNvbnN0IGFyZ3M6IElBY3RpdmVOb2RlQ2hhbmdlRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgcm93OiB0aGlzLmFjdGl2ZU5vZGUucm93LFxuICAgICAgICAgICAgY29sdW1uOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLFxuICAgICAgICAgICAgbGV2ZWw6IHRoaXMuYWN0aXZlTm9kZS5sZXZlbCxcbiAgICAgICAgICAgIHRhZzogdHlwZVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuZ3JpZC5hY3RpdmVOb2RlQ2hhbmdlLmVtaXQoYXJncyk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQWN0aXZlTm9kZUNoYW5nZWQoYWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUpIHtcbiAgICAgICAgbGV0IGlzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjaGVja0lubmVyUHJvcCA9IChhY2l2ZU5vZGU6IENvbHVtbkdyb3Vwc0NhY2hlIHwgSU11bHRpUm93TGF5b3V0Tm9kZSwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFhY2l2ZU5vZGUpIHtcbiAgICAgICAgICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhY2l2ZU5vZGUpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBwcm9wcykge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZU5vZGVbcHJvcF1bcHJvcE5hbWVdICE9PSBhY2l2ZU5vZGVbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFjdGl2ZU5vZGUpO1xuICAgICAgICBmb3IgKGNvbnN0IHByb3BOYW1lIG9mIHByb3BzKSB7XG4gICAgICAgICAgICBpZiAoISF0aGlzLmFjdGl2ZU5vZGVbcHJvcE5hbWVdICYmIHR5cGVvZiB0aGlzLmFjdGl2ZU5vZGVbcHJvcE5hbWVdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNoZWNrSW5uZXJQcm9wKGFjdGl2ZU5vZGVbcHJvcE5hbWVdLCBwcm9wTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWN0aXZlTm9kZVtwcm9wTmFtZV0gIT09IGFjdGl2ZU5vZGVbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpc0NoYW5nZWQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldE5leHRQb3NpdGlvbihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyLCBrZXk6IHN0cmluZywgc2hpZnQ6IGJvb2xlYW4sIGN0cmw6IGJvb2xlYW4sIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pc0RhdGFSb3cocm93SW5kZXgsIHRydWUpICYmIChrZXkuaW5kZXhPZignZG93bicpIDwgMCB8fCBrZXkuaW5kZXhPZigndXAnKSA8IDApICYmIGN0cmwpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHJvd0luZGV4LCBjb2xJbmRleCB9O1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdwYWdlZG93bic6XG4gICAgICAgICAgICBjYXNlICdwYWdldXAnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3BhZ2Vkb3duJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsTmV4dFBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsUHJldlBhZ2UoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZWRpdENlbGwgPSB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbDtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuY2h1bmtMb2FkXG4gICAgICAgICAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWRpdENlbGwgJiYgdGhpcy5ncmlkLnJvd0xpc3QubWFwKHIgPT4gci5pbmRleCkuaW5kZXhPZihlZGl0Q2VsbC5yb3dJbmRleCkgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3RhYic6XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFZGl0aW5nKHNoaWZ0LCBldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbmQnOlxuICAgICAgICAgICAgICAgIHJvd0luZGV4ID0gY3RybCA/IHRoaXMuZmluZExhc3REYXRhUm93SW5kZXgoKSA6IHRoaXMuYWN0aXZlTm9kZS5yb3c7XG4gICAgICAgICAgICAgICAgY29sSW5kZXggPSB0aGlzLmxhc3RDb2x1bW5JbmRleDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvbWUnOlxuICAgICAgICAgICAgICAgIHJvd0luZGV4ID0gY3RybCA/IHRoaXMuZmluZEZpcnN0RGF0YVJvd0luZGV4KCkgOiB0aGlzLmFjdGl2ZU5vZGUucm93O1xuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gMDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93bGVmdCc6XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IGN0cmwgPyAwIDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd3JpZ2h0JzpcbiAgICAgICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IGN0cmwgPyB0aGlzLmxhc3RDb2x1bW5JbmRleCA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gKyAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3d1cCc6XG4gICAgICAgICAgICBjYXNlICd1cCc6XG4gICAgICAgICAgICAgICAgaWYgKGN0cmwgJiYgIXRoaXMuaXNEYXRhUm93KHJvd0luZGV4KSB8fCAodGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dFZGl0aW5nQmxvY2tlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA6IDA7XG4gICAgICAgICAgICAgICAgcm93SW5kZXggPSBjdHJsID8gdGhpcy5maW5kRmlyc3REYXRhUm93SW5kZXgoKSA6IHRoaXMuYWN0aXZlTm9kZS5yb3cgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3dkb3duJzpcbiAgICAgICAgICAgIGNhc2UgJ2Rvd24nOlxuICAgICAgICAgICAgICAgIGlmICgoY3RybCAmJiAhdGhpcy5pc0RhdGFSb3cocm93SW5kZXgpKSB8fCAodGhpcy5ncmlkLnJvd0VkaXRhYmxlICYmIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dFZGl0aW5nQmxvY2tlZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA6IDA7XG4gICAgICAgICAgICAgICAgcm93SW5kZXggPSBjdHJsID8gdGhpcy5maW5kTGFzdERhdGFSb3dJbmRleCgpIDogdGhpcy5hY3RpdmVOb2RlLnJvdyArIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlbnRlcic6XG4gICAgICAgICAgICBjYXNlICdmMic6XG4gICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9jZWxsX2J5X3Zpc2libGVfaW5kZXgodGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCkgfHwgIWNlbGwuZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbnRlckVkaXRNb2RlKGNlbGwsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VzY2FwZSc6XG4gICAgICAgICAgICBjYXNlICdlc2MnOlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0RhdGFSb3cocm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuaXNJbkNvbXBvc2l0aW9uTW9kZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5jZWxsSW5FZGl0TW9kZSB8fCB0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW5kRWRpdChmYWxzZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0VkZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnICc6XG4gICAgICAgICAgICBjYXNlICdzcGFjZWJhcic6XG4gICAgICAgICAgICBjYXNlICdzcGFjZSc6XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93T2JqID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19ieV9pbmRleCh0aGlzLmFjdGl2ZU5vZGUucm93KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmlzUm93U2VsZWN0YWJsZSAmJiByb3dPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEYXRhUm93KHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvd09iai5zZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Um93KHJvd09iai5rZXksIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Um93QnlJZChyb3dPYmoua2V5LCBmYWxzZSwgZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzR3JvdXBSb3cocm93SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoKHJvd09iaiBhcyBhbnkpIGFzIElneEdyaWRHcm91cEJ5Um93Q29tcG9uZW50KS5vbkdyb3VwU2VsZWN0b3JDbGljayhldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyByb3dJbmRleCwgY29sSW5kZXggfTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaG9yaXpvbnRhbE5hdihldmVudDogS2V5Ym9hcmRFdmVudCwga2V5OiBzdHJpbmcsIHJvd0luZGV4OiBudW1iZXIsIHRhZzogR3JpZEtleWRvd25UYXJnZXRUeXBlKSB7XG4gICAgICAgIGNvbnN0IGN0cmwgPSBldmVudC5jdHJsS2V5O1xuICAgICAgICBpZiAoIUhPUklaT05UQUxfTkFWX0tFWVMuaGFzKGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuYWN0aXZlTm9kZS5yb3cgPSByb3dJbmRleDtcbiAgICAgICAgaWYgKHJvd0luZGV4ID4gMCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZW1pdEtleURvd24oJ3N1bW1hcnlDZWxsJywgdGhpcy5hY3RpdmVOb2RlLnJvdywgZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3QWN0aXZlTm9kZSA9IHtcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbixcbiAgICAgICAgICAgIG1jaENhY2hlOiB7XG4gICAgICAgICAgICAgICAgbGV2ZWw6IHRoaXMuYWN0aXZlTm9kZS5sZXZlbCxcbiAgICAgICAgICAgICAgICB2aXNpYmxlSW5kZXg6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoKGtleS5pbmNsdWRlcygnbGVmdCcpIHx8IGtleSA9PT0gJ2hvbWUnKSAmJiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uID4gMCkge1xuICAgICAgICAgICAgbmV3QWN0aXZlTm9kZS5jb2x1bW4gPSBjdHJsIHx8IGtleSA9PT0gJ2hvbWUnID8gMCA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gLSAxO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoa2V5LmluY2x1ZGVzKCdyaWdodCcpIHx8IGtleSA9PT0gJ2VuZCcpICYmIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gPCB0aGlzLmxhc3RDb2x1bW5JbmRleCkge1xuICAgICAgICAgICAgbmV3QWN0aXZlTm9kZS5jb2x1bW4gPSBjdHJsIHx8IGtleSA9PT0gJ2VuZCcgPyB0aGlzLmxhc3RDb2x1bW5JbmRleCA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhZyA9PT0gJ2hlYWRlckNlbGwnKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlWaXNpYmxlSW5kZXgobmV3QWN0aXZlTm9kZS5jb2x1bW4pO1xuICAgICAgICAgICAgbmV3QWN0aXZlTm9kZS5tY2hDYWNoZS5sZXZlbCA9IGNvbHVtbi5sZXZlbDtcbiAgICAgICAgICAgIG5ld0FjdGl2ZU5vZGUubWNoQ2FjaGUudmlzaWJsZUluZGV4ID0gY29sdW1uLnZpc2libGVJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0QWN0aXZlTm9kZSh7IHJvdzogdGhpcy5hY3RpdmVOb2RlLnJvdywgY29sdW1uOiBuZXdBY3RpdmVOb2RlLmNvbHVtbiwgbWNoQ2FjaGU6IG5ld0FjdGl2ZU5vZGUubWNoQ2FjaGUgfSk7XG4gICAgICAgIHRoaXMucGVyZm9ybUhvcml6b250YWxTY3JvbGxUb0NlbGwodGhpcy5hY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBsYXN0Q29sdW1uSW5kZXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1heCguLi50aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMubWFwKGNvbCA9PiBjb2wudmlzaWJsZUluZGV4KSk7XG4gICAgfVxuICAgIHB1YmxpYyBnZXQgZGlzcGxheUNvbnRhaW5lcldpZHRoKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCh0aGlzLmdyaWQucGFyZW50VmlydERpci5kYy5pbnN0YW5jZS5fdmlld0NvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGgpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlDb250YWluZXJTY3JvbGxMZWZ0KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHRoaXMuZ3JpZC5oZWFkZXJDb250YWluZXIuc2Nyb2xsUG9zaXRpb24pO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGNvbnRhaW5lclRvcE9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5kYy5pbnN0YW5jZS5fdmlld0NvbnRhaW5lci5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wLCAxMCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldENvbHVtblVucGlubmVkSW5kZXgodmlzaWJsZUNvbHVtbkluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5ncmlkLnVucGlubmVkQ29sdW1ucy5maW5kKChjb2wpID0+ICFjb2wuY29sdW1uR3JvdXAgJiYgY29sLnZpc2libGVJbmRleCA9PT0gdmlzaWJsZUNvbHVtbkluZGV4KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5waW5uZWRDb2x1bW5zLmxlbmd0aCA/IHRoaXMuZ3JpZC51bnBpbm5lZENvbHVtbnMuZmlsdGVyKChjKSA9PiAhYy5jb2x1bW5Hcm91cCkuaW5kZXhPZihjb2x1bW4pIDpcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5JbmRleDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZm9yT2ZEaXIoKTogSWd4Rm9yT2ZEaXJlY3RpdmU8YW55PiB7XG4gICAgICAgIGNvbnN0IGZvck9mRGlyID0gdGhpcy5ncmlkLmRhdGFSb3dMaXN0Lmxlbmd0aCA+IDAgPyB0aGlzLmdyaWQuZGF0YVJvd0xpc3QuZmlyc3QudmlydERpclJvdyA6IHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0Lmxlbmd0aCA/XG4gICAgICAgICAgICB0aGlzLmdyaWQuc3VtbWFyaWVzUm93TGlzdC5maXJzdC52aXJ0RGlyUm93IDogdGhpcy5ncmlkLmhlYWRlckNvbnRhaW5lcjtcbiAgICAgICAgcmV0dXJuIGZvck9mRGlyIGFzIElneEZvck9mRGlyZWN0aXZlPGFueT47XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUFsdChrZXk6IHN0cmluZywgZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgLy8gdG9kbyBUT0RPIFJPV1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfcm93X2J5X2luZGV4KHRoaXMuYWN0aXZlTm9kZS5yb3cpO1xuXG4gICAgICAgIGlmICghKHRoaXMuaXNUb2dnbGVLZXkoa2V5KSB8fCB0aGlzLmlzQWRkS2V5KGtleSkpIHx8ICFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pc0FkZEtleShrZXkpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZ3JpZC5yb3dFZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGdyaWQgbXVzdCBiZSBpbiByb3cgZWRpdCBtb2RlIHRvIHBlcmZvcm0gcm93IGFkZGluZyEnKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSAmJiByb3cudHJlZVJvdyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVudGVyQWRkUm93TW9kZShyb3csIHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVudGVyQWRkUm93TW9kZShyb3csIGZhbHNlLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIXJvdy5leHBhbmRlZCAmJiBST1dfRVhQQU5EX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGlmIChyb3cua2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIHVzZSBleHBhbmRlZCByb3cuZXhwYW5kZWQgPSAhcm93LmV4cGFuZGVkO1xuICAgICAgICAgICAgICAgIChyb3cgYXMgYW55KS50b2dnbGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkuc2V0X3Jvd19leHBhbnNpb25fc3RhdGUocm93LmtleSwgdHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHJvdy5leHBhbmRlZCAmJiBST1dfQ09MTEFQU0VfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgaWYgKHJvdy5rZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8gdXNlIGV4cGFuZGVkIHJvdy5leHBhbmRlZCA9ICFyb3cuZXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgKHJvdyBhcyBhbnkpLnRvZ2dsZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5zZXRfcm93X2V4cGFuc2lvbl9zdGF0ZShyb3cua2V5LCBmYWxzZSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5ub3RpZnlDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhhbmRsZUVkaXRpbmcoc2hpZnQ6IGJvb2xlYW4sIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBzaGlmdCA/IHRoaXMuZ3JpZC5nZXRQcmV2aW91c0NlbGwodGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiwgY29sID0+IGNvbC5lZGl0YWJsZSkgOlxuICAgICAgICAgICAgdGhpcy5ncmlkLmdldE5leHRDZWxsKHRoaXMuYWN0aXZlTm9kZS5yb3csIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sIGNvbCA9PiBjb2wuZWRpdGFibGUpO1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlICYmIHRoaXMuaXNBY3RpdmVOb2RlKG5leHQucm93SW5kZXgsIG5leHQudmlzaWJsZUNvbHVtbkluZGV4KSkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVuZEVkaXQodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnRib2R5Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlICYmIHRoaXMuZ3JpZC5yb3dFZGl0VGFicy5sZW5ndGgpICYmXG4gICAgICAgICAgICAodGhpcy5hY3RpdmVOb2RlLnJvdyAhPT0gbmV4dC5yb3dJbmRleCB8fCB0aGlzLmlzQWN0aXZlTm9kZShuZXh0LnJvd0luZGV4LCBuZXh0LnZpc2libGVDb2x1bW5JbmRleCkpKSB7XG4gICAgICAgICAgICBjb25zdCBhcmdzID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnVwZGF0ZUNlbGwodHJ1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzaGlmdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5yb3dFZGl0VGFicy5sYXN0LmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQucm93RWRpdFRhYnMuZmlyc3QuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0luRWRpdE1vZGUgJiYgIXRoaXMuZ3JpZC5yb3dFZGl0VGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChzaGlmdCAmJiBuZXh0LnJvd0luZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUucm93ICYmIG5leHQudmlzaWJsZUNvbHVtbkluZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXggPSB0aGlzLmdyaWQubGFzdEVkaXRhYmxlQ29sdW1uSW5kZXg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzaGlmdCAmJiBuZXh0LnJvd0luZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUucm93ICYmIG5leHQudmlzaWJsZUNvbHVtbkluZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXggPSB0aGlzLmdyaWQuZmlyc3RFZGl0YWJsZUNvbHVtbkluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXh0LnJvd0luZGV4ID0gdGhpcy5hY3RpdmVOb2RlLnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubmF2aWdhdGVJbkJvZHkobmV4dC5yb3dJbmRleCwgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXgsIChvYmopID0+IHtcbiAgICAgICAgICAgIG9iai50YXJnZXQuYWN0aXZhdGUoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5ncmlkLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBuYXZpZ2F0ZUluQm9keShyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4LCBjYjogKGFyZzogYW55KSA9PiB2b2lkID0gbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZFBvc2l0aW9uKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgpIHx8IHRoaXMuaXNBY3RpdmVOb2RlKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8ocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCwgY2IpO1xuICAgIH1cblxuXG4gICAgcHJvdGVjdGVkIGVtaXRLZXlEb3duKHR5cGU6IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSwgcm93SW5kZXgsIGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0LnRvQXJyYXkoKS5jb25jYXQodGhpcy5ncmlkLnJvd0xpc3QudG9BcnJheSgpKS5maW5kKHIgPT4gci5pbmRleCA9PT0gcm93SW5kZXgpO1xuICAgICAgICBpZiAoIXJvdykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHlwZSA9PT0gJ2dyb3VwUm93JyA/IHJvdyA6XG4gICAgICAgICAgICB0eXBlID09PSAnZGF0YUNlbGwnID8gcm93LmNlbGxzPy5maW5kKGMgPT4gYy52aXNpYmxlQ29sdW1uSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pIDpcbiAgICAgICAgICAgICAgICByb3cuc3VtbWFyeUNlbGxzPy5maW5kKGMgPT4gYy52aXNpYmxlQ29sdW1uSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pO1xuICAgICAgICBjb25zdCBrZXlkb3duQXJncyA9IHsgdGFyZ2V0VHlwZTogdHlwZSwgZXZlbnQsIGNhbmNlbDogZmFsc2UsIHRhcmdldCB9O1xuICAgICAgICB0aGlzLmdyaWQuZ3JpZEtleWRvd24uZW1pdChrZXlkb3duQXJncyk7XG4gICAgICAgIGlmIChrZXlkb3duQXJncy5jYW5jZWwgJiYgdHlwZSA9PT0gJ2RhdGFDZWxsJykge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmtleWJvYXJkU3RhdGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBrZXlkb3duQXJncy5jYW5jZWw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgaXNDb2x1bW5QaW5uZWQoY29sdW1uSW5kZXg6IG51bWJlciwgZm9yT2ZEaXI6IElneEZvck9mRGlyZWN0aXZlPGFueT4pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaG9yaXpvbnRhbFNjcm9sbCA9IGZvck9mRGlyLmdldFNjcm9sbCgpO1xuICAgICAgICByZXR1cm4gKCFob3Jpem9udGFsU2Nyb2xsLmNsaWVudFdpZHRoIHx8IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeVZpc2libGVJbmRleChjb2x1bW5JbmRleCk/LnBpbm5lZCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZpbmRGaXJzdERhdGFSb3dJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmRhdGFWaWV3LmZpbmRJbmRleChyZWMgPT4gIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQocmVjKSAmJiAhdGhpcy5ncmlkLmlzRGV0YWlsUmVjb3JkKHJlYykgJiYgIXJlYy5zdW1tYXJpZXMpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmaW5kTGFzdERhdGFSb3dJbmRleCgpOiBudW1iZXIge1xuICAgICAgICBpZiAoKHRoaXMuZ3JpZCBhcyBhbnkpLnRvdGFsSXRlbUNvdW50KSB7XG4gICAgICAgICAgICByZXR1cm4gKHRoaXMuZ3JpZCBhcyBhbnkpLnRvdGFsSXRlbUNvdW50IC0gMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGg7XG4gICAgICAgIHdoaWxlIChpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVJvdyhpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldFJvd0VsZW1lbnRCeUluZGV4KGluZGV4KSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzRGV0YWlscykge1xuICAgICAgICAgICAgY29uc3QgZGV0YWlsID0gdGhpcy5ncmlkLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2RldGFpbD1cInRydWVcIl1bZGF0YS1yb3dpbmRleD1cIiR7aW5kZXh9XCJdYCk7XG4gICAgICAgICAgICBpZiAoZGV0YWlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRldGFpbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnJvd0xpc3QudG9BcnJheSgpLmNvbmNhdCh0aGlzLmdyaWQuc3VtbWFyaWVzUm93TGlzdC50b0FycmF5KCkpLmZpbmQociA9PiByLmluZGV4ID09PSBpbmRleCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGlzVmFsaWRQb3NpdGlvbihyb3dJbmRleDogbnVtYmVyLCBjb2xJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9ICh0aGlzLmdyaWQgYXMgYW55KS50b3RhbEl0ZW1Db3VudCA/PyB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoO1xuICAgICAgICBpZiAocm93SW5kZXggPCAwIHx8IGNvbEluZGV4IDwgMCB8fCBsZW5ndGggLSAxIDwgcm93SW5kZXggfHwgdGhpcy5sYXN0Q29sdW1uSW5kZXggPCBjb2xJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICE9PSBjb2xJbmRleCAmJiAhdGhpcy5pc0RhdGFSb3cocm93SW5kZXgsIHRydWUpID8gZmFsc2UgOiB0cnVlO1xuICAgIH1cbiAgICBwcm90ZWN0ZWQgcGVyZm9ybUhlYWRlcktleUNvbWJpbmF0aW9uKGNvbHVtbiwga2V5LCBzaGlmdCwgY3RybCwgYWx0LCBldmVudCkge1xuICAgICAgICBsZXQgZGlyZWN0aW9uID0gdGhpcy5ncmlkLnNvcnRpbmdFeHByZXNzaW9ucy5maW5kKGV4cHIgPT4gZXhwci5maWVsZE5hbWUgPT09IGNvbHVtbi5maWVsZCk/LmRpcjtcbiAgICAgICAgaWYgKGN0cmwgJiYga2V5LmluY2x1ZGVzKCd1cCcpICYmIGNvbHVtbi5zb3J0YWJsZSAmJiAhY29sdW1uLmNvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT09IFNvcnRpbmdEaXJlY3Rpb24uQXNjID8gU29ydGluZ0RpcmVjdGlvbi5Ob25lIDogU29ydGluZ0RpcmVjdGlvbi5Bc2M7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc29ydCh7IGZpZWxkTmFtZTogY29sdW1uLmZpZWxkLCBkaXI6IGRpcmVjdGlvbiwgaWdub3JlQ2FzZTogZmFsc2UgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0cmwgJiYga2V5LmluY2x1ZGVzKCdkb3duJykgJiYgY29sdW1uLnNvcnRhYmxlICYmICFjb2x1bW4uY29sdW1uR3JvdXApIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gU29ydGluZ0RpcmVjdGlvbi5EZXNjID8gU29ydGluZ0RpcmVjdGlvbi5Ob25lIDogU29ydGluZ0RpcmVjdGlvbi5EZXNjO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNvcnQoeyBmaWVsZE5hbWU6IGNvbHVtbi5maWVsZCwgZGlyOiBkaXJlY3Rpb24sIGlnbm9yZUNhc2U6IGZhbHNlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaGlmdCAmJiBhbHQgJiYgdGhpcy5pc1RvZ2dsZUtleShrZXkpICYmICFjb2x1bW4uY29sdW1uR3JvdXAgJiYgY29sdW1uLmdyb3VwYWJsZSkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uIHx8IFNvcnRpbmdEaXJlY3Rpb24uQXNjO1xuICAgICAgICAgICAgaWYgKGtleS5pbmNsdWRlcygncmlnaHQnKSkge1xuICAgICAgICAgICAgICAgICh0aGlzLmdyaWQgYXMgYW55KS5ncm91cEJ5KHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGROYW1lOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIGRpcjogZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlOiBjb2x1bW4uc29ydGluZ0lnbm9yZUNhc2UsXG4gICAgICAgICAgICAgICAgICAgIHN0cmF0ZWd5OiBjb2x1bW4uc29ydFN0cmF0ZWd5LFxuICAgICAgICAgICAgICAgICAgICBncm91cGluZ0NvbXBhcmVyOiBjb2x1bW4uZ3JvdXBpbmdDb21wYXJlcixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKHRoaXMuZ3JpZCBhcyBhbnkpLmNsZWFyR3JvdXBpbmcoY29sdW1uLmZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gPSBrZXkuaW5jbHVkZXMoJ3JpZ2h0JykgJiYgKHRoaXMuZ3JpZCBhcyBhbnkpLmhpZGVHcm91cGVkQ29sdW1ucyAmJlxuICAgICAgICAgICAgICAgIGNvbHVtbi52aXNpYmxlSW5kZXggPT09IHRoaXMubGFzdENvbHVtbkluZGV4ID8gdGhpcy5sYXN0Q29sdW1uSW5kZXggLSAxIDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWx0ICYmIChST1dfRVhQQU5EX0tFWVMuaGFzKGtleSkgfHwgUk9XX0NPTExBUFNFX0tFWVMuaGFzKGtleSkpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU1DSEV4cGFuZENvbGxhcHNlKGtleSwgY29sdW1uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoWycgJywgJ3NwYWNlYmFyJywgJ3NwYWNlJ10uaW5kZXhPZihrZXkpICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDb2x1bW5TZWxlY3Rpb24oY29sdW1uLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsdCAmJiAoa2V5ID09PSAnbCcgfHwga2V5ID09PSAnwqwnKSAmJiB0aGlzLmdyaWQuYWxsb3dBZHZhbmNlZEZpbHRlcmluZykge1xuICAgICAgICAgICAgdGhpcy5ncmlkLm9wZW5BZHZhbmNlZEZpbHRlcmluZ0RpYWxvZygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHJsICYmIHNoaWZ0ICYmIGtleSA9PT0gJ2wnICYmIHRoaXMuZ3JpZC5hbGxvd0ZpbHRlcmluZyAmJiAhY29sdW1uLmNvbHVtbkdyb3VwICYmIGNvbHVtbi5maWx0ZXJhYmxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmZpbHRlck1vZGUgPT09IEZpbHRlck1vZGUuZXhjZWxTdHlsZUZpbHRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlckVsID0gdGhpcy5ncmlkLmhlYWRlckdyb3Vwcy5maW5kKGcgPT4gZy5hY3RpdmUpLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UudG9nZ2xlRmlsdGVyRHJvcGRvd24oaGVhZGVyRWwsIGNvbHVtbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGVyZm9ybUhvcml6b250YWxTY3JvbGxUb0NlbGwoY29sdW1uLnZpc2libGVJbmRleCk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UuZmlsdGVyZWRDb2x1bW4gPSBjb2x1bW47XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmZpbHRlcmluZ1NlcnZpY2UuaXNGaWx0ZXJSb3dWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZmlyc3RWaXNpYmxlTm9kZShyb3dJbmRleD8pIHtcbiAgICAgICAgY29uc3QgY29sSW5kZXggPSB0aGlzLmxhc3RBY3RpdmVOb2RlLmNvbHVtbiAhPT0gdW5kZWZpbmVkID8gdGhpcy5sYXN0QWN0aXZlTm9kZS5jb2x1bW4gOlxuICAgICAgICAgICAgdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLnNvcnQoKGMxLCBjMikgPT4gYzEudmlzaWJsZUluZGV4IC0gYzIudmlzaWJsZUluZGV4KVxuICAgICAgICAgICAgICAgIC5maW5kKGMgPT4gdGhpcy5pc0NvbHVtbkZ1bGx5VmlzaWJsZShjLnZpc2libGVJbmRleCkpPy52aXNpYmxlSW5kZXg7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ3JpZC52aXNpYmxlQ29sdW1ucy5maW5kKChjb2wpID0+ICFjb2wuY29sdW1uTGF5b3V0ICYmIGNvbC52aXNpYmxlSW5kZXggPT09IGNvbEluZGV4KTtcbiAgICAgICAgY29uc3Qgcm93SW5kID0gcm93SW5kZXggPyByb3dJbmRleCA6IHRoaXMuZ3JpZC5yb3dMaXN0LmZpbmQociA9PiAhdGhpcy5zaG91bGRQZXJmb3JtVmVydGljYWxTY3JvbGwoci5pbmRleCwgY29sSW5kZXgpKT8uaW5kZXg7XG4gICAgICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgICAgICByb3c6IHJvd0luZCA/PyAwLFxuICAgICAgICAgICAgY29sdW1uOiBjb2x1bW4/LnZpc2libGVJbmRleCA/PyAwLCBsZXZlbDogY29sdW1uPy5sZXZlbCA/PyAwLFxuICAgICAgICAgICAgbWNoQ2FjaGU6IGNvbHVtbiA/IHsgbGV2ZWw6IGNvbHVtbi5sZXZlbCwgdmlzaWJsZUluZGV4OiBjb2x1bW4udmlzaWJsZUluZGV4IH0gOiB7fSBhcyBDb2x1bW5Hcm91cHNDYWNoZSxcbiAgICAgICAgICAgIGxheW91dDogY29sdW1uICYmIGNvbHVtbi5jb2x1bW5MYXlvdXRDaGlsZCA/IHtcbiAgICAgICAgICAgICAgICByb3dTdGFydDogY29sdW1uLnJvd1N0YXJ0LCBjb2xTdGFydDogY29sdW1uLmNvbFN0YXJ0LFxuICAgICAgICAgICAgICAgIHJvd0VuZDogY29sdW1uLnJvd0VuZCwgY29sRW5kOiBjb2x1bW4uY29sRW5kLCBjb2x1bW5WaXNpYmxlSW5kZXg6IGNvbHVtbi52aXNpYmxlSW5kZXhcbiAgICAgICAgICAgIH0gOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTUNIZWFkZXJOYXYoa2V5OiBzdHJpbmcsIGN0cmw6IGJvb2xlYW4pIHtcbiAgICAgICAgY29uc3QgbmV3SGVhZGVyTm9kZTogQ29sdW1uR3JvdXBzQ2FjaGUgPSB7XG4gICAgICAgICAgICB2aXNpYmxlSW5kZXg6IHRoaXMuYWN0aXZlTm9kZS5tY2hDYWNoZS52aXNpYmxlSW5kZXgsXG4gICAgICAgICAgICBsZXZlbDogdGhpcy5hY3RpdmVOb2RlLm1jaENhY2hlLmxldmVsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFjdGl2ZUNvbCA9IHRoaXMuY3VycmVudEFjdGl2ZUNvbHVtbjtcbiAgICAgICAgY29uc3QgbGFzdEdyb3VwSW5kZXggPSBNYXRoLm1heCguLi4gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLlxuICAgICAgICAgICAgZmlsdGVyKGMgPT4gYy5sZXZlbCA8PSB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwpLm1hcChjb2wgPT4gY29sLnZpc2libGVJbmRleCkpO1xuICAgICAgICBsZXQgbmV4dENvbCA9IGFjdGl2ZUNvbDtcbiAgICAgICAgaWYgKChrZXkuaW5jbHVkZXMoJ2xlZnQnKSB8fCBrZXkgPT09ICdob21lJykgJiYgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY3RybCB8fCBrZXkgPT09ICdob21lJyA/IDAgOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIC0gMTtcbiAgICAgICAgICAgIG5leHRDb2wgPSB0aGlzLmdldE5leHRDb2x1bW5NQ0goaW5kZXgpO1xuICAgICAgICAgICAgbmV3SGVhZGVyTm9kZS52aXNpYmxlSW5kZXggPSBuZXh0Q29sLnZpc2libGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGtleS5pbmNsdWRlcygncmlnaHQnKSB8fCBrZXkgPT09ICdlbmQnKSAmJiBhY3RpdmVDb2wudmlzaWJsZUluZGV4IDwgbGFzdEdyb3VwSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRWSW5kZXggPSBhY3RpdmVDb2wuY2hpbGRyZW4gPyBNYXRoLm1heCguLi5hY3RpdmVDb2wuYWxsQ2hpbGRyZW4ubWFwKGMgPT4gYy52aXNpYmxlSW5kZXgpKSArIDEgOlxuICAgICAgICAgICAgICAgIGFjdGl2ZUNvbC52aXNpYmxlSW5kZXggKyAxO1xuICAgICAgICAgICAgbmV4dENvbCA9IGN0cmwgfHwga2V5ID09PSAnZW5kJyA/IHRoaXMuZ2V0TmV4dENvbHVtbk1DSCh0aGlzLmxhc3RDb2x1bW5JbmRleCkgOiB0aGlzLmdldE5leHRDb2x1bW5NQ0gobmV4dFZJbmRleCk7XG4gICAgICAgICAgICBuZXdIZWFkZXJOb2RlLnZpc2libGVJbmRleCA9IG5leHRDb2wudmlzaWJsZUluZGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmICghY3RybCAmJiBrZXkuaW5jbHVkZXMoJ3VwJykgJiYgdGhpcy5hY3RpdmVOb2RlLmxldmVsID4gMCkge1xuICAgICAgICAgICAgbmV4dENvbCA9IGFjdGl2ZUNvbC5wYXJlbnQ7XG4gICAgICAgICAgICBuZXdIZWFkZXJOb2RlLmxldmVsID0gbmV4dENvbC5sZXZlbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0cmwgJiYga2V5LmluY2x1ZGVzKCdkb3duJykgJiYgYWN0aXZlQ29sLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICBuZXh0Q29sID0gYWN0aXZlQ29sLmNoaWxkcmVuLmZpbmQoYyA9PiBjLnZpc2libGVJbmRleCA9PT0gbmV3SGVhZGVyTm9kZS52aXNpYmxlSW5kZXgpIHx8XG4gICAgICAgICAgICAgICAgYWN0aXZlQ29sLmNoaWxkcmVuLnRvQXJyYXkoKS5zb3J0KChhLCBiKSA9PiBiLnZpc2libGVJbmRleCAtIGEudmlzaWJsZUluZGV4KVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wudmlzaWJsZUluZGV4IDwgbmV3SGVhZGVyTm9kZS52aXNpYmxlSW5kZXgpWzBdO1xuICAgICAgICAgICAgbmV3SGVhZGVyTm9kZS5sZXZlbCA9IG5leHRDb2wubGV2ZWw7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEFjdGl2ZU5vZGUoe1xuICAgICAgICAgICAgcm93OiB0aGlzLmFjdGl2ZU5vZGUucm93LFxuICAgICAgICAgICAgY29sdW1uOiBuZXh0Q29sLnZpc2libGVJbmRleCxcbiAgICAgICAgICAgIGxldmVsOiBuZXh0Q29sLmxldmVsLFxuICAgICAgICAgICAgbWNoQ2FjaGU6IG5ld0hlYWRlck5vZGVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucGVyZm9ybUhvcml6b250YWxTY3JvbGxUb0NlbGwobmV4dENvbC52aXNpYmxlSW5kZXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlTUNIRXhwYW5kQ29sbGFwc2Uoa2V5LCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKCFjb2x1bW4uY2hpbGRyZW4gfHwgIWNvbHVtbi5jb2xsYXBzaWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29sdW1uLmV4cGFuZGVkICYmIFJPV19FWFBBTkRfS0VZUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgY29sdW1uLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZXhwYW5kZWQgJiYgUk9XX0NPTExBUFNFX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGNvbHVtbi5leHBhbmRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBoYW5kbGVDb2x1bW5TZWxlY3Rpb24oY29sdW1uLCBldmVudCkge1xuICAgICAgICBpZiAoIWNvbHVtbi5zZWxlY3RhYmxlIHx8IHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLm5vbmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGVhclNlbGVjdGlvbiA9IHRoaXMuZ3JpZC5jb2x1bW5TZWxlY3Rpb24gPT09IEdyaWRTZWxlY3Rpb25Nb2RlLnNpbmdsZTtcbiAgICAgICAgY29uc3QgY29sdW1uc1RvU2VsZWN0ID0gIWNvbHVtbi5jaGlsZHJlbiA/IFtjb2x1bW4uZmllbGRdIDpcbiAgICAgICAgICAgIGNvbHVtbi5hbGxDaGlsZHJlbi5maWx0ZXIoYyA9PiAhYy5oaWRkZW4gJiYgYy5zZWxlY3RhYmxlICYmICFjLmNvbHVtbkdyb3VwKS5tYXAoYyA9PiBjLmZpZWxkKTtcbiAgICAgICAgaWYgKGNvbHVtbi5zZWxlY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2UuZGVzZWxlY3RDb2x1bW5zKGNvbHVtbnNUb1NlbGVjdCwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q29sdW1ucyhjb2x1bW5zVG9TZWxlY3QsIGNsZWFyU2VsZWN0aW9uLCBmYWxzZSwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROZXh0Q29sdW1uTUNIKHZpc2libGVJbmRleCkge1xuICAgICAgICBsZXQgY29sID0gdGhpcy5ncmlkLmdldENvbHVtbkJ5VmlzaWJsZUluZGV4KHZpc2libGVJbmRleCk7XG4gICAgICAgIGxldCBwYXJlbnQgPSBjb2wucGFyZW50O1xuICAgICAgICB3aGlsZSAocGFyZW50ICYmIGNvbC5sZXZlbCA+IHRoaXMuYWN0aXZlTm9kZS5tY2hDYWNoZS5sZXZlbCkge1xuICAgICAgICAgICAgY29sID0gY29sLnBhcmVudDtcbiAgICAgICAgICAgIHBhcmVudCA9IGNvbC5wYXJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldCBjdXJyZW50QWN0aXZlQ29sdW1uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLmZpbmQoYyA9PiBjLnZpc2libGVJbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAmJiBjLmxldmVsID09PSB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3RpdmVOb2RlKHJJbmRleDogbnVtYmVyLCBjSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVOb2RlID8gdGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gckluZGV4ICYmIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gPT09IGNJbmRleCA6IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNUb2dnbGVLZXkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIFJPV19DT0xMQVBTRV9LRVlTLmhhcyhrZXkpIHx8IFJPV19FWFBBTkRfS0VZUy5oYXMoa2V5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWRkS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBST1dfQUREX0tFWVMuaGFzKGtleSk7XG4gICAgfVxufVxuIl19
744
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvZ3JpZC1uYXZpZ2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHdkMsT0FBTyxFQUNILGVBQWUsRUFDZixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGNBQWMsRUFDZCxtQkFBbUIsRUFDbkIsV0FBVyxFQUNYLFlBQVksRUFFZixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXlCLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSXRGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7QUFjdkUsY0FBYztBQUVkLE1BQU0sT0FBTyx3QkFBd0I7SUFjakMsWUFBc0IsUUFBc0I7UUFBdEIsYUFBUSxHQUFSLFFBQVEsQ0FBYztRQVpyQyxnQkFBVyxHQUFnQixFQUFpQixDQUFDO1FBQzdDLG1CQUFjLEdBQWdCLEVBQWlCLENBQUM7UUFDN0Msc0JBQWlCLEdBQUcsS0FBSyxDQUFDO0lBVVksQ0FBQztJQVJqRCxJQUFXLFVBQVU7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLFVBQVUsQ0FBQyxLQUFrQjtRQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztJQUM3QixDQUFDO0lBSU0sZ0JBQWdCLENBQUMsS0FBb0I7UUFDeEMsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFD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QyxZQUFZLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlILENBQUM7SUFFTyxZQUFZLENBQUMsTUFBYyxFQUFFLE1BQWM7UUFDL0MsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDekcsQ0FBQztJQUVPLFdBQVcsQ0FBQyxHQUFXO1FBQzNCLE9BQU8saUJBQWlCLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVPLFFBQVEsQ0FBQyxHQUFXO1FBQ3hCLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDOztxSEFyd0JRLHdCQUF3Qjt5SEFBeEIsd0JBQXdCOzJGQUF4Qix3QkFBd0I7a0JBRHBDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElneEZvck9mRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9mb3Itb2YvZm9yX29mLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4vY29tbW9uL2dyaWQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gICAgTkFWSUdBVElPTl9LRVlTLFxuICAgIFJPV19DT0xMQVBTRV9LRVlTLFxuICAgIFJPV19FWFBBTkRfS0VZUyxcbiAgICBTVVBQT1JURURfS0VZUyxcbiAgICBIT1JJWk9OVEFMX05BVl9LRVlTLFxuICAgIEhFQURFUl9LRVlTLFxuICAgIFJPV19BRERfS0VZUyxcbiAgICBQbGF0Zm9ybVV0aWxcbn0gZnJvbSAnLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBHcmlkS2V5ZG93blRhcmdldFR5cGUsIEdyaWRTZWxlY3Rpb25Nb2RlLCBGaWx0ZXJNb2RlIH0gZnJvbSAnLi9jb21tb24vZW51bXMnO1xuaW1wb3J0IHsgSUFjdGl2ZU5vZGVDaGFuZ2VFdmVudEFyZ3MgfSBmcm9tICcuL2NvbW1vbi9ldmVudHMnO1xuaW1wb3J0IHsgSWd4R3JpZEdyb3VwQnlSb3dDb21wb25lbnQgfSBmcm9tICcuL2dyaWQvZ3JvdXBieS1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IElNdWx0aVJvd0xheW91dE5vZGUgfSBmcm9tICcuL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBTb3J0aW5nRGlyZWN0aW9uIH0gZnJvbSAnLi4vZGF0YS1vcGVyYXRpb25zL3NvcnRpbmctc3RyYXRlZ3knO1xuZXhwb3J0IGludGVyZmFjZSBDb2x1bW5Hcm91cHNDYWNoZSB7XG4gICAgbGV2ZWw6IG51bWJlcjtcbiAgICB2aXNpYmxlSW5kZXg6IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGl2ZU5vZGUge1xuICAgIGdyaWRJRD86IHN0cmluZztcbiAgICByb3c6IG51bWJlcjtcbiAgICBjb2x1bW4/OiBudW1iZXI7XG4gICAgbGV2ZWw/OiBudW1iZXI7XG4gICAgbWNoQ2FjaGU/OiBDb2x1bW5Hcm91cHNDYWNoZTtcbiAgICBsYXlvdXQ/OiBJTXVsdGlSb3dMYXlvdXROb2RlO1xufVxuXG4vKiogQGhpZGRlbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIElneEdyaWROYXZpZ2F0aW9uU2VydmljZSB7XG4gICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlO1xuICAgIHB1YmxpYyBfYWN0aXZlTm9kZTogSUFjdGl2ZU5vZGUgPSB7fSBhcyBJQWN0aXZlTm9kZTtcbiAgICBwdWJsaWMgbGFzdEFjdGl2ZU5vZGU6IElBY3RpdmVOb2RlID0ge30gYXMgSUFjdGl2ZU5vZGU7XG4gICAgcHJvdGVjdGVkIHBlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgZ2V0IGFjdGl2ZU5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3RpdmVOb2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgYWN0aXZlTm9kZSh2YWx1ZTogSUFjdGl2ZU5vZGUpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlTm9kZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm1VdGlsKSB7IH1cblxuICAgIHB1YmxpYyBoYW5kbGVOYXZpZ2F0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGwgJiYgTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCAmJiBTVVBQT1JURURfS0VZUy5oYXMoa2V5KSB8fCAoa2V5ID09PSAndGFiJyAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LnJlcGVhdCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpLCAxKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzcGF0Y2hFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZU5vZGUgfHwgIShTVVBQT1JURURfS0VZUy5oYXMoa2V5KSB8fCAoa2V5ID09PSAndGFiJyAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbCkpICYmXG4gICAgICAgICAgICAhdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0VkaXRpbmdCbG9ja2VkICYmICF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNoaWZ0ID0gZXZlbnQuc2hpZnRLZXk7XG4gICAgICAgIGNvbnN0IGN0cmwgPSBldmVudC5jdHJsS2V5O1xuICAgICAgICBpZiAoTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpICYmIHRoaXMucGVuZGluZ05hdmlnYXRpb24pIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0eXBlID0gdGhpcy5pc0RhdGFSb3codGhpcy5hY3RpdmVOb2RlLnJvdykgPyAnZGF0YUNlbGwnIDpcbiAgICAgICAgICAgIHRoaXMuaXNEYXRhUm93KHRoaXMuYWN0aXZlTm9kZS5yb3csIHRydWUpID8gJ3N1bW1hcnlDZWxsJyA6ICdncm91cFJvdyc7XG4gICAgICAgIGlmICh0aGlzLmVtaXRLZXlEb3duKHR5cGUsIHRoaXMuYWN0aXZlTm9kZS5yb3csIGV2ZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQWx0KGtleSwgZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChbJyAnLCAnc3BhY2ViYXInLCAnc3BhY2UnXS5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5rZXlib2FyZFN0YXRlT25LZXlkb3duKHRoaXMuYWN0aXZlTm9kZSwgc2hpZnQsIHNoaWZ0ICYmIGtleSA9PT0gJ3RhYicpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5nZXROZXh0UG9zaXRpb24odGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiwga2V5LCBzaGlmdCwgY3RybCwgZXZlbnQpO1xuICAgICAgICBpZiAoTkFWSUdBVElPTl9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZUluQm9keShwb3NpdGlvbi5yb3dJbmRleCwgcG9zaXRpb24uY29sSW5kZXgsIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICBvYmoudGFyZ2V0LmFjdGl2YXRlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdW1tYXJ5TmF2KGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzU3VtbWFyaXplZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbE5hdihldmVudCwgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCksIHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGgsICdzdW1tYXJ5Q2VsbCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhlYWRlck5hdmlnYXRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghSEVBREVSX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IGN0cmwgPSBldmVudC5jdHJsS2V5O1xuICAgICAgICBjb25zdCBzaGlmdCA9IGV2ZW50LnNoaWZ0S2V5O1xuICAgICAgICBjb25zdCBhbHQgPSBldmVudC5hbHRLZXk7XG5cbiAgICAgICAgdGhpcy5wZXJmb3JtSGVhZGVyS2V5Q29tYmluYXRpb24odGhpcy5jdXJyZW50QWN0aXZlQ29sdW1uLCBrZXksIHNoaWZ0LCBjdHJsLCBhbHQsIGV2ZW50KTtcbiAgICAgICAgaWYgKHNoaWZ0IHx8IGFsdCB8fCAoY3RybCAmJiAoa2V5LmluY2x1ZGVzKCdkb3duJykgfHwga2V5LmluY2x1ZGVzKCdkb3duJykpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaGFzQ29sdW1uR3JvdXBzKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZU1DSGVhZGVyTmF2KGtleSwgY3RybCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhvcml6b250YWxOYXYoZXZlbnQsIGtleSwgLTEsICdoZWFkZXJDZWxsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNUYm9keShldmVudCkge1xuICAgICAgICBjb25zdCBncmlkUm93cyA9IHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci50b3RhbEl0ZW1Db3VudCA/PyB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoO1xuICAgICAgICBpZiAoZ3JpZFJvd3MgPCAxKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUgPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5hY3RpdmVOb2RlIHx8ICFPYmplY3Qua2V5cyh0aGlzLmFjdGl2ZU5vZGUpLmxlbmd0aCB8fCB0aGlzLmFjdGl2ZU5vZGUucm93IDwgMCB8fCB0aGlzLmFjdGl2ZU5vZGUucm93ID4gZ3JpZFJvd3MgLSAxKSB7XG4gICAgICAgICAgICBjb25zdCBoYXNMYXN0QWN0aXZlTm9kZSA9IE9iamVjdC5rZXlzKHRoaXMubGFzdEFjdGl2ZU5vZGUpLmxlbmd0aDtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZENsZWFyU2VsZWN0aW9uID0gaGFzTGFzdEFjdGl2ZU5vZGUgJiYgKHRoaXMubGFzdEFjdGl2ZU5vZGUucm93IDwgMCB8fCB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyA+IGdyaWRSb3dzIC0gMSk7XG4gICAgICAgICAgICB0aGlzLnNldEFjdGl2ZU5vZGUodGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cgPj0gMCAmJiB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyA8IGdyaWRSb3dzID9cbiAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VmlzaWJsZU5vZGUodGhpcy5sYXN0QWN0aXZlTm9kZS5yb3cpIDogdGhpcy5maXJzdFZpc2libGVOb2RlKCkpO1xuICAgICAgICAgICAgaWYgKHNob3VsZENsZWFyU2VsZWN0aW9uIHx8ICh0aGlzLmdyaWQuY2VsbFNlbGVjdGlvbiAhPT0gR3JpZFNlbGVjdGlvbk1vZGUubXVsdGlwbGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNsZWFyQ2VsbFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0ZVRvKHRoaXMuYWN0aXZlTm9kZS5yb3csIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sIChvYmopID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5hY3RpdmVOb2RlLnJvdyA9PT0gb2JqLnRhcmdldC5yb3cuaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iai50YXJnZXQ/LmFjdGl2YXRlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLm5hdmlnYXRlVG8odGhpcy5hY3RpdmVOb2RlLnJvdywgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB7XG4gICAgICAgICAgICAgICAgICAgIHJvd1N0YXJ0OiB0aGlzLmFjdGl2ZU5vZGUucm93LCByb3dFbmQ6IHRoaXMuYWN0aXZlTm9kZS5yb3csXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtblN0YXJ0OiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBjb2x1bW5FbmQ6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW5cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3RSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLm5vdGlmeUNoYW5nZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1c0ZpcnN0Q2VsbChoZWFkZXIgPSB0cnVlKSB7XG4gICAgICAgIGlmICgoaGVhZGVyIHx8IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGgpICYmIHRoaXMuYWN0aXZlTm9kZSAmJlxuICAgICAgICAgICAgKHRoaXMuYWN0aXZlTm9kZS5yb3cgPT09IC0xIHx8IHRoaXMuYWN0aXZlTm9kZS5yb3cgPT09IHRoaXMuZ3JpZC5kYXRhVmlldy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAoIWhlYWRlciAmJiAhdGhpcy5ncmlkLmhhc1N1bW1hcml6ZWRDb2x1bW5zKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaG91bGRTY3JvbGxJbnRvVmlldyA9IHRoaXMubGFzdEFjdGl2ZU5vZGUgJiYgKGhlYWRlciAmJiB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyAhPT0gLTEpIHx8XG4gICAgICAgICAgICAoIWhlYWRlciAmJiB0aGlzLmxhc3RBY3RpdmVOb2RlLnJvdyAhPT0gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCk7XG4gICAgICAgIHRoaXMuc2V0QWN0aXZlTm9kZSh0aGlzLmZpcnN0VmlzaWJsZU5vZGUoaGVhZGVyID8gLTEgOiB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoKSk7XG4gICAgICAgIGlmIChzaG91bGRTY3JvbGxJbnRvVmlldykge1xuICAgICAgICAgICAgdGhpcy5wZXJmb3JtSG9yaXpvbnRhbFNjcm9sbFRvQ2VsbCh0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc0NvbHVtbkZ1bGx5VmlzaWJsZShjb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGlmIChjb2x1bW5JbmRleCA8IDAgfHwgdGhpcy5pc0NvbHVtblBpbm5lZChjb2x1bW5JbmRleCwgdGhpcy5mb3JPZkRpcigpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldENvbHVtblVucGlubmVkSW5kZXgoY29sdW1uSW5kZXgpO1xuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4ICsgMSkgLSB0aGlzLmZvck9mRGlyKCkuZ2V0Q29sdW1uU2Nyb2xsTGVmdChpbmRleCk7XG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlDb250YWluZXJXaWR0aCA8IHdpZHRoICYmIHRoaXMuZGlzcGxheUNvbnRhaW5lclNjcm9sbExlZnQgPT09IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheUNvbnRhaW5lcldpZHRoID49IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4ICsgMSkgLSB0aGlzLmRpc3BsYXlDb250YWluZXJTY3JvbGxMZWZ0ICYmXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlDb250YWluZXJTY3JvbGxMZWZ0IDw9IHRoaXMuZm9yT2ZEaXIoKS5nZXRDb2x1bW5TY3JvbGxMZWZ0KGluZGV4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvdWxkUGVyZm9ybUhvcml6b250YWxTY3JvbGwodmlzaWJsZUNvbEluZGV4OiBudW1iZXIsIHJvd0luZGV4ID0gLTEpIHtcbiAgICAgICAgaWYgKHZpc2libGVDb2xJbmRleCA8IDAgfHwgdmlzaWJsZUNvbEluZGV4ID4gdGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93SW5kZXggPCAwIHx8IHJvd0luZGV4ID4gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0NvbHVtbkZ1bGx5VmlzaWJsZSh2aXNpYmxlQ29sSW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tyb3dJbmRleF07XG4gICAgICAgIHJldHVybiByb3cuZXhwcmVzc2lvbiB8fCByb3cuZGV0YWlsc0RhdGEgPyBmYWxzZSA6ICF0aGlzLmlzQ29sdW1uRnVsbHlWaXNpYmxlKHZpc2libGVDb2xJbmRleCk7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbCh0YXJnZXRSb3dJbmRleDogbnVtYmVyLCB2aXNpYmxlQ29sSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5ncmlkLmlzUmVjb3JkUGlubmVkQnlWaWV3SW5kZXgodGFyZ2V0Um93SW5kZXgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2Nyb2xsUm93SW5kZXggPSB0aGlzLmdyaWQuaGFzUGlubmVkUmVjb3JkcyAmJiB0aGlzLmdyaWQuaXNSb3dQaW5uaW5nVG9Ub3AgP1xuICAgICAgICAgICAgdGFyZ2V0Um93SW5kZXggLSB0aGlzLmdyaWQucGlubmVkRGF0YVZpZXcubGVuZ3RoIDogdGFyZ2V0Um93SW5kZXg7XG4gICAgICAgIGNvbnN0IHRhcmdldFJvdyA9IHRoaXMuZ2V0Um93RWxlbWVudEJ5SW5kZXgodGFyZ2V0Um93SW5kZXgpO1xuICAgICAgICBjb25zdCByb3dIZWlnaHQgPSB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuZ2V0U2l6ZUF0KHNjcm9sbFJvd0luZGV4KTtcbiAgICAgICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5ncmlkLmNhbGNIZWlnaHQgPyBNYXRoLmNlaWwodGhpcy5ncmlkLmNhbGNIZWlnaHQpIDogMDtcbiAgICAgICAgY29uc3QgZW5kVG9wT2Zmc2V0ID0gdGFyZ2V0Um93ID8gdGFyZ2V0Um93Lm9mZnNldFRvcCArIHJvd0hlaWdodCArIHRoaXMuY29udGFpbmVyVG9wT2Zmc2V0IDogY29udGFpbmVySGVpZ2h0ICsgcm93SGVpZ2h0O1xuICAgICAgICAvLyB0aGlzIGlzIHdvcmthcm91bmQ6IGVuZFRvcE9mZnNldCAtIGNvbnRhaW5lckhlaWdodCA+IDUgYW5kIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoOiBjb250YWluZXJIZWlnaHQgPCBlbmRUb3BPZmZzZXRcbiAgICAgICAgLy8gd2hlbiB0aGUgcGFnZSBpcyB6b29tZWQgdGhlIGdyaWQgZG9lcyBub3Qgc2Nyb2xsIHRoZSByb3cgY29tcGxldGVseSBpbiB0aGUgdmlld1xuICAgICAgICByZXR1cm4gIXRhcmdldFJvdyB8fCB0YXJnZXRSb3cub2Zmc2V0VG9wIDwgTWF0aC5hYnModGhpcy5jb250YWluZXJUb3BPZmZzZXQpXG4gICAgICAgICAgICB8fCBjb250YWluZXJIZWlnaHQgJiYgZW5kVG9wT2Zmc2V0IC0gY29udGFpbmVySGVpZ2h0ID4gNTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGVyZm9ybVZlcnRpY2FsU2Nyb2xsVG9DZWxsKHJvd0luZGV4OiBudW1iZXIsIHZpc2libGVDb2xJbmRleCA9IC0xLCBjYj86ICgpID0+IHZvaWQpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFBlcmZvcm1WZXJ0aWNhbFNjcm9sbChyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICAvLyBPbmx5IGZvciB0b3AgcGlubmluZyB3ZSBuZWVkIHRvIHN1YnRyYWN0IHBpbm5lZCBjb3VudCBiZWNhdXNlIHZpcnR1YWxpemF0aW9uIGluZGV4aW5nIGRvZXNuJ3QgY291bnQgcGlubmVkIHJvd3MuXG4gICAgICAgIGNvbnN0IHNjcm9sbFJvd0luZGV4ID0gdGhpcy5ncmlkLmhhc1Bpbm5lZFJlY29yZHMgJiYgdGhpcy5ncmlkLmlzUm93UGlubmluZ1RvVG9wID9cbiAgICAgICAgICAgIHJvd0luZGV4IC0gdGhpcy5ncmlkLnBpbm5lZERhdGFWaWV3Lmxlbmd0aCA6IHJvd0luZGV4O1xuICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuc2Nyb2xsVG8oc2Nyb2xsUm93SW5kZXgpO1xuICAgICAgICB0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuY2h1bmtMb2FkXG4gICAgICAgICAgICAucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGVyZm9ybUhvcml6b250YWxTY3JvbGxUb0NlbGwodmlzaWJsZUNvbHVtbkluZGV4OiBudW1iZXIsIGNiPzogKCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAodGhpcy5ncmlkLnJvd0xpc3QgPCAxICYmIHRoaXMuZ3JpZC5zdW1tYXJpZXNSb3dMaXN0Lmxlbmd0aCA8IDEgJiYgdGhpcy5ncmlkLmhhc0NvbHVtbkdyb3Vwcykge1xuICAgICAgICAgICAgbGV0IGNvbHVtbiA9IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeVZpc2libGVJbmRleCh2aXNpYmxlQ29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgd2hpbGUgKGNvbHVtbi5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBjb2x1bW4ucGFyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmlzaWJsZUNvbHVtbkluZGV4ID0gdGhpcy5mb3JPZkRpcigpLmlneEZvck9mLmluZGV4T2YoY29sdW1uKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2hvdWxkUGVyZm9ybUhvcml6b250YWxTY3JvbGwodmlzaWJsZUNvbHVtbkluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZ05hdmlnYXRpb24gPSB0cnVlO1xuICAgICAgICB0aGlzLmdyaWQucGFyZW50VmlydERpci5jaHVua0xvYWRcbiAgICAgICAgICAgIC5waXBlKGZpcnN0KCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdOYXZpZ2F0aW9uID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGNiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNiKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZm9yT2ZEaXIoKS5zY3JvbGxUbyh0aGlzLmdldENvbHVtblVucGlubmVkSW5kZXgodmlzaWJsZUNvbHVtbkluZGV4KSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRGF0YVJvdyhyb3dJbmRleDogbnVtYmVyLCBpbmNsdWRlU3VtbWFyeSA9IGZhbHNlKSB7XG4gICAgICAgIGxldCBjdXJSb3c6IGFueTtcblxuICAgICAgICBpZiAocm93SW5kZXggPCAwIHx8IHJvd0luZGV4ID4gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGN1clJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tyb3dJbmRleCAtIHRoaXMuZ3JpZC52aXJ0dWFsaXphdGlvblN0YXRlLnN0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgaWYgKCFjdXJSb3cpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBkYXRhIGlzIHJlbW90ZSwgcmVjb3JkIG1pZ2h0IG5vdCBiZSBpbiB0aGUgdmlldyB5ZXQuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC52ZXJ0aWNhbFNjcm9sbENvbnRhaW5lci5pc1JlbW90ZSAmJiByb3dJbmRleCA+PSAwICYmIHJvd0luZGV4IDw9ICh0aGlzLmdyaWQgYXMgYW55KS50b3RhbEl0ZW1Db3VudCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJSb3cgPSB0aGlzLmdyaWQuZGF0YVZpZXdbcm93SW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJSb3cgJiYgIXRoaXMuZ3JpZC5pc0dyb3VwQnlSZWNvcmQoY3VyUm93KSAmJiAhdGhpcy5ncmlkLmlzRGV0YWlsUmVjb3JkKGN1clJvdylcbiAgICAgICAgICAgICYmICFjdXJSb3cuY2hpbGRHcmlkc0RhdGEgJiYgKGluY2x1ZGVTdW1tYXJ5IHx8ICFjdXJSb3cuc3VtbWFyaWVzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNHcm91cFJvdyhyb3dJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGlmIChyb3dJbmRleCA8IDAgfHwgcm93SW5kZXggPiB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1clJvdyA9IHRoaXMuZ3JpZC5kYXRhVmlld1tyb3dJbmRleF07XG4gICAgICAgIHJldHVybiBjdXJSb3cgJiYgdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChjdXJSb3cpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRBY3RpdmVOb2RlKGFjdGl2ZU5vZGU6IElBY3RpdmVOb2RlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0FjdGl2ZU5vZGVDaGFuZ2VkKGFjdGl2ZU5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVOb2RlID0gYWN0aXZlTm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5hY3RpdmVOb2RlLCBhY3RpdmVOb2RlKTtcblxuICAgICAgICBjb25zdCBjdXJyUm93ID0gdGhpcy5ncmlkLmRhdGFWaWV3W2FjdGl2ZU5vZGUucm93XTtcbiAgICAgICAgY29uc3QgdHlwZTogR3JpZEtleWRvd25UYXJnZXRUeXBlID0gYWN0aXZlTm9kZS5yb3cgPCAwID8gJ2hlYWRlckNlbGwnIDpcbiAgICAgICAgICAgIHRoaXMuaXNEYXRhUm93KGFjdGl2ZU5vZGUucm93KSA/ICdkYXRhQ2VsbCcgOlxuICAgICAgICAgICAgICAgIGN1cnJSb3cgJiYgdGhpcy5ncmlkLmlzR3JvdXBCeVJlY29yZChjdXJyUm93KSA/ICdncm91cFJvdycgOlxuICAgICAgICAgICAgICAgICAgICBjdXJyUm93ICYmIHRoaXMuZ3JpZC5pc0RldGFpbFJlY29yZChjdXJyUm93KSA/ICdtYXN0ZXJEZXRhaWxSb3cnIDogJ3N1bW1hcnlDZWxsJztcblxuICAgICAgICBjb25zdCBhcmdzOiBJQWN0aXZlTm9kZUNoYW5nZUV2ZW50QXJncyA9IHtcbiAgICAgICAgICAgIHJvdzogdGhpcy5hY3RpdmVOb2RlLnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbixcbiAgICAgICAgICAgIGxldmVsOiB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwsXG4gICAgICAgICAgICB0YWc6IHR5cGVcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmdyaWQuYWN0aXZlTm9kZUNoYW5nZS5lbWl0KGFyZ3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0FjdGl2ZU5vZGVDaGFuZ2VkKGFjdGl2ZU5vZGU6IElBY3RpdmVOb2RlKSB7XG4gICAgICAgIGxldCBpc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgY2hlY2tJbm5lclByb3AgPSAoYWNpdmVOb2RlOiBDb2x1bW5Hcm91cHNDYWNoZSB8IElNdWx0aVJvd0xheW91dE5vZGUsIHByb3ApID0+IHtcbiAgICAgICAgICAgIGlmICghYWNpdmVOb2RlKSB7XG4gICAgICAgICAgICAgICAgaXNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYWNpdmVOb2RlKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcE5hbWUgb2YgcHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hY3RpdmVOb2RlW3Byb3BdW3Byb3BOYW1lXSAhPT0gYWNpdmVOb2RlW3Byb3BOYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICBpc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBpZiAoIXRoaXMuYWN0aXZlTm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhhY3RpdmVOb2RlKTtcbiAgICAgICAgZm9yIChjb25zdCBwcm9wTmFtZSBvZiBwcm9wcykge1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5hY3RpdmVOb2RlW3Byb3BOYW1lXSAmJiB0eXBlb2YgdGhpcy5hY3RpdmVOb2RlW3Byb3BOYW1lXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBjaGVja0lubmVyUHJvcChhY3RpdmVOb2RlW3Byb3BOYW1lXSwgcHJvcE5hbWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFjdGl2ZU5vZGVbcHJvcE5hbWVdICE9PSBhY3RpdmVOb2RlW3Byb3BOYW1lXSkge1xuICAgICAgICAgICAgICAgIGlzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXNDaGFuZ2VkO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXROZXh0UG9zaXRpb24ocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlciwga2V5OiBzdHJpbmcsIHNoaWZ0OiBib29sZWFuLCBjdHJsOiBib29sZWFuLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNEYXRhUm93KHJvd0luZGV4LCB0cnVlKSAmJiAoa2V5LmluZGV4T2YoJ2Rvd24nKSA8IDAgfHwga2V5LmluZGV4T2YoJ3VwJykgPCAwKSAmJiBjdHJsKSB7XG4gICAgICAgICAgICByZXR1cm4geyByb3dJbmRleCwgY29sSW5kZXggfTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncGFnZWRvd24nOlxuICAgICAgICAgICAgY2FzZSAncGFnZXVwJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdwYWdlZG93bicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnNjcm9sbE5leHRQYWdlKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLnNjcm9sbFByZXZQYWdlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRDZWxsID0gdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmNlbGw7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnZlcnRpY2FsU2Nyb2xsQ29udGFpbmVyLmNodW5rTG9hZFxuICAgICAgICAgICAgICAgICAgICAucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVkaXRDZWxsICYmIHRoaXMuZ3JpZC5yb3dMaXN0Lm1hcChyID0+IHIuaW5kZXgpLmluZGV4T2YoZWRpdENlbGwucm93SW5kZXgpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd0YWInOlxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRWRpdGluZyhzaGlmdCwgZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICByb3dJbmRleCA9IGN0cmwgPyB0aGlzLmZpbmRMYXN0RGF0YVJvd0luZGV4KCkgOiB0aGlzLmFjdGl2ZU5vZGUucm93O1xuICAgICAgICAgICAgICAgIGNvbEluZGV4ID0gdGhpcy5sYXN0Q29sdW1uSW5kZXg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob21lJzpcbiAgICAgICAgICAgICAgICByb3dJbmRleCA9IGN0cmwgPyB0aGlzLmZpbmRGaXJzdERhdGFSb3dJbmRleCgpIDogdGhpcy5hY3RpdmVOb2RlLnJvdztcbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdhcnJvd2xlZnQnOlxuICAgICAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgICAgICAgY29sSW5kZXggPSBjdHJsID8gMCA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnYXJyb3dyaWdodCc6XG4gICAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICAgICAgY29sSW5kZXggPSBjdHJsID8gdGhpcy5sYXN0Q29sdW1uSW5kZXggOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICsgMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93dXAnOlxuICAgICAgICAgICAgY2FzZSAndXAnOlxuICAgICAgICAgICAgICAgIGlmIChjdHJsICYmICF0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCkgfHwgKHRoaXMuZ3JpZC5yb3dFZGl0YWJsZSAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93RWRpdGluZ0Jsb2NrZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gIT09IHVuZGVmaW5lZCA/IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gOiAwO1xuICAgICAgICAgICAgICAgIHJvd0luZGV4ID0gY3RybCA/IHRoaXMuZmluZEZpcnN0RGF0YVJvd0luZGV4KCkgOiB0aGlzLmFjdGl2ZU5vZGUucm93IC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2Fycm93ZG93bic6XG4gICAgICAgICAgICBjYXNlICdkb3duJzpcbiAgICAgICAgICAgICAgICBpZiAoKGN0cmwgJiYgIXRoaXMuaXNEYXRhUm93KHJvd0luZGV4KSkgfHwgKHRoaXMuZ3JpZC5yb3dFZGl0YWJsZSAmJiB0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93RWRpdGluZ0Jsb2NrZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb2xJbmRleCA9IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gIT09IHVuZGVmaW5lZCA/IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gOiAwO1xuICAgICAgICAgICAgICAgIHJvd0luZGV4ID0gY3RybCA/IHRoaXMuZmluZExhc3REYXRhUm93SW5kZXgoKSA6IHRoaXMuYWN0aXZlTm9kZS5yb3cgKyAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW50ZXInOlxuICAgICAgICAgICAgY2FzZSAnZjInOlxuICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfY2VsbF9ieV92aXNpYmxlX2luZGV4KHRoaXMuYWN0aXZlTm9kZS5yb3csIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0RhdGFSb3cocm93SW5kZXgpIHx8ICFjZWxsLmVkaXRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuZW50ZXJFZGl0TW9kZShjZWxsLCBldmVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdlc2NhcGUnOlxuICAgICAgICAgICAgY2FzZSAnZXNjJzpcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNEYXRhUm93KHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncmlkLmNydWRTZXJ2aWNlLmlzSW5Db21wb3NpdGlvbk1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuY3J1ZFNlcnZpY2UuY2VsbEluRWRpdE1vZGUgfHwgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLnJvd0luRWRpdE1vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncmlkLmNydWRTZXJ2aWNlLmVuZEVkaXQoZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNFZGdlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQudGJvZHkubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJyAnOlxuICAgICAgICAgICAgY2FzZSAnc3BhY2ViYXInOlxuICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd09iaiA9IHRoaXMuZ3JpZC5ncmlkQVBJLmdldF9yb3dfYnlfaW5kZXgodGhpcy5hY3RpdmVOb2RlLnJvdyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5pc1Jvd1NlbGVjdGFibGUgJiYgcm93T2JqKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGF0YVJvdyhyb3dJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3dPYmouc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5kZXNlbGVjdFJvdyhyb3dPYmoua2V5LCBldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdFJvd0J5SWQocm93T2JqLmtleSwgZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0dyb3VwUm93KHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKChyb3dPYmogYXMgYW55KSBhcyBJZ3hHcmlkR3JvdXBCeVJvd0NvbXBvbmVudCkub25Hcm91cFNlbGVjdG9yQ2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcm93SW5kZXgsIGNvbEluZGV4IH07XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGhvcml6b250YWxOYXYoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGtleTogc3RyaW5nLCByb3dJbmRleDogbnVtYmVyLCB0YWc6IEdyaWRLZXlkb3duVGFyZ2V0VHlwZSkge1xuICAgICAgICBjb25zdCBjdHJsID0gZXZlbnQuY3RybEtleTtcbiAgICAgICAgaWYgKCFIT1JJWk9OVEFMX05BVl9LRVlTLmhhcyhldmVudC5rZXkudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmFjdGl2ZU5vZGUucm93ID0gcm93SW5kZXg7XG4gICAgICAgIGlmIChyb3dJbmRleCA+IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVtaXRLZXlEb3duKCdzdW1tYXJ5Q2VsbCcsIHRoaXMuYWN0aXZlTm9kZS5yb3csIGV2ZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG5ld0FjdGl2ZU5vZGUgPSB7XG4gICAgICAgICAgICBjb2x1bW46IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sXG4gICAgICAgICAgICBtY2hDYWNoZToge1xuICAgICAgICAgICAgICAgIGxldmVsOiB0aGlzLmFjdGl2ZU5vZGUubGV2ZWwsXG4gICAgICAgICAgICAgICAgdmlzaWJsZUluZGV4OiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKChrZXkuaW5jbHVkZXMoJ2xlZnQnKSB8fCBrZXkgPT09ICdob21lJykgJiYgdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiA+IDApIHtcbiAgICAgICAgICAgIG5ld0FjdGl2ZU5vZGUuY29sdW1uID0gY3RybCB8fCBrZXkgPT09ICdob21lJyA/IDAgOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGtleS5pbmNsdWRlcygncmlnaHQnKSB8fCBrZXkgPT09ICdlbmQnKSAmJiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uIDwgdGhpcy5sYXN0Q29sdW1uSW5kZXgpIHtcbiAgICAgICAgICAgIG5ld0FjdGl2ZU5vZGUuY29sdW1uID0gY3RybCB8fCBrZXkgPT09ICdlbmQnID8gdGhpcy5sYXN0Q29sdW1uSW5kZXggOiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uICsgMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YWcgPT09ICdoZWFkZXJDZWxsJykge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5ncmlkLmdldENvbHVtbkJ5VmlzaWJsZUluZGV4KG5ld0FjdGl2ZU5vZGUuY29sdW1uKTtcbiAgICAgICAgICAgIG5ld0FjdGl2ZU5vZGUubWNoQ2FjaGUubGV2ZWwgPSBjb2x1bW4ubGV2ZWw7XG4gICAgICAgICAgICBuZXdBY3RpdmVOb2RlLm1jaENhY2hlLnZpc2libGVJbmRleCA9IGNvbHVtbi52aXNpYmxlSW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEFjdGl2ZU5vZGUoeyByb3c6IHRoaXMuYWN0aXZlTm9kZS5yb3csIGNvbHVtbjogbmV3QWN0aXZlTm9kZS5jb2x1bW4sIG1jaENhY2hlOiBuZXdBY3RpdmVOb2RlLm1jaENhY2hlIH0pO1xuICAgICAgICB0aGlzLnBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsVG9DZWxsKHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4pO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgbGFzdENvbHVtbkluZGV4KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoLi4udGhpcy5ncmlkLnZpc2libGVDb2x1bW5zLm1hcChjb2wgPT4gY29sLnZpc2libGVJbmRleCkpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IGRpc3BsYXlDb250YWluZXJXaWR0aCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5ncmlkLnBhcmVudFZpcnREaXIuZGMuaW5zdGFuY2UuX3ZpZXdDb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBkaXNwbGF5Q29udGFpbmVyU2Nyb2xsTGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLmdyaWQuaGVhZGVyQ29udGFpbmVyLnNjcm9sbFBvc2l0aW9uKTtcbiAgICB9XG4gICAgcHVibGljIGdldCBjb250YWluZXJUb3BPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiBwYXJzZUludCh0aGlzLmdyaWQudmVydGljYWxTY3JvbGxDb250YWluZXIuZGMuaW5zdGFuY2UuX3ZpZXdDb250YWluZXIuZWxlbWVudC5uYXRpdmVFbGVtZW50LnN0eWxlLnRvcCwgMTApO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRDb2x1bW5VbnBpbm5lZEluZGV4KHZpc2libGVDb2x1bW5JbmRleDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ3JpZC51bnBpbm5lZENvbHVtbnMuZmluZCgoY29sKSA9PiAhY29sLmNvbHVtbkdyb3VwICYmIGNvbC52aXNpYmxlSW5kZXggPT09IHZpc2libGVDb2x1bW5JbmRleCk7XG4gICAgICAgIHJldHVybiB0aGlzLmdyaWQucGlubmVkQ29sdW1ucy5sZW5ndGggPyB0aGlzLmdyaWQudW5waW5uZWRDb2x1bW5zLmZpbHRlcigoYykgPT4gIWMuY29sdW1uR3JvdXApLmluZGV4T2YoY29sdW1uKSA6XG4gICAgICAgICAgICB2aXNpYmxlQ29sdW1uSW5kZXg7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGZvck9mRGlyKCk6IElneEZvck9mRGlyZWN0aXZlPGFueT4ge1xuICAgICAgICBjb25zdCBmb3JPZkRpciA9IHRoaXMuZ3JpZC5kYXRhUm93TGlzdC5sZW5ndGggPiAwID8gdGhpcy5ncmlkLmRhdGFSb3dMaXN0LmZpcnN0LnZpcnREaXJSb3cgOiB0aGlzLmdyaWQuc3VtbWFyaWVzUm93TGlzdC5sZW5ndGggP1xuICAgICAgICAgICAgdGhpcy5ncmlkLnN1bW1hcmllc1Jvd0xpc3QuZmlyc3QudmlydERpclJvdyA6IHRoaXMuZ3JpZC5oZWFkZXJDb250YWluZXI7XG4gICAgICAgIHJldHVybiBmb3JPZkRpciBhcyBJZ3hGb3JPZkRpcmVjdGl2ZTxhbnk+O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVBbHQoa2V5OiBzdHJpbmcsIGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIC8vIHRvZG8gVE9ETyBST1dcbiAgICAgICAgY29uc3Qgcm93ID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19ieV9pbmRleCh0aGlzLmFjdGl2ZU5vZGUucm93KTtcblxuICAgICAgICBpZiAoISh0aGlzLmlzVG9nZ2xlS2V5KGtleSkgfHwgdGhpcy5pc0FkZEtleShrZXkpKSB8fCAhcm93KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBZGRLZXkoa2V5KSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmdyaWQucm93RWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBncmlkIG11c3QgYmUgaW4gcm93IGVkaXQgbW9kZSB0byBwZXJmb3JtIHJvdyBhZGRpbmchJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgJiYgcm93LnRyZWVSb3cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbnRlckFkZFJvd01vZGUocm93LCB0cnVlLCBldmVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbnRlckFkZFJvd01vZGUocm93LCBmYWxzZSwgZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCFyb3cuZXhwYW5kZWQgJiYgUk9XX0VYUEFORF9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBpZiAocm93LmtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETyB1c2UgZXhwYW5kZWQgcm93LmV4cGFuZGVkID0gIXJvdy5leHBhbmRlZDtcbiAgICAgICAgICAgICAgICAocm93IGFzIGFueSkudG9nZ2xlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5ncmlkQVBJLnNldF9yb3dfZXhwYW5zaW9uX3N0YXRlKHJvdy5rZXksIHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyb3cuZXhwYW5kZWQgJiYgUk9XX0NPTExBUFNFX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGlmIChyb3cua2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPIHVzZSBleHBhbmRlZCByb3cuZXhwYW5kZWQgPSAhcm93LmV4cGFuZGVkO1xuICAgICAgICAgICAgICAgIChyb3cgYXMgYW55KS50b2dnbGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkuc2V0X3Jvd19leHBhbnNpb25fc3RhdGUocm93LmtleSwgZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdyaWQubm90aWZ5Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBoYW5kbGVFZGl0aW5nKHNoaWZ0OiBib29sZWFuLCBldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBuZXh0ID0gc2hpZnQgPyB0aGlzLmdyaWQuZ2V0UHJldmlvdXNDZWxsKHRoaXMuYWN0aXZlTm9kZS5yb3csIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4sIGNvbCA9PiBjb2wuZWRpdGFibGUpIDpcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5nZXROZXh0Q2VsbCh0aGlzLmFjdGl2ZU5vZGUucm93LCB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uLCBjb2wgPT4gY29sLmVkaXRhYmxlKTtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSAmJiB0aGlzLmlzQWN0aXZlTm9kZShuZXh0LnJvd0luZGV4LCBuZXh0LnZpc2libGVDb2x1bW5JbmRleCkpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jcnVkU2VydmljZS5lbmRFZGl0KHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC50Ym9keS5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCh0aGlzLmdyaWQuY3J1ZFNlcnZpY2Uucm93SW5FZGl0TW9kZSAmJiB0aGlzLmdyaWQucm93RWRpdFRhYnMubGVuZ3RoKSAmJlxuICAgICAgICAgICAgKHRoaXMuYWN0aXZlTm9kZS5yb3cgIT09IG5leHQucm93SW5kZXggfHwgdGhpcy5pc0FjdGl2ZU5vZGUobmV4dC5yb3dJbmRleCwgbmV4dC52aXNpYmxlQ29sdW1uSW5kZXgpKSkge1xuICAgICAgICAgICAgY29uc3QgYXJncyA9IHRoaXMuZ3JpZC5jcnVkU2VydmljZS51cGRhdGVDZWxsKHRydWUsIGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hpZnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdyaWQucm93RWRpdFRhYnMubGFzdC5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncmlkLnJvd0VkaXRUYWJzLmZpcnN0LmVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5jcnVkU2VydmljZS5yb3dJbkVkaXRNb2RlICYmICF0aGlzLmdyaWQucm93RWRpdFRhYnMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoc2hpZnQgJiYgbmV4dC5yb3dJbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLnJvdyAmJiBuZXh0LnZpc2libGVDb2x1bW5JbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbikge1xuICAgICAgICAgICAgICAgIG5leHQudmlzaWJsZUNvbHVtbkluZGV4ID0gdGhpcy5ncmlkLmxhc3RFZGl0YWJsZUNvbHVtbkluZGV4O1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc2hpZnQgJiYgbmV4dC5yb3dJbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLnJvdyAmJiBuZXh0LnZpc2libGVDb2x1bW5JbmRleCA9PT0gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbikge1xuICAgICAgICAgICAgICAgIG5leHQudmlzaWJsZUNvbHVtbkluZGV4ID0gdGhpcy5ncmlkLmZpcnN0RWRpdGFibGVDb2x1bW5JbmRleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV4dC5yb3dJbmRleCA9IHRoaXMuYWN0aXZlTm9kZS5yb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5hdmlnYXRlSW5Cb2R5KG5leHQucm93SW5kZXgsIG5leHQudmlzaWJsZUNvbHVtbkluZGV4LCAob2JqKSA9PiB7XG4gICAgICAgICAgICBvYmoudGFyZ2V0LmFjdGl2YXRlKGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgbmF2aWdhdGVJbkJvZHkocm93SW5kZXgsIHZpc2libGVDb2xJbmRleCwgY2I6IChhcmc6IGFueSkgPT4gdm9pZCA9IG51bGwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRQb3NpdGlvbihyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4KSB8fCB0aGlzLmlzQWN0aXZlTm9kZShyb3dJbmRleCwgdmlzaWJsZUNvbEluZGV4KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ3JpZC5uYXZpZ2F0ZVRvKHJvd0luZGV4LCB2aXNpYmxlQ29sSW5kZXgsIGNiKTtcbiAgICB9XG5cblxuICAgIHByb3RlY3RlZCBlbWl0S2V5RG93bih0eXBlOiBHcmlkS2V5ZG93blRhcmdldFR5cGUsIHJvd0luZGV4LCBldmVudCkge1xuICAgICAgICBjb25zdCByb3cgPSB0aGlzLmdyaWQuc3VtbWFyaWVzUm93TGlzdC50b0FycmF5KCkuY29uY2F0KHRoaXMuZ3JpZC5yb3dMaXN0LnRvQXJyYXkoKSkuZmluZChyID0+IHIuaW5kZXggPT09IHJvd0luZGV4KTtcbiAgICAgICAgaWYgKCFyb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHR5cGUgPT09ICdncm91cFJvdycgPyByb3cgOlxuICAgICAgICAgICAgdHlwZSA9PT0gJ2RhdGFDZWxsJyA/IHJvdy5jZWxscz8uZmluZChjID0+IGMudmlzaWJsZUNvbHVtbkluZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKSA6XG4gICAgICAgICAgICAgICAgcm93LnN1bW1hcnlDZWxscz8uZmluZChjID0+IGMudmlzaWJsZUNvbHVtbkluZGV4ID09PSB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uKTtcbiAgICAgICAgY29uc3Qga2V5ZG93bkFyZ3MgPSB7IHRhcmdldFR5cGU6IHR5cGUsIGV2ZW50LCBjYW5jZWw6IGZhbHNlLCB0YXJnZXQgfTtcbiAgICAgICAgdGhpcy5ncmlkLmdyaWRLZXlkb3duLmVtaXQoa2V5ZG93bkFyZ3MpO1xuICAgICAgICBpZiAoa2V5ZG93bkFyZ3MuY2FuY2VsICYmIHR5cGUgPT09ICdkYXRhQ2VsbCcpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmdyaWQuc2VsZWN0aW9uU2VydmljZS5rZXlib2FyZFN0YXRlLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4ga2V5ZG93bkFyZ3MuY2FuY2VsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGlzQ29sdW1uUGlubmVkKGNvbHVtbkluZGV4OiBudW1iZXIsIGZvck9mRGlyOiBJZ3hGb3JPZkRpcmVjdGl2ZTxhbnk+KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWxTY3JvbGwgPSBmb3JPZkRpci5nZXRTY3JvbGwoKTtcbiAgICAgICAgcmV0dXJuICghaG9yaXpvbnRhbFNjcm9sbC5jbGllbnRXaWR0aCB8fCB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlWaXNpYmxlSW5kZXgoY29sdW1uSW5kZXgpPy5waW5uZWQpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBmaW5kRmlyc3REYXRhUm93SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhVmlldy5maW5kSW5kZXgocmVjID0+ICF0aGlzLmdyaWQuaXNHcm91cEJ5UmVjb3JkKHJlYykgJiYgIXRoaXMuZ3JpZC5pc0RldGFpbFJlY29yZChyZWMpICYmICFyZWMuc3VtbWFyaWVzKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgZmluZExhc3REYXRhUm93SW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCh0aGlzLmdyaWQgYXMgYW55KS50b3RhbEl0ZW1Db3VudCkge1xuICAgICAgICAgICAgcmV0dXJuICh0aGlzLmdyaWQgYXMgYW55KS50b3RhbEl0ZW1Db3VudCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGkgPSB0aGlzLmdyaWQuZGF0YVZpZXcubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoaS0tKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0RhdGFSb3coaSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXRSb3dFbGVtZW50QnlJbmRleChpbmRleCkge1xuICAgICAgICBpZiAodGhpcy5ncmlkLmhhc0RldGFpbHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRldGFpbCA9IHRoaXMuZ3JpZC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkZXRhaWw9XCJ0cnVlXCJdW2RhdGEtcm93aW5kZXg9XCIke2luZGV4fVwiXWApO1xuICAgICAgICAgICAgaWYgKGRldGFpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZXRhaWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5yb3dMaXN0LnRvQXJyYXkoKS5jb25jYXQodGhpcy5ncmlkLnN1bW1hcmllc1Jvd0xpc3QudG9BcnJheSgpKS5maW5kKHIgPT4gci5pbmRleCA9PT0gaW5kZXgpPy5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBpc1ZhbGlkUG9zaXRpb24ocm93SW5kZXg6IG51bWJlciwgY29sSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBsZW5ndGggPSAodGhpcy5ncmlkIGFzIGFueSkudG90YWxJdGVtQ291bnQgPz8gdGhpcy5ncmlkLmRhdGFWaWV3Lmxlbmd0aDtcbiAgICAgICAgaWYgKHJvd0luZGV4IDwgMCB8fCBjb2xJbmRleCA8IDAgfHwgbGVuZ3RoIC0gMSA8IHJvd0luZGV4IHx8IHRoaXMubGFzdENvbHVtbkluZGV4IDwgY29sSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAhPT0gY29sSW5kZXggJiYgIXRoaXMuaXNEYXRhUm93KHJvd0luZGV4LCB0cnVlKSA/IGZhbHNlIDogdHJ1ZTtcbiAgICB9XG4gICAgcHJvdGVjdGVkIHBlcmZvcm1IZWFkZXJLZXlDb21iaW5hdGlvbihjb2x1bW4sIGtleSwgc2hpZnQsIGN0cmwsIGFsdCwgZXZlbnQpIHtcbiAgICAgICAgbGV0IGRpcmVjdGlvbiA9IHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMuZmluZChleHByID0+IGV4cHIuZmllbGROYW1lID09PSBjb2x1bW4uZmllbGQpPy5kaXI7XG4gICAgICAgIGlmIChjdHJsICYmIGtleS5pbmNsdWRlcygndXAnKSAmJiBjb2x1bW4uc29ydGFibGUgJiYgIWNvbHVtbi5jb2x1bW5Hcm91cCkge1xuICAgICAgICAgICAgZGlyZWN0aW9uID0gZGlyZWN0aW9uID09PSBTb3J0aW5nRGlyZWN0aW9uLkFzYyA/IFNvcnRpbmdEaXJlY3Rpb24uTm9uZSA6IFNvcnRpbmdEaXJlY3Rpb24uQXNjO1xuICAgICAgICAgICAgdGhpcy5ncmlkLnNvcnQoeyBmaWVsZE5hbWU6IGNvbHVtbi5maWVsZCwgZGlyOiBkaXJlY3Rpb24sIGlnbm9yZUNhc2U6IGZhbHNlIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHJsICYmIGtleS5pbmNsdWRlcygnZG93bicpICYmIGNvbHVtbi5zb3J0YWJsZSAmJiAhY29sdW1uLmNvbHVtbkdyb3VwKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT09IFNvcnRpbmdEaXJlY3Rpb24uRGVzYyA/IFNvcnRpbmdEaXJlY3Rpb24uTm9uZSA6IFNvcnRpbmdEaXJlY3Rpb24uRGVzYztcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zb3J0KHsgZmllbGROYW1lOiBjb2x1bW4uZmllbGQsIGRpcjogZGlyZWN0aW9uLCBpZ25vcmVDYXNlOiBmYWxzZSB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hpZnQgJiYgYWx0ICYmIHRoaXMuaXNUb2dnbGVLZXkoa2V5KSAmJiAhY29sdW1uLmNvbHVtbkdyb3VwICYmIGNvbHVtbi5ncm91cGFibGUpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IGRpcmVjdGlvbiB8fCBTb3J0aW5nRGlyZWN0aW9uLkFzYztcbiAgICAgICAgICAgIGlmIChrZXkuaW5jbHVkZXMoJ3JpZ2h0JykpIHtcbiAgICAgICAgICAgICAgICAodGhpcy5ncmlkIGFzIGFueSkuZ3JvdXBCeSh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkTmFtZTogY29sdW1uLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBkaXI6IGRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogY29sdW1uLnNvcnRpbmdJZ25vcmVDYXNlLFxuICAgICAgICAgICAgICAgICAgICBzdHJhdGVneTogY29sdW1uLnNvcnRTdHJhdGVneSxcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXBpbmdDb21wYXJlcjogY29sdW1uLmdyb3VwaW5nQ29tcGFyZXIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICh0aGlzLmdyaWQgYXMgYW55KS5jbGVhckdyb3VwaW5nKGNvbHVtbi5maWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uID0ga2V5LmluY2x1ZGVzKCdyaWdodCcpICYmICh0aGlzLmdyaWQgYXMgYW55KS5oaWRlR3JvdXBlZENvbHVtbnMgJiZcbiAgICAgICAgICAgICAgICBjb2x1bW4udmlzaWJsZUluZGV4ID09PSB0aGlzLmxhc3RDb2x1bW5JbmRleCA/IHRoaXMubGFzdENvbHVtbkluZGV4IC0gMSA6IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW47XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsdCAmJiAoUk9XX0VYUEFORF9LRVlTLmhhcyhrZXkpIHx8IFJPV19DT0xMQVBTRV9LRVlTLmhhcyhrZXkpKSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVNQ0hFeHBhbmRDb2xsYXBzZShrZXksIGNvbHVtbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFsnICcsICdzcGFjZWJhcicsICdzcGFjZSddLmluZGV4T2Yoa2V5KSAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ29sdW1uU2VsZWN0aW9uKGNvbHVtbiwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbHQgJiYgKGtleSA9PT0gJ2wnIHx8IGtleSA9PT0gJ8KsJykgJiYgdGhpcy5ncmlkLmFsbG93QWR2YW5jZWRGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5vcGVuQWR2YW5jZWRGaWx0ZXJpbmdEaWFsb2coKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3RybCAmJiBzaGlmdCAmJiBrZXkgPT09ICdsJyAmJiB0aGlzLmdyaWQuYWxsb3dGaWx0ZXJpbmcgJiYgIWNvbHVtbi5jb2x1bW5Hcm91cCAmJiBjb2x1bW4uZmlsdGVyYWJsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZC5maWx0ZXJNb2RlID09PSBGaWx0ZXJNb2RlLmV4Y2VsU3R5bGVGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXJFbCA9IHRoaXMuZ3JpZC5oZWFkZXJHcm91cHMuZmluZChnID0+IGcuYWN0aXZlKS5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLnRvZ2dsZUZpbHRlckRyb3Bkb3duKGhlYWRlckVsLCBjb2x1bW4pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsVG9DZWxsKGNvbHVtbi52aXNpYmxlSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmZpbHRlcmVkQ29sdW1uID0gY29sdW1uO1xuICAgICAgICAgICAgICAgIHRoaXMuZ3JpZC5maWx0ZXJpbmdTZXJ2aWNlLmlzRmlsdGVyUm93VmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGZpcnN0VmlzaWJsZU5vZGUocm93SW5kZXg/KSB7XG4gICAgICAgIGNvbnN0IGNvbEluZGV4ID0gdGhpcy5sYXN0QWN0aXZlTm9kZS5jb2x1bW4gIT09IHVuZGVmaW5lZCA/IHRoaXMubGFzdEFjdGl2ZU5vZGUuY29sdW1uIDpcbiAgICAgICAgICAgIHRoaXMuZ3JpZC52aXNpYmxlQ29sdW1ucy5zb3J0KChjMSwgYzIpID0+IGMxLnZpc2libGVJbmRleCAtIGMyLnZpc2libGVJbmRleClcbiAgICAgICAgICAgICAgICAuZmluZChjID0+IHRoaXMuaXNDb2x1bW5GdWxseVZpc2libGUoYy52aXNpYmxlSW5kZXgpKT8udmlzaWJsZUluZGV4O1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnMuZmluZCgoY29sKSA9PiAhY29sLmNvbHVtbkxheW91dCAmJiBjb2wudmlzaWJsZUluZGV4ID09PSBjb2xJbmRleCk7XG4gICAgICAgIGNvbnN0IHJvd0luZCA9IHJvd0luZGV4ID8gcm93SW5kZXggOiB0aGlzLmdyaWQucm93TGlzdC5maW5kKHIgPT4gIXRoaXMuc2hvdWxkUGVyZm9ybVZlcnRpY2FsU2Nyb2xsKHIuaW5kZXgsIGNvbEluZGV4KSk/LmluZGV4O1xuICAgICAgICBjb25zdCBub2RlID0ge1xuICAgICAgICAgICAgcm93OiByb3dJbmQgPz8gMCxcbiAgICAgICAgICAgIGNvbHVtbjogY29sdW1uPy52aXNpYmxlSW5kZXggPz8gMCwgbGV2ZWw6IGNvbHVtbj8ubGV2ZWwgPz8gMCxcbiAgICAgICAgICAgIG1jaENhY2hlOiBjb2x1bW4gPyB7IGxldmVsOiBjb2x1bW4ubGV2ZWwsIHZpc2libGVJbmRleDogY29sdW1uLnZpc2libGVJbmRleCB9IDoge30gYXMgQ29sdW1uR3JvdXBzQ2FjaGUsXG4gICAgICAgICAgICBsYXlvdXQ6IGNvbHVtbiAmJiBjb2x1bW4uY29sdW1uTGF5b3V0Q2hpbGQgPyB7XG4gICAgICAgICAgICAgICAgcm93U3RhcnQ6IGNvbHVtbi5yb3dTdGFydCwgY29sU3RhcnQ6IGNvbHVtbi5jb2xTdGFydCxcbiAgICAgICAgICAgICAgICByb3dFbmQ6IGNvbHVtbi5yb3dFbmQsIGNvbEVuZDogY29sdW1uLmNvbEVuZCwgY29sdW1uVmlzaWJsZUluZGV4OiBjb2x1bW4udmlzaWJsZUluZGV4XG4gICAgICAgICAgICB9IDogbnVsbFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU1DSGVhZGVyTmF2KGtleTogc3RyaW5nLCBjdHJsOiBib29sZWFuKSB7XG4gICAgICAgIGNvbnN0IG5ld0hlYWRlck5vZGU6IENvbHVtbkdyb3Vwc0NhY2hlID0ge1xuICAgICAgICAgICAgdmlzaWJsZUluZGV4OiB0aGlzLmFjdGl2ZU5vZGUubWNoQ2FjaGUudmlzaWJsZUluZGV4LFxuICAgICAgICAgICAgbGV2ZWw6IHRoaXMuYWN0aXZlTm9kZS5tY2hDYWNoZS5sZXZlbFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBhY3RpdmVDb2wgPSB0aGlzLmN1cnJlbnRBY3RpdmVDb2x1bW47XG4gICAgICAgIGNvbnN0IGxhc3RHcm91cEluZGV4ID0gTWF0aC5tYXgoLi4uIHRoaXMuZ3JpZC52aXNpYmxlQ29sdW1ucy5cbiAgICAgICAgICAgIGZpbHRlcihjID0+IGMubGV2ZWwgPD0gdGhpcy5hY3RpdmVOb2RlLmxldmVsKS5tYXAoY29sID0+IGNvbC52aXNpYmxlSW5kZXgpKTtcbiAgICAgICAgbGV0IG5leHRDb2wgPSBhY3RpdmVDb2w7XG4gICAgICAgIGlmICgoa2V5LmluY2x1ZGVzKCdsZWZ0JykgfHwga2V5ID09PSAnaG9tZScpICYmIHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGN0cmwgfHwga2V5ID09PSAnaG9tZScgPyAwIDogdGhpcy5hY3RpdmVOb2RlLmNvbHVtbiAtIDE7XG4gICAgICAgICAgICBuZXh0Q29sID0gdGhpcy5nZXROZXh0Q29sdW1uTUNIKGluZGV4KTtcbiAgICAgICAgICAgIG5ld0hlYWRlck5vZGUudmlzaWJsZUluZGV4ID0gbmV4dENvbC52aXNpYmxlSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChrZXkuaW5jbHVkZXMoJ3JpZ2h0JykgfHwga2V5ID09PSAnZW5kJykgJiYgYWN0aXZlQ29sLnZpc2libGVJbmRleCA8IGxhc3RHcm91cEluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0VkluZGV4ID0gYWN0aXZlQ29sLmNoaWxkcmVuID8gTWF0aC5tYXgoLi4uYWN0aXZlQ29sLmFsbENoaWxkcmVuLm1hcChjID0+IGMudmlzaWJsZUluZGV4KSkgKyAxIDpcbiAgICAgICAgICAgICAgICBhY3RpdmVDb2wudmlzaWJsZUluZGV4ICsgMTtcbiAgICAgICAgICAgIG5leHRDb2wgPSBjdHJsIHx8IGtleSA9PT0gJ2VuZCcgPyB0aGlzLmdldE5leHRDb2x1bW5NQ0godGhpcy5sYXN0Q29sdW1uSW5kZXgpIDogdGhpcy5nZXROZXh0Q29sdW1uTUNIKG5leHRWSW5kZXgpO1xuICAgICAgICAgICAgbmV3SGVhZGVyTm9kZS52aXNpYmxlSW5kZXggPSBuZXh0Q29sLnZpc2libGVJbmRleDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0cmwgJiYga2V5LmluY2x1ZGVzKCd1cCcpICYmIHRoaXMuYWN0aXZlTm9kZS5sZXZlbCA+IDApIHtcbiAgICAgICAgICAgIG5leHRDb2wgPSBhY3RpdmVDb2wucGFyZW50O1xuICAgICAgICAgICAgbmV3SGVhZGVyTm9kZS5sZXZlbCA9IG5leHRDb2wubGV2ZWw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjdHJsICYmIGtleS5pbmNsdWRlcygnZG93bicpICYmIGFjdGl2ZUNvbC5jaGlsZHJlbikge1xuICAgICAgICAgICAgbmV4dENvbCA9IGFjdGl2ZUNvbC5jaGlsZHJlbi5maW5kKGMgPT4gYy52aXNpYmxlSW5kZXggPT09IG5ld0hlYWRlck5vZGUudmlzaWJsZUluZGV4KSB8fFxuICAgICAgICAgICAgICAgIGFjdGl2ZUNvbC5jaGlsZHJlbi50b0FycmF5KCkuc29ydCgoYSwgYikgPT4gYi52aXNpYmxlSW5kZXggLSBhLnZpc2libGVJbmRleClcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sLnZpc2libGVJbmRleCA8IG5ld0hlYWRlck5vZGUudmlzaWJsZUluZGV4KVswXTtcbiAgICAgICAgICAgIG5ld0hlYWRlck5vZGUubGV2ZWwgPSBuZXh0Q29sLmxldmVsO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRBY3RpdmVOb2RlKHtcbiAgICAgICAgICAgIHJvdzogdGhpcy5hY3RpdmVOb2RlLnJvdyxcbiAgICAgICAgICAgIGNvbHVtbjogbmV4dENvbC52aXNpYmxlSW5kZXgsXG4gICAgICAgICAgICBsZXZlbDogbmV4dENvbC5sZXZlbCxcbiAgICAgICAgICAgIG1jaENhY2hlOiBuZXdIZWFkZXJOb2RlXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBlcmZvcm1Ib3Jpem9udGFsU2Nyb2xsVG9DZWxsKG5leHRDb2wudmlzaWJsZUluZGV4KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZU1DSEV4cGFuZENvbGxhcHNlKGtleSwgY29sdW1uKSB7XG4gICAgICAgIGlmICghY29sdW1uLmNoaWxkcmVuIHx8ICFjb2x1bW4uY29sbGFwc2libGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbHVtbi5leHBhbmRlZCAmJiBST1dfRVhQQU5EX0tFWVMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGNvbHVtbi5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmV4cGFuZGVkICYmIFJPV19DT0xMQVBTRV9LRVlTLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBjb2x1bW4uZXhwYW5kZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlQ29sdW1uU2VsZWN0aW9uKGNvbHVtbiwgZXZlbnQpIHtcbiAgICAgICAgaWYgKCFjb2x1bW4uc2VsZWN0YWJsZSB8fCB0aGlzLmdyaWQuY29sdW1uU2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5ub25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xlYXJTZWxlY3Rpb24gPSB0aGlzLmdyaWQuY29sdW1uU2VsZWN0aW9uID09PSBHcmlkU2VsZWN0aW9uTW9kZS5zaW5nbGU7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNUb1NlbGVjdCA9ICFjb2x1bW4uY2hpbGRyZW4gPyBbY29sdW1uLmZpZWxkXSA6XG4gICAgICAgICAgICBjb2x1bW4uYWxsQ2hpbGRyZW4uZmlsdGVyKGMgPT4gIWMuaGlkZGVuICYmIGMuc2VsZWN0YWJsZSAmJiAhYy5jb2x1bW5Hcm91cCkubWFwKGMgPT4gYy5maWVsZCk7XG4gICAgICAgIGlmIChjb2x1bW4uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLmRlc2VsZWN0Q29sdW1ucyhjb2x1bW5zVG9TZWxlY3QsIGV2ZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ3JpZC5zZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdENvbHVtbnMoY29sdW1uc1RvU2VsZWN0LCBjbGVhclNlbGVjdGlvbiwgZmFsc2UsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0TmV4dENvbHVtbk1DSCh2aXNpYmxlSW5kZXgpIHtcbiAgICAgICAgbGV0IGNvbCA9IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeVZpc2libGVJbmRleCh2aXNpYmxlSW5kZXgpO1xuICAgICAgICBsZXQgcGFyZW50ID0gY29sLnBhcmVudDtcbiAgICAgICAgd2hpbGUgKHBhcmVudCAmJiBjb2wubGV2ZWwgPiB0aGlzLmFjdGl2ZU5vZGUubWNoQ2FjaGUubGV2ZWwpIHtcbiAgICAgICAgICAgIGNvbCA9IGNvbC5wYXJlbnQ7XG4gICAgICAgICAgICBwYXJlbnQgPSBjb2wucGFyZW50O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgY3VycmVudEFjdGl2ZUNvbHVtbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC52aXNpYmxlQ29sdW1ucy5maW5kKGMgPT4gYy52aXNpYmxlSW5kZXggPT09IHRoaXMuYWN0aXZlTm9kZS5jb2x1bW4gJiYgYy5sZXZlbCA9PT0gdGhpcy5hY3RpdmVOb2RlLmxldmVsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWN0aXZlTm9kZShySW5kZXg6IG51bWJlciwgY0luZGV4OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlTm9kZSA/IHRoaXMuYWN0aXZlTm9kZS5yb3cgPT09IHJJbmRleCAmJiB0aGlzLmFjdGl2ZU5vZGUuY29sdW1uID09PSBjSW5kZXggOiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzVG9nZ2xlS2V5KGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBST1dfQ09MTEFQU0VfS0VZUy5oYXMoa2V5KSB8fCBST1dfRVhQQU5EX0tFWVMuaGFzKGtleSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FkZEtleShrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gUk9XX0FERF9LRVlTLmhhcyhrZXkpO1xuICAgIH1cbn1cbiJdfQ==