@churchillliving/se-ui-toolkit 6.54.88 → 6.54.89

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.
@@ -657,7 +657,7 @@ export class GridService {
657
657
  addNumericColumn(columnInfo, showFilter = true) {
658
658
  if (showFilter) {
659
659
  columnInfo.filter = {
660
- type: GridFilterControlType.NUMERICINPUT,
660
+ type: columnInfo?.filter?.type ? columnInfo.filter.type : GridFilterControlType.NUMERICINPUT,
661
661
  showFilter: this.showFilterIcon(columnInfo),
662
662
  };
663
663
  }
@@ -1570,4 +1570,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
1570
1570
  providedIn: 'root',
1571
1571
  }]
1572
1572
  }], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i2.HyperlinkService }, { type: i3.DropdownService }, { type: i4.AlertService }, { type: i5.RequestService }, { type: i6.ActivatedRoute }]; } });
1573
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBSXJELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBSXJCLGVBQWUsRUFLZixjQUFjLEVBS2QsY0FBYyxFQUVkLGNBQWMsRUFFZCxVQUFVLEVBQ1YsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFJOUIsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUtqRCxPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQzs7Ozs7Ozs7QUFNeEMsTUFBTSxPQUFPLFdBQVc7SUFNdEIsWUFDUyxRQUFrQixFQUNqQixnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsS0FBcUI7UUFMdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNqQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFYL0IsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUNqQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQ3BCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztJQVF0QyxDQUFDO0lBRUo7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxLQUFvQixFQUFFLE9BQXNCO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFV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QUUsS0FBSyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO2lJQTN4RFUsV0FBVztxSUFBWCxXQUFXLGNBRlYsTUFBTTs7MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGF6eUxvYWRFdmVudCB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IElBdXRvQ29tcGxldGVTYXZlLCBJRHJvcERvd25SZXF1ZXN0IH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgRUdyaWRTb3J0RGlyZWN0aW9uLFxuICBHcmlkRmlsdGVyQ29udHJvbFR5cGUsXG4gIElHbG9iYWxGaWx0ZXIsXG4gIElHcmlkRmlsdGVyLFxuICBJR3JpZFNvcnQsXG4gIEVHcmlkQ29sdW1uVHlwZSxcbiAgYWRkQ29sdW1uLFxuICBhZGRGaWx0ZXJDb2x1bW4sXG4gIGFkZEdsb2JhbEZpbHRlcixcbiAgSUdyaWRDb2x1bW4sXG4gIEVHcmlkVmFsaWRhdG9yLFxuICBJR3JpZFByb3AsXG4gIElHcmlkUHJvcEZpbHRlcixcbiAgSUdyaWRSb3dQcm9wLFxuICBJR3JpZFJlcG9ydEJ0bixcbiAgRUdyaWRSb3dBY3Rpb24sXG4gIElEaWFsb2dDb2x1bW4sXG4gIEVHcmlkRm9ybWF0dGVyLFxuICBJR3JpZFVwZGF0ZSxcbiAgRUdyaWRFeGNlbCxcbiAgRUdyaWRSb3dQcm9wTmFtZSxcbn0gZnJvbSAnLi4vbW9kZWxzL2dyaWQubW9kZWwnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnLi9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IERyb3Bkb3duU2VydmljZSB9IGZyb20gJy4vZHJvcGRvd24uc2VydmljZSc7XG5pbXBvcnQgeyBIeXBlcmxpbmtTZXJ2aWNlIH0gZnJvbSAnLi9oeXBlcmxpbmsuc2VydmljZSc7XG5pbXBvcnQgKiBhcyB1dGlsaXRpZXMgZnJvbSAnLi91dGlsaXRpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBSZXF1ZXN0U2VydmljZSB9IGZyb20gJy4vcmVxdWVzdC5zZXJ2aWNlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UsIER5bmFtaWNEaWFsb2dDb21wb25lbnQgfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHsgV29ya1NoZWV0IH0gZnJvbSAneGxzeCc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5cblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRTZXJ2aWNlIHtcbiAgdXNlclNlYXJjaGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHNvZnRDYWNoaW5nRmlsdGVyczogYW55ID0ge307XG4gIGFwcGx5RmlsdGVyRXZlbnQ6IGJvb2xlYW4gPSB0cnVlO1xuICByb3dVcGRhdGU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNvbHVtbkZvY3VzZWRPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGRhdGVwaXBlOiBEYXRlUGlwZSxcbiAgICBwcml2YXRlIGh5cGVybGlua1NlcnZpY2U6IEh5cGVybGlua1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkcm9wZG93blNlcnZpY2U6IERyb3Bkb3duU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVxdWVzdFNlcnZpY2U6IFJlcXVlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICApIHt9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBSZWNlaXZlcyBsYXp5IGV2ZW50IGFuZCByZXR1cm5zIGFmdGVyIHByb3BlciBtYXBwaW5nXG4gICAqL1xuICBnZXRHcmlkRmlsdGVycyhldmVudDogTGF6eUxvYWRFdmVudCwgY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLm1hcEZpbHRlcnMoZXZlbnQsIGNvbHVtbnMpO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZU11bHRpRmlsdGVyRmllbGQoZmlsdGVycyk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogUmVjZWl2ZXMgZmlsdGVycyBhbmQgcmV0dXJucyBhcnJheSBhZnRlciByZW1vdmluZyBkdXBsaWNhdGVzXG4gICAqIGFuZCBjcmVhdGluZyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzIGZvciBzYW1lIGZpbHRlcnNcbiAgICovXG4gIGhhbmRsZU11bHRpRmlsdGVyRmllbGQoZmlsdGVyczogSUdyaWRGaWx0ZXJbXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIHJldHVybiBmaWx0ZXJzXG4gICAgICAubWFwKCh4LCBpLCBhcnIpID0+XG4gICAgICAgIGFyci5zb21lKFxuICAgICAgICAgICh5LCBpZHgpID0+XG4gICAgICAgICAgICB5LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSB4LmZpZWxkPy50b0xvd2VyQ2FzZSgpICYmIGkgIT09IGlkeFxuICAgICAgICApXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIC4uLngsXG4gICAgICAgICAgICAgIHZhbHVlOiBhcnJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgKHopID0+IHouZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHguZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLm1hcCgoYSkgPT4gYS52YWx1ZSlcbiAgICAgICAgICAgICAgICAuam9pbigpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogeFxuICAgICAgKVxuICAgICAgLmZpbHRlcigoZiwgaSwgYXJyKSA9PiBhcnIuZmluZEluZGV4KCh4KSA9PiB4LnZhbHVlID09PSBmLnZhbHVlKSA9PT0gaSk7XG4gIH1cblxuICAvLyBQcmVwYXJlIGJhc2ljIGdyaWQgZmlsdGVyc1xuICBwcmVwYXJlQmFzaWNGaWx0ZXJzKFxuICAgIGV2ZW50OiBMYXp5TG9hZEV2ZW50LFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW11cbiAgKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMubWFwRmlsdGVycyhldmVudCwgY29sdW1ucyk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGZpbHRlcnMgaGFzIHZhbHVlcyB0aGVuIGNvbnZlcnRzIGdsb2JhbCBmaWx0ZXIgdmFsdWVzIHR5cGUgaW50byBJR3JpZEZpbHRlci5cbiAgICovXG4gIHByZXBhcmVHbG9iYWxGaWx0ZXJzKGdsb2JhbEZpbHRlcnM6IElHbG9iYWxGaWx0ZXJbXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIGNvbnN0IGdsb2JhbERhdGE6IElHcmlkRmlsdGVyW10gPSBbXTtcblxuICAgIGdsb2JhbEZpbHRlcnM/LmZvckVhY2goKGZpbHRlcjogSUdsb2JhbEZpbHRlcikgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICAoKHR5cGVvZiBmaWx0ZXIudmFsdWUgPT09ICdzdHJpbmcnIHx8IEFycmF5LmlzQXJyYXkoZmlsdGVyLnZhbHVlKSkgJiZcbiAgICAgICAgICBmaWx0ZXIudmFsdWUubGVuZ3RoKSB8fFxuICAgICAgICAodHlwZW9mIGZpbHRlci52YWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgICAhQXJyYXkuaXNBcnJheShmaWx0ZXIudmFsdWUpICYmXG4gICAgICAgICAgZmlsdGVyLnZhbHVlKSB8fFxuICAgICAgICAodHlwZW9mIGZpbHRlci52YWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIGZpbHRlci52YWx1ZSAhPT0gbnVsbCkgfHxcbiAgICAgICAgZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRVxuICAgICAgKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFICYmXG4gICAgICAgICAgZmlsdGVyLnZhbHVlPy50b1N0cmluZygpPy5pbmNsdWRlcygnfCcpXG4gICAgICAgICkgeyAgICAgICAgIFxuXG4gICAgICAgICAgLy8gYWRkIGZpbHRlciBmb3IgZW5kIGRhdGVcbiAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyLCBmYWxzZSksXG4gICAgICAgICAgICBtYXRjaE1vZGU6IGZpbHRlci5tYXRjaE1vZGUgPyBmaWx0ZXIubWF0Y2hNb2RlIDogJ2x0ZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIsIGZhbHNlKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgIC8vIGFkZCBmaWx0ZXIgZm9yIHN0YXJ0IGRhdGVcbiAgICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLnNldEdsb2JhbEZpbHRlckZpZWxkKGZpbHRlciksXG4gICAgICAgICAgICBtYXRjaE1vZGU6IGZpbHRlci5tYXRjaE1vZGUgPyBmaWx0ZXIubWF0Y2hNb2RlIDogJ2d0ZScsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIpLFxuICAgICAgICAgICAgdGFibGVBbGlhczogZmlsdGVyLnRhYmxlQWxpYXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLnR5cGUgIT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSkge1xuICAgICAgICAgIGdsb2JhbERhdGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXIpLFxuICAgICAgICAgICAgbWF0Y2hNb2RlOlxuICAgICAgICAgICAgICBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUXG4gICAgICAgICAgICAgICAgPyAnaW4nXG4gICAgICAgICAgICAgICAgOiBmaWx0ZXIubWF0Y2hNb2RlLFxuICAgICAgICAgICAgb3BlcmF0b3I6IGZpbHRlci5vcGVyYXRvciA/IGZpbHRlci5vcGVyYXRvciA6ICdhbmQnLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0R2xvYmFsRmlsdGVyVmFsdWUoZmlsdGVyKSxcbiAgICAgICAgICAgIHRhYmxlQWxpYXM6IGZpbHRlci50YWJsZUFsaWFzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGdsb2JhbERhdGE7XG4gIH1cblxuICBzZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXI6IGFueSwgaXNTdGFydERhdGU6IGJvb2xlYW4gPSB0cnVlKTogc3RyaW5nIHtcbiAgICBpZiAoZmlsdGVyLnR5cGUgPT09IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRSkge1xuICAgICAgaWYgKGlzU3RhcnREYXRlKSB7XG4gICAgICAgIHJldHVybiBmaWx0ZXIuZnJvbUZpZWxkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlci50b0ZpZWxkO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsdGVyLmZpZWxkO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBnbG9iYWwgZmlsdGVyIHZhbHVlXG4gIHNldEdsb2JhbEZpbHRlclZhbHVlKFxuICAgIGZpbHRlcjogSUdsb2JhbEZpbHRlcixcbiAgICBpc1N0YXJ0RGF0ZTogYm9vbGVhbiA9IHRydWVcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHwgRGF0ZSB8IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAoZmlsdGVyLnR5cGUpIHtcbiAgICAgIGNhc2UgR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUOlxuICAgICAgICByZXR1cm4gKGZpbHRlci52YWx1ZSBhcyBhbnlbXSkuam9pbignLCcpO1xuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVI6XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZmlsdGVyLnZhbHVlIGFzIERhdGUpO1xuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0U6XG4gICAgICAgIGxldCBkYXRlVmFsdWVzOiBzdHJpbmdbXSA9IGZpbHRlci52YWx1ZVxuICAgICAgICAgID8gZmlsdGVyLnZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJ3wnKVxuICAgICAgICAgIDogW107XG4gICAgICAgIGlmIChkYXRlVmFsdWVzICYmIGRhdGVWYWx1ZXMubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICBsZXQgZGF0ZVZhbHVlOiBEYXRlID0gaXNTdGFydERhdGVcbiAgICAgICAgICAgID8gbmV3IERhdGUoZGF0ZVZhbHVlc1swXSlcbiAgICAgICAgICAgIDogbmV3IERhdGUoZGF0ZVZhbHVlc1sxXSk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZShkYXRlVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g6XG4gICAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUgPyB0cnVlIDogZmFsc2U7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmlsdGVyLnZhbHVlIGFzIHN0cmluZztcbiAgICB9XG4gIH1cblxuICBjaGVja1ZhbGlkaXR5KGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIHJvdzogYW55LCBzaW5nbGVDZWxsOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBsZXQgaXNWYWxpZDogYm9vbGVhbiA9IHRydWU7XG4gICAgY29sdW1ucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xuICAgICAgaWYgKGl0ZW0udmFsaWRhdGlvbnMgJiYgIWl0ZW0uZGlzYWJsZWQpIHtcbiAgICAgICAgaXRlbS5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICAgICAgaXRlbS5pc3ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLnZhbGlkYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgbWluTWF4VmFsaWREYXRlID0gdXRpbGl0aWVzLmNhbGVuZGFyTWluTWF4VmFsdWUoXG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLFxuICAgICAgICAgICAgaVxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgdmFsaWQgPSBpdGVtLnZhbGlkYXRpb25zICYmIGl0ZW0uaGVhZGVyO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFzaW5nbGVDZWxsICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUkVRVUlSRUQgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICFpdGVtLmhpZGRlbiAmJlxuICAgICAgICAgICAgdmFsaWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPSByb3dbaXRlbS5maWVsZF1cbiAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYCR7dmFsaWR9IGlzIHJlcXVpcmVkYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUlOTEVOR1RIICYmXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPiBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWluaW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUFYTEVOR1RIICYmXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0ubGVuZ3RoID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgJHtpdGVtLmhlYWRlcn0gTWF4aW11bSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn0gY2hhcmFjdGVyc2BcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IFxuICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUFYT1BUSU9OUyBcblxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdmFyIG9wdGlvbnM6bnVtYmVyPTE7XG4gICAgICAgICAgICB2YXIgdmFsdWU9cm93W2l0ZW0uZmllbGRdO1xuICAgICAgICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCB2YWx1ZS5sZW5ndGggLSAxOyB4KyspIHtcbiAgICAgICAgICAgICAgaWYgKHZhbHVlW3hdID09ICc7Jykge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMrKztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9ibHVlO3JlZDtncmVlbiBtYXg9M1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIC8vIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICBvcHRpb25zIDw9IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBtYXhpbXVtICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufSBvcHRpb24ke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbj4xPydzJzonJ31gXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUlOSU1VTSAmJlxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgICAgbWluTWF4VmFsaWREYXRlID09PSAnbWluaW11bSdcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgTWluaW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2l0ZW0uZmllbGRdIDwgaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPiBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBNaW5pbXVtICR7dmFsaWR9ICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufWBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuTUFYSU1VTSAmJlxuICAgICAgICAgICAgaXNWYWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgICAgbWluTWF4VmFsaWREYXRlID09PSAnZ3JlYXRlcidcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBgTWF4aW11bSAke3ZhbGlkfSAke2l0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbn1gXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocm93W2l0ZW0uZmllbGRdID4gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBNYXhpbXVtICR7dmFsaWR9ICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufWBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUEFUVEVSTiAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXS5tYXRjaChpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5tYXRjaChpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5OVU1FUklDICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdLnRvU3RyaW5nKCkubWF0Y2goL14oMHxbLSgpMS05XVxcZCopJC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmIHJvd1tpdGVtLmZpZWxkXS5tYXRjaCgvXigwfFsxLTldXFxkKikkLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgRW50ZXIgJHtpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGV9IGZvciAke3ZhbGlkfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuUEhPTkUgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oPz0uKlswLTldKVstKCkwLTlcXHMreF0rJC8pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXig/PS4qWzAtOV0pWy0oKTAtOVxcc10rJC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5ERUNJTUFMICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKDB8Wy0oKTEtOV1cXGQqKShcXC5cXGQrKT8kLylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKDB8WzEtOV1cXGQqKShcXC5cXGQrKT8kLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBgRW50ZXIgJHtpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGV9IGZvciAke3ZhbGlkfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICBpdGVtLnZhbGlkYXRpb25zW2ldLnR5cGUgPT0gRUdyaWRWYWxpZGF0b3IuRU1BSUwgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF1cbiAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgIC5tYXRjaCgvXlthLXpBLVowLTkuXy1dK0BbYS16QS1aMC05Li1dK1xcLlthLXpBLVpdezIsNn0kLylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdXG4gICAgICAgICAgICAgICAgPy50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgLm1hdGNoKC9eW2EtekEtWjAtOS5fLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Miw2fSQvKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoaXRlbSwgYEVudGVyIHZhbGlkICR7dmFsaWR9YCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaXNWYWxpZDtcbiAgfVxuXG4gIHNldEVycm9yTWVzc2FnZShpdGVtOiBJR3JpZENvbHVtbiwgZXJyb3JNZXNzYWdlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpdGVtLmVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZTtcbiAgICBpdGVtLmlzdmFsaWQgPSBmYWxzZTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBzZXQgYmFzaWMgZmlsdGVyIHZhbHVlXG4gIHNldEJhc2ljRmlsdGVyVmFsdWUoZmlsdGVyOiBhbnkpOiBhbnkge1xuICAgIGlmIChmaWx0ZXIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKGZpbHRlcik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHJldHVybiBmaWx0ZXIgPyAxIDogMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHBhcmFtXG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgc29ydCBhcnJheVxuICAgKi9cbiAgZ2V0R3JpZFNvcnRzKFxuICAgIHsgbXVsdGlTb3J0TWV0YSB9OiBMYXp5TG9hZEV2ZW50LFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW11cbiAgKTogSUdyaWRTb3J0W10ge1xuICAgIHJldHVybiAobXVsdGlTb3J0TWV0YSB8fCBbXSkubWFwKCh7IGZpZWxkLCBvcmRlciB9LCBpKTogYW55ID0+ICh7XG4gICAgICBmaWVsZCxcbiAgICAgIGRpcmVjdGlvbjogb3JkZXIgPiAwID8gRUdyaWRTb3J0RGlyZWN0aW9uLkFTQyA6IEVHcmlkU29ydERpcmVjdGlvbi5ERVNDLFxuICAgICAgcHJpb3JpdHk6IGkgKyAxLFxuICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIEhhbmRsZXMgZGVmYXVsdCBhbmQgbG9va3VwIGZpbHRlcnNcbiAgICovXG4gIG1hcEZpbHRlcnMoZXZlbnQ6IGFueSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIGNvbnN0IGZpbHRlcnM6IElHcmlkRmlsdGVyW10gPSBbXTtcbiAgICBPYmplY3QuZW50cmllcyhldmVudC5maWx0ZXJzKS5mb3JFYWNoKChbZmllbGQsIHZhbHVlXTogYW55KSA9PiB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgKHZhbHVlIGFzIElHcmlkRmlsdGVyW10pLmZvckVhY2goXG4gICAgICAgICAgKHsgbWF0Y2hNb2RlLCBvcGVyYXRvciwgdmFsdWU6IGZpbHRlciB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEJhc2ljRmlsdGVyVmFsdWUoZmlsdGVyKSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodmFsdWUudmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsdWUudmFsdWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogJ2VxdWFscycsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogdmFsdWUubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICAgIGlmICh2YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6ICdlcXVhbCcsXG4gICAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgICB2YWx1ZTpcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUudmFsdWUgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmdldEZvcm1hdHRlZERhdGUodmFsdWUudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgKHZhbHVlLnZhbHVlIHx8IFtdKS5mb3JFYWNoKCh4OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogeC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUmVjZWl2ZXMgbGF6eSBldmVudCBhbmQgcmV0dXJucyBwYWdlIG51bWJlclxuICAgKi9cbiAgZ2V0R3JpZFBhZ2luYXRpb24oZXZlbnQ6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGlzTmFOKGV2ZW50LmZpcnN0IC8gZXZlbnQucm93cykgPyAxIDogZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzICsgMTtcbiAgfVxuXG4gIC8vIGdldCBmb3JtYXR0ZWQgZGF0ZVxuICBnZXRGb3JtYXR0ZWREYXRlKHZhbHVlOiBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbmV3IERhdGUoYCR7dmFsdWV9IFpgKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTtcbiAgfVxuXG4gICAvLyBjaGFuZ2Ugcm93IGtleSBhbmQgdmFsdWUgd2hlbiB1c2luZyBzZXRHcmlkUm93UHJvcFZhbHVlIGZ1bmN0aW9uXG4gICBzZXRSb3dWYWx1ZShyb3dEYXRhOiBhbnkpIHtcbiAgICBPYmplY3Qua2V5cyhyb3dEYXRhKT8uZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBjb25zdCByb3dPYmogPSByb3crJ19vYmonO1xuICAgICAgaWYocm93ID09PSBFR3JpZFJvd0FjdGlvbi5ERUxFVEVCVE4gfHwgcm93ID09PSBFR3JpZFJvd0FjdGlvbi5FRElUQlROKXtcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbcm93XTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICByb3dEYXRhW3Jvd09ial0gJiZcbiAgICAgICAgdHlwZW9mKHJvd0RhdGFbcm93T2JqXSkgPT09ICdvYmplY3QnXG4gICAgICApIHtcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbcm93T2JqXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcm93RGF0YTtcbiAgfVxuXG4gIC8vIGNvbnZlcnQgcm93IGFjdGlvbnMgb2JqZWN0IGludG8gc2ltcGxlIHZhbHVlXG4gIHNldEdyaWRSb3dEYXRhKHJvd0RhdGEpe1xuICAgIGlmKEFycmF5LmlzQXJyYXkocm93RGF0YSkpe1xuICAgICAgcm93RGF0YS5mb3JFYWNoKChyb3cpPT57XG4gICAgICAgIHJvdyA9IHRoaXMuc2V0Um93VmFsdWUocm93KTtcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvd0RhdGEgPSB0aGlzLnNldFJvd1ZhbHVlKHJvd0RhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gcm93RGF0YTtcbiAgfVxuXG4gIC8vIGdldCBhbGxvd1NhdmUgdHJ1ZSByb3cgbGlzdFxuICBnZXRBbGxvd1NhdmVSb3dsaXN0KHJvd3NEYXRhOiBhbnlbXSA9IFtdLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKSB7XG4gICAgcm93c0RhdGEgPSB0aGlzLnNldERhdGFGaWVsZHMocm93c0RhdGEpO1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBJR3JpZENvbHVtbikgPT4ge1xuICAgICAgbGV0IGZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdyk9PntcbiAgICAgICAgcm93ID0gdGhpcy5yZW1vdmVSb3dPYmoocm93LCBmaWVsZCwgY29sdW1ucyk7XG4gICAgICB9KVxuICAgICAgaWYgKGNvbHVtbi5hbGxvd1NhdmUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGxldCBvYmogPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgICAgIGlmIChvYmo/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG9iai5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh4LmluY2x1ZGVzKCdfb2JqJykgJiYgdHlwZW9mIHJvd1t4XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgcm93W3hdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgcm93W2ZpZWxkXTtcbiAgICAgICAgICByb3cgPSB0aGlzLnNldFJvd1ZhbHVlKHJvdyk7XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgIHJvd3NEYXRhLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgIGxldCB2YWx1ZSA9IHJvd1tmaWVsZF1cbiAgICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQ0hBUikge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICdZJyA6ICdOJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLk5VTUVSSUMpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnMScgOiAnMCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5CT09MRUFOKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcbiAgICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0ocm93W2ZpZWxkXSwgJ2hoOm1tIGEnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNob3dUaW1lKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0ocm93W2ZpZWxkXSwgJ3l5eXktTU0tZGQgSEg6bW06c3MnKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJvd1tmaWVsZF0gJiYgIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gcm93W2ZpZWxkXS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gcm93c0RhdGE7XG4gIH1cblxuICAvLyBnZXQgYWxsb3dTYXZlIHRydWUgfHwgdW5kZWZpbmUgcm93XG4gIGdldEFsbG93U2F2ZVJvdyhyb3dJbmZvOiB7fSA9IHt9LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKSB7XG4gICAgbGV0IHJvdyA9IHsgLi4ucm93SW5mbyB9O1xuICAgIHJvdyA9IHV0aWxpdGllcy5vYmpDb252ZXJ0VG9Mb3dlcihyb3cpO1xuICAgIHJvdyA9IHRoaXMuc2V0Um93VmFsdWUocm93KTtcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgbGV0IGZpZWxkID0gY29sdW1uPy5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgIHJvdyA9IHRoaXMucmVtb3ZlUm93T2JqKHJvdywgZmllbGQsIGNvbHVtbnMpO1xuICAgICAgaWYgKGNvbHVtbi5hbGxvd1NhdmUgPT0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdylcbiAgICAgICAga2V5cy5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgaWYgKHguaW5jbHVkZXMoJ19vYmonKSAmJiB0eXBlb2Ygcm93W3hdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZGVsZXRlIHJvd1t4XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGtleSA9IGtleXMuZmluZCgoeCkgPT4geC50b0xvd2VyQ2FzZSgpID09PSBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgJiYgY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IHJvd1tmaWVsZF1cbiAgICAgICAgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkNIQVIpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJ1knIDogJ04nO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLk5VTUVSSUMpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJzEnIDogJzAnO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkJPT0xFQU4pIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAvL2NvbnZlcnQgZGF0ZSBpbnRvIHRpbWUgZm9ybWF0XG4gICAgICAgIGlmIChjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAnaGg6bW0gYScpO1xuICAgICAgICB9IGVsc2UgaWYgKCFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNob3dUaW1lKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICd5eXl5LU1NLWRkIEhIOm1tOnNzJyk7XG4gICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gcm93W2ZpZWxkXS50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIC8vIHJlbW92ZSBvYmosIGRhdGEgYW5kIHNlY29uZHR5cGUgZGF0YSBmcm9tIHJvd1xuICByZW1vdmVSb3dPYmoocm93LCBmaWVsZCwgY29sdW1uczogSUdyaWRDb2x1bW5bXSl7XG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgIGlmKGtleXM/Lmxlbmd0aCA+IDApe1xuICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgIGlmKGtleSA9PT0gZmllbGQgKyAnLWRhdGEnIHx8IGtleSA9PT0gZmllbGQgKyAnX3NlY29uZFR5cGUnIHx8IGtleSA9PT0gZmllbGQgKyAnX29iaicpe1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcm93ID0gdGhpcy5yZW1vdmVFeHRyYU5ld1Jvd09iaihyb3csIGNvbHVtbnMpXG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIHJlbW92ZUV4dHJhTmV3Um93T2JqKHJvdywgY29sdW1uczogSUdyaWRDb2x1bW5bXSl7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgaWYoY29sdW1ucz8ubGVuZ3RoID4gMCAmJiBrZXlzPy5sZW5ndGggPiAwKXtcbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICBjb25zdCBtYXRjaEtleSA9IGNvbHVtbnMuc29tZSgoY29sdW1uKT0+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpKVxuICAgICAgICBpZighbWF0Y2hLZXkpe1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRDb2x1bW4oY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICAgIDogJ2xhYmVsJztcbiAgICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgICA6ICd2YWx1ZSc7XG4gICAgfSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cpIHtcbiAgICAgIGlmICghY29sdW1uSW5mby5maWx0ZXJpbmcgJiYgIWNvbHVtbkluZm8uZmlsdGVyKSB7XG4gICAgICAgIGNvbHVtbkluZm8uZmlsdGVyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY29sdW1uSW5mby5wYXJhbXMgJiYgIWNvbHVtbkluZm8uZGF0YSkge1xuICAgICAgICBjb2x1bW5JbmZvLmRhdGEgPSBjb2x1bW5JbmZvLnBhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29sdW1uOiBJR3JpZENvbHVtbiA9IHtcbiAgICAgIGFsbG93VG9nZ2xlOiBjb2x1bW5JbmZvLmFsbG93VG9nZ2xlIHx8IGZhbHNlLFxuICAgICAgYWxsb3dTZWFyY2g6IGNvbHVtbkluZm8uYWxsb3dTZWFyY2gsXG4gICAgICBhbGxvd0F1dG9Db21wbGV0ZVNhdmU6IGNvbHVtbkluZm8uYWxsb3dBdXRvQ29tcGxldGVTYXZlLFxuICAgICAgdW5pcXVlS2V5OiBjb2x1bW5JbmZvLnVuaXF1ZUtleSxcbiAgICAgIGZpZWxkOiBjb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBjb2x1bW5JbmZvLmhlYWRlcixcbiAgICAgIHN0eWxlOiBjb2x1bW5JbmZvLnN0eWxlLFxuICAgICAgdHlwZTogY29sdW1uSW5mby50eXBlLFxuICAgICAgZm9ybWF0OiBjb2x1bW5JbmZvLmZvcm1hdCxcbiAgICAgIGRhdGE6IGNvbHVtbkluZm8uZGF0YSxcbiAgICAgIGZpbHRlclZhbHVlOmNvbHVtbkluZm8uZmlsdGVyVmFsdWUsXG4gICAgICBmaWx0ZXJpbmc6IGNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgaGlkZGVuOiBjb2x1bW5JbmZvLmhpZGRlbixcbiAgICAgIHNob3c6IGNvbHVtbkluZm8uc2hvdyxcbiAgICAgIHNvcnRpbmc6IGNvbHVtbkluZm8uc29ydGluZyxcbiAgICAgIGZpbHRlcjogY29sdW1uSW5mby5maWx0ZXIsXG4gICAgICBoeXBlcmxpbms6IGNvbHVtbkluZm8uaHlwZXJsaW5rLFxuICAgICAgdGFibGVBbGlhczogY29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgbGlua0lkOiBjb2x1bW5JbmZvLmxpbmtJZCxcbiAgICAgIG1pbnV0ZXNJbnRlcnZhbDogY29sdW1uSW5mby5taW51dGVzSW50ZXJ2YWwsXG4gICAgICBwYXJhbXM6IGNvbHVtbkluZm8ucGFyYW1zLFxuICAgICAgc2hvd09wdGlvbjogY29sdW1uSW5mby5zaG93T3B0aW9uLFxuICAgICAgZGlzcGxheVRleHQ6IGNvbHVtbkluZm8uZGlzcGxheVRleHQsXG4gICAgICB0YXJnZXQ6IGNvbHVtbkluZm8udGFyZ2V0LFxuICAgICAgZGlzYWJsZWQ6IGNvbHVtbkluZm8uZGlzYWJsZWQsXG4gICAgICBhbGxvd1NhdmU6IGNvbHVtbkluZm8uYWxsb3dTYXZlLFxuICAgICAgYWxsb3dFZGl0OiBjb2x1bW5JbmZvLmFsbG93RWRpdCxcbiAgICAgIGVkaXRhYmxlOiBjb2x1bW5JbmZvLmVkaXRhYmxlLFxuICAgICAgZWRpdExpbms6IGNvbHVtbkluZm8uZWRpdExpbmssXG4gICAgICBzYXZlQXNTdHJpbmc6IGNvbHVtbkluZm8uc2F2ZUFzU3RyaW5nLFxuICAgICAgY29tcG9uZW50OiBjb2x1bW5JbmZvLmNvbXBvbmVudCxcbiAgICAgIG9uQ2xpY2s6IGNvbHVtbkluZm8ub25DbGljayxcbiAgICAgIG9uUmV0dXJuOiBjb2x1bW5JbmZvLm9uUmV0dXJuLFxuICAgICAgb25Gb2N1c091dDogY29sdW1uSW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25DaGFuZ2U6IGNvbHVtbkluZm8ub25DaGFuZ2UsXG4gICAgICBhZ2dyZWdhdGU6IGNvbHVtbkluZm8uYWdncmVnYXRlLFxuICAgICAgZm9ybWF0dGVyOiBjb2x1bW5JbmZvLmZvcm1hdHRlcixcbiAgICAgIHBlcm1pc3Npb25zOiBjb2x1bW5JbmZvLnBlcm1pc3Npb25zLFxuICAgICAgb3B0aW9uTGFiZWw6IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogY29sdW1uSW5mby5vcHRpb25WYWx1ZSxcbiAgICAgIGRyb3BEb3duUHJvcDogY29sdW1uSW5mby5kcm9wRG93blByb3AsXG4gICAgICBob3ZlckRhdGE6IGNvbHVtbkluZm8uaG92ZXJEYXRhLFxuICAgICAgc2hvd1RpbWU6IGNvbHVtbkluZm8uc2hvd1RpbWUsXG4gICAgICB0aW1lT25seTogY29sdW1uSW5mby50aW1lT25seSxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGNvbHVtbkluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGRpc3BsYXlGaWVsZDogY29sdW1uSW5mby5kaXNwbGF5RmllbGQsXG4gICAgICBpY29uOiBjb2x1bW5JbmZvLmljb24sXG4gICAgICBjb2xvcjogY29sdW1uSW5mby5jb2xvcixcbiAgICAgIGlkOiBjb2x1bW5JbmZvLmlkLFxuICAgICAgdmFsdWU6IGNvbHVtbkluZm8udmFsdWUsXG4gICAgICB2YWxpZGF0aW9uczogY29sdW1uSW5mby52YWxpZGF0aW9ucyxcbiAgICAgIHRleHRUeXBlOmNvbHVtbkluZm8udGV4dFR5cGVcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIEFkZGluZyBSZXBvcnQgQnV0dG9uIEZ1bmN0aW9uIGZvciBHcmlkXG4gIGFkZFJlcG9ydEJ0bihjb2x1bW5JbmZvOiBJR3JpZFJlcG9ydEJ0bikge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5SRVBPUlQ7XG4gICAgcmV0dXJuIGNvbHVtbkluZm87XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGlucHV0IGdyaWQgY29sdW1uXG4gIGFkZElucHV0Q29sdW1uKFxuICAgIGZpbHRlckNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGZpbHRlckNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oZmlsdGVyQ29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oZmlsdGVyQ29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIG51bWVyaWMgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGROdW1lcmljQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ0lOUFVULFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUM7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBjYWxlbmRhciBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZENhbGVuZGFyQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICAgICk6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IGNvbHVtbkluZm8/LmZpbHRlcj8udHlwZSA/IGNvbHVtbkluZm8uZmlsdGVyLnR5cGUgOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVIsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBjb2x1bW5JbmZvLnR5cGUgPyBjb2x1bW5JbmZvLnR5cGUgOiBFR3JpZENvbHVtblR5cGUuREFURTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuICBzZXRDb25maWdEYXRhKGNvbmZpZzogYW55KSB7XG4gICAgbGV0IGNvbmZpZ0RhdGE6IGFueSA9IHt9O1xuICAgIGlmIChjb25maWc/LmRhdGEgJiYgT2JqZWN0LmtleXMoY29uZmlnPy5kYXRhKT8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uZmlnRGF0YSA9IGNvbmZpZztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHBhcmFtICYmIE9iamVjdC5rZXlzKHBhcmFtKT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ2RhdGEnXSA9IHBhcmFtO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnRGF0YTtcbiAgfVxuICAgICBcblxuICAvLyBhZGQgc2ltcGxlIGJvb2xlYW4gZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRCb29sZWFuQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIChjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiksXG4gICAgICAgIChjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1gsXG4gICAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gLy8gYWRkIExvb2tVcCBjb2x1bW4gZm9yIEdyaWRcbiBhZGRMb29rVXBDb2x1bW4oY29sdW1uSW5mbzogSURpYWxvZ0NvbHVtbiwgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUpOiBJR3JpZENvbHVtbiB7XG4gIGlmIChzaG93RmlsdGVyKSB7XG4gICAgY29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQsIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbykgfTtcbiAgfVxuICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUO1xuICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG59XG5cbi8vIGFkZCBkaWFsb2cgY29sdW1uIGZvciBHcmlkXG4gYWRkRGlhbG9nQ29sdW1uKGNvbHVtbkluZm86IElEaWFsb2dDb2x1bW4sIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlKTogSUdyaWRDb2x1bW4ge1xuICBpZiAoc2hvd0ZpbHRlcikge1xuICAgIGNvbHVtbkluZm8uZmlsdGVyID0geyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQsIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbykgfTtcbiAgfVxuICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuRElBTE9HO1xuICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gfVxuXG4gIC8vIGFkZCBCdXR0b24gZm9yIGdyaWQgY29sdW1uXG4gIGFkZEJ1dHRvbkNvbHVtbihjb2x1bW5JbmZvOiBhZGRDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkFERF9CVVRUT047XG4gICAgaWYgKCFjb2x1bW5JbmZvLmZpZWxkKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpZWxkID0gY29sdW1uSW5mby52YWx1ZSA/IGNvbHVtbkluZm8udmFsdWUgOiBjb2x1bW5JbmZvLmljb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuICBcbiAgLy8gYWRkIEF1dG9Db21wbGV0ZSBmb3IgZ3JpZCBjb2x1bW5cbiAgYWRkQXV0b0NvbXBsZXRlKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIC8vIFNlYXJjaCBBdXRvQ29tcGxldGUgRGF0YSBmb3IgR3JpZFxuICBnZXRBdXRvQ29tcGxldGVEYXRhKFxuICAgIGNvbHVtbj86IGFueSxcbiAgICB1bmlxdWVLZXk/OiBzdHJpbmcsXG4gICAgZmlsdGVycz86IGFueVtdLFxuICAgIHNlYXJjaDogc3RyaW5nID0gJydcbiAgKTogYW55IHtcbiAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlXG4gICAgICAuZ2V0PGFueVtdLCBhbnk+KCcvRGF0YS9GZXRjaCcsIHsgdW5pcXVlS2V5OiB1bmlxdWVLZXksIGZpbHRlcnMgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29sdW1uLmRhdGEgPSB0aGlzLnNldERhdGFGaWVsZHMocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICB9LCh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlOmFueT0ge307XG4gICAgICAgIHJlc3BvbnNlWydyZWNvcmRzJ10gPSBbXTtcbiAgICAgICAgY29sdW1uLmRhdGEgPSB0aGlzLnNldERhdGFGaWVsZHMocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICB9KTtcbiAgfVxuIGFzeW5jIGFkZEF1dG9Db21wbGV0ZVZhbHVlKHVuaXF1ZUtleTogSUF1dG9Db21wbGV0ZVNhdmUsIHZhbHVlOmFueSwgY29sdW1uOmFueSwgcm93OmFueSkge1xuICBsZXQgbmV3VmFsdWUgPSB7fVxuXG4gIGZvcih2YXIgaSA9MDtpPHVuaXF1ZUtleS52YWx1ZXMubGVuZ3RoOyBpKyspe1xuICAgIGlmKHVuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpPT1jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCl8fHVuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpPT1jb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpKXtcbiAgICAgIG5ld1ZhbHVlW3VuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZV09dmFsdWU7XG4gICAgXG4gICAgfWVsc2V7XG4gICAgICBuZXdWYWx1ZVt1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWVdPXRoaXMuZ2V0U29mdENvZGluZ1ZhbHVlKHVuaXF1ZUtleS52YWx1ZXNbaV0udmFsdWUsIHJvdylcbiAgICB9IFxuICB9XG5cblxuICAgIHRoaXMucmVxdWVzdFNlcnZpY2VcbiAgICAgIC5nZXQ8YW55W10sIGFueT4oJy9EYXRhL1NhdmUnLCB7IHVuaXF1ZUtleTp1bmlxdWVLZXkubmFtZSwgIHZhbHVlczogbmV3VmFsdWUgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgKHtlcnJvcn0pPT57XG4gICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdzdWNjZXNzJztcbiAgICAgIH0pO1xuICB9XG4gIGdldFNvZnRDb2RpbmdWYWx1ZSh2YWx1ZSwgcm93KXtcbiAgICBsZXQgcmV0dXJuVmFsdWU7XG4gICAgaWYodmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygneycpJiZ2YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd9Jykpe1xuICAgICAgdmFsdWU9dmFsdWUucmVwbGFjZShcIntcIixcIlwiKS5yZXBsYWNlKFwifVwiLFwiXCIpO1xuICAgICAgbGV0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgbGV0IGtleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIHJldHVyblZhbHVlPXJvd1trZXldO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuVmFsdWU9dmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBkcm9wZG93biBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZERyb3Bkb3duQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSxcbiAgICBkcm9wRG93blByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuRFJPUERPV047XG4gICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgOiAnbGFiZWwnO1xuICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgIDogJ3ZhbHVlJztcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EUk9QRE9XTixcbiAgICAgICAgZGF0YTpcbiAgICAgICAgICAhY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhICYmICFkcm9wRG93blByb3AgJiYgY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgOiBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGRyb3BEb3duUHJvcCkge1xuICAgICAgY29sdW1uSW5mby5kcm9wRG93blByb3AgPSBkcm9wRG93blByb3A7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBkcm9wRG93blByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBjb2x1bW5JbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICAgIH1cbiAgfVxuICAvLyBhZGQgTXVsdGlTZWxlY3REcm9wRG93biBncmlkIGNvbHVtblxuICBhZGRNdWx0aVNlbGVjdERyb3BEb3duQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSxcbiAgICBtdWx0aVNlbGVjdFByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA6ICdsYWJlbCc7XG4gICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgOiAndmFsdWUnO1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVDtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVCxcbiAgICAgICAgZGF0YTpcbiAgICAgICAgICAhY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhICYmICFtdWx0aVNlbGVjdFByb3AgJiYgY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgOiBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG11bHRpU2VsZWN0UHJvcCkge1xuICAgICAgY29sdW1uSW5mby5kcm9wRG93blByb3AgPSBtdWx0aVNlbGVjdFByb3A7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gbXVsdGlTZWxlY3RQcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBtdWx0aVNlbGVjdFByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IG11bHRpU2VsZWN0UHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IG11bHRpU2VsZWN0UHJvcC5maWx0ZXJzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBjb2x1bW5JbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm86IGFkZENvbHVtbikge1xuICAgIGlmIChjb2x1bW5JbmZvLmZpbHRlciAmJiBjb2x1bW5JbmZvLmZpbHRlci5zaG93RmlsdGVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHNldERyb3Bkb3duRGF0YShcbiAgICBjb2x1bW46IElHcmlkQ29sdW1uLFxuICAgIHVuaXF1ZUtleTogc3RyaW5nLFxuICAgIHZhbHVlUHJvcDogc3RyaW5nLFxuICAgIGxhYmVsUHJvcDogc3RyaW5nLFxuICAgIGZpbHRlcnM6IGFueVtdLFxuICAgIHJvdz86IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgKTogUHJvbWlzZTxhbnk+IHwgYW55IHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93blNlcnZpY2VcbiAgICAgIC5zZXREcm9wRG93bkxpc3QodW5pcXVlS2V5LCB2YWx1ZVByb3AsIGxhYmVsUHJvcCwgZmlsdGVycylcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfZGF0YSddID0gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHVtbi5kYXRhID0gcmVzO1xuICAgICAgICAgIGlmIChjb2x1bW4uZmlsdGVyICYmIChjb2x1bW4uZmlsdGVyLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sdW1uLmZpbHRlci50eXBlID09PSAnbXVsdGktc2VsZWN0JykpIHtcbiAgICAgICAgICAgIGNvbHVtbi5maWx0ZXIuZGF0YSA9IHJlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbik7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIGNvbHVtbiB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGRGaWx0ZXJDb2x1bW4oZmlsdGVyQ29sdW1uSW5mbzogYWRkRmlsdGVyQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbnN0IGNvbHVtbjogYW55ID0ge1xuICAgICAgZmllbGQ6IGZpbHRlckNvbHVtbkluZm8uZmllbGQsXG4gICAgICBoZWFkZXI6IGZpbHRlckNvbHVtbkluZm8uaGVhZGVyLFxuICAgICAgZmlsdGVyOiB7IHR5cGU6IGZpbHRlckNvbHVtbkluZm8uZmlsdGVyIH0sXG4gICAgICBmaWx0ZXJpbmc6IGZpbHRlckNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgaGlkZGVuOiBmaWx0ZXJDb2x1bW5JbmZvLmhpZGRlbixcbiAgICAgIHN0eWxlOiBmaWx0ZXJDb2x1bW5JbmZvLnN0eWxlLFxuICAgICAgdGFibGVBbGlhczogZmlsdGVyQ29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgcGVybWlzc2lvbnM6IGZpbHRlckNvbHVtbkluZm8ucGVybWlzc2lvbnMsXG4gICAgfTtcblxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBhZGQgZGF0ZSBncmlkIGNvbHVtbiB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGREYXRlQ29sdW1uKGRhdGVDb2x1bW5JbmZvOiBhZGRGaWx0ZXJDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29uc3QgY29sdW1uOiBJR3JpZENvbHVtbiA9IHtcbiAgICAgIGZpZWxkOiBkYXRlQ29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogZGF0ZUNvbHVtbkluZm8uaGVhZGVyLFxuICAgICAgdHlwZTogZGF0ZUNvbHVtbkluZm8udHlwZSA/IGRhdGVDb2x1bW5JbmZvLnR5cGUgOiBFR3JpZENvbHVtblR5cGUuREFURSxcbiAgICAgIGZpbHRlcmluZzogZGF0ZUNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgZmlsdGVyOiB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUiB9LFxuICAgICAgZm9ybWF0OiBkYXRlQ29sdW1uSW5mby5mb3JtYXQsXG4gICAgICBzdHlsZTogZGF0ZUNvbHVtbkluZm8uc3R5bGUsXG4gICAgICB0YWJsZUFsaWFzOiBkYXRlQ29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgZGlzYWJsZWQ6IGRhdGVDb2x1bW5JbmZvLmRpc2FibGVkLFxuICAgICAgYWxsb3dTYXZlOiBkYXRlQ29sdW1uSW5mby5hbGxvd1NhdmUsXG4gICAgICBwZXJtaXNzaW9uczogZGF0ZUNvbHVtbkluZm8ucGVybWlzc2lvbnMsXG4gICAgICBjb21wb25lbnQ6IGRhdGVDb2x1bW5JbmZvLmNvbXBvbmVudCxcbiAgICAgIHNob3dUaW1lOiBkYXRlQ29sdW1uSW5mby5zaG93VGltZSxcbiAgICAgIHRpbWVPbmx5OiBkYXRlQ29sdW1uSW5mby50aW1lT25seSxcbiAgICAgIGRhdGE6IGRhdGVDb2x1bW5JbmZvLmRhdGEsXG4gICAgICBoaWRkZW46IGRhdGVDb2x1bW5JbmZvLmhpZGRlbixcbiAgICB9O1xuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICBzZXRMb29rVXBGaWx0ZXIoY29sdW1uOiBhbnksIGRpYWxvZ1NlcnZpY2U6IGFueSwgZ2xvYmFsRmlsdGVyTG9va3VwOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoY29sdW1uLmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIGxldCBkYXRhVmFsdWU6IGFueVtdID0gW107XG4gICAgICBsZXQgZGF0YUtleTogYW55W10gPSBbXTtcbiAgICAgIGxldCBkYXRhID0gY29sdW1uLmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGE7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICBpZiAoZGF0YSAmJiBrZXlzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGFba2V5XS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykpIHtcbiAgICAgICAgICAgIGRhdGFWYWx1ZS51bnNoaWZ0KGRhdGFba2V5XSk7XG4gICAgICAgICAgICBkYXRhS2V5LnVuc2hpZnQoa2V5KTtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWYgPSBkaWFsb2dTZXJ2aWNlLm9wZW4oXG4gICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLmNvbXBvbmVudCxcbiAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wuZGF0YVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IGRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29tcG9uZW50UmVmTWFwLmdldChyZWYpO1xuICAgICAgY29uc3QgZHluYW1pY0NvbXBvbmVudCA9IGRpYWxvZ1JlZj8uaW5zdGFuY2UgYXMgRHluYW1pY0RpYWxvZ0NvbXBvbmVudDtcbiAgICAgIGNvbnN0IGFyaWFMYWJlbGxlZEJ5ID0gZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSgpO1xuICAgICAgZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSA9ICgpID0+IGFyaWFMYWJlbGxlZEJ5O1xuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRhdGFLZXk/Lmxlbmd0aCA+IDAgJiYgZGF0YVZhbHVlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkYXRhS2V5LmZvckVhY2goKGtleSwga2V5SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgZGF0YVZhbHVlLmZvckVhY2goKHZhbHVlLCB2YWx1ZUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGtleUluZGV4ID09PSB2YWx1ZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfZmlsdGVyJyk/LmZvY3VzKCk7XG4gICAgICAgICAgICBsZXQgZmllbGQgPSBjb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB1dGlsaXRpZXMuc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgY29sdW1uPy5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgICByZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZ2xvYmFsRmlsdGVyTG9va3VwKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4udmFsdWVUd28gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb2x1bW4udmFsdWUgPSB2YWx1ZT8udmFsdWVcbiAgICAgICAgICAgICAgICA/IHZhbHVlLnZhbHVlXG4gICAgICAgICAgICAgICAgOiByZXNbZmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgIGNvbnN0IGdsb2JhbEZpbHRlckxvb2t1cElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkKTtcbiAgICAgICAgICAgICAgZ2xvYmFsRmlsdGVyTG9va3VwSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IHZhbHVlPy52YWx1ZVxuICAgICAgICAgICAgICAgID8gdmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICA6IHJlc1tmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICh7IGVycm9yIH06IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgSHlwZXJsaW5rIGZpZWxkIGFzIGEgcGFyYW0gVmFsdWVcbiAgc2V0RmllbGRBc0xpbmtQYXJhbShjb2x1bW5zOiBhbnksIGZpZWxkOiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBjb2x1bW5zICYmXG4gICAgICBjb2x1bW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgIGZpZWxkICYmXG4gICAgICByZXNwb25zZS5yZWNvcmRzICYmXG4gICAgICByZXNwb25zZS5yZWNvcmRzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKS5mb3JFYWNoKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4OiBhbnkpID0+IHguZmllbGQgPT09IGZpZWxkKTtcbiAgICAgICAgaWYgKG9iaiAmJiBvYmoucGFyYW1zKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iai5wYXJhbXMpO1xuICAgICAgICAgIGtleXMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChvYmoucGFyYW1zW2tleV0gJiYgb2JqLnBhcmFtc1trZXldLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSkge1xuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBvYmoucGFyYW1zW2tleV1cbiAgICAgICAgICAgICAgICAucmVwbGFjZSgneycsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd9JywgJycpXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIG9iai5wYXJhbXNba2V5XSA9IHJlc1t2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhc0FueUxpbmtDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjb2x1bW5zICYmXG4gICAgICBjb2x1bW5zLnNvbWUoXG4gICAgICAgICh4KSA9PlxuICAgICAgICAgIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICAgIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuSUZSQU1FIHx8XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHxcbiAgICAgICAgICAoeC5saW5rSWQgJiYgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHNldEh5cGVybGlua3MoZmV0Y2hSZXNwb25zZTogYW55LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdLCBsaW5rUGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgbGV0IHJlY29yZHM6IGFueSA9IFtdO1xuICAgIGxldCBkYXRhID1cbiAgICAgIGZldGNoUmVzcG9uc2UgJiYgZmV0Y2hSZXNwb25zZS5yZWNvcmRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLnNldERhdGFGaWVsZHMoZmV0Y2hSZXNwb25zZS5yZWNvcmRzKVxuICAgICAgICA6IFtdO1xuICAgIGxldCBuZXdSb3c6IGFueTtcblxuICAgIGlmKGRhdGE/Lmxlbmd0aCA+IDApe1xuICAgICAgcmV0dXJuIHRoaXMuaHlwZXJsaW5rU2VydmljZVxuICAgICAgLmFkZEh5cGVybGlua3MoY29sdW1ucywgZmV0Y2hSZXNwb25zZT8ucmVjb3JkcylcbiAgICAgIC50aGVuKChsaW5rUmVzcG9uc2VzOiBhbnkpID0+IHtcbiAgICAgICAgZGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgIG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0TGlua0lkID0gZmV0Y2hSZXNwb25zZT8ucmVjb3Jkc1swXVtjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5saW5rSWQ7XG4gICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICAgICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cpIHtcbiAgICAgICAgICAgICAgY29sLmZpZWxkID0gY29sLmZpZWxkID8gY29sLmZpZWxkIDogY29sLmhlYWRlcjtcbiAgICAgICAgICAgICAgbGV0IGZpZWxkID0gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdID0geyAuLi5jb2wgfTtcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaXNwbGF5VGV4dCA9IGNvbC5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICYmIHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV0gPyByb3dbY29sLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgICAgOiBjb2wuZGlzcGxheVRleHQ7XG4gICAgICAgICAgICAgIGxldCBjb2x1bW5EYXRhID0geyAuLi5jb2w/LmRhdGEgfTtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbkRhdGEgJiYgY29sdW1uRGF0YS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaWFsb2dEYXRhID0gdXRpbGl0aWVzLmZpbmRLZXlzQW5kVmFsdWUoXG4gICAgICAgICAgICAgICAgICBjb2x1bW5EYXRhLmRhdGEsXG4gICAgICAgICAgICAgICAgICByb3dcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaW5rUmVzcG9uc2VzKSAmJiBsaW5rUmVzcG9uc2VzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGxpbmtSZXNwb25zZXMuZm9yRWFjaCgobGlua1Jlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XG4gICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuSUZSQU1FIHx8XG4gICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUKSAmJlxuICAgICAgICAgICAgICAgICAgY29sLmxpbmtJZCAmJlxuICAgICAgICAgICAgICAgICAgKGNvbC5saW5rSWQgPT09IGxpbmtSZXNwb25zZS5saW5rSWQgfHxcbiAgICAgICAgICAgICAgICAgICAgc2V0TGlua0lkID09PSBsaW5rUmVzcG9uc2UubGlua0lkKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IGxpbmtQYXJhbXMgJiYgT2JqZWN0LmtleXMobGlua1BhcmFtcyk/Lmxlbmd0aCA/IE9iamVjdC5rZXlzKGxpbmtQYXJhbXMpIDogY29sLnBhcmFtcyA/IE9iamVjdC5rZXlzKGNvbC5wYXJhbXMpIDogW107XG4gICAgICAgICAgICAgICAgICBjb25zdCBsaW5rOiBhbnkgPSB1dGlsaXRpZXMuc2V0SHlwZXJsaW5rKFxuICAgICAgICAgICAgICAgICAgICBrZXlzLFxuICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgIGxpbmtSZXNwb25zZS51cmwsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgICAgICAgICAgICAgY29sLnBhcmFtc1xuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXSA9IHsgLi4uY29sIH07XG4gICAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdLmh5cGVybGluayA9IGxpbms7XG4gICAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdLmRpc3BsYXlUZXh0ID0gY29sLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgID8gcm93W2NvbC5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgICAgICAgICA6IHJvd1tjb2wuZmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZWNvcmRzLnB1c2gobmV3Um93KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZWNvcmRzO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgfSlcbiAgICB9XG4gICAgXG4gIH1cblxuICAvL3NldCByb3dzIHRvIHJlc3BvbnNlLnJlY29yZHNcbiAgYXN5bmMgc2V0Um93RGF0YShjb2x1bW5zOiBJR3JpZENvbHVtbltdLCByZXNwb25zZTogYW55KSB7XG4gICAgaWYocmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwKXtcbiAgICAgIGlmICh0aGlzLmhhc0FueUxpbmtDb2x1bW4oY29sdW1ucykpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0SHlwZXJsaW5rcyhyZXNwb25zZSwgY29sdW1ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVjb3JkcztcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSByZXR1cm4gW11cbiAgfVxuICAgXG5cbiAgLy8gYWRkIGdyaWQgZ2xvYmFsIGZpbHRlciB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgY29uc3QgY29sdW1uOiBJR3JpZFVwZGF0ZSA9IHtcbiAgICAgIGZpZWxkOiBncmlkVXBkYXRlSW5mby5maWVsZCxcbiAgICAgIGRpc3BsYXlUZXh0OiBncmlkVXBkYXRlSW5mby5kaXNwbGF5VGV4dCxcbiAgICAgIHR5cGU6IGdyaWRVcGRhdGVJbmZvLnR5cGUsXG4gICAgICBkYXRhOiBncmlkVXBkYXRlSW5mby5kYXRhLFxuICAgICAgdmFsdWU6IGdyaWRVcGRhdGVJbmZvLnZhbHVlLFxuICAgICAgdmFsdWVUd286IGdyaWRVcGRhdGVJbmZvLnZhbHVlVHdvLFxuICAgICAgbWF0Y2hNb2RlOiBncmlkVXBkYXRlSW5mby5tYXRjaE1vZGUsXG4gICAgICBvcGVyYXRvcjogZ3JpZFVwZGF0ZUluZm8ub3BlcmF0b3IsXG4gICAgICB0YWJsZUFsaWFzOiBncmlkVXBkYXRlSW5mby50YWJsZUFsaWFzLFxuICAgICAgb3B0aW9uTGFiZWw6IGdyaWRVcGRhdGVJbmZvLm9wdGlvbkxhYmVsLFxuICAgICAgb3B0aW9uVmFsdWU6IGdyaWRVcGRhdGVJbmZvLm9wdGlvblZhbHVlLFxuICAgICAgb25Gb2N1c091dDogZ3JpZFVwZGF0ZUluZm8ub25Gb2N1c091dCxcbiAgICAgIG9uUmV0dXJuOiBncmlkVXBkYXRlSW5mby5vblJldHVybixcbiAgICAgIGZpbHRlcmluZzogZ3JpZFVwZGF0ZUluZm8uZmlsdGVyaW5nLFxuICAgICAgY29sdW1uOiBncmlkVXBkYXRlSW5mby5jb2x1bW4sXG4gICAgICBkYXlSYW5nZTogZ3JpZFVwZGF0ZUluZm8uZGF5UmFuZ2UsXG4gICAgICBmcm9tRmllbGQ6IGdyaWRVcGRhdGVJbmZvLmZyb21GaWVsZCxcbiAgICAgIHRvRmllbGQ6IGdyaWRVcGRhdGVJbmZvLnRvRmllbGQsXG4gICAgICBsb29rdXBDb250cm9sOiBncmlkVXBkYXRlSW5mby5sb29rdXBDb250cm9sLFxuICAgICAgYWxsb3dTZWFyY2g6IGdyaWRVcGRhdGVJbmZvLmFsbG93U2VhcmNoLFxuICAgICAgZGlzYWJsZWQ6IGdyaWRVcGRhdGVJbmZvLmRpc2FibGVkLFxuICAgICAgaGlkZGVuOiBncmlkVXBkYXRlSW5mby5oaWRkZW4sXG4gICAgICBsYWJlbFRleHQ6IGdyaWRVcGRhdGVJbmZvLmxhYmVsVGV4dCxcbiAgICAgIHByZWZpeDogZ3JpZFVwZGF0ZUluZm8ucHJlZml4LFxuICAgICAgY29sb3I6IGdyaWRVcGRhdGVJbmZvLmNvbG9yLFxuICAgICAgZm9ybWF0OiBncmlkVXBkYXRlSW5mby5mb3JtYXQsXG4gICAgICBpbnRlcmZhY2VUeXBlOiAnYnVsa1VwZGF0ZSdcbiAgICB9O1xuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgaW5wdXQgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUlucHV0KGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBkcm9wZG93biBmaWVsZFxuICBhZGRHcmlkVXBkYXRlRHJvcGRvd24oXG4gICAgZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlLFxuICAgIGRyb3BEb3duUHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogYW55IHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRST1BET1dOO1xuICAgIGlmIChkcm9wRG93blByb3ApIHtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBkcm9wRG93blByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IGRyb3BEb3duUHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gZHJvcERvd25Qcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gZHJvcERvd25Qcm9wLmZpbHRlcnM7XG4gICAgICBsZXQgc29ydHMgPSBkcm9wRG93blByb3Auc29ydHM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGdyaWRVcGRhdGVJbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgc29ydHMsIFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgICB9XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgZHJvcGRvd24gZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUJvb2xlYW4oZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWDtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIG51bWVyaWMgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZU51bWVyaWMoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBjYWxlbmRhciBmaWVsZFxuICBhZGRHcmlkVXBkYXRlQ2FsZW5kYXIoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy9hZGQgZ3JpZCB1cGRhdGUgbG9va3VwIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVMb29rdXAoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKXtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVFxuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbylcbiAgfVxuICBcbiAgLy8gYWRkIGdyaWQgZ2xvYmFsIGZpbHRlciB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgY29uc3QgY29sdW1uOiBhZGRHbG9iYWxGaWx0ZXIgPSB7XG4gICAgICBmaWVsZDogZ2xvYmFsRmlsdGVySW5mby5maWVsZCxcbiAgICAgIGRpc3BsYXlUZXh0OiBnbG9iYWxGaWx0ZXJJbmZvLmRpc3BsYXlUZXh0LFxuICAgICAgZGlzcGxheVN0eWxlOmdsb2JhbEZpbHRlckluZm8uZGlzcGxheVN0eWxlLFxuICAgICAgdmFsaWRhdGlvbnM6IGdsb2JhbEZpbHRlckluZm8udmFsaWRhdGlvbnMsXG4gICAgICB0eXBlOiBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUsXG4gICAgICBkYXRhOiBnbG9iYWxGaWx0ZXJJbmZvLmRhdGEsXG4gICAgICB2YWx1ZTogZ2xvYmFsRmlsdGVySW5mby52YWx1ZSxcbiAgICAgIHZhbHVlVHdvOiBnbG9iYWxGaWx0ZXJJbmZvLnZhbHVlVHdvLFxuICAgICAgbWF0Y2hNb2RlOiBnbG9iYWxGaWx0ZXJJbmZvLm1hdGNoTW9kZSxcbiAgICAgIG9wZXJhdG9yOiBnbG9iYWxGaWx0ZXJJbmZvLm9wZXJhdG9yLFxuICAgICAgdGFibGVBbGlhczogZ2xvYmFsRmlsdGVySW5mby50YWJsZUFsaWFzLFxuICAgICAgb3B0aW9uTGFiZWw6IGdsb2JhbEZpbHRlckluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogZ2xvYmFsRmlsdGVySW5mby5vcHRpb25WYWx1ZSxcbiAgICAgICBvbkNsaWNrOmdsb2JhbEZpbHRlckluZm8ub25DbGljayxcbiAgICAgIG9uRm9jdXNPdXQ6IGdsb2JhbEZpbHRlckluZm8ub25Gb2N1c091dCxcbiAgICAgIG9uUmV0dXJuOiBnbG9iYWxGaWx0ZXJJbmZvLm9uUmV0dXJuLFxuICAgICAgZmlsdGVyaW5nOiBnbG9iYWxGaWx0ZXJJbmZvLmZpbHRlcmluZyxcbiAgICAgIGNvbHVtbjogZ2xvYmFsRmlsdGVySW5mby5jb2x1bW4sXG4gICAgICBkYXlSYW5nZTogZ2xvYmFsRmlsdGVySW5mby5kYXlSYW5nZSxcbiAgICAgIGZyb21GaWVsZDogZ2xvYmFsRmlsdGVySW5mby5mcm9tRmllbGQsXG4gICAgICB0b0ZpZWxkOiBnbG9iYWxGaWx0ZXJJbmZvLnRvRmllbGQsXG4gICAgICBsb29rdXBDb250cm9sOiBnbG9iYWxGaWx0ZXJJbmZvLmxvb2t1cENvbnRyb2wsXG4gICAgICBhbGxvd1NlYXJjaDogZ2xvYmFsRmlsdGVySW5mby5hbGxvd1NlYXJjaCxcbiAgICAgIGRpc2FibGVkOiBnbG9iYWxGaWx0ZXJJbmZvLmRpc2FibGVkLFxuICAgICAgaGlkZGVuOiBnbG9iYWxGaWx0ZXJJbmZvLmhpZGRlbixcbiAgICAgIGxhYmVsVGV4dDogZ2xvYmFsRmlsdGVySW5mby5sYWJlbFRleHQsXG4gICAgICBwcmVmaXg6IGdsb2JhbEZpbHRlckluZm8ucHJlZml4LFxuICAgICAgY29sb3I6IGdsb2JhbEZpbHRlckluZm8uY29sb3IsXG4gICAgICBmb3JtYXQ6IGdsb2JhbEZpbHRlckluZm8uZm9ybWF0LFxuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgaW5wdXQgZmlsdGVyXG4gIGFkZEdsb2JhbElucHV0RmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ2xvYmFsIGRyb3Bkb3duIGZpbHRlclxuICBhZGRHbG9iYWxEcm9wZG93bkZpbHRlcihcbiAgICBnbG9iYWxGaWx0ZXJJbmZvOiBJR2xvYmFsRmlsdGVyLFxuICAgIGRyb3BEb3duUHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogYW55IHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV047XG4gICAgaWYgKGRyb3BEb3duUHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IGRyb3BEb3duUHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBkcm9wRG93blByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IGRyb3BEb3duUHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ2xvYmFsRmlsdGVySW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIHNvcnRzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgICB9XG4gIH1cbiAgLy9hZGQgZ2xvYmFsIHJhZGlvIGJ1dHRvbiBmaWx0ZXJcbiAgYWRkR2xvYmFsU2VsZWN0QnV0dG9uRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5TRUxFQ1RCVVRUT047XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xuICB9XG4gIC8vIGFkZCBnbG9iYWwgTXVsdGlTZWxlY3QgZHJvcGRvd24gZmlsdGVyXG4gIGFkZEdsb2JhbE11bHRpU2VsZWN0RHJvcERvd25GaWx0ZXIoXG4gICAgZ2xvYmFsRmlsdGVySW5mbzogSUdsb2JhbEZpbHRlcixcbiAgICBtdWx0aVNlbGVjdFByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IGFueSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUO1xuICAgIGlmIChtdWx0aVNlbGVjdFByb3ApIHtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBtdWx0aVNlbGVjdFByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IG11bHRpU2VsZWN0UHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gbXVsdGlTZWxlY3RQcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gbXVsdGlTZWxlY3RQcm9wLmZpbHRlcnM7XG4gICAgICBsZXQgc29ydHMgPSBtdWx0aVNlbGVjdFByb3Auc29ydHM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGdsb2JhbEZpbHRlckluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICBzb3J0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RHJvcGRvd25EYXRhKFxuICAgIGZpZWxkSW5mbzogYW55LFxuICAgIHVuaXF1ZUtleTogc3RyaW5nLFxuICAgIHZhbHVlUHJvcDogc3RyaW5nLFxuICAgIGxhYmVsUHJvcDogc3RyaW5nLFxuICAgIGZpbHRlcnM6IGFueSxcbiAgICBzb3J0czogSUdyaWRTb3J0W10gPSBbXSwgXG4gICAgZ3JpZFVwZGF0ZUZpZWxkOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25TZXJ2aWNlXG4gICAgICAuc2V0RHJvcERvd25MaXN0KHVuaXF1ZUtleSwgdmFsdWVQcm9wLCBsYWJlbFByb3AsIGZpbHRlcnMsIHNvcnRzKVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGZpZWxkSW5mby5kYXRhID0gcmVzO1xuICAgICAgICByZXR1cm4gZ3JpZFVwZGF0ZUZpZWxkID8gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZmllbGRJbmZvKSA6IHRoaXMuYWRkR2xvYmFsRmlsdGVyKGZpZWxkSW5mbyk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiBncmlkVXBkYXRlRmllbGQgPyB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChmaWVsZEluZm8pIDogdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZmllbGRJbmZvKTtcbiAgICAgIH0pO1xuICB9XG4gIFxuICAvLyBhZGQgZ2xvYmFsIGZpbHRlciBTcGFjZSBGaWVsZFxuICBhZGRHbG9iYWxGaWx0ZXJTcGFjZUZpZWxkKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5TUEFDRVI7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdsb2JhbCBib29sZWFuIGZpbHRlclxuICBhZGRHbG9iYWxCb29sZWFuRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgUmFuZ2UgRmlsdGVyIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZFJhbmdlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRTtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgUmFuZ2UgRmlsdGVyIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbERhdGVSYW5nZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuREFURV9SQU5HRTtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cbiAgXG4gIC8vIGFkZCBOdW1lcmljIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxOdW1lcmljUmFuZ2VGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNfUkFOR0U7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG4gIC8vIGFkZCBOdW1lcmljIGlucHV0IGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbE51bWVyaWNJbnB1dChnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ0lOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBMb29rVXAgRmllbGQgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsTG9va3VwRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgIC8vYWRkIGNhbGVuZGFyIGZpbHRlciBmb3IgZ2xvYmFsIGZpbHRlclxuICAgYWRkR2xvYmFsRGF0ZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpe1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZT1HcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVI7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgc2V0RGF0YUZpZWxkcyhyZXNwb25zZTogYW55LCBkYXRhS2V5OiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgbGV0IGRhdGE6IGFueSA9IFtdO1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXNwb25zZS5tYXAoKHg6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoeCA/PyB7fSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IE9iamVjdC5rZXlzKHgpPy5yZWR1Y2UoXG4gICAgICAgICAgICAocHJldiwgY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJlbnQudG9Mb3dlckNhc2UoKV06IHhbY3VycmVudF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkYXRhS2V5ICYmXG4gICAgICAgICAgICBkYXRhS2V5Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFPYmplY3Qua2V5cyhyZXN1bHQpPy5pbmNsdWRlcyhkYXRhS2V5KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmVzdWx0W2RhdGFLZXldID0gaW5kZXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YS5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHNldENvbHVtbkZpZWxkcyhjb2x1bW5zOiBhbnlbXSkge1xuICAgIGxldCBjb2x1bW46IGFueSA9IFtdO1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29sdW1ucy5tYXAoKGNvbDogYW55KSA9PiB7XG4gICAgICAgIGNvbHVtbi5wdXNoKHsgLi4uY29sLCBmaWVsZDogY29sPy5maWVsZD8udG9Mb3dlckNhc2UoKSB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG4gIH1cblxuICAvLyBjaGFuZ2UgbGlua0lkIGluIGVkaXQgbW9kZSwgaWYgY2hhbmdlTGluayBpcyB0cnVlIHRoZW4gaXQgY2hhbmdlIHRoZSBlZGl0ZWQgcm93IGh5cGVybGluayB2YWx1ZVxuICBzZXRMaW5rSWQoXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXSxcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIGxpbmtJZDogc3RyaW5nLFxuICAgIHJlY29yZDogYW55LFxuICAgIHVzZXJzOiBhbnksXG4gICAgcGFyYW1zOiBhbnkgPSBudWxsLFxuICAgIGNoYW5nZUxpbms6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBhbnkge1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY29sdW1uLmxpbmtJZCA9IGxpbmtJZDtcbiAgICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBjb2x1bW4ucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRIeXBlcmxpbmtzKHsgcmVjb3JkczogW3JlY29yZF0gfSwgY29sdW1ucykudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChjaGFuZ2VMaW5rKSB7XG4gICAgICAgIGRlbGV0ZSByZXNbMF1bZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ107XG4gICAgICAgIGxldCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAoaTogYW55KSA9PiBpW2ZpZWxkLnRvTG93ZXJDYXNlKCldID09PSByZWNvcmRbZmllbGQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGlmICh1c2Vyc1tpbmRleF1bZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgICAgICB1c2Vyc1tpbmRleF1bZmllbGQgKyAnX29iaiddLmh5cGVybGluayA9XG4gICAgICAgICAgICAgIHJlc1swXVtmaWVsZCArICdfb2JqJ10uaHlwZXJsaW5rO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGdyaWQgZGF0YSBhbmQgc2V0IHNlbGVjdGVkIHJvdyBiYXNlZCBvbiBzZWxlY3Rpb24gdmFsdWVcbiAgc2V0RGF0YVdpdGhTZWxlY3RlZFJvdyhyZWNvcmRzOiBhbnksIGNvbmZpZ0RhdGE6IGFueSkge1xuICAgIGlmICgoY29uZmlnRGF0YT8udmFsdWVQcm9wIHx8IGNvbmZpZ0RhdGE/LmxhYmVsUHJvcCkgJiYgY29uZmlnRGF0YS5kYXRhLnNlbGVjdGlvbikge1xuICAgICAgcmVjb3Jkcy5mb3JFYWNoKChyZWNvcmQ6IGFueSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhyZWNvcmQpPy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09IGNvbmZpZ0RhdGEubGFiZWxQcm9wID8gY29uZmlnRGF0YS5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCkgOiBjb25maWdEYXRhLnZhbHVlUHJvcD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjb25maWdEYXRhLmRhdGEudmFsdWUgJiZcbiAgICAgICAgICAgICAgcmVjb3JkW2tleV0gPT09IGNvbmZpZ0RhdGEuZGF0YS52YWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJlY29yZFsnaGlnaGxpZ2h0Um93J10gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZWNvcmRba2V5XT8udG9TdHJpbmcoKSA9PT0gY29uZmlnRGF0YS5kYXRhLnNlbGVjdGlvbj8udG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICByZWNvcmRbJ2hpZ2hsaWdodFJvdyddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH1cblxuICBzZXRUYWJsZUFsaWFzKGZpZWxkOiBzdHJpbmcsIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pIHtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgKHg6IGFueSkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmaWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcblxuICAgICAgaWYgKGNvbHVtbiAhPSBudWxsICYmIGNvbHVtbi50YWJsZUFsaWFzICYmIGNvbHVtbi50YWJsZUFsaWFzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi50YWJsZUFsaWFzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHNldEdyaWRQcm9wVmFsdWVzKFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW10sXG4gICAgcHJvcHM6IElHcmlkUHJvcFtdLFxuICAgIGZpbHRlcj86IElHcmlkUHJvcEZpbHRlcixcbiAgICByZWNvcmRzPzogYW55W11cbiAgKSB7XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwICYmIHByb3BzICYmIHByb3BzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBpc01hdGNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIgJiYgZmlsdGVyLmZpZWxkICYmIHJlY29yZHMgJiYgcmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlzTWF0Y2hlZCA9IHJlY29yZHMuc29tZShcbiAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgIHV0aWxpdGllcy5vYmpDb252ZXJ0VG9Mb3dlcih4KVtmaWx0ZXIuZmllbGQudG9Mb3dlckNhc2UoKV0gPT09XG4gICAgICAgICAgICBmaWx0ZXIudmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHByb3BzLm1hcCgocHJvcDogSUdyaWRQcm9wKSA9PiB7XG4gICAgICAgIGxldCBjb2w6IGFueSA9IHt9O1xuICAgICAgICBpZiAocHJvcC5maWVsZCAmJiAhaXNNYXRjaGVkICYmICFmaWx0ZXI/LmZpZWxkKSB7XG4gICAgICAgICAgY29sID0gY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01hdGNoZWQpIHtcbiAgICAgICAgICBpZiAocHJvcC5maWVsZCkge1xuICAgICAgICAgICAgY29sID0gY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICAgIGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sID0gY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICAgIGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmlsdGVyPy5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbCAmJiBjb2wuaGFzT3duUHJvcGVydHkocHJvcC5uYW1lKSkge1xuICAgICAgICAgIGNvbFtwcm9wLm5hbWVdID0gcHJvcC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IGdyaWQgcm93IHByb3BWYWx1ZXNcbiAgc2V0R3JpZFJvd1Byb3BWYWx1ZShyb3c6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHByb3BzOiBJR3JpZFJvd1Byb3BbXSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdKSB7XG4gICAgbGV0IHNldExpbmtJZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxldCBsaW5rSWRSZXM6IGFueTtcbiAgICBwcm9wcz8uZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgc2V0TGlua0lkID0gZmFsc2U7XG4gICAgICBpZiAocHJvcC5wcm9wTmFtZSAmJiAhcHJvcC5sYWJlbCAmJiAocHJvcC5wcm9wVmFsdWUgfHwgcHJvcC5wcm9wVmFsdWUgPT09IGZhbHNlIHx8IHByb3AucHJvcFZhbHVlID09PSAnJykpIHtcbiAgICAgICAgaWYgKHByb3AuZmllbGQgJiYgcm93KSB7XG4gICAgICAgICAgbGV0IGZpZWxkTmFtZSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5Py50b0xvd2VyQ2FzZSgpID09PSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgbGV0IGZpZWxkTmFtZU9iaiA9IGZpZWxkTmFtZT8uaW5jbHVkZXMoJ19vYmonKSA/IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSA6IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICBpZiAoIWZpZWxkTmFtZSkge1xuICAgICAgICAgICAgY29uc3Qgcm93T2JqID0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICBmaWVsZE5hbWVPYmogPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXk6IGFueSkgPT4gKGtleT8udG9Mb3dlckNhc2UoKSA9PT0gcm93T2JqKSAmJiAocm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHwgcm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHwgcm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSk7XG4gICAgICAgICAgICBpZiAoZmllbGROYW1lT2JqKSB7XG4gICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZU9iajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGZpZWxkTmFtZU9iaikpIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZU9ial0gPSB7IC4uLnJvd1tmaWVsZE5hbWVPYmpdLCB0ZXh0OiByb3dbZmllbGROYW1lXSwgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZU9ial0gPSB7IHRleHQ6IHJvd1tmaWVsZE5hbWVdLCBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW5zPy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wRmllbGQgPSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgcHJvcEZpZWxkT2JqID0gcHJvcEZpZWxkICsgJ19vYmonO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGZpZWxkTmFtZU9iaikpIHtcbiAgICAgICAgICAgICAgcm93W3Byb3BGaWVsZE9ial0gPSB7IC4uLnJvd1twcm9wRmllbGRPYmpdLCB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1twcm9wRmllbGRPYmpdID0geyB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkRFTEVURUJUTikge1xuICAgICAgICAgICAgcm93W3Byb3AuYWN0aW9uXSA9IHByb3AucHJvcFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkVESVRCVE4pIHtcbiAgICAgICAgICAgIHJvd1twcm9wLmFjdGlvbl0gPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocHJvcC5sYWJlbCkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHByb3AubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgIGlmIChwcm9wLnByb3BOYW1lID09PSBFR3JpZFJvd1Byb3BOYW1lLlJFUE9SVE5BTUUpIHtcbiAgICAgICAgICByb3dbcHJvcE5hbWVdID0geyAuLi5yb3dbcHJvcE5hbWVdLCByZXBvcnROYW1lOiBwcm9wPy5wcm9wVmFsdWUgfTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BOYW1lID09PSBFR3JpZFJvd1Byb3BOYW1lLlJFUE9SVFBBUkFNICYmIHByb3A/LnBhcmFtcykge1xuICAgICAgICAgIHJvd1twcm9wTmFtZV0gPSB7IC4uLnJvd1twcm9wTmFtZV0sIHJlcG9ydFBhcmFtOiBwcm9wLnBhcmFtcyB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByb3AucHJvcE5hbWUgJiYgcHJvcC5wcm9wTmFtZSA9PT0gRUdyaWRSb3dQcm9wTmFtZS5MSU5LSUQpIHtcbiAgICAgICAgc2V0TGlua0lkID0gdHJ1ZTtcbiAgICAgICAgbGlua0lkUmVzID0gdGhpcy5zZXRIeXBlcmxpbmtzKHsgcmVjb3JkczogW3Jvd10gfSwgY29sdW1ucywgcHJvcC5wYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghc2V0TGlua0lkKSB7XG4gICAgICByZXR1cm4gcm93O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbGlua0lkUmVzO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlbW92ZSB0aGUgcm93QWN0aW9ucyBmcm9tIHRoZSByZWNvcmRzXG4gIHJlbW92ZVJvd0FjdGlvbnMocmVjb3Jkcykge1xuICAgIGlmIChyZWNvcmRzPy5sZW5ndGggPiAwKSB7XG4gICAgICByZWNvcmRzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBpZiAocm93LnJvd0FjdGlvbikge1xuICAgICAgICAgIGRlbGV0ZSByb3dbJ3Jvd0FjdGlvbiddO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH1cblxuICBleHBvcnRFeGNlbChyb3dzRGF0YSwgY29sdW1ucywgcmVwb3J0TmFtZTogc3RyaW5nID0gRUdyaWRFeGNlbC5FWFBPUlQpIHtcbiAgICBpbXBvcnQoJ3hsc3gnKS50aGVuKCh4bHN4KSA9PiB7XG4gICAgICBjb25zdCB3b3Jrc2hlZXQ6IFdvcmtTaGVldCA9IHhsc3gudXRpbHMuanNvbl90b19zaGVldChyb3dzRGF0YSk7XG4gICAgICBsZXQgcm93SW5kZXggPSAwO1xuICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGNvbEluZGV4ID0gMDtcbiAgICAgICAgY29sdW1ucz8uZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjZWxsVmFsdWU6IHN0cmluZyA9IHJvd1tjb2wuaGVhZGVyXTtcbiAgICAgICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LICYmIGNlbGxWYWx1ZSAmJiBjZWxsVmFsdWUubGVuZ3RoID4gMCAmJiBjZWxsVmFsdWUuaW5kZXhPZignfCcpID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbGlua1RleHQ6IHN0cmluZyA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpWzBdO1xuICAgICAgICAgICAgbGV0IGxpbmtVcmw6IHN0cmluZyA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpWzFdO1xuICAgICAgICAgICAgaWYgKGxpbmtVcmwgJiYgIWxpbmtVcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgICAgICAgIGlmICghbGlua1VybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBsaW5rVXJsID0gJy8nICsgbGlua1VybDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsaW5rVXJsID1cbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgK1xuICAgICAgICAgICAgICAgICcvLycgK1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArXG4gICAgICAgICAgICAgICAgbGlua1VybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNlbGxBZGRyZXNzID0geGxzeC51dGlscy5lbmNvZGVfY2VsbCh7XG4gICAgICAgICAgICAgIGM6IGNvbEluZGV4LFxuICAgICAgICAgICAgICByOiByb3dJbmRleCArIDEsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgd29ya3NoZWV0W2NlbGxBZGRyZXNzXSA9IHtcbiAgICAgICAgICAgICAgZjogYD1IWVBFUkxJTksoXCIke2xpbmtVcmx9XCIsIFwiJHtsaW5rVGV4dH1cIilgLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29sSW5kZXgrKztcbiAgICAgICAgfSk7XG4gICAgICAgIHJvd0luZGV4Kys7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHdvcmtib29rID0ge1xuICAgICAgICBTaGVldHM6IHsgc2hlZXQxOiB3b3Jrc2hlZXQgfSxcbiAgICAgICAgU2hlZXROYW1lczogWydzaGVldDEnXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleGNlbEJ1ZmZlcjogYW55ID0geGxzeC53cml0ZSh3b3JrYm9vaywge1xuICAgICAgICBib29rVHlwZTogJ3hsc3gnLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnNhdmVBc0V4Y2VsRmlsZShleGNlbEJ1ZmZlciwgcmVwb3J0TmFtZSk7XG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKHN1Yi1tZXRob2QpXG4gICAqL1xuICBzYXZlQXNFeGNlbEZpbGUoYnVmZmVyOiBhbnksIHJlcG9ydE5hbWUpOiB2b2lkIHtcbiAgICBsZXQgRVhDRUxfVFlQRSA9XG4gICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG4gICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6IEVYQ0VMX1RZUEUgfSk7XG4gICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCByZXBvcnROYW1lKTtcbiAgfVxuXG4gIHNhdmVBc1RleHRGaWxlKHJvd3NJbmZvOiBhbnksIHJlcG9ydE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZpZWxkc1RvRGlzcGxheSA9IE9iamVjdC5rZXlzKHJvd3NJbmZvWzBdKTtcbiAgICBjb25zdCBoZWFkZXJSb3cgPSBmaWVsZHNUb0Rpc3BsYXkuam9pbignXFx0Jyk7XG4gICAgY29uc3QgZm9ybWF0dGVkUm93cyA9IHJvd3NJbmZvLm1hcCgocm93KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGRzVG9EaXNwbGF5Lm1hcCgoZmllbGQpID0+IHJvd1tmaWVsZF0pLmpvaW4oJ1xcdCcpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJvd3NEYXRhID0gW2hlYWRlclJvdywgLi4uZm9ybWF0dGVkUm93c10uam9pbignXFxuJyk7XG4gICAgY29uc3QgZGF0YSA9IG5ldyBCbG9iKFtyb3dzRGF0YV0sIHsgdHlwZTogJ3RleHQnIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgcmVwb3J0TmFtZSk7XG4gIH1cblxuICBzYXZlRGF0YUFzQ3N2KHJvd3NJbmZvOiBhbnksIHJlcG9ydE5hbWU6IHN0cmluZykge1xuICAgIGlmICghcm93c0luZm8gfHwgIXJvd3NJbmZvLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZXBhcmF0b3IgPSAnLCc7XG4gICAgY29uc3QgY29sdW1ucyA9IE9iamVjdC5rZXlzKHJvd3NJbmZvWzBdKTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93c0luZm9bMF0pLmZpbHRlcihrID0+IHtcbiAgICAgIGlmIChjb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnMuaW5jbHVkZXMoayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjc3ZDb250ZW50ID1cbiAgICAgIGtleXMuam9pbihzZXBhcmF0b3IpICtcbiAgICAgICdcXG4nICtcbiAgICAgIHJvd3NJbmZvLm1hcChyb3cgPT4ge1xuICAgICAgICByZXR1cm4ga2V5cy5tYXAoayA9PiB7XG4gICAgICAgICAgbGV0IGNlbGwgPSByb3dba10gPT09IG51bGwgfHwgcm93W2tdID09PSB1bmRlZmluZWQgPyAnJyA6IHJvd1trXTtcbiAgICAgICAgICBjZWxsID0gY2VsbCBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgID8gY2VsbC50b0xvY2FsZVN0cmluZygpXG4gICAgICAgICAgICA6IGNlbGwudG9TdHJpbmcoKS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpO1xuICAgICAgICAgIGlmIChjZWxsLnNlYXJjaCgvKFwifCx8XFxuKS9nKSA+PSAwKSB7XG4gICAgICAgICAgICBjZWxsID0gYFwiJHtjZWxsfVwiYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNlbGw7XG4gICAgICAgIH0pLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgIHRoaXMuc2F2ZUFzQ3N2RmlsZShjc3ZDb250ZW50LCByZXBvcnROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gQ1NWIChzdWItbWV0aG9kKVxuICAgKi9cblxuICBzYXZlQXNDc3ZGaWxlKGNzdkNvbnRlbnQ6IHN0cmluZywgcmVwb3J0TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgcmVwb3J0TmFtZSArICcuY3N2Jyk7XG4gIH1cblxuICBhZGROZXdSb3coZ3JpZE5hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgbGV0IGFkZEJ1dHRvbjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ2xvYmFsLWFkZC1idG4nICsgZ3JpZE5hbWUpO1xuICAgIGlmIChhZGRCdXR0b24gJiYgYWRkQnV0dG9uLmxlbmd0aCA+IDApIHtcbiAgICAgIGFkZEJ1dHRvblswXT8uY2xpY2soKTtcbiAgICB9XG4gIH1cbn0iXX0=
1573
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBSXJELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBSXJCLGVBQWUsRUFLZixjQUFjLEVBS2QsY0FBYyxFQUVkLGNBQWMsRUFFZCxVQUFVLEVBQ1YsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFJOUIsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUtqRCxPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQzs7Ozs7Ozs7QUFNeEMsTUFBTSxPQUFPLFdBQVc7SUFNdEIsWUFDUyxRQUFrQixFQUNqQixnQkFBa0MsRUFDbEMsZUFBZ0MsRUFDaEMsWUFBMEIsRUFDMUIsY0FBOEIsRUFDOUIsS0FBcUI7UUFMdEIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUNqQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFYL0IsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDOUIsdUJBQWtCLEdBQVEsRUFBRSxDQUFDO1FBQzdCLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQUNqQyxjQUFTLEdBQVksS0FBSyxDQUFDO1FBQ3BCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztJQVF0QyxDQUFDO0lBRUo7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxLQUFvQixFQUFFLE9BQXNCO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFV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O1FBQ2xGLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7aUlBM3hEVSxXQUFXO3FJQUFYLFdBQVcsY0FGVixNQUFNOzsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXp5TG9hZEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgSUF1dG9Db21wbGV0ZVNhdmUsIElEcm9wRG93blJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBFR3JpZFNvcnREaXJlY3Rpb24sXG4gIEdyaWRGaWx0ZXJDb250cm9sVHlwZSxcbiAgSUdsb2JhbEZpbHRlcixcbiAgSUdyaWRGaWx0ZXIsXG4gIElHcmlkU29ydCxcbiAgRUdyaWRDb2x1bW5UeXBlLFxuICBhZGRDb2x1bW4sXG4gIGFkZEZpbHRlckNvbHVtbixcbiAgYWRkR2xvYmFsRmlsdGVyLFxuICBJR3JpZENvbHVtbixcbiAgRUdyaWRWYWxpZGF0b3IsXG4gIElHcmlkUHJvcCxcbiAgSUdyaWRQcm9wRmlsdGVyLFxuICBJR3JpZFJvd1Byb3AsXG4gIElHcmlkUmVwb3J0QnRuLFxuICBFR3JpZFJvd0FjdGlvbixcbiAgSURpYWxvZ0NvbHVtbixcbiAgRUdyaWRGb3JtYXR0ZXIsXG4gIElHcmlkVXBkYXRlLFxuICBFR3JpZEV4Y2VsLFxuICBFR3JpZFJvd1Byb3BOYW1lLFxufSBmcm9tICcuLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuL2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRHJvcGRvd25TZXJ2aWNlIH0gZnJvbSAnLi9kcm9wZG93bi5zZXJ2aWNlJztcbmltcG9ydCB7IEh5cGVybGlua1NlcnZpY2UgfSBmcm9tICcuL2h5cGVybGluay5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIHV0aWxpdGllcyBmcm9tICcuL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQgeyBXb3JrU2hlZXQgfSBmcm9tICd4bHN4JztcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZFNlcnZpY2Uge1xuICB1c2VyU2VhcmNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc29mdENhY2hpbmdGaWx0ZXJzOiBhbnkgPSB7fTtcbiAgYXBwbHlGaWx0ZXJFdmVudDogYm9vbGVhbiA9IHRydWU7XG4gIHJvd1VwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY29sdW1uRm9jdXNlZE91dDogYm9vbGVhbiA9IGZhbHNlO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGF0ZXBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgaHlwZXJsaW5rU2VydmljZTogSHlwZXJsaW5rU2VydmljZSxcbiAgICBwcml2YXRlIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXF1ZXN0U2VydmljZTogUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICkge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgYWZ0ZXIgcHJvcGVyIG1hcHBpbmdcbiAgICovXG4gIGdldEdyaWRGaWx0ZXJzKGV2ZW50OiBMYXp5TG9hZEV2ZW50LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMubWFwRmlsdGVycyhldmVudCwgY29sdW1ucyk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTXVsdGlGaWx0ZXJGaWVsZChmaWx0ZXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKiBSZWNlaXZlcyBmaWx0ZXJzIGFuZCByZXR1cm5zIGFycmF5IGFmdGVyIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAgICogYW5kIGNyZWF0aW5nIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMgZm9yIHNhbWUgZmlsdGVyc1xuICAgKi9cbiAgaGFuZGxlTXVsdGlGaWx0ZXJGaWVsZChmaWx0ZXJzOiBJR3JpZEZpbHRlcltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIGZpbHRlcnNcbiAgICAgIC5tYXAoKHgsIGksIGFycikgPT5cbiAgICAgICAgYXJyLnNvbWUoXG4gICAgICAgICAgKHksIGlkeCkgPT5cbiAgICAgICAgICAgIHkuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgJiYgaSAhPT0gaWR4XG4gICAgICAgIClcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgLi4ueCxcbiAgICAgICAgICAgICAgdmFsdWU6IGFyclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAoeikgPT4gei5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0geC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAubWFwKChhKSA9PiBhLnZhbHVlKVxuICAgICAgICAgICAgICAgIC5qb2luKCksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB4XG4gICAgICApXG4gICAgICAuZmlsdGVyKChmLCBpLCBhcnIpID0+IGFyci5maW5kSW5kZXgoKHgpID0+IHgudmFsdWUgPT09IGYudmFsdWUpID09PSBpKTtcbiAgfVxuXG4gIC8vIFByZXBhcmUgYmFzaWMgZ3JpZCBmaWx0ZXJzXG4gIHByZXBhcmVCYXNpY0ZpbHRlcnMoXG4gICAgZXZlbnQ6IExhenlMb2FkRXZlbnQsXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXVxuICApOiBJR3JpZEZpbHRlcltdIHtcbiAgICByZXR1cm4gdGhpcy5tYXBGaWx0ZXJzKGV2ZW50LCBjb2x1bW5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgZmlsdGVycyBoYXMgdmFsdWVzIHRoZW4gY29udmVydHMgZ2xvYmFsIGZpbHRlciB2YWx1ZXMgdHlwZSBpbnRvIElHcmlkRmlsdGVyLlxuICAgKi9cbiAgcHJlcGFyZUdsb2JhbEZpbHRlcnMoZ2xvYmFsRmlsdGVyczogSUdsb2JhbEZpbHRlcltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgY29uc3QgZ2xvYmFsRGF0YTogSUdyaWRGaWx0ZXJbXSA9IFtdO1xuXG4gICAgZ2xvYmFsRmlsdGVycz8uZm9yRWFjaCgoZmlsdGVyOiBJR2xvYmFsRmlsdGVyKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgICgodHlwZW9mIGZpbHRlci52YWx1ZSA9PT0gJ3N0cmluZycgfHwgQXJyYXkuaXNBcnJheShmaWx0ZXIudmFsdWUpKSAmJlxuICAgICAgICAgIGZpbHRlci52YWx1ZS5sZW5ndGgpIHx8XG4gICAgICAgICh0eXBlb2YgZmlsdGVyLnZhbHVlICE9PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICFBcnJheS5pc0FycmF5KGZpbHRlci52YWx1ZSkgJiZcbiAgICAgICAgICBmaWx0ZXIudmFsdWUpIHx8XG4gICAgICAgICh0eXBlb2YgZmlsdGVyLnZhbHVlID09PSAnYm9vbGVhbicgJiYgZmlsdGVyLnZhbHVlICE9PSBudWxsKSB8fFxuICAgICAgICBmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFXG4gICAgICApIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0UgJiZcbiAgICAgICAgICBmaWx0ZXIudmFsdWU/LnRvU3RyaW5nKCk/LmluY2x1ZGVzKCd8JylcbiAgICAgICAgKSB7ICAgICAgICAgXG5cbiAgICAgICAgICAvLyBhZGQgZmlsdGVyIGZvciBlbmQgZGF0ZVxuICAgICAgICAgIGdsb2JhbERhdGEucHVzaCh7XG4gICAgICAgICAgICBmaWVsZDogdGhpcy5zZXRHbG9iYWxGaWx0ZXJGaWVsZChmaWx0ZXIsIGZhbHNlKSxcbiAgICAgICAgICAgIG1hdGNoTW9kZTogZmlsdGVyLm1hdGNoTW9kZSA/IGZpbHRlci5tYXRjaE1vZGUgOiAnbHRlJyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3IgPyBmaWx0ZXIub3BlcmF0b3IgOiAnYW5kJyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEdsb2JhbEZpbHRlclZhbHVlKGZpbHRlciwgZmFsc2UpLFxuICAgICAgICAgICAgdGFibGVBbGlhczogZmlsdGVyLnRhYmxlQWxpYXMsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgLy8gYWRkIGZpbHRlciBmb3Igc3RhcnQgZGF0ZVxuICAgICAgICAgICBnbG9iYWxEYXRhLnB1c2goe1xuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc2V0R2xvYmFsRmlsdGVyRmllbGQoZmlsdGVyKSxcbiAgICAgICAgICAgIG1hdGNoTW9kZTogZmlsdGVyLm1hdGNoTW9kZSA/IGZpbHRlci5tYXRjaE1vZGUgOiAnZ3RlJyxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3IgPyBmaWx0ZXIub3BlcmF0b3IgOiAnYW5kJyxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNldEdsb2JhbEZpbHRlclZhbHVlKGZpbHRlciksXG4gICAgICAgICAgICB0YWJsZUFsaWFzOiBmaWx0ZXIudGFibGVBbGlhcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXIudHlwZSAhPT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFKSB7XG4gICAgICAgICAgZ2xvYmFsRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLnNldEdsb2JhbEZpbHRlckZpZWxkKGZpbHRlciksXG4gICAgICAgICAgICBtYXRjaE1vZGU6XG4gICAgICAgICAgICAgIGZpbHRlci50eXBlID09PSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1RcbiAgICAgICAgICAgICAgICA/ICdpbidcbiAgICAgICAgICAgICAgICA6IGZpbHRlci5tYXRjaE1vZGUsXG4gICAgICAgICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yID8gZmlsdGVyLm9wZXJhdG9yIDogJ2FuZCcsXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5zZXRHbG9iYWxGaWx0ZXJWYWx1ZShmaWx0ZXIpLFxuICAgICAgICAgICAgdGFibGVBbGlhczogZmlsdGVyLnRhYmxlQWxpYXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZ2xvYmFsRGF0YTtcbiAgfVxuXG4gIHNldEdsb2JhbEZpbHRlckZpZWxkKGZpbHRlcjogYW55LCBpc1N0YXJ0RGF0ZTogYm9vbGVhbiA9IHRydWUpOiBzdHJpbmcge1xuICAgIGlmIChmaWx0ZXIudHlwZSA9PT0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSX1JBTkdFKSB7XG4gICAgICBpZiAoaXNTdGFydERhdGUpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlci5mcm9tRmllbGQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmlsdGVyLnRvRmllbGQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXIuZmllbGQ7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IGdsb2JhbCBmaWx0ZXIgdmFsdWVcbiAgc2V0R2xvYmFsRmlsdGVyVmFsdWUoXG4gICAgZmlsdGVyOiBJR2xvYmFsRmlsdGVyLFxuICAgIGlzU3RhcnREYXRlOiBib29sZWFuID0gdHJ1ZVxuICApOiBzdHJpbmcgfCBudW1iZXIgfCBEYXRlIHwgYm9vbGVhbiB7XG4gICAgc3dpdGNoIChmaWx0ZXIudHlwZSkge1xuICAgICAgY2FzZSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1Q6XG4gICAgICAgIHJldHVybiAoZmlsdGVyLnZhbHVlIGFzIGFueVtdKS5qb2luKCcsJyk7XG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUjpcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZShmaWx0ZXIudmFsdWUgYXMgRGF0ZSk7XG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRTpcbiAgICAgICAgbGV0IGRhdGVWYWx1ZXM6IHN0cmluZ1tdID0gZmlsdGVyLnZhbHVlXG4gICAgICAgICAgPyBmaWx0ZXIudmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnfCcpXG4gICAgICAgICAgOiBbXTtcbiAgICAgICAgaWYgKGRhdGVWYWx1ZXMgJiYgZGF0ZVZhbHVlcy5sZW5ndGggPT0gMikge1xuICAgICAgICAgIGxldCBkYXRlVmFsdWU6IERhdGUgPSBpc1N0YXJ0RGF0ZVxuICAgICAgICAgICAgPyBuZXcgRGF0ZShkYXRlVmFsdWVzWzBdKVxuICAgICAgICAgICAgOiBuZXcgRGF0ZShkYXRlVmFsdWVzWzFdKTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRGb3JtYXR0ZWREYXRlKGRhdGVWYWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICBjYXNlIEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWDpcbiAgICAgICAgcmV0dXJuIGZpbHRlci52YWx1ZSA/IHRydWUgOiBmYWxzZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmaWx0ZXIudmFsdWUgYXMgc3RyaW5nO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrVmFsaWRpdHkoY29sdW1uczogSUdyaWRDb2x1bW5bXSwgcm93OiBhbnksIHNpbmdsZUNlbGw6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGxldCBpc1ZhbGlkOiBib29sZWFuID0gdHJ1ZTtcbiAgICBjb2x1bW5zLm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICBpZiAoaXRlbS52YWxpZGF0aW9ucyAmJiAhaXRlbS5kaXNhYmxlZCkge1xuICAgICAgICBpdGVtLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgICAgICBpdGVtLmlzdmFsaWQgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW0udmFsaWRhdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBtaW5NYXhWYWxpZERhdGUgPSB1dGlsaXRpZXMuY2FsZW5kYXJNaW5NYXhWYWx1ZShcbiAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0sXG4gICAgICAgICAgICBpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2YWxpZCA9IGl0ZW0udmFsaWRhdGlvbnMgJiYgaXRlbS5oZWFkZXI7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXNpbmdsZUNlbGwgJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5SRVFVSVJFRCAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgIWl0ZW0uaGlkZGVuICYmXG4gICAgICAgICAgICB2YWxpZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IHJvd1tpdGVtLmZpZWxkXVxuICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgJHt2YWxpZH0gaXMgcmVxdWlyZWRgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5NSU5MRU5HVEggJiZcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBNaW5pbXVtICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5NQVhMRU5HVEggJiZcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXS5sZW5ndGggPiBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb25cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGAke2l0ZW0uaGVhZGVyfSBNYXhpbXVtICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufSBjaGFyYWN0ZXJzYFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gXG4gICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5NQVhPUFRJT05TIFxuXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB2YXIgb3B0aW9uczpudW1iZXI9MTtcbiAgICAgICAgICAgIHZhciB2YWx1ZT1yb3dbaXRlbS5maWVsZF07XG4gICAgICAgICAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHZhbHVlLmxlbmd0aCAtIDE7IHgrKykge1xuICAgICAgICAgICAgICBpZiAodmFsdWVbeF0gPT0gJzsnKSB7XG4gICAgICAgICAgICAgICAgb3B0aW9ucysrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvL2JsdWU7cmVkO2dyZWVuIG1heD0zXG4gICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgLy8gcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgIG9wdGlvbnMgPD0gaXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IG1heGltdW0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259IG9wdGlvbiR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9uPjE/J3MnOicnfWBcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5NSU5JTVVNICYmXG4gICAgICAgICAgICBpc1ZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgICBtaW5NYXhWYWxpZERhdGUgPT09ICdtaW5pbXVtJ1xuICAgICAgICAgICAgICAgICAgPyB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGBNaW5pbXVtICR7dmFsaWR9ICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufWBcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbaXRlbS5maWVsZF0gPCBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA+IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IE1pbmltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5NQVhJTVVNICYmXG4gICAgICAgICAgICBpc1ZhbGlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS50eXBlID09PSBFR3JpZENvbHVtblR5cGUuREFURSkge1xuICAgICAgICAgICAgICBpc1ZhbGlkID1cbiAgICAgICAgICAgICAgICBtaW5NYXhWYWxpZERhdGUgPT09ICdncmVhdGVyJ1xuICAgICAgICAgICAgICAgICAgPyB0aGlzLnNldEVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGBNYXhpbXVtICR7dmFsaWR9ICR7aXRlbS52YWxpZGF0aW9uc1tpXS5leHByZXNzaW9ufWBcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgOiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyb3dbaXRlbS5maWVsZF0gPiBpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb24pIHtcbiAgICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdICYmXG4gICAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLmxlbmd0aCA8IGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvblxuICAgICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgYCR7aXRlbS5oZWFkZXJ9IE1heGltdW0gJHt2YWxpZH0gJHtpdGVtLnZhbGlkYXRpb25zW2ldLmV4cHJlc3Npb259YFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5QQVRURVJOICYmXG4gICAgICAgICAgICAhcm93W2l0ZW0uZmllbGRdLm1hdGNoKGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbilcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdLm1hdGNoKGl0ZW0udmFsaWRhdGlvbnNbaV0uZXhwcmVzc2lvbilcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGBFbnRlciB2YWxpZCAke3ZhbGlkfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLk5VTUVSSUMgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0udG9TdHJpbmcoKS5tYXRjaCgvXigwfFstKCkxLTldXFxkKikkLylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiYgcm93W2l0ZW0uZmllbGRdLm1hdGNoKC9eKDB8WzEtOV1cXGQqKSQvKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGBFbnRlciAke2l0ZW0udmFsaWRhdGlvbnNbaV0udHlwZX0gZm9yICR7dmFsaWR9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5QSE9ORSAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXT8udG9TdHJpbmcoKS5tYXRjaCgvXig/PS4qWzAtOV0pWy0oKTAtOVxccyt4XSskLylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGlzVmFsaWQgPVxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgICAgcm93W2l0ZW0uZmllbGRdPy50b1N0cmluZygpLm1hdGNoKC9eKD89LipbMC05XSlbLSgpMC05XFxzXSskLylcbiAgICAgICAgICAgICAgICA/IHRydWVcbiAgICAgICAgICAgICAgICA6IHRoaXMuc2V0RXJyb3JNZXNzYWdlKGl0ZW0sIGBFbnRlciB2YWxpZCAke3ZhbGlkfWApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgaXRlbS52YWxpZGF0aW9uc1tpXS50eXBlID09IEVHcmlkVmFsaWRhdG9yLkRFQ0lNQUwgJiZcbiAgICAgICAgICAgICFyb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oMHxbLSgpMS05XVxcZCopKFxcLlxcZCspPyQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF0/LnRvU3RyaW5nKCkubWF0Y2goL14oMHxbMS05XVxcZCopKFxcLlxcZCspPyQvKVxuICAgICAgICAgICAgICAgID8gdHJ1ZVxuICAgICAgICAgICAgICAgIDogdGhpcy5zZXRFcnJvck1lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGBFbnRlciAke2l0ZW0udmFsaWRhdGlvbnNbaV0udHlwZX0gZm9yICR7dmFsaWR9YFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICByb3dbaXRlbS5maWVsZF0gJiZcbiAgICAgICAgICAgIGl0ZW0udmFsaWRhdGlvbnNbaV0udHlwZSA9PSBFR3JpZFZhbGlkYXRvci5FTUFJTCAmJlxuICAgICAgICAgICAgIXJvd1tpdGVtLmZpZWxkXVxuICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgLm1hdGNoKC9eW2EtekEtWjAtOS5fLV0rQFthLXpBLVowLTkuLV0rXFwuW2EtekEtWl17Miw2fSQvKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgaXNWYWxpZCA9XG4gICAgICAgICAgICAgIHJvd1tpdGVtLmZpZWxkXSAmJlxuICAgICAgICAgICAgICByb3dbaXRlbS5maWVsZF1cbiAgICAgICAgICAgICAgICA/LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAubWF0Y2goL15bYS16QS1aMC05Ll8tXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLDZ9JC8pXG4gICAgICAgICAgICAgICAgPyB0cnVlXG4gICAgICAgICAgICAgICAgOiB0aGlzLnNldEVycm9yTWVzc2FnZShpdGVtLCBgRW50ZXIgdmFsaWQgJHt2YWxpZH1gKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBpc1ZhbGlkO1xuICB9XG5cbiAgc2V0RXJyb3JNZXNzYWdlKGl0ZW06IElHcmlkQ29sdW1uLCBlcnJvck1lc3NhZ2U6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGl0ZW0uZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xuICAgIGl0ZW0uaXN2YWxpZCA9IGZhbHNlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIHNldCBiYXNpYyBmaWx0ZXIgdmFsdWVcbiAgc2V0QmFzaWNGaWx0ZXJWYWx1ZShmaWx0ZXI6IGFueSk6IGFueSB7XG4gICAgaWYgKGZpbHRlciBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEZvcm1hdHRlZERhdGUoZmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXIgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGZpbHRlciA/IDEgOiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsdGVyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1cbiAgICogUmVjZWl2ZXMgbGF6eSBldmVudCBhbmQgcmV0dXJucyBzb3J0IGFycmF5XG4gICAqL1xuICBnZXRHcmlkU29ydHMoXG4gICAgeyBtdWx0aVNvcnRNZXRhIH06IExhenlMb2FkRXZlbnQsXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXVxuICApOiBJR3JpZFNvcnRbXSB7XG4gICAgcmV0dXJuIChtdWx0aVNvcnRNZXRhIHx8IFtdKS5tYXAoKHsgZmllbGQsIG9yZGVyIH0sIGkpOiBhbnkgPT4gKHtcbiAgICAgIGZpZWxkLFxuICAgICAgZGlyZWN0aW9uOiBvcmRlciA+IDAgPyBFR3JpZFNvcnREaXJlY3Rpb24uQVNDIDogRUdyaWRTb3J0RGlyZWN0aW9uLkRFU0MsXG4gICAgICBwcmlvcml0eTogaSArIDEsXG4gICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogSGFuZGxlcyBkZWZhdWx0IGFuZCBsb29rdXAgZmlsdGVyc1xuICAgKi9cbiAgbWFwRmlsdGVycyhldmVudDogYW55LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgY29uc3QgZmlsdGVyczogSUdyaWRGaWx0ZXJbXSA9IFtdO1xuICAgIE9iamVjdC5lbnRyaWVzKGV2ZW50LmZpbHRlcnMpLmZvckVhY2goKFtmaWVsZCwgdmFsdWVdOiBhbnkpID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAodmFsdWUgYXMgSUdyaWRGaWx0ZXJbXSkuZm9yRWFjaChcbiAgICAgICAgICAoeyBtYXRjaE1vZGUsIG9wZXJhdG9yLCB2YWx1ZTogZmlsdGVyIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBtYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2V0QmFzaWNGaWx0ZXJWYWx1ZShmaWx0ZXIpLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh2YWx1ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZS52YWx1ZSkge1xuICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiAnZXF1YWxzJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRhYmxlQWxpYXM6IHRoaXMuc2V0VGFibGVBbGlhcyhmaWVsZCwgY29sdW1ucyksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZS5tYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6ICdhbmQnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogdmFsdWUubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogJ2VxdWFsJyxcbiAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiAnYW5kJyxcbiAgICAgICAgICAgICAgICAgIHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS52YWx1ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZ2V0Rm9ybWF0dGVkRGF0ZSh2YWx1ZS52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICA6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgdGFibGVBbGlhczogdGhpcy5zZXRUYWJsZUFsaWFzKGZpZWxkLCBjb2x1bW5zKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAodmFsdWUudmFsdWUgfHwgW10pLmZvckVhY2goKHg6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogdmFsdWUubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogJ2FuZCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB4LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB0YWJsZUFsaWFzOiB0aGlzLnNldFRhYmxlQWxpYXMoZmllbGQsIGNvbHVtbnMpLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSBldmVudFxuICAgKiBSZWNlaXZlcyBsYXp5IGV2ZW50IGFuZCByZXR1cm5zIHBhZ2UgbnVtYmVyXG4gICAqL1xuICBnZXRHcmlkUGFnaW5hdGlvbihldmVudDogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gaXNOYU4oZXZlbnQuZmlyc3QgLyBldmVudC5yb3dzKSA/IDEgOiBldmVudC5maXJzdCAvIGV2ZW50LnJvd3MgKyAxO1xuICB9XG5cbiAgLy8gZ2V0IGZvcm1hdHRlZCBkYXRlXG4gIGdldEZvcm1hdHRlZERhdGUodmFsdWU6IERhdGUpOiBzdHJpbmcge1xuICAgIHJldHVybiBuZXcgRGF0ZShgJHt2YWx1ZX0gWmApLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTApO1xuICB9XG5cbiAgIC8vIGNoYW5nZSByb3cga2V5IGFuZCB2YWx1ZSB3aGVuIHVzaW5nIHNldEdyaWRSb3dQcm9wVmFsdWUgZnVuY3Rpb25cbiAgIHNldFJvd1ZhbHVlKHJvd0RhdGE6IGFueSkge1xuICAgIE9iamVjdC5rZXlzKHJvd0RhdGEpPy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IHJvd09iaiA9IHJvdysnX29iaic7XG4gICAgICBpZihyb3cgPT09IEVHcmlkUm93QWN0aW9uLkRFTEVURUJUTiB8fCByb3cgPT09IEVHcmlkUm93QWN0aW9uLkVESVRCVE4pe1xuICAgICAgICBkZWxldGUgcm93RGF0YVtyb3ddO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIHJvd0RhdGFbcm93T2JqXSAmJlxuICAgICAgICB0eXBlb2Yocm93RGF0YVtyb3dPYmpdKSA9PT0gJ29iamVjdCdcbiAgICAgICkge1xuICAgICAgICBkZWxldGUgcm93RGF0YVtyb3dPYmpdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByb3dEYXRhO1xuICB9XG5cbiAgLy8gY29udmVydCByb3cgYWN0aW9ucyBvYmplY3QgaW50byBzaW1wbGUgdmFsdWVcbiAgc2V0R3JpZFJvd0RhdGEocm93RGF0YSl7XG4gICAgaWYoQXJyYXkuaXNBcnJheShyb3dEYXRhKSl7XG4gICAgICByb3dEYXRhLmZvckVhY2goKHJvdyk9PntcbiAgICAgICAgcm93ID0gdGhpcy5zZXRSb3dWYWx1ZShyb3cpO1xuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgcm93RGF0YSA9IHRoaXMuc2V0Um93VmFsdWUocm93RGF0YSk7XG4gICAgfVxuICAgIHJldHVybiByb3dEYXRhO1xuICB9XG5cbiAgLy8gZ2V0IGFsbG93U2F2ZSB0cnVlIHJvdyBsaXN0XG4gIGdldEFsbG93U2F2ZVJvd2xpc3Qocm93c0RhdGE6IGFueVtdID0gW10sIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pIHtcbiAgICByb3dzRGF0YSA9IHRoaXMuc2V0RGF0YUZpZWxkcyhyb3dzRGF0YSk7XG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IElHcmlkQ29sdW1uKSA9PiB7XG4gICAgICBsZXQgZmllbGQgPSBjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93KT0+e1xuICAgICAgICByb3cgPSB0aGlzLnJlbW92ZVJvd09iaihyb3csIGZpZWxkLCBjb2x1bW5zKTtcbiAgICAgIH0pXG4gICAgICBpZiAoY29sdW1uLmFsbG93U2F2ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgbGV0IG9iaiA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICAgICAgaWYgKG9iaj8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgb2JqLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHguaW5jbHVkZXMoJ19vYmonKSAmJiB0eXBlb2Ygcm93W3hdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSByb3dbeF07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSByb3dbZmllbGRdO1xuICAgICAgICAgIHJvdyA9IHRoaXMuc2V0Um93VmFsdWUocm93KTtcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICAgICAgbGV0IHZhbHVlID0gcm93W2ZpZWxkXVxuICAgICAgICAgIGlmIChjb2x1bW4uZm9ybWF0dGVyID09PSBFR3JpZEZvcm1hdHRlci5DSEFSKSB7XG4gICAgICAgICAgICByb3dbZmllbGRdID0gdmFsdWUgPT09IHRydWUgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICdZJyB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJzEnID8gJ1knIDogJ04nO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuTlVNRVJJQykge1xuICAgICAgICAgICAgcm93W2ZpZWxkXSA9IHZhbHVlID09PSB0cnVlIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnWScgfHwgdmFsdWU/LnRvU3RyaW5nKCkgPT09ICcxJyA/ICcxJyA6ICcwJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbi5mb3JtYXR0ZXIgPT09IEVHcmlkRm9ybWF0dGVyLkJPT0xFQU4pIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRBVEUpIHtcbiAgICAgICAgLy9jb252ZXJ0IGRhdGUgaW50byB0aW1lIGZvcm1hdFxuICAgICAgICByb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAnaGg6bW0gYScpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2hvd1RpbWUpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSB0aGlzLmRhdGVwaXBlLnRyYW5zZm9ybShyb3dbZmllbGRdLCAneXl5eS1NTS1kZCBISDptbTpzcycpO1xuICAgICAgICAgIH0gZWxzZSBpZiAocm93W2ZpZWxkXSAmJiAhY29sdW1uLnRpbWVPbmx5ICYmIGNvbHVtbi5zYXZlQXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHJvd1tmaWVsZF0gPSByb3dbZmllbGRdLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiByb3dzRGF0YTtcbiAgfVxuXG4gIC8vIGdldCBhbGxvd1NhdmUgdHJ1ZSB8fCB1bmRlZmluZSByb3dcbiAgZ2V0QWxsb3dTYXZlUm93KHJvd0luZm86IHt9ID0ge30sIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pIHtcbiAgICBsZXQgcm93ID0geyAuLi5yb3dJbmZvIH07XG4gICAgcm93ID0gdXRpbGl0aWVzLm9iakNvbnZlcnRUb0xvd2VyKHJvdyk7XG4gICAgcm93ID0gdGhpcy5zZXRSb3dWYWx1ZShyb3cpO1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBsZXQgZmllbGQgPSBjb2x1bW4/LmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgcm93ID0gdGhpcy5yZW1vdmVSb3dPYmoocm93LCBmaWVsZCwgY29sdW1ucyk7XG4gICAgICBpZiAoY29sdW1uLmFsbG93U2F2ZSA9PSBmYWxzZSkge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93KVxuICAgICAgICBrZXlzLmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICBpZiAoeC5pbmNsdWRlcygnX29iaicpICYmIHR5cGVvZiByb3dbeF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBkZWxldGUgcm93W3hdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5cy5maW5kKCh4KSA9PiB4LnRvTG93ZXJDYXNlKCkgPT09IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICBkZWxldGUgcm93W2tleV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciAmJiBjb2x1bW4udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pIHtcbiAgICAgICAgbGV0IHZhbHVlID0gcm93W2ZpZWxkXVxuICAgICAgICBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQ0hBUikge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnWScgOiAnTic7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuTlVNRVJJQykge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyAnMScgOiAnMCc7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sdW1uLmZvcm1hdHRlciA9PT0gRUdyaWRGb3JtYXR0ZXIuQk9PTEVBTikge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSB2YWx1ZSA9PT0gdHJ1ZSB8fCB2YWx1ZT8udG9TdHJpbmcoKSA9PT0gJ1knIHx8IHZhbHVlPy50b1N0cmluZygpID09PSAnMScgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EQVRFKSB7XG4gICAgICAgIC8vY29udmVydCBkYXRlIGludG8gdGltZSBmb3JtYXRcbiAgICAgICAgaWYgKGNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2F2ZUFzU3RyaW5nKSB7XG4gICAgICAgICAgcm93W2ZpZWxkXSA9IHRoaXMuZGF0ZXBpcGUudHJhbnNmb3JtKHJvd1tmaWVsZF0sICdoaDptbSBhJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWNvbHVtbi50aW1lT25seSAmJiBjb2x1bW4uc2hvd1RpbWUpIHtcbiAgICAgICAgICByb3dbZmllbGRdID0gdGhpcy5kYXRlcGlwZS50cmFuc2Zvcm0ocm93W2ZpZWxkXSwgJ3l5eXktTU0tZGQgSEg6bW06c3MnKTtcbiAgICAgICAgfSBlbHNlIGlmIChyb3dbZmllbGRdICYmICFjb2x1bW4udGltZU9ubHkgJiYgY29sdW1uLnNhdmVBc1N0cmluZykge1xuICAgICAgICAgIHJvd1tmaWVsZF0gPSByb3dbZmllbGRdLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgLy8gcmVtb3ZlIG9iaiwgZGF0YSBhbmQgc2Vjb25kdHlwZSBkYXRhIGZyb20gcm93XG4gIHJlbW92ZVJvd09iaihyb3csIGZpZWxkLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKXtcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgaWYoa2V5cz8ubGVuZ3RoID4gMCl7XG4gICAgICBrZXlzLmZvckVhY2goKGtleSk9PntcbiAgICAgICAgaWYoa2V5ID09PSBmaWVsZCArICctZGF0YScgfHwga2V5ID09PSBmaWVsZCArICdfc2Vjb25kVHlwZScgfHwga2V5ID09PSBmaWVsZCArICdfb2JqJyl7XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByb3cgPSB0aGlzLnJlbW92ZUV4dHJhTmV3Um93T2JqKHJvdywgY29sdW1ucylcbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgcmVtb3ZlRXh0cmFOZXdSb3dPYmoocm93LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKXtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICBpZihjb2x1bW5zPy5sZW5ndGggPiAwICYmIGtleXM/Lmxlbmd0aCA+IDApe1xuICAgICAga2V5cy5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgIGNvbnN0IG1hdGNoS2V5ID0gY29sdW1ucy5zb21lKChjb2x1bW4pPT4gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBrZXk/LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIGlmKCFtYXRjaEtleSl7XG4gICAgICAgICAgZGVsZXRlIHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gcm93O1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZENvbHVtbihjb2x1bW5JbmZvOiBhZGRDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKGNvbHVtbkluZm8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOKSB7XG4gICAgICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgICA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgICAgOiAnbGFiZWwnO1xuICAgICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICAgIDogJ3ZhbHVlJztcbiAgICB9IGVsc2UgaWYgKGNvbHVtbkluZm8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRykge1xuICAgICAgaWYgKCFjb2x1bW5JbmZvLmZpbHRlcmluZyAmJiAhY29sdW1uSW5mby5maWx0ZXIpIHtcbiAgICAgICAgY29sdW1uSW5mby5maWx0ZXJpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW5JbmZvLnBhcmFtcyAmJiAhY29sdW1uSW5mby5kYXRhKSB7XG4gICAgICAgIGNvbHVtbkluZm8uZGF0YSA9IGNvbHVtbkluZm8ucGFyYW1zO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb2x1bW46IElHcmlkQ29sdW1uID0ge1xuICAgICAgYWxsb3dUb2dnbGU6IGNvbHVtbkluZm8uYWxsb3dUb2dnbGUgfHwgZmFsc2UsXG4gICAgICBhbGxvd1NlYXJjaDogY29sdW1uSW5mby5hbGxvd1NlYXJjaCxcbiAgICAgIGFsbG93QXV0b0NvbXBsZXRlU2F2ZTogY29sdW1uSW5mby5hbGxvd0F1dG9Db21wbGV0ZVNhdmUsXG4gICAgICB1bmlxdWVLZXk6IGNvbHVtbkluZm8udW5pcXVlS2V5LFxuICAgICAgZmllbGQ6IGNvbHVtbkluZm8uZmllbGQsXG4gICAgICBoZWFkZXI6IGNvbHVtbkluZm8uaGVhZGVyLFxuICAgICAgc3R5bGU6IGNvbHVtbkluZm8uc3R5bGUsXG4gICAgICB0eXBlOiBjb2x1bW5JbmZvLnR5cGUsXG4gICAgICBmb3JtYXQ6IGNvbHVtbkluZm8uZm9ybWF0LFxuICAgICAgZGF0YTogY29sdW1uSW5mby5kYXRhLFxuICAgICAgZmlsdGVyVmFsdWU6Y29sdW1uSW5mby5maWx0ZXJWYWx1ZSxcbiAgICAgIGZpbHRlcmluZzogY29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBoaWRkZW46IGNvbHVtbkluZm8uaGlkZGVuLFxuICAgICAgc2hvdzogY29sdW1uSW5mby5zaG93LFxuICAgICAgc29ydGluZzogY29sdW1uSW5mby5zb3J0aW5nLFxuICAgICAgZmlsdGVyOiBjb2x1bW5JbmZvLmZpbHRlcixcbiAgICAgIGh5cGVybGluazogY29sdW1uSW5mby5oeXBlcmxpbmssXG4gICAgICB0YWJsZUFsaWFzOiBjb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBsaW5rSWQ6IGNvbHVtbkluZm8ubGlua0lkLFxuICAgICAgbWludXRlc0ludGVydmFsOiBjb2x1bW5JbmZvLm1pbnV0ZXNJbnRlcnZhbCxcbiAgICAgIHBhcmFtczogY29sdW1uSW5mby5wYXJhbXMsXG4gICAgICBzaG93T3B0aW9uOiBjb2x1bW5JbmZvLnNob3dPcHRpb24sXG4gICAgICBkaXNwbGF5VGV4dDogY29sdW1uSW5mby5kaXNwbGF5VGV4dCxcbiAgICAgIHRhcmdldDogY29sdW1uSW5mby50YXJnZXQsXG4gICAgICBkaXNhYmxlZDogY29sdW1uSW5mby5kaXNhYmxlZCxcbiAgICAgIGFsbG93U2F2ZTogY29sdW1uSW5mby5hbGxvd1NhdmUsXG4gICAgICBhbGxvd0VkaXQ6IGNvbHVtbkluZm8uYWxsb3dFZGl0LFxuICAgICAgZWRpdGFibGU6IGNvbHVtbkluZm8uZWRpdGFibGUsXG4gICAgICBlZGl0TGluazogY29sdW1uSW5mby5lZGl0TGluayxcbiAgICAgIHNhdmVBc1N0cmluZzogY29sdW1uSW5mby5zYXZlQXNTdHJpbmcsXG4gICAgICBjb21wb25lbnQ6IGNvbHVtbkluZm8uY29tcG9uZW50LFxuICAgICAgb25DbGljazogY29sdW1uSW5mby5vbkNsaWNrLFxuICAgICAgb25SZXR1cm46IGNvbHVtbkluZm8ub25SZXR1cm4sXG4gICAgICBvbkZvY3VzT3V0OiBjb2x1bW5JbmZvLm9uRm9jdXNPdXQsXG4gICAgICBvbkNoYW5nZTogY29sdW1uSW5mby5vbkNoYW5nZSxcbiAgICAgIGFnZ3JlZ2F0ZTogY29sdW1uSW5mby5hZ2dyZWdhdGUsXG4gICAgICBmb3JtYXR0ZXI6IGNvbHVtbkluZm8uZm9ybWF0dGVyLFxuICAgICAgcGVybWlzc2lvbnM6IGNvbHVtbkluZm8ucGVybWlzc2lvbnMsXG4gICAgICBvcHRpb25MYWJlbDogY29sdW1uSW5mby5vcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvblZhbHVlOiBjb2x1bW5JbmZvLm9wdGlvblZhbHVlLFxuICAgICAgZHJvcERvd25Qcm9wOiBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCxcbiAgICAgIGhvdmVyRGF0YTogY29sdW1uSW5mby5ob3ZlckRhdGEsXG4gICAgICBzaG93VGltZTogY29sdW1uSW5mby5zaG93VGltZSxcbiAgICAgIHRpbWVPbmx5OiBjb2x1bW5JbmZvLnRpbWVPbmx5LFxuICAgICAgbG9va3VwQ29udHJvbDogY29sdW1uSW5mby5sb29rdXBDb250cm9sLFxuICAgICAgZGlzcGxheUZpZWxkOiBjb2x1bW5JbmZvLmRpc3BsYXlGaWVsZCxcbiAgICAgIGljb246IGNvbHVtbkluZm8uaWNvbixcbiAgICAgIGNvbG9yOiBjb2x1bW5JbmZvLmNvbG9yLFxuICAgICAgaWQ6IGNvbHVtbkluZm8uaWQsXG4gICAgICB2YWx1ZTogY29sdW1uSW5mby52YWx1ZSxcbiAgICAgIHZhbGlkYXRpb25zOiBjb2x1bW5JbmZvLnZhbGlkYXRpb25zLFxuICAgICAgdGV4dFR5cGU6Y29sdW1uSW5mby50ZXh0VHlwZVxuICAgIH07XG5cbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gQWRkaW5nIFJlcG9ydCBCdXR0b24gRnVuY3Rpb24gZm9yIEdyaWRcbiAgYWRkUmVwb3J0QnRuKGNvbHVtbkluZm86IElHcmlkUmVwb3J0QnRuKSB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLlJFUE9SVDtcbiAgICByZXR1cm4gY29sdW1uSW5mbztcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgaW5wdXQgZ3JpZCBjb2x1bW5cbiAgYWRkSW5wdXRDb2x1bW4oXG4gICAgZmlsdGVyQ29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgZmlsdGVyQ29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVCxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihmaWx0ZXJDb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihmaWx0ZXJDb2x1bW5JbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgbnVtZXJpYyBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZE51bWVyaWNDb2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IGNvbHVtbkluZm8/LmZpbHRlcj8udHlwZSA/IGNvbHVtbkluZm8uZmlsdGVyLnR5cGUgOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ0lOUFVULFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLk5VTUVSSUM7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBjYWxlbmRhciBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZENhbGVuZGFyQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICAgICk6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IGNvbHVtbkluZm8/LmZpbHRlcj8udHlwZSA/IGNvbHVtbkluZm8uZmlsdGVyLnR5cGUgOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVIsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBjb2x1bW5JbmZvLnR5cGUgPyBjb2x1bW5JbmZvLnR5cGUgOiBFR3JpZENvbHVtblR5cGUuREFURTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuICBzZXRDb25maWdEYXRhKGNvbmZpZzogYW55KSB7XG4gICAgbGV0IGNvbmZpZ0RhdGE6IGFueSA9IHt9O1xuICAgIGlmIChjb25maWc/LmRhdGEgJiYgT2JqZWN0LmtleXMoY29uZmlnPy5kYXRhKT8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uZmlnRGF0YSA9IGNvbmZpZztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHBhcmFtICYmIE9iamVjdC5rZXlzKHBhcmFtKT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbmZpZ0RhdGFbJ2RhdGEnXSA9IHBhcmFtO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnRGF0YTtcbiAgfVxuICAgICBcblxuICAvLyBhZGQgc2ltcGxlIGJvb2xlYW4gZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRCb29sZWFuQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIChjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQk9PTEVBTiksXG4gICAgICAgIChjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1gsXG4gICAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gLy8gYWRkIExvb2tVcCBjb2x1bW4gZm9yIEdyaWRcbiBhZGRMb29rVXBDb2x1bW4oY29sdW1uSW5mbzogSURpYWxvZ0NvbHVtbiwgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUpOiBJR3JpZENvbHVtbiB7XG4gIGlmIChzaG93RmlsdGVyKSB7XG4gICAgY29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQsIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbykgfTtcbiAgfVxuICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUO1xuICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG59XG5cbi8vIGFkZCBkaWFsb2cgY29sdW1uIGZvciBHcmlkXG4gYWRkRGlhbG9nQ29sdW1uKGNvbHVtbkluZm86IElEaWFsb2dDb2x1bW4sIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlKTogSUdyaWRDb2x1bW4ge1xuICBpZiAoc2hvd0ZpbHRlcikge1xuICAgIGNvbHVtbkluZm8uZmlsdGVyID0geyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQsIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbykgfTtcbiAgfVxuICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuRElBTE9HO1xuICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gfVxuXG4gIC8vIGFkZCBCdXR0b24gZm9yIGdyaWQgY29sdW1uXG4gIGFkZEJ1dHRvbkNvbHVtbihjb2x1bW5JbmZvOiBhZGRDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkFERF9CVVRUT047XG4gICAgaWYgKCFjb2x1bW5JbmZvLmZpZWxkKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpZWxkID0gY29sdW1uSW5mby52YWx1ZSA/IGNvbHVtbkluZm8udmFsdWUgOiBjb2x1bW5JbmZvLmljb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuICBcbiAgLy8gYWRkIEF1dG9Db21wbGV0ZSBmb3IgZ3JpZCBjb2x1bW5cbiAgYWRkQXV0b0NvbXBsZXRlKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQVVUT0NPTVBMRVRFO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIC8vIFNlYXJjaCBBdXRvQ29tcGxldGUgRGF0YSBmb3IgR3JpZFxuICBnZXRBdXRvQ29tcGxldGVEYXRhKFxuICAgIGNvbHVtbj86IGFueSxcbiAgICB1bmlxdWVLZXk/OiBzdHJpbmcsXG4gICAgZmlsdGVycz86IGFueVtdLFxuICAgIHNlYXJjaDogc3RyaW5nID0gJydcbiAgKTogYW55IHtcbiAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlXG4gICAgICAuZ2V0PGFueVtdLCBhbnk+KCcvRGF0YS9GZXRjaCcsIHsgdW5pcXVlS2V5OiB1bmlxdWVLZXksIGZpbHRlcnMgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgY29sdW1uLmRhdGEgPSB0aGlzLnNldERhdGFGaWVsZHMocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICB9LCh7IGVycm9yIH0pID0+IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlOmFueT0ge307XG4gICAgICAgIHJlc3BvbnNlWydyZWNvcmRzJ10gPSBbXTtcbiAgICAgICAgY29sdW1uLmRhdGEgPSB0aGlzLnNldERhdGFGaWVsZHMocmVzcG9uc2UucmVjb3Jkcyk7XG4gICAgICB9KTtcbiAgfVxuIGFzeW5jIGFkZEF1dG9Db21wbGV0ZVZhbHVlKHVuaXF1ZUtleTogSUF1dG9Db21wbGV0ZVNhdmUsIHZhbHVlOmFueSwgY29sdW1uOmFueSwgcm93OmFueSkge1xuICBsZXQgbmV3VmFsdWUgPSB7fVxuXG4gIGZvcih2YXIgaSA9MDtpPHVuaXF1ZUtleS52YWx1ZXMubGVuZ3RoOyBpKyspe1xuICAgIGlmKHVuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpPT1jb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCl8fHVuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZS50b0xvd2VyQ2FzZSgpPT1jb2x1bW4uZGlzcGxheUZpZWxkPy50b0xvd2VyQ2FzZSgpKXtcbiAgICAgIG5ld1ZhbHVlW3VuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZV09dmFsdWU7XG4gICAgXG4gICAgfWVsc2V7XG4gICAgICBuZXdWYWx1ZVt1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWVdPXRoaXMuZ2V0U29mdENvZGluZ1ZhbHVlKHVuaXF1ZUtleS52YWx1ZXNbaV0udmFsdWUsIHJvdylcbiAgICB9IFxuICB9XG5cblxuICAgIHRoaXMucmVxdWVzdFNlcnZpY2VcbiAgICAgIC5nZXQ8YW55W10sIGFueT4oJy9EYXRhL1NhdmUnLCB7IHVuaXF1ZUtleTp1bmlxdWVLZXkubmFtZSwgIHZhbHVlczogbmV3VmFsdWUgfSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgKHtlcnJvcn0pPT57XG4gICAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdzdWNjZXNzJztcbiAgICAgIH0pO1xuICB9XG4gIGdldFNvZnRDb2RpbmdWYWx1ZSh2YWx1ZSwgcm93KXtcbiAgICBsZXQgcmV0dXJuVmFsdWU7XG4gICAgaWYodmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygneycpJiZ2YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd9Jykpe1xuICAgICAgdmFsdWU9dmFsdWUucmVwbGFjZShcIntcIixcIlwiKS5yZXBsYWNlKFwifVwiLFwiXCIpO1xuICAgICAgbGV0IHJvd0tleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgbGV0IGtleSA9IHJvd0tleXM/LmZpbmQoKHgpID0+IHg/LnRvTG93ZXJDYXNlKCkgPT09IHZhbHVlPy50b1N0cmluZygpPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIHJldHVyblZhbHVlPXJvd1trZXldO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuVmFsdWU9dmFsdWVcbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBkcm9wZG93biBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZERyb3Bkb3duQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSxcbiAgICBkcm9wRG93blByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuRFJPUERPV047XG4gICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgOiAnbGFiZWwnO1xuICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgIDogJ3ZhbHVlJztcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EUk9QRE9XTixcbiAgICAgICAgZGF0YTpcbiAgICAgICAgICAhY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhICYmICFkcm9wRG93blByb3AgJiYgY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgOiBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGRyb3BEb3duUHJvcCkge1xuICAgICAgY29sdW1uSW5mby5kcm9wRG93blByb3AgPSBkcm9wRG93blByb3A7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBkcm9wRG93blByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBjb2x1bW5JbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICAgIH1cbiAgfVxuICAvLyBhZGQgTXVsdGlTZWxlY3REcm9wRG93biBncmlkIGNvbHVtblxuICBhZGRNdWx0aVNlbGVjdERyb3BEb3duQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSxcbiAgICBtdWx0aVNlbGVjdFByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA6ICdsYWJlbCc7XG4gICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgOiAndmFsdWUnO1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5NVUxUSVNFTEVDVDtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVCxcbiAgICAgICAgZGF0YTpcbiAgICAgICAgICAhY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhICYmICFtdWx0aVNlbGVjdFByb3AgJiYgY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgOiBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA6IFtdLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKG11bHRpU2VsZWN0UHJvcCkge1xuICAgICAgY29sdW1uSW5mby5kcm9wRG93blByb3AgPSBtdWx0aVNlbGVjdFByb3A7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gbXVsdGlTZWxlY3RQcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBtdWx0aVNlbGVjdFByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IG11bHRpU2VsZWN0UHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IG11bHRpU2VsZWN0UHJvcC5maWx0ZXJzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBjb2x1bW5JbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICAgIH1cbiAgfVxuXG4gIHNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm86IGFkZENvbHVtbikge1xuICAgIGlmIChjb2x1bW5JbmZvLmZpbHRlciAmJiBjb2x1bW5JbmZvLmZpbHRlci5zaG93RmlsdGVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHNldERyb3Bkb3duRGF0YShcbiAgICBjb2x1bW46IElHcmlkQ29sdW1uLFxuICAgIHVuaXF1ZUtleTogc3RyaW5nLFxuICAgIHZhbHVlUHJvcDogc3RyaW5nLFxuICAgIGxhYmVsUHJvcDogc3RyaW5nLFxuICAgIGZpbHRlcnM6IGFueVtdLFxuICAgIHJvdz86IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgKTogUHJvbWlzZTxhbnk+IHwgYW55IHtcbiAgICByZXR1cm4gdGhpcy5kcm9wZG93blNlcnZpY2VcbiAgICAgIC5zZXREcm9wRG93bkxpc3QodW5pcXVlS2V5LCB2YWx1ZVByb3AsIGxhYmVsUHJvcCwgZmlsdGVycylcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgcm93W2NvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfZGF0YSddID0gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbHVtbi5kYXRhID0gcmVzO1xuICAgICAgICAgIGlmIChjb2x1bW4uZmlsdGVyICYmIChjb2x1bW4uZmlsdGVyLnR5cGUgPT09ICdkcm9wZG93bicgfHwgY29sdW1uLmZpbHRlci50eXBlID09PSAnbXVsdGktc2VsZWN0JykpIHtcbiAgICAgICAgICAgIGNvbHVtbi5maWx0ZXIuZGF0YSA9IHJlcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbik7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIGNvbHVtbiB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGRGaWx0ZXJDb2x1bW4oZmlsdGVyQ29sdW1uSW5mbzogYWRkRmlsdGVyQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbnN0IGNvbHVtbjogYW55ID0ge1xuICAgICAgZmllbGQ6IGZpbHRlckNvbHVtbkluZm8uZmllbGQsXG4gICAgICBoZWFkZXI6IGZpbHRlckNvbHVtbkluZm8uaGVhZGVyLFxuICAgICAgZmlsdGVyOiB7IHR5cGU6IGZpbHRlckNvbHVtbkluZm8uZmlsdGVyIH0sXG4gICAgICBmaWx0ZXJpbmc6IGZpbHRlckNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgaGlkZGVuOiBmaWx0ZXJDb2x1bW5JbmZvLmhpZGRlbixcbiAgICAgIHN0eWxlOiBmaWx0ZXJDb2x1bW5JbmZvLnN0eWxlLFxuICAgICAgdGFibGVBbGlhczogZmlsdGVyQ29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgcGVybWlzc2lvbnM6IGZpbHRlckNvbHVtbkluZm8ucGVybWlzc2lvbnMsXG4gICAgfTtcblxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBhZGQgZGF0ZSBncmlkIGNvbHVtbiB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGREYXRlQ29sdW1uKGRhdGVDb2x1bW5JbmZvOiBhZGRGaWx0ZXJDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29uc3QgY29sdW1uOiBJR3JpZENvbHVtbiA9IHtcbiAgICAgIGZpZWxkOiBkYXRlQ29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogZGF0ZUNvbHVtbkluZm8uaGVhZGVyLFxuICAgICAgdHlwZTogZGF0ZUNvbHVtbkluZm8udHlwZSA/IGRhdGVDb2x1bW5JbmZvLnR5cGUgOiBFR3JpZENvbHVtblR5cGUuREFURSxcbiAgICAgIGZpbHRlcmluZzogZGF0ZUNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgZmlsdGVyOiB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUiB9LFxuICAgICAgZm9ybWF0OiBkYXRlQ29sdW1uSW5mby5mb3JtYXQsXG4gICAgICBzdHlsZTogZGF0ZUNvbHVtbkluZm8uc3R5bGUsXG4gICAgICB0YWJsZUFsaWFzOiBkYXRlQ29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgZGlzYWJsZWQ6IGRhdGVDb2x1bW5JbmZvLmRpc2FibGVkLFxuICAgICAgYWxsb3dTYXZlOiBkYXRlQ29sdW1uSW5mby5hbGxvd1NhdmUsXG4gICAgICBwZXJtaXNzaW9uczogZGF0ZUNvbHVtbkluZm8ucGVybWlzc2lvbnMsXG4gICAgICBjb21wb25lbnQ6IGRhdGVDb2x1bW5JbmZvLmNvbXBvbmVudCxcbiAgICAgIHNob3dUaW1lOiBkYXRlQ29sdW1uSW5mby5zaG93VGltZSxcbiAgICAgIHRpbWVPbmx5OiBkYXRlQ29sdW1uSW5mby50aW1lT25seSxcbiAgICAgIGRhdGE6IGRhdGVDb2x1bW5JbmZvLmRhdGEsXG4gICAgICBoaWRkZW46IGRhdGVDb2x1bW5JbmZvLmhpZGRlbixcbiAgICB9O1xuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICBzZXRMb29rVXBGaWx0ZXIoY29sdW1uOiBhbnksIGRpYWxvZ1NlcnZpY2U6IGFueSwgZ2xvYmFsRmlsdGVyTG9va3VwOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAoY29sdW1uLmxvb2t1cENvbnRyb2wpIHtcbiAgICAgIGxldCBkYXRhVmFsdWU6IGFueVtdID0gW107XG4gICAgICBsZXQgZGF0YUtleTogYW55W10gPSBbXTtcbiAgICAgIGxldCBkYXRhID0gY29sdW1uLmxvb2t1cENvbnRyb2w/LmRhdGE/LmRhdGE7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgICBpZiAoZGF0YSAmJiBrZXlzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGRhdGFba2V5XS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykpIHtcbiAgICAgICAgICAgIGRhdGFWYWx1ZS51bnNoaWZ0KGRhdGFba2V5XSk7XG4gICAgICAgICAgICBkYXRhS2V5LnVuc2hpZnQoa2V5KTtcbiAgICAgICAgICAgIGRhdGFba2V5XSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCByZWYgPSBkaWFsb2dTZXJ2aWNlLm9wZW4oXG4gICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLmNvbXBvbmVudCxcbiAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wuZGF0YVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IGRpYWxvZ1NlcnZpY2UuZGlhbG9nQ29tcG9uZW50UmVmTWFwLmdldChyZWYpO1xuICAgICAgY29uc3QgZHluYW1pY0NvbXBvbmVudCA9IGRpYWxvZ1JlZj8uaW5zdGFuY2UgYXMgRHluYW1pY0RpYWxvZ0NvbXBvbmVudDtcbiAgICAgIGNvbnN0IGFyaWFMYWJlbGxlZEJ5ID0gZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSgpO1xuICAgICAgZHluYW1pY0NvbXBvbmVudC5nZXRBcmlhTGFiZWxsZWRCeSA9ICgpID0+IGFyaWFMYWJlbGxlZEJ5O1xuICAgICAgcmVmLm9uQ2xvc2Uuc3Vic2NyaWJlKFxuICAgICAgICAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY29sdW1uLm9uUmV0dXJuKSB7XG4gICAgICAgICAgICBjb2x1bW4ub25SZXR1cm4ocmVzKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRhdGFLZXk/Lmxlbmd0aCA+IDAgJiYgZGF0YVZhbHVlPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBkYXRhS2V5LmZvckVhY2goKGtleSwga2V5SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgZGF0YVZhbHVlLmZvckVhY2goKHZhbHVlLCB2YWx1ZUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGtleUluZGV4ID09PSB2YWx1ZUluZGV4KSB7XG4gICAgICAgICAgICAgICAgICBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXMpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfZmlsdGVyJyk/LmZvY3VzKCk7XG4gICAgICAgICAgICBsZXQgZmllbGQgPSBjb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSB1dGlsaXRpZXMuc2V0RGlhbG9nUmVzcG9uc2UoXG4gICAgICAgICAgICAgIGNvbHVtbixcbiAgICAgICAgICAgICAgY29sdW1uPy5sb29rdXBDb250cm9sLFxuICAgICAgICAgICAgICByZXNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoZ2xvYmFsRmlsdGVyTG9va3VwKSB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4udmFsdWVUd28gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb2x1bW4udmFsdWUgPSB2YWx1ZT8udmFsdWVcbiAgICAgICAgICAgICAgICA/IHZhbHVlLnZhbHVlXG4gICAgICAgICAgICAgICAgOiByZXNbZmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgIGNvbnN0IGdsb2JhbEZpbHRlckxvb2t1cElucHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkKTtcbiAgICAgICAgICAgICAgZ2xvYmFsRmlsdGVyTG9va3VwSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNvbHVtbi5maWx0ZXJWYWx1ZSA9IHZhbHVlPy52YWx1ZVxuICAgICAgICAgICAgICAgID8gdmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICA6IHJlc1tmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICh7IGVycm9yIH06IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvLyBTZXQgSHlwZXJsaW5rIGZpZWxkIGFzIGEgcGFyYW0gVmFsdWVcbiAgc2V0RmllbGRBc0xpbmtQYXJhbShjb2x1bW5zOiBhbnksIGZpZWxkOiBzdHJpbmcsIHJlc3BvbnNlOiBhbnkpIHtcbiAgICBpZiAoXG4gICAgICBjb2x1bW5zICYmXG4gICAgICBjb2x1bW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgIGZpZWxkICYmXG4gICAgICByZXNwb25zZS5yZWNvcmRzICYmXG4gICAgICByZXNwb25zZS5yZWNvcmRzLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKS5mb3JFYWNoKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgb2JqID0gY29sdW1ucy5maW5kKCh4OiBhbnkpID0+IHguZmllbGQgPT09IGZpZWxkKTtcbiAgICAgICAgaWYgKG9iaiAmJiBvYmoucGFyYW1zKSB7XG4gICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iai5wYXJhbXMpO1xuICAgICAgICAgIGtleXMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChvYmoucGFyYW1zW2tleV0gJiYgb2JqLnBhcmFtc1trZXldLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSkge1xuICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBvYmoucGFyYW1zW2tleV1cbiAgICAgICAgICAgICAgICAucmVwbGFjZSgneycsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd9JywgJycpXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgIG9iai5wYXJhbXNba2V5XSA9IHJlc1t2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhc0FueUxpbmtDb2x1bW4oY29sdW1uczogSUdyaWRDb2x1bW5bXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjb2x1bW5zICYmXG4gICAgICBjb2x1bW5zLnNvbWUoXG4gICAgICAgICh4KSA9PlxuICAgICAgICAgIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICAgIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuSUZSQU1FIHx8XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHxcbiAgICAgICAgICAoeC5saW5rSWQgJiYgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHNldEh5cGVybGlua3MoZmV0Y2hSZXNwb25zZTogYW55LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdLCBsaW5rUGFyYW1zOiBhbnkgPSB7fSk6IGFueSB7XG4gICAgbGV0IHJlY29yZHM6IGFueSA9IFtdO1xuICAgIGxldCBkYXRhID1cbiAgICAgIGZldGNoUmVzcG9uc2UgJiYgZmV0Y2hSZXNwb25zZS5yZWNvcmRzLmxlbmd0aCA+IDBcbiAgICAgICAgPyB0aGlzLnNldERhdGFGaWVsZHMoZmV0Y2hSZXNwb25zZS5yZWNvcmRzKVxuICAgICAgICA6IFtdO1xuICAgIGxldCBuZXdSb3c6IGFueTtcblxuICAgIGlmKGRhdGE/Lmxlbmd0aCA+IDApe1xuICAgICAgcmV0dXJuIHRoaXMuaHlwZXJsaW5rU2VydmljZVxuICAgICAgLmFkZEh5cGVybGlua3MoY29sdW1ucywgZmV0Y2hSZXNwb25zZT8ucmVjb3JkcylcbiAgICAgIC50aGVuKChsaW5rUmVzcG9uc2VzOiBhbnkpID0+IHtcbiAgICAgICAgZGF0YS5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgIG5ld1JvdyA9IHsgLi4ucm93IH07XG4gICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2V0TGlua0lkID0gZmV0Y2hSZXNwb25zZT8ucmVjb3Jkc1swXVtjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaiddPy5saW5rSWQ7XG4gICAgICAgICAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICAgICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cpIHtcbiAgICAgICAgICAgICAgY29sLmZpZWxkID0gY29sLmZpZWxkID8gY29sLmZpZWxkIDogY29sLmhlYWRlcjtcbiAgICAgICAgICAgICAgbGV0IGZpZWxkID0gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdID0geyAuLi5jb2wgfTtcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaXNwbGF5VGV4dCA9IGNvbC5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICYmIHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV0gPyByb3dbY29sLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgICAgOiBjb2wuZGlzcGxheVRleHQ7XG4gICAgICAgICAgICAgIGxldCBjb2x1bW5EYXRhID0geyAuLi5jb2w/LmRhdGEgfTtcbiAgICAgICAgICAgICAgaWYgKGNvbHVtbkRhdGEgJiYgY29sdW1uRGF0YS5kYXRhKSB7XG4gICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaWFsb2dEYXRhID0gdXRpbGl0aWVzLmZpbmRLZXlzQW5kVmFsdWUoXG4gICAgICAgICAgICAgICAgICBjb2x1bW5EYXRhLmRhdGEsXG4gICAgICAgICAgICAgICAgICByb3dcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShsaW5rUmVzcG9uc2VzKSAmJiBsaW5rUmVzcG9uc2VzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGxpbmtSZXNwb25zZXMuZm9yRWFjaCgobGlua1Jlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XG4gICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuSUZSQU1FIHx8XG4gICAgICAgICAgICAgICAgICAgIGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUKSAmJlxuICAgICAgICAgICAgICAgICAgY29sLmxpbmtJZCAmJlxuICAgICAgICAgICAgICAgICAgKGNvbC5saW5rSWQgPT09IGxpbmtSZXNwb25zZS5saW5rSWQgfHxcbiAgICAgICAgICAgICAgICAgICAgc2V0TGlua0lkID09PSBsaW5rUmVzcG9uc2UubGlua0lkKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1LZXlzOiBzdHJpbmdbXSA9IGxpbmtQYXJhbXMgJiYgT2JqZWN0LmtleXMobGlua1BhcmFtcyk/Lmxlbmd0aCA/IE9iamVjdC5rZXlzKGxpbmtQYXJhbXMpIDogY29sLnBhcmFtcyA/IE9iamVjdC5rZXlzKGNvbC5wYXJhbXMpIDogW107XG4gICAgICAgICAgICAgICAgICBjb25zdCBsaW5rOiBhbnkgPSB1dGlsaXRpZXMuc2V0SHlwZXJsaW5rKFxuICAgICAgICAgICAgICAgICAgICBrZXlzLFxuICAgICAgICAgICAgICAgICAgICByb3csXG4gICAgICAgICAgICAgICAgICAgIGxpbmtSZXNwb25zZS51cmwsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtS2V5cyxcbiAgICAgICAgICAgICAgICAgICAgY29sLnBhcmFtc1xuICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgbGV0IGZpZWxkID0gY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXSA9IHsgLi4uY29sIH07XG4gICAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdLmh5cGVybGluayA9IGxpbms7XG4gICAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdLmRpc3BsYXlUZXh0ID0gY29sLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgICAgID8gcm93W2NvbC5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgICAgICAgICA6IHJvd1tjb2wuZmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZWNvcmRzLnB1c2gobmV3Um93KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZWNvcmRzO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgfSlcbiAgICB9XG4gICAgXG4gIH1cblxuICAvL3NldCByb3dzIHRvIHJlc3BvbnNlLnJlY29yZHNcbiAgYXN5bmMgc2V0Um93RGF0YShjb2x1bW5zOiBJR3JpZENvbHVtbltdLCByZXNwb25zZTogYW55KSB7XG4gICAgaWYocmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwKXtcbiAgICAgIGlmICh0aGlzLmhhc0FueUxpbmtDb2x1bW4oY29sdW1ucykpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0SHlwZXJsaW5rcyhyZXNwb25zZSwgY29sdW1ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVjb3JkcztcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSByZXR1cm4gW11cbiAgfVxuICAgXG5cbiAgLy8gYWRkIGdyaWQgZ2xvYmFsIGZpbHRlciB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgY29uc3QgY29sdW1uOiBJR3JpZFVwZGF0ZSA9IHtcbiAgICAgIGZpZWxkOiBncmlkVXBkYXRlSW5mby5maWVsZCxcbiAgICAgIGRpc3BsYXlUZXh0OiBncmlkVXBkYXRlSW5mby5kaXNwbGF5VGV4dCxcbiAgICAgIHR5cGU6IGdyaWRVcGRhdGVJbmZvLnR5cGUsXG4gICAgICBkYXRhOiBncmlkVXBkYXRlSW5mby5kYXRhLFxuICAgICAgdmFsdWU6IGdyaWRVcGRhdGVJbmZvLnZhbHVlLFxuICAgICAgdmFsdWVUd286IGdyaWRVcGRhdGVJbmZvLnZhbHVlVHdvLFxuICAgICAgbWF0Y2hNb2RlOiBncmlkVXBkYXRlSW5mby5tYXRjaE1vZGUsXG4gICAgICBvcGVyYXRvcjogZ3JpZFVwZGF0ZUluZm8ub3BlcmF0b3IsXG4gICAgICB0YWJsZUFsaWFzOiBncmlkVXBkYXRlSW5mby50YWJsZUFsaWFzLFxuICAgICAgb3B0aW9uTGFiZWw6IGdyaWRVcGRhdGVJbmZvLm9wdGlvbkxhYmVsLFxuICAgICAgb3B0aW9uVmFsdWU6IGdyaWRVcGRhdGVJbmZvLm9wdGlvblZhbHVlLFxuICAgICAgb25Gb2N1c091dDogZ3JpZFVwZGF0ZUluZm8ub25Gb2N1c091dCxcbiAgICAgIG9uUmV0dXJuOiBncmlkVXBkYXRlSW5mby5vblJldHVybixcbiAgICAgIGZpbHRlcmluZzogZ3JpZFVwZGF0ZUluZm8uZmlsdGVyaW5nLFxuICAgICAgY29sdW1uOiBncmlkVXBkYXRlSW5mby5jb2x1bW4sXG4gICAgICBkYXlSYW5nZTogZ3JpZFVwZGF0ZUluZm8uZGF5UmFuZ2UsXG4gICAgICBmcm9tRmllbGQ6IGdyaWRVcGRhdGVJbmZvLmZyb21GaWVsZCxcbiAgICAgIHRvRmllbGQ6IGdyaWRVcGRhdGVJbmZvLnRvRmllbGQsXG4gICAgICBsb29rdXBDb250cm9sOiBncmlkVXBkYXRlSW5mby5sb29rdXBDb250cm9sLFxuICAgICAgYWxsb3dTZWFyY2g6IGdyaWRVcGRhdGVJbmZvLmFsbG93U2VhcmNoLFxuICAgICAgZGlzYWJsZWQ6IGdyaWRVcGRhdGVJbmZvLmRpc2FibGVkLFxuICAgICAgaGlkZGVuOiBncmlkVXBkYXRlSW5mby5oaWRkZW4sXG4gICAgICBsYWJlbFRleHQ6IGdyaWRVcGRhdGVJbmZvLmxhYmVsVGV4dCxcbiAgICAgIHByZWZpeDogZ3JpZFVwZGF0ZUluZm8ucHJlZml4LFxuICAgICAgY29sb3I6IGdyaWRVcGRhdGVJbmZvLmNvbG9yLFxuICAgICAgZm9ybWF0OiBncmlkVXBkYXRlSW5mby5mb3JtYXQsXG4gICAgICBpbnRlcmZhY2VUeXBlOiAnYnVsa1VwZGF0ZSdcbiAgICB9O1xuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgaW5wdXQgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUlucHV0KGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBkcm9wZG93biBmaWVsZFxuICBhZGRHcmlkVXBkYXRlRHJvcGRvd24oXG4gICAgZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlLFxuICAgIGRyb3BEb3duUHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogYW55IHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRST1BET1dOO1xuICAgIGlmIChkcm9wRG93blByb3ApIHtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBkcm9wRG93blByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IGRyb3BEb3duUHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gZHJvcERvd25Qcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gZHJvcERvd25Qcm9wLmZpbHRlcnM7XG4gICAgICBsZXQgc29ydHMgPSBkcm9wRG93blByb3Auc29ydHM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGdyaWRVcGRhdGVJbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgc29ydHMsIFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgICB9XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgZHJvcGRvd24gZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUJvb2xlYW4oZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWDtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIG51bWVyaWMgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZU51bWVyaWMoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBjYWxlbmRhciBmaWVsZFxuICBhZGRHcmlkVXBkYXRlQ2FsZW5kYXIoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy9hZGQgZ3JpZCB1cGRhdGUgbG9va3VwIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVMb29rdXAoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKXtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVFxuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbylcbiAgfVxuICBcbiAgLy8gYWRkIGdyaWQgZ2xvYmFsIGZpbHRlciB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgY29uc3QgY29sdW1uOiBhZGRHbG9iYWxGaWx0ZXIgPSB7XG4gICAgICBmaWVsZDogZ2xvYmFsRmlsdGVySW5mby5maWVsZCxcbiAgICAgIGRpc3BsYXlUZXh0OiBnbG9iYWxGaWx0ZXJJbmZvLmRpc3BsYXlUZXh0LFxuICAgICAgZGlzcGxheVN0eWxlOmdsb2JhbEZpbHRlckluZm8uZGlzcGxheVN0eWxlLFxuICAgICAgdmFsaWRhdGlvbnM6IGdsb2JhbEZpbHRlckluZm8udmFsaWRhdGlvbnMsXG4gICAgICB0eXBlOiBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUsXG4gICAgICBkYXRhOiBnbG9iYWxGaWx0ZXJJbmZvLmRhdGEsXG4gICAgICB2YWx1ZTogZ2xvYmFsRmlsdGVySW5mby52YWx1ZSxcbiAgICAgIHZhbHVlVHdvOiBnbG9iYWxGaWx0ZXJJbmZvLnZhbHVlVHdvLFxuICAgICAgbWF0Y2hNb2RlOiBnbG9iYWxGaWx0ZXJJbmZvLm1hdGNoTW9kZSxcbiAgICAgIG9wZXJhdG9yOiBnbG9iYWxGaWx0ZXJJbmZvLm9wZXJhdG9yLFxuICAgICAgdGFibGVBbGlhczogZ2xvYmFsRmlsdGVySW5mby50YWJsZUFsaWFzLFxuICAgICAgb3B0aW9uTGFiZWw6IGdsb2JhbEZpbHRlckluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogZ2xvYmFsRmlsdGVySW5mby5vcHRpb25WYWx1ZSxcbiAgICAgICBvbkNsaWNrOmdsb2JhbEZpbHRlckluZm8ub25DbGljayxcbiAgICAgIG9uRm9jdXNPdXQ6IGdsb2JhbEZpbHRlckluZm8ub25Gb2N1c091dCxcbiAgICAgIG9uUmV0dXJuOiBnbG9iYWxGaWx0ZXJJbmZvLm9uUmV0dXJuLFxuICAgICAgZmlsdGVyaW5nOiBnbG9iYWxGaWx0ZXJJbmZvLmZpbHRlcmluZyxcbiAgICAgIGNvbHVtbjogZ2xvYmFsRmlsdGVySW5mby5jb2x1bW4sXG4gICAgICBkYXlSYW5nZTogZ2xvYmFsRmlsdGVySW5mby5kYXlSYW5nZSxcbiAgICAgIGZyb21GaWVsZDogZ2xvYmFsRmlsdGVySW5mby5mcm9tRmllbGQsXG4gICAgICB0b0ZpZWxkOiBnbG9iYWxGaWx0ZXJJbmZvLnRvRmllbGQsXG4gICAgICBsb29rdXBDb250cm9sOiBnbG9iYWxGaWx0ZXJJbmZvLmxvb2t1cENvbnRyb2wsXG4gICAgICBhbGxvd1NlYXJjaDogZ2xvYmFsRmlsdGVySW5mby5hbGxvd1NlYXJjaCxcbiAgICAgIGRpc2FibGVkOiBnbG9iYWxGaWx0ZXJJbmZvLmRpc2FibGVkLFxuICAgICAgaGlkZGVuOiBnbG9iYWxGaWx0ZXJJbmZvLmhpZGRlbixcbiAgICAgIGxhYmVsVGV4dDogZ2xvYmFsRmlsdGVySW5mby5sYWJlbFRleHQsXG4gICAgICBwcmVmaXg6IGdsb2JhbEZpbHRlckluZm8ucHJlZml4LFxuICAgICAgY29sb3I6IGdsb2JhbEZpbHRlckluZm8uY29sb3IsXG4gICAgICBmb3JtYXQ6IGdsb2JhbEZpbHRlckluZm8uZm9ybWF0LFxuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgaW5wdXQgZmlsdGVyXG4gIGFkZEdsb2JhbElucHV0RmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ2xvYmFsIGRyb3Bkb3duIGZpbHRlclxuICBhZGRHbG9iYWxEcm9wZG93bkZpbHRlcihcbiAgICBnbG9iYWxGaWx0ZXJJbmZvOiBJR2xvYmFsRmlsdGVyLFxuICAgIGRyb3BEb3duUHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogYW55IHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV047XG4gICAgaWYgKGRyb3BEb3duUHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IGRyb3BEb3duUHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBkcm9wRG93blByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IGRyb3BEb3duUHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ2xvYmFsRmlsdGVySW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIHNvcnRzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgICB9XG4gIH1cbiAgLy9hZGQgZ2xvYmFsIHJhZGlvIGJ1dHRvbiBmaWx0ZXJcbiAgYWRkR2xvYmFsU2VsZWN0QnV0dG9uRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5TRUxFQ1RCVVRUT047XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xuICB9XG4gIC8vIGFkZCBnbG9iYWwgTXVsdGlTZWxlY3QgZHJvcGRvd24gZmlsdGVyXG4gIGFkZEdsb2JhbE11bHRpU2VsZWN0RHJvcERvd25GaWx0ZXIoXG4gICAgZ2xvYmFsRmlsdGVySW5mbzogSUdsb2JhbEZpbHRlcixcbiAgICBtdWx0aVNlbGVjdFByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IGFueSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUO1xuICAgIGlmIChtdWx0aVNlbGVjdFByb3ApIHtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBtdWx0aVNlbGVjdFByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IG11bHRpU2VsZWN0UHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gbXVsdGlTZWxlY3RQcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gbXVsdGlTZWxlY3RQcm9wLmZpbHRlcnM7XG4gICAgICBsZXQgc29ydHMgPSBtdWx0aVNlbGVjdFByb3Auc29ydHM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGdsb2JhbEZpbHRlckluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICBzb3J0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RHJvcGRvd25EYXRhKFxuICAgIGZpZWxkSW5mbzogYW55LFxuICAgIHVuaXF1ZUtleTogc3RyaW5nLFxuICAgIHZhbHVlUHJvcDogc3RyaW5nLFxuICAgIGxhYmVsUHJvcDogc3RyaW5nLFxuICAgIGZpbHRlcnM6IGFueSxcbiAgICBzb3J0czogSUdyaWRTb3J0W10gPSBbXSwgXG4gICAgZ3JpZFVwZGF0ZUZpZWxkOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25TZXJ2aWNlXG4gICAgICAuc2V0RHJvcERvd25MaXN0KHVuaXF1ZUtleSwgdmFsdWVQcm9wLCBsYWJlbFByb3AsIGZpbHRlcnMsIHNvcnRzKVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGZpZWxkSW5mby5kYXRhID0gcmVzO1xuICAgICAgICByZXR1cm4gZ3JpZFVwZGF0ZUZpZWxkID8gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZmllbGRJbmZvKSA6IHRoaXMuYWRkR2xvYmFsRmlsdGVyKGZpZWxkSW5mbyk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiBncmlkVXBkYXRlRmllbGQgPyB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChmaWVsZEluZm8pIDogdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZmllbGRJbmZvKTtcbiAgICAgIH0pO1xuICB9XG4gIFxuICAvLyBhZGQgZ2xvYmFsIGZpbHRlciBTcGFjZSBGaWVsZFxuICBhZGRHbG9iYWxGaWx0ZXJTcGFjZUZpZWxkKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5TUEFDRVI7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdsb2JhbCBib29sZWFuIGZpbHRlclxuICBhZGRHbG9iYWxCb29sZWFuRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgUmFuZ2UgRmlsdGVyIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZFJhbmdlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRTtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgUmFuZ2UgRmlsdGVyIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbERhdGVSYW5nZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuREFURV9SQU5HRTtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cbiAgXG4gIC8vIGFkZCBOdW1lcmljIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxOdW1lcmljUmFuZ2VGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNfUkFOR0U7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG4gIC8vIGFkZCBOdW1lcmljIGlucHV0IGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbE51bWVyaWNJbnB1dChnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ0lOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBMb29rVXAgRmllbGQgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsTG9va3VwRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgIC8vYWRkIGNhbGVuZGFyIGZpbHRlciBmb3IgZ2xvYmFsIGZpbHRlclxuICAgYWRkR2xvYmFsRGF0ZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpe1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZT1HcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVI7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgc2V0RGF0YUZpZWxkcyhyZXNwb25zZTogYW55LCBkYXRhS2V5OiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgbGV0IGRhdGE6IGFueSA9IFtdO1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXNwb25zZS5tYXAoKHg6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoeCA/PyB7fSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IE9iamVjdC5rZXlzKHgpPy5yZWR1Y2UoXG4gICAgICAgICAgICAocHJldiwgY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJlbnQudG9Mb3dlckNhc2UoKV06IHhbY3VycmVudF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkYXRhS2V5ICYmXG4gICAgICAgICAgICBkYXRhS2V5Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFPYmplY3Qua2V5cyhyZXN1bHQpPy5pbmNsdWRlcyhkYXRhS2V5KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmVzdWx0W2RhdGFLZXldID0gaW5kZXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YS5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHNldENvbHVtbkZpZWxkcyhjb2x1bW5zOiBhbnlbXSkge1xuICAgIGxldCBjb2x1bW46IGFueSA9IFtdO1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29sdW1ucy5tYXAoKGNvbDogYW55KSA9PiB7XG4gICAgICAgIGNvbHVtbi5wdXNoKHsgLi4uY29sLCBmaWVsZDogY29sPy5maWVsZD8udG9Mb3dlckNhc2UoKSB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG4gIH1cblxuICAvLyBjaGFuZ2UgbGlua0lkIGluIGVkaXQgbW9kZSwgaWYgY2hhbmdlTGluayBpcyB0cnVlIHRoZW4gaXQgY2hhbmdlIHRoZSBlZGl0ZWQgcm93IGh5cGVybGluayB2YWx1ZVxuICBzZXRMaW5rSWQoXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXSxcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIGxpbmtJZDogc3RyaW5nLFxuICAgIHJlY29yZDogYW55LFxuICAgIHVzZXJzOiBhbnksXG4gICAgcGFyYW1zOiBhbnkgPSBudWxsLFxuICAgIGNoYW5nZUxpbms6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBhbnkge1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY29sdW1uLmxpbmtJZCA9IGxpbmtJZDtcbiAgICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBjb2x1bW4ucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRIeXBlcmxpbmtzKHsgcmVjb3JkczogW3JlY29yZF0gfSwgY29sdW1ucykudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChjaGFuZ2VMaW5rKSB7XG4gICAgICAgIGRlbGV0ZSByZXNbMF1bZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ107XG4gICAgICAgIGxldCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAoaTogYW55KSA9PiBpW2ZpZWxkLnRvTG93ZXJDYXNlKCldID09PSByZWNvcmRbZmllbGQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGlmICh1c2Vyc1tpbmRleF1bZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgICAgICB1c2Vyc1tpbmRleF1bZmllbGQgKyAnX29iaiddLmh5cGVybGluayA9XG4gICAgICAgICAgICAgIHJlc1swXVtmaWVsZCArICdfb2JqJ10uaHlwZXJsaW5rO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGdyaWQgZGF0YSBhbmQgc2V0IHNlbGVjdGVkIHJvdyBiYXNlZCBvbiBzZWxlY3Rpb24gdmFsdWVcbiAgc2V0RGF0YVdpdGhTZWxlY3RlZFJvdyhyZWNvcmRzOiBhbnksIGNvbmZpZ0RhdGE6IGFueSkge1xuICAgIGlmICgoY29uZmlnRGF0YT8udmFsdWVQcm9wIHx8IGNvbmZpZ0RhdGE/LmxhYmVsUHJvcCkgJiYgY29uZmlnRGF0YS5kYXRhLnNlbGVjdGlvbikge1xuICAgICAgcmVjb3Jkcy5mb3JFYWNoKChyZWNvcmQ6IGFueSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhyZWNvcmQpPy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09IGNvbmZpZ0RhdGEubGFiZWxQcm9wID8gY29uZmlnRGF0YS5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCkgOiBjb25maWdEYXRhLnZhbHVlUHJvcD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjb25maWdEYXRhLmRhdGEudmFsdWUgJiZcbiAgICAgICAgICAgICAgcmVjb3JkW2tleV0gPT09IGNvbmZpZ0RhdGEuZGF0YS52YWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJlY29yZFsnaGlnaGxpZ2h0Um93J10gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZWNvcmRba2V5XT8udG9TdHJpbmcoKSA9PT0gY29uZmlnRGF0YS5kYXRhLnNlbGVjdGlvbj8udG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICByZWNvcmRbJ2hpZ2hsaWdodFJvdyddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH1cblxuICBzZXRUYWJsZUFsaWFzKGZpZWxkOiBzdHJpbmcsIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pIHtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgKHg6IGFueSkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmaWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcblxuICAgICAgaWYgKGNvbHVtbiAhPSBudWxsICYmIGNvbHVtbi50YWJsZUFsaWFzICYmIGNvbHVtbi50YWJsZUFsaWFzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi50YWJsZUFsaWFzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHNldEdyaWRQcm9wVmFsdWVzKFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW10sXG4gICAgcHJvcHM6IElHcmlkUHJvcFtdLFxuICAgIGZpbHRlcj86IElHcmlkUHJvcEZpbHRlcixcbiAgICByZWNvcmRzPzogYW55W11cbiAgKSB7XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwICYmIHByb3BzICYmIHByb3BzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBpc01hdGNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIgJiYgZmlsdGVyLmZpZWxkICYmIHJlY29yZHMgJiYgcmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlzTWF0Y2hlZCA9IHJlY29yZHMuc29tZShcbiAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgIHV0aWxpdGllcy5vYmpDb252ZXJ0VG9Mb3dlcih4KVtmaWx0ZXIuZmllbGQudG9Mb3dlckNhc2UoKV0gPT09XG4gICAgICAgICAgICBmaWx0ZXIudmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHByb3BzLm1hcCgocHJvcDogSUdyaWRQcm9wKSA9PiB7XG4gICAgICAgIGxldCBjb2w6IGFueSA9IHt9O1xuICAgICAgICBpZiAocHJvcC5maWVsZCAmJiAhaXNNYXRjaGVkICYmICFmaWx0ZXI/LmZpZWxkKSB7XG4gICAgICAgICAgY29sID0gY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01hdGNoZWQpIHtcbiAgICAgICAgICBpZiAocHJvcC5maWVsZCkge1xuICAgICAgICAgICAgY29sID0gY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICAgIGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sID0gY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICAgIGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmlsdGVyPy5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbCAmJiBjb2wuaGFzT3duUHJvcGVydHkocHJvcC5uYW1lKSkge1xuICAgICAgICAgIGNvbFtwcm9wLm5hbWVdID0gcHJvcC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IGdyaWQgcm93IHByb3BWYWx1ZXNcbiAgc2V0R3JpZFJvd1Byb3BWYWx1ZShyb3c6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHByb3BzOiBJR3JpZFJvd1Byb3BbXSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdKSB7XG4gICAgbGV0IHNldExpbmtJZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxldCBsaW5rSWRSZXM6IGFueTtcbiAgICBwcm9wcz8uZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgc2V0TGlua0lkID0gZmFsc2U7XG4gICAgICBpZiAocHJvcC5wcm9wTmFtZSAmJiAhcHJvcC5sYWJlbCAmJiAocHJvcC5wcm9wVmFsdWUgfHwgcHJvcC5wcm9wVmFsdWUgPT09IGZhbHNlIHx8IHByb3AucHJvcFZhbHVlID09PSAnJykpIHtcbiAgICAgICAgaWYgKHByb3AuZmllbGQgJiYgcm93KSB7XG4gICAgICAgICAgbGV0IGZpZWxkTmFtZSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5Py50b0xvd2VyQ2FzZSgpID09PSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgbGV0IGZpZWxkTmFtZU9iaiA9IGZpZWxkTmFtZT8uaW5jbHVkZXMoJ19vYmonKSA/IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSA6IGZpZWxkTmFtZT8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICBpZiAoIWZpZWxkTmFtZSkge1xuICAgICAgICAgICAgY29uc3Qgcm93T2JqID0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICBmaWVsZE5hbWVPYmogPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXk6IGFueSkgPT4gKGtleT8udG9Mb3dlckNhc2UoKSA9PT0gcm93T2JqKSAmJiAocm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cgfHwgcm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHwgcm93W3Jvd09ial0/LnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LKSk7XG4gICAgICAgICAgICBpZiAoZmllbGROYW1lT2JqKSB7XG4gICAgICAgICAgICAgIGZpZWxkTmFtZSA9IGZpZWxkTmFtZU9iajtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGZpZWxkTmFtZU9iaikpIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZU9ial0gPSB7IC4uLnJvd1tmaWVsZE5hbWVPYmpdLCB0ZXh0OiByb3dbZmllbGROYW1lXSwgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W2ZpZWxkTmFtZU9ial0gPSB7IHRleHQ6IHJvd1tmaWVsZE5hbWVdLCBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2x1bW5zPy5zb21lKChjb2x1bW4pID0+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wRmllbGQgPSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgY29uc3QgcHJvcEZpZWxkT2JqID0gcHJvcEZpZWxkICsgJ19vYmonO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGZpZWxkTmFtZU9iaikpIHtcbiAgICAgICAgICAgICAgcm93W3Byb3BGaWVsZE9ial0gPSB7IC4uLnJvd1twcm9wRmllbGRPYmpdLCB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1twcm9wRmllbGRPYmpdID0geyB0ZXh0OiByb3dbcHJvcC5maWVsZF0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkRFTEVURUJUTikge1xuICAgICAgICAgICAgcm93W3Byb3AuYWN0aW9uXSA9IHByb3AucHJvcFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChwcm9wPy5hY3Rpb24gPT09IEVHcmlkUm93QWN0aW9uLkVESVRCVE4pIHtcbiAgICAgICAgICAgIHJvd1twcm9wLmFjdGlvbl0gPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocHJvcC5sYWJlbCkge1xuICAgICAgICBjb25zdCBwcm9wTmFtZSA9IHByb3AubGFiZWw/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgIGlmIChwcm9wLnByb3BOYW1lID09PSBFR3JpZFJvd1Byb3BOYW1lLlJFUE9SVE5BTUUpIHtcbiAgICAgICAgICByb3dbcHJvcE5hbWVdID0geyAuLi5yb3dbcHJvcE5hbWVdLCByZXBvcnROYW1lOiBwcm9wPy5wcm9wVmFsdWUgfTtcbiAgICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BOYW1lID09PSBFR3JpZFJvd1Byb3BOYW1lLlJFUE9SVFBBUkFNICYmIHByb3A/LnBhcmFtcykge1xuICAgICAgICAgIHJvd1twcm9wTmFtZV0gPSB7IC4uLnJvd1twcm9wTmFtZV0sIHJlcG9ydFBhcmFtOiBwcm9wLnBhcmFtcyB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByb3AucHJvcE5hbWUgJiYgcHJvcC5wcm9wTmFtZSA9PT0gRUdyaWRSb3dQcm9wTmFtZS5MSU5LSUQpIHtcbiAgICAgICAgc2V0TGlua0lkID0gdHJ1ZTtcbiAgICAgICAgbGlua0lkUmVzID0gdGhpcy5zZXRIeXBlcmxpbmtzKHsgcmVjb3JkczogW3Jvd10gfSwgY29sdW1ucywgcHJvcC5wYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghc2V0TGlua0lkKSB7XG4gICAgICByZXR1cm4gcm93O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbGlua0lkUmVzO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlbW92ZSB0aGUgcm93QWN0aW9ucyBmcm9tIHRoZSByZWNvcmRzXG4gIHJlbW92ZVJvd0FjdGlvbnMocmVjb3Jkcykge1xuICAgIGlmIChyZWNvcmRzPy5sZW5ndGggPiAwKSB7XG4gICAgICByZWNvcmRzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBpZiAocm93LnJvd0FjdGlvbikge1xuICAgICAgICAgIGRlbGV0ZSByb3dbJ3Jvd0FjdGlvbiddO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH1cblxuICBleHBvcnRFeGNlbChyb3dzRGF0YSwgY29sdW1ucywgcmVwb3J0TmFtZTogc3RyaW5nID0gRUdyaWRFeGNlbC5FWFBPUlQpIHtcbiAgICBpbXBvcnQoJ3hsc3gnKS50aGVuKCh4bHN4KSA9PiB7XG4gICAgICBjb25zdCB3b3Jrc2hlZXQ6IFdvcmtTaGVldCA9IHhsc3gudXRpbHMuanNvbl90b19zaGVldChyb3dzRGF0YSk7XG4gICAgICBsZXQgcm93SW5kZXggPSAwO1xuICAgICAgcm93c0RhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGNvbEluZGV4ID0gMDtcbiAgICAgICAgY29sdW1ucz8uZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjZWxsVmFsdWU6IHN0cmluZyA9IHJvd1tjb2wuaGVhZGVyXTtcbiAgICAgICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LICYmIGNlbGxWYWx1ZSAmJiBjZWxsVmFsdWUubGVuZ3RoID4gMCAmJiBjZWxsVmFsdWUuaW5kZXhPZignfCcpID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbGlua1RleHQ6IHN0cmluZyA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpWzBdO1xuICAgICAgICAgICAgbGV0IGxpbmtVcmw6IHN0cmluZyA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpWzFdO1xuICAgICAgICAgICAgaWYgKGxpbmtVcmwgJiYgIWxpbmtVcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgICAgICAgIGlmICghbGlua1VybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBsaW5rVXJsID0gJy8nICsgbGlua1VybDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsaW5rVXJsID1cbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgK1xuICAgICAgICAgICAgICAgICcvLycgK1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArXG4gICAgICAgICAgICAgICAgbGlua1VybDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNlbGxBZGRyZXNzID0geGxzeC51dGlscy5lbmNvZGVfY2VsbCh7XG4gICAgICAgICAgICAgIGM6IGNvbEluZGV4LFxuICAgICAgICAgICAgICByOiByb3dJbmRleCArIDEsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgd29ya3NoZWV0W2NlbGxBZGRyZXNzXSA9IHtcbiAgICAgICAgICAgICAgZjogYD1IWVBFUkxJTksoXCIke2xpbmtVcmx9XCIsIFwiJHtsaW5rVGV4dH1cIilgLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29sSW5kZXgrKztcbiAgICAgICAgfSk7XG4gICAgICAgIHJvd0luZGV4Kys7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHdvcmtib29rID0ge1xuICAgICAgICBTaGVldHM6IHsgc2hlZXQxOiB3b3Jrc2hlZXQgfSxcbiAgICAgICAgU2hlZXROYW1lczogWydzaGVldDEnXSxcbiAgICAgIH07XG4gICAgICBjb25zdCBleGNlbEJ1ZmZlcjogYW55ID0geGxzeC53cml0ZSh3b3JrYm9vaywge1xuICAgICAgICBib29rVHlwZTogJ3hsc3gnLFxuICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnNhdmVBc0V4Y2VsRmlsZShleGNlbEJ1ZmZlciwgcmVwb3J0TmFtZSk7XG4gICAgfSk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKHN1Yi1tZXRob2QpXG4gICAqL1xuICBzYXZlQXNFeGNlbEZpbGUoYnVmZmVyOiBhbnksIHJlcG9ydE5hbWUpOiB2b2lkIHtcbiAgICBsZXQgRVhDRUxfVFlQRSA9XG4gICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG4gICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6IEVYQ0VMX1RZUEUgfSk7XG4gICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCByZXBvcnROYW1lKTtcbiAgfVxuXG4gIHNhdmVBc1RleHRGaWxlKHJvd3NJbmZvOiBhbnksIHJlcG9ydE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGZpZWxkc1RvRGlzcGxheSA9IE9iamVjdC5rZXlzKHJvd3NJbmZvWzBdKTtcbiAgICBjb25zdCBoZWFkZXJSb3cgPSBmaWVsZHNUb0Rpc3BsYXkuam9pbignXFx0Jyk7XG4gICAgY29uc3QgZm9ybWF0dGVkUm93cyA9IHJvd3NJbmZvLm1hcCgocm93KSA9PiB7XG4gICAgICByZXR1cm4gZmllbGRzVG9EaXNwbGF5Lm1hcCgoZmllbGQpID0+IHJvd1tmaWVsZF0pLmpvaW4oJ1xcdCcpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJvd3NEYXRhID0gW2hlYWRlclJvdywgLi4uZm9ybWF0dGVkUm93c10uam9pbignXFxuJyk7XG4gICAgY29uc3QgZGF0YSA9IG5ldyBCbG9iKFtyb3dzRGF0YV0sIHsgdHlwZTogJ3RleHQnIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgcmVwb3J0TmFtZSk7XG4gIH1cblxuICBzYXZlRGF0YUFzQ3N2KHJvd3NJbmZvOiBhbnksIHJlcG9ydE5hbWU6IHN0cmluZykge1xuICAgIGlmICghcm93c0luZm8gfHwgIXJvd3NJbmZvLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZXBhcmF0b3IgPSAnLCc7XG4gICAgY29uc3QgY29sdW1ucyA9IE9iamVjdC5rZXlzKHJvd3NJbmZvWzBdKTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93c0luZm9bMF0pLmZpbHRlcihrID0+IHtcbiAgICAgIGlmIChjb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnMuaW5jbHVkZXMoayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjc3ZDb250ZW50ID1cbiAgICAgIGtleXMuam9pbihzZXBhcmF0b3IpICtcbiAgICAgICdcXG4nICtcbiAgICAgIHJvd3NJbmZvLm1hcChyb3cgPT4ge1xuICAgICAgICByZXR1cm4ga2V5cy5tYXAoayA9PiB7XG4gICAgICAgICAgbGV0IGNlbGwgPSByb3dba10gPT09IG51bGwgfHwgcm93W2tdID09PSB1bmRlZmluZWQgPyAnJyA6IHJvd1trXTtcbiAgICAgICAgICBjZWxsID0gY2VsbCBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgID8gY2VsbC50b0xvY2FsZVN0cmluZygpXG4gICAgICAgICAgICA6IGNlbGwudG9TdHJpbmcoKS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpO1xuICAgICAgICAgIGlmIChjZWxsLnNlYXJjaCgvKFwifCx8XFxuKS9nKSA+PSAwKSB7XG4gICAgICAgICAgICBjZWxsID0gYFwiJHtjZWxsfVwiYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNlbGw7XG4gICAgICAgIH0pLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgIHRoaXMuc2F2ZUFzQ3N2RmlsZShjc3ZDb250ZW50LCByZXBvcnROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gQ1NWIChzdWItbWV0aG9kKVxuICAgKi9cblxuICBzYXZlQXNDc3ZGaWxlKGNzdkNvbnRlbnQ6IHN0cmluZywgcmVwb3J0TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgcmVwb3J0TmFtZSArICcuY3N2Jyk7XG4gIH1cblxuICBhZGROZXdSb3coZ3JpZE5hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgbGV0IGFkZEJ1dHRvbjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ2xvYmFsLWFkZC1idG4nICsgZ3JpZE5hbWUpO1xuICAgIGlmIChhZGRCdXR0b24gJiYgYWRkQnV0dG9uLmxlbmd0aCA+IDApIHtcbiAgICAgIGFkZEJ1dHRvblswXT8uY2xpY2soKTtcbiAgICB9XG4gIH1cbn0iXX0=