@churchillliving/se-ui-toolkit 6.54.237 → 6.54.239
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.
|
@@ -1070,8 +1070,10 @@ export class GridService {
|
|
|
1070
1070
|
return response.records;
|
|
1071
1071
|
}
|
|
1072
1072
|
}
|
|
1073
|
-
else
|
|
1074
|
-
|
|
1073
|
+
else {
|
|
1074
|
+
response.records = [...response.records, response.records - 1];
|
|
1075
|
+
return response.records;
|
|
1076
|
+
}
|
|
1075
1077
|
}
|
|
1076
1078
|
// add grid global filter with built-in filter
|
|
1077
1079
|
addGridUpdateField(gridUpdateInfo) {
|
|
@@ -1654,4 +1656,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
|
|
|
1654
1656
|
providedIn: 'root',
|
|
1655
1657
|
}]
|
|
1656
1658
|
}], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i2.HyperlinkService }, { type: i3.DropdownService }, { type: i4.AlertService }, { type: i5.RequestService }, { type: i6.ActivatedRoute }]; } });
|
|
1657
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBSXJELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBSXJCLGVBQWUsRUFLZixjQUFjLEVBS2QsY0FBYyxFQUVkLGNBQWMsRUFFZCxVQUFVLEVBQ1YsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFJOUIsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUtqRCxPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEtBQUssT0FBTyxNQUFNLDZCQUE2QixDQUFBOzs7Ozs7OztBQUl0RCxNQUFNLE9BQU8sV0FBVztJQVF0QixZQUNTLFFBQWtCLEVBQ2pCLGdCQUFrQyxFQUNsQyxlQUFnQyxFQUNoQyxZQUEwQixFQUMxQixjQUE4QixFQUM5QixLQUFxQjtRQUx0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQWJ2QixrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUNsQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5Qix1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0IscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBQ2pDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDcEIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2pDLFlBQU8sR0FBRyxDQUFDLENBQUM7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QUFVLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVELFNBQVMsQ0FBQyxXQUFtQixFQUFFO1FBQzdCLElBQUksU0FBUyxHQUFRLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsQ0FBQztRQUNsRixJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNyQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7U0FDdkI7SUFDSCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7aUlBbDNEVSxXQUFXO3FJQUFYLFdBQVcsY0FGVixNQUFNOzsyRkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMYXp5TG9hZEV2ZW50IH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgSUF1dG9Db21wbGV0ZVNhdmUsIElEcm9wRG93blJlcXVlc3QgfSBmcm9tICcuLi9tb2RlbHMvZm9ybS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBFR3JpZFNvcnREaXJlY3Rpb24sXG4gIEdyaWRGaWx0ZXJDb250cm9sVHlwZSxcbiAgSUdsb2JhbEZpbHRlcixcbiAgSUdyaWRGaWx0ZXIsXG4gIElHcmlkU29ydCxcbiAgRUdyaWRDb2x1bW5UeXBlLFxuICBhZGRDb2x1bW4sXG4gIGFkZEZpbHRlckNvbHVtbixcbiAgYWRkR2xvYmFsRmlsdGVyLFxuICBJR3JpZENvbHVtbixcbiAgRUdyaWRWYWxpZGF0b3IsXG4gIElHcmlkUHJvcCxcbiAgSUdyaWRQcm9wRmlsdGVyLFxuICBJR3JpZFJvd1Byb3AsXG4gIElHcmlkUmVwb3J0QnRuLFxuICBFR3JpZFJvd0FjdGlvbixcbiAgSURpYWxvZ0NvbHVtbixcbiAgRUdyaWRGb3JtYXR0ZXIsXG4gIElHcmlkVXBkYXRlLFxuICBFR3JpZEV4Y2VsLFxuICBFR3JpZFJvd1Byb3BOYW1lLFxufSBmcm9tICcuLi9tb2RlbHMvZ3JpZC5tb2RlbCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuL2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgRHJvcGRvd25TZXJ2aWNlIH0gZnJvbSAnLi9kcm9wZG93bi5zZXJ2aWNlJztcbmltcG9ydCB7IEh5cGVybGlua1NlcnZpY2UgfSBmcm9tICcuL2h5cGVybGluay5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIHV0aWxpdGllcyBmcm9tICcuL3V0aWxpdGllcy5zZXJ2aWNlJztcbmltcG9ydCB7IFJlcXVlc3RTZXJ2aWNlIH0gZnJvbSAnLi9yZXF1ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbXBvbmVudCB9IGZyb20gJ3ByaW1lbmcvZHluYW1pY2RpYWxvZyc7XG5pbXBvcnQgeyBXb3JrU2hlZXQgfSBmcm9tICd4bHN4JztcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCAqIGFzIEV4Y2VsSlMgZnJvbSAnZXhjZWxqcy9kaXN0L2V4Y2VsanMubWluLmpzJ1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBudW1iZXJPZkNhbGxzOiBudW1iZXIgPSAwO1xuICB1c2VyU2VhcmNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgc29mdENhY2hpbmdGaWx0ZXJzOiBhbnkgPSB7fTtcbiAgYXBwbHlGaWx0ZXJFdmVudDogYm9vbGVhbiA9IHRydWU7XG4gIHJvd1VwZGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY29sdW1uRm9jdXNlZE91dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGNvdW50ZXIgPSAxO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZGF0ZXBpcGU6IERhdGVQaXBlLFxuICAgIHByaXZhdGUgaHlwZXJsaW5rU2VydmljZTogSHlwZXJsaW5rU2VydmljZSxcbiAgICBwcml2YXRlIGRyb3Bkb3duU2VydmljZTogRHJvcGRvd25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZXF1ZXN0U2VydmljZTogUmVxdWVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICkge31cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50XG4gICAqIFJlY2VpdmVzIGxhenkgZXZlbnQgYW5kIHJldHVybnMgYWZ0ZXIgcHJvcGVyIG1hcHBpbmdcbiAgICovXG4gIGdldEdyaWRGaWx0ZXJzKGV2ZW50OiBMYXp5TG9hZEV2ZW50LCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgY29uc3QgZmlsdGVycyA9IHRoaXMubWFwRmlsdGVycyhldmVudCwgY29sdW1ucyk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlTXVsdGlGaWx0ZXJGaWVsZChmaWx0ZXJzKTtcbiAgfVxuICBnZXROZXh0SWQoKTogc3RyaW5nIHtcbiAgICBcbiAgICByZXR1cm4gYHN0YXRpYy0ke3RoaXMuY291bnRlcisrfWA7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIGZpbHRlcnNcbiAgICogUmVjZWl2ZXMgZmlsdGVycyBhbmQgcmV0dXJucyBhcnJheSBhZnRlciByZW1vdmluZyBkdXBsaWNhdGVzXG4gICAqIGFuZCBjcmVhdGluZyBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzIGZvciBzYW1lIGZpbHRlcnNcbiAgICovXG4gIGhhbmRsZU11bHRpRmlsdGVyRmllbGQoZmlsdGVyczogSUdyaWRGaWx0ZXJbXSk6IElHcmlkRmlsdGVyW10ge1xuICAgIHJldHVybiBmaWx0ZXJzXG4gICAgICAubWFwKCh4LCBpLCBhcnIpID0+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+IGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0ga2V5Py50b0xvd2VyQ2FzZSgpKVxuICAgICAgICBpZighbWF0Y2hLZXkpe1xuICAgICAgICAgIGRlbGV0ZSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIHJvdztcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRDb2x1bW4oY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTikge1xuICAgICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICAgIDogJ2xhYmVsJztcbiAgICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgICA6ICd2YWx1ZSc7XG4gICAgfSBlbHNlIGlmIChjb2x1bW5JbmZvLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0cpIHtcbiAgICAgIGlmICghY29sdW1uSW5mby5maWx0ZXJpbmcgJiYgIWNvbHVtbkluZm8uZmlsdGVyKSB7XG4gICAgICAgIGNvbHVtbkluZm8uZmlsdGVyaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY29sdW1uSW5mby5wYXJhbXMgJiYgIWNvbHVtbkluZm8uZGF0YSkge1xuICAgICAgICBjb2x1bW5JbmZvLmRhdGEgPSBjb2x1bW5JbmZvLnBhcmFtcztcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29sdW1uOiBJR3JpZENvbHVtbiA9IHtcbiAgICAgIGFsbG93VG9nZ2xlOiBjb2x1bW5JbmZvLmFsbG93VG9nZ2xlIHx8IGZhbHNlLFxuICAgICAgYWxsb3dTZWFyY2g6IGNvbHVtbkluZm8uYWxsb3dTZWFyY2gsXG4gICAgICBhbGxvd0F1dG9Db21wbGV0ZVNhdmU6IGNvbHVtbkluZm8uYWxsb3dBdXRvQ29tcGxldGVTYXZlLFxuICAgICAgdW5pcXVlS2V5OiBjb2x1bW5JbmZvLnVuaXF1ZUtleSxcbiAgICAgIGZpZWxkOiBjb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBjb2x1bW5JbmZvLmhlYWRlcixcbiAgICAgIHN0eWxlOiBjb2x1bW5JbmZvLnN0eWxlLFxuICAgICAgdHlwZTogY29sdW1uSW5mby50eXBlLFxuICAgICAgZm9ybWF0OiBjb2x1bW5JbmZvLmZvcm1hdCxcbiAgICAgIGRhdGE6IGNvbHVtbkluZm8uZGF0YSxcbiAgICAgIGZpbHRlclZhbHVlOmNvbHVtbkluZm8uZmlsdGVyVmFsdWUsXG4gICAgICBmaWx0ZXJpbmc6IGNvbHVtbkluZm8uZmlsdGVyaW5nLFxuICAgICAgaGlkZGVuOiBjb2x1bW5JbmZvLmhpZGRlbixcbiAgICAgIHNob3c6IGNvbHVtbkluZm8uc2hvdyxcbiAgICAgIHNvcnRpbmc6IGNvbHVtbkluZm8uc29ydGluZyxcbiAgICAgIGZpbHRlcjogY29sdW1uSW5mby5maWx0ZXIsXG4gICAgICBoeXBlcmxpbms6IGNvbHVtbkluZm8uaHlwZXJsaW5rLFxuICAgICAgdGFibGVBbGlhczogY29sdW1uSW5mby50YWJsZUFsaWFzLFxuICAgICAgbGlua0lkOiBjb2x1bW5JbmZvLmxpbmtJZCxcbiAgICAgIG1pbnV0ZXNJbnRlcnZhbDogY29sdW1uSW5mby5taW51dGVzSW50ZXJ2YWwsXG4gICAgICBwYXJhbXM6IGNvbHVtbkluZm8ucGFyYW1zLFxuICAgICAgc2hvd09wdGlvbjogY29sdW1uSW5mby5zaG93T3B0aW9uLFxuICAgICAgZGlzcGxheVRleHQ6IGNvbHVtbkluZm8uZGlzcGxheVRleHQsXG4gICAgICB0YXJnZXQ6IGNvbHVtbkluZm8udGFyZ2V0LFxuICAgICAgZGlzYWJsZWQ6IGNvbHVtbkluZm8uZGlzYWJsZWQsXG4gICAgICBhbGxvd1NhdmU6IGNvbHVtbkluZm8uYWxsb3dTYXZlLFxuICAgICAgYWxsb3dFZGl0OiBjb2x1bW5JbmZvLmFsbG93RWRpdCxcbiAgICAgIGVkaXRhYmxlOiBjb2x1bW5JbmZvLmVkaXRhYmxlLFxuICAgICAgZWRpdExpbms6IGNvbHVtbkluZm8uZWRpdExpbmssXG4gICAgICBzYXZlQXNTdHJpbmc6IGNvbHVtbkluZm8uc2F2ZUFzU3RyaW5nLFxuICAgICAgY29tcG9uZW50OiBjb2x1bW5JbmZvLmNvbXBvbmVudCxcbiAgICAgIG9uQ2xpY2s6IGNvbHVtbkluZm8ub25DbGljayxcbiAgICAgIG9uUmV0dXJuOiBjb2x1bW5JbmZvLm9uUmV0dXJuLFxuICAgICAgb25Gb2N1c091dDogY29sdW1uSW5mby5vbkZvY3VzT3V0LFxuICAgICAgb25DaGFuZ2U6IGNvbHVtbkluZm8ub25DaGFuZ2UsXG4gICAgICBhZ2dyZWdhdGU6IGNvbHVtbkluZm8uYWdncmVnYXRlLFxuICAgICAgZm9ybWF0dGVyOiBjb2x1bW5JbmZvLmZvcm1hdHRlcixcbiAgICAgIHBlcm1pc3Npb25zOiBjb2x1bW5JbmZvLnBlcm1pc3Npb25zLFxuICAgICAgb3B0aW9uTGFiZWw6IGNvbHVtbkluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogY29sdW1uSW5mby5vcHRpb25WYWx1ZSxcbiAgICAgIGRyb3BEb3duUHJvcDogY29sdW1uSW5mby5kcm9wRG93blByb3AsXG4gICAgICBob3ZlckRhdGE6IGNvbHVtbkluZm8uaG92ZXJEYXRhLFxuICAgICAgc2hvd1RpbWU6IGNvbHVtbkluZm8uc2hvd1RpbWUsXG4gICAgICB0aW1lT25seTogY29sdW1uSW5mby50aW1lT25seSxcbiAgICAgIGxvb2t1cENvbnRyb2w6IGNvbHVtbkluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGRpc3BsYXlGaWVsZDogY29sdW1uSW5mby5kaXNwbGF5RmllbGQsXG4gICAgICBpY29uOiBjb2x1bW5JbmZvLmljb24sXG4gICAgICBjb2xvcjogY29sdW1uSW5mby5jb2xvcixcbiAgICAgIGlkOiBjb2x1bW5JbmZvLmlkLFxuICAgICAgdmFsdWU6IGNvbHVtbkluZm8udmFsdWUsXG4gICAgICB2YWxpZGF0aW9uczogY29sdW1uSW5mby52YWxpZGF0aW9ucyxcbiAgICAgIHRleHRUeXBlOmNvbHVtbkluZm8udGV4dFR5cGUsXG4gICAgICBjb2x1bW5XaWR0aDogY29sdW1uSW5mby5jb2x1bW5XaWR0aCxcbiAgICAgIG9wZW5Jbk5ld1RhYjogY29sdW1uSW5mby5vcGVuSW5OZXdUYWIsXG4gICAgfTtcblxuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBBZGRpbmcgUmVwb3J0IEJ1dHRvbiBGdW5jdGlvbiBmb3IgR3JpZFxuICBhZGRSZXBvcnRCdG4oY29sdW1uSW5mbzogSUdyaWRSZXBvcnRCdG4pIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuUkVQT1JUO1xuICAgIHJldHVybiBjb2x1bW5JbmZvO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBpbnB1dCBncmlkIGNvbHVtblxuICBhZGRJbnB1dENvbHVtbihcbiAgICBmaWx0ZXJDb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBmaWx0ZXJDb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVULFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGZpbHRlckNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGZpbHRlckNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gYWRkIHNpbXBsZSBudW1lcmljIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkTnVtZXJpY0NvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogY29sdW1uSW5mbz8uZmlsdGVyPy50eXBlID8gY29sdW1uSW5mby5maWx0ZXIudHlwZSA6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuTlVNRVJJQztcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGNhbGVuZGFyIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkQ2FsZW5kYXJDb2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXG4gICAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogY29sdW1uSW5mbz8uZmlsdGVyPy50eXBlID8gY29sdW1uSW5mby5maWx0ZXIudHlwZSA6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUixcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbHVtbkluZm8udHlwZSA9IGNvbHVtbkluZm8udHlwZSA/IGNvbHVtbkluZm8udHlwZSA6IEVHcmlkQ29sdW1uVHlwZS5EQVRFO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIHNldENvbmZpZ0RhdGEoY29uZmlnOiBhbnkpIHtcbiAgICBsZXQgY29uZmlnRGF0YTogYW55ID0ge307XG4gICAgaWYgKGNvbmZpZz8uZGF0YSAmJiBPYmplY3Qua2V5cyhjb25maWc/LmRhdGEpPy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25maWdEYXRhID0gY29uZmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW06IGFueSkgPT4ge1xuICAgICAgICBpZiAocGFyYW0gJiYgT2JqZWN0LmtleXMocGFyYW0pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uZmlnRGF0YVsnZGF0YSddID0gcGFyYW07XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBjb25maWdEYXRhO1xuICB9XG4gICAgIFxuXG4gIC8vIGFkZCBzaW1wbGUgYm9vbGVhbiBncmlkIGNvbHVtbiB3aXRob3V0XG4gIGFkZEJvb2xlYW5Db2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlXG4gICk6IElHcmlkQ29sdW1uIHtcbiAgICBpZiAoc2hvd0ZpbHRlcikge1xuICAgICAgKGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5CT09MRUFOKSxcbiAgICAgICAgKGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICAgIHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWCxcbiAgICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAvLyBhZGQgTG9va1VwIGNvbHVtbiBmb3IgR3JpZFxuIGFkZExvb2tVcENvbHVtbihjb2x1bW5JbmZvOiBJRGlhbG9nQ29sdW1uLCBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSk6IElHcmlkQ29sdW1uIHtcbiAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVCwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xuICB9XG4gIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQ7XG4gIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbn1cblxuLy8gYWRkIGRpYWxvZyBjb2x1bW4gZm9yIEdyaWRcbiBhZGREaWFsb2dDb2x1bW4oY29sdW1uSW5mbzogSURpYWxvZ0NvbHVtbiwgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUpOiBJR3JpZENvbHVtbiB7XG4gIGlmIChzaG93RmlsdGVyKSB7XG4gICAgY29sdW1uSW5mby5maWx0ZXIgPSB7IHR5cGU6IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVCwgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSB9O1xuICB9XG4gIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5ESUFMT0c7XG4gIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiB9XG5cbiAgLy8gYWRkIEJ1dHRvbiBmb3IgZ3JpZCBjb2x1bW5cbiAgYWRkQnV0dG9uQ29sdW1uKGNvbHVtbkluZm86IGFkZENvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuQUREX0JVVFRPTjtcbiAgICBpZiAoIWNvbHVtbkluZm8uZmllbGQpIHtcbiAgICAgIGNvbHVtbkluZm8uZmllbGQgPSBjb2x1bW5JbmZvLnZhbHVlID8gY29sdW1uSW5mby52YWx1ZSA6IGNvbHVtbkluZm8uaWNvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG4gIFxuICAvLyBhZGQgQXV0b0NvbXBsZXRlIGZvciBncmlkIGNvbHVtblxuICBhZGRBdXRvQ29tcGxldGUoY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5BVVRPQ09NUExFVEU7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgLy8gU2VhcmNoIEF1dG9Db21wbGV0ZSBEYXRhIGZvciBHcmlkXG4gIGdldEF1dG9Db21wbGV0ZURhdGEoXG4gICAgY29sdW1uPzogYW55LFxuICAgIHVuaXF1ZUtleT86IHN0cmluZyxcbiAgICBmaWx0ZXJzPzogYW55W10sXG4gICAgc2VhcmNoOiBzdHJpbmcgPSAnJ1xuICApOiBhbnkge1xuICAgIHRoaXMucmVxdWVzdFNlcnZpY2VcbiAgICAgIC5nZXQ8YW55W10sIGFueT4oJy9EYXRhL0ZldGNoJywgeyB1bmlxdWVLZXk6IHVuaXF1ZUtleSwgZmlsdGVycyB9KVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICBjb2x1bW4uZGF0YSA9IHRoaXMuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKTtcbiAgICAgIH0sKHsgZXJyb3IgfSkgPT4ge1xuICAgICAgICBsZXQgcmVzcG9uc2U6YW55PSB7fTtcbiAgICAgICAgcmVzcG9uc2VbJ3JlY29yZHMnXSA9IFtdO1xuICAgICAgICBjb2x1bW4uZGF0YSA9IHRoaXMuc2V0RGF0YUZpZWxkcyhyZXNwb25zZS5yZWNvcmRzKTtcbiAgICAgIH0pO1xuICB9XG4gYXN5bmMgYWRkQXV0b0NvbXBsZXRlVmFsdWUodW5pcXVlS2V5OiBJQXV0b0NvbXBsZXRlU2F2ZSwgdmFsdWU6YW55LCBjb2x1bW46YW55LCByb3c6YW55KSB7XG4gIGxldCBuZXdWYWx1ZSA9IHt9XG5cbiAgZm9yKHZhciBpID0wO2k8dW5pcXVlS2V5LnZhbHVlcy5sZW5ndGg7IGkrKyl7XG4gICAgaWYodW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lLnRvTG93ZXJDYXNlKCk9PWNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKXx8dW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lLnRvTG93ZXJDYXNlKCk9PWNvbHVtbi5kaXNwbGF5RmllbGQ/LnRvTG93ZXJDYXNlKCkpe1xuICAgICAgbmV3VmFsdWVbdW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lXT12YWx1ZTtcbiAgICBcbiAgICB9ZWxzZXtcbiAgICAgIG5ld1ZhbHVlW3VuaXF1ZUtleS52YWx1ZXNbaV0ubmFtZV09dGhpcy5nZXRTb2Z0Q29kaW5nVmFsdWUodW5pcXVlS2V5LnZhbHVlc1tpXS52YWx1ZSwgcm93KVxuICAgIH0gXG4gIH1cblxuXG4gICAgdGhpcy5yZXF1ZXN0U2VydmljZVxuICAgICAgLmdldDxhbnlbXSwgYW55PignL0RhdGEvU2F2ZScsIHsgdW5pcXVlS2V5OnVuaXF1ZUtleS5uYW1lLCAgdmFsdWVzOiBuZXdWYWx1ZSB9KVxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAoe2Vycm9yfSk9PntcbiAgICAgICAgICByZXR1cm4gZXJyb3JcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ3N1Y2Nlc3MnO1xuICAgICAgfSk7XG4gIH1cbiAgZ2V0U29mdENvZGluZ1ZhbHVlKHZhbHVlLCByb3cpe1xuICAgIGxldCByZXR1cm5WYWx1ZTtcbiAgICBpZih2YWx1ZS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykmJnZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ30nKSl7XG4gICAgICB2YWx1ZT12YWx1ZS5yZXBsYWNlKFwie1wiLFwiXCIpLnJlcGxhY2UoXCJ9XCIsXCJcIik7XG4gICAgICBsZXQgcm93S2V5cyA9IE9iamVjdC5rZXlzKHJvdyk7XG4gICAgICBsZXQga2V5ID0gcm93S2V5cz8uZmluZCgoeCkgPT4geD8udG9Mb3dlckNhc2UoKSA9PT0gdmFsdWU/LnRvU3RyaW5nKCk/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgcmV0dXJuVmFsdWU9cm93W2tleV07XG4gICAgfWVsc2V7XG4gICAgICByZXR1cm5WYWx1ZT12YWx1ZVxuICAgIH1cbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGRyb3Bkb3duIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkRHJvcGRvd25Db2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlLFxuICAgIGRyb3BEb3duUHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5EUk9QRE9XTjtcbiAgICBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsID0gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA6ICdsYWJlbCc7XG4gICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgOiAndmFsdWUnO1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRST1BET1dOLFxuICAgICAgICBkYXRhOlxuICAgICAgICAgICFjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGEgJiYgIWRyb3BEb3duUHJvcCAmJiBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA6IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XG4gICAgICBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCA9IGRyb3BEb3duUHJvcDtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBkcm9wRG93blByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IGRyb3BEb3duUHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gZHJvcERvd25Qcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gZHJvcERvd25Qcm9wLmZpbHRlcnM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbHVtbkluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVyc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gICAgfVxuICB9XG4gIC8vIGFkZCBNdWx0aVNlbGVjdERyb3BEb3duIGdyaWQgY29sdW1uXG4gIGFkZE11bHRpU2VsZWN0RHJvcERvd25Db2x1bW4oXG4gICAgY29sdW1uSW5mbzogYWRkQ29sdW1uLFxuICAgIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlLFxuICAgIG11bHRpU2VsZWN0UHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPSBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgIDogJ2xhYmVsJztcbiAgICBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID0gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA6ICd2YWx1ZSc7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLk1VTFRJU0VMRUNUO1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHtcbiAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNULFxuICAgICAgICBkYXRhOlxuICAgICAgICAgICFjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGEgJiYgIW11bHRpU2VsZWN0UHJvcCAmJiBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgID8gY29sdW1uSW5mby5kYXRhXG4gICAgICAgICAgICA6IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvPy5maWx0ZXI/LmRhdGFcbiAgICAgICAgICAgIDogW10sXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAobXVsdGlTZWxlY3RQcm9wKSB7XG4gICAgICBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCA9IG11bHRpU2VsZWN0UHJvcDtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBtdWx0aVNlbGVjdFByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IG11bHRpU2VsZWN0UHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gbXVsdGlTZWxlY3RQcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gbXVsdGlTZWxlY3RQcm9wLmZpbHRlcnM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGNvbHVtbkluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVyc1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gICAgfVxuICB9XG5cbiAgc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbzogYWRkQ29sdW1uKSB7XG4gICAgaWYgKGNvbHVtbkluZm8uZmlsdGVyICYmIGNvbHVtbkluZm8uZmlsdGVyLnNob3dGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgc2V0RHJvcGRvd25EYXRhKFxuICAgIGNvbHVtbjogSUdyaWRDb2x1bW4sXG4gICAgdW5pcXVlS2V5OiBzdHJpbmcsXG4gICAgdmFsdWVQcm9wOiBzdHJpbmcsXG4gICAgbGFiZWxQcm9wOiBzdHJpbmcsXG4gICAgZmlsdGVyczogYW55W10sXG4gICAgcm93PzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuICApOiBQcm9taXNlPGFueT4gfCBhbnkge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duU2VydmljZVxuICAgICAgLnNldERyb3BEb3duTGlzdCh1bmlxdWVLZXksIHZhbHVlUHJvcCwgbGFiZWxQcm9wLCBmaWx0ZXJzKVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmIChyb3cpIHtcbiAgICAgICAgICByb3dbY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19kYXRhJ10gPSByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29sdW1uLmRhdGEgPSByZXM7XG4gICAgICAgICAgaWYgKGNvbHVtbi5maWx0ZXIgJiYgKGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ2Ryb3Bkb3duJyB8fCBjb2x1bW4uZmlsdGVyLnR5cGUgPT09ICdtdWx0aS1zZWxlY3QnKSkge1xuICAgICAgICAgICAgY29sdW1uLmZpbHRlci5kYXRhID0gcmVzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFwaUVycm9yKGVycm9yKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgY29sdW1uIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZEZpbHRlckNvbHVtbihmaWx0ZXJDb2x1bW5JbmZvOiBhZGRGaWx0ZXJDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29uc3QgY29sdW1uOiBhbnkgPSB7XG4gICAgICBmaWVsZDogZmlsdGVyQ29sdW1uSW5mby5maWVsZCxcbiAgICAgIGhlYWRlcjogZmlsdGVyQ29sdW1uSW5mby5oZWFkZXIsXG4gICAgICBmaWx0ZXI6IHsgdHlwZTogZmlsdGVyQ29sdW1uSW5mby5maWx0ZXIgfSxcbiAgICAgIGZpbHRlcmluZzogZmlsdGVyQ29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBoaWRkZW46IGZpbHRlckNvbHVtbkluZm8uaGlkZGVuLFxuICAgICAgc3R5bGU6IGZpbHRlckNvbHVtbkluZm8uc3R5bGUsXG4gICAgICB0YWJsZUFsaWFzOiBmaWx0ZXJDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBwZXJtaXNzaW9uczogZmlsdGVyQ29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBkYXRlIGdyaWQgY29sdW1uIHdpdGggYnVpbHQtaW4gZmlsdGVyXG4gIGFkZERhdGVDb2x1bW4oZGF0ZUNvbHVtbkluZm86IGFkZEZpbHRlckNvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb25zdCBjb2x1bW46IElHcmlkQ29sdW1uID0ge1xuICAgICAgZmllbGQ6IGRhdGVDb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBkYXRlQ29sdW1uSW5mby5oZWFkZXIsXG4gICAgICB0eXBlOiBkYXRlQ29sdW1uSW5mby50eXBlID8gZGF0ZUNvbHVtbkluZm8udHlwZSA6IEVHcmlkQ29sdW1uVHlwZS5EQVRFLFxuICAgICAgZmlsdGVyaW5nOiBkYXRlQ29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBmaWx0ZXI6IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSIH0sXG4gICAgICBmb3JtYXQ6IGRhdGVDb2x1bW5JbmZvLmZvcm1hdCxcbiAgICAgIHN0eWxlOiBkYXRlQ29sdW1uSW5mby5zdHlsZSxcbiAgICAgIHRhYmxlQWxpYXM6IGRhdGVDb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBkaXNhYmxlZDogZGF0ZUNvbHVtbkluZm8uZGlzYWJsZWQsXG4gICAgICBhbGxvd1NhdmU6IGRhdGVDb2x1bW5JbmZvLmFsbG93U2F2ZSxcbiAgICAgIHBlcm1pc3Npb25zOiBkYXRlQ29sdW1uSW5mby5wZXJtaXNzaW9ucyxcbiAgICAgIGNvbXBvbmVudDogZGF0ZUNvbHVtbkluZm8uY29tcG9uZW50LFxuICAgICAgc2hvd1RpbWU6IGRhdGVDb2x1bW5JbmZvLnNob3dUaW1lLFxuICAgICAgdGltZU9ubHk6IGRhdGVDb2x1bW5JbmZvLnRpbWVPbmx5LFxuICAgICAgZGF0YTogZGF0ZUNvbHVtbkluZm8uZGF0YSxcbiAgICAgIGhpZGRlbjogZGF0ZUNvbHVtbkluZm8uaGlkZGVuLFxuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIHNldExvb2tVcEZpbHRlcihjb2x1bW46IGFueSwgZGlhbG9nU2VydmljZTogYW55LCBnbG9iYWxGaWx0ZXJMb29rdXA6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmIChjb2x1bW4ubG9va3VwQ29udHJvbCkge1xuICAgICAgbGV0IGRhdGFWYWx1ZTogYW55W10gPSBbXTtcbiAgICAgIGxldCBkYXRhS2V5OiBhbnlbXSA9IFtdO1xuICAgICAgbGV0IGRhdGEgPSBjb2x1bW4ubG9va3VwQ29udHJvbD8uZGF0YT8uZGF0YTtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICAgIGlmIChkYXRhICYmIGtleXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoZGF0YVtrZXldLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSkge1xuICAgICAgICAgICAgZGF0YVZhbHVlLnVuc2hpZnQoZGF0YVtrZXldKTtcbiAgICAgICAgICAgIGRhdGFLZXkudW5zaGlmdChrZXkpO1xuICAgICAgICAgICAgZGF0YVtrZXldID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlZiA9IGRpYWxvZ1NlcnZpY2Uub3BlbihcbiAgICAgICAgY29sdW1uLmxvb2t1cENvbnRyb2wuY29tcG9uZW50LFxuICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbC5kYXRhXG4gICAgICApO1xuICAgICAgY29uc3QgZGlhbG9nUmVmID0gZGlhbG9nU2VydmljZS5kaWFsb2dDb21wb25lbnRSZWZNYXAuZ2V0KHJlZik7XG4gICAgICBjb25zdCBkeW5hbWljQ29tcG9uZW50ID0gZGlhbG9nUmVmPy5pbnN0YW5jZSBhcyBEeW5hbWljRGlhbG9nQ29tcG9uZW50O1xuICAgICAgY29uc3QgYXJpYUxhYmVsbGVkQnkgPSBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5KCk7XG4gICAgICBkeW5hbWljQ29tcG9uZW50LmdldEFyaWFMYWJlbGxlZEJ5ID0gKCkgPT4gYXJpYUxhYmVsbGVkQnk7XG4gICAgICByZWYub25DbG9zZS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChjb2x1bW4ub25SZXR1cm4pIHtcbiAgICAgICAgICAgIGNvbHVtbi5vblJldHVybihyZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGF0YUtleT8ubGVuZ3RoID4gMCAmJiBkYXRhVmFsdWU/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGRhdGFLZXkuZm9yRWFjaCgoa2V5LCBrZXlJbmRleCkgPT4ge1xuICAgICAgICAgICAgICBkYXRhVmFsdWUuZm9yRWFjaCgodmFsdWUsIHZhbHVlSW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5SW5kZXggPT09IHZhbHVlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19maWx0ZXInKT8uZm9jdXMoKTtcbiAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbHVtbi5maWVsZDtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHV0aWxpdGllcy5zZXREaWFsb2dSZXNwb25zZShcbiAgICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgICBjb2x1bW4/Lmxvb2t1cENvbnRyb2wsXG4gICAgICAgICAgICAgIHJlc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChnbG9iYWxGaWx0ZXJMb29rdXApIHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiAodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGNvbHVtbi52YWx1ZVR3byA9IHZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbHVtbi52YWx1ZSA9IHZhbHVlPy52YWx1ZVxuICAgICAgICAgICAgICAgID8gdmFsdWUudmFsdWVcbiAgICAgICAgICAgICAgICA6IHJlc1tmaWVsZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgICAgY29uc3QgZ2xvYmFsRmlsdGVyTG9va3VwSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb2x1bW4uZmllbGQpO1xuICAgICAgICAgICAgICBnbG9iYWxGaWx0ZXJMb29rdXBJbnB1dC5mb2N1cygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29sdW1uLmZpbHRlclZhbHVlID0gdmFsdWU/LnZhbHVlXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgICAgIDogcmVzW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKHsgZXJyb3IgfTogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNldCBIeXBlcmxpbmsgZmllbGQgYXMgYSBwYXJhbSBWYWx1ZVxuICBzZXRGaWVsZEFzTGlua1BhcmFtKGNvbHVtbnM6IGFueSwgZmllbGQ6IHN0cmluZywgcmVzcG9uc2U6IGFueSkge1xuICAgIGlmIChcbiAgICAgIGNvbHVtbnMgJiZcbiAgICAgIGNvbHVtbnMubGVuZ3RoID4gMCAmJlxuICAgICAgZmllbGQgJiZcbiAgICAgIHJlc3BvbnNlLnJlY29yZHMgJiZcbiAgICAgIHJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpLmZvckVhY2goKHJlczogYW55KSA9PiB7XG4gICAgICAgIGxldCBvYmogPSBjb2x1bW5zLmZpbmQoKHg6IGFueSkgPT4geC5maWVsZCA9PT0gZmllbGQpO1xuICAgICAgICBpZiAob2JqICYmIG9iai5wYXJhbXMpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqLnBhcmFtcyk7XG4gICAgICAgICAga2V5cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKG9iai5wYXJhbXNba2V5XSAmJiBvYmoucGFyYW1zW2tleV0udG9TdHJpbmcoKS5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG9iai5wYXJhbXNba2V5XVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCd7JywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ30nLCAnJylcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgb2JqLnBhcmFtc1trZXldID0gcmVzW3ZhbHVlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgaGFzQW55TGlua0NvbHVtbihjb2x1bW5zOiBJR3JpZENvbHVtbltdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvbHVtbnMgJiZcbiAgICAgIGNvbHVtbnMuc29tZShcbiAgICAgICAgKHgpID0+XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5MSU5LIHx8XG4gICAgICAgICAgeC50eXBlID09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHxcbiAgICAgICAgICB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyB8fFxuICAgICAgICAgICh4LmxpbmtJZCAmJiB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgc2V0SHlwZXJsaW5rcyhmZXRjaFJlc3BvbnNlOiBhbnksIGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIGxpbmtQYXJhbXM6IGFueSA9IHt9KTogYW55IHtcbiAgICBsZXQgcmVjb3JkczogYW55ID0gW107XG4gICAgbGV0IGRhdGEgPVxuICAgICAgZmV0Y2hSZXNwb25zZSAmJiBmZXRjaFJlc3BvbnNlLnJlY29yZHMubGVuZ3RoID4gMFxuICAgICAgICA/IHRoaXMuc2V0RGF0YUZpZWxkcyhmZXRjaFJlc3BvbnNlLnJlY29yZHMpXG4gICAgICAgIDogW107XG4gICAgbGV0IG5ld1JvdzogYW55O1xuXG4gICAgaWYoZGF0YT8ubGVuZ3RoID4gMCl7XG4gICAgICByZXR1cm4gdGhpcy5oeXBlcmxpbmtTZXJ2aWNlXG4gICAgICAuYWRkSHlwZXJsaW5rcyhjb2x1bW5zLCBmZXRjaFJlc3BvbnNlPy5yZWNvcmRzKVxuICAgICAgLnRoZW4oKGxpbmtSZXNwb25zZXM6IGFueSkgPT4ge1xuICAgICAgICBkYXRhLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgbmV3Um93ID0geyAuLi5yb3cgfTtcbiAgICAgICAgICBjb2x1bW5zLmZvckVhY2goKGNvbDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZXRMaW5rSWQgPSBmZXRjaFJlc3BvbnNlPy5yZWNvcmRzWzBdW2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJ10/LmxpbmtJZDtcbiAgICAgICAgICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgICAgICAgIGlmIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRykge1xuICAgICAgICAgICAgICBjb2wuZmllbGQgPSBjb2wuZmllbGQgPyBjb2wuZmllbGQgOiBjb2wuaGVhZGVyO1xuICAgICAgICAgICAgICBsZXQgZmllbGQgPSBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0gPSB7IC4uLmNvbCB9O1xuICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdLmRpc3BsYXlUZXh0ID0gY29sLmRpc3BsYXlUZXh0XG4gICAgICAgICAgICAgICAgJiYgcm93W2NvbC5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXSA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgICA6IGNvbC5kaXNwbGF5VGV4dDtcbiAgICAgICAgICAgICAgbGV0IGNvbHVtbkRhdGEgPSB7IC4uLmNvbD8uZGF0YSB9O1xuICAgICAgICAgICAgICBpZiAoY29sdW1uRGF0YSAmJiBjb2x1bW5EYXRhLmRhdGEpIHtcbiAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdLmRpYWxvZ0RhdGEgPSB1dGlsaXRpZXMuZmluZEtleXNBbmRWYWx1ZShcbiAgICAgICAgICAgICAgICAgIGNvbHVtbkRhdGEuZGF0YSxcbiAgICAgICAgICAgICAgICAgIHJvd1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpbmtSZXNwb25zZXMpICYmIGxpbmtSZXNwb25zZXM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgbGlua1Jlc3BvbnNlcy5mb3JFYWNoKChsaW5rUmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIChjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgfHxcbiAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5JRlJBTUUgfHxcbiAgICAgICAgICAgICAgICAgICAgY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MT09LVVBfSU5QVVQpICYmXG4gICAgICAgICAgICAgICAgICBjb2wubGlua0lkICYmXG4gICAgICAgICAgICAgICAgICAoY29sLmxpbmtJZCA9PT0gbGlua1Jlc3BvbnNlLmxpbmtJZCB8fFxuICAgICAgICAgICAgICAgICAgICBzZXRMaW5rSWQgPT09IGxpbmtSZXNwb25zZS5saW5rSWQpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbUtleXM6IHN0cmluZ1tdID0gbGlua1BhcmFtcyAmJiBPYmplY3Qua2V5cyhsaW5rUGFyYW1zKT8ubGVuZ3RoID8gT2JqZWN0LmtleXMobGlua1BhcmFtcykgOiBjb2wucGFyYW1zID8gT2JqZWN0LmtleXMoY29sLnBhcmFtcykgOiBbXTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbms6IGFueSA9IHV0aWxpdGllcy5zZXRIeXBlcmxpbmsoXG4gICAgICAgICAgICAgICAgICAgIGtleXMsXG4gICAgICAgICAgICAgICAgICAgIHJvdyxcbiAgICAgICAgICAgICAgICAgICAgbGlua1Jlc3BvbnNlLnVybCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1LZXlzLFxuICAgICAgICAgICAgICAgICAgICBjb2wucGFyYW1zXG4gICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICBsZXQgZmllbGQgPSBjb2wuZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICAgICAgICBuZXdSb3dbZmllbGRdID0geyAuLi5jb2wgfTtcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0ubGlua0lkID0gc2V0TGlua0lkOyBcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uaHlwZXJsaW5rID0gbGluaztcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSBjb2wuZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAgICAgPyByb3dbY29sLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICAgICAgICAgIDogcm93W2NvbC5maWVsZD8udG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZWNvcmRzLnB1c2gobmV3Um93KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZWNvcmRzO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHJlc29sdmUoW10pO1xuICAgICAgfSlcbiAgICB9XG4gICAgXG4gIH1cblxuICAvL3NldCByb3dzIHRvIHJlc3BvbnNlLnJlY29yZHNcbiAgYXN5bmMgc2V0Um93RGF0YShjb2x1bW5zOiBJR3JpZENvbHVtbltdLCByZXNwb25zZTogYW55KSB7XG4gICAgaWYocmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwKXtcbiAgICAgIGlmICh0aGlzLmhhc0FueUxpbmtDb2x1bW4oY29sdW1ucykpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc2V0SHlwZXJsaW5rcyhyZXNwb25zZSwgY29sdW1ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVzcG9uc2UucmVjb3JkcztcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSByZXR1cm4gW11cbiAgfVxuICAgXG5cbiAgLy8gYWRkIGdyaWQgZ2xvYmFsIGZpbHRlciB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgY29uc3QgY29sdW1uOiBJR3JpZFVwZGF0ZSA9IHtcbiAgICAgIGZpZWxkOiBncmlkVXBkYXRlSW5mby5maWVsZCxcbiAgICAgIGRpc3BsYXlUZXh0OiBncmlkVXBkYXRlSW5mby5kaXNwbGF5VGV4dCxcbiAgICAgIHR5cGU6IGdyaWRVcGRhdGVJbmZvLnR5cGUsXG4gICAgICBkYXRhOiBncmlkVXBkYXRlSW5mby5kYXRhLFxuICAgICAgdmFsdWU6IGdyaWRVcGRhdGVJbmZvLnZhbHVlLFxuICAgICAgdmFsdWVUd286IGdyaWRVcGRhdGVJbmZvLnZhbHVlVHdvLFxuICAgICAgbWF0Y2hNb2RlOiBncmlkVXBkYXRlSW5mby5tYXRjaE1vZGUsXG4gICAgICBvcGVyYXRvcjogZ3JpZFVwZGF0ZUluZm8ub3BlcmF0b3IsXG4gICAgICB0YWJsZUFsaWFzOiBncmlkVXBkYXRlSW5mby50YWJsZUFsaWFzLFxuICAgICAgb3B0aW9uTGFiZWw6IGdyaWRVcGRhdGVJbmZvLm9wdGlvbkxhYmVsLFxuICAgICAgb3B0aW9uVmFsdWU6IGdyaWRVcGRhdGVJbmZvLm9wdGlvblZhbHVlLFxuICAgICAgb25Gb2N1c091dDogZ3JpZFVwZGF0ZUluZm8ub25Gb2N1c091dCxcbiAgICAgIG9uUmV0dXJuOiBncmlkVXBkYXRlSW5mby5vblJldHVybixcbiAgICAgIGZpbHRlcmluZzogZ3JpZFVwZGF0ZUluZm8uZmlsdGVyaW5nLFxuICAgICAgY29sdW1uOiBncmlkVXBkYXRlSW5mby5jb2x1bW4sXG4gICAgICBkYXlSYW5nZTogZ3JpZFVwZGF0ZUluZm8uZGF5UmFuZ2UsXG4gICAgICBmcm9tRmllbGQ6IGdyaWRVcGRhdGVJbmZvLmZyb21GaWVsZCxcbiAgICAgIHRvRmllbGQ6IGdyaWRVcGRhdGVJbmZvLnRvRmllbGQsXG4gICAgICBsb29rdXBDb250cm9sOiBncmlkVXBkYXRlSW5mby5sb29rdXBDb250cm9sLFxuICAgICAgYWxsb3dTZWFyY2g6IGdyaWRVcGRhdGVJbmZvLmFsbG93U2VhcmNoLFxuICAgICAgZGlzYWJsZWQ6IGdyaWRVcGRhdGVJbmZvLmRpc2FibGVkLFxuICAgICAgaGlkZGVuOiBncmlkVXBkYXRlSW5mby5oaWRkZW4sXG4gICAgICBsYWJlbFRleHQ6IGdyaWRVcGRhdGVJbmZvLmxhYmVsVGV4dCxcbiAgICAgIHByZWZpeDogZ3JpZFVwZGF0ZUluZm8ucHJlZml4LFxuICAgICAgY29sb3I6IGdyaWRVcGRhdGVJbmZvLmNvbG9yLFxuICAgICAgZm9ybWF0OiBncmlkVXBkYXRlSW5mby5mb3JtYXQsXG4gICAgICBpbnRlcmZhY2VUeXBlOiAnYnVsa1VwZGF0ZSdcbiAgICB9O1xuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgaW5wdXQgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUlucHV0KGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBkcm9wZG93biBmaWVsZFxuICBhZGRHcmlkVXBkYXRlRHJvcGRvd24oXG4gICAgZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlLFxuICAgIGRyb3BEb3duUHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogYW55IHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRST1BET1dOO1xuICAgIGlmIChkcm9wRG93blByb3ApIHtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBkcm9wRG93blByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IGRyb3BEb3duUHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gZHJvcERvd25Qcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gZHJvcERvd25Qcm9wLmZpbHRlcnM7XG4gICAgICBsZXQgc29ydHMgPSBkcm9wRG93blByb3Auc29ydHM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGdyaWRVcGRhdGVJbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgc29ydHMsIFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgICB9XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgZHJvcGRvd24gZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUJvb2xlYW4oZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWDtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIG51bWVyaWMgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZU51bWVyaWMoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBjYWxlbmRhciBmaWVsZFxuICBhZGRHcmlkVXBkYXRlQ2FsZW5kYXIoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUjtcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pO1xuICB9XG5cbiAgLy9hZGQgZ3JpZCB1cGRhdGUgbG9va3VwIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVMb29rdXAoZ3JpZFVwZGF0ZUluZm86IElHcmlkVXBkYXRlKXtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkxPT0tVUF9JTlBVVFxuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbylcbiAgfVxuICBcbiAgLy8gYWRkIGdyaWQgZ2xvYmFsIGZpbHRlciB3aXRoIGJ1aWx0LWluIGZpbHRlclxuICBhZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgY29uc3QgY29sdW1uOiBhZGRHbG9iYWxGaWx0ZXIgPSB7XG4gICAgICBmaWVsZDogZ2xvYmFsRmlsdGVySW5mby5maWVsZCxcbiAgICAgIGRpc3BsYXlUZXh0OiBnbG9iYWxGaWx0ZXJJbmZvLmRpc3BsYXlUZXh0LFxuICAgICAgZGlzcGxheVN0eWxlOmdsb2JhbEZpbHRlckluZm8uZGlzcGxheVN0eWxlLFxuICAgICAgdmFsaWRhdGlvbnM6IGdsb2JhbEZpbHRlckluZm8udmFsaWRhdGlvbnMsXG4gICAgICB0eXBlOiBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUsXG4gICAgICBkYXRhOiBnbG9iYWxGaWx0ZXJJbmZvLmRhdGEsXG4gICAgICB2YWx1ZTogZ2xvYmFsRmlsdGVySW5mby52YWx1ZSxcbiAgICAgIHZhbHVlVHdvOiBnbG9iYWxGaWx0ZXJJbmZvLnZhbHVlVHdvLFxuICAgICAgbWF0Y2hNb2RlOiBnbG9iYWxGaWx0ZXJJbmZvLm1hdGNoTW9kZSxcbiAgICAgIG9wZXJhdG9yOiBnbG9iYWxGaWx0ZXJJbmZvLm9wZXJhdG9yLFxuICAgICAgdGFibGVBbGlhczogZ2xvYmFsRmlsdGVySW5mby50YWJsZUFsaWFzLFxuICAgICAgb3B0aW9uTGFiZWw6IGdsb2JhbEZpbHRlckluZm8ub3B0aW9uTGFiZWwsXG4gICAgICBvcHRpb25WYWx1ZTogZ2xvYmFsRmlsdGVySW5mby5vcHRpb25WYWx1ZSxcbiAgICAgICBvbkNsaWNrOmdsb2JhbEZpbHRlckluZm8ub25DbGljayxcbiAgICAgIG9uRm9jdXNPdXQ6IGdsb2JhbEZpbHRlckluZm8ub25Gb2N1c091dCxcbiAgICAgIG9uUmV0dXJuOiBnbG9iYWxGaWx0ZXJJbmZvLm9uUmV0dXJuLFxuICAgICAgZmlsdGVyaW5nOiBnbG9iYWxGaWx0ZXJJbmZvLmZpbHRlcmluZyxcbiAgICAgIGNvbHVtbjogZ2xvYmFsRmlsdGVySW5mby5jb2x1bW4sXG4gICAgICBkYXlSYW5nZTogZ2xvYmFsRmlsdGVySW5mby5kYXlSYW5nZSxcbiAgICAgIGZyb21GaWVsZDogZ2xvYmFsRmlsdGVySW5mby5mcm9tRmllbGQsXG4gICAgICB0b0ZpZWxkOiBnbG9iYWxGaWx0ZXJJbmZvLnRvRmllbGQsXG4gICAgICBsb29rdXBDb250cm9sOiBnbG9iYWxGaWx0ZXJJbmZvLmxvb2t1cENvbnRyb2wsXG4gICAgICBhbGxvd1NlYXJjaDogZ2xvYmFsRmlsdGVySW5mby5hbGxvd1NlYXJjaCxcbiAgICAgIGRpc2FibGVkOiBnbG9iYWxGaWx0ZXJJbmZvLmRpc2FibGVkLFxuICAgICAgaGlkZGVuOiBnbG9iYWxGaWx0ZXJJbmZvLmhpZGRlbixcbiAgICAgIGxhYmVsVGV4dDogZ2xvYmFsRmlsdGVySW5mby5sYWJlbFRleHQsXG4gICAgICBwcmVmaXg6IGdsb2JhbEZpbHRlckluZm8ucHJlZml4LFxuICAgICAgY29sb3I6IGdsb2JhbEZpbHRlckluZm8uY29sb3IsXG4gICAgICBmb3JtYXQ6IGdsb2JhbEZpbHRlckluZm8uZm9ybWF0LFxuICAgIH07XG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgaW5wdXQgZmlsdGVyXG4gIGFkZEdsb2JhbElucHV0RmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5JTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ2xvYmFsIGRyb3Bkb3duIGZpbHRlclxuICBhZGRHbG9iYWxEcm9wZG93bkZpbHRlcihcbiAgICBnbG9iYWxGaWx0ZXJJbmZvOiBJR2xvYmFsRmlsdGVyLFxuICAgIGRyb3BEb3duUHJvcD86IElEcm9wRG93blJlcXVlc3RcbiAgKTogYW55IHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV047XG4gICAgaWYgKGRyb3BEb3duUHJvcCkge1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IGRyb3BEb3duUHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBkcm9wRG93blByb3AuZmlsdGVycztcbiAgICAgIGxldCBzb3J0cyA9IGRyb3BEb3duUHJvcC5zb3J0cztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgZ2xvYmFsRmlsdGVySW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIHNvcnRzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgICB9XG4gIH1cbiAgLy9hZGQgZ2xvYmFsIHJhZGlvIGJ1dHRvbiBmaWx0ZXJcbiAgYWRkR2xvYmFsU2VsZWN0QnV0dG9uRmlsdGVyKGdsb2JlbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JlbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5TRUxFQ1RCVVRUT047XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JlbEZpbHRlckluZm8pO1xuICB9XG4gIC8vIGFkZCBnbG9iYWwgTXVsdGlTZWxlY3QgZHJvcGRvd24gZmlsdGVyXG4gIGFkZEdsb2JhbE11bHRpU2VsZWN0RHJvcERvd25GaWx0ZXIoXG4gICAgZ2xvYmFsRmlsdGVySW5mbzogSUdsb2JhbEZpbHRlcixcbiAgICBtdWx0aVNlbGVjdFByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IGFueSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk1VTFRJU0VMRUNUO1xuICAgIGlmIChtdWx0aVNlbGVjdFByb3ApIHtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBtdWx0aVNlbGVjdFByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IG11bHRpU2VsZWN0UHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gbXVsdGlTZWxlY3RQcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gbXVsdGlTZWxlY3RQcm9wLmZpbHRlcnM7XG4gICAgICBsZXQgc29ydHMgPSBtdWx0aVNlbGVjdFByb3Auc29ydHM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGdsb2JhbEZpbHRlckluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICBzb3J0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RHJvcGRvd25EYXRhKFxuICAgIGZpZWxkSW5mbzogYW55LFxuICAgIHVuaXF1ZUtleTogc3RyaW5nLFxuICAgIHZhbHVlUHJvcDogc3RyaW5nLFxuICAgIGxhYmVsUHJvcDogc3RyaW5nLFxuICAgIGZpbHRlcnM6IGFueSxcbiAgICBzb3J0czogSUdyaWRTb3J0W10gPSBbXSwgXG4gICAgZ3JpZFVwZGF0ZUZpZWxkOiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25TZXJ2aWNlXG4gICAgICAuc2V0RHJvcERvd25MaXN0KHVuaXF1ZUtleSwgdmFsdWVQcm9wLCBsYWJlbFByb3AsIGZpbHRlcnMsIHNvcnRzKVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGZpZWxkSW5mby5kYXRhID0gcmVzO1xuICAgICAgICByZXR1cm4gZ3JpZFVwZGF0ZUZpZWxkID8gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZmllbGRJbmZvKSA6IHRoaXMuYWRkR2xvYmFsRmlsdGVyKGZpZWxkSW5mbyk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIHJldHVybiBncmlkVXBkYXRlRmllbGQgPyB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChmaWVsZEluZm8pIDogdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZmllbGRJbmZvKTtcbiAgICAgIH0pO1xuICB9XG4gIFxuICAvLyBhZGQgZ2xvYmFsIGZpbHRlciBTcGFjZSBGaWVsZFxuICBhZGRHbG9iYWxGaWx0ZXJTcGFjZUZpZWxkKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5TUEFDRVI7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdsb2JhbCBib29sZWFuIGZpbHRlclxuICBhZGRHbG9iYWxCb29sZWFuRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DSEVDS0JPWDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgUmFuZ2UgRmlsdGVyIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZFJhbmdlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5DQUxFTkRBUl9SQU5HRTtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgUmFuZ2UgRmlsdGVyIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbERhdGVSYW5nZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuREFURV9SQU5HRTtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cbiAgXG4gIC8vIGFkZCBOdW1lcmljIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxOdW1lcmljUmFuZ2VGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNfUkFOR0U7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG4gIC8vIGFkZCBOdW1lcmljIGlucHV0IGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbE51bWVyaWNJbnB1dChnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ0lOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBMb29rVXAgRmllbGQgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsTG9va3VwRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgIC8vYWRkIGNhbGVuZGFyIGZpbHRlciBmb3IgZ2xvYmFsIGZpbHRlclxuICAgYWRkR2xvYmFsRGF0ZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpe1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZT1HcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVI7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgc2V0RGF0YUZpZWxkcyhyZXNwb25zZTogYW55LCBkYXRhS2V5OiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgbGV0IGRhdGE6IGFueSA9IFtdO1xuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5sZW5ndGggPiAwKSB7XG4gICAgICByZXNwb25zZS5tYXAoKHg6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoeCA/PyB7fSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQ6IGFueSA9IE9iamVjdC5rZXlzKHgpPy5yZWR1Y2UoXG4gICAgICAgICAgICAocHJldiwgY3VycmVudCkgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJlbnQudG9Mb3dlckNhc2UoKV06IHhbY3VycmVudF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHt9XG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBkYXRhS2V5ICYmXG4gICAgICAgICAgICBkYXRhS2V5Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICFPYmplY3Qua2V5cyhyZXN1bHQpPy5pbmNsdWRlcyhkYXRhS2V5KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmVzdWx0W2RhdGFLZXldID0gaW5kZXg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YS5wdXNoKHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHNldENvbHVtbkZpZWxkcyhjb2x1bW5zOiBhbnlbXSkge1xuICAgIGxldCBjb2x1bW46IGFueSA9IFtdO1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29sdW1ucy5tYXAoKGNvbDogYW55KSA9PiB7XG4gICAgICAgIGNvbHVtbi5wdXNoKHsgLi4uY29sLCBmaWVsZDogY29sPy5maWVsZD8udG9Mb3dlckNhc2UoKSB9KTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG4gIH1cblxuICAvLyBjaGFuZ2UgbGlua0lkIGluIGVkaXQgbW9kZSwgaWYgY2hhbmdlTGluayBpcyB0cnVlIHRoZW4gaXQgY2hhbmdlIHRoZSBlZGl0ZWQgcm93IGh5cGVybGluayB2YWx1ZVxuICBzZXRMaW5rSWQoXG4gICAgY29sdW1uczogSUdyaWRDb2x1bW5bXSxcbiAgICBmaWVsZDogc3RyaW5nLFxuICAgIGxpbmtJZDogc3RyaW5nLFxuICAgIHJlY29yZDogYW55LFxuICAgIHVzZXJzOiBhbnksXG4gICAgcGFyYW1zOiBhbnkgPSBudWxsLFxuICAgIGNoYW5nZUxpbms6IGJvb2xlYW4gPSBmYWxzZVxuICApOiBhbnkge1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBmaWVsZC50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY29sdW1uLmxpbmtJZCA9IGxpbmtJZDtcbiAgICAgICAgICBpZiAocGFyYW1zKSB7XG4gICAgICAgICAgICBjb2x1bW4ucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRIeXBlcmxpbmtzKHsgcmVjb3JkczogW3JlY29yZF0gfSwgY29sdW1ucykudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgIGlmIChjaGFuZ2VMaW5rKSB7XG4gICAgICAgIGRlbGV0ZSByZXNbMF1bZmllbGQudG9Mb3dlckNhc2UoKSArICdfb2JqJ107XG4gICAgICAgIGxldCBpbmRleCA9IHVzZXJzLmZpbmRJbmRleChcbiAgICAgICAgICAoaTogYW55KSA9PiBpW2ZpZWxkLnRvTG93ZXJDYXNlKCldID09PSByZWNvcmRbZmllbGQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgIGlmICh1c2Vyc1tpbmRleF1bZmllbGQgKyAnX29iaiddKSB7XG4gICAgICAgICAgICB1c2Vyc1tpbmRleF1bZmllbGQgKyAnX29iaiddLmh5cGVybGluayA9XG4gICAgICAgICAgICAgIHJlc1swXVtmaWVsZCArICdfb2JqJ10uaHlwZXJsaW5rO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gc2V0IGdyaWQgZGF0YSBhbmQgc2V0IHNlbGVjdGVkIHJvdyBiYXNlZCBvbiBzZWxlY3Rpb24gdmFsdWVcbiAgc2V0RGF0YVdpdGhTZWxlY3RlZFJvdyhyZWNvcmRzOiBhbnksIGNvbmZpZ0RhdGE6IGFueSkge1xuICAgIGlmICgoY29uZmlnRGF0YT8udmFsdWVQcm9wIHx8IGNvbmZpZ0RhdGE/LmxhYmVsUHJvcCkgJiYgY29uZmlnRGF0YS5kYXRhLnNlbGVjdGlvbikge1xuICAgICAgcmVjb3Jkcy5mb3JFYWNoKChyZWNvcmQ6IGFueSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhyZWNvcmQpPy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09IGNvbmZpZ0RhdGEubGFiZWxQcm9wID8gY29uZmlnRGF0YS5sYWJlbFByb3A/LnRvTG93ZXJDYXNlKCkgOiBjb25maWdEYXRhLnZhbHVlUHJvcD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBjb25maWdEYXRhLmRhdGEudmFsdWUgJiZcbiAgICAgICAgICAgICAgcmVjb3JkW2tleV0gPT09IGNvbmZpZ0RhdGEuZGF0YS52YWx1ZVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJlY29yZFsnaGlnaGxpZ2h0Um93J10gPSB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZWNvcmRba2V5XT8udG9TdHJpbmcoKSA9PT0gY29uZmlnRGF0YS5kYXRhLnNlbGVjdGlvbj8udG9TdHJpbmcoKSkge1xuICAgICAgICAgICAgICByZWNvcmRbJ2hpZ2hsaWdodFJvdyddID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH1cblxuICBzZXRUYWJsZUFsaWFzKGZpZWxkOiBzdHJpbmcsIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pIHtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgKHg6IGFueSkgPT4geC5maWVsZD8udG9Mb3dlckNhc2UoKSA9PSBmaWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcblxuICAgICAgaWYgKGNvbHVtbiAhPSBudWxsICYmIGNvbHVtbi50YWJsZUFsaWFzICYmIGNvbHVtbi50YWJsZUFsaWFzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi50YWJsZUFsaWFzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHNldEdyaWRQcm9wVmFsdWVzKFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW10sXG4gICAgcHJvcHM6IElHcmlkUHJvcFtdLFxuICAgIGZpbHRlcj86IElHcmlkUHJvcEZpbHRlcixcbiAgICByZWNvcmRzPzogYW55W11cbiAgKSB7XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwICYmIHByb3BzICYmIHByb3BzLmxlbmd0aCA+IDApIHtcbiAgICAgIGxldCBpc01hdGNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAgIGlmIChmaWx0ZXIgJiYgZmlsdGVyLmZpZWxkICYmIHJlY29yZHMgJiYgcmVjb3Jkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlzTWF0Y2hlZCA9IHJlY29yZHMuc29tZShcbiAgICAgICAgICAoeCkgPT5cbiAgICAgICAgICAgIHV0aWxpdGllcy5vYmpDb252ZXJ0VG9Mb3dlcih4KVtmaWx0ZXIuZmllbGQudG9Mb3dlckNhc2UoKV0gPT09XG4gICAgICAgICAgICBmaWx0ZXIudmFsdWVcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHByb3BzLm1hcCgocHJvcDogSUdyaWRQcm9wKSA9PiB7XG4gICAgICAgIGxldCBjb2w6IGFueSA9IHt9O1xuICAgICAgICBpZiAocHJvcC5maWVsZCAmJiAhaXNNYXRjaGVkICYmICFmaWx0ZXI/LmZpZWxkKSB7XG4gICAgICAgICAgY29sID0gY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wLmZpZWxkPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc01hdGNoZWQpIHtcbiAgICAgICAgICBpZiAocHJvcC5maWVsZCkge1xuICAgICAgICAgICAgY29sID0gY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICAgIGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29sID0gY29sdW1ucy5maW5kKFxuICAgICAgICAgICAgICAoY29sdW1uKSA9PlxuICAgICAgICAgICAgICAgIGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmlsdGVyPy5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbCAmJiBjb2wuaGFzT3duUHJvcGVydHkocHJvcC5uYW1lKSkge1xuICAgICAgICAgIGNvbFtwcm9wLm5hbWVdID0gcHJvcC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gc2V0IGdyaWQgcm93IHByb3BWYWx1ZXNcbiAgc2V0R3JpZFJvd1Byb3BWYWx1ZShyb3c6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHByb3BzOiBJR3JpZFJvd1Byb3BbXSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSA9IFtdKSB7XG4gICAgbGV0IHNldExpbmtJZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxldCBsaW5rSWRSZXM6IGFueTtcbiAgICBwcm9wcz8uZm9yRWFjaCgocHJvcCkgPT4ge1xuICAgICAgc2V0TGlua0lkID0gZmFsc2U7XG4gICAgICBpZiAocHJvcC5wcm9wTmFtZSAmJiBwcm9wLnByb3BOYW1lID09PSBFR3JpZFJvd1Byb3BOYW1lLkxJTktJRCAmJiBwcm9wLnByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoT2JqZWN0Py5rZXlzKHJvdykpIHtcbiAgICAgICAgICBsZXQgbWF0Y2hlZFJvd09iamVjdEtleSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5Py50b0xvd2VyQ2FzZSgpPy5lbmRzV2l0aCgnX29iaicpICYmIHJvd1trZXldPy5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIGlmIChtYXRjaGVkUm93T2JqZWN0S2V5KSB7XG4gICAgICAgICAgICBsZXQgbWF0Y2hlZE9iamVjdCA9IHJvd1ttYXRjaGVkUm93T2JqZWN0S2V5XTtcbiAgICAgICAgICAgIG1hdGNoZWRPYmplY3QubGlua0lkID0gcHJvcC5wcm9wVmFsdWU7XG4gICAgICAgICAgICBtYXRjaGVkT2JqZWN0Lmh5cGVybGluayA9ICcnO1xuICAgICAgICAgICAgcm93W21hdGNoZWRSb3dPYmplY3RLZXldID0gbWF0Y2hlZE9iamVjdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgbWF0Y2hlZEZpZWxkTmFtZSA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleSkgPT4ga2V5Py50b0xvd2VyQ2FzZSgpICYmIGtleS50b0xvd2VyQ2FzZSgpID09PSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICBsZXQgbWF0Y2hlZENvbHVtbk9iaiA9IGNvbHVtbnMuZmluZCgoa2V5KSA9PiBrZXkuZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IG1hdGNoZWRGaWVsZE5hbWU/LnRvTG93ZXJDYXNlKCkpXG4gICAgICAgICAgICBjb25zdCByb3dPYmogPSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICAgIHJvd1tyb3dPYmpdID0gbWF0Y2hlZENvbHVtbk9iajtcbiAgICAgICAgICAgIHJvd1tyb3dPYmpdLmxpbmtJZCA9IHByb3AucHJvcFZhbHVlO1xuICAgICAgICAgICAgcm93W3Jvd09ial0uaHlwZXJsaW5rID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzZXRMaW5rSWQgPSB0cnVlO1xuICAgICAgICBsaW5rSWRSZXMgPSB0aGlzLnNldEh5cGVybGlua3MoeyByZWNvcmRzOiBbcm93XSB9LCBjb2x1bW5zLCBwcm9wLnBhcmFtcyk7XG4gICAgICB9IGVsc2UgaWYgKHByb3AucHJvcE5hbWUgJiYgIXByb3AubGFiZWwgJiYgKHByb3AucHJvcFZhbHVlIHx8IHByb3AucHJvcFZhbHVlID09PSBmYWxzZSB8fCBwcm9wLnByb3BWYWx1ZSA9PT0gJycpKSB7XG4gICAgICAgIGlmIChwcm9wLmZpZWxkICYmIHJvdykge1xuICAgICAgICAgIGxldCBmaWVsZE5hbWUgPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXkpID0+IGtleT8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIGxldCBmaWVsZE5hbWVPYmogPSBmaWVsZE5hbWU/LmluY2x1ZGVzKCdfb2JqJykgPyBmaWVsZE5hbWU/LnRvTG93ZXJDYXNlKCkgOiBmaWVsZE5hbWU/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgaWYgKCFmaWVsZE5hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd09iaiA9IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICAgICAgZmllbGROYW1lT2JqID0gT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5OiBhbnkpID0+IChrZXk/LnRvTG93ZXJDYXNlKCkgPT09IHJvd09iaikgJiYgKHJvd1tyb3dPYmpdPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HIHx8IHJvd1tyb3dPYmpdPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuSUZSQU1FIHx8IHJvd1tyb3dPYmpdPy50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSykpO1xuICAgICAgICAgICAgaWYgKGZpZWxkTmFtZU9iaikge1xuICAgICAgICAgICAgICBmaWVsZE5hbWUgPSBmaWVsZE5hbWVPYmo7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChmaWVsZE5hbWUpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3cpPy5pbmNsdWRlcyhmaWVsZE5hbWVPYmopKSB7XG4gICAgICAgICAgICAgIHJvd1tmaWVsZE5hbWVPYmpdID0geyAuLi5yb3dbZmllbGROYW1lT2JqXSwgdGV4dDogcm93W2ZpZWxkTmFtZV0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJvd1tmaWVsZE5hbWVPYmpdID0geyB0ZXh0OiByb3dbZmllbGROYW1lXSwgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoY29sdW1ucz8uc29tZSgoY29sdW1uKSA9PiBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcEZpZWxkID0gcHJvcC5maWVsZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGNvbnN0IHByb3BGaWVsZE9iaiA9IHByb3BGaWVsZCArICdfb2JqJztcbiAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhyb3cpPy5pbmNsdWRlcyhmaWVsZE5hbWVPYmopKSB7XG4gICAgICAgICAgICAgIHJvd1twcm9wRmllbGRPYmpdID0geyAuLi5yb3dbcHJvcEZpZWxkT2JqXSwgdGV4dDogcm93W3Byb3AuZmllbGRdLCBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbcHJvcEZpZWxkT2JqXSA9IHsgdGV4dDogcm93W3Byb3AuZmllbGRdLCBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAocHJvcD8uYWN0aW9uID09PSBFR3JpZFJvd0FjdGlvbi5ERUxFVEVCVE4pIHtcbiAgICAgICAgICAgIHJvd1twcm9wLmFjdGlvbl0gPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAocHJvcD8uYWN0aW9uID09PSBFR3JpZFJvd0FjdGlvbi5FRElUQlROKSB7XG4gICAgICAgICAgICByb3dbcHJvcC5hY3Rpb25dID0gcHJvcC5wcm9wVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByb3AubGFiZWwpIHtcbiAgICAgICAgY29uc3QgcHJvcE5hbWUgPSBwcm9wLmxhYmVsPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICBpZiAocHJvcC5wcm9wTmFtZSA9PT0gRUdyaWRSb3dQcm9wTmFtZS5SRVBPUlROQU1FKSB7XG4gICAgICAgICAgcm93W3Byb3BOYW1lXSA9IHsgLi4ucm93W3Byb3BOYW1lXSwgcmVwb3J0TmFtZTogcHJvcD8ucHJvcFZhbHVlIH07XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcC5wcm9wTmFtZSA9PT0gRUdyaWRSb3dQcm9wTmFtZS5SRVBPUlRQQVJBTSAmJiBwcm9wPy5wYXJhbXMpIHtcbiAgICAgICAgICByb3dbcHJvcE5hbWVdID0geyAuLi5yb3dbcHJvcE5hbWVdLCByZXBvcnRQYXJhbTogcHJvcC5wYXJhbXMgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghc2V0TGlua0lkKSB7XG4gICAgICByZXR1cm4gcm93O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbGlua0lkUmVzO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJlbW92ZSB0aGUgcm93QWN0aW9ucyBmcm9tIHRoZSByZWNvcmRzXG4gIHJlbW92ZVJvd0FjdGlvbnMocmVjb3Jkcykge1xuICAgIGlmIChyZWNvcmRzPy5sZW5ndGggPiAwKSB7XG4gICAgICByZWNvcmRzLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICBpZiAocm93LnJvd0FjdGlvbikge1xuICAgICAgICAgIGRlbGV0ZSByb3dbJ3Jvd0FjdGlvbiddO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY29yZHM7XG4gIH1cblxuLyoqXG4gICAqIEV4cG9ydCB0byBleGNlbCAoTWFpbi1tZXRob2QpXG4gICAqL1xuICBleHBvcnRFeGNlbChyb3dzRGF0YSwgY29sdW1ucywgcmVwb3J0TmFtZTogc3RyaW5nID0gRUdyaWRFeGNlbC5FWFBPUlQpIHtcbiAgICBjb25zdCBbZmlsdGVyZWRyb3dzRGF0YSwgZmlsdGVyZWRDb2x1bW5zXTogYW55ID0gdGhpcy5zZXRFeGNlbERhdGEocm93c0RhdGEsIGNvbHVtbnMpO1xuICAgIGNvbnN0IHdvcmtib29rID0gbmV3IEV4Y2VsSlMuV29ya2Jvb2soKTtcbiAgICBjb25zdCB3b3Jrc2hlZXQgPSB3b3JrYm9vay5hZGRXb3Jrc2hlZXQoJ1NoZWV0MScpO1xuICAgIGNvbnN0IGJvbGRTdHlsZSA9IHsgYm9sZDogdHJ1ZSB9O1xuICAgIGNvbnN0IGhlYWRlclJvdyA9IFtdO1xuICAgIGZpbHRlcmVkQ29sdW1ucz8uZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBoZWFkZXJSb3cucHVzaChjb2wuaGVhZGVyKTtcbiAgICB9KTtcbiAgICB3b3Jrc2hlZXQuYWRkUm93KGhlYWRlclJvdyk7XG4gICAgd29ya3NoZWV0LmdldFJvdygxKS5lYWNoQ2VsbCh7IGluY2x1ZGVFbXB0eTogdHJ1ZSB9LCAoY2VsbCkgPT4ge1xuICAgICAgY2VsbC5mb250ID0gYm9sZFN0eWxlO1xuICAgIH0pO1xuICAgIGZpbHRlcmVkQ29sdW1ucz8uZm9yRWFjaCgoY29sLCBpbmRleCkgPT4ge1xuICAgICAgd29ya3NoZWV0LmdldENvbHVtbihpbmRleCArIDEpLndpZHRoID0gMTU7XG4gICAgfSk7XG4gICAgZmlsdGVyZWRyb3dzRGF0YS5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG5ld1JvdyA9IFtdO1xuICAgICAgZmlsdGVyZWRDb2x1bW5zPy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgICBjb25zdCBjZWxsVmFsdWU6IHN0cmluZyA9IHJvd1tjb2w/LmhlYWRlcj8udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICBpZiAoY29sLnR5cGUgPT09IEVHcmlkQ29sdW1uVHlwZS5MSU5LICYmIGNlbGxWYWx1ZSAmJiBjZWxsVmFsdWUubGVuZ3RoID4gMCAmJiBjZWxsVmFsdWUuaW5kZXhPZignfCcpID4gMCkge1xuICAgICAgICAgICAgICBjb25zdCBbbGlua1RleHQsIGxpbmtVcmxdID0gY2VsbFZhbHVlLnNwbGl0KCd8Jyk7XG4gICAgICAgICAgICAgIGxldCBmb3JtYXR0ZWRMaW5rVXJsID0gbGlua1VybDtcbiAgICAgICAgICAgICAgaWYgKGxpbmtVcmwgJiYgIWxpbmtVcmwuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgICAgICAgICAgICBmb3JtYXR0ZWRMaW5rVXJsID0gd2luZG93LmxvY2F0aW9uLnByb3RvY29sICsgJy8vJyArIHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSArIChsaW5rVXJsLnN0YXJ0c1dpdGgoJy8nKSA/ICcnIDogJy8nKSArIGxpbmtVcmw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGxpbmtUZXh0ICE9PSBcIm51bGxcIikge1xuICAgICAgICAgICAgICAgICAgbmV3Um93LnB1c2goeyBmb3JtdWxhOiBgPUhZUEVSTElOSyhcIiR7Zm9ybWF0dGVkTGlua1VybH1cIiwgXCIke2xpbmtUZXh0fVwiKWAgfSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3Um93LnB1c2goJycpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3Um93LnB1c2goY2VsbFZhbHVlICE9PSBudWxsID8gY2VsbFZhbHVlIDogJycpO1xuICAgICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgd29ya3NoZWV0LmFkZFJvdyhuZXdSb3cpO1xuICAgIH0pO1xuICAgIHdvcmtib29rLnhsc3gud3JpdGVCdWZmZXIoKS50aGVuKChleGNlbEJ1ZmZlcikgPT4ge1xuICAgICAgdGhpcy5zYXZlQXNFeGNlbEZpbGUoZXhjZWxCdWZmZXIsIHJlcG9ydE5hbWUpO1xuICAgIH0pLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2F2aW5nIEV4Y2VsIGZpbGU6JywgZXJyb3IpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCB0byBleGNlbCAoc3ViLW1ldGhvZClcbiAgICovXG4gIHNhdmVBc0V4Y2VsRmlsZShidWZmZXI6IGFueSwgcmVwb3J0TmFtZSk6IHZvaWQge1xuICAgIGxldCBFWENFTF9UWVBFID1cbiAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcbiAgICBjb25zdCBkYXRhOiBCbG9iID0gbmV3IEJsb2IoW2J1ZmZlcl0sIHsgdHlwZTogRVhDRUxfVFlQRSB9KTtcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIHJlcG9ydE5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCB0byBleGNlbCAoc3ViLW1ldGhvZClcbiAgICovXG4gIHNldEV4Y2VsRGF0YShyb3dzRGF0YSwgY29sdW1ucykge1xuICAgIGNvbnN0IHZhbGlkUm93cyA9IFtdO1xuICAgIGNvbnN0IHZhbGlkQ29sdW1ucyA9IFtdO1xuICAgIGNvbnN0IGNvbHVtbkhlYWRlcnMgPSBjb2x1bW5zPy5tYXAoY29sdW1uID0+IGNvbHVtbj8uaGVhZGVyPy50b0xvd2VyQ2FzZSgpKTtcbiAgICByb3dzRGF0YS5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICBjb25zdCB2YWxpZFJvdyA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMocm93KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGlmIChjb2x1bW5IZWFkZXJzPy5pbmNsdWRlcyhrZXk/LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNEYXRlU3RyaW5nKHJvd1trZXldKSkge1xuICAgICAgICAgICAgdmFsaWRSb3dba2V5Py50b0xvd2VyQ2FzZSgpXSA9IHRoaXMuZm9ybWF0RGF0ZShyb3dba2V5XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbGlkUm93W2tleT8udG9Mb3dlckNhc2UoKV0gPSByb3dba2V5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHZhbGlkUm93KT8ubGVuZ3RoID4gMCkge1xuICAgICAgICB2YWxpZFJvd3MucHVzaCh2YWxpZFJvdyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29sdW1ucy5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBjb2x1bW4/LmhlYWRlcj8udG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmICh2YWxpZFJvd3Muc29tZShyb3cgPT4gT2JqZWN0LmtleXMocm93KT8uaW5jbHVkZXMoaGVhZGVyKSkpIHtcbiAgICAgICAgdmFsaWRDb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBbdmFsaWRSb3dzLCB2YWxpZENvbHVtbnNdO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCB0byBleGNlbCAoc3ViLW1ldGhvZClcbiAgICovXG4gIGlzRGF0ZVN0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGR7M30pP1o/JC8udGVzdCh2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRvIGV4Y2VsIChzdWItbWV0aG9kKVxuICAgKi9cbiAgZm9ybWF0RGF0ZShkYXRlU3RyaW5nKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgIGNvbnN0IHllYXIgPSBkYXRlPy5nZXRGdWxsWWVhcigpO1xuICAgIGxldCBtb250aCA9ICgxICsgZGF0ZT8uZ2V0TW9udGgoKSk/LnRvU3RyaW5nKCk/LnBhZFN0YXJ0KDIsICcwJyk7XG4gICAgbGV0IGRheSA9IGRhdGU/LmdldERhdGUoKT8udG9TdHJpbmcoKT8ucGFkU3RhcnQoMiwgJzAnKTtcblxuICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gO1xuICB9XG4gIFxuICBzYXZlQXNUZXh0RmlsZShyb3dzSW5mbzogYW55LCByZXBvcnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgIGNvbnN0IGZpZWxkc1RvRGlzcGxheSA9IHJvd3NJbmZvLmxlbmd0aCA+IDAgPyBPYmplY3Qua2V5cyhyb3dzSW5mb1swXSkgOiBbXTtcbiAgICAgIGNvbnN0IGhlYWRlclJvdyA9IGZpZWxkc1RvRGlzcGxheT8uam9pbignXFx0Jyk7XG4gICAgICBjb25zdCBmb3JtYXR0ZWRSb3dzID0gcm93c0luZm8/Lm1hcCgocm93KSA9PiB7XG4gICAgICAgIHJldHVybiBmaWVsZHNUb0Rpc3BsYXk/Lm1hcCgoZmllbGQpID0+IHJvd1tmaWVsZF0pPy5qb2luKCdcXHQnKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgcm93c0RhdGEgPSBbaGVhZGVyUm93LCAuLi5mb3JtYXR0ZWRSb3dzXS5qb2luKCdcXG4nKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBuZXcgQmxvYihbcm93c0RhdGFdLCB7IHR5cGU6ICd0ZXh0JyB9KTtcbiAgICBcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIHJlcG9ydE5hbWUpO1xuICB9XG5cbiAgc2F2ZURhdGFBc0Nzdihyb3dzSW5mbzogYW55LCByZXBvcnROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoIXJvd3NJbmZvIHx8ICFyb3dzSW5mby5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNhdmVBc0NzdkZpbGUocm93c0luZm8sIHJlcG9ydE5hbWUpO1xuICAgIH1cbiAgICBjb25zdCBzZXBhcmF0b3IgPSAnLCc7XG4gICAgY29uc3QgY29sdW1ucyA9IE9iamVjdC5rZXlzKHJvd3NJbmZvWzBdKTtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocm93c0luZm9bMF0pLmZpbHRlcihrID0+IHtcbiAgICAgIGlmIChjb2x1bW5zPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbnMuaW5jbHVkZXMoayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjc3ZDb250ZW50ID1cbiAgICAgIGtleXMuam9pbihzZXBhcmF0b3IpICtcbiAgICAgICdcXG4nICtcbiAgICAgIHJvd3NJbmZvLm1hcChyb3cgPT4ge1xuICAgICAgICByZXR1cm4ga2V5cy5tYXAoayA9PiB7XG4gICAgICAgICAgbGV0IGNlbGwgPSByb3dba10gPT09IG51bGwgfHwgcm93W2tdID09PSB1bmRlZmluZWQgPyAnJyA6IHJvd1trXTtcbiAgICAgICAgICBjZWxsID0gY2VsbCBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgID8gY2VsbC50b0xvY2FsZVN0cmluZygpXG4gICAgICAgICAgICA6IGNlbGwudG9TdHJpbmcoKS5yZXBsYWNlKC9cIi9nLCAnXCJcIicpO1xuICAgICAgICAgIGlmIChjZWxsLnNlYXJjaCgvKFwifCx8XFxuKS9nKSA+PSAwKSB7XG4gICAgICAgICAgICBjZWxsID0gYFwiJHtjZWxsfVwiYDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNlbGw7XG4gICAgICAgIH0pLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgIH0pLmpvaW4oJ1xcbicpO1xuICAgIHRoaXMuc2F2ZUFzQ3N2RmlsZShjc3ZDb250ZW50LCByZXBvcnROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gQ1NWIChzdWItbWV0aG9kKVxuICAgKi9cblxuICBzYXZlQXNDc3ZGaWxlKGNzdkNvbnRlbnQ6IHN0cmluZywgcmVwb3J0TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZGF0YSA9IG5ldyBCbG9iKFtjc3ZDb250ZW50XSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pO1xuICAgIEZpbGVTYXZlci5zYXZlQXMoZGF0YSwgcmVwb3J0TmFtZSArICcuY3N2Jyk7XG4gIH1cblxuICBhZGROZXdSb3coZ3JpZE5hbWU6IHN0cmluZyA9ICcnKSB7XG4gICAgbGV0IGFkZEJ1dHRvbjogYW55ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnZ2xvYmFsLWFkZC1idG4nICsgZ3JpZE5hbWUpO1xuICAgIGlmIChhZGRCdXR0b24gJiYgYWRkQnV0dG9uLmxlbmd0aCA+IDApIHtcbiAgICAgIGFkZEJ1dHRvblswXT8uY2xpY2soKTtcbiAgICB9XG4gIH1cblxuICBpbmNyZW1lbnRDYWxscygpIHtcbiAgICB0aGlzLm51bWJlck9mQ2FsbHMrKztcbiAgfVxuXG4gIGdldE51bWJlck9mQ2FsbHMoKSB7XG4gICAgcmV0dXJuIHRoaXMubnVtYmVyT2ZDYWxscztcbiAgfVxufSJdfQ==
|
|
1659
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2UtdWktdG9vbGtpdC9zcmMvbGliL3NlcnZpY2VzL2dyaWQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBSXJELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIscUJBQXFCLEVBSXJCLGVBQWUsRUFLZixjQUFjLEVBS2QsY0FBYyxFQUVkLGNBQWMsRUFFZCxVQUFVLEVBQ1YsZ0JBQWdCLEdBQ2pCLE1BQU0sc0JBQXNCLENBQUM7QUFJOUIsT0FBTyxLQUFLLFNBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUtqRCxPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEtBQUssT0FBTyxNQUFNLDZCQUE2QixDQUFBOzs7Ozs7OztBQUl0RCxNQUFNLE9BQU8sV0FBVztJQVF0QixZQUNTLFFBQWtCLEVBQ2pCLGdCQUFrQyxFQUNsQyxlQUFnQyxFQUNoQyxZQUEwQixFQUMxQixjQUE4QixFQUM5QixLQUFxQjtRQUx0QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2pCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQWJ2QixrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUNsQyxpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUM5Qix1QkFBa0IsR0FBUSxFQUFFLENBQUM7UUFDN0IscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBQ2pDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDcEIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2pDLFlBQU8sR0FBRyxDQUFDLENBQUM7SUFRakIsQ0FBQztJQUVKOzs7O09BSUc7SUFDSCxjQUFjLENBQUMsS0FBb0IsRUFBRSxPQUFzQjtRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNoRCxPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsU0FBUztRQUVQLE9BQU8sVUFBVSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILHNCQUFzQixDQUFDLE9BQXNCO1FBQzNDLE9BQU8sT0FBTzthQUNYLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FDakIsR0FBRyxDQUFDLElBQUksQ0FDTixDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUNULENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUNqRTtZQUNDLENBQUMsQ0FBQztnQkFDRSxHQUFHLENBQUM7Z0JBQ0osS0FBSyxFQUFFLEdBQUc7cUJBQ1AsTUFBTSxDQUNMLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQ3pEO3FCQUNBLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztxQkFDbkIsSUFBSSxFQUFFO2FBQ1Y7WUFDSCxDQUFDLENBQUMsQ0FBQyxDQUNOO2FBQ0EsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCw2QkFBNkI7SUFDN0IsbUJBQW1CLENBQ2pCLEtBQW9CLEVBQ3BCLE9BQXNCO1FBRXRCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsb0JBQW9CLENBQUMsYUFBOEI7UUFDakQsTUFBTSxVQUFVLEdBQWtCLEVBQUUsQ0FBQztRQUVyQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBcUIsRUFBRSxFQUFFO1lBQy9DLElBQ0UsQ0FBQyxDQUFDLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hFLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDO2dCQUN0QixDQUFDLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxRQUFRO29CQUMvQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztvQkFDNUIsTUFBTSxDQUFDLEtBQUssQ0FBQztnQkFDZixDQUFDLE9BQU8sTUFBTSxDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLEtBQUssS0FBSyxJQUFJLENBQUM7Z0JBQzVELE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsY0FBYyxFQUNwRDtnQkFDQSxJQUNFLE1BQU0sQ0FBQyxJQUFJLEtBQUsscUJBQXFCLENBQUMsY0FBYztvQkFDcEQsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQ3ZDO29CQUVBLDBCQUEwQjtvQkFDMUIsVUFBVSxDQUFDLElBQUksQ0FBQzt3QkFDZCxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7d0JBQy9DLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLO3dCQUN0RCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSzt3QkFDbkQsS0FBSyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO3dCQUMvQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7cUJBQzlCLENBQUMsQ0FBQztvQkFFRiw0QkFBNEI7b0JBQzVCLFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7d0JBQ3hDLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLO3dCQUN0RCxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSzt3QkFDbkQsS0FBSyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7d0JBQ3hDLFVBQVUsRUFBRSxNQUFNLENBQUMsVUFBVTtxQkFDOUIsQ0FBQyxDQUFDO2lCQUNKO3FCQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxxQkFBcUIsQ0FBQyxjQUFjLEVBQUU7b0JBQy9ELFVBQVUsQ0FBQyxJQUFJLENBQUM7d0JBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUM7d0JBQ3hDLFNBQVMsRUFDUCxNQUFNLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLFdBQVc7NEJBQy9DLENBQUMsQ0FBQyxJQUFJOzRCQUNOLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUzt3QkFDdEIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUs7d0JBQ25ELEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDO3dCQUN4QyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7cUJBQzlCLENBQUMsQ0FBQztpQkFDSjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsb0JBQW9CLENBQUMsTUFBVyxFQUFFLGNBQXVCLElBQUk7UUFDM0QsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLHFCQUFxQixDQUFDLGNBQWMsRUFBRTtZQUN4RCxJQUFJLFdBQVcsRUFBRTtnQkFDZixPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDekI7aUJBQU07Z0JBQ0wsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDO2FBQ3ZCO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCwwQkFBMEI7SUFDMUIsb0JBQW9CLENBQ2xCLE1BQXFCLEVBQ3JCLGNBQXVCLElBQUk7UUFFM0IsUUFBUSxNQUFNLENBQUMsSUFBSSxFQUFFO1lBQ25CLEtBQUsscUJBQXFCLENBQUMsV0FBVztnQkFDcEMsT0FBUSxNQUFNLENBQUMsS0FBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMzQyxLQUFLLHFCQUFxQixDQUFDLFFBQVE7Z0JBQ2pDLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFhLENBQUMsQ0FBQztZQUNyRCxLQUFLLHFCQUFxQixDQUFDLGNBQWM7Z0JBQ3ZDLElBQUksVUFBVSxHQUFhLE1BQU0sQ0FBQyxLQUFLO29CQUNyQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO29CQUNwQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNQLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUN4QyxJQUFJLFNBQVMsR0FBUyxXQUFXO3dCQUMvQixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUN6QixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzVCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUN6QztxQkFBTTtvQkFDTCxPQUFPLEVBQUUsQ0FBQztpQkFDWDtZQUNILEtBQUsscUJBQXFCLENBQUMsUUFBUTtnQkFDakMsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNyQztnQkFDRSxPQUFPLE1BQU0sQ0FBQyxLQUFlLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQXNCLEVBQUUsR0FBUSxFQUFFLGFBQXNCLEtBQUs7UUFDekUsSUFBSSxPQUFPLEdBQVksSUFBSSxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUN4QixJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUN0QyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDaEQsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDLG1CQUFtQixDQUNuRCxJQUFJLEVBQ0osR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDZixDQUFDLENBQ0YsQ0FBQztvQkFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUM7b0JBQzlDLElBQ0UsQ0FBQyxVQUFVO3dCQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxRQUFRO3dCQUNuRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNoQixDQUFDLElBQUksQ0FBQyxNQUFNO3dCQUNaLEtBQUssRUFDTDt3QkFDQSxPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7NEJBQ3ZCLENBQUMsQ0FBQyxJQUFJOzRCQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssY0FBYyxDQUFDLENBQUM7d0JBQ3ZELE1BQU07cUJBQ1A7eUJBQU0sSUFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDZixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsU0FBUzt3QkFDcEQsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQ3ZEO3dCQUNBLE9BQU87NEJBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO2dDQUNyRCxDQUFDLENBQUMsSUFBSTtnQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsYUFBYSxDQUN0RSxDQUFDO3dCQUNSLE1BQU07cUJBQ1A7eUJBQU0sSUFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDZixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsU0FBUzt3QkFDcEQsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQ3ZEO3dCQUNBLE9BQU87NEJBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO2dDQUNyRCxDQUFDLENBQUMsSUFBSTtnQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsYUFBYSxDQUN0RSxDQUFDO3dCQUNSLE1BQU07cUJBQ1A7eUJBQ0ksSUFDSCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDZixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsVUFBVSxFQUVyRDt3QkFDQSxJQUFJLE9BQU8sR0FBUSxDQUFDLENBQUM7d0JBQ3JCLElBQUksS0FBSyxHQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzFCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTs0QkFDekMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxFQUFFO2dDQUNuQixPQUFPLEVBQUUsQ0FBQzs2QkFDWDt5QkFDRjt3QkFDRCxzQkFBc0I7d0JBQ3RCLE9BQU87NEJBQ0wscUJBQXFCOzRCQUNyQixPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO2dDQUN2QyxDQUFDLENBQUMsSUFBSTtnQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsVUFBVSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUEsQ0FBQyxDQUFBLEdBQUcsQ0FBQSxDQUFDLENBQUEsRUFBRSxFQUFFLENBQzVHLENBQUM7d0JBQ1IsTUFBTTtxQkFDUDt5QkFFSSxJQUNILEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxPQUFPO3dCQUNsRCxPQUFPLEVBQ1A7d0JBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7NEJBQ3RDLE9BQU87Z0NBQ0wsZUFBZSxLQUFLLFNBQVM7b0NBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLEVBQ0osV0FBVyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDckQ7b0NBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQzt5QkFDWjs2QkFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7NEJBQzNELE9BQU87Z0NBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7b0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO29DQUNyRCxDQUFDLENBQUMsSUFBSTtvQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDcEUsQ0FBQzt5QkFDVDtxQkFDRjt5QkFBTSxJQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxPQUFPO3dCQUNsRCxPQUFPLEVBQ1A7d0JBQ0EsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7NEJBQ3RDLE9BQU87Z0NBQ0wsZUFBZSxLQUFLLFNBQVM7b0NBQzNCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLEVBQ0osV0FBVyxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDckQ7b0NBQ0gsQ0FBQyxDQUFDLElBQUksQ0FBQzt5QkFDWjs2QkFBTSxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7NEJBQzNELE9BQU87Z0NBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7b0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVO29DQUNyRCxDQUFDLENBQUMsSUFBSTtvQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FDbEIsSUFBSSxFQUNKLEdBQUcsSUFBSSxDQUFDLE1BQU0sWUFBWSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FDcEUsQ0FBQzt5QkFDVDtxQkFDRjt5QkFBTSxJQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxPQUFPO3dCQUNsRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQ3REO3dCQUNBLE9BQU87NEJBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7Z0NBQ25ELENBQUMsQ0FBQyxJQUFJO2dDQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxlQUFlLEtBQUssRUFBRSxDQUFDLENBQUM7d0JBQ3pELE1BQU07cUJBQ1A7eUJBQU0sSUFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQzt3QkFDZixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxjQUFjLENBQUMsT0FBTzt3QkFDbEQsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxFQUN0RDt3QkFDQSxPQUFPOzRCQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7Z0NBQ3hELENBQUMsQ0FBQyxJQUFJO2dDQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLEVBQ0osU0FBUyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxLQUFLLEVBQUUsQ0FDakQsQ0FBQzt3QkFDUixNQUFNO3FCQUNQO3lCQUFNLElBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLEtBQUs7d0JBQ2hELENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsRUFDaEU7d0JBQ0EsT0FBTzs0QkFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztnQ0FDZixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztnQ0FDM0QsQ0FBQyxDQUFDLElBQUk7Z0NBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGVBQWUsS0FBSyxFQUFFLENBQUMsQ0FBQzt3QkFDekQsTUFBTTtxQkFDUDt5QkFBTSxJQUNMLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO3dCQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGNBQWMsQ0FBQyxPQUFPO3dCQUNsRCxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLEVBQy9EO3dCQUNBLE9BQU87NEJBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUM7Z0NBQ3pELENBQUMsQ0FBQyxJQUFJO2dDQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUNsQixJQUFJLEVBQ0osU0FBUyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxLQUFLLEVBQUUsQ0FDakQsQ0FBQzt3QkFDUixNQUFNO3FCQUNQO3lCQUFNLElBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7d0JBQ2YsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksY0FBYyxDQUFDLEtBQUs7d0JBQ2hELENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7NEJBQ2QsRUFBRSxRQUFRLEVBQUU7NkJBQ1gsS0FBSyxDQUFDLGlEQUFpRCxDQUFDLEVBQzNEO3dCQUNBLE9BQU87NEJBQ0wsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7Z0NBQ2YsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7b0NBQ2IsRUFBRSxRQUFRLEVBQUU7cUNBQ1gsS0FBSyxDQUFDLGlEQUFpRCxDQUFDO2dDQUN6RCxDQUFDLENBQUMsSUFBSTtnQ0FDTixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsZUFBZSxLQUFLLEVBQUUsQ0FBQyxDQUFDO3dCQUN6RCxNQUFNO3FCQUNQO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxlQUFlLENBQUMsSUFBaUIsRUFBRSxZQUFvQjtRQUNyRCxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNyQixPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCx5QkFBeUI7SUFDekIsbUJBQW1CLENBQUMsTUFBVztRQUM3QixJQUFJLE1BQU0sWUFBWSxJQUFJLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEM7YUFBTSxJQUFJLE9BQU8sTUFBTSxLQUFLLFNBQVMsRUFBRTtZQUN0QyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDdkI7YUFBTTtZQUNMLE9BQU8sTUFBTSxDQUFDO1NBQ2Y7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFlBQVksQ0FDVixFQUFFLGFBQWEsRUFBaUIsRUFDaEMsT0FBc0I7UUFFdEIsT0FBTyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQU8sRUFBRSxDQUFDLENBQUM7WUFDOUQsS0FBSztZQUNMLFNBQVMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUk7WUFDdkUsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDO1lBQ2YsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztTQUMvQyxDQUFDLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsVUFBVSxDQUFDLEtBQVUsRUFBRSxPQUFzQjtRQUMzQyxNQUFNLE9BQU8sR0FBa0IsRUFBRSxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBTSxFQUFFLEVBQUU7WUFDNUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN2QixLQUF1QixDQUFDLE9BQU8sQ0FDOUIsQ0FBQyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7b0JBQ3pDLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTt3QkFDbkIsT0FBTyxDQUFDLElBQUksQ0FBQzs0QkFDWCxLQUFLOzRCQUNMLFNBQVM7NEJBQ1QsUUFBUTs0QkFDUixLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQzs0QkFDdkMsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQzt5QkFDL0MsQ0FBQyxDQUFDO3FCQUNKO2dCQUNILENBQUMsQ0FDRixDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsSUFBSSxLQUFLLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRTtvQkFDdEIsUUFBUSxPQUFPLEtBQUssQ0FBQyxLQUFLLEVBQUU7d0JBQzFCLEtBQUssU0FBUzs0QkFDWixPQUFPLENBQUMsSUFBSSxDQUFDO2dDQUNYLEtBQUs7Z0NBQ0wsU0FBUyxFQUFFLFFBQVE7Z0NBQ25CLFFBQVEsRUFBRSxLQUFLO2dDQUNmLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0NBQ2pDLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7NkJBQy9DLENBQUMsQ0FBQzs0QkFDSCxNQUFNO3dCQUNSLEtBQUssUUFBUTs0QkFDWCxPQUFPLENBQUMsSUFBSSxDQUFDO2dDQUNYLEtBQUs7Z0NBQ0wsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO2dDQUMxQixRQUFRLEVBQUUsS0FBSztnQ0FDZixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0NBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7NkJBQy9DLENBQUMsQ0FBQzs0QkFDSCxNQUFNO3dCQUNSLEtBQUssUUFBUTs0QkFDWCxPQUFPLENBQUMsSUFBSSxDQUFDO2dDQUNYLEtBQUs7Z0NBQ0wsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO2dDQUMxQixRQUFRLEVBQUUsS0FBSztnQ0FDZixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7Z0NBQ2xCLFVBQVUsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7NkJBQy9DLENBQUMsQ0FBQzs0QkFDSCxNQUFNO3dCQUNSLEtBQUssUUFBUTs0QkFDWCxJQUFJLEtBQUssQ0FBQyxLQUFLLFlBQVksSUFBSSxFQUFFO2dDQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDO29DQUNYLEtBQUs7b0NBQ0wsU0FBUyxFQUFFLE9BQU87b0NBQ2xCLFFBQVEsRUFBRSxLQUFLO29DQUNmLEtBQUssRUFDSCxLQUFLLENBQUMsS0FBSyxZQUFZLElBQUk7d0NBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQzt3Q0FDcEMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLO29DQUNqQixVQUFVLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO2lDQUMvQyxDQUFDLENBQUM7NkJBQ0o7aUNBQU07Z0NBQ0wsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO29DQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDO3dDQUNYLEtBQUs7d0NBQ0wsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO3dDQUMxQixRQUFRLEVBQUUsS0FBSzt3Q0FDZixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7d0NBQ2QsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztxQ0FDL0MsQ0FBQyxDQUFDO2dDQUNMLENBQUMsQ0FBQyxDQUFDOzZCQUNKOzRCQUNELE1BQU07d0JBQ1I7NEJBQ0UsSUFBSSxDQUFDO3FCQUNSO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsaUJBQWlCLENBQUMsS0FBVTtRQUMxQixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBQzVFLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsZ0JBQWdCLENBQUMsS0FBVztRQUMxQixPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFQSxtRUFBbUU7SUFDbkUsV0FBVyxDQUFDLE9BQVk7UUFDdkIsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNwQyxNQUFNLE1BQU0sR0FBRyxHQUFHLEdBQUMsTUFBTSxDQUFDO1lBQzFCLElBQUcsR0FBRyxLQUFLLGNBQWMsQ0FBQyxTQUFTLElBQUksR0FBRyxLQUFLLGNBQWMsQ0FBQyxPQUFPLEVBQUM7Z0JBQ3BFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ3JCO2lCQUNJLElBQ0gsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDZixPQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssUUFBUSxFQUNwQztnQkFDQSxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN4QjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELCtDQUErQztJQUMvQyxjQUFjLENBQUMsT0FBTztRQUNwQixJQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUM7WUFDeEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO2dCQUNyQixHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixDQUFDLENBQUMsQ0FBQTtTQUNIO2FBQU07WUFDTCxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNyQztRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsbUJBQW1CLENBQUMsV0FBa0IsRUFBRSxFQUFFLE9BQXNCO1FBQzlELFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFtQixFQUFFLEVBQUU7WUFDdEMsSUFBSSxLQUFLLEdBQUcsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUN6QyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFDLEVBQUU7Z0JBQ3RCLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDL0MsQ0FBQyxDQUFDLENBQUE7WUFDRixJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssS0FBSyxFQUFFO2dCQUM5QixRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ3ZCLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQzNCLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ25CLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTs0QkFDaEIsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtnQ0FDcEQsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7NkJBQ2Y7d0JBQ0gsQ0FBQyxDQUFDLENBQUE7cUJBQ0g7b0JBQ0QsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2xCLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUM5QixDQUFDLENBQUMsQ0FBQTthQUNIO2lCQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDdkIsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFBO29CQUN0QixJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLElBQUksRUFBRTt3QkFDNUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztxQkFDbkc7eUJBQU0sSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxPQUFPLEVBQUU7d0JBQ3RELEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7cUJBQ25HO3lCQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFFO3dCQUN0RCxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO3FCQUN0RztnQkFDSCxDQUFDLENBQUMsQ0FBQTthQUNIO2lCQUFNLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxFQUFFO2dCQUMvQywrQkFBK0I7Z0JBQy9CLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDdkIsSUFBSSxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7d0JBQzFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7cUJBQzdEO3lCQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7d0JBQzlDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztxQkFDekU7eUJBQU0sSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7d0JBQ2hFLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztxQkFDOUM7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7YUFDSDtRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxlQUFlLENBQUMsVUFBYyxFQUFFLEVBQUUsT0FBc0I7UUFDdEQsSUFBSSxHQUFHLEdBQUcsRUFBRSxHQUFHLE9BQU8sRUFBRSxDQUFDO1FBQ3pCLEdBQUcsR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsR0FBRyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3pCLElBQUksS0FBSyxHQUFHLE1BQU0sRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDekMsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM3QyxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksS0FBSyxFQUFFO2dCQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEVBQUU7d0JBQ3BELE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUNmO2dCQUNILENBQUMsQ0FBQyxDQUFBO2dCQUNGLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQzlFLElBQUksR0FBRyxFQUFFO29CQUNQLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNqQjthQUNGO2lCQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RFLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtnQkFDdEIsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQUU7b0JBQzVDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxHQUFHLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7aUJBQ25HO3FCQUFNLElBQUksTUFBTSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsT0FBTyxFQUFFO29CQUN0RCxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2lCQUNuRztxQkFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssY0FBYyxDQUFDLE9BQU8sRUFBRTtvQkFDdEQsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztpQkFDdEc7YUFDRjtpQkFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtnQkFDL0MsK0JBQStCO2dCQUMvQixJQUFJLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtvQkFDMUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztpQkFDN0Q7cUJBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtvQkFDOUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO2lCQUN6RTtxQkFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtvQkFDaEUsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2lCQUM5QzthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxnREFBZ0Q7SUFDaEQsWUFBWSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBc0I7UUFDN0MsSUFBSSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixJQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRTtnQkFDbEIsSUFBRyxHQUFHLEtBQUssS0FBSyxHQUFHLE9BQU8sSUFBSSxHQUFHLEtBQUssS0FBSyxHQUFHLGFBQWEsSUFBSSxHQUFHLEtBQUssS0FBSyxHQUFHLE1BQU0sRUFBQztvQkFDcEYsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ2pCO1lBQ0gsQ0FBQyxDQUFDLENBQUE7U0FDSDtRQUNELEdBQUcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQzdDLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQUcsRUFBRSxPQUFzQjtRQUM5QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUcsT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBQyxFQUFFO2dCQUNsQixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO2dCQUM1RixJQUFHLENBQUMsUUFBUSxFQUFDO29CQUNYLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNqQjtZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsU0FBUyxDQUFDLFVBQXFCO1FBQzdCLElBQUksVUFBVSxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsUUFBUSxFQUFFO1lBQ2hELFVBQVUsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVc7Z0JBQzdDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVztnQkFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNaLFVBQVUsQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVc7Z0JBQzdDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVztnQkFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUNiO2FBQU0sSUFBSSxVQUFVLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNLEVBQUU7WUFDckQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUMvQyxVQUFVLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQzthQUM5QjtZQUNELElBQUksVUFBVSxDQUFDLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQzthQUNyQztTQUNGO1FBQ0QsTUFBTSxNQUFNLEdBQWdCO1lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVyxJQUFJLEtBQUs7WUFDNUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLHFCQUFxQixFQUFFLFVBQVUsQ0FBQyxxQkFBcUI7WUFDdkQsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO1lBQy9CLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztZQUN2QixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1lBQ3ZCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJO1lBQ3JCLFdBQVcsRUFBQyxVQUFVLENBQUMsV0FBVztZQUNsQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDL0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1lBQ3pCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87WUFDM0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1lBQ3pCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztZQUMvQixVQUFVLEVBQUUsVUFBVSxDQUFDLFVBQVU7WUFDakMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO1lBQ3pCLGVBQWUsRUFBRSxVQUFVLENBQUMsZUFBZTtZQUMzQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO1lBQ2pDLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztZQUNuQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07WUFDekIsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLFNBQVMsRUFBRSxVQUFVLENBQUMsU0FBUztZQUMvQixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDL0IsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM3QixZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7WUFDckMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO1lBQy9CLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztZQUMzQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7WUFDN0IsVUFBVSxFQUFFLFVBQVUsQ0FBQyxVQUFVO1lBQ2pDLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM3QixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDL0IsU0FBUyxFQUFFLFVBQVUsQ0FBQyxTQUFTO1lBQy9CLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztZQUNuQyxXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7WUFDbkMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxXQUFXO1lBQ25DLFlBQVksRUFBRSxVQUFVLENBQUMsWUFBWTtZQUNyQyxTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7WUFDL0IsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRO1lBQzdCLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUM3QixhQUFhLEVBQUUsVUFBVSxDQUFDLGFBQWE7WUFDdkMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxZQUFZO1lBQ3JDLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtZQUNyQixLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUs7WUFDdkIsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFO1lBQ2pCLEtBQUssRUFBRSxVQUFVLENBQUMsS0FBSztZQUN2QixXQUFXLEVBQUUsVUFBVSxDQUFDLFdBQVc7WUFDbkMsUUFBUSxFQUFDLFVBQVUsQ0FBQyxRQUFRO1lBQzVCLFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVztZQUNuQyxZQUFZLEVBQUUsVUFBVSxDQUFDLFlBQVk7U0FDdEMsQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsWUFBWSxDQUFDLFVBQTBCO1FBQ3JDLFVBQVUsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztRQUN6QyxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQsK0JBQStCO0lBQy9CLGNBQWMsQ0FDWixnQkFBMkIsRUFDM0IsYUFBc0IsSUFBSTtRQUUxQixJQUFJLFVBQVUsRUFBRTtZQUNkLGdCQUFnQixDQUFDLE1BQU0sR0FBRztnQkFDeEIsSUFBSSxFQUFFLHFCQUFxQixDQUFDLEtBQUs7Z0JBQ2pDLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDO2FBQ2xELENBQUM7U0FDSDtRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsZ0JBQWdCLENBQ2QsVUFBcUIsRUFDckIsYUFBc0IsSUFBSTtRQUUxQixJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxNQUFNLEdBQUc7Z0JBQ2xCLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLFlBQVk7Z0JBQzVGLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzthQUM1QyxDQUFDO1NBQ0g7UUFDRCxVQUFVLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7UUFDMUMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsaUJBQWlCLENBQ2YsVUFBcUIsRUFDckIsYUFBc0IsSUFBSTtRQUUxQixJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxNQUFNLEdBQUc7Z0JBQ2xCLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLFFBQVE7Z0JBQ3hGLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzthQUM1QyxDQUFDO1NBQ0g7UUFDRCxVQUFVLENBQUMsSUFBSSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7UUFDM0UsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxhQUFhLENBQUMsTUFBVztRQUN2QixJQUFJLFVBQVUsR0FBUSxFQUFFLENBQUM7UUFDekIsSUFBSSxNQUFNLEVBQUUsSUFBSSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDekQsVUFBVSxHQUFHLE1BQU0sQ0FBQztTQUNyQjthQUFNO1lBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQzlDLElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDM0MsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDNUI7WUFDSCxDQUFDLENBQUMsQ0FBQTtTQUNIO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUdELHlDQUF5QztJQUN6QyxnQkFBZ0IsQ0FDZCxVQUFxQixFQUNyQixhQUFzQixJQUFJO1FBRTFCLElBQUksVUFBVSxFQUFFO1lBQ2QsQ0FBQyxVQUFVLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7Z0JBQ3pDLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRztvQkFDbkIsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFFBQVE7b0JBQ3BDLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztpQkFDNUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVGLDZCQUE2QjtJQUM3QixlQUFlLENBQUMsVUFBeUIsRUFBRSxhQUFzQixJQUFJO1FBQ3BFLElBQUksVUFBVSxFQUFFO1lBQ2QsVUFBVSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztTQUMvRztRQUNELFVBQVUsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQztRQUMvQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELDZCQUE2QjtJQUM1QixlQUFlLENBQUMsVUFBeUIsRUFBRSxhQUFzQixJQUFJO1FBQ3BFLElBQUksVUFBVSxFQUFFO1lBQ2QsVUFBVSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztTQUN4RztRQUNELFVBQVUsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztRQUN6QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVBLDZCQUE2QjtJQUM3QixlQUFlLENBQUMsVUFBcUI7UUFDbkMsVUFBVSxDQUFDLElBQUksR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDO1FBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO1lBQ3JCLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQztTQUMxRTtRQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsbUNBQW1DO0lBQ25DLGVBQWUsQ0FBQyxVQUFxQjtRQUNuQyxVQUFVLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQyxZQUFZLENBQUM7UUFDL0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsbUJBQW1CLENBQ2pCLE1BQVksRUFDWixTQUFrQixFQUNsQixPQUFlLEVBQ2YsU0FBaUIsRUFBRTtRQUVuQixJQUFJLENBQUMsY0FBYzthQUNoQixHQUFHLENBQWEsYUFBYSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQzthQUNqRSxTQUFTLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtZQUMzQixNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELENBQUMsRUFBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtZQUNkLElBQUksUUFBUSxHQUFNLEVBQUUsQ0FBQztZQUNyQixRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0YsS0FBSyxDQUFDLG9CQUFvQixDQUFDLFNBQTRCLEVBQUUsS0FBUyxFQUFFLE1BQVUsRUFBRSxHQUFPO1FBQ3RGLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUVqQixLQUFJLElBQUksQ0FBQyxHQUFFLENBQUMsRUFBQyxDQUFDLEdBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUM7WUFDMUMsSUFBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBRSxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFFLE1BQU0sQ0FBQyxZQUFZLEVBQUUsV0FBVyxFQUFFLEVBQUM7Z0JBQ2pKLFFBQVEsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFDLEtBQUssQ0FBQzthQUUxQztpQkFBSTtnQkFDSCxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUE7YUFDM0Y7U0FDRjtRQUdDLElBQUksQ0FBQyxjQUFjO2FBQ2hCLEdBQUcsQ0FBYSxZQUFZLEVBQUUsRUFBRSxTQUFTLEVBQUMsU0FBUyxDQUFDLElBQUksRUFBRyxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUM7YUFDOUUsU0FBUyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7WUFDM0IsQ0FBQyxFQUFDLEtBQUssRUFBQyxFQUFDLEVBQUU7Z0JBQ1QsT0FBTyxLQUFLLENBQUE7WUFDZCxDQUFDLENBQUE7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsR0FBRztRQUMzQixJQUFJLFdBQVcsQ0FBQztRQUNoQixJQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBQztZQUNoRSxLQUFLLEdBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBQyxFQUFFLENBQUMsQ0FBQztZQUM1QyxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9CLElBQUksR0FBRyxHQUFHLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxLQUFLLEVBQUUsUUFBUSxFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN0RixXQUFXLEdBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO2FBQUk7WUFDSCxXQUFXLEdBQUMsS0FBSyxDQUFBO1NBQ2xCO1FBQ0QsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxpQkFBaUIsQ0FDZixVQUFxQixFQUNyQixhQUFzQixJQUFJLEVBQzFCLFlBQStCO1FBRS9CLFVBQVUsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUMzQyxVQUFVLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXO1lBQzdDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVztZQUN4QixDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ1osVUFBVSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVztZQUM3QyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNaLElBQUksVUFBVSxFQUFFO1lBQ2QsVUFBVSxDQUFDLE1BQU0sR0FBRztnQkFDbEIsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFFBQVE7Z0JBQ3BDLElBQUksRUFDRixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLFVBQVUsQ0FBQyxJQUFJO29CQUMzRCxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUk7b0JBQ2pCLENBQUMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUk7d0JBQzFCLENBQUMsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUk7d0JBQzFCLENBQUMsQ0FBQyxFQUFFO2dCQUNSLFVBQVUsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQzthQUM1QyxDQUFDO1NBQ0g7UUFDRCxJQUFJLFlBQVksRUFBRTtZQUNoQixVQUFVLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztZQUN2QyxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDdkMsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztZQUN2QyxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQ25DLElBQUksU0FBUyxJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUU7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FDekIsVUFBVSxFQUNWLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULE9BQU8sQ0FDUixDQUFDO2FBQ0g7U0FDRjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ25DO0lBQ0gsQ0FBQztJQUNELHNDQUFzQztJQUN0Qyw0QkFBNEIsQ0FDMUIsVUFBcUIsRUFDckIsYUFBc0IsSUFBSSxFQUMxQixlQUFrQztRQUVsQyxVQUFVLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXO1lBQzdDLENBQUMsQ0FBQyxVQUFVLENBQUMsV0FBVztZQUN4QixDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ1osVUFBVSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVztZQUM3QyxDQUFDLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDeEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUNaLFVBQVUsQ0FBQyxJQUFJLEdBQUcsZUFBZSxDQUFDLFdBQVcsQ0FBQztRQUM5QyxJQUFJLFVBQVUsRUFBRTtZQUNkLFVBQVUsQ0FBQyxNQUFNLEdBQUc7Z0JBQ2xCLElBQUksRUFBRSxxQkFBcUIsQ0FBQyxXQUFXO2dCQUN2QyxJQUFJLEVBQ0YsQ0FBQyxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxVQUFVLENBQUMsSUFBSTtvQkFDOUQsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJO29CQUNqQixDQUFDLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJO3dCQUMxQixDQUFDLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJO3dCQUMxQixDQUFDLENBQUMsRUFBRTtnQkFDUixVQUFVLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7YUFDNUMsQ0FBQztTQUNIO1FBQ0QsSUFBSSxlQUFlLEVBQUU7WUFDbkIsVUFBVSxDQUFDLFlBQVksR0FBRyxlQUFlLENBQUM7WUFDMUMsSUFBSSxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQzFDLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUM7WUFDMUMsSUFBSSxPQUFPLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQztZQUN0QyxJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksU0FBUyxFQUFFO2dCQUN2QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQ3pCLFVBQVUsRUFDVixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxPQUFPLENBQ1IsQ0FBQzthQUNIO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUNuQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsVUFBcUI7UUFDbEMsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFO1lBQ3JELE9BQU8sSUFBSSxDQUFDO1NBQ2I7YUFBTTtZQUNMLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUNiLE1BQW1CLEVBQ25CLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLE9BQWMsRUFDZCxHQUE0QjtRQUU1QixPQUFPLElBQUksQ0FBQyxlQUFlO2FBQ3hCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUM7YUFDekQsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDakIsSUFBSSxHQUFHLEVBQUU7Z0JBQ1AsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLEdBQUcsR0FBRyxDQUFDO2FBQ2xEO2lCQUFNO2dCQUNMLE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO2dCQUNsQixJQUFJLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxVQUFVLElBQUksTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssY0FBYyxDQUFDLEVBQUU7b0JBQ2pHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztpQkFDMUI7YUFDRjtZQUNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHVDQUF1QztJQUN2QyxlQUFlLENBQUMsZ0JBQWlDO1FBQy9DLE1BQU0sTUFBTSxHQUFRO1lBQ2xCLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLO1lBQzdCLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNO1lBQy9CLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUU7WUFDekMsU0FBUyxFQUFFLGdCQUFnQixDQUFDLFNBQVM7WUFDckMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLE1BQU07WUFDL0IsS0FBSyxFQUFFLGdCQUFnQixDQUFDLEtBQUs7WUFDN0IsVUFBVSxFQUFFLGdCQUFnQixDQUFDLFVBQVU7WUFDdkMsV0FBVyxFQUFFLGdCQUFnQixDQUFDLFdBQVc7U0FDMUMsQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCw0Q0FBNEM7SUFDNUMsYUFBYSxDQUFDLGNBQStCO1FBQzNDLE1BQU0sTUFBTSxHQUFnQjtZQUMxQixLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUs7WUFDM0IsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO1lBQzdCLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSTtZQUN0RSxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVM7WUFDbkMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLHFCQUFxQixDQUFDLFFBQVEsRUFBRTtZQUNoRCxNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07WUFDN0IsS0FBSyxFQUFFLGNBQWMsQ0FBQyxLQUFLO1lBQzNCLFVBQVUsRUFBRSxjQUFjLENBQUMsVUFBVTtZQUNyQyxRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVE7WUFDakMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxTQUFTO1lBQ25DLFdBQVcsRUFBRSxjQUFjLENBQUMsV0FBVztZQUN2QyxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVM7WUFDbkMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxRQUFRO1lBQ2pDLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtZQUNqQyxJQUFJLEVBQUUsY0FBYyxDQUFDLElBQUk7WUFDekIsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO1NBQzlCLENBQUM7UUFDRixPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsZUFBZSxDQUFDLE1BQVcsRUFBRSxhQUFrQixFQUFFLHFCQUE4QixLQUFLO1FBQ2xGLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRTtZQUN4QixJQUFJLFNBQVMsR0FBVSxFQUFFLENBQUM7WUFDMUIsSUFBSSxPQUFPLEdBQVUsRUFBRSxDQUFDO1lBQ3hCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztZQUM1QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9CLElBQUksSUFBSSxJQUFJLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7b0JBQ25CLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDdEMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzt3QkFDN0IsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDckIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztxQkFDaEI7Z0JBQ0gsQ0FBQyxDQUFDLENBQUM7YUFDSjtZQUNELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQzVCLE1BQU0sQ0FBQyxhQUFhLENBQUMsU0FBUyxFQUM5QixNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDMUIsQ0FBQztZQUNGLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDL0QsTUFBTSxnQkFBZ0IsR0FBRyxTQUFTLEVBQUUsUUFBa0MsQ0FBQztZQUN2RSxNQUFNLGNBQWMsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzVELGdCQUFnQixDQUFDLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxDQUFDLGNBQWMsQ0FBQztZQUMxRCxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FDbkIsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDWCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7b0JBQ25CLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7aUJBQ3RCO2dCQUNELElBQUksT0FBTyxFQUFFLE1BQU0sR0FBRyxDQUFDLElBQUksU0FBUyxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ2hELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7d0JBQ2hDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEVBQUU7NEJBQ3RDLElBQUksUUFBUSxLQUFLLFVBQVUsRUFBRTtnQ0FDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQzs2QkFDbkI7d0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsSUFBSSxHQUFHLEVBQUU7b0JBQ1AsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDO29CQUMxRSxJQUFJLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO29CQUN6QixJQUFJLEtBQUssR0FBRyxTQUFTLENBQUMsaUJBQWlCLENBQ3JDLE1BQU0sRUFDTixNQUFNLEVBQUUsYUFBYSxFQUNyQixHQUFHLENBQ0osQ0FBQztvQkFDRixJQUFJLGtCQUFrQixFQUFFO3dCQUN0QixJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxRQUFRLEVBQUU7NEJBQy9CLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3lCQUN6Qjt3QkFDRCxNQUFNLENBQUMsS0FBSyxHQUFHLEtBQUssRUFBRSxLQUFLOzRCQUN6QixDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUs7NEJBQ2IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQzt3QkFDN0IsTUFBTSx1QkFBdUIsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDdEUsdUJBQXVCLENBQUMsS0FBSyxFQUFFLENBQUM7cUJBQ2pDO3lCQUFNO3dCQUNMLE1BQU0sQ0FBQyxXQUFXLEdBQUcsS0FBSyxFQUFFLEtBQUs7NEJBQy9CLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSzs0QkFDYixDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO3FCQUM5QjtpQkFDRjtZQUNILENBQUMsRUFDRCxDQUFDLEVBQUUsS0FBSyxFQUFPLEVBQUUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsQ0FBQyxDQUNGLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsbUJBQW1CLENBQUMsT0FBWSxFQUFFLEtBQWEsRUFBRSxRQUFhO1FBQzVELElBQ0UsT0FBTztZQUNQLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUNsQixLQUFLO1lBQ0wsUUFBUSxDQUFDLE9BQU87WUFDaEIsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUMzQjtZQUNBLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUN4RCxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO2dCQUN0RCxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFO29CQUNyQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUN4QixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7NEJBQy9ELElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO2lDQUN4QixPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztpQ0FDaEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUM7aUNBQ2hCLFdBQVcsRUFBRSxDQUFDOzRCQUNqQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzt5QkFDOUI7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7aUJBQ0o7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLE9BQXNCO1FBQ3JDLE9BQU8sQ0FDTCxPQUFPO1lBQ1AsT0FBTyxDQUFDLElBQUksQ0FDVixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQyxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsSUFBSTtnQkFDOUIsQ0FBQyxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsTUFBTTtnQkFDaEMsQ0FBQyxDQUFDLElBQUksSUFBSSxlQUFlLENBQUMsTUFBTTtnQkFDaEMsQ0FBQyxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUN2RCxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLGFBQWtCLEVBQUUsT0FBc0IsRUFBRSxhQUFrQixFQUFFO1FBQzVFLElBQUksT0FBTyxHQUFRLEVBQUUsQ0FBQztRQUN0QixJQUFJLElBQUksR0FDTixhQUFhLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUMvQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO1lBQzNDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDVCxJQUFJLE1BQVcsQ0FBQztRQUVoQixJQUFHLElBQUksRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQjtpQkFDM0IsYUFBYSxDQUFDLE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDO2lCQUM5QyxJQUFJLENBQUMsQ0FBQyxhQUFrQixFQUFFLEVBQUU7Z0JBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDeEIsTUFBTSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDcEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO3dCQUMzQixNQUFNLFNBQVMsR0FBRyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDO3dCQUN2RixJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUM1QixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssZUFBZSxDQUFDLE1BQU0sRUFBRTs0QkFDdkMsR0FBRyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDOzRCQUMvQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQzs0QkFDOUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQzs0QkFDM0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVzttQ0FDdEMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7Z0NBQzFFLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDOzRCQUNwQixJQUFJLFVBQVUsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDOzRCQUNsQyxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFO2dDQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FDbkQsVUFBVSxDQUFDLElBQUksRUFDZixHQUFHLENBQ0osQ0FBQzs2QkFDSDt5QkFDRjt3QkFDRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksYUFBYSxFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUU7NEJBQzdELGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFpQixFQUFFLEVBQUU7Z0NBQzFDLElBQ0UsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJO29DQUNoQyxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNO29DQUNuQyxHQUFHLENBQUMsSUFBSSxLQUFLLGVBQWUsQ0FBQyxZQUFZLENBQUM7b0NBQzVDLEdBQUcsQ0FBQyxNQUFNO29DQUNWLENBQUMsR0FBRyxDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUMsTUFBTTt3Q0FDakMsU0FBUyxLQUFLLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFDcEM7b0NBQ0EsTUFBTSxTQUFTLEdBQWEsVUFBVSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO29DQUNoSixNQUFNLElBQUksR0FBUSxTQUFTLENBQUMsWUFBWSxDQUN0QyxJQUFJLEVBQ0osR0FBRyxFQUNILFlBQVksQ0FBQyxHQUFHLEVBQ2hCLFNBQVMsRUFDVCxHQUFHLENBQUMsTUFBTSxDQUNYLENBQUM7b0NBRUYsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUM7b0NBQzlDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUM7b0NBQzNCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDO29DQUNqQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztvQ0FDL0IsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsR0FBRyxHQUFHLENBQUMsV0FBVzt3Q0FDekMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO3dDQUNwQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztpQ0FDbkM7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7eUJBQ0o7b0JBQ0gsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDdkIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxPQUFPLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7U0FDSjthQUFNO1lBQ0wsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDckMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2QsQ0FBQyxDQUFDLENBQUE7U0FDSDtJQUVILENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUFzQixFQUFFLFFBQWE7UUFDcEQsSUFBRyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUM7WUFDN0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2xDLE9BQU8sTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQzthQUNwRDtpQkFBTTtnQkFDTCxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUM7YUFDekI7U0FDRjthQUNHO1lBQ0YsUUFBUSxDQUFDLE9BQU8sR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9ELE9BQVEsUUFBUSxDQUFDLE9BQU8sQ0FBQztTQUN6QjtJQUNKLENBQUM7SUFHRCw4Q0FBOEM7SUFDOUMsa0JBQWtCLENBQUMsY0FBMkI7UUFDNUMsTUFBTSxNQUFNLEdBQWdCO1lBQzFCLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSztZQUMzQixXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVc7WUFDdkMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxJQUFJO1lBQ3pCLElBQUksRUFBRSxjQUFjLENBQUMsSUFBSTtZQUN6QixLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUs7WUFDM0IsUUFBUSxFQUFFLGNBQWMsQ0FBQyxRQUFRO1lBQ2pDLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztZQUNuQyxRQUFRLEVBQUUsY0FBYyxDQUFDLFFBQVE7WUFDakMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxVQUFVO1lBQ3JDLFdBQVcsRUFBRSxjQUFjLENBQUMsV0FBVztZQUN2QyxXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVc7WUFDdkMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxVQUFVO1lBQ3JDLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtZQUNqQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVM7WUFDbkMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO1lBQzdCLFFBQVEsRUFBRSxjQUFjLENBQUMsUUFBUTtZQUNqQyxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVM7WUFDbkMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPO1lBQy9CLGFBQWEsRUFBRSxjQUFjLENBQUMsYUFBYTtZQUMzQyxXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVc7WUFDdkMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxRQUFRO1lBQ2pDLE1BQU0sRUFBRSxjQUFjLENBQUMsTUFBTTtZQUM3QixTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVM7WUFDbkMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxNQUFNO1lBQzdCLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSztZQUMzQixNQUFNLEVBQUUsY0FBYyxDQUFDLE1BQU07WUFDN0IsYUFBYSxFQUFFLFlBQVk7U0FDNUIsQ0FBQztRQUNGLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsa0JBQWtCLENBQUMsY0FBMkI7UUFDNUMsY0FBYyxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7UUFDbEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGlDQUFpQztJQUNqQyxxQkFBcUIsQ0FDbkIsY0FBMkIsRUFDM0IsWUFBK0I7UUFFL0IsY0FBYyxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7UUFDckQsSUFBSSxZQUFZLEVBQUU7WUFDaEIsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztZQUN2QyxJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDdkMsSUFBSSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQztZQUNuQyxJQUFJLEtBQUssR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDO1lBQy9CLElBQUksU0FBUyxJQUFJLFNBQVMsSUFBSSxTQUFTLEVBQUU7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FDekIsY0FBYyxFQUNkLFNBQVMsRUFDVCxTQUFTLEVBQ1QsU0FBUyxFQUNULE9BQU8sRUFDUCxLQUFLLEVBQ0wsSUFBSSxDQUNMLENBQUM7YUFDSDtTQUNGO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7SUFFRCxpQ0FBaUM7SUFDakMsb0JBQW9CLENBQUMsY0FBMkI7UUFDOUMsY0FBYyxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7UUFDckQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELGdDQUFnQztJQUNoQyxvQkFBb0IsQ0FBQyxjQUEyQjtRQUM5QyxjQUFjLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLFlBQVksQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsaUNBQWlDO0lBQ2pDLHFCQUFxQixDQUFDLGNBQTJCO1FBQy9DLGNBQWMsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCw4QkFBOEI7SUFDOUIsbUJBQW1CLENBQUMsY0FBMkI7UUFDN0MsY0FBYyxDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLENBQUE7UUFDeEQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUVELDhDQUE4QztJQUM5QyxlQUFlLENBQUMsZ0JBQWlDO1FBQy9DLE1BQU0sTUFBTSxHQUFvQjtZQUM5QixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztZQUM3QixXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxZQUFZLEVBQUMsZ0JBQWdCLENBQUMsWUFBWTtZQUMxQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtZQUMzQixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSTtZQUMzQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztZQUM3QixRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztZQUNyQyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTtZQUN2QyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN4QyxPQUFPLEVBQUMsZ0JBQWdCLENBQUMsT0FBTztZQUNqQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsVUFBVTtZQUN2QyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztZQUNyQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtZQUMvQixRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztZQUNyQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsT0FBTztZQUNqQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsYUFBYTtZQUM3QyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsV0FBVztZQUN6QyxRQUFRLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUNuQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtZQUMvQixTQUFTLEVBQUUsZ0JBQWdCLENBQUMsU0FBUztZQUNyQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtZQUMvQixLQUFLLEVBQUUsZ0JBQWdCLENBQUMsS0FBSztZQUM3QixNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTTtTQUNoQyxDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixvQkFBb0IsQ0FBQyxnQkFBaUM7UUFDcEQsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQztRQUNwRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsNkJBQTZCO0lBQzdCLHVCQUF1QixDQUNyQixnQkFBK0IsRUFDL0IsWUFBK0I7UUFFL0IsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLFFBQVEsQ0FBQztRQUN2RCxJQUFJLFlBQVksRUFBRTtZQUNoQixJQUFJLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO1lBQ3ZDLElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDdkMsSUFBSSxTQUFTLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQztZQUN2QyxJQUFJLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDO1lBQ25DLElBQUksS0FBSyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFDL0IsSUFBSSxTQUFTLElBQUksU0FBUyxJQUFJLFNBQVMsRUFBRTtnQkFDdkMsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUN6QixnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULFNBQVMsRUFDVCxTQUFTLEVBQ1QsT0FBTyxFQUNQLEtBQUssQ0FDTixDQUFDO2FBQ0g7U0FDRjthQUFNO1lBQ0wsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDL0M7SUFDSCxDQUFDO0lBQ0QsZ0NBQWdDO0lBQ2hDLDJCQUEyQixDQUFDLGdCQUFpQztRQUMzRCxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsWUFBWSxDQUFDO1FBQzNELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCx5Q0FBeUM7SUFDekMsa0NBQWtDLENBQ2hDLGdCQUErQixFQUMvQixlQUFrQztRQUVsQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsV0FBVyxDQUFDO1FBQzFELElBQUksZUFBZSxFQUFFO1lBQ25CLElBQUksU0FBUyxHQUFHLGVBQWUsQ0FBQyxTQUFTLENBQUM7WUFDMUMsSUFBSSxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxJQUFJLFNBQVMsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDO1lBQzFDLElBQUksT0FBTyxHQUFHLGVBQWUsQ0FBQyxPQUFPLENBQUM7WUFDdEMsSUFBSSxLQUFLLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQztZQUNsQyxJQUFJLFNBQVMsSUFBSSxTQUFTLElBQUksU0FBUyxFQUFFO2dCQUN2QyxPQUFPLElBQUksQ0FBQyxlQUFlLENBQ3pCLGdCQUFnQixFQUNoQixTQUFTLEVBQ1QsU0FBUyxFQUNULFNBQVMsRUFDVCxPQUFPLEVBQ1AsS0FBSyxDQUNOLENBQUM7YUFDSDtTQUNGO2FBQU07WUFDTCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7SUFFRCxlQUFlLENBQ2IsU0FBYyxFQUNkLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLE9BQVksRUFDWixRQUFxQixFQUFFLEVBQ3ZCLGtCQUEyQixLQUFLO1FBRWhDLE9BQU8sSUFBSSxDQUFDLGVBQWU7YUFDeEIsZUFBZSxDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUM7YUFDaEUsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7WUFDakIsU0FBUyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7WUFDckIsT0FBTyxlQUFlLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRyxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNmLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDaEcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsZ0NBQWdDO0lBQ2hDLHlCQUF5QixDQUFDLGdCQUFpQztRQUN6RCxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsTUFBTSxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCw0QkFBNEI7SUFDNUIsc0JBQXNCLENBQUMsZ0JBQWlDO1FBQ3RELGdCQUFnQixDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUM7UUFDdkQsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxjQUFjLENBQUMsZ0JBQWlDO1FBQzlDLGdCQUFnQixDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxjQUFjLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELHFDQUFxQztJQUNyQyx3QkFBd0IsQ0FBQyxnQkFBaUM7UUFDeEQsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLFVBQVUsQ0FBQztRQUN6RCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsNkNBQTZDO0lBQzdDLDJCQUEyQixDQUFDLGdCQUFpQztRQUMzRCxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUMsYUFBYSxDQUFDO1FBQzVELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFDRCxzQ0FBc0M7SUFDdEMscUJBQXFCLENBQUMsZ0JBQWlDO1FBQ3JELGdCQUFnQixDQUFDLElBQUksR0FBRyxxQkFBcUIsQ0FBQyxZQUFZLENBQUM7UUFDM0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVELHFDQUFxQztJQUNyQyxxQkFBcUIsQ0FBQyxnQkFBaUM7UUFDckQsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDLFlBQVksQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUEsdUNBQXVDO0lBQ3ZDLG1CQUFtQixDQUFDLGdCQUFpQztRQUNwRCxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDO1FBQ3JELE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxhQUFhLENBQUMsUUFBYSxFQUFFLFVBQWtCLEVBQUU7UUFDL0MsSUFBSSxJQUFJLEdBQVEsRUFBRSxDQUFDO1FBQ25CLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ25DLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsS0FBYSxFQUFFLEVBQUU7Z0JBQ3JDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDcEMsTUFBTSxNQUFNLEdBQVEsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQ3hDLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQzt3QkFDbEIsR0FBRyxJQUFJO3dCQUNQLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQztxQkFDcEMsQ0FBQyxFQUNGLEVBQUUsQ0FDSCxDQUFDO29CQUNGLElBQ0UsT0FBTzt3QkFDUCxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUM7d0JBQ2xCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ3ZDO3dCQUNBLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7cUJBQ3pCO29CQUVELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ25CO1lBQ0gsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFjO1FBQzVCLElBQUksTUFBTSxHQUFRLEVBQUUsQ0FBQztRQUNyQixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7Z0JBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUQsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLE1BQU0sQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELGtHQUFrRztJQUNsRyxTQUFTLENBQ1AsT0FBc0IsRUFDdEIsS0FBYSxFQUNiLE1BQWMsRUFDZCxNQUFXLEVBQ1gsS0FBVSxFQUNWLFNBQWMsSUFBSSxFQUNsQixhQUFzQixLQUFLO1FBRTNCLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtnQkFDOUIsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRTtvQkFDdkQsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7b0JBQ3ZCLElBQUksTUFBTSxFQUFFO3dCQUNWLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO3FCQUN4QjtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtZQUNuRSxJQUFJLFVBQVUsRUFBRTtnQkFDZCxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUM7Z0JBQzVDLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQ3pCLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUNuRSxDQUFDO2dCQUNGLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFO29CQUNoQixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUU7d0JBQ2hDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsU0FBUzs0QkFDcEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUM7cUJBQ3BDO2lCQUNGO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsc0JBQXNCLENBQUMsT0FBWSxFQUFFLFVBQWU7UUFDbEQsSUFBSSxDQUFDLFVBQVUsRUFBRSxTQUFTLElBQUksVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2pGLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTtnQkFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDbkMsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsRUFBRTt3QkFDMUgsSUFDRSxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUs7NEJBQ3JCLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssRUFDckM7NEJBQ0EsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQzt5QkFDL0I7NkJBQU0sSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxFQUFFLEtBQUssVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxFQUFFLEVBQUU7NEJBQzVFLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7eUJBQy9CO3FCQUNGO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYSxFQUFFLE9BQXNCO1FBQ2pELElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQ3pCLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FDM0QsQ0FBQztZQUVGLElBQUksTUFBTSxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDdkUsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDO2FBQzFCO1NBQ0Y7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxpQkFBaUIsQ0FDZixPQUFzQixFQUN0QixLQUFrQixFQUNsQixNQUF3QixFQUN4QixPQUFlO1FBRWYsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzlELElBQUksU0FBUyxHQUFZLEtBQUssQ0FBQztZQUMvQixJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0QsU0FBUyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDSixTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDMUQsTUFBTSxDQUFDLEtBQUssQ0FDZixDQUFDO2FBQ0g7WUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBZSxFQUFFLEVBQUU7Z0JBQzVCLElBQUksR0FBRyxHQUFRLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRTtvQkFDOUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQ2hCLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDVCxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQzVELENBQUM7aUJBQ0g7cUJBQU0sSUFBSSxTQUFTLEVBQUU7b0JBQ3BCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTt3QkFDZCxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FDaEIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNULE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FDNUQsQ0FBQztxQkFDSDt5QkFBTTt3QkFDTCxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FDaEIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNULE1BQU0sQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FDL0QsQ0FBQztxQkFDSDtpQkFDRjtnQkFDRCxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDeEMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO2lCQUM3QjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsMEJBQTBCO0lBQzFCLG1CQUFtQixDQUFDLEdBQTJCLEVBQUUsS0FBcUIsRUFBRSxVQUF5QixFQUFFO1FBQ2pHLElBQUksU0FBUyxHQUFZLEtBQUssQ0FBQztRQUMvQixJQUFJLFNBQWMsQ0FBQztRQUNuQixLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDdEIsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUNsQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEYsSUFBSSxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUNyQixJQUFJLG1CQUFtQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO29CQUNqSyxJQUFJLG1CQUFtQixFQUFFO3dCQUN2QixJQUFJLGFBQWEsR0FBRyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQzt3QkFDN0MsYUFBYSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO3dCQUN0QyxhQUFhLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQzt3QkFDN0IsR0FBRyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsYUFBYSxDQUFDO3FCQUMxQzt5QkFDSTt3QkFDSCxJQUFJLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQzt3QkFDL0gsSUFBSSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUE7d0JBQzFHLE1BQU0sTUFBTSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDO3dCQUNuRCxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsZ0JBQWdCLENBQUM7d0JBQy9CLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQzt3QkFDcEMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7cUJBQzVCO2lCQUNGO2dCQUFBLENBQUM7Z0JBQ0YsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDakIsU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDMUU7aUJBQU0sSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxFQUFFLENBQUMsRUFBRTtnQkFDaEgsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLEdBQUcsRUFBRTtvQkFDckIsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7b0JBQ25HLElBQUksWUFBWSxHQUFHLFNBQVMsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQztvQkFDOUcsSUFBSSxDQUFDLFNBQVMsRUFBRTt3QkFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQzt3QkFDbkQsWUFBWSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLEtBQUssZUFBZSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxLQUFLLGVBQWUsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzt3QkFDck8sSUFBSSxZQUFZLEVBQUU7NEJBQ2hCLFNBQVMsR0FBRyxZQUFZLENBQUM7eUJBQzFCO3FCQUNGO29CQUNELElBQUksU0FBUyxFQUFFO3dCQUNiLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUU7NEJBQzVDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO3lCQUNyRzs2QkFBTTs0QkFDTCxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzt5QkFDL0U7cUJBQ0Y7eUJBQU0sSUFBSSxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsRUFBRTt3QkFDaEcsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsQ0FBQzt3QkFDNUMsTUFBTSxZQUFZLEdBQUcsU0FBUyxHQUFHLE1BQU0sQ0FBQzt3QkFDeEMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRTs0QkFDNUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO3lCQUN0Rzs2QkFBTTs0QkFDTCxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7eUJBQ2hGO3FCQUNGO29CQUFBLENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsSUFBSSxJQUFJLEVBQUUsTUFBTSxLQUFLLGNBQWMsQ0FBQyxTQUFTLEVBQUU7d0JBQzdDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztxQkFDbkM7eUJBQ0ksSUFBSSxJQUFJLEVBQUUsTUFBTSxLQUFLLGNBQWMsQ0FBQyxPQUFPLEVBQUU7d0JBQ2hELEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztxQkFDbkM7aUJBQ0Y7YUFDRjtpQkFBTSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDO2dCQUNwRCxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUMsVUFBVSxFQUFFO29CQUNqRCxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO2lCQUNuRTtxQkFBTSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssZ0JBQWdCLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRSxNQUFNLEVBQUU7b0JBQ3pFLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQ2hFO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDZCxPQUFPLEdBQUcsQ0FBQztTQUNaO2FBQU07WUFDTCxPQUFPLFNBQVMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFRCx5Q0FBeUM7SUFDekMsZ0JBQWdCLENBQUMsT0FBTztRQUN0QixJQUFJLE9BQU8sRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3ZCLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDdEIsSUFBSSxHQUFHLENBQUMsU0FBUyxFQUFFO29CQUNqQixPQUFPLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDekI7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVIOztTQUVLO0lBQ0gsV0FBVyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsYUFBcUIsVUFBVSxDQUFDLE1BQU07UUFDbkUsTUFBTSxDQUFDLGdCQUFnQixFQUFFLGVBQWUsQ0FBQyxHQUFRLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sUUFBUSxHQUFHLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsTUFBTSxTQUFTLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDakMsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMvQixTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUIsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUM1RCxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUNILGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdEMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztRQUNILGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQy9CLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztZQUNsQixlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzdCLE1BQU0sU0FBUyxHQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ3JFLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDdEcsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUNqRCxJQUFJLGdCQUFnQixHQUFHLE9BQU8sQ0FBQztvQkFDL0IsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUN4QyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE9BQU8sQ0FBQztxQkFDbEk7b0JBQ0QsSUFBSSxRQUFRLEtBQUssTUFBTSxFQUFFO3dCQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLGVBQWUsZ0JBQWdCLE9BQU8sUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3FCQUNoRjt5QkFBTTt3QkFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNqQjtpQkFDSjtxQkFBTTtvQkFDSCxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ3BEO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRTtZQUMvQyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ25ELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZUFBZSxDQUFDLE1BQVcsRUFBRSxVQUFVO1FBQ3JDLElBQUksVUFBVSxHQUNaLGlGQUFpRixDQUFDO1FBQ3BGLE1BQU0sSUFBSSxHQUFTLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUM1RCxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxZQUFZLENBQUMsUUFBUSxFQUFFLE9BQU87UUFDNUIsTUFBTSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN4QixNQUFNLGFBQWEsR0FBRyxPQUFPLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzVFLFFBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDckIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUM3QixJQUFJLGFBQWEsRUFBRSxRQUFRLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQUU7b0JBQy9DLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRTt3QkFDL0IsUUFBUSxDQUFDLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQzFEO3lCQUFNO3dCQUNMLFFBQVEsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7cUJBQ3pDO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDckMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUMxQjtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QixNQUFNLE1BQU0sR0FBRyxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQzdDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUU7Z0JBQzdELFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDM0I7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsWUFBWSxDQUFDLEtBQUs7UUFDaEIsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUkscURBQXFELENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRDs7T0FFRztJQUNILFVBQVUsQ0FBQyxVQUFVO1FBQ25CLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLElBQUksR0FBRyxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRXhELE9BQU8sR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRCxjQUFjLENBQUMsUUFBYSxFQUFFLFVBQWtCO1FBQzVDLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDNUUsTUFBTSxTQUFTLEdBQUcsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxNQUFNLGFBQWEsR0FBRyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDMUMsT0FBTyxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxRCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFdEQsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELGFBQWEsQ0FBQyxRQUFhLEVBQUUsVUFBa0I7UUFDN0MsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNqRDtRQUNELE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQztRQUN0QixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9DLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRTtnQkFDbkIsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQzVCO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sVUFBVSxHQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ3BCLElBQUk7WUFDSixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ2xCLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2pFLElBQUksR0FBRyxJQUFJLFlBQVksSUFBSTt3QkFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7d0JBQ3ZCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDakMsSUFBSSxHQUFHLElBQUksSUFBSSxHQUFHLENBQUM7cUJBQ3BCO29CQUNELE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBRUgsYUFBYSxDQUFDLFVBQWtCLEVBQUUsVUFBa0I7UUFDbEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBQzFELFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFdBQW1CLEVBQUU7UUFDN0IsSUFBSSxTQUFTLEdBQVEsUUFBUSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ2xGLElBQUksU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztpSUFyM0RVLFdBQVc7cUlBQVgsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExhenlMb2FkRXZlbnQgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQgeyBJQXV0b0NvbXBsZXRlU2F2ZSwgSURyb3BEb3duUmVxdWVzdCB9IGZyb20gJy4uL21vZGVscy9mb3JtLm1vZGVsJztcbmltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEVHcmlkU29ydERpcmVjdGlvbixcbiAgR3JpZEZpbHRlckNvbnRyb2xUeXBlLFxuICBJR2xvYmFsRmlsdGVyLFxuICBJR3JpZEZpbHRlcixcbiAgSUdyaWRTb3J0LFxuICBFR3JpZENvbHVtblR5cGUsXG4gIGFkZENvbHVtbixcbiAgYWRkRmlsdGVyQ29sdW1uLFxuICBhZGRHbG9iYWxGaWx0ZXIsXG4gIElHcmlkQ29sdW1uLFxuICBFR3JpZFZhbGlkYXRvcixcbiAgSUdyaWRQcm9wLFxuICBJR3JpZFByb3BGaWx0ZXIsXG4gIElHcmlkUm93UHJvcCxcbiAgSUdyaWRSZXBvcnRCdG4sXG4gIEVHcmlkUm93QWN0aW9uLFxuICBJRGlhbG9nQ29sdW1uLFxuICBFR3JpZEZvcm1hdHRlcixcbiAgSUdyaWRVcGRhdGUsXG4gIEVHcmlkRXhjZWwsXG4gIEVHcmlkUm93UHJvcE5hbWUsXG59IGZyb20gJy4uL21vZGVscy9ncmlkLm1vZGVsJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4vYWxlcnQuc2VydmljZSc7XG5pbXBvcnQgeyBEcm9wZG93blNlcnZpY2UgfSBmcm9tICcuL2Ryb3Bkb3duLnNlcnZpY2UnO1xuaW1wb3J0IHsgSHlwZXJsaW5rU2VydmljZSB9IGZyb20gJy4vaHlwZXJsaW5rLnNlcnZpY2UnO1xuaW1wb3J0ICogYXMgdXRpbGl0aWVzIGZyb20gJy4vdXRpbGl0aWVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgUmVxdWVzdFNlcnZpY2UgfSBmcm9tICcuL3JlcXVlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7IFdvcmtTaGVldCB9IGZyb20gJ3hsc3gnO1xuaW1wb3J0ICogYXMgRmlsZVNhdmVyIGZyb20gJ2ZpbGUtc2F2ZXInO1xuaW1wb3J0ICogYXMgRXhjZWxKUyBmcm9tICdleGNlbGpzL2Rpc3QvZXhjZWxqcy5taW4uanMnXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgR3JpZFNlcnZpY2Uge1xuICBwcml2YXRlIG51bWJlck9mQ2FsbHM6IG51bWJlciA9IDA7XG4gIHVzZXJTZWFyY2hlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBzb2Z0Q2FjaGluZ0ZpbHRlcnM6IGFueSA9IHt9O1xuICBhcHBseUZpbHRlckV2ZW50OiBib29sZWFuID0gdHJ1ZTtcbiAgcm93VXBkYXRlOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBjb2x1bW5Gb2N1c2VkT3V0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgY291bnRlciA9IDE7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkYXRlcGlwZTogRGF0ZVBpcGUsXG4gICAgcHJpdmF0ZSBoeXBlcmxpbmtTZXJ2aWNlOiBIeXBlcmxpbmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgZHJvcGRvd25TZXJ2aWNlOiBEcm9wZG93blNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHJlcXVlc3RTZXJ2aWNlOiBSZXF1ZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogUmVjZWl2ZXMgbGF6eSBldmVudCBhbmQgcmV0dXJucyBhZnRlciBwcm9wZXIgbWFwcGluZ1xuICAgKi9cbiAgZ2V0R3JpZEZpbHRlcnMoZXZlbnQ6IExhenlMb2FkRXZlbnQsIGNvbHVtbnM6IElHcmlkQ29sdW1uW10pOiBJR3JpZEZpbHRlcltdIHtcbiAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5tYXBGaWx0ZXJzKGV2ZW50LCBjb2x1bW5zKTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVNdWx0aUZpbHRlckZpZWxkKGZpbHRlcnMpO1xuICB9XG4gIGdldE5leHRJZCgpOiBzdHJpbmcge1xuICAgIFxuICAgIHJldHVybiBgc3RhdGljLSR7dGhpcy5jb3VudGVyKyt9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0gZmlsdGVyc1xuICAgKiBSZWNlaXZlcyBmaWx0ZXJzIGFuZCByZXR1cm5zIGFycmF5IGFmdGVyIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAgICogYW5kIGNyZWF0aW5nIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMgZm9yIHNhbWUgZmlsdGVyc1xuICAgKi9cbiAgaGFuZGxlTXVsdGlGaWx0ZXJGaWVsZChmaWx0ZXJzOiBJR3JpZEZpbHRlcltdKTogSUdyaWRGaWx0ZXJbXSB7XG4gICAgcmV0dXJuIGZpbHRlcnNcbiAgICAgIC5tYXAoKHgsIGksIGFycikgPT5cbiAgICAgICAgYXJyLnNvbWUoXG4gICAgICAgICAgKHksIGlkeCkgPT5cbiAgICAgICAgICAgIHkuZmllbGQ/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/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgICAgOiAnbGFiZWwnO1xuICAgICAgY29sdW1uSW5mby5vcHRpb25WYWx1ZSA9IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICAgIDogJ3ZhbHVlJztcbiAgICB9IGVsc2UgaWYgKGNvbHVtbkluZm8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRykge1xuICAgICAgaWYgKCFjb2x1bW5JbmZvLmZpbHRlcmluZyAmJiAhY29sdW1uSW5mby5maWx0ZXIpIHtcbiAgICAgICAgY29sdW1uSW5mby5maWx0ZXJpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjb2x1bW5JbmZvLnBhcmFtcyAmJiAhY29sdW1uSW5mby5kYXRhKSB7XG4gICAgICAgIGNvbHVtbkluZm8uZGF0YSA9IGNvbHVtbkluZm8ucGFyYW1zO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBjb2x1bW46IElHcmlkQ29sdW1uID0ge1xuICAgICAgYWxsb3dUb2dnbGU6IGNvbHVtbkluZm8uYWxsb3dUb2dnbGUgfHwgZmFsc2UsXG4gICAgICBhbGxvd1NlYXJjaDogY29sdW1uSW5mby5hbGxvd1NlYXJjaCxcbiAgICAgIGFsbG93QXV0b0NvbXBsZXRlU2F2ZTogY29sdW1uSW5mby5hbGxvd0F1dG9Db21wbGV0ZVNhdmUsXG4gICAgICB1bmlxdWVLZXk6IGNvbHVtbkluZm8udW5pcXVlS2V5LFxuICAgICAgZmllbGQ6IGNvbHVtbkluZm8uZmllbGQsXG4gICAgICBoZWFkZXI6IGNvbHVtbkluZm8uaGVhZGVyLFxuICAgICAgc3R5bGU6IGNvbHVtbkluZm8uc3R5bGUsXG4gICAgICB0eXBlOiBjb2x1bW5JbmZvLnR5cGUsXG4gICAgICBmb3JtYXQ6IGNvbHVtbkluZm8uZm9ybWF0LFxuICAgICAgZGF0YTogY29sdW1uSW5mby5kYXRhLFxuICAgICAgZmlsdGVyVmFsdWU6Y29sdW1uSW5mby5maWx0ZXJWYWx1ZSxcbiAgICAgIGZpbHRlcmluZzogY29sdW1uSW5mby5maWx0ZXJpbmcsXG4gICAgICBoaWRkZW46IGNvbHVtbkluZm8uaGlkZGVuLFxuICAgICAgc2hvdzogY29sdW1uSW5mby5zaG93LFxuICAgICAgc29ydGluZzogY29sdW1uSW5mby5zb3J0aW5nLFxuICAgICAgZmlsdGVyOiBjb2x1bW5JbmZvLmZpbHRlcixcbiAgICAgIGh5cGVybGluazogY29sdW1uSW5mby5oeXBlcmxpbmssXG4gICAgICB0YWJsZUFsaWFzOiBjb2x1bW5JbmZvLnRhYmxlQWxpYXMsXG4gICAgICBsaW5rSWQ6IGNvbHVtbkluZm8ubGlua0lkLFxuICAgICAgbWludXRlc0ludGVydmFsOiBjb2x1bW5JbmZvLm1pbnV0ZXNJbnRlcnZhbCxcbiAgICAgIHBhcmFtczogY29sdW1uSW5mby5wYXJhbXMsXG4gICAgICBzaG93T3B0aW9uOiBjb2x1bW5JbmZvLnNob3dPcHRpb24sXG4gICAgICBkaXNwbGF5VGV4dDogY29sdW1uSW5mby5kaXNwbGF5VGV4dCxcbiAgICAgIHRhcmdldDogY29sdW1uSW5mby50YXJnZXQsXG4gICAgICBkaXNhYmxlZDogY29sdW1uSW5mby5kaXNhYmxlZCxcbiAgICAgIGFsbG93U2F2ZTogY29sdW1uSW5mby5hbGxvd1NhdmUsXG4gICAgICBhbGxvd0VkaXQ6IGNvbHVtbkluZm8uYWxsb3dFZGl0LFxuICAgICAgZWRpdGFibGU6IGNvbHVtbkluZm8uZWRpdGFibGUsXG4gICAgICBlZGl0TGluazogY29sdW1uSW5mby5lZGl0TGluayxcbiAgICAgIHNhdmVBc1N0cmluZzogY29sdW1uSW5mby5zYXZlQXNTdHJpbmcsXG4gICAgICBjb21wb25lbnQ6IGNvbHVtbkluZm8uY29tcG9uZW50LFxuICAgICAgb25DbGljazogY29sdW1uSW5mby5vbkNsaWNrLFxuICAgICAgb25SZXR1cm46IGNvbHVtbkluZm8ub25SZXR1cm4sXG4gICAgICBvbkZvY3VzT3V0OiBjb2x1bW5JbmZvLm9uRm9jdXNPdXQsXG4gICAgICBvbkNoYW5nZTogY29sdW1uSW5mby5vbkNoYW5nZSxcbiAgICAgIGFnZ3JlZ2F0ZTogY29sdW1uSW5mby5hZ2dyZWdhdGUsXG4gICAgICBmb3JtYXR0ZXI6IGNvbHVtbkluZm8uZm9ybWF0dGVyLFxuICAgICAgcGVybWlzc2lvbnM6IGNvbHVtbkluZm8ucGVybWlzc2lvbnMsXG4gICAgICBvcHRpb25MYWJlbDogY29sdW1uSW5mby5vcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvblZhbHVlOiBjb2x1bW5JbmZvLm9wdGlvblZhbHVlLFxuICAgICAgZHJvcERvd25Qcm9wOiBjb2x1bW5JbmZvLmRyb3BEb3duUHJvcCxcbiAgICAgIGhvdmVyRGF0YTogY29sdW1uSW5mby5ob3ZlckRhdGEsXG4gICAgICBzaG93VGltZTogY29sdW1uSW5mby5zaG93VGltZSxcbiAgICAgIHRpbWVPbmx5OiBjb2x1bW5JbmZvLnRpbWVPbmx5LFxuICAgICAgbG9va3VwQ29udHJvbDogY29sdW1uSW5mby5sb29rdXBDb250cm9sLFxuICAgICAgZGlzcGxheUZpZWxkOiBjb2x1bW5JbmZvLmRpc3BsYXlGaWVsZCxcbiAgICAgIGljb246IGNvbHVtbkluZm8uaWNvbixcbiAgICAgIGNvbG9yOiBjb2x1bW5JbmZvLmNvbG9yLFxuICAgICAgaWQ6IGNvbHVtbkluZm8uaWQsXG4gICAgICB2YWx1ZTogY29sdW1uSW5mby52YWx1ZSxcbiAgICAgIHZhbGlkYXRpb25zOiBjb2x1bW5JbmZvLnZhbGlkYXRpb25zLFxuICAgICAgdGV4dFR5cGU6Y29sdW1uSW5mby50ZXh0VHlwZSxcbiAgICAgIGNvbHVtbldpZHRoOiBjb2x1bW5JbmZvLmNvbHVtbldpZHRoLFxuICAgICAgb3BlbkluTmV3VGFiOiBjb2x1bW5JbmZvLm9wZW5Jbk5ld1RhYixcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNvbHVtbjtcbiAgfVxuXG4gIC8vIEFkZGluZyBSZXBvcnQgQnV0dG9uIEZ1bmN0aW9uIGZvciBHcmlkXG4gIGFkZFJlcG9ydEJ0bihjb2x1bW5JbmZvOiBJR3JpZFJlcG9ydEJ0bikge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5SRVBPUlQ7XG4gICAgcmV0dXJuIGNvbHVtbkluZm87XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIGlucHV0IGdyaWQgY29sdW1uXG4gIGFkZElucHV0Q29sdW1uKFxuICAgIGZpbHRlckNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGZpbHRlckNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oZmlsdGVyQ29sdW1uSW5mbyksXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oZmlsdGVyQ29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgc2ltcGxlIG51bWVyaWMgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGROdW1lcmljQ29sdW1uKFxuICAgIGNvbHVtbkluZm86IGFkZENvbHVtbixcbiAgICBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZVxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBjb2x1bW5JbmZvPy5maWx0ZXI/LnR5cGUgPyBjb2x1bW5JbmZvLmZpbHRlci50eXBlIDogR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVCxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5OVU1FUklDO1xuICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgY2FsZW5kYXIgZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGRDYWxlbmRhckNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgICApOiBJR3JpZENvbHVtbiB7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBjb2x1bW5JbmZvPy5maWx0ZXI/LnR5cGUgPyBjb2x1bW5JbmZvLmZpbHRlci50eXBlIDogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSLFxuICAgICAgICBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pLFxuICAgICAgfTtcbiAgICB9XG4gICAgY29sdW1uSW5mby50eXBlID0gY29sdW1uSW5mby50eXBlID8gY29sdW1uSW5mby50eXBlIDogRUdyaWRDb2x1bW5UeXBlLkRBVEU7XG4gICAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuICB9XG5cbiAgc2V0Q29uZmlnRGF0YShjb25maWc6IGFueSkge1xuICAgIGxldCBjb25maWdEYXRhOiBhbnkgPSB7fTtcbiAgICBpZiAoY29uZmlnPy5kYXRhICYmIE9iamVjdC5rZXlzKGNvbmZpZz8uZGF0YSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbmZpZ0RhdGEgPSBjb25maWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbTogYW55KSA9PiB7XG4gICAgICAgIGlmIChwYXJhbSAmJiBPYmplY3Qua2V5cyhwYXJhbSk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25maWdEYXRhWydkYXRhJ10gPSBwYXJhbTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ0RhdGE7XG4gIH1cbiAgICAgXG5cbiAgLy8gYWRkIHNpbXBsZSBib29sZWFuIGdyaWQgY29sdW1uIHdpdGhvdXRcbiAgYWRkQm9vbGVhbkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWVcbiAgKTogSUdyaWRDb2x1bW4ge1xuICAgIGlmIChzaG93RmlsdGVyKSB7XG4gICAgICAoY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkJPT0xFQU4pLFxuICAgICAgICAoY29sdW1uSW5mby5maWx0ZXIgPSB7XG4gICAgICAgICAgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLkNIRUNLQk9YLFxuICAgICAgICAgIHNob3dGaWx0ZXI6IHRoaXMuc2hvd0ZpbHRlckljb24oY29sdW1uSW5mbyksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuIC8vIGFkZCBMb29rVXAgY29sdW1uIGZvciBHcmlkXG4gYWRkTG9va1VwQ29sdW1uKGNvbHVtbkluZm86IElEaWFsb2dDb2x1bW4sIHNob3dGaWx0ZXI6IGJvb2xlYW4gPSB0cnVlKTogSUdyaWRDb2x1bW4ge1xuICBpZiAoc2hvd0ZpbHRlcikge1xuICAgIGNvbHVtbkluZm8uZmlsdGVyID0geyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVULCBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pIH07XG4gIH1cbiAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVDtcbiAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xufVxuXG4vLyBhZGQgZGlhbG9nIGNvbHVtbiBmb3IgR3JpZFxuIGFkZERpYWxvZ0NvbHVtbihjb2x1bW5JbmZvOiBJRGlhbG9nQ29sdW1uLCBzaG93RmlsdGVyOiBib29sZWFuID0gdHJ1ZSk6IElHcmlkQ29sdW1uIHtcbiAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICBjb2x1bW5JbmZvLmZpbHRlciA9IHsgdHlwZTogR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVULCBzaG93RmlsdGVyOiB0aGlzLnNob3dGaWx0ZXJJY29uKGNvbHVtbkluZm8pIH07XG4gIH1cbiAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRztcbiAgcmV0dXJuIHRoaXMuYWRkQ29sdW1uKGNvbHVtbkluZm8pO1xuIH1cblxuICAvLyBhZGQgQnV0dG9uIGZvciBncmlkIGNvbHVtblxuICBhZGRCdXR0b25Db2x1bW4oY29sdW1uSW5mbzogYWRkQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbHVtbkluZm8udHlwZSA9IEVHcmlkQ29sdW1uVHlwZS5BRERfQlVUVE9OO1xuICAgIGlmICghY29sdW1uSW5mby5maWVsZCkge1xuICAgICAgY29sdW1uSW5mby5maWVsZCA9IGNvbHVtbkluZm8udmFsdWUgPyBjb2x1bW5JbmZvLnZhbHVlIDogY29sdW1uSW5mby5pY29uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cbiAgXG4gIC8vIGFkZCBBdXRvQ29tcGxldGUgZm9yIGdyaWQgY29sdW1uXG4gIGFkZEF1dG9Db21wbGV0ZShjb2x1bW5JbmZvOiBhZGRDb2x1bW4pOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkFVVE9DT01QTEVURTtcbiAgICByZXR1cm4gdGhpcy5hZGRDb2x1bW4oY29sdW1uSW5mbyk7XG4gIH1cblxuICAvLyBTZWFyY2ggQXV0b0NvbXBsZXRlIERhdGEgZm9yIEdyaWRcbiAgZ2V0QXV0b0NvbXBsZXRlRGF0YShcbiAgICBjb2x1bW4/OiBhbnksXG4gICAgdW5pcXVlS2V5Pzogc3RyaW5nLFxuICAgIGZpbHRlcnM/OiBhbnlbXSxcbiAgICBzZWFyY2g6IHN0cmluZyA9ICcnXG4gICk6IGFueSB7XG4gICAgdGhpcy5yZXF1ZXN0U2VydmljZVxuICAgICAgLmdldDxhbnlbXSwgYW55PignL0RhdGEvRmV0Y2gnLCB7IHVuaXF1ZUtleTogdW5pcXVlS2V5LCBmaWx0ZXJzIH0pXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIGNvbHVtbi5kYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpO1xuICAgICAgfSwoeyBlcnJvciB9KSA9PiB7XG4gICAgICAgIGxldCByZXNwb25zZTphbnk9IHt9O1xuICAgICAgICByZXNwb25zZVsncmVjb3JkcyddID0gW107XG4gICAgICAgIGNvbHVtbi5kYXRhID0gdGhpcy5zZXREYXRhRmllbGRzKHJlc3BvbnNlLnJlY29yZHMpO1xuICAgICAgfSk7XG4gIH1cbiBhc3luYyBhZGRBdXRvQ29tcGxldGVWYWx1ZSh1bmlxdWVLZXk6IElBdXRvQ29tcGxldGVTYXZlLCB2YWx1ZTphbnksIGNvbHVtbjphbnksIHJvdzphbnkpIHtcbiAgbGV0IG5ld1ZhbHVlID0ge31cblxuICBmb3IodmFyIGkgPTA7aTx1bmlxdWVLZXkudmFsdWVzLmxlbmd0aDsgaSsrKXtcbiAgICBpZih1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWUudG9Mb3dlckNhc2UoKT09Y29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpfHx1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWUudG9Mb3dlckNhc2UoKT09Y29sdW1uLmRpc3BsYXlGaWVsZD8udG9Mb3dlckNhc2UoKSl7XG4gICAgICBuZXdWYWx1ZVt1bmlxdWVLZXkudmFsdWVzW2ldLm5hbWVdPXZhbHVlO1xuICAgIFxuICAgIH1lbHNle1xuICAgICAgbmV3VmFsdWVbdW5pcXVlS2V5LnZhbHVlc1tpXS5uYW1lXT10aGlzLmdldFNvZnRDb2RpbmdWYWx1ZSh1bmlxdWVLZXkudmFsdWVzW2ldLnZhbHVlLCByb3cpXG4gICAgfSBcbiAgfVxuXG5cbiAgICB0aGlzLnJlcXVlc3RTZXJ2aWNlXG4gICAgICAuZ2V0PGFueVtdLCBhbnk+KCcvRGF0YS9TYXZlJywgeyB1bmlxdWVLZXk6dW5pcXVlS2V5Lm5hbWUsICB2YWx1ZXM6IG5ld1ZhbHVlIH0pXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICh7ZXJyb3J9KT0+e1xuICAgICAgICAgIHJldHVybiBlcnJvclxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnc3VjY2Vzcyc7XG4gICAgICB9KTtcbiAgfVxuICBnZXRTb2Z0Q29kaW5nVmFsdWUodmFsdWUsIHJvdyl7XG4gICAgbGV0IHJldHVyblZhbHVlO1xuICAgIGlmKHZhbHVlLnRvU3RyaW5nKCkuaW5jbHVkZXMoJ3snKSYmdmFsdWUudG9TdHJpbmcoKS5pbmNsdWRlcygnfScpKXtcbiAgICAgIHZhbHVlPXZhbHVlLnJlcGxhY2UoXCJ7XCIsXCJcIikucmVwbGFjZShcIn1cIixcIlwiKTtcbiAgICAgIGxldCByb3dLZXlzID0gT2JqZWN0LmtleXMocm93KTtcbiAgICAgIGxldCBrZXkgPSByb3dLZXlzPy5maW5kKCh4KSA9PiB4Py50b0xvd2VyQ2FzZSgpID09PSB2YWx1ZT8udG9TdHJpbmcoKT8udG9Mb3dlckNhc2UoKSk7XG4gICAgICByZXR1cm5WYWx1ZT1yb3dba2V5XTtcbiAgICB9ZWxzZXtcbiAgICAgIHJldHVyblZhbHVlPXZhbHVlXG4gICAgfVxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgfVxuXG4gIC8vIGFkZCBzaW1wbGUgZHJvcGRvd24gZ3JpZCBjb2x1bW4gd2l0aG91dFxuICBhZGREcm9wZG93bkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUsXG4gICAgZHJvcERvd25Qcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby50eXBlID0gRUdyaWRDb2x1bW5UeXBlLkRST1BET1dOO1xuICAgIGNvbHVtbkluZm8ub3B0aW9uTGFiZWwgPSBjb2x1bW5JbmZvLm9wdGlvbkxhYmVsXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgIDogJ2xhYmVsJztcbiAgICBjb2x1bW5JbmZvLm9wdGlvblZhbHVlID0gY29sdW1uSW5mby5vcHRpb25WYWx1ZVxuICAgICAgPyBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA6ICd2YWx1ZSc7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuRFJPUERPV04sXG4gICAgICAgIGRhdGE6XG4gICAgICAgICAgIWNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSAmJiAhZHJvcERvd25Qcm9wICYmIGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgIDogY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChkcm9wRG93blByb3ApIHtcbiAgICAgIGNvbHVtbkluZm8uZHJvcERvd25Qcm9wID0gZHJvcERvd25Qcm9wO1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IGRyb3BEb3duUHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gZHJvcERvd25Qcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBkcm9wRG93blByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBkcm9wRG93blByb3AuZmlsdGVycztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgY29sdW1uSW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgICB9XG4gIH1cbiAgLy8gYWRkIE11bHRpU2VsZWN0RHJvcERvd24gZ3JpZCBjb2x1bW5cbiAgYWRkTXVsdGlTZWxlY3REcm9wRG93bkNvbHVtbihcbiAgICBjb2x1bW5JbmZvOiBhZGRDb2x1bW4sXG4gICAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IHRydWUsXG4gICAgbXVsdGlTZWxlY3RQcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBJR3JpZENvbHVtbiB7XG4gICAgY29sdW1uSW5mby5vcHRpb25MYWJlbCA9IGNvbHVtbkluZm8ub3B0aW9uTGFiZWxcbiAgICAgID8gY29sdW1uSW5mby5vcHRpb25MYWJlbFxuICAgICAgOiAnbGFiZWwnO1xuICAgIGNvbHVtbkluZm8ub3B0aW9uVmFsdWUgPSBjb2x1bW5JbmZvLm9wdGlvblZhbHVlXG4gICAgICA/IGNvbHVtbkluZm8ub3B0aW9uVmFsdWVcbiAgICAgIDogJ3ZhbHVlJztcbiAgICBjb2x1bW5JbmZvLnR5cGUgPSBFR3JpZENvbHVtblR5cGUuTVVMVElTRUxFQ1Q7XG4gICAgaWYgKHNob3dGaWx0ZXIpIHtcbiAgICAgIGNvbHVtbkluZm8uZmlsdGVyID0ge1xuICAgICAgICB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTVVMVElTRUxFQ1QsXG4gICAgICAgIGRhdGE6XG4gICAgICAgICAgIWNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YSAmJiAhbXVsdGlTZWxlY3RQcm9wICYmIGNvbHVtbkluZm8uZGF0YVxuICAgICAgICAgICAgPyBjb2x1bW5JbmZvLmRhdGFcbiAgICAgICAgICAgIDogY29sdW1uSW5mbz8uZmlsdGVyPy5kYXRhXG4gICAgICAgICAgICA/IGNvbHVtbkluZm8/LmZpbHRlcj8uZGF0YVxuICAgICAgICAgICAgOiBbXSxcbiAgICAgICAgc2hvd0ZpbHRlcjogdGhpcy5zaG93RmlsdGVySWNvbihjb2x1bW5JbmZvKSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChtdWx0aVNlbGVjdFByb3ApIHtcbiAgICAgIGNvbHVtbkluZm8uZHJvcERvd25Qcm9wID0gbXVsdGlTZWxlY3RQcm9wO1xuICAgICAgbGV0IHVuaXF1ZUtleSA9IG11bHRpU2VsZWN0UHJvcC51bmlxdWVLZXk7XG4gICAgICBsZXQgdmFsdWVQcm9wID0gbXVsdGlTZWxlY3RQcm9wLnZhbHVlUHJvcDtcbiAgICAgIGxldCBsYWJlbFByb3AgPSBtdWx0aVNlbGVjdFByb3AubGFiZWxQcm9wO1xuICAgICAgbGV0IGZpbHRlcnMgPSBtdWx0aVNlbGVjdFByb3AuZmlsdGVycztcbiAgICAgIGlmICh1bmlxdWVLZXkgJiYgdmFsdWVQcm9wICYmIGxhYmVsUHJvcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXREcm9wZG93bkRhdGEoXG4gICAgICAgICAgY29sdW1uSW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW5JbmZvKTtcbiAgICB9XG4gIH1cblxuICBzaG93RmlsdGVySWNvbihjb2x1bW5JbmZvOiBhZGRDb2x1bW4pIHtcbiAgICBpZiAoY29sdW1uSW5mby5maWx0ZXIgJiYgY29sdW1uSW5mby5maWx0ZXIuc2hvd0ZpbHRlcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBzZXREcm9wZG93bkRhdGEoXG4gICAgY29sdW1uOiBJR3JpZENvbHVtbixcbiAgICB1bmlxdWVLZXk6IHN0cmluZyxcbiAgICB2YWx1ZVByb3A6IHN0cmluZyxcbiAgICBsYWJlbFByb3A6IHN0cmluZyxcbiAgICBmaWx0ZXJzOiBhbnlbXSxcbiAgICByb3c/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9XG4gICk6IFByb21pc2U8YW55PiB8IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZHJvcGRvd25TZXJ2aWNlXG4gICAgICAuc2V0RHJvcERvd25MaXN0KHVuaXF1ZUtleSwgdmFsdWVQcm9wLCBsYWJlbFByb3AsIGZpbHRlcnMpXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgIHJvd1tjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX2RhdGEnXSA9IHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb2x1bW4uZGF0YSA9IHJlcztcbiAgICAgICAgICBpZiAoY29sdW1uLmZpbHRlciAmJiAoY29sdW1uLmZpbHRlci50eXBlID09PSAnZHJvcGRvd24nIHx8IGNvbHVtbi5maWx0ZXIudHlwZSA9PT0gJ211bHRpLXNlbGVjdCcpKSB7XG4gICAgICAgICAgICBjb2x1bW4uZmlsdGVyLmRhdGEgPSByZXM7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmFkZENvbHVtbihjb2x1bW4pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgfSk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCBjb2x1bW4gd2l0aCBidWlsdC1pbiBmaWx0ZXJcbiAgYWRkRmlsdGVyQ29sdW1uKGZpbHRlckNvbHVtbkluZm86IGFkZEZpbHRlckNvbHVtbik6IElHcmlkQ29sdW1uIHtcbiAgICBjb25zdCBjb2x1bW46IGFueSA9IHtcbiAgICAgIGZpZWxkOiBmaWx0ZXJDb2x1bW5JbmZvLmZpZWxkLFxuICAgICAgaGVhZGVyOiBmaWx0ZXJDb2x1bW5JbmZvLmhlYWRlcixcbiAgICAgIGZpbHRlcjogeyB0eXBlOiBmaWx0ZXJDb2x1bW5JbmZvLmZpbHRlciB9LFxuICAgICAgZmlsdGVyaW5nOiBmaWx0ZXJDb2x1bW5JbmZvLmZpbHRlcmluZyxcbiAgICAgIGhpZGRlbjogZmlsdGVyQ29sdW1uSW5mby5oaWRkZW4sXG4gICAgICBzdHlsZTogZmlsdGVyQ29sdW1uSW5mby5zdHlsZSxcbiAgICAgIHRhYmxlQWxpYXM6IGZpbHRlckNvbHVtbkluZm8udGFibGVBbGlhcyxcbiAgICAgIHBlcm1pc3Npb25zOiBmaWx0ZXJDb2x1bW5JbmZvLnBlcm1pc3Npb25zLFxuICAgIH07XG5cbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gYWRkIGRhdGUgZ3JpZCBjb2x1bW4gd2l0aCBidWlsdC1pbiBmaWx0ZXJcbiAgYWRkRGF0ZUNvbHVtbihkYXRlQ29sdW1uSW5mbzogYWRkRmlsdGVyQ29sdW1uKTogSUdyaWRDb2x1bW4ge1xuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRDb2x1bW4gPSB7XG4gICAgICBmaWVsZDogZGF0ZUNvbHVtbkluZm8uZmllbGQsXG4gICAgICBoZWFkZXI6IGRhdGVDb2x1bW5JbmZvLmhlYWRlcixcbiAgICAgIHR5cGU6IGRhdGVDb2x1bW5JbmZvLnR5cGUgPyBkYXRlQ29sdW1uSW5mby50eXBlIDogRUdyaWRDb2x1bW5UeXBlLkRBVEUsXG4gICAgICBmaWx0ZXJpbmc6IGRhdGVDb2x1bW5JbmZvLmZpbHRlcmluZyxcbiAgICAgIGZpbHRlcjogeyB0eXBlOiBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVIgfSxcbiAgICAgIGZvcm1hdDogZGF0ZUNvbHVtbkluZm8uZm9ybWF0LFxuICAgICAgc3R5bGU6IGRhdGVDb2x1bW5JbmZvLnN0eWxlLFxuICAgICAgdGFibGVBbGlhczogZGF0ZUNvbHVtbkluZm8udGFibGVBbGlhcyxcbiAgICAgIGRpc2FibGVkOiBkYXRlQ29sdW1uSW5mby5kaXNhYmxlZCxcbiAgICAgIGFsbG93U2F2ZTogZGF0ZUNvbHVtbkluZm8uYWxsb3dTYXZlLFxuICAgICAgcGVybWlzc2lvbnM6IGRhdGVDb2x1bW5JbmZvLnBlcm1pc3Npb25zLFxuICAgICAgY29tcG9uZW50OiBkYXRlQ29sdW1uSW5mby5jb21wb25lbnQsXG4gICAgICBzaG93VGltZTogZGF0ZUNvbHVtbkluZm8uc2hvd1RpbWUsXG4gICAgICB0aW1lT25seTogZGF0ZUNvbHVtbkluZm8udGltZU9ubHksXG4gICAgICBkYXRhOiBkYXRlQ29sdW1uSW5mby5kYXRhLFxuICAgICAgaGlkZGVuOiBkYXRlQ29sdW1uSW5mby5oaWRkZW4sXG4gICAgfTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgc2V0TG9va1VwRmlsdGVyKGNvbHVtbjogYW55LCBkaWFsb2dTZXJ2aWNlOiBhbnksIGdsb2JhbEZpbHRlckxvb2t1cDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKGNvbHVtbi5sb29rdXBDb250cm9sKSB7XG4gICAgICBsZXQgZGF0YVZhbHVlOiBhbnlbXSA9IFtdO1xuICAgICAgbGV0IGRhdGFLZXk6IGFueVtdID0gW107XG4gICAgICBsZXQgZGF0YSA9IGNvbHVtbi5sb29rdXBDb250cm9sPy5kYXRhPy5kYXRhO1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgICAgaWYgKGRhdGEgJiYga2V5cz8ubGVuZ3RoID4gMCkge1xuICAgICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChkYXRhW2tleV0udG9TdHJpbmcoKS5pbmNsdWRlcygneycpKSB7XG4gICAgICAgICAgICBkYXRhVmFsdWUudW5zaGlmdChkYXRhW2tleV0pO1xuICAgICAgICAgICAgZGF0YUtleS51bnNoaWZ0KGtleSk7XG4gICAgICAgICAgICBkYXRhW2tleV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgcmVmID0gZGlhbG9nU2VydmljZS5vcGVuKFxuICAgICAgICBjb2x1bW4ubG9va3VwQ29udHJvbC5jb21wb25lbnQsXG4gICAgICAgIGNvbHVtbi5sb29rdXBDb250cm9sLmRhdGFcbiAgICAgICk7XG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSBkaWFsb2dTZXJ2aWNlLmRpYWxvZ0NvbXBvbmVudFJlZk1hcC5nZXQocmVmKTtcbiAgICAgIGNvbnN0IGR5bmFtaWNDb21wb25lbnQgPSBkaWFsb2dSZWY/Lmluc3RhbmNlIGFzIER5bmFtaWNEaWFsb2dDb21wb25lbnQ7XG4gICAgICBjb25zdCBhcmlhTGFiZWxsZWRCeSA9IGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkoKTtcbiAgICAgIGR5bmFtaWNDb21wb25lbnQuZ2V0QXJpYUxhYmVsbGVkQnkgPSAoKSA9PiBhcmlhTGFiZWxsZWRCeTtcbiAgICAgIHJlZi5vbkNsb3NlLnN1YnNjcmliZShcbiAgICAgICAgKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGNvbHVtbi5vblJldHVybikge1xuICAgICAgICAgICAgY29sdW1uLm9uUmV0dXJuKHJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkYXRhS2V5Py5sZW5ndGggPiAwICYmIGRhdGFWYWx1ZT8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZGF0YUtleS5mb3JFYWNoKChrZXksIGtleUluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGRhdGFWYWx1ZS5mb3JFYWNoKCh2YWx1ZSwgdmFsdWVJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrZXlJbmRleCA9PT0gdmFsdWVJbmRleCkge1xuICAgICAgICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX2ZpbHRlcicpPy5mb2N1cygpO1xuICAgICAgICAgICAgbGV0IGZpZWxkID0gY29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdXRpbGl0aWVzLnNldERpYWxvZ1Jlc3BvbnNlKFxuICAgICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICAgIGNvbHVtbj8ubG9va3VwQ29udHJvbCxcbiAgICAgICAgICAgICAgcmVzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGdsb2JhbEZpbHRlckxvb2t1cCkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mICh2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uLnZhbHVlVHdvID0gdmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29sdW1uLnZhbHVlID0gdmFsdWU/LnZhbHVlXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS52YWx1ZVxuICAgICAgICAgICAgICAgIDogcmVzW2ZpZWxkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgICAgICBjb25zdCBnbG9iYWxGaWx0ZXJMb29rdXBJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGNvbHVtbi5maWVsZCk7XG4gICAgICAgICAgICAgIGdsb2JhbEZpbHRlckxvb2t1cElucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb2x1bW4uZmlsdGVyVmFsdWUgPSB2YWx1ZT8udmFsdWVcbiAgICAgICAgICAgICAgICA/IHZhbHVlLnZhbHVlXG4gICAgICAgICAgICAgICAgOiByZXNbZmllbGQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAoeyBlcnJvciB9OiBhbnkpID0+IHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hcGlFcnJvcihlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IEh5cGVybGluayBmaWVsZCBhcyBhIHBhcmFtIFZhbHVlXG4gIHNldEZpZWxkQXNMaW5rUGFyYW0oY29sdW1uczogYW55LCBmaWVsZDogc3RyaW5nLCByZXNwb25zZTogYW55KSB7XG4gICAgaWYgKFxuICAgICAgY29sdW1ucyAmJlxuICAgICAgY29sdW1ucy5sZW5ndGggPiAwICYmXG4gICAgICBmaWVsZCAmJlxuICAgICAgcmVzcG9uc2UucmVjb3JkcyAmJlxuICAgICAgcmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICB0aGlzLnNldERhdGFGaWVsZHMocmVzcG9uc2UucmVjb3JkcykuZm9yRWFjaCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbHVtbnMuZmluZCgoeDogYW55KSA9PiB4LmZpZWxkID09PSBmaWVsZCk7XG4gICAgICAgIGlmIChvYmogJiYgb2JqLnBhcmFtcykge1xuICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmoucGFyYW1zKTtcbiAgICAgICAgICBrZXlzLmZvckVhY2goKGtleTogYW55KSA9PiB7XG4gICAgICAgICAgICBpZiAob2JqLnBhcmFtc1trZXldICYmIG9iai5wYXJhbXNba2V5XS50b1N0cmluZygpLmluY2x1ZGVzKCd7JykpIHtcbiAgICAgICAgICAgICAgbGV0IHZhbHVlID0gb2JqLnBhcmFtc1trZXldXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ3snLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnfScsICcnKVxuICAgICAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICBvYmoucGFyYW1zW2tleV0gPSByZXNbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBoYXNBbnlMaW5rQ29sdW1uKGNvbHVtbnM6IElHcmlkQ29sdW1uW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29sdW1ucyAmJlxuICAgICAgY29sdW1ucy5zb21lKFxuICAgICAgICAoeCkgPT5cbiAgICAgICAgICB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLkxJTksgfHxcbiAgICAgICAgICB4LnR5cGUgPT0gRUdyaWRDb2x1bW5UeXBlLklGUkFNRSB8fFxuICAgICAgICAgIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuRElBTE9HIHx8XG4gICAgICAgICAgKHgubGlua0lkICYmIHgudHlwZSA9PSBFR3JpZENvbHVtblR5cGUuTE9PS1VQX0lOUFVUKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBzZXRIeXBlcmxpbmtzKGZldGNoUmVzcG9uc2U6IGFueSwgY29sdW1uczogSUdyaWRDb2x1bW5bXSwgbGlua1BhcmFtczogYW55ID0ge30pOiBhbnkge1xuICAgIGxldCByZWNvcmRzOiBhbnkgPSBbXTtcbiAgICBsZXQgZGF0YSA9XG4gICAgICBmZXRjaFJlc3BvbnNlICYmIGZldGNoUmVzcG9uc2UucmVjb3Jkcy5sZW5ndGggPiAwXG4gICAgICAgID8gdGhpcy5zZXREYXRhRmllbGRzKGZldGNoUmVzcG9uc2UucmVjb3JkcylcbiAgICAgICAgOiBbXTtcbiAgICBsZXQgbmV3Um93OiBhbnk7XG5cbiAgICBpZihkYXRhPy5sZW5ndGggPiAwKXtcbiAgICAgIHJldHVybiB0aGlzLmh5cGVybGlua1NlcnZpY2VcbiAgICAgIC5hZGRIeXBlcmxpbmtzKGNvbHVtbnMsIGZldGNoUmVzcG9uc2U/LnJlY29yZHMpXG4gICAgICAudGhlbigobGlua1Jlc3BvbnNlczogYW55KSA9PiB7XG4gICAgICAgIGRhdGEuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBuZXdSb3cgPSB7IC4uLnJvdyB9O1xuICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNldExpbmtJZCA9IGZldGNoUmVzcG9uc2U/LnJlY29yZHNbMF1bY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonXT8ubGlua0lkO1xuICAgICAgICAgICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhyb3cpO1xuICAgICAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuRElBTE9HKSB7XG4gICAgICAgICAgICAgIGNvbC5maWVsZCA9IGNvbC5maWVsZCA/IGNvbC5maWVsZCA6IGNvbC5oZWFkZXI7XG4gICAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXSA9IHsgLi4uY29sIH07XG4gICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlzcGxheVRleHQgPSBjb2wuZGlzcGxheVRleHRcbiAgICAgICAgICAgICAgICAmJiByb3dbY29sLmRpc3BsYXlUZXh0LnRvTG93ZXJDYXNlKCldID8gcm93W2NvbC5kaXNwbGF5VGV4dC50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgICAgIDogY29sLmRpc3BsYXlUZXh0O1xuICAgICAgICAgICAgICBsZXQgY29sdW1uRGF0YSA9IHsgLi4uY29sPy5kYXRhIH07XG4gICAgICAgICAgICAgIGlmIChjb2x1bW5EYXRhICYmIGNvbHVtbkRhdGEuZGF0YSkge1xuICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0uZGlhbG9nRGF0YSA9IHV0aWxpdGllcy5maW5kS2V5c0FuZFZhbHVlKFxuICAgICAgICAgICAgICAgICAgY29sdW1uRGF0YS5kYXRhLFxuICAgICAgICAgICAgICAgICAgcm93XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlua1Jlc3BvbnNlcykgJiYgbGlua1Jlc3BvbnNlcz8ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBsaW5rUmVzcG9uc2VzLmZvckVhY2goKGxpbmtSZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyB8fFxuICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLklGUkFNRSB8fFxuICAgICAgICAgICAgICAgICAgICBjb2wudHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxPT0tVUF9JTlBVVCkgJiZcbiAgICAgICAgICAgICAgICAgIGNvbC5saW5rSWQgJiZcbiAgICAgICAgICAgICAgICAgIChjb2wubGlua0lkID09PSBsaW5rUmVzcG9uc2UubGlua0lkIHx8XG4gICAgICAgICAgICAgICAgICAgIHNldExpbmtJZCA9PT0gbGlua1Jlc3BvbnNlLmxpbmtJZClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtS2V5czogc3RyaW5nW10gPSBsaW5rUGFyYW1zICYmIE9iamVjdC5rZXlzKGxpbmtQYXJhbXMpPy5sZW5ndGggPyBPYmplY3Qua2V5cyhsaW5rUGFyYW1zKSA6IGNvbC5wYXJhbXMgPyBPYmplY3Qua2V5cyhjb2wucGFyYW1zKSA6IFtdO1xuICAgICAgICAgICAgICAgICAgY29uc3QgbGluazogYW55ID0gdXRpbGl0aWVzLnNldEh5cGVybGluayhcbiAgICAgICAgICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgICAgICAgICAgcm93LFxuICAgICAgICAgICAgICAgICAgICBsaW5rUmVzcG9uc2UudXJsLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbUtleXMsXG4gICAgICAgICAgICAgICAgICAgIGNvbC5wYXJhbXNcbiAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgIGxldCBmaWVsZCA9IGNvbC5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZF0gPSB7IC4uLmNvbCB9O1xuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5saW5rSWQgPSBzZXRMaW5rSWQ7IFxuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5oeXBlcmxpbmsgPSBsaW5rO1xuICAgICAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkXS5kaXNwbGF5VGV4dCA9IGNvbC5kaXNwbGF5VGV4dFxuICAgICAgICAgICAgICAgICAgICA/IHJvd1tjb2wuZGlzcGxheVRleHQudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgICAgICAgICAgOiByb3dbY29sLmZpZWxkPy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlY29yZHMucHVzaChuZXdSb3cpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlY29yZHM7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICB9KVxuICAgIH1cbiAgICBcbiAgfVxuXG4gIC8vc2V0IHJvd3MgdG8gcmVzcG9uc2UucmVjb3Jkc1xuICBhc3luYyBzZXRSb3dEYXRhKGNvbHVtbnM6IElHcmlkQ29sdW1uW10sIHJlc3BvbnNlOiBhbnkpIHtcbiAgICBpZihyZXNwb25zZS5yZWNvcmRzLmxlbmd0aCA+IDApe1xuICAgICAgaWYgKHRoaXMuaGFzQW55TGlua0NvbHVtbihjb2x1bW5zKSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZXRIeXBlcmxpbmtzKHJlc3BvbnNlLCBjb2x1bW5zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZXNwb25zZS5yZWNvcmRzO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNle1xuICAgICAgcmVzcG9uc2UucmVjb3JkcyA9IFsuLi5yZXNwb25zZS5yZWNvcmRzLCByZXNwb25zZS5yZWNvcmRzIC0gMV07XG4gICAgICByZXR1cm4gIHJlc3BvbnNlLnJlY29yZHM7XG4gICAgIH0gXG4gIH1cbiAgIFxuXG4gIC8vIGFkZCBncmlkIGdsb2JhbCBmaWx0ZXIgd2l0aCBidWlsdC1pbiBmaWx0ZXJcbiAgYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGNvbnN0IGNvbHVtbjogSUdyaWRVcGRhdGUgPSB7XG4gICAgICBmaWVsZDogZ3JpZFVwZGF0ZUluZm8uZmllbGQsXG4gICAgICBkaXNwbGF5VGV4dDogZ3JpZFVwZGF0ZUluZm8uZGlzcGxheVRleHQsXG4gICAgICB0eXBlOiBncmlkVXBkYXRlSW5mby50eXBlLFxuICAgICAgZGF0YTogZ3JpZFVwZGF0ZUluZm8uZGF0YSxcbiAgICAgIHZhbHVlOiBncmlkVXBkYXRlSW5mby52YWx1ZSxcbiAgICAgIHZhbHVlVHdvOiBncmlkVXBkYXRlSW5mby52YWx1ZVR3byxcbiAgICAgIG1hdGNoTW9kZTogZ3JpZFVwZGF0ZUluZm8ubWF0Y2hNb2RlLFxuICAgICAgb3BlcmF0b3I6IGdyaWRVcGRhdGVJbmZvLm9wZXJhdG9yLFxuICAgICAgdGFibGVBbGlhczogZ3JpZFVwZGF0ZUluZm8udGFibGVBbGlhcyxcbiAgICAgIG9wdGlvbkxhYmVsOiBncmlkVXBkYXRlSW5mby5vcHRpb25MYWJlbCxcbiAgICAgIG9wdGlvblZhbHVlOiBncmlkVXBkYXRlSW5mby5vcHRpb25WYWx1ZSxcbiAgICAgIG9uRm9jdXNPdXQ6IGdyaWRVcGRhdGVJbmZvLm9uRm9jdXNPdXQsXG4gICAgICBvblJldHVybjogZ3JpZFVwZGF0ZUluZm8ub25SZXR1cm4sXG4gICAgICBmaWx0ZXJpbmc6IGdyaWRVcGRhdGVJbmZvLmZpbHRlcmluZyxcbiAgICAgIGNvbHVtbjogZ3JpZFVwZGF0ZUluZm8uY29sdW1uLFxuICAgICAgZGF5UmFuZ2U6IGdyaWRVcGRhdGVJbmZvLmRheVJhbmdlLFxuICAgICAgZnJvbUZpZWxkOiBncmlkVXBkYXRlSW5mby5mcm9tRmllbGQsXG4gICAgICB0b0ZpZWxkOiBncmlkVXBkYXRlSW5mby50b0ZpZWxkLFxuICAgICAgbG9va3VwQ29udHJvbDogZ3JpZFVwZGF0ZUluZm8ubG9va3VwQ29udHJvbCxcbiAgICAgIGFsbG93U2VhcmNoOiBncmlkVXBkYXRlSW5mby5hbGxvd1NlYXJjaCxcbiAgICAgIGRpc2FibGVkOiBncmlkVXBkYXRlSW5mby5kaXNhYmxlZCxcbiAgICAgIGhpZGRlbjogZ3JpZFVwZGF0ZUluZm8uaGlkZGVuLFxuICAgICAgbGFiZWxUZXh0OiBncmlkVXBkYXRlSW5mby5sYWJlbFRleHQsXG4gICAgICBwcmVmaXg6IGdyaWRVcGRhdGVJbmZvLnByZWZpeCxcbiAgICAgIGNvbG9yOiBncmlkVXBkYXRlSW5mby5jb2xvcixcbiAgICAgIGZvcm1hdDogZ3JpZFVwZGF0ZUluZm8uZm9ybWF0LFxuICAgICAgaW50ZXJmYWNlVHlwZTogJ2J1bGtVcGRhdGUnXG4gICAgfTtcbiAgICByZXR1cm4gY29sdW1uO1xuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGlucHV0IGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVJbnB1dChncmlkVXBkYXRlSW5mbzogSUdyaWRVcGRhdGUpIHtcbiAgICBncmlkVXBkYXRlSW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLklOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgZHJvcGRvd24gZmllbGRcbiAgYWRkR3JpZFVwZGF0ZURyb3Bkb3duKFxuICAgIGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSxcbiAgICBkcm9wRG93blByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IGFueSB7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5EUk9QRE9XTjtcbiAgICBpZiAoZHJvcERvd25Qcm9wKSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gZHJvcERvd25Qcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBkcm9wRG93blByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IGRyb3BEb3duUHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IGRyb3BEb3duUHJvcC5maWx0ZXJzO1xuICAgICAgbGV0IHNvcnRzID0gZHJvcERvd25Qcm9wLnNvcnRzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBncmlkVXBkYXRlSW5mbyxcbiAgICAgICAgICB1bmlxdWVLZXksXG4gICAgICAgICAgdmFsdWVQcm9wLFxuICAgICAgICAgIGxhYmVsUHJvcCxcbiAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgIHNvcnRzLCBcbiAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gICAgfVxuICB9XG5cbiAgLy8gYWRkIGdyaWQgdXBkYXRlIGRyb3Bkb3duIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVCb29sZWFuKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g7XG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBncmlkIHVwZGF0ZSBudW1lcmljIGZpZWxkXG4gIGFkZEdyaWRVcGRhdGVOdW1lcmljKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTlVNRVJJQ0lOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdyaWRVcGRhdGVGaWVsZChncmlkVXBkYXRlSW5mbyk7XG4gIH1cblxuICAvLyBhZGQgZ3JpZCB1cGRhdGUgY2FsZW5kYXIgZmllbGRcbiAgYWRkR3JpZFVwZGF0ZUNhbGVuZGFyKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSkge1xuICAgIGdyaWRVcGRhdGVJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVI7XG4gICAgcmV0dXJuIHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGdyaWRVcGRhdGVJbmZvKTtcbiAgfVxuXG4gIC8vYWRkIGdyaWQgdXBkYXRlIGxvb2t1cCBmaWVsZFxuICBhZGRHcmlkVXBkYXRlTG9va3VwKGdyaWRVcGRhdGVJbmZvOiBJR3JpZFVwZGF0ZSl7XG4gICAgZ3JpZFVwZGF0ZUluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5MT09LVVBfSU5QVVRcbiAgICByZXR1cm4gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZ3JpZFVwZGF0ZUluZm8pXG4gIH1cbiAgXG4gIC8vIGFkZCBncmlkIGdsb2JhbCBmaWx0ZXIgd2l0aCBidWlsdC1pbiBmaWx0ZXJcbiAgYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGNvbnN0IGNvbHVtbjogYWRkR2xvYmFsRmlsdGVyID0ge1xuICAgICAgZmllbGQ6IGdsb2JhbEZpbHRlckluZm8uZmllbGQsXG4gICAgICBkaXNwbGF5VGV4dDogZ2xvYmFsRmlsdGVySW5mby5kaXNwbGF5VGV4dCxcbiAgICAgIGRpc3BsYXlTdHlsZTpnbG9iYWxGaWx0ZXJJbmZvLmRpc3BsYXlTdHlsZSxcbiAgICAgIHZhbGlkYXRpb25zOiBnbG9iYWxGaWx0ZXJJbmZvLnZhbGlkYXRpb25zLFxuICAgICAgdHlwZTogZ2xvYmFsRmlsdGVySW5mby50eXBlLFxuICAgICAgZGF0YTogZ2xvYmFsRmlsdGVySW5mby5kYXRhLFxuICAgICAgdmFsdWU6IGdsb2JhbEZpbHRlckluZm8udmFsdWUsXG4gICAgICB2YWx1ZVR3bzogZ2xvYmFsRmlsdGVySW5mby52YWx1ZVR3byxcbiAgICAgIG1hdGNoTW9kZTogZ2xvYmFsRmlsdGVySW5mby5tYXRjaE1vZGUsXG4gICAgICBvcGVyYXRvcjogZ2xvYmFsRmlsdGVySW5mby5vcGVyYXRvcixcbiAgICAgIHRhYmxlQWxpYXM6IGdsb2JhbEZpbHRlckluZm8udGFibGVBbGlhcyxcbiAgICAgIG9wdGlvbkxhYmVsOiBnbG9iYWxGaWx0ZXJJbmZvLm9wdGlvbkxhYmVsLFxuICAgICAgb3B0aW9uVmFsdWU6IGdsb2JhbEZpbHRlckluZm8ub3B0aW9uVmFsdWUsXG4gICAgICAgb25DbGljazpnbG9iYWxGaWx0ZXJJbmZvLm9uQ2xpY2ssXG4gICAgICBvbkZvY3VzT3V0OiBnbG9iYWxGaWx0ZXJJbmZvLm9uRm9jdXNPdXQsXG4gICAgICBvblJldHVybjogZ2xvYmFsRmlsdGVySW5mby5vblJldHVybixcbiAgICAgIGZpbHRlcmluZzogZ2xvYmFsRmlsdGVySW5mby5maWx0ZXJpbmcsXG4gICAgICBjb2x1bW46IGdsb2JhbEZpbHRlckluZm8uY29sdW1uLFxuICAgICAgZGF5UmFuZ2U6IGdsb2JhbEZpbHRlckluZm8uZGF5UmFuZ2UsXG4gICAgICBmcm9tRmllbGQ6IGdsb2JhbEZpbHRlckluZm8uZnJvbUZpZWxkLFxuICAgICAgdG9GaWVsZDogZ2xvYmFsRmlsdGVySW5mby50b0ZpZWxkLFxuICAgICAgbG9va3VwQ29udHJvbDogZ2xvYmFsRmlsdGVySW5mby5sb29rdXBDb250cm9sLFxuICAgICAgYWxsb3dTZWFyY2g6IGdsb2JhbEZpbHRlckluZm8uYWxsb3dTZWFyY2gsXG4gICAgICBkaXNhYmxlZDogZ2xvYmFsRmlsdGVySW5mby5kaXNhYmxlZCxcbiAgICAgIGhpZGRlbjogZ2xvYmFsRmlsdGVySW5mby5oaWRkZW4sXG4gICAgICBsYWJlbFRleHQ6IGdsb2JhbEZpbHRlckluZm8ubGFiZWxUZXh0LFxuICAgICAgcHJlZml4OiBnbG9iYWxGaWx0ZXJJbmZvLnByZWZpeCxcbiAgICAgIGNvbG9yOiBnbG9iYWxGaWx0ZXJJbmZvLmNvbG9yLFxuICAgICAgZm9ybWF0OiBnbG9iYWxGaWx0ZXJJbmZvLmZvcm1hdCxcbiAgICB9O1xuICAgIHJldHVybiBjb2x1bW47XG4gIH1cblxuICAvLyBhZGQgZ2xvYmFsIGlucHV0IGZpbHRlclxuICBhZGRHbG9iYWxJbnB1dEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuSU5QVVQ7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIGdsb2JhbCBkcm9wZG93biBmaWx0ZXJcbiAgYWRkR2xvYmFsRHJvcGRvd25GaWx0ZXIoXG4gICAgZ2xvYmFsRmlsdGVySW5mbzogSUdsb2JhbEZpbHRlcixcbiAgICBkcm9wRG93blByb3A/OiBJRHJvcERvd25SZXF1ZXN0XG4gICk6IGFueSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRST1BET1dOO1xuICAgIGlmIChkcm9wRG93blByb3ApIHtcbiAgICAgIGxldCB1bmlxdWVLZXkgPSBkcm9wRG93blByb3AudW5pcXVlS2V5O1xuICAgICAgbGV0IHZhbHVlUHJvcCA9IGRyb3BEb3duUHJvcC52YWx1ZVByb3A7XG4gICAgICBsZXQgbGFiZWxQcm9wID0gZHJvcERvd25Qcm9wLmxhYmVsUHJvcDtcbiAgICAgIGxldCBmaWx0ZXJzID0gZHJvcERvd25Qcm9wLmZpbHRlcnM7XG4gICAgICBsZXQgc29ydHMgPSBkcm9wRG93blByb3Auc29ydHM7XG4gICAgICBpZiAodW5pcXVlS2V5ICYmIHZhbHVlUHJvcCAmJiBsYWJlbFByb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RHJvcGRvd25EYXRhKFxuICAgICAgICAgIGdsb2JhbEZpbHRlckluZm8sXG4gICAgICAgICAgdW5pcXVlS2V5LFxuICAgICAgICAgIHZhbHVlUHJvcCxcbiAgICAgICAgICBsYWJlbFByb3AsXG4gICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICBzb3J0c1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gICAgfVxuICB9XG4gIC8vYWRkIGdsb2JhbCByYWRpbyBidXR0b24gZmlsdGVyXG4gIGFkZEdsb2JhbFNlbGVjdEJ1dHRvbkZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iZWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuU0VMRUNUQlVUVE9OO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iZWxGaWx0ZXJJbmZvKTtcbiAgfVxuICAvLyBhZGQgZ2xvYmFsIE11bHRpU2VsZWN0IGRyb3Bkb3duIGZpbHRlclxuICBhZGRHbG9iYWxNdWx0aVNlbGVjdERyb3BEb3duRmlsdGVyKFxuICAgIGdsb2JhbEZpbHRlckluZm86IElHbG9iYWxGaWx0ZXIsXG4gICAgbXVsdGlTZWxlY3RQcm9wPzogSURyb3BEb3duUmVxdWVzdFxuICApOiBhbnkge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5NVUxUSVNFTEVDVDtcbiAgICBpZiAobXVsdGlTZWxlY3RQcm9wKSB7XG4gICAgICBsZXQgdW5pcXVlS2V5ID0gbXVsdGlTZWxlY3RQcm9wLnVuaXF1ZUtleTtcbiAgICAgIGxldCB2YWx1ZVByb3AgPSBtdWx0aVNlbGVjdFByb3AudmFsdWVQcm9wO1xuICAgICAgbGV0IGxhYmVsUHJvcCA9IG11bHRpU2VsZWN0UHJvcC5sYWJlbFByb3A7XG4gICAgICBsZXQgZmlsdGVycyA9IG11bHRpU2VsZWN0UHJvcC5maWx0ZXJzO1xuICAgICAgbGV0IHNvcnRzID0gbXVsdGlTZWxlY3RQcm9wLnNvcnRzO1xuICAgICAgaWYgKHVuaXF1ZUtleSAmJiB2YWx1ZVByb3AgJiYgbGFiZWxQcm9wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERyb3Bkb3duRGF0YShcbiAgICAgICAgICBnbG9iYWxGaWx0ZXJJbmZvLFxuICAgICAgICAgIHVuaXF1ZUtleSxcbiAgICAgICAgICB2YWx1ZVByb3AsXG4gICAgICAgICAgbGFiZWxQcm9wLFxuICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgc29ydHNcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICAgIH1cbiAgfVxuXG4gIGdldERyb3Bkb3duRGF0YShcbiAgICBmaWVsZEluZm86IGFueSxcbiAgICB1bmlxdWVLZXk6IHN0cmluZyxcbiAgICB2YWx1ZVByb3A6IHN0cmluZyxcbiAgICBsYWJlbFByb3A6IHN0cmluZyxcbiAgICBmaWx0ZXJzOiBhbnksXG4gICAgc29ydHM6IElHcmlkU29ydFtdID0gW10sIFxuICAgIGdyaWRVcGRhdGVGaWVsZDogYm9vbGVhbiA9IGZhbHNlXG4gICkge1xuICAgIHJldHVybiB0aGlzLmRyb3Bkb3duU2VydmljZVxuICAgICAgLnNldERyb3BEb3duTGlzdCh1bmlxdWVLZXksIHZhbHVlUHJvcCwgbGFiZWxQcm9wLCBmaWx0ZXJzLCBzb3J0cylcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBmaWVsZEluZm8uZGF0YSA9IHJlcztcbiAgICAgICAgcmV0dXJuIGdyaWRVcGRhdGVGaWVsZCA/IHRoaXMuYWRkR3JpZFVwZGF0ZUZpZWxkKGZpZWxkSW5mbykgOiB0aGlzLmFkZEdsb2JhbEZpbHRlcihmaWVsZEluZm8pO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYXBpRXJyb3IoZXJyb3IpO1xuICAgICAgICByZXR1cm4gZ3JpZFVwZGF0ZUZpZWxkID8gdGhpcy5hZGRHcmlkVXBkYXRlRmllbGQoZmllbGRJbmZvKSA6IHRoaXMuYWRkR2xvYmFsRmlsdGVyKGZpZWxkSW5mbyk7XG4gICAgICB9KTtcbiAgfVxuICBcbiAgLy8gYWRkIGdsb2JhbCBmaWx0ZXIgU3BhY2UgRmllbGRcbiAgYWRkR2xvYmFsRmlsdGVyU3BhY2VGaWVsZChnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuU1BBQ0VSO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIC8vIGFkZCBnbG9iYWwgYm9vbGVhbiBmaWx0ZXJcbiAgYWRkR2xvYmFsQm9vbGVhbkZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0hFQ0tCT1g7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRSYW5nZUZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuQ0FMRU5EQVJfUkFOR0U7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG5cbiAgLy8gYWRkIFJhbmdlIEZpbHRlciBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxEYXRlUmFuZ2VGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLkRBVEVfUkFOR0U7XG4gICAgcmV0dXJuIHRoaXMuYWRkR2xvYmFsRmlsdGVyKGdsb2JhbEZpbHRlckluZm8pO1xuICB9XG4gIFxuICAvLyBhZGQgTnVtZXJpYyBSYW5nZSBGaWx0ZXIgZm9yIGdsb2JhbCBGaWx0ZXJcbiAgYWRkR2xvYmFsTnVtZXJpY1JhbmdlRmlsdGVyKGdsb2JhbEZpbHRlckluZm86IGFkZEdsb2JhbEZpbHRlcikge1xuICAgIGdsb2JhbEZpbHRlckluZm8udHlwZSA9IEdyaWRGaWx0ZXJDb250cm9sVHlwZS5OVU1FUklDX1JBTkdFO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuICAvLyBhZGQgTnVtZXJpYyBpbnB1dCBmb3IgZ2xvYmFsIEZpbHRlclxuICBhZGRHbG9iYWxOdW1lcmljSW5wdXQoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKSB7XG4gICAgZ2xvYmFsRmlsdGVySW5mby50eXBlID0gR3JpZEZpbHRlckNvbnRyb2xUeXBlLk5VTUVSSUNJTlBVVDtcbiAgICByZXR1cm4gdGhpcy5hZGRHbG9iYWxGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbyk7XG4gIH1cblxuICAvLyBhZGQgTG9va1VwIEZpZWxkIGZvciBnbG9iYWwgRmlsdGVyXG4gIGFkZEdsb2JhbExvb2t1cEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvOiBhZGRHbG9iYWxGaWx0ZXIpIHtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGUgPSBHcmlkRmlsdGVyQ29udHJvbFR5cGUuTE9PS1VQX0lOUFVUO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gICAvL2FkZCBjYWxlbmRhciBmaWx0ZXIgZm9yIGdsb2JhbCBmaWx0ZXJcbiAgIGFkZEdsb2JhbERhdGVGaWx0ZXIoZ2xvYmFsRmlsdGVySW5mbzogYWRkR2xvYmFsRmlsdGVyKXtcbiAgICBnbG9iYWxGaWx0ZXJJbmZvLnR5cGU9R3JpZEZpbHRlckNvbnRyb2xUeXBlLkNBTEVOREFSO1xuICAgIHJldHVybiB0aGlzLmFkZEdsb2JhbEZpbHRlcihnbG9iYWxGaWx0ZXJJbmZvKTtcbiAgfVxuXG4gIHNldERhdGFGaWVsZHMocmVzcG9uc2U6IGFueSwgZGF0YUtleTogc3RyaW5nID0gXCJcIikge1xuICAgIGxldCBkYXRhOiBhbnkgPSBbXTtcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UubGVuZ3RoID4gMCkge1xuICAgICAgcmVzcG9uc2UubWFwKCh4OiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHggPz8ge30pPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0OiBhbnkgPSBPYmplY3Qua2V5cyh4KT8ucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50LnRvTG93ZXJDYXNlKCldOiB4W2N1cnJlbnRdLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB7fVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGF0YUtleSAmJlxuICAgICAgICAgICAgZGF0YUtleS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAhT2JqZWN0LmtleXMocmVzdWx0KT8uaW5jbHVkZXMoZGF0YUtleSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJlc3VsdFtkYXRhS2V5XSA9IGluZGV4O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGEucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICBzZXRDb2x1bW5GaWVsZHMoY29sdW1uczogYW55W10pIHtcbiAgICBsZXQgY29sdW1uOiBhbnkgPSBbXTtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbHVtbnMubWFwKChjb2w6IGFueSkgPT4ge1xuICAgICAgICBjb2x1bW4ucHVzaCh7IC4uLmNvbCwgZmllbGQ6IGNvbD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBjb2x1bW47XG4gICAgfVxuICB9XG5cbiAgLy8gY2hhbmdlIGxpbmtJZCBpbiBlZGl0IG1vZGUsIGlmIGNoYW5nZUxpbmsgaXMgdHJ1ZSB0aGVuIGl0IGNoYW5nZSB0aGUgZWRpdGVkIHJvdyBoeXBlcmxpbmsgdmFsdWVcbiAgc2V0TGlua0lkKFxuICAgIGNvbHVtbnM6IElHcmlkQ29sdW1uW10sXG4gICAgZmllbGQ6IHN0cmluZyxcbiAgICBsaW5rSWQ6IHN0cmluZyxcbiAgICByZWNvcmQ6IGFueSxcbiAgICB1c2VyczogYW55LFxuICAgIHBhcmFtczogYW55ID0gbnVsbCxcbiAgICBjaGFuZ2VMaW5rOiBib29sZWFuID0gZmFsc2VcbiAgKTogYW55IHtcbiAgICBpZiAoY29sdW1ucyAmJiBjb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gZmllbGQudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIGNvbHVtbi5saW5rSWQgPSBsaW5rSWQ7XG4gICAgICAgICAgaWYgKHBhcmFtcykge1xuICAgICAgICAgICAgY29sdW1uLnBhcmFtcyA9IHBhcmFtcztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuc2V0SHlwZXJsaW5rcyh7IHJlY29yZHM6IFtyZWNvcmRdIH0sIGNvbHVtbnMpLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICBpZiAoY2hhbmdlTGluaykge1xuICAgICAgICBkZWxldGUgcmVzWzBdW2ZpZWxkLnRvTG93ZXJDYXNlKCkgKyAnX29iaiddO1xuICAgICAgICBsZXQgaW5kZXggPSB1c2Vycy5maW5kSW5kZXgoXG4gICAgICAgICAgKGk6IGFueSkgPT4gaVtmaWVsZC50b0xvd2VyQ2FzZSgpXSA9PT0gcmVjb3JkW2ZpZWxkLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICk7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICBpZiAodXNlcnNbaW5kZXhdW2ZpZWxkICsgJ19vYmonXSkge1xuICAgICAgICAgICAgdXNlcnNbaW5kZXhdW2ZpZWxkICsgJ19vYmonXS5oeXBlcmxpbmsgPVxuICAgICAgICAgICAgICByZXNbMF1bZmllbGQgKyAnX29iaiddLmh5cGVybGluaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIHNldCBncmlkIGRhdGEgYW5kIHNldCBzZWxlY3RlZCByb3cgYmFzZWQgb24gc2VsZWN0aW9uIHZhbHVlXG4gIHNldERhdGFXaXRoU2VsZWN0ZWRSb3cocmVjb3JkczogYW55LCBjb25maWdEYXRhOiBhbnkpIHtcbiAgICBpZiAoKGNvbmZpZ0RhdGE/LnZhbHVlUHJvcCB8fCBjb25maWdEYXRhPy5sYWJlbFByb3ApICYmIGNvbmZpZ0RhdGEuZGF0YS5zZWxlY3Rpb24pIHtcbiAgICAgIHJlY29yZHMuZm9yRWFjaCgocmVjb3JkOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMocmVjb3JkKT8uZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSBjb25maWdEYXRhLmxhYmVsUHJvcCA/IGNvbmZpZ0RhdGEubGFiZWxQcm9wPy50b0xvd2VyQ2FzZSgpIDogY29uZmlnRGF0YS52YWx1ZVByb3A/LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgY29uZmlnRGF0YS5kYXRhLnZhbHVlICYmXG4gICAgICAgICAgICAgIHJlY29yZFtrZXldID09PSBjb25maWdEYXRhLmRhdGEudmFsdWVcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZWNvcmRbJ2hpZ2hsaWdodFJvdyddID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVjb3JkW2tleV0/LnRvU3RyaW5nKCkgPT09IGNvbmZpZ0RhdGEuZGF0YS5zZWxlY3Rpb24/LnRvU3RyaW5nKCkpIHtcbiAgICAgICAgICAgICAgcmVjb3JkWydoaWdobGlnaHRSb3cnXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZWNvcmRzO1xuICB9XG5cbiAgc2V0VGFibGVBbGlhcyhmaWVsZDogc3RyaW5nLCBjb2x1bW5zOiBJR3JpZENvbHVtbltdKSB7XG4gICAgaWYgKGNvbHVtbnMgJiYgY29sdW1ucy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBjb2x1bW4gPSBjb2x1bW5zLmZpbmQoXG4gICAgICAgICh4OiBhbnkpID0+IHguZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT0gZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG5cbiAgICAgIGlmIChjb2x1bW4gIT0gbnVsbCAmJiBjb2x1bW4udGFibGVBbGlhcyAmJiBjb2x1bW4udGFibGVBbGlhcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4udGFibGVBbGlhcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBzZXRHcmlkUHJvcFZhbHVlcyhcbiAgICBjb2x1bW5zOiBJR3JpZENvbHVtbltdLFxuICAgIHByb3BzOiBJR3JpZFByb3BbXSxcbiAgICBmaWx0ZXI/OiBJR3JpZFByb3BGaWx0ZXIsXG4gICAgcmVjb3Jkcz86IGFueVtdXG4gICkge1xuICAgIGlmIChjb2x1bW5zICYmIGNvbHVtbnMubGVuZ3RoID4gMCAmJiBwcm9wcyAmJiBwcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICBsZXQgaXNNYXRjaGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICBpZiAoZmlsdGVyICYmIGZpbHRlci5maWVsZCAmJiByZWNvcmRzICYmIHJlY29yZHMubGVuZ3RoID4gMCkge1xuICAgICAgICBpc01hdGNoZWQgPSByZWNvcmRzLnNvbWUoXG4gICAgICAgICAgKHgpID0+XG4gICAgICAgICAgICB1dGlsaXRpZXMub2JqQ29udmVydFRvTG93ZXIoeClbZmlsdGVyLmZpZWxkLnRvTG93ZXJDYXNlKCldID09PVxuICAgICAgICAgICAgZmlsdGVyLnZhbHVlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBwcm9wcy5tYXAoKHByb3A6IElHcmlkUHJvcCkgPT4ge1xuICAgICAgICBsZXQgY29sOiBhbnkgPSB7fTtcbiAgICAgICAgaWYgKHByb3AuZmllbGQgJiYgIWlzTWF0Y2hlZCAmJiAhZmlsdGVyPy5maWVsZCkge1xuICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgICAgIChjb2x1bW4pID0+XG4gICAgICAgICAgICAgIGNvbHVtbi5maWVsZD8udG9Mb3dlckNhc2UoKSA9PT0gcHJvcC5maWVsZD8udG9Mb3dlckNhc2UoKVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNNYXRjaGVkKSB7XG4gICAgICAgICAgaWYgKHByb3AuZmllbGQpIHtcbiAgICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbCA9IGNvbHVtbnMuZmluZChcbiAgICAgICAgICAgICAgKGNvbHVtbikgPT5cbiAgICAgICAgICAgICAgICBjb2x1bW4uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IGZpbHRlcj8uZmllbGQ/LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wgJiYgY29sLmhhc093blByb3BlcnR5KHByb3AubmFtZSkpIHtcbiAgICAgICAgICBjb2xbcHJvcC5uYW1lXSA9IHByb3AudmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHNldCBncmlkIHJvdyBwcm9wVmFsdWVzXG4gIHNldEdyaWRSb3dQcm9wVmFsdWUocm93OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBwcm9wczogSUdyaWRSb3dQcm9wW10sIGNvbHVtbnM6IElHcmlkQ29sdW1uW10gPSBbXSkge1xuICAgIGxldCBzZXRMaW5rSWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgbGlua0lkUmVzOiBhbnk7XG4gICAgcHJvcHM/LmZvckVhY2goKHByb3ApID0+IHtcbiAgICAgIHNldExpbmtJZCA9IGZhbHNlO1xuICAgICAgaWYgKHByb3AucHJvcE5hbWUgJiYgcHJvcC5wcm9wTmFtZSA9PT0gRUdyaWRSb3dQcm9wTmFtZS5MSU5LSUQgJiYgcHJvcC5wcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKE9iamVjdD8ua2V5cyhyb3cpKSB7XG4gICAgICAgICAgbGV0IG1hdGNoZWRSb3dPYmplY3RLZXkgPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXkpID0+IGtleT8udG9Mb3dlckNhc2UoKT8uZW5kc1dpdGgoJ19vYmonKSAmJiByb3dba2V5XT8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgPT09IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hlZFJvd09iamVjdEtleSkge1xuICAgICAgICAgICAgbGV0IG1hdGNoZWRPYmplY3QgPSByb3dbbWF0Y2hlZFJvd09iamVjdEtleV07XG4gICAgICAgICAgICBtYXRjaGVkT2JqZWN0LmxpbmtJZCA9IHByb3AucHJvcFZhbHVlO1xuICAgICAgICAgICAgbWF0Y2hlZE9iamVjdC5oeXBlcmxpbmsgPSAnJztcbiAgICAgICAgICAgIHJvd1ttYXRjaGVkUm93T2JqZWN0S2V5XSA9IG1hdGNoZWRPYmplY3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IG1hdGNoZWRGaWVsZE5hbWUgPSBPYmplY3Qua2V5cyhyb3cpPy5maW5kKChrZXkpID0+IGtleT8udG9Mb3dlckNhc2UoKSAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgbGV0IG1hdGNoZWRDb2x1bW5PYmogPSBjb2x1bW5zLmZpbmQoKGtleSkgPT4ga2V5LmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBtYXRjaGVkRmllbGROYW1lPy50b0xvd2VyQ2FzZSgpKVxuICAgICAgICAgICAgY29uc3Qgcm93T2JqID0gcHJvcD8uZmllbGQ/LnRvTG93ZXJDYXNlKCkgKyAnX29iaic7XG4gICAgICAgICAgICByb3dbcm93T2JqXSA9IG1hdGNoZWRDb2x1bW5PYmo7XG4gICAgICAgICAgICByb3dbcm93T2JqXS5saW5rSWQgPSBwcm9wLnByb3BWYWx1ZTtcbiAgICAgICAgICAgIHJvd1tyb3dPYmpdLmh5cGVybGluayA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc2V0TGlua0lkID0gdHJ1ZTtcbiAgICAgICAgbGlua0lkUmVzID0gdGhpcy5zZXRIeXBlcmxpbmtzKHsgcmVjb3JkczogW3Jvd10gfSwgY29sdW1ucywgcHJvcC5wYXJhbXMpO1xuICAgICAgfSBlbHNlIGlmIChwcm9wLnByb3BOYW1lICYmICFwcm9wLmxhYmVsICYmIChwcm9wLnByb3BWYWx1ZSB8fCBwcm9wLnByb3BWYWx1ZSA9PT0gZmFsc2UgfHwgcHJvcC5wcm9wVmFsdWUgPT09ICcnKSkge1xuICAgICAgICBpZiAocHJvcC5maWVsZCAmJiByb3cpIHtcbiAgICAgICAgICBsZXQgZmllbGROYW1lID0gT2JqZWN0LmtleXMocm93KT8uZmluZCgoa2V5KSA9PiBrZXk/LnRvTG93ZXJDYXNlKCkgPT09IHByb3A/LmZpZWxkPy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICBsZXQgZmllbGROYW1lT2JqID0gZmllbGROYW1lPy5pbmNsdWRlcygnX29iaicpID8gZmllbGROYW1lPy50b0xvd2VyQ2FzZSgpIDogZmllbGROYW1lPy50b0xvd2VyQ2FzZSgpICsgJ19vYmonO1xuICAgICAgICAgIGlmICghZmllbGROYW1lKSB7XG4gICAgICAgICAgICBjb25zdCByb3dPYmogPSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgICAgIGZpZWxkTmFtZU9iaiA9IE9iamVjdC5rZXlzKHJvdyk/LmZpbmQoKGtleTogYW55KSA9PiAoa2V5Py50b0xvd2VyQ2FzZSgpID09PSByb3dPYmopICYmIChyb3dbcm93T2JqXT8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkRJQUxPRyB8fCByb3dbcm93T2JqXT8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLklGUkFNRSB8fCByb3dbcm93T2JqXT8udHlwZSA9PT0gRUdyaWRDb2x1bW5UeXBlLkxJTkspKTtcbiAgICAgICAgICAgIGlmIChmaWVsZE5hbWVPYmopIHtcbiAgICAgICAgICAgICAgZmllbGROYW1lID0gZmllbGROYW1lT2JqO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZmllbGROYW1lKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocm93KT8uaW5jbHVkZXMoZmllbGROYW1lT2JqKSkge1xuICAgICAgICAgICAgICByb3dbZmllbGROYW1lT2JqXSA9IHsgLi4ucm93W2ZpZWxkTmFtZU9ial0sIHRleHQ6IHJvd1tmaWVsZE5hbWVdLCBbcHJvcC5wcm9wTmFtZV06IHByb3AucHJvcFZhbHVlIH07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByb3dbZmllbGROYW1lT2JqXSA9IHsgdGV4dDogcm93W2ZpZWxkTmFtZV0sIFtwcm9wLnByb3BOYW1lXTogcHJvcC5wcm9wVmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbHVtbnM/LnNvbWUoKGNvbHVtbikgPT4gY29sdW1uLmZpZWxkPy50b0xvd2VyQ2FzZSgpID09PSBwcm9wPy5maWVsZD8udG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BGaWVsZCA9IHByb3AuZmllbGQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICBjb25zdCBwcm9wRmllbGRPYmogPSBwcm9wRmllbGQgKyAnX29iaic7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocm93KT8uaW5jbHVkZXMoZmllbGROYW1lT2JqKSkge1xuICAgICAgICAgICAgICByb3dbcHJvcEZpZWxkT2JqXSA9IHsgLi4ucm93W3Byb3BGaWVsZE9ial0sIHRleHQ6IHJvd1twcm9wLmZpZWxkXSwgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcm93W3Byb3BGaWVsZE9ial0gPSB7IHRleHQ6IHJvd1twcm9wLmZpZWxkXSwgW3Byb3AucHJvcE5hbWVdOiBwcm9wLnByb3BWYWx1ZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHByb3A/LmFjdGlvbiA9PT0gRUdyaWRSb3dBY3Rpb24uREVMRVRFQlROKSB7XG4gICAgICAgICAgICByb3dbcHJvcC5hY3Rpb25dID0gcHJvcC5wcm9wVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHByb3A/LmFjdGlvbiA9PT0gRUdyaWRSb3dBY3Rpb24uRURJVEJUTikge1xuICAgICAgICAgICAgcm93W3Byb3AuYWN0aW9uXSA9IHByb3AucHJvcFZhbHVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcm9wLmxhYmVsKSB7XG4gICAgICAgIGNvbnN0IHByb3BOYW1lID0gcHJvcC5sYWJlbD8udG9Mb3dlckNhc2UoKSArICdfb2JqJztcbiAgICAgICAgaWYgKHByb3AucHJvcE5hbWUgPT09IEVHcmlkUm93UHJvcE5hbWUuUkVQT1JUTkFNRSkge1xuICAgICAgICAgIHJvd1twcm9wTmFtZV0gPSB7IC4uLnJvd1twcm9wTmFtZV0sIHJlcG9ydE5hbWU6IHByb3A/LnByb3BWYWx1ZSB9O1xuICAgICAgICB9IGVsc2UgaWYgKHByb3AucHJvcE5hbWUgPT09IEVHcmlkUm93UHJvcE5hbWUuUkVQT1JUUEFSQU0gJiYgcHJvcD8ucGFyYW1zKSB7XG4gICAgICAgICAgcm93W3Byb3BOYW1lXSA9IHsgLi4ucm93W3Byb3BOYW1lXSwgcmVwb3J0UGFyYW06IHByb3AucGFyYW1zIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXNldExpbmtJZCkge1xuICAgICAgcmV0dXJuIHJvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGxpbmtJZFJlcztcbiAgICB9XG4gIH1cblxuICAvLyByZW1vdmUgdGhlIHJvd0FjdGlvbnMgZnJvbSB0aGUgcmVjb3Jkc1xuICByZW1vdmVSb3dBY3Rpb25zKHJlY29yZHMpIHtcbiAgICBpZiAocmVjb3Jkcz8ubGVuZ3RoID4gMCkge1xuICAgICAgcmVjb3Jkcy5mb3JFYWNoKChyb3cpID0+IHtcbiAgICAgICAgaWYgKHJvdy5yb3dBY3Rpb24pIHtcbiAgICAgICAgICBkZWxldGUgcm93Wydyb3dBY3Rpb24nXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZWNvcmRzO1xuICB9XG5cbi8qKlxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKE1haW4tbWV0aG9kKVxuICAgKi9cbiAgZXhwb3J0RXhjZWwocm93c0RhdGEsIGNvbHVtbnMsIHJlcG9ydE5hbWU6IHN0cmluZyA9IEVHcmlkRXhjZWwuRVhQT1JUKSB7XG4gICAgY29uc3QgW2ZpbHRlcmVkcm93c0RhdGEsIGZpbHRlcmVkQ29sdW1uc106IGFueSA9IHRoaXMuc2V0RXhjZWxEYXRhKHJvd3NEYXRhLCBjb2x1bW5zKTtcbiAgICBjb25zdCB3b3JrYm9vayA9IG5ldyBFeGNlbEpTLldvcmtib29rKCk7XG4gICAgY29uc3Qgd29ya3NoZWV0ID0gd29ya2Jvb2suYWRkV29ya3NoZWV0KCdTaGVldDEnKTtcbiAgICBjb25zdCBib2xkU3R5bGUgPSB7IGJvbGQ6IHRydWUgfTtcbiAgICBjb25zdCBoZWFkZXJSb3cgPSBbXTtcbiAgICBmaWx0ZXJlZENvbHVtbnM/LmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgaGVhZGVyUm93LnB1c2goY29sLmhlYWRlcik7XG4gICAgfSk7XG4gICAgd29ya3NoZWV0LmFkZFJvdyhoZWFkZXJSb3cpO1xuICAgIHdvcmtzaGVldC5nZXRSb3coMSkuZWFjaENlbGwoeyBpbmNsdWRlRW1wdHk6IHRydWUgfSwgKGNlbGwpID0+IHtcbiAgICAgIGNlbGwuZm9udCA9IGJvbGRTdHlsZTtcbiAgICB9KTtcbiAgICBmaWx0ZXJlZENvbHVtbnM/LmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcbiAgICAgIHdvcmtzaGVldC5nZXRDb2x1bW4oaW5kZXggKyAxKS53aWR0aCA9IDE1O1xuICAgIH0pO1xuICAgIGZpbHRlcmVkcm93c0RhdGEuZm9yRWFjaCgocm93KSA9PiB7XG4gICAgICBjb25zdCBuZXdSb3cgPSBbXTtcbiAgICAgIGZpbHRlcmVkQ29sdW1ucz8uZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2VsbFZhbHVlOiBzdHJpbmcgPSByb3dbY29sPy5oZWFkZXI/LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgaWYgKGNvbC50eXBlID09PSBFR3JpZENvbHVtblR5cGUuTElOSyAmJiBjZWxsVmFsdWUgJiYgY2VsbFZhbHVlLmxlbmd0aCA+IDAgJiYgY2VsbFZhbHVlLmluZGV4T2YoJ3wnKSA+IDApIHtcbiAgICAgICAgICAgICAgY29uc3QgW2xpbmtUZXh0LCBsaW5rVXJsXSA9IGNlbGxWYWx1ZS5zcGxpdCgnfCcpO1xuICAgICAgICAgICAgICBsZXQgZm9ybWF0dGVkTGlua1VybCA9IGxpbmtVcmw7XG4gICAgICAgICAgICAgIGlmIChsaW5rVXJsICYmICFsaW5rVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSkge1xuICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkTGlua1VybCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICcvLycgKyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgKyAobGlua1VybC5zdGFydHNXaXRoKCcvJykgPyAnJyA6ICcvJykgKyBsaW5rVXJsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChsaW5rVGV4dCAhPT0gXCJudWxsXCIpIHtcbiAgICAgICAgICAgICAgICAgIG5ld1Jvdy5wdXNoKHsgZm9ybXVsYTogYD1IWVBFUkxJTksoXCIke2Zvcm1hdHRlZExpbmtVcmx9XCIsIFwiJHtsaW5rVGV4dH1cIilgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5ld1Jvdy5wdXNoKCcnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG5ld1Jvdy5wdXNoKGNlbGxWYWx1ZSAhPT0gbnVsbCA/IGNlbGxWYWx1ZSA6ICcnKTtcbiAgICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHdvcmtzaGVldC5hZGRSb3cobmV3Um93KTtcbiAgICB9KTtcbiAgICB3b3JrYm9vay54bHN4LndyaXRlQnVmZmVyKCkudGhlbigoZXhjZWxCdWZmZXIpID0+IHtcbiAgICAgIHRoaXMuc2F2ZUFzRXhjZWxGaWxlKGV4Y2VsQnVmZmVyLCByZXBvcnROYW1lKTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNhdmluZyBFeGNlbCBmaWxlOicsIGVycm9yKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKHN1Yi1tZXRob2QpXG4gICAqL1xuICBzYXZlQXNFeGNlbEZpbGUoYnVmZmVyOiBhbnksIHJlcG9ydE5hbWUpOiB2b2lkIHtcbiAgICBsZXQgRVhDRUxfVFlQRSA9XG4gICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG4gICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7IHR5cGU6IEVYQ0VMX1RZUEUgfSk7XG4gICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCByZXBvcnROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKHN1Yi1tZXRob2QpXG4gICAqL1xuICBzZXRFeGNlbERhdGEocm93c0RhdGEsIGNvbHVtbnMpIHtcbiAgICBjb25zdCB2YWxpZFJvd3MgPSBbXTtcbiAgICBjb25zdCB2YWxpZENvbHVtbnMgPSBbXTtcbiAgICBjb25zdCBjb2x1bW5IZWFkZXJzID0gY29sdW1ucz8ubWFwKGNvbHVtbiA9PiBjb2x1bW4/LmhlYWRlcj8udG9Mb3dlckNhc2UoKSk7XG4gICAgcm93c0RhdGEuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgY29uc3QgdmFsaWRSb3cgPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKHJvdykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoY29sdW1uSGVhZGVycz8uaW5jbHVkZXMoa2V5Py50b0xvd2VyQ2FzZSgpKSkge1xuICAgICAgICAgIGlmICh0aGlzLmlzRGF0ZVN0cmluZyhyb3dba2V5XSkpIHtcbiAgICAgICAgICAgIHZhbGlkUm93W2tleT8udG9Mb3dlckNhc2UoKV0gPSB0aGlzLmZvcm1hdERhdGUocm93W2tleV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWxpZFJvd1trZXk/LnRvTG93ZXJDYXNlKCldID0gcm93W2tleV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh2YWxpZFJvdyk/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFsaWRSb3dzLnB1c2godmFsaWRSb3cpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgY29uc3QgaGVhZGVyID0gY29sdW1uPy5oZWFkZXI/LnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAodmFsaWRSb3dzLnNvbWUocm93ID0+IE9iamVjdC5rZXlzKHJvdyk/LmluY2x1ZGVzKGhlYWRlcikpKSB7XG4gICAgICAgIHZhbGlkQ29sdW1ucy5wdXNoKGNvbHVtbik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gW3ZhbGlkUm93cywgdmFsaWRDb2x1bW5zXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHBvcnQgdG8gZXhjZWwgKHN1Yi1tZXRob2QpXG4gICAqL1xuICBpc0RhdGVTdHJpbmcodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkezN9KT9aPyQvLnRlc3QodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCB0byBleGNlbCAoc3ViLW1ldGhvZClcbiAgICovXG4gIGZvcm1hdERhdGUoZGF0ZVN0cmluZykge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICBjb25zdCB5ZWFyID0gZGF0ZT8uZ2V0RnVsbFllYXIoKTtcbiAgICBsZXQgbW9udGggPSAoMSArIGRhdGU/LmdldE1vbnRoKCkpPy50b1N0cmluZygpPy5wYWRTdGFydCgyLCAnMCcpO1xuICAgIGxldCBkYXkgPSBkYXRlPy5nZXREYXRlKCk/LnRvU3RyaW5nKCk/LnBhZFN0YXJ0KDIsICcwJyk7XG5cbiAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcbiAgfVxuICBcbiAgc2F2ZUFzVGV4dEZpbGUocm93c0luZm86IGFueSwgcmVwb3J0TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICBjb25zdCBmaWVsZHNUb0Rpc3BsYXkgPSByb3dzSW5mby5sZW5ndGggPiAwID8gT2JqZWN0LmtleXMocm93c0luZm9bMF0pIDogW107XG4gICAgICBjb25zdCBoZWFkZXJSb3cgPSBmaWVsZHNUb0Rpc3BsYXk/LmpvaW4oJ1xcdCcpO1xuICAgICAgY29uc3QgZm9ybWF0dGVkUm93cyA9IHJvd3NJbmZvPy5tYXAoKHJvdykgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGRzVG9EaXNwbGF5Py5tYXAoKGZpZWxkKSA9PiByb3dbZmllbGRdKT8uam9pbignXFx0Jyk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IHJvd3NEYXRhID0gW2hlYWRlclJvdywgLi4uZm9ybWF0dGVkUm93c10uam9pbignXFxuJyk7XG4gICAgICBjb25zdCBkYXRhID0gbmV3IEJsb2IoW3Jvd3NEYXRhXSwgeyB0eXBlOiAndGV4dCcgfSk7XG4gICAgXG4gICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCByZXBvcnROYW1lKTtcbiAgfVxuXG4gIHNhdmVEYXRhQXNDc3Yocm93c0luZm86IGFueSwgcmVwb3J0TmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKCFyb3dzSW5mbyB8fCAhcm93c0luZm8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zYXZlQXNDc3ZGaWxlKHJvd3NJbmZvLCByZXBvcnROYW1lKTtcbiAgICB9XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gJywnO1xuICAgIGNvbnN0IGNvbHVtbnMgPSBPYmplY3Qua2V5cyhyb3dzSW5mb1swXSk7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHJvd3NJbmZvWzBdKS5maWx0ZXIoayA9PiB7XG4gICAgICBpZiAoY29sdW1ucz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zLmluY2x1ZGVzKGspO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgY3N2Q29udGVudCA9XG4gICAgICBrZXlzLmpvaW4oc2VwYXJhdG9yKSArXG4gICAgICAnXFxuJyArXG4gICAgICByb3dzSW5mby5tYXAocm93ID0+IHtcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKGsgPT4ge1xuICAgICAgICAgIGxldCBjZWxsID0gcm93W2tdID09PSBudWxsIHx8IHJvd1trXSA9PT0gdW5kZWZpbmVkID8gJycgOiByb3dba107XG4gICAgICAgICAgY2VsbCA9IGNlbGwgaW5zdGFuY2VvZiBEYXRlXG4gICAgICAgICAgICA/IGNlbGwudG9Mb2NhbGVTdHJpbmcoKVxuICAgICAgICAgICAgOiBjZWxsLnRvU3RyaW5nKCkucmVwbGFjZSgvXCIvZywgJ1wiXCInKTtcbiAgICAgICAgICBpZiAoY2VsbC5zZWFyY2goLyhcInwsfFxcbikvZykgPj0gMCkge1xuICAgICAgICAgICAgY2VsbCA9IGBcIiR7Y2VsbH1cImA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjZWxsO1xuICAgICAgICB9KS5qb2luKHNlcGFyYXRvcik7XG4gICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICB0aGlzLnNhdmVBc0NzdkZpbGUoY3N2Q29udGVudCwgcmVwb3J0TmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogRXhwb3J0IHRvIENTViAoc3ViLW1ldGhvZClcbiAgICovXG5cbiAgc2F2ZUFzQ3N2RmlsZShjc3ZDb250ZW50OiBzdHJpbmcsIHJlcG9ydE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGRhdGEgPSBuZXcgQmxvYihbY3N2Q29udGVudF0sIHsgdHlwZTogJ3RleHQvY3N2JyB9KTtcbiAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIHJlcG9ydE5hbWUgKyAnLmNzdicpO1xuICB9XG5cbiAgYWRkTmV3Um93KGdyaWROYW1lOiBzdHJpbmcgPSAnJykge1xuICAgIGxldCBhZGRCdXR0b246IGFueSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2dsb2JhbC1hZGQtYnRuJyArIGdyaWROYW1lKTtcbiAgICBpZiAoYWRkQnV0dG9uICYmIGFkZEJ1dHRvbi5sZW5ndGggPiAwKSB7XG4gICAgICBhZGRCdXR0b25bMF0/LmNsaWNrKCk7XG4gICAgfVxuICB9XG5cbiAgaW5jcmVtZW50Q2FsbHMoKSB7XG4gICAgdGhpcy5udW1iZXJPZkNhbGxzKys7XG4gIH1cblxuICBnZXROdW1iZXJPZkNhbGxzKCkge1xuICAgIHJldHVybiB0aGlzLm51bWJlck9mQ2FsbHM7XG4gIH1cbn0iXX0=
|