ng-zenduit 1.0.41 → 1.0.43

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.
@@ -86,6 +86,14 @@ export class ZenduSelectComponent {
86
86
  ngOnChanges(changeObj) {
87
87
  this.filterOptions();
88
88
  this.updateLabel();
89
+ if (changeObj["selectModel"]) {
90
+ if (this.isLazyLoading && this.selectModel?.length) {
91
+ if (!this.filteredOptions?.length && !this.isExpanded) {
92
+ // preload data to show the labels
93
+ this.loadMore(true);
94
+ }
95
+ }
96
+ }
89
97
  }
90
98
  isModelEmpty() {
91
99
  if (this.isMultiselect) {
@@ -223,11 +231,17 @@ export class ZenduSelectComponent {
223
231
  return this.getName(val);
224
232
  }
225
233
  else {
226
- if (!this.options || !this.options.length) {
227
- return '';
234
+ if (this.isLazyLoading) {
235
+ const opt = this.filteredOptions?.find(i => i.id == val);
236
+ return this.getName(opt);
237
+ }
238
+ else {
239
+ if (!this.options || !this.options.length) {
240
+ return '';
241
+ }
242
+ let option = this.options.find(el => this.getId(el) === val);
243
+ return this.getName(option ?? val);
228
244
  }
229
- let option = this.options.find(el => this.getId(el) === val);
230
- return this.getName(option ?? val);
231
245
  }
232
246
  }
233
247
  getName(option) {
@@ -339,6 +353,7 @@ export class ZenduSelectComponent {
339
353
  // add all checked items to the top
340
354
  const checkedItems = await this.lazyLoader({ ids: checkedIds }, 0, 100);
341
355
  this.filteredOptions = checkedItems.concat(this.filteredOptions);
356
+ this.updateLabel();
342
357
  }
343
358
  // the filteredDataSource contains the items that is visilible to user at the current moment
344
359
  this.filteredOptions = this.filteredOptions.concat(newItems);
@@ -414,4 +429,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
414
429
  type: HostListener,
415
430
  args: ['window:scroll', []]
416
431
  }] } });
417
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7OztBQVF2RixNQUFNLE9BQU8sb0JBQW9CO0lBa0k3QixZQUNZLFFBQW9CO1FBQXBCLGFBQVEsR0FBUixRQUFRLENBQVk7UUE1SGhDOztXQUVHO1FBQ08sc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV0RDs7V0FFRztRQUNNLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFFN0I7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLGNBQWMsQ0FBQztRQTRCdEM7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCOztXQUVHO1FBQ00sZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUV6Qjs7V0FFRztRQUNNLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBRTlCOztXQUVHO1FBQ00sZUFBVSxHQUFZLEtBQUssQ0FBQztRQUVyQzs7V0FFRztRQUNNLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQU83Qzs7V0FFRztRQUNPLGlCQUFZLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFcEU7O2FBRUs7UUFDSSx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFPN0M7O1dBRUc7UUFDTSxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQU8vQjs7V0FFRztRQUNPLGlCQUFZLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFPcEU7O1dBRUc7UUFDSSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVmLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUkzQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixpQkFBWSxHQUFHLEtBQUssQ0FBQztJQUk1QixDQUFDO0lBbUJELGVBQWUsQ0FBQyxLQUFLO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkMseUJBQXlCO1lBQ3pCLE9BQU87U0FDVjtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwRCxPQUFPO1NBQ1Y7UUFDRCxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFHRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxXQUFXLENBQUMsU0FBYztRQUM3QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTSxZQUFZO1FBQ2YsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7U0FDeEQ7YUFBTTtZQUNILE9BQU8sT0FBTyxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLElBQUksQ0FBQztTQUMvRTtJQUNMLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxNQUF1QjtRQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbEM7YUFBTTtZQUNILElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDbEM7UUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELDBCQUEwQjtJQUNsQixZQUFZLENBQUMsS0FBc0I7UUFDdkMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFekIsa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU0sWUFBWTtRQUNmLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUN2QjtJQUNMLENBQUM7SUFFRCx3QkFBd0I7SUFDaEIsWUFBWSxDQUFDLEtBQXNCO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztTQUN6QjtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM3QjthQUFNO1lBQ0gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDOUI7UUFFRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLGNBQWMsQ0FBQyxPQUFnQjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRTtZQUNoRCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRTtZQUM1QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQztZQUNoRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDOUUsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLE9BQU8sSUFBSSxVQUFVLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoQztpQkFBTSxJQUFJLENBQUMsT0FBTyxJQUFJLFVBQVUsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUMxQztZQUNELDJDQUEyQztZQUMzQyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGVBQWUsQ0FBQyxLQUFzQjtRQUMxQyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUMzQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1NBQ3ZFO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFDO0lBQ0wsQ0FBQztJQUVNLFNBQVM7UUFDWixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2pELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUN0RjthQUFNO1lBQ0gsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDekI7UUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVNLGNBQWM7UUFDakIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXJCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztZQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3hCO0lBQ0wsQ0FBQztJQUVPLGFBQWE7UUFDakIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDbEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUM7WUFDL0IsT0FBTztTQUNWO1FBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFTSxVQUFVLENBQUMsTUFBdUI7UUFDckMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDckIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBDLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0U7YUFBTTtZQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssUUFBUSxDQUFDO1NBQ3BEO0lBQ0wsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRTtZQUNyQixPQUFPO1NBQ1Y7UUFFRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFFOUMsSUFBSSxhQUFhLEtBQUssQ0FBQyxFQUFFO2dCQUNyQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0Q7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxHQUFHLGFBQWEsV0FBVyxDQUFDO2FBQ2hEO1NBQ0o7YUFBTTtZQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUM1RDtJQUNMLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxHQUFvQjtRQUN4QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO2FBQU07WUFDSCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUN2QyxPQUFPLEVBQUUsQ0FBQzthQUNiO1lBQ0QsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFBO1lBQzVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7U0FDdEM7SUFDTCxDQUFDO0lBRU0sT0FBTyxDQUFDLE1BQXVCO1FBQ2xDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUM5RDtpQkFBTTtnQkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLDRFQUE0RSxDQUFDLENBQUM7Z0JBQzVGLE9BQU8sRUFBRSxDQUFDO2FBQ2I7U0FDSjthQUFNO1lBQ0gsT0FBTyxNQUFNLENBQUM7U0FDakI7SUFDTCxDQUFDO0lBRU8sS0FBSyxDQUFDLE1BQXVCO1FBQ2pDLElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDYixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3pEO2lCQUFNO2dCQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsdUVBQXVFLENBQUMsQ0FBQztnQkFDdkYsT0FBTyxFQUFFLENBQUM7YUFDYjtTQUNKO2FBQU07WUFDSCxPQUFPLE1BQU0sQ0FBQztTQUNqQjtJQUNMLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxNQUFXLEVBQUUsSUFBWTtRQUNsRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksR0FBRyxFQUFFO2dCQUNMLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pCO2lCQUFNO2dCQUNILE9BQU8sSUFBSSxDQUFDO2FBQ2Y7UUFDTCxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDZixDQUFDO0lBRU0sS0FBSyxDQUFDLFlBQVk7UUFDckIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7SUFDNUIsQ0FBQztJQUVPLFVBQVU7UUFDZCxzQkFBc0I7UUFDdEIscUZBQXFGO1FBQ3JGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsRCxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDVixDQUFDO0lBRU8sZUFBZTtRQUNuQixzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEtBQUssQ0FBQztJQUNoRSxDQUFDO0lBRU8sZ0JBQWdCO1FBRXBCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDO1FBQzVDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUVoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDO1FBRWxDLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3BCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO2FBQ0k7WUFDRCxPQUFPLFFBQVEsQ0FBQTtTQUNsQjtJQUNMLENBQUM7SUFFTyxnQkFBZ0I7UUFDcEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUU7WUFDckQsT0FBTyxPQUFPLENBQUM7U0FDbEI7UUFFRCxNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUM7UUFDbkQsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNqRCxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0IsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzlCLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBNEIsQ0FBQztRQUM3RCxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsc0JBQXNCLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztRQUN4RixPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQUM7SUFDbEMsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtRQUNsRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUE7SUFDdkIsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO1FBQ3pDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUN2QixDQUFDO0lBSU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxpQkFBMEI7UUFDNUMsSUFBSTtZQUNBLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUNsQixNQUFNLHlCQUF5QixDQUFBO2FBQ2xDO1lBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO2FBQzdCO1lBRUQsK0NBQStDO1lBQy9DLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzVELElBQUksUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBRTFHLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxDQUFDO1lBRTlDLGtEQUFrRDtZQUNsRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBdUIsQ0FBQztZQUVoRCxJQUFJLGlCQUFpQixJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUU7Z0JBRXpDLGlDQUFpQztnQkFDakMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDcEYsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQVksQ0FBQyxDQUFDLENBQUM7Z0JBRXRFLG1EQUFtRDtnQkFDbkQsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDeEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzthQUNwRTtZQUdELDRGQUE0RjtZQUM1RixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBRWhFO1FBQ0QsT0FBTyxHQUFHLEVBQUU7WUFDUixPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3RCO2dCQUNPO1lBQ0osSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7U0FDN0I7SUFDTCxDQUFDOztrSEExZFEsb0JBQW9CO3NHQUFwQixvQkFBb0IsazFCQXlJZiwwQkFBMEIsZ0ZBSzFCLHlCQUF5QixpRkFLekIsMEJBQTBCLHFFQy9KNUMsMnlOQXdJQTs0RkQ1SGEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNJLFlBQVk7aUdBU2IsV0FBVztzQkFBbkIsS0FBSztnQkFLSSxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBS0UsT0FBTztzQkFBZixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFNRyxZQUFZO3NCQUFwQixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBS0csYUFBYTtzQkFBckIsS0FBSztnQkFLSSxZQUFZO3NCQUFyQixNQUFNO2dCQUtFLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFLRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBS0csYUFBYTtzQkFBckIsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtJLFlBQVk7c0JBQXJCLE1BQU07Z0JBK0JtQyxjQUFjO3NCQUF2RCxZQUFZO3VCQUFDLDBCQUEwQjtnQkFLQyxhQUFhO3NCQUFyRCxZQUFZO3VCQUFDLHlCQUF5QjtnQkFLRyxjQUFjO3NCQUF2RCxZQUFZO3VCQUFDLDBCQUEwQjtnQkFJeEMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWM1QyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsZUFBZSxFQUFFLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBPdXRwdXQsIENvbnRlbnRDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBaZW5kdVNlbGVjdE9wdGlvbkRpcmVjdGl2ZSB9IGZyb20gJy4vdGVtcGxhdGVzL3plbmR1LXNlbGVjdC1vcHRpb24uZGlyZWN0aXZlJztcbmltcG9ydCB7IFplbmR1U2VsZWN0VmFsdWVEaXJlY3RpdmUgfSBmcm9tICcuL3RlbXBsYXRlcy96ZW5kdS1zZWxlY3QtdmFsdWUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFplbmR1U2VsZWN0QnV0dG9uRGlyZWN0aXZlIH0gZnJvbSAnLi90ZW1wbGF0ZXMvemVuZHUtc2VsZWN0LWJ1dHRvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4uL2ZpbHRlci9maWx0ZXJzQ29uZmlnJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd6ZW4tc2VsZWN0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vemVuZHUtc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi96ZW5kdS1zZWxlY3QuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBaZW5kdVNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgLyoqXG4gICAgICogMi1XYXkgY29tcG9uZW50IHByb3BlcnR5IGZvciBzZWxlY3RlZCBpdGVtcy5cbiAgICAgKiBEb24ndCBpbml0aWFsaXplIHByb3BlcnR5IG9uIGNvbnN0cnVjdG9yIHRvIHByZXZlbnQgY2hhbmdlIHNvdXJjZSBwYXJhbWV0ZXJcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzZWxlY3RNb2RlbDogYW55IHwgYW55W107XG5cbiAgICAvKipcbiAgICAgKiBjYWxsYmFjayB0byBlbWl0IGNoYW5nZXMgZm9yIHBhcmVudCBjb21wb25lbnRcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgc2VsZWN0TW9kZWxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKlxuICAgICAqIExpc3Qgb2Ygb3B0aW9ucyBmb3Igc2VsZWN0XG4gICAgICovXG4gICAgQElucHV0KCkgb3B0aW9uczogYW55W10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFByb3BlcnR5IHRvIHNldCBjdXN0b20gcGxhY2Vob2xkZXIgdmFsdWVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICdTZWxlY3QgSXRlbXMnO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhIGtleSB2YWx1ZSB0byBnZXQgZGlzcGxheSBuYW1lIGZyb20gb3B0aW9uIG9iamVjdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGRpc3BsYXlQcm9wOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGlzIGEga2V5IHZhbHVlIHRvIGdldCBpZCBmcm9tIG9wdGlvbiBvYmplY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpZFByb3A6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbXBvbmVudCBwcm9wZXJ0eSB0byBlbmFibGUgc2VhcmNoXG4gICAgICovXG4gICAgQElucHV0KCkgaGFzU2VhcmNoOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ29tcG9uZW50IHByb3BlcnR5IHRvIHJldHVybiB3aG9sZSBvcHRpb24gb2JqZWN0XG4gICAgICogQnkgZGVmYXVsdCBvbmx5IGlkIHZhbHVlIGlzIHJldHVybmVkXG4gICAgICovXG4gICAgQElucHV0KCkgcmV0dXJuT3B0aW9uOiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ29tcG9uZW50IHByb3BlcnR5IHRvIGVuYWJsZSBtdWx0aXNlbGVjdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGlzTXVsdGlzZWxlY3Q6IGJvb2xlYW47XG5cbiAgICAvKipcbiAgICAgKiBDb21wb25lbnQgcHJvcGVydHkgdG8gZGlzYWJsZSBjb21wb25lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2hvdyB0aGUgY3VzdG9tIGljb24gZm9yIHRvZ2dsZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGN1c3RvbUljb24gPSBcIlwiO1xuXG4gICAgLyoqXG4gICAgICogQ29sb3IgZm9yIGN1c3RvbSBpY29uXG4gICAgICovXG4gICAgQElucHV0KCkgY3VzdG9tSWNvbkNvbG9yID0gXCJcIjtcblxuICAgIC8qKlxuICAgICAqIFRydW5jYXRlIHRleHQgd2l0aCBcIi4uLlwiIGF0IHRoZSBlbmRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpc1RydW5jYXRlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBzaG93IEFkZCBOZXcgT3B0aW9uIGF0IGZpcnN0IHBsYWNlXG4gICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlQWRkTmV3T3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBkaXNwbGF5IGN1c3RvbSB0ZXh0IGZvciBBZGQgTmV3IE9wdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIG5ld09wdGlvblRleHQ6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEVtaXQgZXZlbnQgd2hlbiBBZGQgTmV3IE9wdGlvbiBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIGFkZE5ld09wdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKlxuICAgICAgICogc2hvdyByZW1vdmUgT3B0aW9uIGF0IGZpcnN0IHBsYWNlXG4gICAgICAgKi9cbiAgICBASW5wdXQoKSBlbmFibGVSZW1vdmVPcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIGRpc3BsYXkgY3VzdG9tIHRleHQgZm9yIHJlbW92ZSBPcHRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSByZW1vdmVPcHRpb25UZXh0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFbmFibGUgbGF6eSBsb2FkaW5nIGZvciBvcHRpb25zXG4gICAgICovXG4gICAgQElucHV0KCkgaXNMYXp5TG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogTGF6eSBsb2FkZXIgZnVuY3Rpb24gdG8gZmV0Y2ggb3B0aW9uc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGxhenlMb2FkZXI/OiAoc2VhcmNoOiB7IHRleHQ/OiBzdHJpbmcsIGlkcz86IHN0cmluZ1tdIH0sIG9mZnNldDogbnVtYmVyLCBsaW1pdDogbnVtYmVyKSA9PiBQcm9taXNlPERhdGFTb3VyY2VbXT47XG5cbiAgICAvKipcbiAgICAgKiBFbWl0IGV2ZW50IHdoZW4gcmVtb3ZlIE9wdGlvbiBpcyBjbGlja2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpIHJlbW92ZU9wdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIC8qKlxuICAgICAqIEZpbHRlcmVkIGl0ZW1zIHZpc2libGUgb24gZHJvcGRvd25cbiAgICAgKi9cbiAgICBwdWJsaWMgZmlsdGVyZWRPcHRpb25zOiBhbnlbXTtcblxuICAgIC8qKlxuICAgICAqIElzIGRyb3Bkb3duIGV4cGFuZGVkXG4gICAgICovXG4gICAgcHVibGljIGlzRXhwYW5kZWQgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBzZWFyY2hUZXh0ID0gJyc7XG5cbiAgICBwdWJsaWMgbGFiZWxUZXh0ID0gJyc7XG5cbiAgICBwdWJsaWMgaXNUb3BNZW51RGlyZWN0aW9uID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgb3B0aW9uOiBhbnlcblxuICAgIHB1YmxpYyBjYW5Mb2FkTW9yZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIGlzTG9hZGluZ05vdyA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF9lbGVtZW50OiBFbGVtZW50UmVmKSB7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IE9wdGlvbiBUZW1wbGF0ZSBmb3IgY3VzdG9tIEhUTUxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKFplbmR1U2VsZWN0T3B0aW9uRGlyZWN0aXZlKSBvcHRpb25UZW1wbGF0ZTogWmVuZHVTZWxlY3RPcHRpb25EaXJlY3RpdmU7XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3QgVmFsdWUgVGVtcGxhdGUgZm9yIGN1c3RvbSBIVE1MXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChaZW5kdVNlbGVjdFZhbHVlRGlyZWN0aXZlKSB2YWx1ZVRlbXBsYXRlOiBaZW5kdVNlbGVjdFZhbHVlRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IE9wdGlvbiBUZW1wbGF0ZSBmb3IgY3VzdG9tIEhUTUxcbiAgICAgKi9cbiAgICBAQ29udGVudENoaWxkKFplbmR1U2VsZWN0QnV0dG9uRGlyZWN0aXZlKSBidXR0b25UZW1wbGF0ZTogWmVuZHVTZWxlY3RCdXR0b25EaXJlY3RpdmU7XG5cblxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZWRvd24nLCBbJyRldmVudCddKVxuICAgIG91dHNpZGVIYW5kbGluZyhldmVudCkge1xuICAgICAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgLy8gZWxlbWVudCBub3QgaW4gdGhlIERPTVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGhpZGUgdGhlIG1lbnUgZm9yIG91dHNpZGUgY2xpY2tcbiAgICAgICAgdGhpcy5oaWRlRHJvcERvd24oKTtcbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6c2Nyb2xsJywgW10pXG4gICAgc2Nyb2xsKCkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBsYWNlbWVudCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VPYmo6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZpbHRlck9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVMYWJlbCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc01vZGVsRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5zZWxlY3RNb2RlbCB8fCAhdGhpcy5zZWxlY3RNb2RlbC5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuc2VsZWN0TW9kZWwgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMuc2VsZWN0TW9kZWwgPT09IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlT3B0aW9uQ2xpY2sob3B0aW9uOiBzdHJpbmcgfCBvYmplY3QpIHtcbiAgICAgICAgdGhpcy5vcHRpb24gPSBvcHRpb247XG4gICAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gdGhpcy5yZXR1cm5PcHRpb24gPyBvcHRpb24gOiB0aGlzLmdldElkKG9wdGlvbik7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVPcHRpb24ob3B0aW9uVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVTZWxlY3Qob3B0aW9uVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLy8gTG9naWMgZm9yIHNpbmdsZSBzZWxlY3RcbiAgICBwcml2YXRlIHNpbmdsZVNlbGVjdCh2YWx1ZTogc3RyaW5nIHwgb2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0TW9kZWwgPSB2YWx1ZTtcblxuICAgICAgICAvLyAgSGlkZSBkcm9wZG93biBpZiBzaW5nbGUgc2VsZWN0XG4gICAgICAgIHRoaXMuaGlkZURyb3BEb3duKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUV4cGFuZCgpIHtcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gXCJcIjtcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gICAgICAgIHRoaXMudXBkYXRlUGxhY2VtZW50KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZCAmJiB0aGlzLmlzTGF6eUxvYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb2dpYyBmb3IgbXVsdGlzZWxlY3RcbiAgICBwcml2YXRlIHRvZ2dsZU9wdGlvbih2YWx1ZTogc3RyaW5nIHwgb2JqZWN0KTogdm9pZCB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlbCA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEVsZW1lbnRJbmRleCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlbC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2hpbGRyZW4odHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUNoaWxkcmVuKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlTGFiZWwoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZUNoaWxkcmVuKGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbiB8fCAhdGhpcy5vcHRpb24uQ2hpbGRyZW5zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbi5DaGlsZHJlbnMuZm9yRWFjaCgoY2hpbGQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChlbCA9PiB0aGlzLmdldElkKGVsKSA9PT0gY2hpbGQpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRJbmRleCA9IHRoaXMuc2VsZWN0TW9kZWwuZmluZEluZGV4KGVsID0+IHRoaXMuZ2V0SWQoZWwpID09PSBjaGlsZCk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb24gJiYgY2hlY2tlZCAmJiBjaGlsZEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWwucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjaGVja2VkICYmIGNoaWxkSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWwuc3BsaWNlKGNoaWxkSW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVjdXJzaXZlIGNhbGwgdG8gaGFuZGxlIG5lc3RlZCBjaGlsZHJlblxuICAgICAgICAgICAgdGhpcy50b2dnbGVDaGlsZHJlbihjaGVja2VkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbGVtZW50SW5kZXgodmFsdWU6IHN0cmluZyB8IG9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUlkID0gdGhpcy5nZXRJZCh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlbC5maW5kSW5kZXgoZWwgPT4gdGhpcy5nZXRJZChlbCkgPT09IHZhbHVlSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZWwuaW5kZXhPZih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlQWxsKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RNb2RlbC5sZW5ndGggIT09IHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWwgPSB0aGlzLm9wdGlvbnMubWFwKGVsID0+IHRoaXMucmV0dXJuT3B0aW9uID8gZWwgOiB0aGlzLmdldElkKGVsKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWFyY2hDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTGF6eUxvYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gW107XG4gICAgICAgICAgICB0aGlzLmNhbkxvYWRNb3JlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLnNsaWNlKDApO1xuXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodGhpcy5zZWFyY2hUZXh0LCAnaScpO1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiByZWdleC50ZXN0KHRoaXMuZ2V0TmFtZShvcHRpb24pKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzU2VsZWN0ZWQob3B0aW9uOiBzdHJpbmcgfCBvYmplY3QpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNb2RlbEVtcHR5KCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbklkID0gdGhpcy5nZXRJZChvcHRpb24pO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGVsLmZpbmRJbmRleChlbCA9PiB0aGlzLmdldElkKGVsKSA9PT0gb3B0aW9uSWQpID49IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRJZCh0aGlzLnNlbGVjdE1vZGVsKSA9PT0gb3B0aW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlTGFiZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTW9kZWxFbXB0eSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gdGhpcy5zZWxlY3RNb2RlbC5sZW5ndGg7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZENvdW50ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFRleHQgPSB0aGlzLmdldE5hbWVGcm9tVmFsdWUodGhpcy5zZWxlY3RNb2RlbFswXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxUZXh0ID0gYCR7c2VsZWN0ZWRDb3VudH0gU2VsZWN0ZWRgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sYWJlbFRleHQgPSB0aGlzLmdldE5hbWVGcm9tVmFsdWUodGhpcy5zZWxlY3RNb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZUZyb21WYWx1ZSh2YWw6IHN0cmluZyB8IG9iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnJldHVybk9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFtZSh2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm9wdGlvbnMgfHwgIXRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgb3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoZWwgPT4gdGhpcy5nZXRJZChlbCkgPT09IHZhbClcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5hbWUob3B0aW9uID8/IHZhbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZShvcHRpb246IHN0cmluZyB8IG9iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzcGxheVByb3ApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5HZXRSZWN1cnNpdmVQcm9wZXJ0eShvcHRpb24sIHRoaXMuZGlzcGxheVByb3ApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBcHAtU2VsZWN0OiB3aGVuIHVzaW5nIG9iamVjdHMgYXMgbW9kZWwsIGEgZGlzcGxheVByb3AgdmFsdWUgaXMgbWFuZGF0b3J5LicpO1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SWQob3B0aW9uOiBzdHJpbmcgfCBvYmplY3QpOiBzdHJpbmcge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlkUHJvcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkdldFJlY3Vyc2l2ZVByb3BlcnR5KG9wdGlvbiwgdGhpcy5pZFByb3ApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBcHAtU2VsZWN0OiB3aGVuIHVzaW5nIG9iamVjdHMgYXMgbW9kZWwsIGEgaWRQcm9wIHZhbHVlIGlzIG1hbmRhdG9yeS4nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb247XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIEdldFJlY3Vyc2l2ZVByb3BlcnR5KG9iamVjdDogYW55LCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgob2JqLCB4KSA9PiB7XG4gICAgICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ialt4XTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIG9iamVjdCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGhpZGVEcm9wRG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0Q2hhbmdlKCkge1xuICAgICAgICAvLyBub3RpZnkgd2l0aCB0aW1lb3V0XG4gICAgICAgIC8vIGFsbG93IG91dHB1dCBwcm9wZXJ0eSBcImVuYWJsZWRcIiBhcHBsaWVkIGJ5IHBhcmVudCBmaXJzdCBhbmQgdGhlbiBlbWl0IHRoZSBvbkNoYW5nZVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWxDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdE1vZGVsKTtcbiAgICAgICAgfSwgMSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVQbGFjZW1lbnQoKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBtZW51IHBvc2l0aW9uIGJhc2Ugb24gc2Nyb2xsXG4gICAgICAgIHRoaXMuaXNUb3BNZW51RGlyZWN0aW9uID0gdGhpcy5nZXRNZW51RGlyZWN0aW9uKCkgPT09IFwidG9wXCI7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNZW51RGlyZWN0aW9uKCk6IFwiYm90dG9tXCIgfCBcInRvcFwiIHtcblxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB0b3AgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcblxuICAgICAgICBjb25zdCBoZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cbiAgICAgICAgaWYgKHRvcCA+IChoZWlnaHQgLyAyKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwidG9wXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gXCJib3R0b21cIlxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRNYXhNZW51SGVpZ2h0KCkge1xuICAgICAgICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gdGhpcy5nZXRDb250YWluZXJFbGVtZW50KCk7XG4gICAgICAgIGlmICghY29udGFpbmVyRWxlbWVudCB8fCAhY29udGFpbmVyRWxlbWVudC5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjE5MHB4XCI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRIZWlnaHQgPSBjb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgbGV0IGhlaWdodCA9IE1hdGgucm91bmQoKHBhcmVudEhlaWdodCAvIDIpIC0gMjUpO1xuICAgICAgICBoZWlnaHQgPSBNYXRoLm1pbigyMTYsIGhlaWdodCk7XG4gICAgICAgIGhlaWdodCA9IE1hdGgubWF4KDk2LCBoZWlnaHQpO1xuICAgICAgICByZXR1cm4gYCR7aGVpZ2h0fXB4YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbnRhaW5lckVsZW1lbnQoKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gY29tcG9uZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJhcHAtc2VsZWN0XCIpLml0ZW0oMCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIHJldHVybiBjb250YWluZXIub2Zmc2V0UGFyZW50O1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVBZGROZXdPcHRpb24oKSB7XG4gICAgICAgIHRoaXMuYWRkTmV3T3B0aW9uLmVtaXQoeyB2YWx1ZTogdGhpcy5zZWFyY2hUZXh0IH0pXG4gICAgICAgIHRoaXMuaGlkZURyb3BEb3duKClcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlUmVtb3ZlT3B0aW9uKCkge1xuICAgICAgICB0aGlzLnJlbW92ZU9wdGlvbi5lbWl0KHsgcmVtb3ZlZDogdHJ1ZSB9KVxuICAgICAgICB0aGlzLmhpZGVEcm9wRG93bigpXG4gICAgfVxuXG5cblxuICAgIHB1YmxpYyBhc3luYyBsb2FkTW9yZShzaG93U2VsZWN0ZWRPblRvcDogYm9vbGVhbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdOb3cgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxhenlMb2FkZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBgbG9hZGVyIGlzIG5vdCBhdmFpbGFibGVgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuZmlsdGVyZWRPcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbG9hZCBmaXJzdCAxMCByZWNvcmRzIGZvciB0aGUgdGhlIGZpcnN0IHRpbWVcbiAgICAgICAgICAgIGNvbnN0IGxpbWl0ID0gKHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PSAwKSA/IDEwIDogMTAwO1xuICAgICAgICAgICAgbGV0IG5ld0l0ZW1zID0gYXdhaXQgdGhpcy5sYXp5TG9hZGVyKHsgdGV4dDogdGhpcy5zZWFyY2hUZXh0IHx8IFwiXCIgfSwgdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoLCBsaW1pdCk7XG5cbiAgICAgICAgICAgIHRoaXMuY2FuTG9hZE1vcmUgPSAobmV3SXRlbXMubGVuZ3RoID09IGxpbWl0KTtcblxuICAgICAgICAgICAgLy8gdGhlIHNlbGVjdE1vZGVsIGNvbnRhaW5zIHRoZSBzZWxlY3RlZCBpdGVtcyBpZHNcbiAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRJZHMgPSB0aGlzLnNlbGVjdE1vZGVsIGFzIHN0cmluZ1tdO1xuXG4gICAgICAgICAgICBpZiAoc2hvd1NlbGVjdGVkT25Ub3AgJiYgY2hlY2tlZElkcz8ubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGNoZWNrZWQgaXRlbXMgZmlyc3RcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmZpbHRlcihpID0+ICFjaGVja2VkSWRzLmluY2x1ZGVzKGkuaWQpKTtcbiAgICAgICAgICAgICAgICBuZXdJdGVtcyA9IG5ld0l0ZW1zLmZpbHRlcihpID0+ICFjaGVja2VkSWRzLmluY2x1ZGVzKGkuaWQgYXMgc3RyaW5nKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgYWxsIGNoZWNrZWQgaXRlbXMgdG8gdGhlIHRvcCAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCBjaGVja2VkSXRlbXMgPSBhd2FpdCB0aGlzLmxhenlMb2FkZXIoeyBpZHM6IGNoZWNrZWRJZHMgfSwgMCwgMTAwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IGNoZWNrZWRJdGVtcy5jb25jYXQodGhpcy5maWx0ZXJlZE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIC8vIHRoZSBmaWx0ZXJlZERhdGFTb3VyY2UgY29udGFpbnMgdGhlIGl0ZW1zIHRoYXQgaXMgdmlzaWxpYmxlIHRvIHVzZXIgYXQgdGhlIGN1cnJlbnQgbW9tZW50XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZmlsdGVyZWRPcHRpb25zLmNvbmNhdChuZXdJdGVtcyk7XG5cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ05vdyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImFwcC1zZWxlY3RcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYXBwLXNlbGVjdC10b2dnbGVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVFeHBhbmQoKVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7J2FjdGl2ZSc6IGlzRXhwYW5kZWR9XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtc2VsZWN0LWxhYmVsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTW9kZWxFbXB0eSgpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3twbGFjZWhvbGRlciB8IHRyYW5zbGF0ZX19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtaXRlbVwiXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzTXVsdGlzZWxlY3QgJiYgIWlzTW9kZWxFbXB0eSgpXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwidmFsdWVUZW1wbGF0ZSAmJiBzZWxlY3RNb2RlbFswXTsgZWxzZSB0cGxWYWx1ZVRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ2YWx1ZVRlbXBsYXRlLnRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgc2VsZWN0TW9kZWw6IHNlbGVjdE1vZGVsLCBsYWJlbFRleHQ6IGxhYmVsVGV4dCB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3RwbFZhbHVlVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWxUZXh0IHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc011bHRpc2VsZWN0ICYmICFpc01vZGVsRW1wdHkoKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IGxhYmVsVGV4dCB8IHRyYW5zbGF0ZSAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxpICpuZ0lmPVwiIWN1c3RvbUljb25cIlxuICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGFwcC1zZWxlY3QtaWNvblwiPmV4cGFuZF9tb3JlPC9pPlxuICAgICAgICA8aSAqbmdJZj1cImN1c3RvbUljb25cIlxuICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIGN1c3RvbS1pY29uXCJcbiAgICAgICAgICAgW3N0eWxlLmNvbG9yXT1cImN1c3RvbUljb25Db2xvclwiPnt7Y3VzdG9tSWNvbn19PC9pPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGRpdiBjbGFzcz1cImFjdGlvbi1tZW51LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLW1lbnUgYXBwLXNlbGVjdC1kcm9wZG93bi13cmFwcGVyXCJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzaG93LXRvcCc6IGlzVG9wTWVudURpcmVjdGlvbiB9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdC1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNFeHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbWVudS1oZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJoYXNTZWFyY2hcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLVNlYXJjaCBvcHRpb25zLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHplbi1zZWFyY2gtYm94IFsodGV4dCldPVwic2VhcmNoVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRleHRDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoKVwiPjwvemVuLXNlYXJjaC1ib3g+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImJ1dHRvblRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiYnV0dG9uVGVtcGxhdGUudGVtcGxhdGVcIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbWVudS1ib2R5XCI+XG4gICAgICAgICAgICAgICAgICAgIDwhLS1ObyBvcHRpb25zIGZvdW5kLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJuby1vcHRpb25zLWZvdW5kXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoICYmICFpc0xvYWRpbmdOb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdObyBtYXRjaGluZyBvcHRpb25zIGZvdW5kJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tU2VsZWN0IEFsbCBPcHRpb24tLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1pdGVtLWNoZWNrYm94IHNlbGVjdC1hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNNdWx0aXNlbGVjdCAmJiAhc2VhcmNoVGV4dCAmJiAhaXNMYXp5TG9hZGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUFsbCgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8emVuLWNoZWNrYm94IFtjaGVja2VkXT1cInNlbGVjdE1vZGVsLmxlbmd0aCA9PT0gb3B0aW9ucy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJzZWxlY3RNb2RlbC5sZW5ndGggIT09IG9wdGlvbnMubGVuZ3RoICYmIHNlbGVjdE1vZGVsLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVmFsdWVDaGFuZ2VdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInU2VsZWN0IEFsbCcgfCB0cmFuc2xhdGVcIj48L3plbi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLVNpbmdsZSBzZWxlY3QgT3B0aW9ucy0tPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTXVsdGlzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVBZGROZXdPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUFkZE5ld09wdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJuZXdPcHRpb25UZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG5ld09wdGlvblRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhbmV3T3B0aW9uVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydBZGQgTmV3JyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImFjdGlvbi1pdGVtIHJlbW92ZS1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZW5hYmxlUmVtb3ZlT3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVSZW1vdmVPcHRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicmVtb3ZlT3B0aW9uVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyByZW1vdmVPcHRpb25UZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXJlbW92ZU9wdGlvblRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snUmVtb3ZlIFNlbGVjdGVkJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImFjdGlvbi1pdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVPcHRpb25DbGljayhvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IGlzU2VsZWN0ZWQob3B0aW9uKSB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGlvbi1pdGVtLXRydW5jYXRlXT1cImlzVHJ1bmNhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwib3B0aW9uVGVtcGxhdGU7IGVsc2UgdHBsT3B0aW9uVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25UZW1wbGF0ZS50ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBvcHRpb246IG9wdGlvbiB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdHBsT3B0aW9uVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldE5hbWUob3B0aW9uKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLU11bHRpc2VsZWN0IE9wdGlvbnMtLT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTXVsdGlzZWxlY3RcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24taXRlbS1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9wdGlvbkNsaWNrKG9wdGlvbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLWNoZWNrYm94ICpuZ0lmPVwiaXNNdWx0aXNlbGVjdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImdldE5hbWUob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVZhbHVlQ2hhbmdlXT1cInRydWVcIj48L3plbi1jaGVja2JveD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMYXp5TG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYW5Mb2FkTW9yZSAmJiAhaXNMb2FkaW5nTm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZE1vcmUoZmFsc2UpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbi1zdHJva2VkIGZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0xvYWQgTW9yZScgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nTm93XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibG9hZGVyLW1vcmUtc3Bpbm5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8emVuLXNwaW5uZXIgc2l6ZT1cInNtYWxsXCI+PC96ZW4tc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiemVuZHUtc2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXplbmR1aXQvc3JjL2xpYi9zZWxlY3QvemVuZHUtc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQWEsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxSCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUN2RixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNyRixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7OztBQVF2RixNQUFNLE9BQU8sb0JBQW9CO0lBa0k3QixZQUNZLFFBQW9CO1FBQXBCLGFBQVEsR0FBUixRQUFRLENBQVk7UUE1SGhDOztXQUVHO1FBQ08sc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUV0RDs7V0FFRztRQUNNLFlBQU8sR0FBVSxFQUFFLENBQUM7UUFFN0I7O1dBRUc7UUFDTSxnQkFBVyxHQUFHLGNBQWMsQ0FBQztRQTRCdEM7O1dBRUc7UUFDTSxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRTFCOztXQUVHO1FBQ00sZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUV6Qjs7V0FFRztRQUNNLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBRTlCOztXQUVHO1FBQ00sZUFBVSxHQUFZLEtBQUssQ0FBQztRQUVyQzs7V0FFRztRQUNNLHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQU83Qzs7V0FFRztRQUNPLGlCQUFZLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFFcEU7O2FBRUs7UUFDSSx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFPN0M7O1dBRUc7UUFDTSxrQkFBYSxHQUFHLEtBQUssQ0FBQztRQU8vQjs7V0FFRztRQUNPLGlCQUFZLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFPcEU7O1dBRUc7UUFDSSxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFFaEIsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVmLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUkzQixnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUVwQixpQkFBWSxHQUFHLEtBQUssQ0FBQztJQUk1QixDQUFDO0lBbUJELGVBQWUsQ0FBQyxLQUFLO1FBQ2pCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDdkMseUJBQXlCO1lBQ3pCLE9BQU87U0FDVjtRQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwRCxPQUFPO1NBQ1Y7UUFDRCxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFHRCxNQUFNO1FBQ0YsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFTSxXQUFXLENBQUMsU0FBYztRQUM3QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5CLElBQUksU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQzFCLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRTtnQkFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDbkQsa0NBQWtDO29CQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUN2QjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRU0sWUFBWTtRQUNmLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1NBQ3hEO2FBQU07WUFDSCxPQUFPLE9BQU8sSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLENBQUM7U0FDL0U7SUFDTCxDQUFDO0lBRU0saUJBQWlCLENBQUMsTUFBdUI7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXBFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRTtZQUNwQixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2xDO2FBQU07WUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCwwQkFBMEI7SUFDbEIsWUFBWSxDQUFDLEtBQXNCO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1FBRXpCLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVNLFlBQVk7UUFDZixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXZCLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDdkI7SUFDTCxDQUFDO0lBRUQsd0JBQXdCO0lBQ2hCLFlBQVksQ0FBQyxLQUFzQjtRQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7WUFDbEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7U0FDekI7UUFFRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTFDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNYLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDN0I7YUFBTTtZQUNILElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlCO1FBRUQsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFTyxjQUFjLENBQUMsT0FBZ0I7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUU7WUFDaEQsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBYSxFQUFFLEVBQUU7WUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDaEUsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDO1lBQzlFLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTtnQkFDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEM7aUJBQU0sSUFBSSxDQUFDLE9BQU8sSUFBSSxVQUFVLElBQUksQ0FBQyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDMUM7WUFDRCwyQ0FBMkM7WUFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxlQUFlLENBQUMsS0FBc0I7UUFDMUMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQztTQUN2RTthQUFNO1lBQ0gsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQztJQUNMLENBQUM7SUFFTSxTQUFTO1FBQ1osSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDdEY7YUFBTTtZQUNILElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1NBQ3pCO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFTSxjQUFjO1FBQ2pCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN4QjtJQUNMLENBQUM7SUFFTyxhQUFhO1FBQ2pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1lBQy9CLE9BQU87U0FDVjtRQUVELE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLGVBQWUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRU0sVUFBVSxDQUFDLE1BQXVCO1FBQ3JDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3JCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBRUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVwQyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQzdFO2FBQU07WUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLFFBQVEsQ0FBQztTQUNwRDtJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUU7WUFDckIsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO1lBRTlDLElBQUksYUFBYSxLQUFLLENBQUMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQy9EO2lCQUFNO2dCQUNILElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxhQUFhLFdBQVcsQ0FBQzthQUNoRDtTQUNKO2FBQU07WUFDSCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDNUQ7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsR0FBb0I7UUFDeEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUM1QjthQUFNO1lBQ0gsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO2dCQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ3pELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM1QjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO29CQUN2QyxPQUFPLEVBQUUsQ0FBQztpQkFDYjtnQkFDRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUE7Z0JBQzVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUM7YUFDdEM7U0FDSjtJQUNMLENBQUM7SUFFTSxPQUFPLENBQUMsTUFBdUI7UUFDbEMsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDNUIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO2dCQUNsQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzlEO2lCQUFNO2dCQUNILE9BQU8sQ0FBQyxLQUFLLENBQUMsNEVBQTRFLENBQUMsQ0FBQztnQkFDNUYsT0FBTyxFQUFFLENBQUM7YUFDYjtTQUNKO2FBQU07WUFDSCxPQUFPLE1BQU0sQ0FBQztTQUNqQjtJQUNMLENBQUM7SUFFTyxLQUFLLENBQUMsTUFBdUI7UUFDakMsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUU7WUFDNUIsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNiLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7YUFDekQ7aUJBQU07Z0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyx1RUFBdUUsQ0FBQyxDQUFDO2dCQUN2RixPQUFPLEVBQUUsQ0FBQzthQUNiO1NBQ0o7YUFBTTtZQUNILE9BQU8sTUFBTSxDQUFDO1NBQ2pCO0lBQ0wsQ0FBQztJQUVPLG9CQUFvQixDQUFDLE1BQVcsRUFBRSxJQUFZO1FBQ2xELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDckMsSUFBSSxHQUFHLEVBQUU7Z0JBQ0wsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakI7aUJBQU07Z0JBQ0gsT0FBTyxJQUFJLENBQUM7YUFDZjtRQUNMLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFTSxLQUFLLENBQUMsWUFBWTtRQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUM1QixDQUFDO0lBRU8sVUFBVTtRQUNkLHNCQUFzQjtRQUN0QixxRkFBcUY7UUFDckYsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNWLENBQUM7SUFFTyxlQUFlO1FBQ25CLHNDQUFzQztRQUN0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEtBQUssS0FBSyxDQUFDO0lBQ2hFLENBQUM7SUFFTyxnQkFBZ0I7UUFFcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDNUMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRyxDQUFDO1FBRWhELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUM7UUFFbEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDcEIsT0FBTyxLQUFLLENBQUM7U0FDaEI7YUFDSTtZQUNELE9BQU8sUUFBUSxDQUFBO1NBQ2xCO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQjtRQUNwQixNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRTtZQUNyRCxPQUFPLE9BQU8sQ0FBQztTQUNsQjtRQUVELE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLFlBQVksQ0FBQztRQUNuRCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvQixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDOUIsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUE0QixDQUFDO1FBQzdELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFnQixDQUFDO1FBQ3hGLE9BQU8sU0FBUyxDQUFDLFlBQVksQ0FBQztJQUNsQyxDQUFDO0lBRU0sa0JBQWtCO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFBO1FBQ2xELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQTtJQUN2QixDQUFDO0lBRU0sa0JBQWtCO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7UUFDekMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFBO0lBQ3ZCLENBQUM7SUFJTSxLQUFLLENBQUMsUUFBUSxDQUFDLGlCQUEwQjtRQUM1QyxJQUFJO1lBQ0EsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ2xCLE1BQU0seUJBQXlCLENBQUE7YUFDbEM7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7YUFDN0I7WUFFRCwrQ0FBK0M7WUFDL0MsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7WUFDNUQsSUFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFMUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLENBQUM7WUFFOUMsa0RBQWtEO1lBQ2xELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUF1QixDQUFDO1lBRWhELElBQUksaUJBQWlCLElBQUksVUFBVSxFQUFFLE1BQU0sRUFBRTtnQkFFekMsaUNBQWlDO2dCQUNqQyxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNwRixRQUFRLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBWSxDQUFDLENBQUMsQ0FBQztnQkFFdEUsbURBQW1EO2dCQUNuRCxNQUFNLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN4RSxJQUFJLENBQUMsZUFBZSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUVqRSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7YUFDdEI7WUFHRCw0RkFBNEY7WUFDNUYsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUVoRTtRQUNELE9BQU8sR0FBRyxFQUFFO1lBQ1IsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUN0QjtnQkFDTztZQUNKLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzdCO0lBQ0wsQ0FBQzs7a0hBM2VRLG9CQUFvQjtzR0FBcEIsb0JBQW9CLGsxQkF5SWYsMEJBQTBCLGdGQUsxQix5QkFBeUIsaUZBS3pCLDBCQUEwQixxRUMvSjVDLDJ5TkF3SUE7NEZENUhhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDSSxZQUFZO2lHQVNiLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0ksaUJBQWlCO3NCQUExQixNQUFNO2dCQUtFLE9BQU87c0JBQWYsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBS0csTUFBTTtzQkFBZCxLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBTUcsWUFBWTtzQkFBcEIsS0FBSztnQkFLRyxhQUFhO3NCQUFyQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUtHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0ksWUFBWTtzQkFBckIsTUFBTTtnQkFLRSxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBS0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUtHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLSSxZQUFZO3NCQUFyQixNQUFNO2dCQStCbUMsY0FBYztzQkFBdkQsWUFBWTt1QkFBQywwQkFBMEI7Z0JBS0MsYUFBYTtzQkFBckQsWUFBWTt1QkFBQyx5QkFBeUI7Z0JBS0csY0FBYztzQkFBdkQsWUFBWTt1QkFBQywwQkFBMEI7Z0JBSXhDLGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFjNUMsTUFBTTtzQkFETCxZQUFZO3VCQUFDLGVBQWUsRUFBRSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT3V0cHV0LCBDb250ZW50Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgWmVuZHVTZWxlY3RPcHRpb25EaXJlY3RpdmUgfSBmcm9tICcuL3RlbXBsYXRlcy96ZW5kdS1zZWxlY3Qtb3B0aW9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBaZW5kdVNlbGVjdFZhbHVlRGlyZWN0aXZlIH0gZnJvbSAnLi90ZW1wbGF0ZXMvemVuZHUtc2VsZWN0LXZhbHVlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBaZW5kdVNlbGVjdEJ1dHRvbkRpcmVjdGl2ZSB9IGZyb20gJy4vdGVtcGxhdGVzL3plbmR1LXNlbGVjdC1idXR0b24uZGlyZWN0aXZlJztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuLi9maWx0ZXIvZmlsdGVyc0NvbmZpZyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnemVuLXNlbGVjdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3plbmR1LXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vemVuZHUtc2VsZWN0LmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgWmVuZHVTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIC8qKlxuICAgICAqIDItV2F5IGNvbXBvbmVudCBwcm9wZXJ0eSBmb3Igc2VsZWN0ZWQgaXRlbXMuXG4gICAgICogRG9uJ3QgaW5pdGlhbGl6ZSBwcm9wZXJ0eSBvbiBjb25zdHJ1Y3RvciB0byBwcmV2ZW50IGNoYW5nZSBzb3VyY2UgcGFyYW1ldGVyXG4gICAgICovXG4gICAgQElucHV0KCkgc2VsZWN0TW9kZWw6IGFueSB8IGFueVtdO1xuXG4gICAgLyoqXG4gICAgICogY2FsbGJhY2sgdG8gZW1pdCBjaGFuZ2VzIGZvciBwYXJlbnQgY29tcG9uZW50XG4gICAgICovXG4gICAgQE91dHB1dCgpIHNlbGVjdE1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBMaXN0IG9mIG9wdGlvbnMgZm9yIHNlbGVjdFxuICAgICAqL1xuICAgIEBJbnB1dCgpIG9wdGlvbnM6IGFueVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBQcm9wZXJ0eSB0byBzZXQgY3VzdG9tIHBsYWNlaG9sZGVyIHZhbHVlXG4gICAgICovXG4gICAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnU2VsZWN0IEl0ZW1zJztcblxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgYSBrZXkgdmFsdWUgdG8gZ2V0IGRpc3BsYXkgbmFtZSBmcm9tIG9wdGlvbiBvYmplY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkaXNwbGF5UHJvcDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBpcyBhIGtleSB2YWx1ZSB0byBnZXQgaWQgZnJvbSBvcHRpb24gb2JqZWN0XG4gICAgICovXG4gICAgQElucHV0KCkgaWRQcm9wOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDb21wb25lbnQgcHJvcGVydHkgdG8gZW5hYmxlIHNlYXJjaFxuICAgICAqL1xuICAgIEBJbnB1dCgpIGhhc1NlYXJjaDogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvbXBvbmVudCBwcm9wZXJ0eSB0byByZXR1cm4gd2hvbGUgb3B0aW9uIG9iamVjdFxuICAgICAqIEJ5IGRlZmF1bHQgb25seSBpZCB2YWx1ZSBpcyByZXR1cm5lZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHJldHVybk9wdGlvbjogYm9vbGVhbjtcblxuICAgIC8qKlxuICAgICAqIENvbXBvbmVudCBwcm9wZXJ0eSB0byBlbmFibGUgbXVsdGlzZWxlY3RcbiAgICAgKi9cbiAgICBASW5wdXQoKSBpc011bHRpc2VsZWN0OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogQ29tcG9uZW50IHByb3BlcnR5IHRvIGRpc2FibGUgY29tcG9uZW50XG4gICAgICovXG4gICAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIGN1c3RvbSBpY29uIGZvciB0b2dnbGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjdXN0b21JY29uID0gXCJcIjtcblxuICAgIC8qKlxuICAgICAqIENvbG9yIGZvciBjdXN0b20gaWNvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIGN1c3RvbUljb25Db2xvciA9IFwiXCI7XG5cbiAgICAvKipcbiAgICAgKiBUcnVuY2F0ZSB0ZXh0IHdpdGggXCIuLi5cIiBhdCB0aGUgZW5kXG4gICAgICovXG4gICAgQElucHV0KCkgaXNUcnVuY2F0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogc2hvdyBBZGQgTmV3IE9wdGlvbiBhdCBmaXJzdCBwbGFjZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIGVuYWJsZUFkZE5ld09wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogZGlzcGxheSBjdXN0b20gdGV4dCBmb3IgQWRkIE5ldyBPcHRpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBuZXdPcHRpb25UZXh0OiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFbWl0IGV2ZW50IHdoZW4gQWRkIE5ldyBPcHRpb24gaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBhZGROZXdPcHRpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgICAqIHNob3cgcmVtb3ZlIE9wdGlvbiBhdCBmaXJzdCBwbGFjZVxuICAgICAgICovXG4gICAgQElucHV0KCkgZW5hYmxlUmVtb3ZlT3B0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBkaXNwbGF5IGN1c3RvbSB0ZXh0IGZvciByZW1vdmUgT3B0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcmVtb3ZlT3B0aW9uVGV4dDogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRW5hYmxlIGxhenkgbG9hZGluZyBmb3Igb3B0aW9uc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGlzTGF6eUxvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIExhenkgbG9hZGVyIGZ1bmN0aW9uIHRvIGZldGNoIG9wdGlvbnNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBsYXp5TG9hZGVyPzogKHNlYXJjaDogeyB0ZXh0Pzogc3RyaW5nLCBpZHM/OiBzdHJpbmdbXSB9LCBvZmZzZXQ6IG51bWJlciwgbGltaXQ6IG51bWJlcikgPT4gUHJvbWlzZTxEYXRhU291cmNlW10+O1xuXG4gICAgLyoqXG4gICAgICogRW1pdCBldmVudCB3aGVuIHJlbW92ZSBPcHRpb24gaXMgY2xpY2tlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKSByZW1vdmVPcHRpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJlZCBpdGVtcyB2aXNpYmxlIG9uIGRyb3Bkb3duXG4gICAgICovXG4gICAgcHVibGljIGZpbHRlcmVkT3B0aW9uczogYW55W107XG5cbiAgICAvKipcbiAgICAgKiBJcyBkcm9wZG93biBleHBhbmRlZFxuICAgICAqL1xuICAgIHB1YmxpYyBpc0V4cGFuZGVkID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgc2VhcmNoVGV4dCA9ICcnO1xuXG4gICAgcHVibGljIGxhYmVsVGV4dCA9ICcnO1xuXG4gICAgcHVibGljIGlzVG9wTWVudURpcmVjdGlvbiA9IGZhbHNlO1xuXG4gICAgcHVibGljIG9wdGlvbjogYW55XG5cbiAgICBwdWJsaWMgY2FuTG9hZE1vcmUgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBpc0xvYWRpbmdOb3cgPSBmYWxzZTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZikge1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBPcHRpb24gVGVtcGxhdGUgZm9yIGN1c3RvbSBIVE1MXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChaZW5kdVNlbGVjdE9wdGlvbkRpcmVjdGl2ZSkgb3B0aW9uVGVtcGxhdGU6IFplbmR1U2VsZWN0T3B0aW9uRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IFZhbHVlIFRlbXBsYXRlIGZvciBjdXN0b20gSFRNTFxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoWmVuZHVTZWxlY3RWYWx1ZURpcmVjdGl2ZSkgdmFsdWVUZW1wbGF0ZTogWmVuZHVTZWxlY3RWYWx1ZURpcmVjdGl2ZTtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBPcHRpb24gVGVtcGxhdGUgZm9yIGN1c3RvbSBIVE1MXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZChaZW5kdVNlbGVjdEJ1dHRvbkRpcmVjdGl2ZSkgYnV0dG9uVGVtcGxhdGU6IFplbmR1U2VsZWN0QnV0dG9uRGlyZWN0aXZlO1xuXG5cbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2Vkb3duJywgWyckZXZlbnQnXSlcbiAgICBvdXRzaWRlSGFuZGxpbmcoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIC8vIGVsZW1lbnQgbm90IGluIHRoZSBET01cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBoaWRlIHRoZSBtZW51IGZvciBvdXRzaWRlIGNsaWNrXG4gICAgICAgIHRoaXMuaGlkZURyb3BEb3duKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnNjcm9sbCcsIFtdKVxuICAgIHNjcm9sbCgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVQbGFjZW1lbnQoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlT2JqOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gICAgICAgIHRoaXMudXBkYXRlTGFiZWwoKTtcblxuICAgICAgICBpZiAoY2hhbmdlT2JqW1wic2VsZWN0TW9kZWxcIl0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTGF6eUxvYWRpbmcgJiYgdGhpcy5zZWxlY3RNb2RlbD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZpbHRlcmVkT3B0aW9ucz8ubGVuZ3RoICYmICF0aGlzLmlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHJlbG9hZCBkYXRhIHRvIHNob3cgdGhlIGxhYmVsc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRNb3JlKHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBpc01vZGVsRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5zZWxlY3RNb2RlbCB8fCAhdGhpcy5zZWxlY3RNb2RlbC5sZW5ndGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMuc2VsZWN0TW9kZWwgPT09ICd1bmRlZmluZWQnIHx8IHRoaXMuc2VsZWN0TW9kZWwgPT09IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlT3B0aW9uQ2xpY2sob3B0aW9uOiBzdHJpbmcgfCBvYmplY3QpIHtcbiAgICAgICAgdGhpcy5vcHRpb24gPSBvcHRpb247XG4gICAgICAgIGNvbnN0IG9wdGlvblZhbHVlID0gdGhpcy5yZXR1cm5PcHRpb24gPyBvcHRpb24gOiB0aGlzLmdldElkKG9wdGlvbik7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgdGhpcy50b2dnbGVPcHRpb24ob3B0aW9uVmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVTZWxlY3Qob3B0aW9uVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7XG4gICAgfVxuXG4gICAgLy8gTG9naWMgZm9yIHNpbmdsZSBzZWxlY3RcbiAgICBwcml2YXRlIHNpbmdsZVNlbGVjdCh2YWx1ZTogc3RyaW5nIHwgb2JqZWN0KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0TW9kZWwgPSB2YWx1ZTtcblxuICAgICAgICAvLyAgSGlkZSBkcm9wZG93biBpZiBzaW5nbGUgc2VsZWN0XG4gICAgICAgIHRoaXMuaGlkZURyb3BEb3duKCk7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZUV4cGFuZCgpIHtcbiAgICAgICAgdGhpcy5pc0V4cGFuZGVkID0gIXRoaXMuaXNFeHBhbmRlZDtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXh0ID0gXCJcIjtcbiAgICAgICAgdGhpcy5maWx0ZXJPcHRpb25zKCk7XG4gICAgICAgIHRoaXMudXBkYXRlUGxhY2VtZW50KCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNFeHBhbmRlZCAmJiB0aGlzLmlzTGF6eUxvYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmUodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMb2dpYyBmb3IgbXVsdGlzZWxlY3RcbiAgICBwcml2YXRlIHRvZ2dsZU9wdGlvbih2YWx1ZTogc3RyaW5nIHwgb2JqZWN0KTogdm9pZCB7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdE1vZGVsKSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlbCA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEVsZW1lbnRJbmRleCh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlbC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlQ2hpbGRyZW4odHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZUNoaWxkcmVuKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlTGFiZWwoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZUNoaWxkcmVuKGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm9wdGlvbiB8fCAhdGhpcy5vcHRpb24uQ2hpbGRyZW5zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9wdGlvbi5DaGlsZHJlbnMuZm9yRWFjaCgoY2hpbGQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgdGhpcy5vcHRpb24gPSB0aGlzLm9wdGlvbnMuZmluZChlbCA9PiB0aGlzLmdldElkKGVsKSA9PT0gY2hpbGQpO1xuICAgICAgICAgICAgY29uc3QgY2hpbGRJbmRleCA9IHRoaXMuc2VsZWN0TW9kZWwuZmluZEluZGV4KGVsID0+IHRoaXMuZ2V0SWQoZWwpID09PSBjaGlsZCk7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb24gJiYgY2hlY2tlZCAmJiBjaGlsZEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWwucHVzaChjaGlsZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFjaGVja2VkICYmIGNoaWxkSW5kZXggPj0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWwuc3BsaWNlKGNoaWxkSW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVjdXJzaXZlIGNhbGwgdG8gaGFuZGxlIG5lc3RlZCBjaGlsZHJlblxuICAgICAgICAgICAgdGhpcy50b2dnbGVDaGlsZHJlbihjaGVja2VkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRFbGVtZW50SW5kZXgodmFsdWU6IHN0cmluZyB8IG9iamVjdCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUlkID0gdGhpcy5nZXRJZCh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RNb2RlbC5maW5kSW5kZXgoZWwgPT4gdGhpcy5nZXRJZChlbCkgPT09IHZhbHVlSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0TW9kZWwuaW5kZXhPZih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlQWxsKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RNb2RlbC5sZW5ndGggIT09IHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0TW9kZWwgPSB0aGlzLm9wdGlvbnMubWFwKGVsID0+IHRoaXMucmV0dXJuT3B0aW9uID8gZWwgOiB0aGlzLmdldElkKGVsKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdE1vZGVsID0gW107XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVtaXRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TZWFyY2hDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmlsdGVyT3B0aW9ucygpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTGF6eUxvYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gW107XG4gICAgICAgICAgICB0aGlzLmNhbkxvYWRNb3JlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubG9hZE1vcmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJPcHRpb25zKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zLnNsaWNlKDApO1xuXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAodGhpcy5zZWFyY2hUZXh0LCAnaScpO1xuICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IG9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiByZWdleC50ZXN0KHRoaXMuZ2V0TmFtZShvcHRpb24pKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzU2VsZWN0ZWQob3B0aW9uOiBzdHJpbmcgfCBvYmplY3QpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNb2RlbEVtcHR5KCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbklkID0gdGhpcy5nZXRJZChvcHRpb24pO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdE1vZGVsLmZpbmRJbmRleChlbCA9PiB0aGlzLmdldElkKGVsKSA9PT0gb3B0aW9uSWQpID49IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRJZCh0aGlzLnNlbGVjdE1vZGVsKSA9PT0gb3B0aW9uSWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlTGFiZWwoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzTW9kZWxFbXB0eSgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc011bHRpc2VsZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZENvdW50ID0gdGhpcy5zZWxlY3RNb2RlbC5sZW5ndGg7XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZENvdW50ID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFRleHQgPSB0aGlzLmdldE5hbWVGcm9tVmFsdWUodGhpcy5zZWxlY3RNb2RlbFswXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxUZXh0ID0gYCR7c2VsZWN0ZWRDb3VudH0gU2VsZWN0ZWRgO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sYWJlbFRleHQgPSB0aGlzLmdldE5hbWVGcm9tVmFsdWUodGhpcy5zZWxlY3RNb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZUZyb21WYWx1ZSh2YWw6IHN0cmluZyB8IG9iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLnJldHVybk9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFtZSh2YWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNMYXp5TG9hZGluZykge1xuICAgICAgICAgICAgICAgIGNvbnN0IG9wdCA9IHRoaXMuZmlsdGVyZWRPcHRpb25zPy5maW5kKGkgPT4gaS5pZCA9PSB2YWwpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldE5hbWUob3B0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zIHx8ICF0aGlzLm9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKGVsID0+IHRoaXMuZ2V0SWQoZWwpID09PSB2YWwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TmFtZShvcHRpb24gPz8gdmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXROYW1lKG9wdGlvbjogc3RyaW5nIHwgb2JqZWN0KTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNwbGF5UHJvcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLkdldFJlY3Vyc2l2ZVByb3BlcnR5KG9wdGlvbiwgdGhpcy5kaXNwbGF5UHJvcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FwcC1TZWxlY3Q6IHdoZW4gdXNpbmcgb2JqZWN0cyBhcyBtb2RlbCwgYSBkaXNwbGF5UHJvcCB2YWx1ZSBpcyBtYW5kYXRvcnkuJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJZChvcHRpb246IHN0cmluZyB8IG9iamVjdCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgaWYgKHRoaXMuaWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuR2V0UmVjdXJzaXZlUHJvcGVydHkob3B0aW9uLCB0aGlzLmlkUHJvcCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0FwcC1TZWxlY3Q6IHdoZW4gdXNpbmcgb2JqZWN0cyBhcyBtb2RlbCwgYSBpZFByb3AgdmFsdWUgaXMgbWFuZGF0b3J5LicpO1xuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgR2V0UmVjdXJzaXZlUHJvcGVydHkob2JqZWN0OiBhbnksIHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBwYXRoLnNwbGl0KCcuJykucmVkdWNlKChvYmosIHgpID0+IHtcbiAgICAgICAgICAgIGlmIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqW3hdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgb2JqZWN0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGlkZURyb3BEb3duKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmlzRXhwYW5kZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVtaXRDaGFuZ2UoKSB7XG4gICAgICAgIC8vIG5vdGlmeSB3aXRoIHRpbWVvdXRcbiAgICAgICAgLy8gYWxsb3cgb3V0cHV0IHByb3BlcnR5IFwiZW5hYmxlZFwiIGFwcGxpZWQgYnkgcGFyZW50IGZpcnN0IGFuZCB0aGVuIGVtaXQgdGhlIG9uQ2hhbmdlXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RNb2RlbENoYW5nZS5lbWl0KHRoaXMuc2VsZWN0TW9kZWwpO1xuICAgICAgICB9LCAxKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVBsYWNlbWVudCgpIHtcbiAgICAgICAgLy8gdXBkYXRlIG1lbnUgcG9zaXRpb24gYmFzZSBvbiBzY3JvbGxcbiAgICAgICAgdGhpcy5pc1RvcE1lbnVEaXJlY3Rpb24gPSB0aGlzLmdldE1lbnVEaXJlY3Rpb24oKSA9PT0gXCJ0b3BcIjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1lbnVEaXJlY3Rpb24oKTogXCJib3R0b21cIiB8IFwidG9wXCIge1xuXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRvcCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblxuICAgICAgICBpZiAodG9wID4gKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJ0b3BcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcImJvdHRvbVwiXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE1heE1lbnVIZWlnaHQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW1lbnQgPSB0aGlzLmdldENvbnRhaW5lckVsZW1lbnQoKTtcbiAgICAgICAgaWYgKCFjb250YWluZXJFbGVtZW50IHx8ICFjb250YWluZXJFbGVtZW50LmNsaWVudEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiMTkwcHhcIjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudEhlaWdodCA9IGNvbnRhaW5lckVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICBsZXQgaGVpZ2h0ID0gTWF0aC5yb3VuZCgocGFyZW50SGVpZ2h0IC8gMikgLSAyNSk7XG4gICAgICAgIGhlaWdodCA9IE1hdGgubWluKDIxNiwgaGVpZ2h0KTtcbiAgICAgICAgaGVpZ2h0ID0gTWF0aC5tYXgoOTYsIGhlaWdodCk7XG4gICAgICAgIHJldHVybiBgJHtoZWlnaHR9cHhgO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29udGFpbmVyRWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5fZWxlbWVudC5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBjb25zdCBjb250YWluZXIgPSBjb21wb25lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImFwcC1zZWxlY3RcIikuaXRlbSgwKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5lci5vZmZzZXRQYXJlbnQ7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUFkZE5ld09wdGlvbigpIHtcbiAgICAgICAgdGhpcy5hZGROZXdPcHRpb24uZW1pdCh7IHZhbHVlOiB0aGlzLnNlYXJjaFRleHQgfSlcbiAgICAgICAgdGhpcy5oaWRlRHJvcERvd24oKVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVSZW1vdmVPcHRpb24oKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlT3B0aW9uLmVtaXQoeyByZW1vdmVkOiB0cnVlIH0pXG4gICAgICAgIHRoaXMuaGlkZURyb3BEb3duKClcbiAgICB9XG5cblxuXG4gICAgcHVibGljIGFzeW5jIGxvYWRNb3JlKHNob3dTZWxlY3RlZE9uVG9wOiBib29sZWFuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmlzTG9hZGluZ05vdyA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIXRoaXMubGF6eUxvYWRlcikge1xuICAgICAgICAgICAgICAgIHRocm93IGBsb2FkZXIgaXMgbm90IGF2YWlsYWJsZWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5maWx0ZXJlZE9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBsb2FkIGZpcnN0IDEwIHJlY29yZHMgZm9yIHRoZSB0aGUgZmlyc3QgdGltZVxuICAgICAgICAgICAgY29uc3QgbGltaXQgPSAodGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09IDApID8gMTAgOiAxMDA7XG4gICAgICAgICAgICBsZXQgbmV3SXRlbXMgPSBhd2FpdCB0aGlzLmxhenlMb2FkZXIoeyB0ZXh0OiB0aGlzLnNlYXJjaFRleHQgfHwgXCJcIiB9LCB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgsIGxpbWl0KTtcblxuICAgICAgICAgICAgdGhpcy5jYW5Mb2FkTW9yZSA9IChuZXdJdGVtcy5sZW5ndGggPT0gbGltaXQpO1xuXG4gICAgICAgICAgICAvLyB0aGUgc2VsZWN0TW9kZWwgY29udGFpbnMgdGhlIHNlbGVjdGVkIGl0ZW1zIGlkc1xuICAgICAgICAgICAgY29uc3QgY2hlY2tlZElkcyA9IHRoaXMuc2VsZWN0TW9kZWwgYXMgc3RyaW5nW107XG5cbiAgICAgICAgICAgIGlmIChzaG93U2VsZWN0ZWRPblRvcCAmJiBjaGVja2VkSWRzPy5sZW5ndGgpIHtcblxuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY2hlY2tlZCBpdGVtcyBmaXJzdFxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMuZmlsdGVyKGkgPT4gIWNoZWNrZWRJZHMuaW5jbHVkZXMoaS5pZCkpO1xuICAgICAgICAgICAgICAgIG5ld0l0ZW1zID0gbmV3SXRlbXMuZmlsdGVyKGkgPT4gIWNoZWNrZWRJZHMuaW5jbHVkZXMoaS5pZCBhcyBzdHJpbmcpKTtcblxuICAgICAgICAgICAgICAgIC8vIGFkZCBhbGwgY2hlY2tlZCBpdGVtcyB0byB0aGUgdG9wICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IGNoZWNrZWRJdGVtcyA9IGF3YWl0IHRoaXMubGF6eUxvYWRlcih7IGlkczogY2hlY2tlZElkcyB9LCAwLCAxMDApO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gY2hlY2tlZEl0ZW1zLmNvbmNhdCh0aGlzLmZpbHRlcmVkT3B0aW9ucyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxhYmVsKCk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgLy8gdGhlIGZpbHRlcmVkRGF0YVNvdXJjZSBjb250YWlucyB0aGUgaXRlbXMgdGhhdCBpcyB2aXNpbGlibGUgdG8gdXNlciBhdCB0aGUgY3VycmVudCBtb21lbnRcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMuY29uY2F0KG5ld0l0ZW1zKTtcblxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nTm93ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYXBwLXNlbGVjdFwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJhcHAtc2VsZWN0LXRvZ2dsZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZCgpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnYWN0aXZlJzogaXNFeHBhbmRlZH1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFwcC1zZWxlY3QtbGFiZWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNNb2RlbEVtcHR5KClcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj57e3BsYWNlaG9sZGVyIHwgdHJhbnNsYXRlfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3RlZC1pdGVtXCJcbiAgICAgICAgICAgICAgICAgKm5nSWY9XCIhaXNNdWx0aXNlbGVjdCAmJiAhaXNNb2RlbEVtcHR5KClcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJ2YWx1ZVRlbXBsYXRlICYmIHNlbGVjdE1vZGVsWzBdOyBlbHNlIHRwbFZhbHVlVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInZhbHVlVGVtcGxhdGUudGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBzZWxlY3RNb2RlbDogc2VsZWN0TW9kZWwsIGxhYmVsVGV4dDogbGFiZWxUZXh0IH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdHBsVmFsdWVUZXh0PlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBsYWJlbFRleHQgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlbGVjdGVkLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTXVsdGlzZWxlY3QgJiYgIWlzTW9kZWxFbXB0eSgpXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgbGFiZWxUZXh0IHwgdHJhbnNsYXRlICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGkgKm5nSWY9XCIhY3VzdG9tSWNvblwiXG4gICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgYXBwLXNlbGVjdC1pY29uXCI+ZXhwYW5kX21vcmU8L2k+XG4gICAgICAgIDxpICpuZ0lmPVwiY3VzdG9tSWNvblwiXG4gICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgY3VzdG9tLWljb25cIlxuICAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiY3VzdG9tSWNvbkNvbG9yXCI+e3tjdXN0b21JY29ufX08L2k+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLW1lbnUtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhY3Rpb24tbWVudSBhcHAtc2VsZWN0LWRyb3Bkb3duLXdyYXBwZXJcIlxuICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3Nob3ctdG9wJzogaXNUb3BNZW51RGlyZWN0aW9uIH1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcHAtc2VsZWN0LWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0V4cGFuZGVkXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1tZW51LWhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhhc1NlYXJjaFwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tU2VhcmNoIG9wdGlvbnMtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8emVuLXNlYXJjaC1ib3ggWyh0ZXh0KV09XCJzZWFyY2hUZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGV4dENoYW5nZSk9XCJvblNlYXJjaENoYW5nZSgpXCI+PC96ZW4tc2VhcmNoLWJveD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiYnV0dG9uVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJidXR0b25UZW1wbGF0ZS50ZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1tZW51LWJvZHlcIj5cbiAgICAgICAgICAgICAgICAgICAgPCEtLU5vIG9wdGlvbnMgZm91bmQtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5vLW9wdGlvbnMtZm91bmRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpbHRlcmVkT3B0aW9ucy5sZW5ndGggJiYgIWlzTG9hZGluZ05vd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ05vIG1hdGNoaW5nIG9wdGlvbnMgZm91bmQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS1TZWxlY3QgQWxsIE9wdGlvbi0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWl0ZW0tY2hlY2tib3ggc2VsZWN0LWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc011bHRpc2VsZWN0ICYmICFzZWFyY2hUZXh0ICYmICFpc0xhenlMb2FkaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlQWxsKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tY2hlY2tib3ggW2NoZWNrZWRdPVwic2VsZWN0TW9kZWwubGVuZ3RoID09PSBvcHRpb25zLmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cInNlbGVjdE1vZGVsLmxlbmd0aCAhPT0gb3B0aW9ucy5sZW5ndGggJiYgc2VsZWN0TW9kZWwubGVuZ3RoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVWYWx1ZUNoYW5nZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidTZWxlY3QgQWxsJyB8IHRyYW5zbGF0ZVwiPjwvemVuLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tU2luZ2xlIHNlbGVjdCBPcHRpb25zLS0+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNNdWx0aXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJhY3Rpb24taXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImVuYWJsZUFkZE5ld09wdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQWRkTmV3T3B0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm5ld09wdGlvblRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbmV3T3B0aW9uVGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFuZXdPcHRpb25UZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J0FkZCBOZXcnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYWN0aW9uLWl0ZW0gcmVtb3ZlLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJlbmFibGVSZW1vdmVPcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVJlbW92ZU9wdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyZW1vdmVPcHRpb25UZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHJlbW92ZU9wdGlvblRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhcmVtb3ZlT3B0aW9uVGV4dFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydSZW1vdmUgU2VsZWN0ZWQnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZU9wdGlvbkNsaWNrKG9wdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogaXNTZWxlY3RlZChvcHRpb24pIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aW9uLWl0ZW0tdHJ1bmNhdGVdPVwiaXNUcnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJvcHRpb25UZW1wbGF0ZTsgZWxzZSB0cGxPcHRpb25UZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvblRlbXBsYXRlLnRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG9wdGlvbjogb3B0aW9uIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0cGxPcHRpb25UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0TmFtZShvcHRpb24pIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tTXVsdGlzZWxlY3QgT3B0aW9ucy0tPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNNdWx0aXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1pdGVtLWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBmaWx0ZXJlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlT3B0aW9uQ2xpY2sob3B0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tY2hlY2tib3ggKm5nSWY9XCJpc011bHRpc2VsZWN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzU2VsZWN0ZWQob3B0aW9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwiZ2V0TmFtZShvcHRpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlVmFsdWVDaGFuZ2VdPVwidHJ1ZVwiPjwvemVuLWNoZWNrYm94PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xhenlMb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNhbkxvYWRNb3JlICYmICFpc0xvYWRpbmdOb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhY3Rpb24taXRlbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJsb2FkTW9yZShmYWxzZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uLXN0cm9rZWQgZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snTG9hZCBNb3JlJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdOb3dcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJsb2FkZXItbW9yZS1zcGlubmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx6ZW4tc3Bpbm5lciBzaXplPVwic21hbGxcIj48L3plbi1zcGlubmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -2042,8 +2042,17 @@ class ZenduSelectComponent {
2042
2042
  this.updatePlacement();
2043
2043
  }
2044
2044
  ngOnChanges(changeObj) {
2045
+ var _a, _b;
2045
2046
  this.filterOptions();
2046
2047
  this.updateLabel();
2048
+ if (changeObj["selectModel"]) {
2049
+ if (this.isLazyLoading && ((_a = this.selectModel) === null || _a === void 0 ? void 0 : _a.length)) {
2050
+ if (!((_b = this.filteredOptions) === null || _b === void 0 ? void 0 : _b.length) && !this.isExpanded) {
2051
+ // preload data to show the labels
2052
+ this.loadMore(true);
2053
+ }
2054
+ }
2055
+ }
2047
2056
  }
2048
2057
  isModelEmpty() {
2049
2058
  if (this.isMultiselect) {
@@ -2178,15 +2187,22 @@ class ZenduSelectComponent {
2178
2187
  }
2179
2188
  }
2180
2189
  getNameFromValue(val) {
2190
+ var _a;
2181
2191
  if (this.returnOption) {
2182
2192
  return this.getName(val);
2183
2193
  }
2184
2194
  else {
2185
- if (!this.options || !this.options.length) {
2186
- return '';
2195
+ if (this.isLazyLoading) {
2196
+ const opt = (_a = this.filteredOptions) === null || _a === void 0 ? void 0 : _a.find(i => i.id == val);
2197
+ return this.getName(opt);
2198
+ }
2199
+ else {
2200
+ if (!this.options || !this.options.length) {
2201
+ return '';
2202
+ }
2203
+ let option = this.options.find(el => this.getId(el) === val);
2204
+ return this.getName(option !== null && option !== void 0 ? option : val);
2187
2205
  }
2188
- let option = this.options.find(el => this.getId(el) === val);
2189
- return this.getName(option !== null && option !== void 0 ? option : val);
2190
2206
  }
2191
2207
  }
2192
2208
  getName(option) {
@@ -2301,6 +2317,7 @@ class ZenduSelectComponent {
2301
2317
  // add all checked items to the top
2302
2318
  const checkedItems = yield this.lazyLoader({ ids: checkedIds }, 0, 100);
2303
2319
  this.filteredOptions = checkedItems.concat(this.filteredOptions);
2320
+ this.updateLabel();
2304
2321
  }
2305
2322
  // the filteredDataSource contains the items that is visilible to user at the current moment
2306
2323
  this.filteredOptions = this.filteredOptions.concat(newItems);