@arsedizioni/ars-utils 18.2.346 → 18.2.348

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.
@@ -44,4 +44,4 @@ export class DateInterval {
44
44
  this.to = null;
45
45
  }
46
46
  }
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY29yZS9kZWZpbml0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEyQ0EsTUFBTSxPQUFPLFFBQVE7SUFJbkIsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUF1QkQsTUFBTSxPQUFPLFVBQVU7Q0FFdEI7QUFDRCxNQUFNLE9BQU8sT0FBTztDQUVuQjtBQUNELE1BQU0sT0FBTyxVQUFVO0NBRXRCO0FBRUQsTUFBTSxPQUFPLFdBQWUsU0FBUSxVQUFhO0NBRWhEO0FBUUQsTUFBTSxPQUFPLGFBQWE7Q0FHekI7QUFFRCxNQUFNLE9BQU8sb0JBQW9CO0NBR2hDO0FBRUQsTUFBTSxPQUFPLFVBQVU7Q0FNdEI7QUErQkQsTUFBTSxPQUFPLFdBQVc7Q0FLdkI7QUF5QkQsTUFBTSxPQUFPLFlBQVk7SUFHdkIsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSTtZQUNkLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDUixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUNuQixDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsQ0FDRjtZQUNELENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNaLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRixDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQztJQUVELFlBQVksT0FBYSxJQUFJLEVBQUUsS0FBVyxJQUFJO1FBcEI5QyxTQUFJLEdBQVMsSUFBSSxDQUFDO1FBQ2xCLE9BQUUsR0FBUyxJQUFJLENBQUM7UUFvQmQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJO1lBQ2QsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUE7SUFDbEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCBpbnRlcmZhY2UgRG9uZVJlc3VsdDxUPiB7XHJcbiAgaXNOZXc/OiBib29sZWFuIHwgbnVsbDtcclxuICBkYXRhPzogVDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBcGlSZXNwb25zZSB7XHJcbiAgc3VjY2VzczogYm9vbGVhbjtcclxuICBtZXNzYWdlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzdWx0PFQ+IGV4dGVuZHMgQXBpUmVzcG9uc2Uge1xyXG4gIHZhbHVlOiBUO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZvbGRlciB7XHJcbiAgaWQ6IHN0cmluZyB8IG51bGw7XHJcbiAgdGVhbUlkPzogc3RyaW5nIHwgbnVsbDtcclxuICBwYXJlbnRJZD86IHN0cmluZyB8IG51bGw7XHJcbiAgcG9zaXRpb24/OiBudW1iZXIgfCBudWxsO1xyXG4gIG5hbWU/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGlzUHJpdmF0ZT86IGJvb2xlYW4gfCBudWxsO1xyXG4gIGl0ZW1zQ291bnQ/OiBudW1iZXIgfCBudWxsO1xyXG4gIHN1Ykl0ZW1zQ291bnQ/OiBudW1iZXIgfCBudWxsO1xyXG59XHJcblxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGb2xkZXJUcmVlIGV4dGVuZHMgRm9sZGVyIHtcclxuICAgIHN1YkZvbGRlcnM/OiBGb2xkZXJUcmVlW10gfCBudWxsO1xyXG4gICAgcGF0aDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbGU8VD4ge1xyXG4gIG93bmVySWQ/OiBUIHwgbnVsbDtcclxuICBpZD86IG51bWJlciB8IG51bGw7XHJcbiAgZmlsZU5hbWU6IHN0cmluZztcclxuICBmaWxlRGF0YTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlZCB7XHJcbiAgaXNWYWxpZCgpOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZUluZm8gaW1wbGVtZW50cyBWYWxpZGF0ZWQge1xyXG4gIGZpbGU6IGFueTtcclxuICB2YWxpZDogYm9vbGVhbjtcclxuXHJcbiAgaXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnZhbGlkO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTmFtZVZhbHVlSXRlbTxUPiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHZhbHVlOiBUO1xyXG4gIHNob3J0TmFtZT86IHN0cmluZyB8IG51bGw7XHJcbiAgcGFyZW50TmFtZT86IHN0cmluZyB8IG51bGw7XHJcbiAgcGFyZW50VmFsdWU/OiBUIHwgbnVsbDtcclxuICBoZWFkZXI/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGJhZz86IGFueSB8IG51bGw7XHJcbiAgYmFnSW5mbz86IHN0cmluZyB8IG51bGw7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuIHwgbnVsbDtcclxuICBzZWxlY3RlZD86IGJvb2xlYW4gfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrYWJsZSB7XHJcbiAgY2hlY2tlZD86IGJvb2xlYW4gfCBudWxsO1xyXG4gIGJhZzogYW55O1xyXG4gIGdldElkKCk6IGFueTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBWYWx1ZU1vZGVsPFQ+IHtcclxuICB2YWx1ZTogVDtcclxufVxyXG5leHBvcnQgY2xhc3MgSURNb2RlbDxUPiB7XHJcbiAgaWQ6IFQ7XHJcbn1cclxuZXhwb3J0IGNsYXNzIEdyb3VwTW9kZWw8VD4ge1xyXG4gIGlkczogVFtdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRGVsZXRlTW9kZWw8VD4gZXh0ZW5kcyBHcm91cE1vZGVsPFQ+IHtcclxuICBtb2RlOiBudW1iZXI7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVSZXN1bHRNb2RlbDxUPiB7XHJcbiAgaXRlbXM/OiBUW10gfCBudWxsLFxyXG4gIGRlbGV0ZWQ/OiBudW1iZXIgfCBudWxsO1xyXG4gIHRvdGFsPzogbnVtYmVyIHwgbnVsbDtcclxuICBsb2c/OiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVsYXRpb25Nb2RlbDxUPiB7XHJcbiAgaWQ6IFQ7XHJcbiAgcGFyZW50SWQ6IFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVcGRhdGVSZWxhdGlvbnNNb2RlbDxUPiB7XHJcbiAgaWQ6IFQ7XHJcbiAgcmVsYXRlZElkczogVFtdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlNb2RlbCB7XHJcbiAgYW55Pzogc3RyaW5nIHwgbnVsbDtcclxuICBzb3J0Qnk/OiBzdHJpbmcgfCBudWxsO1xyXG4gIHNvcnREZXNjZW5kaW5nPzogYm9vbGVhbiB8IG51bGw7XHJcbiAgZmlyc3Q6IG51bWJlcjtcclxuICBjb3VudDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5UmVzdWx0TW9kZWw8VD4ge1xyXG4gIGludGVydmFsPzogc3RyaW5nIHwgbnVsbDtcclxuICBpdGVtczogVFtdO1xyXG4gIHRvdGFsPzogbnVtYmVyIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVNb2RlbDxUPiB7XHJcbiAgcGFyZW50SWQ/OiBUIHwgbnVsbCxcclxuICBpZHM6IFRbXVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVJlc3VsdE1vZGVsPFQ+IHtcclxuaXRlbXM/OiBUW10gfCBudWxsO1xyXG51cGRhdGVkPzogbnVtYmVyIHwgbnVsbDtcclxudG90YWw/OiBudW1iZXIgfCBudWxsO1xyXG5sb2c/OiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFkZE1vZGVsPFQ+IGV4dGVuZHMgVXBkYXRlTW9kZWw8VD4ge1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBZGRSZXN1bHRNb2RlbDxUPiB7XHJcbiAgaXRlbXM/OiBUW10gfCBudWxsO1xyXG4gIGFkZGVkPzogbnVtYmVyIHwgbnVsbDtcclxuICB0b3RhbD86IG51bWJlciB8IG51bGw7XHJcbiAgbG9nPzogc3RyaW5nIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEltcG9ydE1vZGVsIHtcclxuICBvcmlnaW46IHN0cmluZztcclxuICBkYXRhRmlsZTogYW55O1xyXG4gIGp1bXBGaXJzdExpbmU/OiBib29sZWFuIHwgbnVsbDtcclxuICBtYXA/OiBhbnkgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZURpc2FibGVNb2RlbCB7XHJcbiAgdmFsdWU6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VuZFRvTW9kZWwge1xyXG4gIHNlbmRUb1JlY2lwaWVudHM6IHN0cmluZztcclxuICBzZW5kVG9TdWJqZWN0OiBzdHJpbmc7XHJcbiAgc2VuZFRvVGV4dDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEJhZyB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaGFibGUge1xyXG4gIHNlYXJjaEJhZzogU2VhcmNoQmFnO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEZpbHRlck1ldGFkYXRhIHtcclxuICB0b3RhbDogbnVtYmVyOyAvLyB0b3RhbGUgZWxlbWVudGlcclxuICBjb3VudDogbnVtYmVyOyAvLyBjb250ZWdnaW8gZmlsdHJhdGlcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIERhdGVJbnRlcnZhbCB7XHJcbiAgZnJvbTogRGF0ZSA9IG51bGw7XHJcbiAgdG86IERhdGUgPSBudWxsO1xyXG4gIGdldCBmcm9tQXNEYXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZnJvbVxyXG4gICAgICA/IG5ldyBEYXRlKFxyXG4gICAgICAgIHRoaXMuZnJvbS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICAgIHRoaXMuZnJvbS5nZXRNb250aCgpLFxyXG4gICAgICAgIHRoaXMuZnJvbS5nZXREYXRlKCksXHJcbiAgICAgICAgMixcclxuICAgICAgICAwLFxyXG4gICAgICAgIDBcclxuICAgICAgKVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG4gIGdldCB0b0FzRGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRvXHJcbiAgICAgID8gbmV3IERhdGUodGhpcy50by5nZXRGdWxsWWVhcigpLCB0aGlzLnRvLmdldE1vbnRoKCksIHRoaXMudG8uZ2V0RGF0ZSgpLCAyLCAwLCAwKVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihmcm9tOiBEYXRlID0gbnVsbCwgdG86IERhdGUgPSBudWxsKSB7XHJcbiAgICB0aGlzLmZyb20gPSBmcm9tO1xyXG4gICAgdGhpcy50byA9IHRvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgaW50ZXJ2YWxcclxuICAgKi9cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZnJvbSA9IG51bGwsXHJcbiAgICAgIHRoaXMudG8gPSBudWxsXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVzdWx0PFQ+IGV4dGVuZHMgQXBpUmVzdWx0PGJvb2xlYW4+IHtcclxuICBjb250ZXh0OiBUO1xyXG4gIHRva2VuOiBzdHJpbmc7XHJcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY29yZS9kZWZpbml0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUE0Q0EsTUFBTSxPQUFPLFFBQVE7SUFJbkIsT0FBTztRQUNMLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBQ0Y7QUF1QkQsTUFBTSxPQUFPLFVBQVU7Q0FFdEI7QUFDRCxNQUFNLE9BQU8sT0FBTztDQUVuQjtBQUNELE1BQU0sT0FBTyxVQUFVO0NBRXRCO0FBRUQsTUFBTSxPQUFPLFdBQWUsU0FBUSxVQUFhO0NBRWhEO0FBUUQsTUFBTSxPQUFPLGFBQWE7Q0FHekI7QUFFRCxNQUFNLE9BQU8sb0JBQW9CO0NBR2hDO0FBRUQsTUFBTSxPQUFPLFVBQVU7Q0FNdEI7QUErQkQsTUFBTSxPQUFPLFdBQVc7Q0FLdkI7QUF5QkQsTUFBTSxPQUFPLFlBQVk7SUFHdkIsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsSUFBSTtZQUNkLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDUixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUNwQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUNuQixDQUFDLEVBQ0QsQ0FBQyxFQUNELENBQUMsQ0FDRjtZQUNELENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsRUFBRTtZQUNaLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqRixDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQztJQUVELFlBQVksT0FBYSxJQUFJLEVBQUUsS0FBVyxJQUFJO1FBcEI5QyxTQUFJLEdBQVMsSUFBSSxDQUFDO1FBQ2xCLE9BQUUsR0FBUyxJQUFJLENBQUM7UUFvQmQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRUQ7O09BRUc7SUFDSCxLQUFLO1FBQ0gsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJO1lBQ2QsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUE7SUFDbEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSU5vZGUgfSBmcm9tICcuL3N5c3RlbSc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERvbmVSZXN1bHQ8VD4ge1xyXG4gIGlzTmV3PzogYm9vbGVhbiB8IG51bGw7XHJcbiAgZGF0YT86IFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBpUmVzcG9uc2Uge1xyXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFwaVJlc3VsdDxUPiBleHRlbmRzIEFwaVJlc3BvbnNlIHtcclxuICB2YWx1ZTogVDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBGb2xkZXIge1xyXG4gIGlkOiBzdHJpbmcgfCBudWxsO1xyXG4gIHRlYW1JZD86IHN0cmluZyB8IG51bGw7XHJcbiAgcGFyZW50SWQ/OiBzdHJpbmcgfCBudWxsO1xyXG4gIHBvc2l0aW9uPzogbnVtYmVyIHwgbnVsbDtcclxuICBuYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICBpc1ByaXZhdGU/OiBib29sZWFuIHwgbnVsbDtcclxuICBpdGVtc0NvdW50PzogbnVtYmVyIHwgbnVsbDtcclxuICBzdWJJdGVtc0NvdW50PzogbnVtYmVyIHwgbnVsbDtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRm9sZGVyVHJlZSBleHRlbmRzIEZvbGRlciwgSU5vZGUge1xyXG4gICAgY2hpbGRyZW4/OiBGb2xkZXJUcmVlW10gfCBudWxsO1xyXG4gICAgcGF0aDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbGU8VD4ge1xyXG4gIG93bmVySWQ/OiBUIHwgbnVsbDtcclxuICBpZD86IG51bWJlciB8IG51bGw7XHJcbiAgZmlsZU5hbWU6IHN0cmluZztcclxuICBmaWxlRGF0YTogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlZCB7XHJcbiAgaXNWYWxpZCgpOiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRmlsZUluZm8gaW1wbGVtZW50cyBWYWxpZGF0ZWQge1xyXG4gIGZpbGU6IGFueTtcclxuICB2YWxpZDogYm9vbGVhbjtcclxuXHJcbiAgaXNWYWxpZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnZhbGlkO1xyXG4gIH1cclxufVxyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTmFtZVZhbHVlSXRlbTxUPiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHZhbHVlOiBUO1xyXG4gIHNob3J0TmFtZT86IHN0cmluZyB8IG51bGw7XHJcbiAgcGFyZW50TmFtZT86IHN0cmluZyB8IG51bGw7XHJcbiAgcGFyZW50VmFsdWU/OiBUIHwgbnVsbDtcclxuICBoZWFkZXI/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGJhZz86IGFueSB8IG51bGw7XHJcbiAgYmFnSW5mbz86IHN0cmluZyB8IG51bGw7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuIHwgbnVsbDtcclxuICBzZWxlY3RlZD86IGJvb2xlYW4gfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENoZWNrYWJsZSB7XHJcbiAgY2hlY2tlZD86IGJvb2xlYW4gfCBudWxsO1xyXG4gIGJhZzogYW55O1xyXG4gIGdldElkKCk6IGFueTtcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBWYWx1ZU1vZGVsPFQ+IHtcclxuICB2YWx1ZTogVDtcclxufVxyXG5leHBvcnQgY2xhc3MgSURNb2RlbDxUPiB7XHJcbiAgaWQ6IFQ7XHJcbn1cclxuZXhwb3J0IGNsYXNzIEdyb3VwTW9kZWw8VD4ge1xyXG4gIGlkczogVFtdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRGVsZXRlTW9kZWw8VD4gZXh0ZW5kcyBHcm91cE1vZGVsPFQ+IHtcclxuICBtb2RlOiBudW1iZXI7XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBEZWxldGVSZXN1bHRNb2RlbDxUPiB7XHJcbiAgaXRlbXM/OiBUW10gfCBudWxsLFxyXG4gIGRlbGV0ZWQ/OiBudW1iZXIgfCBudWxsO1xyXG4gIHRvdGFsPzogbnVtYmVyIHwgbnVsbDtcclxuICBsb2c/OiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVsYXRpb25Nb2RlbDxUPiB7XHJcbiAgaWQ6IFQ7XHJcbiAgcGFyZW50SWQ6IFQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVcGRhdGVSZWxhdGlvbnNNb2RlbDxUPiB7XHJcbiAgaWQ6IFQ7XHJcbiAgcmVsYXRlZElkczogVFtdO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUXVlcnlNb2RlbCB7XHJcbiAgYW55Pzogc3RyaW5nIHwgbnVsbDtcclxuICBzb3J0Qnk/OiBzdHJpbmcgfCBudWxsO1xyXG4gIHNvcnREZXNjZW5kaW5nPzogYm9vbGVhbiB8IG51bGw7XHJcbiAgZmlyc3Q6IG51bWJlcjtcclxuICBjb3VudDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5UmVzdWx0TW9kZWw8VD4ge1xyXG4gIGludGVydmFsPzogc3RyaW5nIHwgbnVsbDtcclxuICBpdGVtczogVFtdO1xyXG4gIHRvdGFsPzogbnVtYmVyIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVNb2RlbDxUPiB7XHJcbiAgcGFyZW50SWQ/OiBUIHwgbnVsbCxcclxuICBpZHM6IFRbXVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZVJlc3VsdE1vZGVsPFQ+IHtcclxuaXRlbXM/OiBUW10gfCBudWxsO1xyXG51cGRhdGVkPzogbnVtYmVyIHwgbnVsbDtcclxudG90YWw/OiBudW1iZXIgfCBudWxsO1xyXG5sb2c/OiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEFkZE1vZGVsPFQ+IGV4dGVuZHMgVXBkYXRlTW9kZWw8VD4ge1xyXG5cclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBZGRSZXN1bHRNb2RlbDxUPiB7XHJcbiAgaXRlbXM/OiBUW10gfCBudWxsO1xyXG4gIGFkZGVkPzogbnVtYmVyIHwgbnVsbDtcclxuICB0b3RhbD86IG51bWJlciB8IG51bGw7XHJcbiAgbG9nPzogc3RyaW5nIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEltcG9ydE1vZGVsIHtcclxuICBvcmlnaW46IHN0cmluZztcclxuICBkYXRhRmlsZTogYW55O1xyXG4gIGp1bXBGaXJzdExpbmU/OiBib29sZWFuIHwgbnVsbDtcclxuICBtYXA/OiBhbnkgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZURpc2FibGVNb2RlbCB7XHJcbiAgdmFsdWU6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VuZFRvTW9kZWwge1xyXG4gIHNlbmRUb1JlY2lwaWVudHM6IHN0cmluZztcclxuICBzZW5kVG9TdWJqZWN0OiBzdHJpbmc7XHJcbiAgc2VuZFRvVGV4dDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEJhZyB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaGFibGUge1xyXG4gIHNlYXJjaEJhZzogU2VhcmNoQmFnO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEZpbHRlck1ldGFkYXRhIHtcclxuICB0b3RhbDogbnVtYmVyOyAvLyB0b3RhbGUgZWxlbWVudGlcclxuICBjb3VudDogbnVtYmVyOyAvLyBjb250ZWdnaW8gZmlsdHJhdGlcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIERhdGVJbnRlcnZhbCB7XHJcbiAgZnJvbTogRGF0ZSA9IG51bGw7XHJcbiAgdG86IERhdGUgPSBudWxsO1xyXG4gIGdldCBmcm9tQXNEYXRlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZnJvbVxyXG4gICAgICA/IG5ldyBEYXRlKFxyXG4gICAgICAgIHRoaXMuZnJvbS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICAgIHRoaXMuZnJvbS5nZXRNb250aCgpLFxyXG4gICAgICAgIHRoaXMuZnJvbS5nZXREYXRlKCksXHJcbiAgICAgICAgMixcclxuICAgICAgICAwLFxyXG4gICAgICAgIDBcclxuICAgICAgKVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG4gIGdldCB0b0FzRGF0ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRvXHJcbiAgICAgID8gbmV3IERhdGUodGhpcy50by5nZXRGdWxsWWVhcigpLCB0aGlzLnRvLmdldE1vbnRoKCksIHRoaXMudG8uZ2V0RGF0ZSgpLCAyLCAwLCAwKVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihmcm9tOiBEYXRlID0gbnVsbCwgdG86IERhdGUgPSBudWxsKSB7XHJcbiAgICB0aGlzLmZyb20gPSBmcm9tO1xyXG4gICAgdGhpcy50byA9IHRvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgaW50ZXJ2YWxcclxuICAgKi9cclxuICBjbGVhcigpIHtcclxuICAgIHRoaXMuZnJvbSA9IG51bGwsXHJcbiAgICAgIHRoaXMudG8gPSBudWxsXHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIExvZ2luUmVzdWx0PFQ+IGV4dGVuZHMgQXBpUmVzdWx0PGJvb2xlYW4+IHtcclxuICBjb250ZXh0OiBUO1xyXG4gIHRva2VuOiBzdHJpbmc7XHJcbiAgcmVmcmVzaFRva2VuPzogc3RyaW5nO1xyXG59XHJcbiJdfQ==
@@ -635,4 +635,4 @@ export class SystemUtils {
635
635
  return nodes;
636
636
  }
637
637
  }
638
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NvcmUvc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFHLE1BQU0sYUFBYSxDQUFDO0FBWTdDLE1BQU0sQ0FBTixJQUFZLFVBYVg7QUFiRCxXQUFZLFVBQVU7SUFDcEIsNkNBQVMsQ0FBQTtJQUNULDJDQUFRLENBQUE7SUFDUix1RUFBc0IsQ0FBQTtJQUN0QixpRUFBbUIsQ0FBQTtJQUNuQiwyRUFBd0IsQ0FBQTtJQUN4QiwyREFBZ0IsQ0FBQTtJQUNoQixtRUFBb0IsQ0FBQTtJQUNwQixpREFBVyxDQUFBO0lBQ1gseURBQWUsQ0FBQTtJQUNmLDBEQUFnQixDQUFBO0lBQ2hCLGtEQUFZLENBQUE7SUFDWiw0REFBaUIsQ0FBQSxDQUFTLGFBQWE7QUFDekMsQ0FBQyxFQWJXLFVBQVUsS0FBVixVQUFVLFFBYXJCO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFDdEI7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBSSxLQUE2QixFQUFFLEdBQVcsRUFBRSxLQUFVO1FBQzdFLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFLLElBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxD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QUM7b0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO29CQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBEYXRlSW50ZXJ2YWwgfSBmcm9tICcuL2RlZmluaXRpb25zJztcclxuaW1wb3J0IHsgZm9ybWF0LCBwYXJzZSwgcGFyc2VJU08sIHNldEhvdXJzIH0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgeyBpdCB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZSc7XHJcbmltcG9ydCB7IGZyb21ab25lZFRpbWUgIH0gZnJvbSAnZGF0ZS1mbnMtdHonO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTm9kZSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgY291bnQ/OiBudW1iZXIgfCBudWxsO1xyXG4gIGNoaWxkcmVuPzogSU5vZGVbXSB8IG51bGw7XHJcbiAgcGFyZW50PzogSU5vZGUgfCBudWxsO1xyXG4gIGJhZz86IGFueSB8IG51bGxcclxufVxyXG5cclxuXHJcbmV4cG9ydCBlbnVtIERhdGVGb3JtYXQge1xyXG4gIFNob3J0ID0gMSwgICAgICAgICAgICAgICAgLy8gZGQvbW0veXl5eVxyXG4gIExvbmcgPSAyLCAgICAgICAgICAgICAgICAgLy8gZCBtbW1tIHl5eXlcclxuICBMb25nV2l0aFNob3J0TW9udGggPSAzLCAgIC8vIGQgbW1tIHl5eXlcclxuICBMb25nV2l0aFdlZWtEYXkgPSA0LCAgICAgIC8vIHd3d3csIGQgbW1tbSB5eXl5XHJcbiAgTG9uZ1dpdGhTaG9ydFdlZWtEYXkgPSA1LCAvLyB3d3csIGQgbW1tbSB5eXl5XHJcbiAgTW9udGhBbmRZZWFyID0gNiwgICAgICAgICAvLyBtbW0geXl5eVxyXG4gIExvbmdNb250aEFuZFllYXIgPSA3LCAgICAgLy8gbW1tbSB5eXl5XHJcbiAgV2Vla0RheSA9IDgsICAgICAgICAgICAgICAvLyB3d3cgZFxyXG4gIExvbmdXZWVrRGF5ID0gOSwgICAgICAgICAgLy8gd3d3dyBkXHJcbiAgRGF5QW5kTW9udGggPSAxMCwgICAgICAgICAvLyBkIG1tbW1cclxuICBTaG9ydFVTID0gMTEsICAgICAgICAgICAgIC8vIG1tL2RkL3l5eXlcclxuICBTaG9ydElTTzg2MDEgPSAxMiAgICAgICAgIC8vIHl5eXktbW0tZGRcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFN5c3RlbVV0aWxzIHtcclxuICAvKipcclxuICAgKiBBcnJheSBmaW5kIGJ5IGtleVxyXG4gICAqIEBwYXJhbSBhcnJheSAgICAgOiB0aGUgYXJyYXkgdG8gc2NhblxyXG4gICAqIEBwYXJhbSBrZXkgICAgICAgOiBrZXkgbmFtZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgICAgOiB0aGUgdmFsdWUgdG8gc2VhcmNoIGZvclxyXG4gICAqIEByZXR1cm5zICAgICAgICAgOiB0aGUgcHJvcGVydHkgdmFsdWUgb3IgbnVsbFxyXG4gICAqL1xyXG4gIHN0YXRpYyBhcnJheUZpbmRCeUtleTxUPihhcnJheTogVFtdIHwgbnVsbCB8IHVuZGVmaW5lZCwga2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBUIHwgbnVsbCB7XHJcbiAgICBpZiAoIWFycmF5KSByZXR1cm4gbnVsbDtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnJheSkge1xyXG4gICAgICBpZiAoKGl0ZW0gYXMgYW55KVtrZXldID09PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFycmF5IGZpbmQgaW5kZXggYnkga2V5XHJcbiAgICogQHBhcmFtIGFycmF5ICAgOiB0aGUgYXJyYXkgdG8gc2NhblxyXG4gICAqIEBwYXJhbSBrZXkgICAgIDogdGhlIGtleSBuYW1lXHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgdmFsdWUgdG8gc2VhcmNoIGZvclxyXG4gICAqIEByZXR1cm5zICAgICAgIDogdGhlIGFycmF5IGluZGV4IG9yIC0xIGlmIG5vdCBmb3VuZFxyXG4gICAqL1xyXG4gIHN0YXRpYyBhcnJheUZpbmRJbmRleEJ5S2V5PFQ+KGFycmF5OiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IG51bWJlciAge1xyXG4gICAgaWYgKCFhcnJheSkgcmV0dXJuIC0xO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoKGFycmF5W2ldIGFzIGFueSlba2V5XSA9PT0gdmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gaTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIC0xO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgdmFsdWUgZnJvbSBhbmQgYXJyYXkgbWFkZSBvZiBuYW1lfHZhbHVlIGl0ZW1zXHJcbiAgICogQHBhcmFtIGFycmF5ICAgOiB0aGUgYXJyYXkgdG8gc2NhblxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHZhbHVlIHRvIHNlYXJjaCBmb3JcclxuICAgKiBAcmV0dXJucyAgICAgICA6IHRoZSBwcm9wZXJ0eSB2YWx1ZSBvciBudWxsIGlmIG5vdCBmb3VuZFxyXG4gICAqL1xyXG4gIHN0YXRpYyBhcnJheUdldFZhbHVlPFQ+KGFycmF5OiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLCB2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmICghYXJyYXkpIHJldHVybiBudWxsO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG4gICAgICBjb25zdCBpdGVtID0gKGFycmF5W2ldIGFzIGFueSk7XHJcbiAgICAgIGlmIChpdGVtLnZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBpdGVtLm5hbWUgfHwgaXRlbS5pZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IGl0ZW1zIHRvIG5vZGVzIGludG8gYSB0cmVlIHN0cnVjdHVyZVxyXG4gICAqIEBwYXJhbSBpdGVtcyAgIDogbGlzdCBvZiBub2Rlc1xyXG4gICAqIEBwYXJhbSBwYXJlbnQgIDogcGFyZW50IG5vZGVcclxuICAgKiBAcmV0dXJucyAgICAgICA6IGFuIGFycmF5IG9mIElOb2RlIG9iamVjdHNcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlUb05vZGVzKGl0ZW1zOiBJTm9kZVtdLCBwYXJlbnQ6IElOb2RlID0gbnVsbCk6IElOb2RlW10ge1xyXG4gICAgY29uc3Qgbm9kZXM6IElOb2RlW10gPSBbXTtcclxuICAgIGl0ZW1zLmZvckVhY2goKG4pID0+IHtcclxuICAgICAgY29uc3Qgbm9kZTogSU5vZGUgPSB7XHJcbiAgICAgICAgaWQ6IG4uaWQudG9TdHJpbmcoKSxcclxuICAgICAgICBuYW1lOiBuLm5hbWUsXHJcbiAgICAgICAgY291bnQ6IG4uY291bnQgPyBuLmNvdW50IDogMCxcclxuICAgICAgICBjaGlsZHJlbjogbnVsbCxcclxuICAgICAgICBwYXJlbnQsXHJcbiAgICAgICAgYmFnOiBuLFxyXG4gICAgICB9O1xyXG4gICAgICBub2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgICBub2RlLmNoaWxkcmVuID1cclxuICAgICAgICBuLmNoaWxkcmVuICYmIG4uY2hpbGRyZW4ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgPyB0aGlzLmFycmF5VG9Ob2RlcyhuLmNoaWxkcmVuLCBub2RlKVxyXG4gICAgICAgICAgOiBbXTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIG5vZGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXNlZCB0byBjb3BhcmUgaXRlbXMgZHVyaW5nIGFuIGFycmF5IG9mIG9iamVjdHMgc29ydGluZ1xyXG4gICAqIEBwYXJhbSBrZXkgICAgIDogdGhlIHByb3BlcnR5IG5hbWUgdG8gc29ydCBmb3JcclxuICAgKiBAcGFyYW0gb3JkZXIgICA6IHRoZSBvcmRlciAnYXNjJyBvciAnZGVzYydcclxuICAgKiBAcmV0dXJucyAgICAgICA6IDAgaWYgZXF1YWxzLCAxIGlmIGJpZ2dlciwgLTEgaWYgbG93ZXJcclxuICAgKi9cclxuICBzdGF0aWMgYXJyYXlTb3J0Q29tcGFyZShrZXk6IHN0cmluZywgb3JkZXI6IHN0cmluZyA9IFwiYXNjXCIpIHtcclxuICAgIGNvbnN0IHJlc3VsdCA9IGZ1bmN0aW9uIGlubmVyU29ydChhOiBhbnksIGI6IGFueSkge1xyXG4gICAgICBpZiAoIWEuaGFzT3duUHJvcGVydHkoa2V5KSB8fCAhYi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XHJcbiAgICAgICAgLy8gcHJvcGVydHkgZG9lc24ndCBleGlzdCBvbiBlaXRoZXIgb2JqZWN0XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdmFyQSA9IHR5cGVvZiBhW2tleV0gPT09IFwic3RyaW5nXCIgPyBhW2tleV0udG9VcHBlckNhc2UoKSA6IGFba2V5XTtcclxuICAgICAgY29uc3QgdmFyQiA9IHR5cGVvZiBiW2tleV0gPT09IFwic3RyaW5nXCIgPyBiW2tleV0udG9VcHBlckNhc2UoKSA6IGJba2V5XTtcclxuICAgICAgbGV0IGNvbXBhcmlzb24gPSAwO1xyXG4gICAgICBpZiAodmFyQSA+IHZhckIpIGNvbXBhcmlzb24gPSAxO1xyXG4gICAgICBlbHNlIGlmICh2YXJBIDwgdmFyQikgY29tcGFyaXNvbiA9IC0xO1xyXG4gICAgICByZXR1cm4gb3JkZXIgPT09IFwiZGVzY1wiID8gY29tcGFyaXNvbiAqIC0xIDogY29tcGFyaXNvbjtcclxuICAgIH07XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0IHdlaWdodFxyXG4gICAqIEBwYXJhbSBnciAgICA6IGdyYW1zXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIGZvcm1hdHRlZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgZm9ybWF0V2VpZ2h0KGdyOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGdyID4gMTAwMDAwMCkgcmV0dXJuIChnciAvIDEwMDAwMDApLnRvRml4ZWQoMikgKyBcIiB0XCI7XHJcbiAgICBlbHNlIGlmIChnciA+IDEwMDAwMCkgcmV0dXJuIChnciAvIDEwMDAwMCkudG9GaXhlZCgyKSArIFwiIHFcIjtcclxuICAgIGVsc2UgaWYgKGdyID4gMTAwMCkgcmV0dXJuIChnciAvIDEwMDApLnRvRml4ZWQoMikgKyBcIiBrZ1wiO1xyXG4gICAgZWxzZSByZXR1cm4gZ3IgKyBcIiBnclwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0IGZpbGUgc2l6ZVxyXG4gICAqIEBwYXJhbSBieXRlcyA6IG51bWJlciBvZiBieXRlc1xyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSBmb3JtYXR0ZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGZvcm1hdEZpbGVTaXplKGJ5dGVzOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgaWYgKGJ5dGVzID4gMTAyNDAwMCkgcmV0dXJuIChieXRlcyAvIDEwMjQwMDApLnRvRml4ZWQoMSkgKyBcIiBNQlwiO1xyXG4gICAgaWYgKGJ5dGVzID4gMTAyNCkgcmV0dXJuIChieXRlcyAvIDEwMjQpLnRvRml4ZWQoMSkgKyBcIiBLYlwiO1xyXG4gICAgcmV0dXJuIGJ5dGVzICsgXCIgYnl0ZVwiO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29tcGFyZSB0d28gc3RyaW5nXHJcbiAgICogQHBhcmFtIGEgICA6IHN0cmluZyBhXHJcbiAgICogQHBhcmFtIGIgICA6IHN0cmluZyBiXHJcbiAgICogQHJldHVybnMgICA6IDAgaWYgZXF1YWxzLCAxIGlmIGJpZ2dlciwgLTEgaWYgbG93ZXJcclxuICAgKi9cclxuICBzdGF0aWMgY29tcGFyZVN0cmluZyhhOiBzdHJpbmcsIGI6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICBpZiAoKGEgPz8gXCJcIikudG9Mb3dlckNhc2UoKSA+IChiID8/IFwiXCIpLnRvTG93ZXJDYXNlKCkpIHJldHVybiAxO1xyXG4gICAgaWYgKChhID8/IFwiXCIpLnRvTG93ZXJDYXNlKCkgPCAoYiA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpKSByZXR1cm4gLTE7XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhcGl0YWxpemUgYSBzdHJpbmdcclxuICAgKiBAcGFyYW0gcyAgIDogdGhlIHN0cmluZyB0byBjYXBpdGFsaXplXHJcbiAgICogQHJldHVybnMgICA6IHRoZSBjYXBpdGFsaXplZCBzdHJpbmcgIFxyXG4gICAqL1xyXG4gIHN0YXRpYyBjYXBpdGFsaXplKHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXMpIHJldHVybiBudWxsO1xyXG4gICAgbGV0IGIgPSBcIlwiO1xyXG4gICAgbGV0IGNhcCA9IHRydWU7XHJcbiAgICBmb3IgKGNvbnN0IGNoYXIgb2Ygcykge1xyXG4gICAgICBpZiAoY2hhciA9PT0gXCIgXCIpIHtcclxuICAgICAgICBiICs9IGNoYXI7XHJcbiAgICAgICAgY2FwID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChjYXApIHtcclxuICAgICAgICBiICs9IGNoYXIudG9VcHBlckNhc2UoKTtcclxuICAgICAgICBjYXAgPSBmYWxzZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBiICs9IGNoYXIudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcnVuY2F0ZSBhIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBzICAgICA6IHRoZSBzdHJpbmcgdG8gdHJ1bmNhdGVcclxuICAgKiBAcGFyYW0gbWF4ICAgOiB0aGUgbWF4IG51bWJlciBvZiBjaGFyc1xyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSB0cnVuY2F0ZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHRydW5jYXRlKHM6IHN0cmluZywgbWF4OiBudW1iZXIgPSA1MDApOiBzdHJpbmcge1xyXG4gICAgaWYgKCFzKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChzLmxlbmd0aCA8IG1heCkgcmV0dXJuIHM7XHJcbiAgICBsZXQgaSA9IG1heCAtIDE7XHJcbiAgICB3aGlsZSAoaSA+IDApIHtcclxuICAgICAgaWYgKHNbaV0gPT09ICcgJykgcmV0dXJuIHMuc2xpY2UoMCwgaSk7XHJcbiAgICAgIGktLTtcclxuICAgIH1cclxuICAgIHJldHVybiBzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSm9pbiBhIGxpc3Qgb2Ygc3RyaW5nc1xyXG4gICAqIEBwYXJhbSBpdGVtcyAgICAgOiB0aGUgbGlzdCBvZiBzdHJpbmdzXHJcbiAgICogQHBhcmFtIHNlcCAgICAgICA6IHRoZSBzZXBhcmF0b3Igc3RyaW5nXHJcbiAgICogQHBhcmFtIG1heCAgICAgICA6IHRoZSBtYXhpbXVtIHJlc3VsdGluZyBzdHJpbmdcclxuICAgKiBAcmV0dXJucyAgICAgICAgIDogdGhlIGpvaW5lZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgam9pbihpdGVtczogc3RyaW5nW10sIHNlcDogc3RyaW5nID0gXCIgXCIsIG1heDogbnVtYmVyID0gMzUwKTogc3RyaW5nIHtcclxuICAgIGlmICghaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChpdGVtcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGxldCBsID0gMDtcclxuICAgICAgbGV0IHMgPSBcIlwiXHJcbiAgICAgIHdoaWxlIChzLmxlbmd0aCA8IG1heCAmJiBpdGVtcy5sZW5ndGggPiBsKSB7XHJcbiAgICAgICAgaWYgKGwgPiAwKSB7XHJcbiAgICAgICAgICBzICs9IHNlcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcyArPSBpdGVtc1tsKytdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChpdGVtcy5sZW5ndGggPiBsKSB7XHJcbiAgICAgICAgcyArPSBcIi4uLlwiO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGl0ZW1zWzBdO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVwbGFjZSBzdHVmZiBpbiB0ZXh0IGh0bWxcclxuICAgKiBAcGFyYW0gcyAgIDogdGhlIHN0cmluZyB0byBwcm9jZXNzXHJcbiAgICogQHJldHVybnMgICA6IHRoZSByZXBsYWNlZCBzdHJpbmcgIFxyXG4gICAqL1xyXG4gIHN0YXRpYyByZXBsYWNlQXNIdG1sKHM6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWdleCA9IC9odHRwcz86XFwvXFwvLipbXlxcc10vaWdcclxuICAgIGNvbnN0IG0gPSByZWdleC5leGVjKHMpO1xyXG4gICAgaWYgKG0gJiYgbS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCB2ID0gbnVsbDtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdiA9IG1baV07XHJcbiAgICAgICAgcyA9IHMucmVwbGFjZSh2LCAnPGEgaHJlZj1cIicgKyB2ICsgJ1wiIHRhcmdldD1cIl9ibGFua1wiPicgKyB2ICsgJzwvYT4nKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wYXJlIHR3byBuYW1lc1xyXG4gICAqIEBwYXJhbSBhICAgOiBuYW1lIGFcclxuICAgKiBAcGFyYW0gYiAgIDogbmFtZSBiXHJcbiAgICogQHJldHVybnMgICA6IHRydWUgaWYgYSBlcXVhbHMgYlxyXG4gICAqL1xyXG4gIHN0YXRpYyBjb21wYXJlTmFtZXMoYTogc3RyaW5nLCBiOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmIChhKSBhID0gYS50cmltKCk7XHJcbiAgICBpZiAoYikgYiA9IGIudHJpbSgpO1xyXG4gICAgaWYgKGEgJiYgYiAmJiBhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIGlmICh0aGlzLmNvbXBhcmVTdHJpbmcoYSwgYikgPT09IDApIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgcDEgPSBhLnNwbGl0KFwiIFwiKTtcclxuICAgIGNvbnN0IHAyID0gYi5zcGxpdChcIiBcIik7XHJcbiAgICBpZiAocDEubGVuZ3RoICE9PSBwMi5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCBtYXRjaGVzID0gcDEubGVuZ3RoO1xyXG4gICAgZm9yIChjb25zdCBzMSBvZiBwMSkge1xyXG4gICAgICBmb3IgKGNvbnN0IHMyIG9mIHAyKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29tcGFyZVN0cmluZyhzMSwgczIpID09PSAwKSB7XHJcbiAgICAgICAgICBtYXRjaGVzLS07XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWF0Y2hlcyA9PT0gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENpcGhlciBhIHRleHRcclxuICAgKiBAcGFyYW0gdGV4dCAgICA6IHRoZSB0ZXh0XHJcbiAgICogQHBhcmFtIGtleSAgICAgOiB0aGUga2V5XHJcbiAgICogQHBhcmFtIHJldmVyc2UgOiB0cnVlIHRvIGRlY29kZSwgZmFsc2UgdG8gZW5jb2RlXHJcbiAgICogQHJldHVybnMgICAgICAgOnRoZSBjaXBoZXJlZCB0ZXh0XHJcbiAgICovXHJcbiAgc3RhdGljIGNpcGhlcih0ZXh0OiBzdHJpbmcsIGtleTogc3RyaW5nLCByZXZlcnNlOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgLy8gU3Vycm9nYXRlIHBhaXIgbGltaXRcclxuICAgIHZhciBib3VuZCA9IDB4MTAwMDA7XHJcblxyXG4gICAgLy8gQ3JlYXRlIHN0cmluZyBmcm9tIGNoYXJhY3RlciBjb2Rlc1xyXG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIC8vIFR1cm4gc3RyaW5nIHRvIGNoYXJhY3RlciBjb2Rlc1xyXG4gICAgICB0ZXh0LnNwbGl0KFwiXCIpLm1hcChmdW5jdGlvbiAodjogYW55LCBpOiBudW1iZXIpIHtcclxuICAgICAgICAvLyBHZXQgcm90YXRpb24gZnJvbSBrZXlcclxuICAgICAgICB2YXIgcm90YXRpb24gPSBrZXkuY2hhckNvZGVBdChpICUga2V5Lmxlbmd0aCk7XHJcblxyXG4gICAgICAgIC8vIEFyZSB3ZSBkZWNyeXB0aW5nP1xyXG4gICAgICAgIGlmIChyZXZlcnNlKSByb3RhdGlvbiA9IC1yb3RhdGlvbjtcclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIGN1cnJlbnQgY2hhcmFjdGVyIGNvZGUgKyByb3RhdGlvblxyXG4gICAgICAgIHJldHVybiAodi5jaGFyQ29kZUF0KCkgKyByb3RhdGlvbiArIGJvdW5kKSAlIGJvdW5kO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsb25lIGFuIG9iamVjdCB1c2luZyBKU09OXHJcbiAgICogQHBhcmFtIG9iaiA6IHRoZSBvYmxlY3QgdG8gY2xvbmVcclxuICAgKiBAcmV0dXJucyAgIDogYSBuZXcgb2JqZWN0XHJcbiAgICovXHJcbiAgc3RhdGljIGNsb25lKG9iajogYW55KTogYW55IHtcclxuICAgIGlmICghb2JqKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvbmUgYW4gb2JqZWN0IHVzaW5nIGRlZXAgY2xvbmluZ1xyXG4gICAqIEBwYXJhbSBvYmogICA6IHRoZSBvYmxlY3QgdG8gY2xvbmVcclxuICAgKiBAcmV0dXJucyAgICAgOiBhIG5ldyBvYmplY3RcclxuICAgKi9cclxuICBzdGF0aWMgZGVlcENsb25lPFQ+KG9iajogYW55LCBkZXN0OiBUID0gbnVsbCk6IFQge1xyXG4gICAgY29uc3QgY2xvbmVPYmogPSBkZXN0ID8gZGVzdCA6IChvYmouY29uc3RydWN0b3IoKSBhcyBhbnkpO1xyXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IE9iamVjdC5rZXlzKG9iaik7XHJcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XHJcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gb2JqW2F0dHJpYnV0ZV07XHJcbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydHkgPT09IFwib2JqZWN0XCIgJiYgcHJvcGVydHkgIT0gbnVsbCkge1xyXG4gICAgICAgIGNsb25lT2JqW2F0dHJpYnV0ZV0gPSB0aGlzLmRlZXBDbG9uZShwcm9wZXJ0eSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2xvbmVPYmpbYXR0cmlidXRlXSA9IHByb3BlcnR5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY2xvbmVPYmo7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgYSBzdHJpbmcgaXMgYSB2YWxpZCBVVUlEXHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgdmFsdWUgdG8gcGFyc2VcclxuICAgKiBAcmV0dXJucyAgICAgICA6IHRydWUgaWYgaXMgYSB2YWxpZCBVVUlEXHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlVVVJRCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCByZWdleCA9IC9eKHt8KCk/WzAtOWEtZkEtRl17OH0tKFswLTlhLWZBLUZdezR9LSl7M31bMC05YS1mQS1GXXsxMn0ofXwpKT8kLztcclxuICAgIHJldHVybiByZWdleC50ZXN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlIGFuZCBlbnN1cmUgdGhhdCBVVUlEIGlzIG5vdCBlbXB0eVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHZhbHVlIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgICAgOiB0cnVlIGlmIHZhbGlkIGFuZCBub3QgZW1wdHlcclxuICAgKi9cclxuICBzdGF0aWMgcGFyc2VVVUlETm90RW1wdHkodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgcmVnZXggPSAvXih7fCgpPzB7OH0tKDB7NH0tKXszfTB7MTJ9KH18KSk/JC87XHJcbiAgICByZXR1cm4gdGhpcy5wYXJzZVVVSUQodmFsdWUpICYmICFyZWdleC50ZXN0KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENyZWF0ZSBhIG5ldyBVVUlEXHJcbiAgICogQHJldHVybnMgOiB0aGUgc3RyaW5nIFVVSURcclxuICAgKi9cclxuICBzdGF0aWMgZ2VuZXJhdGVVVUlEKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWdleCA9IC9beHldL2c7XHJcbiAgICByZXR1cm4gXCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcIi5yZXBsYWNlKHJlZ2V4LCBmdW5jdGlvbiAoYykge1xyXG4gICAgICB2YXIgciA9IChNYXRoLnJhbmRvbSgpICogMTYpIHwgMCxcclxuICAgICAgICB2ID0gYyA9PT0gXCJ4XCIgPyByIDogKHIgJiAweDMpIHwgMHg4O1xyXG4gICAgICByZXR1cm4gdi50b1N0cmluZygxNik7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBhcnNlIGEgdGV4dCBhbmQgcmV0dXJuIHRydWUgaWYgaXMgYSB2YWxpZCBlbWFpbCBvciBudWxsXHJcbiAgICogQHBhcmFtIHZhbHVlIDogZW1haWxcclxuICAgKiBAcmV0dXJucyAgICAgOiB0cnVlIGlmIHRoZSBlbWFpbCBpcyB2YWxpZCBvciBlbXB0eVxyXG4gICAqL1xyXG4gIHN0YXRpYyBwYXJzZUVtYWlsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgcmVnZXggPSAvKD86W2EtejAtOSshIyQlJicqK1xcLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqK1xcLz0/Xl9ge3x9fi1dKykqfFwiKD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjFcXHgyMy1cXHg1YlxceDVkLVxceDdmXXxcXFxcW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBlLVxceDdmXSkqXCIpQCg/Oig/OlthLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT9cXC4pK1thLXowLTldKD86W2EtejAtOS1dKlthLXowLTldKT98XFxbKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT98W2EtejAtOS1dKlthLXowLTldOig/OltcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDIxLVxceDVhXFx4NTMtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSspXFxdKS9naVxyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgYSB0ZXh0IGFuZCByZXR1cm4gdHJ1ZSBpZiBpcyBhIHZhbGlkIHVybCBvciBudWxsXHJcbiAgICogQHBhcmFtIHZhbHVlIDogdGhlIHVybCB0byBwYXJzZVxyXG4gICAqIEByZXR1cm5zICAgICA6IHRydWUgaWYgdGhlIHVybCBpcyB2YWxpZCBvciBlbXB0eVxyXG4gICAqL1xyXG4gIHN0YXRpYyBwYXJzZVVybCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gdHJ1ZTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcclxuICAgICAgXCIoaHR0cHM/Oi8vKT8oW1xcXFxkYS16Li1dKylcXFxcLihbYS16Ll17Miw2fSlbL1xcXFx3IC4tXSovP1wiXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUudHJpbSgpLnRvTG93ZXJDYXNlKCkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGRhdGUgcGFydHMgZnJvbSBhIHN0cmluZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgIDogdGhlIHN0cmluZyB0byBwYXJzZVxyXG4gICAqIEByZXR1cm5zICAgICAgIDogYW4gYXJyYXkgb2YgbnVtYmVycyB3aXRoIHllYXIsIG1vbnRoLCBkYXlcclxuICAgKi9cclxuICBzdGF0aWMgZ2V0RGF0ZVBhcnRzKHZhbHVlOiBzdHJpbmcpOiBudW1iZXJbXSB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgIGxldCBwYXJ0czogbnVtYmVyW10gPSBbXTtcclxuICAgIGlmICh2YWx1ZS5pbmRleE9mKFwiLVwiKSAhPT0gLTEpIHtcclxuICAgICAgY29uc3QgcCA9IHZhbHVlLnNwbGl0KFwiLVwiKTtcclxuICAgICAgaWYgKHAubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcclxuICAgICAgcGFydHMgPSBbcGFyc2VJbnQocFswXSksIHBhcnNlSW50KHBbMV0pIC0gMSwgcGFyc2VJbnQocFsyXSldO1xyXG4gICAgfSBlbHNlIGlmICh2YWx1ZS5pbmRleE9mKFwiL1wiKSAhPT0gLTEpIHtcclxuICAgICAgY29uc3QgcCA9IHZhbHVlLnNwbGl0KFwiL1wiKTtcclxuICAgICAgaWYgKHAubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcclxuICAgICAgcGFydHMgPSBbcGFyc2VJbnQocFsyXSksIHBhcnNlSW50KHBbMV0pIC0gMSwgcGFyc2VJbnQocFswXSldO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBhcnRzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgYSBkYXRlXHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgdmFsdWUgdG8gY2hlY2tcclxuICAgKiBAcGFyYW0gbG9jYWxlICA6IHRoZSBsb2NhbGUgdG8gdXNlXHJcbiAgICogQHJldHVybnMgICAgICAgOiBhIHZhbGlkIERhdGUgb2JqZWN0IG9yIG51bGxcclxuICAgKi9cclxuICBzdGF0aWMgcGFyc2VEYXRlKHZhbHVlOiBzdHJpbmcgfCBEYXRlLCBsb2NhbGU6IGFueSA9IGl0KTogRGF0ZSB7XHJcbiAgICAvLyBObyB2YWx1ZSBhdCBhbGxcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgLy8gQSBEYXRlIHZhbHVlXHJcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIHZhbHVlLmdldFRpbWUoKSkgcmV0dXJuIHZhbHVlO1xyXG4gICAgLy8gUGFyc2Uga25vd24gZm9ybWF0cyB1c2luZyBkYXRlLWZuc1xyXG4gICAgbGV0IGQgPSBwYXJzZUlTTyh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgaWYgKGQgJiYgZC5nZXRUaW1lKCkgJiYgZC5nZXRGdWxsWWVhcigpID4gMTc1MCkgcmV0dXJuIGQ7XHJcbiAgICBkID0gcGFyc2UodmFsdWUgYXMgc3RyaW5nLCAnZGQvTU0veXl5eScsIG5ldyBEYXRlKCksIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICBpZiAoZCAmJiBkLmdldFRpbWUoKSAmJiBkLmdldEZ1bGxZZWFyKCkgPiAxNzUwKSByZXR1cm4gZDtcclxuICAgIGQgPSBwYXJzZSh2YWx1ZSBhcyBzdHJpbmcsICd5eXl5LU1NLWRkJywgbmV3IERhdGUoKSwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgIGlmIChkICYmIGQuZ2V0VGltZSgpICYmIGQuZ2V0RnVsbFllYXIoKSA+IDE3NTApIHJldHVybiBkO1xyXG4gICAgLy8gUGFyc2UgdmFsdWVzIG1hbnVhbGx5XHJcbiAgICBsZXQgcGFydHMgPSB0aGlzLmdldERhdGVQYXJ0cyh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgaWYgKHBhcnRzWzBdIDwgMTAwKSBwYXJ0c1swXSArPSAyMDAwO1xyXG4gICAgaWYgKGlzTmFOKHBhcnRzWzBdKSB8fCBwYXJ0c1swXSA8IDAgfHwgcGFydHNbMF0gPCAxNzUwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChpc05hTihwYXJ0c1sxXSkgfHwgcGFydHNbMV0gPCAwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChpc05hTihwYXJ0c1syXSkgfHwgcGFydHNbMl0gPCAwKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChwYXJ0c1sxXSA+IDExKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChwYXJ0c1sxXSA9PT0gMSAmJiBwYXJ0c1syXSA+IDI5KSByZXR1cm4gbnVsbDtcclxuICAgIGVsc2UgaWYgKHBhcnRzWzFdICE9PSAxICYmIHBhcnRzWzJdID4gMzEpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIG5ldyBEYXRlKHBhcnRzWzBdLCBwYXJ0c1sxXSwgcGFydHNbMl0sIDIpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRm9ybWF0IGEgZGF0ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgICAgOiB0aGUgZGF0ZSBvciBzdHJpbmcgdG8gZm9ybWF0XHJcbiAgICogQHBhcmFtIGZtdCAgICAgICA6IHRoZSBEYXRlRm9ybWF0IHRvIHVzZSBvciB0aGUgc3RyaW5nIHBhdHRlcm5cclxuICAgKiBAcGFyYW0gbG9jYWxlICAgIDogdGhlIGxvY2FsZSB0byB1c2UgKGRlZmF1bHQgaXMgSVQpXHJcbiAgICogQHJldHVybnMgICAgICAgICA6IHRoZSBmb3JtYXR0ZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGZvcm1hdERhdGUoXHJcbiAgICB2YWx1ZTogRGF0ZSB8IHN0cmluZyxcclxuICAgIGZtdDogRGF0ZUZvcm1hdCB8IHN0cmluZyA9IERhdGVGb3JtYXQuU2hvcnQsXHJcbiAgICBsb2NhbGU6IGFueSA9IGl0KTogc3RyaW5nIHtcclxuICAgIC8vIE5vIHZhbHVlIGF0IGFsbFxyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBBIHN0cmluZ1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpXHJcbiAgICAgIHZhbHVlID0gdGhpcy5wYXJzZURhdGUodmFsdWUgYXMgc3RyaW5nKTtcclxuICAgIC8vIE5vdCBhIGRhdGUgXHJcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdmFsdWUuZ2V0VGltZSgpKSlcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBGb3JtYXRcclxuICAgIHN3aXRjaCAoZm10KSB7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5TaG9ydDogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJkZC9NTS95eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nOiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcImQgTU1NTSB5eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nV2l0aFNob3J0TW9udGg6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiZCBNTU0geXl5eVwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuTG9uZ1dpdGhXZWVrRGF5OiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcIkVFRUUsIGQgTU1NTSB5eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nV2l0aFNob3J0V2Vla0RheTogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJFRUUsIGQgTU1NTSB5eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Nb250aEFuZFllYXI6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LkxvbmdNb250aEFuZFllYXI6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiTU1NTSB5eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5XZWVrRGF5OiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcIkVFRSwgZFwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuTG9uZ1dlZWtEYXk6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiRUVFRSwgZFwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuRGF5QW5kTW9udGg6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiZCBNTU1NXCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5TaG9ydFVTOiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcIk1NL2RkL3l5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LlNob3J0SVNPODYwMTogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJ5eXl5LU1NLWRkXCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwgZm10LCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIGFuIGl0YWxpYW4gbG9jYWwgZGF0ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZSAgOiB0aGUgZGF0ZVxyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSBuZXcgZGF0ZVxyXG4gICAqL1xyXG4gIHN0YXRpYyB0b0xvY2FsRGF0ZSh2YWx1ZTogRGF0ZSB8IHN0cmluZyk6IERhdGUge1xyXG4gICAgLy8gTm8gdmFsdWUgYXQgYWxsXHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgIC8vIEEgc3RyaW5nXHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZylcclxuICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgLy8gTm90IGEgZGF0ZVxyXG4gICAgaWYgKCEodmFsdWUgaW5zdGFuY2VvZiBEYXRlICYmIHZhbHVlLmdldFRpbWUoKSkpIHJldHVybiBudWxsO1xyXG4gICAgLy8gVXBkYXRlIGRhdGVcclxuICAgIHJldHVybiBzZXRIb3Vycyh2YWx1ZSwgMik7XHJcblxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIGEgRGF0ZUludGVydmFsIG9iamVjdCBhY2NvcmRpbmcgdG8gYSBzdHJpbmdcclxuICAgKiBAcGFyYW0gdmFsdWUgICAgICAgOiBzdHJpbmcgdmFsdWVcclxuICAgKiBAcGFyYW0gaW50ZXJ2YWwgICAgOiBEYXRlSW50ZXJ2YWwgdmFsdWUgdG8gdXBkYXRlXHJcbiAgICogQHBhcmFtIGVuZCAgICAgICAgIDogdHJ1ZSBpZiBtdXN0IGJlIHVwZGF0ZWQgdGhlIGZpcnN0IG9yIHRoZSBlbmQgdmFsdWUgXHJcbiAgICogQHBhcmFtIGNvcHkgICAgICAgIDogY29weSB0aGUgc2FtZSB2YWx1ZSAod29ya3Mgb25seSBpZiBub3QgZW5kIGVsZW1lbnQpXHJcbiAgICovXHJcbiAgc3RhdGljIGNoYW5nZURhdGVJbnRlcnZhbCh2YWx1ZTogc3RyaW5nLCBpbnRlcnZhbDogRGF0ZUludGVydmFsLCBlbmQ6IGJvb2xlYW4gPSBmYWxzZSwgY29weTogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgbGV0IHllYXIgPSAtMTtcclxuICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gNCAmJiAoeWVhciA9IHBhcnNlSW50KHZhbHVlKSkgPiAxNzUwKSB7XHJcbiAgICAgICAgaWYgKCFlbmQpIHtcclxuICAgICAgICAgIGludGVydmFsLmZyb20gPSBmcm9tWm9uZWRUaW1lIChuZXcgRGF0ZSh5ZWFyLCAwLCAxKSwgJ1VUQycpO1xyXG4gICAgICAgICAgaW50ZXJ2YWwudG8gPSBmcm9tWm9uZWRUaW1lIChuZXcgRGF0ZSh5ZWFyLCAxMSwgMzEpLCAnVVRDJyk7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IG5ldyBEYXRlKHllYXIsIDExLCAzMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHBhcnRzID0gdGhpcy5nZXREYXRlUGFydHModmFsdWUpO1xyXG4gICAgICAgIGlmICghcGFydHMgfHwgaXNOYU4ocGFydHNbMF0pIHx8IHBhcnRzWzBdIDwgMCB8fCBwYXJ0c1swXSA8IDE3NTApIHJldHVybjtcclxuICAgICAgICBjb25zdCBkID0gZnJvbVpvbmVkVGltZSAobmV3IERhdGUocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSksICdVVEMnKTtcclxuICAgICAgICBpZiAoZW5kKVxyXG4gICAgICAgICAgaW50ZXJ2YWwudG8gPSBkO1xyXG4gICAgICAgIGVsc2UgaWYgKGNvcHkpIHtcclxuICAgICAgICAgIGludGVydmFsLmZyb20gPSBkO1xyXG4gICAgICAgICAgaW50ZXJ2YWwudG8gPSBkO1xyXG4gICAgICAgIH0gZWxzZVxyXG4gICAgICAgICAgaW50ZXJ2YWwuZnJvbSA9IGQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEVuY29kZSB1cmxcclxuICAgKiBAcGFyYW0gdmFsdWUgOiB0aGUgdmFsdWUgdG8gZW5jb2RlXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIHVybCBlbmNvZGVkIHN0cmluZ1xyXG4gICAqL1xyXG4gIHN0YXRpYyB1cmxFbmNvZGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlY29kZSB1cmxcclxuICAgKiBAcGFyYW0gdmFsdWUgOiB0aGUgdXJsIHRvIGRlY29kZVxyXG4gICAqIEByZXR1cm5zICAgICA6IHRoZSBkZWNvZGUgdXJsIHN0cmluZ1xyXG4gICAqL1xyXG4gIHN0YXRpYyB1cmxEZWNvZGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWdleCA9IC9cXCsvZztcclxuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoKHZhbHVlICsgXCJcIikucmVwbGFjZShyZWdleCwgXCIlMjBcIikpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgcXVlcnlzdHJpbmcgcGFyYW1ldGVyIHZhbHVlXHJcbiAgICogQHBhcmFtIG5hbWUgIDogdGhlIHBhcmFtZXRlciBuYW1lXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIHN0cmluZyB2YWx1ZVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXRRdWVyeVN0cmluZ1ZhbHVlQnlOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXRoaXMuaXNCcm93c2VyKCkpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgdXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XHJcbiAgICBpZiAodXJsLmluY2x1ZGVzKFwiP1wiKSkge1xyXG4gICAgICBjb25zdCBodHRwUGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoeyBmcm9tU3RyaW5nOiB1cmwuc3BsaXQoXCI/XCIpWzFdIH0pO1xyXG4gICAgICBjb25zdCB2ID0gZGVjb2RlVVJJQ29tcG9uZW50KGh0dHBQYXJhbXMuZ2V0KG5hbWUpKTtcclxuICAgICAgaWYgKHYgIT09IFwibnVsbFwiKSByZXR1cm4gdjtcclxuICAgICAgZWxzZSByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2VuZXJhdGUgYSBwYXNzd29yZFxyXG4gICAqIEByZXR1cm5zIDogdGhlIHBhc3N3b3JkIHN0cmluZ1xyXG4gICAqL1xyXG4gIHN0YXRpYyBnZW5lcmF0ZVBhc3N3b3JkKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByYW5kb20gPSBcIiRcIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKC03KTtcclxuICAgIGxldCBwYXNzd29yZCA9IFwiXCI7XHJcbiAgICBsZXQgaGFzVXBwZXJDYXNlID0gZmFsc2U7XHJcbiAgICBmb3IgKGNvbnN0IHJuZCBvZiByYW5kb20pIHtcclxuICAgICAgaWYgKCFoYXNVcHBlckNhc2UgJiYgXCJhYmNkZWZnaGppbG1ub3BxcnN0dXZ5d3h6XCIuaW5jbHVkZXMocm5kKSkge1xyXG4gICAgICAgIHBhc3N3b3JkICs9IHJuZC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGhhc1VwcGVyQ2FzZSA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGFzc3dvcmQgKz0gcm5kO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWhhc1VwcGVyQ2FzZSlcclxuICAgICAgcGFzc3dvcmQgPSBwYXNzd29yZC5zdWJzdHJpbmcoMCwgNykgKyBcIk1cIjtcclxuICAgIHJldHVybiBwYXNzd29yZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIGN1cnJlbnQgYnJvd3NlciBzdXBwb3J0cyB0b3VjaFxyXG4gICAqIEByZXR1cm5zIDogdHJ1ZSBpZiB0aGUgZGlzcGxheSBpcyB0b3VjaGFibGVcclxuICAgKi9cclxuICBzdGF0aWMgaXNUb3VjaGFibGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0aGlzLmlzQnJvd3NlcigpICYmIChcclxuICAgICAgICBcIm9udG91Y2hzdGFydFwiIGluIHdpbmRvdyB8fFxyXG4gICAgICAgIG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDApXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBjaGVjayB3aWxsIHByZXZlbnQgJ3dpbmRvdycgbG9naWMgdG8gYmUgZXhlY3V0ZWRcclxuICAgKiB3aGlsZSBleGVjdXRpbmcgdGhlIHNlcnZlciByZW5kZXJpbmdcclxuICAgKiBAcmV0dXJucyA6IHRydWUgaWYgdXNpbmcgdGhlIGJyb3dzZXJcclxuICAgKi9cclxuICBzdGF0aWMgaXNCcm93c2VyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiAod2luZG93KSAhPT0gJ3VuZGVmaW5lZCc7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogQ29udmVydCBmb2xkZXJzIGluIGEgdHJlZSBvZiBOb2RlIG9iamVjdC5cclxuICogQHBhcmFtIGZvbGRlcnMgOiB0aGUgc3ViZm9sZGVycyBncm91cCBvciBudWxsIHRvIHJvb3RcclxuICogQHJldHVybnMgICAgICAgOiBhIG5vZGUgbGlzdFxyXG4gKi9cclxuICBzdGF0aWMgdG9Ob2Rlcyhmb2xkZXJzOiBJTm9kZVtdKTogSU5vZGVbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fdG9Ob2Rlcyhmb2xkZXJzLCB1bmRlZmluZWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ29udmVydCBmb2xkZXJzIGluIGEgdHJlZSBvZiBOb2RlIG9iamVjdC5cclxuICAgKiBAcGFyYW0gZm9sZGVycyA6IHRoZSBjaGlsZHJlbiBncm91cCBvciBudWxsIHRvIHJvb3RcclxuICAgKiBAcGFyYW0gcGFyZW50ICA6IHRoZSBwYXJlbnQgbm9kZVxyXG4gICAqIEByZXR1cm5zICAgICAgIDogYSBub2RlIGxpc3QgXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgX3RvTm9kZXMoZm9sZGVyczogSU5vZGVbXSwgcGFyZW50OiBJTm9kZSB8IHVuZGVmaW5lZCk6IElOb2RlW10ge1xyXG4gICAgY29uc3Qgbm9kZXM6IElOb2RlW10gPSBbXTtcclxuICAgIGZvbGRlcnMuZm9yRWFjaCgobjogSU5vZGUpID0+IHtcclxuICAgICAgY29uc3Qgbm9kZTogSU5vZGUgPSB7XHJcbiAgICAgICAgaWQ6IG4uaWQsXHJcbiAgICAgICAgbmFtZTogbi5uYW1lLFxyXG4gICAgICAgIGNvdW50OiBuLmNvdW50LFxyXG4gICAgICAgIHBhcmVudDogcGFyZW50LFxyXG4gICAgICAgIGNoaWxkcmVuOiB1bmRlZmluZWQsXHJcbiAgICAgICAgYmFnOiBuLFxyXG4gICAgICB9O1xyXG4gICAgICBub2RlLmNoaWxkcmVuID1cclxuICAgICAgICBuLmNoaWxkcmVuICYmIG4uY2hpbGRyZW4ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgPyB0aGlzLl90b05vZGVzKG4uY2hpbGRyZW4sIG5vZGUpXHJcbiAgICAgICAgICA6IFtdO1xyXG4gICAgICBub2Rlcy5wdXNoKG5vZGUpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbm9kZXM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
638
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3lzdGVtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NvcmUvc3lzdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzdELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsYUFBYSxFQUFHLE1BQU0sYUFBYSxDQUFDO0FBWTdDLE1BQU0sQ0FBTixJQUFZLFVBYVg7QUFiRCxXQUFZLFVBQVU7SUFDcEIsNkNBQVMsQ0FBQTtJQUNULDJDQUFRLENBQUE7SUFDUix1RUFBc0IsQ0FBQTtJQUN0QixpRUFBbUIsQ0FBQTtJQUNuQiwyRUFBd0IsQ0FBQTtJQUN4QiwyREFBZ0IsQ0FBQTtJQUNoQixtRUFBb0IsQ0FBQTtJQUNwQixpREFBVyxDQUFBO0lBQ1gseURBQWUsQ0FBQTtJQUNmLDBEQUFnQixDQUFBO0lBQ2hCLGtEQUFZLENBQUE7SUFDWiw0REFBaUIsQ0FBQSxDQUFTLGFBQWE7QUFDekMsQ0FBQyxFQWJXLFVBQVUsS0FBVixVQUFVLFFBYXJCO0FBRUQsTUFBTSxPQUFPLFdBQVc7SUFDdEI7Ozs7OztPQU1HO0lBQ0gsTUFBTSxDQUFDLGNBQWMsQ0FBSSxLQUE2QixFQUFFLEdBQVcsRUFBRSxLQUFVO1FBQzdFLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFLLElBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sSUFBSSxD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QUM7b0JBQ2pDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDO29CQUNqQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ1QsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBEYXRlSW50ZXJ2YWwgfSBmcm9tICcuL2RlZmluaXRpb25zJztcclxuaW1wb3J0IHsgZm9ybWF0LCBwYXJzZSwgcGFyc2VJU08sIHNldEhvdXJzIH0gZnJvbSAnZGF0ZS1mbnMnO1xyXG5pbXBvcnQgeyBpdCB9IGZyb20gJ2RhdGUtZm5zL2xvY2FsZSc7XHJcbmltcG9ydCB7IGZyb21ab25lZFRpbWUgIH0gZnJvbSAnZGF0ZS1mbnMtdHonO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJTm9kZSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICBjb3VudD86IG51bWJlciB8IG51bGw7XHJcbiAgY2hpbGRyZW4/OiBJTm9kZVtdIHwgbnVsbDtcclxuICBwYXJlbnQ/OiBJTm9kZSB8IG51bGw7XHJcbiAgYmFnPzogYW55IHwgbnVsbFxyXG59XHJcblxyXG5cclxuZXhwb3J0IGVudW0gRGF0ZUZvcm1hdCB7XHJcbiAgU2hvcnQgPSAxLCAgICAgICAgICAgICAgICAvLyBkZC9tbS95eXl5XHJcbiAgTG9uZyA9IDIsICAgICAgICAgICAgICAgICAvLyBkIG1tbW0geXl5eVxyXG4gIExvbmdXaXRoU2hvcnRNb250aCA9IDMsICAgLy8gZCBtbW0geXl5eVxyXG4gIExvbmdXaXRoV2Vla0RheSA9IDQsICAgICAgLy8gd3d3dywgZCBtbW1tIHl5eXlcclxuICBMb25nV2l0aFNob3J0V2Vla0RheSA9IDUsIC8vIHd3dywgZCBtbW1tIHl5eXlcclxuICBNb250aEFuZFllYXIgPSA2LCAgICAgICAgIC8vIG1tbSB5eXl5XHJcbiAgTG9uZ01vbnRoQW5kWWVhciA9IDcsICAgICAvLyBtbW1tIHl5eXlcclxuICBXZWVrRGF5ID0gOCwgICAgICAgICAgICAgIC8vIHd3dyBkXHJcbiAgTG9uZ1dlZWtEYXkgPSA5LCAgICAgICAgICAvLyB3d3d3IGRcclxuICBEYXlBbmRNb250aCA9IDEwLCAgICAgICAgIC8vIGQgbW1tbVxyXG4gIFNob3J0VVMgPSAxMSwgICAgICAgICAgICAgLy8gbW0vZGQveXl5eVxyXG4gIFNob3J0SVNPODYwMSA9IDEyICAgICAgICAgLy8geXl5eS1tbS1kZFxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3lzdGVtVXRpbHMge1xyXG4gIC8qKlxyXG4gICAqIEFycmF5IGZpbmQgYnkga2V5XHJcbiAgICogQHBhcmFtIGFycmF5ICAgICA6IHRoZSBhcnJheSB0byBzY2FuXHJcbiAgICogQHBhcmFtIGtleSAgICAgICA6IGtleSBuYW1lXHJcbiAgICogQHBhcmFtIHZhbHVlICAgICA6IHRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yXHJcbiAgICogQHJldHVybnMgICAgICAgICA6IHRoZSBwcm9wZXJ0eSB2YWx1ZSBvciBudWxsXHJcbiAgICovXHJcbiAgc3RhdGljIGFycmF5RmluZEJ5S2V5PFQ+KGFycmF5OiBUW10gfCBudWxsIHwgdW5kZWZpbmVkLCBrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IFQgfCBudWxsIHtcclxuICAgIGlmICghYXJyYXkpIHJldHVybiBudWxsO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGFycmF5KSB7XHJcbiAgICAgIGlmICgoaXRlbSBhcyBhbnkpW2tleV0gPT09IHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQXJyYXkgZmluZCBpbmRleCBieSBrZXlcclxuICAgKiBAcGFyYW0gYXJyYXkgICA6IHRoZSBhcnJheSB0byBzY2FuXHJcbiAgICogQHBhcmFtIGtleSAgICAgOiB0aGUga2V5IG5hbWVcclxuICAgKiBAcGFyYW0gdmFsdWUgICA6IHRoZSB2YWx1ZSB0byBzZWFyY2ggZm9yXHJcbiAgICogQHJldHVybnMgICAgICAgOiB0aGUgYXJyYXkgaW5kZXggb3IgLTEgaWYgbm90IGZvdW5kXHJcbiAgICovXHJcbiAgc3RhdGljIGFycmF5RmluZEluZGV4QnlLZXk8VD4oYXJyYXk6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQsIGtleTogc3RyaW5nLCB2YWx1ZTogYW55KTogbnVtYmVyICB7XHJcbiAgICBpZiAoIWFycmF5KSByZXR1cm4gLTE7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICgoYXJyYXlbaV0gYXMgYW55KVtrZXldID09PSB2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYSB2YWx1ZSBmcm9tIGFuZCBhcnJheSBtYWRlIG9mIG5hbWV8dmFsdWUgaXRlbXNcclxuICAgKiBAcGFyYW0gYXJyYXkgICA6IHRoZSBhcnJheSB0byBzY2FuXHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgdmFsdWUgdG8gc2VhcmNoIGZvclxyXG4gICAqIEByZXR1cm5zICAgICAgIDogdGhlIHByb3BlcnR5IHZhbHVlIG9yIG51bGwgaWYgbm90IGZvdW5kXHJcbiAgICovXHJcbiAgc3RhdGljIGFycmF5R2V0VmFsdWU8VD4oYXJyYXk6IFRbXSB8IG51bGwgfCB1bmRlZmluZWQsIHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKCFhcnJheSkgcmV0dXJuIG51bGw7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSAoYXJyYXlbaV0gYXMgYW55KTtcclxuICAgICAgaWYgKGl0ZW0udmFsdWUgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZSB8fCBpdGVtLmlkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbnZlcnQgaXRlbXMgdG8gbm9kZXMgaW50byBhIHRyZWUgc3RydWN0dXJlXHJcbiAgICogQHBhcmFtIGl0ZW1zICAgOiBsaXN0IG9mIG5vZGVzXHJcbiAgICogQHBhcmFtIHBhcmVudCAgOiBwYXJlbnQgbm9kZVxyXG4gICAqIEByZXR1cm5zICAgICAgIDogYW4gYXJyYXkgb2YgSU5vZGUgb2JqZWN0c1xyXG4gICAqL1xyXG4gIHN0YXRpYyBhcnJheVRvTm9kZXMoaXRlbXM6IElOb2RlW10sIHBhcmVudDogSU5vZGUgPSBudWxsKTogSU5vZGVbXSB7XHJcbiAgICBjb25zdCBub2RlczogSU5vZGVbXSA9IFtdO1xyXG4gICAgaXRlbXMuZm9yRWFjaCgobikgPT4ge1xyXG4gICAgICBjb25zdCBub2RlOiBJTm9kZSA9IHtcclxuICAgICAgICBpZDogbi5pZC50b1N0cmluZygpLFxyXG4gICAgICAgIG5hbWU6IG4ubmFtZSxcclxuICAgICAgICBjb3VudDogbi5jb3VudCA/IG4uY291bnQgOiAwLFxyXG4gICAgICAgIGNoaWxkcmVuOiBudWxsLFxyXG4gICAgICAgIHBhcmVudCxcclxuICAgICAgICBiYWc6IG4sXHJcbiAgICAgIH07XHJcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XHJcbiAgICAgIG5vZGUuY2hpbGRyZW4gPVxyXG4gICAgICAgIG4uY2hpbGRyZW4gJiYgbi5jaGlsZHJlbi5sZW5ndGggPiAwXHJcbiAgICAgICAgICA/IHRoaXMuYXJyYXlUb05vZGVzKG4uY2hpbGRyZW4sIG5vZGUpXHJcbiAgICAgICAgICA6IFtdO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbm9kZXM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVc2VkIHRvIGNvcGFyZSBpdGVtcyBkdXJpbmcgYW4gYXJyYXkgb2Ygb2JqZWN0cyBzb3J0aW5nXHJcbiAgICogQHBhcmFtIGtleSAgICAgOiB0aGUgcHJvcGVydHkgbmFtZSB0byBzb3J0IGZvclxyXG4gICAqIEBwYXJhbSBvcmRlciAgIDogdGhlIG9yZGVyICdhc2MnIG9yICdkZXNjJ1xyXG4gICAqIEByZXR1cm5zICAgICAgIDogMCBpZiBlcXVhbHMsIDEgaWYgYmlnZ2VyLCAtMSBpZiBsb3dlclxyXG4gICAqL1xyXG4gIHN0YXRpYyBhcnJheVNvcnRDb21wYXJlKGtleTogc3RyaW5nLCBvcmRlcjogc3RyaW5nID0gXCJhc2NcIikge1xyXG4gICAgY29uc3QgcmVzdWx0ID0gZnVuY3Rpb24gaW5uZXJTb3J0KGE6IGFueSwgYjogYW55KSB7XHJcbiAgICAgIGlmICghYS5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8ICFiLmhhc093blByb3BlcnR5KGtleSkpIHtcclxuICAgICAgICAvLyBwcm9wZXJ0eSBkb2Vzbid0IGV4aXN0IG9uIGVpdGhlciBvYmplY3RcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCB2YXJBID0gdHlwZW9mIGFba2V5XSA9PT0gXCJzdHJpbmdcIiA/IGFba2V5XS50b1VwcGVyQ2FzZSgpIDogYVtrZXldO1xyXG4gICAgICBjb25zdCB2YXJCID0gdHlwZW9mIGJba2V5XSA9PT0gXCJzdHJpbmdcIiA/IGJba2V5XS50b1VwcGVyQ2FzZSgpIDogYltrZXldO1xyXG4gICAgICBsZXQgY29tcGFyaXNvbiA9IDA7XHJcbiAgICAgIGlmICh2YXJBID4gdmFyQikgY29tcGFyaXNvbiA9IDE7XHJcbiAgICAgIGVsc2UgaWYgKHZhckEgPCB2YXJCKSBjb21wYXJpc29uID0gLTE7XHJcbiAgICAgIHJldHVybiBvcmRlciA9PT0gXCJkZXNjXCIgPyBjb21wYXJpc29uICogLTEgOiBjb21wYXJpc29uO1xyXG4gICAgfTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXQgd2VpZ2h0XHJcbiAgICogQHBhcmFtIGdyICAgIDogZ3JhbXNcclxuICAgKiBAcmV0dXJucyAgICAgOiB0aGUgZm9ybWF0dGVkIHN0cmluZ1xyXG4gICAqL1xyXG4gIHN0YXRpYyBmb3JtYXRXZWlnaHQoZ3I6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoZ3IgPiAxMDAwMDAwKSByZXR1cm4gKGdyIC8gMTAwMDAwMCkudG9GaXhlZCgyKSArIFwiIHRcIjtcclxuICAgIGVsc2UgaWYgKGdyID4gMTAwMDAwKSByZXR1cm4gKGdyIC8gMTAwMDAwKS50b0ZpeGVkKDIpICsgXCIgcVwiO1xyXG4gICAgZWxzZSBpZiAoZ3IgPiAxMDAwKSByZXR1cm4gKGdyIC8gMTAwMCkudG9GaXhlZCgyKSArIFwiIGtnXCI7XHJcbiAgICBlbHNlIHJldHVybiBnciArIFwiIGdyXCI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXQgZmlsZSBzaXplXHJcbiAgICogQHBhcmFtIGJ5dGVzIDogbnVtYmVyIG9mIGJ5dGVzXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIGZvcm1hdHRlZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgZm9ybWF0RmlsZVNpemUoYnl0ZXM6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICBpZiAoYnl0ZXMgPiAxMDI0MDAwKSByZXR1cm4gKGJ5dGVzIC8gMTAyNDAwMCkudG9GaXhlZCgxKSArIFwiIE1CXCI7XHJcbiAgICBpZiAoYnl0ZXMgPiAxMDI0KSByZXR1cm4gKGJ5dGVzIC8gMTAyNCkudG9GaXhlZCgxKSArIFwiIEtiXCI7XHJcbiAgICByZXR1cm4gYnl0ZXMgKyBcIiBieXRlXCI7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb21wYXJlIHR3byBzdHJpbmdcclxuICAgKiBAcGFyYW0gYSAgIDogc3RyaW5nIGFcclxuICAgKiBAcGFyYW0gYiAgIDogc3RyaW5nIGJcclxuICAgKiBAcmV0dXJucyAgIDogMCBpZiBlcXVhbHMsIDEgaWYgYmlnZ2VyLCAtMSBpZiBsb3dlclxyXG4gICAqL1xyXG4gIHN0YXRpYyBjb21wYXJlU3RyaW5nKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcclxuICAgIGlmICgoYSA/PyBcIlwiKS50b0xvd2VyQ2FzZSgpID4gKGIgPz8gXCJcIikudG9Mb3dlckNhc2UoKSkgcmV0dXJuIDE7XHJcbiAgICBpZiAoKGEgPz8gXCJcIikudG9Mb3dlckNhc2UoKSA8IChiID8/IFwiXCIpLnRvTG93ZXJDYXNlKCkpIHJldHVybiAtMTtcclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FwaXRhbGl6ZSBhIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBzICAgOiB0aGUgc3RyaW5nIHRvIGNhcGl0YWxpemVcclxuICAgKiBAcmV0dXJucyAgIDogdGhlIGNhcGl0YWxpemVkIHN0cmluZyAgXHJcbiAgICovXHJcbiAgc3RhdGljIGNhcGl0YWxpemUoczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghcykgcmV0dXJuIG51bGw7XHJcbiAgICBsZXQgYiA9IFwiXCI7XHJcbiAgICBsZXQgY2FwID0gdHJ1ZTtcclxuICAgIGZvciAoY29uc3QgY2hhciBvZiBzKSB7XHJcbiAgICAgIGlmIChjaGFyID09PSBcIiBcIikge1xyXG4gICAgICAgIGIgKz0gY2hhcjtcclxuICAgICAgICBjYXAgPSB0cnVlO1xyXG4gICAgICB9IGVsc2UgaWYgKGNhcCkge1xyXG4gICAgICAgIGIgKz0gY2hhci50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgIGNhcCA9IGZhbHNlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGIgKz0gY2hhci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRydW5jYXRlIGEgc3RyaW5nXHJcbiAgICogQHBhcmFtIHMgICAgIDogdGhlIHN0cmluZyB0byB0cnVuY2F0ZVxyXG4gICAqIEBwYXJhbSBtYXggICA6IHRoZSBtYXggbnVtYmVyIG9mIGNoYXJzXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIHRydW5jYXRlZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgdHJ1bmNhdGUoczogc3RyaW5nLCBtYXg6IG51bWJlciA9IDUwMCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXMpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHMubGVuZ3RoIDwgbWF4KSByZXR1cm4gcztcclxuICAgIGxldCBpID0gbWF4IC0gMTtcclxuICAgIHdoaWxlIChpID4gMCkge1xyXG4gICAgICBpZiAoc1tpXSA9PT0gJyAnKSByZXR1cm4gcy5zbGljZSgwLCBpKTtcclxuICAgICAgaS0tO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBKb2luIGEgbGlzdCBvZiBzdHJpbmdzXHJcbiAgICogQHBhcmFtIGl0ZW1zICAgICA6IHRoZSBsaXN0IG9mIHN0cmluZ3NcclxuICAgKiBAcGFyYW0gc2VwICAgICAgIDogdGhlIHNlcGFyYXRvciBzdHJpbmdcclxuICAgKiBAcGFyYW0gbWF4ICAgICAgIDogdGhlIG1heGltdW0gcmVzdWx0aW5nIHN0cmluZ1xyXG4gICAqIEByZXR1cm5zICAgICAgICAgOiB0aGUgam9pbmVkIHN0cmluZ1xyXG4gICAqL1xyXG4gIHN0YXRpYyBqb2luKGl0ZW1zOiBzdHJpbmdbXSwgc2VwOiBzdHJpbmcgPSBcIiBcIiwgbWF4OiBudW1iZXIgPSAzNTApOiBzdHJpbmcge1xyXG4gICAgaWYgKCFpdGVtcyB8fCBpdGVtcy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDEpIHtcclxuICAgICAgbGV0IGwgPSAwO1xyXG4gICAgICBsZXQgcyA9IFwiXCJcclxuICAgICAgd2hpbGUgKHMubGVuZ3RoIDwgbWF4ICYmIGl0ZW1zLmxlbmd0aCA+IGwpIHtcclxuICAgICAgICBpZiAobCA+IDApIHtcclxuICAgICAgICAgIHMgKz0gc2VwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzICs9IGl0ZW1zW2wrK107XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IGwpIHtcclxuICAgICAgICBzICs9IFwiLi4uXCI7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbXNbMF07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXBsYWNlIHN0dWZmIGluIHRleHQgaHRtbFxyXG4gICAqIEBwYXJhbSBzICAgOiB0aGUgc3RyaW5nIHRvIHByb2Nlc3NcclxuICAgKiBAcmV0dXJucyAgIDogdGhlIHJlcGxhY2VkIHN0cmluZyAgXHJcbiAgICovXHJcbiAgc3RhdGljIHJlcGxhY2VBc0h0bWwoczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL2h0dHBzPzpcXC9cXC8uKlteXFxzXS9pZ1xyXG4gICAgY29uc3QgbSA9IHJlZ2V4LmV4ZWMocyk7XHJcbiAgICBpZiAobSAmJiBtLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHYgPSBudWxsO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2ID0gbVtpXTtcclxuICAgICAgICBzID0gcy5yZXBsYWNlKHYsICc8YSBocmVmPVwiJyArIHYgKyAnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+JyArIHYgKyAnPC9hPicpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENvbXBhcmUgdHdvIG5hbWVzXHJcbiAgICogQHBhcmFtIGEgICA6IG5hbWUgYVxyXG4gICAqIEBwYXJhbSBiICAgOiBuYW1lIGJcclxuICAgKiBAcmV0dXJucyAgIDogdHJ1ZSBpZiBhIGVxdWFscyBiXHJcbiAgICovXHJcbiAgc3RhdGljIGNvbXBhcmVOYW1lcyhhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGEpIGEgPSBhLnRyaW0oKTtcclxuICAgIGlmIChiKSBiID0gYi50cmltKCk7XHJcbiAgICBpZiAoYSAmJiBiICYmIGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuY29tcGFyZVN0cmluZyhhLCBiKSA9PT0gMCkgcmV0dXJuIHRydWU7XHJcbiAgICBjb25zdCBwMSA9IGEuc3BsaXQoXCIgXCIpO1xyXG4gICAgY29uc3QgcDIgPSBiLnNwbGl0KFwiIFwiKTtcclxuICAgIGlmIChwMS5sZW5ndGggIT09IHAyLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgbGV0IG1hdGNoZXMgPSBwMS5sZW5ndGg7XHJcbiAgICBmb3IgKGNvbnN0IHMxIG9mIHAxKSB7XHJcbiAgICAgIGZvciAoY29uc3QgczIgb2YgcDIpIHtcclxuICAgICAgICBpZiAodGhpcy5jb21wYXJlU3RyaW5nKHMxLCBzMikgPT09IDApIHtcclxuICAgICAgICAgIG1hdGNoZXMtLTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtYXRjaGVzID09PSAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2lwaGVyIGEgdGV4dFxyXG4gICAqIEBwYXJhbSB0ZXh0ICAgIDogdGhlIHRleHRcclxuICAgKiBAcGFyYW0ga2V5ICAgICA6IHRoZSBrZXlcclxuICAgKiBAcGFyYW0gcmV2ZXJzZSA6IHRydWUgdG8gZGVjb2RlLCBmYWxzZSB0byBlbmNvZGVcclxuICAgKiBAcmV0dXJucyAgICAgICA6dGhlIGNpcGhlcmVkIHRleHRcclxuICAgKi9cclxuICBzdGF0aWMgY2lwaGVyKHRleHQ6IHN0cmluZywga2V5OiBzdHJpbmcsIHJldmVyc2U6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgICAvLyBTdXJyb2dhdGUgcGFpciBsaW1pdFxyXG4gICAgdmFyIGJvdW5kID0gMHgxMDAwMDtcclxuXHJcbiAgICAvLyBDcmVhdGUgc3RyaW5nIGZyb20gY2hhcmFjdGVyIGNvZGVzXHJcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcclxuICAgICAgbnVsbCxcclxuICAgICAgLy8gVHVybiBzdHJpbmcgdG8gY2hhcmFjdGVyIGNvZGVzXHJcbiAgICAgIHRleHQuc3BsaXQoXCJcIikubWFwKGZ1bmN0aW9uICh2OiBhbnksIGk6IG51bWJlcikge1xyXG4gICAgICAgIC8vIEdldCByb3RhdGlvbiBmcm9tIGtleVxyXG4gICAgICAgIHZhciByb3RhdGlvbiA9IGtleS5jaGFyQ29kZUF0KGkgJSBrZXkubGVuZ3RoKTtcclxuXHJcbiAgICAgICAgLy8gQXJlIHdlIGRlY3J5cHRpbmc/XHJcbiAgICAgICAgaWYgKHJldmVyc2UpIHJvdGF0aW9uID0gLXJvdGF0aW9uO1xyXG5cclxuICAgICAgICAvLyBSZXR1cm4gY3VycmVudCBjaGFyYWN0ZXIgY29kZSArIHJvdGF0aW9uXHJcbiAgICAgICAgcmV0dXJuICh2LmNoYXJDb2RlQXQoKSArIHJvdGF0aW9uICsgYm91bmQpICUgYm91bmQ7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvbmUgYW4gb2JqZWN0IHVzaW5nIEpTT05cclxuICAgKiBAcGFyYW0gb2JqIDogdGhlIG9ibGVjdCB0byBjbG9uZVxyXG4gICAqIEByZXR1cm5zICAgOiBhIG5ldyBvYmplY3RcclxuICAgKi9cclxuICBzdGF0aWMgY2xvbmUob2JqOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKCFvYmopIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDbG9uZSBhbiBvYmplY3QgdXNpbmcgZGVlcCBjbG9uaW5nXHJcbiAgICogQHBhcmFtIG9iaiAgIDogdGhlIG9ibGVjdCB0byBjbG9uZVxyXG4gICAqIEByZXR1cm5zICAgICA6IGEgbmV3IG9iamVjdFxyXG4gICAqL1xyXG4gIHN0YXRpYyBkZWVwQ2xvbmU8VD4ob2JqOiBhbnksIGRlc3Q6IFQgPSBudWxsKTogVCB7XHJcbiAgICBjb25zdCBjbG9uZU9iaiA9IGRlc3QgPyBkZXN0IDogKG9iai5jb25zdHJ1Y3RvcigpIGFzIGFueSk7XHJcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gT2JqZWN0LmtleXMob2JqKTtcclxuICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZXMpIHtcclxuICAgICAgY29uc3QgcHJvcGVydHkgPSBvYmpbYXR0cmlidXRlXTtcclxuICAgICAgaWYgKHR5cGVvZiBwcm9wZXJ0eSA9PT0gXCJvYmplY3RcIiAmJiBwcm9wZXJ0eSAhPSBudWxsKSB7XHJcbiAgICAgICAgY2xvbmVPYmpbYXR0cmlidXRlXSA9IHRoaXMuZGVlcENsb25lKHByb3BlcnR5KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjbG9uZU9ialthdHRyaWJ1dGVdID0gcHJvcGVydHk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBjbG9uZU9iajtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBDaGVjayBpZiBhIHN0cmluZyBpcyBhIHZhbGlkIFVVSURcclxuICAgKiBAcGFyYW0gdmFsdWUgICA6IHRoZSB2YWx1ZSB0byBwYXJzZVxyXG4gICAqIEByZXR1cm5zICAgICAgIDogdHJ1ZSBpZiBpcyBhIHZhbGlkIFVVSURcclxuICAgKi9cclxuICBzdGF0aWMgcGFyc2VVVUlEKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL14oe3woKT9bMC05YS1mQS1GXXs4fS0oWzAtOWEtZkEtRl17NH0tKXszfVswLTlhLWZBLUZdezEyfSh9fCkpPyQvO1xyXG4gICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgYW5kIGVuc3VyZSB0aGF0IFVVSUQgaXMgbm90IGVtcHR5XHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgdmFsdWUgdG8gcGFyc2VcclxuICAgKiBAcmV0dXJucyAgICAgICA6IHRydWUgaWYgdmFsaWQgYW5kIG5vdCBlbXB0eVxyXG4gICAqL1xyXG4gIHN0YXRpYyBwYXJzZVVVSUROb3RFbXB0eSh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCByZWdleCA9IC9eKHt8KCk/MHs4fS0oMHs0fS0pezN9MHsxMn0ofXwpKT8kLztcclxuICAgIHJldHVybiB0aGlzLnBhcnNlVVVJRCh2YWx1ZSkgJiYgIXJlZ2V4LnRlc3QodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGEgbmV3IFVVSURcclxuICAgKiBAcmV0dXJucyA6IHRoZSBzdHJpbmcgVVVJRFxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZW5lcmF0ZVVVSUQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL1t4eV0vZztcclxuICAgIHJldHVybiBcInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UocmVnZXgsIGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgIHZhciByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwLFxyXG4gICAgICAgIHYgPSBjID09PSBcInhcIiA/IHIgOiAociAmIDB4MykgfCAweDg7XHJcbiAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGFyc2UgYSB0ZXh0IGFuZCByZXR1cm4gdHJ1ZSBpZiBpcyBhIHZhbGlkIGVtYWlsIG9yIG51bGxcclxuICAgKiBAcGFyYW0gdmFsdWUgOiBlbWFpbFxyXG4gICAqIEByZXR1cm5zICAgICA6IHRydWUgaWYgdGhlIGVtYWlsIGlzIHZhbGlkIG9yIGVtcHR5XHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlRW1haWwodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIHRydWU7XHJcbiAgICBjb25zdCByZWdleCA9IC8oPzpbYS16MC05KyEjJCUmJyorXFwvPT9eX2B7fH1+LV0rKD86XFwuW2EtejAtOSEjJCUmJyorXFwvPT9eX2B7fH1+LV0rKSp8XCIoPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMVxceDIzLVxceDViXFx4NWQtXFx4N2ZdfFxcXFxbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGUtXFx4N2ZdKSpcIilAKD86KD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP3xcXFsoPzooPzoyNVswLTVdfDJbMC00XVswLTldfFswMV0/WzAtOV1bMC05XT8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldP3xbYS16MC05LV0qW2EtejAtOV06KD86W1xceDAxLVxceDA4XFx4MGJcXHgwY1xceDBlLVxceDFmXFx4MjEtXFx4NWFcXHg1My1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKylcXF0pL2dpXHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBhIHRleHQgYW5kIHJldHVybiB0cnVlIGlmIGlzIGEgdmFsaWQgdXJsIG9yIG51bGxcclxuICAgKiBAcGFyYW0gdmFsdWUgOiB0aGUgdXJsIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgIDogdHJ1ZSBpZiB0aGUgdXJsIGlzIHZhbGlkIG9yIGVtcHR5XHJcbiAgICovXHJcbiAgc3RhdGljIHBhcnNlVXJsKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFxyXG4gICAgICBcIihodHRwcz86Ly8pPyhbXFxcXGRhLXouLV0rKVxcXFwuKFthLXouXXsyLDZ9KVsvXFxcXHcgLi1dKi8/XCJcclxuICAgICk7XHJcbiAgICByZXR1cm4gcmVnZXgudGVzdCh2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZGF0ZSBwYXJ0cyBmcm9tIGEgc3RyaW5nIHZhbHVlXHJcbiAgICogQHBhcmFtIHZhbHVlICAgOiB0aGUgc3RyaW5nIHRvIHBhcnNlXHJcbiAgICogQHJldHVybnMgICAgICAgOiBhbiBhcnJheSBvZiBudW1iZXJzIHdpdGggeWVhciwgbW9udGgsIGRheVxyXG4gICAqL1xyXG4gIHN0YXRpYyBnZXREYXRlUGFydHModmFsdWU6IHN0cmluZyk6IG51bWJlcltdIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgbGV0IHBhcnRzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgaWYgKHZhbHVlLmluZGV4T2YoXCItXCIpICE9PSAtMSkge1xyXG4gICAgICBjb25zdCBwID0gdmFsdWUuc3BsaXQoXCItXCIpO1xyXG4gICAgICBpZiAocC5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xyXG4gICAgICBwYXJ0cyA9IFtwYXJzZUludChwWzBdKSwgcGFyc2VJbnQocFsxXSkgLSAxLCBwYXJzZUludChwWzJdKV07XHJcbiAgICB9IGVsc2UgaWYgKHZhbHVlLmluZGV4T2YoXCIvXCIpICE9PSAtMSkge1xyXG4gICAgICBjb25zdCBwID0gdmFsdWUuc3BsaXQoXCIvXCIpO1xyXG4gICAgICBpZiAocC5sZW5ndGggIT09IDMpIHJldHVybiBudWxsO1xyXG4gICAgICBwYXJ0cyA9IFtwYXJzZUludChwWzJdKSwgcGFyc2VJbnQocFsxXSkgLSAxLCBwYXJzZUludChwWzBdKV07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcGFydHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQYXJzZSBhIGRhdGVcclxuICAgKiBAcGFyYW0gdmFsdWUgICA6IHRoZSB2YWx1ZSB0byBjaGVja1xyXG4gICAqIEBwYXJhbSBsb2NhbGUgIDogdGhlIGxvY2FsZSB0byB1c2VcclxuICAgKiBAcmV0dXJucyAgICAgICA6IGEgdmFsaWQgRGF0ZSBvYmplY3Qgb3IgbnVsbFxyXG4gICAqL1xyXG4gIHN0YXRpYyBwYXJzZURhdGUodmFsdWU6IHN0cmluZyB8IERhdGUsIGxvY2FsZTogYW55ID0gaXQpOiBEYXRlIHtcclxuICAgIC8vIE5vIHZhbHVlIGF0IGFsbFxyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBBIERhdGUgdmFsdWVcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdmFsdWUuZ2V0VGltZSgpKSByZXR1cm4gdmFsdWU7XHJcbiAgICAvLyBQYXJzZSBrbm93biBmb3JtYXRzIHVzaW5nIGRhdGUtZm5zXHJcbiAgICBsZXQgZCA9IHBhcnNlSVNPKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICBpZiAoZCAmJiBkLmdldFRpbWUoKSAmJiBkLmdldEZ1bGxZZWFyKCkgPiAxNzUwKSByZXR1cm4gZDtcclxuICAgIGQgPSBwYXJzZSh2YWx1ZSBhcyBzdHJpbmcsICdkZC9NTS95eXl5JywgbmV3IERhdGUoKSwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgIGlmIChkICYmIGQuZ2V0VGltZSgpICYmIGQuZ2V0RnVsbFllYXIoKSA+IDE3NTApIHJldHVybiBkO1xyXG4gICAgZCA9IHBhcnNlKHZhbHVlIGFzIHN0cmluZywgJ3l5eXktTU0tZGQnLCBuZXcgRGF0ZSgpLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgaWYgKGQgJiYgZC5nZXRUaW1lKCkgJiYgZC5nZXRGdWxsWWVhcigpID4gMTc1MCkgcmV0dXJuIGQ7XHJcbiAgICAvLyBQYXJzZSB2YWx1ZXMgbWFudWFsbHlcclxuICAgIGxldCBwYXJ0cyA9IHRoaXMuZ2V0RGF0ZVBhcnRzKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICBpZiAocGFydHNbMF0gPCAxMDApIHBhcnRzWzBdICs9IDIwMDA7XHJcbiAgICBpZiAoaXNOYU4ocGFydHNbMF0pIHx8IHBhcnRzWzBdIDwgMCB8fCBwYXJ0c1swXSA8IDE3NTApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGlzTmFOKHBhcnRzWzFdKSB8fCBwYXJ0c1sxXSA8IDApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKGlzTmFOKHBhcnRzWzJdKSB8fCBwYXJ0c1syXSA8IDApIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHBhcnRzWzFdID4gMTEpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHBhcnRzWzFdID09PSAxICYmIHBhcnRzWzJdID4gMjkpIHJldHVybiBudWxsO1xyXG4gICAgZWxzZSBpZiAocGFydHNbMV0gIT09IDEgJiYgcGFydHNbMl0gPiAzMSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gbmV3IERhdGUocGFydHNbMF0sIHBhcnRzWzFdLCBwYXJ0c1syXSwgMik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGb3JtYXQgYSBkYXRlXHJcbiAgICogQHBhcmFtIHZhbHVlICAgICA6IHRoZSBkYXRlIG9yIHN0cmluZyB0byBmb3JtYXRcclxuICAgKiBAcGFyYW0gZm10ICAgICAgIDogdGhlIERhdGVGb3JtYXQgdG8gdXNlIG9yIHRoZSBzdHJpbmcgcGF0dGVyblxyXG4gICAqIEBwYXJhbSBsb2NhbGUgICAgOiB0aGUgbG9jYWxlIHRvIHVzZSAoZGVmYXVsdCBpcyBJVClcclxuICAgKiBAcmV0dXJucyAgICAgICAgIDogdGhlIGZvcm1hdHRlZCBzdHJpbmdcclxuICAgKi9cclxuICBzdGF0aWMgZm9ybWF0RGF0ZShcclxuICAgIHZhbHVlOiBEYXRlIHwgc3RyaW5nLFxyXG4gICAgZm10OiBEYXRlRm9ybWF0IHwgc3RyaW5nID0gRGF0ZUZvcm1hdC5TaG9ydCxcclxuICAgIGxvY2FsZTogYW55ID0gaXQpOiBzdHJpbmcge1xyXG4gICAgLy8gTm8gdmFsdWUgYXQgYWxsXHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcclxuICAgIC8vIEEgc3RyaW5nXHJcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIFN0cmluZylcclxuICAgICAgdmFsdWUgPSB0aGlzLnBhcnNlRGF0ZSh2YWx1ZSBhcyBzdHJpbmcpO1xyXG4gICAgLy8gTm90IGEgZGF0ZSBcclxuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSAmJiB2YWx1ZS5nZXRUaW1lKCkpKVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIC8vIEZvcm1hdFxyXG4gICAgc3dpdGNoIChmbXQpIHtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LlNob3J0OiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcImRkL01NL3l5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0Lkxvbmc6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiZCBNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LkxvbmdXaXRoU2hvcnRNb250aDogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJkIE1NTSB5eXl5XCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nV2l0aFdlZWtEYXk6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiRUVFRSwgZCBNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LkxvbmdXaXRoU2hvcnRXZWVrRGF5OiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcIkVFRSwgZCBNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0Lk1vbnRoQW5kWWVhcjogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJNTU0geXl5eVwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuTG9uZ01vbnRoQW5kWWVhcjogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJNTU1NIHl5eXlcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LldlZWtEYXk6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiRUVFLCBkXCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5Mb25nV2Vla0RheTogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJFRUVFLCBkXCIsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICAgIGNhc2UgRGF0ZUZvcm1hdC5EYXlBbmRNb250aDogcmV0dXJuIGZvcm1hdCh2YWx1ZSwgXCJkIE1NTU1cIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgY2FzZSBEYXRlRm9ybWF0LlNob3J0VVM6IHJldHVybiBmb3JtYXQodmFsdWUsIFwiTU0vZGQveXl5eVwiLCB7IGxvY2FsZTogbG9jYWxlIH0pO1xyXG4gICAgICBjYXNlIERhdGVGb3JtYXQuU2hvcnRJU084NjAxOiByZXR1cm4gZm9ybWF0KHZhbHVlLCBcInl5eXktTU0tZGRcIiwgeyBsb2NhbGU6IGxvY2FsZSB9KTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCBmbXQsIHsgbG9jYWxlOiBsb2NhbGUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gYW4gaXRhbGlhbiBsb2NhbCBkYXRlXHJcbiAgICogQHBhcmFtIHZhbHVlICA6IHRoZSBkYXRlXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIG5ldyBkYXRlXHJcbiAgICovXHJcbiAgc3RhdGljIHRvTG9jYWxEYXRlKHZhbHVlOiBEYXRlIHwgc3RyaW5nKTogRGF0ZSB7XHJcbiAgICAvLyBObyB2YWx1ZSBhdCBhbGxcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgLy8gQSBzdHJpbmdcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nKVxyXG4gICAgICB2YWx1ZSA9IHRoaXMucGFyc2VEYXRlKHZhbHVlIGFzIHN0cmluZyk7XHJcbiAgICAvLyBOb3QgYSBkYXRlXHJcbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgdmFsdWUuZ2V0VGltZSgpKSkgcmV0dXJuIG51bGw7XHJcbiAgICAvLyBVcGRhdGUgZGF0ZVxyXG4gICAgcmV0dXJuIHNldEhvdXJzKHZhbHVlLCAyKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgYSBEYXRlSW50ZXJ2YWwgb2JqZWN0IGFjY29yZGluZyB0byBhIHN0cmluZ1xyXG4gICAqIEBwYXJhbSB2YWx1ZSAgICAgICA6IHN0cmluZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSBpbnRlcnZhbCAgICA6IERhdGVJbnRlcnZhbCB2YWx1ZSB0byB1cGRhdGVcclxuICAgKiBAcGFyYW0gZW5kICAgICAgICAgOiB0cnVlIGlmIG11c3QgYmUgdXBkYXRlZCB0aGUgZmlyc3Qgb3IgdGhlIGVuZCB2YWx1ZSBcclxuICAgKiBAcGFyYW0gY29weSAgICAgICAgOiBjb3B5IHRoZSBzYW1lIHZhbHVlICh3b3JrcyBvbmx5IGlmIG5vdCBlbmQgZWxlbWVudClcclxuICAgKi9cclxuICBzdGF0aWMgY2hhbmdlRGF0ZUludGVydmFsKHZhbHVlOiBzdHJpbmcsIGludGVydmFsOiBEYXRlSW50ZXJ2YWwsIGVuZDogYm9vbGVhbiA9IGZhbHNlLCBjb3B5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBsZXQgeWVhciA9IC0xO1xyXG4gICAgICBpZiAodmFsdWUubGVuZ3RoID09PSA0ICYmICh5ZWFyID0gcGFyc2VJbnQodmFsdWUpKSA+IDE3NTApIHtcclxuICAgICAgICBpZiAoIWVuZCkge1xyXG4gICAgICAgICAgaW50ZXJ2YWwuZnJvbSA9IGZyb21ab25lZFRpbWUgKG5ldyBEYXRlKHllYXIsIDAsIDEpLCAnVVRDJyk7XHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IGZyb21ab25lZFRpbWUgKG5ldyBEYXRlKHllYXIsIDExLCAzMSksICdVVEMnKTtcclxuICAgICAgICB9IGVsc2VcclxuICAgICAgICAgIGludGVydmFsLnRvID0gbmV3IERhdGUoeWVhciwgMTEsIDMxKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgcGFydHMgPSB0aGlzLmdldERhdGVQYXJ0cyh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKCFwYXJ0cyB8fCBpc05hTihwYXJ0c1swXSkgfHwgcGFydHNbMF0gPCAwIHx8IHBhcnRzWzBdIDwgMTc1MCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGQgPSBmcm9tWm9uZWRUaW1lIChuZXcgRGF0ZShwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdKSwgJ1VUQycpO1xyXG4gICAgICAgIGlmIChlbmQpXHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IGQ7XHJcbiAgICAgICAgZWxzZSBpZiAoY29weSkge1xyXG4gICAgICAgICAgaW50ZXJ2YWwuZnJvbSA9IGQ7XHJcbiAgICAgICAgICBpbnRlcnZhbC50byA9IGQ7XHJcbiAgICAgICAgfSBlbHNlXHJcbiAgICAgICAgICBpbnRlcnZhbC5mcm9tID0gZDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW5jb2RlIHVybFxyXG4gICAqIEBwYXJhbSB2YWx1ZSA6IHRoZSB2YWx1ZSB0byBlbmNvZGVcclxuICAgKiBAcmV0dXJucyAgICAgOiB0aGUgdXJsIGVuY29kZWQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHVybEVuY29kZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVjb2RlIHVybFxyXG4gICAqIEBwYXJhbSB2YWx1ZSA6IHRoZSB1cmwgdG8gZGVjb2RlXHJcbiAgICogQHJldHVybnMgICAgIDogdGhlIGRlY29kZSB1cmwgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIHVybERlY29kZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlZ2V4ID0gL1xcKy9nO1xyXG4gICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCgodmFsdWUgKyBcIlwiKS5yZXBsYWNlKHJlZ2V4LCBcIiUyMFwiKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYSBxdWVyeXN0cmluZyBwYXJhbWV0ZXIgdmFsdWVcclxuICAgKiBAcGFyYW0gbmFtZSAgOiB0aGUgcGFyYW1ldGVyIG5hbWVcclxuICAgKiBAcmV0dXJucyAgICAgOiB0aGUgc3RyaW5nIHZhbHVlXHJcbiAgICovXHJcbiAgc3RhdGljIGdldFF1ZXJ5U3RyaW5nVmFsdWVCeU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdGhpcy5pc0Jyb3dzZXIoKSkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcclxuICAgIGlmICh1cmwuaW5jbHVkZXMoXCI/XCIpKSB7XHJcbiAgICAgIGNvbnN0IGh0dHBQYXJhbXMgPSBuZXcgSHR0cFBhcmFtcyh7IGZyb21TdHJpbmc6IHVybC5zcGxpdChcIj9cIilbMV0gfSk7XHJcbiAgICAgIGNvbnN0IHYgPSBkZWNvZGVVUklDb21wb25lbnQoaHR0cFBhcmFtcy5nZXQobmFtZSkpO1xyXG4gICAgICBpZiAodiAhPT0gXCJudWxsXCIpIHJldHVybiB2O1xyXG4gICAgICBlbHNlIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZW5lcmF0ZSBhIHBhc3N3b3JkXHJcbiAgICogQHJldHVybnMgOiB0aGUgcGFzc3dvcmQgc3RyaW5nXHJcbiAgICovXHJcbiAgc3RhdGljIGdlbmVyYXRlUGFzc3dvcmQoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJhbmRvbSA9IFwiJFwiICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoLTcpO1xyXG4gICAgbGV0IHBhc3N3b3JkID0gXCJcIjtcclxuICAgIGxldCBoYXNVcHBlckNhc2UgPSBmYWxzZTtcclxuICAgIGZvciAoY29uc3Qgcm5kIG9mIHJhbmRvbSkge1xyXG4gICAgICBpZiAoIWhhc1VwcGVyQ2FzZSAmJiBcImFiY2RlZmdoamlsbW5vcHFyc3R1dnl3eHpcIi5pbmNsdWRlcyhybmQpKSB7XHJcbiAgICAgICAgcGFzc3dvcmQgKz0gcm5kLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgaGFzVXBwZXJDYXNlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwYXNzd29yZCArPSBybmQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaGFzVXBwZXJDYXNlKVxyXG4gICAgICBwYXNzd29yZCA9IHBhc3N3b3JkLnN1YnN0cmluZygwLCA3KSArIFwiTVwiO1xyXG4gICAgcmV0dXJuIHBhc3N3b3JkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgY3VycmVudCBicm93c2VyIHN1cHBvcnRzIHRvdWNoXHJcbiAgICogQHJldHVybnMgOiB0cnVlIGlmIHRoZSBkaXNwbGF5IGlzIHRvdWNoYWJsZVxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc1RvdWNoYWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuaXNCcm93c2VyKCkgJiYgKFxyXG4gICAgICAgIFwib250b3VjaHN0YXJ0XCIgaW4gd2luZG93IHx8XHJcbiAgICAgICAgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGNoZWNrIHdpbGwgcHJldmVudCAnd2luZG93JyBsb2dpYyB0byBiZSBleGVjdXRlZFxyXG4gICAqIHdoaWxlIGV4ZWN1dGluZyB0aGUgc2VydmVyIHJlbmRlcmluZ1xyXG4gICAqIEByZXR1cm5zIDogdHJ1ZSBpZiB1c2luZyB0aGUgYnJvd3NlclxyXG4gICAqL1xyXG4gIHN0YXRpYyBpc0Jyb3dzZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mICh3aW5kb3cpICE9PSAndW5kZWZpbmVkJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBDb252ZXJ0IGZvbGRlcnMgaW4gYSB0cmVlIG9mIE5vZGUgb2JqZWN0LlxyXG4gKiBAcGFyYW0gZm9sZGVycyA6IHRoZSBzdWJmb2xkZXJzIGdyb3VwIG9yIG51bGwgdG8gcm9vdFxyXG4gKiBAcmV0dXJucyAgICAgICA6IGEgbm9kZSBsaXN0XHJcbiAqL1xyXG4gIHN0YXRpYyB0b05vZGVzKGZvbGRlcnM6IElOb2RlW10pOiBJTm9kZVtdIHtcclxuICAgIHJldHVybiB0aGlzLl90b05vZGVzKGZvbGRlcnMsIHVuZGVmaW5lZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb252ZXJ0IGZvbGRlcnMgaW4gYSB0cmVlIG9mIE5vZGUgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSBmb2xkZXJzIDogdGhlIGNoaWxkcmVuIGdyb3VwIG9yIG51bGwgdG8gcm9vdFxyXG4gICAqIEBwYXJhbSBwYXJlbnQgIDogdGhlIHBhcmVudCBub2RlXHJcbiAgICogQHJldHVybnMgICAgICAgOiBhIG5vZGUgbGlzdCBcclxuICAgKi9cclxuICBwcml2YXRlIHN0YXRpYyBfdG9Ob2Rlcyhmb2xkZXJzOiBJTm9kZVtdLCBwYXJlbnQ6IElOb2RlIHwgdW5kZWZpbmVkKTogSU5vZGVbXSB7XHJcbiAgICBjb25zdCBub2RlczogSU5vZGVbXSA9IFtdO1xyXG4gICAgZm9sZGVycy5mb3JFYWNoKChuOiBJTm9kZSkgPT4ge1xyXG4gICAgICBjb25zdCBub2RlOiBJTm9kZSA9IHtcclxuICAgICAgICBpZDogbi5pZCxcclxuICAgICAgICBuYW1lOiBuLm5hbWUsXHJcbiAgICAgICAgY291bnQ6IG4uY291bnQsXHJcbiAgICAgICAgcGFyZW50OiBwYXJlbnQsXHJcbiAgICAgICAgY2hpbGRyZW46IHVuZGVmaW5lZCxcclxuICAgICAgICBiYWc6IG4sXHJcbiAgICAgIH07XHJcbiAgICAgIG5vZGUuY2hpbGRyZW4gPVxyXG4gICAgICAgIG4uY2hpbGRyZW4gJiYgbi5jaGlsZHJlbi5sZW5ndGggPiAwXHJcbiAgICAgICAgICA/IHRoaXMuX3RvTm9kZXMobi5jaGlsZHJlbiwgbm9kZSlcclxuICAgICAgICAgIDogW107XHJcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBub2RlcztcclxuICB9XHJcbn1cclxuIl19
@@ -1435,6 +1435,7 @@ class ClipperSearchParams {
1435
1435
  this.sector = null;
1436
1436
  this.sectors = null;
1437
1437
  this.topic = null;
1438
+ this.topics = null;
1438
1439
  this.taxonomy = null;
1439
1440
  this.taxonomies = null;
1440
1441
  this.taxonomyPath = null;
@@ -1732,7 +1733,9 @@ class ClipperSearchUtils {
1732
1733
  params.author = null;
1733
1734
  params.authors = null;
1734
1735
  params.topic = null;
1736
+ params.topics = null;
1735
1737
  params.taxonomy = null;
1738
+ params.taxonomies = null;
1736
1739
  params.taxonomyPath = null;
1737
1740
  params.taxonomyNode = null;
1738
1741
  params.number = null;
@@ -1748,6 +1751,7 @@ class ClipperSearchUtils {
1748
1751
  params.text = null;
1749
1752
  params.titleOnly = false;
1750
1753
  params.type = null;
1754
+ params.types = null;
1751
1755
  params.showUnreadDocumentsOnly = false;
1752
1756
  params.showCommentedDocumentsOnly = false;
1753
1757
  params.channels = [...ClipperChannels];