igniteui-angular 17.2.18 → 17.2.20

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.
@@ -368,7 +368,15 @@ export class IgxGridSelectionService {
368
368
  const selectedRows = this.getSelectedRowsData();
369
369
  const removedRec = this.isFilteringApplied() ?
370
370
  this.allData.filter(row => this.isRowSelected(this.getRecordKey(row))) : selectedRows;
371
- const newSelection = this.isFilteringApplied() ? selectedRows.filter(x => !removedRec.includes(x)) : [];
371
+ let newSelection;
372
+ if (this.grid.primaryKey) {
373
+ newSelection = this.isFilteringApplied() ? selectedRows.filter(x => {
374
+ return !removedRec.some(item => item[this.grid.primaryKey] === x[this.grid.primaryKey]);
375
+ }) : [];
376
+ }
377
+ else {
378
+ newSelection = this.isFilteringApplied() ? selectedRows.filter(x => !removedRec.includes(x)) : [];
379
+ }
372
380
  this.emitRowSelectionEvent(newSelection, [], removedRec, event, selectedRows);
373
381
  }
374
382
  /** Select all rows, if filtering is applied select only from filtered data. */
@@ -748,4 +756,4 @@ export class IgxGridSelectionService {
748
756
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxGridSelectionService, decorators: [{
749
757
  type: Injectable
750
758
  }], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.PlatformUtil }] });
751
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFZNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFJckQsTUFBTSxPQUFPLHVCQUF1QjtJQTZCaEM7OztPQUdHO0lBQ0gsSUFBVyxNQUFNO1FBRWIsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV4RSxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBVyxhQUFhLENBQUMsS0FBYztRQUNu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QUN2QixLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVPLGtCQUFrQjtRQUN0QixPQUFPLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUM7WUFDdEUsQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTyxZQUFZLENBQUMsS0FBSztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELENBQUM7OEdBMXpCUSx1QkFBdUI7a0hBQXZCLHVCQUF1Qjs7MkZBQXZCLHVCQUF1QjtrQkFEbkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBQbGF0Zm9ybVV0aWwgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzJztcbmltcG9ydCB7IEZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSB9IGZyb20gJy4uLy4uL2RhdGEtb3BlcmF0aW9ucy9maWx0ZXJpbmctZXhwcmVzc2lvbnMtdHJlZSc7XG5pbXBvcnQgeyBJUm93U2VsZWN0aW9uRXZlbnRBcmdzIH0gZnJvbSAnLi4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyBHcmlkVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9ncmlkLmludGVyZmFjZSc7XG5pbXBvcnQge1xuICAgIEdyaWRTZWxlY3Rpb25SYW5nZSxcbiAgICBJQ29sdW1uU2VsZWN0aW9uU3RhdGUsXG4gICAgSU11bHRpUm93TGF5b3V0Tm9kZSxcbiAgICBJU2VsZWN0aW9uS2V5Ym9hcmRTdGF0ZSxcbiAgICBJU2VsZWN0aW9uTm9kZSxcbiAgICBJU2VsZWN0aW9uUG9pbnRlclN0YXRlLFxuICAgIFNlbGVjdGlvblN0YXRlXG59IGZyb20gJy4uL2NvbW1vbi90eXBlcyc7XG5pbXBvcnQgeyBQaXZvdFV0aWwgfSBmcm9tICcuLi9waXZvdC1ncmlkL3Bpdm90LXV0aWwnO1xuXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hHcmlkU2VsZWN0aW9uU2VydmljZSB7XG4gICAgcHVibGljIGdyaWQ6IEdyaWRUeXBlO1xuICAgIHB1YmxpYyBkcmFnTW9kZSA9IGZhbHNlO1xuICAgIHB1YmxpYyBhY3RpdmVFbGVtZW50OiBJU2VsZWN0aW9uTm9kZSB8IG51bGw7XG4gICAgcHVibGljIGtleWJvYXJkU3RhdGUgPSB7fSBhcyBJU2VsZWN0aW9uS2V5Ym9hcmRTdGF0ZTtcbiAgICBwdWJsaWMgcG9pbnRlclN0YXRlID0ge30gYXMgSVNlbGVjdGlvblBvaW50ZXJTdGF0ZTtcbiAgICBwdWJsaWMgY29sdW1uc1N0YXRlID0ge30gYXMgSUNvbHVtblNlbGVjdGlvblN0YXRlO1xuXG4gICAgcHVibGljIHNlbGVjdGlvbiA9IG5ldyBNYXA8bnVtYmVyLCBTZXQ8bnVtYmVyPj4oKTtcbiAgICBwdWJsaWMgdGVtcCA9IG5ldyBNYXA8bnVtYmVyLCBTZXQ8bnVtYmVyPj4oKTtcbiAgICBwdWJsaWMgcm93U2VsZWN0aW9uOiBTZXQ8YW55PiA9IG5ldyBTZXQ8YW55PigpO1xuICAgIHB1YmxpYyBpbmRldGVybWluYXRlUm93czogU2V0PGFueT4gPSBuZXcgU2V0PGFueT4oKTtcbiAgICBwdWJsaWMgY29sdW1uU2VsZWN0aW9uOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIC8qKlxuICAgICAqIEBoaWRkZW4gQGludGVybmFsXG4gICAgICovXG4gICAgcHVibGljIHNlbGVjdGVkUm93c0NoYW5nZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGVkIHdoZW4gYSBwb2ludGVyZG93biBldmVudCBpcyB0cmlnZ2VyZWQgaW5zaWRlIHRoZSBncmlkIGJvZHkgKGNlbGxzKS5cbiAgICAgKiBXaGVuIGBmYWxzZWAgdGhlIGRyYWcgc2VsZWN0IGJlaGF2aW9yIGlzIGRpc2FibGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgcG9pbnRlckV2ZW50SW5HcmlkQm9keSA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSBhbGxSb3dzU2VsZWN0ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfbGFzdFNlbGVjdGVkTm9kZTogSVNlbGVjdGlvbk5vZGU7XG4gICAgcHJpdmF0ZSBfcmFuZ2VzOiBTZXQ8c3RyaW5nPiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIHByaXZhdGUgX3NlbGVjdGlvblJhbmdlOiBSYW5nZTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc2VsZWN0ZWQgcmFuZ2VzIGluIHRoZSBncmlkIGZyb20gYm90aFxuICAgICAqIGtleWJvYXJkIGFuZCBwb2ludGVyIGludGVyYWN0aW9uc1xuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmFuZ2VzKCk6IEdyaWRTZWxlY3Rpb25SYW5nZVtdIHtcblxuICAgICAgICAvLyBUaGUgbGFzdCBhY3Rpb24gd2FzIGtleWJvYXJkICsgc2hpZnQgc2VsZWN0aW9uIC0+IGFkZCBpdFxuICAgICAgICB0aGlzLmFkZEtleWJvYXJkUmFuZ2UoKTtcblxuICAgICAgICBjb25zdCByYW5nZXMgPSBBcnJheS5mcm9tKHRoaXMuX3JhbmdlcykubWFwKHJhbmdlID0+IEpTT04ucGFyc2UocmFuZ2UpKTtcblxuICAgICAgICAvLyBObyByYW5nZXMgYnV0IHdlIGhhdmUgYSBmb2N1c2VkIGNlbGwgLT4gYWRkIGl0XG4gICAgICAgIGlmICghcmFuZ2VzLmxlbmd0aCAmJiB0aGlzLmFjdGl2ZUVsZW1lbnQgJiYgdGhpcy5ncmlkLmlzQ2VsbFNlbGVjdGFibGUpIHtcbiAgICAgICAgICAgIHJhbmdlcy5wdXNoKHRoaXMuZ2VuZXJhdGVSYW5nZSh0aGlzLmFjdGl2ZUVsZW1lbnQpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByYW5nZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBwcmltYXJ5QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wb2ludGVyU3RhdGUucHJpbWFyeUJ1dHRvbjtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0IHByaW1hcnlCdXR0b24odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUucHJpbWFyeUJ1dHRvbiA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgem9uZTogTmdab25lLCBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtVXRpbCkge1xuICAgICAgICB0aGlzLmluaXRQb2ludGVyU3RhdGUoKTtcbiAgICAgICAgdGhpcy5pbml0S2V5Ym9hcmRTdGF0ZSgpO1xuICAgICAgICB0aGlzLmluaXRDb2x1bW5zU3RhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIGtleWJvYXJkIHN0YXRlXG4gICAgICovXG4gICAgcHVibGljIGluaXRLZXlib2FyZFN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUubm9kZSA9IG51bGw7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5zaGlmdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUucmFuZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUuYWN0aXZlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBwb2ludGVyIHN0YXRlXG4gICAgICovXG4gICAgcHVibGljIGluaXRQb2ludGVyU3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLm5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5jdHJsID0gZmFsc2U7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLnNoaWZ0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLnJhbmdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUucHJpbWFyeUJ1dHRvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBjb2x1bW5zIHN0YXRlXG4gICAgICovXG4gICAgcHVibGljIGluaXRDb2x1bW5zU3RhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sdW1uc1N0YXRlLmZpZWxkID0gbnVsbDtcbiAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUucmFuZ2UgPSBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIGEgc2luZ2xlIG5vZGUuXG4gICAgICogU2luZ2xlIGNsaWNrcyB8IEN0cmwgKyBzaW5nbGUgY2xpY2tzIG9uIGNlbGxzIGlzIHRoZSB1c3VhbCBjYXNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGQobm9kZTogSVNlbGVjdGlvbk5vZGUsIGFkZFRvUmFuZ2UgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5oYXMobm9kZS5yb3cpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5nZXQobm9kZS5yb3cpLmFkZChub2RlLmNvbHVtbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZXQobm9kZS5yb3csIG5ldyBTZXQ8bnVtYmVyPigpKS5nZXQobm9kZS5yb3cpLmFkZChub2RlLmNvbHVtbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWRkVG9SYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5fcmFuZ2VzLmFkZChKU09OLnN0cmluZ2lmeSh0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSkpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgdGhlIGFjdGl2ZSBrZXlib2FyZCByYW5nZSBzZWxlY3Rpb24gKGlmIGFueSkgdG8gdGhlIGByYW5nZXNgIG1ldGEuXG4gICAgICovXG4gICAgcHVibGljIGFkZEtleWJvYXJkUmFuZ2UoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmtleWJvYXJkU3RhdGUucmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jhbmdlcy5hZGQoSlNPTi5zdHJpbmdpZnkodGhpcy5rZXlib2FyZFN0YXRlLnJhbmdlKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlKG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5oYXMobm9kZS5yb3cpKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5nZXQobm9kZS5yb3cpLmRlbGV0ZShub2RlLmNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaXNBY3RpdmVOb2RlKG5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Jhbmdlcy5kZWxldGUoSlNPTi5zdHJpbmdpZnkodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUpKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzSW5NYXAobm9kZTogSVNlbGVjdGlvbk5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGlvbi5oYXMobm9kZS5yb3cpICYmIHRoaXMuc2VsZWN0aW9uLmdldChub2RlLnJvdykuaGFzKG5vZGUuY29sdW1uKSkgfHxcbiAgICAgICAgICAgICh0aGlzLnRlbXAuaGFzKG5vZGUucm93KSAmJiB0aGlzLnRlbXAuZ2V0KG5vZGUucm93KS5oYXMobm9kZS5jb2x1bW4pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWQobm9kZTogSVNlbGVjdGlvbk5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmlzQWN0aXZlTm9kZShub2RlKSAmJiB0aGlzLmdyaWQuaXNDZWxsU2VsZWN0YWJsZSkgfHwgdGhpcy5pc0luTWFwKG5vZGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0FjdGl2ZU5vZGUobm9kZTogSVNlbGVjdGlvbk5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmFjdGl2ZUVsZW1lbnQuY29sdW1uID09PSBub2RlLmNvbHVtbiAmJiB0aGlzLmFjdGl2ZUVsZW1lbnQucm93ID09PSBub2RlLnJvdztcbiAgICAgICAgICAgIGlmICh0aGlzLmdyaWQuaGFzQ29sdW1uTGF5b3V0cykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxheW91dCA9IHRoaXMuYWN0aXZlRWxlbWVudC5sYXlvdXQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzQWN0aXZlICYmIHRoaXMuaXNBY3RpdmVMYXlvdXQobGF5b3V0LCBub2RlLmxheW91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXNBY3RpdmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0FjdGl2ZUxheW91dChjdXJyZW50OiBJTXVsdGlSb3dMYXlvdXROb2RlLCB0YXJnZXQ6IElNdWx0aVJvd0xheW91dE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQuY29sdW1uVmlzaWJsZUluZGV4ID09PSB0YXJnZXQuY29sdW1uVmlzaWJsZUluZGV4O1xuICAgIH1cblxuICAgIHB1YmxpYyBhZGRSYW5nZU1ldGEobm9kZTogSVNlbGVjdGlvbk5vZGUsIHN0YXRlPzogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmFuZ2VzLmFkZChKU09OLnN0cmluZ2lmeSh0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSwgc3RhdGUpKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZVJhbmdlTWV0YShub2RlOiBJU2VsZWN0aW9uTm9kZSwgc3RhdGU/OiBTZWxlY3Rpb25TdGF0ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yYW5nZXMuZGVsZXRlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCBzdGF0ZSkpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZW5lcmF0ZXMgYSBuZXcgc2VsZWN0aW9uIHJhbmdlIGZyb20gdGhlIGdpdmVuIGBub2RlYC5cbiAgICAgKiBJZiBgc3RhdGVgIGlzIHBhc3NlZCBpbnN0ZWFkIGl0IHdpbGwgZ2VuZXJhdGUgdGhlIHJhbmdlIGJhc2VkIG9uIHRoZSBwYXNzZWQgYG5vZGVgXG4gICAgICogYW5kIHRoZSBzdGFydCBub2RlIG9mIHRoZSBgc3RhdGVgLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZW5lcmF0ZVJhbmdlKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzdGF0ZT86IFNlbGVjdGlvblN0YXRlKTogR3JpZFNlbGVjdGlvblJhbmdlIHtcbiAgICAgICAgdGhpcy5fbGFzdFNlbGVjdGVkTm9kZSA9IG5vZGU7XG5cbiAgICAgICAgaWYgKCFzdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICByb3dTdGFydDogbm9kZS5yb3csXG4gICAgICAgICAgICAgICAgcm93RW5kOiBub2RlLnJvdyxcbiAgICAgICAgICAgICAgICBjb2x1bW5TdGFydDogbm9kZS5jb2x1bW4sXG4gICAgICAgICAgICAgICAgY29sdW1uRW5kOiBub2RlLmNvbHVtblxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgcm93LCBjb2x1bW4gfSA9IHN0YXRlLm5vZGU7XG4gICAgICAgIGNvbnN0IHJvd1N0YXJ0ID0gTWF0aC5taW4obm9kZS5yb3csIHJvdyk7XG4gICAgICAgIGNvbnN0IHJvd0VuZCA9IE1hdGgubWF4KG5vZGUucm93LCByb3cpO1xuICAgICAgICBjb25zdCBjb2x1bW5TdGFydCA9IE1hdGgubWluKG5vZGUuY29sdW1uLCBjb2x1bW4pO1xuICAgICAgICBjb25zdCBjb2x1bW5FbmQgPSBNYXRoLm1heChub2RlLmNvbHVtbiwgY29sdW1uKTtcblxuICAgICAgICByZXR1cm4geyByb3dTdGFydCwgcm93RW5kLCBjb2x1bW5TdGFydCwgY29sdW1uRW5kIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBwdWJsaWMga2V5Ym9hcmRTdGF0ZU9uS2V5ZG93bihub2RlOiBJU2VsZWN0aW9uTm9kZSwgc2hpZnQ6IGJvb2xlYW4sIHNoaWZ0VGFiOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICB0aGlzLmluaXRQb2ludGVyU3RhdGUoKTtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLnNoaWZ0ID0gc2hpZnQgJiYgIXNoaWZ0VGFiO1xuICAgICAgICBpZiAoIXRoaXMuZ3JpZC5uYXZpZ2F0aW9uLmlzRGF0YVJvdyhub2RlLnJvdykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBLYiBuYXZpZ2F0aW9uIHdpdGggc2hpZnQgYW5kIG5vIHByZXZpb3VzIG5vZGUuXG4gICAgICAgIC8vIENsZWFyIHRoZSBjdXJyZW50IHNlbGVjdGlvbiBpbml0IHRoZSBzdGFydCBub2RlLlxuICAgICAgICBpZiAodGhpcy5rZXlib2FyZFN0YXRlLnNoaWZ0ICYmICF0aGlzLmtleWJvYXJkU3RhdGUubm9kZSkge1xuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLm5vZGUgPSBPYmplY3QuYXNzaWduKHt9LCBub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBrZXlib2FyZFN0YXRlT25Gb2N1cyhub2RlOiBJU2VsZWN0aW9uTm9kZSwgZW1pdHRlcjogRXZlbnRFbWl0dGVyPEdyaWRTZWxlY3Rpb25SYW5nZT4sIGRvbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBrYlN0YXRlID0gdGhpcy5rZXlib2FyZFN0YXRlO1xuXG4gICAgICAgIC8vIEZvY3VzIHRyaWdnZXJlZCBieSBrZXlib2FyZCBuYXZpZ2F0aW9uXG4gICAgICAgIGlmIChrYlN0YXRlLmFjdGl2ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGxhdGZvcm0uaXNDaHJvbWl1bSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vdmVTZWxlY3Rpb25DaHJvbWUoZG9tKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFN0YXJ0IGdlbmVyYXRpbmcgYSByYW5nZSBpZiBzaGlmdCBpcyBob2xkXG4gICAgICAgICAgICBpZiAoa2JTdGF0ZS5zaGlmdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZHJhZ1NlbGVjdChub2RlLCBrYlN0YXRlKTtcbiAgICAgICAgICAgICAgICBrYlN0YXRlLnJhbmdlID0gdGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIGtiU3RhdGUpO1xuICAgICAgICAgICAgICAgIGVtaXR0ZXIuZW1pdCh0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSwga2JTdGF0ZSkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbml0S2V5Ym9hcmRTdGF0ZSgpO1xuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5hZGQobm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcG9pbnRlckRvd24obm9kZTogSVNlbGVjdGlvbk5vZGUsIHNoaWZ0OiBib29sZWFuLCBjdHJsOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWRkS2V5Ym9hcmRSYW5nZSgpO1xuICAgICAgICB0aGlzLmluaXRLZXlib2FyZFN0YXRlKCk7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLmN0cmwgPSBjdHJsO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5zaGlmdCA9IHNoaWZ0O1xuICAgICAgICB0aGlzLnBvaW50ZXJFdmVudEluR3JpZEJvZHkgPSB0cnVlO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ3BvaW50ZXJ1cCcsIHRoaXMucG9pbnRlck9yaWdpbkhhbmRsZXIpO1xuXG4gICAgICAgIC8vIE5vIGN0cmwga2V5IHByZXNzZWQgLSBubyBtdWx0aXBsZSBzZWxlY3Rpb25cbiAgICAgICAgaWYgKCFjdHJsKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2hpZnQpIHtcbiAgICAgICAgICAgIC8vIE5vIHByZXZpb3VzbHkgJ2NsaWNrZWQnIG5vZGUuIFVzZSB0aGUgbGFzdCBhY3RpdmUgbm9kZS5cbiAgICAgICAgICAgIGlmICghdGhpcy5wb2ludGVyU3RhdGUubm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRlclN0YXRlLm5vZGUgPSB0aGlzLmFjdGl2ZUVsZW1lbnQgfHwgbm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucG9pbnRlckRvd25TaGlmdEtleShub2RlKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUZXh0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbW92ZVJhbmdlTWV0YShub2RlKTtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUubm9kZSA9IG5vZGU7XG4gICAgfVxuXG4gICAgcHVibGljIHBvaW50ZXJEb3duU2hpZnRLZXkobm9kZTogSVNlbGVjdGlvbk5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB0aGlzLnNlbGVjdFJhbmdlKG5vZGUsIHRoaXMucG9pbnRlclN0YXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWVyZ2VNYXAodGFyZ2V0OiBNYXA8bnVtYmVyLCBTZXQ8bnVtYmVyPj4sIHNvdXJjZTogTWFwPG51bWJlciwgU2V0PG51bWJlcj4+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gc291cmNlLmVudHJpZXMoKTtcbiAgICAgICAgbGV0IHBhaXIgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIGxldCBrZXk6IG51bWJlcjtcbiAgICAgICAgbGV0IHZhbHVlOiBTZXQ8bnVtYmVyPjtcblxuICAgICAgICB3aGlsZSAoIXBhaXIuZG9uZSkge1xuICAgICAgICAgICAgW2tleSwgdmFsdWVdID0gcGFpci52YWx1ZTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IHRhcmdldC5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKHJlY29yZCA9PiBuZXdWYWx1ZS5hZGQocmVjb3JkKSk7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldChrZXksIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhaXIgPSBpdGVyYXRvci5uZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcG9pbnRlckVudGVyKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBldmVudDogUG9pbnRlckV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9wb2ludGVyZXZlbnRzLyN0aGUtYnV0dG9uLXByb3BlcnR5XG4gICAgICAgIHRoaXMuZHJhZ01vZGUgPSAoZXZlbnQuYnV0dG9ucyA9PT0gMSAmJiAoZXZlbnQuYnV0dG9uID09PSAtMSB8fCBldmVudC5idXR0b24gPT09IDApKSAmJiB0aGlzLnBvaW50ZXJFdmVudEluR3JpZEJvZHk7XG4gICAgICAgIGlmICghdGhpcy5kcmFnTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2xlYXJUZXh0U2VsZWN0aW9uKCk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHVzZXJzIHRyaWdnZXJzIGEgZHJhZy1saWtlIGV2ZW50IGJ5IGZpcnN0IGNsaWNraW5nIG91dHNpZGUgdGhlIGdyaWQgY2VsbHNcbiAgICAgICAgLy8gYW5kIHRoZW4gZW50ZXJzIGluIHRoZSBncmlkIGJvZHkgd2UgbWF5IG5vdCBoYXZlIGEgaW5pdGlhbCBwb2ludGVyIHN0YXJ0aW5nIG5vZGUuXG4gICAgICAgIC8vIEFzc3VtZSB0aGUgZmlyc3QgcG9pbnRlcmVudGVyIG5vZGUgaXMgd2hlcmUgd2Ugc3RhcnQuXG4gICAgICAgIGlmICghdGhpcy5wb2ludGVyU3RhdGUubm9kZSkge1xuICAgICAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUubm9kZSA9IG5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wb2ludGVyU3RhdGUuY3RybCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RSYW5nZShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSwgdGhpcy50ZW1wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZHJhZ1NlbGVjdChub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHBvaW50ZXJVcChub2RlOiBJU2VsZWN0aW9uTm9kZSwgZW1pdHRlcjogRXZlbnRFbWl0dGVyPEdyaWRTZWxlY3Rpb25SYW5nZT4sIGZpcmVkT3V0c2lkZUdyaWQ/OiBib29sZWFuKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmRyYWdNb2RlIHx8IGZpcmVkT3V0c2lkZUdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZVRleHRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2VNZXRhKG5vZGUsIHRoaXMucG9pbnRlclN0YXRlKTtcbiAgICAgICAgICAgIHRoaXMubWVyZ2VNYXAodGhpcy5zZWxlY3Rpb24sIHRoaXMudGVtcCk7XG4gICAgICAgICAgICB0aGlzLnpvbmUucnVuVGFzaygoKSA9PiBlbWl0dGVyLmVtaXQodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIHRoaXMucG9pbnRlclN0YXRlKSkpO1xuICAgICAgICAgICAgdGhpcy50ZW1wLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmRyYWdNb2RlID0gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBvaW50ZXJTdGF0ZS5zaGlmdCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclRleHRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMucmVzdG9yZVRleHRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuYWRkUmFuZ2VNZXRhKG5vZGUsIHRoaXMucG9pbnRlclN0YXRlKTtcbiAgICAgICAgICAgIGVtaXR0ZXIuZW1pdCh0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucG9pbnRlckV2ZW50SW5HcmlkQm9keSAmJiB0aGlzLmlzQWN0aXZlTm9kZShub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5hZGQobm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RSYW5nZShub2RlOiBJU2VsZWN0aW9uTm9kZSwgc3RhdGU6IFNlbGVjdGlvblN0YXRlLCBjb2xsZWN0aW9uOiBNYXA8bnVtYmVyLCBTZXQ8bnVtYmVyPj4gPSB0aGlzLnNlbGVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoY29sbGVjdGlvbiA9PT0gdGhpcy50ZW1wKSB7XG4gICAgICAgICAgICBjb2xsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeyByb3dTdGFydCwgcm93RW5kLCBjb2x1bW5TdGFydCwgY29sdW1uRW5kIH0gPSB0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSwgc3RhdGUpO1xuICAgICAgICBmb3IgKGxldCBpID0gcm93U3RhcnQ7IGkgPD0gcm93RW5kOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBjb2x1bW5TdGFydCBhcyBudW1iZXI7IGogPD0gKGNvbHVtbkVuZCBhcyBudW1iZXIpOyBqKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbi5oYXMoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbi5nZXQoaSkuYWRkKGopO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uc2V0KGksIG5ldyBTZXQ8bnVtYmVyPigpKS5nZXQoaSkuYWRkKGopO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBkcmFnU2VsZWN0KG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzdGF0ZTogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBvaW50ZXJTdGF0ZS5jdHJsKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0UmFuZ2Uobm9kZSwgc3RhdGUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhcihjbGVhckFjcml2ZUVsID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNsZWFyQWNyaXZlRWwpIHtcbiAgICAgICAgICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy50ZW1wLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuX3Jhbmdlcy5jbGVhcigpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhclRleHRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50KSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApO1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uUmFuZ2UuY29sbGFwc2UodHJ1ZSk7XG4gICAgICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzdG9yZVRleHRTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgaWYgKCFzZWxlY3Rpb24ucmFuZ2VDb3VudCkge1xuICAgICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHRoaXMuX3NlbGVjdGlvblJhbmdlIHx8IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlbGVjdGVkUm93c0RhdGEoKSB7XG4gICAgICAgIGlmICh0aGlzLmdyaWQuaXNQaXZvdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhVmlldy5maWx0ZXIociA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IHIuZGltZW5zaW9ucy5tYXAoZCA9PiBQaXZvdFV0aWwuZ2V0UmVjb3JkS2V5KHIsIGQpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5cy5zb21lKGsgPT4gdGhpcy5pc1Bpdm90Um93U2VsZWN0ZWQoaykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmdyaWQucHJpbWFyeUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5yb3dTZWxlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IFtdO1xuICAgICAgICBjb25zdCBncmlkRGF0YU1hcCA9IHt9O1xuICAgICAgICB0aGlzLmdyaWQuZ3JpZEFQSS5nZXRfYWxsX2RhdGEodHJ1ZSkuZm9yRWFjaChyb3cgPT4gZ3JpZERhdGFNYXBbdGhpcy5nZXRSZWNvcmRLZXkocm93KV0gPSByb3cpO1xuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbi5mb3JFYWNoKHJJRCA9PiB7XG4gICAgICAgICAgICBjb25zdCByRGF0YSA9IGdyaWREYXRhTWFwW3JJRF07XG4gICAgICAgICAgICBjb25zdCBwYXJ0aWFsUm93RGF0YSA9IHt9O1xuICAgICAgICAgICAgcGFydGlhbFJvd0RhdGFbdGhpcy5ncmlkLnByaW1hcnlLZXldID0gcklEO1xuICAgICAgICAgICAgc2VsZWN0aW9uLnB1c2gockRhdGEgPyByRGF0YSA6IHBhcnRpYWxSb3dEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb247XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2YgdGhlIHNlbGVjdGVkIHJvdyBpZCdzLiAqL1xuICAgIHB1YmxpYyBnZXRTZWxlY3RlZFJvd3MoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdGlvbi5zaXplID8gQXJyYXkuZnJvbSh0aGlzLnJvd1NlbGVjdGlvbi5rZXlzKCkpIDogW107XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYXJyYXkgb2YgdGhlIHJvd3MgaW4gaW5kZXRlcm1pbmF0ZSBzdGF0ZS4gKi9cbiAgICBwdWJsaWMgZ2V0SW5kZXRlcm1pbmF0ZVJvd3MoKTogQXJyYXk8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzLnNpemUgPyBBcnJheS5mcm9tKHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3Mua2V5cygpKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKiBDbGVhcnMgcm93IHNlbGVjdGlvbiwgaWYgZmlsdGVyaW5nIGlzIGFwcGxpZWQgY2xlYXJzIG9ubHkgc2VsZWN0ZWQgcm93cyBmcm9tIGZpbHRlcmVkIGRhdGEuICovXG4gICAgcHVibGljIGNsZWFyUm93U2VsZWN0aW9uKGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZFJlYyA9IHRoaXMuaXNGaWx0ZXJpbmdBcHBsaWVkKCkgP1xuICAgICAgICAgICAgdGhpcy5hbGxEYXRhLmZpbHRlcihyb3cgPT4gdGhpcy5pc1Jvd1NlbGVjdGVkKHRoaXMuZ2V0UmVjb3JkS2V5KHJvdykpKSA6IHNlbGVjdGVkUm93cztcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSA/IHNlbGVjdGVkUm93cy5maWx0ZXIoeCA9PiAhcmVtb3ZlZFJlYy5pbmNsdWRlcyh4KSkgOiBbXTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbXSwgcmVtb3ZlZFJlYywgZXZlbnQsIHNlbGVjdGVkUm93cyk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCBhbGwgcm93cywgaWYgZmlsdGVyaW5nIGlzIGFwcGxpZWQgc2VsZWN0IG9ubHkgZnJvbSBmaWx0ZXJlZCBkYXRhLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RBbGxSb3dzKGV2ZW50Pykge1xuICAgICAgICBjb25zdCBhZGRlZFJvd3MgPSB0aGlzLmFsbERhdGEuZmlsdGVyKChyb3cpID0+ICF0aGlzLmlzUm93U2VsZWN0ZWQodGhpcy5nZXRSZWNvcmRLZXkocm93KSkpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSA/IHNlbGVjdGVkUm93cy5jb25jYXQoYWRkZWRSb3dzKSA6IGFkZGVkUm93cztcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cy5jbGVhcigpO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkUm93cywgW10sIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgdGhlIHNwZWNpZmllZCByb3cgYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdFJvd0J5SWQocm93SUQsIGNsZWFyUHJldlNlbGVjdGlvbj8sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBpZiAoISh0aGlzLmdyaWQuaXNSb3dTZWxlY3RhYmxlIHx8IHRoaXMuZ3JpZC5pc1Bpdm90KSB8fCB0aGlzLmlzUm93RGVsZXRlZChyb3dJRCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjbGVhclByZXZTZWxlY3Rpb24gPSAhdGhpcy5ncmlkLmlzTXVsdGlSb3dTZWxlY3Rpb25FbmFibGVkIHx8IGNsZWFyUHJldlNlbGVjdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5pc1Bpdm90KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFBpdm90Um93QnlJZChyb3dJRCwgY2xlYXJQcmV2U2VsZWN0aW9uLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IFt0aGlzLmdldFJvd0RhdGFCeUlkKHJvd0lEKV0gOiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMocm93SUQpID9cbiAgICAgICAgICAgIHNlbGVjdGVkUm93cyA6IFsuLi5zZWxlY3RlZFJvd3MsIHRoaXMuZ2V0Um93RGF0YUJ5SWQocm93SUQpXTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IHNlbGVjdGVkUm93cyA6IFtdO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIFt0aGlzLmdldFJvd0RhdGFCeUlkKHJvd0lEKV0sIHJlbW92ZWQsIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RQaXZvdFJvd0J5SWQocm93SUQsIGNsZWFyUHJldlNlbGVjdGlvbjogYm9vbGVhbiwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IFtyb3dJRF0gOiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMocm93SUQpID8gc2VsZWN0ZWRSb3dzIDogWy4uLnNlbGVjdGVkUm93cywgcm93SURdO1xuICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuZ2V0UGl2b3RSb3dzQnlJZHMoW3Jvd0lEXSk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmdldFBpdm90Um93c0J5SWRzKGNsZWFyUHJldlNlbGVjdGlvbiA/IHNlbGVjdGVkUm93cyA6IFtdKTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnRQaXZvdEdyaWQoc2VsZWN0ZWRSb3dzLCBuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHRoZSBzcGVjaWZpZWQgcm93IGFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdFJvdyhyb3dJRCwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1Jvd1NlbGVjdGVkKHJvd0lEKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuZ3JpZC5pc1Bpdm90KSB7XG4gICAgICAgICAgICB0aGlzLmRlc2VsZWN0UGl2b3RSb3dCeUlEKHJvd0lELCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHNlbGVjdGVkUm93cy5maWx0ZXIociA9PiAgdGhpcy5nZXRSZWNvcmRLZXkocikgIT09IHJvd0lEKTtcbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0aW9uLnNpemUgJiYgdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHJvd0lEKSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbXSwgW3RoaXMuZ2V0Um93RGF0YUJ5SWQocm93SUQpXSwgZXZlbnQsIHNlbGVjdGVkUm93cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZWxlY3RQaXZvdFJvd0J5SUQocm93SUQsIGV2ZW50Pykge1xuICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSAmJiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMocm93SUQpKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGN1cnJTZWxlY3Rpb24uZmlsdGVyKHIgPT4gciAhPT0gcm93SUQpO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCAgPSB0aGlzLmdldFBpdm90Um93c0J5SWRzKFtyb3dJRF0pO1xuICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnRQaXZvdEdyaWQoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLCBbXSwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Um93U2VsZWN0aW9uRXZlbnRQaXZvdEdyaWQoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYXJlRXF1YWxDb2xsZWN0aW9ucyhjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBjb25zdCBhcmdzOiBJUm93U2VsZWN0aW9uRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogY3VyclNlbGVjdGVkUm93cyxcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbjogdGhpcy5nZXRQaXZvdFJvd3NCeUlkcyhuZXdTZWxlY3Rpb24pLFxuICAgICAgICAgICAgYWRkZWQsXG4gICAgICAgICAgICByZW1vdmVkLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgYWxsUm93c1NlbGVjdGVkOiB0aGlzLmFyZUFsbFJvd1NlbGVjdGVkKG5ld1NlbGVjdGlvbilcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ncmlkLnJvd1NlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdFJvd3NXaXRoTm9FdmVudChuZXdTZWxlY3Rpb24sIHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgdGhlIHNwZWNpZmllZCByb3dzIGFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBzZWxlY3RSb3dzKGtleXM6IGFueVtdLCBjbGVhclByZXZTZWxlY3Rpb24/OiBib29sZWFuLCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQuaXNNdWx0aVJvd1NlbGVjdGlvbkVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByb3dzVG9TZWxlY3QgPSBrZXlzLmZpbHRlcih4ID0+ICF0aGlzLmlzUm93RGVsZXRlZCh4KSAmJiAhdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHgpKTtcbiAgICAgICAgaWYgKCFyb3dzVG9TZWxlY3QubGVuZ3RoICYmICFjbGVhclByZXZTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIG5vIHZhbGlkL2FkZGl0aW9uYWwgcm93cyB0byBzZWxlY3QgYW5kIG5vIGNsZWFyXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgcm93c1RvU2VsZWN0ID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByb3dzVG9TZWxlY3QubWFwKHIgPT4gdGhpcy5nZXRSb3dEYXRhQnlJZChyKSkgOiByb3dzVG9TZWxlY3Q7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IHJvd3NUb1NlbGVjdCA6IFsuLi5zZWxlY3RlZFJvd3MsIC4uLnJvd3NUb1NlbGVjdF07XG4gICAgICAgIGNvbnN0IGtleXNBc1NldCA9IG5ldyBTZXQocm93c1RvU2VsZWN0KTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IHNlbGVjdGVkUm93cy5maWx0ZXIoeCA9PiAha2V5c0FzU2V0Lmhhcyh4KSkgOiBbXTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCByb3dzVG9TZWxlY3QsIHJlbW92ZWQsIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlbGVjdFJvd3Moa2V5czogYW55W10sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucm93U2VsZWN0aW9uLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcm93c1RvRGVzZWxlY3QgPSBrZXlzLmZpbHRlcih4ID0+IHRoaXMucm93U2VsZWN0aW9uLmhhcyh4KSk7XG4gICAgICAgIGlmICghcm93c1RvRGVzZWxlY3QubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIHJvd3NUb0Rlc2VsZWN0ID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByb3dzVG9EZXNlbGVjdC5tYXAociA9PiB0aGlzLmdldFJvd0RhdGFCeUlkKHIpKSA6IHJvd3NUb0Rlc2VsZWN0O1xuICAgICAgICBjb25zdCBrZXlzQXNTZXQgPSBuZXcgU2V0KHJvd3NUb0Rlc2VsZWN0KTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gc2VsZWN0ZWRSb3dzLmZpbHRlcihyID0+ICFrZXlzQXNTZXQuaGFzKHIpKTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbXSwgcm93c1RvRGVzZWxlY3QsIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3Qgc3BlY2lmaWVkIHJvd3MuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIHNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHM6IGFueVtdLCBjbGVhclByZXZTZWxlY3Rpb24/KTogdm9pZCB7XG4gICAgICAgIGlmIChjbGVhclByZXZTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcm93SURzLmZvckVhY2gocm93SUQgPT4gdGhpcy5yb3dTZWxlY3Rpb24uYWRkKHJvd0lEKSk7XG4gICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3Qgc3BlY2lmaWVkIHJvd3MuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgcm93SURzLmZvckVhY2gocm93SUQgPT4gdGhpcy5yb3dTZWxlY3Rpb24uZGVsZXRlKHJvd0lEKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNSb3dTZWxlY3RlZChyb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSA+IDAgJiYgdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHJvd0lEKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNQaXZvdFJvd1NlbGVjdGVkKHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjb250YWlucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbi5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgY29uc3QgY29ycmVjdFJvd0lkID0gcm93SUQucmVwbGFjZSh4LCcnKTtcbiAgICAgICAgICAgIGlmIChyb3dJRC5pbmNsdWRlcyh4KSAmJiAoY29ycmVjdFJvd0lkID09PSAnJyB8fCBjb3JyZWN0Um93SWQuc3RhcnRzV2l0aCgnXycpKSApIHtcbiAgICAgICAgICAgICAgICBjb250YWlucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93U2VsZWN0aW9uLnNpemUgPiAwICYmIGNvbnRhaW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Jvd0luSW5kZXRlcm1pbmF0ZVN0YXRlKHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzLnNpemUgPiAwICYmIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MuaGFzKHJvd0lEKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHJhbmdlIGZyb20gbGFzdCBzZWxlY3RlZCByb3cgdG8gdGhlIGN1cnJlbnQgc3BlY2lmaWVkIHJvdy4gKi9cbiAgICBwdWJsaWMgc2VsZWN0TXVsdGlwbGVSb3dzKHJvd0lELCByb3dEYXRhLCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLnJvd1NlbGVjdGlvbi5zaXplIHx8IHRoaXMuaXNSb3dEZWxldGVkKHJvd0lEKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3dCeUlkKHJvd0lEKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncmlkRGF0YSA9IHRoaXMuYWxsRGF0YTtcbiAgICAgICAgY29uc3QgbGFzdFJvd0lEID0gdGhpcy5nZXRTZWxlY3RlZFJvd3MoKVt0aGlzLnJvd1NlbGVjdGlvbi5zaXplIC0gMV07XG4gICAgICAgIGNvbnN0IGN1cnJJbmRleCA9IGdyaWREYXRhLmluZGV4T2YodGhpcy5nZXRSb3dEYXRhQnlJZChsYXN0Um93SUQpKTtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBncmlkRGF0YS5pbmRleE9mKHJvd0RhdGEpO1xuICAgICAgICBjb25zdCByb3dzID0gZ3JpZERhdGEuc2xpY2UoTWF0aC5taW4oY3VyckluZGV4LCBuZXdJbmRleCksIE1hdGgubWF4KGN1cnJJbmRleCwgbmV3SW5kZXgpICsgMSk7XG4gICAgICAgIGNvbnN0IGN1cnJTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgY29uc3QgYWRkZWQgPSByb3dzLmZpbHRlcihyID0+ICF0aGlzLmlzUm93U2VsZWN0ZWQodGhpcy5nZXRSZWNvcmRLZXkocikpKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gY3VyclNlbGVjdGlvbi5jb25jYXQoYWRkZWQpO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCBbXSwgZXZlbnQsIGN1cnJTZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhcmVBbGxSb3dTZWxlY3RlZChuZXdTZWxlY3Rpb24/KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLmRhdGEgJiYgIW5ld1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFsbFJvd3NTZWxlY3RlZCAhPT0gdW5kZWZpbmVkICYmICFuZXdTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbFJvd3NTZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSBuZXcgU2V0KG5ld1NlbGVjdGlvbiA/IG5ld1NlbGVjdGlvbiA6IFsuLi50aGlzLnJvd1NlbGVjdGlvbl0pO1xuICAgICAgICBjb25zdCBhbGxEYXRhID0gdGhpcy5nZXRSb3dJRHModGhpcy5hbGxEYXRhKTtcbiAgICAgICAgY29uc3QgdW5TZWxlY3RlZFJvd3MgPSBhbGxEYXRhLmZpbHRlcihyb3cgPT4gIXNlbGVjdGVkRGF0YS5oYXMocm93KSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IHRoaXMuYWxsRGF0YS5sZW5ndGggPiAwICYmIHVuU2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzU29tZVJvd1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSB0aGlzLmlzRmlsdGVyaW5nQXBwbGllZCgpID9cbiAgICAgICAgICAgIHRoaXMuZ2V0Um93SURzKHRoaXMuZ3JpZC5maWx0ZXJlZERhdGEpLnNvbWUocklEID0+IHRoaXMuaXNSb3dTZWxlY3RlZChySUQpKSA6IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdGlvbi5zaXplID4gMCAmJiBmaWx0ZXJlZERhdGEgJiYgIXRoaXMuYXJlQWxsUm93U2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlcmVkU2VsZWN0ZWRSb3dJZHMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSA/XG4gICAgICAgICAgICB0aGlzLmdldFJvd0lEcyh0aGlzLmFsbERhdGEpLmZpbHRlcihyb3dJRCA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocm93SUQpKSA6XG4gICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkUm93cygpLmZpbHRlcihyb3dJRCA9PiAhdGhpcy5pc1Jvd0RlbGV0ZWQocm93SUQpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50PywgY3VyclNlbGVjdGlvbj8pOiBib29sZWFuIHtcbiAgICAgICAgY3VyclNlbGVjdGlvbiA9IGN1cnJTZWxlY3Rpb24gPz8gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFyZ3M6IElSb3dTZWxlY3Rpb25FdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcy5ncmlkLFxuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0aW9uLFxuICAgICAgICAgICAgbmV3U2VsZWN0aW9uLFxuICAgICAgICAgICAgYWRkZWQsIHJlbW92ZWQsXG4gICAgICAgICAgICBldmVudCwgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIGFsbFJvd3NTZWxlY3RlZDogdGhpcy5hcmVBbGxSb3dTZWxlY3RlZChuZXdTZWxlY3Rpb24ubWFwKHIgPT4gIHRoaXMuZ2V0UmVjb3JkS2V5KHIpKSlcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmdyaWQucm93U2VsZWN0aW9uQ2hhbmdpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0Um93c1dpdGhOb0V2ZW50KGFyZ3MubmV3U2VsZWN0aW9uLm1hcChyID0+IHRoaXMuZ2V0UmVjb3JkS2V5KHIpKSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBpdm90Um93c0J5SWRzKGlkczogYW55W10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhVmlldy5maWx0ZXIociA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gci5kaW1lbnNpb25zLm1hcChkID0+IFBpdm90VXRpbC5nZXRSZWNvcmRLZXkociwgZCkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXQoaWRzLmNvbmNhdChrZXlzKSkuc2l6ZSA8IGlkcy5sZW5ndGggKyBrZXlzLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvd0RhdGFCeUlkKHJvd0lEKTogYW55IHtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQucHJpbWFyeUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd0lEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5nZXRSb3dJRHModGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2FsbF9kYXRhKHRydWUpKS5pbmRleE9mKHJvd0lEKTtcbiAgICAgICAgcmV0dXJuIHJvd0luZGV4IDwgMCA/IHJvd0lEIDogdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2FsbF9kYXRhKHRydWUpW3Jvd0luZGV4XTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJIZWFkZXJDQlN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Um93SURzKGRhdGEpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5wcmltYXJ5S2V5ICYmIGRhdGEubGVuZ3RoID8gZGF0YS5tYXAocmVjID0+IHJlY1t0aGlzLmdyaWQucHJpbWFyeUtleV0pIDogZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVjb3JkS2V5KHJlY29yZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByZWNvcmRbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcmVjb3JkO1xuICAgIH1cblxuICAgIC8qKiBDbGVhciByb3dTZWxlY3Rpb24gYW5kIHVwZGF0ZSBjaGVja2JveCBzdGF0ZSAqL1xuICAgIHB1YmxpYyBjbGVhckFsbFNlbGVjdGVkUm93cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cy5jbGVhcigpO1xuICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYWxsIGRhdGEgaW4gdGhlIGdyaWQsIHdpdGggYXBwbGllZCBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgYW5kIHdpdGhvdXQgZGVsZXRlZCByb3dzLiAqL1xuICAgIHB1YmxpYyBnZXQgYWxsRGF0YSgpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgbGV0IGFsbERhdGE7XG4gICAgICAgIC8vIFYuVC4gSmFuIDE3dGgsIDIwMjQgIzEzNzU3IEFkZGluZyBhbiBhZGRpdGlvbmFsIGNvbmRpdGlvbmFsIGNoZWNrIHRvIHRha2UgYWNjb3VudCBXSVRISU4gcmFuZ2Ugb2YgZ3JvdXBzXG4gICAgICAgIGlmICh0aGlzLmlzRmlsdGVyaW5nQXBwbGllZCgpIHx8IHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMubGVuZ3RoIHx8IHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFsbERhdGEgPSB0aGlzLmdyaWQucGlubmVkUmVjb3Jkc0NvdW50ID8gdGhpcy5ncmlkLl9maWx0ZXJlZFNvcnRlZFVucGlubmVkRGF0YSA6IHRoaXMuZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbGxEYXRhID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2FsbF9kYXRhKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGxEYXRhLmZpbHRlcihyRGF0YSA9PiAhdGhpcy5pc1Jvd0RlbGV0ZWQodGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19pZChyRGF0YSkpKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgc2VsZWN0ZWQgY29sdW1ucyBmaWVsZHMuICovXG4gICAgcHVibGljIGdldFNlbGVjdGVkQ29sdW1ucygpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uU2VsZWN0aW9uLnNpemUgPyBBcnJheS5mcm9tKHRoaXMuY29sdW1uU2VsZWN0aW9uLmtleXMoKSkgOiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb2x1bW5TZWxlY3RlZChmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtblNlbGVjdGlvbi5zaXplID4gMCAmJiB0aGlzLmNvbHVtblNlbGVjdGlvbi5oYXMoZmllbGQpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgdGhlIHNwZWNpZmllZCBjb2x1bW4gYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdENvbHVtbihmaWVsZDogc3RyaW5nLCBjbGVhclByZXZTZWxlY3Rpb24/LCBzZWxlY3RDb2x1bW5zUmFuZ2U/LCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhdGVDb2x1bW4gPSB0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCA/IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUodGhpcy5jb2x1bW5zU3RhdGUuZmllbGQpIDogbnVsbDtcbiAgICAgICAgaWYgKCFldmVudCB8fCAhc3RhdGVDb2x1bW4gfHwgc3RhdGVDb2x1bW4udmlzaWJsZUluZGV4IDwgMCB8fCAhc2VsZWN0Q29sdW1uc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCA9IGZpZWxkO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUucmFuZ2UgPSBbXTtcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gW2ZpZWxkXSA6IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkuaW5kZXhPZihmaWVsZCkgIT09IC0xID9cbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpIDogWy4uLnRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCksIGZpZWxkXTtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSBjbGVhclByZXZTZWxlY3Rpb24gPyB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmZpbHRlcihjb2xGaWVsZCA9PiBjb2xGaWVsZCAhPT0gZmllbGQpIDogW107XG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuaXNDb2x1bW5TZWxlY3RlZChmaWVsZCkgPyBbXSA6IFtmaWVsZF07XG4gICAgICAgICAgICB0aGlzLmVtaXRDb2x1bW5TZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0Q29sdW1uc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbHVtbnNSYW5nZShmaWVsZCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCBzcGVjaWZpZWQgY29sdW1ucy4gQW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdENvbHVtbnMoZmllbGRzOiBzdHJpbmdbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPywgc2VsZWN0Q29sdW1uc1JhbmdlPywgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBmaWVsZHMubWFwKGYgPT4gdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZShmKSkuc29ydCgoYSwgYikgPT4gYS52aXNpYmxlSW5kZXggLSBiLnZpc2libGVJbmRleCk7XG4gICAgICAgIGNvbnN0IHN0YXRlQ29sdW1uID0gdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPyB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlOYW1lKHRoaXMuY29sdW1uc1N0YXRlLmZpZWxkKSA6IG51bGw7XG4gICAgICAgIGlmICghc3RhdGVDb2x1bW4gfHwgc3RhdGVDb2x1bW4udmlzaWJsZUluZGV4IDwgMCB8fCAhc2VsZWN0Q29sdW1uc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCA9IGNvbHVtbnNbMF0gPyBjb2x1bW5zWzBdLmZpZWxkIDogbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1N0YXRlLnJhbmdlID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gZmllbGRzLmZpbHRlcihjb2xGaWVsZCA9PiAhdGhpcy5pc0NvbHVtblNlbGVjdGVkKGNvbEZpZWxkKSk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5maWx0ZXIoY29sRmllbGQgPT4gZmllbGRzLmluZGV4T2YoY29sRmllbGQpID09PSAtMSkgOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IGZpZWxkcyA6IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkuY29uY2F0KGFkZGVkKTtcblxuICAgICAgICAgICAgdGhpcy5lbWl0Q29sdW1uU2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmlsZWRTdGFydCA9IHN0YXRlQ29sdW1uLnZpc2libGVJbmRleCA+XG4gICAgICAgICAgICAgICAgY29sdW1uc1tjb2x1bW5zLmxlbmd0aCAtIDFdLnZpc2libGVJbmRleCA/IGNvbHVtbnNbMF0uZmllbGQgOiBjb2x1bW5zW2NvbHVtbnMubGVuZ3RoIC0gMV0uZmllbGQ7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbHVtbnNSYW5nZShmaWxlZFN0YXJ0LCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHJhbmdlIGZyb20gbGFzdCBjbGlja2VkIGNvbHVtbiB0byB0aGUgY3VycmVudCBzcGVjaWZpZWQgY29sdW1uLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW5zUmFuZ2UoZmllbGQ6IHN0cmluZywgZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VyckluZGV4ID0gdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZSh0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCkudmlzaWJsZUluZGV4O1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuZ3JpZC5jb2x1bW5Ub1Zpc2libGVJbmRleChmaWVsZCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNGaWVsZHMgPSB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAhYy5jb2x1bW5Hcm91cClcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnZpc2libGVJbmRleCAtIGIudmlzaWJsZUluZGV4KVxuICAgICAgICAgICAgLnNsaWNlKE1hdGgubWluKGN1cnJJbmRleCwgbmV3SW5kZXgpLCBNYXRoLm1heChjdXJySW5kZXgsIG5ld0luZGV4KSArIDEpXG4gICAgICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuc2VsZWN0YWJsZSkubWFwKGNvbCA9PiBjb2wuZmllbGQpO1xuICAgICAgICBjb25zdCByZW1vdmVkID0gW107XG4gICAgICAgIGNvbnN0IG9sZEFkZGVkID0gW107XG4gICAgICAgIGNvbnN0IGFkZGVkID0gY29sdW1uc0ZpZWxkcy5maWx0ZXIoY29sRmllbGQgPT4gIXRoaXMuaXNDb2x1bW5TZWxlY3RlZChjb2xGaWVsZCkpO1xuICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5yYW5nZS5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbnNGaWVsZHMuaW5kZXhPZihmKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2goZik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9sZEFkZGVkLnB1c2goZik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5yYW5nZSA9IGNvbHVtbnNGaWVsZHMuZmlsdGVyKGNvbEZpZWxkID0+ICF0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoY29sRmllbGQpIHx8IG9sZEFkZGVkLmluZGV4T2YoY29sRmllbGQpID4gLTEpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmNvbmNhdChhZGRlZCkuZmlsdGVyKGMgPT4gcmVtb3ZlZC5pbmRleE9mKGMpID09PSAtMSk7XG4gICAgICAgIHRoaXMuZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHNwZWNpZmllZCBjb2x1bW5zLiBObyBldmVudCBpcyBlbWl0dGVkLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW5zV2l0aE5vRXZlbnQoZmllbGRzOiBzdHJpbmdbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPyk6IHZvaWQge1xuICAgICAgICBpZiAoY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uU2VsZWN0aW9uLmFkZChmaWVsZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCB0aGUgc3BlY2lmaWVkIGNvbHVtbiBhbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RDb2x1bW4oZmllbGQ6IHN0cmluZywgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdENvbHVtbnNTdGF0ZSgpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmZpbHRlcihjID0+IGMgIT09IGZpZWxkKTtcbiAgICAgICAgdGhpcy5lbWl0Q29sdW1uU2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbXSwgW2ZpZWxkXSwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCBzcGVjaWZpZWQgY29sdW1ucy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RDb2x1bW5zV2l0aE5vRXZlbnQoZmllbGRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB0aGlzLmNvbHVtblNlbGVjdGlvbi5kZWxldGUoZmllbGQpKTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3Qgc3BlY2lmaWVkIGNvbHVtbnMuIEFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdENvbHVtbnMoZmllbGRzOiBzdHJpbmdbXSwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmZpbHRlcihjb2xGaWVsZCA9PiBmaWVsZHMuaW5kZXhPZihjb2xGaWVsZCkgPiAtMSk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkuZmlsdGVyKGNvbEZpZWxkID0+IGZpZWxkcy5pbmRleE9mKGNvbEZpZWxkKSA9PT0gLTEpO1xuXG4gICAgICAgIHRoaXMuZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIHJlbW92ZWQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50Pyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKTtcbiAgICAgICAgaWYgKHRoaXMuYXJlRXF1YWxDb2xsZWN0aW9ucyhjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24sXG4gICAgICAgICAgICBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQsIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0Q29sdW1uc1dpdGhOb0V2ZW50KGFyZ3MubmV3U2VsZWN0aW9uLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXIgY29sdW1uU2VsZWN0aW9uICovXG4gICAgcHVibGljIGNsZWFyQWxsU2VsZWN0ZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhcmVFcXVhbENvbGxlY3Rpb25zKGZpcnN0LCBzZWNvbmQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Lmxlbmd0aCA9PT0gc2Vjb25kLmxlbmd0aCAmJiBuZXcgU2V0KGZpcnN0LmNvbmNhdChzZWNvbmQpKS5zaXplID09PSBmaXJzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogKOKVr8Kw4pahwrDvvInila/vuLUg4pS74pSB4pS7XG4gICAgICogQ2hyb21lIGFuZCBDaHJvbWl1bSBkb24ndCBjYXJlIGFib3V0IHRoZSBhY3RpdmVcbiAgICAgKiByYW5nZSBhZnRlciBrZXlib2FyZCBuYXZpZ2F0aW9uLCB0aHVzIHRoaXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbW92ZVNlbGVjdGlvbkNocm9tZShub2RlOiBOb2RlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgICAgICByYW5nZS5zZWxlY3ROb2RlKG5vZGUpO1xuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRmlsdGVyaW5nQXBwbGllZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkodGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkgfHxcbiAgICAgICAgICAgICFGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkodGhpcy5ncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUm93RGVsZXRlZChyb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkucm93X2RlbGV0ZWRfdHJhbnNhY3Rpb24ocm93SUQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9pbnRlck9yaWdpbkhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5wb2ludGVyRXZlbnRJbkdyaWRCb2R5ID0gZmFsc2U7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5wb2ludGVyT3JpZ2luSGFuZGxlcik7XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0VGFnTmFtZSA9IGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh0YXJnZXRUYWdOYW1lICE9PSAnaWd4LWdyaWQtY2VsbCcgJiYgdGFyZ2V0VGFnTmFtZSAhPT0gJ2lneC10cmVlLWdyaWQtY2VsbCcpIHtcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclVwKHRoaXMuX2xhc3RTZWxlY3RlZE5vZGUsIHRoaXMuZ3JpZC5yYW5nZVNlbGVjdGVkLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH07XG59XG4iXX0=
759
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9pZ25pdGV1aS1hbmd1bGFyL3NyYy9saWIvZ3JpZHMvc2VsZWN0aW9uL3NlbGVjdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsVUFBVSxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFZNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7QUFJckQsTUFBTSxPQUFPLHVCQUF1QjtJQTZCaEM7OztPQUdHO0lBQ0gsSUFBVyxNQUFNO1FBRWIsMkRBQTJEO1FBQzNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBRXhCLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV4RSxpREFBaUQ7UUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3BFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBVyxhQUFhLENBQUMsS0FBYztRQUNu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RUFBRSxNQUFNO1FBQ3ZDLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsTUFBTSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUNqRyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLG9CQUFvQixDQUFDLElBQVU7UUFDbkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3hDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQzFCLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkIsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsT0FBTyxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDO1lBQ3RFLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRU8sWUFBWSxDQUFDLEtBQUs7UUFDdEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxDQUFDOzhHQWowQlEsdUJBQXVCO2tIQUF2Qix1QkFBdUI7OzJGQUF2Qix1QkFBdUI7a0JBRG5DLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGxhdGZvcm1VdGlsIH0gZnJvbSAnLi4vLi4vY29yZS91dGlscyc7XG5pbXBvcnQgeyBGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUgfSBmcm9tICcuLi8uLi9kYXRhLW9wZXJhdGlvbnMvZmlsdGVyaW5nLWV4cHJlc3Npb25zLXRyZWUnO1xuaW1wb3J0IHsgSVJvd1NlbGVjdGlvbkV2ZW50QXJncyB9IGZyb20gJy4uL2NvbW1vbi9ldmVudHMnO1xuaW1wb3J0IHsgR3JpZFR5cGUgfSBmcm9tICcuLi9jb21tb24vZ3JpZC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgICBHcmlkU2VsZWN0aW9uUmFuZ2UsXG4gICAgSUNvbHVtblNlbGVjdGlvblN0YXRlLFxuICAgIElNdWx0aVJvd0xheW91dE5vZGUsXG4gICAgSVNlbGVjdGlvbktleWJvYXJkU3RhdGUsXG4gICAgSVNlbGVjdGlvbk5vZGUsXG4gICAgSVNlbGVjdGlvblBvaW50ZXJTdGF0ZSxcbiAgICBTZWxlY3Rpb25TdGF0ZVxufSBmcm9tICcuLi9jb21tb24vdHlwZXMnO1xuaW1wb3J0IHsgUGl2b3RVdGlsIH0gZnJvbSAnLi4vcGl2b3QtZ3JpZC9waXZvdC11dGlsJztcblxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgSWd4R3JpZFNlbGVjdGlvblNlcnZpY2Uge1xuICAgIHB1YmxpYyBncmlkOiBHcmlkVHlwZTtcbiAgICBwdWJsaWMgZHJhZ01vZGUgPSBmYWxzZTtcbiAgICBwdWJsaWMgYWN0aXZlRWxlbWVudDogSVNlbGVjdGlvbk5vZGUgfCBudWxsO1xuICAgIHB1YmxpYyBrZXlib2FyZFN0YXRlID0ge30gYXMgSVNlbGVjdGlvbktleWJvYXJkU3RhdGU7XG4gICAgcHVibGljIHBvaW50ZXJTdGF0ZSA9IHt9IGFzIElTZWxlY3Rpb25Qb2ludGVyU3RhdGU7XG4gICAgcHVibGljIGNvbHVtbnNTdGF0ZSA9IHt9IGFzIElDb2x1bW5TZWxlY3Rpb25TdGF0ZTtcblxuICAgIHB1YmxpYyBzZWxlY3Rpb24gPSBuZXcgTWFwPG51bWJlciwgU2V0PG51bWJlcj4+KCk7XG4gICAgcHVibGljIHRlbXAgPSBuZXcgTWFwPG51bWJlciwgU2V0PG51bWJlcj4+KCk7XG4gICAgcHVibGljIHJvd1NlbGVjdGlvbjogU2V0PGFueT4gPSBuZXcgU2V0PGFueT4oKTtcbiAgICBwdWJsaWMgaW5kZXRlcm1pbmF0ZVJvd3M6IFNldDxhbnk+ID0gbmV3IFNldDxhbnk+KCk7XG4gICAgcHVibGljIGNvbHVtblNlbGVjdGlvbjogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAvKipcbiAgICAgKiBAaGlkZGVuIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZFJvd3NDaGFuZ2UgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlZCB3aGVuIGEgcG9pbnRlcmRvd24gZXZlbnQgaXMgdHJpZ2dlcmVkIGluc2lkZSB0aGUgZ3JpZCBib2R5IChjZWxscykuXG4gICAgICogV2hlbiBgZmFsc2VgIHRoZSBkcmFnIHNlbGVjdCBiZWhhdmlvciBpcyBkaXNhYmxlZC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHBvaW50ZXJFdmVudEluR3JpZEJvZHkgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgYWxsUm93c1NlbGVjdGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX2xhc3RTZWxlY3RlZE5vZGU6IElTZWxlY3Rpb25Ob2RlO1xuICAgIHByaXZhdGUgX3JhbmdlczogU2V0PHN0cmluZz4gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBwcml2YXRlIF9zZWxlY3Rpb25SYW5nZTogUmFuZ2U7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNlbGVjdGVkIHJhbmdlcyBpbiB0aGUgZ3JpZCBmcm9tIGJvdGhcbiAgICAgKiBrZXlib2FyZCBhbmQgcG9pbnRlciBpbnRlcmFjdGlvbnNcbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IHJhbmdlcygpOiBHcmlkU2VsZWN0aW9uUmFuZ2VbXSB7XG5cbiAgICAgICAgLy8gVGhlIGxhc3QgYWN0aW9uIHdhcyBrZXlib2FyZCArIHNoaWZ0IHNlbGVjdGlvbiAtPiBhZGQgaXRcbiAgICAgICAgdGhpcy5hZGRLZXlib2FyZFJhbmdlKCk7XG5cbiAgICAgICAgY29uc3QgcmFuZ2VzID0gQXJyYXkuZnJvbSh0aGlzLl9yYW5nZXMpLm1hcChyYW5nZSA9PiBKU09OLnBhcnNlKHJhbmdlKSk7XG5cbiAgICAgICAgLy8gTm8gcmFuZ2VzIGJ1dCB3ZSBoYXZlIGEgZm9jdXNlZCBjZWxsIC0+IGFkZCBpdFxuICAgICAgICBpZiAoIXJhbmdlcy5sZW5ndGggJiYgdGhpcy5hY3RpdmVFbGVtZW50ICYmIHRoaXMuZ3JpZC5pc0NlbGxTZWxlY3RhYmxlKSB7XG4gICAgICAgICAgICByYW5nZXMucHVzaCh0aGlzLmdlbmVyYXRlUmFuZ2UodGhpcy5hY3RpdmVFbGVtZW50KSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmFuZ2VzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgcHJpbWFyeUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9pbnRlclN0YXRlLnByaW1hcnlCdXR0b247XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBwcmltYXJ5QnV0dG9uKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLnByaW1hcnlCdXR0b24gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHpvbmU6IE5nWm9uZSwgcHJvdGVjdGVkIHBsYXRmb3JtOiBQbGF0Zm9ybVV0aWwpIHtcbiAgICAgICAgdGhpcy5pbml0UG9pbnRlclN0YXRlKCk7XG4gICAgICAgIHRoaXMuaW5pdEtleWJvYXJkU3RhdGUoKTtcbiAgICAgICAgdGhpcy5pbml0Q29sdW1uc1N0YXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzZXRzIHRoZSBrZXlib2FyZCBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0S2V5Ym9hcmRTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLm5vZGUgPSBudWxsO1xuICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUuc2hpZnQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLnJhbmdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5rZXlib2FyZFN0YXRlLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgcG9pbnRlciBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0UG9pbnRlclN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUuY3RybCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5zaGlmdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5yYW5nZSA9IG51bGw7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLnByaW1hcnlCdXR0b24gPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgY29sdW1ucyBzdGF0ZVxuICAgICAqL1xuICAgIHB1YmxpYyBpbml0Q29sdW1uc1N0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCA9IG51bGw7XG4gICAgICAgIHRoaXMuY29sdW1uc1N0YXRlLnJhbmdlID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyBhIHNpbmdsZSBub2RlLlxuICAgICAqIFNpbmdsZSBjbGlja3MgfCBDdHJsICsgc2luZ2xlIGNsaWNrcyBvbiBjZWxscyBpcyB0aGUgdXN1YWwgY2FzZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgYWRkKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBhZGRUb1JhbmdlID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaGFzKG5vZGUucm93KSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZ2V0KG5vZGUucm93KS5hZGQobm9kZS5jb2x1bW4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2V0KG5vZGUucm93LCBuZXcgU2V0PG51bWJlcj4oKSkuZ2V0KG5vZGUucm93KS5hZGQobm9kZS5jb2x1bW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFkZFRvUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jhbmdlcy5hZGQoSlNPTi5zdHJpbmdpZnkodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHRoZSBhY3RpdmUga2V5Ym9hcmQgcmFuZ2Ugc2VsZWN0aW9uIChpZiBhbnkpIHRvIHRoZSBgcmFuZ2VzYCBtZXRhLlxuICAgICAqL1xuICAgIHB1YmxpYyBhZGRLZXlib2FyZFJhbmdlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5rZXlib2FyZFN0YXRlLnJhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9yYW5nZXMuYWRkKEpTT04uc3RyaW5naWZ5KHRoaXMua2V5Ym9hcmRTdGF0ZS5yYW5nZSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZShub2RlOiBJU2VsZWN0aW9uTm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaGFzKG5vZGUucm93KSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZ2V0KG5vZGUucm93KS5kZWxldGUobm9kZS5jb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzQWN0aXZlTm9kZShub2RlKSkge1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yYW5nZXMuZGVsZXRlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0luTWFwKG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3Rpb24uaGFzKG5vZGUucm93KSAmJiB0aGlzLnNlbGVjdGlvbi5nZXQobm9kZS5yb3cpLmhhcyhub2RlLmNvbHVtbikpIHx8XG4gICAgICAgICAgICAodGhpcy50ZW1wLmhhcyhub2RlLnJvdykgJiYgdGhpcy50ZW1wLmdldChub2RlLnJvdykuaGFzKG5vZGUuY29sdW1uKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdGVkKG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAodGhpcy5pc0FjdGl2ZU5vZGUobm9kZSkgJiYgdGhpcy5ncmlkLmlzQ2VsbFNlbGVjdGFibGUpIHx8IHRoaXMuaXNJbk1hcChub2RlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmVOb2RlKG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5hY3RpdmVFbGVtZW50LmNvbHVtbiA9PT0gbm9kZS5jb2x1bW4gJiYgdGhpcy5hY3RpdmVFbGVtZW50LnJvdyA9PT0gbm9kZS5yb3c7XG4gICAgICAgICAgICBpZiAodGhpcy5ncmlkLmhhc0NvbHVtbkxheW91dHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXlvdXQgPSB0aGlzLmFjdGl2ZUVsZW1lbnQubGF5b3V0O1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0FjdGl2ZSAmJiB0aGlzLmlzQWN0aXZlTGF5b3V0KGxheW91dCwgbm9kZS5sYXlvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlzQWN0aXZlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmVMYXlvdXQoY3VycmVudDogSU11bHRpUm93TGF5b3V0Tm9kZSwgdGFyZ2V0OiBJTXVsdGlSb3dMYXlvdXROb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiBjdXJyZW50LmNvbHVtblZpc2libGVJbmRleCA9PT0gdGFyZ2V0LmNvbHVtblZpc2libGVJbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkUmFuZ2VNZXRhKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzdGF0ZT86IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Jhbmdlcy5hZGQoSlNPTi5zdHJpbmdpZnkodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIHN0YXRlKSkpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVSYW5nZU1ldGEobm9kZTogSVNlbGVjdGlvbk5vZGUsIHN0YXRlPzogU2VsZWN0aW9uU3RhdGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmFuZ2VzLmRlbGV0ZShKU09OLnN0cmluZ2lmeSh0aGlzLmdlbmVyYXRlUmFuZ2Uobm9kZSwgc3RhdGUpKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgbmV3IHNlbGVjdGlvbiByYW5nZSBmcm9tIHRoZSBnaXZlbiBgbm9kZWAuXG4gICAgICogSWYgYHN0YXRlYCBpcyBwYXNzZWQgaW5zdGVhZCBpdCB3aWxsIGdlbmVyYXRlIHRoZSByYW5nZSBiYXNlZCBvbiB0aGUgcGFzc2VkIGBub2RlYFxuICAgICAqIGFuZCB0aGUgc3RhcnQgbm9kZSBvZiB0aGUgYHN0YXRlYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2VuZXJhdGVSYW5nZShub2RlOiBJU2VsZWN0aW9uTm9kZSwgc3RhdGU/OiBTZWxlY3Rpb25TdGF0ZSk6IEdyaWRTZWxlY3Rpb25SYW5nZSB7XG4gICAgICAgIHRoaXMuX2xhc3RTZWxlY3RlZE5vZGUgPSBub2RlO1xuXG4gICAgICAgIGlmICghc3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcm93U3RhcnQ6IG5vZGUucm93LFxuICAgICAgICAgICAgICAgIHJvd0VuZDogbm9kZS5yb3csXG4gICAgICAgICAgICAgICAgY29sdW1uU3RhcnQ6IG5vZGUuY29sdW1uLFxuICAgICAgICAgICAgICAgIGNvbHVtbkVuZDogbm9kZS5jb2x1bW5cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHJvdywgY29sdW1uIH0gPSBzdGF0ZS5ub2RlO1xuICAgICAgICBjb25zdCByb3dTdGFydCA9IE1hdGgubWluKG5vZGUucm93LCByb3cpO1xuICAgICAgICBjb25zdCByb3dFbmQgPSBNYXRoLm1heChub2RlLnJvdywgcm93KTtcbiAgICAgICAgY29uc3QgY29sdW1uU3RhcnQgPSBNYXRoLm1pbihub2RlLmNvbHVtbiwgY29sdW1uKTtcbiAgICAgICAgY29uc3QgY29sdW1uRW5kID0gTWF0aC5tYXgobm9kZS5jb2x1bW4sIGNvbHVtbik7XG5cbiAgICAgICAgcmV0dXJuIHsgcm93U3RhcnQsIHJvd0VuZCwgY29sdW1uU3RhcnQsIGNvbHVtbkVuZCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICovXG4gICAgcHVibGljIGtleWJvYXJkU3RhdGVPbktleWRvd24obm9kZTogSVNlbGVjdGlvbk5vZGUsIHNoaWZ0OiBib29sZWFuLCBzaGlmdFRhYjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmtleWJvYXJkU3RhdGUuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbml0UG9pbnRlclN0YXRlKCk7XG4gICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5zaGlmdCA9IHNoaWZ0ICYmICFzaGlmdFRhYjtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQubmF2aWdhdGlvbi5pc0RhdGFSb3cobm9kZS5yb3cpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gS2IgbmF2aWdhdGlvbiB3aXRoIHNoaWZ0IGFuZCBubyBwcmV2aW91cyBub2RlLlxuICAgICAgICAvLyBDbGVhciB0aGUgY3VycmVudCBzZWxlY3Rpb24gaW5pdCB0aGUgc3RhcnQgbm9kZS5cbiAgICAgICAgaWYgKHRoaXMua2V5Ym9hcmRTdGF0ZS5zaGlmdCAmJiAhdGhpcy5rZXlib2FyZFN0YXRlLm5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMua2V5Ym9hcmRTdGF0ZS5ub2RlID0gT2JqZWN0LmFzc2lnbih7fSwgbm9kZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMga2V5Ym9hcmRTdGF0ZU9uRm9jdXMobm9kZTogSVNlbGVjdGlvbk5vZGUsIGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxHcmlkU2VsZWN0aW9uUmFuZ2U+LCBkb20pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qga2JTdGF0ZSA9IHRoaXMua2V5Ym9hcmRTdGF0ZTtcblxuICAgICAgICAvLyBGb2N1cyB0cmlnZ2VyZWQgYnkga2V5Ym9hcmQgbmF2aWdhdGlvblxuICAgICAgICBpZiAoa2JTdGF0ZS5hY3RpdmUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzQ2hyb21pdW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb3ZlU2VsZWN0aW9uQ2hyb21lKGRvbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGFydCBnZW5lcmF0aW5nIGEgcmFuZ2UgaWYgc2hpZnQgaXMgaG9sZFxuICAgICAgICAgICAgaWYgKGtiU3RhdGUuc2hpZnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRyYWdTZWxlY3Qobm9kZSwga2JTdGF0ZSk7XG4gICAgICAgICAgICAgICAga2JTdGF0ZS5yYW5nZSA9IHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCBrYlN0YXRlKTtcbiAgICAgICAgICAgICAgICBlbWl0dGVyLmVtaXQodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIGtiU3RhdGUpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdEtleWJvYXJkU3RhdGUoKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgICAgIHRoaXMuYWRkKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHBvaW50ZXJEb3duKG5vZGU6IElTZWxlY3Rpb25Ob2RlLCBzaGlmdDogYm9vbGVhbiwgY3RybDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmFkZEtleWJvYXJkUmFuZ2UoKTtcbiAgICAgICAgdGhpcy5pbml0S2V5Ym9hcmRTdGF0ZSgpO1xuICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5jdHJsID0gY3RybDtcbiAgICAgICAgdGhpcy5wb2ludGVyU3RhdGUuc2hpZnQgPSBzaGlmdDtcbiAgICAgICAgdGhpcy5wb2ludGVyRXZlbnRJbkdyaWRCb2R5ID0gdHJ1ZTtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCB0aGlzLnBvaW50ZXJPcmlnaW5IYW5kbGVyKTtcblxuICAgICAgICAvLyBObyBjdHJsIGtleSBwcmVzc2VkIC0gbm8gbXVsdGlwbGUgc2VsZWN0aW9uXG4gICAgICAgIGlmICghY3RybCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNoaWZ0KSB7XG4gICAgICAgICAgICAvLyBObyBwcmV2aW91c2x5ICdjbGlja2VkJyBub2RlLiBVc2UgdGhlIGxhc3QgYWN0aXZlIG5vZGUuXG4gICAgICAgICAgICBpZiAoIXRoaXMucG9pbnRlclN0YXRlLm5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJTdGF0ZS5ub2RlID0gdGhpcy5hY3RpdmVFbGVtZW50IHx8IG5vZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJEb3duU2hpZnRLZXkobm9kZSk7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGV4dFNlbGVjdGlvbigpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW1vdmVSYW5nZU1ldGEobm9kZSk7XG4gICAgICAgIHRoaXMucG9pbnRlclN0YXRlLm5vZGUgPSBub2RlO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb2ludGVyRG93blNoaWZ0S2V5KG5vZGU6IElTZWxlY3Rpb25Ob2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RSYW5nZShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG1lcmdlTWFwKHRhcmdldDogTWFwPG51bWJlciwgU2V0PG51bWJlcj4+LCBzb3VyY2U6IE1hcDxudW1iZXIsIFNldDxudW1iZXI+Pik6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVyYXRvciA9IHNvdXJjZS5lbnRyaWVzKCk7XG4gICAgICAgIGxldCBwYWlyID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICBsZXQga2V5OiBudW1iZXI7XG4gICAgICAgIGxldCB2YWx1ZTogU2V0PG51bWJlcj47XG5cbiAgICAgICAgd2hpbGUgKCFwYWlyLmRvbmUpIHtcbiAgICAgICAgICAgIFtrZXksIHZhbHVlXSA9IHBhaXIudmFsdWU7XG4gICAgICAgICAgICBpZiAodGFyZ2V0LmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0YXJnZXQuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgdmFsdWUuZm9yRWFjaChyZWNvcmQgPT4gbmV3VmFsdWUuYWRkKHJlY29yZCkpO1xuICAgICAgICAgICAgICAgIHRhcmdldC5zZXQoa2V5LCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRhcmdldC5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYWlyID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHBvaW50ZXJFbnRlcihub2RlOiBJU2VsZWN0aW9uTm9kZSwgZXZlbnQ6IFBvaW50ZXJFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy8jdGhlLWJ1dHRvbi1wcm9wZXJ0eVxuICAgICAgICB0aGlzLmRyYWdNb2RlID0gKGV2ZW50LmJ1dHRvbnMgPT09IDEgJiYgKGV2ZW50LmJ1dHRvbiA9PT0gLTEgfHwgZXZlbnQuYnV0dG9uID09PSAwKSkgJiYgdGhpcy5wb2ludGVyRXZlbnRJbkdyaWRCb2R5O1xuICAgICAgICBpZiAoIXRoaXMuZHJhZ01vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyVGV4dFNlbGVjdGlvbigpO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VycyB0cmlnZ2VycyBhIGRyYWctbGlrZSBldmVudCBieSBmaXJzdCBjbGlja2luZyBvdXRzaWRlIHRoZSBncmlkIGNlbGxzXG4gICAgICAgIC8vIGFuZCB0aGVuIGVudGVycyBpbiB0aGUgZ3JpZCBib2R5IHdlIG1heSBub3QgaGF2ZSBhIGluaXRpYWwgcG9pbnRlciBzdGFydGluZyBub2RlLlxuICAgICAgICAvLyBBc3N1bWUgdGhlIGZpcnN0IHBvaW50ZXJlbnRlciBub2RlIGlzIHdoZXJlIHdlIHN0YXJ0LlxuICAgICAgICBpZiAoIXRoaXMucG9pbnRlclN0YXRlLm5vZGUpIHtcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclN0YXRlLm5vZGUgPSBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucG9pbnRlclN0YXRlLmN0cmwpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0UmFuZ2Uobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUsIHRoaXMudGVtcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRyYWdTZWxlY3Qobm9kZSwgdGhpcy5wb2ludGVyU3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBwb2ludGVyVXAobm9kZTogSVNlbGVjdGlvbk5vZGUsIGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxHcmlkU2VsZWN0aW9uUmFuZ2U+LCBmaXJlZE91dHNpZGVHcmlkPzogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5kcmFnTW9kZSB8fCBmaXJlZE91dHNpZGVHcmlkKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVUZXh0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmFkZFJhbmdlTWV0YShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSk7XG4gICAgICAgICAgICB0aGlzLm1lcmdlTWFwKHRoaXMuc2VsZWN0aW9uLCB0aGlzLnRlbXApO1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1blRhc2soKCkgPT4gZW1pdHRlci5lbWl0KHRoaXMuZ2VuZXJhdGVSYW5nZShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSkpKTtcbiAgICAgICAgICAgIHRoaXMudGVtcC5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5kcmFnTW9kZSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wb2ludGVyU3RhdGUuc2hpZnQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUZXh0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLnJlc3RvcmVUZXh0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmFkZFJhbmdlTWV0YShub2RlLCB0aGlzLnBvaW50ZXJTdGF0ZSk7XG4gICAgICAgICAgICBlbWl0dGVyLmVtaXQodGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIHRoaXMucG9pbnRlclN0YXRlKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBvaW50ZXJFdmVudEluR3JpZEJvZHkgJiYgdGhpcy5pc0FjdGl2ZU5vZGUobm9kZSkpIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VsZWN0UmFuZ2Uobm9kZTogSVNlbGVjdGlvbk5vZGUsIHN0YXRlOiBTZWxlY3Rpb25TdGF0ZSwgY29sbGVjdGlvbjogTWFwPG51bWJlciwgU2V0PG51bWJlcj4+ID0gdGhpcy5zZWxlY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKGNvbGxlY3Rpb24gPT09IHRoaXMudGVtcCkge1xuICAgICAgICAgICAgY29sbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgcm93U3RhcnQsIHJvd0VuZCwgY29sdW1uU3RhcnQsIGNvbHVtbkVuZCB9ID0gdGhpcy5nZW5lcmF0ZVJhbmdlKG5vZGUsIHN0YXRlKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHJvd1N0YXJ0OyBpIDw9IHJvd0VuZDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gY29sdW1uU3RhcnQgYXMgbnVtYmVyOyBqIDw9IChjb2x1bW5FbmQgYXMgbnVtYmVyKTsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24uaGFzKGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24uZ2V0KGkpLmFkZChqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnNldChpLCBuZXcgU2V0PG51bWJlcj4oKSkuZ2V0KGkpLmFkZChqKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZHJhZ1NlbGVjdChub2RlOiBJU2VsZWN0aW9uTm9kZSwgc3RhdGU6IFNlbGVjdGlvblN0YXRlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wb2ludGVyU3RhdGUuY3RybCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdFJhbmdlKG5vZGUsIHN0YXRlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoY2xlYXJBY3JpdmVFbCA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmIChjbGVhckFjcml2ZUVsKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMudGVtcC5jbGVhcigpO1xuICAgICAgICB0aGlzLl9yYW5nZXMuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJUZXh0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCkge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uUmFuZ2UgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvblJhbmdlLmNvbGxhcHNlKHRydWUpO1xuICAgICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlc3RvcmVUZXh0U2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgIGlmICghc2VsZWN0aW9uLnJhbmdlQ291bnQpIHtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh0aGlzLl9zZWxlY3Rpb25SYW5nZSB8fCBkb2N1bWVudC5jcmVhdGVSYW5nZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTZWxlY3RlZFJvd3NEYXRhKCkge1xuICAgICAgICBpZiAodGhpcy5ncmlkLmlzUGl2b3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdyaWQuZGF0YVZpZXcuZmlsdGVyKHIgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSByLmRpbWVuc2lvbnMubWFwKGQgPT4gUGl2b3RVdGlsLmdldFJlY29yZEtleShyLCBkKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGtleXMuc29tZShrID0+IHRoaXMuaXNQaXZvdFJvd1NlbGVjdGVkKGspKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5ncmlkLnByaW1hcnlLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMucm93U2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgY29uc3QgZ3JpZERhdGFNYXAgPSB7fTtcbiAgICAgICAgdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2FsbF9kYXRhKHRydWUpLmZvckVhY2gocm93ID0+IGdyaWREYXRhTWFwW3RoaXMuZ2V0UmVjb3JkS2V5KHJvdyldID0gcm93KTtcbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uZm9yRWFjaChySUQgPT4ge1xuICAgICAgICAgICAgY29uc3QgckRhdGEgPSBncmlkRGF0YU1hcFtySURdO1xuICAgICAgICAgICAgY29uc3QgcGFydGlhbFJvd0RhdGEgPSB7fTtcbiAgICAgICAgICAgIHBhcnRpYWxSb3dEYXRhW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA9IHJJRDtcbiAgICAgICAgICAgIHNlbGVjdGlvbi5wdXNoKHJEYXRhID8gckRhdGEgOiBwYXJ0aWFsUm93RGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gc2VsZWN0aW9uO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGFycmF5IG9mIHRoZSBzZWxlY3RlZCByb3cgaWQncy4gKi9cbiAgICBwdWJsaWMgZ2V0U2VsZWN0ZWRSb3dzKCk6IEFycmF5PGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSA/IEFycmF5LmZyb20odGhpcy5yb3dTZWxlY3Rpb24ua2V5cygpKSA6IFtdO1xuICAgIH1cblxuICAgIC8qKiBSZXR1cm5zIGFycmF5IG9mIHRoZSByb3dzIGluIGluZGV0ZXJtaW5hdGUgc3RhdGUuICovXG4gICAgcHVibGljIGdldEluZGV0ZXJtaW5hdGVSb3dzKCk6IEFycmF5PGFueT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbmRldGVybWluYXRlUm93cy5zaXplID8gQXJyYXkuZnJvbSh0aGlzLmluZGV0ZXJtaW5hdGVSb3dzLmtleXMoKSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXJzIHJvdyBzZWxlY3Rpb24sIGlmIGZpbHRlcmluZyBpcyBhcHBsaWVkIGNsZWFycyBvbmx5IHNlbGVjdGVkIHJvd3MgZnJvbSBmaWx0ZXJlZCBkYXRhLiAqL1xuICAgIHB1YmxpYyBjbGVhclJvd1NlbGVjdGlvbihldmVudD8pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWRSZWMgPSB0aGlzLmlzRmlsdGVyaW5nQXBwbGllZCgpID9cbiAgICAgICAgICAgIHRoaXMuYWxsRGF0YS5maWx0ZXIocm93ID0+IHRoaXMuaXNSb3dTZWxlY3RlZCh0aGlzLmdldFJlY29yZEtleShyb3cpKSkgOiBzZWxlY3RlZFJvd3M7XG4gICAgICAgIGxldCBuZXdTZWxlY3Rpb247XG4gICAgICAgIGlmICh0aGlzLmdyaWQucHJpbWFyeUtleSkge1xuICAgICAgICAgICAgbmV3U2VsZWN0aW9uID0gdGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSA/IHNlbGVjdGVkUm93cy5maWx0ZXIoeCA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFyZW1vdmVkUmVjLnNvbWUoaXRlbSA9PiBpdGVtW3RoaXMuZ3JpZC5wcmltYXJ5S2V5XSA9PT0geFt0aGlzLmdyaWQucHJpbWFyeUtleV0pO1xuICAgICAgICAgICAgfSkgOiBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbiA9IHRoaXMuaXNGaWx0ZXJpbmdBcHBsaWVkKCkgPyBzZWxlY3RlZFJvd3MuZmlsdGVyKHggPT4gIXJlbW92ZWRSZWMuaW5jbHVkZXMoeCkpIDogW107XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbXSwgcmVtb3ZlZFJlYywgZXZlbnQsIHNlbGVjdGVkUm93cyk7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCBhbGwgcm93cywgaWYgZmlsdGVyaW5nIGlzIGFwcGxpZWQgc2VsZWN0IG9ubHkgZnJvbSBmaWx0ZXJlZCBkYXRhLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RBbGxSb3dzKGV2ZW50Pykge1xuICAgICAgICBjb25zdCBhZGRlZFJvd3MgPSB0aGlzLmFsbERhdGEuZmlsdGVyKChyb3cpID0+ICF0aGlzLmlzUm93U2VsZWN0ZWQodGhpcy5nZXRSZWNvcmRLZXkocm93KSkpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSA/IHNlbGVjdGVkUm93cy5jb25jYXQoYWRkZWRSb3dzKSA6IGFkZGVkUm93cztcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cy5jbGVhcigpO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkUm93cywgW10sIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgdGhlIHNwZWNpZmllZCByb3cgYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdFJvd0J5SWQocm93SUQsIGNsZWFyUHJldlNlbGVjdGlvbj8sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBpZiAoISh0aGlzLmdyaWQuaXNSb3dTZWxlY3RhYmxlIHx8IHRoaXMuZ3JpZC5pc1Bpdm90KSB8fCB0aGlzLmlzUm93RGVsZXRlZChyb3dJRCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjbGVhclByZXZTZWxlY3Rpb24gPSAhdGhpcy5ncmlkLmlzTXVsdGlSb3dTZWxlY3Rpb25FbmFibGVkIHx8IGNsZWFyUHJldlNlbGVjdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuZ3JpZC5pc1Bpdm90KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdFBpdm90Um93QnlJZChyb3dJRCwgY2xlYXJQcmV2U2VsZWN0aW9uLCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IFt0aGlzLmdldFJvd0RhdGFCeUlkKHJvd0lEKV0gOiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMocm93SUQpID9cbiAgICAgICAgICAgIHNlbGVjdGVkUm93cyA6IFsuLi5zZWxlY3RlZFJvd3MsIHRoaXMuZ2V0Um93RGF0YUJ5SWQocm93SUQpXTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IHNlbGVjdGVkUm93cyA6IFtdO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIFt0aGlzLmdldFJvd0RhdGFCeUlkKHJvd0lEKV0sIHJlbW92ZWQsIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RQaXZvdFJvd0J5SWQocm93SUQsIGNsZWFyUHJldlNlbGVjdGlvbjogYm9vbGVhbiwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IFtyb3dJRF0gOiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMocm93SUQpID8gc2VsZWN0ZWRSb3dzIDogWy4uLnNlbGVjdGVkUm93cywgcm93SURdO1xuICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuZ2V0UGl2b3RSb3dzQnlJZHMoW3Jvd0lEXSk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmdldFBpdm90Um93c0J5SWRzKGNsZWFyUHJldlNlbGVjdGlvbiA/IHNlbGVjdGVkUm93cyA6IFtdKTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnRQaXZvdEdyaWQoc2VsZWN0ZWRSb3dzLCBuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIERlc2VsZWN0IHRoZSBzcGVjaWZpZWQgcm93IGFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdFJvdyhyb3dJRCwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc1Jvd1NlbGVjdGVkKHJvd0lEKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuZ3JpZC5pc1Bpdm90KSB7XG4gICAgICAgICAgICB0aGlzLmRlc2VsZWN0UGl2b3RSb3dCeUlEKHJvd0lELCBldmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHNlbGVjdGVkUm93cy5maWx0ZXIociA9PiAgdGhpcy5nZXRSZWNvcmRLZXkocikgIT09IHJvd0lEKTtcbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0aW9uLnNpemUgJiYgdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHJvd0lEKSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbXSwgW3RoaXMuZ2V0Um93RGF0YUJ5SWQocm93SUQpXSwgZXZlbnQsIHNlbGVjdGVkUm93cyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZGVzZWxlY3RQaXZvdFJvd0J5SUQocm93SUQsIGV2ZW50Pykge1xuICAgICAgICBpZiAodGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSAmJiB0aGlzLnJvd1NlbGVjdGlvbi5oYXMocm93SUQpKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZFJvd3MoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGN1cnJTZWxlY3Rpb24uZmlsdGVyKHIgPT4gciAhPT0gcm93SUQpO1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZCAgPSB0aGlzLmdldFBpdm90Um93c0J5SWRzKFtyb3dJRF0pO1xuICAgICAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnRQaXZvdEdyaWQoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLCBbXSwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Um93U2VsZWN0aW9uRXZlbnRQaXZvdEdyaWQoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuYXJlRXF1YWxDb2xsZWN0aW9ucyhjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VyclNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpO1xuICAgICAgICBjb25zdCBhcmdzOiBJUm93U2VsZWN0aW9uRXZlbnRBcmdzID0ge1xuICAgICAgICAgICAgb3duZXI6IHRoaXMuZ3JpZCxcbiAgICAgICAgICAgIG9sZFNlbGVjdGlvbjogY3VyclNlbGVjdGVkUm93cyxcbiAgICAgICAgICAgIG5ld1NlbGVjdGlvbjogdGhpcy5nZXRQaXZvdFJvd3NCeUlkcyhuZXdTZWxlY3Rpb24pLFxuICAgICAgICAgICAgYWRkZWQsXG4gICAgICAgICAgICByZW1vdmVkLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlLFxuICAgICAgICAgICAgYWxsUm93c1NlbGVjdGVkOiB0aGlzLmFyZUFsbFJvd1NlbGVjdGVkKG5ld1NlbGVjdGlvbilcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ncmlkLnJvd1NlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbGVjdFJvd3NXaXRoTm9FdmVudChuZXdTZWxlY3Rpb24sIHRydWUpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgdGhlIHNwZWNpZmllZCByb3dzIGFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBzZWxlY3RSb3dzKGtleXM6IGFueVtdLCBjbGVhclByZXZTZWxlY3Rpb24/OiBib29sZWFuLCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQuaXNNdWx0aVJvd1NlbGVjdGlvbkVuYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByb3dzVG9TZWxlY3QgPSBrZXlzLmZpbHRlcih4ID0+ICF0aGlzLmlzUm93RGVsZXRlZCh4KSAmJiAhdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHgpKTtcbiAgICAgICAgaWYgKCFyb3dzVG9TZWxlY3QubGVuZ3RoICYmICFjbGVhclByZXZTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIC8vIG5vIHZhbGlkL2FkZGl0aW9uYWwgcm93cyB0byBzZWxlY3QgYW5kIG5vIGNsZWFyXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZWxlY3RlZFJvd3MgPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgcm93c1RvU2VsZWN0ID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByb3dzVG9TZWxlY3QubWFwKHIgPT4gdGhpcy5nZXRSb3dEYXRhQnlJZChyKSkgOiByb3dzVG9TZWxlY3Q7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IHJvd3NUb1NlbGVjdCA6IFsuLi5zZWxlY3RlZFJvd3MsIC4uLnJvd3NUb1NlbGVjdF07XG4gICAgICAgIGNvbnN0IGtleXNBc1NldCA9IG5ldyBTZXQocm93c1RvU2VsZWN0KTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IHNlbGVjdGVkUm93cy5maWx0ZXIoeCA9PiAha2V5c0FzU2V0Lmhhcyh4KSkgOiBbXTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCByb3dzVG9TZWxlY3QsIHJlbW92ZWQsIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkZXNlbGVjdFJvd3Moa2V5czogYW55W10sIGV2ZW50Pyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucm93U2VsZWN0aW9uLnNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcm93c1RvRGVzZWxlY3QgPSBrZXlzLmZpbHRlcih4ID0+IHRoaXMucm93U2VsZWN0aW9uLmhhcyh4KSk7XG4gICAgICAgIGlmICghcm93c1RvRGVzZWxlY3QubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIHJvd3NUb0Rlc2VsZWN0ID0gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByb3dzVG9EZXNlbGVjdC5tYXAociA9PiB0aGlzLmdldFJvd0RhdGFCeUlkKHIpKSA6IHJvd3NUb0Rlc2VsZWN0O1xuICAgICAgICBjb25zdCBrZXlzQXNTZXQgPSBuZXcgU2V0KHJvd3NUb0Rlc2VsZWN0KTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gc2VsZWN0ZWRSb3dzLmZpbHRlcihyID0+ICFrZXlzQXNTZXQuaGFzKHIpKTtcbiAgICAgICAgdGhpcy5lbWl0Um93U2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbXSwgcm93c1RvRGVzZWxlY3QsIGV2ZW50LCBzZWxlY3RlZFJvd3MpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3Qgc3BlY2lmaWVkIHJvd3MuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIHNlbGVjdFJvd3NXaXRoTm9FdmVudChyb3dJRHM6IGFueVtdLCBjbGVhclByZXZTZWxlY3Rpb24/KTogdm9pZCB7XG4gICAgICAgIGlmIChjbGVhclByZXZTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMucm93U2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcm93SURzLmZvckVhY2gocm93SUQgPT4gdGhpcy5yb3dTZWxlY3Rpb24uYWRkKHJvd0lEKSk7XG4gICAgICAgIHRoaXMuY2xlYXJIZWFkZXJDQlN0YXRlKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3Qgc3BlY2lmaWVkIHJvd3MuIE5vIGV2ZW50IGlzIGVtaXR0ZWQuICovXG4gICAgcHVibGljIGRlc2VsZWN0Um93c1dpdGhOb0V2ZW50KHJvd0lEczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgcm93SURzLmZvckVhY2gocm93SUQgPT4gdGhpcy5yb3dTZWxlY3Rpb24uZGVsZXRlKHJvd0lEKSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlLm5leHQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNSb3dTZWxlY3RlZChyb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yb3dTZWxlY3Rpb24uc2l6ZSA+IDAgJiYgdGhpcy5yb3dTZWxlY3Rpb24uaGFzKHJvd0lEKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNQaXZvdFJvd1NlbGVjdGVkKHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBjb250YWlucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJvd1NlbGVjdGlvbi5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgY29uc3QgY29ycmVjdFJvd0lkID0gcm93SUQucmVwbGFjZSh4LCcnKTtcbiAgICAgICAgICAgIGlmIChyb3dJRC5pbmNsdWRlcyh4KSAmJiAoY29ycmVjdFJvd0lkID09PSAnJyB8fCBjb3JyZWN0Um93SWQuc3RhcnRzV2l0aCgnXycpKSApIHtcbiAgICAgICAgICAgICAgICBjb250YWlucyA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93U2VsZWN0aW9uLnNpemUgPiAwICYmIGNvbnRhaW5zO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1Jvd0luSW5kZXRlcm1pbmF0ZVN0YXRlKHJvd0lEKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmluZGV0ZXJtaW5hdGVSb3dzLnNpemUgPiAwICYmIHRoaXMuaW5kZXRlcm1pbmF0ZVJvd3MuaGFzKHJvd0lEKTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHJhbmdlIGZyb20gbGFzdCBzZWxlY3RlZCByb3cgdG8gdGhlIGN1cnJlbnQgc3BlY2lmaWVkIHJvdy4gKi9cbiAgICBwdWJsaWMgc2VsZWN0TXVsdGlwbGVSb3dzKHJvd0lELCByb3dEYXRhLCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jbGVhckhlYWRlckNCU3RhdGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLnJvd1NlbGVjdGlvbi5zaXplIHx8IHRoaXMuaXNSb3dEZWxldGVkKHJvd0lEKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RSb3dCeUlkKHJvd0lEKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBncmlkRGF0YSA9IHRoaXMuYWxsRGF0YTtcbiAgICAgICAgY29uc3QgbGFzdFJvd0lEID0gdGhpcy5nZXRTZWxlY3RlZFJvd3MoKVt0aGlzLnJvd1NlbGVjdGlvbi5zaXplIC0gMV07XG4gICAgICAgIGNvbnN0IGN1cnJJbmRleCA9IGdyaWREYXRhLmluZGV4T2YodGhpcy5nZXRSb3dEYXRhQnlJZChsYXN0Um93SUQpKTtcbiAgICAgICAgY29uc3QgbmV3SW5kZXggPSBncmlkRGF0YS5pbmRleE9mKHJvd0RhdGEpO1xuICAgICAgICBjb25zdCByb3dzID0gZ3JpZERhdGEuc2xpY2UoTWF0aC5taW4oY3VyckluZGV4LCBuZXdJbmRleCksIE1hdGgubWF4KGN1cnJJbmRleCwgbmV3SW5kZXgpICsgMSk7XG4gICAgICAgIGNvbnN0IGN1cnJTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkUm93c0RhdGEoKTtcbiAgICAgICAgY29uc3QgYWRkZWQgPSByb3dzLmZpbHRlcihyID0+ICF0aGlzLmlzUm93U2VsZWN0ZWQodGhpcy5nZXRSZWNvcmRLZXkocikpKTtcbiAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gY3VyclNlbGVjdGlvbi5jb25jYXQoYWRkZWQpO1xuICAgICAgICB0aGlzLmVtaXRSb3dTZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCBbXSwgZXZlbnQsIGN1cnJTZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhcmVBbGxSb3dTZWxlY3RlZChuZXdTZWxlY3Rpb24/KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5ncmlkLmRhdGEgJiYgIW5ld1NlbGVjdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmFsbFJvd3NTZWxlY3RlZCAhPT0gdW5kZWZpbmVkICYmICFuZXdTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFsbFJvd3NTZWxlY3RlZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWxlY3RlZERhdGEgPSBuZXcgU2V0KG5ld1NlbGVjdGlvbiA/IG5ld1NlbGVjdGlvbiA6IFsuLi50aGlzLnJvd1NlbGVjdGlvbl0pO1xuICAgICAgICBjb25zdCBhbGxEYXRhID0gdGhpcy5nZXRSb3dJRHModGhpcy5hbGxEYXRhKTtcbiAgICAgICAgY29uc3QgdW5TZWxlY3RlZFJvd3MgPSBhbGxEYXRhLmZpbHRlcihyb3cgPT4gIXNlbGVjdGVkRGF0YS5oYXMocm93KSk7XG4gICAgICAgIHJldHVybiB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IHRoaXMuYWxsRGF0YS5sZW5ndGggPiAwICYmIHVuU2VsZWN0ZWRSb3dzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFzU29tZVJvd1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSB0aGlzLmlzRmlsdGVyaW5nQXBwbGllZCgpID9cbiAgICAgICAgICAgIHRoaXMuZ2V0Um93SURzKHRoaXMuZ3JpZC5maWx0ZXJlZERhdGEpLnNvbWUocklEID0+IHRoaXMuaXNSb3dTZWxlY3RlZChySUQpKSA6IHRydWU7XG4gICAgICAgIHJldHVybiB0aGlzLnJvd1NlbGVjdGlvbi5zaXplID4gMCAmJiBmaWx0ZXJlZERhdGEgJiYgIXRoaXMuYXJlQWxsUm93U2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpbHRlcmVkU2VsZWN0ZWRSb3dJZHMoKTogYW55W10ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0ZpbHRlcmluZ0FwcGxpZWQoKSA/XG4gICAgICAgICAgICB0aGlzLmdldFJvd0lEcyh0aGlzLmFsbERhdGEpLmZpbHRlcihyb3dJRCA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocm93SUQpKSA6XG4gICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkUm93cygpLmZpbHRlcihyb3dJRCA9PiAhdGhpcy5pc1Jvd0RlbGV0ZWQocm93SUQpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdFJvd1NlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50PywgY3VyclNlbGVjdGlvbj8pOiBib29sZWFuIHtcbiAgICAgICAgY3VyclNlbGVjdGlvbiA9IGN1cnJTZWxlY3Rpb24gPz8gdGhpcy5nZXRTZWxlY3RlZFJvd3NEYXRhKCk7XG4gICAgICAgIGlmICh0aGlzLmFyZUVxdWFsQ29sbGVjdGlvbnMoY3VyclNlbGVjdGlvbiwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFyZ3M6IElSb3dTZWxlY3Rpb25FdmVudEFyZ3MgPSB7XG4gICAgICAgICAgICBvd25lcjogdGhpcy5ncmlkLFxuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0aW9uLFxuICAgICAgICAgICAgbmV3U2VsZWN0aW9uLFxuICAgICAgICAgICAgYWRkZWQsIHJlbW92ZWQsXG4gICAgICAgICAgICBldmVudCwgY2FuY2VsOiBmYWxzZSxcbiAgICAgICAgICAgIGFsbFJvd3NTZWxlY3RlZDogdGhpcy5hcmVBbGxSb3dTZWxlY3RlZChuZXdTZWxlY3Rpb24ubWFwKHIgPT4gIHRoaXMuZ2V0UmVjb3JkS2V5KHIpKSlcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmdyaWQucm93U2VsZWN0aW9uQ2hhbmdpbmcuZW1pdChhcmdzKTtcbiAgICAgICAgaWYgKGFyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0Um93c1dpdGhOb0V2ZW50KGFyZ3MubmV3U2VsZWN0aW9uLm1hcChyID0+IHRoaXMuZ2V0UmVjb3JkS2V5KHIpKSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBpdm90Um93c0J5SWRzKGlkczogYW55W10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5kYXRhVmlldy5maWx0ZXIociA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gci5kaW1lbnNpb25zLm1hcChkID0+IFBpdm90VXRpbC5nZXRSZWNvcmRLZXkociwgZCkpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTZXQoaWRzLmNvbmNhdChrZXlzKSkuc2l6ZSA8IGlkcy5sZW5ndGggKyBrZXlzLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFJvd0RhdGFCeUlkKHJvd0lEKTogYW55IHtcbiAgICAgICAgaWYgKCF0aGlzLmdyaWQucHJpbWFyeUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHJvd0lEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy5nZXRSb3dJRHModGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2FsbF9kYXRhKHRydWUpKS5pbmRleE9mKHJvd0lEKTtcbiAgICAgICAgcmV0dXJuIHJvd0luZGV4IDwgMCA/IHJvd0lEIDogdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2FsbF9kYXRhKHRydWUpW3Jvd0luZGV4XTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXJIZWFkZXJDQlN0YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Um93SURzKGRhdGEpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JpZC5wcmltYXJ5S2V5ICYmIGRhdGEubGVuZ3RoID8gZGF0YS5tYXAocmVjID0+IHJlY1t0aGlzLmdyaWQucHJpbWFyeUtleV0pIDogZGF0YTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UmVjb3JkS2V5KHJlY29yZCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLnByaW1hcnlLZXkgPyByZWNvcmRbdGhpcy5ncmlkLnByaW1hcnlLZXldIDogcmVjb3JkO1xuICAgIH1cblxuICAgIC8qKiBDbGVhciByb3dTZWxlY3Rpb24gYW5kIHVwZGF0ZSBjaGVja2JveCBzdGF0ZSAqL1xuICAgIHB1YmxpYyBjbGVhckFsbFNlbGVjdGVkUm93cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yb3dTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5pbmRldGVybWluYXRlUm93cy5jbGVhcigpO1xuICAgICAgICB0aGlzLmNsZWFySGVhZGVyQ0JTdGF0ZSgpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93c0NoYW5nZS5uZXh0KCk7XG4gICAgfVxuXG4gICAgLyoqIFJldHVybnMgYWxsIGRhdGEgaW4gdGhlIGdyaWQsIHdpdGggYXBwbGllZCBmaWx0ZXJpbmcgYW5kIHNvcnRpbmcgYW5kIHdpdGhvdXQgZGVsZXRlZCByb3dzLiAqL1xuICAgIHB1YmxpYyBnZXQgYWxsRGF0YSgpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgbGV0IGFsbERhdGE7XG4gICAgICAgIC8vIFYuVC4gSmFuIDE3dGgsIDIwMjQgIzEzNzU3IEFkZGluZyBhbiBhZGRpdGlvbmFsIGNvbmRpdGlvbmFsIGNoZWNrIHRvIHRha2UgYWNjb3VudCBXSVRISU4gcmFuZ2Ugb2YgZ3JvdXBzXG4gICAgICAgIGlmICh0aGlzLmlzRmlsdGVyaW5nQXBwbGllZCgpIHx8IHRoaXMuZ3JpZC5zb3J0aW5nRXhwcmVzc2lvbnMubGVuZ3RoIHx8IHRoaXMuZ3JpZC5ncm91cGluZ0V4cHJlc3Npb25zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGFsbERhdGEgPSB0aGlzLmdyaWQucGlubmVkUmVjb3Jkc0NvdW50ID8gdGhpcy5ncmlkLl9maWx0ZXJlZFNvcnRlZFVucGlubmVkRGF0YSA6IHRoaXMuZ3JpZC5maWx0ZXJlZFNvcnRlZERhdGE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbGxEYXRhID0gdGhpcy5ncmlkLmdyaWRBUEkuZ2V0X2FsbF9kYXRhKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbGxEYXRhLmZpbHRlcihyRGF0YSA9PiAhdGhpcy5pc1Jvd0RlbGV0ZWQodGhpcy5ncmlkLmdyaWRBUEkuZ2V0X3Jvd19pZChyRGF0YSkpKTtcbiAgICB9XG5cbiAgICAvKiogUmV0dXJucyBhcnJheSBvZiB0aGUgc2VsZWN0ZWQgY29sdW1ucyBmaWVsZHMuICovXG4gICAgcHVibGljIGdldFNlbGVjdGVkQ29sdW1ucygpOiBBcnJheTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1uU2VsZWN0aW9uLnNpemUgPyBBcnJheS5mcm9tKHRoaXMuY29sdW1uU2VsZWN0aW9uLmtleXMoKSkgOiBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNDb2x1bW5TZWxlY3RlZChmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbHVtblNlbGVjdGlvbi5zaXplID4gMCAmJiB0aGlzLmNvbHVtblNlbGVjdGlvbi5oYXMoZmllbGQpO1xuICAgIH1cblxuICAgIC8qKiBTZWxlY3QgdGhlIHNwZWNpZmllZCBjb2x1bW4gYW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdENvbHVtbihmaWVsZDogc3RyaW5nLCBjbGVhclByZXZTZWxlY3Rpb24/LCBzZWxlY3RDb2x1bW5zUmFuZ2U/LCBldmVudD8pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhdGVDb2x1bW4gPSB0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCA/IHRoaXMuZ3JpZC5nZXRDb2x1bW5CeU5hbWUodGhpcy5jb2x1bW5zU3RhdGUuZmllbGQpIDogbnVsbDtcbiAgICAgICAgaWYgKCFldmVudCB8fCAhc3RhdGVDb2x1bW4gfHwgc3RhdGVDb2x1bW4udmlzaWJsZUluZGV4IDwgMCB8fCAhc2VsZWN0Q29sdW1uc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCA9IGZpZWxkO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zU3RhdGUucmFuZ2UgPSBbXTtcblxuICAgICAgICAgICAgY29uc3QgbmV3U2VsZWN0aW9uID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gW2ZpZWxkXSA6IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkuaW5kZXhPZihmaWVsZCkgIT09IC0xID9cbiAgICAgICAgICAgICAgICB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpIDogWy4uLnRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCksIGZpZWxkXTtcbiAgICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSBjbGVhclByZXZTZWxlY3Rpb24gPyB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmZpbHRlcihjb2xGaWVsZCA9PiBjb2xGaWVsZCAhPT0gZmllbGQpIDogW107XG4gICAgICAgICAgICBjb25zdCBhZGRlZCA9IHRoaXMuaXNDb2x1bW5TZWxlY3RlZChmaWVsZCkgPyBbXSA6IFtmaWVsZF07XG4gICAgICAgICAgICB0aGlzLmVtaXRDb2x1bW5TZWxlY3Rpb25FdmVudChuZXdTZWxlY3Rpb24sIGFkZGVkLCByZW1vdmVkLCBldmVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0Q29sdW1uc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbHVtbnNSYW5nZShmaWVsZCwgZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdCBzcGVjaWZpZWQgY29sdW1ucy4gQW5kIGVtaXQgZXZlbnQuICovXG4gICAgcHVibGljIHNlbGVjdENvbHVtbnMoZmllbGRzOiBzdHJpbmdbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPywgc2VsZWN0Q29sdW1uc1JhbmdlPywgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBmaWVsZHMubWFwKGYgPT4gdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZShmKSkuc29ydCgoYSwgYikgPT4gYS52aXNpYmxlSW5kZXggLSBiLnZpc2libGVJbmRleCk7XG4gICAgICAgIGNvbnN0IHN0YXRlQ29sdW1uID0gdGhpcy5jb2x1bW5zU3RhdGUuZmllbGQgPyB0aGlzLmdyaWQuZ2V0Q29sdW1uQnlOYW1lKHRoaXMuY29sdW1uc1N0YXRlLmZpZWxkKSA6IG51bGw7XG4gICAgICAgIGlmICghc3RhdGVDb2x1bW4gfHwgc3RhdGVDb2x1bW4udmlzaWJsZUluZGV4IDwgMCB8fCAhc2VsZWN0Q29sdW1uc1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCA9IGNvbHVtbnNbMF0gPyBjb2x1bW5zWzBdLmZpZWxkIDogbnVsbDtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1N0YXRlLnJhbmdlID0gW107XG5cbiAgICAgICAgICAgIGNvbnN0IGFkZGVkID0gZmllbGRzLmZpbHRlcihjb2xGaWVsZCA9PiAhdGhpcy5pc0NvbHVtblNlbGVjdGVkKGNvbEZpZWxkKSk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gY2xlYXJQcmV2U2VsZWN0aW9uID8gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKS5maWx0ZXIoY29sRmllbGQgPT4gZmllbGRzLmluZGV4T2YoY29sRmllbGQpID09PSAtMSkgOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IGNsZWFyUHJldlNlbGVjdGlvbiA/IGZpZWxkcyA6IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkuY29uY2F0KGFkZGVkKTtcblxuICAgICAgICAgICAgdGhpcy5lbWl0Q29sdW1uU2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmlsZWRTdGFydCA9IHN0YXRlQ29sdW1uLnZpc2libGVJbmRleCA+XG4gICAgICAgICAgICAgICAgY29sdW1uc1tjb2x1bW5zLmxlbmd0aCAtIDFdLnZpc2libGVJbmRleCA/IGNvbHVtbnNbMF0uZmllbGQgOiBjb2x1bW5zW2NvbHVtbnMubGVuZ3RoIC0gMV0uZmllbGQ7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdENvbHVtbnNSYW5nZShmaWxlZFN0YXJ0LCBldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHJhbmdlIGZyb20gbGFzdCBjbGlja2VkIGNvbHVtbiB0byB0aGUgY3VycmVudCBzcGVjaWZpZWQgY29sdW1uLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW5zUmFuZ2UoZmllbGQ6IHN0cmluZywgZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VyckluZGV4ID0gdGhpcy5ncmlkLmdldENvbHVtbkJ5TmFtZSh0aGlzLmNvbHVtbnNTdGF0ZS5maWVsZCkudmlzaWJsZUluZGV4O1xuICAgICAgICBjb25zdCBuZXdJbmRleCA9IHRoaXMuZ3JpZC5jb2x1bW5Ub1Zpc2libGVJbmRleChmaWVsZCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnNGaWVsZHMgPSB0aGlzLmdyaWQudmlzaWJsZUNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoYyA9PiAhYy5jb2x1bW5Hcm91cClcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBhLnZpc2libGVJbmRleCAtIGIudmlzaWJsZUluZGV4KVxuICAgICAgICAgICAgLnNsaWNlKE1hdGgubWluKGN1cnJJbmRleCwgbmV3SW5kZXgpLCBNYXRoLm1heChjdXJySW5kZXgsIG5ld0luZGV4KSArIDEpXG4gICAgICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wuc2VsZWN0YWJsZSkubWFwKGNvbCA9PiBjb2wuZmllbGQpO1xuICAgICAgICBjb25zdCByZW1vdmVkID0gW107XG4gICAgICAgIGNvbnN0IG9sZEFkZGVkID0gW107XG4gICAgICAgIGNvbnN0IGFkZGVkID0gY29sdW1uc0ZpZWxkcy5maWx0ZXIoY29sRmllbGQgPT4gIXRoaXMuaXNDb2x1bW5TZWxlY3RlZChjb2xGaWVsZCkpO1xuICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5yYW5nZS5mb3JFYWNoKGYgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbnNGaWVsZHMuaW5kZXhPZihmKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVkLnB1c2goZik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG9sZEFkZGVkLnB1c2goZik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNvbHVtbnNTdGF0ZS5yYW5nZSA9IGNvbHVtbnNGaWVsZHMuZmlsdGVyKGNvbEZpZWxkID0+ICF0aGlzLmlzQ29sdW1uU2VsZWN0ZWQoY29sRmllbGQpIHx8IG9sZEFkZGVkLmluZGV4T2YoY29sRmllbGQpID4gLTEpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmNvbmNhdChhZGRlZCkuZmlsdGVyKGMgPT4gcmVtb3ZlZC5pbmRleE9mKGMpID09PSAtMSk7XG4gICAgICAgIHRoaXMuZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogU2VsZWN0IHNwZWNpZmllZCBjb2x1bW5zLiBObyBldmVudCBpcyBlbWl0dGVkLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RDb2x1bW5zV2l0aE5vRXZlbnQoZmllbGRzOiBzdHJpbmdbXSwgY2xlYXJQcmV2U2VsZWN0aW9uPyk6IHZvaWQge1xuICAgICAgICBpZiAoY2xlYXJQcmV2U2VsZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uU2VsZWN0aW9uLmFkZChmaWVsZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCB0aGUgc3BlY2lmaWVkIGNvbHVtbiBhbmQgZW1pdCBldmVudC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RDb2x1bW4oZmllbGQ6IHN0cmluZywgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5pdENvbHVtbnNTdGF0ZSgpO1xuICAgICAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmZpbHRlcihjID0+IGMgIT09IGZpZWxkKTtcbiAgICAgICAgdGhpcy5lbWl0Q29sdW1uU2VsZWN0aW9uRXZlbnQobmV3U2VsZWN0aW9uLCBbXSwgW2ZpZWxkXSwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBEZXNlbGVjdCBzcGVjaWZpZWQgY29sdW1ucy4gTm8gZXZlbnQgaXMgZW1pdHRlZC4gKi9cbiAgICBwdWJsaWMgZGVzZWxlY3RDb2x1bW5zV2l0aE5vRXZlbnQoZmllbGRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB0aGlzLmNvbHVtblNlbGVjdGlvbi5kZWxldGUoZmllbGQpKTtcbiAgICB9XG5cbiAgICAvKiogRGVzZWxlY3Qgc3BlY2lmaWVkIGNvbHVtbnMuIEFuZCBlbWl0IGV2ZW50LiAqL1xuICAgIHB1YmxpYyBkZXNlbGVjdENvbHVtbnMoZmllbGRzOiBzdHJpbmdbXSwgZXZlbnQ/KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmdldFNlbGVjdGVkQ29sdW1ucygpLmZpbHRlcihjb2xGaWVsZCA9PiBmaWVsZHMuaW5kZXhPZihjb2xGaWVsZCkgPiAtMSk7XG4gICAgICAgIGNvbnN0IG5ld1NlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0ZWRDb2x1bW5zKCkuZmlsdGVyKGNvbEZpZWxkID0+IGZpZWxkcy5pbmRleE9mKGNvbEZpZWxkKSA9PT0gLTEpO1xuXG4gICAgICAgIHRoaXMuZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgW10sIHJlbW92ZWQsIGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZW1pdENvbHVtblNlbGVjdGlvbkV2ZW50KG5ld1NlbGVjdGlvbiwgYWRkZWQsIHJlbW92ZWQsIGV2ZW50Pyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyU2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3RlZENvbHVtbnMoKTtcbiAgICAgICAgaWYgKHRoaXMuYXJlRXF1YWxDb2xsZWN0aW9ucyhjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcmdzID0ge1xuICAgICAgICAgICAgb2xkU2VsZWN0aW9uOiBjdXJyU2VsZWN0aW9uLCBuZXdTZWxlY3Rpb24sXG4gICAgICAgICAgICBhZGRlZCwgcmVtb3ZlZCwgZXZlbnQsIGNhbmNlbDogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5ncmlkLmNvbHVtblNlbGVjdGlvbkNoYW5naW5nLmVtaXQoYXJncyk7XG4gICAgICAgIGlmIChhcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2VsZWN0Q29sdW1uc1dpdGhOb0V2ZW50KGFyZ3MubmV3U2VsZWN0aW9uLCB0cnVlKTtcbiAgICB9XG5cbiAgICAvKiogQ2xlYXIgY29sdW1uU2VsZWN0aW9uICovXG4gICAgcHVibGljIGNsZWFyQWxsU2VsZWN0ZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbHVtblNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhcmVFcXVhbENvbGxlY3Rpb25zKGZpcnN0LCBzZWNvbmQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Lmxlbmd0aCA9PT0gc2Vjb25kLmxlbmd0aCAmJiBuZXcgU2V0KGZpcnN0LmNvbmNhdChzZWNvbmQpKS5zaXplID09PSBmaXJzdC5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogKOKVr8Kw4pahwrDvvInila/vuLUg4pS74pSB4pS7XG4gICAgICogQ2hyb21lIGFuZCBDaHJvbWl1bSBkb24ndCBjYXJlIGFib3V0IHRoZSBhY3RpdmVcbiAgICAgKiByYW5nZSBhZnRlciBrZXlib2FyZCBuYXZpZ2F0aW9uLCB0aHVzIHRoaXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfbW92ZVNlbGVjdGlvbkNocm9tZShub2RlOiBOb2RlKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuICAgICAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuICAgICAgICByYW5nZS5zZWxlY3ROb2RlKG5vZGUpO1xuICAgICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTtcbiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRmlsdGVyaW5nQXBwbGllZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkodGhpcy5ncmlkLmZpbHRlcmluZ0V4cHJlc3Npb25zVHJlZSkgfHxcbiAgICAgICAgICAgICFGaWx0ZXJpbmdFeHByZXNzaW9uc1RyZWUuZW1wdHkodGhpcy5ncmlkLmFkdmFuY2VkRmlsdGVyaW5nRXhwcmVzc2lvbnNUcmVlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUm93RGVsZXRlZChyb3dJRCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5ncmlkLmdyaWRBUEkucm93X2RlbGV0ZWRfdHJhbnNhY3Rpb24ocm93SUQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcG9pbnRlck9yaWdpbkhhbmRsZXIgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5wb2ludGVyRXZlbnRJbkdyaWRCb2R5ID0gZmFsc2U7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9pbnRlcnVwJywgdGhpcy5wb2ludGVyT3JpZ2luSGFuZGxlcik7XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0VGFnTmFtZSA9IGV2ZW50LnRhcmdldC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh0YXJnZXRUYWdOYW1lICE9PSAnaWd4LWdyaWQtY2VsbCcgJiYgdGFyZ2V0VGFnTmFtZSAhPT0gJ2lneC10cmVlLWdyaWQtY2VsbCcpIHtcbiAgICAgICAgICAgIHRoaXMucG9pbnRlclVwKHRoaXMuX2xhc3RTZWxlY3RlZE5vZGUsIHRoaXMuZ3JpZC5yYW5nZVNlbGVjdGVkLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH07XG59XG4iXX0=
@@ -30,11 +30,11 @@ export class IgxQueryBuilderHeaderComponent {
30
30
  return this._resourceStrings;
31
31
  }
32
32
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxQueryBuilderHeaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
33
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.4", type: IgxQueryBuilderHeaderComponent, isStandalone: true, selector: "igx-query-builder-header", inputs: { title: "title", showLegend: ["showLegend", "showLegend", booleanAttribute], resourceStrings: "resourceStrings" }, ngImport: i0, template: "<div class=\"igx-query-builder__header\">\n <div class=\"ig-typography__h6\" style=\"pointer-events: none;\">\n {{ title }}\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"showLegend\" class=\"igx-builder-legend\" >\n <div class=\"igx-builder-legend__item--and\">\n <span>{{this.resourceStrings.igx_query_builder_and_label}}</span>\n </div>\n <div class=\"igx-builder-legend__item--or\">\n <span>{{this.resourceStrings.igx_query_builder_or_label}}</span>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
33
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.2.4", type: IgxQueryBuilderHeaderComponent, isStandalone: true, selector: "igx-query-builder-header", inputs: { title: "title", showLegend: ["showLegend", "showLegend", booleanAttribute], resourceStrings: "resourceStrings" }, ngImport: i0, template: "<div class=\"igx-query-builder__header\">\n <div class=\"ig-typography__h6\" style=\"pointer-events: none;\">\n {{ title || this.resourceStrings.igx_query_builder_title }}\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"showLegend\" class=\"igx-builder-legend\" >\n <div class=\"igx-builder-legend__item--and\">\n <span>{{this.resourceStrings.igx_query_builder_and_label}}</span>\n </div>\n <div class=\"igx-builder-legend__item--or\">\n <span>{{this.resourceStrings.igx_query_builder_or_label}}</span>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
34
34
  }
35
35
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgxQueryBuilderHeaderComponent, decorators: [{
36
36
  type: Component,
37
- args: [{ selector: 'igx-query-builder-header', standalone: true, imports: [NgIf], template: "<div class=\"igx-query-builder__header\">\n <div class=\"ig-typography__h6\" style=\"pointer-events: none;\">\n {{ title }}\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"showLegend\" class=\"igx-builder-legend\" >\n <div class=\"igx-builder-legend__item--and\">\n <span>{{this.resourceStrings.igx_query_builder_and_label}}</span>\n </div>\n <div class=\"igx-builder-legend__item--or\">\n <span>{{this.resourceStrings.igx_query_builder_or_label}}</span>\n </div>\n </div>\n</div>\n" }]
37
+ args: [{ selector: 'igx-query-builder-header', standalone: true, imports: [NgIf], template: "<div class=\"igx-query-builder__header\">\n <div class=\"ig-typography__h6\" style=\"pointer-events: none;\">\n {{ title || this.resourceStrings.igx_query_builder_title }}\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"showLegend\" class=\"igx-builder-legend\" >\n <div class=\"igx-builder-legend__item--and\">\n <span>{{this.resourceStrings.igx_query_builder_and_label}}</span>\n </div>\n <div class=\"igx-builder-legend__item--or\">\n <span>{{this.resourceStrings.igx_query_builder_or_label}}</span>\n </div>\n </div>\n</div>\n" }]
38
38
  }], propDecorators: { title: [{
39
39
  type: Input
40
40
  }], showLegend: [{
@@ -43,4 +43,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
43
43
  }], resourceStrings: [{
44
44
  type: Input
45
45
  }] } });
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFnQyw2QkFBNkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25ILE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFRbkUsTUFBTSxPQUFPLDhCQUE4QjtJQU4zQztRQVFZLHFCQUFnQixHQUFHLHlCQUF5QixDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFhcEY7Ozs7Ozs7V0FPRztRQUVJLGVBQVUsR0FBRyxJQUFJLENBQUM7S0FpQjVCO0lBZkc7OztPQUdHO0lBQ0gsSUFDVyxlQUFlLENBQUMsS0FBbUM7UUFDMUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQzs4R0F4Q1EsOEJBQThCO2tHQUE5Qiw4QkFBOEIsK0hBdUJuQixnQkFBZ0IsaUVDbEN4QyxvakJBY0EsNENETGMsSUFBSTs7MkZBRUwsOEJBQThCO2tCQU4xQyxTQUFTOytCQUNJLDBCQUEwQixjQUV4QixJQUFJLFdBQ1AsQ0FBQyxJQUFJLENBQUM7OEJBZVIsS0FBSztzQkFEWCxLQUFLO2dCQVlDLFVBQVU7c0JBRGhCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUTNCLGVBQWU7c0JBRHpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBib29sZWFuQXR0cmlidXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJUXVlcnlCdWlsZGVyUmVzb3VyY2VTdHJpbmdzLCBRdWVyeUJ1aWxkZXJSZXNvdXJjZVN0cmluZ3NFTiB9IGZyb20gJy4uL2NvcmUvaTE4bi9xdWVyeS1idWlsZGVyLXJlc291cmNlcyc7XG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGdldEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtcXVlcnktYnVpbGRlci1oZWFkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAncXVlcnktYnVpbGRlci1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWZdXG59KVxuZXhwb3J0IGNsYXNzIElneFF1ZXJ5QnVpbGRlckhlYWRlckNvbXBvbmVudCB7XG5cbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBnZXRDdXJyZW50UmVzb3VyY2VTdHJpbmdzKFF1ZXJ5QnVpbGRlclJlc291cmNlU3RyaW5nc0VOKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRpdGxlIG9mIHRoZSBgSWd4UXVlcnlCdWlsZGVySGVhZGVyQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcXVlcnktYnVpbGRlci1oZWFkZXIgdGl0bGU9XCJTYW1wbGUgUXVlcnkgQnVpbGRlclwiPjwvaWd4LXF1ZXJ5LWJ1aWxkZXItaGVhZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTaG93L2hpZGUgdGhlIGxlZ2VuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcXVlcnktYnVpbGRlci1oZWFkZXIgW3Nob3dMZWdlbmRdPVwiZmFsc2VcIj48L2lneC1xdWVyeS1idWlsZGVyLWhlYWRlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2hvd0xlZ2VuZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSVF1ZXJ5QnVpbGRlclJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElRdWVyeUJ1aWxkZXJSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpZ3gtcXVlcnktYnVpbGRlcl9faGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImlnLXR5cG9ncmFwaHlfX2g2XCIgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTtcIj5cbiAgICAgICAge3sgdGl0bGUgfX1cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzaG93TGVnZW5kXCIgY2xhc3M9XCJpZ3gtYnVpbGRlci1sZWdlbmRcIiA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtYnVpbGRlci1sZWdlbmRfX2l0ZW0tLWFuZFwiPlxuICAgICAgICAgICAgPHNwYW4+e3t0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfcXVlcnlfYnVpbGRlcl9hbmRfbGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtYnVpbGRlci1sZWdlbmRfX2l0ZW0tLW9yXCI+XG4gICAgICAgICAgICA8c3Bhbj57e3RoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX29yX2xhYmVsfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcnktYnVpbGRlci1oZWFkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci1oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaWduaXRldWktYW5ndWxhci9zcmMvbGliL3F1ZXJ5LWJ1aWxkZXIvcXVlcnktYnVpbGRlci1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFnQyw2QkFBNkIsRUFBRSxNQUFNLHNDQUFzQyxDQUFDO0FBQ25ILE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2QyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFRbkUsTUFBTSxPQUFPLDhCQUE4QjtJQU4zQztRQVFZLHFCQUFnQixHQUFHLHlCQUF5QixDQUFDLDZCQUE2QixDQUFDLENBQUM7UUFhcEY7Ozs7Ozs7V0FPRztRQUVJLGVBQVUsR0FBRyxJQUFJLENBQUM7S0FpQjVCO0lBZkc7OztPQUdHO0lBQ0gsSUFDVyxlQUFlLENBQUMsS0FBbUM7UUFDMUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGVBQWU7UUFDdEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDakMsQ0FBQzs4R0F4Q1EsOEJBQThCO2tHQUE5Qiw4QkFBOEIsK0hBdUJuQixnQkFBZ0IsaUVDbEN4QyxvbUJBY0EsNENETGMsSUFBSTs7MkZBRUwsOEJBQThCO2tCQU4xQyxTQUFTOytCQUNJLDBCQUEwQixjQUV4QixJQUFJLFdBQ1AsQ0FBQyxJQUFJLENBQUM7OEJBZVIsS0FBSztzQkFEWCxLQUFLO2dCQVlDLFVBQVU7c0JBRGhCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBUTNCLGVBQWU7c0JBRHpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBib29sZWFuQXR0cmlidXRlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJUXVlcnlCdWlsZGVyUmVzb3VyY2VTdHJpbmdzLCBRdWVyeUJ1aWxkZXJSZXNvdXJjZVN0cmluZ3NFTiB9IGZyb20gJy4uL2NvcmUvaTE4bi9xdWVyeS1idWlsZGVyLXJlc291cmNlcyc7XG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGdldEN1cnJlbnRSZXNvdXJjZVN0cmluZ3MgfSBmcm9tICcuLi9jb3JlL2kxOG4vcmVzb3VyY2VzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpZ3gtcXVlcnktYnVpbGRlci1oZWFkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAncXVlcnktYnVpbGRlci1oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW05nSWZdXG59KVxuZXhwb3J0IGNsYXNzIElneFF1ZXJ5QnVpbGRlckhlYWRlckNvbXBvbmVudCB7XG5cbiAgICBwcml2YXRlIF9yZXNvdXJjZVN0cmluZ3MgPSBnZXRDdXJyZW50UmVzb3VyY2VTdHJpbmdzKFF1ZXJ5QnVpbGRlclJlc291cmNlU3RyaW5nc0VOKTtcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHRpdGxlIG9mIHRoZSBgSWd4UXVlcnlCdWlsZGVySGVhZGVyQ29tcG9uZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcXVlcnktYnVpbGRlci1oZWFkZXIgdGl0bGU9XCJTYW1wbGUgUXVlcnkgQnVpbGRlclwiPjwvaWd4LXF1ZXJ5LWJ1aWxkZXItaGVhZGVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBTaG93L2hpZGUgdGhlIGxlZ2VuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtcXVlcnktYnVpbGRlci1oZWFkZXIgW3Nob3dMZWdlbmRdPVwiZmFsc2VcIj48L2lneC1xdWVyeS1idWlsZGVyLWhlYWRlcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBwdWJsaWMgc2hvd0xlZ2VuZCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyBFTiByZXNvdXJjZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2V0IHJlc291cmNlU3RyaW5ncyh2YWx1ZTogSVF1ZXJ5QnVpbGRlclJlc291cmNlU3RyaW5ncykge1xuICAgICAgICB0aGlzLl9yZXNvdXJjZVN0cmluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9yZXNvdXJjZVN0cmluZ3MsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSByZXNvdXJjZSBzdHJpbmdzLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcmVzb3VyY2VTdHJpbmdzKCk6IElRdWVyeUJ1aWxkZXJSZXNvdXJjZVN0cmluZ3Mge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzb3VyY2VTdHJpbmdzO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJpZ3gtcXVlcnktYnVpbGRlcl9faGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cImlnLXR5cG9ncmFwaHlfX2g2XCIgc3R5bGU9XCJwb2ludGVyLWV2ZW50czogbm9uZTtcIj5cbiAgICAgICAge3sgdGl0bGUgfHwgdGhpcy5yZXNvdXJjZVN0cmluZ3MuaWd4X3F1ZXJ5X2J1aWxkZXJfdGl0bGUgfX1cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzaG93TGVnZW5kXCIgY2xhc3M9XCJpZ3gtYnVpbGRlci1sZWdlbmRcIiA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtYnVpbGRlci1sZWdlbmRfX2l0ZW0tLWFuZFwiPlxuICAgICAgICAgICAgPHNwYW4+e3t0aGlzLnJlc291cmNlU3RyaW5ncy5pZ3hfcXVlcnlfYnVpbGRlcl9hbmRfbGFiZWx9fTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJpZ3gtYnVpbGRlci1sZWdlbmRfX2l0ZW0tLW9yXCI+XG4gICAgICAgICAgICA8c3Bhbj57e3RoaXMucmVzb3VyY2VTdHJpbmdzLmlneF9xdWVyeV9idWlsZGVyX29yX2xhYmVsfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=