@cqa-lib/cqa-ui 1.1.518 → 1.1.520

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.
@@ -95,11 +95,18 @@ export class StepBuilderGroupComponent {
95
95
  if (this.initialStepGroupId) {
96
96
  const foundGroup = this.stepGroupOptions.find(opt => opt.id === this.initialStepGroupId);
97
97
  if (foundGroup) {
98
- this.stepGroupForm.patchValue({ stepGroupId: this.initialStepGroupId });
99
- this.selectedStepGroup = foundGroup;
100
- // Capture snapshot for change detection (will be recaptured if runtime variables load later)
101
- if (this.editMode) {
102
- this.captureInitialSnapshot();
98
+ // Only patch the form to the initial value if the user hasn't picked a
99
+ // different option yet. Subsequent stepGroupOptions changes (e.g. the
100
+ // refetch dynamic-select fires on every dropdown reopen) must NOT
101
+ // clobber a user-modified selection.
102
+ const currentFormValue = this.stepGroupForm.value.stepGroupId;
103
+ if (currentFormValue == null || currentFormValue === this.initialStepGroupId) {
104
+ this.stepGroupForm.patchValue({ stepGroupId: this.initialStepGroupId });
105
+ this.selectedStepGroup = foundGroup;
106
+ // Capture snapshot for change detection (will be recaptured if runtime variables load later)
107
+ if (this.editMode) {
108
+ this.captureInitialSnapshot();
109
+ }
103
110
  }
104
111
  }
105
112
  }
@@ -205,7 +212,16 @@ export class StepBuilderGroupComponent {
205
212
  if (!this.selectedStepGroup) {
206
213
  return;
207
214
  }
208
- this.initialStepGroupIdSnapshot = this.stepGroupForm.value.stepGroupId || null;
215
+ // Re-capture is only valid while the form still points at the original
216
+ // initialStepGroupId — that covers the "runtime vars arrived after the
217
+ // initial selection was patched" case. Once the user picks a different
218
+ // group, keep the original baseline so `hasChanges()` stays true and the
219
+ // Update button remains enabled.
220
+ const currentStepGroupId = this.stepGroupForm.value.stepGroupId;
221
+ if (this.snapshotReady && currentStepGroupId !== this.initialStepGroupId) {
222
+ return;
223
+ }
224
+ this.initialStepGroupIdSnapshot = currentStepGroupId || null;
209
225
  this.initialRuntimeValuesSnapshot = JSON.stringify(this.runtimeVariableValues);
210
226
  this.snapshotReady = true;
211
227
  }
@@ -247,4 +263,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
247
263
  }], searchStepGroups: [{
248
264
  type: Output
249
265
  }] } });
250
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1ncm91cC9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWdyb3VwL3N0ZXAtYnVpbGRlci1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQXVDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQTJCakYsTUFBTSxPQUFPLHlCQUF5QjtJQXFEcEMsWUFBb0IsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFwRG5DLHNDQUFzQztRQUM3QixxQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO1FBRWxELDhEQUE4RDtRQUNyRCxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFFNUMsb0NBQW9DO1FBQzNCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUs5QywyQkFBMkI7UUFDbEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUtuQywwQ0FBMEM7UUFDakMsOEJBQXlCLEdBQVksS0FBSyxDQUFDO1FBS3BELHlHQUF5RztRQUNoRyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUV6QyxnQ0FBZ0M7UUFDdEIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRTdELGtFQUFrRTtRQUN4RCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXpELDBCQUEwQjtRQUNoQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUUvQyxtREFBbUQ7UUFDekMsdUJBQWtC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QUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ25GLENBQUM7O3NIQXJQVSx5QkFBeUI7MEdBQXpCLHlCQUF5Qix5cUJDNUJ0Qyx1MUxBaUhBOzJGRHJGYSx5QkFBeUI7a0JBTnJDLFNBQVM7K0JBQ0Usd0JBQXdCLFFBRzVCLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRTtrR0FJckIsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFHRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBR0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFHRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csY0FBYztzQkFBdEIsS0FBSztnQkFHSSxVQUFVO3NCQUFuQixNQUFNO2dCQUdHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFHRyxTQUFTO3NCQUFsQixNQUFNO2dCQUdHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFHRyxnQkFBZ0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnLCBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBHcm91cFZhcmlhYmxlIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICB2YXJpYWJsZXM/OiBBcnJheTx7IG5hbWU6IHN0cmluZzsgcGFyYW1ldGVyVmFsdWU/OiBzdHJpbmcgfT47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwRm9ybURhdGEge1xuICBzdGVwR3JvdXBJZDogbnVtYmVyO1xuICBzdGVwR3JvdXA/OiBhbnk7IC8vIFRlc3RDYXNlIG9iamVjdFxuICBydW50aW1lVmFyaWFibGVzPzogeyBbZ3JvdXBJZDogc3RyaW5nXTogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB9OyAvLyBSdW50aW1lIHZhcmlhYmxlIHZhbHVlc1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0ZXBHcm91cE9wdGlvbiB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1zdGVwLWJ1aWxkZXItZ3JvdXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vc3RlcC1idWlsZGVyLWdyb3VwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbXSxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9XG59KVxuZXhwb3J0IGNsYXNzIFN0ZXBCdWlsZGVyR3JvdXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBPcHRpb25zIGZvciBzdGVwIGdyb3VwIGRyb3Bkb3duICovXG4gIEBJbnB1dCgpIHN0ZXBHcm91cE9wdGlvbnM6IFN0ZXBHcm91cE9wdGlvbltdID0gW107XG5cbiAgLyoqIEluZGljYXRlcyBpZiBtb3JlIHN0ZXAgZ3JvdXBzIGFyZSBhdmFpbGFibGUgZm9yIGxvYWRpbmcgKi9cbiAgQElucHV0KCkgaGFzTW9yZVN0ZXBHcm91cHM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogTG9hZGluZyBzdGF0ZSBmb3Igc3RlcCBncm91cHMgKi9cbiAgQElucHV0KCkgaXNMb2FkaW5nU3RlcEdyb3VwczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBJbml0aWFsIHN0ZXAgZ3JvdXAgSUQgZm9yIGVkaXQgbW9kZSAqL1xuICBASW5wdXQoKSBpbml0aWFsU3RlcEdyb3VwSWQ/OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgaW4gZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGVkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFJ1bnRpbWUgdmFyaWFibGVzIGZvciB0aGUgc2VsZWN0ZWQgc3RlcCBncm91cCAqL1xuICBASW5wdXQoKSBydW50aW1lVmFyaWFibGVzPzogU3RlcEdyb3VwVmFyaWFibGVbXTtcblxuICAvKiogTG9hZGluZyBzdGF0ZSBmb3IgcnVudGltZSB2YXJpYWJsZXMgKi9cbiAgQElucHV0KCkgaXNMb2FkaW5nUnVudGltZVZhcmlhYmxlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBFeGlzdGluZyBydW50aW1lIHZhcmlhYmxlIHZhbHVlcyAoZnJvbSB0ZXN0U3RlcC50ZXN0RGF0YUZ1bmN0aW9uQXJncykgKi9cbiAgQElucHV0KCkgZXhpc3RpbmdSdW50aW1lVmFsdWVzPzogeyBbZ3JvdXBJZDogc3RyaW5nXTogeyBbcGFyYW1OYW1lOiBzdHJpbmddOiBzdHJpbmcgfSB9O1xuXG4gIC8qKiBUcnVlIHdoaWxlIHBhcmVudCBpcyBjcmVhdGluZyB0aGUgc3RlcCAoQVBJIGluIHByb2dyZXNzKTsgc2hvdyBsb2FkZXIgb24gQ3JlYXRlL1VwZGF0ZSBTdGVwIGJ1dHRvbiAqL1xuICBASW5wdXQoKSBpc0NyZWF0aW5nU3RlcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBFbWl0IHdoZW4gc3RlcCBpcyBjcmVhdGVkICovXG4gIEBPdXRwdXQoKSBjcmVhdGVTdGVwID0gbmV3IEV2ZW50RW1pdHRlcjxTdGVwR3JvdXBGb3JtRGF0YT4oKTtcblxuICAvKiogRW1pdCB3aGVuIHN0ZXAgZ3JvdXAgaXMgc2VsZWN0ZWQgdG8gZmV0Y2ggcnVudGltZSB2YXJpYWJsZXMgKi9cbiAgQE91dHB1dCgpIHN0ZXBHcm91cFNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBjYW5jZWxsZWQgKi9cbiAgQE91dHB1dCgpIGNhbmNlbGxlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKiogRW1pdCB3aGVuIG1vcmUgc3RlcCBncm91cHMgbmVlZCB0byBiZSBsb2FkZWQgKi9cbiAgQE91dHB1dCgpIGxvYWRNb3JlU3RlcEdyb3VwcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gc3RlcCBncm91cCBzZWFyY2ggcXVlcnkgY2hhbmdlcyAqL1xuICBAT3V0cHV0KCkgc2VhcmNoU3RlcEdyb3VwcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuXG4gIHN0ZXBHcm91cEZvcm06IEZvcm1Hcm91cDtcbiAgc3RlcEdyb3VwQ29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWc7XG4gIHNlbGVjdGVkU3RlcEdyb3VwOiBTdGVwR3JvdXBPcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcnVudGltZVZhcmlhYmxlVmFsdWVzOiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH0gPSB7fTtcblxuICAvKiogVHJhY2tzIGluaXRpYWwgc3RhdGUgZm9yIGVkaXQgbW9kZSB0byBkZXRlY3QgY2hhbmdlcyAqL1xuICBwcml2YXRlIGluaXRpYWxTdGVwR3JvdXBJZFNuYXBzaG90OiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBpbml0aWFsUnVudGltZVZhbHVlc1NuYXBzaG90OiBzdHJpbmcgPSAne30nO1xuICBwcml2YXRlIHNuYXBzaG90UmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZiOiBGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuc3RlcEdyb3VwRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgc3RlcEdyb3VwSWQ6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgIH0pO1xuXG4gICAgdGhpcy5zdGVwR3JvdXBDb25maWcgPSB7XG4gICAgICBrZXk6ICdzdGVwR3JvdXBJZCcsXG4gICAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCBTdGVwIEdyb3VwJyxcbiAgICAgIG11bHRpcGxlOiBmYWxzZSxcbiAgICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgICBzZXJ2ZXJTZWFyY2g6IHRydWUsXG4gICAgICBoYXNNb3JlOiB0aGlzLmhhc01vcmVTdGVwR3JvdXBzLFxuICAgICAgaXNMb2FkaW5nOiB0aGlzLmlzTG9hZGluZ1N0ZXBHcm91cHMsXG4gICAgICBvcHRpb25zOiBbXSxcbiAgICAgIG9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uU3RlcEdyb3VwQ2hhbmdlKHZhbHVlKTtcbiAgICAgIH0sXG4gICAgICBvblNlYXJjaDogKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2hTdGVwR3JvdXBzLmVtaXQocXVlcnkpO1xuICAgICAgfSxcbiAgICAgIG9uTG9hZE1vcmU6IChxdWVyeT86IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLmxvYWRNb3JlU3RlcEdyb3Vwcy5lbWl0KHF1ZXJ5IHx8ICcnKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVTdGVwR3JvdXBDb25maWcoKTtcbiAgICBpZiAodGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFN0ZXBHcm91cFZhbHVlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0ZXBHcm91cE9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gQXV0by1zZWxlY3QgZmlyc3Qgb3B0aW9uIGlmIGF2YWlsYWJsZVxuICAgICAgY29uc3QgZmlyc3RPcHRpb24gPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnNbMF07XG4gICAgICB0aGlzLnN0ZXBHcm91cEZvcm0ucGF0Y2hWYWx1ZSh7IHN0ZXBHcm91cElkOiBmaXJzdE9wdGlvbi5pZCB9KTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwR3JvdXAgPSBmaXJzdE9wdGlvbjtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ3N0ZXBHcm91cE9wdGlvbnMnXSB8fCBjaGFuZ2VzWydoYXNNb3JlU3RlcEdyb3VwcyddIHx8IGNoYW5nZXNbJ2lzTG9hZGluZ1N0ZXBHcm91cHMnXSkge1xuICAgICAgdGhpcy51cGRhdGVTdGVwR3JvdXBDb25maWcoKTtcbiAgICAgIC8vIFdoZW4gc3RlcEdyb3VwT3B0aW9ucyBjaGFuZ2UsIGNoZWNrIGlmIHdlIG5lZWQgdG8gc2V0IHRoZSBpbml0aWFsIHZhbHVlXG4gICAgICBpZiAodGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsU3RlcEdyb3VwVmFsdWUoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2luaXRpYWxTdGVwR3JvdXBJZCddICYmIHRoaXMuaW5pdGlhbFN0ZXBHcm91cElkKSB7XG4gICAgICB0aGlzLnNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1sncnVudGltZVZhcmlhYmxlcyddICYmIHRoaXMucnVudGltZVZhcmlhYmxlcykge1xuICAgICAgdGhpcy5pbml0aWFsaXplUnVudGltZVZhcmlhYmxlVmFsdWVzKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydleGlzdGluZ1J1bnRpbWVWYWx1ZXMnXSAmJiB0aGlzLmV4aXN0aW5nUnVudGltZVZhbHVlcykge1xuICAgICAgdGhpcy5pbml0aWFsaXplUnVudGltZVZhcmlhYmxlVmFsdWVzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRJbml0aWFsU3RlcEdyb3VwVmFsdWUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaW5pdGlhbFN0ZXBHcm91cElkKSB7XG4gICAgICBjb25zdCBmb3VuZEdyb3VwID0gdGhpcy5zdGVwR3JvdXBPcHRpb25zLmZpbmQob3B0ID0+IG9wdC5pZCA9PT0gdGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpO1xuICAgICAgaWYgKGZvdW5kR3JvdXApIHtcbiAgICAgICAgdGhpcy5zdGVwR3JvdXBGb3JtLnBhdGNoVmFsdWUoeyBzdGVwR3JvdXBJZDogdGhpcy5pbml0aWFsU3RlcEdyb3VwSWQgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwR3JvdXAgPSBmb3VuZEdyb3VwO1xuICAgICAgICAvLyBDYXB0dXJlIHNuYXBzaG90IGZvciBjaGFuZ2UgZGV0ZWN0aW9uICh3aWxsIGJlIHJlY2FwdHVyZWQgaWYgcnVudGltZSB2YXJpYWJsZXMgbG9hZCBsYXRlcilcbiAgICAgICAgaWYgKHRoaXMuZWRpdE1vZGUpIHtcbiAgICAgICAgICB0aGlzLmNhcHR1cmVJbml0aWFsU25hcHNob3QoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RlcEdyb3VwQ29uZmlnKCk6IHZvaWQge1xuICAgIGNvbnN0IG9wdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gdGhpcy5zdGVwR3JvdXBPcHRpb25zLm1hcChncm91cCA9PiAoe1xuICAgICAgaWQ6IGdyb3VwLmlkLFxuICAgICAgdmFsdWU6IGdyb3VwLmlkLFxuICAgICAgbmFtZTogZ3JvdXAubmFtZSxcbiAgICAgIGxhYmVsOiBncm91cC5uYW1lXG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGVwR3JvdXBDb25maWcgPSB7XG4gICAgICAuLi50aGlzLnN0ZXBHcm91cENvbmZpZyxcbiAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICBoYXNNb3JlOiB0aGlzLmhhc01vcmVTdGVwR3JvdXBzLFxuICAgICAgaXNMb2FkaW5nOiB0aGlzLmlzTG9hZGluZ1N0ZXBHcm91cHNcbiAgICB9O1xuICB9XG5cbiAgb25TdGVwR3JvdXBDaGFuZ2Uoc3RlcEdyb3VwSWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGZvdW5kR3JvdXAgPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMuZmluZChvcHQgPT4gb3B0LmlkID09PSBzdGVwR3JvdXBJZCk7XG4gICAgaWYgKGZvdW5kR3JvdXApIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwR3JvdXAgPSBmb3VuZEdyb3VwO1xuICAgICAgLy8gQ2xlYXIgcnVudGltZSB2YXJpYWJsZXMgd2hlbiBzdGVwIGdyb3VwIGNoYW5nZXNcbiAgICAgIHRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzID0ge307XG4gICAgICAvLyBFbWl0IGV2ZW50IHRvIGZldGNoIHJ1bnRpbWUgdmFyaWFibGVzIGZvciB0aGUgc2VsZWN0ZWQgc3RlcCBncm91cFxuICAgICAgdGhpcy5zdGVwR3JvdXBTZWxlY3RlZC5lbWl0KHN0ZXBHcm91cElkKTtcbiAgICB9XG4gIH1cblxuICBnZXRTdGVwR3JvdXBEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkU3RlcEdyb3VwPy5kZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgdGVtcERlc2NFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICB0ZW1wRGVzY0VsZW0uaW5uZXJIVE1MID0gdGhpcy5zZWxlY3RlZFN0ZXBHcm91cC5kZXNjcmlwdGlvbjtcbiAgICAgIHJldHVybiB0ZW1wRGVzY0VsZW0udGV4dENvbnRlbnQgfHwgJyc7XG4gICAgfVxuICAgIHJldHVybiAnTm8gZGVzY3JpcHRpb24gYXZhaWxhYmxlJztcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVJ1bnRpbWVWYXJpYWJsZVZhbHVlcygpOiB2b2lkIHtcbiAgICAvLyBJbml0aWFsaXplIHJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzIGZyb20gZXhpc3RpbmcgdmFsdWVzIG9yIGVtcHR5XG4gICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXMgPSB7fTtcblxuICAgIGlmICh0aGlzLnJ1bnRpbWVWYXJpYWJsZXMpIHtcbiAgICAgIHRoaXMucnVudGltZVZhcmlhYmxlcy5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgaWYgKGdyb3VwLnZhcmlhYmxlcyAmJiBncm91cC52YXJpYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwVmFsdWVzOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gICAgICAgICAgZ3JvdXAudmFyaWFibGVzLmZvckVhY2godmFyaWFibGUgPT4ge1xuICAgICAgICAgICAgLy8gVXNlIGV4aXN0aW5nIHZhbHVlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHVzZSBjdXJyZW50IHBhcmFtZXRlclZhbHVlIG9yIGVtcHR5IHN0cmluZ1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZSA9IHRoaXMuZXhpc3RpbmdSdW50aW1lVmFsdWVzPy5bZ3JvdXAuaWRdPy5bdmFyaWFibGUubmFtZV07XG4gICAgICAgICAgICBncm91cFZhbHVlc1t2YXJpYWJsZS5uYW1lXSA9IGV4aXN0aW5nVmFsdWUgfHwgdmFyaWFibGUucGFyYW1ldGVyVmFsdWUgfHwgJyc7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXAuaWRdID0gZ3JvdXBWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIENhcHR1cmUgc25hcHNob3QgYWZ0ZXIgcnVudGltZSB2YWx1ZXMgYXJlIGluaXRpYWxpemVkIChmb3IgZWRpdCBtb2RlIGNoYW5nZSBkZXRlY3Rpb24pXG4gICAgaWYgKHRoaXMuZWRpdE1vZGUpIHtcbiAgICAgIHRoaXMuY2FwdHVyZUluaXRpYWxTbmFwc2hvdCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uUnVudGltZVZhcmlhYmxlQ2hhbmdlKGdyb3VwSWQ6IG51bWJlciwgcGFyYW1OYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzW2dyb3VwSWRdKSB7XG4gICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXSA9IHt9O1xuICAgIH1cbiAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXVtwYXJhbU5hbWVdID0gdmFsdWU7XG4gIH1cblxuICBnZXRSdW50aW1lVmFyaWFibGVWYWx1ZShncm91cElkOiBudW1iZXIsIHBhcmFtTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXBJZF0/LltwYXJhbU5hbWVdIHx8ICcnO1xuICB9XG5cbiAgaGFzUnVudGltZVZhcmlhYmxlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnJ1bnRpbWVWYXJpYWJsZXM/Lmxlbmd0aCAmJlxuICAgICAgICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZXMuc29tZShncm91cCA9PiAhIWdyb3VwLnZhcmlhYmxlcz8ubGVuZ3RoKTtcbiAgfVxuXG4gIG9uQ3JlYXRlU3RlcCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGVwR3JvdXBGb3JtLnZhbGlkKSB7XG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnN0ZXBHcm91cEZvcm0udmFsdWU7XG4gICAgICBjb25zdCBzdGVwRGF0YTogU3RlcEdyb3VwRm9ybURhdGEgPSB7XG4gICAgICAgIHN0ZXBHcm91cElkOiBmb3JtVmFsdWUuc3RlcEdyb3VwSWQsXG4gICAgICAgIHN0ZXBHcm91cDogdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCxcbiAgICAgICAgcnVudGltZVZhcmlhYmxlczogdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNcbiAgICAgIH07XG4gICAgICB0aGlzLmNyZWF0ZVN0ZXAuZW1pdChzdGVwRGF0YSk7XG4gICAgfVxuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWxsZWQuZW1pdCgpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZm9ybSBoYXMgY2hhbmdlZCBmcm9tIGl0cyBpbml0aWFsIHN0YXRlIChlZGl0IG1vZGUgb25seSkgKi9cbiAgaGFzQ2hhbmdlcygpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZWRpdE1vZGUpIHtcbiAgICAgIHJldHVybiB0cnVlOyAvLyBJbiBjcmVhdGUgbW9kZSwgYWx3YXlzIGFsbG93IHN1Ym1pc3Npb25cbiAgICB9XG4gICAgLy8gVW50aWwgdGhlIHNuYXBzaG90IGlzIHJlYWR5LCB0cmVhdCBhcyBubyBjaGFuZ2VzIChkaXNhYmxlIGJ1dHRvbilcbiAgICBpZiAoIXRoaXMuc25hcHNob3RSZWFkeSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50U3RlcEdyb3VwSWQgPSB0aGlzLnN0ZXBHcm91cEZvcm0udmFsdWUuc3RlcEdyb3VwSWQ7XG4gICAgaWYgKGN1cnJlbnRTdGVwR3JvdXBJZCAhPT0gdGhpcy5pbml0aWFsU3RlcEdyb3VwSWRTbmFwc2hvdCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlcykgIT09IHRoaXMuaW5pdGlhbFJ1bnRpbWVWYWx1ZXNTbmFwc2hvdDtcbiAgfVxuXG4gIC8qKiBDYXB0dXJlcyB0aGUgY3VycmVudCBzdGF0ZSBhcyB0aGUgYmFzZWxpbmUgZm9yIGNoYW5nZSBkZXRlY3Rpb24gKi9cbiAgcHJpdmF0ZSBjYXB0dXJlSW5pdGlhbFNuYXBzaG90KCk6IHZvaWQge1xuICAgIC8vIE9ubHkgY2FwdHVyZSB3aGVuIGEgdmFsaWQgc3RlcCBncm91cCBpcyBzZWxlY3RlZFxuICAgIGlmICghdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZFNuYXBzaG90ID0gdGhpcy5zdGVwR3JvdXBGb3JtLnZhbHVlLnN0ZXBHcm91cElkIHx8IG51bGw7XG4gICAgdGhpcy5pbml0aWFsUnVudGltZVZhbHVlc1NuYXBzaG90ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXMpO1xuICAgIHRoaXMuc25hcHNob3RSZWFkeSA9IHRydWU7XG4gIH1cblxuICBpc0Zvcm1WYWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwR3JvdXBGb3JtLnZhbGlkICYmICEhdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCAmJiB0aGlzLmhhc0NoYW5nZXMoKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1iZy13aGl0ZSBjcWEtcHgtNCBjcWEtcHktMiBjcWEtaC1mdWxsXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtYmxhY2stMTAwIGNxYS1tYi00XCI+XG4gICAge3sgZWRpdE1vZGUgPyAnRWRpdCBTdGVwIEdyb3VwIFRlc3QgU3RlcCcgOiAnQ3JlYXRlIFN0ZXAgR3JvdXAgVGVzdCBTdGVwJyB9fVxuICA8L2gyPlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWZsZXgtMSBjcWEtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgPCEtLSBTdGVwIEdyb3VwIFNlbGVjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTZcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgU2VsZWN0IFN0ZXAgR3JvdXA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgIFtmb3JtXT1cInN0ZXBHcm91cEZvcm1cIlxuICAgICAgICBbY29uZmlnXT1cInN0ZXBHcm91cENvbmZpZ1wiPlxuICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFN0ZXAgR3JvdXAgRGVzY3JpcHRpb24gLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRTdGVwR3JvdXBcIiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNGI1NTYzXVwiPkRlc2NyaXB0aW9uOjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1wLTMgY3FhLWJnLVsjZjlmYWZiXSBjcWEtcm91bmRlZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNlNWU3ZWJdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtWyMzNzQxNTFdXCIgW2lubmVySFRNTF09XCJnZXRTdGVwR3JvdXBEZXNjcmlwdGlvbigpXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuXG4gICAgPCEtLSBSdW50aW1lIFZhcmlhYmxlcyBTZWN0aW9uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFN0ZXBHcm91cFwiIGNsYXNzPVwiY3FhLW10LTYgY3FhLW1iLTRcIj5cbiAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTNcIj5cbiAgICAgICAgU2V0IFBhcmFtZXRlcnMgRGVmYXVsdCBWYWx1ZVxuICAgICAgPC9oMz5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtcHQtNFwiPlxuICAgICAgICA8IS0tIExvYWRpbmcgU3RhdGUgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtWyM2YjcyODBdXCI+TG9hZGluZyBydW50aW1lIHZhcmlhYmxlcy4uLjwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFJ1bnRpbWUgVmFyaWFibGVzIFRhYmxlcyAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzICYmIHJ1bnRpbWVWYXJpYWJsZXNcIiBjbGFzcz1cImNxYS1zcGFjZS15LTZcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjaGlsZEdyb3VwIG9mIHJ1bnRpbWVWYXJpYWJsZXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0zXCI+XG4gICAgICAgICAgICAgICgge3tpICsgMX19ICkge3sgY2hpbGRHcm91cC5uYW1lIH19XG4gICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaWxkR3JvdXAudmFyaWFibGVzICYmIGNoaWxkR3JvdXAudmFyaWFibGVzLmxlbmd0aCA+IDA7IGVsc2Ugbm9WYXJpYWJsZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1ib3JkZXIgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtcm91bmRlZC1sZyBjcWEtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJjcWEtYmctZ3JheS01MFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTIgY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyIE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImNxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtZXRlciBWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHZhcmlhYmxlIG9mIGNoaWxkR3JvdXAudmFyaWFibGVzOyBsZXQgaiA9IGluZGV4XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWdyYXktMTAwIGxhc3Q6Y3FhLWJvcmRlci1iLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMiBjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMxNjE2MTddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRW50ZXIgdmFsdWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFJ1bnRpbWVWYXJpYWJsZVZhbHVlKGNoaWxkR3JvdXAuaWQsIHZhcmlhYmxlLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUnVudGltZVZhcmlhYmxlQ2hhbmdlKGNoaWxkR3JvdXAuaWQsIHZhcmlhYmxlLm5hbWUsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1ZhcmlhYmxlcz5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1weS0yXCI+UnVudGltZSB2YXJpYWJsZSBub3QgYXZhaWxhYmxlPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIExvYWRpbmcgU3RhdGU6IG9ubHkgc2hvdyB3aGVuIGluaXRpYWxseSBsb2FkaW5nIChubyBvcHRpb25zIHlldCkuIExvYWQtbW9yZSBsb2FkaW5nIGlzIHNob3duIGluc2lkZSB0aGUgZHJvcGRvd24uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdTdGVwR3JvdXBzICYmIHN0ZXBHcm91cE9wdGlvbnMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZiNzI4MF1cIj5Mb2FkaW5nIHN0ZXAgZ3JvdXBzLi4uPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nU3RlcEdyb3VwcyAmJiBzdGVwR3JvdXBPcHRpb25zLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiY3FhLXRleHQtY2VudGVyIGNxYS1weS04IGNxYS10ZXh0LVsjOWNhM2FmXSBjcWEtdGV4dC1bMTRweF1cIj5cbiAgICAgIE5vIHN0ZXAgZ3JvdXBzIGF2YWlsYWJsZVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gKm5nSWY9XCIhaXNDcmVhdGluZ1N0ZXBcIiBjbGFzcz1cImNxYS1ib3JkZXItc29saWQgY3FhLXJvdW5kZWQtWzlweF0gY3FhLXctMS8yIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bIzNGNDNFRV1cIiB2YXJpYW50PVwiZmlsbGVkXCIgW3RleHRdPVwiZWRpdE1vZGUgPyAnVXBkYXRlIFN0ZXAnIDogJ0luc2VydCBTdGVwIEdyb3VwJ1wiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzRm9ybVZhbGlkKClcIlxuICAgICAgKGNsaWNrZWQpPVwib25DcmVhdGVTdGVwKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGRpdiAqbmdJZj1cImlzQ3JlYXRpbmdTdGVwXCIgY2xhc3M9XCJjcWEtdy0xLzIgY3FhLWZsZXgtMSBjcWEtbWluLWgtWzM4cHhdIGNxYS1yb3VuZGVkLVs4cHhdXCI+XG4gICAgICA8Y3FhLWJhZGdlIGxhYmVsPVwiQ3JlYXRpbmfigKZcIiBpY29uPVwiYXV0b3JlbmV3XCIgW2lzTG9hZGluZ109XCJ0cnVlXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgW2NlbnRlckNvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFtpbmxpbmVTdHlsZXNdPVwiJ21pbi1oZWlnaHQ6IDM4cHg7IGhlaWdodDogMzhweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7J1wiXG4gICAgICAgIHZhcmlhbnQ9XCJpbmZvXCIgc2l6ZT1cIm1lZGl1bVwiPjwvY3FhLWJhZGdlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
266
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1idWlsZGVyLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc3RlcC1idWlsZGVyL3N0ZXAtYnVpbGRlci1ncm91cC9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9zdGVwLWJ1aWxkZXIvc3RlcC1idWlsZGVyLWdyb3VwL3N0ZXAtYnVpbGRlci1ncm91cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFvQyxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQXVDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7OztBQTJCakYsTUFBTSxPQUFPLHlCQUF5QjtJQXFEcEMsWUFBb0IsRUFBZTtRQUFmLE9BQUUsR0FBRixFQUFFLENBQWE7UUFwRG5DLHNDQUFzQztRQUM3QixxQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO1FBRWxELDhEQUE4RDtRQUNyRCxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFFNUMsb0NBQW9DO1FBQzNCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUs5QywyQkFBMkI7UUFDbEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUtuQywwQ0FBMEM7UUFDakMsOEJBQXlCLEdBQVksS0FBSyxDQUFDO1FBS3BELHlHQUF5RztRQUNoRyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUV6QyxnQ0FBZ0M7UUFDdEIsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBRTdELGtFQUFrRTtRQUN4RCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXpELDBCQUEwQjtRQUNoQixjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUUvQyxtREFBbUQ7UUFDekMsdUJBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUUxRCxnREFBZ0Q7UUFDdEMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUl4RCxzQkFBaUIsR0FBMkIsSUFBSSxDQUFDO1FBQ2pELDBCQUFxQixHQUEyRCxFQUFFLENBQUM7UUFFbkYsMkRBQTJEO1FBQ25ELCtCQUEwQixHQUFrQixJQUFJLENBQUM7UUFDakQsaUNBQTRCLEdBQVcsSUFBSSxDQUFDO1FBQzVDLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBR3JDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDakMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7U0FDekMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNyQixHQUFHLEVBQUUsYUFBYTtZQUNsQixXQUFXLEVBQUUsbUJBQW1CO1lBQ2hDLFFBQVEsRUFBRSxLQUFLO1lBQ2YsVUFBVSxFQUFFLElBQUk7WUFDaEIsWUFBWSxFQUFFLElBQUk7WUFDbEIsT0FBTyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7WUFDbkMsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLENBQUM7WUFDRCxRQUFRLEVBQUUsQ0FBQyxLQUFhLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBQ0QsVUFBVSxFQUFFLENBQUMsS0FBYyxFQUFFLEVBQUU7Z0JBQzdCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzVDLENBQUM7U0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUM3QixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztTQUNqQzthQUFNLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDM0Msd0NBQXdDO1lBQ3hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO1lBQ2pHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQzdCLDBFQUEwRTtZQUMxRSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7YUFDakM7U0FDRjtRQUNELElBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVELElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1NBQ2pDO1FBQ0QsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDeEQsSUFBSSxDQUFDLCtCQUErQixFQUFFLENBQUM7U0FDeEM7UUFDRCxJQUFJLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUNsRSxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztTQUN4QztJQUNILENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDM0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDekYsSUFBSSxVQUFVLEVBQUU7Z0JBQ2QsdUVBQXVFO2dCQUN2RSxzRUFBc0U7Z0JBQ3RFLGtFQUFrRTtnQkFDbEUscUNBQXFDO2dCQUNyQyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztnQkFDOUQsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLElBQUksZ0JBQWdCLEtBQUssSUFBSSxDQUFDLGtCQUFrQixFQUFFO29CQUM1RSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO29CQUN4RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO29CQUNwQyw2RkFBNkY7b0JBQzdGLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTt3QkFDakIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7cUJBQy9CO2lCQUNGO2FBQ0Y7U0FDRjtJQUNILENBQUM7SUFFTyxxQkFBcUI7UUFDM0IsTUFBTSxPQUFPLEdBQW1CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2xFLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNaLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNmLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixLQUFLLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDbEIsQ0FBQyxDQUFDLENBQUM7UUFFSixJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ3JCLEdBQUcsSUFBSSxDQUFDLGVBQWU7WUFDdkIsT0FBTyxFQUFFLE9BQU87WUFDaEIsT0FBTyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxtQkFBbUI7U0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxXQUFtQjtRQUNuQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxXQUFXLENBQUMsQ0FBQztRQUM3RSxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7WUFDcEMsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7WUFDaEMsb0VBQW9FO1lBQ3BFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDMUM7SUFDSCxDQUFDO0lBRUQsdUJBQXVCO1FBQ3JCLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRTtZQUN2QyxNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQztZQUM1RCxPQUFPLFlBQVksQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDO1NBQ3ZDO1FBQ0QsT0FBTywwQkFBMEIsQ0FBQztJQUNwQyxDQUFDO0lBRU8sK0JBQStCO1FBQ3JDLG1FQUFtRTtRQUNuRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBRWhDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3pCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BDLElBQUksS0FBSyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ2pELE1BQU0sV0FBVyxHQUFvQyxFQUFFLENBQUM7b0JBQ3hELEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUNqQyx3RkFBd0Y7d0JBQ3hGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDOUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxhQUFhLElBQUksUUFBUSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUM7b0JBQzlFLENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO2lCQUNwRDtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCx5RkFBeUY7UUFDekYsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQy9CO0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLE9BQWUsRUFBRSxTQUFpQixFQUFFLEtBQWE7UUFDdkUsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN4QyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1NBQzFDO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUN6RCxDQUFDO0lBRUQsdUJBQXVCLENBQUMsT0FBZSxFQUFFLFNBQWlCO1FBQ3hELE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2hFLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU07WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxZQUFZO1FBQ1YsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtZQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztZQUMzQyxNQUFNLFFBQVEsR0FBc0I7Z0JBQ2xDLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVztnQkFDbEMsU0FBUyxFQUFFLElBQUksQ0FBQyxpQkFBaUI7Z0JBQ2pDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7YUFDN0MsQ0FBQztZQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxtRkFBbUY7SUFDbkYsVUFBVTtRQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLENBQUMsMENBQTBDO1NBQ3hEO1FBQ0Qsb0VBQW9FO1FBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFDRCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQztRQUNoRSxJQUFJLGtCQUFrQixLQUFLLElBQUksQ0FBQywwQkFBMEIsRUFBRTtZQUMxRCxPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztJQUMxRixDQUFDO0lBRUQsc0VBQXNFO0lBQzlELHNCQUFzQjtRQUM1QixtREFBbUQ7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMzQixPQUFPO1NBQ1I7UUFDRCx1RUFBdUU7UUFDdkUsdUVBQXVFO1FBQ3ZFLHVFQUF1RTtRQUN2RSx5RUFBeUU7UUFDekUsaUNBQWlDO1FBQ2pDLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDO1FBQ2hFLElBQUksSUFBSSxDQUFDLGFBQWEsSUFBSSxrQkFBa0IsS0FBSyxJQUFJLENBQUMsa0JBQWtCLEVBQUU7WUFDeEUsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLDBCQUEwQixHQUFHLGtCQUFrQixJQUFJLElBQUksQ0FBQztRQUM3RCxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUMvRSxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbkYsQ0FBQzs7c0hBclFVLHlCQUF5QjswR0FBekIseUJBQXlCLHlxQkM1QnRDLHUxTEFpSEE7MkZEckZhLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDRSx3QkFBd0IsUUFHNUIsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO2tHQUlyQixnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUdHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFHRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUdHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFHRyxjQUFjO3NCQUF0QixLQUFLO2dCQUdJLFVBQVU7c0JBQW5CLE1BQU07Z0JBR0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUdHLGdCQUFnQjtzQkFBekIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsIFNlbGVjdE9wdGlvbiB9IGZyb20gJy4uLy4uL2R5bmFtaWMtc2VsZWN0L2R5bmFtaWMtc2VsZWN0LWZpZWxkLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwVmFyaWFibGUge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHZhcmlhYmxlcz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwYXJhbWV0ZXJWYWx1ZT86IHN0cmluZyB9Pjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdGVwR3JvdXBGb3JtRGF0YSB7XG4gIHN0ZXBHcm91cElkOiBudW1iZXI7XG4gIHN0ZXBHcm91cD86IGFueTsgLy8gVGVzdENhc2Ugb2JqZWN0XG4gIHJ1bnRpbWVWYXJpYWJsZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07IC8vIFJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RlcEdyb3VwT3B0aW9uIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXN0ZXAtYnVpbGRlci1ncm91cCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdGVwLWJ1aWxkZXItZ3JvdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH1cbn0pXG5leHBvcnQgY2xhc3MgU3RlcEJ1aWxkZXJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIE9wdGlvbnMgZm9yIHN0ZXAgZ3JvdXAgZHJvcGRvd24gKi9cbiAgQElucHV0KCkgc3RlcEdyb3VwT3B0aW9uczogU3RlcEdyb3VwT3B0aW9uW10gPSBbXTtcblxuICAvKiogSW5kaWNhdGVzIGlmIG1vcmUgc3RlcCBncm91cHMgYXJlIGF2YWlsYWJsZSBmb3IgbG9hZGluZyAqL1xuICBASW5wdXQoKSBoYXNNb3JlU3RlcEdyb3VwczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBzdGVwIGdyb3VwcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdTdGVwR3JvdXBzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEluaXRpYWwgc3RlcCBncm91cCBJRCBmb3IgZWRpdCBtb2RlICovXG4gIEBJbnB1dCgpIGluaXRpYWxTdGVwR3JvdXBJZD86IG51bWJlcjtcblxuICAvKiogV2hldGhlciBpbiBlZGl0IG1vZGUgKi9cbiAgQElucHV0KCkgZWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogUnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwICovXG4gIEBJbnB1dCgpIHJ1bnRpbWVWYXJpYWJsZXM/OiBTdGVwR3JvdXBWYXJpYWJsZVtdO1xuXG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEV4aXN0aW5nIHJ1bnRpbWUgdmFyaWFibGUgdmFsdWVzIChmcm9tIHRlc3RTdGVwLnRlc3REYXRhRnVuY3Rpb25BcmdzKSAqL1xuICBASW5wdXQoKSBleGlzdGluZ1J1bnRpbWVWYWx1ZXM/OiB7IFtncm91cElkOiBzdHJpbmddOiB7IFtwYXJhbU5hbWU6IHN0cmluZ106IHN0cmluZyB9IH07XG5cbiAgLyoqIFRydWUgd2hpbGUgcGFyZW50IGlzIGNyZWF0aW5nIHRoZSBzdGVwIChBUEkgaW4gcHJvZ3Jlc3MpOyBzaG93IGxvYWRlciBvbiBDcmVhdGUvVXBkYXRlIFN0ZXAgYnV0dG9uICovXG4gIEBJbnB1dCgpIGlzQ3JlYXRpbmdTdGVwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGlzIGNyZWF0ZWQgKi9cbiAgQE91dHB1dCgpIGNyZWF0ZVN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPFN0ZXBHcm91cEZvcm1EYXRhPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gc3RlcCBncm91cCBpcyBzZWxlY3RlZCB0byBmZXRjaCBydW50aW1lIHZhcmlhYmxlcyAqL1xuICBAT3V0cHV0KCkgc3RlcEdyb3VwU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAvKiogRW1pdCB3aGVuIGNhbmNlbGxlZCAqL1xuICBAT3V0cHV0KCkgY2FuY2VsbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0IHdoZW4gbW9yZSBzdGVwIGdyb3VwcyBuZWVkIHRvIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgLyoqIEVtaXQgd2hlbiBzdGVwIGdyb3VwIHNlYXJjaCBxdWVyeSBjaGFuZ2VzICovXG4gIEBPdXRwdXQoKSBzZWFyY2hTdGVwR3JvdXBzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgc3RlcEdyb3VwRm9ybTogRm9ybUdyb3VwO1xuICBzdGVwR3JvdXBDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZztcbiAgc2VsZWN0ZWRTdGVwR3JvdXA6IFN0ZXBHcm91cE9wdGlvbiB8IG51bGwgPSBudWxsO1xuICBydW50aW1lVmFyaWFibGVWYWx1ZXM6IHsgW2dyb3VwSWQ6IHN0cmluZ106IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gfSA9IHt9O1xuXG4gIC8qKiBUcmFja3MgaW5pdGlhbCBzdGF0ZSBmb3IgZWRpdCBtb2RlIHRvIGRldGVjdCBjaGFuZ2VzICovXG4gIHByaXZhdGUgaW5pdGlhbFN0ZXBHcm91cElkU25hcHNob3Q6IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGluaXRpYWxSdW50aW1lVmFsdWVzU25hcHNob3Q6IHN0cmluZyA9ICd7fSc7XG4gIHByaXZhdGUgc25hcHNob3RSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5zdGVwR3JvdXBGb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBzdGVwR3JvdXBJZDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIGtleTogJ3N0ZXBHcm91cElkJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IFN0ZXAgR3JvdXAnLFxuICAgICAgbXVsdGlwbGU6IGZhbHNlLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogdHJ1ZSxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3VwcyxcbiAgICAgIG9wdGlvbnM6IFtdLFxuICAgICAgb25DaGFuZ2U6ICh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25TdGVwR3JvdXBDaGFuZ2UodmFsdWUpO1xuICAgICAgfSxcbiAgICAgIG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4ge1xuICAgICAgICB0aGlzLnNlYXJjaFN0ZXBHcm91cHMuZW1pdChxdWVyeSk7XG4gICAgICB9LFxuICAgICAgb25Mb2FkTW9yZTogKHF1ZXJ5Pzogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZE1vcmVTdGVwR3JvdXBzLmVtaXQocXVlcnkgfHwgJycpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgdGhpcy5zZXRJbml0aWFsU3RlcEdyb3VwVmFsdWUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBBdXRvLXNlbGVjdCBmaXJzdCBvcHRpb24gaWYgYXZhaWxhYmxlXG4gICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMuc3RlcEdyb3VwT3B0aW9uc1swXTtcbiAgICAgIHRoaXMuc3RlcEdyb3VwRm9ybS5wYXRjaFZhbHVlKHsgc3RlcEdyb3VwSWQ6IGZpcnN0T3B0aW9uLmlkIH0pO1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZpcnN0T3B0aW9uO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc3RlcEdyb3VwT3B0aW9ucyddIHx8IGNoYW5nZXNbJ2hhc01vcmVTdGVwR3JvdXBzJ10gfHwgY2hhbmdlc1snaXNMb2FkaW5nU3RlcEdyb3VwcyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVN0ZXBHcm91cENvbmZpZygpO1xuICAgICAgLy8gV2hlbiBzdGVwR3JvdXBPcHRpb25zIGNoYW5nZSwgY2hlY2sgaWYgd2UgbmVlZCB0byBzZXQgdGhlIGluaXRpYWwgdmFsdWVcbiAgICAgIGlmICh0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgICB0aGlzLnNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snaW5pdGlhbFN0ZXBHcm91cElkJ10gJiYgdGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIHRoaXMuc2V0SW5pdGlhbFN0ZXBHcm91cFZhbHVlKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydydW50aW1lVmFyaWFibGVzJ10gJiYgdGhpcy5ydW50aW1lVmFyaWFibGVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2V4aXN0aW5nUnVudGltZVZhbHVlcyddICYmIHRoaXMuZXhpc3RpbmdSdW50aW1lVmFsdWVzKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVSdW50aW1lVmFyaWFibGVWYWx1ZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldEluaXRpYWxTdGVwR3JvdXBWYWx1ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgIGNvbnN0IGZvdW5kR3JvdXAgPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMuZmluZChvcHQgPT4gb3B0LmlkID09PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCk7XG4gICAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgICAvLyBPbmx5IHBhdGNoIHRoZSBmb3JtIHRvIHRoZSBpbml0aWFsIHZhbHVlIGlmIHRoZSB1c2VyIGhhc24ndCBwaWNrZWQgYVxuICAgICAgICAvLyBkaWZmZXJlbnQgb3B0aW9uIHlldC4gU3Vic2VxdWVudCBzdGVwR3JvdXBPcHRpb25zIGNoYW5nZXMgKGUuZy4gdGhlXG4gICAgICAgIC8vIHJlZmV0Y2ggZHluYW1pYy1zZWxlY3QgZmlyZXMgb24gZXZlcnkgZHJvcGRvd24gcmVvcGVuKSBtdXN0IE5PVFxuICAgICAgICAvLyBjbG9iYmVyIGEgdXNlci1tb2RpZmllZCBzZWxlY3Rpb24uXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGb3JtVmFsdWUgPSB0aGlzLnN0ZXBHcm91cEZvcm0udmFsdWUuc3RlcEdyb3VwSWQ7XG4gICAgICAgIGlmIChjdXJyZW50Rm9ybVZhbHVlID09IG51bGwgfHwgY3VycmVudEZvcm1WYWx1ZSA9PT0gdGhpcy5pbml0aWFsU3RlcEdyb3VwSWQpIHtcbiAgICAgICAgICB0aGlzLnN0ZXBHcm91cEZvcm0ucGF0Y2hWYWx1ZSh7IHN0ZXBHcm91cElkOiB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCB9KTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwID0gZm91bmRHcm91cDtcbiAgICAgICAgICAvLyBDYXB0dXJlIHNuYXBzaG90IGZvciBjaGFuZ2UgZGV0ZWN0aW9uICh3aWxsIGJlIHJlY2FwdHVyZWQgaWYgcnVudGltZSB2YXJpYWJsZXMgbG9hZCBsYXRlcilcbiAgICAgICAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xuICAgICAgICAgICAgdGhpcy5jYXB0dXJlSW5pdGlhbFNuYXBzaG90KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGVwR3JvdXBDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gPSB0aGlzLnN0ZXBHcm91cE9wdGlvbnMubWFwKGdyb3VwID0+ICh7XG4gICAgICBpZDogZ3JvdXAuaWQsXG4gICAgICB2YWx1ZTogZ3JvdXAuaWQsXG4gICAgICBuYW1lOiBncm91cC5uYW1lLFxuICAgICAgbGFiZWw6IGdyb3VwLm5hbWVcbiAgICB9KSk7XG5cbiAgICB0aGlzLnN0ZXBHcm91cENvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuc3RlcEdyb3VwQ29uZmlnLFxuICAgICAgb3B0aW9uczogb3B0aW9ucyxcbiAgICAgIGhhc01vcmU6IHRoaXMuaGFzTW9yZVN0ZXBHcm91cHMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU3RlcEdyb3Vwc1xuICAgIH07XG4gIH1cblxuICBvblN0ZXBHcm91cENoYW5nZShzdGVwR3JvdXBJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZm91bmRHcm91cCA9IHRoaXMuc3RlcEdyb3VwT3B0aW9ucy5maW5kKG9wdCA9PiBvcHQuaWQgPT09IHN0ZXBHcm91cElkKTtcbiAgICBpZiAoZm91bmRHcm91cCkge1xuICAgICAgdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCA9IGZvdW5kR3JvdXA7XG4gICAgICAvLyBDbGVhciBydW50aW1lIHZhcmlhYmxlcyB3aGVuIHN0ZXAgZ3JvdXAgY2hhbmdlc1xuICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXMgPSB7fTtcbiAgICAgIC8vIEVtaXQgZXZlbnQgdG8gZmV0Y2ggcnVudGltZSB2YXJpYWJsZXMgZm9yIHRoZSBzZWxlY3RlZCBzdGVwIGdyb3VwXG4gICAgICB0aGlzLnN0ZXBHcm91cFNlbGVjdGVkLmVtaXQoc3RlcEdyb3VwSWQpO1xuICAgIH1cbiAgfVxuXG4gIGdldFN0ZXBHcm91cERlc2NyaXB0aW9uKCk6IHN0cmluZyB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwR3JvdXA/LmRlc2NyaXB0aW9uKSB7XG4gICAgICBjb25zdCB0ZW1wRGVzY0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgIHRlbXBEZXNjRWxlbS5pbm5lckhUTUwgPSB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwLmRlc2NyaXB0aW9uO1xuICAgICAgcmV0dXJuIHRlbXBEZXNjRWxlbS50ZXh0Q29udGVudCB8fCAnJztcbiAgICB9XG4gICAgcmV0dXJuICdObyBkZXNjcmlwdGlvbiBhdmFpbGFibGUnO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplUnVudGltZVZhcmlhYmxlVmFsdWVzKCk6IHZvaWQge1xuICAgIC8vIEluaXRpYWxpemUgcnVudGltZSB2YXJpYWJsZSB2YWx1ZXMgZnJvbSBleGlzdGluZyB2YWx1ZXMgb3IgZW1wdHlcbiAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlcyA9IHt9O1xuXG4gICAgaWYgKHRoaXMucnVudGltZVZhcmlhYmxlcykge1xuICAgICAgdGhpcy5ydW50aW1lVmFyaWFibGVzLmZvckVhY2goZ3JvdXAgPT4ge1xuICAgICAgICBpZiAoZ3JvdXAudmFyaWFibGVzICYmIGdyb3VwLnZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBWYWx1ZXM6IHsgW3BhcmFtTmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICAgICAgICBncm91cC52YXJpYWJsZXMuZm9yRWFjaCh2YXJpYWJsZSA9PiB7XG4gICAgICAgICAgICAvLyBVc2UgZXhpc3RpbmcgdmFsdWUgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdXNlIGN1cnJlbnQgcGFyYW1ldGVyVmFsdWUgb3IgZW1wdHkgc3RyaW5nXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1ZhbHVlID0gdGhpcy5leGlzdGluZ1J1bnRpbWVWYWx1ZXM/Lltncm91cC5pZF0/Llt2YXJpYWJsZS5uYW1lXTtcbiAgICAgICAgICAgIGdyb3VwVmFsdWVzW3ZhcmlhYmxlLm5hbWVdID0gZXhpc3RpbmdWYWx1ZSB8fCB2YXJpYWJsZS5wYXJhbWV0ZXJWYWx1ZSB8fCAnJztcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cC5pZF0gPSBncm91cFZhbHVlcztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQ2FwdHVyZSBzbmFwc2hvdCBhZnRlciBydW50aW1lIHZhbHVlcyBhcmUgaW5pdGlhbGl6ZWQgKGZvciBlZGl0IG1vZGUgY2hhbmdlIGRldGVjdGlvbilcbiAgICBpZiAodGhpcy5lZGl0TW9kZSkge1xuICAgICAgdGhpcy5jYXB0dXJlSW5pdGlhbFNuYXBzaG90KCk7XG4gICAgfVxuICB9XG5cbiAgb25SdW50aW1lVmFyaWFibGVDaGFuZ2UoZ3JvdXBJZDogbnVtYmVyLCBwYXJhbU5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXNbZ3JvdXBJZF0pIHtcbiAgICAgIHRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzW2dyb3VwSWRdID0ge307XG4gICAgfVxuICAgIHRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzW2dyb3VwSWRdW3BhcmFtTmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIGdldFJ1bnRpbWVWYXJpYWJsZVZhbHVlKGdyb3VwSWQ6IG51bWJlciwgcGFyYW1OYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1tncm91cElkXT8uW3BhcmFtTmFtZV0gfHwgJyc7XG4gIH1cblxuICBoYXNSdW50aW1lVmFyaWFibGVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMucnVudGltZVZhcmlhYmxlcz8ubGVuZ3RoICYmXG4gICAgICAgICAgIHRoaXMucnVudGltZVZhcmlhYmxlcy5zb21lKGdyb3VwID0+ICEhZ3JvdXAudmFyaWFibGVzPy5sZW5ndGgpO1xuICB9XG5cbiAgb25DcmVhdGVTdGVwKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0ZXBHcm91cEZvcm0udmFsaWQpIHtcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuc3RlcEdyb3VwRm9ybS52YWx1ZTtcbiAgICAgIGNvbnN0IHN0ZXBEYXRhOiBTdGVwR3JvdXBGb3JtRGF0YSA9IHtcbiAgICAgICAgc3RlcEdyb3VwSWQ6IGZvcm1WYWx1ZS5zdGVwR3JvdXBJZCxcbiAgICAgICAgc3RlcEdyb3VwOiB0aGlzLnNlbGVjdGVkU3RlcEdyb3VwLFxuICAgICAgICBydW50aW1lVmFyaWFibGVzOiB0aGlzLnJ1bnRpbWVWYXJpYWJsZVZhbHVlc1xuICAgICAgfTtcbiAgICAgIHRoaXMuY3JlYXRlU3RlcC5lbWl0KHN0ZXBEYXRhKTtcbiAgICB9XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbGxlZC5lbWl0KCk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0cnVlIGlmIHRoZSBmb3JtIGhhcyBjaGFuZ2VkIGZyb20gaXRzIGluaXRpYWwgc3RhdGUgKGVkaXQgbW9kZSBvbmx5KSAqL1xuICBoYXNDaGFuZ2VzKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5lZGl0TW9kZSkge1xuICAgICAgcmV0dXJuIHRydWU7IC8vIEluIGNyZWF0ZSBtb2RlLCBhbHdheXMgYWxsb3cgc3VibWlzc2lvblxuICAgIH1cbiAgICAvLyBVbnRpbCB0aGUgc25hcHNob3QgaXMgcmVhZHksIHRyZWF0IGFzIG5vIGNoYW5nZXMgKGRpc2FibGUgYnV0dG9uKVxuICAgIGlmICghdGhpcy5zbmFwc2hvdFJlYWR5KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRTdGVwR3JvdXBJZCA9IHRoaXMuc3RlcEdyb3VwRm9ybS52YWx1ZS5zdGVwR3JvdXBJZDtcbiAgICBpZiAoY3VycmVudFN0ZXBHcm91cElkICE9PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZFNuYXBzaG90KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMucnVudGltZVZhcmlhYmxlVmFsdWVzKSAhPT0gdGhpcy5pbml0aWFsUnVudGltZVZhbHVlc1NuYXBzaG90O1xuICB9XG5cbiAgLyoqIENhcHR1cmVzIHRoZSBjdXJyZW50IHN0YXRlIGFzIHRoZSBiYXNlbGluZSBmb3IgY2hhbmdlIGRldGVjdGlvbiAqL1xuICBwcml2YXRlIGNhcHR1cmVJbml0aWFsU25hcHNob3QoKTogdm9pZCB7XG4gICAgLy8gT25seSBjYXB0dXJlIHdoZW4gYSB2YWxpZCBzdGVwIGdyb3VwIGlzIHNlbGVjdGVkXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkU3RlcEdyb3VwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFJlLWNhcHR1cmUgaXMgb25seSB2YWxpZCB3aGlsZSB0aGUgZm9ybSBzdGlsbCBwb2ludHMgYXQgdGhlIG9yaWdpbmFsXG4gICAgLy8gaW5pdGlhbFN0ZXBHcm91cElkIOKAlCB0aGF0IGNvdmVycyB0aGUgXCJydW50aW1lIHZhcnMgYXJyaXZlZCBhZnRlciB0aGVcbiAgICAvLyBpbml0aWFsIHNlbGVjdGlvbiB3YXMgcGF0Y2hlZFwiIGNhc2UuIE9uY2UgdGhlIHVzZXIgcGlja3MgYSBkaWZmZXJlbnRcbiAgICAvLyBncm91cCwga2VlcCB0aGUgb3JpZ2luYWwgYmFzZWxpbmUgc28gYGhhc0NoYW5nZXMoKWAgc3RheXMgdHJ1ZSBhbmQgdGhlXG4gICAgLy8gVXBkYXRlIGJ1dHRvbiByZW1haW5zIGVuYWJsZWQuXG4gICAgY29uc3QgY3VycmVudFN0ZXBHcm91cElkID0gdGhpcy5zdGVwR3JvdXBGb3JtLnZhbHVlLnN0ZXBHcm91cElkO1xuICAgIGlmICh0aGlzLnNuYXBzaG90UmVhZHkgJiYgY3VycmVudFN0ZXBHcm91cElkICE9PSB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmluaXRpYWxTdGVwR3JvdXBJZFNuYXBzaG90ID0gY3VycmVudFN0ZXBHcm91cElkIHx8IG51bGw7XG4gICAgdGhpcy5pbml0aWFsUnVudGltZVZhbHVlc1NuYXBzaG90ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5ydW50aW1lVmFyaWFibGVWYWx1ZXMpO1xuICAgIHRoaXMuc25hcHNob3RSZWFkeSA9IHRydWU7XG4gIH1cblxuICBpc0Zvcm1WYWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zdGVwR3JvdXBGb3JtLnZhbGlkICYmICEhdGhpcy5zZWxlY3RlZFN0ZXBHcm91cCAmJiB0aGlzLmhhc0NoYW5nZXMoKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1iZy13aGl0ZSBjcWEtcHgtNCBjcWEtcHktMiBjcWEtaC1mdWxsXCI+XG4gIDwhLS0gSGVhZGVyIC0tPlxuICA8aDIgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtYmxhY2stMTAwIGNxYS1tYi00XCI+XG4gICAge3sgZWRpdE1vZGUgPyAnRWRpdCBTdGVwIEdyb3VwIFRlc3QgU3RlcCcgOiAnQ3JlYXRlIFN0ZXAgR3JvdXAgVGVzdCBTdGVwJyB9fVxuICA8L2gyPlxuXG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWZsZXgtMSBjcWEtb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgPCEtLSBTdGVwIEdyb3VwIFNlbGVjdGlvbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTZcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1sZWFkaW5nLVsxMDAlXSBjcWEtYmxvY2sgY3FhLXRleHQtWzE0cHhdIGNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTFcIj5cbiAgICAgICAgU2VsZWN0IFN0ZXAgR3JvdXA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtbWwtMC41XCI+Kjwvc3Bhbj5cbiAgICAgIDwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgIFtmb3JtXT1cInN0ZXBHcm91cEZvcm1cIlxuICAgICAgICBbY29uZmlnXT1cInN0ZXBHcm91cENvbmZpZ1wiPlxuICAgICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFN0ZXAgR3JvdXAgRGVzY3JpcHRpb24gLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRTdGVwR3JvdXBcIiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1iLTJcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjNGI1NTYzXVwiPkRlc2NyaXB0aW9uOjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1wLTMgY3FhLWJnLVsjZjlmYWZiXSBjcWEtcm91bmRlZCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNlNWU3ZWJdXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtWyMzNzQxNTFdXCIgW2lubmVySFRNTF09XCJnZXRTdGVwR3JvdXBEZXNjcmlwdGlvbigpXCI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuXG4gICAgPCEtLSBSdW50aW1lIFZhcmlhYmxlcyBTZWN0aW9uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFN0ZXBHcm91cFwiIGNsYXNzPVwiY3FhLW10LTYgY3FhLW1iLTRcIj5cbiAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLW1iLTNcIj5cbiAgICAgICAgU2V0IFBhcmFtZXRlcnMgRGVmYXVsdCBWYWx1ZVxuICAgICAgPC9oMz5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtYm9yZGVyLXQgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtcHQtNFwiPlxuICAgICAgICA8IS0tIExvYWRpbmcgU3RhdGUgLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdGV4dC1bMTRweF0gY3FhLXRleHQtWyM2YjcyODBdXCI+TG9hZGluZyBydW50aW1lIHZhcmlhYmxlcy4uLjwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFJ1bnRpbWUgVmFyaWFibGVzIFRhYmxlcyAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmdSdW50aW1lVmFyaWFibGVzICYmIHJ1bnRpbWVWYXJpYWJsZXNcIiBjbGFzcz1cImNxYS1zcGFjZS15LTZcIj5cbiAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBjaGlsZEdyb3VwIG9mIHJ1bnRpbWVWYXJpYWJsZXM7IGxldCBpID0gaW5kZXhcIiBjbGFzcz1cImNxYS1tYi02XCI+XG4gICAgICAgICAgICA8aDQgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxNjE2MTddIGNxYS1tYi0zXCI+XG4gICAgICAgICAgICAgICgge3tpICsgMX19ICkge3sgY2hpbGRHcm91cC5uYW1lIH19XG4gICAgICAgICAgICA8L2g0PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaWxkR3JvdXAudmFyaWFibGVzICYmIGNoaWxkR3JvdXAudmFyaWFibGVzLmxlbmd0aCA+IDA7IGVsc2Ugbm9WYXJpYWJsZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1ib3JkZXIgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtcm91bmRlZC1sZyBjcWEtb3ZlcmZsb3ctaGlkZGVuXCI+XG4gICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtdGV4dC1sZWZ0XCI+XG4gICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9XCJjcWEtYmctZ3JheS01MFwiPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3FhLXB4LTQgY3FhLXB5LTIgY3FhLXRleHQtWzEycHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTYxNjE3XSBjcWEtYm9yZGVyLWIgY3FhLWJvcmRlci1ncmF5LTIwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUGFyYW1ldGVyIE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImNxYS1weC00IGNxYS1weS0yIGNxYS10ZXh0LVsxMnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzE2MTYxN10gY3FhLWJvcmRlci1iIGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIFBhcmFtZXRlciBWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHZhcmlhYmxlIG9mIGNoaWxkR3JvdXAudmFyaWFibGVzOyBsZXQgaiA9IGluZGV4XCIgXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNxYS1ib3JkZXItYiBjcWEtYm9yZGVyLWdyYXktMTAwIGxhc3Q6Y3FhLWJvcmRlci1iLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMiBjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMxNjE2MTddXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyB2YXJpYWJsZS5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJjcWEtcHgtNCBjcWEtcHktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXQgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInRW50ZXIgdmFsdWUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImdldFJ1bnRpbWVWYXJpYWJsZVZhbHVlKGNoaWxkR3JvdXAuaWQsIHZhcmlhYmxlLm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uUnVudGltZVZhcmlhYmxlQ2hhbmdlKGNoaWxkR3JvdXAuaWQsIHZhcmlhYmxlLm5hbWUsICRldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1ZhcmlhYmxlcz5cbiAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyNFRjQ0NDRdIGNxYS1weS0yXCI+UnVudGltZSB2YXJpYWJsZSBub3QgYXZhaWxhYmxlPC9wPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIExvYWRpbmcgU3RhdGU6IG9ubHkgc2hvdyB3aGVuIGluaXRpYWxseSBsb2FkaW5nIChubyBvcHRpb25zIHlldCkuIExvYWQtbW9yZSBsb2FkaW5nIGlzIHNob3duIGluc2lkZSB0aGUgZHJvcGRvd24uIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJpc0xvYWRpbmdTdGVwR3JvdXBzICYmIHN0ZXBHcm91cE9wdGlvbnMubGVuZ3RoID09PSAwXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdGV4dC1bIzZiNzI4MF1cIj5Mb2FkaW5nIHN0ZXAgZ3JvdXBzLi4uPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEVtcHR5IFN0YXRlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCIhaXNMb2FkaW5nU3RlcEdyb3VwcyAmJiBzdGVwR3JvdXBPcHRpb25zLmxlbmd0aCA9PT0gMFwiIGNsYXNzPVwiY3FhLXRleHQtY2VudGVyIGNxYS1weS04IGNxYS10ZXh0LVsjOWNhM2FmXSBjcWEtdGV4dC1bMTRweF1cIj5cbiAgICAgIE5vIHN0ZXAgZ3JvdXBzIGF2YWlsYWJsZVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLXctZnVsbCBjcWEtZ2FwLTIgY3FhLW10LWF1dG8gY3FhLXB0LTQgY3FhLWJvcmRlci10IGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICA8Y3FhLWJ1dHRvbiBjbGFzcz1cImNxYS13LTEvMiBjcWEtcm91bmRlZC1bMTBweF1cIiB2YXJpYW50PVwib3V0bGluZWRcIiB0ZXh0PVwiQ2FuY2VsXCIgW2N1c3RvbUNsYXNzXT1cIidjcWEtZmxleC0xIGNxYS13LWZ1bGwnXCJcbiAgICAgIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGNxYS1idXR0b24gKm5nSWY9XCIhaXNDcmVhdGluZ1N0ZXBcIiBjbGFzcz1cImNxYS1ib3JkZXItc29saWQgY3FhLXJvdW5kZWQtWzlweF0gY3FhLXctMS8yIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bIzNGNDNFRV1cIiB2YXJpYW50PVwiZmlsbGVkXCIgW3RleHRdPVwiZWRpdE1vZGUgPyAnVXBkYXRlIFN0ZXAnIDogJ0luc2VydCBTdGVwIEdyb3VwJ1wiIFtjdXN0b21DbGFzc109XCInY3FhLWZsZXgtMSBjcWEtdy1mdWxsJ1wiXG4gICAgICBbZGlzYWJsZWRdPVwiIWlzRm9ybVZhbGlkKClcIlxuICAgICAgKGNsaWNrZWQpPVwib25DcmVhdGVTdGVwKClcIj5cbiAgICA8L2NxYS1idXR0b24+XG4gICAgPGRpdiAqbmdJZj1cImlzQ3JlYXRpbmdTdGVwXCIgY2xhc3M9XCJjcWEtdy0xLzIgY3FhLWZsZXgtMSBjcWEtbWluLWgtWzM4cHhdIGNxYS1yb3VuZGVkLVs4cHhdXCI+XG4gICAgICA8Y3FhLWJhZGdlIGxhYmVsPVwiQ3JlYXRpbmfigKZcIiBpY29uPVwiYXV0b3JlbmV3XCIgW2lzTG9hZGluZ109XCJ0cnVlXCIgW2Z1bGxXaWR0aF09XCJ0cnVlXCIgW2NlbnRlckNvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFtpbmxpbmVTdHlsZXNdPVwiJ21pbi1oZWlnaHQ6IDM4cHg7IGhlaWdodDogMzhweDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7J1wiXG4gICAgICAgIHZhcmlhbnQ9XCJpbmZvXCIgc2l6ZT1cIm1lZGl1bVwiPjwvY3FhLWJhZGdlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=