@smarterplan/ngx-smarterplan-core 1.4.8 → 1.4.10

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.
@@ -312,13 +312,16 @@ export class MatterportService {
312
312
  onCollectionUpdated: function subscr(collection) {
313
313
  this.sweeps = Object.keys(collection);
314
314
  this.sweepCollection = collection;
315
+ // Rebuild sid ↔ uuid maps whenever the collection updates
316
+ this.navigationService.buildSweepIdMaps(collection);
315
317
  }.bind(this),
316
318
  });
317
- // subscribe to current sweep
319
+ // subscribe to current sweep – emit uuid (DB format) instead of raw sid
318
320
  this.sdk.Sweep.current.subscribe(function subscr(currentSweep) {
319
321
  if (currentSweep.sid === '')
320
322
  return;
321
- this.currentSweep.next(currentSweep.sid);
323
+ const uuid = this.navigationService.resolveSweepUuid(currentSweep.sid);
324
+ this.currentSweep.next(uuid);
322
325
  }.bind(this));
323
326
  // Subscribe to Floor data
324
327
  this.sdk.Floor.data.subscribe({
@@ -444,11 +447,14 @@ export class MatterportService {
444
447
  });
445
448
  });
446
449
  }
450
+ /**
451
+ * @deprecated Use navigationService.resolveSweepUuid() instead.
452
+ * Kept temporarily for backwards compatibility.
453
+ */
447
454
  getSweepUUIDForSid(sid) {
448
- const collection = this.sweepCollection;
449
- if (!collection || !collection[sid])
450
- return null;
451
- return collection[sid].uuid ?? null;
455
+ return this.navigationService.resolveSweepUuid(sid) !== sid
456
+ ? this.navigationService.resolveSweepUuid(sid)
457
+ : null;
452
458
  }
453
459
  setLightingOff() {
454
460
  this.noLightForObjects = true;
@@ -824,7 +830,7 @@ export class MatterportService {
824
830
  mattertagData.setPosition(JSON.parse(poi.coordinate));
825
831
  mattertagData.setPoi(poi); // to keep custom tagIcon and opacity
826
832
  }
827
- mattertagData.setSweepID(this.poseCamera.sweep);
833
+ mattertagData.setSweepID(this.navigationService.resolveSweepUuid(this.poseCamera.sweep));
828
834
  mattertagData.setRotation(this.poseCamera.rotation);
829
835
  mattertagData.setObject(element, poiType);
830
836
  this.mattertagToFollow = await this.addMattertagToViewer(mattertagData);
@@ -837,7 +843,7 @@ export class MatterportService {
837
843
  */
838
844
  async addMattertagWhenAdding(poiType) {
839
845
  const mattertagData = new MattertagData(poiType);
840
- mattertagData.setSweepID(this.poseCamera.sweep);
846
+ mattertagData.setSweepID(this.navigationService.resolveSweepUuid(this.poseCamera.sweep));
841
847
  mattertagData.setRotation(this.poseCamera.rotation);
842
848
  this.setInteractionMode(ViewerInteractions.ADDING);
843
849
  await this.addCursorMattertag(mattertagData);
@@ -1136,4 +1142,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1136
1142
  type: Inject,
1137
1143
  args: ['config']
1138
1144
  }] }, { type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.BaseVisibilityService }, { type: i0.NgZone }, { type: i3.MatterportMeasurementService }, { type: i4.MatterportNavigationService }, { type: i5.MatterportPointerService }, { type: i6.MatterportObject3DService }, { type: i7.MatterportTagService }] });
1139
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUNMLGVBQWUsRUFDZixJQUFJLEVBQ0wsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUVMLFdBQVcsRUFFWCxtQkFBbUIsRUFFbkIsT0FBTyxFQUNQLFFBQVEsRUFDUixrQkFBa0IsR0FDbkIsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7OztBQStCMUIsTUFBTSxPQUFPLGlCQUFpQjtJQXNObEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBNU5ILEdBQUcsQ0FBTTtJQUVSLFNBQVMsQ0FBTTtJQUV2QixrQkFBa0I7SUFDVixjQUFjLENBQU07SUFFckIsVUFBVSxDQUErQztJQUV6RCxrQkFBa0IsR0FBUSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFcEQsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUV4QixlQUFlLEdBQVcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO0lBRXJELFVBQVUsR0FBVyxRQUFRLENBQUM7SUFFdEMsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBVyxZQUFZLENBQUMsS0FBb0I7UUFD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QUFDO0lBQ25ELENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0MsQ0FBQzt3R0F2NkNVLGlCQUFpQixrQkFxTmxCLFFBQVE7NEdBck5QLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFzTkksTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIHBvaVR5cGVUb1N0cmluZyxcclxuICB3YWl0XHJcbn0gZnJvbSAnLi4vaGVscGVycy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVydGFnRGF0YSB9IGZyb20gJy4uL21hdHRlcnRhZ0RhdGEnO1xyXG5pbXBvcnQge1xyXG4gIERiT2JqZWN0VHlwZSxcclxuICBGZWF0dXJlVHlwZSxcclxuICBJT2JqZWN0M0QsXHJcbiAgTWF0dGVydGFnQWN0aW9uTW9kZSxcclxuICBQT0ksXHJcbiAgUG9pVHlwZSxcclxuICBTcE1vZHVsZSxcclxuICBWaWV3ZXJJbnRlcmFjdGlvbnMsXHJcbn0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VUYWdTZXJ2aWNlIH0gZnJvbSAnLi90YWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VWaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4vYmFzZVZpc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XHJcbmltcG9ydCB7IENhbWVyYU1vZGUgfSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVycG9ydE1lYXN1cmVtZW50U2VydmljZSB9IGZyb20gJy4vbWF0dGVycG9ydC1tZWFzdXJlbWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVycG9ydE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9tYXR0ZXJwb3J0LW5hdmlnYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdHRlcnBvcnRQb2ludGVyU2VydmljZSB9IGZyb20gJy4vbWF0dGVycG9ydC1wb2ludGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXR0ZXJwb3J0T2JqZWN0M0RTZXJ2aWNlIH0gZnJvbSAnLi9tYXR0ZXJwb3J0LW9iamVjdDNkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXR0ZXJwb3J0VGFnU2VydmljZSB9IGZyb20gJy4vbWF0dGVycG9ydC10YWcuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogQ3VzdG9tIFRocmVlanMgT2JqZWN0IDNEIGludGVyZmFjZVxyXG4gKi9cclxuaW50ZXJmYWNlIFRocmVlSlNPYmplY3QzRCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB1dWlkPzogc3RyaW5nO1xyXG4gIHBvc2l0aW9uPzogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyIH1cclxuICByb3RhdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9XHJcbiAgc2NhbGU/OiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgfVxyXG59XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICBNUF9TREs6IHsgY29ubmVjdDogRnVuY3Rpb24gfTtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0U2VydmljZSB7XHJcblxyXG4gIHB1YmxpYyBzZGs6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBjb250YWluZXI6IGFueTtcclxuXHJcbiAgLy8gUG9zaXRpb24gY2FtZXJhXHJcbiAgcHJpdmF0ZSBwb3NlTWF0dGVycG9ydDogYW55O1xyXG5cclxuICBwdWJsaWMgcG9zZUNhbWVyYTogeyByb3RhdGlvbjogYW55OyBwb3NpdGlvbjogYW55OyBzd2VlcDogYW55IH07XHJcblxyXG4gIHB1YmxpYyBsYXN0Q2FtZXJhUG9zaXRpb246IGFueSA9IHsgeDogMC4wLCB5OiAwLjAsIHo6IDAuMCB9O1xyXG5cclxuICBwcml2YXRlIGlzTWVhc3VyZU1vZGVPbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGludGVyYWN0aW9uTW9kZTogbnVtYmVyID0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQ7XHJcblxyXG4gIHByaXZhdGUgY2FtZXJhTW9kZTogc3RyaW5nID0gJ0lOU0lERSc7XHJcblxyXG4gIHB1YmxpYyBnZXQgbWF0dGVydGFnSURzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UubWF0dGVydGFnSURzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBtYXR0ZXJ0YWdJRHModmFsdWU6IEFycmF5PHN0cmluZz4pIHtcclxuICAgIHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UubWF0dGVydGFnSURzID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRpY3Rpb25uYXJ5VGFncygpOiBNYXA8c3RyaW5nLCBNYXR0ZXJ0YWdEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5kaWN0aW9ubmFyeVRhZ3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRpY3Rpb25uYXJ5T2JqZWN0czNEKCk6IE1hcDxzdHJpbmcsIGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLmRpY3Rpb25uYXJ5T2JqZWN0czNEO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkaWN0aW9ubmFyeVNjZW5lT2JqZWN0czNEKCk6IE1hcDxzdHJpbmcsIGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLmRpY3Rpb25uYXJ5U2NlbmVPYmplY3RzM0Q7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRocmVlSlNTY2VuZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLnRocmVlSlNTY2VuZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdGhyZWVKU1NjZW5lKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMub2JqZWN0M0RTZXJ2aWNlLnRocmVlSlNTY2VuZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhemltdXRoYWxDcm93bigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLmF6aW11dGhhbENyb3duO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhemltdXRoYWxDcm93bih2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLm9iamVjdDNEU2VydmljZS5hemltdXRoYWxDcm93biA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0YWdzQXR0YWNobWVudHMoKTogT2JqZWN0IHtcclxuICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLnRhZ3NBdHRhY2htZW50cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc3dlZXBzKCk6IEFycmF5PHN0cmluZz4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnN3ZWVwcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc3dlZXBzKHZhbHVlOiBBcnJheTxzdHJpbmc+IHwgbnVsbCkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zd2VlcHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc3dlZXBDb2xsZWN0aW9uKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zd2VlcENvbGxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHN3ZWVwQ29sbGVjdGlvbih2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnN3ZWVwQ29sbGVjdGlvbiA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjdXJyZW50U3dlZXAoKTogU3ViamVjdDxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRTd2VlcDtcclxuICB9XHJcblxyXG4gIC8vY2FtZXJhIHBvc2l0aW9uIHdpdGggcm90YXRpb25cclxuICBwdWJsaWMgY3VycmVudENhbWVyYVBvc2U6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHB1YmxpYyBnZXQgZmxvb3JzKCk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBzZXF1ZW5jZTogbnVtYmVyIH0+IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5mbG9vcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGZsb29ycyh2YWx1ZTogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHNlcXVlbmNlOiBudW1iZXIgfT4gfCBudWxsKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmZsb29ycyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3VycmVudFNwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgcHVibGljIGdldCBsYXN0T2JqZWN0M0QoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm9iamVjdDNEU2VydmljZS5sYXN0T2JqZWN0M0Q7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGxhc3RPYmplY3QzRCh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLm9iamVjdDNEU2VydmljZS5sYXN0T2JqZWN0M0QgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFJvb21zKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRSb29tcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY3VycmVudFJvb21zKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Um9vbXMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFNwYWNlSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3BhY2VJRDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY3VycmVudFNwYWNlSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY3VycmVudFNwYWNlSUQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZm9yYmlkZGVuU3dlZXBzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmZvcmJpZGRlblN3ZWVwcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZm9yYmlkZGVuU3dlZXBzKHZhbHVlOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5mb3JiaWRkZW5Td2VlcHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0YWdBY3Rpb246IFN1YmplY3Q8eyBhY3Rpb246IHN0cmluZzsgZGF0YTogc3RyaW5nIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHVibGljIGdldCBtYXR0ZXJ0YWdUb0ZvbGxvdygpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLm1hdHRlcnRhZ1RvRm9sbG93O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBtYXR0ZXJ0YWdUb0ZvbGxvdyh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5tYXR0ZXJ0YWdUb0ZvbGxvdyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpblRyYW5zaXRpb25Nb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaW5UcmFuc2l0aW9uTW9kZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW5UcmFuc2l0aW9uTW9kZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5pblRyYW5zaXRpb25Nb2RlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGluVHJhbnNpdGlvblN3ZWVwKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaW5UcmFuc2l0aW9uU3dlZXA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGluVHJhbnNpdGlvblN3ZWVwKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmluVHJhbnNpdGlvblN3ZWVwID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5vTGlnaHRGb3JPYmplY3RzID0gdHJ1ZTtcclxuXHJcbiAgcHVibGljIGdldCBjdXJyZW50Q2FtZXJhTW9kZSgpOiBDYW1lcmFNb2RlIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRDYW1lcmFNb2RlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBjdXJyZW50Q2FtZXJhTW9kZSh2YWx1ZTogQ2FtZXJhTW9kZSkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Q2FtZXJhTW9kZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvbkNhbWVyYU1vZGVDaGFuZ2VkKCk6IFN1YmplY3Q8Q2FtZXJhTW9kZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2Uub25DYW1lcmFNb2RlQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgb25Sb29tQ2hhbmdlZCgpOiBTdWJqZWN0PGFueVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5vblJvb21DaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvbkdvVG9UYWcoKTogU3ViamVjdDxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLm9uR29Ub1RhZztcclxuICB9XHJcblxyXG4gIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlO1xyXG5cclxuICBjb25maWc6IENvbmZpZztcclxuXHJcbiAgU1BNb2R1bGU6IFNwTW9kdWxlO1xyXG5cclxuICBwdWJsaWMgZ2V0IG9iamVjdENvbnRyb2woKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm9iamVjdDNEU2VydmljZS5vYmplY3RDb250cm9sO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzZWN1cml0eUNhbWVyYUFuaW1hdG9yKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5vYmplY3QzRFNlcnZpY2Uuc2VjdXJpdHlDYW1lcmFBbmltYXRvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGlvbnMgb24gbGVmdCBjbGljayB3aGVuIHBvc2l0aW9uaW5nIG1hdHRlcnRhZyBpbiB2aXNpdFxyXG4gICAqL1xyXG4gIHBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyID0gKGV2dDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgaWYgKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpIHtcclxuICAgICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldCh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KTtcclxuICAgICAgaWYgKG1hdHRlcnRhZ0RhdGEpIHtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKHsgLi4udGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbiB9KTtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh7IC4uLnRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsIH0pO1xyXG4gICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLnNldCh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU1hdHRlclRhZ0NvbnRlbnRGb3JUYWdJRCh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vblZhbGlkYXRlZE1hdHRlcnRhZygpO1xyXG4gIH07XHJcblxyXG4gIHBvaW50ZXJSaWdodENsaWNrSGFuZGxlciA9IChlKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmNhbmNlbEZvbGxvd2luZ0N1cnNvcigpO1xyXG4gICAgYWxlcnQoJ2FjdGlvbiBjYW5jZWxsZWQnKTtcclxuICB9O1xyXG5cclxuICBwb2ludGVyTWlkZGxlQ2xpY2tIYW5kbGVyID0gKGUpID0+IHtcclxuICAgIHRoaXMucG9pbnRlclNlcnZpY2UudXBkYXRlQ3Vyc29yRGlzcGxheSh0aGlzLnBvc2VNYXR0ZXJwb3J0KTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnY29uZmlnJykgY29uZmlnOiBDb25maWcsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHZpc2liaWxpdHlTZXJ2aWNlOiBCYXNlVmlzaWJpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBtZWFzdXJlbWVudFNlcnZpY2U6IE1hdHRlcnBvcnRNZWFzdXJlbWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBNYXR0ZXJwb3J0TmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBvaW50ZXJTZXJ2aWNlOiBNYXR0ZXJwb3J0UG9pbnRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG9iamVjdDNEU2VydmljZTogTWF0dGVycG9ydE9iamVjdDNEU2VydmljZSxcclxuICAgIHByaXZhdGUgbWF0dGVycG9ydFRhZ1NlcnZpY2U6IE1hdHRlcnBvcnRUYWdTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSBNYXR0ZXJwb3J0IFNESywgc2V0cyB1cCBldmVudCBsaXN0ZW5lcnMsIGFuZCBjb25maWd1cmVzIGFzc2V0cy5cclxuICAgKiBAcGFyYW0gdGFnU2VydmljZSBTZXJ2aWNlIHVzZWQgdG8gZ2VuZXJhdGUgYW5kIGluamVjdCBIVE1MIGludG8gdGFncy5cclxuICAgKiBAcGFyYW0gbW9kdWxlIEFwcGxpY2F0aW9uIG1vZHVsZSAoZS5nLiwgSU1NTywgTVVTRVVNKSB0byBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdHJ1ZSB3aGVuIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLlxyXG4gICAqL1xyXG4gIGFzeW5jIGluaXRTZGsoXHJcbiAgICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSxcclxuICAgIG1vZHVsZTogU3BNb2R1bGUgPSBTcE1vZHVsZS5JTU1PXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5zZGspIHtcclxuICAgICAgLy8gY2xlYW4gaWYgc2RrIGlzIHJ1bm5pbmcgYWxyZWFkeVxyXG4gICAgICBhd2FpdCB0aGlzLmFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKTtcclxuICAgIH1cclxuICAgIHRoaXMudGFnU2VydmljZSA9IHRhZ1NlcnZpY2U7XHJcbiAgICB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLnNldFRhZ1NlcnZpY2UodGFnU2VydmljZSk7XHJcbiAgICB0aGlzLlNQTW9kdWxlID0gbW9kdWxlO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgLy8gUmV0cmlldmUgRE9NIGVsZW1lbnRzXHJcbiAgICAgIGNvbnN0IHBvaW50ZXJCdG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcjdmlld2VyLXBvaW50ZXItdHJpY2snXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3ZpZXdlci1tb2R1bGUnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAnI3ZpZXdlci1tb2R1bGUnXHJcbiAgICAgICkgYXMgSFRNTElGcmFtZUVsZW1lbnQ7XHJcbiAgICAgIGlmICghaWZyYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGN1cnNvckJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJyNidXR0b24nXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IHRleHRQYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJyN0ZXh0J1xyXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgdGhpcy5wb2ludGVyU2VydmljZS5pbml0KHRoaXMuY29udGFpbmVyLCBwb2ludGVyQnRuLCBjdXJzb3JCdG4sIHRleHRQYW5lbCwge1xyXG4gICAgICAgIG9uTGVmdENsaWNrOiB0aGlzLnBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyLmJpbmQodGhpcyksXHJcbiAgICAgICAgb25SaWdodENsaWNrOiB0aGlzLnBvaW50ZXJSaWdodENsaWNrSGFuZGxlci5iaW5kKHRoaXMpLFxyXG4gICAgICAgIG9uTWlkZGxlQ2xpY2s6IHRoaXMucG9pbnRlck1pZGRsZUNsaWNrSGFuZGxlci5iaW5kKHRoaXMpLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIExvYWQgU0RLXHJcbiAgICAgIGNvbnN0IHNob3djYXNlV2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c7XHJcbiAgICAgIGlmcmFtZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLnNkayA9IGF3YWl0IChzaG93Y2FzZVdpbmRvdyBhcyBhbnkpLk1QX1NESy5jb25uZWN0KFxyXG4gICAgICAgICAgICBzaG93Y2FzZVdpbmRvdyxcclxuICAgICAgICAgICAgJ3FuOXdzYXN1eTVoMmZ6cmJybjFuenIwaWQnLFxyXG4gICAgICAgICAgICAnJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZEN1c3RvbUNzcygpO1xyXG5cclxuICAgICAgICB0aGlzLnBvaW50ZXJTZXJ2aWNlLnN0YXJ0QWRtaW5DdXJzb3JUcmFja2VyKFxyXG4gICAgICAgICAgdGhpcy5zZGssXHJcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lcixcclxuICAgICAgICAgICgpID0+IHRoaXMucG9zZU1hdHRlcnBvcnQsXHJcbiAgICAgICAgICAoKSA9PiB0aGlzLnBvc2VDYW1lcmFcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBMb2FkIE1hdHRlcnRhZyBpY29ucyBhbmQgY3VzdG9tIHN1YnNjcmlwdGlvbnNcclxuICAgICAgICBzd2l0Y2ggKG1vZHVsZSkge1xyXG4gICAgICAgICAgY2FzZSBTcE1vZHVsZS5JTU1POlxyXG4gICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgJ2ljb24tdGlja2V0JyxcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl90aWNrZXRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICdpY29uLWVxdWlwbWVudCcsXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fZXF1aXBtZW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAnaWNvbi1tZWFzdXJlJyxcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9tZWFzdXJlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAnaWNvbi1kYXRhJyxcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9kYXRhXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAnaWNvbi1vYmplY3QzZCcsXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fb2JqZWN0M2RcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLk1lYXN1cmVtZW50cy5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgb25BZGRlZDogZnVuY3Rpb24gKFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGFueSxcclxuICAgICAgICAgICAgICAgIGl0ZW06IHsgcG9pbnRzOiBhbnkgfSxcclxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IGFueVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWFzdXJlbWVudFNlcnZpY2Uuc2V0TGFzdE1lYXN1cmUoaXRlbS5wb2ludHMpO1xyXG4gICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiAoY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGhlIGVudGlyZSB1cC10by1kYXRlIGNvbGxlY3Rpb24nLCBjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVhc3VyZW1lbnRTZXJ2aWNlLmdldERpc3RhbmNlRm9yTGFzdE1lYXN1cmVtZW50KHRoaXMuc2RrLCB0aGlzLmN1cnJlbnRTcGFjZUlEKTtcclxuICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMubW9kZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKG1lYXN1cmVtZW50TW9kZVN0YXRlOiB7IGFjdGl2ZTogYW55IH0pIHtcclxuICAgICAgICAgICAgICAgIC8vIG1lYXN1cmVtZW50IG1vZGUgc3RhdGUgaGFzIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNNZWFzdXJlTW9kZU9uID0gbWVhc3VyZW1lbnRNb2RlU3RhdGUuYWN0aXZlO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0lzIG1lYXN1cmVtZW50IG1vZGUgY3VycmVudGx5IGFjdGl2ZT8gJywgbWVhc3VyZW1lbnRNb2RlU3RhdGUuYWN0aXZlKTtcclxuICAgICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFNwTW9kdWxlLk1VU0VVTTpcclxuICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICdpY29uLWRhdGEnLFxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX2RhdGFcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFNwTW9kdWxlLkhPVEVMOlxyXG4gICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgJ2ljb25fcm9vbV9hdmFpbGFibGUnLFxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAnaWNvbl9yb29tX3VuYXZhaWxhYmxlJyxcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX3VuYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAnaWNvbl9yb29tX2Nob3NlbicsXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcm9vbV9jaG9zZW5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICdpY29uX3Jvb21fdmlld2VkJyxcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX3ZpZXdlZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgJ2ljb24tcG9zaXRpb24nLFxyXG4gICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcG9zaXRpb25cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBDdXJyZW50IFJvb20gKHVzZWQgZm9yIGdldHRpbmcgYm91bmRpbmcgYm94IGFuZCBldmVudHVhbGx5IGxhenkgbG9hZCBtYXR0ZXJ0YWcgb3Igb2JqZWN0M0QgaW5zaWRlIGN1cnJlbnQgUm9vbSlcclxuICAgICAgICB0aGlzLnNkay5Sb29tLmN1cnJlbnQuc3Vic2NyaWJlKChjdXJyZW50Um9vbSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgcm9vbXMgPSBBcnJheS5pc0FycmF5KGN1cnJlbnRSb29tKSA/IGN1cnJlbnRSb29tIDogKGN1cnJlbnRSb29tID8gW2N1cnJlbnRSb29tXSA6IFtdKTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudFJvb21zID0gcm9vbXM7XHJcbiAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLm9uUm9vbUNoYW5nZWQubmV4dChyb29tcyk7XHJcbiAgICAgICAgICAvLyBSZWZyZXNoIHRhZyB2aXNpYmlsaXR5IHdoZW5ldmVyIHRoZSByb29tIGNvbnRleHQgY2hhbmdlc1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoVGFnc1Zpc2liaWxpdHkoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gM0QgcG9zaXRpb24ncyBwb2ludGVyXHJcbiAgICAgICAgdGhpcy5zZGsuUG9pbnRlci5pbnRlcnNlY3Rpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICAgZnVuY3Rpb24gKGludGVyc2VjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQgPSBpbnRlcnNlY3Rpb247XHJcbiAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICAgICAgejogMCxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGlvbk1vZGUgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUICYmIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpIHtcclxuICAgICAgICAgICAgICAvLyBmb2xsb3cgdGhlIHBvaW50ZXIgYW5kIGNoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHRhZ1xyXG4gICAgICAgICAgICAgIC8vICh3ZSBhcmUgYWJvdXQgdG8gdmFsaWRhdGUsIGJ1dCBpdCBleGlzdHMgaW4gc2RrIGFscmVhZHkpXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmFibGVfZm9sbG93aW5nX3RhZyh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucG9pbnRlclNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJTZXJ2aWNlLnNldEN1cnNvclBvc2l0aW9uQnV0dG9uRGlzcGxheWVkKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy9DYW1lcmEgbW9kZVxyXG4gICAgICAgIHRoaXMuc2RrLk1vZGUuY3VycmVudC5zdWJzY3JpYmUoKG1vZGUpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmNhbWVyYU1vZGUgIT09IG1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zZXRDYW1lcmFNb2RlKG1vZGUpO1xyXG4gICAgICAgICAgICAvLyBSZWZyZXNoIHRhZyB2aXNpYmlsaXR5IG9uIGV2ZXJ5IG1vZGUgY2hhbmdlIChJTlNJREUgdnMgRE9MTEhPVVNFIHZzIEZMT09SUExBTilcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVGFnc1Zpc2liaWxpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5jYW1lcmFNb2RlID0gbW9kZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZGsgJiYgdGhpcy5wb3NlQ2FtZXJhKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UudXBkYXRlVGFnc1Zpc2liaWxpdHlGb3JDb250ZXh0KFxyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLFxyXG4gICAgICAgICAgICAgIHRoaXMuc3dlZXBDb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3VycmVudENhbWVyYU1vZGUsXHJcbiAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyxcclxuICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRGbG9vclNlcXVlbmNlLFxyXG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3VycmVudFJvb21zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBzd2VlcHNcclxuICAgICAgICB0aGlzLnNkay5Td2VlcC5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiBzdWJzY3IoY29sbGVjdGlvbjoge30pIHtcclxuICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5zd2VlcENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gY3VycmVudCBzd2VlcFxyXG4gICAgICAgIHRoaXMuc2RrLlN3ZWVwLmN1cnJlbnQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgZnVuY3Rpb24gc3Vic2NyKGN1cnJlbnRTd2VlcDogeyBzaWQ6IHN0cmluZyB9KSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3dlZXAuc2lkID09PSAnJykgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTd2VlcC5uZXh0KGN1cnJlbnRTd2VlcC5zaWQpO1xyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIEZsb29yIGRhdGFcclxuICAgICAgICB0aGlzLnNkay5GbG9vci5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQodGhpczogYW55LCBjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gY3VycmVudCBmbG9vciDigJMgYXV0aG9yaXRhdGl2ZSBzb3VyY2UgZm9yIG11bHRpLWZsb29yIGZpbHRlcmluZ1xyXG4gICAgICAgIHRoaXMuc2RrLkZsb29yLmN1cnJlbnQuc3Vic2NyaWJlKChjdXJyZW50Rmxvb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc2VxID0gY3VycmVudEZsb29yPy5zZXF1ZW5jZSA/PyBudWxsO1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Rmxvb3JTZXF1ZW5jZSA9IHNlcTtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW0Zsb29yLmN1cnJlbnRdIHNlcXVlbmNlID0nLCBzZXEsICd8IGZ1bGwgPScsIGN1cnJlbnRGbG9vcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUYWdzVmlzaWJpbGl0eSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBHZW5lcmljIGhhbmRsZXIgZm9yIHRhZyBzZWxlY3Rpb24gZXZlbnRzXHJcbiAgICAgICAgY29uc3QgaGFuZGxlVGFnU2VsZWN0aW9uID0gYXN5bmMgKHNpZDogc3RyaW5nLCBzb3VyY2U6IHN0cmluZywgZXZ0PzogYW55KSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHNpZCk7XHJcbiAgICAgICAgICAgIGlmICghbWF0dGVydGFnRGF0YSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0YWdTZXJ2aWNlLmdldFVybEZvclNlZURldGFpbHMoXHJcbiAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKSxcclxuICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAodXJsICE9PSAnJykge1xyXG4gICAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdDYW5ub3Qgc2hvdyBkZXRhaWxzIGZvciB0YWcnLCBlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gRGlzYWJsZSBuYXRpdmUgTWF0dGVycG9ydCBhY3Rpb25zXHJcbiAgICAgICAgY29uc3QgZGlzYWJsZU5hdGl2ZUFjdGlvbnMgPSAoc2lkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmICghdGhpcy5zZGsgfHwgc2lkID09PSB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KSByZXR1cm47IC8vIGlnbm9yZSB3aGVuIHdlIGFyZSBpbiBwb3NpdGlvbmluZyBtb2RlXHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZGsuVGFnPy5hbGxvd0FjdGlvbikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLlRhZy5hbGxvd0FjdGlvbihzaWQsIHsgb3BlbmluZzogdHJ1ZSwgbmF2aWdhdGluZzogdHJ1ZSwgZG9ja2luZzogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAvLyBzaWxlbnRseSBpZ25vcmUgYWxyZWFkeSByZW1vdmVkIHRhZ3NcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmICFlPy5tZXNzYWdlPy5pbmNsdWRlcygnbm90IGZvdW5kJykpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ01hdHRlcnBvcnRTZXJ2aWNlOiBFcnJvciBkaXNhYmxpbmcgYWN0aW9ucyBmb3InLCBzaWQsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIHJlYWNoIFBMQVlJTkcgcGhhc2VcclxuICAgICAgICBpZiAodGhpcy5zZGsuQXBwICYmIHRoaXMuc2RrLkFwcC5zdGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZGsuQXBwLnN0YXRlLndhaXRVbnRpbCgoczogYW55KSA9PiBzLnBoYXNlID09PSB0aGlzLnNkay5BcHAuUGhhc2UuUExBWUlORykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkNhbWVyYS5wb3NlLnN1YnNjcmliZSgocG9zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb3NlQ2FtZXJhID0gcG9zZTtcclxuICAgICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLnVwZGF0ZVRhZ3NWaXNpYmlsaXR5Rm9yQ29udGV4dChcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zd2VlcENvbGxlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRDYW1lcmFNb2RlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyxcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3VycmVudEZsb29yU2VxdWVuY2UsXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRSb29tc1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS51cGRhdGVUYWdzVmlzaWJpbGl0eUZvckNvbnRleHQoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkayxcclxuICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBDb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Q2FtZXJhTW9kZSxcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3csXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRGbG9vclNlcXVlbmNlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Um9vbXNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9LCAxNTAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVyYWN0aW9uTW9kZSA9PT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQpIHtcclxuICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KHRoaXMuc2RrKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2RrLlRhZyAmJiB0aGlzLnNkay5UYWcuZGF0YSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLlRhZy5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBvbkFkZGVkOiAoc2lkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZU5hdGl2ZUFjdGlvbnMoc2lkKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvblVwZGF0ZWQ6IChzaWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlTmF0aXZlQWN0aW9ucyhzaWQpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IChjb2xsZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY29sbGVjdGlvbikuZm9yRWFjaCgoc2lkKSA9PiBkaXNhYmxlTmF0aXZlQWN0aW9ucyhzaWQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBGYWxsYmFjayBwb3VyIGwnw6l2w6luZW1lbnQgZ2xvYmFsIHRhZy5jbGlja1xyXG4gICAgICAgIHRoaXMuc2RrLm9uKCd0YWcuY2xpY2snLCAoc2lkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgW01hdHRlcnBvcnRTZXJ2aWNlXSBzZGsub24oJ3RhZy5jbGljaycpIHJlY2VpdmVkIGZvciBzaWQ6ICR7c2lkfWApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaGFuZGxlVGFnU2VsZWN0aW9uKHNpZCwgJ2dsb2JhbC50YWcuY2xpY2snKTtcclxuICAgICAgICAgIGRpc2FibGVOYXRpdmVBY3Rpb25zKHNpZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gUG9pbnRlciB0cmlja1xyXG4gICAgICAgIC8vIENyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgYXBwZWFyIHdoZW4gdGhlIGN1cnNvciBpcyBzdGlsbFxyXG4gICAgICAgIC8vIEl0IHdpbGwgaW50ZXJjZXB0IHRoZSBjbGljayBvZiB0aGUgbW91c2UgYmVmb3JlIGl0IHRyaWdlcnJpbmcgdGhlIE1hdHRlcnBvcnQncyB0b3VyIG5hdmlnYXRpb25cclxuICAgICAgICB0aGlzLnBvaW50ZXJTZXJ2aWNlLnN0YXJ0UG9pbnRlclRyaWNrKFxyXG4gICAgICAgICAgdGhpcy5zZGssXHJcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lcixcclxuICAgICAgICAgICgpID0+IHRoaXMucG9zZU1hdHRlcnBvcnQsXHJcbiAgICAgICAgICAoKSA9PiB0aGlzLnBvc2VDYW1lcmEsXHJcbiAgICAgICAgICAoKSA9PiB0aGlzLmludGVyYWN0aW9uTW9kZSxcclxuICAgICAgICAgICgpID0+IHRoaXMubWF0dGVydGFnVG9Gb2xsb3dcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAqIFRyYW5zaXRpb25zXHJcbiAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNkay5vbihcclxuICAgICAgICAgICd2aWV3bW9kZS5jaGFuZ2VzdGFydCcsXHJcbiAgICAgICAgICBmdW5jdGlvbiAodG8sIGZyb20pIHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnU3RhcnRpbmcgdG8gbW92ZSB0byAnICsgdG8gKyAnIGZyb20gJyArIGZyb20pO1xyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmluVHJhbnNpdGlvbk1vZGUgPSB0cnVlO1xyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNkay5vbihcclxuICAgICAgICAgICd2aWV3bW9kZS5jaGFuZ2VlbmQnLFxyXG4gICAgICAgICAgZnVuY3Rpb24gKG9sZE1vZGUsIG5ld01vZGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnRW5kZWQgdG8gbW92ZSB0byAnICsgbmV3TW9kZSArICcgZnJvbSAnICsgb2xkTW9kZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXdNb2RlICE9PSAnbW9kZS50cmFuc2l0aW9uaW5nJykge1xyXG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaW5UcmFuc2l0aW9uTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2RrLm9uKFxyXG4gICAgICAgICAgdGhpcy5zZGsuU3dlZXAuRXZlbnQuRU5URVIsXHJcbiAgICAgICAgICBmdW5jdGlvbiAob2xkU3dlZXAsIG5ld1N3ZWVwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ0xlYXZpbmcgc3dlZXAgJyArIG9sZFN3ZWVwKTtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnRW50ZXJpbmcgc3dlZXAgJyArIG5ld1N3ZWVwKTtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlBemltdXRhbENyb3duKCk7XHJcbiAgICAgICAgICAgIC8vIFJlZnJlc2ggb24gc3dlZXAgaXMgcmVtb3ZlZCBiZWNhdXNlIHdlIG9ubHkgdXBkYXRlIG9uIHJvb20gb3IgZmxvb3IgY2hhbmdlcyBub3cuXHJcbiAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2RrLm9uKFxyXG4gICAgICAgICAgdGhpcy5zZGsuU3dlZXAuRXZlbnQuRVhJVCxcclxuICAgICAgICAgIGZ1bmN0aW9uIChmcm9tU3dlZXAsIHRvU3dlZXApIHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnTGVhdmluZyBzd2VlcCAnICsgZnJvbVN3ZWVwKTtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnVHJhbnNpdGlvbmluZyB0byBzd2VlcCAnICsgdG9Td2VlcCk7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaW5UcmFuc2l0aW9uU3dlZXAgPSB0cnVlO1xyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmluaXQzRE9iamVjdFZpZXdlcigpO1xyXG5cclxuICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0U3dlZXBVVUlERm9yU2lkKHNpZDogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5zd2VlcENvbGxlY3Rpb247XHJcbiAgICBpZiAoIWNvbGxlY3Rpb24gfHwgIWNvbGxlY3Rpb25bc2lkXSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gY29sbGVjdGlvbltzaWRdLnV1aWQgPz8gbnVsbDtcclxuICB9XHJcblxyXG4gIHNldExpZ2h0aW5nT2ZmKCkge1xyXG4gICAgdGhpcy5ub0xpZ2h0Rm9yT2JqZWN0cyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBnZXREaXN0YW5jZUZvckxhc3RNZWFzdXJlbWVudCgpIHtcclxuICAgIHRoaXMubWVhc3VyZW1lbnRTZXJ2aWNlLmdldERpc3RhbmNlRm9yTGFzdE1lYXN1cmVtZW50KHRoaXMuc2RrLCB0aGlzLmN1cnJlbnRTcGFjZUlEKTtcclxuICB9XHJcblxyXG4gIGdldExhc3REaXN0YW5jZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZWFzdXJlbWVudFNlcnZpY2UuZ2V0TGFzdERpc3RhbmNlcygpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGFrZXMgc2NyZWVuc2hvdCBhbmQgc2F2ZXMgYmFzZTY0IGluIGxhc3RTY3JlZW5zaG90VXJpXHJcbiAgICogQHJldHVybnMgUHJvbWlzZVxyXG4gICAqL1xyXG4gIHRha2VTY3JlZW5TaG90KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5tZWFzdXJlbWVudFNlcnZpY2UudGFrZVNjcmVlblNob3QodGhpcy5zZGspO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NyZWVuU2hvdFVyaSgpIHtcclxuICAgIHJldHVybiB0aGlzLm1lYXN1cmVtZW50U2VydmljZS5nZXRTY3JlZW5TaG90VXJpKCk7XHJcbiAgfVxyXG5cclxuICBnZXRMYXN0TWVhc3VyZW1lbnQoKTogT2JqZWN0IHtcclxuICAgIHJldHVybiB0aGlzLm1lYXN1cmVtZW50U2VydmljZS5nZXRMYXN0TWVhc3VyZW1lbnQodGhpcy5wb3NlQ2FtZXJhKTtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLSBVdGlscyAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICBwcml2YXRlIGdldEZsb29ySWRGb3JUYWcobWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UuZ2V0Rmxvb3JJZEZvclRhZyhtYXR0ZXJ0YWdEYXRhLCB0aGlzLnN3ZWVwQ29sbGVjdGlvbik7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFN0eWxpbmcgb2YgcG9pbnRlclxyXG4gICAqL1xyXG4gIHVwZGF0ZVBvaW50ZXJUcmljaygpIHtcclxuICAgIHRoaXMucG9pbnRlclNlcnZpY2UudXBkYXRlUG9pbnRlclRyaWNrKHRoaXMuc2RrLCB0aGlzLmNvbnRhaW5lciwgdGhpcy5wb3NlTWF0dGVycG9ydCwgdGhpcy5wb3NlQ2FtZXJhLCB0aGlzLmludGVyYWN0aW9uTW9kZSwgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUcmlnZ2VycyBhIHRhZyB2aXNpYmlsaXR5IHJlZnJlc2ggYmFzZWQgb24gY3VycmVudCBjYW1lcmEgbW9kZSwgZmxvb3IgYW5kIHN3ZWVwLlxyXG4gICAqIERlbGVnYXRlcyBhbGwgbG9naWMgdG8gTWF0dGVycG9ydFRhZ1NlcnZpY2UudXBkYXRlVGFnc1Zpc2liaWxpdHlGb3JDb250ZXh0KCkuXHJcbiAgICogQ2FsbGVkIGF1dG9tYXRpY2FsbHkgb24gTW9kZSwgU3dlZXAsIEZsb29yIGFuZCBSb29tIGNoYW5nZXMuXHJcbiAgICovXHJcbiAgcHVibGljIHJlZnJlc2hUYWdzVmlzaWJpbGl0eSgpOiB2b2lkIHtcclxuICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkgJiYgdGhpcy5zd2VlcENvbGxlY3Rpb24gJiYgdGhpcy5wb3NlQ2FtZXJhPy5zd2VlcCkge1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwRGF0YSA9IHRoaXMuc3dlZXBDb2xsZWN0aW9uW3RoaXMucG9zZUNhbWVyYS5zd2VlcF07XHJcbiAgICAgICAgY29uc29sZS5kZWJ1ZygnW3JlZnJlc2hUYWdzVmlzaWJpbGl0eV0gc3dlZXBEYXRhIGZvciBjdXJyZW50IHN3ZWVwOicsIEpTT04uc3RyaW5naWZ5KHN3ZWVwRGF0YSkpO1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tyZWZyZXNoVGFnc1Zpc2liaWxpdHldIGN1cnJlbnRGbG9vclNlcXVlbmNlOicsIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3VycmVudEZsb29yU2VxdWVuY2UpO1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tyZWZyZXNoVGFnc1Zpc2liaWxpdHldIGN1cnJlbnRDYW1lcmFNb2RlOicsIHRoaXMuY3VycmVudENhbWVyYU1vZGUpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UudXBkYXRlVGFnc1Zpc2liaWxpdHlGb3JDb250ZXh0KFxyXG4gICAgICAgIHRoaXMuc2RrLFxyXG4gICAgICAgIHRoaXMuc3dlZXBDb2xsZWN0aW9uLFxyXG4gICAgICAgIHRoaXMuY3VycmVudENhbWVyYU1vZGUsXHJcbiAgICAgICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyxcclxuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRGbG9vclNlcXVlbmNlLFxyXG4gICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3VycmVudFJvb21zXHJcbiAgICAgICkuY2F0Y2goZXJyID0+IHtcclxuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignW01hdHRlcnBvcnRTZXJ2aWNlXSByZWZyZXNoVGFnc1Zpc2liaWxpdHkgZXJyb3InLCBlcnIpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVhbHRpbWUgbWF0dGVydGFnIGZvbGxvd2luZyB0aGUgY3Vyc29yXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZyBzdHJpbmdcclxuICAgKi9cclxuICBlbmFibGVfZm9sbG93aW5nX3RhZyhtYXR0ZXJ0YWc6IHN0cmluZykge1xyXG4gICAgY29uc3QgT0ZGU0VUID0gMC4wMDAxOyAvLyBxdWFzaS1pbnZpc2libGUgbWFpcyBzdWZmaXQgw6Agw6l2aXRlciBsJ2ludGVyY2VwdGlvblxyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRQb3NpdGlvbihtYXR0ZXJ0YWcsIHtcclxuICAgICAgYW5jaG9yUG9zaXRpb246IHtcclxuICAgICAgICB4OiB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLnggKyBPRkZTRVQsXHJcbiAgICAgICAgeTogdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbi55LFxyXG4gICAgICAgIHo6IHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24ueiArIE9GRlNFVCxcclxuICAgICAgfSxcclxuICAgICAgc3RlbVZlY3Rvcjoge1xyXG4gICAgICAgIHg6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnggKiAwLjMsXHJcbiAgICAgICAgeTogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueSAqIDAuMyxcclxuICAgICAgICB6OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC56ICogMC4zLFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCB0aGUgZGlzdGFuY2UgYmV0d3dlZW4gdHdvIDNEIHBvc2l0aW9uc1xyXG4gICAqIFVzZWQgaW4gb3JkZXIgdG8gc2VlIGhvdyBtdWNoIHRoZSBjdXJzb3IgaGFzIG1vdmVkIGZyb20gdGhlIHByZXZpb3VzIHBvc2l0aW9uXHJcbiAgICogQHBhcmFtIHBvczFcclxuICAgKiBAcGFyYW0gcG9zMlxyXG4gICAqL1xyXG4gIGdldERpc3RQb3NpdGlvbihwb3MxOiBhbnksIHBvczI6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMucG9pbnRlclNlcnZpY2UuZ2V0RGlzdFBvc2l0aW9uKHRoaXMuc2RrLCB0aGlzLmNvbnRhaW5lciwgdGhpcy5wb3NlQ2FtZXJhLCBwb3MxLCBwb3MyKTtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLSBNYXR0ZXJ0YWcgcmVsYXRlZCAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvKiogQ3JlYXRlcyBhIHRlbXBvcmFyeSBNYXR0ZXJ0YWcgdGhhdCBmb2xsb3dzIHRoZSB1c2VyJ3MgY3Vyc29yIGZvciBwb3NpdGlvbmluZy4gKi9cclxuICBhc3luYyBhZGRDdXJzb3JNYXR0ZXJ0YWcobWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSkge1xyXG4gICAgaWYgKCF0aGlzLnBvc2VNYXR0ZXJwb3J0KSByZXR1cm47XHJcbiAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ID0gYXdhaXQgdGhpcy5hZGRNYXR0ZXJ0YWdUb1ZpZXdlcihtYXR0ZXJ0YWdEYXRhKTtcclxuICAgIGF3YWl0IHdhaXQoNTApO1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRJY29uKHRoaXMubWF0dGVydGFnVG9Gb2xsb3csICdpY29uLXBvc2l0aW9uJyk7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdE9wYWNpdHkodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdywgMSk7XHJcblxyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRQb3NpdGlvbih0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LCB7XHJcbiAgICAgIGFuY2hvclBvc2l0aW9uOiB7IC4uLnRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24gfSxcclxuICAgICAgc3RlbVZlY3Rvcjoge1xyXG4gICAgICAgIHg6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnggKiAwLjMsXHJcbiAgICAgICAgeTogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueSAqIDAuMyxcclxuICAgICAgICB6OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC56ICogMC4zLFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnNkay5UYWcuYWxsb3dBY3Rpb24odGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdywge1xyXG4gICAgICAgIG9wZW5pbmc6IHRydWUsXHJcbiAgICAgICAgbmF2aWdhdGluZzogZmFsc2UsXHJcbiAgICAgICAgZG9ja2luZzogZmFsc2VcclxuICAgICAgfSk7XHJcbiAgICB9IGNhdGNoIChlKSB7IH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdGFnQWRkUXVldWUoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLnRhZ0FkZFF1ZXVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCB0YWdBZGRRdWV1ZSh2YWx1ZTogUHJvbWlzZTxhbnk+KSB7XHJcbiAgICB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLnRhZ0FkZFF1ZXVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGRNYXR0ZXJ0YWdUb1ZpZXdlcihtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5hZGRNYXR0ZXJ0YWdUb1ZpZXdlcih0aGlzLnNkaywgbWF0dGVydGFnRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKiogVHJpZ2dlcnMgY2FsbGJhY2sgYWN0aW9ucyBhZnRlciBhIHRhZydzIHBvc2l0aW9uIGlzIHZhbGlkYXRlZCBieSBhIGxlZnQgY2xpY2suICovXHJcbiAgb25WYWxpZGF0ZWRNYXR0ZXJ0YWcoKSB7XHJcbiAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCk7XHJcbiAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICBjb25zdCBjYWxsYmFja01vZGUgPSB0aGlzLmRpY3Rpb25uYXJ5VGFnc1xyXG4gICAgICAgIC5nZXQobGFzdFRhZylcclxuICAgICAgICAuZ2V0Q2FsbGJhY2tBY3Rpb25Nb2RlKCk7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2tBZnRlck1hdHRlcnRhZ1ZhbGlkYXRpb24oY2FsbGJhY2tNb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBSZWdpc3RlcnMgYSBuZXcgaWNvbiB0ZXh0dXJlIGFuZCBhcHBsaWVzIGl0IHRvIGEgc3BlY2lmaWMgTWF0dGVydGFnLiAqL1xyXG4gIGFzeW5jIGFkZE5ld0ljb25BbmRTZXRGb3JUYWcobWF0dGVydGFnSUQ6IHN0cmluZywgaWNvblBhdGg6IHN0cmluZykge1xyXG4gICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5hZGROZXdJY29uQW5kU2V0Rm9yVGFnKFxyXG4gICAgICB0aGlzLnNkayxcclxuICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgIGljb25QYXRoLFxyXG4gICAgICBmYWxzZSxcclxuICAgICAgMVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKiBBcHBsaWVzIGEgcHJlLXJlZ2lzdGVyZWQgaWNvbiB0byBhIE1hdHRlcnRhZy4gKi9cclxuICBhc3luYyBzZXRSZWdpc3RyZWRJY29uRm9yVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcsIGljb25OYW1lOiBzdHJpbmcpIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2RrLlRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignQ291bGQgbm90IGVkaXQgaWNvbicsIGljb25OYW1lLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBTZXRzIHRoZSBhcHByb3ByaWF0ZSBpY29uIGFuZCBvcGFjaXR5IGZvciBhIHRhZyBiYXNlZCBvbiBpdHMgdHlwZSBhbmQgUE9JIG1ldGFkYXRhLiAqL1xyXG4gIGFzeW5jIHNldFRhZ0ljb25BbmRPcGFjaXR5KFxyXG4gICAgbWF0dGVydGFnSUQ6IHN0cmluZyxcclxuICAgIG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGFcclxuICApIHtcclxuICAgIGlmICh0aGlzLlNQTW9kdWxlID09PSBTcE1vZHVsZS5IT1RFTCkge1xyXG4gICAgICBjb25zdCByb29tID0gbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKTtcclxuICAgICAgbGV0IGljb25OYW1lID0gYGljb25fcm9vbWA7XHJcbiAgICAgIGlmIChyb29tLmF2YWlsYWJsZSkge1xyXG4gICAgICAgIGljb25OYW1lID0gYCR7aWNvbk5hbWV9X2F2YWlsYWJsZWA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWNvbk5hbWUgPSBgJHtpY29uTmFtZX1fdW5hdmFpbGFibGVgO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2RrLlRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdHJpbmdUYWdUeXBlID0gcG9pVHlwZVRvU3RyaW5nKG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpKTtcclxuICAgIGxldCBvcGFjaXR5ID0gdGhpcy5jb25maWcubXlfY29uZmlnLkRFRkFVTFRfT1BBQ0lUWV9UQUc7XHJcbiAgICBsZXQgaWNvbk5hbWUgPSBgaWNvbi0ke3N0cmluZ1RhZ1R5cGV9YDtcclxuICAgIGNvbnN0IHBvaSA9IG1hdHRlcnRhZ0RhdGEuZ2V0UG9pKCk7XHJcbiAgICBpZiAocG9pICYmIHBvaS50YWdJY29uKSB7XHJcbiAgICAgIGNvbnN0IHRhZ0ljb24gPSBKU09OLnBhcnNlKHBvaS50YWdJY29uKTtcclxuICAgICAgaWYgKG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpID09PSBQb2lUeXBlLkRBVEEpIHtcclxuICAgICAgICBjb25zdCBmZWF0dXJlID0gbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKTtcclxuICAgICAgICBpZiAoZmVhdHVyZS50eXBlID09PSBGZWF0dXJlVHlwZS5JTkRJQ0FUT1JfVEVNUCkge1xyXG4gICAgICAgICAgdGFnSWNvbi5zcmMgPSB0aGlzLnRhZ1NlcnZpY2UuZ2V0SWNvblRhZ0ltYWdlRm9yRmVhdHVyZShmZWF0dXJlLCBwb2kpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGFnSWNvbi5zcmMpIHtcclxuICAgICAgICBjb25zdCBwYXRoU2lnbmVkID0gYXdhaXQgdGhpcy50YWdTZXJ2aWNlLmdldFNpZ25lZFRhZ0ljb25Tb3VyY2UoXHJcbiAgICAgICAgICB0YWdJY29uLnNyY1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHBhdGhTaWduZWQpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGljb25OYW1lID0gYGljb24tJHtzdHJpbmdUYWdUeXBlfS0ke21hdHRlcnRhZ0lEfS0ke21hdHRlcnRhZ0RhdGEuY3VzdG9tSWNvbkluZGV4fWA7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShpY29uTmFtZSwgcGF0aFNpZ25lZCk7XHJcbiAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuY3VzdG9tSWNvbkluZGV4ICs9IDE7XHJcbiAgICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coJ2Vycm9yIHJlZ2lzdGVySWNvbicpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAodGFnSWNvbi5vcGFjaXR5KSB7XHJcbiAgICAgICAgb3BhY2l0eSA9IHRhZ0ljb24ub3BhY2l0eTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZGsuVGFnLmVkaXRJY29uKG1hdHRlcnRhZ0lELCBpY29uTmFtZSk7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmxvZygnRXJyb3IgZWRpdEljb24gb3Igb3BhY2l0eScsIGVycm9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBOYXZpZ2F0ZXMgdGhlIGNhbWVyYSB0byB0aGUgbW9zdCByZWNlbnRseSBjcmVhdGVkIHRhZy4gKi9cclxuICBhc3luYyBnb1RvTGFzdFRhZygpIHtcclxuICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UuZ29Ub0xhc3RUYWcodGhpcy5zZGspO1xyXG4gIH1cclxuXHJcbiAgLyoqIE5hdmlnYXRlcyB0aGUgY2FtZXJhIHRvIGEgc3BlY2lmaWMgTWF0dGVydGFnIGJ5IGl0cyBJRC4gKi9cclxuICBhc3luYyBnb1RvVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcpIHtcclxuICAgIGlmICghbWF0dGVydGFnSUQvKiB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKi8pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5vbkdvVG9UYWcubmV4dChtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2RrLlN3ZWVwLmN1cnJlbnQud2FpdFVudGlsKFxyXG4gICAgICAgIChjdXJyZW50U3dlZXApID0+IGN1cnJlbnRTd2VlcCAhPT0gJydcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgbXREYXRhID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKTtcclxuICAgICAgaWYgKG10RGF0YSkge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gbXREYXRhLmdldFBvc2l0aW9uKCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuQ2FtZXJhLmxvb2tBdChwb3NpdGlvbiwge1xyXG4gICAgICAgICAgdHJhbnNpdGlvbjogdGhpcy5zZGsuQ2FtZXJhLlRyYW5zaXRpb25UeXBlLkZMWVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2RrLlRhZy5vcGVuKG1hdHRlcnRhZ0lEKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBGYWxsYmFjayBmb3IgY2FzZXMgd2hlcmUgd2UgZG9uJ3QgaGF2ZSBsb2NhbCBkYXRhIHlldFxyXG4gICAgICAgIGF3YWl0IHRoaXMuc2RrLlRhZy5vcGVuKG1hdHRlcnRhZ0lEKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oJ0Nhbm5vdCBuYXZpZ2F0ZSB0byB0YWcnLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgICogQ29tcHV0ZXMgdGhlIGNvbnRleHQtYXdhcmUgb3BhY2l0eSBmb3IgYSBzaW5nbGUgdGFnIGF0IHRoZSBtb21lbnQgaXQgaXMgcmVuZGVyZWQuXHJcbiAgICAqIC0gQ3Vyc29yIHRhZzogYWx3YXlzIHVzZSBwcm92aWRlZCBkZWZhdWx0T3BhY2l0eS5cclxuICAgICogLSBET0xMSE9VU0UgLyBGTE9PUlBMQU46IDAgKGhpZGRlbikuXHJcbiAgICAqIC0gSU5TSURFOiBmbG9vci1maWx0ZXJlZCBwcm94aW1pdHkgb3BhY2l0eSB2aWEgTWF0dGVycG9ydFRhZ1NlcnZpY2UuXHJcbiAgICAqIC0gT3RoZXIgLyB1bmtub3duOiBkZWZhdWx0T3BhY2l0eS5cclxuICAgICovXHJcbiAgLypwcml2YXRlIF9jb21wdXRlQ29udGV4dE9wYWNpdHlGb3JUYWcoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSxcclxuICAgIGRlZmF1bHRPcGFjaXR5OiBudW1iZXJcclxuICApOiBudW1iZXIge1xyXG4gICAgaWYgKG1hdHRlcnRhZ0lEID09PSB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KSB7XHJcbiAgICAgIHJldHVybiBkZWZhdWx0T3BhY2l0eTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLmNvbXB1dGVTaW5nbGVUYWdDb250ZXh0T3BhY2l0eShcclxuICAgICAgbWF0dGVydGFnRGF0YSxcclxuICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICB0aGlzLnN3ZWVwQ29sbGVjdGlvbixcclxuICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Rmxvb3JTZXF1ZW5jZSxcclxuICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Um9vbXNcclxuICAgICk7XHJcbiAgfSovXHJcblxyXG4gIHByaXZhdGUgYWRkQ3VzdG9tQ3NzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgY3NzID0gYFxyXG4gICAgICAuZm9vdGVyLXVpLFxyXG4gICAgICAuc2hvd2Nhc2UtZm9vdGVyLFxyXG4gICAgICAubXAtbm92YS1idG4tZ3JvdXAsXHJcbiAgICAgIC5mb290ZXItZGl2aWRlcixcclxuICAgICAgLmxvZ28tbGluayxcclxuICAgICAgLmZvb3Rlci1sb2dvLFxyXG4gICAgICAuYm90dG9tLXVpLFxyXG4gICAgICBbZGF0YS10ZXN0aWQ9XCJzaG93Y2FzZS1mb290ZXJcIl0ge1xyXG4gICAgICAgIG9wYWNpdHk6IDAgIWltcG9ydGFudDtcclxuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW4gIWltcG9ydGFudDtcclxuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZSAhaW1wb3J0YW50O1xyXG4gICAgICB9XHJcbiAgICBgO1xyXG5cclxuICAgIC8vIDFzdCBtZXRob2Q6IFZpYSBTY2VuZSBTREtcclxuICAgIGlmICh0aGlzLnNkaz8uU2NlbmU/LmFkZFN0eWxlKSB7XHJcbiAgICAgIHRoaXMuc2RrLlNjZW5lLmFkZFN0eWxlKGNzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMm5kIG1ldGhvZDogRGlyZWN0IGluamVjdGlvbiBpbiBpRnJhbWUgRE9NIChGYWxsYmFjaylcclxuICAgIGNvbnN0IGlmcmFtZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyN2aWV3ZXItbW9kdWxlJykgYXMgSFRNTElGcmFtZUVsZW1lbnQ7XHJcbiAgICBpZiAoaWZyYW1lPy5jb250ZW50V2luZG93Py5kb2N1bWVudCkge1xyXG4gICAgICBjb25zdCBzdHlsZSA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XHJcbiAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gY3NzO1xyXG4gICAgICBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgY29udGVudCBvZiBNYXR0ZXJ0YWcgd2l0aCBtYXR0ZXJ0YWdJRCAoYmlsbGJvYXJkLCBpbmplY3RlZCBodG1sLCB0YWcgaWNvbilcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICogQHBhcmFtIG9iamVjdCBUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgZXRjXHJcbiAgICogQHBhcmFtIHRhZ1R5cGUgUG9pVHlwZVxyXG4gICAqL1xyXG4gIGFzeW5jIHVwZGF0ZU1hdHRlclRhZ0NvbnRlbnRGb3JUYWdJRChcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSA9IG51bGwsXHJcbiAgICB0YWdUeXBlOiBQb2lUeXBlID0gbnVsbFxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuc2RrKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2RrLlRhZy5lZGl0QmlsbGJvYXJkKFxyXG4gICAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkuZ2V0RGF0YSgpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTWlzZSDDoCBqb3VyIGRlIGwnaWPDtG5lIGltbcOpZGlhdGVcclxuICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UudXBkYXRlTWF0dGVyVGFnQ29udGVudEZvclRhZ0lEKFxyXG4gICAgICB0aGlzLnNkayxcclxuICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgIG9iamVjdCxcclxuICAgICAgdGFnVHlwZSxcclxuICAgICAgdGhpcy5zZXRUYWdJY29uQW5kT3BhY2l0eS5iaW5kKHRoaXMpLFxyXG4gICAgICAvLyBPbiBwYXNzZSB1bmUgZm9uY3Rpb24gd3JhcHBlciBxdWkgZXjDqWN1dGUgbCdpbmplY3Rpb24gSFRNTCBzYW5zIGJsb3F1ZXJcclxuICAgICAgYXN5bmMgKHR5cGUsIG9iaiwgc2lkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5pbmplY3RIdG1sSW5UYWcodHlwZSwgb2JqLCBzaWQpLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIGNvbnNvbGUud2FybignQXN5bmMgSFRNTCB1cGRhdGUgZmFpbGVkIGZvcicsIHNpZCwgZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgaW5qZWN0ZWQgaHRtbCBmb3IgTWF0dGVydGFnXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyB1cGRhdGVJbmplY3RlZEh0bWxGb3JUYWdJRChcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IGFueSxcclxuICAgIHRhZ1R5cGU6IFBvaVR5cGVcclxuICApIHtcclxuICAgIGF3YWl0IHRoaXMuaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgbWF0dGVydGFnSUQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBNYXR0ZXJ0YWcgZnJvbSBWaWV3ZXIgYnkgaXRzIElEXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqL1xyXG4gIGRlbGV0ZU1hdHRlcnRhZ0Zyb21JZChtYXR0ZXJ0YWdJRDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLmRlbGV0ZU1hdHRlcnRhZ0Zyb21JZCh0aGlzLnNkaywgbWF0dGVydGFnSUQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBsYXRlc3QgY3JlYXRlZCBtYXR0ZXJ0YWdcclxuICAgKi9cclxuICBhc3luYyBkZWxldGVMYXN0TWF0dGVydGFnKCkge1xyXG4gICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5kZWxldGVMYXN0TWF0dGVydGFnKHRoaXMuc2RrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExlZ2FjeTogdXNlZCB0byBiZSBjYWxsZWQgYWN0aW9uX2FkZF9tYXR0ZXJ0YWdfZnJvbV9QT0lcclxuICAgKiBBZGRzIGFuZCBjb25maWd1cmVzIE1hdHRlcnRhZyBmb3IgYW4gb2JqZWN0IChUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgZXRjKSB0aGF0IGNvcnJlc3BvbmRzIHRvIFBPSSAoY29vcmRpbmF0ZXMsIHRhZ0ljb24pXHJcbiAgICogQHBhcmFtIHRhZ1R5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUuLi5cclxuICAgKiBAcGFyYW0gcG9pIFBPSVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgY3JlYXRlTWF0dGVydGFnRnJvbVBPSShcclxuICAgIHRhZ1R5cGU6IFBvaVR5cGUsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgIHBvaTogUE9JXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLmNyZWF0ZU1hdHRlcnRhZ0Zyb21QT0koXHJcbiAgICAgIHRoaXMuc2RrLFxyXG4gICAgICB0YWdUeXBlLFxyXG4gICAgICBvYmplY3QsXHJcbiAgICAgIHBvaSxcclxuICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICB0aGlzLmdldFRhZ0Zyb21FbGVtZW50SWQuYmluZCh0aGlzKSxcclxuICAgICAgdGhpcy5zZXRUYWdJY29uQW5kT3BhY2l0eS5iaW5kKHRoaXMpLFxyXG4gICAgICB0aGlzLmluamVjdEh0bWxJblRhZy5iaW5kKHRoaXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5qZWN0IGN1c3RvbSBIVE1MIGFzIE1hdHRlcnRhZyBjb250ZW50XHJcbiAgICogQHBhcmFtIHRhZ1R5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUgZXRjXHJcbiAgICogQHBhcmFtIHRhZ0lEIHN0cmluZ1xyXG4gICAqL1xyXG4gIGFzeW5jIGluamVjdEh0bWxJblRhZyh0YWdUeXBlOiBQb2lUeXBlLCBvYmplY3Q6IERiT2JqZWN0VHlwZSwgdGFnSUQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UuaW5qZWN0SHRtbEluVGFnKHRoaXMuc2RrLCB0YWdUeXBlLCBvYmplY3QsIHRhZ0lEKTtcclxuICB9XHJcblxyXG5cclxuICBhc3luYyBhY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKCkge1xyXG4gICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5hY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKHRoaXMuc2RrKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgTWF0dGVydGFnIGZyb20gdmlzaXQgYXNzb2NpYXRlZCB3aXRoIG9iamVjdCBJRCAodGlja2V0SUQsIGV0YylcclxuICAgKiBAcGFyYW0gZWxlbWVudElEIHN0cmluZ1xyXG4gICAqL1xyXG4gIGFzeW5jIGRlbGV0ZU1hdHRlcnRhZ0Zvck9iamVjdChlbGVtZW50SUQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgbWF0dGVyVGFnSUQgPSB0aGlzLmdldFRhZ0Zyb21FbGVtZW50SWQoZWxlbWVudElEKS50YWc7XHJcbiAgICBpZiAobWF0dGVyVGFnSUQpIHtcclxuICAgICAgdGhpcy50YWdBZGRRdWV1ZSA9IHRoaXMudGFnQWRkUXVldWUudGhlbihhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5kZWxldGVNYXR0ZXJ0YWdGcm9tSWQodGhpcy5zZGssIG1hdHRlclRhZ0lEKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy50YWdBZGRRdWV1ZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHV1aWQgZnJvbSB0aHJlZWpzXHJcbiAgICogQHBhcmFtIHV1aWRcclxuICAgKi9cclxuICBhc3luYyBkZWxldGVPYmplY3QzRCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiB0aGlzLm9iamVjdDNEU2VydmljZS5kZWxldGVPYmplY3QzRCh1dWlkKTtcclxuICB9XHJcblxyXG4gIGdldE9iamVjdDNETW9kZWxOb2RlRnJvbURpY3Rpb25uYXJ5KHV1aWQ6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5vYmplY3QzRFNlcnZpY2UuZ2V0T2JqZWN0M0RNb2RlbE5vZGVGcm9tRGljdGlvbm5hcnkodXVpZCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzICBNYXR0ZXJ0YWdEYXRhIGFuZCBzdGFydCByZXBvc2l0aW9uaW5nIChjcmVhdGVzIHRlbXBvcmFyeSBtYXR0ZXJ0YWcgdGhhdCBmb2xsb3dzIHRoZSBjdXJzb3IpXHJcbiAgICogQHBhcmFtIHBvaVR5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBlbGVtZW50IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlLCBldGNcclxuICAgKi9cclxuICBhc3luYyBhZGRNYXR0ZXJ0YWdXaGVuUmVwb3NpdGlvbmluZyhwb2lUeXBlOiBQb2lUeXBlLCBlbGVtZW50OiBEYk9iamVjdFR5cGUpIHtcclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YShwb2lUeXBlKTtcclxuICAgIC8vIHNldCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGV4aXN0aW5nIHRhZ1xyXG4gICAgY29uc3QgW3BvaV0gPSBlbGVtZW50LnBvaXMuaXRlbXM7XHJcbiAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlKSB7XHJcbiAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9zaXRpb24oSlNPTi5wYXJzZShwb2kuY29vcmRpbmF0ZSkpO1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvaShwb2kpOyAvLyB0byBrZWVwIGN1c3RvbSB0YWdJY29uIGFuZCBvcGFjaXR5XHJcbiAgICB9XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldFN3ZWVwSUQodGhpcy5wb3NlQ2FtZXJhLnN3ZWVwKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0Um90YXRpb24odGhpcy5wb3NlQ2FtZXJhLnJvdGF0aW9uKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KGVsZW1lbnQsIHBvaVR5cGUpO1xyXG4gICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyA9IGF3YWl0IHRoaXMuYWRkTWF0dGVydGFnVG9WaWV3ZXIobWF0dGVydGFnRGF0YSk7XHJcblxyXG4gICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLlBPU0lUSU9OSU5HKTtcclxuICAgIGF3YWl0IHRoaXMuYWRkQ3Vyc29yTWF0dGVydGFnKG1hdHRlcnRhZ0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBNYXR0ZXJ0YWdEYXRhIGFuZCBtYXR0ZXJ0YWcgdGhhdCBmb2xsb3dzIHRoZSBjdXJzb3Igd2hlbiBjaG9vc2luZyBwb3NpdGlvbiBmb3IgYSBuZXcgb2JqZWN0XHJcbiAgICogQHBhcmFtIHBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyBhZGRNYXR0ZXJ0YWdXaGVuQWRkaW5nKHBvaVR5cGU6IFBvaVR5cGUpIHtcclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YShwb2lUeXBlKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0U3dlZXBJRCh0aGlzLnBvc2VDYW1lcmEuc3dlZXApO1xyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRSb3RhdGlvbih0aGlzLnBvc2VDYW1lcmEucm90YXRpb24pO1xyXG4gICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkFERElORyk7XHJcbiAgICBhd2FpdCB0aGlzLmFkZEN1cnNvck1hdHRlcnRhZyhtYXR0ZXJ0YWdEYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbmNlbHMgZm9sbG93aW5nIG9mIGN1cnNvciAobWVhbmluZyBkZWxldGluZyBsYXN0IE1hdHRlcnRhZylcclxuICAgKi9cclxuICBjYW5jZWxGb2xsb3dpbmdDdXJzb3IoKSB7XHJcbiAgICB0aGlzLmRlbGV0ZUxhc3RNYXR0ZXJ0YWcoKTtcclxuICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUKTtcclxuICB9XHJcblxyXG4gIHNldExhc3RPYmplY3QzRChsYXN0T2JqZWN0M0Q6IFRocmVlSlNPYmplY3QzRCkge1xyXG4gICAgdGhpcy5vYmplY3QzRFNlcnZpY2UubGFzdE9iamVjdDNEID0gbGFzdE9iamVjdDNEO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFzdE9iamVjdDNEKCk6IFRocmVlSlNPYmplY3QzRCB7XHJcbiAgICByZXR1cm4gdGhpcy5vYmplY3QzRFNlcnZpY2UubGFzdE9iamVjdDNEO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybXMgY2FsbGJhY2sgYWZ0ZXIgbWF0dGVydGFnIHBvc2l0aW9uIHdhcyB2YWxpZGF0ZWQgKGNyZWF0aW9uIG9mIG9iamVjdCBvciByZXBvc2l0aW9uaW5nKVxyXG4gICAqIEBwYXJhbSBtb2RlIE1hdHRlcnRhZ0FjdGlvbk1vZGVcclxuICAgKi9cclxuICBjYWxsYmFja0FmdGVyTWF0dGVydGFnVmFsaWRhdGlvbihtb2RlOiBNYXR0ZXJ0YWdBY3Rpb25Nb2RlKSB7XHJcbiAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX0VRVUlQTUVOVDpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9lcXVpcGBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9USUNLRVQ6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfdGlja2V0YF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX09CSkVDVDNEOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX29iamVjdDNkYF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX0RBVEE6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCc/JykpIHtcclxuICAgICAgICAgIHVybCA9IHRoaXMucm91dGVyLnVybC5zdWJzdHJpbmcoMCwgdGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJz8nKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3VybH0vYWRkX2ZlYXR1cmVgXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfREVTSzpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9mZWF0dXJlYF0sIHtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IGlzRGVzazogdHJ1ZSB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX1JPT006XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfcm9vbWBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX09CSkVDVDNEOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICAvLyBETyBOb3RoaW5nIChyb3V0aW5nKSwganVzdFxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgIFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9vYmplY3QzZC8ke3RoaXMubGFzdE9iamVjdDNELmlkfWBdLFxyXG4gICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0gfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9USUNLRVQ6XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vZGV0YWlsLyR7dGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpLmVsZW1lbnRJRFxyXG4gICAgICAgICAgICAgIH1gLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0gfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9FUVVJUE1FTlQ6XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vZXF1aXAvJHt0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobGFzdFRhZykuZWxlbWVudElEXHJcbiAgICAgICAgICAgICAgfWAsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHsgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX0RBVEE6XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZlUm91dGUsXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0sIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fUk9PTTpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmVSb3V0ZSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSwgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdWxseSB1cGRhdGVzIGV4aXN0aW5nIE1hdHRlcnRhZyBjb250ZW50IHdpdGggZGF0YSBvZiBvYmplY3QgKFRpY2tldCwgRXF1aXBtZW50LCBEZXNrKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gb2JqZWN0IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlLCBEZXNrXHJcbiAgICogQHBhcmFtIHBvaVR5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBwb2kgUE9JXHJcbiAgICovXHJcbiAgYXN5bmMgc2V0T2JqZWN0QW5kUG9pSW5UYWcoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICBwb2lUeXBlOiBQb2lUeXBlLFxyXG4gICAgcG9pOiBQT0kgfCBudWxsID0gbnVsbFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5zZXRPYmplY3Qob2JqZWN0LCBwb2lUeXBlKTtcclxuICAgIGlmIChwb2kpIHtcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5zZXRQb2kocG9pKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkuZWxlbWVudElEID0gb2JqZWN0LmlkO1xyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVNYXR0ZXJUYWdDb250ZW50Rm9yVGFnSUQobWF0dGVydGFnSUQsIG9iamVjdCwgcG9pVHlwZSk7XHJcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlTWF0dGVyVGFnUG9zSW5TZGtWaWV3ZXIoXHJcbiAgICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgICAgb2JqZWN0LFxyXG4gICAgICAgIHBvaVR5cGUsXHJcbiAgICAgICAgcG9pXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBlcnJvciBpbiBzZXRPYmplY3RBbmRQb2lJblRhZzogJHtlfWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlTWF0dGVyVGFnUG9zSW5TZGtWaWV3ZXIoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICBwb2lUeXBlOiBQb2lUeXBlLFxyXG4gICAgcG9pOiBQT0kgfCBudWxsID0gbnVsbFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgSW5kZXhUb1VwZGF0ZSA9IG9iamVjdC5wb2lzLml0ZW1zLmZpbmRJbmRleCgodSkgPT4gdS5pZCA9PT0gcG9pLmlkKTtcclxuICAgIG9iamVjdC5wb2lzLml0ZW1zW0luZGV4VG9VcGRhdGVdID0gcG9pO1xyXG4gICAgY29uc3QgeyB4LCB5LCB6IH0gPSBKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKTtcclxuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0ge1xyXG4gICAgICBhbmNob3JQb3NpdGlvbjoge1xyXG4gICAgICAgIHg6IHgsXHJcbiAgICAgICAgeTogeSxcclxuICAgICAgICB6OiB6LFxyXG4gICAgICB9LFxyXG4gICAgICBzdGVtVmVjdG9yOiB7XHJcbiAgICAgICAgLy8gbWFrZSB0aGUgVGFnIHN0aWNrIHN0cmFpZ2h0IHVwIGFuZCBtYWtlIGl0IDAuMzAgbWV0ZXJzICh+MSBmb290KSB0YWxsXHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLjMsXHJcbiAgICAgICAgejogMCxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICAvL3RoaXMuc2RrLk1hdHRlcnRhZy5lZGl0UG9zaXRpb24obWF0dGVydGFnSUQsIG5ld1Bvc2l0aW9uKTtcclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0UG9zaXRpb24obWF0dGVydGFnSUQsIG5ld1Bvc2l0aW9uKTtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzXHJcbiAgICAgIC5nZXQobWF0dGVydGFnSUQpXHJcbiAgICAgIC5zZXRQb3NpdGlvbihuZXdQb3NpdGlvbi5hbmNob3JQb3NpdGlvbik7XHJcblxyXG4gICAgZm9yIChsZXQgdGFnSWQgb2YgdGhpcy5tYXR0ZXJ0YWdJRHMpIHtcclxuICAgICAgY29uc3QgY3VycmVudFRhZyA9IHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldCh0YWdJZCk7XHJcbiAgICAgIGlmICghY3VycmVudFRhZykge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjdXJyZW50VGFnLmVsZW1lbnRJRCA9PT0gb2JqZWN0LmlkICYmIHRhZ0lkICE9PSBtYXR0ZXJ0YWdJRCkge1xyXG4gICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmRlbGV0ZSh0YWdJZCk7XHJcbiAgICAgICAgdGhpcy5zZGsuVGFnLnJlbW92ZSh0YWdJZCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgbWF0dGVyVGFnSUQgYW5kIGl0cyBzd2VlcCBmb3IgYW4gb2JqZWN0IElEICh0aWNrZXQgSUQsIGV0YylcclxuICAgKiBAcGFyYW0gZWxlbWVudElEIHN0cmluZ1xyXG4gICAqIEByZXR1cm5zIHt0YWc6IHN0cmluZyB8IG51bGwsIHN3ZWVwOiBzdHJpbmcgfCBudWxsfVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnRJRDogc3RyaW5nKTogeyB0YWc6IHN0cmluZyB8IG51bGw7IHN3ZWVwOiBzdHJpbmcgfCBudWxsIH0ge1xyXG4gICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UuZ2V0VGFnRnJvbUVsZW1lbnRJZChlbGVtZW50SUQsIHRoaXMuc3dlZXBzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgbGF0ZXN0IHRhZyBjcmVhdGVkIGluIHRoZSB2aXNpdCAod2hlbiBmb2xsb3dpbmcgdGhlIGN1cnNvciB0byBwb3NpdGlvbilcclxuICAgKiBAcmV0dXJucyBzdHJpbmcgbWF0dGVydGFnSURcclxuICAgKi9cclxuICBnZXRMYXN0VGFnKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubWF0dGVydGFnVG9Gb2xsb3c7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdJRHMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgPyBudWxsXHJcbiAgICAgICAgOiB0aGlzLm1hdHRlcnRhZ0lEc1t0aGlzLm1hdHRlcnRhZ0lEcy5sZW5ndGggLSAxXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgTWF0dGVydGFnRGF0YSBmb3IgTWF0dGVydGFnIChyZXBsYWNlcyBnZXRUYWdEYXRhRnJvbUlkKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRFxyXG4gICAqIEByZXR1cm5zIE1hdHRlcnRhZ0RhdGFcclxuICAgKi9cclxuICBnZXRNYXR0ZXJUYWdEYXRhRm9yTWF0dGVydGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcpOiBNYXR0ZXJ0YWdEYXRhIHwgbnVsbCB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICBjb25zb2xlLmxvZygnY2Fubm90IHJldHJpZXZlIG1hdHRlcnRhZ0RhdGEgZm9yIHRhZycsIG1hdHRlcnRhZ0lEKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tIFZpZXdlciByZWxhdGVkIChzd2l0Y2ggdmlld3MsIGdvIHRvKSAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICBhc3luYyBhY3Rpb25fdG9vbGJveF9mbG9vcnBsYW4oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5hY3Rpb25fdG9vbGJveF9mbG9vcnBsYW4odGhpcy5zZGspO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KHRoaXMuc2RrKTtcclxuICB9XHJcblxyXG4gIGFjdGlvblNob3dBbGxGbG9vcnMoKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmFjdGlvblNob3dBbGxGbG9vcnModGhpcy5zZGspO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX3Rvb2xib3hfZG9sbGhvdXNlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuYWN0aW9uX3Rvb2xib3hfZG9sbGhvdXNlKHRoaXMuc2RrKTtcclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X21lc3VyZSgpIHtcclxuICAgIGNvbnN0IG5ld1N0YXRlID0gIXRoaXMuaXNNZWFzdXJlTW9kZU9uO1xyXG4gICAgdGhpcy5zZGsuTWVhc3VyZW1lbnRzLnRvZ2dsZU1vZGUobmV3U3RhdGUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBgTWVhc3VyZW1lbnQgbW9kZSBpcyBub3cgJHtuZXdTdGF0ZSA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YFxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNNZWFzdXJlTW9kZU9uKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25fZ29fdG9fZmxvb3IoXHJcbiAgICBmbG9vck5hbWU6IHN0cmluZyxcclxuICAgIG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlOiBudW1iZXIgPSBudWxsXHJcbiAgKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5hY3Rpb25fZ29fdG9fZmxvb3IodGhpcy5zZGssIGZsb29yTmFtZSwgbWF0dGVycG9ydEZsb29yU2VxdWVuY2UpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2dvX3RvX3N3ZWVwKHN3ZWVwOiBzdHJpbmcsIHJvdGF0aW9uPzogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9IHwgbnVsbCkge1xyXG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuYWN0aW9uX2dvX3RvX3N3ZWVwKHRoaXMuc2RrLCBzd2VlcCwgcm90YXRpb24pO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudFN3ZWVwKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0Q3VycmVudFN3ZWVwKHRoaXMucG9zZUNhbWVyYSk7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50Q2FtZXJhUG9zaXRpb24oKToge1xyXG4gICAgcm90YXRpb246IGFueTtcclxuICAgIHBvc2l0aW9uOiBhbnk7XHJcbiAgICBzd2VlcDogYW55O1xyXG4gIH0gfCBudWxsIHtcclxuICAgIGlmICh0aGlzLnBvc2VDYW1lcmEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucG9zZUNhbWVyYTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc2V0SW50ZXJhY3Rpb25Nb2RlKGludGVyYWN0aW9uTW9kZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmludGVyYWN0aW9uTW9kZSA9IGludGVyYWN0aW9uTW9kZTtcclxuICB9XHJcblxyXG4gIGdldEludGVyYWN0aW9uTW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmludGVyYWN0aW9uTW9kZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGFsbCB2YXJpYWJsZXMsIGRlbGV0ZXMgYWxsIHRhZ3MgKHdoZW4gdmlld2VyIGlzIHJlbW92ZXIgb3IgbW9kZWwgY2hhbmdlZD1yZWxvYWQgbmVlZGVkKVxyXG4gICAqL1xyXG4gIGFzeW5jIGNsZWFyQWxsKCkge1xyXG4gICAgY29uc29sZS5sb2coJ3JlbW92aW5nIHZpZXdlcicpO1xyXG4gICAgYXdhaXQgdGhpcy5hY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKCk7XHJcbiAgICB0aGlzLmZsb29ycyA9IG51bGw7XHJcbiAgICB0aGlzLnN3ZWVwcyA9IG51bGw7XHJcbiAgICB0aGlzLnNkayA9IG51bGw7XHJcblxyXG4gICAgdGhpcy5wb2ludGVyU2VydmljZS5jbGVhcih7XHJcbiAgICAgIG9uTGVmdENsaWNrOiB0aGlzLnBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyLmJpbmQodGhpcyksXHJcbiAgICAgIG9uUmlnaHRDbGljazogdGhpcy5wb2ludGVyUmlnaHRDbGlja0hhbmRsZXIuYmluZCh0aGlzKSxcclxuICAgICAgb25NaWRkbGVDbGljazogdGhpcy5wb2ludGVyTWlkZGxlQ2xpY2tIYW5kbGVyLmJpbmQodGhpcyksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmZvcmJpZGRlblN3ZWVwcyA9IFtdO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlRm9yYmlkZGVuU3dlZXBzKGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10pIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJlbW92ZUZvcmJpZGRlblN3ZWVwcyh0aGlzLnNkaywgZm9yYmlkZGVuU3dlZXBzKTtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLSAzRCBvYmplY3RzIChTREsgQnVuZGxlIG9ubHkpIC0tLS0tLS0tLS1cclxuICAvL1xyXG4gIGFzeW5jIGluaXQzRE9iamVjdFZpZXdlcigpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiB0aGlzLm9iamVjdDNEU2VydmljZS5pbml0M0RPYmplY3RWaWV3ZXIodGhpcy5zZGspO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkM0RPYmplY3QoXHJcbiAgICBvYmo6IElPYmplY3QzRCxcclxuICAgIG1vZGU/OiAndHJhbnNsYXRlJyB8ICdyb3RhdGUnXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLm9iamVjdDNEU2VydmljZS5hZGQzRE9iamVjdCh0aGlzLnNkaywgb2JqLCBtb2RlKTtcclxuICB9XHJcblxyXG4gIHRvZ2dsZU9iamVjdFZpc2liaWxpdHkob2JqZWN0SWQ6IGFueSkge1xyXG4gICAgdGhpcy5vYmplY3QzRFNlcnZpY2UudG9nZ2xlT2JqZWN0VmlzaWJpbGl0eShvYmplY3RJZCk7XHJcbiAgfVxyXG5cclxuICBpc09iamVjdFZpc2libGUob2JqZWN0SWQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLmlzT2JqZWN0VmlzaWJsZShvYmplY3RJZCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwb2ludENhbWVyYVRvM0RPYmplY3Qob2JqZWN0SWQ6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLnBvaW50Q2FtZXJhVG8zRE9iamVjdChcclxuICAgICAgdGhpcy5zZGssXHJcbiAgICAgIG9iamVjdElkLFxyXG4gICAgICB0aGlzLmNyZWF0ZU1hdHRlcnRhZ0Zyb21QT0kuYmluZCh0aGlzKSxcclxuICAgICAgdGhpcy5nb1RvVGFnLmJpbmQodGhpcyksXHJcbiAgICAgIHRoaXMuZGVsZXRlTGFzdE1hdHRlcnRhZy5iaW5kKHRoaXMpLFxyXG4gICAgICB0aGlzLmdldFRhZ0Zyb21FbGVtZW50SWQuYmluZCh0aGlzKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFNjZW5lTm9kZUZyb21PYmplY3QzRElkKHV1aWQ6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5vYmplY3QzRFNlcnZpY2UuZ2V0U2NlbmVOb2RlRnJvbU9iamVjdDNESWQodXVpZCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkaXNwbGF5QXppbXV0YWxDcm93bigpIHtcclxuICAgIHJldHVybiB0aGlzLm9iamVjdDNEU2VydmljZS5kaXNwbGF5QXppbXV0YWxDcm93bih0aGlzLnBvc2VDYW1lcmEpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYXR0YWNoR2l6bW9Db250cm9sVG8zRE9iamVjdChcclxuICAgIG1vZGVsTm9kZTogYW55LFxyXG4gICAgc2NlbmVPYmplY3Q6IGFueSxcclxuICAgIG1vZGU6ICd0cmFuc2xhdGUnIHwgJ3JvdGF0ZScgfCAnc2NhbGUnLFxyXG4gICAgdmlzaWJsZTogYm9vbGVhbixcclxuICAgIGlzTmV3T2JqZWN0OiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLm9iamVjdDNEU2VydmljZS5hdHRhY2hHaXptb0NvbnRyb2xUbzNET2JqZWN0KHRoaXMuc2RrLCBtb2RlbE5vZGUsIHNjZW5lT2JqZWN0LCBtb2RlLCB2aXNpYmxlLCBpc05ld09iamVjdCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVHaXptb0Zyb21MYXN0T2JqZWN0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5vYmplY3QzRFNlcnZpY2UucmVtb3ZlR2l6bW9Gcm9tTGFzdE9iamVjdCgpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlVmlld0ZydXN0dW0oKTogdm9pZCB7XHJcbiAgICB0aGlzLm9iamVjdDNEU2VydmljZS50b2dnbGVWaWV3RnJ1c3R1bSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
1145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUNMLGVBQWUsRUFDZixJQUFJLEVBQ0wsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUVMLFdBQVcsRUFFWCxtQkFBbUIsRUFFbkIsT0FBTyxFQUNQLFFBQVEsRUFDUixrQkFBa0IsR0FDbkIsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7Ozs7OztBQStCMUIsTUFBTSxPQUFPLGlCQUFpQjtJQXNObEI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBNU5ILEdBQUcsQ0FBTTtJQUVSLFNBQVMsQ0FBTTtJQUV2QixrQkFBa0I7SUFDVixjQUFjLENBQU07SUFFckIsVUFBVSxDQUErQztJQUV6RCxrQkFBa0IsR0FBUSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFFcEQsZUFBZSxHQUFHLEtBQUssQ0FBQztJQUV4QixlQUFlLEdBQVcsa0JBQWtCLENBQUMsT0FBTyxDQUFDO0lBRXJELFVBQVUsR0FBVyxRQUFRLENBQUM7SUFFdEMsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBVyxZQUFZLENBQUMsS0FBb0I7UUFD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aEIsSUFBc0MsRUFDdEMsT0FBZ0IsRUFDaEIsV0FBb0I7UUFFcEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3pILENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsZUFBZSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0MsQ0FBQzt3R0E5NkNVLGlCQUFpQixrQkFxTmxCLFFBQVE7NEdBck5QLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFzTkksTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBOZ1pvbmUsIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIHBvaVR5cGVUb1N0cmluZyxcclxuICB3YWl0XHJcbn0gZnJvbSAnLi4vaGVscGVycy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVydGFnRGF0YSB9IGZyb20gJy4uL21hdHRlcnRhZ0RhdGEnO1xyXG5pbXBvcnQge1xyXG4gIERiT2JqZWN0VHlwZSxcclxuICBGZWF0dXJlVHlwZSxcclxuICBJT2JqZWN0M0QsXHJcbiAgTWF0dGVydGFnQWN0aW9uTW9kZSxcclxuICBQT0ksXHJcbiAgUG9pVHlwZSxcclxuICBTcE1vZHVsZSxcclxuICBWaWV3ZXJJbnRlcmFjdGlvbnMsXHJcbn0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VUYWdTZXJ2aWNlIH0gZnJvbSAnLi90YWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VWaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4vYmFzZVZpc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XHJcbmltcG9ydCB7IENhbWVyYU1vZGUgfSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVycG9ydE1lYXN1cmVtZW50U2VydmljZSB9IGZyb20gJy4vbWF0dGVycG9ydC1tZWFzdXJlbWVudC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVycG9ydE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi9tYXR0ZXJwb3J0LW5hdmlnYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdHRlcnBvcnRQb2ludGVyU2VydmljZSB9IGZyb20gJy4vbWF0dGVycG9ydC1wb2ludGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXR0ZXJwb3J0T2JqZWN0M0RTZXJ2aWNlIH0gZnJvbSAnLi9tYXR0ZXJwb3J0LW9iamVjdDNkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXR0ZXJwb3J0VGFnU2VydmljZSB9IGZyb20gJy4vbWF0dGVycG9ydC10YWcuc2VydmljZSc7XHJcblxyXG4vKipcclxuICogQ3VzdG9tIFRocmVlanMgT2JqZWN0IDNEIGludGVyZmFjZVxyXG4gKi9cclxuaW50ZXJmYWNlIFRocmVlSlNPYmplY3QzRCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB1dWlkPzogc3RyaW5nO1xyXG4gIHBvc2l0aW9uPzogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyIH1cclxuICByb3RhdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9XHJcbiAgc2NhbGU/OiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgfVxyXG59XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICBNUF9TREs6IHsgY29ubmVjdDogRnVuY3Rpb24gfTtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0U2VydmljZSB7XHJcblxyXG4gIHB1YmxpYyBzZGs6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBjb250YWluZXI6IGFueTtcclxuXHJcbiAgLy8gUG9zaXRpb24gY2FtZXJhXHJcbiAgcHJpdmF0ZSBwb3NlTWF0dGVycG9ydDogYW55O1xyXG5cclxuICBwdWJsaWMgcG9zZUNhbWVyYTogeyByb3RhdGlvbjogYW55OyBwb3NpdGlvbjogYW55OyBzd2VlcDogYW55IH07XHJcblxyXG4gIHB1YmxpYyBsYXN0Q2FtZXJhUG9zaXRpb246IGFueSA9IHsgeDogMC4wLCB5OiAwLjAsIHo6IDAuMCB9O1xyXG5cclxuICBwcml2YXRlIGlzTWVhc3VyZU1vZGVPbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGludGVyYWN0aW9uTW9kZTogbnVtYmVyID0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQ7XHJcblxyXG4gIHByaXZhdGUgY2FtZXJhTW9kZTogc3RyaW5nID0gJ0lOU0lERSc7XHJcblxyXG4gIHB1YmxpYyBnZXQgbWF0dGVydGFnSURzKCk6IEFycmF5PHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UubWF0dGVydGFnSURzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBtYXR0ZXJ0YWdJRHModmFsdWU6IEFycmF5PHN0cmluZz4pIHtcclxuICAgIHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UubWF0dGVydGFnSURzID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRpY3Rpb25uYXJ5VGFncygpOiBNYXA8c3RyaW5nLCBNYXR0ZXJ0YWdEYXRhPiB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5kaWN0aW9ubmFyeVRhZ3M7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGRpY3Rpb25uYXJ5T2JqZWN0czNEKCk6IE1hcDxzdHJpbmcsIGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLmRpY3Rpb25uYXJ5T2JqZWN0czNEO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBkaWN0aW9ubmFyeVNjZW5lT2JqZWN0czNEKCk6IE1hcDxzdHJpbmcsIGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLmRpY3Rpb25uYXJ5U2NlbmVPYmplY3RzM0Q7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRocmVlSlNTY2VuZSgpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLnRocmVlSlNTY2VuZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdGhyZWVKU1NjZW5lKHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMub2JqZWN0M0RTZXJ2aWNlLnRocmVlSlNTY2VuZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhemltdXRoYWxDcm93bigpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLmF6aW11dGhhbENyb3duO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBhemltdXRoYWxDcm93bih2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLm9iamVjdDNEU2VydmljZS5hemltdXRoYWxDcm93biA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0YWdzQXR0YWNobWVudHMoKTogT2JqZWN0IHtcclxuICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLnRhZ3NBdHRhY2htZW50cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc3dlZXBzKCk6IEFycmF5PHN0cmluZz4gfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnN3ZWVwcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgc3dlZXBzKHZhbHVlOiBBcnJheTxzdHJpbmc+IHwgbnVsbCkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zd2VlcHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgc3dlZXBDb2xsZWN0aW9uKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zd2VlcENvbGxlY3Rpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IHN3ZWVwQ29sbGVjdGlvbih2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnN3ZWVwQ29sbGVjdGlvbiA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjdXJyZW50U3dlZXAoKTogU3ViamVjdDxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRTd2VlcDtcclxuICB9XHJcblxyXG4gIC8vY2FtZXJhIHBvc2l0aW9uIHdpdGggcm90YXRpb25cclxuICBwdWJsaWMgY3VycmVudENhbWVyYVBvc2U6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHB1YmxpYyBnZXQgZmxvb3JzKCk6IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBzZXF1ZW5jZTogbnVtYmVyIH0+IHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5mbG9vcnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGZsb29ycyh2YWx1ZTogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHNlcXVlbmNlOiBudW1iZXIgfT4gfCBudWxsKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmZsb29ycyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY3VycmVudFNwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgcHVibGljIGdldCBsYXN0T2JqZWN0M0QoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm9iamVjdDNEU2VydmljZS5sYXN0T2JqZWN0M0Q7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGxhc3RPYmplY3QzRCh2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLm9iamVjdDNEU2VydmljZS5sYXN0T2JqZWN0M0QgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFJvb21zKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRSb29tcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY3VycmVudFJvb21zKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Um9vbXMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFNwYWNlSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3BhY2VJRDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY3VycmVudFNwYWNlSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY3VycmVudFNwYWNlSUQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZm9yYmlkZGVuU3dlZXBzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmZvcmJpZGRlblN3ZWVwcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgZm9yYmlkZGVuU3dlZXBzKHZhbHVlOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5mb3JiaWRkZW5Td2VlcHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB0YWdBY3Rpb246IFN1YmplY3Q8eyBhY3Rpb246IHN0cmluZzsgZGF0YTogc3RyaW5nIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHVibGljIGdldCBtYXR0ZXJ0YWdUb0ZvbGxvdygpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLm1hdHRlcnRhZ1RvRm9sbG93O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBtYXR0ZXJ0YWdUb0ZvbGxvdyh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5tYXR0ZXJ0YWdUb0ZvbGxvdyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpblRyYW5zaXRpb25Nb2RlKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaW5UcmFuc2l0aW9uTW9kZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgaW5UcmFuc2l0aW9uTW9kZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5pblRyYW5zaXRpb25Nb2RlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGluVHJhbnNpdGlvblN3ZWVwKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaW5UcmFuc2l0aW9uU3dlZXA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGluVHJhbnNpdGlvblN3ZWVwKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmluVHJhbnNpdGlvblN3ZWVwID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5vTGlnaHRGb3JPYmplY3RzID0gdHJ1ZTtcclxuXHJcbiAgcHVibGljIGdldCBjdXJyZW50Q2FtZXJhTW9kZSgpOiBDYW1lcmFNb2RlIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRDYW1lcmFNb2RlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBjdXJyZW50Q2FtZXJhTW9kZSh2YWx1ZTogQ2FtZXJhTW9kZSkge1xyXG4gICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Q2FtZXJhTW9kZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvbkNhbWVyYU1vZGVDaGFuZ2VkKCk6IFN1YmplY3Q8Q2FtZXJhTW9kZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2Uub25DYW1lcmFNb2RlQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgb25Sb29tQ2hhbmdlZCgpOiBTdWJqZWN0PGFueVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5vblJvb21DaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvbkdvVG9UYWcoKTogU3ViamVjdDxzdHJpbmc+IHtcclxuICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLm9uR29Ub1RhZztcclxuICB9XHJcblxyXG4gIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlO1xyXG5cclxuICBjb25maWc6IENvbmZpZztcclxuXHJcbiAgU1BNb2R1bGU6IFNwTW9kdWxlO1xyXG5cclxuICBwdWJsaWMgZ2V0IG9iamVjdENvbnRyb2woKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm9iamVjdDNEU2VydmljZS5vYmplY3RDb250cm9sO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBzZWN1cml0eUNhbWVyYUFuaW1hdG9yKCk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5vYmplY3QzRFNlcnZpY2Uuc2VjdXJpdHlDYW1lcmFBbmltYXRvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGlvbnMgb24gbGVmdCBjbGljayB3aGVuIHBvc2l0aW9uaW5nIG1hdHRlcnRhZyBpbiB2aXNpdFxyXG4gICAqL1xyXG4gIHBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyID0gKGV2dDogTW91c2VFdmVudCkgPT4ge1xyXG4gICAgaWYgKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpIHtcclxuICAgICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldCh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KTtcclxuICAgICAgaWYgKG1hdHRlcnRhZ0RhdGEpIHtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKHsgLi4udGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbiB9KTtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh7IC4uLnRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsIH0pO1xyXG4gICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLnNldCh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZU1hdHRlclRhZ0NvbnRlbnRGb3JUYWdJRCh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5vblZhbGlkYXRlZE1hdHRlcnRhZygpO1xyXG4gIH07XHJcblxyXG4gIHBvaW50ZXJSaWdodENsaWNrSGFuZGxlciA9IChlKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmNhbmNlbEZvbGxvd2luZ0N1cnNvcigpO1xyXG4gICAgYWxlcnQoJ2FjdGlvbiBjYW5jZWxsZWQnKTtcclxuICB9O1xyXG5cclxuICBwb2ludGVyTWlkZGxlQ2xpY2tIYW5kbGVyID0gKGUpID0+IHtcclxuICAgIHRoaXMucG9pbnRlclNlcnZpY2UudXBkYXRlQ3Vyc29yRGlzcGxheSh0aGlzLnBvc2VNYXR0ZXJwb3J0KTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnY29uZmlnJykgY29uZmlnOiBDb25maWcsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHZpc2liaWxpdHlTZXJ2aWNlOiBCYXNlVmlzaWJpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgcHJpdmF0ZSBtZWFzdXJlbWVudFNlcnZpY2U6IE1hdHRlcnBvcnRNZWFzdXJlbWVudFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBNYXR0ZXJwb3J0TmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHBvaW50ZXJTZXJ2aWNlOiBNYXR0ZXJwb3J0UG9pbnRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG9iamVjdDNEU2VydmljZTogTWF0dGVycG9ydE9iamVjdDNEU2VydmljZSxcclxuICAgIHByaXZhdGUgbWF0dGVycG9ydFRhZ1NlcnZpY2U6IE1hdHRlcnBvcnRUYWdTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIHRoZSBNYXR0ZXJwb3J0IFNESywgc2V0cyB1cCBldmVudCBsaXN0ZW5lcnMsIGFuZCBjb25maWd1cmVzIGFzc2V0cy5cclxuICAgKiBAcGFyYW0gdGFnU2VydmljZSBTZXJ2aWNlIHVzZWQgdG8gZ2VuZXJhdGUgYW5kIGluamVjdCBIVE1MIGludG8gdGFncy5cclxuICAgKiBAcGFyYW0gbW9kdWxlIEFwcGxpY2F0aW9uIG1vZHVsZSAoZS5nLiwgSU1NTywgTVVTRVVNKSB0byBlbmFibGUgc3BlY2lmaWMgZmVhdHVyZXMuXHJcbiAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gdHJ1ZSB3aGVuIGluaXRpYWxpemF0aW9uIGlzIGNvbXBsZXRlLlxyXG4gICAqL1xyXG4gIGFzeW5jIGluaXRTZGsoXHJcbiAgICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSxcclxuICAgIG1vZHVsZTogU3BNb2R1bGUgPSBTcE1vZHVsZS5JTU1PXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5zZGspIHtcclxuICAgICAgLy8gY2xlYW4gaWYgc2RrIGlzIHJ1bm5pbmcgYWxyZWFkeVxyXG4gICAgICBhd2FpdCB0aGlzLmFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKTtcclxuICAgIH1cclxuICAgIHRoaXMudGFnU2VydmljZSA9IHRhZ1NlcnZpY2U7XHJcbiAgICB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLnNldFRhZ1NlcnZpY2UodGFnU2VydmljZSk7XHJcbiAgICB0aGlzLlNQTW9kdWxlID0gbW9kdWxlO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgLy8gUmV0cmlldmUgRE9NIGVsZW1lbnRzXHJcbiAgICAgIGNvbnN0IHBvaW50ZXJCdG4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcjdmlld2VyLXBvaW50ZXItdHJpY2snXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3ZpZXdlci1tb2R1bGUnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAnI3ZpZXdlci1tb2R1bGUnXHJcbiAgICAgICkgYXMgSFRNTElGcmFtZUVsZW1lbnQ7XHJcbiAgICAgIGlmICghaWZyYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGN1cnNvckJ0biA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJyNidXR0b24nXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGNvbnN0IHRleHRQYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJyN0ZXh0J1xyXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgdGhpcy5wb2ludGVyU2VydmljZS5pbml0KHRoaXMuY29udGFpbmVyLCBwb2ludGVyQnRuLCBjdXJzb3JCdG4sIHRleHRQYW5lbCwge1xyXG4gICAgICAgIG9uTGVmdENsaWNrOiB0aGlzLnBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyLmJpbmQodGhpcyksXHJcbiAgICAgICAgb25SaWdodENsaWNrOiB0aGlzLnBvaW50ZXJSaWdodENsaWNrSGFuZGxlci5iaW5kKHRoaXMpLFxyXG4gICAgICAgIG9uTWlkZGxlQ2xpY2s6IHRoaXMucG9pbnRlck1pZGRsZUNsaWNrSGFuZGxlci5iaW5kKHRoaXMpLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIExvYWQgU0RLXHJcbiAgICAgIGNvbnN0IHNob3djYXNlV2luZG93ID0gaWZyYW1lLmNvbnRlbnRXaW5kb3c7XHJcbiAgICAgIGlmcmFtZS5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICB0aGlzLnNkayA9IGF3YWl0IChzaG93Y2FzZVdpbmRvdyBhcyBhbnkpLk1QX1NESy5jb25uZWN0KFxyXG4gICAgICAgICAgICBzaG93Y2FzZVdpbmRvdyxcclxuICAgICAgICAgICAgJ3FuOXdzYXN1eTVoMmZ6cmJybjFuenIwaWQnLFxyXG4gICAgICAgICAgICAnJ1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFkZEN1c3RvbUNzcygpO1xyXG5cclxuICAgICAgICB0aGlzLnBvaW50ZXJTZXJ2aWNlLnN0YXJ0QWRtaW5DdXJzb3JUcmFja2VyKFxyXG4gICAgICAgICAgdGhpcy5zZGssXHJcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lcixcclxuICAgICAgICAgICgpID0+IHRoaXMucG9zZU1hdHRlcnBvcnQsXHJcbiAgICAgICAgICAoKSA9PiB0aGlzLnBvc2VDYW1lcmFcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBMb2FkIE1hdHRlcnRhZyBpY29ucyBhbmQgY3VzdG9tIHN1YnNjcmlwdGlvbnNcclxuICAgICAgICBzd2l0Y2ggKG1vZHVsZSkge1xyXG4gICAgICAgICAgY2FzZSBTcE1vZHVsZS5JTU1POlxyXG4gICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgJ2ljb24tdGlja2V0JyxcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl90aWNrZXRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICdpY29uLWVxdWlwbWVudCcsXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fZXF1aXBtZW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAnaWNvbi1tZWFzdXJlJyxcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9tZWFzdXJlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAnaWNvbi1kYXRhJyxcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9kYXRhXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAnaWNvbi1vYmplY3QzZCcsXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fb2JqZWN0M2RcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLk1lYXN1cmVtZW50cy5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgb25BZGRlZDogZnVuY3Rpb24gKFxyXG4gICAgICAgICAgICAgICAgaW5kZXg6IGFueSxcclxuICAgICAgICAgICAgICAgIGl0ZW06IHsgcG9pbnRzOiBhbnkgfSxcclxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IGFueVxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWFzdXJlbWVudFNlcnZpY2Uuc2V0TGFzdE1lYXN1cmUoaXRlbS5wb2ludHMpO1xyXG4gICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiAoY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGhlIGVudGlyZSB1cC10by1kYXRlIGNvbGxlY3Rpb24nLCBjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVhc3VyZW1lbnRTZXJ2aWNlLmdldERpc3RhbmNlRm9yTGFzdE1lYXN1cmVtZW50KHRoaXMuc2RrLCB0aGlzLmN1cnJlbnRTcGFjZUlEKTtcclxuICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMubW9kZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKG1lYXN1cmVtZW50TW9kZVN0YXRlOiB7IGFjdGl2ZTogYW55IH0pIHtcclxuICAgICAgICAgICAgICAgIC8vIG1lYXN1cmVtZW50IG1vZGUgc3RhdGUgaGFzIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNNZWFzdXJlTW9kZU9uID0gbWVhc3VyZW1lbnRNb2RlU3RhdGUuYWN0aXZlO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0lzIG1lYXN1cmVtZW50IG1vZGUgY3VycmVudGx5IGFjdGl2ZT8gJywgbWVhc3VyZW1lbnRNb2RlU3RhdGUuYWN0aXZlKTtcclxuICAgICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFNwTW9kdWxlLk1VU0VVTTpcclxuICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICdpY29uLWRhdGEnLFxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX2RhdGFcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICBjYXNlIFNwTW9kdWxlLkhPVEVMOlxyXG4gICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgJ2ljb25fcm9vbV9hdmFpbGFibGUnLFxyXG4gICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAnaWNvbl9yb29tX3VuYXZhaWxhYmxlJyxcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX3VuYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAnaWNvbl9yb29tX2Nob3NlbicsXHJcbiAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcm9vbV9jaG9zZW5cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICdpY29uX3Jvb21fdmlld2VkJyxcclxuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX3ZpZXdlZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgJ2ljb24tcG9zaXRpb24nLFxyXG4gICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcG9zaXRpb25cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBDdXJyZW50IFJvb20gKHVzZWQgZm9yIGdldHRpbmcgYm91bmRpbmcgYm94IGFuZCBldmVudHVhbGx5IGxhenkgbG9hZCBtYXR0ZXJ0YWcgb3Igb2JqZWN0M0QgaW5zaWRlIGN1cnJlbnQgUm9vbSlcclxuICAgICAgICB0aGlzLnNkay5Sb29tLmN1cnJlbnQuc3Vic2NyaWJlKChjdXJyZW50Um9vbSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgcm9vbXMgPSBBcnJheS5pc0FycmF5KGN1cnJlbnRSb29tKSA/IGN1cnJlbnRSb29tIDogKGN1cnJlbnRSb29tID8gW2N1cnJlbnRSb29tXSA6IFtdKTtcclxuICAgICAgICAgIHRoaXMuY3VycmVudFJvb21zID0gcm9vbXM7XHJcbiAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLm9uUm9vbUNoYW5nZWQubmV4dChyb29tcyk7XHJcbiAgICAgICAgICAvLyBSZWZyZXNoIHRhZyB2aXNpYmlsaXR5IHdoZW5ldmVyIHRoZSByb29tIGNvbnRleHQgY2hhbmdlc1xyXG4gICAgICAgICAgdGhpcy5yZWZyZXNoVGFnc1Zpc2liaWxpdHkoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gM0QgcG9zaXRpb24ncyBwb2ludGVyXHJcbiAgICAgICAgdGhpcy5zZGsuUG9pbnRlci5pbnRlcnNlY3Rpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICAgZnVuY3Rpb24gKGludGVyc2VjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQgPSBpbnRlcnNlY3Rpb247XHJcbiAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICAgICAgejogMCxcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGlvbk1vZGUgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUICYmIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpIHtcclxuICAgICAgICAgICAgICAvLyBmb2xsb3cgdGhlIHBvaW50ZXIgYW5kIGNoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHRhZ1xyXG4gICAgICAgICAgICAgIC8vICh3ZSBhcmUgYWJvdXQgdG8gdmFsaWRhdGUsIGJ1dCBpdCBleGlzdHMgaW4gc2RrIGFscmVhZHkpXHJcbiAgICAgICAgICAgICAgdGhpcy5lbmFibGVfZm9sbG93aW5nX3RhZyh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMucG9pbnRlclNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJTZXJ2aWNlLnNldEN1cnNvclBvc2l0aW9uQnV0dG9uRGlzcGxheWVkKGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy9DYW1lcmEgbW9kZVxyXG4gICAgICAgIHRoaXMuc2RrLk1vZGUuY3VycmVudC5zdWJzY3JpYmUoKG1vZGUpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLmNhbWVyYU1vZGUgIT09IG1vZGUpIHtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5zZXRDYW1lcmFNb2RlKG1vZGUpO1xyXG4gICAgICAgICAgICAvLyBSZWZyZXNoIHRhZyB2aXNpYmlsaXR5IG9uIGV2ZXJ5IG1vZGUgY2hhbmdlIChJTlNJREUgdnMgRE9MTEhPVVNFIHZzIEZMT09SUExBTilcclxuICAgICAgICAgICAgdGhpcy5yZWZyZXNoVGFnc1Zpc2liaWxpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5jYW1lcmFNb2RlID0gbW9kZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZGsgJiYgdGhpcy5wb3NlQ2FtZXJhKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UudXBkYXRlVGFnc1Zpc2liaWxpdHlGb3JDb250ZXh0KFxyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLFxyXG4gICAgICAgICAgICAgIHRoaXMuc3dlZXBDb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3VycmVudENhbWVyYU1vZGUsXHJcbiAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyxcclxuICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRGbG9vclNlcXVlbmNlLFxyXG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3VycmVudFJvb21zXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcblxyXG4gICAgICAgIC8vIHN1YnNjcmliZSB0byBzd2VlcHNcclxuICAgICAgICB0aGlzLnNkay5Td2VlcC5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiBzdWJzY3IoY29sbGVjdGlvbjoge30pIHtcclxuICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5zd2VlcENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICAvLyBSZWJ1aWxkIHNpZCDihpQgdXVpZCBtYXBzIHdoZW5ldmVyIHRoZSBjb2xsZWN0aW9uIHVwZGF0ZXNcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5idWlsZFN3ZWVwSWRNYXBzKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBzdWJzY3JpYmUgdG8gY3VycmVudCBzd2VlcCDigJMgZW1pdCB1dWlkIChEQiBmb3JtYXQpIGluc3RlYWQgb2YgcmF3IHNpZFxyXG4gICAgICAgIHRoaXMuc2RrLlN3ZWVwLmN1cnJlbnQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgZnVuY3Rpb24gc3Vic2NyKGN1cnJlbnRTd2VlcDogeyBzaWQ6IHN0cmluZyB9KSB7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3dlZXAuc2lkID09PSAnJykgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB1dWlkID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5yZXNvbHZlU3dlZXBVdWlkKGN1cnJlbnRTd2VlcC5zaWQpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRTd2VlcC5uZXh0KHV1aWQpO1xyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gU3Vic2NyaWJlIHRvIEZsb29yIGRhdGFcclxuICAgICAgICB0aGlzLnNkay5GbG9vci5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQodGhpczogYW55LCBjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBTdWJzY3JpYmUgdG8gY3VycmVudCBmbG9vciDigJMgYXV0aG9yaXRhdGl2ZSBzb3VyY2UgZm9yIG11bHRpLWZsb29yIGZpbHRlcmluZ1xyXG4gICAgICAgIHRoaXMuc2RrLkZsb29yLmN1cnJlbnQuc3Vic2NyaWJlKChjdXJyZW50Rmxvb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgc2VxID0gY3VycmVudEZsb29yPy5zZXF1ZW5jZSA/PyBudWxsO1xyXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Rmxvb3JTZXF1ZW5jZSA9IHNlcTtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnW0Zsb29yLmN1cnJlbnRdIHNlcXVlbmNlID0nLCBzZXEsICd8IGZ1bGwgPScsIGN1cnJlbnRGbG9vcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnJlZnJlc2hUYWdzVmlzaWJpbGl0eSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBHZW5lcmljIGhhbmRsZXIgZm9yIHRhZyBzZWxlY3Rpb24gZXZlbnRzXHJcbiAgICAgICAgY29uc3QgaGFuZGxlVGFnU2VsZWN0aW9uID0gYXN5bmMgKHNpZDogc3RyaW5nLCBzb3VyY2U6IHN0cmluZywgZXZ0PzogYW55KSA9PiB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHNpZCk7XHJcbiAgICAgICAgICAgIGlmICghbWF0dGVydGFnRGF0YSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0YWdTZXJ2aWNlLmdldFVybEZvclNlZURldGFpbHMoXHJcbiAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKSxcclxuICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAodXJsICE9PSAnJykge1xyXG4gICAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdDYW5ub3Qgc2hvdyBkZXRhaWxzIGZvciB0YWcnLCBlcnJvcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gRGlzYWJsZSBuYXRpdmUgTWF0dGVycG9ydCBhY3Rpb25zXHJcbiAgICAgICAgY29uc3QgZGlzYWJsZU5hdGl2ZUFjdGlvbnMgPSAoc2lkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmICghdGhpcy5zZGsgfHwgc2lkID09PSB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KSByZXR1cm47IC8vIGlnbm9yZSB3aGVuIHdlIGFyZSBpbiBwb3NpdGlvbmluZyBtb2RlXHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZGsuVGFnPy5hbGxvd0FjdGlvbikge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLlRhZy5hbGxvd0FjdGlvbihzaWQsIHsgb3BlbmluZzogdHJ1ZSwgbmF2aWdhdGluZzogdHJ1ZSwgZG9ja2luZzogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xyXG4gICAgICAgICAgICAvLyBzaWxlbnRseSBpZ25vcmUgYWxyZWFkeSByZW1vdmVkIHRhZ3NcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmICFlPy5tZXNzYWdlPy5pbmNsdWRlcygnbm90IGZvdW5kJykpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ01hdHRlcnBvcnRTZXJ2aWNlOiBFcnJvciBkaXNhYmxpbmcgYWN0aW9ucyBmb3InLCBzaWQsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGFwcGxpY2F0aW9uIHRvIHJlYWNoIFBMQVlJTkcgcGhhc2VcclxuICAgICAgICBpZiAodGhpcy5zZGsuQXBwICYmIHRoaXMuc2RrLkFwcC5zdGF0ZSkge1xyXG4gICAgICAgICAgdGhpcy5zZGsuQXBwLnN0YXRlLndhaXRVbnRpbCgoczogYW55KSA9PiBzLnBoYXNlID09PSB0aGlzLnNkay5BcHAuUGhhc2UuUExBWUlORykudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkNhbWVyYS5wb3NlLnN1YnNjcmliZSgocG9zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb3NlQ2FtZXJhID0gcG9zZTtcclxuICAgICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLnVwZGF0ZVRhZ3NWaXNpYmlsaXR5Rm9yQ29udGV4dChcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zd2VlcENvbGxlY3Rpb24sXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRDYW1lcmFNb2RlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyxcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3VycmVudEZsb29yU2VxdWVuY2UsXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRSb29tc1xyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS51cGRhdGVUYWdzVmlzaWJpbGl0eUZvckNvbnRleHQoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkayxcclxuICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBDb2xsZWN0aW9uLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Q2FtZXJhTW9kZSxcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3csXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRGbG9vclNlcXVlbmNlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Um9vbXNcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9LCAxNTAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVyYWN0aW9uTW9kZSA9PT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQpIHtcclxuICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KHRoaXMuc2RrKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2RrLlRhZyAmJiB0aGlzLnNkay5UYWcuZGF0YSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLlRhZy5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBvbkFkZGVkOiAoc2lkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgZGlzYWJsZU5hdGl2ZUFjdGlvbnMoc2lkKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBvblVwZGF0ZWQ6IChzaWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlTmF0aXZlQWN0aW9ucyhzaWQpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IChjb2xsZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY29sbGVjdGlvbikuZm9yRWFjaCgoc2lkKSA9PiBkaXNhYmxlTmF0aXZlQWN0aW9ucyhzaWQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBGYWxsYmFjayBwb3VyIGwnw6l2w6luZW1lbnQgZ2xvYmFsIHRhZy5jbGlja1xyXG4gICAgICAgIHRoaXMuc2RrLm9uKCd0YWcuY2xpY2snLCAoc2lkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgW01hdHRlcnBvcnRTZXJ2aWNlXSBzZGsub24oJ3RhZy5jbGljaycpIHJlY2VpdmVkIGZvciBzaWQ6ICR7c2lkfWApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaGFuZGxlVGFnU2VsZWN0aW9uKHNpZCwgJ2dsb2JhbC50YWcuY2xpY2snKTtcclxuICAgICAgICAgIGRpc2FibGVOYXRpdmVBY3Rpb25zKHNpZCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gUG9pbnRlciB0cmlja1xyXG4gICAgICAgIC8vIENyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgYXBwZWFyIHdoZW4gdGhlIGN1cnNvciBpcyBzdGlsbFxyXG4gICAgICAgIC8vIEl0IHdpbGwgaW50ZXJjZXB0IHRoZSBjbGljayBvZiB0aGUgbW91c2UgYmVmb3JlIGl0IHRyaWdlcnJpbmcgdGhlIE1hdHRlcnBvcnQncyB0b3VyIG5hdmlnYXRpb25cclxuICAgICAgICB0aGlzLnBvaW50ZXJTZXJ2aWNlLnN0YXJ0UG9pbnRlclRyaWNrKFxyXG4gICAgICAgICAgdGhpcy5zZGssXHJcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lcixcclxuICAgICAgICAgICgpID0+IHRoaXMucG9zZU1hdHRlcnBvcnQsXHJcbiAgICAgICAgICAoKSA9PiB0aGlzLnBvc2VDYW1lcmEsXHJcbiAgICAgICAgICAoKSA9PiB0aGlzLmludGVyYWN0aW9uTW9kZSxcclxuICAgICAgICAgICgpID0+IHRoaXMubWF0dGVydGFnVG9Gb2xsb3dcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvKipcclxuICAgICAgICAqIFRyYW5zaXRpb25zXHJcbiAgICAgICAgKi9cclxuICAgICAgICB0aGlzLnNkay5vbihcclxuICAgICAgICAgICd2aWV3bW9kZS5jaGFuZ2VzdGFydCcsXHJcbiAgICAgICAgICBmdW5jdGlvbiAodG8sIGZyb20pIHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnU3RhcnRpbmcgdG8gbW92ZSB0byAnICsgdG8gKyAnIGZyb20gJyArIGZyb20pO1xyXG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmluVHJhbnNpdGlvbk1vZGUgPSB0cnVlO1xyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNkay5vbihcclxuICAgICAgICAgICd2aWV3bW9kZS5jaGFuZ2VlbmQnLFxyXG4gICAgICAgICAgZnVuY3Rpb24gKG9sZE1vZGUsIG5ld01vZGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnRW5kZWQgdG8gbW92ZSB0byAnICsgbmV3TW9kZSArICcgZnJvbSAnICsgb2xkTW9kZSk7XHJcbiAgICAgICAgICAgIGlmIChuZXdNb2RlICE9PSAnbW9kZS50cmFuc2l0aW9uaW5nJykge1xyXG4gICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaW5UcmFuc2l0aW9uTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2RrLm9uKFxyXG4gICAgICAgICAgdGhpcy5zZGsuU3dlZXAuRXZlbnQuRU5URVIsXHJcbiAgICAgICAgICBmdW5jdGlvbiAob2xkU3dlZXAsIG5ld1N3ZWVwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ0xlYXZpbmcgc3dlZXAgJyArIG9sZFN3ZWVwKTtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnRW50ZXJpbmcgc3dlZXAgJyArIG5ld1N3ZWVwKTtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlBemltdXRhbENyb3duKCk7XHJcbiAgICAgICAgICAgIC8vIFJlZnJlc2ggb24gc3dlZXAgaXMgcmVtb3ZlZCBiZWNhdXNlIHdlIG9ubHkgdXBkYXRlIG9uIHJvb20gb3IgZmxvb3IgY2hhbmdlcyBub3cuXHJcbiAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2RrLm9uKFxyXG4gICAgICAgICAgdGhpcy5zZGsuU3dlZXAuRXZlbnQuRVhJVCxcclxuICAgICAgICAgIGZ1bmN0aW9uIChmcm9tU3dlZXAsIHRvU3dlZXApIHtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnTGVhdmluZyBzd2VlcCAnICsgZnJvbVN3ZWVwKTtcclxuICAgICAgICAgICAgY29uc29sZS5kZWJ1ZygnVHJhbnNpdGlvbmluZyB0byBzd2VlcCAnICsgdG9Td2VlcCk7XHJcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuaW5UcmFuc2l0aW9uU3dlZXAgPSB0cnVlO1xyXG4gICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmluaXQzRE9iamVjdFZpZXdlcigpO1xyXG5cclxuICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG5hdmlnYXRpb25TZXJ2aWNlLnJlc29sdmVTd2VlcFV1aWQoKSBpbnN0ZWFkLlxyXG4gICAqIEtlcHQgdGVtcG9yYXJpbHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxyXG4gICAqL1xyXG4gIGdldFN3ZWVwVVVJREZvclNpZChzaWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UucmVzb2x2ZVN3ZWVwVXVpZChzaWQpICE9PSBzaWRcclxuICAgICAgPyB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJlc29sdmVTd2VlcFV1aWQoc2lkKVxyXG4gICAgICA6IG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXRMaWdodGluZ09mZigpIHtcclxuICAgIHRoaXMubm9MaWdodEZvck9iamVjdHMgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlzdGFuY2VGb3JMYXN0TWVhc3VyZW1lbnQoKSB7XHJcbiAgICB0aGlzLm1lYXN1cmVtZW50U2VydmljZS5nZXREaXN0YW5jZUZvckxhc3RNZWFzdXJlbWVudCh0aGlzLnNkaywgdGhpcy5jdXJyZW50U3BhY2VJRCk7XHJcbiAgfVxyXG5cclxuICBnZXRMYXN0RGlzdGFuY2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubWVhc3VyZW1lbnRTZXJ2aWNlLmdldExhc3REaXN0YW5jZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRha2VzIHNjcmVlbnNob3QgYW5kIHNhdmVzIGJhc2U2NCBpbiBsYXN0U2NyZWVuc2hvdFVyaVxyXG4gICAqIEByZXR1cm5zIFByb21pc2VcclxuICAgKi9cclxuICB0YWtlU2NyZWVuU2hvdCgpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWVhc3VyZW1lbnRTZXJ2aWNlLnRha2VTY3JlZW5TaG90KHRoaXMuc2RrKTtcclxuICB9XHJcblxyXG4gIGdldFNjcmVlblNob3RVcmkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZWFzdXJlbWVudFNlcnZpY2UuZ2V0U2NyZWVuU2hvdFVyaSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGFzdE1lYXN1cmVtZW50KCk6IE9iamVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy5tZWFzdXJlbWVudFNlcnZpY2UuZ2V0TGFzdE1lYXN1cmVtZW50KHRoaXMucG9zZUNhbWVyYSk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gVXRpbHMgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgcHJpdmF0ZSBnZXRGbG9vcklkRm9yVGFnKG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLmdldEZsb29ySWRGb3JUYWcobWF0dGVydGFnRGF0YSwgdGhpcy5zd2VlcENvbGxlY3Rpb24pO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTdHlsaW5nIG9mIHBvaW50ZXJcclxuICAgKi9cclxuICB1cGRhdGVQb2ludGVyVHJpY2soKSB7XHJcbiAgICB0aGlzLnBvaW50ZXJTZXJ2aWNlLnVwZGF0ZVBvaW50ZXJUcmljayh0aGlzLnNkaywgdGhpcy5jb250YWluZXIsIHRoaXMucG9zZU1hdHRlcnBvcnQsIHRoaXMucG9zZUNhbWVyYSwgdGhpcy5pbnRlcmFjdGlvbk1vZGUsIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVHJpZ2dlcnMgYSB0YWcgdmlzaWJpbGl0eSByZWZyZXNoIGJhc2VkIG9uIGN1cnJlbnQgY2FtZXJhIG1vZGUsIGZsb29yIGFuZCBzd2VlcC5cclxuICAgKiBEZWxlZ2F0ZXMgYWxsIGxvZ2ljIHRvIE1hdHRlcnBvcnRUYWdTZXJ2aWNlLnVwZGF0ZVRhZ3NWaXNpYmlsaXR5Rm9yQ29udGV4dCgpLlxyXG4gICAqIENhbGxlZCBhdXRvbWF0aWNhbGx5IG9uIE1vZGUsIFN3ZWVwLCBGbG9vciBhbmQgUm9vbSBjaGFuZ2VzLlxyXG4gICAqL1xyXG4gIHB1YmxpYyByZWZyZXNoVGFnc1Zpc2liaWxpdHkoKTogdm9pZCB7XHJcbiAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpICYmIHRoaXMuc3dlZXBDb2xsZWN0aW9uICYmIHRoaXMucG9zZUNhbWVyYT8uc3dlZXApIHtcclxuICAgICAgICBjb25zdCBzd2VlcERhdGEgPSB0aGlzLnN3ZWVwQ29sbGVjdGlvblt0aGlzLnBvc2VDYW1lcmEuc3dlZXBdO1xyXG4gICAgICAgIGNvbnNvbGUuZGVidWcoJ1tyZWZyZXNoVGFnc1Zpc2liaWxpdHldIHN3ZWVwRGF0YSBmb3IgY3VycmVudCBzd2VlcDonLCBKU09OLnN0cmluZ2lmeShzd2VlcERhdGEpKTtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKCdbcmVmcmVzaFRhZ3NWaXNpYmlsaXR5XSBjdXJyZW50Rmxvb3JTZXF1ZW5jZTonLCB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRGbG9vclNlcXVlbmNlKTtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKCdbcmVmcmVzaFRhZ3NWaXNpYmlsaXR5XSBjdXJyZW50Q2FtZXJhTW9kZTonLCB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLnVwZGF0ZVRhZ3NWaXNpYmlsaXR5Rm9yQ29udGV4dChcclxuICAgICAgICB0aGlzLnNkayxcclxuICAgICAgICB0aGlzLnN3ZWVwQ29sbGVjdGlvbixcclxuICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlLFxyXG4gICAgICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3csXHJcbiAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5jdXJyZW50Rmxvb3JTZXF1ZW5jZSxcclxuICAgICAgICB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmN1cnJlbnRSb29tc1xyXG4gICAgICApLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oJ1tNYXR0ZXJwb3J0U2VydmljZV0gcmVmcmVzaFRhZ3NWaXNpYmlsaXR5IGVycm9yJywgZXJyKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlYWx0aW1lIG1hdHRlcnRhZyBmb2xsb3dpbmcgdGhlIGN1cnNvclxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWcgc3RyaW5nXHJcbiAgICovXHJcbiAgZW5hYmxlX2ZvbGxvd2luZ190YWcobWF0dGVydGFnOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IE9GRlNFVCA9IDAuMDAwMTsgLy8gcXVhc2ktaW52aXNpYmxlIG1haXMgc3VmZml0IMOgIMOpdml0ZXIgbCdpbnRlcmNlcHRpb25cclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0UG9zaXRpb24obWF0dGVydGFnLCB7XHJcbiAgICAgIGFuY2hvclBvc2l0aW9uOiB7XHJcbiAgICAgICAgeDogdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbi54ICsgT0ZGU0VULFxyXG4gICAgICAgIHk6IHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24ueSxcclxuICAgICAgICB6OiB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLnogKyBPRkZTRVQsXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0ZW1WZWN0b3I6IHtcclxuICAgICAgICB4OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC54ICogMC4zLFxyXG4gICAgICAgIHk6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnkgKiAwLjMsXHJcbiAgICAgICAgejogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueiAqIDAuMyxcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGRpc3RhbmNlIGJldHd3ZWVuIHR3byAzRCBwb3NpdGlvbnNcclxuICAgKiBVc2VkIGluIG9yZGVyIHRvIHNlZSBob3cgbXVjaCB0aGUgY3Vyc29yIGhhcyBtb3ZlZCBmcm9tIHRoZSBwcmV2aW91cyBwb3NpdGlvblxyXG4gICAqIEBwYXJhbSBwb3MxXHJcbiAgICogQHBhcmFtIHBvczJcclxuICAgKi9cclxuICBnZXREaXN0UG9zaXRpb24ocG9zMTogYW55LCBwb3MyOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLnBvaW50ZXJTZXJ2aWNlLmdldERpc3RQb3NpdGlvbih0aGlzLnNkaywgdGhpcy5jb250YWluZXIsIHRoaXMucG9zZUNhbWVyYSwgcG9zMSwgcG9zMik7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gTWF0dGVydGFnIHJlbGF0ZWQgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLyoqIENyZWF0ZXMgYSB0ZW1wb3JhcnkgTWF0dGVydGFnIHRoYXQgZm9sbG93cyB0aGUgdXNlcidzIGN1cnNvciBmb3IgcG9zaXRpb25pbmcuICovXHJcbiAgYXN5bmMgYWRkQ3Vyc29yTWF0dGVydGFnKG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEpIHtcclxuICAgIGlmICghdGhpcy5wb3NlTWF0dGVycG9ydCkgcmV0dXJuO1xyXG4gICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyA9IGF3YWl0IHRoaXMuYWRkTWF0dGVydGFnVG9WaWV3ZXIobWF0dGVydGFnRGF0YSk7XHJcbiAgICBhd2FpdCB3YWl0KDUwKTtcclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0SWNvbih0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LCAnaWNvbi1wb3NpdGlvbicpO1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRPcGFjaXR5KHRoaXMubWF0dGVydGFnVG9Gb2xsb3csIDEpO1xyXG5cclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0UG9zaXRpb24odGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdywge1xyXG4gICAgICBhbmNob3JQb3NpdGlvbjogeyAuLi50aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uIH0sXHJcbiAgICAgIHN0ZW1WZWN0b3I6IHtcclxuICAgICAgICB4OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC54ICogMC4zLFxyXG4gICAgICAgIHk6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnkgKiAwLjMsXHJcbiAgICAgICAgejogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueiAqIDAuMyxcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5zZGsuVGFnLmFsbG93QWN0aW9uKHRoaXMubWF0dGVydGFnVG9Gb2xsb3csIHtcclxuICAgICAgICBvcGVuaW5nOiB0cnVlLFxyXG4gICAgICAgIG5hdmlnYXRpbmc6IGZhbHNlLFxyXG4gICAgICAgIGRvY2tpbmc6IGZhbHNlXHJcbiAgICAgIH0pO1xyXG4gICAgfSBjYXRjaCAoZSkgeyB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHRhZ0FkZFF1ZXVlKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS50YWdBZGRRdWV1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgdGFnQWRkUXVldWUodmFsdWU6IFByb21pc2U8YW55Pikge1xyXG4gICAgdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS50YWdBZGRRdWV1ZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkTWF0dGVydGFnVG9WaWV3ZXIobWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UuYWRkTWF0dGVydGFnVG9WaWV3ZXIodGhpcy5zZGssIG1hdHRlcnRhZ0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFRyaWdnZXJzIGNhbGxiYWNrIGFjdGlvbnMgYWZ0ZXIgYSB0YWcncyBwb3NpdGlvbiBpcyB2YWxpZGF0ZWQgYnkgYSBsZWZ0IGNsaWNrLiAqL1xyXG4gIG9uVmFsaWRhdGVkTWF0dGVydGFnKCkge1xyXG4gICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQpO1xyXG4gICAgY29uc3QgbGFzdFRhZyA9IHRoaXMuZ2V0TGFzdFRhZygpO1xyXG4gICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgY29uc3QgY2FsbGJhY2tNb2RlID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3NcclxuICAgICAgICAuZ2V0KGxhc3RUYWcpXHJcbiAgICAgICAgLmdldENhbGxiYWNrQWN0aW9uTW9kZSgpO1xyXG4gICAgICB0aGlzLmNhbGxiYWNrQWZ0ZXJNYXR0ZXJ0YWdWYWxpZGF0aW9uKGNhbGxiYWNrTW9kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogUmVnaXN0ZXJzIGEgbmV3IGljb24gdGV4dHVyZSBhbmQgYXBwbGllcyBpdCB0byBhIHNwZWNpZmljIE1hdHRlcnRhZy4gKi9cclxuICBhc3luYyBhZGROZXdJY29uQW5kU2V0Rm9yVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcsIGljb25QYXRoOiBzdHJpbmcpIHtcclxuICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UuYWRkTmV3SWNvbkFuZFNldEZvclRhZyhcclxuICAgICAgdGhpcy5zZGssXHJcbiAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICBpY29uUGF0aCxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIDFcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKiogQXBwbGllcyBhIHByZS1yZWdpc3RlcmVkIGljb24gdG8gYSBNYXR0ZXJ0YWcuICovXHJcbiAgYXN5bmMgc2V0UmVnaXN0cmVkSWNvbkZvclRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nLCBpY29uTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBlZGl0IGljb24nLCBpY29uTmFtZSwgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogU2V0cyB0aGUgYXBwcm9wcmlhdGUgaWNvbiBhbmQgb3BhY2l0eSBmb3IgYSB0YWcgYmFzZWQgb24gaXRzIHR5cGUgYW5kIFBPSSBtZXRhZGF0YS4gKi9cclxuICBhc3luYyBzZXRUYWdJY29uQW5kT3BhY2l0eShcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5TUE1vZHVsZSA9PT0gU3BNb2R1bGUuSE9URUwpIHtcclxuICAgICAgY29uc3Qgcm9vbSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgIGxldCBpY29uTmFtZSA9IGBpY29uX3Jvb21gO1xyXG4gICAgICBpZiAocm9vbS5hdmFpbGFibGUpIHtcclxuICAgICAgICBpY29uTmFtZSA9IGAke2ljb25OYW1lfV9hdmFpbGFibGVgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGljb25OYW1lID0gYCR7aWNvbk5hbWV9X3VuYXZhaWxhYmxlYDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RyaW5nVGFnVHlwZSA9IHBvaVR5cGVUb1N0cmluZyhtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSk7XHJcbiAgICBsZXQgb3BhY2l0eSA9IHRoaXMuY29uZmlnLm15X2NvbmZpZy5ERUZBVUxUX09QQUNJVFlfVEFHO1xyXG4gICAgbGV0IGljb25OYW1lID0gYGljb24tJHtzdHJpbmdUYWdUeXBlfWA7XHJcbiAgICBjb25zdCBwb2kgPSBtYXR0ZXJ0YWdEYXRhLmdldFBvaSgpO1xyXG4gICAgaWYgKHBvaSAmJiBwb2kudGFnSWNvbikge1xyXG4gICAgICBjb25zdCB0YWdJY29uID0gSlNPTi5wYXJzZShwb2kudGFnSWNvbik7XHJcbiAgICAgIGlmIChtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSA9PT0gUG9pVHlwZS5EQVRBKSB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgICAgaWYgKGZlYXR1cmUudHlwZSA9PT0gRmVhdHVyZVR5cGUuSU5ESUNBVE9SX1RFTVApIHtcclxuICAgICAgICAgIHRhZ0ljb24uc3JjID0gdGhpcy50YWdTZXJ2aWNlLmdldEljb25UYWdJbWFnZUZvckZlYXR1cmUoZmVhdHVyZSwgcG9pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhZ0ljb24uc3JjKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aFNpZ25lZCA9IGF3YWl0IHRoaXMudGFnU2VydmljZS5nZXRTaWduZWRUYWdJY29uU291cmNlKFxyXG4gICAgICAgICAgdGFnSWNvbi5zcmNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwYXRoU2lnbmVkKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpY29uTmFtZSA9IGBpY29uLSR7c3RyaW5nVGFnVHlwZX0tJHttYXR0ZXJ0YWdJRH0tJHttYXR0ZXJ0YWdEYXRhLmN1c3RvbUljb25JbmRleH1gO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoaWNvbk5hbWUsIHBhdGhTaWduZWQpO1xyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmN1c3RvbUljb25JbmRleCArPSAxO1xyXG4gICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciByZWdpc3Rlckljb24nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhZ0ljb24ub3BhY2l0eSkge1xyXG4gICAgICAgIG9wYWNpdHkgPSB0YWdJY29uLm9wYWNpdHk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2RrLlRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGVkaXRJY29uIG9yIG9wYWNpdHknLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogTmF2aWdhdGVzIHRoZSBjYW1lcmEgdG8gdGhlIG1vc3QgcmVjZW50bHkgY3JlYXRlZCB0YWcuICovXHJcbiAgYXN5bmMgZ29Ub0xhc3RUYWcoKSB7XHJcbiAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLmdvVG9MYXN0VGFnKHRoaXMuc2RrKTtcclxuICB9XHJcblxyXG4gIC8qKiBOYXZpZ2F0ZXMgdGhlIGNhbWVyYSB0byBhIHNwZWNpZmljIE1hdHRlcnRhZyBieSBpdHMgSUQuICovXHJcbiAgYXN5bmMgZ29Ub1RhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nKSB7XHJcbiAgICBpZiAoIW1hdHRlcnRhZ0lELyogfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCovKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMub25Hb1RvVGFnLm5leHQobWF0dGVydGFnSUQpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5jdXJyZW50LndhaXRVbnRpbChcclxuICAgICAgICAoY3VycmVudFN3ZWVwKSA9PiBjdXJyZW50U3dlZXAgIT09ICcnXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IG10RGF0YSA9IHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgIGlmIChtdERhdGEpIHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IG10RGF0YS5nZXRQb3NpdGlvbigpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2RrLkNhbWVyYS5sb29rQXQocG9zaXRpb24sIHtcclxuICAgICAgICAgIHRyYW5zaXRpb246IHRoaXMuc2RrLkNhbWVyYS5UcmFuc2l0aW9uVHlwZS5GTFlcclxuICAgICAgICB9KTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5UYWcub3BlbihtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gRmFsbGJhY2sgZm9yIGNhc2VzIHdoZXJlIHdlIGRvbid0IGhhdmUgbG9jYWwgZGF0YSB5ZXRcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5UYWcub3BlbihtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkgY29uc29sZS53YXJuKCdDYW5ub3QgbmF2aWdhdGUgdG8gdGFnJywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICAqIENvbXB1dGVzIHRoZSBjb250ZXh0LWF3YXJlIG9wYWNpdHkgZm9yIGEgc2luZ2xlIHRhZyBhdCB0aGUgbW9tZW50IGl0IGlzIHJlbmRlcmVkLlxyXG4gICAgKiAtIEN1cnNvciB0YWc6IGFsd2F5cyB1c2UgcHJvdmlkZWQgZGVmYXVsdE9wYWNpdHkuXHJcbiAgICAqIC0gRE9MTEhPVVNFIC8gRkxPT1JQTEFOOiAwIChoaWRkZW4pLlxyXG4gICAgKiAtIElOU0lERTogZmxvb3ItZmlsdGVyZWQgcHJveGltaXR5IG9wYWNpdHkgdmlhIE1hdHRlcnBvcnRUYWdTZXJ2aWNlLlxyXG4gICAgKiAtIE90aGVyIC8gdW5rbm93bjogZGVmYXVsdE9wYWNpdHkuXHJcbiAgICAqL1xyXG4gIC8qcHJpdmF0ZSBfY29tcHV0ZUNvbnRleHRPcGFjaXR5Rm9yVGFnKFxyXG4gICAgbWF0dGVydGFnSUQ6IHN0cmluZyxcclxuICAgIG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEsXHJcbiAgICBkZWZhdWx0T3BhY2l0eTogbnVtYmVyXHJcbiAgKTogbnVtYmVyIHtcclxuICAgIGlmIChtYXR0ZXJ0YWdJRCA9PT0gdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdykge1xyXG4gICAgICByZXR1cm4gZGVmYXVsdE9wYWNpdHk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5jb21wdXRlU2luZ2xlVGFnQ29udGV4dE9wYWNpdHkoXHJcbiAgICAgIG1hdHRlcnRhZ0RhdGEsXHJcbiAgICAgIHRoaXMucG9zZUNhbWVyYSxcclxuICAgICAgdGhpcy5zd2VlcENvbGxlY3Rpb24sXHJcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3VycmVudEZsb29yU2VxdWVuY2UsXHJcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuY3VycmVudFJvb21zXHJcbiAgICApO1xyXG4gIH0qL1xyXG5cclxuICBwcml2YXRlIGFkZEN1c3RvbUNzcygpOiB2b2lkIHtcclxuICAgIGNvbnN0IGNzcyA9IGBcclxuICAgICAgLmZvb3Rlci11aSxcclxuICAgICAgLnNob3djYXNlLWZvb3RlcixcclxuICAgICAgLm1wLW5vdmEtYnRuLWdyb3VwLFxyXG4gICAgICAuZm9vdGVyLWRpdmlkZXIsXHJcbiAgICAgIC5sb2dvLWxpbmssXHJcbiAgICAgIC5mb290ZXItbG9nbyxcclxuICAgICAgLmJvdHRvbS11aSxcclxuICAgICAgW2RhdGEtdGVzdGlkPVwic2hvd2Nhc2UtZm9vdGVyXCJdIHtcclxuICAgICAgICBvcGFjaXR5OiAwICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmUgIWltcG9ydGFudDtcclxuICAgICAgfVxyXG4gICAgYDtcclxuXHJcbiAgICAvLyAxc3QgbWV0aG9kOiBWaWEgU2NlbmUgU0RLXHJcbiAgICBpZiAodGhpcy5zZGs/LlNjZW5lPy5hZGRTdHlsZSkge1xyXG4gICAgICB0aGlzLnNkay5TY2VuZS5hZGRTdHlsZShjc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDJuZCBtZXRob2Q6IERpcmVjdCBpbmplY3Rpb24gaW4gaUZyYW1lIERPTSAoRmFsbGJhY2spXHJcbiAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdmlld2VyLW1vZHVsZScpIGFzIEhUTUxJRnJhbWVFbGVtZW50O1xyXG4gICAgaWYgKGlmcmFtZT8uY29udGVudFdpbmRvdz8uZG9jdW1lbnQpIHtcclxuICAgICAgY29uc3Qgc3R5bGUgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xyXG4gICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGNzcztcclxuICAgICAgaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGNvbnRlbnQgb2YgTWF0dGVydGFnIHdpdGggbWF0dGVydGFnSUQgKGJpbGxib2FyZCwgaW5qZWN0ZWQgaHRtbCwgdGFnIGljb24pXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyB1cGRhdGVNYXR0ZXJUYWdDb250ZW50Rm9yVGFnSUQoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUgPSBudWxsLFxyXG4gICAgdGFnVHlwZTogUG9pVHlwZSA9IG51bGxcclxuICApIHtcclxuICAgIGlmICh0aGlzLnNkaykge1xyXG4gICAgICBhd2FpdCB0aGlzLnNkay5UYWcuZWRpdEJpbGxib2FyZChcclxuICAgICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLmdldERhdGEoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE1pc2Ugw6Agam91ciBkZSBsJ2ljw7RuZSBpbW3DqWRpYXRlXHJcbiAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLnVwZGF0ZU1hdHRlclRhZ0NvbnRlbnRGb3JUYWdJRChcclxuICAgICAgdGhpcy5zZGssXHJcbiAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICBvYmplY3QsXHJcbiAgICAgIHRhZ1R5cGUsXHJcbiAgICAgIHRoaXMuc2V0VGFnSWNvbkFuZE9wYWNpdHkuYmluZCh0aGlzKSxcclxuICAgICAgLy8gT24gcGFzc2UgdW5lIGZvbmN0aW9uIHdyYXBwZXIgcXVpIGV4w6ljdXRlIGwnaW5qZWN0aW9uIEhUTUwgc2FucyBibG9xdWVyXHJcbiAgICAgIGFzeW5jICh0eXBlLCBvYmosIHNpZCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaW5qZWN0SHRtbEluVGFnKHR5cGUsIG9iaiwgc2lkKS5jYXRjaChlcnIgPT4ge1xyXG4gICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSBjb25zb2xlLndhcm4oJ0FzeW5jIEhUTUwgdXBkYXRlIGZhaWxlZCBmb3InLCBzaWQsIGVycik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGluamVjdGVkIGh0bWwgZm9yIE1hdHRlcnRhZ1xyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gb2JqZWN0IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlLCBldGNcclxuICAgKiBAcGFyYW0gdGFnVHlwZSBQb2lUeXBlXHJcbiAgICovXHJcbiAgYXN5bmMgdXBkYXRlSW5qZWN0ZWRIdG1sRm9yVGFnSUQoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBhbnksXHJcbiAgICB0YWdUeXBlOiBQb2lUeXBlXHJcbiAgKSB7XHJcbiAgICBhd2FpdCB0aGlzLmluamVjdEh0bWxJblRhZyh0YWdUeXBlLCBvYmplY3QsIG1hdHRlcnRhZ0lEKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgTWF0dGVydGFnIGZyb20gVmlld2VyIGJ5IGl0cyBJRFxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKi9cclxuICBkZWxldGVNYXR0ZXJ0YWdGcm9tSWQobWF0dGVydGFnSUQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5kZWxldGVNYXR0ZXJ0YWdGcm9tSWQodGhpcy5zZGssIG1hdHRlcnRhZ0lEKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgbGF0ZXN0IGNyZWF0ZWQgbWF0dGVydGFnXHJcbiAgICovXHJcbiAgYXN5bmMgZGVsZXRlTGFzdE1hdHRlcnRhZygpIHtcclxuICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UuZGVsZXRlTGFzdE1hdHRlcnRhZyh0aGlzLnNkayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMZWdhY3k6IHVzZWQgdG8gYmUgY2FsbGVkIGFjdGlvbl9hZGRfbWF0dGVydGFnX2Zyb21fUE9JXHJcbiAgICogQWRkcyBhbmQgY29uZmlndXJlcyBNYXR0ZXJ0YWcgZm9yIGFuIG9iamVjdCAoVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0YykgdGhhdCBjb3JyZXNwb25kcyB0byBQT0kgKGNvb3JkaW5hdGVzLCB0YWdJY29uKVxyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKiBAcGFyYW0gb2JqZWN0IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlLi4uXHJcbiAgICogQHBhcmFtIHBvaSBQT0lcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZU1hdHRlcnRhZ0Zyb21QT0koXHJcbiAgICB0YWdUeXBlOiBQb2lUeXBlLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICBwb2k6IFBPSVxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5jcmVhdGVNYXR0ZXJ0YWdGcm9tUE9JKFxyXG4gICAgICB0aGlzLnNkayxcclxuICAgICAgdGFnVHlwZSxcclxuICAgICAgb2JqZWN0LFxyXG4gICAgICBwb2ksXHJcbiAgICAgIHRoaXMucG9zZUNhbWVyYSxcclxuICAgICAgdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkLmJpbmQodGhpcyksXHJcbiAgICAgIHRoaXMuc2V0VGFnSWNvbkFuZE9wYWNpdHkuYmluZCh0aGlzKSxcclxuICAgICAgdGhpcy5pbmplY3RIdG1sSW5UYWcuYmluZCh0aGlzKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluamVjdCBjdXN0b20gSFRNTCBhcyBNYXR0ZXJ0YWcgY29udGVudFxyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKiBAcGFyYW0gb2JqZWN0IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdJRCBzdHJpbmdcclxuICAgKi9cclxuICBhc3luYyBpbmplY3RIdG1sSW5UYWcodGFnVHlwZTogUG9pVHlwZSwgb2JqZWN0OiBEYk9iamVjdFR5cGUsIHRhZ0lEOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRUYWdTZXJ2aWNlLmluamVjdEh0bWxJblRhZyh0aGlzLnNkaywgdGFnVHlwZSwgb2JqZWN0LCB0YWdJRCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncygpIHtcclxuICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UuYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncyh0aGlzLnNkayk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIE1hdHRlcnRhZyBmcm9tIHZpc2l0IGFzc29jaWF0ZWQgd2l0aCBvYmplY3QgSUQgKHRpY2tldElELCBldGMpXHJcbiAgICogQHBhcmFtIGVsZW1lbnRJRCBzdHJpbmdcclxuICAgKi9cclxuICBhc3luYyBkZWxldGVNYXR0ZXJ0YWdGb3JPYmplY3QoZWxlbWVudElEOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG1hdHRlclRhZ0lEID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnRJRCkudGFnO1xyXG4gICAgaWYgKG1hdHRlclRhZ0lEKSB7XHJcbiAgICAgIHRoaXMudGFnQWRkUXVldWUgPSB0aGlzLnRhZ0FkZFF1ZXVlLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFRhZ1NlcnZpY2UuZGVsZXRlTWF0dGVydGFnRnJvbUlkKHRoaXMuc2RrLCBtYXR0ZXJUYWdJRCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMudGFnQWRkUXVldWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiB1dWlkIGZyb20gdGhyZWVqc1xyXG4gICAqIEBwYXJhbSB1dWlkXHJcbiAgICovXHJcbiAgYXN5bmMgZGVsZXRlT2JqZWN0M0QodXVpZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gdGhpcy5vYmplY3QzRFNlcnZpY2UuZGVsZXRlT2JqZWN0M0QodXVpZCk7XHJcbiAgfVxyXG5cclxuICBnZXRPYmplY3QzRE1vZGVsTm9kZUZyb21EaWN0aW9ubmFyeSh1dWlkOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLmdldE9iamVjdDNETW9kZWxOb2RlRnJvbURpY3Rpb25uYXJ5KHV1aWQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyAgTWF0dGVydGFnRGF0YSBhbmQgc3RhcnQgcmVwb3NpdGlvbmluZyAoY3JlYXRlcyB0ZW1wb3JhcnkgbWF0dGVydGFnIHRoYXQgZm9sbG93cyB0aGUgY3Vyc29yKVxyXG4gICAqIEBwYXJhbSBwb2lUeXBlIFBvaVR5cGVcclxuICAgKiBAcGFyYW0gZWxlbWVudCBUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgZXRjXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkTWF0dGVydGFnV2hlblJlcG9zaXRpb25pbmcocG9pVHlwZTogUG9pVHlwZSwgZWxlbWVudDogRGJPYmplY3RUeXBlKSB7XHJcbiAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gbmV3IE1hdHRlcnRhZ0RhdGEocG9pVHlwZSk7XHJcbiAgICAvLyBzZXQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBleGlzdGluZyB0YWdcclxuICAgIGNvbnN0IFtwb2ldID0gZWxlbWVudC5wb2lzLml0ZW1zO1xyXG4gICAgaWYgKHBvaSAmJiBwb2kuY29vcmRpbmF0ZSkge1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpKTtcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb2kocG9pKTsgLy8gdG8ga2VlcCBjdXN0b20gdGFnSWNvbiBhbmQgb3BhY2l0eVxyXG4gICAgfVxyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRTd2VlcElEKHRoaXMubmF2aWdhdGlvblNlcnZpY2UucmVzb2x2ZVN3ZWVwVXVpZCh0aGlzLnBvc2VDYW1lcmEuc3dlZXApKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0Um90YXRpb24odGhpcy5wb3NlQ2FtZXJhLnJvdGF0aW9uKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KGVsZW1lbnQsIHBvaVR5cGUpO1xyXG4gICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyA9IGF3YWl0IHRoaXMuYWRkTWF0dGVydGFnVG9WaWV3ZXIobWF0dGVydGFnRGF0YSk7XHJcblxyXG4gICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLlBPU0lUSU9OSU5HKTtcclxuICAgIGF3YWl0IHRoaXMuYWRkQ3Vyc29yTWF0dGVydGFnKG1hdHRlcnRhZ0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBNYXR0ZXJ0YWdEYXRhIGFuZCBtYXR0ZXJ0YWcgdGhhdCBmb2xsb3dzIHRoZSBjdXJzb3Igd2hlbiBjaG9vc2luZyBwb3NpdGlvbiBmb3IgYSBuZXcgb2JqZWN0XHJcbiAgICogQHBhcmFtIHBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyBhZGRNYXR0ZXJ0YWdXaGVuQWRkaW5nKHBvaVR5cGU6IFBvaVR5cGUpIHtcclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YShwb2lUeXBlKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0U3dlZXBJRCh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLnJlc29sdmVTd2VlcFV1aWQodGhpcy5wb3NlQ2FtZXJhLnN3ZWVwKSk7XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldFJvdGF0aW9uKHRoaXMucG9zZUNhbWVyYS5yb3RhdGlvbik7XHJcbiAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuQURESU5HKTtcclxuICAgIGF3YWl0IHRoaXMuYWRkQ3Vyc29yTWF0dGVydGFnKG1hdHRlcnRhZ0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VscyBmb2xsb3dpbmcgb2YgY3Vyc29yIChtZWFuaW5nIGRlbGV0aW5nIGxhc3QgTWF0dGVydGFnKVxyXG4gICAqL1xyXG4gIGNhbmNlbEZvbGxvd2luZ0N1cnNvcigpIHtcclxuICAgIHRoaXMuZGVsZXRlTGFzdE1hdHRlcnRhZygpO1xyXG4gICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQpO1xyXG4gIH1cclxuXHJcbiAgc2V0TGFzdE9iamVjdDNEKGxhc3RPYmplY3QzRDogVGhyZWVKU09iamVjdDNEKSB7XHJcbiAgICB0aGlzLm9iamVjdDNEU2VydmljZS5sYXN0T2JqZWN0M0QgPSBsYXN0T2JqZWN0M0Q7XHJcbiAgfVxyXG5cclxuICBnZXRMYXN0T2JqZWN0M0QoKTogVGhyZWVKU09iamVjdDNEIHtcclxuICAgIHJldHVybiB0aGlzLm9iamVjdDNEU2VydmljZS5sYXN0T2JqZWN0M0Q7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtcyBjYWxsYmFjayBhZnRlciBtYXR0ZXJ0YWcgcG9zaXRpb24gd2FzIHZhbGlkYXRlZCAoY3JlYXRpb24gb2Ygb2JqZWN0IG9yIHJlcG9zaXRpb25pbmcpXHJcbiAgICogQHBhcmFtIG1vZGUgTWF0dGVydGFnQWN0aW9uTW9kZVxyXG4gICAqL1xyXG4gIGNhbGxiYWNrQWZ0ZXJNYXR0ZXJ0YWdWYWxpZGF0aW9uKG1vZGU6IE1hdHRlcnRhZ0FjdGlvbk1vZGUpIHtcclxuICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xyXG4gICAgY29uc3QgbGFzdFRhZyA9IHRoaXMuZ2V0TGFzdFRhZygpO1xyXG4gICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfRVFVSVBNRU5UOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX2VxdWlwYF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX1RJQ0tFVDpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF90aWNrZXRgXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfT0JKRUNUM0Q6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfb2JqZWN0M2RgXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfREFUQTpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoJz8nKSkge1xyXG4gICAgICAgICAgdXJsID0gdGhpcy5yb3V0ZXIudXJsLnN1YnN0cmluZygwLCB0aGlzLnJvdXRlci51cmwuaW5kZXhPZignPycpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dXJsfS9hZGRfZmVhdHVyZWBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9ERVNLOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX2ZlYXR1cmVgXSwge1xyXG4gICAgICAgICAgcXVlcnlQYXJhbXM6IHsgaXNEZXNrOiB0cnVlIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfUk9PTTpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9yb29tYF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fT0JKRUNUM0Q6XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIC8vIERPIE5vdGhpbmcgKHJvdXRpbmcpLCBqdXN0XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L29iamVjdDNkLyR7dGhpcy5sYXN0T2JqZWN0M0QuaWR9YF0sXHJcbiAgICAgICAgICAgIHsgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX1RJQ0tFVDpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICBgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9kZXRhaWwvJHt0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobGFzdFRhZykuZWxlbWVudElEXHJcbiAgICAgICAgICAgICAgfWAsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHsgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX0VRVUlQTUVOVDpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICBgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9lcXVpcC8ke3RoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKS5lbGVtZW50SURcclxuICAgICAgICAgICAgICB9YCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgeyBxdWVyeVBhcmFtczogeyBwb3NpdGlvbmluZzogdHJ1ZSB9IH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fREFUQTpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmVSb3V0ZSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSwgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9ST09NOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2ZVJvdXRlLFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogeyBwb3NpdGlvbmluZzogdHJ1ZSB9LCBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bGx5IHVwZGF0ZXMgZXhpc3RpbmcgTWF0dGVydGFnIGNvbnRlbnQgd2l0aCBkYXRhIG9mIG9iamVjdCAoVGlja2V0LCBFcXVpcG1lbnQsIERlc2spXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIERlc2tcclxuICAgKiBAcGFyYW0gcG9pVHlwZSBQb2lUeXBlXHJcbiAgICogQHBhcmFtIHBvaSBQT0lcclxuICAgKi9cclxuICBhc3luYyBzZXRPYmplY3RBbmRQb2lJblRhZyhcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgIHBvaVR5cGU6IFBvaVR5cGUsXHJcbiAgICBwb2k6IFBPSSB8IG51bGwgPSBudWxsXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLnNldE9iamVjdChvYmplY3QsIHBvaVR5cGUpO1xyXG4gICAgaWYgKHBvaSkge1xyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLnNldFBvaShwb2kpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5lbGVtZW50SUQgPSBvYmplY3QuaWQ7XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZU1hdHRlclRhZ0NvbnRlbnRGb3JUYWdJRChtYXR0ZXJ0YWdJRCwgb2JqZWN0LCBwb2lUeXBlKTtcclxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVNYXR0ZXJUYWdQb3NJblNka1ZpZXdlcihcclxuICAgICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgcG9pVHlwZSxcclxuICAgICAgICBwb2lcclxuICAgICAgKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coYGVycm9yIGluIHNldE9iamVjdEFuZFBvaUluVGFnOiAke2V9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVNYXR0ZXJUYWdQb3NJblNka1ZpZXdlcihcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgIHBvaVR5cGU6IFBvaVR5cGUsXHJcbiAgICBwb2k6IFBPSSB8IG51bGwgPSBudWxsXHJcbiAgKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBJbmRleFRvVXBkYXRlID0gb2JqZWN0LnBvaXMuaXRlbXMuZmluZEluZGV4KCh1KSA9PiB1LmlkID09PSBwb2kuaWQpO1xyXG4gICAgb2JqZWN0LnBvaXMuaXRlbXNbSW5kZXhUb1VwZGF0ZV0gPSBwb2k7XHJcbiAgICBjb25zdCB7IHgsIHksIHogfSA9IEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpO1xyXG4gICAgY29uc3QgbmV3UG9zaXRpb24gPSB7XHJcbiAgICAgIGFuY2hvclBvc2l0aW9uOiB7XHJcbiAgICAgICAgeDogeCxcclxuICAgICAgICB5OiB5LFxyXG4gICAgICAgIHo6IHosXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0ZW1WZWN0b3I6IHtcclxuICAgICAgICAvLyBtYWtlIHRoZSBUYWcgc3RpY2sgc3RyYWlnaHQgdXAgYW5kIG1ha2UgaXQgMC4zMCBtZXRlcnMgKH4xIGZvb3QpIHRhbGxcclxuICAgICAgICB4OiAwLFxyXG4gICAgICAgIHk6IDAuMyxcclxuICAgICAgICB6OiAwLFxyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIC8vdGhpcy5zZGsuTWF0dGVydGFnLmVkaXRQb3NpdGlvbihtYXR0ZXJ0YWdJRCwgbmV3UG9zaXRpb24pO1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRQb3NpdGlvbihtYXR0ZXJ0YWdJRCwgbmV3UG9zaXRpb24pO1xyXG4gICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3NcclxuICAgICAgLmdldChtYXR0ZXJ0YWdJRClcclxuICAgICAgLnNldFBvc2l0aW9uKG5ld1Bvc2l0aW9uLmFuY2hvclBvc2l0aW9uKTtcclxuXHJcbiAgICBmb3IgKGxldCB0YWdJZCBvZiB0aGlzLm1hdHRlcnRhZ0lEcykge1xyXG4gICAgICBjb25zdCBjdXJyZW50VGFnID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHRhZ0lkKTtcclxuICAgICAgaWYgKCFjdXJyZW50VGFnKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGN1cnJlbnRUYWcuZWxlbWVudElEID09PSBvYmplY3QuaWQgJiYgdGFnSWQgIT09IG1hdHRlcnRhZ0lEKSB7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZGVsZXRlKHRhZ0lkKTtcclxuICAgICAgICB0aGlzLnNkay5UYWcucmVtb3ZlKHRhZ0lkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBtYXR0ZXJUYWdJRCBhbmQgaXRzIHN3ZWVwIGZvciBhbiBvYmplY3QgSUQgKHRpY2tldCBJRCwgZXRjKVxyXG4gICAqIEBwYXJhbSBlbGVtZW50SUQgc3RyaW5nXHJcbiAgICogQHJldHVybnMge3RhZzogc3RyaW5nIHwgbnVsbCwgc3dlZXA6IHN0cmluZyB8IG51bGx9XHJcbiAgICovXHJcbiAgcHVibGljIGdldFRhZ0Zyb21FbGVtZW50SWQoZWxlbWVudElEOiBzdHJpbmcpOiB7IHRhZzogc3RyaW5nIHwgbnVsbDsgc3dlZXA6IHN0cmluZyB8IG51bGwgfSB7XHJcbiAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0VGFnU2VydmljZS5nZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnRJRCwgdGhpcy5zd2VlcHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBsYXRlc3QgdGFnIGNyZWF0ZWQgaW4gdGhlIHZpc2l0ICh3aGVuIGZvbGxvd2luZyB0aGUgY3Vyc29yIHRvIHBvc2l0aW9uKVxyXG4gICAqIEByZXR1cm5zIHN0cmluZyBtYXR0ZXJ0YWdJRFxyXG4gICAqL1xyXG4gIGdldExhc3RUYWcoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdykge1xyXG4gICAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1hdHRlcnRhZ0lEcy5sZW5ndGggPT09IDBcclxuICAgICAgICA/IG51bGxcclxuICAgICAgICA6IHRoaXMubWF0dGVydGFnSURzW3RoaXMubWF0dGVydGFnSURzLmxlbmd0aCAtIDFdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBNYXR0ZXJ0YWdEYXRhIGZvciBNYXR0ZXJ0YWcgKHJlcGxhY2VzIGdldFRhZ0RhdGFGcm9tSWQpXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEXHJcbiAgICogQHJldHVybnMgTWF0dGVydGFnRGF0YVxyXG4gICAqL1xyXG4gIGdldE1hdHRlclRhZ0RhdGFGb3JNYXR0ZXJ0YWcobWF0dGVydGFnSUQ6IHN0cmluZyk6IE1hdHRlcnRhZ0RhdGEgfCBudWxsIHtcclxuICAgIHRyeSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpO1xyXG4gICAgfSBjYXRjaCB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3QgcmV0cmlldmUgbWF0dGVydGFnRGF0YSBmb3IgdGFnJywgbWF0dGVydGFnSUQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gVmlld2VyIHJlbGF0ZWQgKHN3aXRjaCB2aWV3cywgZ28gdG8pIC0tLS0tLS0tLS1cclxuICAvL1xyXG4gIGFzeW5jIGFjdGlvbl90b29sYm94X2Zsb29ycGxhbigpIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmFjdGlvbl90b29sYm94X2Zsb29ycGxhbih0aGlzLnNkayk7XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpIHtcclxuICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcodGhpcy5zZGspO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uU2hvd0FsbEZsb29ycygpIHtcclxuICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UuYWN0aW9uU2hvd0FsbEZsb29ycyh0aGlzLnNkayk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25fdG9vbGJveF9kb2xsaG91c2UoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5hY3Rpb25fdG9vbGJveF9kb2xsaG91c2UodGhpcy5zZGspO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCkge1xyXG4gICAgY29uc3QgbmV3U3RhdGUgPSAhdGhpcy5pc01lYXN1cmVNb2RlT247XHJcbiAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMudG9nZ2xlTW9kZShuZXdTdGF0ZSkudGhlbigoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgIGBNZWFzdXJlbWVudCBtb2RlIGlzIG5vdyAke25ld1N0YXRlID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ31gXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X2NhbmNlbF9tZXN1cmUoKSB7XHJcbiAgICBpZiAodGhpcy5pc01lYXN1cmVNb2RlT24pIHtcclxuICAgICAgdGhpcy5hY3Rpb25fdG9vbGJveF9tZXN1cmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl9nb190b19mbG9vcihcclxuICAgIGZsb29yTmFtZTogc3RyaW5nLFxyXG4gICAgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IG51bWJlciA9IG51bGxcclxuICApIHtcclxuICAgIHJldHVybiB0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmFjdGlvbl9nb190b19mbG9vcih0aGlzLnNkaywgZmxvb3JOYW1lLCBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25fZ29fdG9fc3dlZXAoc3dlZXA6IHN0cmluZywgcm90YXRpb24/OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0gfCBudWxsKSB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5hY3Rpb25fZ29fdG9fc3dlZXAodGhpcy5zZGssIHN3ZWVwLCByb3RhdGlvbik7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50U3dlZXAoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDdXJyZW50U3dlZXAodGhpcy5wb3NlQ2FtZXJhKTtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRDYW1lcmFQb3NpdGlvbigpOiB7XHJcbiAgICByb3RhdGlvbjogYW55O1xyXG4gICAgcG9zaXRpb246IGFueTtcclxuICAgIHN3ZWVwOiBhbnk7XHJcbiAgfSB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMucG9zZUNhbWVyYSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wb3NlQ2FtZXJhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXRJbnRlcmFjdGlvbk1vZGUoaW50ZXJhY3Rpb25Nb2RlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuaW50ZXJhY3Rpb25Nb2RlID0gaW50ZXJhY3Rpb25Nb2RlO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW50ZXJhY3Rpb25Nb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaW50ZXJhY3Rpb25Nb2RlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYWxsIHZhcmlhYmxlcywgZGVsZXRlcyBhbGwgdGFncyAod2hlbiB2aWV3ZXIgaXMgcmVtb3ZlciBvciBtb2RlbCBjaGFuZ2VkPXJlbG9hZCBuZWVkZWQpXHJcbiAgICovXHJcbiAgYXN5bmMgY2xlYXJBbGwoKSB7XHJcbiAgICBjb25zb2xlLmxvZygncmVtb3Zpbmcgdmlld2VyJyk7XHJcbiAgICBhd2FpdCB0aGlzLmFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKTtcclxuICAgIHRoaXMuZmxvb3JzID0gbnVsbDtcclxuICAgIHRoaXMuc3dlZXBzID0gbnVsbDtcclxuICAgIHRoaXMuc2RrID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnBvaW50ZXJTZXJ2aWNlLmNsZWFyKHtcclxuICAgICAgb25MZWZ0Q2xpY2s6IHRoaXMucG9pbnRlckxlZnRDbGlja0hhbmRsZXIuYmluZCh0aGlzKSxcclxuICAgICAgb25SaWdodENsaWNrOiB0aGlzLnBvaW50ZXJSaWdodENsaWNrSGFuZGxlci5iaW5kKHRoaXMpLFxyXG4gICAgICBvbk1pZGRsZUNsaWNrOiB0aGlzLnBvaW50ZXJNaWRkbGVDbGlja0hhbmRsZXIuYmluZCh0aGlzKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZm9yYmlkZGVuU3dlZXBzID0gW107XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMubmF2aWdhdGlvblNlcnZpY2UucmVtb3ZlRm9yYmlkZGVuU3dlZXBzKHRoaXMuc2RrLCBmb3JiaWRkZW5Td2VlcHMpO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tIDNEIG9iamVjdHMgKFNESyBCdW5kbGUgb25seSkgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgYXN5bmMgaW5pdDNET2JqZWN0Vmlld2VyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLmluaXQzRE9iamVjdFZpZXdlcih0aGlzLnNkayk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGQzRE9iamVjdChcclxuICAgIG9iajogSU9iamVjdDNELFxyXG4gICAgbW9kZT86ICd0cmFuc2xhdGUnIHwgJ3JvdGF0ZSdcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLmFkZDNET2JqZWN0KHRoaXMuc2RrLCBvYmosIG1vZGUpO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlT2JqZWN0VmlzaWJpbGl0eShvYmplY3RJZDogYW55KSB7XHJcbiAgICB0aGlzLm9iamVjdDNEU2VydmljZS50b2dnbGVPYmplY3RWaXNpYmlsaXR5KG9iamVjdElkKTtcclxuICB9XHJcblxyXG4gIGlzT2JqZWN0VmlzaWJsZShvYmplY3RJZDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5vYmplY3QzRFNlcnZpY2UuaXNPYmplY3RWaXNpYmxlKG9iamVjdElkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBvaW50Q2FtZXJhVG8zRE9iamVjdChvYmplY3RJZDogYW55KSB7XHJcbiAgICByZXR1cm4gdGhpcy5vYmplY3QzRFNlcnZpY2UucG9pbnRDYW1lcmFUbzNET2JqZWN0KFxyXG4gICAgICB0aGlzLnNkayxcclxuICAgICAgb2JqZWN0SWQsXHJcbiAgICAgIHRoaXMuY3JlYXRlTWF0dGVydGFnRnJvbVBPSS5iaW5kKHRoaXMpLFxyXG4gICAgICB0aGlzLmdvVG9UYWcuYmluZCh0aGlzKSxcclxuICAgICAgdGhpcy5kZWxldGVMYXN0TWF0dGVydGFnLmJpbmQodGhpcyksXHJcbiAgICAgIHRoaXMuZ2V0VGFnRnJvbUVsZW1lbnRJZC5iaW5kKHRoaXMpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NlbmVOb2RlRnJvbU9iamVjdDNESWQodXVpZDogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLm9iamVjdDNEU2VydmljZS5nZXRTY2VuZU5vZGVGcm9tT2JqZWN0M0RJZCh1dWlkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRpc3BsYXlBemltdXRhbENyb3duKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLmRpc3BsYXlBemltdXRhbENyb3duKHRoaXMucG9zZUNhbWVyYSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhdHRhY2hHaXptb0NvbnRyb2xUbzNET2JqZWN0KFxyXG4gICAgbW9kZWxOb2RlOiBhbnksXHJcbiAgICBzY2VuZU9iamVjdDogYW55LFxyXG4gICAgbW9kZTogJ3RyYW5zbGF0ZScgfCAncm90YXRlJyB8ICdzY2FsZScsXHJcbiAgICB2aXNpYmxlOiBib29sZWFuLFxyXG4gICAgaXNOZXdPYmplY3Q6IGJvb2xlYW5cclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMub2JqZWN0M0RTZXJ2aWNlLmF0dGFjaEdpem1vQ29udHJvbFRvM0RPYmplY3QodGhpcy5zZGssIG1vZGVsTm9kZSwgc2NlbmVPYmplY3QsIG1vZGUsIHZpc2libGUsIGlzTmV3T2JqZWN0KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUdpem1vRnJvbUxhc3RPYmplY3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9iamVjdDNEU2VydmljZS5yZW1vdmVHaXptb0Zyb21MYXN0T2JqZWN0KCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVWaWV3RnJ1c3R1bSgpOiB2b2lkIHtcclxuICAgIHRoaXMub2JqZWN0M0RTZXJ2aWNlLnRvZ2dsZVZpZXdGcnVzdHVtKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==