@messaia/cdk 18.1.0-rc21 → 18.1.0-rc23

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.
@@ -245,13 +245,28 @@ export class GenericFormBaseComponent extends BaseComponent {
245
245
  /**
246
246
  * Loads an item by ID.
247
247
  * This method fetches the item if the component is in edit mode and the service endpoint is defined.
248
+ *
249
+ * @param callback - A function to be called after the item has been successfully loaded.
250
+ * This function will receive the loaded item as an argument.
248
251
  */
249
- loadItem() {
252
+ loadItem(callback) {
250
253
  if (this.isEditMode && this.service?.endpoint) {
254
+ /* Set loading state to true to indicate that an item is being loaded */
251
255
  this.isLoading = true;
256
+ /* Trigger change detection to update the view with the loading state */
252
257
  this.changeDetectorRef.detectChanges();
258
+ /* Call the asynchronous method to load the item */
253
259
  this.loadItemAsync().subscribe({
254
- next: (_) => this.isLoading = false,
260
+ /* Handle the response when the item is successfully loaded */
261
+ next: (item) => {
262
+ /* Set loading state to false to indicate that loading has completed */
263
+ this.isLoading = false;
264
+ /* Execute the callback if provided, passing the loaded item */
265
+ if (callback) {
266
+ callback(item);
267
+ }
268
+ },
269
+ /* Handle any errors that occur during the loading process */
255
270
  error: (error) => this.parseErrors(error)
256
271
  });
257
272
  }
@@ -844,4 +859,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
844
859
  type: HostListener,
845
860
  args: ['document:keydown', ['$event']]
846
861
  }] } });
847
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1mb3JtLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvYmFzZS9jb21wb25lbnRzL2dlbmVyaWMtZm9ybS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQTRCLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNJLE9BQU8sRUFBbUIsU0FBUyxFQUE0QixNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFNcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFFakQsV0FBVztBQUVYLE1BQU0sT0FBZ0Isd0JBQTRGLFNBQVEsYUFBYTtJQXdPOUg7SUFDRztJQUNBO0lBQ0E7SUExT1g7O0dBRUU7SUFDSyxNQUFNLEdBQVcsS0FBSyxDQUFDO0lBRTlCOztPQUVHO0lBQ0ksVUFBVSxHQUFZLEtBQUssQ0FBQztJQUVuQzs7T0FFRztJQUNJLFVBQVUsR0FBc0IsVUFBVSxDQUFDO0lBRWxEOztPQUVHO0lBQ0kscUJBQXFCLEdBQVcsUUFBUSxDQUFDO0lBQ3pDLG9CQUFvQixHQUFXLEtB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QUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDbEMsTUFBTTtZQUNSLENBQUM7UUFDRixDQUFDO1FBRUQscURBQXFEO1FBQ3JELElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDYixDQUFDO0lBQ0YsQ0FBQzswSEFqN0JvQix3QkFBd0I7OEdBQXhCLHdCQUF3QixrV0EwTGxDLFVBQVU7OzJGQTFMQSx3QkFBd0I7a0JBRDdDLFNBQVM7MkpBbUNFLEVBQUU7c0JBRFosS0FBSztnQkFlSSxLQUFLO3NCQURkLEtBQUs7Z0JBT0ssSUFBSTtzQkFEZCxLQUFLO2dCQW1CQyxRQUFRO3NCQURkLEtBQUs7Z0JBT0MsY0FBYztzQkFEcEIsS0FBSztnQkFPQyxVQUFVO3NCQURoQixLQUFLO2dCQU9DLEtBQUs7c0JBRFgsS0FBSztnQkFPQyxRQUFRO3NCQURkLEtBQUs7Z0JBT0MsUUFBUTtzQkFEZCxLQUFLO2dCQXNGSSxVQUFVO3NCQURuQixTQUFTO3VCQUFDLFVBQVU7Z0JBT2QsS0FBSztzQkFEWCxZQUFZO3VCQUFDLE9BQU87Z0JBWVYsSUFBSTtzQkFEZCxLQUFLO2dCQThzQk4sbUJBQW1CO3NCQURsQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RlcHBlclNlbGVjdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBUeXBlLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgTmdGb3JtLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRTdGVwcGVyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc3RlcHBlcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgbWFwLCB0YXAgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi8uLi9jb21tb24vZnVuY3Rpb25zL3V0aWxzJztcclxuaW1wb3J0IHsgQWN0aW9uSXRlbSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvYWN0aW9uLWl0ZW0nO1xyXG5pbXBvcnQgeyBJRW50aXR5IH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9lbnRpdHknO1xyXG5pbXBvcnQgeyBTYXZlQWN0aW9uIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9zYXZlLWFjdGlvbic7XHJcbmltcG9ydCB7IGdldEZvcm1EZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybXMvZnVuY3Rpb25zL2Z1bmN0aW9ucyc7XHJcbmltcG9ydCB7IEZvcm1EZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vZm9ybXMvbW9kZWxzL2Zvcm0tZGVmaW5pdGlvbic7XHJcbmltcG9ydCB7IEZvcm1GaWVsZEdyb3VwRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL21vZGVscy9mb3JtLWZpZWxkLWdyb3VwLWRlZmluaXRpb24nO1xyXG5pbXBvcnQgeyBBcGlSZXNwb25zZSB9IGZyb20gJy4uLy4uL2h0dHAvbW9kZWxzL3Jlc3BvbnNlJztcclxuaW1wb3J0IHsgR2VuZXJpY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9odHRwL3NlcnZpY2VzL2dlbmVyaWMuc2VydmljZSc7XHJcbmltcG9ydCB7IElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2lnZW5lcmljLWZvcm0tYmFzZSc7XHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQgfSBmcm9tICcuL2Jhc2UuY29tcG9uZW50JztcclxuXHJcbi8vIEBkeW5hbWljXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHkgZXh0ZW5kcyBJRW50aXR5LCBUU2VydmljZSBleHRlbmRzIEdlbmVyaWNTZXJ2aWNlPFRFbnRpdHk+PiBleHRlbmRzIEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+LCBPbkNoYW5nZXMge1xyXG5cdC8qKlxyXG4gKiBUaGUgYWN0aW9uIG9mIHRoZSBmb3JtIChhZGQgfCBlZGl0KS5cclxuICovXHJcblx0cHVibGljIGFjdGlvbjogc3RyaW5nID0gJ2FkZCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluZGljYXRlcyBpZiB0aGUgZm9ybSBpcyBpbiBlZGl0IG1vZGUuXHJcblx0ICovXHJcblx0cHVibGljIGlzRWRpdE1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogU2F2ZSBhY3Rpb24gZW51bWVyYXRpb24uXHJcblx0ICovXHJcblx0cHVibGljIFNhdmVBY3Rpb246IHR5cGVvZiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbjtcclxuXHJcblx0LyoqXHJcblx0ICogTmF2aWdhdGlvbiByb3V0ZXMuXHJcblx0ICovXHJcblx0cHVibGljIGVkaXRTYXZlQW5kQ2xvc2VSb3V0ZTogc3RyaW5nID0gJy4uLy4uLyc7XHJcblx0cHVibGljIGFkZFNhdmVBbmRDbG9zZVJvdXRlOiBzdHJpbmcgPSAnLi4vJztcclxuXHRwdWJsaWMgYWRkU2F2ZUFuZEVkaXRSb3V0ZTogc3RyaW5nID0gJy4uL2VkaXQvJztcclxuXHRwdWJsaWMgYWRkU2F2ZUFuZE5ld1JvdXRlOiBzdHJpbmcgPSAnLi4vYWRkJztcclxuXHRwdWJsaWMgbGlzdFJvdXRlOiBzdHJpbmcgPSB0aGlzLmFkZFNhdmVBbmRDbG9zZVJvdXRlO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgSUQgb2YgdGhlIGl0ZW0gdG8gbG9hZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgX2lkPzogbnVtYmVyIHwgc3RyaW5nO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgSUQgb2YgdGhlIGl0ZW0gdG8gbG9hZC5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBnZXQgaWQoKTogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2lkOyB9XHJcblx0cHVibGljIHNldCBpZChpZDogbnVtYmVyIHwgc3RyaW5nIHwgdW5kZWZpbmVkKSB7XHJcblx0XHRpZiAodGhpcy5faWQgIT0gaWQpIHtcclxuXHRcdFx0dGhpcy5faWQgPSBpZDtcclxuXHRcdFx0dGhpcy5hY3Rpb24gPSAnZWRpdCc7XHJcblx0XHRcdHRoaXMuaXNFZGl0TW9kZSA9IHRydWU7XHJcblx0XHRcdHRoaXMubGlzdFJvdXRlID0gdGhpcy5lZGl0U2F2ZUFuZENsb3NlUm91dGU7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgY3VycmVudCBpdGVtIHRvIGFkZCBvciBlZGl0LlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHJvdGVjdGVkIF9pdGVtPzogVEVudGl0eTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGN1cnJlbnQgaXRlbSB0byBhZGQgb3IgZWRpdC5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBnZXQgaXRlbSgpOiBURW50aXR5IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2l0ZW07IH1cclxuXHRwdWJsaWMgc2V0IGl0ZW0oaXRlbTogVEVudGl0eSB8IHVuZGVmaW5lZCkge1xyXG5cdFx0aWYgKHRoaXMuX2l0ZW0gIT09IGl0ZW0pIHtcclxuXHRcdFx0dGhpcy5faXRlbSA9IGl0ZW07XHJcblx0XHRcdHRoaXMuaWQgPz89IGl0ZW0/LmlkO1xyXG5cdFx0XHR0aGlzLmJ1aWxkRmllbGRzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXByZXNlbnRzIHRoZSByZXF1ZXN0IGVycm9ycy5cclxuXHQgKi9cclxuXHRwdWJsaWMgZXJyb3JzOiBBcnJheTxzdHJpbmc+ID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuXHJcblx0LyoqXHJcblx0ICogSW5jbHVkZXMgZmllbGRzIGZvciBxdWVyeS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBpbmNsdWRlczogc3RyaW5nW10gPSBbXTtcclxuXHJcblx0LyoqXHJcblx0ICogVXBkYXRlIGluY2x1ZGVzIGZpZWxkcyBmb3IgcXVlcnkuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgdXBkYXRlSW5jbHVkZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFByb2plY3Rpb24gZmllbGRzIGZvciBxdWVyeS5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBwcm9qZWN0aW9uPzogc3RyaW5nW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFF1ZXJ5IHBhcmFtZXRlcnMuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcXVlcnk6IGFueSA9IHt9O1xyXG5cclxuXHQvKipcclxuXHQgKiBSZWFkLW9ubHkgZmxhZy5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyByZWFkb25seTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBEaXNhYmxlZCBmbGFnLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBjdXJyZW50IGRhdGUuXHJcblx0ICovXHJcblx0cHVibGljIGN1cnJlbnREYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcblx0LyoqXHJcblx0ICogRGF0ZSAmIHRpbWUgaW5wdXQgbWFzay5cclxuXHQgKi9cclxuXHRwdWJsaWMgZGF0ZVRpbWVNYXNrID0gWy9bMC0zXS8sIC9bMC05XS8sICcuJywgL1swLTFdLywgL1swLTldLywgJy4nLCAyLCAwLCAvWzEtMl0vLCAvWzAtOV0vLCAnICcsIC9bMC0yXS8sIC9bMC05XS8sICc6JywgL1swLTVdLywgL1swLTldL107XHJcblxyXG5cdC8qKlxyXG5cdCAqIERhdGUgaW5wdXQgbWFzay5cclxuXHQgKi9cclxuXHRwdWJsaWMgZGF0ZU1hc2sgPSBbL1swLTNdLywgL1swLTldLywgJy4nLCAvWzAtMV0vLCAvWzAtOV0vLCAnLicsIDIsIDAsIC9bMS0yXS8sIC9bMC05XS9dO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaW1lIGlucHV0IG1hc2suXHJcblx0ICovXHJcblx0cHVibGljIHRpbWVNYXNrID0gWy9bMC0yXS8sIC9bMC05XS8sICc6JywgL1swLTVdLywgL1swLTldL107XHJcblxyXG5cdC8qKlxyXG5cdCAqIERhdGUgdmFsaWRhdGlvbiBwYXR0ZXJuLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkYXRlUGF0dGVybjogc3RyaW5nID0gYCg/Oig/OjMxKFxcXFwvfC18XFxcXC4pKD86MD9bMTM1NzhdfDFbMDJdKSlcXFxcMXwoPzooPzoyOXwzMCkoXFxcXC98LXxcXFxcLikoPzowP1sxLDMtOV18MVswLTJdKVxcXFwyKSkoPzooPzoxWzYtOV18WzItOV1cXFxcZCk/XFxcXGR7Mn0pJHxeKD86MjkoXFxcXC98LXxcXFxcLikwPzJcXFxcMyg/Oig/Oig/OjFbNi05XXxbMi05XVxcXFxkKT8oPzowWzQ4XXxbMjQ2OF1bMDQ4XXxbMTM1NzldWzI2XSl8KD86KD86MTZ8WzI0NjhdWzA0OF18WzM1NzldWzI2XSkwMCkpKSkkfF4oPzowP1sxLTldfDFcXFxcZHwyWzAtOF0pKFxcXFwvfC18XFxcXC4pKD86KD86MD9bMS05XSl8KD86MVswLTJdKSlcXFxcNCg/Oig/OjFbNi05XXxbMi05XVxcXFxkKT9cXFxcZHsyfSlgO1xyXG5cclxuXHQvKipcclxuXHQgKiBQaG9uZSBwcmVmaXggdmFsaWRhdGlvbiBwYXR0ZXJuLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwaG9uZVByZWZpeFBhdHRlcm46IHN0cmluZyA9ICdeKDBcXFxcZHsyLDZ9KSQnO1xyXG5cclxuXHQvKipcclxuXHQgKiBQaG9uZSBudW1iZXIgdmFsaWRhdGlvbiBwYXR0ZXJuLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwaG9uZU51bWJlclBhdHRlcm46IHN0cmluZyA9ICdeKFxcXFxkezMsMzB9KSQnO1xyXG5cclxuXHQvKipcclxuXHQgKiBQYXNzd29yZCB2YWxpZGF0aW9uIHBhdHRlcm4uXHJcblx0ICovXHJcblx0cHVibGljIHBhc3N3b3JkUGF0dGVybjogc3RyaW5nID0gJ14oPz0uKlthLXpdKSg/PS4qW0EtWl0pKD89LipcXFxcZCkoPz0uKlskQCQhJSo/JiMuXSlbQS1aYS16XFxcXGQkQCQhJSo/JiMuXXs2LH0kJztcclxuXHJcblx0LyoqXHJcblx0ICogRWRpdG9yIG9wdGlvbnMgaW5jbHVkaW5nIGRlZmF1bHQgbW9kdWxlcyBhbmQgdG9vbGJhciBjb25maWd1cmF0aW9uLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0b3JPcHRpb25zID0ge1xyXG5cdFx0bW9kdWxlczoge1xyXG5cdFx0XHR0b29sYmFyOiBbXHJcblx0XHRcdFx0Wydib2xkJywgJ2l0YWxpYycsICd1bmRlcmxpbmUnXSxcclxuXHRcdFx0XHRbeyAnbGlzdCc6ICdvcmRlcmVkJyB9LCB7ICdsaXN0JzogJ2J1bGxldCcgfV0sXHJcblx0XHRcdFx0W3sgJ2luZGVudCc6ICctMScgfSwgeyAnaW5kZW50JzogJysxJyB9XSxcclxuXHRcdFx0XHRbeyAnc2l6ZSc6IFsnc21hbGwnLCBmYWxzZSwgJ2xhcmdlJywgJ2h1Z2UnXSB9XSxcclxuXHRcdFx0XHRbeyAnaGVhZGVyJzogWzEsIDIsIDMsIDQsIDUsIDYsIGZhbHNlXSB9XSxcclxuXHRcdFx0XHRbeyAnY29sb3InOiBuZXcgQXJyYXk8YW55PigpIH0sIHsgJ2JhY2tncm91bmQnOiBuZXcgQXJyYXk8YW55PigpIH1dLFxyXG5cdFx0XHRcdFsnbGluaycsICdpbWFnZSddXHJcblx0XHRcdF0sXHJcblx0XHRcdGNsaXBib2FyZDoge1xyXG5cdFx0XHRcdG1hdGNoVmlzdWFsOiBmYWxzZVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fTtcclxuXHJcblx0LyoqXHJcblx0ICogSWYgdHJ1ZSwgc2hvd3MgdGhlICdEZWxldGUnIG1lbnUuXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0YWJsZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRvb2xiYXIgbWVudSBpdGVtcy5cclxuXHQgKi9cclxuXHRwdWJsaWMgdG9vbGJhck1lbnVJdGVtczogQWN0aW9uSXRlbVtdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRvb2xiYXIgYWN0aW9uIGJ1dHRvbnMuXHJcblx0ICovXHJcblx0cHVibGljIHRvb2xiYXJBY3Rpb25zOiBBY3Rpb25JdGVtPFRFbnRpdHksIElHZW5lcmljRm9ybUJhc2VDb21wb25lbnQ8VEVudGl0eT4+W10gPSBbe1xyXG5cdFx0aWNvbjogJ3JlZnJlc2gnLFxyXG5cdFx0dG9vbHRpcDogJGxvY2FsaXplYDpAQHJlZnJlc2hQYWdlOlJlZnJlc2ggdGhlIHBhZ2VgLFxyXG5cdFx0ZXZlbnQ6ICgpID0+IHRoaXMucmVsb2FkUGFnZSgpLFxyXG5cdH1dO1xyXG5cclxuXHQvKipcclxuXHQgKiBNYXRTdGVwcGVyIHJlZmVyZW5jZS5cclxuXHQgKi9cclxuXHRAVmlld0NoaWxkKE1hdFN0ZXBwZXIpXHJcblx0cHJvdGVjdGVkIG1hdFN0ZXBwZXI/OiBNYXRTdGVwcGVyO1xyXG5cclxuXHQvKipcclxuXHQgKiBSZWZlcmVuY2UgdG8gdGhlIGlucHV0IGVsZW1lbnRzLlxyXG5cdCAqL1xyXG5cdEBWaWV3Q2hpbGRyZW4oJ2ZvY3VzJylcclxuXHRwdWJsaWMgaW5wdXQ6IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogRm9ybSBncm91cCBpbnN0YW5jZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgX2Zvcm0/OiBOZ0Zvcm0gfCBGb3JtR3JvdXA7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZvcm0gZ3JvdXAuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgZ2V0IGZvcm0oKTogTmdGb3JtIHwgRm9ybUdyb3VwIHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2Zvcm07IH1cclxuXHRwdWJsaWMgc2V0IGZvcm0oZm9ybTogTmdGb3JtIHwgRm9ybUdyb3VwIHwgdW5kZWZpbmVkKSB7XHJcblx0XHR0aGlzLl9mb3JtID0gZm9ybTtcclxuXHRcdHRoaXMub25BZnRlckZvcm1CdWlsZCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2V0cyB0aGUgZm9ybSB2YWx1ZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgYWJzdHJhY3QgZ2V0IGZvcm1WYWx1ZSgpOiBURW50aXR5IHwgYW55O1xyXG5cclxuXHQvKipcclxuXHQgKiBGb3JtIGRlZmluaXRpb24uXHJcblx0ICovXHJcblx0cHVibGljIGZvcm1EZWZpbml0aW9uPzogRm9ybURlZmluaXRpb247XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZpZWxkIGdyb3VwcyBkZWZpbml0aW9uLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBmaWVsZEdyb3Vwcz86IEZvcm1GaWVsZEdyb3VwRGVmaW5pdGlvbltdO1xyXG5cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3Rvci5cclxuXHQgKiBAcGFyYW0gc2VydmljZSBUaGUgc2VydmljZSB0byBtYW5hZ2UgdGhlIGVudGl0eS5cclxuXHQgKiBAcGFyYW0gcm91dGUgVGhlIGFjdGl2YXRlZCByb3V0ZS5cclxuXHQgKiBAcGFyYW0gY2hhbmdlRGV0ZWN0b3JSZWYgVGhlIGNoYW5nZSBkZXRlY3RvciByZWZlcmVuY2UuXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwdWJsaWMgZW50aXR5Q3RvcjogVHlwZTxURW50aXR5PixcclxuXHRcdHByb3RlY3RlZCBzZXJ2aWNlOiBUU2VydmljZSxcclxuXHRcdHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcblx0XHRwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcblx0KSB7XHJcblx0XHRzdXBlcihyb3V0ZSwgY2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cdFx0dGhpcy5saXN0Um91dGUgPSB0aGlzLmFkZFNhdmVBbmRDbG9zZVJvdXRlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2FsbGVkIGFmdGVyIHRoZSBjb25zdHJ1Y3RvciwgaW5pdGlhbGl6aW5nIGlucHV0IHByb3BlcnRpZXMsIFxyXG5cdCAqIGFuZCB0aGUgZmlyc3QgY2FsbCB0byBuZ09uQ2hhbmdlcy5cclxuXHQgKi9cclxuXHRuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHRcdHN1cGVyLm5nT25Jbml0KCk7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExpZmVjeWNsZSBob29rIHRoYXQgaXMgY2FsbGVkIGFmdGVyIGEgY29tcG9uZW50J3MgdmlldyBoYXMgYmVlbiBmdWxseSBpbml0aWFsaXplZC5cclxuXHQgKi9cclxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcblx0XHR0aGlzLmhhbmRsZUV4cGFuc2lvblBhbmVsQ2hhbmdlcyA9IHRoaXMuaXNFZGl0TW9kZTtcclxuXHRcdHN1cGVyLm5nQWZ0ZXJWaWV3SW5pdCgpO1xyXG5cclxuXHRcdC8qIFNldCBwYWdlIHRpdGxlICovXHJcblx0XHR0aGlzLnRpdGxlID0gdGhpcy50aXRsZVNlcnZpY2UuZ2V0VGl0bGUoKTtcclxuXHJcblx0XHQvKiBTZXQgZm9jdXMgKi9cclxuXHRcdHRoaXMuZm9jdXMoKTtcclxuXHJcblx0XHQvKiBcclxuXHRcdCAqIEZvcmNlIGEgbmV3IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgc2luY2UgY2hhbmdlIGRldGVjdGlvbnMgXHJcblx0XHQgKiBoYXZlIGZpbmlzaGVkIHdoZW4gYG5nQWZ0ZXJWaWV3SW5pdGAgaXMgZXhlY3V0ZWQuXHJcblx0XHQgKi9cclxuXHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuXHRcdC8qIExpc3RlbiBmb3Igc3RlcHBlciBzZWxlY3Rpb24gY2hhbmdlcyAqL1xyXG5cdFx0dGhpcy5tYXRTdGVwcGVyPy5zZWxlY3Rpb25DaGFuZ2U/LnN1YnNjcmliZSgoZXZlbnQ6IFN0ZXBwZXJTZWxlY3Rpb25FdmVudCkgPT4gdGhpcy5vbkFmdGVyU3RlcENoYW5nZShldmVudCkpO1xyXG5cclxuXHRcdC8qIFNlbGVjdCB0aGUgYXBwcm9wcmlhdGUgc3RlcCBiYXNlZCBvbiB0aGUgVVJMIGhhc2ggYW5kIG1hcmsgcHJldmlvdXMgc3RlcHMgYXMgY29tcGxldGVkICovXHJcblx0XHR0aGlzLnNlbGVjdFN0ZXBCYXNlZE9uVXJsSGFzaCgpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2FsbGVkIGJlZm9yZSBhbnkgb3RoZXIgbGlmZWN5Y2xlIGhvb2suIFVzZSBpdCB0byBpbmplY3QgZGVwZW5kZW5jaWVzLCBcclxuXHQgKiBidXQgYXZvaWQgYW55IHNlcmlvdXMgd29yayBoZXJlLlxyXG5cdCAqIEBwYXJhbSBjaGFuZ2VzIFRoZSBjaGFuZ2VzIG9iamVjdC5cclxuXHQgKi9cclxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblx0XHRpZiAoXHJcblx0XHRcdChjaGFuZ2VzPy5pZD8uY3VycmVudFZhbHVlICYmIGNoYW5nZXMuaWQuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmlkLnByZXZpb3VzVmFsdWUpIHx8XHJcblx0XHRcdChjaGFuZ2VzPy5pdGVtPy5jdXJyZW50VmFsdWUgJiYgY2hhbmdlcy5pdGVtLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5pdGVtLnByZXZpb3VzVmFsdWUpXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5sb2FkSXRlbSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9hZHMgYW4gaXRlbSBieSBJRC5cclxuXHQgKiBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSBpdGVtIGlmIHRoZSBjb21wb25lbnQgaXMgaW4gZWRpdCBtb2RlIGFuZCB0aGUgc2VydmljZSBlbmRwb2ludCBpcyBkZWZpbmVkLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2FkSXRlbSgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmlzRWRpdE1vZGUgJiYgdGhpcy5zZXJ2aWNlPy5lbmRwb2ludCkge1xyXG5cdFx0XHR0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcblx0XHRcdHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cdFx0XHR0aGlzLmxvYWRJdGVtQXN5bmMoKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChfKSA9PiB0aGlzLmlzTG9hZGluZyA9IGZhbHNlLFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9hZHMgYW4gaXRlbSBieSBJRCBhc3luY2hyb25vdXNseS5cclxuXHQgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIG9mIHRoZSBsb2FkZWQgZW50aXR5LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2FkSXRlbUFzeW5jKCk6IE9ic2VydmFibGU8VEVudGl0eT4ge1xyXG5cdFx0aWYgKHRoaXMuaWQpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuc2VydmljZS5nZXQodGhpcy5pZCwgT2JqZWN0LmFzc2lnbih0aGlzLnF1ZXJ5IHx8IHt9LCB7IGluY2x1ZGVzOiB0aGlzLmluY2x1ZGVzPy5sZW5ndGggPyB0aGlzLmluY2x1ZGVzIDogdGhpcy51cGRhdGVJbmNsdWRlcywgcHJvamVjdGlvbjogdGhpcy5wcm9qZWN0aW9uPy5qb2luKCcsJykgfSksIHsgJ0Rpc2FibGUtQ2FjaGUnOiAnWWVzJyB9KS5waXBlKFxyXG5cdFx0XHRcdG1hcCh4ID0+IE9iamVjdC5hc3NpZ24odGhpcy5uZXdJbnN0YW5jZSgpLCB4KSksXHJcblx0XHRcdFx0dGFwKHggPT4ge1xyXG5cdFx0XHRcdFx0LyogU2V0IHRoZSBsb2FkZWQgaXRlbSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5pdGVtID0gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIDxURW50aXR5PngpO1xyXG5cclxuXHRcdFx0XHRcdC8qIEJ1aWxkIHRoZSBmb3JtICovXHJcblx0XHRcdFx0XHR0aGlzLmJ1aWxkRm9ybSgpO1xyXG5cclxuXHRcdFx0XHRcdC8qIFRyaWdnZXIgZXZlbnQgYWZ0ZXJJdGVtTG9hZGVkICovXHJcblx0XHRcdFx0XHR0aGlzLm9uQWZ0ZXJJdGVtTG9hZGVkKCk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbmV3IE9ic2VydmFibGUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhdmVzIGRhdGEgaW50byB0aGUgZGF0YWJhc2UuXHJcblx0ICogVGhpcyBtZXRob2QgdmFsaWRhdGVzIHRoZSBmb3JtLCBjaGVja3MgaWYgaXQncyB2YWxpZCwgYW5kIHNlbmRzIGRhdGEgdG8gdGhlIHNlcnZlciB0byBlaXRoZXIgdXBkYXRlIG9yIGNyZWF0ZSBhIG5ldyByZWNvcmQuXHJcblx0ICogQHBhcmFtIGFjdGlvbiBUaGUgc2F2ZSBhY3Rpb24gdG8gcGVyZm9ybS5cclxuXHQgKiBAcGFyYW0gZm9ybSBUaGUgZm9ybSB0byB2YWxpZGF0ZSBhbmQgc2F2ZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgc2F2ZShhY3Rpb246IFNhdmVBY3Rpb24gPSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSwgZm9ybT86IE5nRm9ybSB8IEZvcm1Hcm91cCk6IHZvaWQge1xyXG5cdFx0LyogVmFsaWRhdGUgdGhlIGZvcm0gKi9cclxuXHRcdHRoaXMudmFsaWRhdGVGb3JtKGZvcm0pO1xyXG5cclxuXHRcdC8qIENoZWNrIGlmIHRoZSBmb3JtIGlzIHZhbGlkICovXHJcblx0XHRmb3JtID0gdGhpcy5mb3JtIHx8IGZvcm07XHJcblx0XHRpZiAoZm9ybSAmJiAhdGhpcy5pc0Zvcm1WYWxpZChmb3JtKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0LyogSWYgaW4gZWRpdCBtb2RlLCB1cGRhdGUgdGhlIHJlY29yZCAqL1xyXG5cdFx0aWYgKHRoaXMuaXNFZGl0TW9kZSkge1xyXG5cdFx0XHQvKiBUaGUgZGF0YSBoYXMgbm90IGNoYW5nZWQ/ICovXHJcblx0XHRcdGlmIChmb3JtICYmIGZvcm0ucHJpc3RpbmUpIHtcclxuXHRcdFx0XHR0aGlzLm9uQWZ0ZXJTdWJtaXQoYWN0aW9uKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIEEgZmxhZyB0byBwcmV2ZW50IHNlbmRpbmcgdGhlIGZvcm0gdHdpY2UgKi9cclxuXHRcdFx0dGhpcy5pc1NhdmluZyA9IHRydWU7XHJcblxyXG5cdFx0XHQvKiBTZW5kIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIgKi9cclxuXHRcdFx0dGhpcy51cGRhdGUoeyBwYXJhbXM6IFV0aWxzLnRvSHR0cFBhcmFtcyh7IGluY2x1ZGVzOiB0aGlzLnVwZGF0ZUluY2x1ZGVzIH0pIH0pLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcblx0XHRcdFx0XHQvKiBBcHBseSBzYXZlZCBkYXRhIHRvIHRoZSBmb3JtICovXHJcblx0XHRcdFx0XHR0aGlzLm9uQWZ0ZXJTdWJtaXQoYWN0aW9uLCByZXNwb25zZSk7XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgdGhlIHVzZXIgY2xpY2tzICdhcHBseScgcmVsb2FkIHRoZSBwYWdlICovXHJcblx0XHRcdFx0XHRpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQpIHtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMucmVsb2FkLm9ic2VydmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yZWxvYWQuZW1pdCh0aGlzLmZvcm1WYWx1ZSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yZWxvYWRQYWdlKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0LyogT3RoZXJ3aXNlLCBjcmVhdGUgYSBuZXcgb25lICovXHJcblx0XHRlbHNlIHtcclxuXHRcdFx0LyogQSBmbGFnIHRvIHByZXZlbnQgc2VuZGluZyB0aGUgZm9ybSB0d2ljZSAqL1xyXG5cdFx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdC8qIFNlbmQgdGhlIGRhdGEgdG8gdGhlIHNlcnZlciAqL1xyXG5cdFx0XHR0aGlzLmNyZWF0ZTxBcGlSZXNwb25zZTxURW50aXR5Pj4oKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pZCA9IHJlc3BvbnNlPy52YWx1ZT8uaWQ7XHJcblx0XHRcdFx0XHR0aGlzLm9uQWZ0ZXJTdWJtaXQoYWN0aW9uLCByZXNwb25zZSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGZvcm0pIHtcclxuXHRcdFx0XHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBjdHIgPSBmb3JtIS5jb250cm9sc1trZXldO1xyXG5cdFx0XHRcdFx0XHRcdGN0ci5tYXJrQXNQcmlzdGluZSgpO1xyXG5cdFx0XHRcdFx0XHRcdGN0ci5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHRcdFx0XHRcdFx0XHRjdHIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhdmVzIGRhdGEgYW5kIG5hdmlnYXRlcyB0byB0aGUgZWRpdCB2aWV3LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhcHBseSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2F2ZShTYXZlQWN0aW9uLlNhdmVBbmRFZGl0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlbGV0ZXMgdGhlIGN1cnJlbnQgcmVjb3JkLlxyXG5cdCAqIFRoaXMgbWV0aG9kIHNob3dzIGEgY29uZmlybWF0aW9uIGRpYWxvZyBhbmQgZGVsZXRlcyB0aGUgcmVjb3JkIGlmIHRoZSB1c2VyIGNvbmZpcm1zLlxyXG5cdCAqIEBwYXJhbSBodHRwSGVhZGVycyBPcHRpb25hbCBIVFRQIGhlYWRlcnMgdG8gaW5jbHVkZSBpbiB0aGUgZGVsZXRlIHJlcXVlc3QuXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZShodHRwSGVhZGVycz86IEh0dHBIZWFkZXJzKTogdm9pZCB7XHJcblx0XHR0aGlzLnNob3dEZWxldGVJdGVtRGlhbG9nKCkuc3Vic2NyaWJlKChhY2NlcHQ6IGJvb2xlYW4pID0+IHtcclxuXHRcdFx0aWYgKGFjY2VwdCAmJiB0aGlzLmlkKSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZSh0aGlzLmlkISwgdW5kZWZpbmVkLCB7IGhlYWRlcnM6IGh0dHBIZWFkZXJzID8/IHRoaXMudG9IdHRwSGVhZGVycyh7ICdTaG93LU1lc3NhZ2UnOiAneWVzJyB9KSB9KVxyXG5cdFx0XHRcdFx0LnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuYmFjaygpO1xyXG5cdFx0XHRcdFx0fSwgZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmRlYnVnKGVycm9yKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluaXRpYWxpemVzIHRoZSBmb3JtLlxyXG5cdCAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIGZvcm0gYnkgZXh0cmFjdGluZyBxdWVyeSBwYXJhbWV0ZXJzLCBzZXR0aW5nIHRoZSBlbnRpdHkgSUQsIGFuZCBidWlsZGluZyB0aGUgZm9ybS5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW5pdCgpOiB2b2lkIHtcclxuXHRcdC8qIEdldCB0aGUgZW50aXR5IElEIGZyb20gdGhlIHF1ZXJ5ICovXHJcblx0XHRpZiAoIXRoaXMuaWQgJiYgIXRoaXMuaXRlbSkge1xyXG5cdFx0XHQvKiBBc3NpZ24gcXVlcnkgcGFyYW1zIGludG8gcXVlcnkgb2JqZWN0ICovXHJcblx0XHRcdGxldCBpZ25vcmVkUGFyYW1zOiBzdHJpbmdbXSA9IFsnaWQnLCAncmV0dXJudXJsJywgJ3BhbmVsSWQnXTtcclxuXHRcdFx0T2JqZWN0LmFzc2lnbih0aGlzLnF1ZXJ5LFxyXG5cdFx0XHRcdHRoaXMuc2FuaXRpemVPYmplY3QodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMgfHwge30sIC4uLmlnbm9yZWRQYXJhbXMpLFxyXG5cdFx0XHRcdHRoaXMuc2FuaXRpemVPYmplY3QodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhPy5xdWVyeSB8fCB7fSwgLi4uaWdub3JlZFBhcmFtcyksXHJcblx0XHRcdFx0dGhpcy5zYW5pdGl6ZU9iamVjdCh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zIHx8IHt9LCAuLi5pZ25vcmVkUGFyYW1zKVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0LyogR2V0IGlkIGZyb20gdGhlIHVybCAqL1xyXG5cdFx0XHRsZXQgaWQgPSA8YW55PnRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpO1xyXG5cdFx0XHRpZiAoaWQgPiAwKSB7XHJcblx0XHRcdFx0dGhpcy5pZCA9IGlkO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLmlkICYmIHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmlkKSB7XHJcblx0XHRcdFx0dGhpcy5pZCA9IHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmlkO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLm9uQWZ0ZXJTZXRJZCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgVEVudGl0eSAqL1xyXG5cdFx0aWYgKCF0aGlzLmlzRWRpdE1vZGUgJiYgIXRoaXMuZm9ybSkge1xyXG5cdFx0XHR0aGlzLml0ZW0gPSBPYmplY3QuYXNzaWduKHRoaXMubmV3SW5zdGFuY2UoKSwgdGhpcy5pdGVtIHx8IHt9LCB0aGlzLnF1ZXJ5IHx8IHt9KTtcclxuXHRcdFx0dGhpcy5idWlsZEZvcm0oKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgcGFuZWwgSUQgZnJvbSBxdWVyeSAqL1xyXG5cdFx0dGhpcy5zdWJ0aXRsZSB8fD0gdGhpcy5yb3V0ZS5zbmFwc2hvdD8uZGF0YT8uc3VidGl0bGU7XHJcblxyXG5cdFx0LyogQWRkIGxpc3QgbWVudSBpdGVtcyAqL1xyXG5cdFx0dGhpcy5hZGRUb29sYmFyTWVudUl0ZW1zKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBCdWlsZHMgdGhlIGZvcm0gZmllbGRzLlxyXG5cdCAqIFRoaXMgbWV0aG9kIGNvbnN0cnVjdHMgZm9ybSBmaWVsZHMgYmFzZWQgb24gdGhlIGVudGl0eSdzIGZvcm0gZGVmaW5pdGlvbiBhbmQgaW5jbHVkZXMgbmVjZXNzYXJ5IG5hdmlnYXRpb24gYW5kIG1lbnUgaXRlbXMuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGJ1aWxkRmllbGRzKCk6IHZvaWQge1xyXG5cdFx0LyogR2V0IGZvcm0gZGVmaW5pdGlvbiAqL1xyXG5cdFx0dGhpcy5mb3JtRGVmaW5pdGlvbiA9IGdldEZvcm1EZWZpbml0aW9uKHRoaXMubmV3SW5zdGFuY2UoKSk7XHJcblxyXG5cdFx0LyogU2V0IGluY2x1ZGVzIGZyb20gZm9ybSBkZWZpbml0aW9uLCBpZiBhbnkgKi9cclxuXHRcdHRoaXMuZm9ybURlZmluaXRpb24/LmluY2x1ZGVzPy5mb3JFYWNoKHggPT4gdGhpcy5pbmNsdWRlKHguZW50aXR5LCB4LnVwZGF0ZSkpO1xyXG5cclxuXHRcdC8qIEFkZCB0b29sYmFyIG1lbnUgaXRlbXMsIGlmIGFueSAqL1xyXG5cdFx0aWYgKHRoaXMuZm9ybURlZmluaXRpb24/LnRvb2xiYXJNZW51SXRlbXM/Lmxlbmd0aCkge1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMgPz89IFtdO1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMgPSB0aGlzLnRvb2xiYXJNZW51SXRlbXMuY29uY2F0KC4uLnRoaXMuZm9ybURlZmluaXRpb24/LnRvb2xiYXJNZW51SXRlbXMpO1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMuZm9yRWFjaCgoeCwgaSkgPT4geC5pbmRleCA/Pz0gaSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQ3JlYXRlIHRoZSBmb3JtIGZpZWxkcyB1c2luZyB0aGUgZW50aXR5IHR5cGUgKi9cclxuXHRcdHRoaXMuZmllbGRHcm91cHMgPSB0aGlzLmZvcm1EZWZpbml0aW9uPy5maWVsZEdyb3Vwcz8uZmlsdGVyKHggPT4gIXguaGlkZGVuKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEJ1aWxkcyBhIG5ldyBmb3JtLlxyXG5cdCAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCB0byBjb25zdHJ1Y3QgdGhlIGZvcm0gZm9yIHRoZSBzcGVjaWZpYyBlbnRpdHkuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGJ1aWxkRm9ybSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBWYWxpZGF0ZXMgdGhlIGZvcm0uXHJcblx0ICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgZm9ybSBhcyBzdWJtaXR0ZWQsIHVwZGF0ZXMgaXRzIHZhbGlkaXR5LCBhbmQgb3B0aW9uYWxseSBsb2dzIGRlYnVnIGluZm9ybWF0aW9uLlxyXG5cdCAqIEBwYXJhbSBmb3JtIFRoZSBmb3JtIHRvIHZhbGlkYXRlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyB2YWxpZGF0ZUZvcm0oZm9ybT86IE5nRm9ybSB8IEZvcm1Hcm91cCk6IHZvaWQge1xyXG5cdFx0dmFyIGZvcm0gPSBmb3JtIHx8IHRoaXMuZm9ybTtcclxuXHJcblx0XHQvKiBTZXQgdGhlIGZvcm0gYXMgc3VibWl0dGVkICovXHJcblx0XHRpZiAoZm9ybSAmJiBmb3JtIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcblx0XHRcdC8qIFNldCBmb3JtIGFzIHN1Ym1pdHRlZCAqL1xyXG5cdFx0XHQoZm9ybSBhcyBhbnkpWydzdWJtaXR0ZWQnXSA9IHRydWU7XHJcblxyXG5cdFx0XHQvKiBVcGRhdGUgdmFsdWUgYW5kIHZhbGlkaXR5ICovXHJcblx0XHRcdGZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFByaW50IHNvbWUgZGVidWcgaW5mb3JtYXRpb24gKi9cclxuXHRcdHRoaXMuZGVidWdGb3JtKGZvcm0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2tzIGlmIHRoZSBmb3JtIGlzIHZhbGlkLlxyXG5cdCAqIFRoaXMgbWV0aG9kIHZhbGlkYXRlcyB0aGUgZm9ybSwgbWFya3MgaW52YWxpZCBjb250cm9scywgYW5kIHNob3dzIGVycm9yIG1lc3NhZ2VzIGlmIGFueS5cclxuXHQgKiBAcGFyYW0gZm9ybSBUaGUgZm9ybSB0byBjaGVjayBmb3IgdmFsaWRpdHkuXHJcblx0ICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZm9ybSBpcyB2YWxpZC5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNGb3JtVmFsaWQoZm9ybT86IE5nRm9ybSB8IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG5cdFx0LyogUHJpbnQgc29tZSBkZWJ1ZyBpbmZvcm1hdGlvbiAqL1xyXG5cdFx0dGhpcy5kZWJ1Z0Zvcm0oZm9ybSk7XHJcblxyXG5cdFx0LyogSWYgdGhlIGZvcm0gaXMgbm90IHZhbGlkICovXHJcblx0XHRpZiAoZm9ybSAmJiAhZm9ybS52YWxpZCkge1xyXG5cdFx0XHQvKiBNYXJrIGludmFsaWQgY29udHJvbHMgYXMgZGlydHkgYW5kIHRvdWNoZWQgKi9cclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHQuZmlsdGVyKHggPT4gIWZvcm0uY29udHJvbHNbeF0udmFsaWQpXHJcblx0XHRcdFx0LmZvckVhY2goa2V5ID0+IHRoaXMuaW52YWxpZGF0ZUNvbnRyb2woZm9ybS5jb250cm9sc1trZXldKSk7XHJcblxyXG5cdFx0XHQvKiBTaG93IGVycm9yIG1lc3NhZ2VzICovXHJcblx0XHRcdChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0LyogV2FpdCB1bnRpbCAnbWF0LWVycm9yJyBpcyBkaXNwbGF5ZWQgKi9cclxuXHRcdFx0XHRhd2FpdCBuZXcgUHJvbWlzZSh5ID0+IHNldFRpbWVvdXQoeSwgMjAwKSk7XHJcblxyXG5cdFx0XHRcdC8qIFBhcnNlIHRoZSBlcnJvciBtZXNzYWdlcyAqL1xyXG5cdFx0XHRcdHZhciBlcnJvcnMgPSBBcnJheTxzdHJpbmc+KCk7XHJcblx0XHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybS5jb250cm9sc1t4XS52YWxpZClcclxuXHRcdFx0XHRcdC5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdFx0XHRcdC8qIEdldCBlcnJvciB0ZXh0ICovXHJcblx0XHRcdFx0XHRcdHZhciBlcnJvciA9IHRoaXMuZ2V0RWxlbWVudEVycm9yKChmb3JtLmNvbnRyb2xzW2tleV0gYXMgYW55KT8ubmF0aXZlRWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdGlmIChlcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdGVycm9ycy5wdXNoKGVycm9yKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8qIEJ1aWxkIGVycm9yIG1lc3NhZ2UgKi9cclxuXHRcdFx0XHR2YXIgbWVzc2FnZSA9IGVycm9ycy5sZW5ndGggPyBlcnJvcnMuc2xpY2UoMCwgMykuam9pbignXFxuJykgOiAkbG9jYWxpemVgOkBAc25hY2tiYXIuZXJyb3IucmVxdWlyZWQtZmllbGRzOkFsbCBmaWVsZHMgbWFya2VkIHdpdGggYW4gYXN0ZXJpc2sgKCopIGFyZSByZXF1aXJlZC5gO1xyXG5cclxuXHRcdFx0XHQvKiBTaG93IGEgbm90aWNlICovXHJcblx0XHRcdFx0dGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihtZXNzYWdlLCAnT2snLCB7IGR1cmF0aW9uOiAzMDAwLCBwYW5lbENsYXNzOiBbJ2Vycm9yJ10gfSk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9KSgpO1xyXG5cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzZXRzIGZvcm0gY29udHJvbHMuXHJcblx0ICogVGhpcyBtZXRob2QgbWFya3MgYWxsIGNvbnRyb2xzIGluIHRoZSBmb3JtIGFzIHByaXN0aW5lLCB1bnRvdWNoZWQsIGFuZCB1cGRhdGVzIHRoZWlyIHZhbGlkaXR5LlxyXG5cdCAqIEBwYXJhbSBmb3JtIFRoZSBmb3JtIHRvIHJlc2V0LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyByZXNldEZvcm0oZm9ybTogTmdGb3JtKTogdm9pZCB7XHJcblx0XHRpZiAoIWZvcm0pIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuXHRcdFx0bGV0IGN0ciA9IGZvcm0uY29udHJvbHNba2V5XTtcclxuXHRcdFx0Y3RyLm1hcmtBc1ByaXN0aW5lKCk7XHJcblx0XHRcdGN0ci5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHRcdFx0Y3RyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW52YWxpZGF0ZXMgY29udHJvbHMgcmVjdXJzaXZlbHkuXHJcblx0ICogVGhpcyBtZXRob2QgbWFya3MgYWxsIGNvbnRyb2xzIGluIHRoZSBncm91cCBhcyBkaXJ0eSBhbmQgdG91Y2hlZCBpZiB0aGV5IGFyZSBpbnZhbGlkLlxyXG5cdCAqIEBwYXJhbSBjb250cm9sIFRoZSBjb250cm9sIG9yIGdyb3VwIG9mIGNvbnRyb2xzIHRvIGludmFsaWRhdGUuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGludmFsaWRhdGVDb250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQge1xyXG5cdFx0LyogQ2hlY2sgdGhlIGNvbnRyb2wgYWdhaW5zdCBudWxsICovXHJcblx0XHRpZiAoIWNvbnRyb2wpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIENoZWNrIGlmIHRoZSBjb250cm9sIGlzIGEgZ3JvdXAgKi9cclxuXHRcdGxldCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuXHRcdGlmIChmb3JtR3JvdXA/LmNvbnRyb2xzKSB7XHJcblx0XHRcdE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scylcclxuXHRcdFx0XHQuZmlsdGVyKHggPT4gIWZvcm1Hcm91cC5jb250cm9sc1t4XS52YWxpZClcclxuXHRcdFx0XHQuZm9yRWFjaCh4ID0+IHRoaXMuaW52YWxpZGF0ZUNvbnRyb2woZm9ybUdyb3VwLmNvbnRyb2xzW3hdKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcblx0XHRcdGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2hvd3MgZm9ybSBlcnJvcnMuXHJcblx0ICogVGhpcyBtZXRob2QgbG9ncyBmb3JtIGNvbnRyb2wgZXJyb3JzIHRvIHRoZSBjb25zb2xlIGlmIGRlYnVnZ2luZyBpcyBlbmFibGVkLlxyXG5cdCAqIEBwYXJhbSBmb3JtIFRoZSBmb3JtIHRvIGRlYnVnLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkZWJ1Z0Zvcm0oZm9ybT86IE5nRm9ybSB8IEZvcm1Hcm91cCk6IHZvaWQge1xyXG5cdFx0aWYgKGZvcm0gJiYgdGhpcy5kZWJ1Zykge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnRm9ybTonLCBmb3JtKTtcclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gZm9ybS5jb250cm9sc1trZXldLmVycm9ycztcclxuXHRcdFx0XHRpZiAoY29udHJvbEVycm9ycyAhPSBudWxsKSB7XHJcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKGtleUVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ0tleSBjb250cm9sOiAnICsga2V5ICsgJywga2V5RXJyb3I6ICcgKyBrZXlFcnJvciArICcsIGVyciB2YWx1ZTogJywgY29udHJvbEVycm9yc1trZXlFcnJvcl0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZHMgdG9vbGJhciBtZW51IGl0ZW1zLlxyXG5cdCAqIFRoaXMgbWV0aG9kIGFkZHMgdGhlICdEZWxldGUnIG1lbnUgaXRlbSB0byB0aGUgdG9vbGJhciBpZiB0aGUgZW50aXR5IGlzIGRlbGV0YWJsZS5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYWRkVG9vbGJhck1lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdC8qIEFkZCAnRGVsZXRlJyBtZW51IGl0ZW0gKi9cclxuXHRcdGlmICh0aGlzLmRlbGV0YWJsZSkge1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMucHVzaCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdFx0XHRpY29uOiAnZGVsZXRlX2ZvcmV2ZXInLFxyXG5cdFx0XHRcdGljb25DbGFzczogJ3RjLW9yYW5nZS04MDAnLFxyXG5cdFx0XHRcdGV2ZW50OiAoKSA9PiB0aGlzLmRlbGV0ZSgpLFxyXG5cdFx0XHRcdGRpc2FibGU6ICgpID0+ICF0aGlzLmlkLFxyXG5cdFx0XHRcdGhpZGU6ICgpID0+ICF0aGlzLmNhbkRlbGV0ZUl0ZW0oKSxcclxuXHRcdFx0XHRpbmRleDogMTAwMFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy50b29sYmFyTWVudUl0ZW1zLmxlbmd0aCkge1xyXG5cdFx0XHQvKiBTb3J0IHRoZSBtZW51IGl0ZW1zIGJ5IGluZGV4ICovXHJcblx0XHRcdFV0aWxzLnNvcnRBcnJheSh0aGlzLnRvb2xiYXJNZW51SXRlbXMsICdpbmRleCcpO1xyXG5cclxuXHRcdFx0LyogQWRkIHRoZSB0b29sYmFyIG1lbnUgaXRlbXMgdG8gdGhlIHRoZSB0b29sYmFyIGFjdGlvbnMgKi9cclxuXHRcdFx0dGhpcy50b29sYmFyQWN0aW9ucy5wdXNoKHsgaWNvbjogJ21vcmVfdmVydCcsIGl0ZW1zOiB0aGlzLnRvb2xiYXJNZW51SXRlbXMgfSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkcyB0aGUgcHJldmlvdXMgVVJMIGluIHRoZSBoaXN0b3J5IGxpc3QuXHJcblx0ICogVGhpcyBtZXRob2QgbmF2aWdhdGVzIGJhY2sgdG8gdGhlIHByZXZpb3VzIFVSTCBvciBwZXJmb3JtcyBzcGVjaWZpYyBhY3Rpb25zIGJhc2VkIG9uIHRoZSBzYXZlIGFjdGlvbi5cclxuXHQgKiBAcGFyYW0gYWN0aW9uIFRoZSBzYXZlIGFjdGlvbiB0aGF0IGRldGVybWluZXMgdGhlIG5hdmlnYXRpb24gYmVoYXZpb3IuXHJcblx0ICovXHJcblx0cHVibGljIGJhY2soYWN0aW9uOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLnJlbG9hZC5vYnNlcnZlZCkge1xyXG5cdFx0XHQvKiBJZiB0aGVyZSBhcmUgb2JzZXJ2ZXJzIGZvciB0aGUgcmVsb2FkIGV2ZW50LCBlbWl0IHRoZSBjdXJyZW50IGZvcm0gdmFsdWUgKi9cclxuXHRcdFx0dGhpcy5yZWxvYWQuZW1pdCh0aGlzLmZvcm1WYWx1ZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvKiBObyBvYnNlcnZlcnMsIHByb2NlZWQgd2l0aCBuYXZpZ2F0aW9uIGxvZ2ljICovXHJcblx0XHRcdGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UgJiYgdGhpcy5yZXR1cm5VcmwpIHtcclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byB0aGUgcmV0dXJuIFVSTCBpZiBhY3Rpb24gaXMgU2F2ZUFuZENsb3NlIGFuZCByZXR1cm5VcmwgaXMgc2V0ICovXHJcblx0XHRcdFx0dGhpcy5uYXZpZ2F0ZVRvUmV0dXJuVXJsKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0LyogTm8gcmV0dXJuVXJsLCBjb250aW51ZSB3aXRoIG90aGVyIGFjdGlvbnMgKi9cclxuXHRcdFx0XHRpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlKSB7XHJcblx0XHRcdFx0XHQvKiBHbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBwYWdlIGluIGhpc3RvcnkgKi9cclxuXHRcdFx0XHRcdHRoaXMubG9jYXRpb24uYmFjaygpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQgJiYgcGFyc2VJbnQodGhpcy5pZD8udG9TdHJpbmcoKSA/PyAnMCcpID4gMCkge1xyXG5cdFx0XHRcdFx0LyogRm9yIFNhdmVBbmRFZGl0IGFjdGlvbiB3aXRoIGEgdmFsaWQgSUQgKi9cclxuXHRcdFx0XHRcdGlmICghdGhpcy5jdXJyZW50QmFzZVJvdXRlPy5lbmRzV2l0aCgnL2FkZCcpKSB7XHJcblx0XHRcdFx0XHRcdC8qIFJlbG9hZCB0aGUgcGFnZSBpZiB0aGUgY3VycmVudCByb3V0ZSBkb2VzIG5vdCBlbmQgd2l0aCAnL2FkZCcgKi9cclxuXHRcdFx0XHRcdFx0dGhpcy5yZWxvYWRQYWdlKCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byB0aGUgZWRpdCByb3V0ZSAqL1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5hZGRTYXZlQW5kRWRpdFJvdXRlfSR7dGhpcy5pZH1gXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogUmVwbGFjZSB0aGUgY3VycmVudCBoaXN0b3J5IGVudHJ5IHRvIHJlbW92ZSB0aGlzIHBhZ2UgZnJvbSB0aGUgaGlzdG9yeSAqL1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtgJHt0aGlzLmFkZFNhdmVBbmRFZGl0Um91dGV9JHt0aGlzLmlkfWBdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSkudG9TdHJpbmcoKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kTmV3KSB7XHJcblx0XHRcdFx0XHQvKiBIYW5kbGUgU2F2ZUFuZE5ldyBhY3Rpb24gKi9cclxuXHRcdFx0XHRcdHRoaXMuYWZ0ZXJSZWxvYWQoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgdGhlIHJldHVybiBVUkwuXHJcblx0ICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcmV0dXJuIFVSTCBhbmQgdXBkYXRlcyB0aGUgbGlzdCByb3V0ZSBhY2NvcmRpbmdseS5cclxuXHQgKiBAcGFyYW0gcmV0dXJuVXJsIFRoZSBVUkwgdG8gcmV0dXJuIHRvIGFmdGVyIHRoZSBjdXJyZW50IGFjdGlvbiBpcyBjb21wbGV0ZS5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2V0UmV0dXJuVXJsKHJldHVyblVybDogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRzdXBlci5zZXRSZXR1cm5VcmwocmV0dXJuVXJsKTtcclxuXHRcdHRoaXMubGlzdFJvdXRlID0gdGhpcy5yZXR1cm5VcmwgfHwgdGhpcy5saXN0Um91dGU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFRFbnRpdHkuXHJcblx0ICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgYSBuZXcgZW50aXR5IHVzaW5nIHRoZSBwcm92aWRlZCBjb25zdHJ1Y3Rvci5cclxuXHQgKiBAcGFyYW0gaW5pdCBPcHRpb25hbCBwYXJ0aWFsIGluaXRpYWxpemF0aW9uIG9iamVjdC5cclxuXHQgKiBAcmV0dXJucyBBIG5ldyBpbnN0YW5jZSBvZiBURW50aXR5LlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBuZXdJbnN0YW5jZShpbml0PzogUGFydGlhbDxURW50aXR5Pik6IFRFbnRpdHkge1xyXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmVudGl0eUN0b3IoaW5pdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGVzIHRoZSBlbnRpdHkuXHJcblx0ICogVGhpcyBtZXRob2Qgc2VuZHMgYSByZXF1ZXN0IHRvIGNyZWF0ZSBhIG5ldyBlbnRpdHkgb24gdGhlIHNlcnZlci5cclxuXHQgKiBAcGFyYW0gaHR0cE9wdGlvbnMgT3B0aW9uYWwgSFRUUCBvcHRpb25zIGZvciB0aGUgcmVxdWVzdC5cclxuXHQgKiBAcGFyYW0gaHR0cEhlYWRlcnMgT3B0aW9uYWwgSFRUUCBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdC5cclxuXHQgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIG9mIHRoZSBjcmVhdGVkIFRFbnRpdHkuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNyZWF0ZTxURW50aXR5PihodHRwT3B0aW9ucz86IE9iamVjdCwgaHR0cEhlYWRlcnM/OiBIdHRwSGVhZGVycyk6IE9ic2VydmFibGU8VEVudGl0eT4ge1xyXG5cdFx0dGhpcy5vbkJlZm9yZUNyZWF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXMuc2VydmljZS5jcmVhdGU8VEVudGl0eT4oXHJcblx0XHRcdHRoaXMuZm9ybVZhbHVlLFxyXG5cdFx0XHR1bmRlZmluZWQsXHJcblx0XHRcdE9iamVjdC5hc3NpZ24oaHR0cE9wdGlvbnMgfHwge30sIHsgaGVhZGVyczogaHR0cEhlYWRlcnMgPz8gdGhpcy50b0h0dHBIZWFkZXJzKHsgJ1Nob3ctTWVzc2FnZSc6ICd5ZXMnIH0pIH0pLFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZXMgdGhlIGVudGl0eS5cclxuXHQgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIHJlcXVlc3QgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGVudGl0eSBvbiB0aGUgc2VydmVyLlxyXG5cdCAqIEBwYXJhbSBodHRwT3B0aW9ucyBPcHRpb25hbCBIVFRQIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxyXG5cdCAqIEBwYXJhbSBodHRwSGVhZGVycyBPcHRpb25hbCBIVFRQIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0LlxyXG5cdCAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgb2YgdGhlIHVwZGF0ZWQgVEVudGl0eS5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgdXBkYXRlKGh0dHBPcHRpb25zPzogT2JqZWN0LCBodHRwSGVhZGVycz86IEh0dHBIZWFkZXJzKTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XHJcblx0XHR0aGlzLm9uQmVmb3JlVXBkYXRlKCk7XHJcblx0XHRyZXR1cm4gdGhpcy5zZXJ2aWNlLnVwZGF0ZSh0aGlzLmlkISxcclxuXHRcdFx0T2JqZWN0LmFzc2lnbih0aGlzLml0ZW0hLCB0aGlzLmZvcm1WYWx1ZSksXHJcblx0XHRcdHVuZGVmaW5lZCxcclxuXHRcdFx0T2JqZWN0LmFzc2lnbihodHRwT3B0aW9ucyB8fCB7fSwgeyBoZWFkZXJzOiBodHRwSGVhZGVycyA/PyB0aGlzLnRvSHR0cEhlYWRlcnMoeyAnU2hvdy1NZXNzYWdlJzogJ3llcycgfSksIH0pLFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluY2x1ZGVzIHNwZWNpZmllZCBuYXZpZ2F0aW9ucy5cclxuXHQgKiBUaGlzIG1ldGhvZCBhZGRzIHNwZWNpZmllZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgdG8gdGhlIGluY2x1ZGVzIGFycmF5LFxyXG5cdCAqIG9wdGlvbmFsbHkgYWRkaW5nIHRoZW0gdG8gdGhlIHVwZGF0ZUluY2x1ZGVzIGFycmF5IGFzIHdlbGwuXHJcblx0ICogQHBhcmFtIGluYyBUaGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSB0byBpbmNsdWRlLlxyXG5cdCAqIEBwYXJhbSB1cGRhdGUgV2hldGhlciB0byBpbmNsdWRlIGluIHVwZGF0ZUluY2x1ZGVzIGFycmF5LlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpbmNsdWRlKGluYzogc3RyaW5nLCB1cGRhdGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cdFx0dGhpcy5pbmNsdWRlcy5wdXNoKGluYyk7XHJcblx0XHRpZiAodXBkYXRlKSB7XHJcblx0XHRcdHRoaXMudXBkYXRlSW5jbHVkZXMucHVzaChpbmMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2tzIGlmIHRoZSBpdGVtIGlzIGRlbGV0YWJsZS5cclxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIGlmIHRoZSBjdXJyZW50IGl0ZW0gY2FuIGJlIGRlbGV0ZWQgYmFzZWQgb24gaXRzIHByb3BlcnRpZXMuXHJcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSBjYW4gYmUgZGVsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5EZWxldGVJdGVtKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jYW5EZWxldGUgJiYgKCF0aGlzLml0ZW0/Lmhhc093blByb3BlcnR5KCdkZWxldGFibGUnKSB8fCAodGhpcy5pdGVtIGFzIGFueSlbJ2RlbGV0YWJsZSddKTsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIElEIGlzIHNldC5cclxuXHQgKiBUaGlzIG1ldGhvZCB0cmlnZ2VycyB0aGUgbG9hZGluZyBvZiB0aGUgaXRlbSB3aGVuIHRoZSBJRCBpcyBzZXQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJTZXRJZCgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmlkKSB7XHJcblx0XHRcdHRoaXMubG9hZEl0ZW0oKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgc3RlcCBoYXMgY2hhbmdlZC5cclxuXHQgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIGFjdGlvbnMgdG8gYmUgdGFrZW4gd2hlbiB0aGUgc3RlcHBlciBzZWxlY3Rpb24gY2hhbmdlcy5cclxuXHQgKiBAcGFyYW0gJGV2ZW50IFRoZSBzdGVwcGVyIHNlbGVjdGlvbiBldmVudC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlclN0ZXBDaGFuZ2UoJGV2ZW50OiBTdGVwcGVyU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIHRoZSBzZWxlY3RlZCBzdGVwIGluIHRoZSBzdGVwcGVyIGJhc2VkIG9uIHRoZSBVUkwgaGFzaC5cclxuXHQgKiBNYXJrcyBhbGwgcHJldmlvdXMgc3RlcHMgYXMgY29tcGxldGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZWxlY3RTdGVwQmFzZWRPblVybEhhc2goKTogdm9pZCB7XHJcblx0XHQvKiBFbnN1cmUgd2UgYXJlIG5vdCBpbiBlZGl0IG1vZGUsIGFuZCB0aGF0IGJvdGggdGhlIHN0ZXBwZXIgYW5kIFVSTCBoYXNoIGFyZSBhdmFpbGFibGUgKi9cclxuXHRcdGlmICghdGhpcy5pc0VkaXRNb2RlICYmIHRoaXMubWF0U3RlcHBlciAmJiB0aGlzLnVybEhhc2gpIHtcclxuXHJcblx0XHRcdC8qIEZpbmQgdGhlIHN0ZXAgdGhhdCBtYXRjaGVzIHRoZSBzdGF0ZSBmcm9tIHRoZSBVUkwgaGFzaCAqL1xyXG5cdFx0XHRjb25zdCBtYXRjaGVkU3RlcCA9IHRoaXMubWF0U3RlcHBlci5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLnN0YXRlID09PSB0aGlzLnVybEhhc2gpO1xyXG5cclxuXHRcdFx0aWYgKG1hdGNoZWRTdGVwKSB7XHJcblx0XHRcdFx0LyogR2V0IHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCBzdGVwICovXHJcblx0XHRcdFx0Y29uc3QgbWF0Y2hlZEluZGV4ID0gdGhpcy5tYXRTdGVwcGVyLnN0ZXBzLnRvQXJyYXkoKS5pbmRleE9mKG1hdGNoZWRTdGVwKTtcclxuXHJcblx0XHRcdFx0LyogTWFyayBhbGwgcHJldmlvdXMgc3RlcHMgYXMgY29tcGxldGVkICovXHJcblx0XHRcdFx0dGhpcy5tYXRTdGVwcGVyLnN0ZXBzLmZvckVhY2goKHN0ZXAsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoaW5kZXggPCBtYXRjaGVkSW5kZXgpIHtcclxuXHRcdFx0XHRcdFx0c3RlcC5jb21wbGV0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHQvKiBTZXQgdGhlIHNlbGVjdGVkIHN0ZXAgYmFzZWQgb24gdGhlIG1hdGNoZWQgc3RhdGUgKi9cclxuXHRcdFx0XHR0aGlzLm1hdFN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9IG1hdGNoZWRJbmRleDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlbnRpdHkgaGFzIGJlZW4gbG9hZGVkLlxyXG5cdCAqIFRoaXMgbWV0aG9kIGhhbmRsZXMgYWN0aW9ucyB0byBiZSB0YWtlbiBhZnRlciB0aGUgZW50aXR5IGlzIGxvYWRlZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlckl0ZW1Mb2FkZWQoKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCBiZWZvcmUgdGhlIGZvcm0gaXMgYnVpbHQuXHJcblx0ICogVGhpcyBtZXRob2QgYWxsb3dzIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyBiZWZvcmUgdGhlIGZvcm0gaXMgY29uc3RydWN0ZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQmVmb3JlRm9ybUJ1aWxkKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZm9ybSBoYXMgYmVlbiBidWlsdC5cclxuXHQgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIGFjdGlvbnMgdG8gYmUgdGFrZW4gYWZ0ZXIgdGhlIGZvcm0gaXMgY29uc3RydWN0ZWQsXHJcblx0ICogc3VjaCBhcyBkaXNhYmxpbmcgZm9ybSBjb250cm9scyBpZiB0aGUgZm9ybSBpcyBzZXQgdG8gYmUgZGlzYWJsZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJGb3JtQnVpbGQoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5mb3JtICYmIHRoaXMuZGlzYWJsZWQpIHtcclxuXHRcdFx0T2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdFx0bGV0IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCA9IHRoaXMuZm9ybSEuY29udHJvbHNba2V5XTtcclxuXHRcdFx0XHRjb250cm9sPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiBjcmVhdGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkJlZm9yZUNyZWF0ZSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiB1cGRhdGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkJlZm9yZVVwZGF0ZSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBDYWxsZWQgYmVmb3JlIGRhdGEgc3VibWlzc2lvbi5cclxuXHQgKiBUaGlzIG1ldGhvZCBhbGxvd3MgcGVyZm9ybWluZyBvcGVyYXRpb25zIGJlZm9yZSBzdWJtaXR0aW5nIGRhdGEuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGJlZm9yZVN1Ym1pdChfOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIGFmdGVyIGRhdGEgc3VibWlzc2lvbi5cclxuXHQgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIHBvc3Qtc3VibWlzc2lvbiBhY3Rpb25zIHN1Y2ggYXMgcmVzZXR0aW5nIHRoZSBzYXZpbmcgc3RhdGUsXHJcblx0ICogdXBkYXRpbmcgdGhlIGNoYW5nZSBkZXRlY3RvciwgYW5kIG5hdmlnYXRpbmcgYmFjayBiYXNlZCBvbiB0aGUgc2F2ZSBhY3Rpb24uXHJcblx0ICogQHBhcmFtIGFjdGlvbiBUaGUgc2F2ZSBhY3Rpb24gdGFrZW4gKGUuZy4sIFNhdmVBbmRDbG9zZSwgU2F2ZUFuZE5ldykuXHJcblx0ICogQHBhcmFtIHJlc3BvbnNlIFRoZSByZXNwb25zZSByZWNlaXZlZCBhZnRlciBzdWJtaXNzaW9uLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkFmdGVyU3VibWl0KGFjdGlvbjogU2F2ZUFjdGlvbiA9IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlLCByZXNwb25zZTogYW55ID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHR0aGlzLmJhY2soYWN0aW9uKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENhbGxlZCBhZnRlciB0aGUgcGFnZSBpcyByZWxvYWRlZC5cclxuXHQgKiBUaGlzIG1ldGhvZCByZWluaXRpYWxpemVzIHRoZSBpdGVtIHdpdGggYSBuZXcgaW5zdGFuY2UgYW5kIGFwcGxpZXMgYW55IHF1ZXJ5IHBhcmFtZXRlcnMuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGFmdGVyUmVsb2FkKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pdGVtID0gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIHRoaXMucXVlcnkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyBmb2N1cyB0byB0aGUgZmlyc3QgaW5wdXQgZWxlbWVudC5cclxuXHQgKiBFbnN1cmVzIHRoZSBmaXJzdCBpbnB1dCBlbGVtZW50IGluIHRoZSBmb3JtIGlzIGZvY3VzZWQgZm9yIHVzZXIgY29udmVuaWVuY2UuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGZvY3VzKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuaW5wdXQgJiYgdGhpcy5pbnB1dC5maXJzdCAmJiB0aGlzLmlucHV0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQpIHtcclxuXHRcdFx0dGhpcy5pbnB1dC5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXRyaWV2ZXMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIGEgZ2l2ZW4gbmF0aXZlIGVsZW1lbnQuXHJcblx0ICogVGhpcyBtZXRob2QgbmF2aWdhdGVzIHRocm91Z2ggdGhlIERPTSBzdHJ1Y3R1cmUgdG8gZmluZCBlcnJvciBtZXNzYWdlcyBhc3NvY2lhdGVkIHdpdGggZm9ybSBmaWVsZHMuXHJcblx0ICogQHBhcmFtIG5hdGl2ZUVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGNoZWNrIGZvciBlcnJvcnMuXHJcblx0ICogQHJldHVybnMgVGhlIGVycm9yIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50LCBvciB1bmRlZmluZWQgaWYgbm8gZXJyb3IgaXMgZm91bmQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldEVsZW1lbnRFcnJvcihuYXRpdmVFbGVtZW50OiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG5cdFx0LyogR2V0IHBhcmVudCBlbGVtZW50ICdtYXQtZm9ybS1maWVsZCcgKi9cclxuXHRcdHZhciBtYXRGb3JtRmllbGQgPSBuYXRpdmVFbGVtZW50Py5jbG9zZXN0KCcubWF0LWZvcm0tZmllbGQnKTtcclxuXHRcdGlmICghbWF0Rm9ybUZpZWxkKSB7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogR2V0IGNoaWxkIGVsZW1lbnQgJ21hdC1lcnJvcicgKi9cclxuXHRcdHZhciBtYXRFcnJvcnMgPSBtYXRGb3JtRmllbGQucXVlcnlTZWxlY3RvckFsbCgnLm1hdC1lcnJvcicpO1xyXG5cdFx0aWYgKCFtYXRFcnJvcnMpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBHZXQgY2hpbGQgZWxlbWVudCAnbWF0LWxhYmVsJyAqL1xyXG5cdFx0dmFyIG1hdExhYmVsID0gbWF0Rm9ybUZpZWxkLnF1ZXJ5U2VsZWN0b3IoJ21hdC1sYWJlbCcpO1xyXG5cdFx0aWYgKCFtYXRMYWJlbCkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEdldCBlcnJvciB0ZXh0cyAqL1xyXG5cdFx0dmFyIGVycm9yc0FycmF5ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWF0RXJyb3JzKVxyXG5cdFx0XHQ/LmZpbHRlcigoeDogYW55KSA9PiB4LnRleHRDb250ZW50KVxyXG5cdFx0XHQ/Lm1hcCgoeDogYW55KSA9PiB4LnRleHRDb250ZW50KTtcclxuXHJcblx0XHRyZXR1cm4gYCcke21hdExhYmVsLnRleHRDb250ZW50fSc6ICR7ZXJyb3JzQXJyYXk/LmpvaW4oJywgJyl9YDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlc3BvbmRzIHRvIHVzZXItaW5pdGlhdGVkIGtleWJvYXJkIGV2ZW50cy5cclxuXHQgKiBUaGlzIG1ldGhvZCBsaXN0ZW5zIGZvciBzcGVjaWZpYyBrZXkgY29tYmluYXRpb25zIGFuZCB0cmlnZ2VycyBzYXZlIGFjdGlvbnMgb3IgZm9ybSBjYW5jZWxsYXRpb24uXHJcblx0ICogQHBhcmFtIGV2ZW50IFRoZSBrZXlib2FyZCBldmVudCB0cmlnZ2VyZWQgYnkgdGhlIHVzZXIuXHJcblx0ICovXHJcblx0QEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcblx0aGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG5cdFx0aWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkge1xyXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRcdGNhc2UgJ3MnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuc2F2ZShTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0Y2FzZSAnZCc6XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZE5ldyk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0Y2FzZSAnZSc6XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKiBDYW5jZWwgdGhlIGZvcm0gaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUgRVNDIGtleSAqL1xyXG5cdFx0aWYgKGV2ZW50LmtleUNvZGUgPT0gMjcpIHtcclxuXHRcdFx0dGhpcy5iYWNrKCk7XHJcblx0XHR9XHJcblx0fVxyXG59Il19
862
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJpYy1mb3JtLWJhc2UuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvYmFzZS9jb21wb25lbnRzL2dlbmVyaWMtZm9ybS1iYXNlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQTRCLElBQUksRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNJLE9BQU8sRUFBbUIsU0FBUyxFQUE0QixNQUFNLGdCQUFnQixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUdyRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDN0QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFNcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7QUFFakQsV0FBVztBQUVYLE1BQU0sT0FBZ0Isd0JBQTRGLFNBQVEsYUFBYTtJQXdPOUg7SUFDRztJQUNBO0lBQ0E7SUExT1g7O0dBRUU7SUFDSyxNQUFNLEdBQVcsS0FBSyxDQUFDO0lBRTlCOztPQUVHO0lBQ0ksVUFBVSxHQUFZLEtBQUssQ0FBQztJQUVuQzs7T0FFRztJQUNJLFVBQVUsR0FBc0IsVUFBVSxDQUFDO0lBRWxEOztPQUVHO0lBQ0kscUJBQXFCLEdBQVcsUUFBUSxDQUFDO0lBQ3pDLG9CQUFvQixHQUFXLEtB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QUMsWUFBWSxDQUFDLENBQUM7b0JBQ25DLE1BQU07Z0JBRVAsS0FBSyxHQUFHO29CQUNQLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ2pDLE1BQU07Z0JBRVAsS0FBSyxHQUFHO29CQUNQLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7b0JBQ2xDLE1BQU07WUFDUixDQUFDO1FBQ0YsQ0FBQztRQUVELHFEQUFxRDtRQUNyRCxJQUFJLEtBQUssQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ2IsQ0FBQztJQUNGLENBQUM7MEhBbjhCb0Isd0JBQXdCOzhHQUF4Qix3QkFBd0Isa1dBMExsQyxVQUFVOzsyRkExTEEsd0JBQXdCO2tCQUQ3QyxTQUFTOzJKQW1DRSxFQUFFO3NCQURaLEtBQUs7Z0JBZUksS0FBSztzQkFEZCxLQUFLO2dCQU9LLElBQUk7c0JBRGQsS0FBSztnQkFtQkMsUUFBUTtzQkFEZCxLQUFLO2dCQU9DLGNBQWM7c0JBRHBCLEtBQUs7Z0JBT0MsVUFBVTtzQkFEaEIsS0FBSztnQkFPQyxLQUFLO3NCQURYLEtBQUs7Z0JBT0MsUUFBUTtzQkFEZCxLQUFLO2dCQU9DLFFBQVE7c0JBRGQsS0FBSztnQkFzRkksVUFBVTtzQkFEbkIsU0FBUzt1QkFBQyxVQUFVO2dCQU9kLEtBQUs7c0JBRFgsWUFBWTt1QkFBQyxPQUFPO2dCQVlWLElBQUk7c0JBRGQsS0FBSztnQkFndUJOLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0ZXBwZXJTZWxlY3Rpb25FdmVudCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zdGVwcGVyJztcclxuaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVHlwZSwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtR3JvdXAsIE5nRm9ybSwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgTWF0U3RlcHBlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3N0ZXBwZXInO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFV0aWxzIH0gZnJvbSAnLi4vLi4vY29tbW9uL2Z1bmN0aW9ucy91dGlscyc7XHJcbmltcG9ydCB7IEFjdGlvbkl0ZW0gfSBmcm9tICcuLi8uLi9jb21tb24vbW9kZWxzL2FjdGlvbi1pdGVtJztcclxuaW1wb3J0IHsgSUVudGl0eSB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvZW50aXR5JztcclxuaW1wb3J0IHsgU2F2ZUFjdGlvbiB9IGZyb20gJy4uLy4uL2NvbW1vbi9tb2RlbHMvc2F2ZS1hY3Rpb24nO1xyXG5pbXBvcnQgeyBnZXRGb3JtRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL2Z1bmN0aW9ucy9mdW5jdGlvbnMnO1xyXG5pbXBvcnQgeyBGb3JtRGVmaW5pdGlvbiB9IGZyb20gJy4uLy4uL2Zvcm1zL21vZGVscy9mb3JtLWRlZmluaXRpb24nO1xyXG5pbXBvcnQgeyBGb3JtRmllbGRHcm91cERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9mb3Jtcy9tb2RlbHMvZm9ybS1maWVsZC1ncm91cC1kZWZpbml0aW9uJztcclxuaW1wb3J0IHsgQXBpUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9odHRwL21vZGVscy9yZXNwb25zZSc7XHJcbmltcG9ydCB7IEdlbmVyaWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaHR0cC9zZXJ2aWNlcy9nZW5lcmljLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pZ2VuZXJpYy1mb3JtLWJhc2UnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9iYXNlLmNvbXBvbmVudCc7XHJcblxyXG4vLyBAZHluYW1pY1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5IGV4dGVuZHMgSUVudGl0eSwgVFNlcnZpY2UgZXh0ZW5kcyBHZW5lcmljU2VydmljZTxURW50aXR5Pj4gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgSUdlbmVyaWNGb3JtQmFzZUNvbXBvbmVudDxURW50aXR5PiwgT25DaGFuZ2VzIHtcclxuXHQvKipcclxuICogVGhlIGFjdGlvbiBvZiB0aGUgZm9ybSAoYWRkIHwgZWRpdCkuXHJcbiAqL1xyXG5cdHB1YmxpYyBhY3Rpb246IHN0cmluZyA9ICdhZGQnO1xyXG5cclxuXHQvKipcclxuXHQgKiBJbmRpY2F0ZXMgaWYgdGhlIGZvcm0gaXMgaW4gZWRpdCBtb2RlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBpc0VkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhdmUgYWN0aW9uIGVudW1lcmF0aW9uLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBTYXZlQWN0aW9uOiB0eXBlb2YgU2F2ZUFjdGlvbiA9IFNhdmVBY3Rpb247XHJcblxyXG5cdC8qKlxyXG5cdCAqIE5hdmlnYXRpb24gcm91dGVzLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBlZGl0U2F2ZUFuZENsb3NlUm91dGU6IHN0cmluZyA9ICcuLi8uLi8nO1xyXG5cdHB1YmxpYyBhZGRTYXZlQW5kQ2xvc2VSb3V0ZTogc3RyaW5nID0gJy4uLyc7XHJcblx0cHVibGljIGFkZFNhdmVBbmRFZGl0Um91dGU6IHN0cmluZyA9ICcuLi9lZGl0Lyc7XHJcblx0cHVibGljIGFkZFNhdmVBbmROZXdSb3V0ZTogc3RyaW5nID0gJy4uL2FkZCc7XHJcblx0cHVibGljIGxpc3RSb3V0ZTogc3RyaW5nID0gdGhpcy5hZGRTYXZlQW5kQ2xvc2VSb3V0ZTtcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIElEIG9mIHRoZSBpdGVtIHRvIGxvYWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIF9pZD86IG51bWJlciB8IHN0cmluZztcclxuXHJcblx0LyoqXHJcblx0ICogVGhlIElEIG9mIHRoZSBpdGVtIHRvIGxvYWQuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgZ2V0IGlkKCk6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9pZDsgfVxyXG5cdHB1YmxpYyBzZXQgaWQoaWQ6IG51bWJlciB8IHN0cmluZyB8IHVuZGVmaW5lZCkge1xyXG5cdFx0aWYgKHRoaXMuX2lkICE9IGlkKSB7XHJcblx0XHRcdHRoaXMuX2lkID0gaWQ7XHJcblx0XHRcdHRoaXMuYWN0aW9uID0gJ2VkaXQnO1xyXG5cdFx0XHR0aGlzLmlzRWRpdE1vZGUgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmxpc3RSb3V0ZSA9IHRoaXMuZWRpdFNhdmVBbmRDbG9zZVJvdXRlO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogVGhlIGN1cnJlbnQgaXRlbSB0byBhZGQgb3IgZWRpdC5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHByb3RlY3RlZCBfaXRlbT86IFRFbnRpdHk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRoZSBjdXJyZW50IGl0ZW0gdG8gYWRkIG9yIGVkaXQuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgZ2V0IGl0ZW0oKTogVEVudGl0eSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9pdGVtOyB9XHJcblx0cHVibGljIHNldCBpdGVtKGl0ZW06IFRFbnRpdHkgfCB1bmRlZmluZWQpIHtcclxuXHRcdGlmICh0aGlzLl9pdGVtICE9PSBpdGVtKSB7XHJcblx0XHRcdHRoaXMuX2l0ZW0gPSBpdGVtO1xyXG5cdFx0XHR0aGlzLmlkID8/PSBpdGVtPy5pZDtcclxuXHRcdFx0dGhpcy5idWlsZEZpZWxkcygpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVwcmVzZW50cyB0aGUgcmVxdWVzdCBlcnJvcnMuXHJcblx0ICovXHJcblx0cHVibGljIGVycm9yczogQXJyYXk8c3RyaW5nPiA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluY2x1ZGVzIGZpZWxkcyBmb3IgcXVlcnkuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgaW5jbHVkZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZSBpbmNsdWRlcyBmaWVsZHMgZm9yIHF1ZXJ5LlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHVwZGF0ZUluY2x1ZGVzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBQcm9qZWN0aW9uIGZpZWxkcyBmb3IgcXVlcnkuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcHJvamVjdGlvbj86IHN0cmluZ1tdO1xyXG5cclxuXHQvKipcclxuXHQgKiBRdWVyeSBwYXJhbWV0ZXJzLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIHF1ZXJ5OiBhbnkgPSB7fTtcclxuXHJcblx0LyoqXHJcblx0ICogUmVhZC1vbmx5IGZsYWcuXHJcblx0ICovXHJcblx0QElucHV0KClcclxuXHRwdWJsaWMgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqXHJcblx0ICogRGlzYWJsZWQgZmxhZy5cclxuXHQgKi9cclxuXHRASW5wdXQoKVxyXG5cdHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHQvKipcclxuXHQgKiBUaGUgY3VycmVudCBkYXRlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBjdXJyZW50RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIERhdGUgJiB0aW1lIGlucHV0IG1hc2suXHJcblx0ICovXHJcblx0cHVibGljIGRhdGVUaW1lTWFzayA9IFsvWzAtM10vLCAvWzAtOV0vLCAnLicsIC9bMC0xXS8sIC9bMC05XS8sICcuJywgMiwgMCwgL1sxLTJdLywgL1swLTldLywgJyAnLCAvWzAtMl0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xyXG5cclxuXHQvKipcclxuXHQgKiBEYXRlIGlucHV0IG1hc2suXHJcblx0ICovXHJcblx0cHVibGljIGRhdGVNYXNrID0gWy9bMC0zXS8sIC9bMC05XS8sICcuJywgL1swLTFdLywgL1swLTldLywgJy4nLCAyLCAwLCAvWzEtMl0vLCAvWzAtOV0vXTtcclxuXHJcblx0LyoqXHJcblx0ICogVGltZSBpbnB1dCBtYXNrLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0aW1lTWFzayA9IFsvWzAtMl0vLCAvWzAtOV0vLCAnOicsIC9bMC01XS8sIC9bMC05XS9dO1xyXG5cclxuXHQvKipcclxuXHQgKiBEYXRlIHZhbGlkYXRpb24gcGF0dGVybi5cclxuXHQgKi9cclxuXHRwdWJsaWMgZGF0ZVBhdHRlcm46IHN0cmluZyA9IGAoPzooPzozMShcXFxcL3wtfFxcXFwuKSg/OjA/WzEzNTc4XXwxWzAyXSkpXFxcXDF8KD86KD86Mjl8MzApKFxcXFwvfC18XFxcXC4pKD86MD9bMSwzLTldfDFbMC0yXSlcXFxcMikpKD86KD86MVs2LTldfFsyLTldXFxcXGQpP1xcXFxkezJ9KSR8Xig/OjI5KFxcXFwvfC18XFxcXC4pMD8yXFxcXDMoPzooPzooPzoxWzYtOV18WzItOV1cXFxcZCk/KD86MFs0OF18WzI0NjhdWzA0OF18WzEzNTc5XVsyNl0pfCg/Oig/OjE2fFsyNDY4XVswNDhdfFszNTc5XVsyNl0pMDApKSkpJHxeKD86MD9bMS05XXwxXFxcXGR8MlswLThdKShcXFxcL3wtfFxcXFwuKSg/Oig/OjA/WzEtOV0pfCg/OjFbMC0yXSkpXFxcXDQoPzooPzoxWzYtOV18WzItOV1cXFxcZCk/XFxcXGR7Mn0pYDtcclxuXHJcblx0LyoqXHJcblx0ICogUGhvbmUgcHJlZml4IHZhbGlkYXRpb24gcGF0dGVybi5cclxuXHQgKi9cclxuXHRwdWJsaWMgcGhvbmVQcmVmaXhQYXR0ZXJuOiBzdHJpbmcgPSAnXigwXFxcXGR7Miw2fSkkJztcclxuXHJcblx0LyoqXHJcblx0ICogUGhvbmUgbnVtYmVyIHZhbGlkYXRpb24gcGF0dGVybi5cclxuXHQgKi9cclxuXHRwdWJsaWMgcGhvbmVOdW1iZXJQYXR0ZXJuOiBzdHJpbmcgPSAnXihcXFxcZHszLDMwfSkkJztcclxuXHJcblx0LyoqXHJcblx0ICogUGFzc3dvcmQgdmFsaWRhdGlvbiBwYXR0ZXJuLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBwYXNzd29yZFBhdHRlcm46IHN0cmluZyA9ICdeKD89LipbYS16XSkoPz0uKltBLVpdKSg/PS4qXFxcXGQpKD89LipbJEAkISUqPyYjLl0pW0EtWmEtelxcXFxkJEAkISUqPyYjLl17Nix9JCc7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEVkaXRvciBvcHRpb25zIGluY2x1ZGluZyBkZWZhdWx0IG1vZHVsZXMgYW5kIHRvb2xiYXIgY29uZmlndXJhdGlvbi5cclxuXHQgKi9cclxuXHRwdWJsaWMgZWRpdG9yT3B0aW9ucyA9IHtcclxuXHRcdG1vZHVsZXM6IHtcclxuXHRcdFx0dG9vbGJhcjogW1xyXG5cdFx0XHRcdFsnYm9sZCcsICdpdGFsaWMnLCAndW5kZXJsaW5lJ10sXHJcblx0XHRcdFx0W3sgJ2xpc3QnOiAnb3JkZXJlZCcgfSwgeyAnbGlzdCc6ICdidWxsZXQnIH1dLFxyXG5cdFx0XHRcdFt7ICdpbmRlbnQnOiAnLTEnIH0sIHsgJ2luZGVudCc6ICcrMScgfV0sXHJcblx0XHRcdFx0W3sgJ3NpemUnOiBbJ3NtYWxsJywgZmFsc2UsICdsYXJnZScsICdodWdlJ10gfV0sXHJcblx0XHRcdFx0W3sgJ2hlYWRlcic6IFsxLCAyLCAzLCA0LCA1LCA2LCBmYWxzZV0gfV0sXHJcblx0XHRcdFx0W3sgJ2NvbG9yJzogbmV3IEFycmF5PGFueT4oKSB9LCB7ICdiYWNrZ3JvdW5kJzogbmV3IEFycmF5PGFueT4oKSB9XSxcclxuXHRcdFx0XHRbJ2xpbmsnLCAnaW1hZ2UnXVxyXG5cdFx0XHRdLFxyXG5cdFx0XHRjbGlwYm9hcmQ6IHtcclxuXHRcdFx0XHRtYXRjaFZpc3VhbDogZmFsc2VcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH07XHJcblxyXG5cdC8qKlxyXG5cdCAqIElmIHRydWUsIHNob3dzIHRoZSAnRGVsZXRlJyBtZW51LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBkZWxldGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuXHQvKipcclxuXHQgKiBUb29sYmFyIG1lbnUgaXRlbXMuXHJcblx0ICovXHJcblx0cHVibGljIHRvb2xiYXJNZW51SXRlbXM6IEFjdGlvbkl0ZW1bXSA9IFtdO1xyXG5cclxuXHQvKipcclxuXHQgKiBUb29sYmFyIGFjdGlvbiBidXR0b25zLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyB0b29sYmFyQWN0aW9uczogQWN0aW9uSXRlbTxURW50aXR5LCBJR2VuZXJpY0Zvcm1CYXNlQ29tcG9uZW50PFRFbnRpdHk+PltdID0gW3tcclxuXHRcdGljb246ICdyZWZyZXNoJyxcclxuXHRcdHRvb2x0aXA6ICRsb2NhbGl6ZWA6QEByZWZyZXNoUGFnZTpSZWZyZXNoIHRoZSBwYWdlYCxcclxuXHRcdGV2ZW50OiAoKSA9PiB0aGlzLnJlbG9hZFBhZ2UoKSxcclxuXHR9XTtcclxuXHJcblx0LyoqXHJcblx0ICogTWF0U3RlcHBlciByZWZlcmVuY2UuXHJcblx0ICovXHJcblx0QFZpZXdDaGlsZChNYXRTdGVwcGVyKVxyXG5cdHByb3RlY3RlZCBtYXRTdGVwcGVyPzogTWF0U3RlcHBlcjtcclxuXHJcblx0LyoqXHJcblx0ICogUmVmZXJlbmNlIHRvIHRoZSBpbnB1dCBlbGVtZW50cy5cclxuXHQgKi9cclxuXHRAVmlld0NoaWxkcmVuKCdmb2N1cycpXHJcblx0cHVibGljIGlucHV0OiBhbnk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEZvcm0gZ3JvdXAgaW5zdGFuY2UuXHJcblx0ICovXHJcblx0cHVibGljIF9mb3JtPzogTmdGb3JtIHwgRm9ybUdyb3VwO1xyXG5cclxuXHQvKipcclxuXHQgKiBGb3JtIGdyb3VwLlxyXG5cdCAqL1xyXG5cdEBJbnB1dCgpXHJcblx0cHVibGljIGdldCBmb3JtKCk6IE5nRm9ybSB8IEZvcm1Hcm91cCB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9mb3JtOyB9XHJcblx0cHVibGljIHNldCBmb3JtKGZvcm06IE5nRm9ybSB8IEZvcm1Hcm91cCB8IHVuZGVmaW5lZCkge1xyXG5cdFx0dGhpcy5fZm9ybSA9IGZvcm07XHJcblx0XHR0aGlzLm9uQWZ0ZXJGb3JtQnVpbGQoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldHMgdGhlIGZvcm0gdmFsdWUuXHJcblx0ICovXHJcblx0cHVibGljIGFic3RyYWN0IGdldCBmb3JtVmFsdWUoKTogVEVudGl0eSB8IGFueTtcclxuXHJcblx0LyoqXHJcblx0ICogRm9ybSBkZWZpbml0aW9uLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBmb3JtRGVmaW5pdGlvbj86IEZvcm1EZWZpbml0aW9uO1xyXG5cclxuXHQvKipcclxuXHQgKiBGaWVsZCBncm91cHMgZGVmaW5pdGlvbi5cclxuXHQgKi9cclxuXHRwdWJsaWMgZmllbGRHcm91cHM/OiBGb3JtRmllbGRHcm91cERlZmluaXRpb25bXTtcclxuXHJcblx0LyoqXHJcblx0ICogQ29uc3RydWN0b3IuXHJcblx0ICogQHBhcmFtIHNlcnZpY2UgVGhlIHNlcnZpY2UgdG8gbWFuYWdlIHRoZSBlbnRpdHkuXHJcblx0ICogQHBhcmFtIHJvdXRlIFRoZSBhY3RpdmF0ZWQgcm91dGUuXHJcblx0ICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIFRoZSBjaGFuZ2UgZGV0ZWN0b3IgcmVmZXJlbmNlLlxyXG5cdCAqL1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHVibGljIGVudGl0eUN0b3I6IFR5cGU8VEVudGl0eT4sXHJcblx0XHRwcm90ZWN0ZWQgc2VydmljZTogVFNlcnZpY2UsXHJcblx0XHRwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG5cdFx0cHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG5cdCkge1xyXG5cdFx0c3VwZXIocm91dGUsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHRcdHRoaXMubGlzdFJvdXRlID0gdGhpcy5hZGRTYXZlQW5kQ2xvc2VSb3V0ZTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENhbGxlZCBhZnRlciB0aGUgY29uc3RydWN0b3IsIGluaXRpYWxpemluZyBpbnB1dCBwcm9wZXJ0aWVzLCBcclxuXHQgKiBhbmQgdGhlIGZpcnN0IGNhbGwgdG8gbmdPbkNoYW5nZXMuXHJcblx0ICovXHJcblx0bmdPbkluaXQoKTogdm9pZCB7XHJcblx0XHRzdXBlci5uZ09uSW5pdCgpO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMaWZlY3ljbGUgaG9vayB0aGF0IGlzIGNhbGxlZCBhZnRlciBhIGNvbXBvbmVudCdzIHZpZXcgaGFzIGJlZW4gZnVsbHkgaW5pdGlhbGl6ZWQuXHJcblx0ICovXHJcblx0bmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cdFx0dGhpcy5oYW5kbGVFeHBhbnNpb25QYW5lbENoYW5nZXMgPSB0aGlzLmlzRWRpdE1vZGU7XHJcblx0XHRzdXBlci5uZ0FmdGVyVmlld0luaXQoKTtcclxuXHJcblx0XHQvKiBTZXQgcGFnZSB0aXRsZSAqL1xyXG5cdFx0dGhpcy50aXRsZSA9IHRoaXMudGl0bGVTZXJ2aWNlLmdldFRpdGxlKCk7XHJcblxyXG5cdFx0LyogU2V0IGZvY3VzICovXHJcblx0XHR0aGlzLmZvY3VzKCk7XHJcblxyXG5cdFx0LyogXHJcblx0XHQgKiBGb3JjZSBhIG5ldyBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlIHNpbmNlIGNoYW5nZSBkZXRlY3Rpb25zIFxyXG5cdFx0ICogaGF2ZSBmaW5pc2hlZCB3aGVuIGBuZ0FmdGVyVmlld0luaXRgIGlzIGV4ZWN1dGVkLlxyXG5cdFx0ICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcblx0XHQvKiBMaXN0ZW4gZm9yIHN0ZXBwZXIgc2VsZWN0aW9uIGNoYW5nZXMgKi9cclxuXHRcdHRoaXMubWF0U3RlcHBlcj8uc2VsZWN0aW9uQ2hhbmdlPy5zdWJzY3JpYmUoKGV2ZW50OiBTdGVwcGVyU2VsZWN0aW9uRXZlbnQpID0+IHRoaXMub25BZnRlclN0ZXBDaGFuZ2UoZXZlbnQpKTtcclxuXHJcblx0XHQvKiBTZWxlY3QgdGhlIGFwcHJvcHJpYXRlIHN0ZXAgYmFzZWQgb24gdGhlIFVSTCBoYXNoIGFuZCBtYXJrIHByZXZpb3VzIHN0ZXBzIGFzIGNvbXBsZXRlZCAqL1xyXG5cdFx0dGhpcy5zZWxlY3RTdGVwQmFzZWRPblVybEhhc2goKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENhbGxlZCBiZWZvcmUgYW55IG90aGVyIGxpZmVjeWNsZSBob29rLiBVc2UgaXQgdG8gaW5qZWN0IGRlcGVuZGVuY2llcywgXHJcblx0ICogYnV0IGF2b2lkIGFueSBzZXJpb3VzIHdvcmsgaGVyZS5cclxuXHQgKiBAcGFyYW0gY2hhbmdlcyBUaGUgY2hhbmdlcyBvYmplY3QuXHJcblx0ICovXHJcblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cdFx0aWYgKFxyXG5cdFx0XHQoY2hhbmdlcz8uaWQ/LmN1cnJlbnRWYWx1ZSAmJiBjaGFuZ2VzLmlkLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlcy5pZC5wcmV2aW91c1ZhbHVlKSB8fFxyXG5cdFx0XHQoY2hhbmdlcz8uaXRlbT8uY3VycmVudFZhbHVlICYmIGNoYW5nZXMuaXRlbS5jdXJyZW50VmFsdWUgIT09IGNoYW5nZXMuaXRlbS5wcmV2aW91c1ZhbHVlKVxyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMubG9hZEl0ZW0oKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIExvYWRzIGFuIGl0ZW0gYnkgSUQuXHJcblx0ICogVGhpcyBtZXRob2QgZmV0Y2hlcyB0aGUgaXRlbSBpZiB0aGUgY29tcG9uZW50IGlzIGluIGVkaXQgbW9kZSBhbmQgdGhlIHNlcnZpY2UgZW5kcG9pbnQgaXMgZGVmaW5lZC5cclxuXHQgKiBcclxuXHQgKiBAcGFyYW0gY2FsbGJhY2sgLSBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBhZnRlciB0aGUgaXRlbSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgbG9hZGVkLlxyXG5cdCAqICAgICAgICAgICAgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCByZWNlaXZlIHRoZSBsb2FkZWQgaXRlbSBhcyBhbiBhcmd1bWVudC5cclxuXHQgKi9cclxuXHRwdWJsaWMgbG9hZEl0ZW0oY2FsbGJhY2s/OiAoaXRlbTogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5pc0VkaXRNb2RlICYmIHRoaXMuc2VydmljZT8uZW5kcG9pbnQpIHtcclxuXHRcdFx0LyogU2V0IGxvYWRpbmcgc3RhdGUgdG8gdHJ1ZSB0byBpbmRpY2F0ZSB0aGF0IGFuIGl0ZW0gaXMgYmVpbmcgbG9hZGVkICovXHJcblx0XHRcdHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdC8qIFRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiB0byB1cGRhdGUgdGhlIHZpZXcgd2l0aCB0aGUgbG9hZGluZyBzdGF0ZSAqL1xyXG5cdFx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHJcblx0XHRcdC8qIENhbGwgdGhlIGFzeW5jaHJvbm91cyBtZXRob2QgdG8gbG9hZCB0aGUgaXRlbSAqL1xyXG5cdFx0XHR0aGlzLmxvYWRJdGVtQXN5bmMoKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdC8qIEhhbmRsZSB0aGUgcmVzcG9uc2Ugd2hlbiB0aGUgaXRlbSBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkICovXHJcblx0XHRcdFx0bmV4dDogKGl0ZW0pID0+IHtcclxuXHRcdFx0XHRcdC8qIFNldCBsb2FkaW5nIHN0YXRlIHRvIGZhbHNlIHRvIGluZGljYXRlIHRoYXQgbG9hZGluZyBoYXMgY29tcGxldGVkICovXHJcblx0XHRcdFx0XHR0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG5cclxuXHRcdFx0XHRcdC8qIEV4ZWN1dGUgdGhlIGNhbGxiYWNrIGlmIHByb3ZpZGVkLCBwYXNzaW5nIHRoZSBsb2FkZWQgaXRlbSAqL1xyXG5cdFx0XHRcdFx0aWYgKGNhbGxiYWNrKSB7XHJcblx0XHRcdFx0XHRcdGNhbGxiYWNrKGl0ZW0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyogSGFuZGxlIGFueSBlcnJvcnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlIGxvYWRpbmcgcHJvY2VzcyAqL1xyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogTG9hZHMgYW4gaXRlbSBieSBJRCBhc3luY2hyb25vdXNseS5cclxuXHQgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIG9mIHRoZSBsb2FkZWQgZW50aXR5LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBsb2FkSXRlbUFzeW5jKCk6IE9ic2VydmFibGU8VEVudGl0eT4ge1xyXG5cdFx0aWYgKHRoaXMuaWQpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuc2VydmljZS5nZXQodGhpcy5pZCwgT2JqZWN0LmFzc2lnbih0aGlzLnF1ZXJ5IHx8IHt9LCB7IGluY2x1ZGVzOiB0aGlzLmluY2x1ZGVzPy5sZW5ndGggPyB0aGlzLmluY2x1ZGVzIDogdGhpcy51cGRhdGVJbmNsdWRlcywgcHJvamVjdGlvbjogdGhpcy5wcm9qZWN0aW9uPy5qb2luKCcsJykgfSksIHsgJ0Rpc2FibGUtQ2FjaGUnOiAnWWVzJyB9KS5waXBlKFxyXG5cdFx0XHRcdG1hcCh4ID0+IE9iamVjdC5hc3NpZ24odGhpcy5uZXdJbnN0YW5jZSgpLCB4KSksXHJcblx0XHRcdFx0dGFwKHggPT4ge1xyXG5cdFx0XHRcdFx0LyogU2V0IHRoZSBsb2FkZWQgaXRlbSAqL1xyXG5cdFx0XHRcdFx0dGhpcy5pdGVtID0gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIDxURW50aXR5PngpO1xyXG5cclxuXHRcdFx0XHRcdC8qIEJ1aWxkIHRoZSBmb3JtICovXHJcblx0XHRcdFx0XHR0aGlzLmJ1aWxkRm9ybSgpO1xyXG5cclxuXHRcdFx0XHRcdC8qIFRyaWdnZXIgZXZlbnQgYWZ0ZXJJdGVtTG9hZGVkICovXHJcblx0XHRcdFx0XHR0aGlzLm9uQWZ0ZXJJdGVtTG9hZGVkKCk7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gbmV3IE9ic2VydmFibGUoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhdmVzIGRhdGEgaW50byB0aGUgZGF0YWJhc2UuXHJcblx0ICogVGhpcyBtZXRob2QgdmFsaWRhdGVzIHRoZSBmb3JtLCBjaGVja3MgaWYgaXQncyB2YWxpZCwgYW5kIHNlbmRzIGRhdGEgdG8gdGhlIHNlcnZlciB0byBlaXRoZXIgdXBkYXRlIG9yIGNyZWF0ZSBhIG5ldyByZWNvcmQuXHJcblx0ICogQHBhcmFtIGFjdGlvbiBUaGUgc2F2ZSBhY3Rpb24gdG8gcGVyZm9ybS5cclxuXHQgKiBAcGFyYW0gZm9ybSBUaGUgZm9ybSB0byB2YWxpZGF0ZSBhbmQgc2F2ZS5cclxuXHQgKi9cclxuXHRwdWJsaWMgc2F2ZShhY3Rpb246IFNhdmVBY3Rpb24gPSBTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSwgZm9ybT86IE5nRm9ybSB8IEZvcm1Hcm91cCk6IHZvaWQge1xyXG5cdFx0LyogVmFsaWRhdGUgdGhlIGZvcm0gKi9cclxuXHRcdHRoaXMudmFsaWRhdGVGb3JtKGZvcm0pO1xyXG5cclxuXHRcdC8qIENoZWNrIGlmIHRoZSBmb3JtIGlzIHZhbGlkICovXHJcblx0XHRmb3JtID0gdGhpcy5mb3JtIHx8IGZvcm07XHJcblx0XHRpZiAoZm9ybSAmJiAhdGhpcy5pc0Zvcm1WYWxpZChmb3JtKSkge1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblxyXG5cdFx0LyogSWYgaW4gZWRpdCBtb2RlLCB1cGRhdGUgdGhlIHJlY29yZCAqL1xyXG5cdFx0aWYgKHRoaXMuaXNFZGl0TW9kZSkge1xyXG5cdFx0XHQvKiBUaGUgZGF0YSBoYXMgbm90IGNoYW5nZWQ/ICovXHJcblx0XHRcdGlmIChmb3JtICYmIGZvcm0ucHJpc3RpbmUpIHtcclxuXHRcdFx0XHR0aGlzLm9uQWZ0ZXJTdWJtaXQoYWN0aW9uKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8qIEEgZmxhZyB0byBwcmV2ZW50IHNlbmRpbmcgdGhlIGZvcm0gdHdpY2UgKi9cclxuXHRcdFx0dGhpcy5pc1NhdmluZyA9IHRydWU7XHJcblxyXG5cdFx0XHQvKiBTZW5kIHRoZSBkYXRhIHRvIHRoZSBzZXJ2ZXIgKi9cclxuXHRcdFx0dGhpcy51cGRhdGUoeyBwYXJhbXM6IFV0aWxzLnRvSHR0cFBhcmFtcyh7IGluY2x1ZGVzOiB0aGlzLnVwZGF0ZUluY2x1ZGVzIH0pIH0pLnN1YnNjcmliZSh7XHJcblx0XHRcdFx0bmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcblx0XHRcdFx0XHQvKiBBcHBseSBzYXZlZCBkYXRhIHRvIHRoZSBmb3JtICovXHJcblx0XHRcdFx0XHR0aGlzLm9uQWZ0ZXJTdWJtaXQoYWN0aW9uLCByZXNwb25zZSk7XHJcblxyXG5cdFx0XHRcdFx0LyogSWYgdGhlIHVzZXIgY2xpY2tzICdhcHBseScgcmVsb2FkIHRoZSBwYWdlICovXHJcblx0XHRcdFx0XHRpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQpIHtcclxuXHRcdFx0XHRcdFx0aWYgKHRoaXMucmVsb2FkLm9ic2VydmVkKSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yZWxvYWQuZW1pdCh0aGlzLmZvcm1WYWx1ZSk7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yZWxvYWRQYWdlKCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0LyogT3RoZXJ3aXNlLCBjcmVhdGUgYSBuZXcgb25lICovXHJcblx0XHRlbHNlIHtcclxuXHRcdFx0LyogQSBmbGFnIHRvIHByZXZlbnQgc2VuZGluZyB0aGUgZm9ybSB0d2ljZSAqL1xyXG5cdFx0XHR0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcclxuXHJcblx0XHRcdC8qIFNlbmQgdGhlIGRhdGEgdG8gdGhlIHNlcnZlciAqL1xyXG5cdFx0XHR0aGlzLmNyZWF0ZTxBcGlSZXNwb25zZTxURW50aXR5Pj4oKS5zdWJzY3JpYmUoe1xyXG5cdFx0XHRcdG5leHQ6IChyZXNwb25zZSkgPT4ge1xyXG5cdFx0XHRcdFx0dGhpcy5pZCA9IHJlc3BvbnNlPy52YWx1ZT8uaWQ7XHJcblx0XHRcdFx0XHR0aGlzLm9uQWZ0ZXJTdWJtaXQoYWN0aW9uLCByZXNwb25zZSk7XHJcblxyXG5cdFx0XHRcdFx0aWYgKGZvcm0pIHtcclxuXHRcdFx0XHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdGxldCBjdHIgPSBmb3JtIS5jb250cm9sc1trZXldO1xyXG5cdFx0XHRcdFx0XHRcdGN0ci5tYXJrQXNQcmlzdGluZSgpO1xyXG5cdFx0XHRcdFx0XHRcdGN0ci5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHRcdFx0XHRcdFx0XHRjdHIudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGVycm9yOiAoZXJyb3IpID0+IHRoaXMucGFyc2VFcnJvcnMoZXJyb3IpXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIERldGVjdCBjaGFuZ2VzICovXHJcblx0XHR0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNhdmVzIGRhdGEgYW5kIG5hdmlnYXRlcyB0byB0aGUgZWRpdCB2aWV3LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyBhcHBseSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuc2F2ZShTYXZlQWN0aW9uLlNhdmVBbmRFZGl0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIERlbGV0ZXMgdGhlIGN1cnJlbnQgcmVjb3JkLlxyXG5cdCAqIFRoaXMgbWV0aG9kIHNob3dzIGEgY29uZmlybWF0aW9uIGRpYWxvZyBhbmQgZGVsZXRlcyB0aGUgcmVjb3JkIGlmIHRoZSB1c2VyIGNvbmZpcm1zLlxyXG5cdCAqIEBwYXJhbSBodHRwSGVhZGVycyBPcHRpb25hbCBIVFRQIGhlYWRlcnMgdG8gaW5jbHVkZSBpbiB0aGUgZGVsZXRlIHJlcXVlc3QuXHJcblx0ICovXHJcblx0cHVibGljIGRlbGV0ZShodHRwSGVhZGVycz86IEh0dHBIZWFkZXJzKTogdm9pZCB7XHJcblx0XHR0aGlzLnNob3dEZWxldGVJdGVtRGlhbG9nKCkuc3Vic2NyaWJlKChhY2NlcHQ6IGJvb2xlYW4pID0+IHtcclxuXHRcdFx0aWYgKGFjY2VwdCAmJiB0aGlzLmlkKSB7XHJcblx0XHRcdFx0dGhpcy5zZXJ2aWNlLmRlbGV0ZSh0aGlzLmlkISwgdW5kZWZpbmVkLCB7IGhlYWRlcnM6IGh0dHBIZWFkZXJzID8/IHRoaXMudG9IdHRwSGVhZGVycyh7ICdTaG93LU1lc3NhZ2UnOiAneWVzJyB9KSB9KVxyXG5cdFx0XHRcdFx0LnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuYmFjaygpO1xyXG5cdFx0XHRcdFx0fSwgZXJyb3IgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmRlYnVnKGVycm9yKTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluaXRpYWxpemVzIHRoZSBmb3JtLlxyXG5cdCAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGhlIGZvcm0gYnkgZXh0cmFjdGluZyBxdWVyeSBwYXJhbWV0ZXJzLCBzZXR0aW5nIHRoZSBlbnRpdHkgSUQsIGFuZCBidWlsZGluZyB0aGUgZm9ybS5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgaW5pdCgpOiB2b2lkIHtcclxuXHRcdC8qIEdldCB0aGUgZW50aXR5IElEIGZyb20gdGhlIHF1ZXJ5ICovXHJcblx0XHRpZiAoIXRoaXMuaWQgJiYgIXRoaXMuaXRlbSkge1xyXG5cdFx0XHQvKiBBc3NpZ24gcXVlcnkgcGFyYW1zIGludG8gcXVlcnkgb2JqZWN0ICovXHJcblx0XHRcdGxldCBpZ25vcmVkUGFyYW1zOiBzdHJpbmdbXSA9IFsnaWQnLCAncmV0dXJudXJsJywgJ3BhbmVsSWQnXTtcclxuXHRcdFx0T2JqZWN0LmFzc2lnbih0aGlzLnF1ZXJ5LFxyXG5cdFx0XHRcdHRoaXMuc2FuaXRpemVPYmplY3QodGhpcy5yb3V0ZS5zbmFwc2hvdC5wYXJhbXMgfHwge30sIC4uLmlnbm9yZWRQYXJhbXMpLFxyXG5cdFx0XHRcdHRoaXMuc2FuaXRpemVPYmplY3QodGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhPy5xdWVyeSB8fCB7fSwgLi4uaWdub3JlZFBhcmFtcyksXHJcblx0XHRcdFx0dGhpcy5zYW5pdGl6ZU9iamVjdCh0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zIHx8IHt9LCAuLi5pZ25vcmVkUGFyYW1zKVxyXG5cdFx0XHQpO1xyXG5cclxuXHRcdFx0LyogR2V0IGlkIGZyb20gdGhlIHVybCAqL1xyXG5cdFx0XHRsZXQgaWQgPSA8YW55PnRoaXMucm91dGUuc25hcHNob3QucGFyYW1NYXAuZ2V0KCdpZCcpO1xyXG5cdFx0XHRpZiAoaWQgPiAwKSB7XHJcblx0XHRcdFx0dGhpcy5pZCA9IGlkO1xyXG5cdFx0XHR9IGVsc2UgaWYgKCF0aGlzLmlkICYmIHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmlkKSB7XHJcblx0XHRcdFx0dGhpcy5pZCA9IHRoaXMucm91dGUuc25hcHNob3Q/LmRhdGE/LmlkO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLm9uQWZ0ZXJTZXRJZCgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgVEVudGl0eSAqL1xyXG5cdFx0aWYgKCF0aGlzLmlzRWRpdE1vZGUgJiYgIXRoaXMuZm9ybSkge1xyXG5cdFx0XHR0aGlzLml0ZW0gPSBPYmplY3QuYXNzaWduKHRoaXMubmV3SW5zdGFuY2UoKSwgdGhpcy5pdGVtIHx8IHt9LCB0aGlzLnF1ZXJ5IHx8IHt9KTtcclxuXHRcdFx0dGhpcy5idWlsZEZvcm0oKTtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBTZXQgcGFuZWwgSUQgZnJvbSBxdWVyeSAqL1xyXG5cdFx0dGhpcy5zdWJ0aXRsZSB8fD0gdGhpcy5yb3V0ZS5zbmFwc2hvdD8uZGF0YT8uc3VidGl0bGU7XHJcblxyXG5cdFx0LyogQWRkIGxpc3QgbWVudSBpdGVtcyAqL1xyXG5cdFx0dGhpcy5hZGRUb29sYmFyTWVudUl0ZW1zKCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBCdWlsZHMgdGhlIGZvcm0gZmllbGRzLlxyXG5cdCAqIFRoaXMgbWV0aG9kIGNvbnN0cnVjdHMgZm9ybSBmaWVsZHMgYmFzZWQgb24gdGhlIGVudGl0eSdzIGZvcm0gZGVmaW5pdGlvbiBhbmQgaW5jbHVkZXMgbmVjZXNzYXJ5IG5hdmlnYXRpb24gYW5kIG1lbnUgaXRlbXMuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGJ1aWxkRmllbGRzKCk6IHZvaWQge1xyXG5cdFx0LyogR2V0IGZvcm0gZGVmaW5pdGlvbiAqL1xyXG5cdFx0dGhpcy5mb3JtRGVmaW5pdGlvbiA9IGdldEZvcm1EZWZpbml0aW9uKHRoaXMubmV3SW5zdGFuY2UoKSk7XHJcblxyXG5cdFx0LyogU2V0IGluY2x1ZGVzIGZyb20gZm9ybSBkZWZpbml0aW9uLCBpZiBhbnkgKi9cclxuXHRcdHRoaXMuZm9ybURlZmluaXRpb24/LmluY2x1ZGVzPy5mb3JFYWNoKHggPT4gdGhpcy5pbmNsdWRlKHguZW50aXR5LCB4LnVwZGF0ZSkpO1xyXG5cclxuXHRcdC8qIEFkZCB0b29sYmFyIG1lbnUgaXRlbXMsIGlmIGFueSAqL1xyXG5cdFx0aWYgKHRoaXMuZm9ybURlZmluaXRpb24/LnRvb2xiYXJNZW51SXRlbXM/Lmxlbmd0aCkge1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMgPz89IFtdO1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMgPSB0aGlzLnRvb2xiYXJNZW51SXRlbXMuY29uY2F0KC4uLnRoaXMuZm9ybURlZmluaXRpb24/LnRvb2xiYXJNZW51SXRlbXMpO1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMuZm9yRWFjaCgoeCwgaSkgPT4geC5pbmRleCA/Pz0gaSk7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogQ3JlYXRlIHRoZSBmb3JtIGZpZWxkcyB1c2luZyB0aGUgZW50aXR5IHR5cGUgKi9cclxuXHRcdHRoaXMuZmllbGRHcm91cHMgPSB0aGlzLmZvcm1EZWZpbml0aW9uPy5maWVsZEdyb3Vwcz8uZmlsdGVyKHggPT4gIXguaGlkZGVuKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEJ1aWxkcyBhIG5ldyBmb3JtLlxyXG5cdCAqIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCB0byBjb25zdHJ1Y3QgdGhlIGZvcm0gZm9yIHRoZSBzcGVjaWZpYyBlbnRpdHkuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGJ1aWxkRm9ybSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBWYWxpZGF0ZXMgdGhlIGZvcm0uXHJcblx0ICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgZm9ybSBhcyBzdWJtaXR0ZWQsIHVwZGF0ZXMgaXRzIHZhbGlkaXR5LCBhbmQgb3B0aW9uYWxseSBsb2dzIGRlYnVnIGluZm9ybWF0aW9uLlxyXG5cdCAqIEBwYXJhbSBmb3JtIFRoZSBmb3JtIHRvIHZhbGlkYXRlLlxyXG5cdCAqL1xyXG5cdHB1YmxpYyB2YWxpZGF0ZUZvcm0oZm9ybT86IE5nRm9ybSB8IEZvcm1Hcm91cCk6IHZvaWQge1xyXG5cdFx0dmFyIGZvcm0gPSBmb3JtIHx8IHRoaXMuZm9ybTtcclxuXHJcblx0XHQvKiBTZXQgdGhlIGZvcm0gYXMgc3VibWl0dGVkICovXHJcblx0XHRpZiAoZm9ybSAmJiBmb3JtIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcblx0XHRcdC8qIFNldCBmb3JtIGFzIHN1Ym1pdHRlZCAqL1xyXG5cdFx0XHQoZm9ybSBhcyBhbnkpWydzdWJtaXR0ZWQnXSA9IHRydWU7XHJcblxyXG5cdFx0XHQvKiBVcGRhdGUgdmFsdWUgYW5kIHZhbGlkaXR5ICovXHJcblx0XHRcdGZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIFByaW50IHNvbWUgZGVidWcgaW5mb3JtYXRpb24gKi9cclxuXHRcdHRoaXMuZGVidWdGb3JtKGZvcm0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2tzIGlmIHRoZSBmb3JtIGlzIHZhbGlkLlxyXG5cdCAqIFRoaXMgbWV0aG9kIHZhbGlkYXRlcyB0aGUgZm9ybSwgbWFya3MgaW52YWxpZCBjb250cm9scywgYW5kIHNob3dzIGVycm9yIG1lc3NhZ2VzIGlmIGFueS5cclxuXHQgKiBAcGFyYW0gZm9ybSBUaGUgZm9ybSB0byBjaGVjayBmb3IgdmFsaWRpdHkuXHJcblx0ICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZm9ybSBpcyB2YWxpZC5cclxuXHQgKi9cclxuXHRwdWJsaWMgaXNGb3JtVmFsaWQoZm9ybT86IE5nRm9ybSB8IEZvcm1Hcm91cCk6IGJvb2xlYW4ge1xyXG5cdFx0LyogUHJpbnQgc29tZSBkZWJ1ZyBpbmZvcm1hdGlvbiAqL1xyXG5cdFx0dGhpcy5kZWJ1Z0Zvcm0oZm9ybSk7XHJcblxyXG5cdFx0LyogSWYgdGhlIGZvcm0gaXMgbm90IHZhbGlkICovXHJcblx0XHRpZiAoZm9ybSAmJiAhZm9ybS52YWxpZCkge1xyXG5cdFx0XHQvKiBNYXJrIGludmFsaWQgY29udHJvbHMgYXMgZGlydHkgYW5kIHRvdWNoZWQgKi9cclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHQuZmlsdGVyKHggPT4gIWZvcm0uY29udHJvbHNbeF0udmFsaWQpXHJcblx0XHRcdFx0LmZvckVhY2goa2V5ID0+IHRoaXMuaW52YWxpZGF0ZUNvbnRyb2woZm9ybS5jb250cm9sc1trZXldKSk7XHJcblxyXG5cdFx0XHQvKiBTaG93IGVycm9yIG1lc3NhZ2VzICovXHJcblx0XHRcdChhc3luYyAoKSA9PiB7XHJcblx0XHRcdFx0LyogV2FpdCB1bnRpbCAnbWF0LWVycm9yJyBpcyBkaXNwbGF5ZWQgKi9cclxuXHRcdFx0XHRhd2FpdCBuZXcgUHJvbWlzZSh5ID0+IHNldFRpbWVvdXQoeSwgMjAwKSk7XHJcblxyXG5cdFx0XHRcdC8qIFBhcnNlIHRoZSBlcnJvciBtZXNzYWdlcyAqL1xyXG5cdFx0XHRcdHZhciBlcnJvcnMgPSBBcnJheTxzdHJpbmc+KCk7XHJcblx0XHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scylcclxuXHRcdFx0XHRcdC5maWx0ZXIoeCA9PiAhZm9ybS5jb250cm9sc1t4XS52YWxpZClcclxuXHRcdFx0XHRcdC5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdFx0XHRcdC8qIEdldCBlcnJvciB0ZXh0ICovXHJcblx0XHRcdFx0XHRcdHZhciBlcnJvciA9IHRoaXMuZ2V0RWxlbWVudEVycm9yKChmb3JtLmNvbnRyb2xzW2tleV0gYXMgYW55KT8ubmF0aXZlRWxlbWVudCk7XHJcblx0XHRcdFx0XHRcdGlmIChlcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdGVycm9ycy5wdXNoKGVycm9yKTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdC8qIEJ1aWxkIGVycm9yIG1lc3NhZ2UgKi9cclxuXHRcdFx0XHR2YXIgbWVzc2FnZSA9IGVycm9ycy5sZW5ndGggPyBlcnJvcnMuc2xpY2UoMCwgMykuam9pbignXFxuJykgOiAkbG9jYWxpemVgOkBAc25hY2tiYXIuZXJyb3IucmVxdWlyZWQtZmllbGRzOkFsbCBmaWVsZHMgbWFya2VkIHdpdGggYW4gYXN0ZXJpc2sgKCopIGFyZSByZXF1aXJlZC5gO1xyXG5cclxuXHRcdFx0XHQvKiBTaG93IGEgbm90aWNlICovXHJcblx0XHRcdFx0dGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbihtZXNzYWdlLCAnT2snLCB7IGR1cmF0aW9uOiAzMDAwLCBwYW5lbENsYXNzOiBbJ2Vycm9yJ10gfSk7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9KSgpO1xyXG5cclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogUmVzZXRzIGZvcm0gY29udHJvbHMuXHJcblx0ICogVGhpcyBtZXRob2QgbWFya3MgYWxsIGNvbnRyb2xzIGluIHRoZSBmb3JtIGFzIHByaXN0aW5lLCB1bnRvdWNoZWQsIGFuZCB1cGRhdGVzIHRoZWlyIHZhbGlkaXR5LlxyXG5cdCAqIEBwYXJhbSBmb3JtIFRoZSBmb3JtIHRvIHJlc2V0LlxyXG5cdCAqL1xyXG5cdHB1YmxpYyByZXNldEZvcm0oZm9ybTogTmdGb3JtKTogdm9pZCB7XHJcblx0XHRpZiAoIWZvcm0pIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdE9iamVjdC5rZXlzKGZvcm0uY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuXHRcdFx0bGV0IGN0ciA9IGZvcm0uY29udHJvbHNba2V5XTtcclxuXHRcdFx0Y3RyLm1hcmtBc1ByaXN0aW5lKCk7XHJcblx0XHRcdGN0ci5tYXJrQXNVbnRvdWNoZWQoKTtcclxuXHRcdFx0Y3RyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSW52YWxpZGF0ZXMgY29udHJvbHMgcmVjdXJzaXZlbHkuXHJcblx0ICogVGhpcyBtZXRob2QgbWFya3MgYWxsIGNvbnRyb2xzIGluIHRoZSBncm91cCBhcyBkaXJ0eSBhbmQgdG91Y2hlZCBpZiB0aGV5IGFyZSBpbnZhbGlkLlxyXG5cdCAqIEBwYXJhbSBjb250cm9sIFRoZSBjb250cm9sIG9yIGdyb3VwIG9mIGNvbnRyb2xzIHRvIGludmFsaWRhdGUuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGludmFsaWRhdGVDb250cm9sKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHZvaWQge1xyXG5cdFx0LyogQ2hlY2sgdGhlIGNvbnRyb2wgYWdhaW5zdCBudWxsICovXHJcblx0XHRpZiAoIWNvbnRyb2wpIHtcclxuXHRcdFx0cmV0dXJuO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIENoZWNrIGlmIHRoZSBjb250cm9sIGlzIGEgZ3JvdXAgKi9cclxuXHRcdGxldCBmb3JtR3JvdXAgPSBjb250cm9sIGFzIEZvcm1Hcm91cDtcclxuXHRcdGlmIChmb3JtR3JvdXA/LmNvbnRyb2xzKSB7XHJcblx0XHRcdE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scylcclxuXHRcdFx0XHQuZmlsdGVyKHggPT4gIWZvcm1Hcm91cC5jb250cm9sc1t4XS52YWxpZClcclxuXHRcdFx0XHQuZm9yRWFjaCh4ID0+IHRoaXMuaW52YWxpZGF0ZUNvbnRyb2woZm9ybUdyb3VwLmNvbnRyb2xzW3hdKSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcblx0XHRcdGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2hvd3MgZm9ybSBlcnJvcnMuXHJcblx0ICogVGhpcyBtZXRob2QgbG9ncyBmb3JtIGNvbnRyb2wgZXJyb3JzIHRvIHRoZSBjb25zb2xlIGlmIGRlYnVnZ2luZyBpcyBlbmFibGVkLlxyXG5cdCAqIEBwYXJhbSBmb3JtIFRoZSBmb3JtIHRvIGRlYnVnLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBkZWJ1Z0Zvcm0oZm9ybT86IE5nRm9ybSB8IEZvcm1Hcm91cCk6IHZvaWQge1xyXG5cdFx0aWYgKGZvcm0gJiYgdGhpcy5kZWJ1Zykge1xyXG5cdFx0XHRjb25zb2xlLmxvZygnRm9ybTonLCBmb3JtKTtcclxuXHRcdFx0T2JqZWN0LmtleXMoZm9ybS5jb250cm9scykuZm9yRWFjaChrZXkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xFcnJvcnM6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsID0gZm9ybS5jb250cm9sc1trZXldLmVycm9ycztcclxuXHRcdFx0XHRpZiAoY29udHJvbEVycm9ycyAhPSBudWxsKSB7XHJcblx0XHRcdFx0XHRPYmplY3Qua2V5cyhjb250cm9sRXJyb3JzKS5mb3JFYWNoKGtleUVycm9yID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5sb2coJ0tleSBjb250cm9sOiAnICsga2V5ICsgJywga2V5RXJyb3I6ICcgKyBrZXlFcnJvciArICcsIGVyciB2YWx1ZTogJywgY29udHJvbEVycm9yc1trZXlFcnJvcl0pO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEFkZHMgdG9vbGJhciBtZW51IGl0ZW1zLlxyXG5cdCAqIFRoaXMgbWV0aG9kIGFkZHMgdGhlICdEZWxldGUnIG1lbnUgaXRlbSB0byB0aGUgdG9vbGJhciBpZiB0aGUgZW50aXR5IGlzIGRlbGV0YWJsZS5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgYWRkVG9vbGJhck1lbnVJdGVtcygpOiB2b2lkIHtcclxuXHRcdC8qIEFkZCAnRGVsZXRlJyBtZW51IGl0ZW0gKi9cclxuXHRcdGlmICh0aGlzLmRlbGV0YWJsZSkge1xyXG5cdFx0XHR0aGlzLnRvb2xiYXJNZW51SXRlbXMucHVzaCh7XHJcblx0XHRcdFx0dGl0bGU6ICRsb2NhbGl6ZWA6QEBkZWxldGU6RGVsZXRlYCxcclxuXHRcdFx0XHRpY29uOiAnZGVsZXRlX2ZvcmV2ZXInLFxyXG5cdFx0XHRcdGljb25DbGFzczogJ3RjLW9yYW5nZS04MDAnLFxyXG5cdFx0XHRcdGV2ZW50OiAoKSA9PiB0aGlzLmRlbGV0ZSgpLFxyXG5cdFx0XHRcdGRpc2FibGU6ICgpID0+ICF0aGlzLmlkLFxyXG5cdFx0XHRcdGhpZGU6ICgpID0+ICF0aGlzLmNhbkRlbGV0ZUl0ZW0oKSxcclxuXHRcdFx0XHRpbmRleDogMTAwMFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAodGhpcy50b29sYmFyTWVudUl0ZW1zLmxlbmd0aCkge1xyXG5cdFx0XHQvKiBTb3J0IHRoZSBtZW51IGl0ZW1zIGJ5IGluZGV4ICovXHJcblx0XHRcdFV0aWxzLnNvcnRBcnJheSh0aGlzLnRvb2xiYXJNZW51SXRlbXMsICdpbmRleCcpO1xyXG5cclxuXHRcdFx0LyogQWRkIHRoZSB0b29sYmFyIG1lbnUgaXRlbXMgdG8gdGhlIHRoZSB0b29sYmFyIGFjdGlvbnMgKi9cclxuXHRcdFx0dGhpcy50b29sYmFyQWN0aW9ucy5wdXNoKHsgaWNvbjogJ21vcmVfdmVydCcsIGl0ZW1zOiB0aGlzLnRvb2xiYXJNZW51SXRlbXMgfSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBMb2FkcyB0aGUgcHJldmlvdXMgVVJMIGluIHRoZSBoaXN0b3J5IGxpc3QuXHJcblx0ICogVGhpcyBtZXRob2QgbmF2aWdhdGVzIGJhY2sgdG8gdGhlIHByZXZpb3VzIFVSTCBvciBwZXJmb3JtcyBzcGVjaWZpYyBhY3Rpb25zIGJhc2VkIG9uIHRoZSBzYXZlIGFjdGlvbi5cclxuXHQgKiBAcGFyYW0gYWN0aW9uIFRoZSBzYXZlIGFjdGlvbiB0aGF0IGRldGVybWluZXMgdGhlIG5hdmlnYXRpb24gYmVoYXZpb3IuXHJcblx0ICovXHJcblx0cHVibGljIGJhY2soYWN0aW9uOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLnJlbG9hZC5vYnNlcnZlZCkge1xyXG5cdFx0XHQvKiBJZiB0aGVyZSBhcmUgb2JzZXJ2ZXJzIGZvciB0aGUgcmVsb2FkIGV2ZW50LCBlbWl0IHRoZSBjdXJyZW50IGZvcm0gdmFsdWUgKi9cclxuXHRcdFx0dGhpcy5yZWxvYWQuZW1pdCh0aGlzLmZvcm1WYWx1ZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvKiBObyBvYnNlcnZlcnMsIHByb2NlZWQgd2l0aCBuYXZpZ2F0aW9uIGxvZ2ljICovXHJcblx0XHRcdGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UgJiYgdGhpcy5yZXR1cm5VcmwpIHtcclxuXHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byB0aGUgcmV0dXJuIFVSTCBpZiBhY3Rpb24gaXMgU2F2ZUFuZENsb3NlIGFuZCByZXR1cm5VcmwgaXMgc2V0ICovXHJcblx0XHRcdFx0dGhpcy5uYXZpZ2F0ZVRvUmV0dXJuVXJsKCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0LyogTm8gcmV0dXJuVXJsLCBjb250aW51ZSB3aXRoIG90aGVyIGFjdGlvbnMgKi9cclxuXHRcdFx0XHRpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlKSB7XHJcblx0XHRcdFx0XHQvKiBHbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBwYWdlIGluIGhpc3RvcnkgKi9cclxuXHRcdFx0XHRcdHRoaXMubG9jYXRpb24uYmFjaygpO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoYWN0aW9uID09IFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQgJiYgcGFyc2VJbnQodGhpcy5pZD8udG9TdHJpbmcoKSA/PyAnMCcpID4gMCkge1xyXG5cdFx0XHRcdFx0LyogRm9yIFNhdmVBbmRFZGl0IGFjdGlvbiB3aXRoIGEgdmFsaWQgSUQgKi9cclxuXHRcdFx0XHRcdGlmICghdGhpcy5jdXJyZW50QmFzZVJvdXRlPy5lbmRzV2l0aCgnL2FkZCcpKSB7XHJcblx0XHRcdFx0XHRcdC8qIFJlbG9hZCB0aGUgcGFnZSBpZiB0aGUgY3VycmVudCByb3V0ZSBkb2VzIG5vdCBlbmQgd2l0aCAnL2FkZCcgKi9cclxuXHRcdFx0XHRcdFx0dGhpcy5yZWxvYWRQYWdlKCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHQvKiBOYXZpZ2F0ZSB0byB0aGUgZWRpdCByb3V0ZSAqL1xyXG5cdFx0XHRcdFx0XHR0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5hZGRTYXZlQW5kRWRpdFJvdXRlfSR7dGhpcy5pZH1gXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG5cclxuXHRcdFx0XHRcdFx0LyogUmVwbGFjZSB0aGUgY3VycmVudCBoaXN0b3J5IGVudHJ5IHRvIHJlbW92ZSB0aGlzIHBhZ2UgZnJvbSB0aGUgaGlzdG9yeSAqL1xyXG5cdFx0XHRcdFx0XHR0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtgJHt0aGlzLmFkZFNhdmVBbmRFZGl0Um91dGV9JHt0aGlzLmlkfWBdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSkudG9TdHJpbmcoKSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSBlbHNlIGlmIChhY3Rpb24gPT0gU2F2ZUFjdGlvbi5TYXZlQW5kTmV3KSB7XHJcblx0XHRcdFx0XHQvKiBIYW5kbGUgU2F2ZUFuZE5ldyBhY3Rpb24gKi9cclxuXHRcdFx0XHRcdHRoaXMuYWZ0ZXJSZWxvYWQoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFNldHMgdGhlIHJldHVybiBVUkwuXHJcblx0ICogVGhpcyBtZXRob2Qgc2V0cyB0aGUgcmV0dXJuIFVSTCBhbmQgdXBkYXRlcyB0aGUgbGlzdCByb3V0ZSBhY2NvcmRpbmdseS5cclxuXHQgKiBAcGFyYW0gcmV0dXJuVXJsIFRoZSBVUkwgdG8gcmV0dXJuIHRvIGFmdGVyIHRoZSBjdXJyZW50IGFjdGlvbiBpcyBjb21wbGV0ZS5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgc2V0UmV0dXJuVXJsKHJldHVyblVybDogc3RyaW5nKTogdm9pZCB7XHJcblx0XHRzdXBlci5zZXRSZXR1cm5VcmwocmV0dXJuVXJsKTtcclxuXHRcdHRoaXMubGlzdFJvdXRlID0gdGhpcy5yZXR1cm5VcmwgfHwgdGhpcy5saXN0Um91dGU7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIFRFbnRpdHkuXHJcblx0ICogVGhpcyBtZXRob2QgaW5pdGlhbGl6ZXMgYSBuZXcgZW50aXR5IHVzaW5nIHRoZSBwcm92aWRlZCBjb25zdHJ1Y3Rvci5cclxuXHQgKiBAcGFyYW0gaW5pdCBPcHRpb25hbCBwYXJ0aWFsIGluaXRpYWxpemF0aW9uIG9iamVjdC5cclxuXHQgKiBAcmV0dXJucyBBIG5ldyBpbnN0YW5jZSBvZiBURW50aXR5LlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBuZXdJbnN0YW5jZShpbml0PzogUGFydGlhbDxURW50aXR5Pik6IFRFbnRpdHkge1xyXG5cdFx0cmV0dXJuIG5ldyB0aGlzLmVudGl0eUN0b3IoaW5pdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBDcmVhdGVzIHRoZSBlbnRpdHkuXHJcblx0ICogVGhpcyBtZXRob2Qgc2VuZHMgYSByZXF1ZXN0IHRvIGNyZWF0ZSBhIG5ldyBlbnRpdHkgb24gdGhlIHNlcnZlci5cclxuXHQgKiBAcGFyYW0gaHR0cE9wdGlvbnMgT3B0aW9uYWwgSFRUUCBvcHRpb25zIGZvciB0aGUgcmVxdWVzdC5cclxuXHQgKiBAcGFyYW0gaHR0cEhlYWRlcnMgT3B0aW9uYWwgSFRUUCBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdC5cclxuXHQgKiBAcmV0dXJucyBBbiBPYnNlcnZhYmxlIG9mIHRoZSBjcmVhdGVkIFRFbnRpdHkuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGNyZWF0ZTxURW50aXR5PihodHRwT3B0aW9ucz86IE9iamVjdCwgaHR0cEhlYWRlcnM/OiBIdHRwSGVhZGVycyk6IE9ic2VydmFibGU8VEVudGl0eT4ge1xyXG5cdFx0dGhpcy5vbkJlZm9yZUNyZWF0ZSgpO1xyXG5cdFx0cmV0dXJuIHRoaXMuc2VydmljZS5jcmVhdGU8VEVudGl0eT4oXHJcblx0XHRcdHRoaXMuZm9ybVZhbHVlLFxyXG5cdFx0XHR1bmRlZmluZWQsXHJcblx0XHRcdE9iamVjdC5hc3NpZ24oaHR0cE9wdGlvbnMgfHwge30sIHsgaGVhZGVyczogaHR0cEhlYWRlcnMgPz8gdGhpcy50b0h0dHBIZWFkZXJzKHsgJ1Nob3ctTWVzc2FnZSc6ICd5ZXMnIH0pIH0pLFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFVwZGF0ZXMgdGhlIGVudGl0eS5cclxuXHQgKiBUaGlzIG1ldGhvZCBzZW5kcyBhIHJlcXVlc3QgdG8gdXBkYXRlIGFuIGV4aXN0aW5nIGVudGl0eSBvbiB0aGUgc2VydmVyLlxyXG5cdCAqIEBwYXJhbSBodHRwT3B0aW9ucyBPcHRpb25hbCBIVFRQIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxyXG5cdCAqIEBwYXJhbSBodHRwSGVhZGVycyBPcHRpb25hbCBIVFRQIGhlYWRlcnMgZm9yIHRoZSByZXF1ZXN0LlxyXG5cdCAqIEByZXR1cm5zIEFuIE9ic2VydmFibGUgb2YgdGhlIHVwZGF0ZWQgVEVudGl0eS5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgdXBkYXRlKGh0dHBPcHRpb25zPzogT2JqZWN0LCBodHRwSGVhZGVycz86IEh0dHBIZWFkZXJzKTogT2JzZXJ2YWJsZTxURW50aXR5PiB7XHJcblx0XHR0aGlzLm9uQmVmb3JlVXBkYXRlKCk7XHJcblx0XHRyZXR1cm4gdGhpcy5zZXJ2aWNlLnVwZGF0ZSh0aGlzLmlkISxcclxuXHRcdFx0T2JqZWN0LmFzc2lnbih0aGlzLml0ZW0hLCB0aGlzLmZvcm1WYWx1ZSksXHJcblx0XHRcdHVuZGVmaW5lZCxcclxuXHRcdFx0T2JqZWN0LmFzc2lnbihodHRwT3B0aW9ucyB8fCB7fSwgeyBoZWFkZXJzOiBodHRwSGVhZGVycyA/PyB0aGlzLnRvSHR0cEhlYWRlcnMoeyAnU2hvdy1NZXNzYWdlJzogJ3llcycgfSksIH0pLFxyXG5cdFx0XHRmYWxzZVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEluY2x1ZGVzIHNwZWNpZmllZCBuYXZpZ2F0aW9ucy5cclxuXHQgKiBUaGlzIG1ldGhvZCBhZGRzIHNwZWNpZmllZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgdG8gdGhlIGluY2x1ZGVzIGFycmF5LFxyXG5cdCAqIG9wdGlvbmFsbHkgYWRkaW5nIHRoZW0gdG8gdGhlIHVwZGF0ZUluY2x1ZGVzIGFycmF5IGFzIHdlbGwuXHJcblx0ICogQHBhcmFtIGluYyBUaGUgbmF2aWdhdGlvbiBwcm9wZXJ0eSB0byBpbmNsdWRlLlxyXG5cdCAqIEBwYXJhbSB1cGRhdGUgV2hldGhlciB0byBpbmNsdWRlIGluIHVwZGF0ZUluY2x1ZGVzIGFycmF5LlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBpbmNsdWRlKGluYzogc3RyaW5nLCB1cGRhdGU6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG5cdFx0dGhpcy5pbmNsdWRlcy5wdXNoKGluYyk7XHJcblx0XHRpZiAodXBkYXRlKSB7XHJcblx0XHRcdHRoaXMudXBkYXRlSW5jbHVkZXMucHVzaChpbmMpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ2hlY2tzIGlmIHRoZSBpdGVtIGlzIGRlbGV0YWJsZS5cclxuXHQgKiBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIGlmIHRoZSBjdXJyZW50IGl0ZW0gY2FuIGJlIGRlbGV0ZWQgYmFzZWQgb24gaXRzIHByb3BlcnRpZXMuXHJcblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgaXRlbSBjYW4gYmUgZGVsZXRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBjYW5EZWxldGVJdGVtKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5jYW5EZWxldGUgJiYgKCF0aGlzLml0ZW0/Lmhhc093blByb3BlcnR5KCdkZWxldGFibGUnKSB8fCAodGhpcy5pdGVtIGFzIGFueSlbJ2RlbGV0YWJsZSddKTsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIElEIGlzIHNldC5cclxuXHQgKiBUaGlzIG1ldGhvZCB0cmlnZ2VycyB0aGUgbG9hZGluZyBvZiB0aGUgaXRlbSB3aGVuIHRoZSBJRCBpcyBzZXQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJTZXRJZCgpOiB2b2lkIHtcclxuXHRcdGlmICh0aGlzLmlkKSB7XHJcblx0XHRcdHRoaXMubG9hZEl0ZW0oKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0ZWQgc3RlcCBoYXMgY2hhbmdlZC5cclxuXHQgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIGFjdGlvbnMgdG8gYmUgdGFrZW4gd2hlbiB0aGUgc3RlcHBlciBzZWxlY3Rpb24gY2hhbmdlcy5cclxuXHQgKiBAcGFyYW0gJGV2ZW50IFRoZSBzdGVwcGVyIHNlbGVjdGlvbiBldmVudC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlclN0ZXBDaGFuZ2UoJGV2ZW50OiBTdGVwcGVyU2VsZWN0aW9uRXZlbnQpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBTZXRzIHRoZSBzZWxlY3RlZCBzdGVwIGluIHRoZSBzdGVwcGVyIGJhc2VkIG9uIHRoZSBVUkwgaGFzaC5cclxuXHQgKiBNYXJrcyBhbGwgcHJldmlvdXMgc3RlcHMgYXMgY29tcGxldGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBzZWxlY3RTdGVwQmFzZWRPblVybEhhc2goKTogdm9pZCB7XHJcblx0XHQvKiBFbnN1cmUgd2UgYXJlIG5vdCBpbiBlZGl0IG1vZGUsIGFuZCB0aGF0IGJvdGggdGhlIHN0ZXBwZXIgYW5kIFVSTCBoYXNoIGFyZSBhdmFpbGFibGUgKi9cclxuXHRcdGlmICghdGhpcy5pc0VkaXRNb2RlICYmIHRoaXMubWF0U3RlcHBlciAmJiB0aGlzLnVybEhhc2gpIHtcclxuXHJcblx0XHRcdC8qIEZpbmQgdGhlIHN0ZXAgdGhhdCBtYXRjaGVzIHRoZSBzdGF0ZSBmcm9tIHRoZSBVUkwgaGFzaCAqL1xyXG5cdFx0XHRjb25zdCBtYXRjaGVkU3RlcCA9IHRoaXMubWF0U3RlcHBlci5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLnN0YXRlID09PSB0aGlzLnVybEhhc2gpO1xyXG5cclxuXHRcdFx0aWYgKG1hdGNoZWRTdGVwKSB7XHJcblx0XHRcdFx0LyogR2V0IHRoZSBpbmRleCBvZiB0aGUgbWF0Y2hlZCBzdGVwICovXHJcblx0XHRcdFx0Y29uc3QgbWF0Y2hlZEluZGV4ID0gdGhpcy5tYXRTdGVwcGVyLnN0ZXBzLnRvQXJyYXkoKS5pbmRleE9mKG1hdGNoZWRTdGVwKTtcclxuXHJcblx0XHRcdFx0LyogTWFyayBhbGwgcHJldmlvdXMgc3RlcHMgYXMgY29tcGxldGVkICovXHJcblx0XHRcdFx0dGhpcy5tYXRTdGVwcGVyLnN0ZXBzLmZvckVhY2goKHN0ZXAsIGluZGV4KSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoaW5kZXggPCBtYXRjaGVkSW5kZXgpIHtcclxuXHRcdFx0XHRcdFx0c3RlcC5jb21wbGV0ZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHQvKiBTZXQgdGhlIHNlbGVjdGVkIHN0ZXAgYmFzZWQgb24gdGhlIG1hdGNoZWQgc3RhdGUgKi9cclxuXHRcdFx0XHR0aGlzLm1hdFN0ZXBwZXIuc2VsZWN0ZWRJbmRleCA9IG1hdGNoZWRJbmRleDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCB3aGVuIHRoZSBlbnRpdHkgaGFzIGJlZW4gbG9hZGVkLlxyXG5cdCAqIFRoaXMgbWV0aG9kIGhhbmRsZXMgYWN0aW9ucyB0byBiZSB0YWtlbiBhZnRlciB0aGUgZW50aXR5IGlzIGxvYWRlZC5cclxuXHQgKi9cclxuXHRwcm90ZWN0ZWQgb25BZnRlckl0ZW1Mb2FkZWQoKTogdm9pZCB7IH1cclxuXHJcblx0LyoqXHJcblx0ICogRXZlbnQgZW1pdHRlZCBiZWZvcmUgdGhlIGZvcm0gaXMgYnVpbHQuXHJcblx0ICogVGhpcyBtZXRob2QgYWxsb3dzIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyBiZWZvcmUgdGhlIGZvcm0gaXMgY29uc3RydWN0ZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQmVmb3JlRm9ybUJ1aWxkKCk6IHZvaWQgeyB9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgZm9ybSBoYXMgYmVlbiBidWlsdC5cclxuXHQgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIGFjdGlvbnMgdG8gYmUgdGFrZW4gYWZ0ZXIgdGhlIGZvcm0gaXMgY29uc3RydWN0ZWQsXHJcblx0ICogc3VjaCBhcyBkaXNhYmxpbmcgZm9ybSBjb250cm9scyBpZiB0aGUgZm9ybSBpcyBzZXQgdG8gYmUgZGlzYWJsZWQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIG9uQWZ0ZXJGb3JtQnVpbGQoKTogdm9pZCB7XHJcblx0XHRpZiAodGhpcy5mb3JtICYmIHRoaXMuZGlzYWJsZWQpIHtcclxuXHRcdFx0T2JqZWN0LmtleXModGhpcy5mb3JtLmNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcblx0XHRcdFx0bGV0IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCA9IHRoaXMuZm9ybSEuY29udHJvbHNba2V5XTtcclxuXHRcdFx0XHRjb250cm9sPy5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiBjcmVhdGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkJlZm9yZUNyZWF0ZSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGVudGl0eSBoYXMgYmVlbiB1cGRhdGVkLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkJlZm9yZVVwZGF0ZSgpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBDYWxsZWQgYmVmb3JlIGRhdGEgc3VibWlzc2lvbi5cclxuXHQgKiBUaGlzIG1ldGhvZCBhbGxvd3MgcGVyZm9ybWluZyBvcGVyYXRpb25zIGJlZm9yZSBzdWJtaXR0aW5nIGRhdGEuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGJlZm9yZVN1Ym1pdChfOiBTYXZlQWN0aW9uID0gU2F2ZUFjdGlvbi5TYXZlQW5kQ2xvc2UpOiB2b2lkIHsgfVxyXG5cclxuXHQvKipcclxuXHQgKiBFdmVudCBlbWl0dGVkIGFmdGVyIGRhdGEgc3VibWlzc2lvbi5cclxuXHQgKiBUaGlzIG1ldGhvZCBoYW5kbGVzIHBvc3Qtc3VibWlzc2lvbiBhY3Rpb25zIHN1Y2ggYXMgcmVzZXR0aW5nIHRoZSBzYXZpbmcgc3RhdGUsXHJcblx0ICogdXBkYXRpbmcgdGhlIGNoYW5nZSBkZXRlY3RvciwgYW5kIG5hdmlnYXRpbmcgYmFjayBiYXNlZCBvbiB0aGUgc2F2ZSBhY3Rpb24uXHJcblx0ICogQHBhcmFtIGFjdGlvbiBUaGUgc2F2ZSBhY3Rpb24gdGFrZW4gKGUuZy4sIFNhdmVBbmRDbG9zZSwgU2F2ZUFuZE5ldykuXHJcblx0ICogQHBhcmFtIHJlc3BvbnNlIFRoZSByZXNwb25zZSByZWNlaXZlZCBhZnRlciBzdWJtaXNzaW9uLlxyXG5cdCAqL1xyXG5cdHByb3RlY3RlZCBvbkFmdGVyU3VibWl0KGFjdGlvbjogU2F2ZUFjdGlvbiA9IFNhdmVBY3Rpb24uU2F2ZUFuZENsb3NlLCByZXNwb25zZTogYW55ID0gbnVsbCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pc1NhdmluZyA9IGZhbHNlO1xyXG5cdFx0dGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblx0XHR0aGlzLmJhY2soYWN0aW9uKTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENhbGxlZCBhZnRlciB0aGUgcGFnZSBpcyByZWxvYWRlZC5cclxuXHQgKiBUaGlzIG1ldGhvZCByZWluaXRpYWxpemVzIHRoZSBpdGVtIHdpdGggYSBuZXcgaW5zdGFuY2UgYW5kIGFwcGxpZXMgYW55IHF1ZXJ5IHBhcmFtZXRlcnMuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGFmdGVyUmVsb2FkKCk6IHZvaWQge1xyXG5cdFx0dGhpcy5pdGVtID0gT2JqZWN0LmFzc2lnbih0aGlzLm5ld0luc3RhbmNlKCksIHRoaXMucXVlcnkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogU2V0cyBmb2N1cyB0byB0aGUgZmlyc3QgaW5wdXQgZWxlbWVudC5cclxuXHQgKiBFbnN1cmVzIHRoZSBmaXJzdCBpbnB1dCBlbGVtZW50IGluIHRoZSBmb3JtIGlzIGZvY3VzZWQgZm9yIHVzZXIgY29udmVuaWVuY2UuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGZvY3VzKCk6IHZvaWQge1xyXG5cdFx0aWYgKHRoaXMuaW5wdXQgJiYgdGhpcy5pbnB1dC5maXJzdCAmJiB0aGlzLmlucHV0LmZpcnN0Lm5hdGl2ZUVsZW1lbnQpIHtcclxuXHRcdFx0dGhpcy5pbnB1dC5maXJzdC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBSZXRyaWV2ZXMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIGEgZ2l2ZW4gbmF0aXZlIGVsZW1lbnQuXHJcblx0ICogVGhpcyBtZXRob2QgbmF2aWdhdGVzIHRocm91Z2ggdGhlIERPTSBzdHJ1Y3R1cmUgdG8gZmluZCBlcnJvciBtZXNzYWdlcyBhc3NvY2lhdGVkIHdpdGggZm9ybSBmaWVsZHMuXHJcblx0ICogQHBhcmFtIG5hdGl2ZUVsZW1lbnQgVGhlIERPTSBlbGVtZW50IHRvIGNoZWNrIGZvciBlcnJvcnMuXHJcblx0ICogQHJldHVybnMgVGhlIGVycm9yIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50LCBvciB1bmRlZmluZWQgaWYgbm8gZXJyb3IgaXMgZm91bmQuXHJcblx0ICovXHJcblx0cHJvdGVjdGVkIGdldEVsZW1lbnRFcnJvcihuYXRpdmVFbGVtZW50OiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG5cdFx0LyogR2V0IHBhcmVudCBlbGVtZW50ICdtYXQtZm9ybS1maWVsZCcgKi9cclxuXHRcdHZhciBtYXRGb3JtRmllbGQgPSBuYXRpdmVFbGVtZW50Py5jbG9zZXN0KCcubWF0LWZvcm0tZmllbGQnKTtcclxuXHRcdGlmICghbWF0Rm9ybUZpZWxkKSB7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0LyogR2V0IGNoaWxkIGVsZW1lbnQgJ21hdC1lcnJvcicgKi9cclxuXHRcdHZhciBtYXRFcnJvcnMgPSBtYXRGb3JtRmllbGQucXVlcnlTZWxlY3RvckFsbCgnLm1hdC1lcnJvcicpO1xyXG5cdFx0aWYgKCFtYXRFcnJvcnMpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHJcblx0XHQvKiBHZXQgY2hpbGQgZWxlbWVudCAnbWF0LWxhYmVsJyAqL1xyXG5cdFx0dmFyIG1hdExhYmVsID0gbWF0Rm9ybUZpZWxkLnF1ZXJ5U2VsZWN0b3IoJ21hdC1sYWJlbCcpO1xyXG5cdFx0aWYgKCFtYXRMYWJlbCkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8qIEdldCBlcnJvciB0ZXh0cyAqL1xyXG5cdFx0dmFyIGVycm9yc0FycmF5ID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobWF0RXJyb3JzKVxyXG5cdFx0XHQ/LmZpbHRlcigoeDogYW55KSA9PiB4LnRleHRDb250ZW50KVxyXG5cdFx0XHQ/Lm1hcCgoeDogYW55KSA9PiB4LnRleHRDb250ZW50KTtcclxuXHJcblx0XHRyZXR1cm4gYCcke21hdExhYmVsLnRleHRDb250ZW50fSc6ICR7ZXJyb3JzQXJyYXk/LmpvaW4oJywgJyl9YDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFJlc3BvbmRzIHRvIHVzZXItaW5pdGlhdGVkIGtleWJvYXJkIGV2ZW50cy5cclxuXHQgKiBUaGlzIG1ldGhvZCBsaXN0ZW5zIGZvciBzcGVjaWZpYyBrZXkgY29tYmluYXRpb25zIGFuZCB0cmlnZ2VycyBzYXZlIGFjdGlvbnMgb3IgZm9ybSBjYW5jZWxsYXRpb24uXHJcblx0ICogQHBhcmFtIGV2ZW50IFRoZSBrZXlib2FyZCBldmVudCB0cmlnZ2VyZWQgYnkgdGhlIHVzZXIuXHJcblx0ICovXHJcblx0QEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcblx0aGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG5cdFx0aWYgKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkge1xyXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LmtleSkge1xyXG5cdFx0XHRcdGNhc2UgJ3MnOlxyXG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHRcdFx0XHRcdHRoaXMuc2F2ZShTYXZlQWN0aW9uLlNhdmVBbmRDbG9zZSk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0Y2FzZSAnZCc6XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZE5ldyk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0Y2FzZSAnZSc6XHJcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cdFx0XHRcdFx0dGhpcy5zYXZlKFNhdmVBY3Rpb24uU2F2ZUFuZEVkaXQpO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvKiBDYW5jZWwgdGhlIGZvcm0gaWYgdGhlIHVzZXIgcHJlc3NlcyB0aGUgRVNDIGtleSAqL1xyXG5cdFx0aWYgKGV2ZW50LmtleUNvZGUgPT0gMjcpIHtcclxuXHRcdFx0dGhpcy5iYWNrKCk7XHJcblx0XHR9XHJcblx0fVxyXG59Il19
@@ -26,6 +26,11 @@ export class ActionItem {
26
26
  * @type {((x?: TEntity, ctx?: TContext) => any) | string}
27
27
  */
28
28
  iconClass;
29
+ /**
30
+ * The color for the icon, which can be set as a string (e.g., hex, rgb).
31
+ * @type {string}
32
+ */
33
+ iconColor;
29
34
  /**
30
35
  * Event handler to execute when the action item is triggered.
31
36
  * @param {x} The entity associated with the action item.
@@ -56,6 +61,11 @@ export class ActionItem {
56
61
  * @type {number}
57
62
  */
58
63
  index;
64
+ /**
65
+ * The text color for the action item, specified as a hex string or a color name.
66
+ * @type {string}
67
+ */
68
+ textColor;
59
69
  /**
60
70
  * Constructor to initialize an ActionItem instance with optional properties.
61
71
  * @param init - Partial properties to initialize the action item.
@@ -64,4 +74,4 @@ export class ActionItem {
64
74
  Object.assign(this, init);
65
75
  }
66
76
  }
67
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9jb21tb24vbW9kZWxzL2FjdGlvbi1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxVQUFVO0lBQ25COzs7T0FHRztJQUNJLEtBQUssQ0FBVTtJQUV0Qjs7O09BR0c7SUFDSSxPQUFPLENBQVU7SUFFeEI7Ozs7T0FJRztJQUNJLElBQUksR0FBcUQsd0JBQXdCLENBQUM7SUFFekY7OztPQUdHO0lBQ0ksV0FBVyxHQUFZLDJCQUEyQixDQUFDO0lBRTFEOzs7O09BSUc7SUFDSSxTQUFTLENBQW1EO0lBRW5FOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBd0Q7SUFFcEU7Ozs7T0FJRztJQUNJLElBQUksQ0FBd0Q7SUFFbkU7Ozs7T0FJRztJQUNJLE9BQU8sQ0FBd0Q7SUFFdEU7OztPQUdHO0lBQ0ksS0FBSyxDQUF5QjtJQUVyQzs7O09BR0c7SUFDSSxLQUFLLENBQVU7SUFFdEI7OztPQUdHO0lBQ0gsWUFBbUIsSUFBNkM7UUFDNUQsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIEFjdGlvbkl0ZW08VEVudGl0eSA9IGFueSwgVENvbnRleHQgPSBhbnk+IHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHRpdGxlIG9mIHRoZSBhY3Rpb24gaXRlbS5cclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0aXRsZT86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRvb2x0aXAgdGV4dCBmb3IgdGhlIGFjdGlvbiBpdGVtLCBkaXNwbGF5ZWQgb24gaG92ZXIuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdG9vbHRpcD86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBpY29uIGZvciB0aGUgYWN0aW9uIGl0ZW0sIHdoaWNoIGNhbiBiZSBhIHN0cmluZyBvciBhIGZ1bmN0aW9uXHJcbiAgICAgKiB0aGF0IHJldHVybnMgYW4gaWNvbiBiYXNlZCBvbiB0aGUgZW50aXR5IGFuZCBjb250ZXh0LlxyXG4gICAgICogQHR5cGUgeygoeD86IFRFbnRpdHksIGN0eD86IFRDb250ZXh0KSA9PiBhbnkpIHwgc3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaWNvbj86ICgoeD86IFRFbnRpdHksIGN0eD86IFRDb250ZXh0KSA9PiBhbnkpIHwgc3RyaW5nID0gJ3JhZGlvX2J1dHRvbl91bmNoZWNrZWQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGZvbnQgc2V0IHRvIHVzZSBmb3IgdGhlIGljb24sIGRlZmF1bHRpbmcgdG8gJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgcHVibGljIGljb25Gb250U2V0Pzogc3RyaW5nID0gJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkaXRpb25hbCBDU1MgY2xhc3MgZm9yIHRoZSBpY29uLCB3aGljaCBjYW4gYmUgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgXHJcbiAgICAgKiBhIGNsYXNzIGJhc2VkIG9uIHRoZSBlbnRpdHkgYW5kIGNvbnRleHQuXHJcbiAgICAgKiBAdHlwZSB7KCh4PzogVEVudGl0eSwgY3R4PzogVENvbnRleHQpID0+IGFueSkgfCBzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpY29uQ2xhc3M/OiAoKHg/OiBURW50aXR5LCBjdHg/OiBUQ29udGV4dCkgPT4gYW55KSB8IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50IGhhbmRsZXIgdG8gZXhlY3V0ZSB3aGVuIHRoZSBhY3Rpb24gaXRlbSBpcyB0cmlnZ2VyZWQuXHJcbiAgICAgKiBAcGFyYW0ge3h9IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3Rpb24gaXRlbS5cclxuICAgICAqIEBwYXJhbSB7Y3R4fSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgYWN0aW9uIGl0ZW0gaXMgZXhlY3V0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2luZGV4fSBUaGUgaW5kZXggb2YgdGhlIGFjdGlvbiBpdGVtIGluIHRoZSBsaXN0LlxyXG4gICAgICogQHR5cGUgeygoeD86IFRFbnRpdHksIGN0eD86IFRDb250ZXh0LCBpbmRleD86IG51bWJlcikgPT4gYW55KX1cclxuICAgICAqL1xyXG4gICAgcHVibGljIGV2ZW50PzogKHg/OiBURW50aXR5LCBjdHg/OiBUQ29udGV4dCwgaW5kZXg/OiBudW1iZXIpID0+IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGhpZGUgdGhlIGFjdGlvbiBpdGVtIGJhc2VkIG9uIHRoZSBlbnRpdHksIFxyXG4gICAgICogY29udGV4dCwgYW5kIGluZGV4LlxyXG4gICAgICogQHR5cGUgeygoeD86IFRFbnRpdHksIGN0eD86IFRDb250ZXh0LCBpbmRleD86IG51bWJlcikgPT4gYW55KX1cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhpZGU/OiAoeD86IFRFbnRpdHksIGN0eD86IFRDb250ZXh0LCBpbmRleD86IG51bWJlcikgPT4gYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgYWN0aW9uIGl0ZW0gYmFzZWQgb24gdGhlIGVudGl0eSwgXHJcbiAgICAgKiBjb250ZXh0LCBhbmQgaW5kZXguXHJcbiAgICAgKiBAdHlwZSB7KCh4PzogVEVudGl0eSwgY3R4PzogVENvbnRleHQsIGluZGV4PzogbnVtYmVyKSA9PiBhbnkpfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGlzYWJsZT86ICh4PzogVEVudGl0eSwgY3R4PzogVENvbnRleHQsIGluZGV4PzogbnVtYmVyKSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZXN0ZWQgYWN0aW9uIGl0ZW1zLCBhbGxvd2luZyBmb3Igc3VibWVudXMuXHJcbiAgICAgKiBAdHlwZSB7QWN0aW9uSXRlbTxURW50aXR5PltdfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXRlbXM/OiBBY3Rpb25JdGVtPFRFbnRpdHk+W107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGFjdGlvbiBpdGVtIGluIGEgbGlzdCwgdXNlZCBmb3Igb3JkZXJpbmcgb3IgaWRlbnRpZmljYXRpb24uXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5kZXg/OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIGFuIEFjdGlvbkl0ZW0gaW5zdGFuY2Ugd2l0aCBvcHRpb25hbCBwcm9wZXJ0aWVzLlxyXG4gICAgICogQHBhcmFtIGluaXQgLSBQYXJ0aWFsIHByb3BlcnRpZXMgdG8gaW5pdGlhbGl6ZSB0aGUgYWN0aW9uIGl0ZW0uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0PzogUGFydGlhbDxBY3Rpb25JdGVtPFRFbnRpdHksIFRDb250ZXh0Pj4pIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpO1xyXG4gICAgfVxyXG59Il19
77
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWl0ZW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9jb21tb24vbW9kZWxzL2FjdGlvbi1pdGVtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxVQUFVO0lBQ25COzs7T0FHRztJQUNJLEtBQUssQ0FBVTtJQUV0Qjs7O09BR0c7SUFDSSxPQUFPLENBQVU7SUFFeEI7Ozs7T0FJRztJQUNJLElBQUksR0FBcUQsd0JBQXdCLENBQUM7SUFFekY7OztPQUdHO0lBQ0ksV0FBVyxHQUFZLDJCQUEyQixDQUFDO0lBRTFEOzs7O09BSUc7SUFDSSxTQUFTLENBQW1EO0lBRW5FOzs7T0FHRztJQUNJLFNBQVMsQ0FBVTtJQUUxQjs7Ozs7O09BTUc7SUFDSSxLQUFLLENBQXdEO0lBRXBFOzs7O09BSUc7SUFDSSxJQUFJLENBQXdEO0lBRW5FOzs7O09BSUc7SUFDSSxPQUFPLENBQXdEO0lBRXRFOzs7T0FHRztJQUNJLEtBQUssQ0FBeUI7SUFFckM7OztPQUdHO0lBQ0ksS0FBSyxDQUFVO0lBRXRCOzs7T0FHRztJQUNJLFNBQVMsQ0FBVTtJQUUxQjs7O09BR0c7SUFDSCxZQUFtQixJQUE2QztRQUM1RCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgQWN0aW9uSXRlbTxURW50aXR5ID0gYW55LCBUQ29udGV4dCA9IGFueT4ge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdGl0bGUgb2YgdGhlIGFjdGlvbiBpdGVtLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRpdGxlPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVG9vbHRpcCB0ZXh0IGZvciB0aGUgYWN0aW9uIGl0ZW0sIGRpc3BsYXllZCBvbiBob3Zlci5cclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0b29sdGlwPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGljb24gZm9yIHRoZSBhY3Rpb24gaXRlbSwgd2hpY2ggY2FuIGJlIGEgc3RyaW5nIG9yIGEgZnVuY3Rpb25cclxuICAgICAqIHRoYXQgcmV0dXJucyBhbiBpY29uIGJhc2VkIG9uIHRoZSBlbnRpdHkgYW5kIGNvbnRleHQuXHJcbiAgICAgKiBAdHlwZSB7KCh4PzogVEVudGl0eSwgY3R4PzogVENvbnRleHQpID0+IGFueSkgfCBzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpY29uPzogKCh4PzogVEVudGl0eSwgY3R4PzogVENvbnRleHQpID0+IGFueSkgfCBzdHJpbmcgPSAncmFkaW9fYnV0dG9uX3VuY2hlY2tlZCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZm9udCBzZXQgdG8gdXNlIGZvciB0aGUgaWNvbiwgZGVmYXVsdGluZyB0byAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCcuXHJcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaWNvbkZvbnRTZXQ/OiBzdHJpbmcgPSAnbWF0ZXJpYWwtc3ltYm9scy1vdXRsaW5lZCc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRpdGlvbmFsIENTUyBjbGFzcyBmb3IgdGhlIGljb24sIHdoaWNoIGNhbiBiZSBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBcclxuICAgICAqIGEgY2xhc3MgYmFzZWQgb24gdGhlIGVudGl0eSBhbmQgY29udGV4dC5cclxuICAgICAqIEB0eXBlIHsoKHg/OiBURW50aXR5LCBjdHg/OiBUQ29udGV4dCkgPT4gYW55KSB8IHN0cmluZ31cclxuICAgICAqL1xyXG4gICAgcHVibGljIGljb25DbGFzcz86ICgoeD86IFRFbnRpdHksIGN0eD86IFRDb250ZXh0KSA9PiBhbnkpIHwgc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbG9yIGZvciB0aGUgaWNvbiwgd2hpY2ggY2FuIGJlIHNldCBhcyBhIHN0cmluZyAoZS5nLiwgaGV4LCByZ2IpLlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqL1xyXG4gICAgcHVibGljIGljb25Db2xvcj86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIEV2ZW50IGhhbmRsZXIgdG8gZXhlY3V0ZSB3aGVuIHRoZSBhY3Rpb24gaXRlbSBpcyB0cmlnZ2VyZWQuXHJcbiAgICAgKiBAcGFyYW0ge3h9IFRoZSBlbnRpdHkgYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3Rpb24gaXRlbS5cclxuICAgICAqIEBwYXJhbSB7Y3R4fSBUaGUgY29udGV4dCBpbiB3aGljaCB0aGUgYWN0aW9uIGl0ZW0gaXMgZXhlY3V0ZWQuXHJcbiAgICAgKiBAcGFyYW0ge2luZGV4fSBUaGUgaW5kZXggb2YgdGhlIGFjdGlvbiBpdGVtIGluIHRoZSBsaXN0LlxyXG4gICAgICogQHR5cGUgeygoeD86IFRFbnRpdHksIGN0eD86IFRDb250ZXh0LCBpbmRleD86IG51bWJlcikgPT4gYW55KX1cclxuICAgICAqL1xyXG4gICAgcHVibGljIGV2ZW50PzogKHg/OiBURW50aXR5LCBjdHg/OiBUQ29udGV4dCwgaW5kZXg/OiBudW1iZXIpID0+IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyB3aGV0aGVyIHRvIGhpZGUgdGhlIGFjdGlvbiBpdGVtIGJhc2VkIG9uIHRoZSBlbnRpdHksIFxyXG4gICAgICogY29udGV4dCwgYW5kIGluZGV4LlxyXG4gICAgICogQHR5cGUgeygoeD86IFRFbnRpdHksIGN0eD86IFRDb250ZXh0LCBpbmRleD86IG51bWJlcikgPT4gYW55KX1cclxuICAgICAqL1xyXG4gICAgcHVibGljIGhpZGU/OiAoeD86IFRFbnRpdHksIGN0eD86IFRDb250ZXh0LCBpbmRleD86IG51bWJlcikgPT4gYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRnVuY3Rpb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgYWN0aW9uIGl0ZW0gYmFzZWQgb24gdGhlIGVudGl0eSwgXHJcbiAgICAgKiBjb250ZXh0LCBhbmQgaW5kZXguXHJcbiAgICAgKiBAdHlwZSB7KCh4PzogVEVudGl0eSwgY3R4PzogVENvbnRleHQsIGluZGV4PzogbnVtYmVyKSA9PiBhbnkpfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZGlzYWJsZT86ICh4PzogVEVudGl0eSwgY3R4PzogVENvbnRleHQsIGluZGV4PzogbnVtYmVyKSA9PiBhbnk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOZXN0ZWQgYWN0aW9uIGl0ZW1zLCBhbGxvd2luZyBmb3Igc3VibWVudXMuXHJcbiAgICAgKiBAdHlwZSB7QWN0aW9uSXRlbTxURW50aXR5PltdfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXRlbXM/OiBBY3Rpb25JdGVtPFRFbnRpdHk+W107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaW5kZXggb2YgdGhlIGFjdGlvbiBpdGVtIGluIGEgbGlzdCwgdXNlZCBmb3Igb3JkZXJpbmcgb3IgaWRlbnRpZmljYXRpb24uXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaW5kZXg/OiBudW1iZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdGV4dCBjb2xvciBmb3IgdGhlIGFjdGlvbiBpdGVtLCBzcGVjaWZpZWQgYXMgYSBoZXggc3RyaW5nIG9yIGEgY29sb3IgbmFtZS5cclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0ZXh0Q29sb3I/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb25zdHJ1Y3RvciB0byBpbml0aWFsaXplIGFuIEFjdGlvbkl0ZW0gaW5zdGFuY2Ugd2l0aCBvcHRpb25hbCBwcm9wZXJ0aWVzLlxyXG4gICAgICogQHBhcmFtIGluaXQgLSBQYXJ0aWFsIHByb3BlcnRpZXMgdG8gaW5pdGlhbGl6ZSB0aGUgYWN0aW9uIGl0ZW0uXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBjb25zdHJ1Y3Rvcihpbml0PzogUGFydGlhbDxBY3Rpb25JdGVtPFRFbnRpdHksIFRDb250ZXh0Pj4pIHtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMsIGluaXQpO1xyXG4gICAgfVxyXG59Il19
@@ -78,11 +78,11 @@ export class VdDynamicMenuComponent {
78
78
  }, { once: true });
79
79
  }
80
80
  /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VdDynamicMenuComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
81
- /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: VdDynamicMenuComponent, selector: "vd-dynamic-menu", inputs: { items: "items", data: "data", index: "index", context: "context", contextMenu: "contextMenu" }, viewQueries: [{ propertyName: "matMenu", first: true, predicate: MatMenu, descendants: true }, { propertyName: "contextMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<div layout=\"row\" layout-align=\"start center\" *ngIf=\"items\" flex>\r\n <ng-container *ngFor=\"let menu of items\">\r\n <!-- #region Button trigger -->\r\n <a mat-icon-button [mat-menu-trigger-for]=\"matMenu\" *ngIf=\"!contextMenu && menu?.items?.length && !(menu.hide && menu.hide(data, context, index))\" [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\" [matTooltip]=\"menu.tooltip\" (click)=\"$event.stopPropagation();\">\r\n <mat-icon fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menu.iconClass??'' | func:data:context\">{{(menu.icon??'more_vert' | func:data:context) || 'more_vert'}}</mat-icon>\r\n <span>{{menu.title}}</span>\r\n </a>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Context trigger -->\r\n <div *ngIf=\"contextMenu\" style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\" [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"matMenu\"></div>\r\n <!-- #endregion -->\r\n\r\n <a mat-icon-button *ngIf=\"!menu?.items?.length && !(menu.hide && menu.hide(data, context, index))\" [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\" [matTooltip]=\"menu.tooltip\" (click)=\"$event.stopPropagation(); menu.event?menu.event(data, context, index):null\">\r\n <mat-icon fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menu.iconClass??'' | func:data:context\">{{(menu.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}</mat-icon>\r\n </a>\r\n <mat-menu x-position=\"before\" #matMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let menuItem of menu?.items\">\r\n <ng-container *ngIf=\"!menuItem.items\">\r\n <a mat-menu-item (click)=\"menuItem.event?menuItem.event(data, context, index):null\" *ngIf=\"!menuItem.hide || !menuItem.hide(data, context, index)\" [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\" [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menuItem.iconClass??'' | func:data:context\">{{(menuItem.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}</mat-icon>\r\n <span>{{menuItem.title}}</span>\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"menuItem.items\">\r\n <mat-menu x-position=\"before\" #subMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let menuSubItem of menuItem.items\">\r\n <a mat-menu-item (click)=\"menuSubItem.event?menuSubItem.event(data, context, index):null\" *ngIf=\"!menuSubItem.hide || !menuSubItem.hide(data, context, index)\" [disabled]=\"menuSubItem.disable && menuSubItem.disable(data, context, index)\" [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon fontSet=\"{{menuSubItem.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menuSubItem.iconClass??'' | func:data:context\">{{(menuSubItem.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}</mat-icon>\r\n <span>{{menuSubItem.title}}</span>\r\n </a>\r\n </ng-container>\r\n </mat-menu>\r\n <a mat-menu-item [matMenuTriggerFor]=\"subMenu\" *ngIf=\"!menuItem.hide || !menuItem.hide(data, context, index)\" [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\" [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menuItem.iconClass??'' | func:data:context\">{{(menuItem.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}</mat-icon>\r\n <span>{{menuItem.title}}</span>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </mat-menu>\r\n </ng-container>\r\n</div>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i6.FuncPipe, name: "func" }] });
81
+ /** @nocollapse */ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: VdDynamicMenuComponent, selector: "vd-dynamic-menu", inputs: { items: "items", data: "data", index: "index", context: "context", contextMenu: "contextMenu" }, viewQueries: [{ propertyName: "matMenu", first: true, predicate: MatMenu, descendants: true }, { propertyName: "contextMenuTrigger", first: true, predicate: MatMenuTrigger, descendants: true }], ngImport: i0, template: "<div layout=\"row\" layout-align=\"start center\" *ngIf=\"items\" flex>\r\n <ng-container *ngFor=\"let menu of items\">\r\n <!-- #region Button trigger -->\r\n <a mat-icon-button [mat-menu-trigger-for]=\"matMenu\" *ngIf=\"!contextMenu && menu?.items?.length && !(menu.hide && menu.hide(data, context, index))\" [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\" [matTooltip]=\"menu.tooltip\" (click)=\"$event.stopPropagation();\">\r\n <mat-icon fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menu.iconClass??'' | func:data:context\" [style.color]=\"menu.iconColor\"> <!-- Bind iconColor here -->\r\n {{(menu.icon??'more_vert' | func:data:context) || 'more_vert'}}\r\n </mat-icon>\r\n <span [style.color]=\"menu.textColor\">{{menu.title}}</span> <!-- Bind textColor here -->\r\n </a>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Context trigger -->\r\n <div *ngIf=\"contextMenu\" style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\" [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"matMenu\"></div>\r\n <!-- #endregion -->\r\n\r\n <a mat-icon-button *ngIf=\"!menu?.items?.length && !(menu.hide && menu.hide(data, context, index))\" [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\" [matTooltip]=\"menu.tooltip\" (click)=\"$event.stopPropagation(); menu.event ? menu.event(data, context, index) : null\">\r\n <mat-icon fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menu.iconClass??'' | func:data:context\" [style.color]=\"menu.iconColor\"> <!-- Bind iconColor here -->\r\n {{(menu.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}\r\n </mat-icon>\r\n </a>\r\n <mat-menu x-position=\"before\" #matMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let menuItem of menu?.items\">\r\n <ng-container *ngIf=\"!menuItem.items\">\r\n <a mat-menu-item (click)=\"menuItem.event ? menuItem.event(data, context, index) : null\" *ngIf=\"!menuItem.hide || !menuItem.hide(data, context, index)\" [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\" [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menuItem.iconClass??'' | func:data:context\" [style.color]=\"menuItem.iconColor\"> <!-- Bind iconColor here -->\r\n {{(menuItem.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}\r\n </mat-icon>\r\n <span [style.color]=\"menuItem.textColor\">{{menuItem.title}}</span> <!-- Bind textColor here -->\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"menuItem.items\">\r\n <mat-menu x-position=\"before\" #subMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let menuSubItem of menuItem.items\">\r\n <a mat-menu-item (click)=\"menuSubItem.event ? menuSubItem.event(data, context, index) : null\" *ngIf=\"!menuSubItem.hide || !menuSubItem.hide(data, context, index)\" [disabled]=\"menuSubItem.disable && menuSubItem.disable(data, context, index)\" [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon fontSet=\"{{menuSubItem.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menuSubItem.iconClass??'' | func:data:context\" [style.color]=\"menuSubItem.iconColor\"> <!-- Bind iconColor here -->\r\n {{(menuSubItem.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}\r\n </mat-icon>\r\n <span [style.color]=\"menuSubItem.textColor\">{{menuSubItem.title}}</span> <!-- Bind textColor here -->\r\n </a>\r\n </ng-container>\r\n </mat-menu>\r\n <a mat-menu-item [matMenuTriggerFor]=\"subMenu\" *ngIf=\"!menuItem.hide || !menuItem.hide(data, context, index)\" [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\" [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menuItem.iconClass??'' | func:data:context\" [style.color]=\"menuItem.iconColor\"> <!-- Bind iconColor here -->\r\n {{(menuItem.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}\r\n </mat-icon>\r\n <span [style.color]=\"menuItem.textColor\">{{menuItem.title}}</span> <!-- Bind textColor here -->\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </mat-menu>\r\n </ng-container>\r\n</div>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIconAnchor, selector: "a[mat-icon-button]", exportAs: ["matButton", "matAnchor"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i6.FuncPipe, name: "func" }] });
82
82
  }
83
83
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: VdDynamicMenuComponent, decorators: [{
84
84
  type: Component,
85
- args: [{ selector: 'vd-dynamic-menu', template: "<div layout=\"row\" layout-align=\"start center\" *ngIf=\"items\" flex>\r\n <ng-container *ngFor=\"let menu of items\">\r\n <!-- #region Button trigger -->\r\n <a mat-icon-button [mat-menu-trigger-for]=\"matMenu\" *ngIf=\"!contextMenu && menu?.items?.length && !(menu.hide && menu.hide(data, context, index))\" [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\" [matTooltip]=\"menu.tooltip\" (click)=\"$event.stopPropagation();\">\r\n <mat-icon fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menu.iconClass??'' | func:data:context\">{{(menu.icon??'more_vert' | func:data:context) || 'more_vert'}}</mat-icon>\r\n <span>{{menu.title}}</span>\r\n </a>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Context trigger -->\r\n <div *ngIf=\"contextMenu\" style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\" [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"matMenu\"></div>\r\n <!-- #endregion -->\r\n\r\n <a mat-icon-button *ngIf=\"!menu?.items?.length && !(menu.hide && menu.hide(data, context, index))\" [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\" [matTooltip]=\"menu.tooltip\" (click)=\"$event.stopPropagation(); menu.event?menu.event(data, context, index):null\">\r\n <mat-icon fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menu.iconClass??'' | func:data:context\">{{(menu.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}</mat-icon>\r\n </a>\r\n <mat-menu x-position=\"before\" #matMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let menuItem of menu?.items\">\r\n <ng-container *ngIf=\"!menuItem.items\">\r\n <a mat-menu-item (click)=\"menuItem.event?menuItem.event(data, context, index):null\" *ngIf=\"!menuItem.hide || !menuItem.hide(data, context, index)\" [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\" [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menuItem.iconClass??'' | func:data:context\">{{(menuItem.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}</mat-icon>\r\n <span>{{menuItem.title}}</span>\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"menuItem.items\">\r\n <mat-menu x-position=\"before\" #subMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let menuSubItem of menuItem.items\">\r\n <a mat-menu-item (click)=\"menuSubItem.event?menuSubItem.event(data, context, index):null\" *ngIf=\"!menuSubItem.hide || !menuSubItem.hide(data, context, index)\" [disabled]=\"menuSubItem.disable && menuSubItem.disable(data, context, index)\" [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon fontSet=\"{{menuSubItem.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menuSubItem.iconClass??'' | func:data:context\">{{(menuSubItem.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}</mat-icon>\r\n <span>{{menuSubItem.title}}</span>\r\n </a>\r\n </ng-container>\r\n </mat-menu>\r\n <a mat-menu-item [matMenuTriggerFor]=\"subMenu\" *ngIf=\"!menuItem.hide || !menuItem.hide(data, context, index)\" [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\" [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menuItem.iconClass??'' | func:data:context\">{{(menuItem.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}</mat-icon>\r\n <span>{{menuItem.title}}</span>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </mat-menu>\r\n </ng-container>\r\n</div>" }]
85
+ args: [{ selector: 'vd-dynamic-menu', template: "<div layout=\"row\" layout-align=\"start center\" *ngIf=\"items\" flex>\r\n <ng-container *ngFor=\"let menu of items\">\r\n <!-- #region Button trigger -->\r\n <a mat-icon-button [mat-menu-trigger-for]=\"matMenu\" *ngIf=\"!contextMenu && menu?.items?.length && !(menu.hide && menu.hide(data, context, index))\" [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\" [matTooltip]=\"menu.tooltip\" (click)=\"$event.stopPropagation();\">\r\n <mat-icon fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menu.iconClass??'' | func:data:context\" [style.color]=\"menu.iconColor\"> <!-- Bind iconColor here -->\r\n {{(menu.icon??'more_vert' | func:data:context) || 'more_vert'}}\r\n </mat-icon>\r\n <span [style.color]=\"menu.textColor\">{{menu.title}}</span> <!-- Bind textColor here -->\r\n </a>\r\n <!-- #endregion -->\r\n\r\n <!-- #region Context trigger -->\r\n <div *ngIf=\"contextMenu\" style=\"visibility: hidden; position: fixed\" [style.left]=\"contextMenuPosition.x\" [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"matMenu\"></div>\r\n <!-- #endregion -->\r\n\r\n <a mat-icon-button *ngIf=\"!menu?.items?.length && !(menu.hide && menu.hide(data, context, index))\" [disabled]=\"data?.locked || (menu?.disable && menu?.disable(data, context, index))\" [matTooltip]=\"menu.tooltip\" (click)=\"$event.stopPropagation(); menu.event ? menu.event(data, context, index) : null\">\r\n <mat-icon fontSet=\"{{menu.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menu.iconClass??'' | func:data:context\" [style.color]=\"menu.iconColor\"> <!-- Bind iconColor here -->\r\n {{(menu.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}\r\n </mat-icon>\r\n </a>\r\n <mat-menu x-position=\"before\" #matMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let menuItem of menu?.items\">\r\n <ng-container *ngIf=\"!menuItem.items\">\r\n <a mat-menu-item (click)=\"menuItem.event ? menuItem.event(data, context, index) : null\" *ngIf=\"!menuItem.hide || !menuItem.hide(data, context, index)\" [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\" [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menuItem.iconClass??'' | func:data:context\" [style.color]=\"menuItem.iconColor\"> <!-- Bind iconColor here -->\r\n {{(menuItem.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}\r\n </mat-icon>\r\n <span [style.color]=\"menuItem.textColor\">{{menuItem.title}}</span> <!-- Bind textColor here -->\r\n </a>\r\n </ng-container>\r\n <ng-container *ngIf=\"menuItem.items\">\r\n <mat-menu x-position=\"before\" #subMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let menuSubItem of menuItem.items\">\r\n <a mat-menu-item (click)=\"menuSubItem.event ? menuSubItem.event(data, context, index) : null\" *ngIf=\"!menuSubItem.hide || !menuSubItem.hide(data, context, index)\" [disabled]=\"menuSubItem.disable && menuSubItem.disable(data, context, index)\" [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon fontSet=\"{{menuSubItem.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menuSubItem.iconClass??'' | func:data:context\" [style.color]=\"menuSubItem.iconColor\"> <!-- Bind iconColor here -->\r\n {{(menuSubItem.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}\r\n </mat-icon>\r\n <span [style.color]=\"menuSubItem.textColor\">{{menuSubItem.title}}</span> <!-- Bind textColor here -->\r\n </a>\r\n </ng-container>\r\n </mat-menu>\r\n <a mat-menu-item [matMenuTriggerFor]=\"subMenu\" *ngIf=\"!menuItem.hide || !menuItem.hide(data, context, index)\" [disabled]=\"menuItem.disable && menuItem.disable(data, context, index)\" [matTooltip]=\"menuItem.tooltip\">\r\n <mat-icon fontSet=\"{{menuItem.iconFontSet || 'material-symbols-outlined'}}\" [class]=\"menuItem.iconClass??'' | func:data:context\" [style.color]=\"menuItem.iconColor\"> <!-- Bind iconColor here -->\r\n {{(menuItem.icon??'radio_button_unchecked' | func:data:context) || 'radio_button_unchecked'}}\r\n </mat-icon>\r\n <span [style.color]=\"menuItem.textColor\">{{menuItem.title}}</span> <!-- Bind textColor here -->\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </mat-menu>\r\n </ng-container>\r\n</div>" }]
86
86
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { matMenu: [{
87
87
  type: ViewChild,
88
88
  args: [MatMenu]
@@ -100,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
100
100
  }], contextMenu: [{
101
101
  type: Input
102
102
  }] } });
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2xheW91dC9keW5hbWljLW1lbnUvZHluYW1pYy1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2xheW91dC9keW5hbWljLW1lbnUvZHluYW1pYy1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7OztBQU9qRSxNQUFNLE9BQU8sc0JBQXNCO0lBNkRYO0lBM0RwQjs7T0FFRztJQUVJLE9BQU8sQ0FBVztJQUV6Qjs7T0FFRztJQUVJLGtCQUFrQixDQUFrQjtJQUUzQzs7T0FFRztJQUVJLEtBQUssQ0FBZ0I7SUFFNUI7O09BRUc7SUFDSyxLQUFLLENBQU07SUFFbkI7O09BRUc7SUFDSCxJQUNXLElBQUksS0FBVSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBQzVDLElBQVcsSUFBSSxDQUFDLElBQVM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUVJLEtBQUssQ0FBVTtJQUV0Qjs7T0FFRztJQUVJLE9BQU8sQ0FBTTtJQUVwQjs7T0FFRztJQUVJLFdBQVcsQ0FBVztJQUU3Qjs7T0FFRztJQUNJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFFcEQ7O09BRUc7SUFDSCxZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUFJLENBQUM7SUFFN0Q7O09BRUc7SUFDSSxJQUFJLENBQUMsS0FBaUIsRUFBRSxJQUFTO1FBQ3BDLDZFQUE2RTtRQUM3RSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFFeEIsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDO1FBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEMsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFFMUMsdUNBQXVDO1FBQ3ZDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQzNHLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDckMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7MEhBeEZRLHNCQUFzQjs4R0FBdEIsc0JBQXNCLDBNQUtwQixPQUFPLHFGQU1QLGNBQWMsZ0RDbkI3Qixtb0lBeUNNOzsyRkRqQ08sc0JBQXNCO2tCQUpsQyxTQUFTOytCQUNJLGlCQUFpQjtzRkFTcEIsT0FBTztzQkFEYixTQUFTO3VCQUFDLE9BQU87Z0JBT1gsa0JBQWtCO3NCQUR4QixTQUFTO3VCQUFDLGNBQWM7Z0JBT2xCLEtBQUs7c0JBRFgsS0FBSztnQkFZSyxJQUFJO3NCQURkLEtBQUs7Z0JBV0MsS0FBSztzQkFEWCxLQUFLO2dCQU9DLE9BQU87c0JBRGIsS0FBSztnQkFPQyxXQUFXO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRNZW51LCBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBBY3Rpb25JdGVtIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9hY3Rpb24taXRlbSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmQtZHluYW1pYy1tZW51JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLW1lbnUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWZER5bmFtaWNNZW51Q29tcG9uZW50IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIG1hdE1lbnU6IE1hdE1lbnVcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChNYXRNZW51KVxyXG4gICAgcHVibGljIG1hdE1lbnU/OiBNYXRNZW51O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbnRleHQgbWVudSB0cmlnZ2VyXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoTWF0TWVudVRyaWdnZXIpXHJcbiAgICBwdWJsaWMgY29udGV4dE1lbnVUcmlnZ2VyPzogTWF0TWVudVRyaWdnZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBpdGVtczogQWN0aW9uSXRlbVtdXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaXRlbXM/OiBBY3Rpb25JdGVtW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBfZGF0YTogYW55XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2RhdGE6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRhdGE6IGFueVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBkYXRhKCk6IGFueSB7IHJldHVybiB0aGlzLl9kYXRhIH1cclxuICAgIHB1YmxpYyBzZXQgZGF0YShkYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGluZGV4OiBudW1iZXJcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpbmRleD86IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGNvbnRleHQ6IGFueVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNvbnRleHQ6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGNvbnRleHQ6IGFueVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNvbnRleHRNZW51PzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBjb250ZXh0IG1lbnVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbnRleHRNZW51UG9zaXRpb24gPSB7IHg6ICcwcHgnLCB5OiAnMHB4JyB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiB0aGUgbWVudVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlbihldmVudDogTW91c2VFdmVudCwgZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLyogQXZvaWRzIHRvIHNob3cgdGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIHJpZ2h0LWNsaWNrIG1lbnUgb2YgdGhlIGJyb3dzZXIgKi9cclxuICAgICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgLyogU2V0IHRoZSBkYXRhIGZvciB0aGUgZXZlbnRzICovXHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgLyogU2V0IHRoZSBYIGFuZCBZIHBvc3Rpb24gb2YgdGhlIGNvbnRleHQgbWVudSAqL1xyXG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbi54ID0gYCR7ZXZlbnQuY2xpZW50WH1weGA7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnkgPSBgJHtldmVudC5jbGllbnRZfXB4YDtcclxuICAgICAgICB0aGlzLm1hdE1lbnU/LmZvY3VzRmlyc3RJdGVtKCdtb3VzZScpO1xyXG5cclxuICAgICAgICAvKiBPcGVuIHRoZSBtZW51IGFuZCB1cGRhdGUgaXRzIHBvc3Rpb24gKi9cclxuICAgICAgICB0aGlzLmNvbnRleHRNZW51VHJpZ2dlcj8ub3Blbk1lbnUoKTtcclxuICAgICAgICB0aGlzLmNvbnRleHRNZW51VHJpZ2dlcj8udXBkYXRlUG9zaXRpb24oKTtcclxuXHJcbiAgICAgICAgLyogSGFuZGxlIGNsaWNrcyBvbiB0aGUgbWVudSBvdmVybGF5ICovXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2RrLW92ZXJsYXktY29udGFpbmVyJylbMF0/LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKG9mZkV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgb2ZmRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudVRyaWdnZXI/LmNsb3NlTWVudSgpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3BlbihvZmZFdmVudCwgZGF0YSksIDEwMCk7XHJcbiAgICAgICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xyXG4gICAgfVxyXG59IiwiPGRpdiBsYXlvdXQ9XCJyb3dcIiBsYXlvdXQtYWxpZ249XCJzdGFydCBjZW50ZXJcIiAqbmdJZj1cIml0ZW1zXCIgZmxleD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1lbnUgb2YgaXRlbXNcIj5cclxuICAgICAgICA8IS0tICNyZWdpb24gQnV0dG9uIHRyaWdnZXIgLS0+XHJcbiAgICAgICAgPGEgbWF0LWljb24tYnV0dG9uIFttYXQtbWVudS10cmlnZ2VyLWZvcl09XCJtYXRNZW51XCIgKm5nSWY9XCIhY29udGV4dE1lbnUgJiYgbWVudT8uaXRlbXM/Lmxlbmd0aCAmJiAhKG1lbnUuaGlkZSAmJiBtZW51LmhpZGUoZGF0YSwgY29udGV4dCwgaW5kZXgpKVwiIFtkaXNhYmxlZF09XCJkYXRhPy5sb2NrZWQgfHwgKG1lbnU/LmRpc2FibGUgJiYgbWVudT8uZGlzYWJsZShkYXRhLCBjb250ZXh0LCBpbmRleCkpXCIgW21hdFRvb2x0aXBdPVwibWVudS50b29sdGlwXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJ7e21lbnUuaWNvbkZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnfX1cIiBbY2xhc3NdPVwibWVudS5pY29uQ2xhc3M/PycnIHwgZnVuYzpkYXRhOmNvbnRleHRcIj57eyhtZW51Lmljb24/Pydtb3JlX3ZlcnQnIHwgZnVuYzpkYXRhOmNvbnRleHQpIHx8ICdtb3JlX3ZlcnQnfX08L21hdC1pY29uPlxyXG4gICAgICAgICAgICA8c3Bhbj57e21lbnUudGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgICAgICA8IS0tICNyZWdpb24gQ29udGV4dCB0cmlnZ2VyIC0tPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJjb250ZXh0TWVudVwiIHN0eWxlPVwidmlzaWJpbGl0eTogaGlkZGVuOyBwb3NpdGlvbjogZml4ZWRcIiBbc3R5bGUubGVmdF09XCJjb250ZXh0TWVudVBvc2l0aW9uLnhcIiBbc3R5bGUudG9wXT1cImNvbnRleHRNZW51UG9zaXRpb24ueVwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtYXRNZW51XCI+PC9kaXY+XHJcbiAgICAgICAgPCEtLSAjZW5kcmVnaW9uIC0tPlxyXG5cclxuICAgICAgICA8YSBtYXQtaWNvbi1idXR0b24gKm5nSWY9XCIhbWVudT8uaXRlbXM/Lmxlbmd0aCAmJiAhKG1lbnUuaGlkZSAmJiBtZW51LmhpZGUoZGF0YSwgY29udGV4dCwgaW5kZXgpKVwiIFtkaXNhYmxlZF09XCJkYXRhPy5sb2NrZWQgfHwgKG1lbnU/LmRpc2FibGUgJiYgbWVudT8uZGlzYWJsZShkYXRhLCBjb250ZXh0LCBpbmRleCkpXCIgW21hdFRvb2x0aXBdPVwibWVudS50b29sdGlwXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgbWVudS5ldmVudD9tZW51LmV2ZW50KGRhdGEsIGNvbnRleHQsIGluZGV4KTpudWxsXCI+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbiBmb250U2V0PVwie3ttZW51Lmljb25Gb250U2V0IHx8ICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJ319XCIgW2NsYXNzXT1cIm1lbnUuaWNvbkNsYXNzPz8nJyB8IGZ1bmM6ZGF0YTpjb250ZXh0XCI+e3sobWVudS5pY29uPz8ncmFkaW9fYnV0dG9uX3VuY2hlY2tlZCcgfCBmdW5jOmRhdGE6Y29udGV4dCkgfHwgJ3JhZGlvX2J1dHRvbl91bmNoZWNrZWQnfX08L21hdC1pY29uPlxyXG4gICAgICAgIDwvYT5cclxuICAgICAgICA8bWF0LW1lbnUgeC1wb3NpdGlvbj1cImJlZm9yZVwiICNtYXRNZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBtZW51SXRlbSBvZiBtZW51Py5pdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFtZW51SXRlbS5pdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm1lbnVJdGVtLmV2ZW50P21lbnVJdGVtLmV2ZW50KGRhdGEsIGNvbnRleHQsIGluZGV4KTpudWxsXCIgKm5nSWY9XCIhbWVudUl0ZW0uaGlkZSB8fCAhbWVudUl0ZW0uaGlkZShkYXRhLCBjb250ZXh0LCBpbmRleClcIiBbZGlzYWJsZWRdPVwibWVudUl0ZW0uZGlzYWJsZSAmJiBtZW51SXRlbS5kaXNhYmxlKGRhdGEsIGNvbnRleHQsIGluZGV4KVwiIFttYXRUb29sdGlwXT1cIm1lbnVJdGVtLnRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJ7e21lbnVJdGVtLmljb25Gb250U2V0IHx8ICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJ319XCIgW2NsYXNzXT1cIm1lbnVJdGVtLmljb25DbGFzcz8/JycgfCBmdW5jOmRhdGE6Y29udGV4dFwiPnt7KG1lbnVJdGVtLmljb24/PydyYWRpb19idXR0b25fdW5jaGVja2VkJyB8IGZ1bmM6ZGF0YTpjb250ZXh0KSB8fCAncmFkaW9fYnV0dG9uX3VuY2hlY2tlZCd9fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7bWVudUl0ZW0udGl0bGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJtZW51SXRlbS5pdGVtc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbWVudSB4LXBvc2l0aW9uPVwiYmVmb3JlXCIgI3N1Yk1lbnU9XCJtYXRNZW51XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1lbnVTdWJJdGVtIG9mIG1lbnVJdGVtLml0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBtYXQtbWVudS1pdGVtIChjbGljayk9XCJtZW51U3ViSXRlbS5ldmVudD9tZW51U3ViSXRlbS5ldmVudChkYXRhLCBjb250ZXh0LCBpbmRleCk6bnVsbFwiICpuZ0lmPVwiIW1lbnVTdWJJdGVtLmhpZGUgfHwgIW1lbnVTdWJJdGVtLmhpZGUoZGF0YSwgY29udGV4dCwgaW5kZXgpXCIgW2Rpc2FibGVkXT1cIm1lbnVTdWJJdGVtLmRpc2FibGUgJiYgbWVudVN1Ykl0ZW0uZGlzYWJsZShkYXRhLCBjb250ZXh0LCBpbmRleClcIiBbbWF0VG9vbHRpcF09XCJtZW51SXRlbS50b29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJ7e21lbnVTdWJJdGVtLmljb25Gb250U2V0IHx8ICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJ319XCIgW2NsYXNzXT1cIm1lbnVTdWJJdGVtLmljb25DbGFzcz8/JycgfCBmdW5jOmRhdGE6Y29udGV4dFwiPnt7KG1lbnVTdWJJdGVtLmljb24/PydyYWRpb19idXR0b25fdW5jaGVja2VkJyB8IGZ1bmM6ZGF0YTpjb250ZXh0KSB8fCAncmFkaW9fYnV0dG9uX3VuY2hlY2tlZCd9fTwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3ttZW51U3ViSXRlbS50aXRsZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cInN1Yk1lbnVcIiAqbmdJZj1cIiFtZW51SXRlbS5oaWRlIHx8ICFtZW51SXRlbS5oaWRlKGRhdGEsIGNvbnRleHQsIGluZGV4KVwiIFtkaXNhYmxlZF09XCJtZW51SXRlbS5kaXNhYmxlICYmIG1lbnVJdGVtLmRpc2FibGUoZGF0YSwgY29udGV4dCwgaW5kZXgpXCIgW21hdFRvb2x0aXBdPVwibWVudUl0ZW0udG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cInt7bWVudUl0ZW0uaWNvbkZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnfX1cIiBbY2xhc3NdPVwibWVudUl0ZW0uaWNvbkNsYXNzPz8nJyB8IGZ1bmM6ZGF0YTpjb250ZXh0XCI+e3sobWVudUl0ZW0uaWNvbj8/J3JhZGlvX2J1dHRvbl91bmNoZWNrZWQnIHwgZnVuYzpkYXRhOmNvbnRleHQpIHx8ICdyYWRpb19idXR0b25fdW5jaGVja2VkJ319PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3ttZW51SXRlbS50aXRsZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2xheW91dC9keW5hbWljLW1lbnUvZHluYW1pYy1tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9zcmMvbGliL2xheW91dC9keW5hbWljLW1lbnUvZHluYW1pYy1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDOzs7Ozs7OztBQU9qRSxNQUFNLE9BQU8sc0JBQXNCO0lBNkRYO0lBM0RwQjs7T0FFRztJQUVJLE9BQU8sQ0FBVztJQUV6Qjs7T0FFRztJQUVJLGtCQUFrQixDQUFrQjtJQUUzQzs7T0FFRztJQUVJLEtBQUssQ0FBZ0I7SUFFNUI7O09BRUc7SUFDSyxLQUFLLENBQU07SUFFbkI7O09BRUc7SUFDSCxJQUNXLElBQUksS0FBVSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUEsQ0FBQyxDQUFDO0lBQzVDLElBQVcsSUFBSSxDQUFDLElBQVM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUVJLEtBQUssQ0FBVTtJQUV0Qjs7T0FFRztJQUVJLE9BQU8sQ0FBTTtJQUVwQjs7T0FFRztJQUVJLFdBQVcsQ0FBVztJQUU3Qjs7T0FFRztJQUNJLG1CQUFtQixHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFFcEQ7O09BRUc7SUFDSCxZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtJQUFJLENBQUM7SUFFN0Q7O09BRUc7SUFDSSxJQUFJLENBQUMsS0FBaUIsRUFBRSxJQUFTO1FBQ3BDLDZFQUE2RTtRQUM3RSxLQUFLLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFFeEIsaUNBQWlDO1FBQ2pDLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLGlEQUFpRDtRQUNqRCxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLE9BQU8sSUFBSSxDQUFDO1FBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEMsMENBQTBDO1FBQzFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLENBQUM7UUFFMUMsdUNBQXVDO1FBQ3ZDLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQzNHLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLENBQUM7WUFDckMsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3JELENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7MEhBeEZRLHNCQUFzQjs4R0FBdEIsc0JBQXNCLDBNQUtwQixPQUFPLHFGQU1QLGNBQWMsZ0RDbkI3Qix1K0pBbURNOzsyRkQzQ08sc0JBQXNCO2tCQUpsQyxTQUFTOytCQUNJLGlCQUFpQjtzRkFTcEIsT0FBTztzQkFEYixTQUFTO3VCQUFDLE9BQU87Z0JBT1gsa0JBQWtCO3NCQUR4QixTQUFTO3VCQUFDLGNBQWM7Z0JBT2xCLEtBQUs7c0JBRFgsS0FBSztnQkFZSyxJQUFJO3NCQURkLEtBQUs7Z0JBV0MsS0FBSztzQkFEWCxLQUFLO2dCQU9DLE9BQU87c0JBRGIsS0FBSztnQkFPQyxXQUFXO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRNZW51LCBNYXRNZW51VHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBBY3Rpb25JdGVtIH0gZnJvbSAnLi4vLi4vY29tbW9uL21vZGVscy9hY3Rpb24taXRlbSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmQtZHluYW1pYy1tZW51JyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9keW5hbWljLW1lbnUuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBWZER5bmFtaWNNZW51Q29tcG9uZW50IHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIG1hdE1lbnU6IE1hdE1lbnVcclxuICAgICAqL1xyXG4gICAgQFZpZXdDaGlsZChNYXRNZW51KVxyXG4gICAgcHVibGljIG1hdE1lbnU/OiBNYXRNZW51O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGNvbnRleHQgbWVudSB0cmlnZ2VyXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoTWF0TWVudVRyaWdnZXIpXHJcbiAgICBwdWJsaWMgY29udGV4dE1lbnVUcmlnZ2VyPzogTWF0TWVudVRyaWdnZXI7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBpdGVtczogQWN0aW9uSXRlbVtdXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaXRlbXM/OiBBY3Rpb25JdGVtW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBfZGF0YTogYW55XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2RhdGE6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRhdGE6IGFueVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGdldCBkYXRhKCk6IGFueSB7IHJldHVybiB0aGlzLl9kYXRhIH1cclxuICAgIHB1YmxpYyBzZXQgZGF0YShkYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YTtcclxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGluZGV4OiBudW1iZXJcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpbmRleD86IG51bWJlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGNvbnRleHQ6IGFueVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNvbnRleHQ6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGNvbnRleHQ6IGFueVxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNvbnRleHRNZW51PzogYm9vbGVhbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBjdXJyZW50IHBvc2l0aW9uIG9mIHRoZSBjb250ZXh0IG1lbnVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbnRleHRNZW51UG9zaXRpb24gPSB7IHg6ICcwcHgnLCB5OiAnMHB4JyB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uc3RydWN0b3JcclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3BlbiB0aGUgbWVudVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlbihldmVudDogTW91c2VFdmVudCwgZGF0YTogYW55KTogdm9pZCB7XHJcbiAgICAgICAgLyogQXZvaWRzIHRvIHNob3cgdGhlIHZpc3VhbGl6YXRpb24gb2YgdGhlIHJpZ2h0LWNsaWNrIG1lbnUgb2YgdGhlIGJyb3dzZXIgKi9cclxuICAgICAgICBldmVudD8ucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgLyogU2V0IHRoZSBkYXRhIGZvciB0aGUgZXZlbnRzICovXHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcclxuXHJcbiAgICAgICAgLyogU2V0IHRoZSBYIGFuZCBZIHBvc3Rpb24gb2YgdGhlIGNvbnRleHQgbWVudSAqL1xyXG4gICAgICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbi54ID0gYCR7ZXZlbnQuY2xpZW50WH1weGA7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0TWVudVBvc2l0aW9uLnkgPSBgJHtldmVudC5jbGllbnRZfXB4YDtcclxuICAgICAgICB0aGlzLm1hdE1lbnU/LmZvY3VzRmlyc3RJdGVtKCdtb3VzZScpO1xyXG5cclxuICAgICAgICAvKiBPcGVuIHRoZSBtZW51IGFuZCB1cGRhdGUgaXRzIHBvc3Rpb24gKi9cclxuICAgICAgICB0aGlzLmNvbnRleHRNZW51VHJpZ2dlcj8ub3Blbk1lbnUoKTtcclxuICAgICAgICB0aGlzLmNvbnRleHRNZW51VHJpZ2dlcj8udXBkYXRlUG9zaXRpb24oKTtcclxuXHJcbiAgICAgICAgLyogSGFuZGxlIGNsaWNrcyBvbiB0aGUgbWVudSBvdmVybGF5ICovXHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2RrLW92ZXJsYXktY29udGFpbmVyJylbMF0/LmFkZEV2ZW50TGlzdGVuZXIoJ2NvbnRleHRtZW51JywgKG9mZkV2ZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgb2ZmRXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudVRyaWdnZXI/LmNsb3NlTWVudSgpO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3BlbihvZmZFdmVudCwgZGF0YSksIDEwMCk7XHJcbiAgICAgICAgfSwgeyBvbmNlOiB0cnVlIH0pO1xyXG4gICAgfVxyXG59IiwiPGRpdiBsYXlvdXQ9XCJyb3dcIiBsYXlvdXQtYWxpZ249XCJzdGFydCBjZW50ZXJcIiAqbmdJZj1cIml0ZW1zXCIgZmxleD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG1lbnUgb2YgaXRlbXNcIj5cclxuICAgICAgICA8IS0tICNyZWdpb24gQnV0dG9uIHRyaWdnZXIgLS0+XHJcbiAgICAgICAgPGEgbWF0LWljb24tYnV0dG9uIFttYXQtbWVudS10cmlnZ2VyLWZvcl09XCJtYXRNZW51XCIgKm5nSWY9XCIhY29udGV4dE1lbnUgJiYgbWVudT8uaXRlbXM/Lmxlbmd0aCAmJiAhKG1lbnUuaGlkZSAmJiBtZW51LmhpZGUoZGF0YSwgY29udGV4dCwgaW5kZXgpKVwiIFtkaXNhYmxlZF09XCJkYXRhPy5sb2NrZWQgfHwgKG1lbnU/LmRpc2FibGUgJiYgbWVudT8uZGlzYWJsZShkYXRhLCBjb250ZXh0LCBpbmRleCkpXCIgW21hdFRvb2x0aXBdPVwibWVudS50b29sdGlwXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJ7e21lbnUuaWNvbkZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnfX1cIiBbY2xhc3NdPVwibWVudS5pY29uQ2xhc3M/PycnIHwgZnVuYzpkYXRhOmNvbnRleHRcIiBbc3R5bGUuY29sb3JdPVwibWVudS5pY29uQ29sb3JcIj4gPCEtLSBCaW5kIGljb25Db2xvciBoZXJlIC0tPlxyXG4gICAgICAgICAgICAgICAge3sobWVudS5pY29uPz8nbW9yZV92ZXJ0JyB8IGZ1bmM6ZGF0YTpjb250ZXh0KSB8fCAnbW9yZV92ZXJ0J319XHJcbiAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgIDxzcGFuIFtzdHlsZS5jb2xvcl09XCJtZW51LnRleHRDb2xvclwiPnt7bWVudS50aXRsZX19PC9zcGFuPiA8IS0tIEJpbmQgdGV4dENvbG9yIGhlcmUgLS0+XHJcbiAgICAgICAgPC9hPlxyXG4gICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgICAgICAgPCEtLSAjcmVnaW9uIENvbnRleHQgdHJpZ2dlciAtLT5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiY29udGV4dE1lbnVcIiBzdHlsZT1cInZpc2liaWxpdHk6IGhpZGRlbjsgcG9zaXRpb246IGZpeGVkXCIgW3N0eWxlLmxlZnRdPVwiY29udGV4dE1lbnVQb3NpdGlvbi54XCIgW3N0eWxlLnRvcF09XCJjb250ZXh0TWVudVBvc2l0aW9uLnlcIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWF0TWVudVwiPjwvZGl2PlxyXG4gICAgICAgIDwhLS0gI2VuZHJlZ2lvbiAtLT5cclxuXHJcbiAgICAgICAgPGEgbWF0LWljb24tYnV0dG9uICpuZ0lmPVwiIW1lbnU/Lml0ZW1zPy5sZW5ndGggJiYgIShtZW51LmhpZGUgJiYgbWVudS5oaWRlKGRhdGEsIGNvbnRleHQsIGluZGV4KSlcIiBbZGlzYWJsZWRdPVwiZGF0YT8ubG9ja2VkIHx8IChtZW51Py5kaXNhYmxlICYmIG1lbnU/LmRpc2FibGUoZGF0YSwgY29udGV4dCwgaW5kZXgpKVwiIFttYXRUb29sdGlwXT1cIm1lbnUudG9vbHRpcFwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IG1lbnUuZXZlbnQgPyBtZW51LmV2ZW50KGRhdGEsIGNvbnRleHQsIGluZGV4KSA6IG51bGxcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJ7e21lbnUuaWNvbkZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnfX1cIiBbY2xhc3NdPVwibWVudS5pY29uQ2xhc3M/PycnIHwgZnVuYzpkYXRhOmNvbnRleHRcIiBbc3R5bGUuY29sb3JdPVwibWVudS5pY29uQ29sb3JcIj4gPCEtLSBCaW5kIGljb25Db2xvciBoZXJlIC0tPlxyXG4gICAgICAgICAgICAgICAge3sobWVudS5pY29uPz8ncmFkaW9fYnV0dG9uX3VuY2hlY2tlZCcgfCBmdW5jOmRhdGE6Y29udGV4dCkgfHwgJ3JhZGlvX2J1dHRvbl91bmNoZWNrZWQnfX1cclxuICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICA8L2E+XHJcbiAgICAgICAgPG1hdC1tZW51IHgtcG9zaXRpb249XCJiZWZvcmVcIiAjbWF0TWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVudUl0ZW0gb2YgbWVudT8uaXRlbXNcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbWVudUl0ZW0uaXRlbXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBtYXQtbWVudS1pdGVtIChjbGljayk9XCJtZW51SXRlbS5ldmVudCA/IG1lbnVJdGVtLmV2ZW50KGRhdGEsIGNvbnRleHQsIGluZGV4KSA6IG51bGxcIiAqbmdJZj1cIiFtZW51SXRlbS5oaWRlIHx8ICFtZW51SXRlbS5oaWRlKGRhdGEsIGNvbnRleHQsIGluZGV4KVwiIFtkaXNhYmxlZF09XCJtZW51SXRlbS5kaXNhYmxlICYmIG1lbnVJdGVtLmRpc2FibGUoZGF0YSwgY29udGV4dCwgaW5kZXgpXCIgW21hdFRvb2x0aXBdPVwibWVudUl0ZW0udG9vbHRpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cInt7bWVudUl0ZW0uaWNvbkZvbnRTZXQgfHwgJ21hdGVyaWFsLXN5bWJvbHMtb3V0bGluZWQnfX1cIiBbY2xhc3NdPVwibWVudUl0ZW0uaWNvbkNsYXNzPz8nJyB8IGZ1bmM6ZGF0YTpjb250ZXh0XCIgW3N0eWxlLmNvbG9yXT1cIm1lbnVJdGVtLmljb25Db2xvclwiPiA8IS0tIEJpbmQgaWNvbkNvbG9yIGhlcmUgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyhtZW51SXRlbS5pY29uPz8ncmFkaW9fYnV0dG9uX3VuY2hlY2tlZCcgfCBmdW5jOmRhdGE6Y29udGV4dCkgfHwgJ3JhZGlvX2J1dHRvbl91bmNoZWNrZWQnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3N0eWxlLmNvbG9yXT1cIm1lbnVJdGVtLnRleHRDb2xvclwiPnt7bWVudUl0ZW0udGl0bGV9fTwvc3Bhbj4gPCEtLSBCaW5kIHRleHRDb2xvciBoZXJlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1lbnVJdGVtLml0ZW1zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1tZW51IHgtcG9zaXRpb249XCJiZWZvcmVcIiAjc3ViTWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgbWVudVN1Ykl0ZW0gb2YgbWVudUl0ZW0uaXRlbXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cIm1lbnVTdWJJdGVtLmV2ZW50ID8gbWVudVN1Ykl0ZW0uZXZlbnQoZGF0YSwgY29udGV4dCwgaW5kZXgpIDogbnVsbFwiICpuZ0lmPVwiIW1lbnVTdWJJdGVtLmhpZGUgfHwgIW1lbnVTdWJJdGVtLmhpZGUoZGF0YSwgY29udGV4dCwgaW5kZXgpXCIgW2Rpc2FibGVkXT1cIm1lbnVTdWJJdGVtLmRpc2FibGUgJiYgbWVudVN1Ykl0ZW0uZGlzYWJsZShkYXRhLCBjb250ZXh0LCBpbmRleClcIiBbbWF0VG9vbHRpcF09XCJtZW51SXRlbS50b29sdGlwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJ7e21lbnVTdWJJdGVtLmljb25Gb250U2V0IHx8ICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJ319XCIgW2NsYXNzXT1cIm1lbnVTdWJJdGVtLmljb25DbGFzcz8/JycgfCBmdW5jOmRhdGE6Y29udGV4dFwiIFtzdHlsZS5jb2xvcl09XCJtZW51U3ViSXRlbS5pY29uQ29sb3JcIj4gPCEtLSBCaW5kIGljb25Db2xvciBoZXJlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyhtZW51U3ViSXRlbS5pY29uPz8ncmFkaW9fYnV0dG9uX3VuY2hlY2tlZCcgfCBmdW5jOmRhdGE6Y29udGV4dCkgfHwgJ3JhZGlvX2J1dHRvbl91bmNoZWNrZWQnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZS5jb2xvcl09XCJtZW51U3ViSXRlbS50ZXh0Q29sb3JcIj57e21lbnVTdWJJdGVtLnRpdGxlfX08L3NwYW4+IDwhLS0gQmluZCB0ZXh0Q29sb3IgaGVyZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgICAgICA8YSBtYXQtbWVudS1pdGVtIFttYXRNZW51VHJpZ2dlckZvcl09XCJzdWJNZW51XCIgKm5nSWY9XCIhbWVudUl0ZW0uaGlkZSB8fCAhbWVudUl0ZW0uaGlkZShkYXRhLCBjb250ZXh0LCBpbmRleClcIiBbZGlzYWJsZWRdPVwibWVudUl0ZW0uZGlzYWJsZSAmJiBtZW51SXRlbS5kaXNhYmxlKGRhdGEsIGNvbnRleHQsIGluZGV4KVwiIFttYXRUb29sdGlwXT1cIm1lbnVJdGVtLnRvb2x0aXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJ7e21lbnVJdGVtLmljb25Gb250U2V0IHx8ICdtYXRlcmlhbC1zeW1ib2xzLW91dGxpbmVkJ319XCIgW2NsYXNzXT1cIm1lbnVJdGVtLmljb25DbGFzcz8/JycgfCBmdW5jOmRhdGE6Y29udGV4dFwiIFtzdHlsZS5jb2xvcl09XCJtZW51SXRlbS5pY29uQ29sb3JcIj4gPCEtLSBCaW5kIGljb25Db2xvciBoZXJlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sobWVudUl0ZW0uaWNvbj8/J3JhZGlvX2J1dHRvbl91bmNoZWNrZWQnIHwgZnVuYzpkYXRhOmNvbnRleHQpIHx8ICdyYWRpb19idXR0b25fdW5jaGVja2VkJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtzdHlsZS5jb2xvcl09XCJtZW51SXRlbS50ZXh0Q29sb3JcIj57e21lbnVJdGVtLnRpdGxlfX08L3NwYW4+IDwhLS0gQmluZCB0ZXh0Q29sb3IgaGVyZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9tYXQtbWVudT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj4iXX0=