@smarterplan/ngx-smarterplan-core 1.4.13 → 1.4.15

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.
@@ -49,6 +49,40 @@ export class CommentService {
49
49
  async createComment(comment) {
50
50
  return this.API.__proto__.CreateComment(comment);
51
51
  }
52
+ /**
53
+ * Returns EVERY comment attached to a feature, following `nextToken` until the
54
+ * connection is exhausted.
55
+ *
56
+ * The `comments` connection nested inside FeaturesBySpace/GetFeature is capped by
57
+ * the AppSync resolver (`$util.defaultIfNull($context.args.limit, 100)`) and exposes
58
+ * a `nextToken` that nobody follows, so a media-rich POI silently loses every
59
+ * attachment past the first page. Anything that must see the complete media set of
60
+ * a feature (duplication, export, audit) has to use this method rather than
61
+ * `feature.comments.items`.
62
+ */
63
+ async getAllCommentsForFeature(featureID) {
64
+ return this.getAllCommentsPaginated((limit, nextToken) => this.API.__proto__.CommentsByFeature(featureID, undefined, undefined, limit, nextToken), featureID);
65
+ }
66
+ /** Same as getAllCommentsForFeature(), for the attachments of a ticket. */
67
+ async getAllCommentsForTicket(ticketID) {
68
+ return this.getAllCommentsPaginated((limit, nextToken) => this.API.__proto__.CommentsByTicket(ticketID, undefined, undefined, limit, nextToken), ticketID);
69
+ }
70
+ /** Drains a paginated comment query until its nextToken is exhausted. */
71
+ async getAllCommentsPaginated(fetchPage, ownerID) {
72
+ if (!ownerID) {
73
+ return [];
74
+ }
75
+ const all = [];
76
+ let nextToken = null;
77
+ do {
78
+ const page = await fetchPage(1000, nextToken);
79
+ if (page?.items?.length > 0) {
80
+ all.push(...page.items.filter((item) => !!item));
81
+ }
82
+ nextToken = page?.nextToken ?? null;
83
+ } while (nextToken);
84
+ return all;
85
+ }
52
86
  async updateComment(input) {
53
87
  return this.API.__proto__.UpdateComment(input);
54
88
  }
@@ -100,4 +134,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
100
134
  type: Inject,
101
135
  args: ['currentAPIService']
102
136
  }] }, { type: i1.PoiService }] });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvY29tbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBMEMsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTS9DLE1BQU0sT0FBTyxjQUFjO0lBSVg7SUFGWixHQUFHLENBQU0sQ0FBQyxNQUFNO0lBQ2hCLFlBQXlDLFdBQWdCLEVBQzdDLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7SUFDM0IsQ0FBQztJQUVELHVCQUF1QixDQUFDLFFBQWdCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxPQUFlO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDbkQsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQy9CLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFNBQWlCO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FB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UUFDSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN2QyxJQUNJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLEtBQUs7Z0JBQ2hDLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUN4QixDQUFDO2dCQUNDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQztvQkFDckIsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNaLFlBQVksRUFBRSxLQUFLO2lCQUN0QixDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNGLE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7d0dBbkhRLGNBQWMsa0JBR0gsbUJBQW1COzRHQUg5QixjQUFjLGNBRlgsTUFBTTs7NEZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQUlnQixNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1lYXN1cmVtZW50LCBGZWF0dXJlLCBDb21tZW50LCBJVXBkYXRlLCBDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IHVwbG9hZEZpbGVUb1MzIH0gZnJvbSBcIi4uL3MzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gXCIuL3BvaS5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbW1lbnRTZXJ2aWNlIHtcclxuXHJcbiAgICBBUEk6IGFueTsgLy8gQVdTXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnksXHJcbiAgICAgICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb21tZW50c0Zyb21UaWNrZXRJRCh0aWNrZXRJRDogc3RyaW5nKTogUHJvbWlzZTxDb21tZW50W10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNvbW1lbnRzQnlUaWNrZXQodGlja2V0SUQpLnRoZW4oKHJlcykgPT4gcmVzLml0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRDb21tZW50c0J5U3BhY2VJRChzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPENvbW1lbnRbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ29tbWVudHNCeVNwYWNlKHNwYWNlSUQpLnRoZW4oXHJcbiAgICAgICAgICAgIChjb21tZW50cykgPT4gY29tbWVudHMuaXRlbXMsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZWFkQ29tbWVudEFzTWVhc3VyZW1lbnQoY29tbWVudElEOiBzdHJpbmcpOiBQcm9taXNlPE1lYXN1cmVtZW50PiB7XHJcbiAgICAgICAgY29uc3QgY29tbWVudCA9IGF3YWl0IHRoaXMuZ2V0Q29tbWVudChjb21tZW50SUQpO1xyXG4gICAgICAgIGlmIChjb21tZW50LnRpY2tldElEICYmICFjb21tZW50LnRpY2tldCkge1xyXG4gICAgICAgICAgICBjb21tZW50LnRpY2tldCA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5HZXRUaWNrZXQoY29tbWVudC50aWNrZXRJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB2YWx1ZXMgPSBjb21tZW50LmRpbWVuc2lvbnM7XHJcbiAgICAgICAgbGV0IG51bWJlclBvaW50cyA9IDBcclxuICAgICAgICBpZiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgIG51bWJlclBvaW50cyA9IHZhbHVlcy5sZW5ndGggKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZ2V0UG9pQnlFbGVtZW50SWQoY29tbWVudElEKTtcclxuICAgICAgICBjb25zdCBtZWFzdXJlID0ge1xyXG4gICAgICAgICAgICBpZDogY29tbWVudC5pZCxcclxuICAgICAgICAgICAgY29tbWVudCxcclxuICAgICAgICAgICAgcG9pLFxyXG4gICAgICAgICAgICBudW1iZXJQb2ludHMsXHJcbiAgICAgICAgICAgIHZhbHVlcyxcclxuICAgICAgICB9IGFzIE1lYXN1cmVtZW50O1xyXG4gICAgICAgIHJldHVybiBtZWFzdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ1JVRFxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0Q29tbWVudChjb21tZW50SUQ6IHN0cmluZyk6IFByb21pc2U8Q29tbWVudD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uR2V0Q29tbWVudChjb21tZW50SUQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZUNvbW1lbnQoY29tbWVudElEOiBzdHJpbmcpOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZUNvbW1lbnQoeyBpZDogY29tbWVudElEIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZUNvbW1lbnQoY29tbWVudDogQ29tbWVudCk6IFByb21pc2U8Q29tbWVudD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlQ29tbWVudChjb21tZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVDb21tZW50KGlucHV0OiBhbnkpOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZUNvbW1lbnQoaW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwbG9hZEZpbGVGb3JDb21tZW50KGZpbGU6IEZpbGUsIGlkOiBzdHJpbmcgPSBudWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzMoXCJjb21tZW50cy9cIiwgZmlsZSwgaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDcmVhdGUgYSBuZXcgY29tbWVudCB3aXRoIGFuIGV4aXN0aW5nIEFubmV4ZSAqL1xyXG4gICAgYXN5bmMgY3JlYXRlQ29tbWVudFdpdGhGaWxlVVJMKFxyXG4gICAgICAgIGNvbW1lbnQ6IENvbW1lbnQsXHJcbiAgICAgICAgdXJsOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICBjb25zdCBuZXdDb21tZW50ID0gY29tbWVudDtcclxuICAgICAgICBuZXdDb21tZW50LmFubmV4ZSA9IHVybDtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDb21tZW50KG5ld0NvbW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZUNvbW1lbnRXaXRoRmlsZShcclxuICAgICAgICBjb21tZW50OiBDb21tZW50LFxyXG4gICAgICAgIGZpbGU6IEZpbGUsXHJcbiAgICApOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICBsZXQgY3JlYXRlZENvbW1lbnQgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbW1lbnQoY29tbWVudCk7XHJcbiAgICAgICAgaWYgKGZpbGUpIHtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlRm9yQ29tbWVudChcclxuICAgICAgICAgICAgICAgIGZpbGUsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkQ29tbWVudC5pZCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY3JlYXRlZENvbW1lbnQgPSBhd2FpdCB0aGlzLnVwZGF0ZUNvbW1lbnQoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IGNyZWF0ZWRDb21tZW50LmlkLFxyXG4gICAgICAgICAgICAgICAgYW5uZXhlOiB1cmwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3JlYXRlZENvbW1lbnQ7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBhc3luYyBzZXRDb21tZW50QXNDb3ZlckZvckZlYXR1cmUoXHJcbiAgICAgICAgY29tbWVudElEOiBzdHJpbmcsXHJcbiAgICAgICAgZmVhdHVyZTogRmVhdHVyZSxcclxuICAgICk6IFByb21pc2U8Q29tbWVudD4ge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb21tZW50ID0gYXdhaXQgdGhpcy51cGRhdGVDb21tZW50KHtcclxuICAgICAgICAgICAgaWQ6IGNvbW1lbnRJRCxcclxuICAgICAgICAgICAgaXNDb3ZlckltYWdlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBmZWF0dXJlLmNvbW1lbnRzLml0ZW1zLm1hcChhc3luYyAoaW1hZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZS50eXBlID09PSBDb21tZW50VHlwZS5JTUFHRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlLmlkICE9PSBjb21tZW50SURcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tbWVudCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpbWFnZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDb3ZlckltYWdlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdXBkYXRlZENvbW1lbnQ7XHJcbiAgICB9XHJcbn1cclxuIl19
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvY29tbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBMEMsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTS9DLE1BQU0sT0FBTyxjQUFjO0lBSVg7SUFGWixHQUFHLENBQU0sQ0FBQyxNQUFNO0lBQ2hCLFlBQXlDLFdBQWdCLEVBQzdDLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7SUFDM0IsQ0FBQztJQUVELHVCQUF1QixDQUFDLFFBQWdCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxPQUFlO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDbkQsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQy9CLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFNBQWlCO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNqRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdEMsT0FBTyxDQUFDLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUNELElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDaEMsSUFBSSxZQUFZLEdBQUcsQ0FBQyxDQUFBO1FBQ3BCLElBQUksTUFBTSxFQUFFLENBQUM7WUFDVCxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDckMsQ0FBQztRQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRCxNQUFNLE9BQU8sR0FBRztZQUNaLEVBQUUsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUNkLE9BQU87WUFDUCxHQUFHO1lBQ0gsWUFBWTtZQUNaLE1BQU07U0FDTSxDQUFDO1FBQ2pCLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRDs7O09BR0c7SUFDSCxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQWlCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLFNBQWlCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBZ0I7UUFDaEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxLQUFLLENBQUMsd0JBQXdCLENBQUMsU0FBaUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsdUJBQXVCLENBQy9CLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQ2pCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsRUFDM0YsU0FBUyxDQUNaLENBQUM7SUFDTixDQUFDO0lBRUQsMkVBQTJFO0lBQzNFLEtBQUssQ0FBQyx1QkFBdUIsQ0FBQyxRQUFnQjtRQUMxQyxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FDL0IsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQyxFQUN6RixRQUFRLENBQ1gsQ0FBQztJQUNOLENBQUM7SUFFRCx5RUFBeUU7SUFDakUsS0FBSyxDQUFDLHVCQUF1QixDQUNqQyxTQUFvRSxFQUNwRSxPQUFlO1FBRWYsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ1gsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxHQUFHLEdBQWMsRUFBRSxDQUFDO1FBQzFCLElBQUksU0FBUyxHQUFrQixJQUFJLENBQUM7UUFFcEMsR0FBRyxDQUFDO1lBQ0EsTUFBTSxJQUFJLEdBQUcsTUFBTSxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzlDLElBQUksSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQW9CLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7WUFDRCxTQUFTLEdBQUcsSUFBSSxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUM7UUFDeEMsQ0FBQyxRQUFRLFNBQVMsRUFBRTtRQUVwQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEtBQVU7UUFDMUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFVLEVBQUUsS0FBYSxJQUFJO1FBQ3BELE9BQU8sY0FBYyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELG1EQUFtRDtJQUNuRCxLQUFLLENBQUMsd0JBQXdCLENBQzFCLE9BQWdCLEVBQ2hCLEdBQVc7UUFFWCxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUM7UUFDM0IsVUFBVSxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQ3ZCLE9BQWdCLEVBQ2hCLElBQVU7UUFFVixJQUFJLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkQsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNQLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUN2QyxJQUFJLEVBQ0osY0FBYyxDQUFDLEVBQUUsQ0FDcEIsQ0FBQztZQUNGLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQ3RDLEVBQUUsRUFBRSxjQUFjLENBQUMsRUFBRTtnQkFDckIsTUFBTSxFQUFFLEdBQUc7YUFDZCxDQUFDLENBQUM7UUFDUCxDQUFDO1FBQ0QsT0FBTyxjQUFjLENBQUM7SUFDMUIsQ0FBQztJQUlELEtBQUssQ0FBQywyQkFBMkIsQ0FDN0IsU0FBaUIsRUFDakIsT0FBZ0I7UUFFaEIsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQzVDLEVBQUUsRUFBRSxTQUFTO1lBQ2IsWUFBWSxFQUFFLElBQUk7U0FDckIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNiLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDdkMsSUFDSSxLQUFLLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FBQyxLQUFLO2dCQUNoQyxLQUFLLENBQUMsRUFBRSxLQUFLLFNBQVMsRUFDeEIsQ0FBQztnQkFDQyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUM7b0JBQ3JCLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDWixZQUFZLEVBQUUsS0FBSztpQkFDdEIsQ0FBQyxDQUFDO1lBQ1AsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDRixPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDO3dHQXJLUSxjQUFjLGtCQUdILG1CQUFtQjs0R0FIOUIsY0FBYyxjQUZYLE1BQU07OzRGQUVULGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFJZ0IsTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBNZWFzdXJlbWVudCwgRmVhdHVyZSwgQ29tbWVudCwgSVVwZGF0ZSwgQ29tbWVudFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyB1cGxvYWRGaWxlVG9TMyB9IGZyb20gXCIuLi9zMy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBvaVNlcnZpY2UgfSBmcm9tIFwiLi9wb2kuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21tZW50U2VydmljZSB7XHJcblxyXG4gICAgQVBJOiBhbnk7IC8vIEFXU1xyXG4gICAgY29uc3RydWN0b3IoQEluamVjdCgnY3VycmVudEFQSVNlcnZpY2UnKSBhcGlJbmplY3RlZDogYW55LFxyXG4gICAgICAgIHByaXZhdGUgcG9pU2VydmljZTogUG9pU2VydmljZSkge1xyXG4gICAgICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29tbWVudHNGcm9tVGlja2V0SUQodGlja2V0SUQ6IHN0cmluZyk6IFByb21pc2U8Q29tbWVudFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5Db21tZW50c0J5VGlja2V0KHRpY2tldElEKS50aGVuKChyZXMpID0+IHJlcy5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Q29tbWVudHNCeVNwYWNlSUQoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxDb21tZW50W10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNvbW1lbnRzQnlTcGFjZShzcGFjZUlEKS50aGVuKFxyXG4gICAgICAgICAgICAoY29tbWVudHMpID0+IGNvbW1lbnRzLml0ZW1zLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVhZENvbW1lbnRBc01lYXN1cmVtZW50KGNvbW1lbnRJRDogc3RyaW5nKTogUHJvbWlzZTxNZWFzdXJlbWVudD4ge1xyXG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSBhd2FpdCB0aGlzLmdldENvbW1lbnQoY29tbWVudElEKTtcclxuICAgICAgICBpZiAoY29tbWVudC50aWNrZXRJRCAmJiAhY29tbWVudC50aWNrZXQpIHtcclxuICAgICAgICAgICAgY29tbWVudC50aWNrZXQgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uR2V0VGlja2V0KGNvbW1lbnQudGlja2V0SUQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgdmFsdWVzID0gY29tbWVudC5kaW1lbnNpb25zO1xyXG4gICAgICAgIGxldCBudW1iZXJQb2ludHMgPSAwXHJcbiAgICAgICAgaWYgKHZhbHVlcykge1xyXG4gICAgICAgICAgICBudW1iZXJQb2ludHMgPSB2YWx1ZXMubGVuZ3RoICsgMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcG9pID0gYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmdldFBvaUJ5RWxlbWVudElkKGNvbW1lbnRJRCk7XHJcbiAgICAgICAgY29uc3QgbWVhc3VyZSA9IHtcclxuICAgICAgICAgICAgaWQ6IGNvbW1lbnQuaWQsXHJcbiAgICAgICAgICAgIGNvbW1lbnQsXHJcbiAgICAgICAgICAgIHBvaSxcclxuICAgICAgICAgICAgbnVtYmVyUG9pbnRzLFxyXG4gICAgICAgICAgICB2YWx1ZXMsXHJcbiAgICAgICAgfSBhcyBNZWFzdXJlbWVudDtcclxuICAgICAgICByZXR1cm4gbWVhc3VyZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENSVURcclxuICAgICAqXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldENvbW1lbnQoY29tbWVudElEOiBzdHJpbmcpOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkdldENvbW1lbnQoY29tbWVudElEKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVDb21tZW50KGNvbW1lbnRJRDogc3RyaW5nKTogUHJvbWlzZTxDb21tZW50PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVDb21tZW50KHsgaWQ6IGNvbW1lbnRJRCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVDb21tZW50KGNvbW1lbnQ6IENvbW1lbnQpOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZUNvbW1lbnQoY29tbWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIEVWRVJZIGNvbW1lbnQgYXR0YWNoZWQgdG8gYSBmZWF0dXJlLCBmb2xsb3dpbmcgYG5leHRUb2tlbmAgdW50aWwgdGhlXHJcbiAgICAgKiBjb25uZWN0aW9uIGlzIGV4aGF1c3RlZC5cclxuICAgICAqXHJcbiAgICAgKiBUaGUgYGNvbW1lbnRzYCBjb25uZWN0aW9uIG5lc3RlZCBpbnNpZGUgRmVhdHVyZXNCeVNwYWNlL0dldEZlYXR1cmUgaXMgY2FwcGVkIGJ5XHJcbiAgICAgKiB0aGUgQXBwU3luYyByZXNvbHZlciAoYCR1dGlsLmRlZmF1bHRJZk51bGwoJGNvbnRleHQuYXJncy5saW1pdCwgMTAwKWApIGFuZCBleHBvc2VzXHJcbiAgICAgKiBhIGBuZXh0VG9rZW5gIHRoYXQgbm9ib2R5IGZvbGxvd3MsIHNvIGEgbWVkaWEtcmljaCBQT0kgc2lsZW50bHkgbG9zZXMgZXZlcnlcclxuICAgICAqIGF0dGFjaG1lbnQgcGFzdCB0aGUgZmlyc3QgcGFnZS4gQW55dGhpbmcgdGhhdCBtdXN0IHNlZSB0aGUgY29tcGxldGUgbWVkaWEgc2V0IG9mXHJcbiAgICAgKiBhIGZlYXR1cmUgKGR1cGxpY2F0aW9uLCBleHBvcnQsIGF1ZGl0KSBoYXMgdG8gdXNlIHRoaXMgbWV0aG9kIHJhdGhlciB0aGFuXHJcbiAgICAgKiBgZmVhdHVyZS5jb21tZW50cy5pdGVtc2AuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldEFsbENvbW1lbnRzRm9yRmVhdHVyZShmZWF0dXJlSUQ6IHN0cmluZyk6IFByb21pc2U8Q29tbWVudFtdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsQ29tbWVudHNQYWdpbmF0ZWQoXHJcbiAgICAgICAgICAgIChsaW1pdCwgbmV4dFRva2VuKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5BUEkuX19wcm90b19fLkNvbW1lbnRzQnlGZWF0dXJlKGZlYXR1cmVJRCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGxpbWl0LCBuZXh0VG9rZW4pLFxyXG4gICAgICAgICAgICBmZWF0dXJlSUQsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiogU2FtZSBhcyBnZXRBbGxDb21tZW50c0ZvckZlYXR1cmUoKSwgZm9yIHRoZSBhdHRhY2htZW50cyBvZiBhIHRpY2tldC4gKi9cclxuICAgIGFzeW5jIGdldEFsbENvbW1lbnRzRm9yVGlja2V0KHRpY2tldElEOiBzdHJpbmcpOiBQcm9taXNlPENvbW1lbnRbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsbENvbW1lbnRzUGFnaW5hdGVkKFxyXG4gICAgICAgICAgICAobGltaXQsIG5leHRUb2tlbikgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMuQVBJLl9fcHJvdG9fXy5Db21tZW50c0J5VGlja2V0KHRpY2tldElELCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbGltaXQsIG5leHRUb2tlbiksXHJcbiAgICAgICAgICAgIHRpY2tldElELFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIERyYWlucyBhIHBhZ2luYXRlZCBjb21tZW50IHF1ZXJ5IHVudGlsIGl0cyBuZXh0VG9rZW4gaXMgZXhoYXVzdGVkLiAqL1xyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRBbGxDb21tZW50c1BhZ2luYXRlZChcclxuICAgICAgICBmZXRjaFBhZ2U6IChsaW1pdDogbnVtYmVyLCBuZXh0VG9rZW46IHN0cmluZyB8IG51bGwpID0+IFByb21pc2U8YW55PixcclxuICAgICAgICBvd25lcklEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPENvbW1lbnRbXT4ge1xyXG4gICAgICAgIGlmICghb3duZXJJRCkge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGFsbDogQ29tbWVudFtdID0gW107XHJcbiAgICAgICAgbGV0IG5leHRUb2tlbjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgICAgIGRvIHtcclxuICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IGZldGNoUGFnZSgxMDAwLCBuZXh0VG9rZW4pO1xyXG4gICAgICAgICAgICBpZiAocGFnZT8uaXRlbXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGFsbC5wdXNoKC4uLnBhZ2UuaXRlbXMuZmlsdGVyKChpdGVtOiBDb21tZW50IHwgbnVsbCkgPT4gISFpdGVtKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV4dFRva2VuID0gcGFnZT8ubmV4dFRva2VuID8/IG51bGw7XHJcbiAgICAgICAgfSB3aGlsZSAobmV4dFRva2VuKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGFsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVDb21tZW50KGlucHV0OiBhbnkpOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZUNvbW1lbnQoaW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwbG9hZEZpbGVGb3JDb21tZW50KGZpbGU6IEZpbGUsIGlkOiBzdHJpbmcgPSBudWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzMoXCJjb21tZW50cy9cIiwgZmlsZSwgaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDcmVhdGUgYSBuZXcgY29tbWVudCB3aXRoIGFuIGV4aXN0aW5nIEFubmV4ZSAqL1xyXG4gICAgYXN5bmMgY3JlYXRlQ29tbWVudFdpdGhGaWxlVVJMKFxyXG4gICAgICAgIGNvbW1lbnQ6IENvbW1lbnQsXHJcbiAgICAgICAgdXJsOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICBjb25zdCBuZXdDb21tZW50ID0gY29tbWVudDtcclxuICAgICAgICBuZXdDb21tZW50LmFubmV4ZSA9IHVybDtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDb21tZW50KG5ld0NvbW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZUNvbW1lbnRXaXRoRmlsZShcclxuICAgICAgICBjb21tZW50OiBDb21tZW50LFxyXG4gICAgICAgIGZpbGU6IEZpbGUsXHJcbiAgICApOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICBsZXQgY3JlYXRlZENvbW1lbnQgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbW1lbnQoY29tbWVudCk7XHJcbiAgICAgICAgaWYgKGZpbGUpIHtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlRm9yQ29tbWVudChcclxuICAgICAgICAgICAgICAgIGZpbGUsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkQ29tbWVudC5pZCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY3JlYXRlZENvbW1lbnQgPSBhd2FpdCB0aGlzLnVwZGF0ZUNvbW1lbnQoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IGNyZWF0ZWRDb21tZW50LmlkLFxyXG4gICAgICAgICAgICAgICAgYW5uZXhlOiB1cmwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3JlYXRlZENvbW1lbnQ7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBhc3luYyBzZXRDb21tZW50QXNDb3ZlckZvckZlYXR1cmUoXHJcbiAgICAgICAgY29tbWVudElEOiBzdHJpbmcsXHJcbiAgICAgICAgZmVhdHVyZTogRmVhdHVyZSxcclxuICAgICk6IFByb21pc2U8Q29tbWVudD4ge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb21tZW50ID0gYXdhaXQgdGhpcy51cGRhdGVDb21tZW50KHtcclxuICAgICAgICAgICAgaWQ6IGNvbW1lbnRJRCxcclxuICAgICAgICAgICAgaXNDb3ZlckltYWdlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBmZWF0dXJlLmNvbW1lbnRzLml0ZW1zLm1hcChhc3luYyAoaW1hZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZS50eXBlID09PSBDb21tZW50VHlwZS5JTUFHRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlLmlkICE9PSBjb21tZW50SURcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tbWVudCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpbWFnZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDb3ZlckltYWdlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdXBkYXRlZENvbW1lbnQ7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -14,6 +14,25 @@ export class DomainService {
14
14
  });
15
15
  });
16
16
  }
17
+ /**
18
+ * Same as getGenericDomainsAndForOrganisation(), but drains every page instead of only
19
+ * the first. `ListDomains` has no per-organisation index — every call already scans the
20
+ * WHOLE table across every organisation before filtering client-side — so a catalogue
21
+ * past the first page was silently invisible to callers that need the complete list
22
+ * (e.g. matching an organisation-specific domain by name across a space-to-space copy).
23
+ */
24
+ async getAllGenericDomainsAndForOrganisation(organisationID) {
25
+ const all = [];
26
+ let nextToken = null;
27
+ do {
28
+ const page = await this.API.__proto__.ListDomains(undefined, 1000, nextToken);
29
+ if (page?.items?.length > 0) {
30
+ all.push(...page.items.filter((dom) => !!dom));
31
+ }
32
+ nextToken = page?.nextToken ?? null;
33
+ } while (nextToken);
34
+ return all.filter(dom => dom.organisationID === organisationID || !dom.organisationID);
35
+ }
17
36
  async getGenericDomainsAndForOrgAndOrderedOrg(orgID, orderedOrgID = null) {
18
37
  // TODO: Change this (UUID can change depending on DB)
19
38
  if (orgID === "6e28201f-4679-4c29-9d2d-8a325f57cee9") {
@@ -76,4 +95,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
76
95
  type: Inject,
77
96
  args: ['currentAPIService']
78
97
  }] }] });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9kb21haW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBSXpELE1BQU0sT0FBTyxhQUFhO0lBQ3RCLEdBQUcsQ0FBTSxDQUFDLEtBQUs7SUFFZixZQUF5QyxXQUFnQjtRQUNyRCxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLG1DQUFtQyxDQUNyQyxjQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDaEMsT0FBTyxDQUNILEdBQUcsQ0FBQyxjQUFjLEtBQUssY0FBYyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FDL0QsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLHVDQUF1QyxDQUN6QyxLQUFhLEVBQ2IsZUFBdUIsSUFBSTtRQUUzQixzREFBc0Q7UUFDdEQsSUFBSSxLQUFLLEtBQUssc0NBQXNDLEVBQUUsQ0FBQztZQUNuRCxrQ0FBa0M7WUFDbEMsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxXQUFX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QUF1QyxDQUMvQyxjQUFjLEVBQ2QsVUFBVSxDQUNiLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDZixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxLQUFhO1FBQzNDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLDhCQUE4QixDQUNyRCxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQzVELEtBQUssQ0FDUixDQUFDO1FBQ0YsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO3dHQTFHUSxhQUFhLGtCQUdGLG1CQUFtQjs0R0FIOUIsYUFBYSxjQUZWLE1BQU07OzRGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFJZ0IsTUFBTTsyQkFBQyxtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQgfSBmcm9tIFwiLi4vLi4vaGVscGVycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERvbWFpbiwgRG9tYWluVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy5zZXJ2aWNlXCI7XHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRG9tYWluU2VydmljZSB7XHJcbiAgICBBUEk6IGFueTsgLy9BV1NcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnkpIHtcclxuICAgICAgICB0aGlzLkFQSSA9IGFwaUluamVjdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgIG9yZ2FuaXNhdGlvbklEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPGFueSB8IHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkxpc3REb21haW5zKCkudGhlbigoZG9tYWlucykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9tYWlucy5pdGVtcy5maWx0ZXIoKGRvbSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICBkb20ub3JnYW5pc2F0aW9uSUQgPT09IG9yZ2FuaXNhdGlvbklEIHx8ICFkb20ub3JnYW5pc2F0aW9uSURcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnQW5kT3JkZXJlZE9yZyhcclxuICAgICAgICBvcmdJRDogc3RyaW5nLFxyXG4gICAgICAgIG9yZGVyZWRPcmdJRDogc3RyaW5nID0gbnVsbCxcclxuICAgICk6IFByb21pc2U8RG9tYWluW10+IHtcclxuICAgICAgICAvLyBUT0RPOiBDaGFuZ2UgdGhpcyAoVVVJRCBjYW4gY2hhbmdlIGRlcGVuZGluZyBvbiBEQilcclxuICAgICAgICBpZiAob3JnSUQgPT09IFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCIpIHtcclxuICAgICAgICAgICAgLy8gSSBhbSBTbWFydGVyUGxhbiwgaSBjYW4gc2VlIGFsbFxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkxpc3REb21haW5zKCkudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLml0ZW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY3VycmVudE9yZ0RvbWFpbnMgPVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnYW5pc2F0aW9uKG9yZ0lEKTtcclxuICAgICAgICBpZiAoIW9yZGVyZWRPcmdJRCB8fCBvcmdJRCA9PT0gb3JkZXJlZE9yZ0lEKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50T3JnRG9tYWlucztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JkZXJlZE9yZ0RvbWFpbnMgPVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnYW5pc2F0aW9uKG9yZGVyZWRPcmdJRCk7XHJcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gWy4uLmN1cnJlbnRPcmdEb21haW5zLCAuLi5vcmRlcmVkT3JnRG9tYWluc107XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChtZXJnZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERvbWFpbnNGb3JPcmdFeGNsdWRpbmdUeXBlcyhcclxuICAgICAgICB0eXBlczogRG9tYWluVHlwZVtdLFxyXG4gICAgICAgIG9yZ2FuaXNhdGlvbklEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPERvbWFpbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0R2VuZXJpY0RvbWFpbnNBbmRGb3JPcmdhbmlzYXRpb24ob3JnYW5pc2F0aW9uSUQpLnRoZW4oXHJcbiAgICAgICAgICAgIChkb21haW5zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZG9tYWlucy5maWx0ZXIoKGRvbSkgPT4gIXR5cGVzLmluY2x1ZGVzKGRvbS50eXBlKSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREb21haW4oaWQ6IHN0cmluZyk6IFByb21pc2U8RG9tYWluPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5HZXREb21haW4oaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZURvbWFpbihpbnB1dDogYW55KTogUHJvbWlzZTxEb21haW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZURvbWFpbihpbnB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlRG9tYWluKGlkOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlRG9tYWluKHsgaWQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0Um9vdERvbWFpbnMob3JnSUQ6IHN0cmluZyk6IFByb21pc2U8RG9tYWluW10+IHtcclxuICAgICAgICBjb25zdCBhbGxEb21haW5zID0gYXdhaXQgdGhpcy5nZXRHZW5lcmljRG9tYWluc0FuZEZvck9yZ2FuaXNhdGlvbihcclxuICAgICAgICAgICAgb3JnSUQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCByb290ID0gYWxsRG9tYWlucy5maWx0ZXIoKGRvbSkgPT4gIWRvbS5wYXJlbnRJRCk7XHJcbiAgICAgICAgcmV0dXJuIHJvb3Quc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlRG9tYWluKGlucHV0OiBEb21haW4pOiBQcm9taXNlPERvbWFpbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlRG9tYWluKGlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREb21haW5zRm9yT3JnRm9yVHlwZShcclxuICAgICAgICB0eXBlOiBEb21haW5UeXBlLFxyXG4gICAgICAgIG9yZ2FuaXNhdGlvbklEOiBzdHJpbmcsXHJcbiAgICAgICAgb3JkZXJlZE9yZzogc3RyaW5nID0gbnVsbCxcclxuICAgICk6IFByb21pc2U8RG9tYWluW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRHZW5lcmljRG9tYWluc0FuZEZvck9yZ0FuZE9yZGVyZWRPcmcoXHJcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbklELFxyXG4gICAgICAgICAgICBvcmRlcmVkT3JnLFxyXG4gICAgICAgICkudGhlbigoZG9tYWlucykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9tYWlucy5maWx0ZXIoKGRvbSkgPT4gZG9tLnR5cGUgPT09IHR5cGUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFBhcmVudERvbWFpbnNGb3JPcmdBbmRPcmRlcmVkT3JnRm9yVHlwZShcclxuICAgICAgICB0eXBlOiBEb21haW5UeXBlLFxyXG4gICAgICAgIG9yZ2FuaXNhdGlvbklEOiBzdHJpbmcsXHJcbiAgICAgICAgb3JkZXJlZE9yZzogc3RyaW5nID0gbnVsbCxcclxuICAgICk6IFByb21pc2U8RG9tYWluW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRHZW5lcmljRG9tYWluc0FuZEZvck9yZ0FuZE9yZGVyZWRPcmcoXHJcbiAgICAgICAgICAgIG9yZ2FuaXNhdGlvbklELFxyXG4gICAgICAgICAgICBvcmRlcmVkT3JnLFxyXG4gICAgICAgICkudGhlbigoZG9tYWlucykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZG9tYWlucy5maWx0ZXIoKGRvbSkgPT4gZG9tLnR5cGUgPT09IHR5cGUgJiYgIWRvbS5wYXJlbnRJRCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RG9tYWluc0Zvck1pc3Npb25zRm9yT3JnKG9yZ0lEOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpbltdPiB7XHJcbiAgICAgICAgY29uc3QgZG9tYWlucyA9IGF3YWl0IHRoaXMuZ2V0RG9tYWluc0Zvck9yZ0V4Y2x1ZGluZ1R5cGVzKFxyXG4gICAgICAgICAgICBbRG9tYWluVHlwZS5CT09LSU5HLCBEb21haW5UeXBlLkZFQVRVUkUsIERvbWFpblR5cGUuTUlTU0lPTl0sXHJcbiAgICAgICAgICAgIG9yZ0lELFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGRvbWFpbnMuZmlsdGVyKChkb20pID0+ICFkb20ucGFyZW50SUQpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tYWluLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9kb21haW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBSXpELE1BQU0sT0FBTyxhQUFhO0lBQ3RCLEdBQUcsQ0FBTSxDQUFDLEtBQUs7SUFFZixZQUF5QyxXQUFnQjtRQUNyRCxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztJQUMzQixDQUFDO0lBRUQsS0FBSyxDQUFDLG1DQUFtQyxDQUNyQyxjQUFzQjtRQUV0QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3JELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDaEMsT0FBTyxDQUNILEdBQUcsQ0FBQyxjQUFjLEtBQUssY0FBYyxJQUFJLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FDL0QsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLGNBQXNCO1FBQy9ELE1BQU0sR0FBRyxHQUFhLEVBQUUsQ0FBQztRQUN6QixJQUFJLFNBQVMsR0FBa0IsSUFBSSxDQUFDO1FBRXBDLEdBQUcsQ0FBQztZQUNBLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxD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QUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsRUFDNUQsS0FBSyxDQUNSLENBQUM7UUFDRixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7d0dBaElRLGFBQWEsa0JBR0YsbUJBQW1COzRHQUg5QixhQUFhLGNBRlYsTUFBTTs7NEZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQUlnQixNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IGZpbHRlclVuaXF1ZUFycmF5QnlJRCB9IGZyb20gXCIuLi8uLi9oZWxwZXJzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRG9tYWluLCBEb21haW5UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzLnNlcnZpY2VcIjtcclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEb21haW5TZXJ2aWNlIHtcclxuICAgIEFQSTogYW55OyAvL0FXU1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSkge1xyXG4gICAgICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0R2VuZXJpY0RvbWFpbnNBbmRGb3JPcmdhbmlzYXRpb24oXHJcbiAgICAgICAgb3JnYW5pc2F0aW9uSUQ6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8YW55IHwgdm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTGlzdERvbWFpbnMoKS50aGVuKChkb21haW5zKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBkb21haW5zLml0ZW1zLmZpbHRlcigoZG9tKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIGRvbS5vcmdhbmlzYXRpb25JRCA9PT0gb3JnYW5pc2F0aW9uSUQgfHwgIWRvbS5vcmdhbmlzYXRpb25JRFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYW1lIGFzIGdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnYW5pc2F0aW9uKCksIGJ1dCBkcmFpbnMgZXZlcnkgcGFnZSBpbnN0ZWFkIG9mIG9ubHlcclxuICAgICAqIHRoZSBmaXJzdC4gYExpc3REb21haW5zYCBoYXMgbm8gcGVyLW9yZ2FuaXNhdGlvbiBpbmRleCDigJQgZXZlcnkgY2FsbCBhbHJlYWR5IHNjYW5zIHRoZVxyXG4gICAgICogV0hPTEUgdGFibGUgYWNyb3NzIGV2ZXJ5IG9yZ2FuaXNhdGlvbiBiZWZvcmUgZmlsdGVyaW5nIGNsaWVudC1zaWRlIOKAlCBzbyBhIGNhdGFsb2d1ZVxyXG4gICAgICogcGFzdCB0aGUgZmlyc3QgcGFnZSB3YXMgc2lsZW50bHkgaW52aXNpYmxlIHRvIGNhbGxlcnMgdGhhdCBuZWVkIHRoZSBjb21wbGV0ZSBsaXN0XHJcbiAgICAgKiAoZS5nLiBtYXRjaGluZyBhbiBvcmdhbmlzYXRpb24tc3BlY2lmaWMgZG9tYWluIGJ5IG5hbWUgYWNyb3NzIGEgc3BhY2UtdG8tc3BhY2UgY29weSkuXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGdldEFsbEdlbmVyaWNEb21haW5zQW5kRm9yT3JnYW5pc2F0aW9uKG9yZ2FuaXNhdGlvbklEOiBzdHJpbmcpOiBQcm9taXNlPERvbWFpbltdPiB7XHJcbiAgICAgICAgY29uc3QgYWxsOiBEb21haW5bXSA9IFtdO1xyXG4gICAgICAgIGxldCBuZXh0VG9rZW46IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uTGlzdERvbWFpbnModW5kZWZpbmVkLCAxMDAwLCBuZXh0VG9rZW4pO1xyXG4gICAgICAgICAgICBpZiAocGFnZT8uaXRlbXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGFsbC5wdXNoKC4uLnBhZ2UuaXRlbXMuZmlsdGVyKChkb206IERvbWFpbiB8IG51bGwpID0+ICEhZG9tKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbmV4dFRva2VuID0gcGFnZT8ubmV4dFRva2VuID8/IG51bGw7XHJcbiAgICAgICAgfSB3aGlsZSAobmV4dFRva2VuKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGFsbC5maWx0ZXIoZG9tID0+IGRvbS5vcmdhbmlzYXRpb25JRCA9PT0gb3JnYW5pc2F0aW9uSUQgfHwgIWRvbS5vcmdhbmlzYXRpb25JRCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0R2VuZXJpY0RvbWFpbnNBbmRGb3JPcmdBbmRPcmRlcmVkT3JnKFxyXG4gICAgICAgIG9yZ0lEOiBzdHJpbmcsXHJcbiAgICAgICAgb3JkZXJlZE9yZ0lEOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxEb21haW5bXT4ge1xyXG4gICAgICAgIC8vIFRPRE86IENoYW5nZSB0aGlzIChVVUlEIGNhbiBjaGFuZ2UgZGVwZW5kaW5nIG9uIERCKVxyXG4gICAgICAgIGlmIChvcmdJRCA9PT0gXCI2ZTI4MjAxZi00Njc5LTRjMjktOWQyZC04YTMyNWY1N2NlZTlcIikge1xyXG4gICAgICAgICAgICAvLyBJIGFtIFNtYXJ0ZXJQbGFuLCBpIGNhbiBzZWUgYWxsXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uTGlzdERvbWFpbnMoKS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuaXRlbXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdXJyZW50T3JnRG9tYWlucyA9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0R2VuZXJpY0RvbWFpbnNBbmRGb3JPcmdhbmlzYXRpb24ob3JnSUQpO1xyXG4gICAgICAgIGlmICghb3JkZXJlZE9yZ0lEIHx8IG9yZ0lEID09PSBvcmRlcmVkT3JnSUQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRPcmdEb21haW5zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcmRlcmVkT3JnRG9tYWlucyA9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0R2VuZXJpY0RvbWFpbnNBbmRGb3JPcmdhbmlzYXRpb24ob3JkZXJlZE9yZ0lEKTtcclxuICAgICAgICBjb25zdCBtZXJnZWQgPSBbLi4uY3VycmVudE9yZ0RvbWFpbnMsIC4uLm9yZGVyZWRPcmdEb21haW5zXTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKG1lcmdlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RG9tYWluc0Zvck9yZ0V4Y2x1ZGluZ1R5cGVzKFxyXG4gICAgICAgIHR5cGVzOiBEb21haW5UeXBlW10sXHJcbiAgICAgICAgb3JnYW5pc2F0aW9uSUQ6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8RG9tYWluW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRHZW5lcmljRG9tYWluc0FuZEZvck9yZ2FuaXNhdGlvbihvcmdhbmlzYXRpb25JRCkudGhlbihcclxuICAgICAgICAgICAgKGRvbWFpbnMpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkb21haW5zLmZpbHRlcigoZG9tKSA9PiAhdHlwZXMuaW5jbHVkZXMoZG9tLnR5cGUpKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERvbWFpbihpZDogc3RyaW5nKTogUHJvbWlzZTxEb21haW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkdldERvbWFpbihpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlRG9tYWluKGlucHV0OiBhbnkpOiBQcm9taXNlPERvbWFpbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlRG9tYWluKGlucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVEb21haW4oaWQ6IHN0cmluZyk6IFByb21pc2U8RG9tYWluPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVEb21haW4oeyBpZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRSb290RG9tYWlucyhvcmdJRDogc3RyaW5nKTogUHJvbWlzZTxEb21haW5bXT4ge1xyXG4gICAgICAgIGNvbnN0IGFsbERvbWFpbnMgPSBhd2FpdCB0aGlzLmdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnYW5pc2F0aW9uKFxyXG4gICAgICAgICAgICBvcmdJRCxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJvb3QgPSBhbGxEb21haW5zLmZpbHRlcigoZG9tKSA9PiAhZG9tLnBhcmVudElEKTtcclxuICAgICAgICByZXR1cm4gcm9vdC5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVEb21haW4oaW5wdXQ6IERvbWFpbik6IFByb21pc2U8RG9tYWluPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVEb21haW4oaW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERvbWFpbnNGb3JPcmdGb3JUeXBlKFxyXG4gICAgICAgIHR5cGU6IERvbWFpblR5cGUsXHJcbiAgICAgICAgb3JnYW5pc2F0aW9uSUQ6IHN0cmluZyxcclxuICAgICAgICBvcmRlcmVkT3JnOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxEb21haW5bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnQW5kT3JkZXJlZE9yZyhcclxuICAgICAgICAgICAgb3JnYW5pc2F0aW9uSUQsXHJcbiAgICAgICAgICAgIG9yZGVyZWRPcmcsXHJcbiAgICAgICAgKS50aGVuKChkb21haW5zKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBkb21haW5zLmZpbHRlcigoZG9tKSA9PiBkb20udHlwZSA9PT0gdHlwZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UGFyZW50RG9tYWluc0Zvck9yZ0FuZE9yZGVyZWRPcmdGb3JUeXBlKFxyXG4gICAgICAgIHR5cGU6IERvbWFpblR5cGUsXHJcbiAgICAgICAgb3JnYW5pc2F0aW9uSUQ6IHN0cmluZyxcclxuICAgICAgICBvcmRlcmVkT3JnOiBzdHJpbmcgPSBudWxsLFxyXG4gICAgKTogUHJvbWlzZTxEb21haW5bXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldEdlbmVyaWNEb21haW5zQW5kRm9yT3JnQW5kT3JkZXJlZE9yZyhcclxuICAgICAgICAgICAgb3JnYW5pc2F0aW9uSUQsXHJcbiAgICAgICAgICAgIG9yZGVyZWRPcmcsXHJcbiAgICAgICAgKS50aGVuKChkb21haW5zKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBkb21haW5zLmZpbHRlcigoZG9tKSA9PiBkb20udHlwZSA9PT0gdHlwZSAmJiAhZG9tLnBhcmVudElEKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXREb21haW5zRm9yTWlzc2lvbnNGb3JPcmcob3JnSUQ6IHN0cmluZyk6IFByb21pc2U8RG9tYWluW10+IHtcclxuICAgICAgICBjb25zdCBkb21haW5zID0gYXdhaXQgdGhpcy5nZXREb21haW5zRm9yT3JnRXhjbHVkaW5nVHlwZXMoXHJcbiAgICAgICAgICAgIFtEb21haW5UeXBlLkJPT0tJTkcsIERvbWFpblR5cGUuRkVBVFVSRSwgRG9tYWluVHlwZS5NSVNTSU9OXSxcclxuICAgICAgICAgICAgb3JnSUQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZG9tYWlucy5maWx0ZXIoKGRvbSkgPT4gIWRvbS5wYXJlbnRJRCk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -103,7 +103,9 @@ export class EquipmentService extends BaseObjectService {
103
103
  const subEquips = [];
104
104
  await Promise.all(equip.subequipmentsIDs.map(async (subId) => {
105
105
  const subEquip = await this.API.GetEquipment(subId);
106
- subEquips.push(subEquip);
106
+ if (subEquip) {
107
+ subEquips.push(subEquip);
108
+ }
107
109
  }));
108
110
  equip.subEquipments = subEquips;
109
111
  }
@@ -240,12 +242,14 @@ export class EquipmentService extends BaseObjectService {
240
242
  * S3 object itself has already been physically copied by the caller beforehand,
241
243
  * so this only needs to record the Note pointing at that new key.
242
244
  */
243
- async createNoteWithExistingAttachment(equipmentID, attachmentKey, type, ownerMissionID) {
245
+ async createNoteWithExistingAttachment(equipmentID, attachmentKey, type, ownerMissionID, dates = {}) {
244
246
  return this.API.__proto__.CreateNote({
245
247
  attachment: attachmentKey,
246
248
  type,
247
249
  equipmentID,
248
250
  ownerMissionID,
251
+ signDate: dates.signDate ?? null,
252
+ expirationDate: dates.expirationDate ?? null,
249
253
  });
250
254
  }
251
255
  async uploadImage(equipment, imageFile) {
@@ -700,4 +704,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
700
704
  type: Inject,
701
705
  args: ['currentAwsKinesisAnalyticsService']
702
706
  }] }, { type: i1.PoiService }, { type: i2.NavigationService }, { type: i3.OperationService }, { type: i4.TicketsService }, { type: i5.NavigatorService }, { type: i6.FilterService }, { type: i7.BaseUserService }, { type: i8.ViewerService }, { type: i9.NgbModal }, { type: i10.ZoneChangeService }] });
703
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1aXBtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9lcXVpcG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FFekIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBTUwsUUFBUSxFQUVSLFdBQVcsRUFDWCxTQUFTLEVBR1QsT0FBTyxFQUNQLFVBQVUsRUFDVixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYiw2QkFBNkIsRUFDN0IsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7QUFVMUQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGlCQUFpQjtJQStEM0M7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXJFRixNQUFNLEdBQUc7UUFDZixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsU0FBUyxFQUFFLDRCQUE0QjtRQUN2QyxXQUFXLEVBQUUsOEJBQThCO1FBQzNDLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsV0FBVyxFQUFFLDhCQUE4QjtLQUM1QyxDQUFDO0lBRUYsaUJBQWlCLEdBR1osSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVuQixpQkFBaUIsR0FHYjtRQUNBLEtBQUssRUFBRSxFQUFFO1FB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OzswQkFDMUIsTUFBTTsyQkFBQyxtQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7XHJcbiAgb3Blbk1vZGFsRm9yVmlzaXRTd2l0Y2gsXHJcbiAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0LFxyXG4gIHdhaXRVbnRpbCxcclxufSBmcm9tICcuLi8uLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXR0ZXJ0YWdEYXRhIH0gZnJvbSAnLi4vLi4vbWF0dGVydGFnRGF0YSc7XHJcbmltcG9ydCB7XHJcbiAgTm90ZSxcclxuICBab25lLFxyXG4gIEVxdWlwbWVudCxcclxuICBFcXVpcG1lbnREb2N1bWVudCxcclxuICBUaWNrZXQsXHJcbiAgVHlwZU5vdGUsXHJcbiAgTWlzc2lvbixcclxuICBFdmVudFN0YXR1cyxcclxuICBFdmVudFR5cGUsXHJcbiAgT3BlcmF0aW9uLFxyXG4gIFBPSSxcclxuICBQb2lUeXBlLFxyXG4gIFJvbGVTdGF0dXMsXHJcbiAgU3BNb2R1bGUsXHJcbn0gZnJvbSAnLi4vLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRvclNlcnZpY2UgfSBmcm9tICcuLi9uYXZpZ2F0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgZGVsZXRlRnJvbVMzLFxyXG4gIGdldFNpZ25lZEZpbGUsXHJcbiAgZ2V0U2lnbmVkSW1hZ2VVcmxGb3JFcXVpcG1lbnQsXHJcbiAgdXBsb2FkRmlsZVRvUzMsXHJcbn0gZnJvbSAnLi4vczMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gJy4uL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tICcuLi92aWV3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VPYmplY3RTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlLW9iamVjdC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE9wZXJhdGlvblNlcnZpY2UgfSBmcm9tICcuL29wZXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gJy4vcG9pLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBUaWNrZXRzU2VydmljZSB9IGZyb20gJy4vdGlja2V0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBab25lQ2hhbmdlU2VydmljZSB9IGZyb20gXCIuLi96b25lQ2hhbmdlLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFcXVpcG1lbnRTZXJ2aWNlIGV4dGVuZHMgQmFzZU9iamVjdFNlcnZpY2Uge1xyXG4gIHByaXZhdGUgcHJlZml4ID0ge1xyXG4gICAgdGVjaG5pY2FsOiAnZXF1aXBtZW50cy9ub3RlL3RlY2huaWNhbC8nLFxyXG4gICAgaW1hZ2U6ICdlcXVpcG1lbnRzL25vdGUvaW1hZ2UvJyxcclxuICAgIGZpbmFuY2lhbDogJ2VxdWlwbWVudHMvbm90ZS9maW5hbmNpYWwvJyxcclxuICAgIGluZm9ybWF0aW9uOiAnZXF1aXBtZW50cy9ub3RlL2luZm9ybWF0aW9uLycsXHJcbiAgICBvdGhlcjogJ2VxdWlwbWVudHMvbm90ZS9vdGhlci8nLFxyXG4gICAgY29udHJhY3R1YWw6ICdlcXVpcG1lbnRzL25vdGUvY29udHJhY3R1YWwvJyxcclxuICB9O1xyXG5cclxuICBlcXVpcG1lbnRzVXBkYXRlZDogU3ViamVjdDx7XHJcbiAgICBzcGFjZTogRXF1aXBtZW50W107XHJcbiAgICB6b25lOiBFcXVpcG1lbnRbXTtcclxuICB9PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGN1cnJlbnRFcXVpcG1lbnRzOiB7XHJcbiAgICBzcGFjZTogRXF1aXBtZW50W107XHJcbiAgICB6b25lc01hcDogTWFwPHN0cmluZywgRXF1aXBtZW50W10+O1xyXG4gIH0gPSB7XHJcbiAgICAgIHNwYWNlOiBbXSxcclxuICAgICAgem9uZXNNYXA6IG5ldyBNYXAoKSxcclxuICAgIH07XHJcblxyXG4gIGVxdWlwbWVudHNUYWdzOiBCZWhhdmlvclN1YmplY3Q8RXF1aXBtZW50W10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFcXVpcG1lbnRbXT4obnVsbCk7XHJcblxyXG4gIHpvbmVJREZpbHRlcjogc3RyaW5nO1xyXG5cclxuICBjdXJyZW50Wm9uZTogWm9uZTtcclxuXHJcbiAgY3VycmVudFNwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgZmxvb3JzUGVyU3BhY2U6IFpvbmVbXSA9IG51bGw7XHJcblxyXG4gIC8qKiBOdWxsIG1lYW5zIHdlIGRvIG5vdCBhcHBseSBhIGZpbHRlciwgZW1wdHkgYXJyYXkgKFtdKSwgbWVhbnMgd2UgdGhhdCB3ZSBoaWRlIGFsbCBlcXVpcG1lbnQgKi9cclxuICBlcXVpcG1lbnREb21haW5GaWx0ZXI6IHN0cmluZ1tdID0gbnVsbDtcclxuXHJcbiAgdXBkYXRpbmc6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjdXJyZW50bHlVcGRhdGluZyA9IGZhbHNlO1xyXG5cclxuICBjdXJyZW50U3dlZXA6IHN0cmluZztcclxuXHJcbiAgZGVsZXRlT2JzZXJ2YWJsZTogU3ViamVjdDxFcXVpcG1lbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY3JlYXRlT2JzZXJ2YWJsZTogU3ViamVjdDxFcXVpcG1lbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgdXBkYXRlT2JzZXJ2YWJsZTogU3ViamVjdDxFcXVpcG1lbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgc2VsZWN0ZWRGbG9vcjogWm9uZSA9IG51bGw7XHJcblxyXG4gIEFQSTogYW55OyAvL0FXU1xyXG4gIGF3c0tpbmVzaXNBbmFseXRpY3M6IGFueTsgLy9BV1NcclxuXHJcbiAgaXNNdXNldW1Vc2VyID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSxcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBd3NLaW5lc2lzQW5hbHl0aWNzU2VydmljZScpXHJcbiAgICBhd3NLaW5lc2lzQW5hbHl0aWNzSW5qZWN0ZWQ6IGFueSxcclxuICAgIHBvaVNlcnZpY2U6IFBvaVNlcnZpY2UsXHJcbiAgICBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG9wZXJhdGlvblNlcnZpY2U6IE9wZXJhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRpY2tldHNTZXJ2aWNlOiBUaWNrZXRzU2VydmljZSxcclxuICAgIHByaXZhdGUgbmF2aWdhdG9yU2VydmljZTogTmF2aWdhdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IEJhc2VVc2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgdmlld2VyU2VydmljZTogVmlld2VyU2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgem9uZUNoYW5nZVNlcnZpY2U6IFpvbmVDaGFuZ2VTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihwb2lTZXJ2aWNlLCBuYXZpZ2F0aW9uU2VydmljZSk7XHJcblxyXG4gICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcyA9IGF3c0tpbmVzaXNBbmFseXRpY3NJbmplY3RlZDtcclxuXHJcbiAgICB0aGlzLmlzTXVzZXVtVXNlciA9IHRoaXMudXNlclNlcnZpY2UuaGFzT25seU11c2V1bVJvbGUoKTtcclxuICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcclxuICAgIHRoaXMudXNlclNlcnZpY2UuaXNDaGFuZ2VkLnN1YnNjcmliZSgoaXNDb25uZWN0ZWQpID0+IHtcclxuICAgICAgaWYgKGlzQ29ubmVjdGVkKSB7XHJcbiAgICAgICAgdGhpcy5pc011c2V1bVVzZXIgPSB0aGlzLnVzZXJTZXJ2aWNlLmhhc09ubHlNdXNldW1Sb2xlKCk7XHJcbiAgICAgICAgdGhpcy5pbml0U3Vic2NyaXB0aW9ucygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy56b25lQ2hhbmdlU2VydmljZS5mbG9vckhhc0NoYW5nZWQuc3Vic2NyaWJlKChmbG9vcikgPT4ge1xyXG4gICAgICBpZiAoZmxvb3IpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmxvb3IgPSBmbG9vcjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZWFkRXF1aXBtZW50KGlkOiBzdHJpbmcpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5HZXRFcXVpcG1lbnQoaWQpLnRoZW4oYXN5bmMgKHJlY2VpdmVkRXF1aXApID0+IHtcclxuICAgICAgbGV0IGVxdWlwOiBFcXVpcG1lbnQ7XHJcbiAgICAgIGlmIChyZWNlaXZlZEVxdWlwKSB7XHJcbiAgICAgICAgZXF1aXAgPSByZWNlaXZlZEVxdWlwO1xyXG4gICAgICAgIGVxdWlwID0gYXdhaXQgdGhpcy5nZXRTaWduZWRVcmxzRm9yRXF1aXBtZW50KHJlY2VpdmVkRXF1aXApO1xyXG4gICAgICAgIGlmIChlcXVpcC5kb21haW4pIHtcclxuICAgICAgICAgIGlmIChlcXVpcC5kb21haW4ucGFyZW50SUQpIHtcclxuICAgICAgICAgICAgZXF1aXAuY2hpbGREb21haW4gPSBlcXVpcC5kb21haW47XHJcbiAgICAgICAgICAgIGVxdWlwLnBhcmVudERvbWFpbiA9IGVxdWlwLmRvbWFpbi5wYXJlbnQ7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlcXVpcC5wYXJlbnREb21haW4gPSBlcXVpcC5kb21haW47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlcXVpcC5zdWJlcXVpcG1lbnRzSURzKSB7XHJcbiAgICAgICAgICBjb25zdCBzdWJFcXVpcHMgPSBbXTtcclxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBlcXVpcC5zdWJlcXVpcG1lbnRzSURzLm1hcChhc3luYyAoc3ViSWQpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBzdWJFcXVpcCA9IGF3YWl0IHRoaXMuQVBJLkdldEVxdWlwbWVudChzdWJJZCk7XHJcbiAgICAgICAgICAgICAgc3ViRXF1aXBzLnB1c2goc3ViRXF1aXApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGVxdWlwLnN1YkVxdWlwbWVudHMgPSBzdWJFcXVpcHM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBlcXVpcDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY3JlYXRlRXF1aXBtZW50KFxyXG4gICAgZXF1aXA6IEVxdWlwbWVudCxcclxuICAgIGltYWdlRmlsZTogRmlsZSxcclxuICAgIGRvY3VtZW50RmlsZTogRmlsZVxyXG4gICk6IFByb21pc2U8RXF1aXBtZW50IHwgdm9pZD4ge1xyXG4gICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KGVxdWlwKTtcclxuICAgIGlmICghIXRoaXMuYXdzS2luZXNpc0FuYWx5dGljcyAmJiAhIXRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5yZWNvcmQgJiYgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzLnJlY29yZCgpKSB7XHJcbiAgICAgIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5nZXRJbnN0YW5jZSgpLnJlY29yZChcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICBldmVudFR5cGU6ICdPYmplY3QgQ3JlYXRpb24nLFxyXG4gICAgICAgICAgICBvYmplY3RUeXBlOiAnZXF1aXBtZW50JyxcclxuICAgICAgICAgICAgcG9pOiBlcXVpcCxcclxuICAgICAgICAgICAgdXNlcjogdGhpcy51c2VyU2VydmljZS5jdSxcclxuICAgICAgICAgICAgbG9jYXRpb25JZDogdGhpcy5jdXJyZW50U3BhY2VJRCxcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICB6b25lSWQ6IHRoaXMuY3VycmVudFpvbmUuaWQsXHJcbiAgICAgICAgICAgIGZsb29ySWQ6IHRoaXMuc2VsZWN0ZWRGbG9vcj8uaWQsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc3RyZWFtTmFtZTogJ3NtYXJ0ZXJwbGFuS2luZXNpcy1hbmFseXRpY3MnLFxyXG4gICAgICAgICAgLy8gcGFydGl0aW9uS2V5OiBcIlwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ0FXU0tpbmVzaXMnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuQ3JlYXRlRXF1aXBtZW50KGVxdWlwKS50aGVuKGFzeW5jIChyZWNlaXZlZEVxdWlwbWVudCkgPT4ge1xyXG4gICAgICBsZXQgZXF1aXBtZW50ID0gcmVjZWl2ZWRFcXVpcG1lbnQgYXMgRXF1aXBtZW50O1xyXG4gICAgICBpZiAoZXF1aXBtZW50KSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2VxdWlwbWVudCBjcmVhdGVkOicsIGVxdWlwbWVudCk7XHJcbiAgICAgICAgaWYgKGRvY3VtZW50RmlsZSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWREb2MoZXF1aXBtZW50LCBkb2N1bWVudEZpbGUsIFR5cGVOb3RlLlRFQ0hOSUNBTCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbWFnZUZpbGUpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkSW1hZ2UoZXF1aXBtZW50LCBpbWFnZUZpbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZXF1aXBtZW50O1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRTaWduZWRVcmxzRm9yRXF1aXBtZW50KGVxdWlwOiBFcXVpcG1lbnQpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xyXG4gICAgY29uc3QgZXF1aXBtZW50ID0geyAuLi5lcXVpcCB9O1xyXG4gICAgaWYgKGVxdWlwbWVudC5ub3Rlcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IGRvY3MgPSBbXTtcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgZXF1aXBtZW50Lm5vdGVzLml0ZW1zLm1hcChhc3luYyAobm90ZSkgPT4ge1xyXG4gICAgICAgICAgZXF1aXBtZW50LmRvY3VtZW50YXRpb25JbWFnZVVybFNpZ25lZCA9XHJcbiAgICAgICAgICAgIGF3YWl0IGdldFNpZ25lZEltYWdlVXJsRm9yRXF1aXBtZW50KGVxdWlwbWVudCk7XHJcbiAgICAgICAgICBpZiAobm90ZS5hdHRhY2htZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBub3RlLmF0dGFjaG1lbnQuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgY29uc3QgZmlsZW5hbWUgPSBub3RlLmF0dGFjaG1lbnQuc3BsaXQoJy8nKVtsZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGF3YWl0IGdldFNpZ25lZEZpbGUobm90ZS5hdHRhY2htZW50KTtcclxuICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQpIHtcclxuICAgICAgICAgICAgICBkb2NzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgZmlsZW5hbWUsXHJcbiAgICAgICAgICAgICAgICB1cmw6IG5vdGUuYXR0YWNobWVudCxcclxuICAgICAgICAgICAgICAgIHVybFNpZ25lZDogYXR0YWNobWVudCxcclxuICAgICAgICAgICAgICAgIG5vdGVJRDogbm90ZS5pZCxcclxuICAgICAgICAgICAgICB9IGFzIEVxdWlwbWVudERvY3VtZW50KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIGVxdWlwbWVudC5kb2N1bWVudHMgPSBkb2NzO1xyXG4gICAgICByZXR1cm4gZXF1aXBtZW50O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGVxdWlwbWVudDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEVxdWlwbWVudHNGb3JUaWNrZXQodGlja2V0OiBUaWNrZXQpOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICBjb25zdCBvcGVyYXRpb25zID0gdGlja2V0Lm9wZXJhdGlvbnMuaXRlbXM7XHJcbiAgICBpZiAob3BlcmF0aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIG9wZXJhdGlvbnMuc29ydChcclxuICAgICAgICAoYSwgYikgPT5cclxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmV0dGllci9wcmV0dGllclxyXG4gICAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkQXQpIC0gbmV3IERhdGUoYS5jcmVhdGVkQXQpXHJcbiAgICAgICk7XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIG9wZXJhdGlvbnMubWFwKGFzeW5jIChvcGVyYXRpb24pID0+IHtcclxuICAgICAgICAgIG9wZXJhdGlvbi5lcXVpcG1lbnQgPSBhd2FpdCB0aGlzLnJlYWRFcXVpcG1lbnQob3BlcmF0aW9uLmVxdWlwbWVudElEKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gdG8ga2VlcCB0aGUgc29ydGluZyBieSBjcmVhdGVkQXRcclxuICAgIHJldHVybiBvcGVyYXRpb25zLm1hcCgobykgPT4gby5lcXVpcG1lbnQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcclxuICAgIC8vIHNwbGl0IGJ5IDEwMFxyXG4gICAgY29uc3QgbGltaXQgPSAxMDA7XHJcbiAgICBsZXQgZXF1aXBzVG9rZW4gPSB7IGVxdWlwczogW10sIG5leHRUb2tlbjogbnVsbCB9O1xyXG4gICAgZG8ge1xyXG4gICAgICBlcXVpcHNUb2tlbiA9IGF3YWl0IHRoaXMubWVyZ2VFcXVpcG1lbnRzRm9yU3BhY2VXaXRoTmV4dFRva2VuV2l0aExpbWl0KFxyXG4gICAgICAgIHNwYWNlSUQsXHJcbiAgICAgICAgbGltaXQsXHJcbiAgICAgICAgZXF1aXBzVG9rZW5cclxuICAgICAgKTtcclxuICAgIH0gd2hpbGUgKGVxdWlwc1Rva2VuLm5leHRUb2tlbik7XHJcbiAgICByZXR1cm4gZXF1aXBzVG9rZW4uZXF1aXBzO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbWVyZ2VFcXVpcG1lbnRzRm9yU3BhY2VXaXRoTmV4dFRva2VuV2l0aExpbWl0KFxyXG4gICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgbGltaXQ6IG51bWJlcixcclxuICAgIGVxdWlwc1Rva2VuOiB7IGVxdWlwczogRXF1aXBtZW50W107IG5leHRUb2tlbjogc3RyaW5nIHwgbnVsbCB9XHJcbiAgKTogUHJvbWlzZTx7IGVxdWlwczogRXF1aXBtZW50W107IG5leHRUb2tlbjogc3RyaW5nIHwgbnVsbCB9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fXHJcbiAgICAgIC5FcXVpcG1lbnRzQnlTcGFjZShcclxuICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgJ0RFU0MnLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgbGltaXQsXHJcbiAgICAgICAgZXF1aXBzVG9rZW4ubmV4dFRva2VuIC8vIG5leHRUb2tlblxyXG4gICAgICApXHJcbiAgICAgIC50aGVuKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVxdWlwc0xpbWl0ID0gcmVzcG9uc2UuaXRlbXM7XHJcbiAgICAgICAgY29uc3QgZXF1aXBzT2JqZWN0ID0ge1xyXG4gICAgICAgICAgZXF1aXBzOiBbLi4uZXF1aXBzVG9rZW4uZXF1aXBzLCAuLi5lcXVpcHNMaW1pdF0sXHJcbiAgICAgICAgICBuZXh0VG9rZW46IHJlc3BvbnNlLm5leHRUb2tlbixcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBlcXVpcHNPYmplY3Q7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBsb2FkSW1hZ2VGb3JBbGxFcXVpcG1lbnRzKFxyXG4gICAgZXF1aXBtZW50czogRXF1aXBtZW50W10sXHJcbiAgICBpbWFnZUZpbGU6IEZpbGVcclxuICApOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICBpZiAoZXF1aXBtZW50cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB1cGxvYWRGaWxlVG9TMyh0aGlzLnByZWZpeC5pbWFnZSwgaW1hZ2VGaWxlLCAnQkFUQ0gnKS50aGVuKFxyXG4gICAgICBhc3luYyAodXJsKSA9PiB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgY29uc3QgZXF1aXBzID0gW107XHJcbiAgICAgICAgICBmb3IgKGNvbnN0IGVxdWlwIG9mIGVxdWlwbWVudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudE1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKFxyXG4gICAgICAgICAgICAgIGVxdWlwLnNwYWNlSURcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnQ6IHVybCxcclxuICAgICAgICAgICAgICB0eXBlOiBUeXBlTm90ZS5JTUFHRSxcclxuICAgICAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXAuaWQsXHJcbiAgICAgICAgICAgICAgb3duZXJNaXNzaW9uSUQ6IGN1cnJlbnRNaXNzaW9uID8gY3VycmVudE1pc3Npb24uaWQgOiBudWxsLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgdXBkYXRlID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZUVxdWlwbWVudCh7XHJcbiAgICAgICAgICAgICAgaWQ6IGVxdWlwLmlkLFxyXG4gICAgICAgICAgICAgIHBob3RvOiB1cmwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBlcXVpcHMucHVzaCh1cGRhdGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIGVxdWlwcztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDcmVhdGVzIGEgTm90ZSBhdHRhY2hlZCB0byBhbiBlcXVpcG1lbnQgZnJvbSBhbiBTMyBrZXkgdGhhdCBBTFJFQURZIGV4aXN0c1xyXG4gICAqIChhcyBvcHBvc2VkIHRvIHVwbG9hZERvYy91cGxvYWRJbWFnZSwgd2hpY2ggdXBsb2FkIGEgZnJlc2ggYnJvd3NlciBGaWxlKS5cclxuICAgKiBVc2VkIHdoZW4gZHVwbGljYXRpbmcgZXF1aXBtZW50IGF0dGFjaG1lbnRzIGR1cmluZyBhIGNyb3NzLXZpc2l0IGNvcHk6IHRoZVxyXG4gICAqIFMzIG9iamVjdCBpdHNlbGYgaGFzIGFscmVhZHkgYmVlbiBwaHlzaWNhbGx5IGNvcGllZCBieSB0aGUgY2FsbGVyIGJlZm9yZWhhbmQsXHJcbiAgICogc28gdGhpcyBvbmx5IG5lZWRzIHRvIHJlY29yZCB0aGUgTm90ZSBwb2ludGluZyBhdCB0aGF0IG5ldyBrZXkuXHJcbiAgICovXHJcbiAgYXN5bmMgY3JlYXRlTm90ZVdpdGhFeGlzdGluZ0F0dGFjaG1lbnQoXHJcbiAgICBlcXVpcG1lbnRJRDogc3RyaW5nLFxyXG4gICAgYXR0YWNobWVudEtleTogc3RyaW5nLFxyXG4gICAgdHlwZTogVHlwZU5vdGUsXHJcbiAgICBvd25lck1pc3Npb25JRDogc3RyaW5nIHwgbnVsbFxyXG4gICk6IFByb21pc2U8Tm90ZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgYXR0YWNobWVudDogYXR0YWNobWVudEtleSxcclxuICAgICAgdHlwZSxcclxuICAgICAgZXF1aXBtZW50SUQsXHJcbiAgICAgIG93bmVyTWlzc2lvbklELFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgdXBsb2FkSW1hZ2UoZXF1aXBtZW50OiBFcXVpcG1lbnQsIGltYWdlRmlsZTogRmlsZSk6IFByb21pc2U8Tm90ZT4ge1xyXG4gICAgcmV0dXJuIHVwbG9hZEZpbGVUb1MzKHRoaXMucHJlZml4LmltYWdlLCBpbWFnZUZpbGUsIGVxdWlwbWVudC5pZCkudGhlbihcclxuICAgICAgYXN5bmMgKHVybCkgPT4ge1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRNaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihcclxuICAgICAgICAgICAgZXF1aXBtZW50LnNwYWNlSURcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBub3RlID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xyXG4gICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXHJcbiAgICAgICAgICAgIHR5cGU6IFR5cGVOb3RlLklNQUdFLFxyXG4gICAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXBtZW50LmlkLFxyXG4gICAgICAgICAgICBvd25lck1pc3Npb25JRDogY3VycmVudE1pc3Npb24gPyBjdXJyZW50TWlzc2lvbi5pZCA6IG51bGwsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVFcXVpcG1lbnQoe1xyXG4gICAgICAgICAgICBpZDogZXF1aXBtZW50LmlkLFxyXG4gICAgICAgICAgICBwaG90bzogdXJsLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gbm90ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVFcXVpcG1lbnQoXHJcbiAgICBlcXVpcDogYW55LFxyXG4gICAgZmlsZTogRmlsZSA9IG51bGwsXHJcbiAgICBub3RlVHlwZTogVHlwZU5vdGUgPSBudWxsXHJcbiAgKTogUHJvbWlzZTxFcXVpcG1lbnQ+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX19cclxuICAgICAgLlVwZGF0ZUVxdWlwbWVudChlcXVpcClcclxuICAgICAgLnRoZW4oYXN5bmMgKHJlY2VpdmVkRXF1aXBtZW50KSA9PiB7XHJcbiAgICAgICAgbGV0IGVxdWlwbWVudCA9IHJlY2VpdmVkRXF1aXBtZW50IGFzIEVxdWlwbWVudDtcclxuICAgICAgICBpZiAoZXF1aXBtZW50KSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXF1aXBtZW50IHVwZGF0ZWQ6JywgZXF1aXBtZW50KTtcclxuICAgICAgICAgIGlmIChub3RlVHlwZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG5vdGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSBUeXBlTm90ZS5JTUFHRTpcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkSW1hZ2UoZXF1aXBtZW50LCBmaWxlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZERvYyhlcXVpcG1lbnQsIGZpbGUsIG5vdGVUeXBlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlcXVpcG1lbnQ7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJlZml4RG9jKHR5cGU6IFR5cGVOb3RlKSB7XHJcbiAgICBsZXQgcHJlZml4O1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgVHlwZU5vdGUuSU5GT1JNQVRJT046XHJcbiAgICAgICAgcHJlZml4ID0gdGhpcy5wcmVmaXguaW5mb3JtYXRpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVHlwZU5vdGUuRklOQU5DSUFMOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmZpbmFuY2lhbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5DT05UUkFDVFVBTDpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5jb250cmFjdHVhbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5PVEhFUjpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5vdGhlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5JTUFHRTpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5pbWFnZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC50ZWNobmljYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJlZml4O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBsb2FkRG9jRm9yQWxsRXF1aXBtZW50cyhcclxuICAgIGVxdWlwbWVudHM6IEVxdWlwbWVudFtdLFxyXG4gICAgZG9jdW1lbnRGaWxlOiBGaWxlLFxyXG4gICAgdHlwZTogVHlwZU5vdGVcclxuICApIHtcclxuICAgIGlmIChlcXVpcG1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcmVmaXggPSB0aGlzLmdldFByZWZpeERvYyh0eXBlKTtcclxuICAgIGNvbnN0IHVybCA9IGF3YWl0IHVwbG9hZEZpbGVUb1MzKHByZWZpeCwgZG9jdW1lbnRGaWxlLCAnQkFUQ0gnKTtcclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgY29uc3QgdXBkYXRlTGlzdCA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGVxdWlwIG9mIGVxdWlwbWVudHMpIHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihlcXVpcC5zcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBuZXdFcXVpcCA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgICAgIGF0dGFjaG1lbnQ6IHVybCxcclxuICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXAuaWQsXHJcbiAgICAgICAgICBvd25lck1pc3Npb25JRDogbWlzc2lvbiA/IG1pc3Npb24uaWQgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVwZGF0ZUxpc3QucHVzaChuZXdFcXVpcCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHVwZGF0ZUxpc3Q7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWREb2MoXHJcbiAgICBlcXVpcG1lbnQ6IEVxdWlwbWVudCxcclxuICAgIGRvY3VtZW50RmlsZTogRmlsZSxcclxuICAgIHR5cGU6IFR5cGVOb3RlXHJcbiAgKTogUHJvbWlzZTxOb3RlPiB7XHJcbiAgICBjb25zdCBwcmVmaXggPSB0aGlzLmdldFByZWZpeERvYyh0eXBlKTtcclxuICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKTtcclxuICAgIHJldHVybiB1cGxvYWRGaWxlVG9TMyhwcmVmaXgsIGRvY3VtZW50RmlsZSwgZXF1aXBtZW50LmlkKS50aGVuKFxyXG4gICAgICBhc3luYyAodXJsKSA9PiB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgICAgICAgYXR0YWNobWVudDogdXJsLFxyXG4gICAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXBtZW50LmlkLFxyXG4gICAgICAgICAgICBvd25lck1pc3Npb25JRDogbWlzc2lvbiA/IG1pc3Npb24uaWQgOiBudWxsLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlRXF1aXBtZW50KGVxdWlwOiBFcXVpcG1lbnQpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xyXG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVFcXVpcG1lbnQoeyBpZDogZXF1aXAuaWQgfSk7XHJcbiAgICBjb25zb2xlLmxvZygnRGVsZXRlZCBlcXVpcG1lbnQnLCBkZWxldGVkKTtcclxuXHJcbiAgICAvLyBkZWxldGUgUE9JXHJcbiAgICBjb25zdCBbcG9pXSA9IGVxdWlwLnBvaXMuaXRlbXM7XHJcbiAgICBpZiAocG9pKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucG9pU2VydmljZS5kZWxldGVQb2kocG9pLmlkKTtcclxuICAgIH1cclxuICAgIC8vIGRlbGV0ZSBub3RlcyByZWxhdGVkXHJcbiAgICBpZiAoZXF1aXAubm90ZXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBlcXVpcC5ub3Rlcy5pdGVtcy5tYXAoYXN5bmMgKG5vdGU6IE5vdGUpID0+IHtcclxuICAgICAgICAgIC8vIGRlbGV0ZSBmaWxlcyBmcm9tIFMzXHJcbiAgICAgICAgICAvKiogTm90IHNoYXJlZCB3aXRoIG90aGVyIGVxdWlwbWVudCAqL1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBub3RlLmF0dGFjaG1lbnQgJiZcclxuICAgICAgICAgICAgIW5vdGUuYXR0YWNobWVudC5zcGxpdCgnLycpLnBvcCgpLnN0YXJ0c1dpdGgoJ0JBVENIXycpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgYXdhaXQgZGVsZXRlRnJvbVMzKG5vdGUuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlTm90ZSh7IGlkOiBub3RlLmlkIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyBkZWxldGUgb3BlcmF0aW9ucyAocmVtb3ZlIGZyb20gbGlua2VkIHRpY2tldHMpXHJcbiAgICBhd2FpdCB0aGlzLm9wZXJhdGlvblNlcnZpY2UuZGVsZXRlT3BlcmF0aW9uc0ZvckVxdWlwbWVudChlcXVpcC5pZCk7XHJcbiAgICByZXR1cm4gZGVsZXRlZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUVxdWlwbWVudExvY2F0aW9uKFxyXG4gICAgZXF1aXA6IEVxdWlwbWVudCxcclxuICAgIHRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGFcclxuICApOiBQcm9taXNlPFBPST4ge1xyXG4gICAgY29uc3QgcG9pSW5wdXQgPSB7XHJcbiAgICAgIGNvb3JkaW5hdGU6IHRhZ0RhdGEuZ2V0Q29vcmRpbmF0ZVN0cmluZygpLFxyXG4gICAgICB0eXBlOiBQb2lUeXBlLkVRVUlQTUVOVCxcclxuICAgICAgZWxlbWVudElEOiBlcXVpcC5pZCxcclxuICAgICAgbWV0YWRhdGE6IHRhZ0RhdGEuZ2V0TWV0YWRhdGFTdHJpbmcoKSxcclxuICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHRhZ0RhdGEuZ2V0U3dlZXBJRCgpLFxyXG4gICAgfSBhcyBQT0k7XHJcbiAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuY3JlYXRlUE9JRm9yU3BhY2VJRChwb2lJbnB1dCk7XHJcbiAgICByZXR1cm4gcG9pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlVGlja2V0RnJvbUVxdWlwbWVudChcclxuICAgIHRpY2tldDogVGlja2V0LFxyXG4gICAgZXF1aXA6IEVxdWlwbWVudFxyXG4gICk6IFByb21pc2U8T3BlcmF0aW9uPiB7XHJcbiAgICBjb25zdCBvcGVyYXRpb25FcXVpcCA9XHJcbiAgICAgIGF3YWl0IHRoaXMub3BlcmF0aW9uU2VydmljZS5nZXRPcGVyYXRpb25zQnlFcXVpcG1lbnRJRChlcXVpcC5pZCk7XHJcbiAgICBjb25zdCBvcGVyYXRpb25Ub0RlbGV0ZSA9IG9wZXJhdGlvbkVxdWlwLmZpbmQoXHJcbiAgICAgIChvcCkgPT4gb3AudGlja2V0SUQgPT09IHRpY2tldC5pZFxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvblNlcnZpY2VcclxuICAgICAgLmRlbGV0ZU9wZXJhdGlvbihvcGVyYXRpb25Ub0RlbGV0ZS5pZClcclxuICAgICAgLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMudGlja2V0c1NlcnZpY2UuYWRkRXZlbnRUb1RpY2tldCh0aWNrZXQgYXMgVGlja2V0LCB7XHJcbiAgICAgICAgICB0aXRsZTogJ0VxdWlwZW1lbnQgcmV0aXLDqSBkdSB0aWNrZXQnLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBFcXVpcGVtZW50ICR7ZXF1aXAubmFtZX0gYSDDqXTDqSByZXRpcsOpIGR1IHRpY2tldGAsXHJcbiAgICAgICAgICBzdGF0dXM6IEV2ZW50U3RhdHVzLlVOTElOS0VEX0ZST01fRVFVSVBNRU5ULFxyXG4gICAgICAgICAgdHlwZTogRXZlbnRUeXBlLlRJQ0tFVCxcclxuICAgICAgICAgIHRyYW5zbGF0aW9uUGF0aDogJ3RpY2tldEV2ZW50LnRpY2tldC51bmxpbmtlZEZyb21FcXVpcG1lbnQnLFxyXG4gICAgICAgICAgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KHsgZXF1aXBtZW50OiBlcXVpcC5uYW1lIH0pLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5pdEVxdWlwcygpIHtcclxuICAgIGlmICghdGhpcy5jdXJyZW50U3BhY2VJRCB8fCB0aGlzLnVzZXJTZXJ2aWNlLmdldFNwTW9kdWxlKCkgPT09IFNwTW9kdWxlLk1VU0VVTSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0aW5nLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRseVVwZGF0aW5nID0gdHJ1ZTtcclxuICAgIGxldCBlcUxpc3QgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZSh0aGlzLmN1cnJlbnRTcGFjZUlEKTtcclxuICAgIGVxTGlzdCA9IGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICB0aGlzLmN1cnJlbnRTcGFjZUlELFxyXG4gICAgICBlcUxpc3RcclxuICAgICk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhlcUxpc3QpO1xyXG4gICAgaWYgKGVxTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBmaWx0ZXJlZEVxdWlwcyA9IGVxTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgKGVxdWlwbWVudCkgPT4gIXRoaXMuaXNBcmNoaXZlZChlcXVpcG1lbnQpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBmaWx0ZXJlZEVxdWlwcy5tYXAoYXN5bmMgKGVxdWlwKSA9PiB7XHJcbiAgICAgICAgICBlcXVpcC5kb2N1bWVudGF0aW9uSW1hZ2VVcmxTaWduZWQgPVxyXG4gICAgICAgICAgICBhd2FpdCBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudChlcXVpcCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcclxuICAgICAgICAgIGZpbHRlcmVkRXF1aXBzLFxyXG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnREb21haW5GaWx0ZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UgPSBmaWx0ZXJlZEVxdWlwcztcclxuICAgICAgaWYgKHRoaXMuem9uZUlERmlsdGVyKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSAoYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcclxuICAgICAgICAgIHRoaXMuY3VycmVudFpvbmVcclxuICAgICAgICApKSBhcyBFcXVpcG1lbnRbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgZmlsdGVyZWRFcXVpcHMpO1xyXG4gICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQoZmlsdGVyZWRFcXVpcHMpOyAvLyBhZGRpbmcgdGFncyBvbmx5IGZvciB0aGUgY3VycmVudCB6b25lXHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy56b25lSURGaWx0ZXIpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgW10pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogW10gfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudEVxdWlwbWVudHMpO1xyXG4gICAgdGhpcy51cGRhdGluZy5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuY3VycmVudGx5VXBkYXRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEVxdWlwbWVudHNGb3JDdXJyZW50VXNlckZvclNwYWNlKFxyXG4gICAgc3BhY2VJRCxcclxuICAgIG1pc3Npb25zOiBNaXNzaW9uW11cclxuICApOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICBsZXQgcmVzdWx0cyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IHNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoKG0pID0+IG0uc3BhY2VJRCA9PT0gc3BhY2VJRCk7XHJcbiAgICBpZiAoc3BhY2VNaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjYW5TZWVFcXVpcHMgPSBzcGFjZU1pc3Npb25zLnNvbWUoXHJcbiAgICAgIChtKSA9PlxyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UubWFuYWdlcnMuaW5jbHVkZXMobS5yb2xlKSB8fFxyXG4gICAgICAgIG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFXHJcbiAgICApO1xyXG4gICAgaWYgKCFjYW5TZWVFcXVpcHMpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICBsZXQgZG9tYWlucyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBtIG9mIHNwYWNlTWlzc2lvbnMpIHtcclxuICAgICAgZG9tYWlucyA9IFsuLi5kb21haW5zLCBtLmRvbWFpbnNdO1xyXG4gICAgfVxyXG4gICAgaWYgKGRvbWFpbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG4gICAgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgLy8gcmVzdWx0cyA9IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxyXG4gICAgLy8gICAgIHJlc3VsdHMsXHJcbiAgICAvLyAgICAgZG9tYWlucyxcclxuICAgIC8vICk7XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUljb25Gb3JBbGxFcXVpcG1lbnRzSW5TcGFjZShcclxuICAgIHRhZ0ljb246IHN0cmluZyxcclxuICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIGRvbWFpbklEOiBzdHJpbmcgPSBudWxsXHJcbiAgKTogUHJvbWlzZTx7IGVxdWlwczogRXF1aXBtZW50W107IHBvaXM6IFBPSVtdIH0+IHtcclxuICAgIGxldCBlcXVpcHMgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZShzcGFjZUlEKTtcclxuICAgIGlmIChkb21haW5JRCkge1xyXG4gICAgICBlcXVpcHMgPSBlcXVpcHMuZmlsdGVyKChlcXVpcCkgPT4gZXF1aXAuZG9tYWluSUQgPT09IGRvbWFpbklEKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBvaXMgPSBhd2FpdCB0aGlzLnVwZGF0ZUljb25Gb3JBbGxPYmplY3RzKGVxdWlwcywgdGFnSWNvbik7XHJcbiAgICByZXR1cm4geyBlcXVpcHMsIHBvaXMgfTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyBhcmNoaXZlZCB0aGlzIGVxdWlwbWVudCAqL1xyXG4gIGlzQXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSURcclxuICAgICAgPyBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSUQuaW5jbHVkZXMoXHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihlcXVpcG1lbnQuc3BhY2VJRCkuaWRcclxuICAgICAgKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0QXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQsIGFyY2hpdmVkOiBib29sZWFuKSB7XHJcbiAgICBsZXQgYXJjaGl2ZWRMaXN0ID0gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXHJcbiAgICAgID8gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXHJcbiAgICAgIDogW107XHJcbiAgICBjb25zdCBtaXNzaW9uSUQgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKS5pZDtcclxuXHJcbiAgICBhcmNoaXZlZExpc3QgPSBhcmNoaXZlZExpc3QuZmlsdGVyKChtKSA9PiBtICE9PSBtaXNzaW9uSUQpO1xyXG5cclxuICAgIGlmIChhcmNoaXZlZCkge1xyXG4gICAgICBhcmNoaXZlZExpc3QucHVzaChtaXNzaW9uSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnVwZGF0ZUVxdWlwbWVudCh7XHJcbiAgICAgIGlkOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgIGFyY2hpdmVkRm9yTWlzc2lvbklEOiBhcmNoaXZlZExpc3QsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZUZpbGUoZG9jdW1lbnRfOiBFcXVpcG1lbnREb2N1bWVudCkge1xyXG4gICAgYXdhaXQgZGVsZXRlRnJvbVMzKGRvY3VtZW50Xy51cmwpO1xyXG4gICAgYXdhaXQgdGhpcy5BUEkuRGVsZXRlTm90ZSh7IGlkOiBkb2N1bWVudF8ubm90ZUlEIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmF2aWdhdGVUb0VxdWlwbWVudEluM0QoXHJcbiAgICBlcXVpcG1lbnQ6IEVxdWlwbWVudCxcclxuICAgIGZvcmNlU3dpdGNoVmlzaXQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgbGV0IHVybCA9IGB2aXNpdC8ke2VxdWlwbWVudC5zcGFjZUlEfWA7XHJcbiAgICBpZiAoZm9yY2VTd2l0Y2hWaXNpdCkge1xyXG4gICAgICB1cmwgKz0gYC9lcXVpcC8ke2VxdWlwbWVudC5pZH1gO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2FuR29Ub1RhZyA9IGF3YWl0IHRoaXMudmlld2VyU2VydmljZS5hY3Rpb25fbW92ZV90b190YWcoXHJcbiAgICAgIGAke2VxdWlwbWVudC5pZH1gXHJcbiAgICApO1xyXG4gICAgaWYgKGNhbkdvVG9UYWcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRNb2RlbDNkQW5kU3dlZXAoZXF1aXBtZW50KTtcclxuXHJcbiAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0Lm1vZGVsM0QpIHtcclxuICAgICAgYWxlcnQoJ0Vycm9yIHdoaWxlIGdldHRpbmcgdmlydHVhbCB2aXNpdCBtb2RlbCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWZvcmNlU3dpdGNoVmlzaXQpIHtcclxuICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIG1vdmluZyB3aXRoaW4gdGhlIHNhbWUgM0QgbW9kZWxcclxuICAgICAgY29uc3QgY3VycmVudE1vZGVsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21vZGVsM0QnKTtcclxuICAgICAgaWYgKGN1cnJlbnRNb2RlbCAmJiBjdXJyZW50TW9kZWwgPT09IHJlc3VsdC5tb2RlbDNEKSB7XHJcbiAgICAgICAgLy8gd2UgYWRkIHRhZyB0byB0aGUgdmlzaXRcclxuICAgICAgICBjb25zdCBwb2kgPSBlcXVpcG1lbnQucG9pcy5pdGVtc1swXTtcclxuICAgICAgICBpZiAocG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgICAgIC8vIHdlIGZvcmNlIGFkZCBiZWNhdXNlIHdlIG1pZ2h0IGJlIGluIGFuIGFub3RoZXIgem9uZVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbkFkZE9iamVjdEZyb21QT0koZXF1aXBtZW50LCBwb2kpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhlcXVpcG1lbnQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvKiogU2kgb24gbmUgZm9yY2UgcGFzIGxhIHZpc2l0ZSwgb24gZGVtYW5kZSBzaSBvbiB2ZXV0IGV0cmUgc3dpdGNoICovXHJcbiAgICAgICAgb3Blbk1vZGFsRm9yVmlzaXRTd2l0Y2goXHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZSxcclxuICAgICAgICAgIHJlc3VsdC5tb2RlbDNELFxyXG4gICAgICAgICAgZXF1aXBtZW50LnNwYWNlSUQsXHJcbiAgICAgICAgICB7IHN3ZWVwVG9Nb3ZlOiByZXN1bHQuc3dlZXAsIHJvdGF0aW9uOiByZXN1bHQucm90YXRpb24gfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdpbmRvdy5vcGVuKGAke3VybH0/bW9kZWwzRD0ke3Jlc3VsdC5tb2RlbDNEfSZzd2VlcD10cnVlYCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlRXF1aXBzRm9yWm9uZSgpIHtcclxuICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIGxldCBmaWx0ZXJlZEVxdWlwcyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgJiZcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmhhcyh0aGlzLnpvbmVJREZpbHRlcilcclxuICAgICAgKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJpIGhhdmUgZXF1aXBzIGZvciB0aGlzIHpvbmVcIiwgZmlsdGVyZWRFcXVpcHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbHRlcmVkRXF1aXBzID0gKGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJPYmplY3RzRm9yWm9uZShcclxuICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcclxuICAgICAgICAgIHRoaXMuY3VycmVudFpvbmVcclxuICAgICAgICApKSBhcyBFcXVpcG1lbnRbXTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5zZXQodGhpcy56b25lSURGaWx0ZXIsIFtcclxuICAgICAgICAgIC4uLmZpbHRlcmVkRXF1aXBzLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmVxdWlwbWVudERvbWFpbkZpbHRlcikge1xyXG4gICAgICAgIGZpbHRlcmVkRXF1aXBzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoXHJcbiAgICAgICAgICBmaWx0ZXJlZEVxdWlwcyxcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQoZmlsdGVyZWRFcXVpcHMpOyAvLyBhZGRpbmcgdGFncyBvbmx5IGZvciB0aGUgY3VycmVudCB6b25lXHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoeyBzcGFjZTogW10sIHpvbmU6IFtdIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0aW5nLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRHVlVG9EZWxldGUoZGVsZXRlZEVxdWlwbWVudDogRXF1aXBtZW50KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInVwZGF0ZSBkdWUgdG8gZGVsZXRlXCIsIGRlbGV0ZWRFcXVpcG1lbnQpO1xyXG4gICAgY29uc3QgZXF1aXAgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmZpbmQoXHJcbiAgICAgIChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gZGVsZXRlZEVxdWlwbWVudC5pZFxyXG4gICAgKTtcclxuICAgIGlmIChlcXVpcCkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuaW5kZXhPZihlcXVpcCk7XHJcbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2Uuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xyXG4gICAgICBjb25zdCBlcXVpcFRvRGVsZXRlID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAuZmluZCgoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IGRlbGV0ZWRFcXVpcG1lbnQuaWQpO1xyXG4gICAgICBpZiAoZXF1aXBUb0RlbGV0ZSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgICAgLmdldCh6b25lKVxyXG4gICAgICAgICAgLmluZGV4T2YoZXF1aXBUb0RlbGV0ZSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQoem9uZSkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcclxuICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgIHpvbmU6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuZ2V0KHRoaXMuem9uZUlERmlsdGVyKSxcclxuICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEdWVUb0NyZWF0ZShjcmVhdGVkRXF1aXA6IEVxdWlwbWVudCkge1xyXG4gICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XHJcbiAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgIC5nZXQodGhpcy56b25lSURGaWx0ZXIpXHJcbiAgICAgIC51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XHJcbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xyXG4gICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxyXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICB9XHJcblxyXG4gIHVwZGF0ZUR1ZVRvRXF1aXBVcGRhdGVkKHVwZGF0ZWRFcXVpcDogRXF1aXBtZW50KSB7XHJcbiAgICBjb25zdCBlcXVpcCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuZmluZChcclxuICAgICAgKF9lcXVpcCkgPT4gX2VxdWlwLmlkID09PSB1cGRhdGVkRXF1aXAuaWRcclxuICAgICk7XHJcbiAgICBpZiAoZXF1aXApIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmluZGV4T2YoZXF1aXApO1xyXG4gICAgICBpZiAodGhpcy5pc0FyY2hpdmVkKGVxdWlwKSkge1xyXG4gICAgICAgIC8vIHdlIHJlbW92ZSBhcmNoaXZlZCBlcXVpcG1lbnRcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xyXG4gICAgICBjb25zdCBlcXVpcFRvVXBkID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAuZmluZCgoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IHVwZGF0ZWRFcXVpcC5pZCk7XHJcbiAgICAgIGlmIChlcXVpcFRvVXBkKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgICAuZ2V0KHpvbmUpXHJcbiAgICAgICAgICAuaW5kZXhPZihlcXVpcFRvVXBkKTtcclxuICAgICAgICBpZiAodGhpcy5pc0FyY2hpdmVkKGVxdWlwKSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQoem9uZSkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgICAgICAuZ2V0KHpvbmUpXHJcbiAgICAgICAgICAgIC5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xyXG4gICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxyXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICB9XHJcblxyXG4gIGluaXRTdWJzY3JpcHRpb25zKCkge1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuZ2V0U3BNb2R1bGUoKSA9PT0gU3BNb2R1bGUuTVVTRVVNKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuem9uZUNoYW5nZVNlcnZpY2Uuem9uZUNoYW5nZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHpvbmUpID0+IHtcclxuICAgICAgICBpZiAoIXpvbmUgfHwgIXRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRDtcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1RhZ3MubmV4dChudWxsKTtcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogbnVsbCB9KTtcclxuICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMgPSB7XHJcbiAgICAgICAgICAgIHNwYWNlOiBbXSxcclxuICAgICAgICAgICAgem9uZXNNYXA6IG5ldyBNYXAoKSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh6b25lLmlkICE9PSB0aGlzLnpvbmVJREZpbHRlcikge1xyXG4gICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgPSB6b25lLmlkO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IHpvbmU7XHJcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCA9PT0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVxdWlwc0ZvclpvbmUoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNwYWNlSUQgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY3VycmVudFNwYWNlSUQ7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEVxdWlwcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5kZWxldGVPYnNlcnZhYmxlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXF1aXBtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRHVlVG9EZWxldGUoZXF1aXBtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlT2JzZXJ2YWJsZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUR1ZVRvQ3JlYXRlKGVxdWlwbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZU9ic2VydmFibGVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlcXVpcG1lbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0VxdWlwVXBkYXRlZChlcXVpcG1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB1bnN1YnNjcmliZSgpIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIl19
707
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1aXBtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9lcXVpcG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FFekIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBTUwsUUFBUSxFQUVSLFdBQVcsRUFDWCxTQUFTLEVBR1QsT0FBTyxFQUNQLFVBQVUsRUFDVixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYiw2QkFBNkIsRUFDN0IsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7QUFVMUQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGlCQUFpQjtJQStEM0M7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXJFRixNQUFNLEdBQUc7UUFDZixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsU0FBUyxFQUFFLDRCQUE0QjtRQUN2QyxXQUFXLEVBQUUsOEJBQThCO1FBQzNDLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsV0FBVyxFQUFFLDhCQUE4QjtLQUM1QyxDQUFDO0lBRUYsaUJBQWlCLEdBR1osSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVuQixpQkFBaUIsR0FHYjtRQUNBLEtBQUssRUFBRSxFQUFFO1FB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QTBEakIsbUJBQW1CLGFBQ25CLG1DQUFtQzs0R0EzRGxDLGdCQUFnQixjQUZmLE1BQU07OzRGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQTJESSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQzFCLE1BQU07MkJBQUMsbUNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIG9wZW5Nb2RhbEZvclZpc2l0U3dpdGNoLFxyXG4gIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdCxcclxuICB3YWl0VW50aWwsXHJcbn0gZnJvbSAnLi4vLi4vaGVscGVycy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVydGFnRGF0YSB9IGZyb20gJy4uLy4uL21hdHRlcnRhZ0RhdGEnO1xyXG5pbXBvcnQge1xyXG4gIE5vdGUsXHJcbiAgWm9uZSxcclxuICBFcXVpcG1lbnQsXHJcbiAgRXF1aXBtZW50RG9jdW1lbnQsXHJcbiAgVGlja2V0LFxyXG4gIFR5cGVOb3RlLFxyXG4gIE1pc3Npb24sXHJcbiAgRXZlbnRTdGF0dXMsXHJcbiAgRXZlbnRUeXBlLFxyXG4gIE9wZXJhdGlvbixcclxuICBQT0ksXHJcbiAgUG9pVHlwZSxcclxuICBSb2xlU3RhdHVzLFxyXG4gIFNwTW9kdWxlLFxyXG59IGZyb20gJy4uLy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vbmF2aWdhdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIGRlbGV0ZUZyb21TMyxcclxuICBnZXRTaWduZWRGaWxlLFxyXG4gIGdldFNpZ25lZEltYWdlVXJsRm9yRXF1aXBtZW50LFxyXG4gIHVwbG9hZEZpbGVUb1MzLFxyXG59IGZyb20gJy4uL3MzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UgfSBmcm9tICcuLi91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdmlld2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlT2JqZWN0U2VydmljZSB9IGZyb20gJy4vYmFzZS1vYmplY3Quc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPcGVyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9vcGVyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFBvaVNlcnZpY2UgfSBmcm9tICcuL3BvaS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGlja2V0c1NlcnZpY2UgfSBmcm9tICcuL3RpY2tldC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgWm9uZUNoYW5nZVNlcnZpY2UgfSBmcm9tIFwiLi4vem9uZUNoYW5nZS5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRXF1aXBtZW50U2VydmljZSBleHRlbmRzIEJhc2VPYmplY3RTZXJ2aWNlIHtcclxuICBwcml2YXRlIHByZWZpeCA9IHtcclxuICAgIHRlY2huaWNhbDogJ2VxdWlwbWVudHMvbm90ZS90ZWNobmljYWwvJyxcclxuICAgIGltYWdlOiAnZXF1aXBtZW50cy9ub3RlL2ltYWdlLycsXHJcbiAgICBmaW5hbmNpYWw6ICdlcXVpcG1lbnRzL25vdGUvZmluYW5jaWFsLycsXHJcbiAgICBpbmZvcm1hdGlvbjogJ2VxdWlwbWVudHMvbm90ZS9pbmZvcm1hdGlvbi8nLFxyXG4gICAgb3RoZXI6ICdlcXVpcG1lbnRzL25vdGUvb3RoZXIvJyxcclxuICAgIGNvbnRyYWN0dWFsOiAnZXF1aXBtZW50cy9ub3RlL2NvbnRyYWN0dWFsLycsXHJcbiAgfTtcclxuXHJcbiAgZXF1aXBtZW50c1VwZGF0ZWQ6IFN1YmplY3Q8e1xyXG4gICAgc3BhY2U6IEVxdWlwbWVudFtdO1xyXG4gICAgem9uZTogRXF1aXBtZW50W107XHJcbiAgfT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjdXJyZW50RXF1aXBtZW50czoge1xyXG4gICAgc3BhY2U6IEVxdWlwbWVudFtdO1xyXG4gICAgem9uZXNNYXA6IE1hcDxzdHJpbmcsIEVxdWlwbWVudFtdPjtcclxuICB9ID0ge1xyXG4gICAgICBzcGFjZTogW10sXHJcbiAgICAgIHpvbmVzTWFwOiBuZXcgTWFwKCksXHJcbiAgICB9O1xyXG5cclxuICBlcXVpcG1lbnRzVGFnczogQmVoYXZpb3JTdWJqZWN0PEVxdWlwbWVudFtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RXF1aXBtZW50W10+KG51bGwpO1xyXG5cclxuICB6b25lSURGaWx0ZXI6IHN0cmluZztcclxuXHJcbiAgY3VycmVudFpvbmU6IFpvbmU7XHJcblxyXG4gIGN1cnJlbnRTcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gIGZsb29yc1BlclNwYWNlOiBab25lW10gPSBudWxsO1xyXG5cclxuICAvKiogTnVsbCBtZWFucyB3ZSBkbyBub3QgYXBwbHkgYSBmaWx0ZXIsIGVtcHR5IGFycmF5IChbXSksIG1lYW5zIHdlIHRoYXQgd2UgaGlkZSBhbGwgZXF1aXBtZW50ICovXHJcbiAgZXF1aXBtZW50RG9tYWluRmlsdGVyOiBzdHJpbmdbXSA9IG51bGw7XHJcblxyXG4gIHVwZGF0aW5nOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY3VycmVudGx5VXBkYXRpbmcgPSBmYWxzZTtcclxuXHJcbiAgY3VycmVudFN3ZWVwOiBzdHJpbmc7XHJcblxyXG4gIGRlbGV0ZU9ic2VydmFibGU6IFN1YmplY3Q8RXF1aXBtZW50PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNyZWF0ZU9ic2VydmFibGU6IFN1YmplY3Q8RXF1aXBtZW50PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHVwZGF0ZU9ic2VydmFibGU6IFN1YmplY3Q8RXF1aXBtZW50PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHNlbGVjdGVkRmxvb3I6IFpvbmUgPSBudWxsO1xyXG5cclxuICBBUEk6IGFueTsgLy9BV1NcclxuICBhd3NLaW5lc2lzQW5hbHl0aWNzOiBhbnk7IC8vQVdTXHJcblxyXG4gIGlzTXVzZXVtVXNlciA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnksXHJcbiAgICBASW5qZWN0KCdjdXJyZW50QXdzS2luZXNpc0FuYWx5dGljc1NlcnZpY2UnKVxyXG4gICAgYXdzS2luZXNpc0FuYWx5dGljc0luamVjdGVkOiBhbnksXHJcbiAgICBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgbmF2aWdhdGlvblNlcnZpY2U6IE5hdmlnYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBvcGVyYXRpb25TZXJ2aWNlOiBPcGVyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0aWNrZXRzU2VydmljZTogVGlja2V0c1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5hdmlnYXRvclNlcnZpY2U6IE5hdmlnYXRvclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIHpvbmVDaGFuZ2VTZXJ2aWNlOiBab25lQ2hhbmdlU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIocG9pU2VydmljZSwgbmF2aWdhdGlvblNlcnZpY2UpO1xyXG5cclxuICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XHJcbiAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MgPSBhd3NLaW5lc2lzQW5hbHl0aWNzSW5qZWN0ZWQ7XHJcblxyXG4gICAgdGhpcy5pc011c2V1bVVzZXIgPSB0aGlzLnVzZXJTZXJ2aWNlLmhhc09ubHlNdXNldW1Sb2xlKCk7XHJcbiAgICB0aGlzLmluaXRTdWJzY3JpcHRpb25zKCk7XHJcbiAgICB0aGlzLnVzZXJTZXJ2aWNlLmlzQ2hhbmdlZC5zdWJzY3JpYmUoKGlzQ29ubmVjdGVkKSA9PiB7XHJcbiAgICAgIGlmIChpc0Nvbm5lY3RlZCkge1xyXG4gICAgICAgIHRoaXMuaXNNdXNldW1Vc2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNPbmx5TXVzZXVtUm9sZSgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFN1YnNjcmlwdGlvbnMoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuem9uZUNoYW5nZVNlcnZpY2UuZmxvb3JIYXNDaGFuZ2VkLnN1YnNjcmliZSgoZmxvb3IpID0+IHtcclxuICAgICAgaWYgKGZsb29yKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29yID0gZmxvb3I7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVhZEVxdWlwbWVudChpZDogc3RyaW5nKTogUHJvbWlzZTxFcXVpcG1lbnQ+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uR2V0RXF1aXBtZW50KGlkKS50aGVuKGFzeW5jIChyZWNlaXZlZEVxdWlwKSA9PiB7XHJcbiAgICAgIGxldCBlcXVpcDogRXF1aXBtZW50O1xyXG4gICAgICBpZiAocmVjZWl2ZWRFcXVpcCkge1xyXG4gICAgICAgIGVxdWlwID0gcmVjZWl2ZWRFcXVpcDtcclxuICAgICAgICBlcXVpcCA9IGF3YWl0IHRoaXMuZ2V0U2lnbmVkVXJsc0ZvckVxdWlwbWVudChyZWNlaXZlZEVxdWlwKTtcclxuICAgICAgICBpZiAoZXF1aXAuZG9tYWluKSB7XHJcbiAgICAgICAgICBpZiAoZXF1aXAuZG9tYWluLnBhcmVudElEKSB7XHJcbiAgICAgICAgICAgIGVxdWlwLmNoaWxkRG9tYWluID0gZXF1aXAuZG9tYWluO1xyXG4gICAgICAgICAgICBlcXVpcC5wYXJlbnREb21haW4gPSBlcXVpcC5kb21haW4ucGFyZW50O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXF1aXAucGFyZW50RG9tYWluID0gZXF1aXAuZG9tYWluO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZXF1aXAuc3ViZXF1aXBtZW50c0lEcykge1xyXG4gICAgICAgICAgY29uc3Qgc3ViRXF1aXBzID0gW107XHJcbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgZXF1aXAuc3ViZXF1aXBtZW50c0lEcy5tYXAoYXN5bmMgKHN1YklkKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgc3ViRXF1aXAgPSBhd2FpdCB0aGlzLkFQSS5HZXRFcXVpcG1lbnQoc3ViSWQpO1xyXG4gICAgICAgICAgICAgIGlmIChzdWJFcXVpcCkge1xyXG4gICAgICAgICAgICAgICAgc3ViRXF1aXBzLnB1c2goc3ViRXF1aXApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBlcXVpcC5zdWJFcXVpcG1lbnRzID0gc3ViRXF1aXBzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZXF1aXA7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZUVxdWlwbWVudChcclxuICAgIGVxdWlwOiBFcXVpcG1lbnQsXHJcbiAgICBpbWFnZUZpbGU6IEZpbGUsXHJcbiAgICBkb2N1bWVudEZpbGU6IEZpbGVcclxuICApOiBQcm9taXNlPEVxdWlwbWVudCB8IHZvaWQ+IHtcclxuICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChlcXVpcCk7XHJcbiAgICBpZiAoISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MgJiYgISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MucmVjb3JkICYmIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5yZWNvcmQoKSkge1xyXG4gICAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MuZ2V0SW5zdGFuY2UoKS5yZWNvcmQoXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiAnT2JqZWN0IENyZWF0aW9uJyxcclxuICAgICAgICAgICAgb2JqZWN0VHlwZTogJ2VxdWlwbWVudCcsXHJcbiAgICAgICAgICAgIHBvaTogZXF1aXAsXHJcbiAgICAgICAgICAgIHVzZXI6IHRoaXMudXNlclNlcnZpY2UuY3UsXHJcbiAgICAgICAgICAgIGxvY2F0aW9uSWQ6IHRoaXMuY3VycmVudFNwYWNlSUQsXHJcbiAgICAgICAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKSxcclxuICAgICAgICAgICAgem9uZUlkOiB0aGlzLmN1cnJlbnRab25lLmlkLFxyXG4gICAgICAgICAgICBmbG9vcklkOiB0aGlzLnNlbGVjdGVkRmxvb3I/LmlkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN0cmVhbU5hbWU6ICdzbWFydGVycGxhbktpbmVzaXMtYW5hbHl0aWNzJyxcclxuICAgICAgICAgIC8vIHBhcnRpdGlvbktleTogXCJcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgICdBV1NLaW5lc2lzJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuQVBJLkNyZWF0ZUVxdWlwbWVudChlcXVpcCkudGhlbihhc3luYyAocmVjZWl2ZWRFcXVpcG1lbnQpID0+IHtcclxuICAgICAgbGV0IGVxdWlwbWVudCA9IHJlY2VpdmVkRXF1aXBtZW50IGFzIEVxdWlwbWVudDtcclxuICAgICAgaWYgKGVxdWlwbWVudCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdlcXVpcG1lbnQgY3JlYXRlZDonLCBlcXVpcG1lbnQpO1xyXG4gICAgICAgIGlmIChkb2N1bWVudEZpbGUpIHtcclxuICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkRG9jKGVxdWlwbWVudCwgZG9jdW1lbnRGaWxlLCBUeXBlTm90ZS5URUNITklDQUwpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW1hZ2VGaWxlKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZEltYWdlKGVxdWlwbWVudCwgaW1hZ2VGaWxlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGVxdWlwbWVudDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0U2lnbmVkVXJsc0ZvckVxdWlwbWVudChlcXVpcDogRXF1aXBtZW50KTogUHJvbWlzZTxFcXVpcG1lbnQ+IHtcclxuICAgIGNvbnN0IGVxdWlwbWVudCA9IHsgLi4uZXF1aXAgfTtcclxuICAgIGlmIChlcXVpcG1lbnQubm90ZXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBkb2NzID0gW107XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIGVxdWlwbWVudC5ub3Rlcy5pdGVtcy5tYXAoYXN5bmMgKG5vdGUpID0+IHtcclxuICAgICAgICAgIGVxdWlwbWVudC5kb2N1bWVudGF0aW9uSW1hZ2VVcmxTaWduZWQgPVxyXG4gICAgICAgICAgICBhd2FpdCBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudChlcXVpcG1lbnQpO1xyXG4gICAgICAgICAgaWYgKG5vdGUuYXR0YWNobWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbGVuYW1lID0gbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJylbbGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBhd2FpdCBnZXRTaWduZWRGaWxlKG5vdGUuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICAgIGlmIChhdHRhY2htZW50KSB7XHJcbiAgICAgICAgICAgICAgZG9jcy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGZpbGVuYW1lLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBub3RlLmF0dGFjaG1lbnQsXHJcbiAgICAgICAgICAgICAgICB1cmxTaWduZWQ6IGF0dGFjaG1lbnQsXHJcbiAgICAgICAgICAgICAgICBub3RlSUQ6IG5vdGUuaWQsXHJcbiAgICAgICAgICAgICAgfSBhcyBFcXVpcG1lbnREb2N1bWVudCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICBlcXVpcG1lbnQuZG9jdW1lbnRzID0gZG9jcztcclxuICAgICAgcmV0dXJuIGVxdWlwbWVudDtcclxuICAgIH1cclxuICAgIHJldHVybiBlcXVpcG1lbnQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRFcXVpcG1lbnRzRm9yVGlja2V0KHRpY2tldDogVGlja2V0KTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xyXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IHRpY2tldC5vcGVyYXRpb25zLml0ZW1zO1xyXG4gICAgaWYgKG9wZXJhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICBvcGVyYXRpb25zLnNvcnQoXHJcbiAgICAgICAgKGEsIGIpID0+XHJcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJldHRpZXIvcHJldHRpZXJcclxuICAgICAgICAgIG5ldyBEYXRlKGIuY3JlYXRlZEF0KSAtIG5ldyBEYXRlKGEuY3JlYXRlZEF0KVxyXG4gICAgICApO1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBvcGVyYXRpb25zLm1hcChhc3luYyAob3BlcmF0aW9uKSA9PiB7XHJcbiAgICAgICAgICBvcGVyYXRpb24uZXF1aXBtZW50ID0gYXdhaXQgdGhpcy5yZWFkRXF1aXBtZW50KG9wZXJhdGlvbi5lcXVpcG1lbnRJRCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIHRvIGtlZXAgdGhlIHNvcnRpbmcgYnkgY3JlYXRlZEF0XHJcbiAgICByZXR1cm4gb3BlcmF0aW9ucy5tYXAoKG8pID0+IG8uZXF1aXBtZW50KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEVxdWlwbWVudHNGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICAvLyBzcGxpdCBieSAxMDBcclxuICAgIGNvbnN0IGxpbWl0ID0gMTAwO1xyXG4gICAgbGV0IGVxdWlwc1Rva2VuID0geyBlcXVpcHM6IFtdLCBuZXh0VG9rZW46IG51bGwgfTtcclxuICAgIGRvIHtcclxuICAgICAgZXF1aXBzVG9rZW4gPSBhd2FpdCB0aGlzLm1lcmdlRXF1aXBtZW50c0ZvclNwYWNlV2l0aE5leHRUb2tlbldpdGhMaW1pdChcclxuICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgIGxpbWl0LFxyXG4gICAgICAgIGVxdWlwc1Rva2VuXHJcbiAgICAgICk7XHJcbiAgICB9IHdoaWxlIChlcXVpcHNUb2tlbi5uZXh0VG9rZW4pO1xyXG4gICAgcmV0dXJuIGVxdWlwc1Rva2VuLmVxdWlwcztcclxuICB9XHJcblxyXG4gIGFzeW5jIG1lcmdlRXF1aXBtZW50c0ZvclNwYWNlV2l0aE5leHRUb2tlbldpdGhMaW1pdChcclxuICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIGxpbWl0OiBudW1iZXIsXHJcbiAgICBlcXVpcHNUb2tlbjogeyBlcXVpcHM6IEVxdWlwbWVudFtdOyBuZXh0VG9rZW46IHN0cmluZyB8IG51bGwgfVxyXG4gICk6IFByb21pc2U8eyBlcXVpcHM6IEVxdWlwbWVudFtdOyBuZXh0VG9rZW46IHN0cmluZyB8IG51bGwgfT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAuRXF1aXBtZW50c0J5U3BhY2UoXHJcbiAgICAgICAgc3BhY2VJRCxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgICdERVNDJyxcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIGxpbWl0LFxyXG4gICAgICAgIGVxdWlwc1Rva2VuLm5leHRUb2tlbiAvLyBuZXh0VG9rZW5cclxuICAgICAgKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHtcclxuICAgICAgICBjb25zdCBlcXVpcHNMaW1pdCA9IHJlc3BvbnNlLml0ZW1zO1xyXG4gICAgICAgIGNvbnN0IGVxdWlwc09iamVjdCA9IHtcclxuICAgICAgICAgIGVxdWlwczogWy4uLmVxdWlwc1Rva2VuLmVxdWlwcywgLi4uZXF1aXBzTGltaXRdLFxyXG4gICAgICAgICAgbmV4dFRva2VuOiByZXNwb25zZS5uZXh0VG9rZW4sXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZXF1aXBzT2JqZWN0O1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwbG9hZEltYWdlRm9yQWxsRXF1aXBtZW50cyhcclxuICAgIGVxdWlwbWVudHM6IEVxdWlwbWVudFtdLFxyXG4gICAgaW1hZ2VGaWxlOiBGaWxlXHJcbiAgKTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xyXG4gICAgaWYgKGVxdWlwbWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzModGhpcy5wcmVmaXguaW1hZ2UsIGltYWdlRmlsZSwgJ0JBVENIJykudGhlbihcclxuICAgICAgYXN5bmMgKHVybCkgPT4ge1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgIGNvbnN0IGVxdWlwcyA9IFtdO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBlcXVpcCBvZiBlcXVpcG1lbnRzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRNaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihcclxuICAgICAgICAgICAgICBlcXVpcC5zcGFjZUlEXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXHJcbiAgICAgICAgICAgICAgdHlwZTogVHlwZU5vdGUuSU1BR0UsXHJcbiAgICAgICAgICAgICAgZXF1aXBtZW50SUQ6IGVxdWlwLmlkLFxyXG4gICAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBjdXJyZW50TWlzc2lvbiA/IGN1cnJlbnRNaXNzaW9uLmlkIDogbnVsbCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVwZGF0ZSA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVFcXVpcG1lbnQoe1xyXG4gICAgICAgICAgICAgIGlkOiBlcXVpcC5pZCxcclxuICAgICAgICAgICAgICBwaG90bzogdXJsLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZXF1aXBzLnB1c2godXBkYXRlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBlcXVpcHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhIE5vdGUgYXR0YWNoZWQgdG8gYW4gZXF1aXBtZW50IGZyb20gYW4gUzMga2V5IHRoYXQgQUxSRUFEWSBleGlzdHNcclxuICAgKiAoYXMgb3Bwb3NlZCB0byB1cGxvYWREb2MvdXBsb2FkSW1hZ2UsIHdoaWNoIHVwbG9hZCBhIGZyZXNoIGJyb3dzZXIgRmlsZSkuXHJcbiAgICogVXNlZCB3aGVuIGR1cGxpY2F0aW5nIGVxdWlwbWVudCBhdHRhY2htZW50cyBkdXJpbmcgYSBjcm9zcy12aXNpdCBjb3B5OiB0aGVcclxuICAgKiBTMyBvYmplY3QgaXRzZWxmIGhhcyBhbHJlYWR5IGJlZW4gcGh5c2ljYWxseSBjb3BpZWQgYnkgdGhlIGNhbGxlciBiZWZvcmVoYW5kLFxyXG4gICAqIHNvIHRoaXMgb25seSBuZWVkcyB0byByZWNvcmQgdGhlIE5vdGUgcG9pbnRpbmcgYXQgdGhhdCBuZXcga2V5LlxyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZU5vdGVXaXRoRXhpc3RpbmdBdHRhY2htZW50KFxyXG4gICAgZXF1aXBtZW50SUQ6IHN0cmluZyxcclxuICAgIGF0dGFjaG1lbnRLZXk6IHN0cmluZyxcclxuICAgIHR5cGU6IFR5cGVOb3RlLFxyXG4gICAgb3duZXJNaXNzaW9uSUQ6IHN0cmluZyB8IG51bGwsXHJcbiAgICBkYXRlczogeyBzaWduRGF0ZT86IG51bWJlciB8IG51bGw7IGV4cGlyYXRpb25EYXRlPzogbnVtYmVyIHwgbnVsbCB9ID0ge31cclxuICApOiBQcm9taXNlPE5vdGU+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XHJcbiAgICAgIGF0dGFjaG1lbnQ6IGF0dGFjaG1lbnRLZXksXHJcbiAgICAgIHR5cGUsXHJcbiAgICAgIGVxdWlwbWVudElELFxyXG4gICAgICBvd25lck1pc3Npb25JRCxcclxuICAgICAgc2lnbkRhdGU6IGRhdGVzLnNpZ25EYXRlID8/IG51bGwsXHJcbiAgICAgIGV4cGlyYXRpb25EYXRlOiBkYXRlcy5leHBpcmF0aW9uRGF0ZSA/PyBudWxsLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgdXBsb2FkSW1hZ2UoZXF1aXBtZW50OiBFcXVpcG1lbnQsIGltYWdlRmlsZTogRmlsZSk6IFByb21pc2U8Tm90ZT4ge1xyXG4gICAgcmV0dXJuIHVwbG9hZEZpbGVUb1MzKHRoaXMucHJlZml4LmltYWdlLCBpbWFnZUZpbGUsIGVxdWlwbWVudC5pZCkudGhlbihcclxuICAgICAgYXN5bmMgKHVybCkgPT4ge1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgIGNvbnN0IGN1cnJlbnRNaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihcclxuICAgICAgICAgICAgZXF1aXBtZW50LnNwYWNlSURcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBub3RlID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xyXG4gICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXHJcbiAgICAgICAgICAgIHR5cGU6IFR5cGVOb3RlLklNQUdFLFxyXG4gICAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXBtZW50LmlkLFxyXG4gICAgICAgICAgICBvd25lck1pc3Npb25JRDogY3VycmVudE1pc3Npb24gPyBjdXJyZW50TWlzc2lvbi5pZCA6IG51bGwsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVFcXVpcG1lbnQoe1xyXG4gICAgICAgICAgICBpZDogZXF1aXBtZW50LmlkLFxyXG4gICAgICAgICAgICBwaG90bzogdXJsLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICByZXR1cm4gbm90ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVFcXVpcG1lbnQoXHJcbiAgICBlcXVpcDogYW55LFxyXG4gICAgZmlsZTogRmlsZSA9IG51bGwsXHJcbiAgICBub3RlVHlwZTogVHlwZU5vdGUgPSBudWxsXHJcbiAgKTogUHJvbWlzZTxFcXVpcG1lbnQ+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX19cclxuICAgICAgLlVwZGF0ZUVxdWlwbWVudChlcXVpcClcclxuICAgICAgLnRoZW4oYXN5bmMgKHJlY2VpdmVkRXF1aXBtZW50KSA9PiB7XHJcbiAgICAgICAgbGV0IGVxdWlwbWVudCA9IHJlY2VpdmVkRXF1aXBtZW50IGFzIEVxdWlwbWVudDtcclxuICAgICAgICBpZiAoZXF1aXBtZW50KSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnZXF1aXBtZW50IHVwZGF0ZWQ6JywgZXF1aXBtZW50KTtcclxuICAgICAgICAgIGlmIChub3RlVHlwZSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG5vdGVUeXBlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSBUeXBlTm90ZS5JTUFHRTpcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkSW1hZ2UoZXF1aXBtZW50LCBmaWxlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZERvYyhlcXVpcG1lbnQsIGZpbGUsIG5vdGVUeXBlKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBlcXVpcG1lbnQ7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJlZml4RG9jKHR5cGU6IFR5cGVOb3RlKSB7XHJcbiAgICBsZXQgcHJlZml4O1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgIGNhc2UgVHlwZU5vdGUuSU5GT1JNQVRJT046XHJcbiAgICAgICAgcHJlZml4ID0gdGhpcy5wcmVmaXguaW5mb3JtYXRpb247XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgVHlwZU5vdGUuRklOQU5DSUFMOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmZpbmFuY2lhbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5DT05UUkFDVFVBTDpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5jb250cmFjdHVhbDtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5PVEhFUjpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5vdGhlcjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5JTUFHRTpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5pbWFnZTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC50ZWNobmljYWw7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJlZml4O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBsb2FkRG9jRm9yQWxsRXF1aXBtZW50cyhcclxuICAgIGVxdWlwbWVudHM6IEVxdWlwbWVudFtdLFxyXG4gICAgZG9jdW1lbnRGaWxlOiBGaWxlLFxyXG4gICAgdHlwZTogVHlwZU5vdGVcclxuICApIHtcclxuICAgIGlmIChlcXVpcG1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcbiAgICBjb25zdCBwcmVmaXggPSB0aGlzLmdldFByZWZpeERvYyh0eXBlKTtcclxuICAgIGNvbnN0IHVybCA9IGF3YWl0IHVwbG9hZEZpbGVUb1MzKHByZWZpeCwgZG9jdW1lbnRGaWxlLCAnQkFUQ0gnKTtcclxuICAgIGlmICh1cmwpIHtcclxuICAgICAgY29uc3QgdXBkYXRlTGlzdCA9IFtdO1xyXG4gICAgICBmb3IgKGNvbnN0IGVxdWlwIG9mIGVxdWlwbWVudHMpIHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihlcXVpcC5zcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBuZXdFcXVpcCA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgICAgIGF0dGFjaG1lbnQ6IHVybCxcclxuICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXAuaWQsXHJcbiAgICAgICAgICBvd25lck1pc3Npb25JRDogbWlzc2lvbiA/IG1pc3Npb24uaWQgOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVwZGF0ZUxpc3QucHVzaChuZXdFcXVpcCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHVwZGF0ZUxpc3Q7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gW107XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWREb2MoXHJcbiAgICBlcXVpcG1lbnQ6IEVxdWlwbWVudCxcclxuICAgIGRvY3VtZW50RmlsZTogRmlsZSxcclxuICAgIHR5cGU6IFR5cGVOb3RlXHJcbiAgKTogUHJvbWlzZTxOb3RlPiB7XHJcbiAgICBjb25zdCBwcmVmaXggPSB0aGlzLmdldFByZWZpeERvYyh0eXBlKTtcclxuICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKTtcclxuICAgIHJldHVybiB1cGxvYWRGaWxlVG9TMyhwcmVmaXgsIGRvY3VtZW50RmlsZSwgZXF1aXBtZW50LmlkKS50aGVuKFxyXG4gICAgICBhc3luYyAodXJsKSA9PiB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVOb3RlKHtcclxuICAgICAgICAgICAgYXR0YWNobWVudDogdXJsLFxyXG4gICAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgICBlcXVpcG1lbnRJRDogZXF1aXBtZW50LmlkLFxyXG4gICAgICAgICAgICBvd25lck1pc3Npb25JRDogbWlzc2lvbiA/IG1pc3Npb24uaWQgOiBudWxsLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlRXF1aXBtZW50KGVxdWlwOiBFcXVpcG1lbnQpOiBQcm9taXNlPEVxdWlwbWVudD4ge1xyXG4gICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVFcXVpcG1lbnQoeyBpZDogZXF1aXAuaWQgfSk7XHJcbiAgICBjb25zb2xlLmxvZygnRGVsZXRlZCBlcXVpcG1lbnQnLCBkZWxldGVkKTtcclxuXHJcbiAgICAvLyBkZWxldGUgUE9JXHJcbiAgICBjb25zdCBbcG9pXSA9IGVxdWlwLnBvaXMuaXRlbXM7XHJcbiAgICBpZiAocG9pKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMucG9pU2VydmljZS5kZWxldGVQb2kocG9pLmlkKTtcclxuICAgIH1cclxuICAgIC8vIGRlbGV0ZSBub3RlcyByZWxhdGVkXHJcbiAgICBpZiAoZXF1aXAubm90ZXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBlcXVpcC5ub3Rlcy5pdGVtcy5tYXAoYXN5bmMgKG5vdGU6IE5vdGUpID0+IHtcclxuICAgICAgICAgIC8vIGRlbGV0ZSBmaWxlcyBmcm9tIFMzXHJcbiAgICAgICAgICAvKiogTm90IHNoYXJlZCB3aXRoIG90aGVyIGVxdWlwbWVudCAqL1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICBub3RlLmF0dGFjaG1lbnQgJiZcclxuICAgICAgICAgICAgIW5vdGUuYXR0YWNobWVudC5zcGxpdCgnLycpLnBvcCgpLnN0YXJ0c1dpdGgoJ0JBVENIXycpXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgYXdhaXQgZGVsZXRlRnJvbVMzKG5vdGUuYXR0YWNobWVudCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlTm90ZSh7IGlkOiBub3RlLmlkIH0pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyBkZWxldGUgb3BlcmF0aW9ucyAocmVtb3ZlIGZyb20gbGlua2VkIHRpY2tldHMpXHJcbiAgICBhd2FpdCB0aGlzLm9wZXJhdGlvblNlcnZpY2UuZGVsZXRlT3BlcmF0aW9uc0ZvckVxdWlwbWVudChlcXVpcC5pZCk7XHJcbiAgICByZXR1cm4gZGVsZXRlZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUVxdWlwbWVudExvY2F0aW9uKFxyXG4gICAgZXF1aXA6IEVxdWlwbWVudCxcclxuICAgIHRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGFcclxuICApOiBQcm9taXNlPFBPST4ge1xyXG4gICAgY29uc3QgcG9pSW5wdXQgPSB7XHJcbiAgICAgIGNvb3JkaW5hdGU6IHRhZ0RhdGEuZ2V0Q29vcmRpbmF0ZVN0cmluZygpLFxyXG4gICAgICB0eXBlOiBQb2lUeXBlLkVRVUlQTUVOVCxcclxuICAgICAgZWxlbWVudElEOiBlcXVpcC5pZCxcclxuICAgICAgbWV0YWRhdGE6IHRhZ0RhdGEuZ2V0TWV0YWRhdGFTdHJpbmcoKSxcclxuICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHRhZ0RhdGEuZ2V0U3dlZXBJRCgpLFxyXG4gICAgfSBhcyBQT0k7XHJcbiAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuY3JlYXRlUE9JRm9yU3BhY2VJRChwb2lJbnB1dCk7XHJcbiAgICByZXR1cm4gcG9pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlVGlja2V0RnJvbUVxdWlwbWVudChcclxuICAgIHRpY2tldDogVGlja2V0LFxyXG4gICAgZXF1aXA6IEVxdWlwbWVudFxyXG4gICk6IFByb21pc2U8T3BlcmF0aW9uPiB7XHJcbiAgICBjb25zdCBvcGVyYXRpb25FcXVpcCA9XHJcbiAgICAgIGF3YWl0IHRoaXMub3BlcmF0aW9uU2VydmljZS5nZXRPcGVyYXRpb25zQnlFcXVpcG1lbnRJRChlcXVpcC5pZCk7XHJcbiAgICBjb25zdCBvcGVyYXRpb25Ub0RlbGV0ZSA9IG9wZXJhdGlvbkVxdWlwLmZpbmQoXHJcbiAgICAgIChvcCkgPT4gb3AudGlja2V0SUQgPT09IHRpY2tldC5pZFxyXG4gICAgKTtcclxuICAgIHJldHVybiB0aGlzLm9wZXJhdGlvblNlcnZpY2VcclxuICAgICAgLmRlbGV0ZU9wZXJhdGlvbihvcGVyYXRpb25Ub0RlbGV0ZS5pZClcclxuICAgICAgLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMudGlja2V0c1NlcnZpY2UuYWRkRXZlbnRUb1RpY2tldCh0aWNrZXQgYXMgVGlja2V0LCB7XHJcbiAgICAgICAgICB0aXRsZTogJ0VxdWlwZW1lbnQgcmV0aXLDqSBkdSB0aWNrZXQnLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBFcXVpcGVtZW50ICR7ZXF1aXAubmFtZX0gYSDDqXTDqSByZXRpcsOpIGR1IHRpY2tldGAsXHJcbiAgICAgICAgICBzdGF0dXM6IEV2ZW50U3RhdHVzLlVOTElOS0VEX0ZST01fRVFVSVBNRU5ULFxyXG4gICAgICAgICAgdHlwZTogRXZlbnRUeXBlLlRJQ0tFVCxcclxuICAgICAgICAgIHRyYW5zbGF0aW9uUGF0aDogJ3RpY2tldEV2ZW50LnRpY2tldC51bmxpbmtlZEZyb21FcXVpcG1lbnQnLFxyXG4gICAgICAgICAgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KHsgZXF1aXBtZW50OiBlcXVpcC5uYW1lIH0pLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgaW5pdEVxdWlwcygpIHtcclxuICAgIGlmICghdGhpcy5jdXJyZW50U3BhY2VJRCB8fCB0aGlzLnVzZXJTZXJ2aWNlLmdldFNwTW9kdWxlKCkgPT09IFNwTW9kdWxlLk1VU0VVTSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0aW5nLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRseVVwZGF0aW5nID0gdHJ1ZTtcclxuICAgIGxldCBlcUxpc3QgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZSh0aGlzLmN1cnJlbnRTcGFjZUlEKTtcclxuICAgIGVxTGlzdCA9IGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICB0aGlzLmN1cnJlbnRTcGFjZUlELFxyXG4gICAgICBlcUxpc3RcclxuICAgICk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhlcUxpc3QpO1xyXG4gICAgaWYgKGVxTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBmaWx0ZXJlZEVxdWlwcyA9IGVxTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgKGVxdWlwbWVudCkgPT4gIXRoaXMuaXNBcmNoaXZlZChlcXVpcG1lbnQpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBmaWx0ZXJlZEVxdWlwcy5tYXAoYXN5bmMgKGVxdWlwKSA9PiB7XHJcbiAgICAgICAgICBlcXVpcC5kb2N1bWVudGF0aW9uSW1hZ2VVcmxTaWduZWQgPVxyXG4gICAgICAgICAgICBhd2FpdCBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudChlcXVpcCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcclxuICAgICAgICAgIGZpbHRlcmVkRXF1aXBzLFxyXG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnREb21haW5GaWx0ZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UgPSBmaWx0ZXJlZEVxdWlwcztcclxuICAgICAgaWYgKHRoaXMuem9uZUlERmlsdGVyKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSAoYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcclxuICAgICAgICAgIHRoaXMuY3VycmVudFpvbmVcclxuICAgICAgICApKSBhcyBFcXVpcG1lbnRbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgZmlsdGVyZWRFcXVpcHMpO1xyXG4gICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQoZmlsdGVyZWRFcXVpcHMpOyAvLyBhZGRpbmcgdGFncyBvbmx5IGZvciB0aGUgY3VycmVudCB6b25lXHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy56b25lSURGaWx0ZXIpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgW10pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogW10gfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudEVxdWlwbWVudHMpO1xyXG4gICAgdGhpcy51cGRhdGluZy5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuY3VycmVudGx5VXBkYXRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEVxdWlwbWVudHNGb3JDdXJyZW50VXNlckZvclNwYWNlKFxyXG4gICAgc3BhY2VJRCxcclxuICAgIG1pc3Npb25zOiBNaXNzaW9uW11cclxuICApOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICBsZXQgcmVzdWx0cyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IHNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoKG0pID0+IG0uc3BhY2VJRCA9PT0gc3BhY2VJRCk7XHJcbiAgICBpZiAoc3BhY2VNaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjYW5TZWVFcXVpcHMgPSBzcGFjZU1pc3Npb25zLnNvbWUoXHJcbiAgICAgIChtKSA9PlxyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UubWFuYWdlcnMuaW5jbHVkZXMobS5yb2xlKSB8fFxyXG4gICAgICAgIG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFXHJcbiAgICApO1xyXG4gICAgaWYgKCFjYW5TZWVFcXVpcHMpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICBsZXQgZG9tYWlucyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBtIG9mIHNwYWNlTWlzc2lvbnMpIHtcclxuICAgICAgZG9tYWlucyA9IFsuLi5kb21haW5zLCBtLmRvbWFpbnNdO1xyXG4gICAgfVxyXG4gICAgaWYgKGRvbWFpbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG4gICAgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgLy8gcmVzdWx0cyA9IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxyXG4gICAgLy8gICAgIHJlc3VsdHMsXHJcbiAgICAvLyAgICAgZG9tYWlucyxcclxuICAgIC8vICk7XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUljb25Gb3JBbGxFcXVpcG1lbnRzSW5TcGFjZShcclxuICAgIHRhZ0ljb246IHN0cmluZyxcclxuICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIGRvbWFpbklEOiBzdHJpbmcgPSBudWxsXHJcbiAgKTogUHJvbWlzZTx7IGVxdWlwczogRXF1aXBtZW50W107IHBvaXM6IFBPSVtdIH0+IHtcclxuICAgIGxldCBlcXVpcHMgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZShzcGFjZUlEKTtcclxuICAgIGlmIChkb21haW5JRCkge1xyXG4gICAgICBlcXVpcHMgPSBlcXVpcHMuZmlsdGVyKChlcXVpcCkgPT4gZXF1aXAuZG9tYWluSUQgPT09IGRvbWFpbklEKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBvaXMgPSBhd2FpdCB0aGlzLnVwZGF0ZUljb25Gb3JBbGxPYmplY3RzKGVxdWlwcywgdGFnSWNvbik7XHJcbiAgICByZXR1cm4geyBlcXVpcHMsIHBvaXMgfTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyBhcmNoaXZlZCB0aGlzIGVxdWlwbWVudCAqL1xyXG4gIGlzQXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSURcclxuICAgICAgPyBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSUQuaW5jbHVkZXMoXHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihlcXVpcG1lbnQuc3BhY2VJRCkuaWRcclxuICAgICAgKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0QXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQsIGFyY2hpdmVkOiBib29sZWFuKSB7XHJcbiAgICBsZXQgYXJjaGl2ZWRMaXN0ID0gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXHJcbiAgICAgID8gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXHJcbiAgICAgIDogW107XHJcbiAgICBjb25zdCBtaXNzaW9uSUQgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKS5pZDtcclxuXHJcbiAgICBhcmNoaXZlZExpc3QgPSBhcmNoaXZlZExpc3QuZmlsdGVyKChtKSA9PiBtICE9PSBtaXNzaW9uSUQpO1xyXG5cclxuICAgIGlmIChhcmNoaXZlZCkge1xyXG4gICAgICBhcmNoaXZlZExpc3QucHVzaChtaXNzaW9uSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnVwZGF0ZUVxdWlwbWVudCh7XHJcbiAgICAgIGlkOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgIGFyY2hpdmVkRm9yTWlzc2lvbklEOiBhcmNoaXZlZExpc3QsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZUZpbGUoZG9jdW1lbnRfOiBFcXVpcG1lbnREb2N1bWVudCkge1xyXG4gICAgYXdhaXQgZGVsZXRlRnJvbVMzKGRvY3VtZW50Xy51cmwpO1xyXG4gICAgYXdhaXQgdGhpcy5BUEkuRGVsZXRlTm90ZSh7IGlkOiBkb2N1bWVudF8ubm90ZUlEIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmF2aWdhdGVUb0VxdWlwbWVudEluM0QoXHJcbiAgICBlcXVpcG1lbnQ6IEVxdWlwbWVudCxcclxuICAgIGZvcmNlU3dpdGNoVmlzaXQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgbGV0IHVybCA9IGB2aXNpdC8ke2VxdWlwbWVudC5zcGFjZUlEfWA7XHJcbiAgICBpZiAoZm9yY2VTd2l0Y2hWaXNpdCkge1xyXG4gICAgICB1cmwgKz0gYC9lcXVpcC8ke2VxdWlwbWVudC5pZH1gO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2FuR29Ub1RhZyA9IGF3YWl0IHRoaXMudmlld2VyU2VydmljZS5hY3Rpb25fbW92ZV90b190YWcoXHJcbiAgICAgIGAke2VxdWlwbWVudC5pZH1gXHJcbiAgICApO1xyXG4gICAgaWYgKGNhbkdvVG9UYWcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRNb2RlbDNkQW5kU3dlZXAoZXF1aXBtZW50KTtcclxuXHJcbiAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0Lm1vZGVsM0QpIHtcclxuICAgICAgYWxlcnQoJ0Vycm9yIHdoaWxlIGdldHRpbmcgdmlydHVhbCB2aXNpdCBtb2RlbCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWZvcmNlU3dpdGNoVmlzaXQpIHtcclxuICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIG1vdmluZyB3aXRoaW4gdGhlIHNhbWUgM0QgbW9kZWxcclxuICAgICAgY29uc3QgY3VycmVudE1vZGVsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21vZGVsM0QnKTtcclxuICAgICAgaWYgKGN1cnJlbnRNb2RlbCAmJiBjdXJyZW50TW9kZWwgPT09IHJlc3VsdC5tb2RlbDNEKSB7XHJcbiAgICAgICAgLy8gd2UgYWRkIHRhZyB0byB0aGUgdmlzaXRcclxuICAgICAgICBjb25zdCBwb2kgPSBlcXVpcG1lbnQucG9pcy5pdGVtc1swXTtcclxuICAgICAgICBpZiAocG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgICAgIC8vIHdlIGZvcmNlIGFkZCBiZWNhdXNlIHdlIG1pZ2h0IGJlIGluIGFuIGFub3RoZXIgem9uZVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbkFkZE9iamVjdEZyb21QT0koZXF1aXBtZW50LCBwb2kpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhlcXVpcG1lbnQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvKiogU2kgb24gbmUgZm9yY2UgcGFzIGxhIHZpc2l0ZSwgb24gZGVtYW5kZSBzaSBvbiB2ZXV0IGV0cmUgc3dpdGNoICovXHJcbiAgICAgICAgb3Blbk1vZGFsRm9yVmlzaXRTd2l0Y2goXHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZSxcclxuICAgICAgICAgIHJlc3VsdC5tb2RlbDNELFxyXG4gICAgICAgICAgZXF1aXBtZW50LnNwYWNlSUQsXHJcbiAgICAgICAgICB7IHN3ZWVwVG9Nb3ZlOiByZXN1bHQuc3dlZXAsIHJvdGF0aW9uOiByZXN1bHQucm90YXRpb24gfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdpbmRvdy5vcGVuKGAke3VybH0/bW9kZWwzRD0ke3Jlc3VsdC5tb2RlbDNEfSZzd2VlcD10cnVlYCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlRXF1aXBzRm9yWm9uZSgpIHtcclxuICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIGxldCBmaWx0ZXJlZEVxdWlwcyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgJiZcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmhhcyh0aGlzLnpvbmVJREZpbHRlcilcclxuICAgICAgKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJpIGhhdmUgZXF1aXBzIGZvciB0aGlzIHpvbmVcIiwgZmlsdGVyZWRFcXVpcHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbHRlcmVkRXF1aXBzID0gKGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJPYmplY3RzRm9yWm9uZShcclxuICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcclxuICAgICAgICAgIHRoaXMuY3VycmVudFpvbmVcclxuICAgICAgICApKSBhcyBFcXVpcG1lbnRbXTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5zZXQodGhpcy56b25lSURGaWx0ZXIsIFtcclxuICAgICAgICAgIC4uLmZpbHRlcmVkRXF1aXBzLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmVxdWlwbWVudERvbWFpbkZpbHRlcikge1xyXG4gICAgICAgIGZpbHRlcmVkRXF1aXBzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoXHJcbiAgICAgICAgICBmaWx0ZXJlZEVxdWlwcyxcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQoZmlsdGVyZWRFcXVpcHMpOyAvLyBhZGRpbmcgdGFncyBvbmx5IGZvciB0aGUgY3VycmVudCB6b25lXHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoeyBzcGFjZTogW10sIHpvbmU6IFtdIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0aW5nLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRHVlVG9EZWxldGUoZGVsZXRlZEVxdWlwbWVudDogRXF1aXBtZW50KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInVwZGF0ZSBkdWUgdG8gZGVsZXRlXCIsIGRlbGV0ZWRFcXVpcG1lbnQpO1xyXG4gICAgY29uc3QgZXF1aXAgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmZpbmQoXHJcbiAgICAgIChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gZGVsZXRlZEVxdWlwbWVudC5pZFxyXG4gICAgKTtcclxuICAgIGlmIChlcXVpcCkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuaW5kZXhPZihlcXVpcCk7XHJcbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2Uuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xyXG4gICAgICBjb25zdCBlcXVpcFRvRGVsZXRlID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAuZmluZCgoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IGRlbGV0ZWRFcXVpcG1lbnQuaWQpO1xyXG4gICAgICBpZiAoZXF1aXBUb0RlbGV0ZSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgICAgLmdldCh6b25lKVxyXG4gICAgICAgICAgLmluZGV4T2YoZXF1aXBUb0RlbGV0ZSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQoem9uZSkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcclxuICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgIHpvbmU6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuZ2V0KHRoaXMuem9uZUlERmlsdGVyKSxcclxuICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEdWVUb0NyZWF0ZShjcmVhdGVkRXF1aXA6IEVxdWlwbWVudCkge1xyXG4gICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XHJcbiAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgIC5nZXQodGhpcy56b25lSURGaWx0ZXIpXHJcbiAgICAgIC51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XHJcbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xyXG4gICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxyXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICB9XHJcblxyXG4gIHVwZGF0ZUR1ZVRvRXF1aXBVcGRhdGVkKHVwZGF0ZWRFcXVpcDogRXF1aXBtZW50KSB7XHJcbiAgICBjb25zdCBlcXVpcCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuZmluZChcclxuICAgICAgKF9lcXVpcCkgPT4gX2VxdWlwLmlkID09PSB1cGRhdGVkRXF1aXAuaWRcclxuICAgICk7XHJcbiAgICBpZiAoZXF1aXApIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmluZGV4T2YoZXF1aXApO1xyXG4gICAgICBpZiAodGhpcy5pc0FyY2hpdmVkKGVxdWlwKSkge1xyXG4gICAgICAgIC8vIHdlIHJlbW92ZSBhcmNoaXZlZCBlcXVpcG1lbnRcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xyXG4gICAgICBjb25zdCBlcXVpcFRvVXBkID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAuZmluZCgoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IHVwZGF0ZWRFcXVpcC5pZCk7XHJcbiAgICAgIGlmIChlcXVpcFRvVXBkKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgICAuZ2V0KHpvbmUpXHJcbiAgICAgICAgICAuaW5kZXhPZihlcXVpcFRvVXBkKTtcclxuICAgICAgICBpZiAodGhpcy5pc0FyY2hpdmVkKGVxdWlwKSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQoem9uZSkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgICAgICAuZ2V0KHpvbmUpXHJcbiAgICAgICAgICAgIC5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xyXG4gICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxyXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICB9XHJcblxyXG4gIGluaXRTdWJzY3JpcHRpb25zKCkge1xyXG4gICAgaWYgKHRoaXMudXNlclNlcnZpY2UuZ2V0U3BNb2R1bGUoKSA9PT0gU3BNb2R1bGUuTVVTRVVNKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuem9uZUNoYW5nZVNlcnZpY2Uuem9uZUNoYW5nZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHpvbmUpID0+IHtcclxuICAgICAgICBpZiAoIXpvbmUgfHwgIXRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRDtcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1RhZ3MubmV4dChudWxsKTtcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogbnVsbCB9KTtcclxuICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gbnVsbDtcclxuICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMgPSB7XHJcbiAgICAgICAgICAgIHNwYWNlOiBbXSxcclxuICAgICAgICAgICAgem9uZXNNYXA6IG5ldyBNYXAoKSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh6b25lLmlkICE9PSB0aGlzLnpvbmVJREZpbHRlcikge1xyXG4gICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgPSB6b25lLmlkO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IHpvbmU7XHJcbiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCA9PT0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUVxdWlwc0ZvclpvbmUoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNwYWNlSUQgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY3VycmVudFNwYWNlSUQ7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdEVxdWlwcygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5kZWxldGVPYnNlcnZhYmxlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXF1aXBtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRHVlVG9EZWxldGUoZXF1aXBtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuY3JlYXRlT2JzZXJ2YWJsZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUR1ZVRvQ3JlYXRlKGVxdWlwbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZU9ic2VydmFibGVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlcXVpcG1lbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0VxdWlwVXBkYXRlZChlcXVpcG1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB1bnN1YnNjcmliZSgpIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIl19