@smarterplan/ngx-smarterplan-core 1.2.50 → 1.2.52

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.
@@ -196,6 +196,10 @@ export class FilterService {
196
196
  });
197
197
  }
198
198
  filterMeasurementsForDateRange(measurements, dateRange) {
199
+ const isInvalidDate = (d) => d instanceof Date && isNaN(d.getTime());
200
+ if (dateRange.every(d => d instanceof Date && isInvalidDate(d))) {
201
+ return measurements;
202
+ }
199
203
  return measurements.filter((measure) => {
200
204
  const createdAtDate = new Date(measure.comment.createdAt);
201
205
  return (createdAtDate >= dateRange[0] && createdAtDate <= dateRange[1]);
@@ -596,4 +600,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
596
600
  providedIn: "root",
597
601
  }]
598
602
  }], ctorParameters: function () { return [{ type: i1.BaseUserService }, { type: i2.ZoneService }, { type: i3.PoiService }]; } });
599
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsSSxPQUFPLEVBT0wsT0FBTyxFQUNQLGFBQWEsRUFDYixVQUFVLEVBT1gsTUFBTSxrQkFBa0IsQ0FBQztBQVkxQixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFSekMsSUFBSyxVQU9KO0FBUEQsV0FBSyxVQUFVO0lBQ1gsK0JBQWlCLENBQUE7SUFDakIsNkJBQWUsQ0FBQTtJQUNmLDJCQUFhLENBQUE7SUFDYiwyQkFBYSxDQUFBO0lBQ2IsNkJBQWUsQ0FBQTtJQUNmLGlDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFQSSxVQUFVLEtBQVYsVUFBVSxRQU9kO0FBS0QsTUFBTSxPQUFPLGFBQWE7SUFLdEIsWUFDWSxXQUE0QixFQUM1QixXQUF3QixFQUN4QixVQUFzQjtRQUZ0QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVAxQixxQkFBZ0IsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQVF2RCxDQUFDO0lBRUoscUJBQXFCLENBQUMsZUFBeUIsRUFBRSxNQUFjO1FBQzNELE9BQU8sZUFBZSxDQUFDLE1B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Q1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBndWFyZC1mb3ItaW4gKi9cclxuLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgZ2V0TGV2ZWxzQmVsb3csIGdldEhpZ2hlc3RMZXZlbEZvck1pc3Npb25zLCBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zLCBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQgfSBmcm9tIFwiLi4vaGVscGVycy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcbiAgWm9uZSxcclxuICBFcXVpcG1lbnQsXHJcbiAgTGV2ZWxTdGF0dXMsXHJcbiAgTWVhc3VyZW1lbnQsXHJcbiAgTWlzc2lvbixcclxuICBPcmdhbmlzYXRpb24sXHJcbiAgUG9pVHlwZSxcclxuICBQcm9maWxlRW50aXR5LFxyXG4gIFJvbGVTdGF0dXMsXHJcbiAgU3BhY2UsXHJcbiAgVGlja2V0LFxyXG4gIERiT2JqZWN0VHlwZSxcclxuICBGZWF0dXJlLFxyXG4gIENvbW1lbnQsXHJcbiAgVmlzaXRUZW1wbGF0ZSwgT2JqZWN0M0RcclxufSBmcm9tIFwiLi4vdHlwZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL3BvaS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFpvbmVTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL3pvbmUuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCYXNlVXNlclNlcnZpY2UgfSBmcm9tIFwiLi91c2VyLnNlcnZpY2VcIjtcclxuZW51bSBGaWx0ZXJUeXBlIHtcclxuICAgIERPTUFJTiA9IFwiRE9NQUlOXCIsXHJcbiAgICBMRVZFTCA9IFwiTEVWRUxcIixcclxuICAgIFJPTEUgPSBcIlJPTEVcIixcclxuICAgIFpPTkUgPSBcIlpPTkVcIixcclxuICAgIFNQQUNFID0gXCJTUEFDRVwiLFxyXG4gICAgSEFTSFRBRyA9IFwiSEFTSFRBR1wiLFxyXG59XHJcbmltcG9ydCBsZXZlbnNodGVpbiBmcm9tICdqcy1sZXZlbnNodGVpbic7XHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRmlsdGVyU2VydmljZSB7XHJcbiAgICBwcml2YXRlIHVwZGF0ZURhdGVGaWx0ZXI6IFN1YmplY3Q8RGF0ZVtdPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnREYXRlRmlsdGVyOiBEYXRlW107XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgem9uZVNlcnZpY2U6IFpvbmVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcG9pU2VydmljZTogUG9pU2VydmljZSxcclxuICAgICkge31cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzQnlEb21haW4odGlja2V0c1RvRmlsdGVyOiBUaWNrZXRbXSwgZG9tYWluOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGlja2V0c1RvRmlsdGVyLmZpbHRlcigodGljKSA9PiB0aWMuZG9tYWluSUQgPT09IGRvbWFpbik7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyT2JqZWN0c0J5TGV2ZWwob2JqZWN0c1RvRmlsdGVyOiBhbnlbXSwgbGV2ZWw6IExldmVsU3RhdHVzKTogYW55W10ge1xyXG4gICAgICAgIGNvbnN0IHZpc2libGVMZXZlbHMgPSBnZXRMZXZlbHNCZWxvdyhsZXZlbCk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBvYmplY3RzVG9GaWx0ZXIuZmlsdGVyKCh0aWMpID0+XHJcbiAgICAgICAgICAgIHZpc2libGVMZXZlbHMuaW5jbHVkZXModGljLmxldmVsKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzRm9yTWlzc2lvbihcclxuICAgICAgICB0aWNrZXRzVG9GaWx0ZXI6IFRpY2tldFtdLFxyXG4gICAgICAgIG1pc3Npb246IE1pc3Npb24sXHJcbiAgICApOiBUaWNrZXRbXSB7XHJcbiAgICAgICAgY29uc3QgbWFuYWdlclJvbGVzOiBSb2xlU3RhdHVzW10gPSBbXHJcbiAgICAgICAgICAgIFJvbGVTdGF0dXMuTUFOQUdFUixcclxuICAgICAgICAgICAgUm9sZVN0YXR1cy5BRE1JTixcclxuICAgICAgICAgICAgUm9sZVN0YXR1cy5PV05FUixcclxuICAgICAgICBdO1xyXG4gICAgICAgIGlmICghbWFuYWdlclJvbGVzLmluY2x1ZGVzKG1pc3Npb24ucm9sZSkpIHtcclxuICAgICAgICAgICAgaWYgKG1pc3Npb24ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTRVJWSUNFIGNhbiBzZWUgdGlja2V0cyB0byB3aGljaCBoZSBpcyBhc3NpZ25lZFxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGlja2V0c0Fzc2lnbmVkID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGlja2V0c1RvRmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQuYXNzaWduZWVzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhc3NpZ25tZW50IG9mIHQuYXNzaWduZWVzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzaWdubWVudC5taXNzaW9uSUQgPT09IG1pc3Npb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRzQXNzaWduZWQucHVzaCh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aWNrZXRzQXNzaWduZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gT0NDVVBBTlQgYW5kIFZJU0lUT1IgY2FuIHNlZSBvbmx5IHRpY2tldHMgdGhhdCB0aGV5IGNyZWF0ZWRcclxuICAgICAgICAgICAgcmV0dXJuIHRpY2tldHNUb0ZpbHRlci5maWx0ZXIoKHRpY2tldCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpY2tldC5vd25lck1pc3Npb25JRCA9PT0gbWlzc2lvbi5pZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aWNrZXRzVG9GaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsdGVyc0ZvclJvbGUocm9sZTogUm9sZVN0YXR1cyk6IEZpbHRlclR5cGVbXSB7XHJcbiAgICAgICAgc3dpdGNoIChyb2xlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5BRE1JTjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5NQU5BR0VSOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLlpPTkUsIEZpbHRlclR5cGUuTEVWRUxdO1xyXG4gICAgICAgICAgICBjYXNlIFJvbGVTdGF0dXMuT1dORVI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5TRVJWSUNFOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5MRVZFTCxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkRPTUFJTixcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlJPTEUsIC8vIHRoYXQgaXMgdGhlIG1vc3Qgc2V2ZXJlIGZpbHRlclxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk9DQ1VQQU5UOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ET01BSU4sXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuTEVWRUwsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5IQVNIVEFHLFxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLlZJU0lUT1I6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuWk9ORSxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkxFVkVMLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuRE9NQUlOLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuUk9MRSxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkhBU0hUQUcsXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBjYXNlIFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTCwgRmlsdGVyVHlwZS5IQVNIVEFHXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLkdVSURFX01VU0VVTTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuTEVWRUxdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICAgIG9iamVjdHM6IE9iamVjdDNEW10sXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxPYmplY3QzRFtdPiB7XHJcbiAgICAgICAgY29uc3QgZmluYWxPYmplY3QzRHM6IE9iamVjdDNEW10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IE9iamVjdDNEW10gPSBvYmplY3RzO1xyXG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcclxuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xyXG4gICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyhvYmopICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZC5pbmNsdWRlcyhvYmopXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsT2JqZWN0M0RzLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbmFsT2JqZWN0M0RzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpbHRlclRpY2tldHNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgICAgdGlja2V0czogVGlja2V0W10sXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxUaWNrZXRbXT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmFsVGlja2V0czogVGlja2V0W10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcclxuICAgICAgICBsZXQgcm9sZUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XHJcbiAgICAgICAgbGV0IGxldmVsRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcclxuICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNwYWNlTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkhpZ2hlc3QgbGV2ZWw6IFwiLCBoaWdoZXN0TGVsZWwsIFwiLCBIaWdoZXN0IFJvbGU6IFwiLCBoaWdoZXN0Um9sZSlcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ET01BSU4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0uZG9tYWlucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMgPSBbLi4uZG9tYWlucywgLi4ubS5kb21haW5zXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWxsRG9tYWluc0ZpbHRlcmVkID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZCBvZiBkb21haW5zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RG9tRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGlja2V0c0J5RG9tYWluKHRpY2tldHMsIGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsRG9tYWluc0ZpbHRlcmVkID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFsbERvbWFpbnNGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50RG9tRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkID0gYWxsRG9tYWluc0ZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlJPTEUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGVNaXNzaW9uID0gY3VycmVudFNwYWNlTWlzc2lvbnMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtKSA9PiBtLnJvbGUgPT09IGhpZ2hlc3RSb2xlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQgPSB0aGlzLmZpbHRlclRpY2tldHNGb3JNaXNzaW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RSb2xlTWlzc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdExlbGVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8ga2VlcCBvbmx5IHRpY2tldHMgcHJlc2VudCBpbiBhbGwgZmlsdGVyZWQgYXJyYXlzXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhkb21GaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyb2xlRmlsdGVyZWQpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGV2ZWxGaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh6b25lRmlsdGVyZWQpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0aWMgb2YgbGV2ZWxGaWx0ZXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQuaW5jbHVkZXModGljKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFRpY2tldHMucHVzaCh0aWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaW5hbFRpY2tldHMpO1xyXG4gICAgICAgIHJldHVybiBmaW5hbFRpY2tldHM7XHJcbiAgICB9XHJcblxyXG4gICAgc3Vic2NyaWJlVG9EYXRhRmlsdGVyVXBkYXRlKFxyXG4gICAgICAgIG5leHQ/OiAodmFsdWU6IGFueSkgPT4gdm9pZCxcclxuICAgICAgICBlcnJvcj86IChlcnJvcjogYW55KSA9PiB2b2lkLFxyXG4gICAgICAgIGNvbXBsZXRlPzogKCkgPT4gdm9pZCxcclxuICAgICk6IFN1YnNjcmlwdGlvbiB7XHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMudXBkYXRlRGF0ZUZpbHRlci5zdWJzY3JpYmUobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcclxuICAgICAgICByZXR1cm4gcztcclxuICAgIH1cclxuXHJcbiAgICBkYXRlRmlsdGVyVXBkYXRlZChkYXRlUmFuZ2U6IERhdGVbXSB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlRmlsdGVyID0gZGF0ZVJhbmdlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZUZpbHRlci5uZXh0KGRhdGVSYW5nZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyT2JqZWN0c0ZvckRhdGVSYW5nZShvYmplY3RzOiBhbnlbXSwgZGF0ZVJhbmdlOiBEYXRlW10pOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdHMuZmlsdGVyKChvYmplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEF0RGF0ZSA9IG5ldyBEYXRlKG9iamVjdC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJNZWFzdXJlbWVudHNGb3JEYXRlUmFuZ2UoXHJcbiAgICAgICAgbWVhc3VyZW1lbnRzOiBNZWFzdXJlbWVudFtdLFxyXG4gICAgICAgIGRhdGVSYW5nZTogRGF0ZVtdLFxyXG4gICAgKTogTWVhc3VyZW1lbnRbXSB7XHJcbiAgICAgICAgcmV0dXJuIG1lYXN1cmVtZW50cy5maWx0ZXIoKG1lYXN1cmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEF0RGF0ZSA9IG5ldyBEYXRlKG1lYXN1cmUuY29tbWVudC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yWm9uZShcclxuICAgICAgICBvYmplY3RzOiBhbnlbXSwgLy8gVE9ETzogcmVtb3ZlIGFueSBoZXJlLi5cclxuICAgICAgICB6b25lSUQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICAgICAgem9uZTogWm9uZSA9IG51bGwsXHJcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPYmplY3RzID0gW107XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIG9iamVjdHMubWFwKGFzeW5jIChvYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtwb2ldID0gb2JqZWN0LnBvaXMuaXRlbXM7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pICYmIHpvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoem9uZS5zd2VlcElEcyAmJiB6b25lLnN3ZWVwSURzLmluY2x1ZGVzKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucG9pU2VydmljZS5wb2lJc1ZpcnR1YWwocG9pKSAmJiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJGTE9PUlwiICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgaW5jbHVkZSBpbiBGbG9vciB6b25lIG9ubHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqZWN0cy5wdXNoKG9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBvaVNlcnZpY2UucG9pSXNWaXJ0dWFsKHBvaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqZWN0cy5wdXNoKG9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pICYmICF6b25lICYmIHpvbmVJRCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHpvbmVzID0gYXdhaXQgdGhpcy56b25lU2VydmljZS5nZXRab25lc0Zvck9iamVjdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lcyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lcy5zb21lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHpvbmVfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVfLmlkID09PSB6b25lSUQgfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6b25lXy5wYXJlbnRJRCA9PT0gem9uZUlELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkT2JqZWN0cy5wdXNoKG9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZE9iamVjdHM7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcclxuICAgICAgICBlcXVpcG1lbnRzOiBFcXVpcG1lbnRbXSxcclxuICAgICAgICBkb21haW5JRExpc3Q6IHN0cmluZ1tdLFxyXG4gICAgKTogRXF1aXBtZW50W10ge1xyXG4gICAgICAgIGxldCBmaWx0ZXJlZCA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcmVkQnlEb21haW4gPSBlcXVpcG1lbnRzLmZpbHRlcigoZXF1aXApID0+XHJcbiAgICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5RG9tYWluXTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gZXF1aXBtZW50cy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChlcXVpcCkgPT5cclxuICAgICAgICAgICAgICAgIGVxdWlwLmRvbWFpbiAmJlxyXG4gICAgICAgICAgICAgICAgZXF1aXAuZG9tYWluLnBhcmVudElEICYmXHJcbiAgICAgICAgICAgICAgICBkb21haW5JRExpc3QuaW5jbHVkZXMoZXF1aXAuZG9tYWluLnBhcmVudElEKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5UGFyZW50RG9tYWluXTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGZpbHRlcmVkKTtcclxuICAgIH1cclxuXHJcblxyXG4gIC8vIE5vdCBpbXBsZW1lbnRlZCB5ZXQhXHJcbiAgLy8gZmlsdGVyT2JqZWN0czNEQnlEb21haW5MaXN0KFxyXG4gIC8vICAgb2JqZWN0czNEOiBPYmplY3QzRFtdLFxyXG4gIC8vICAgZG9tYWluSURMaXN0OiBzdHJpbmdbXSxcclxuICAvLyApOiBPYmplY3QzRFtdIHtcclxuICAvLyAgIGxldCBmaWx0ZXJlZCA9IFtdO1xyXG4gIC8vICAgY29uc3QgZmlsdGVyZWRCeURvbWFpbiA9IG9iamVjdHMzRC5maWx0ZXIoKGVxdWlwKSA9PlxyXG4gIC8vICAgICBkb21haW5JRExpc3QuaW5jbHVkZXMoZXF1aXAuZG9tYWluSUQpLFxyXG4gIC8vICAgKTtcclxuICAvLyAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5RG9tYWluXTtcclxuICAvLyAgIGNvbnN0IGZpbHRlcmVkQnlQYXJlbnREb21haW4gPSBvYmplY3RzM0QuZmlsdGVyKFxyXG4gIC8vICAgICAob2JqKSA9PlxyXG4gIC8vICAgICAgIG9iai5kb21haW4gJiZcclxuICAvLyAgICAgICBvYmouZG9tYWluLnBhcmVudElEICYmXHJcbiAgLy8gICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKG9iai5kb21haW4ucGFyZW50SUQpLFxyXG4gIC8vICAgKTtcclxuICAvLyAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5UGFyZW50RG9tYWluXTtcclxuICAvLyAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoZmlsdGVyZWQpO1xyXG4gIC8vIH1cclxuXHJcbiAgZmlsdGVyRXF1aXBtZW50c0ZvclRlcm0oZXF1aXBzOiBFcXVpcG1lbnRbXSwgdGVybTogc3RyaW5nKTogRXF1aXBtZW50W10ge1xyXG4gICAgICAgIC8vIGZpbHRlciBkb21haW5zXHJcbiAgICAgICAgbGV0IGJ5RG9tYWluID0gZXF1aXBzLmZpbHRlcigoZXEpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVxLmRvbWFpbiAmJiBlcS5kb21haW4ubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZERvbWFpbiA9IGVxLmRvbWFpbi5uYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZXYgPSBsZXZlbnNodGVpbihub3JtYWxpemVkRG9tYWluLCB0ZXJtKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBsZXYgPD0gMiB8fCBub3JtYWxpemVkRG9tYWluLmluY2x1ZGVzKHRlcm0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBieVBhcmVudERvbWFpbiA9IGVxdWlwcy5maWx0ZXIoKGVxKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcS5kb21haW4gJiYgZXEuZG9tYWluLnBhcmVudElEKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub3JtYWxpemVkUGFyZW50ID0gZXEuZG9tYWluLnBhcmVudC5uYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZXYgPSBsZXZlbnNodGVpbihub3JtYWxpemVkUGFyZW50LCB0ZXJtKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBsZXYgPD0gMiB8fCBub3JtYWxpemVkUGFyZW50LmluY2x1ZGVzKHRlcm0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBieURvbWFpbiA9IFsuLi5ieURvbWFpbiwgLi4uYnlQYXJlbnREb21haW5dO1xyXG4gICAgICAgIC8vIGZpbHRlciBuYW1lXHJcbiAgICAgICAgbGV0IGJ5TmFtZSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHRlcm1zID0gdGVybS5zcGxpdChcIiBcIikuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubGVuZ3RoID4gMik7XHJcbiAgICAgICAgZm9yIChjb25zdCBlcSBvZiBlcXVpcHMpIHtcclxuICAgICAgICAgICAgY29uc3Qgd29yZHMgPSBlcS5uYW1lXHJcbiAgICAgICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAgICAgLnNwbGl0KFwiIFwiKVxyXG4gICAgICAgICAgICAgICAgLmZpbHRlcigodG9rZW4pID0+IHRva2VuLmxlbmd0aCA+IDIpO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgdG9rZW4gb2YgdGVybXMpIHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgd29yZCBvZiB3b3Jkcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChsZXZlbnNodGVpbih0b2tlbiwgd29yZCkgPD0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVkLnB1c2godHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGggPT09IHRlcm1zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgYnlOYW1lLnB1c2goZXEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBieU5hbWVTaW1wbGUgPSBlcXVpcHMuZmlsdGVyKChlcSkgPT5cclxuICAgICAgICAgICAgZXEubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYnlOYW1lID0gWy4uLmJ5TmFtZSwgLi4uYnlOYW1lU2ltcGxlXTtcclxuICAgICAgICAvLyBieSBzZXJpYWwgbnVtYmVyXHJcbiAgICAgICAgY29uc3QgYnlTZXJpYWxOdW1iZXIgPSBlcXVpcHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXEpID0+IGVxLnNlcmlhbE51bWJlciAmJiBlcS5zZXJpYWxOdW1iZXIudG9Mb3dlckNhc2UoKSA9PT0gdGVybSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFsuLi5ieURvbWFpbiwgLi4uYnlOYW1lLCAuLi5ieVNlcmlhbE51bWJlcl07XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChyZXN1bHQpO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlclRpY2tldHNGb3JUZXJtKHRpY2tldHM6IFRpY2tldFtdLCB0ZXJtOiBzdHJpbmcpOiBUaWNrZXRbXSB7XHJcbiAgICAgICAgLy8gZmlsdGVyIHRlcm0gaW4gdGl0bGUgYW5kIGRlc2NyaXB0aW9uXHJcbiAgICAgICAgY29uc3QgYnlUaXRsZSA9IHRoaXMuZmlsdGVyT2JqZWN0c0ZvclRlcm0odGlja2V0cywgdGVybSk7XHJcbiAgICAgICAgLy8gYnkgZXF1aXBtZW50XHJcbiAgICAgICAgY29uc3QgYnlFcXVpcG1lbnQgPSB0aWNrZXRzLmZpbHRlcihcclxuICAgICAgICAgICAgKHRpY2tldCkgPT5cclxuICAgICAgICAgICAgICAgIHRpY2tldC5lcXVpcG1lbnRzICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckVxdWlwbWVudHNGb3JUZXJtKHRpY2tldC5lcXVpcG1lbnRzLCB0ZXJtKS5sZW5ndGggPlxyXG4gICAgICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKFsuLi5ieVRpdGxlLCAuLi5ieUVxdWlwbWVudF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlckxvY2F0aW9uc0ZvclRlcm0obG9jYXRpb25zOiBTcGFjZVtdLCB0ZXJtOiBzdHJpbmcpOiBTcGFjZVtdIHtcclxuICAgICAgICAvLyBieSBuYW1lXHJcbiAgICAgICAgY29uc3QgYnlOYW1lID0gbG9jYXRpb25zLmZpbHRlcigobG9jKSA9PlxyXG4gICAgICAgICAgICBsb2MubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYnkgYWRkcmVzc1xyXG4gICAgICAgIGNvbnN0IGJ5QWRkcmVzcyA9IGxvY2F0aW9ucy5maWx0ZXIoKGxvYykgPT5cclxuICAgICAgICAgICAgbG9jLmFkZHJlc3Nlcy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlOYW1lLCAuLi5ieUFkZHJlc3NdKTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJPcmdhbmlzYXRpb25zRm9yVGVybShcclxuICAgICAgICBvcmdzOiBPcmdhbmlzYXRpb25bXSxcclxuICAgICAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICApOiBPcmdhbmlzYXRpb25bXSB7XHJcbiAgICAgICAgY29uc3QgYnlOYW1lID0gb3Jncy5maWx0ZXIoKG9yZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB3b3JkcyA9IG9yZy5uYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgd29yZHMuc29tZShcclxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXHJcbiAgICAgICAgICAgICAgICApIHx8IG9yZy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYnlOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlclVzZXJzRm9yVGVybSh1c2VyczogUHJvZmlsZUVudGl0eVtdLCB0ZXJtOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBieU5hbWUgPSB1c2Vycy5maWx0ZXIoKHVzZXIpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgd29yZHMgPSB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgd29yZHMuc29tZShcclxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXHJcbiAgICAgICAgICAgICAgICApIHx8IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBieU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyRmVhdHVyZXNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXSxcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPEZlYXR1cmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmFsRmVhdHVyZXM6IEZlYXR1cmVbXSA9IFtdO1xyXG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBsZXQgaGFzaHRhZ0ZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xyXG4gICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0TGVsZWwgPVxyXG4gICAgICAgICAgICAgICAgICAgIGdldEhpZ2hlc3RMZXZlbEZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpZ2hlc3RSb2xlID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5MRVZFTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbEZpbHRlcmVkID0gdGhpcy5maWx0ZXJPYmplY3RzQnlMZXZlbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdExlbGVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkID0gYXdhaXQgdGhpcy5hcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuSEFTSFRBRykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNodGFnRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGZWF0dXJlc0J5SGFzaHRhZ3NBbmRMb2NhbGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNodGFnRmlsdGVyZWQuaW5jbHVkZXMoZmVhdHVyZSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKGZlYXR1cmUpXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsRmVhdHVyZXMucHVzaChmZWF0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbmFsRmVhdHVyZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRmVhdHVyZXNGb3JUZXJtKGZlYXR1cmVzOiBGZWF0dXJlW10sIHRlcm06IHN0cmluZyk6IEZlYXR1cmVbXSB7XHJcbiAgICAgICAgLy8gZmlsdGVyIHRlcm0gaW4gdGl0bGVcclxuICAgICAgICBjb25zdCBieVRpdGxlID0gdGhpcy5maWx0ZXJPYmplY3RzRm9yVGVybShmZWF0dXJlcywgdGVybSk7XHJcbiAgICAgICAgLy8gYnkgY29tbWVudHNcclxuICAgICAgICBjb25zdCBieUNvbW1lbnQgPSBmZWF0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJPYmplY3RzRm9yVGVybShmZWF0dXJlLmNvbW1lbnRzLml0ZW1zLCB0ZXJtKS5sZW5ndGggPlxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5VGl0bGUsIC4uLmJ5Q29tbWVudF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvYmplY3RzIEFycmF5IG9mIENvbW1lbnRzLCBUaWNrZXRzLCBGZWF0dXJlcy4gT2JsaWdhdG9yeSBwcm9wb3J0aWVzOiB0aXRsZSwgZGVzY3JpcHRpb25cclxuICAgICAqIEBwYXJhbSB0ZXJtIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBmaWx0ZXJPYmplY3RzRm9yVGVybShvYmplY3RzOiBhbnlbXSwgdGVybTogc3RyaW5nKTogYW55W10ge1xyXG4gICAgICAgIC8vIGZpbHRlciB0ZXJtIGluIHRpdGxlXHJcbiAgICAgICAgY29uc3QgYnlUaXRsZSA9IG9iamVjdHMuZmlsdGVyKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZmVhdHVyZS50aXRsZS50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIHdvcmRzLnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgKHdvcmQpID0+IHdvcmQubGVuZ3RoID4gMiAmJiBsZXZlbnNodGVpbih3b3JkLCB0ZXJtKSA8PSAxLFxyXG4gICAgICAgICAgICAgICAgKSB8fCBmZWF0dXJlLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyB0ZXJtIHByZXNlbnQgaW4gZGVzY3JpcHRpb25cclxuICAgICAgICBjb25zdCBieURlc2NyaXB0aW9uID0gb2JqZWN0cy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5kZXNjcmlwdGlvbiAmJlxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlUaXRsZSwgLi4uYnlEZXNjcmlwdGlvbl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlck1pc3Npb25CeVN0YXJ0VGltZURhdGVGb3JEYXRlUmFuZ2UoXHJcbiAgICAgICAgbWlzc2lvbnM6IGFueVtdLFxyXG4gICAgICAgIGRhdGVSYW5nZTogRGF0ZVtdLFxyXG4gICAgKTogYW55W10ge1xyXG4gICAgICAgIHJldHVybiBtaXNzaW9ucy5maWx0ZXIoKG1pc3Npb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlVGltZSA9IG5ldyBEYXRlKG1pc3Npb24uc3RhcnREYXRlVGltZSk7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGVUaW1lID49IGRhdGVSYW5nZVswXSAmJiBzdGFydERhdGVUaW1lIDw9IGRhdGVSYW5nZVsxXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxyXG4gICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zOiBNaXNzaW9uW10sXHJcbiAgICAgICAgb2JqZWN0czogYW55W10sXHJcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgY29uc3QgYWxsb3dlZFpvbmVzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBtaXNzaW9uIG9mIGN1cnJlbnRTcGFjZU1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIGlmIChtaXNzaW9uLnpvbmVJRCkge1xyXG4gICAgICAgICAgICAgICAgYWxsb3dlZFpvbmVzLnB1c2gobWlzc2lvbi56b25lSUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhbGxvd2VkWm9uZXMubGVuZ3RoID09PSBjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGFsbFpvbmVGaWx0ZXJlZCA9IFtdO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIGFsbG93ZWRab25lcy5tYXAoYXN5bmMgKHpvbmVJRCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRab25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBhbGxab25lRmlsdGVyZWQgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFsbFpvbmVGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudFpvbmVGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoYWxsWm9uZUZpbHRlcmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyRXF1aXBtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgZXF1aXBzOiBFcXVpcG1lbnRbXSxcclxuICAgICk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcclxuICAgICAgICBjb25zdCBmaW5hbEVxdWlwczogRXF1aXBtZW50W10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IEVxdWlwbWVudFtdID0gZXF1aXBzO1xyXG4gICAgICAgIGNvbnN0IHJvbGVGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XHJcbiAgICAgICAgY29uc3QgbGV2ZWxGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XHJcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcclxuICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNwYWNlTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkhpZ2hlc3QgbGV2ZWw6IFwiLCBoaWdoZXN0TGVsZWwsIFwiLCBIaWdoZXN0IFJvbGU6IFwiLCBoaWdoZXN0Um9sZSlcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ET01BSU4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobS5kb21haW5zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tYWlucyA9IFsuLi5kb21haW5zLCAuLi5tLmRvbWFpbnNdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWxsRG9tYWluc0ZpbHRlcmVkID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RG9tRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KGVxdWlwcywgZG9tYWlucyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbERvbWFpbnNGaWx0ZXJlZCA9IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFsbERvbWFpbnNGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN1cnJlbnREb21GaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRmlsdGVyZWQgPSBhbGxEb21haW5zRmlsdGVyZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuUk9MRSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zdCBoaWdoZXN0Um9sZU1pc3Npb24gPSBjdXJyZW50U3BhY2VNaXNzaW9ucy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgKG0pID0+IG0ucm9sZSA9PT0gaGlnaGVzdFJvbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE9cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETywgZXF1aXBtZW50IGRvZXMgbm90IGhhdmUgbGV2ZWxcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuWk9ORSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcXVpcHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0aWMgb2YgbGV2ZWxGaWx0ZXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQuaW5jbHVkZXModGljKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbEVxdWlwcy5wdXNoKHRpYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaW5hbEVxdWlwcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJNZWFzdXJlbWVudHNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgICAgIGNvbW1lbnRzOiBDb21tZW50W10sXHJcbiAgICApOiBQcm9taXNlPENvbW1lbnRbXT4ge1xyXG4gICAgICAgIGxldCBmaW5hbE1lYXN1cmVtZW50czogQ29tbWVudFtdID0gW107XHJcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogQ29tbWVudFtdID0gY29tbWVudHM7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcclxuICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNwYWNlTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGUgPVxyXG4gICAgICAgICAgICAgICAgICAgIGdldEhpZ2hlc3RSb2xlRm9yTWlzc2lvbnMoY3VycmVudFNwYWNlTWlzc2lvbnMpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKGhpZ2hlc3RSb2xlKTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkID0gYXdhaXQgdGhpcy5hcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZmluYWxNZWFzdXJlbWVudHMgPSB6b25lRmlsdGVyZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbmFsTWVhc3VyZW1lbnRzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGlzT2JqZWN0QWxsb3dlZEZvclVzZXJJblNwYWNlKFxyXG4gICAgICAgIG9iamVjdDogT2JqZWN0LFxyXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKHNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKG1pc3Npb24ucm9sZSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwgJiZcclxuICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIFwibGV2ZWxcIilcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZXZlbEZpbHRlcmVkID0gdGhpcy5maWx0ZXJPYmplY3RzQnlMZXZlbChcclxuICAgICAgICAgICAgICAgICAgICBbb2JqZWN0XSxcclxuICAgICAgICAgICAgICAgICAgICBtaXNzaW9uLmxldmVsLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChsZXZlbEZpbHRlcmVkLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgW21pc3Npb25dLFxyXG4gICAgICAgICAgICAgICAgICAgIFtvYmplY3RdLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmICh6b25lRmlsdGVyZWQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlclRlbXBsYXRlc0ZvclRlcm0obWlzc2lvbnM6IE1pc3Npb25bXSwgdGVybTogc3RyaW5nKTogTWlzc2lvbltdIHtcclxuICAgICAgICAvLyB0ZXJtIHByZXNlbnQgaW4gZGVzY3JpcHRpb25cclxuICAgICAgICBjb25zdCBieURlc2NyaXB0aW9uID0gbWlzc2lvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAobWlzKSA9PlxyXG4gICAgICAgICAgICAgICAgbWlzLmRlc2NyaXB0aW9uICYmIG1pcy5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYnkgdXNlciBsYXN0TmFtZSB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUgdmlzaXQ6XHJcbiAgICAgICAgLy8gbWV0YWRhdGE6IFwie1xcXCJmaXJzdE5hbWVcXFwiOlxcXCJcXFwiLFxcXCJsYXN0TmFtZVxcXCI6XFxcIlZpc2l0ZSBkdSA1IEp1aWxsZXRcXFwifVwiXHJcbiAgICAgICAgY29uc3QgdXNlclByb2ZpbGVzID0gbWlzc2lvbnMubWFwKChtaXMpID0+IG5ldyBQcm9maWxlRW50aXR5KG1pcy51c2VyKSk7XHJcbiAgICAgICAgY29uc3QgYnlVc2VyTGFzdG5hbWUgPSB0aGlzLmZpbHRlclVzZXJzRm9yVGVybSh1c2VyUHJvZmlsZXMsIHRlcm0pO1xyXG4gICAgICAgIGNvbnN0IHVzZXJJZHMgPSBuZXcgU2V0KGJ5VXNlckxhc3RuYW1lLm1hcCgodXNlcikgPT4gdXNlci5pZCkpO1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb25zQnlVc2VyID0gbWlzc2lvbnMuZmlsdGVyKChtaXMpID0+XHJcbiAgICAgICAgICAgIHVzZXJJZHMuaGFzKG1pcy51c2VySUQpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlEZXNjcmlwdGlvbiwgLi4ubWlzc2lvbnNCeVVzZXJdKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yU3dlZXAoXHJcbiAgICAgICAgb2JqZWN0czogYW55W10sXHJcbiAgICAgICAgb2JqZWN0VHlwZTogUG9pVHlwZSxcclxuICAgICAgICBzd2VlcDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxhbnlbXT4ge1xyXG4gICAgICAgIGxldCBmaWx0ZXJlZCA9IFtdO1xyXG4gICAgICAgIHN3aXRjaCAob2JqZWN0VHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuRVFVSVBNRU5UOlxyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9pcyA9XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmdldFBvaXNCeU1hdHRlcnBvcnRTd2VlcEJ5VHlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dlZXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFR5cGUsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVxdWlwSURzID0gbmV3IFNldChwb2lzLm1hcCgocG9pKSA9PiBwb2kuZWxlbWVudElEKSk7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJlZCA9IG9iamVjdHMuZmlsdGVyKChvYmplY3QpID0+IGVxdWlwSURzLmhhcyhvYmplY3QuaWQpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJGZWF0dXJlc0J5SGFzaHRhZ3NBbmRMb2NhbGUoXHJcbiAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnM6IE1pc3Npb25bXSxcclxuICAgICAgICBmZWF0dXJlczogRmVhdHVyZVtdLFxyXG4gICAgKTogRmVhdHVyZVtdIHtcclxuICAgICAgICBjb25zdCBbY3VycmVudE1pc3Npb25dID0gY3VycmVudFNwYWNlTWlzc2lvbnM7XHJcbiAgICAgICAgLy8gZmlsdGVyIGJ5IGxvY2FsZVxyXG4gICAgICAgIGxldCBmaWx0ZXJlZExvY2FsZSA9IFsuLi5mZWF0dXJlc107XHJcbiAgICAgICAgaWYgKGN1cnJlbnRNaXNzaW9uLmxvY2FsZSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJlZExvY2FsZSA9IGZlYXR1cmVzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChmZWF0dXJlKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGZlYXR1cmUubG9jYWxlICYmIGZlYXR1cmUubG9jYWxlID09PSBjdXJyZW50TWlzc2lvbi5sb2NhbGUsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGZpbHRlciBieSBoYXNodGFnc1xyXG4gICAgICAgIGlmIChjdXJyZW50TWlzc2lvbi5oYXNodGFncyAmJiBjdXJyZW50TWlzc2lvbi5oYXNodGFncy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQnlIYXNodGFncyA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZlYXR1cmUgb2YgZmlsdGVyZWRMb2NhbGUpIHtcclxuICAgICAgICAgICAgICAgIGlmICghZmVhdHVyZS5oYXNodGFncyB8fCBmZWF0dXJlLmhhc2h0YWdzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEZlYXR1cmUgd2l0aG91dCBoYXNodGFnIGlzIGF2YWlsYWJsZSBmb3IgZXZlcnlib2R5XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRCeUhhc2h0YWdzLnB1c2goZmVhdHVyZSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRNaXNzaW9uLmhhc2h0YWdzLmV2ZXJ5KChoYXNodGFnKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLmhhc2h0YWdzLmluY2x1ZGVzKGhhc2h0YWcpLFxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkQnlIYXNodGFncy5wdXNoKGZlYXR1cmUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZEJ5SGFzaHRhZ3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZExvY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJGZWF0dXJlc0Zvck1pc3Npb25XaXRob3V0Wm9uZShcclxuICAgICAgICBmZWF0dXJlczogRmVhdHVyZVtdLFxyXG4gICAgICAgIG1pc3Npb246IE1pc3Npb24sXHJcbiAgICApOiBGZWF0dXJlW10ge1xyXG4gICAgICAgIGNvbnN0IGZpbmFsRmVhdHVyZXM6IEZlYXR1cmVbXSA9IFtdO1xyXG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBsZXQgaGFzaHRhZ0ZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuXHJcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0ZvclJvbGUobWlzc2lvbi5yb2xlKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5MRVZFTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbEZpbHRlcmVkID0gdGhpcy5maWx0ZXJPYmplY3RzQnlMZXZlbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlzc2lvbi5sZXZlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIGZlYXR1cmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkhBU0hUQUcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzaHRhZ0ZpbHRlcmVkID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRmVhdHVyZXNCeUhhc2h0YWdzQW5kTG9jYWxlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaXNzaW9uXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNodGFnRmlsdGVyZWQuaW5jbHVkZXMoZmVhdHVyZSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKGZlYXR1cmUpXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsRmVhdHVyZXMucHVzaChmZWF0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaW5hbEZlYXR1cmVzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
603
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsSSxPQUFPLEVBT0gsT0FBTyxFQUNQLGFBQWEsRUFDYixVQUFVLEVBT2IsTUFBTSxrQkFBa0IsQ0FBQztBQVkxQixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFSekMsSUFBSyxVQU9KO0FBUEQsV0FBSyxVQUFVO0lBQ1gsK0JBQWlCLENBQUE7SUFDakIsNkJBQWUsQ0FBQTtJQUNmLDJCQUFhLENBQUE7SUFDYiwyQkFBYSxDQUFBO0lBQ2IsNkJBQWUsQ0FBQTtJQUNmLGlDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFQSSxVQUFVLEtBQVYsVUFBVSxRQU9kO0FBS0QsTUFBTSxPQUFPLGFBQWE7SUFLdEIsWUFDWSxXQUE0QixFQUM1QixXQUF3QixFQUN4QixVQUFzQjtRQUZ0QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVAxQixxQkFBZ0IsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQVF0RCxDQUFDO0lBRUwscUJBQXFCLENBQUMsZUFBeUIsRUFBRSxNQUFjO1FBQzNELE9BQU8sZUFBZSxDQUFDLE1B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QUNqQyxJQUNJLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUNqQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUNoQztnQkFDRSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQy9CO1NBQ0o7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDOzsyR0EzeUJRLGFBQWE7K0dBQWIsYUFBYSxjQUZWLE1BQU07NEZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXHJcbi8qIGVzbGludC1kaXNhYmxlIGd1YXJkLWZvci1pbiAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBnZXRMZXZlbHNCZWxvdywgZ2V0SGlnaGVzdExldmVsRm9yTWlzc2lvbnMsIGdldEhpZ2hlc3RSb2xlRm9yTWlzc2lvbnMsIGZpbHRlclVuaXF1ZUFycmF5QnlJRCB9IGZyb20gXCIuLi9oZWxwZXJzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuICAgIFpvbmUsXHJcbiAgICBFcXVpcG1lbnQsXHJcbiAgICBMZXZlbFN0YXR1cyxcclxuICAgIE1lYXN1cmVtZW50LFxyXG4gICAgTWlzc2lvbixcclxuICAgIE9yZ2FuaXNhdGlvbixcclxuICAgIFBvaVR5cGUsXHJcbiAgICBQcm9maWxlRW50aXR5LFxyXG4gICAgUm9sZVN0YXR1cyxcclxuICAgIFNwYWNlLFxyXG4gICAgVGlja2V0LFxyXG4gICAgRGJPYmplY3RUeXBlLFxyXG4gICAgRmVhdHVyZSxcclxuICAgIENvbW1lbnQsXHJcbiAgICBWaXNpdFRlbXBsYXRlLCBPYmplY3QzRFxyXG59IGZyb20gXCIuLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBvaVNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvcG9pLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuL3VzZXIuc2VydmljZVwiO1xyXG5lbnVtIEZpbHRlclR5cGUge1xyXG4gICAgRE9NQUlOID0gXCJET01BSU5cIixcclxuICAgIExFVkVMID0gXCJMRVZFTFwiLFxyXG4gICAgUk9MRSA9IFwiUk9MRVwiLFxyXG4gICAgWk9ORSA9IFwiWk9ORVwiLFxyXG4gICAgU1BBQ0UgPSBcIlNQQUNFXCIsXHJcbiAgICBIQVNIVEFHID0gXCJIQVNIVEFHXCIsXHJcbn1cclxuaW1wb3J0IGxldmVuc2h0ZWluIGZyb20gJ2pzLWxldmVuc2h0ZWluJztcclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgdXBkYXRlRGF0ZUZpbHRlcjogU3ViamVjdDxEYXRlW10+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudERhdGVGaWx0ZXI6IERhdGVbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzQnlEb21haW4odGlja2V0c1RvRmlsdGVyOiBUaWNrZXRbXSwgZG9tYWluOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGlja2V0c1RvRmlsdGVyLmZpbHRlcigodGljKSA9PiB0aWMuZG9tYWluSUQgPT09IGRvbWFpbik7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyT2JqZWN0c0J5TGV2ZWwob2JqZWN0c1RvRmlsdGVyOiBhbnlbXSwgbGV2ZWw6IExldmVsU3RhdHVzKTogYW55W10ge1xyXG4gICAgICAgIGNvbnN0IHZpc2libGVMZXZlbHMgPSBnZXRMZXZlbHNCZWxvdyhsZXZlbCk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBvYmplY3RzVG9GaWx0ZXIuZmlsdGVyKCh0aWMpID0+XHJcbiAgICAgICAgICAgIHZpc2libGVMZXZlbHMuaW5jbHVkZXModGljLmxldmVsKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzRm9yTWlzc2lvbihcclxuICAgICAgICB0aWNrZXRzVG9GaWx0ZXI6IFRpY2tldFtdLFxyXG4gICAgICAgIG1pc3Npb246IE1pc3Npb24sXHJcbiAgICApOiBUaWNrZXRbXSB7XHJcbiAgICAgICAgY29uc3QgbWFuYWdlclJvbGVzOiBSb2xlU3RhdHVzW10gPSBbXHJcbiAgICAgICAgICAgIFJvbGVTdGF0dXMuTUFOQUdFUixcclxuICAgICAgICAgICAgUm9sZVN0YXR1cy5BRE1JTixcclxuICAgICAgICAgICAgUm9sZVN0YXR1cy5PV05FUixcclxuICAgICAgICBdO1xyXG4gICAgICAgIGlmICghbWFuYWdlclJvbGVzLmluY2x1ZGVzKG1pc3Npb24ucm9sZSkpIHtcclxuICAgICAgICAgICAgaWYgKG1pc3Npb24ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTRVJWSUNFIGNhbiBzZWUgdGlja2V0cyB0byB3aGljaCBoZSBpcyBhc3NpZ25lZFxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGlja2V0c0Fzc2lnbmVkID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGlja2V0c1RvRmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQuYXNzaWduZWVzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhc3NpZ25tZW50IG9mIHQuYXNzaWduZWVzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzaWdubWVudC5taXNzaW9uSUQgPT09IG1pc3Npb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRzQXNzaWduZWQucHVzaCh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aWNrZXRzQXNzaWduZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gT0NDVVBBTlQgYW5kIFZJU0lUT1IgY2FuIHNlZSBvbmx5IHRpY2tldHMgdGhhdCB0aGV5IGNyZWF0ZWRcclxuICAgICAgICAgICAgcmV0dXJuIHRpY2tldHNUb0ZpbHRlci5maWx0ZXIoKHRpY2tldCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpY2tldC5vd25lck1pc3Npb25JRCA9PT0gbWlzc2lvbi5pZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aWNrZXRzVG9GaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsdGVyc0ZvclJvbGUocm9sZTogUm9sZVN0YXR1cyk6IEZpbHRlclR5cGVbXSB7XHJcbiAgICAgICAgc3dpdGNoIChyb2xlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5BRE1JTjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5NQU5BR0VSOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLlpPTkUsIEZpbHRlclR5cGUuTEVWRUxdO1xyXG4gICAgICAgICAgICBjYXNlIFJvbGVTdGF0dXMuT1dORVI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5TRVJWSUNFOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5MRVZFTCxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkRPTUFJTixcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlJPTEUsIC8vIHRoYXQgaXMgdGhlIG1vc3Qgc2V2ZXJlIGZpbHRlclxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk9DQ1VQQU5UOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ET01BSU4sXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuTEVWRUwsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5IQVNIVEFHLFxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLlZJU0lUT1I6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuWk9ORSxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkxFVkVMLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuRE9NQUlOLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuUk9MRSxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkhBU0hUQUcsXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBjYXNlIFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTCwgRmlsdGVyVHlwZS5IQVNIVEFHXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLkdVSURFX01VU0VVTTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuTEVWRUxdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICAgIG9iamVjdHM6IE9iamVjdDNEW10sXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxPYmplY3QzRFtdPiB7XHJcbiAgICAgICAgY29uc3QgZmluYWxPYmplY3QzRHM6IE9iamVjdDNEW10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IE9iamVjdDNEW10gPSBvYmplY3RzO1xyXG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcclxuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xyXG4gICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyhvYmopICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZC5pbmNsdWRlcyhvYmopXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsT2JqZWN0M0RzLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbmFsT2JqZWN0M0RzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpbHRlclRpY2tldHNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgICAgdGlja2V0czogVGlja2V0W10sXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxUaWNrZXRbXT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmFsVGlja2V0czogVGlja2V0W10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcclxuICAgICAgICBsZXQgcm9sZUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XHJcbiAgICAgICAgbGV0IGxldmVsRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcclxuICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNwYWNlTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkhpZ2hlc3QgbGV2ZWw6IFwiLCBoaWdoZXN0TGVsZWwsIFwiLCBIaWdoZXN0IFJvbGU6IFwiLCBoaWdoZXN0Um9sZSlcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ET01BSU4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0uZG9tYWlucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMgPSBbLi4uZG9tYWlucywgLi4ubS5kb21haW5zXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWxsRG9tYWluc0ZpbHRlcmVkID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZCBvZiBkb21haW5zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RG9tRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGlja2V0c0J5RG9tYWluKHRpY2tldHMsIGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsRG9tYWluc0ZpbHRlcmVkID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFsbERvbWFpbnNGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50RG9tRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkID0gYWxsRG9tYWluc0ZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlJPTEUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGVNaXNzaW9uID0gY3VycmVudFNwYWNlTWlzc2lvbnMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtKSA9PiBtLnJvbGUgPT09IGhpZ2hlc3RSb2xlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQgPSB0aGlzLmZpbHRlclRpY2tldHNGb3JNaXNzaW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RSb2xlTWlzc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdExlbGVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8ga2VlcCBvbmx5IHRpY2tldHMgcHJlc2VudCBpbiBhbGwgZmlsdGVyZWQgYXJyYXlzXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhkb21GaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyb2xlRmlsdGVyZWQpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGV2ZWxGaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh6b25lRmlsdGVyZWQpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0aWMgb2YgbGV2ZWxGaWx0ZXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQuaW5jbHVkZXModGljKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFRpY2tldHMucHVzaCh0aWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaW5hbFRpY2tldHMpO1xyXG4gICAgICAgIHJldHVybiBmaW5hbFRpY2tldHM7XHJcbiAgICB9XHJcblxyXG4gICAgc3Vic2NyaWJlVG9EYXRhRmlsdGVyVXBkYXRlKFxyXG4gICAgICAgIG5leHQ/OiAodmFsdWU6IGFueSkgPT4gdm9pZCxcclxuICAgICAgICBlcnJvcj86IChlcnJvcjogYW55KSA9PiB2b2lkLFxyXG4gICAgICAgIGNvbXBsZXRlPzogKCkgPT4gdm9pZCxcclxuICAgICk6IFN1YnNjcmlwdGlvbiB7XHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMudXBkYXRlRGF0ZUZpbHRlci5zdWJzY3JpYmUobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcclxuICAgICAgICByZXR1cm4gcztcclxuICAgIH1cclxuXHJcbiAgICBkYXRlRmlsdGVyVXBkYXRlZChkYXRlUmFuZ2U6IERhdGVbXSB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlRmlsdGVyID0gZGF0ZVJhbmdlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZUZpbHRlci5uZXh0KGRhdGVSYW5nZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyT2JqZWN0c0ZvckRhdGVSYW5nZShvYmplY3RzOiBhbnlbXSwgZGF0ZVJhbmdlOiBEYXRlW10pOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdHMuZmlsdGVyKChvYmplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEF0RGF0ZSA9IG5ldyBEYXRlKG9iamVjdC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJNZWFzdXJlbWVudHNGb3JEYXRlUmFuZ2UoXHJcbiAgICAgICAgbWVhc3VyZW1lbnRzOiBNZWFzdXJlbWVudFtdLFxyXG4gICAgICAgIGRhdGVSYW5nZTogRGF0ZVtdLFxyXG4gICAgKTogTWVhc3VyZW1lbnRbXSB7XHJcbiAgICAgICAgY29uc3QgaXNJbnZhbGlkRGF0ZSA9IChkOiBEYXRlKSA9PiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc05hTihkLmdldFRpbWUoKSk7XHJcblxyXG4gICAgICAgIGlmIChkYXRlUmFuZ2UuZXZlcnkoZCA9PiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc0ludmFsaWREYXRlKGQpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVhc3VyZW1lbnRzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1lYXN1cmVtZW50cy5maWx0ZXIoKG1lYXN1cmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEF0RGF0ZSA9IG5ldyBEYXRlKG1lYXN1cmUuY29tbWVudC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yWm9uZShcclxuICAgICAgICBvYmplY3RzOiBhbnlbXSwgLy8gVE9ETzogcmVtb3ZlIGFueSBoZXJlLi5cclxuICAgICAgICB6b25lSUQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICAgICAgem9uZTogWm9uZSA9IG51bGwsXHJcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPYmplY3RzID0gW107XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIG9iamVjdHMubWFwKGFzeW5jIChvYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtwb2ldID0gb2JqZWN0LnBvaXMuaXRlbXM7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pICYmIHpvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoem9uZS5zd2VlcElEcyAmJiB6b25lLnN3ZWVwSURzLmluY2x1ZGVzKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucG9pU2VydmljZS5wb2lJc1ZpcnR1YWwocG9pKSAmJiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJGTE9PUlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbmNsdWRlIGluIEZsb29yIHpvbmUgb25seVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucG9pU2VydmljZS5wb2lJc1ZpcnR1YWwocG9pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwb2kgJiYgIXpvbmUgJiYgem9uZUlEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzRm9yT2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVzLnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoem9uZV8pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZV8uaWQgPT09IHpvbmVJRCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVfLnBhcmVudElEID09PSB6b25lSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkT2JqZWN0cztcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxyXG4gICAgICAgIGVxdWlwbWVudHM6IEVxdWlwbWVudFtdLFxyXG4gICAgICAgIGRvbWFpbklETGlzdDogc3RyaW5nW10sXHJcbiAgICApOiBFcXVpcG1lbnRbXSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRCeURvbWFpbiA9IGVxdWlwbWVudHMuZmlsdGVyKChlcXVpcCkgPT5cclxuICAgICAgICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5RG9tYWluXTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gZXF1aXBtZW50cy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChlcXVpcCkgPT5cclxuICAgICAgICAgICAgICAgIGVxdWlwLmRvbWFpbiAmJlxyXG4gICAgICAgICAgICAgICAgZXF1aXAuZG9tYWluLnBhcmVudElEICYmXHJcbiAgICAgICAgICAgICAgICBkb21haW5JRExpc3QuaW5jbHVkZXMoZXF1aXAuZG9tYWluLnBhcmVudElEKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5UGFyZW50RG9tYWluXTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGZpbHRlcmVkKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gTm90IGltcGxlbWVudGVkIHlldCFcclxuICAgIC8vIGZpbHRlck9iamVjdHMzREJ5RG9tYWluTGlzdChcclxuICAgIC8vICAgb2JqZWN0czNEOiBPYmplY3QzRFtdLFxyXG4gICAgLy8gICBkb21haW5JRExpc3Q6IHN0cmluZ1tdLFxyXG4gICAgLy8gKTogT2JqZWN0M0RbXSB7XHJcbiAgICAvLyAgIGxldCBmaWx0ZXJlZCA9IFtdO1xyXG4gICAgLy8gICBjb25zdCBmaWx0ZXJlZEJ5RG9tYWluID0gb2JqZWN0czNELmZpbHRlcigoZXF1aXApID0+XHJcbiAgICAvLyAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcclxuICAgIC8vICAgKTtcclxuICAgIC8vICAgZmlsdGVyZWQgPSBbLi4uZmlsdGVyZWQsIC4uLmZpbHRlcmVkQnlEb21haW5dO1xyXG4gICAgLy8gICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gb2JqZWN0czNELmZpbHRlcihcclxuICAgIC8vICAgICAob2JqKSA9PlxyXG4gICAgLy8gICAgICAgb2JqLmRvbWFpbiAmJlxyXG4gICAgLy8gICAgICAgb2JqLmRvbWFpbi5wYXJlbnRJRCAmJlxyXG4gICAgLy8gICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKG9iai5kb21haW4ucGFyZW50SUQpLFxyXG4gICAgLy8gICApO1xyXG4gICAgLy8gICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZCwgLi4uZmlsdGVyZWRCeVBhcmVudERvbWFpbl07XHJcbiAgICAvLyAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoZmlsdGVyZWQpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGZpbHRlckVxdWlwbWVudHNGb3JUZXJtKGVxdWlwczogRXF1aXBtZW50W10sIHRlcm06IHN0cmluZyk6IEVxdWlwbWVudFtdIHtcclxuICAgICAgICAvLyBmaWx0ZXIgZG9tYWluc1xyXG4gICAgICAgIGxldCBieURvbWFpbiA9IGVxdWlwcy5maWx0ZXIoKGVxKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcS5kb21haW4gJiYgZXEuZG9tYWluLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREb21haW4gPSBlcS5kb21haW4ubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ID0gbGV2ZW5zaHRlaW4obm9ybWFsaXplZERvbWFpbiwgdGVybSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGV2IDw9IDIgfHwgbm9ybWFsaXplZERvbWFpbi5pbmNsdWRlcyh0ZXJtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgYnlQYXJlbnREb21haW4gPSBlcXVpcHMuZmlsdGVyKChlcSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXEuZG9tYWluICYmIGVxLmRvbWFpbi5wYXJlbnRJRCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhcmVudCA9IGVxLmRvbWFpbi5wYXJlbnQubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ID0gbGV2ZW5zaHRlaW4obm9ybWFsaXplZFBhcmVudCwgdGVybSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGV2IDw9IDIgfHwgbm9ybWFsaXplZFBhcmVudC5pbmNsdWRlcyh0ZXJtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnlEb21haW4gPSBbLi4uYnlEb21haW4sIC4uLmJ5UGFyZW50RG9tYWluXTtcclxuICAgICAgICAvLyBmaWx0ZXIgbmFtZVxyXG4gICAgICAgIGxldCBieU5hbWUgPSBbXTtcclxuICAgICAgICBjb25zdCB0ZXJtcyA9IHRlcm0uc3BsaXQoXCIgXCIpLmZpbHRlcigodG9rZW4pID0+IHRva2VuLmxlbmd0aCA+IDIpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZXEgb2YgZXF1aXBzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZXEubmFtZVxyXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIiBcIilcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5sZW5ndGggPiAyKTtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRlcm1zKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZW5zaHRlaW4odG9rZW4sIHdvcmQpIDw9IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoID09PSB0ZXJtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGJ5TmFtZS5wdXNoKGVxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYnlOYW1lU2ltcGxlID0gZXF1aXBzLmZpbHRlcigoZXEpID0+XHJcbiAgICAgICAgICAgIGVxLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGJ5TmFtZSA9IFsuLi5ieU5hbWUsIC4uLmJ5TmFtZVNpbXBsZV07XHJcbiAgICAgICAgLy8gYnkgc2VyaWFsIG51bWJlclxyXG4gICAgICAgIGNvbnN0IGJ5U2VyaWFsTnVtYmVyID0gZXF1aXBzLmZpbHRlcihcclxuICAgICAgICAgICAgKGVxKSA9PiBlcS5zZXJpYWxOdW1iZXIgJiYgZXEuc2VyaWFsTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT09IHRlcm0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uYnlEb21haW4sIC4uLmJ5TmFtZSwgLi4uYnlTZXJpYWxOdW1iZXJdO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQocmVzdWx0KTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzRm9yVGVybSh0aWNrZXRzOiBUaWNrZXRbXSwgdGVybTogc3RyaW5nKTogVGlja2V0W10ge1xyXG4gICAgICAgIC8vIGZpbHRlciB0ZXJtIGluIHRpdGxlIGFuZCBkZXNjcmlwdGlvblxyXG4gICAgICAgIGNvbnN0IGJ5VGl0bGUgPSB0aGlzLmZpbHRlck9iamVjdHNGb3JUZXJtKHRpY2tldHMsIHRlcm0pO1xyXG4gICAgICAgIC8vIGJ5IGVxdWlwbWVudFxyXG4gICAgICAgIGNvbnN0IGJ5RXF1aXBtZW50ID0gdGlja2V0cy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh0aWNrZXQpID0+XHJcbiAgICAgICAgICAgICAgICB0aWNrZXQuZXF1aXBtZW50cyAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJFcXVpcG1lbnRzRm9yVGVybSh0aWNrZXQuZXF1aXBtZW50cywgdGVybSkubGVuZ3RoID5cclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKFsuLi5ieVRpdGxlLCAuLi5ieUVxdWlwbWVudF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlckxvY2F0aW9uc0ZvclRlcm0obG9jYXRpb25zOiBTcGFjZVtdLCB0ZXJtOiBzdHJpbmcpOiBTcGFjZVtdIHtcclxuICAgICAgICAvLyBieSBuYW1lXHJcbiAgICAgICAgY29uc3QgYnlOYW1lID0gbG9jYXRpb25zLmZpbHRlcigobG9jKSA9PlxyXG4gICAgICAgICAgICBsb2MubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYnkgYWRkcmVzc1xyXG4gICAgICAgIGNvbnN0IGJ5QWRkcmVzcyA9IGxvY2F0aW9ucy5maWx0ZXIoKGxvYykgPT5cclxuICAgICAgICAgICAgbG9jLmFkZHJlc3Nlcy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlOYW1lLCAuLi5ieUFkZHJlc3NdKTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJPcmdhbmlzYXRpb25zRm9yVGVybShcclxuICAgICAgICBvcmdzOiBPcmdhbmlzYXRpb25bXSxcclxuICAgICAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICApOiBPcmdhbmlzYXRpb25bXSB7XHJcbiAgICAgICAgY29uc3QgYnlOYW1lID0gb3Jncy5maWx0ZXIoKG9yZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB3b3JkcyA9IG9yZy5uYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgd29yZHMuc29tZShcclxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXHJcbiAgICAgICAgICAgICAgICApIHx8IG9yZy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYnlOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlclVzZXJzRm9yVGVybSh1c2VyczogUHJvZmlsZUVudGl0eVtdLCB0ZXJtOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBieU5hbWUgPSB1c2Vycy5maWx0ZXIoKHVzZXIpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgd29yZHMgPSB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgd29yZHMuc29tZShcclxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXHJcbiAgICAgICAgICAgICAgICApIHx8IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBieU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyRmVhdHVyZXNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXSxcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPEZlYXR1cmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmFsRmVhdHVyZXM6IEZlYXR1cmVbXSA9IFtdO1xyXG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBsZXQgaGFzaHRhZ0ZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xyXG4gICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0TGVsZWwgPVxyXG4gICAgICAgICAgICAgICAgICAgIGdldEhpZ2hlc3RMZXZlbEZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpZ2hlc3RSb2xlID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5MRVZFTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbEZpbHRlcmVkID0gdGhpcy5maWx0ZXJPYmplY3RzQnlMZXZlbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdExlbGVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkID0gYXdhaXQgdGhpcy5hcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuSEFTSFRBRykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNodGFnRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGZWF0dXJlc0J5SGFzaHRhZ3NBbmRMb2NhbGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNodGFnRmlsdGVyZWQuaW5jbHVkZXMoZmVhdHVyZSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKGZlYXR1cmUpXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsRmVhdHVyZXMucHVzaChmZWF0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbmFsRmVhdHVyZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRmVhdHVyZXNGb3JUZXJtKGZlYXR1cmVzOiBGZWF0dXJlW10sIHRlcm06IHN0cmluZyk6IEZlYXR1cmVbXSB7XHJcbiAgICAgICAgLy8gZmlsdGVyIHRlcm0gaW4gdGl0bGVcclxuICAgICAgICBjb25zdCBieVRpdGxlID0gdGhpcy5maWx0ZXJPYmplY3RzRm9yVGVybShmZWF0dXJlcywgdGVybSk7XHJcbiAgICAgICAgLy8gYnkgY29tbWVudHNcclxuICAgICAgICBjb25zdCBieUNvbW1lbnQgPSBmZWF0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJPYmplY3RzRm9yVGVybShmZWF0dXJlLmNvbW1lbnRzLml0ZW1zLCB0ZXJtKS5sZW5ndGggPlxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5VGl0bGUsIC4uLmJ5Q29tbWVudF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvYmplY3RzIEFycmF5IG9mIENvbW1lbnRzLCBUaWNrZXRzLCBGZWF0dXJlcy4gT2JsaWdhdG9yeSBwcm9wb3J0aWVzOiB0aXRsZSwgZGVzY3JpcHRpb25cclxuICAgICAqIEBwYXJhbSB0ZXJtIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBmaWx0ZXJPYmplY3RzRm9yVGVybShvYmplY3RzOiBhbnlbXSwgdGVybTogc3RyaW5nKTogYW55W10ge1xyXG4gICAgICAgIC8vIGZpbHRlciB0ZXJtIGluIHRpdGxlXHJcbiAgICAgICAgY29uc3QgYnlUaXRsZSA9IG9iamVjdHMuZmlsdGVyKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZmVhdHVyZS50aXRsZS50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIHdvcmRzLnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgKHdvcmQpID0+IHdvcmQubGVuZ3RoID4gMiAmJiBsZXZlbnNodGVpbih3b3JkLCB0ZXJtKSA8PSAxLFxyXG4gICAgICAgICAgICAgICAgKSB8fCBmZWF0dXJlLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyB0ZXJtIHByZXNlbnQgaW4gZGVzY3JpcHRpb25cclxuICAgICAgICBjb25zdCBieURlc2NyaXB0aW9uID0gb2JqZWN0cy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5kZXNjcmlwdGlvbiAmJlxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlUaXRsZSwgLi4uYnlEZXNjcmlwdGlvbl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlck1pc3Npb25CeVN0YXJ0VGltZURhdGVGb3JEYXRlUmFuZ2UoXHJcbiAgICAgICAgbWlzc2lvbnM6IGFueVtdLFxyXG4gICAgICAgIGRhdGVSYW5nZTogRGF0ZVtdLFxyXG4gICAgKTogYW55W10ge1xyXG4gICAgICAgIHJldHVybiBtaXNzaW9ucy5maWx0ZXIoKG1pc3Npb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlVGltZSA9IG5ldyBEYXRlKG1pc3Npb24uc3RhcnREYXRlVGltZSk7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGVUaW1lID49IGRhdGVSYW5nZVswXSAmJiBzdGFydERhdGVUaW1lIDw9IGRhdGVSYW5nZVsxXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxyXG4gICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zOiBNaXNzaW9uW10sXHJcbiAgICAgICAgb2JqZWN0czogYW55W10sXHJcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgY29uc3QgYWxsb3dlZFpvbmVzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBtaXNzaW9uIG9mIGN1cnJlbnRTcGFjZU1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIGlmIChtaXNzaW9uLnpvbmVJRCkge1xyXG4gICAgICAgICAgICAgICAgYWxsb3dlZFpvbmVzLnB1c2gobWlzc2lvbi56b25lSUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhbGxvd2VkWm9uZXMubGVuZ3RoID09PSBjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGFsbFpvbmVGaWx0ZXJlZCA9IFtdO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIGFsbG93ZWRab25lcy5tYXAoYXN5bmMgKHpvbmVJRCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRab25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBhbGxab25lRmlsdGVyZWQgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFsbFpvbmVGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudFpvbmVGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoYWxsWm9uZUZpbHRlcmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyRXF1aXBtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgZXF1aXBzOiBFcXVpcG1lbnRbXSxcclxuICAgICk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcclxuICAgICAgICBjb25zdCBmaW5hbEVxdWlwczogRXF1aXBtZW50W10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IEVxdWlwbWVudFtdID0gZXF1aXBzO1xyXG4gICAgICAgIGNvbnN0IHJvbGVGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XHJcbiAgICAgICAgY29uc3QgbGV2ZWxGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XHJcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcclxuICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNwYWNlTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkhpZ2hlc3QgbGV2ZWw6IFwiLCBoaWdoZXN0TGVsZWwsIFwiLCBIaWdoZXN0IFJvbGU6IFwiLCBoaWdoZXN0Um9sZSlcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ET01BSU4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0uZG9tYWlucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMgPSBbLi4uZG9tYWlucywgLi4ubS5kb21haW5zXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFsbERvbWFpbnNGaWx0ZXJlZCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudERvbUZpbHRlcmVkID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChlcXVpcHMsIGRvbWFpbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxEb21haW5zRmlsdGVyZWQgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hbGxEb21haW5zRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50RG9tRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkID0gYWxsRG9tYWluc0ZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlJPTEUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgaGlnaGVzdFJvbGVNaXNzaW9uID0gY3VycmVudFNwYWNlTWlzc2lvbnMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIChtKSA9PiBtLnJvbGUgPT09IGhpZ2hlc3RSb2xlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8sIGVxdWlwbWVudCBkb2VzIG5vdCBoYXZlIGxldmVsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkID0gYXdhaXQgdGhpcy5hcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1aXBzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGljIG9mIGxldmVsRmlsdGVyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkLmluY2x1ZGVzKHRpYykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZUZpbHRlcmVkLmluY2x1ZGVzKHRpYykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKHRpYylcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxFcXVpcHMucHVzaCh0aWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmluYWxFcXVpcHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyTWVhc3VyZW1lbnRzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgICAgICBjb21tZW50czogQ29tbWVudFtdLFxyXG4gICAgKTogUHJvbWlzZTxDb21tZW50W10+IHtcclxuICAgICAgICBsZXQgZmluYWxNZWFzdXJlbWVudHM6IENvbW1lbnRbXSA9IFtdO1xyXG4gICAgICAgIGxldCB6b25lRmlsdGVyZWQ6IENvbW1lbnRbXSA9IGNvbW1lbnRzO1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb25zID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbnM7XHJcbiAgICAgICAgaWYgKG1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKG0pID0+IG0uc3BhY2VJRCA9PT0gc3BhY2VJRCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpZ2hlc3RSb2xlID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZpbmFsTWVhc3VyZW1lbnRzID0gem9uZUZpbHRlcmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaW5hbE1lYXN1cmVtZW50cztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpc09iamVjdEFsbG93ZWRGb3JVc2VySW5TcGFjZShcclxuICAgICAgICBvYmplY3Q6IE9iamVjdCxcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihzcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShtaXNzaW9uLnJvbGUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBcImxldmVsXCIpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgW29iamVjdF0sXHJcbiAgICAgICAgICAgICAgICAgICAgbWlzc2lvbi5sZXZlbCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGV2ZWxGaWx0ZXJlZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxyXG4gICAgICAgICAgICAgICAgICAgIFttaXNzaW9uXSxcclxuICAgICAgICAgICAgICAgICAgICBbb2JqZWN0XSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoem9uZUZpbHRlcmVkLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJUZW1wbGF0ZXNGb3JUZXJtKG1pc3Npb25zOiBNaXNzaW9uW10sIHRlcm06IHN0cmluZyk6IE1pc3Npb25bXSB7XHJcbiAgICAgICAgLy8gdGVybSBwcmVzZW50IGluIGRlc2NyaXB0aW9uXHJcbiAgICAgICAgY29uc3QgYnlEZXNjcmlwdGlvbiA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgKG1pcykgPT5cclxuICAgICAgICAgICAgICAgIG1pcy5kZXNjcmlwdGlvbiAmJiBtaXMuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGJ5IHVzZXIgbGFzdE5hbWUgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIHZpc2l0OlxyXG4gICAgICAgIC8vIG1ldGFkYXRhOiBcIntcXFwiZmlyc3ROYW1lXFxcIjpcXFwiXFxcIixcXFwibGFzdE5hbWVcXFwiOlxcXCJWaXNpdGUgZHUgNSBKdWlsbGV0XFxcIn1cIlxyXG4gICAgICAgIGNvbnN0IHVzZXJQcm9maWxlcyA9IG1pc3Npb25zLm1hcCgobWlzKSA9PiBuZXcgUHJvZmlsZUVudGl0eShtaXMudXNlcikpO1xyXG4gICAgICAgIGNvbnN0IGJ5VXNlckxhc3RuYW1lID0gdGhpcy5maWx0ZXJVc2Vyc0ZvclRlcm0odXNlclByb2ZpbGVzLCB0ZXJtKTtcclxuICAgICAgICBjb25zdCB1c2VySWRzID0gbmV3IFNldChieVVzZXJMYXN0bmFtZS5tYXAoKHVzZXIpID0+IHVzZXIuaWQpKTtcclxuICAgICAgICBjb25zdCBtaXNzaW9uc0J5VXNlciA9IG1pc3Npb25zLmZpbHRlcigobWlzKSA9PlxyXG4gICAgICAgICAgICB1c2VySWRzLmhhcyhtaXMudXNlcklEKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5RGVzY3JpcHRpb24sIC4uLm1pc3Npb25zQnlVc2VyXSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyT2JqZWN0c0ZvclN3ZWVwKFxyXG4gICAgICAgIG9iamVjdHM6IGFueVtdLFxyXG4gICAgICAgIG9iamVjdFR5cGU6IFBvaVR5cGUsXHJcbiAgICAgICAgc3dlZXA6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICBsZXQgZmlsdGVyZWQgPSBbXTtcclxuICAgICAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvaXMgPVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucG9pU2VydmljZS5nZXRQb2lzQnlNYXR0ZXJwb3J0U3dlZXBCeVR5cGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcXVpcElEcyA9IG5ldyBTZXQocG9pcy5tYXAoKHBvaSkgPT4gcG9pLmVsZW1lbnRJRCkpO1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyZWQgPSBvYmplY3RzLmZpbHRlcigob2JqZWN0KSA9PiBlcXVpcElEcy5oYXMob2JqZWN0LmlkKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRmVhdHVyZXNCeUhhc2h0YWdzQW5kTG9jYWxlKFxyXG4gICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zOiBNaXNzaW9uW10sXHJcbiAgICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXSxcclxuICAgICk6IEZlYXR1cmVbXSB7XHJcbiAgICAgICAgY29uc3QgW2N1cnJlbnRNaXNzaW9uXSA9IGN1cnJlbnRTcGFjZU1pc3Npb25zO1xyXG4gICAgICAgIC8vIGZpbHRlciBieSBsb2NhbGVcclxuICAgICAgICBsZXQgZmlsdGVyZWRMb2NhbGUgPSBbLi4uZmVhdHVyZXNdO1xyXG4gICAgICAgIGlmIChjdXJyZW50TWlzc2lvbi5sb2NhbGUpIHtcclxuICAgICAgICAgICAgZmlsdGVyZWRMb2NhbGUgPSBmZWF0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoZmVhdHVyZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLmxvY2FsZSAmJiBmZWF0dXJlLmxvY2FsZSA9PT0gY3VycmVudE1pc3Npb24ubG9jYWxlLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBmaWx0ZXIgYnkgaGFzaHRhZ3NcclxuICAgICAgICBpZiAoY3VycmVudE1pc3Npb24uaGFzaHRhZ3MgJiYgY3VycmVudE1pc3Npb24uaGFzaHRhZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5SGFzaHRhZ3MgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZpbHRlcmVkTG9jYWxlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZlYXR1cmUuaGFzaHRhZ3MgfHwgZmVhdHVyZS5oYXNodGFncy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBGZWF0dXJlIHdpdGhvdXQgaGFzaHRhZyBpcyBhdmFpbGFibGUgZm9yIGV2ZXJ5Ym9keVxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkQnlIYXNodGFncy5wdXNoKGZlYXR1cmUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWlzc2lvbi5oYXNodGFncy5ldmVyeSgoaGFzaHRhZykgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5oYXNodGFncy5pbmNsdWRlcyhoYXNodGFnKSxcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEJ5SGFzaHRhZ3MucHVzaChmZWF0dXJlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRCeUhhc2h0YWdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVyZWRMb2NhbGU7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRmVhdHVyZXNGb3JNaXNzaW9uV2l0aG91dFpvbmUoXHJcbiAgICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXSxcclxuICAgICAgICBtaXNzaW9uOiBNaXNzaW9uLFxyXG4gICAgKTogRmVhdHVyZVtdIHtcclxuICAgICAgICBjb25zdCBmaW5hbEZlYXR1cmVzOiBGZWF0dXJlW10gPSBbXTtcclxuICAgICAgICBsZXQgbGV2ZWxGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XHJcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XHJcbiAgICAgICAgbGV0IGhhc2h0YWdGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKG1pc3Npb24ucm9sZSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMKSB7XHJcbiAgICAgICAgICAgICAgICBsZXZlbEZpbHRlcmVkID0gdGhpcy5maWx0ZXJPYmplY3RzQnlMZXZlbChcclxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcclxuICAgICAgICAgICAgICAgICAgICBtaXNzaW9uLmxldmVsLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcclxuICAgICAgICAgICAgLy8gICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnMsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgIC8vICAgICApO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuSEFTSFRBRykge1xyXG4gICAgICAgICAgICAgICAgaGFzaHRhZ0ZpbHRlcmVkID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckZlYXR1cmVzQnlIYXNodGFnc0FuZExvY2FsZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgW21pc3Npb25dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKSAmJlxyXG4gICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKGZlYXR1cmUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZmluYWxGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaW5hbEZlYXR1cmVzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -138,7 +138,9 @@ export class MeasurementService {
138
138
  comment,
139
139
  poi,
140
140
  };
141
- if (!!this.awsKinesisAnalytics && !!this.awsKinesisAnalytics.record && this.awsKinesisAnalytics.record()) {
141
+ if (!!this.awsKinesisAnalytics
142
+ && !!this.awsKinesisAnalytics.record
143
+ && this.awsKinesisAnalytics.record()) {
142
144
  this.awsKinesisAnalytics.getInstance().record(
143
145
  // @ts-ignore
144
146
  {
@@ -157,6 +159,13 @@ export class MeasurementService {
157
159
  // partitionKey: "",
158
160
  }, 'AWSKinesis');
159
161
  }
162
+ // Check if a date filter is currently applied
163
+ if (this.dateFilter && this.dateFilter.length === 2) {
164
+ // Update the end date of the filter to the current date to ensure the newly created measurement is included
165
+ const newEndDate = new Date();
166
+ const newFilter = [this.dateFilter[0], newEndDate];
167
+ this.filterService.dateFilterUpdated(newFilter);
168
+ }
160
169
  return measurement;
161
170
  }
162
171
  async getModel3DForMeasurement(measurement) {
@@ -196,4 +205,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
196
205
  type: Inject,
197
206
  args: ['currentAwsKinesisAnalyticsService']
198
207
  }] }, { type: i1.NavigatorService }, { type: i2.FilterService }, { type: i3.CommentService }, { type: i4.PoiService }, { type: i5.BaseUserService }, { type: i6.ZoneChangeService }, { type: i7.NavigationService }]; } });
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVhc3VyZW1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbW9kZWxzL21lYXN1cmVtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQWUsT0FBTyxFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBRy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFVN0QsTUFBTSxPQUFPLGtCQUFrQjtJQW1DN0IsWUFFRSwyQkFBZ0MsRUFDeEIsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFVBQXNCLEVBQ3RCLFdBQTRCLEVBQzVCLGlCQUFvQyxFQUNwQyxpQkFBb0M7UUFOcEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBM0M5QyxTQUFJLEdBQUcsZUFBZSxDQUFDO1FBRXZCLHdCQUFtQixHQUdmLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFFNUIscUJBQWdCLEdBQXVCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFckQsd0JBQW1CLEdBR2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVFuQixz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QUFDLElBQUksQ0FBQyxPQUFPLENBQUM7U0FDbkM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxLQUFLLENBQUMsOEJBQThCLENBQ2xDLE9BQWU7UUFFZixJQUFJLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDdkUsUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyx1Q0FBdUMsQ0FDekUsT0FBTyxFQUNQLFFBQVEsQ0FDVCxDQUFDO1FBQ0YsSUFBSSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO2dCQUM3QixNQUFNLFdBQVcsR0FDZixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNqRSxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDOztnSEFqUFUsa0JBQWtCLGtCQW9DbkIsbUNBQW1DO29IQXBDbEMsa0JBQWtCLGNBRmpCLE1BQU07NEZBRVAsa0JBQWtCO2tCQUg5QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBcUNJLE1BQU07MkJBQUMsbUNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB3YWl0VW50aWwgfSBmcm9tICcuLi8uLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNZWFzdXJlbWVudCwgUG9pVHlwZSwgQ29tbWVudCwgUE9JLCBab25lIH0gZnJvbSAnLi4vLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tICcuLi9maWx0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRvclNlcnZpY2UgfSBmcm9tICcuLi9uYXZpZ2F0b3Iuc2VydmljZSc7XHJcbmltcG9ydCB7IGRlbGV0ZUZyb21TMywgdXBsb2FkRmlsZVRvUzMgfSBmcm9tICcuLi9zMy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tbWVudFNlcnZpY2UgfSBmcm9tICcuL2NvbW1lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSAnLi9wb2kuc2VydmljZSc7XHJcbmltcG9ydCB7Wm9uZUNoYW5nZVNlcnZpY2V9IGZyb20gXCIuLi96b25lQ2hhbmdlLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZWFzdXJlbWVudFNlcnZpY2Uge1xyXG4gIHBhdGggPSAnbWVhc3VyZW1lbnRzLyc7XHJcblxyXG4gIGN1cnJlbnRNZWFzdXJlbWVudHM6IHtcclxuICAgIHNwYWNlOiBNZWFzdXJlbWVudFtdO1xyXG4gICAgem9uZTogTWVhc3VyZW1lbnRbXTtcclxuICB9ID0geyBzcGFjZTogW10sIHpvbmU6IFtdIH07XHJcblxyXG4gIG1lYXN1cmVtZW50c1RhZ3M6IFN1YmplY3Q8Q29tbWVudFtdPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIG1lYXN1cmVtZW50c1VwZGF0ZWQ6IFN1YmplY3Q8e1xyXG4gICAgc3BhY2U6IE1lYXN1cmVtZW50W107XHJcbiAgICB6b25lOiBNZWFzdXJlbWVudFtdO1xyXG4gIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY3VycmVudFNwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgem9uZUlERmlsdGVyOiBzdHJpbmc7XHJcblxyXG4gIGRhdGVGaWx0ZXI6IERhdGVbXTtcclxuXHJcbiAgbWVhc3VyZW1lbnRGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaWYgZmFsc2UgbWVhbnMgbm8gZmlsdGVyaW5nLCBldmVyeXRoaW5nIGlzIGFsbG93ZWRcclxuXHJcbiAgdXBkYXRlRG9uZTogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHVwZGF0aW5nOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgYXdzS2luZXNpc0FuYWx5dGljczogYW55OyAvL0FXU1xyXG5cclxuICBmbG9vcnNQZXJTcGFjZTogWm9uZVtdID0gbnVsbDtcclxuXHJcbiAgc2VsZWN0ZWRGbG9vcjogWm9uZSA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBd3NLaW5lc2lzQW5hbHl0aWNzU2VydmljZScpXHJcbiAgICBhd3NLaW5lc2lzQW5hbHl0aWNzSW5qZWN0ZWQ6IGFueSxcclxuICAgIHByaXZhdGUgbmF2aWdhdG9yU2VydmljZTogTmF2aWdhdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tbWVudFNlcnZpY2U6IENvbW1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6b25lQ2hhbmdlU2VydmljZTogWm9uZUNoYW5nZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzID0gYXdzS2luZXNpc0FuYWx5dGljc0luamVjdGVkO1xyXG5cclxuICAgIGNvbnN0IGlzTXVzZXVtVXNlciA9IHRoaXMudXNlclNlcnZpY2UuaGFzT25seU11c2V1bVJvbGUoKTtcclxuICAgIGlmICghaXNNdXNldW1Vc2VyKSB7XHJcbiAgICAgIHRoaXMuem9uZUNoYW5nZVNlcnZpY2Uuem9uZUNoYW5nZS5zdWJzY3JpYmUoKHpvbmUpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZUlEID0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEO1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgdGhpcy5tZWFzdXJlbWVudHNUYWdzLm5leHQobnVsbCk7XHJcbiAgICAgICAgICB0aGlzLm1lYXN1cmVtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogbnVsbCB9KTtcclxuICAgICAgICAgIHRoaXMubWVhc3VyZW1lbnRGaWx0ZXIgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgPSBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoem9uZS5pZCAhPT0gdGhpcy56b25lSURGaWx0ZXIpIHtcclxuICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gem9uZS5pZDtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZ29pbmcgdG8gaW5pdCBtZWFzdXJlbWVudHMgZnJvbSB6b25lXCIpO1xyXG4gICAgICAgICAgdGhpcy5pbml0TWVhc3VyZW1lbnRzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlLnN1YnNjcmliZVRvRGF0YUZpbHRlclVwZGF0ZSgoZGF0ZVJhbmdlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRlRmlsdGVyID0gZGF0ZVJhbmdlO1xyXG4gICAgICAgIHRoaXMuaW5pdE1lYXN1cmVtZW50cygpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kYXRlRmlsdGVyID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmN1cnJlbnREYXRlRmlsdGVyO1xyXG4gICAgICB0aGlzLnVwZGF0ZURvbmUuc3Vic2NyaWJlKCgpID0+IHRoaXMuaW5pdE1lYXN1cmVtZW50cygpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnpvbmVDaGFuZ2VTZXJ2aWNlLmZsb29ySGFzQ2hhbmdlZC5zdWJzY3JpYmUoKGZsb29yKT0+e1xyXG4gICAgICBpZiAoZmxvb3Ipe1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IGZsb29yO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgYXN5bmMgaW5pdE1lYXN1cmVtZW50cygpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgbGV0IG1lYXN1cmVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0TWVhc3VyZW1lbnRzRm9yU3BhY2VGb3JVc2VyKFxyXG4gICAgICAgIHRoaXMuY3VycmVudFNwYWNlSURcclxuICAgICAgKTtcclxuICAgICAgaWYgKG1lYXN1cmVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZUZpbHRlcikge1xyXG4gICAgICAgICAgbWVhc3VyZW1lbnRzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck1lYXN1cmVtZW50c0ZvckRhdGVSYW5nZShcclxuICAgICAgICAgICAgbWVhc3VyZW1lbnRzLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGVGaWx0ZXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1lYXN1cmVtZW50RmlsdGVyKSB7XHJcbiAgICAgICAgICBtZWFzdXJlbWVudHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TWVhc3VyZW1lbnRzLnNwYWNlID0gbWVhc3VyZW1lbnRzO1xyXG4gICAgICAgIC8vIGVtaXQgb24gdGFncyBzaG91bGQgYmUgYWZ0ZXIgc2V0dGluZyBjdXJyZW50LnNwYWNlICEhXHJcblxyXG4gICAgICAgIGlmICh0aGlzLnpvbmVJREZpbHRlcikge1xyXG4gICAgICAgICAgY29uc3QgY29tbWVudHNab25lID0gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgICBtZWFzdXJlbWVudHMubWFwKChtZWFzdXJlKSA9PiBtZWFzdXJlLmNvbW1lbnQpLFxyXG4gICAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIG1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cy5maWx0ZXIoKG1lYXN1cmUpID0+XHJcbiAgICAgICAgICAgIGNvbW1lbnRzWm9uZS5pbmNsdWRlcyhtZWFzdXJlLmNvbW1lbnQpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tZWFzdXJlbWVudHNUYWdzLm5leHQobWVhc3VyZW1lbnRzLm1hcCgobSkgPT4gbS5jb21tZW50KSk7XHJcblxyXG4gICAgICAgIG1lYXN1cmVtZW50cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIG5ldyBEYXRlKGIuY29tbWVudC5jcmVhdGVkQXQpIC1cclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBuZXcgRGF0ZShhLmNvbW1lbnQuY3JlYXRlZEF0KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNZWFzdXJlbWVudHMuem9uZSA9IG1lYXN1cmVtZW50cztcclxuICAgICAgICB0aGlzLm1lYXN1cmVtZW50c1VwZGF0ZWQubmV4dCh0aGlzLmN1cnJlbnRNZWFzdXJlbWVudHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1lYXN1cmVtZW50cy5zcGFjZSA9IFtdO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1lYXN1cmVtZW50cy56b25lID0gW107XHJcbiAgICAgICAgdGhpcy5tZWFzdXJlbWVudHNVcGRhdGVkLm5leHQoeyBzcGFjZTogW10sIHpvbmU6IFtdIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWVhc3VyZW1lbnRzVGFncy5uZXh0KG51bGwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGluZy5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZU1lYXN1cmVtZW50KG1lYXN1cmVtZW50OiBNZWFzdXJlbWVudCk6IFByb21pc2U8Q29tbWVudD4ge1xyXG4gICAgY29uc3QgZGVsZXRlZENvbW1lbnQgPSBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLmRlbGV0ZUNvbW1lbnQoXHJcbiAgICAgIG1lYXN1cmVtZW50LmNvbW1lbnQuaWRcclxuICAgICk7XHJcbiAgICBpZiAoZGVsZXRlZENvbW1lbnQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmRlbGV0ZVBvaShtZWFzdXJlbWVudC5wb2kuaWQpO1xyXG4gICAgICBjb25zdCBwcmVmaXggPSBgJHttZWFzdXJlbWVudC5jb21tZW50LmlkLnNsaWNlKDAsIDgpfV9gO1xyXG4gICAgICBjb25zdCBwYXRoID0gYCR7dGhpcy5wYXRoICsgcHJlZml4fW1lc3VyZS5qcGVnYDtcclxuICAgICAgYXdhaXQgZGVsZXRlRnJvbVMzKHBhdGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlbGV0ZWRDb21tZW50O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY3JlYXRlTWVhc3VyZW1lbnRGb3JTcGFjZShcclxuICAgIGNvbW1lbnRJbnB1dDogQ29tbWVudCxcclxuICAgIGRhdGFNZWFzdXJlbWVudHM6IHsgbWVhc3VyZTogYW55W107IHN3ZWVwOiBzdHJpbmcgfSxcclxuICAgIHNjcmVlbnNob3Q6IGFueSxcclxuICAgIHNwYWNlSUQ6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8TWVhc3VyZW1lbnQ+IHtcclxuICAgIGNvbnN0IGxhc3RNZWFzdXJlID0gZGF0YU1lYXN1cmVtZW50cy5tZWFzdXJlO1xyXG4gICAgY29uc3Qgc3dlZXBJRCA9IGRhdGFNZWFzdXJlbWVudHMuc3dlZXA7XHJcbiAgICBjb25zdCBsYXN0UG9pbnQgPSBsYXN0TWVhc3VyZVtsYXN0TWVhc3VyZS5sZW5ndGggLSAxXTtcclxuICAgIGxldCBjb21tZW50ID0gYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5jcmVhdGVDb21tZW50KGNvbW1lbnRJbnB1dCk7XHJcbiAgICBjb25zdCBwb2lJbnB1dCA9IHtcclxuICAgICAgY29vcmRpbmF0ZTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgIHg6IGxhc3RQb2ludC54LFxyXG4gICAgICAgIHk6IGxhc3RQb2ludC55LFxyXG4gICAgICAgIHo6IGxhc3RQb2ludC56LFxyXG4gICAgICB9KSxcclxuICAgICAgdHlwZTogUG9pVHlwZS5NRUFTVVJFLFxyXG4gICAgICBlbGVtZW50SUQ6IGNvbW1lbnQuaWQsXHJcbiAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiBzd2VlcElELFxyXG4gICAgfSBhcyBQT0k7XHJcbiAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuY3JlYXRlUE9JRm9yU3BhY2VJRChwb2lJbnB1dCk7XHJcbiAgICBjb25zdCBzY3JlZW4gPSBhd2FpdCBmZXRjaChzY3JlZW5zaG90KTtcclxuICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBzY3JlZW4uYmxvYigpO1xyXG4gICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgJ21lc3VyZS5qcGVnJywgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSk7XHJcbiAgICBjb25zdCB1cmwgPSBhd2FpdCB1cGxvYWRGaWxlVG9TMyh0aGlzLnBhdGgsIGZpbGUsIGNvbW1lbnQuaWQpO1xyXG4gICAgaWYgKHVybCkge1xyXG4gICAgICBjb21tZW50ID0gYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS51cGRhdGVDb21tZW50KHtcclxuICAgICAgICBpZDogY29tbWVudC5pZCxcclxuICAgICAgICBhbm5leGU6IHVybCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtZWFzdXJlbWVudCA9IHtcclxuICAgICAgY29tbWVudCxcclxuICAgICAgcG9pLFxyXG4gICAgfSBhcyBNZWFzdXJlbWVudDtcclxuXHJcbiAgICBpZiAoISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MgJiYgISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MucmVjb3JkICYmIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5yZWNvcmQoKSkge1xyXG4gICAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MuZ2V0SW5zdGFuY2UoKS5yZWNvcmQoXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiAnT2JqZWN0IENyZWF0aW9uJyxcclxuICAgICAgICAgICAgb2JqZWN0VHlwZTogJ21lYXN1cmVtZW50JyxcclxuICAgICAgICAgICAgbWVhc3VyZW1lbnQ6IG1lYXN1cmVtZW50LFxyXG4gICAgICAgICAgICAvL3pvbmVJZDogc3BhY2VJRCxcclxuICAgICAgICAgICAgdXNlcjogdGhpcy51c2VyU2VydmljZS5jdSxcclxuICAgICAgICAgICAgbG9jYXRpb25JZDogdGhpcy5jdXJyZW50U3BhY2VJRCxcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICB6b25lSWQ6IHRoaXMuem9uZUlERmlsdGVyLFxyXG4gICAgICAgICAgICBmbG9vcklkOiB0aGlzLnNlbGVjdGVkRmxvb3I/LmlkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN0cmVhbU5hbWU6ICdzbWFydGVycGxhbktpbmVzaXMtYW5hbHl0aWNzJyxcclxuICAgICAgICAgIC8vIHBhcnRpdGlvbktleTogXCJcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgICdBV1NLaW5lc2lzJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtZWFzdXJlbWVudDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldE1vZGVsM0RGb3JNZWFzdXJlbWVudChtZWFzdXJlbWVudDogTWVhc3VyZW1lbnQpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgcG9pID0gYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmdldFBvaUJ5RWxlbWVudElkKG1lYXN1cmVtZW50LmNvbW1lbnQuaWQpO1xyXG4gICAgaWYgKHBvaSAmJiBwb2kubWF0dGVycG9ydFN3ZWVwSUQpIHtcclxuICAgICAgY29uc3QgbmF2aWdhdGlvbnMgPVxyXG4gICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0TmF2aWdhdGlvbnNGb3JNYXR0ZXJwb3J0SURGb3JTcGFjZShcclxuICAgICAgICAgIHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCxcclxuICAgICAgICAgIG1lYXN1cmVtZW50LmNvbW1lbnQuc3BhY2VJRFxyXG4gICAgICAgICk7XHJcbiAgICAgIGNvbnN0IFtwb2lOYXZpZ2F0aW9uXSA9IG5hdmlnYXRpb25zO1xyXG4gICAgICByZXR1cm4gcG9pTmF2aWdhdGlvbi5ub2RlLm1vZGVsM0Q7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldE1lYXN1cmVtZW50c0ZvclNwYWNlRm9yVXNlcihcclxuICAgIHNwYWNlSUQ6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8TWVhc3VyZW1lbnRbXT4ge1xyXG4gICAgbGV0IGNvbW1lbnRzID0gYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5nZXRDb21tZW50c0J5U3BhY2VJRChzcGFjZUlEKTtcclxuICAgIGNvbW1lbnRzID0gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck1lYXN1cmVtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcclxuICAgICAgc3BhY2VJRCxcclxuICAgICAgY29tbWVudHNcclxuICAgICk7XHJcbiAgICBsZXQgbWVhc3VyZW1lbnRzID0gW107XHJcbiAgICBpZiAoY29tbWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBjb21tZW50cy5tYXAoYXN5bmMgKGNvbW1lbnQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IG1lYXN1cmVtZW50ID1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5yZWFkQ29tbWVudEFzTWVhc3VyZW1lbnQoY29tbWVudC5pZCk7XHJcbiAgICAgICAgICBtZWFzdXJlbWVudHMucHVzaChtZWFzdXJlbWVudCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZWFzdXJlbWVudHM7XHJcbiAgfVxyXG5cclxuICB1bnN1YnNjcmliZSgpIHtcclxuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIl19
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVhc3VyZW1lbnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zbWFydGVycGxhbi1jb3JlL3NyYy9saWIvc2VydmljZXMvbW9kZWxzL21lYXN1cmVtZW50LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUUxQyxPQUFPLEVBQWUsT0FBTyxFQUFzQixNQUFNLHFCQUFxQixDQUFDO0FBRy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFVN0QsTUFBTSxPQUFPLGtCQUFrQjtJQW1DN0IsWUFFRSwyQkFBZ0MsRUFDeEIsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLGNBQThCLEVBQzlCLFVBQXNCLEVBQ3RCLFdBQTRCLEVBQzVCLGlCQUFvQyxFQUNwQyxpQkFBb0M7UUFOcEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBM0M5QyxTQUFJLEdBQUcsZUFBZSxDQUFDO1FBRXZCLHdCQUFtQixHQUdmLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFFNUIscUJBQWdCLEdBQXVCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFckQsd0JBQW1CLEdBR2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQVFuQixz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QUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs7Z0hBM1BVLGtCQUFrQixrQkFvQ25CLG1DQUFtQztvSEFwQ2xDLGtCQUFrQixjQUZqQixNQUFNOzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXFDSSxNQUFNOzJCQUFDLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgd2FpdFVudGlsIH0gZnJvbSAnLi4vLi4vaGVscGVycy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWVhc3VyZW1lbnQsIFBvaVR5cGUsIENvbW1lbnQsIFBPSSwgWm9uZSB9IGZyb20gJy4uLy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vZmlsdGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vbmF2aWdhdG9yLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBkZWxldGVGcm9tUzMsIHVwbG9hZEZpbGVUb1MzIH0gZnJvbSAnLi4vczMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gJy4uL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbW1lbnRTZXJ2aWNlIH0gZnJvbSAnLi9jb21tZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vbmF2aWdhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gJy4vcG9pLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBab25lQ2hhbmdlU2VydmljZSB9IGZyb20gXCIuLi96b25lQ2hhbmdlLnNlcnZpY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNZWFzdXJlbWVudFNlcnZpY2Uge1xyXG4gIHBhdGggPSAnbWVhc3VyZW1lbnRzLyc7XHJcblxyXG4gIGN1cnJlbnRNZWFzdXJlbWVudHM6IHtcclxuICAgIHNwYWNlOiBNZWFzdXJlbWVudFtdO1xyXG4gICAgem9uZTogTWVhc3VyZW1lbnRbXTtcclxuICB9ID0geyBzcGFjZTogW10sIHpvbmU6IFtdIH07XHJcblxyXG4gIG1lYXN1cmVtZW50c1RhZ3M6IFN1YmplY3Q8Q29tbWVudFtdPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIG1lYXN1cmVtZW50c1VwZGF0ZWQ6IFN1YmplY3Q8e1xyXG4gICAgc3BhY2U6IE1lYXN1cmVtZW50W107XHJcbiAgICB6b25lOiBNZWFzdXJlbWVudFtdO1xyXG4gIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY3VycmVudFNwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgem9uZUlERmlsdGVyOiBzdHJpbmc7XHJcblxyXG4gIGRhdGVGaWx0ZXI6IERhdGVbXTtcclxuXHJcbiAgbWVhc3VyZW1lbnRGaWx0ZXI6IGJvb2xlYW4gPSBmYWxzZTsgLy8gaWYgZmFsc2UgbWVhbnMgbm8gZmlsdGVyaW5nLCBldmVyeXRoaW5nIGlzIGFsbG93ZWRcclxuXHJcbiAgdXBkYXRlRG9uZTogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHVwZGF0aW5nOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgYXdzS2luZXNpc0FuYWx5dGljczogYW55OyAvL0FXU1xyXG5cclxuICBmbG9vcnNQZXJTcGFjZTogWm9uZVtdID0gbnVsbDtcclxuXHJcbiAgc2VsZWN0ZWRGbG9vcjogWm9uZSA9IG51bGw7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBd3NLaW5lc2lzQW5hbHl0aWNzU2VydmljZScpXHJcbiAgICBhd3NLaW5lc2lzQW5hbHl0aWNzSW5qZWN0ZWQ6IGFueSxcclxuICAgIHByaXZhdGUgbmF2aWdhdG9yU2VydmljZTogTmF2aWdhdG9yU2VydmljZSxcclxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tbWVudFNlcnZpY2U6IENvbW1lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6b25lQ2hhbmdlU2VydmljZTogWm9uZUNoYW5nZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzID0gYXdzS2luZXNpc0FuYWx5dGljc0luamVjdGVkO1xyXG4gICAgY29uc3QgaXNNdXNldW1Vc2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNPbmx5TXVzZXVtUm9sZSgpO1xyXG4gICAgaWYgKCFpc011c2V1bVVzZXIpIHtcclxuICAgICAgdGhpcy56b25lQ2hhbmdlU2VydmljZS56b25lQ2hhbmdlLnN1YnNjcmliZSgoem9uZSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNwYWNlSUQgPSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY3VycmVudFNwYWNlSUQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgICAgICB0aGlzLm1lYXN1cmVtZW50c1RhZ3MubmV4dChudWxsKTtcclxuICAgICAgICAgIHRoaXMubWVhc3VyZW1lbnRzVXBkYXRlZC5uZXh0KHsgc3BhY2U6IFtdLCB6b25lOiBudWxsIH0pO1xyXG4gICAgICAgICAgdGhpcy5tZWFzdXJlbWVudEZpbHRlciA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlciA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIGlmICh6b25lLmlkICE9PSB0aGlzLnpvbmVJREZpbHRlcikge1xyXG4gICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgPSB6b25lLmlkO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJnb2luZyB0byBpbml0IG1lYXN1cmVtZW50cyBmcm9tIHpvbmVcIik7XHJcbiAgICAgICAgICB0aGlzLmluaXRNZWFzdXJlbWVudHMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5maWx0ZXJTZXJ2aWNlLnN1YnNjcmliZVRvRGF0YUZpbHRlclVwZGF0ZSgoZGF0ZVJhbmdlKSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRlRmlsdGVyID0gZGF0ZVJhbmdlO1xyXG4gICAgICAgIHRoaXMuaW5pdE1lYXN1cmVtZW50cygpO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5kYXRlRmlsdGVyID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmN1cnJlbnREYXRlRmlsdGVyO1xyXG4gICAgICB0aGlzLnVwZGF0ZURvbmUuc3Vic2NyaWJlKCgpID0+IHRoaXMuaW5pdE1lYXN1cmVtZW50cygpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnpvbmVDaGFuZ2VTZXJ2aWNlLmZsb29ySGFzQ2hhbmdlZC5zdWJzY3JpYmUoKGZsb29yKSA9PiB7XHJcbiAgICAgIGlmIChmbG9vcikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IGZsb29yO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgYXN5bmMgaW5pdE1lYXN1cmVtZW50cygpIHtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgICAgbGV0IG1lYXN1cmVtZW50cyA9IGF3YWl0IHRoaXMuZ2V0TWVhc3VyZW1lbnRzRm9yU3BhY2VGb3JVc2VyKFxyXG4gICAgICAgIHRoaXMuY3VycmVudFNwYWNlSURcclxuICAgICAgKTtcclxuICAgICAgaWYgKG1lYXN1cmVtZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZUZpbHRlcikge1xyXG4gICAgICAgICAgbWVhc3VyZW1lbnRzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck1lYXN1cmVtZW50c0ZvckRhdGVSYW5nZShcclxuICAgICAgICAgICAgbWVhc3VyZW1lbnRzLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGVGaWx0ZXJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1lYXN1cmVtZW50RmlsdGVyKSB7XHJcbiAgICAgICAgICBtZWFzdXJlbWVudHMgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TWVhc3VyZW1lbnRzLnNwYWNlID0gbWVhc3VyZW1lbnRzO1xyXG4gICAgICAgIC8vIGVtaXQgb24gdGFncyBzaG91bGQgYmUgYWZ0ZXIgc2V0dGluZyBjdXJyZW50LnNwYWNlICEhXHJcblxyXG4gICAgICAgIGlmICh0aGlzLnpvbmVJREZpbHRlcikge1xyXG4gICAgICAgICAgY29uc3QgY29tbWVudHNab25lID0gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgICBtZWFzdXJlbWVudHMubWFwKChtZWFzdXJlKSA9PiBtZWFzdXJlLmNvbW1lbnQpLFxyXG4gICAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIG1lYXN1cmVtZW50cyA9IG1lYXN1cmVtZW50cy5maWx0ZXIoKG1lYXN1cmUpID0+XHJcbiAgICAgICAgICAgIGNvbW1lbnRzWm9uZS5pbmNsdWRlcyhtZWFzdXJlLmNvbW1lbnQpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tZWFzdXJlbWVudHNUYWdzLm5leHQobWVhc3VyZW1lbnRzLm1hcCgobSkgPT4gbS5jb21tZW50KSk7XHJcblxyXG4gICAgICAgIG1lYXN1cmVtZW50cy5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIG5ldyBEYXRlKGIuY29tbWVudC5jcmVhdGVkQXQpIC1cclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICBuZXcgRGF0ZShhLmNvbW1lbnQuY3JlYXRlZEF0KVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRNZWFzdXJlbWVudHMuem9uZSA9IG1lYXN1cmVtZW50cztcclxuICAgICAgICB0aGlzLm1lYXN1cmVtZW50c1VwZGF0ZWQubmV4dCh0aGlzLmN1cnJlbnRNZWFzdXJlbWVudHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1lYXN1cmVtZW50cy5zcGFjZSA9IFtdO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1lYXN1cmVtZW50cy56b25lID0gW107XHJcbiAgICAgICAgdGhpcy5tZWFzdXJlbWVudHNVcGRhdGVkLm5leHQoeyBzcGFjZTogW10sIHpvbmU6IFtdIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubWVhc3VyZW1lbnRzVGFncy5uZXh0KG51bGwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy51cGRhdGluZy5uZXh0KGZhbHNlKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZU1lYXN1cmVtZW50KG1lYXN1cmVtZW50OiBNZWFzdXJlbWVudCk6IFByb21pc2U8Q29tbWVudD4ge1xyXG4gICAgY29uc3QgZGVsZXRlZENvbW1lbnQgPSBhd2FpdCB0aGlzLmNvbW1lbnRTZXJ2aWNlLmRlbGV0ZUNvbW1lbnQoXHJcbiAgICAgIG1lYXN1cmVtZW50LmNvbW1lbnQuaWRcclxuICAgICk7XHJcbiAgICBpZiAoZGVsZXRlZENvbW1lbnQpIHtcclxuICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmRlbGV0ZVBvaShtZWFzdXJlbWVudC5wb2kuaWQpO1xyXG4gICAgICBjb25zdCBwcmVmaXggPSBgJHttZWFzdXJlbWVudC5jb21tZW50LmlkLnNsaWNlKDAsIDgpfV9gO1xyXG4gICAgICBjb25zdCBwYXRoID0gYCR7dGhpcy5wYXRoICsgcHJlZml4fW1lc3VyZS5qcGVnYDtcclxuICAgICAgYXdhaXQgZGVsZXRlRnJvbVMzKHBhdGgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRlbGV0ZWRDb21tZW50O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgY3JlYXRlTWVhc3VyZW1lbnRGb3JTcGFjZShcclxuICAgIGNvbW1lbnRJbnB1dDogQ29tbWVudCxcclxuICAgIGRhdGFNZWFzdXJlbWVudHM6IHsgbWVhc3VyZTogYW55W107IHN3ZWVwOiBzdHJpbmcgfSxcclxuICAgIHNjcmVlbnNob3Q6IGFueSxcclxuICAgIHNwYWNlSUQ6IHN0cmluZ1xyXG4gICk6IFByb21pc2U8TWVhc3VyZW1lbnQ+IHtcclxuICAgIGNvbnN0IGxhc3RNZWFzdXJlID0gZGF0YU1lYXN1cmVtZW50cy5tZWFzdXJlO1xyXG4gICAgY29uc3Qgc3dlZXBJRCA9IGRhdGFNZWFzdXJlbWVudHMuc3dlZXA7XHJcbiAgICBjb25zdCBsYXN0UG9pbnQgPSBsYXN0TWVhc3VyZVtsYXN0TWVhc3VyZS5sZW5ndGggLSAxXTtcclxuICAgIGxldCBjb21tZW50ID0gYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS5jcmVhdGVDb21tZW50KGNvbW1lbnRJbnB1dCk7XHJcbiAgICBjb25zdCBwb2lJbnB1dCA9IHtcclxuICAgICAgY29vcmRpbmF0ZTogSlNPTi5zdHJpbmdpZnkoe1xyXG4gICAgICAgIHg6IGxhc3RQb2ludC54LFxyXG4gICAgICAgIHk6IGxhc3RQb2ludC55LFxyXG4gICAgICAgIHo6IGxhc3RQb2ludC56LFxyXG4gICAgICB9KSxcclxuICAgICAgdHlwZTogUG9pVHlwZS5NRUFTVVJFLFxyXG4gICAgICBlbGVtZW50SUQ6IGNvbW1lbnQuaWQsXHJcbiAgICAgIG1hdHRlcnBvcnRTd2VlcElEOiBzd2VlcElELFxyXG4gICAgfSBhcyBQT0k7XHJcbiAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuY3JlYXRlUE9JRm9yU3BhY2VJRChwb2lJbnB1dCk7XHJcbiAgICBjb25zdCBzY3JlZW4gPSBhd2FpdCBmZXRjaChzY3JlZW5zaG90KTtcclxuICAgIGNvbnN0IGJsb2IgPSBhd2FpdCBzY3JlZW4uYmxvYigpO1xyXG4gICAgY29uc3QgZmlsZSA9IG5ldyBGaWxlKFtibG9iXSwgJ21lc3VyZS5qcGVnJywgeyB0eXBlOiAnaW1hZ2UvanBlZycgfSk7XHJcbiAgICBjb25zdCB1cmwgPSBhd2FpdCB1cGxvYWRGaWxlVG9TMyh0aGlzLnBhdGgsIGZpbGUsIGNvbW1lbnQuaWQpO1xyXG4gICAgaWYgKHVybCkge1xyXG4gICAgICBjb21tZW50ID0gYXdhaXQgdGhpcy5jb21tZW50U2VydmljZS51cGRhdGVDb21tZW50KHtcclxuICAgICAgICBpZDogY29tbWVudC5pZCxcclxuICAgICAgICBhbm5leGU6IHVybCxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBtZWFzdXJlbWVudCA9IHtcclxuICAgICAgY29tbWVudCxcclxuICAgICAgcG9pLFxyXG4gICAgfSBhcyBNZWFzdXJlbWVudDtcclxuXHJcbiAgICBpZiAoISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3NcclxuICAgICAgJiYgISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MucmVjb3JkXHJcbiAgICAgICYmIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5yZWNvcmQoKSkge1xyXG4gICAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MuZ2V0SW5zdGFuY2UoKS5yZWNvcmQoXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiAnT2JqZWN0IENyZWF0aW9uJyxcclxuICAgICAgICAgICAgb2JqZWN0VHlwZTogJ21lYXN1cmVtZW50JyxcclxuICAgICAgICAgICAgbWVhc3VyZW1lbnQ6IG1lYXN1cmVtZW50LFxyXG4gICAgICAgICAgICAvL3pvbmVJZDogc3BhY2VJRCxcclxuICAgICAgICAgICAgdXNlcjogdGhpcy51c2VyU2VydmljZS5jdSxcclxuICAgICAgICAgICAgbG9jYXRpb25JZDogdGhpcy5jdXJyZW50U3BhY2VJRCxcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICB6b25lSWQ6IHRoaXMuem9uZUlERmlsdGVyLFxyXG4gICAgICAgICAgICBmbG9vcklkOiB0aGlzLnNlbGVjdGVkRmxvb3I/LmlkLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN0cmVhbU5hbWU6ICdzbWFydGVycGxhbktpbmVzaXMtYW5hbHl0aWNzJyxcclxuICAgICAgICAgIC8vIHBhcnRpdGlvbktleTogXCJcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgICdBV1NLaW5lc2lzJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENoZWNrIGlmIGEgZGF0ZSBmaWx0ZXIgaXMgY3VycmVudGx5IGFwcGxpZWRcclxuICAgIGlmICh0aGlzLmRhdGVGaWx0ZXIgJiYgdGhpcy5kYXRlRmlsdGVyLmxlbmd0aCA9PT0gMikge1xyXG4gICAgICAvLyBVcGRhdGUgdGhlIGVuZCBkYXRlIG9mIHRoZSBmaWx0ZXIgdG8gdGhlIGN1cnJlbnQgZGF0ZSB0byBlbnN1cmUgdGhlIG5ld2x5IGNyZWF0ZWQgbWVhc3VyZW1lbnQgaXMgaW5jbHVkZWRcclxuICAgICAgY29uc3QgbmV3RW5kRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgIGNvbnN0IG5ld0ZpbHRlciA9IFt0aGlzLmRhdGVGaWx0ZXJbMF0sIG5ld0VuZERhdGVdO1xyXG4gICAgICB0aGlzLmZpbHRlclNlcnZpY2UuZGF0ZUZpbHRlclVwZGF0ZWQobmV3RmlsdGVyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWVhc3VyZW1lbnQ7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRNb2RlbDNERm9yTWVhc3VyZW1lbnQobWVhc3VyZW1lbnQ6IE1lYXN1cmVtZW50KTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIGNvbnN0IHBvaSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS5nZXRQb2lCeUVsZW1lbnRJZChtZWFzdXJlbWVudC5jb21tZW50LmlkKTtcclxuICAgIGlmIChwb2kgJiYgcG9pLm1hdHRlcnBvcnRTd2VlcElEKSB7XHJcbiAgICAgIGNvbnN0IG5hdmlnYXRpb25zID1cclxuICAgICAgICBhd2FpdCB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldE5hdmlnYXRpb25zRm9yTWF0dGVycG9ydElERm9yU3BhY2UoXHJcbiAgICAgICAgICBwb2kubWF0dGVycG9ydFN3ZWVwSUQsXHJcbiAgICAgICAgICBtZWFzdXJlbWVudC5jb21tZW50LnNwYWNlSURcclxuICAgICAgICApO1xyXG4gICAgICBjb25zdCBbcG9pTmF2aWdhdGlvbl0gPSBuYXZpZ2F0aW9ucztcclxuICAgICAgcmV0dXJuIHBvaU5hdmlnYXRpb24ubm9kZS5tb2RlbDNEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRNZWFzdXJlbWVudHNGb3JTcGFjZUZvclVzZXIoXHJcbiAgICBzcGFjZUlEOiBzdHJpbmdcclxuICApOiBQcm9taXNlPE1lYXN1cmVtZW50W10+IHtcclxuICAgIGxldCBjb21tZW50cyA9IGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UuZ2V0Q29tbWVudHNCeVNwYWNlSUQoc3BhY2VJRCk7XHJcbiAgICBjb21tZW50cyA9IGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJNZWFzdXJlbWVudHNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgIHNwYWNlSUQsXHJcbiAgICAgIGNvbW1lbnRzXHJcbiAgICApO1xyXG4gICAgbGV0IG1lYXN1cmVtZW50cyA9IFtdO1xyXG4gICAgaWYgKGNvbW1lbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgY29tbWVudHMubWFwKGFzeW5jIChjb21tZW50KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBtZWFzdXJlbWVudCA9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY29tbWVudFNlcnZpY2UucmVhZENvbW1lbnRBc01lYXN1cmVtZW50KGNvbW1lbnQuaWQpO1xyXG4gICAgICAgICAgbWVhc3VyZW1lbnRzLnB1c2gobWVhc3VyZW1lbnQpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWVhc3VyZW1lbnRzO1xyXG4gIH1cclxuXHJcbiAgdW5zdWJzY3JpYmUoKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==