turbogui-angular 15.2.0 → 15.2.1

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.
@@ -239,8 +239,8 @@ export class DialogService extends SingletoneStrictClass {
239
239
  * - viewContainerRef: This is important if we want to propagate providers from a parent component to this dialog. We must specify
240
240
  * this reference to make sure the same services injected on the parent are available too at the child dialog
241
241
  *
242
- * @param callback A function that will be called after the dialog is closed and will receive a selection object with the numeric index and value for
243
- * the option that's been selected by the user. if no option was selected, index will be -1 and value null
242
+ * @param callback A function that will be called after the dialog is closed. It will receive a selection object with two properties: index and value. Those
243
+ * will contain the index and value from the options array that's selected by the user. if no option selected, index will be -1 and value null
244
244
  */
245
245
  addDialog(dialogComponentClass, properties, callback = null) {
246
246
  if (!this._isEnabled) {
@@ -403,4 +403,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
403
403
  providedIn: 'root',
404
404
  }]
405
405
  }], ctorParameters: () => [{ type: i0.RendererFactory2 }, { type: i1.MatSnackBar }, { type: i2.MatDialog }, { type: i0.Injector }, { type: i0.ApplicationRef }, { type: i0.ComponentFactoryResolver }] });
406
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dXJib2d1aS1hbmd1bGFyL3NyYy9tYWluL2NvbnRyb2xsZXIvZGlhbG9nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFRLFVBQVUsRUFBcUcsTUFBTSxlQUFlLENBQUM7QUFHcEosT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUN4SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQUcvRTs7R0FFRztBQUlILE1BQU0sT0FBTyxhQUFjLFNBQVEscUJBQXFCO0lBeUZwRCxZQUFZLGVBQWlDLEVBQ2hCLFdBQXdCLEVBQ3hCLFNBQW9CLEVBQ3BCLFFBQWtCLEVBQ2xCLGNBQThCLEVBQzlCLHdCQUFrRDtRQUVqRixLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFOVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUEzRi9FOzs7O1dBSUc7UUFDSCxrQ0FBNkIsR0FBaUMsc0JBQXNCLENBQUM7UUFHckY7O1dBRUc7UUFDSyxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRzFCOztXQUVHO1FBQ0ssd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBR3BDOzs7O1dBSUc7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LHdCQUF3QixLQUFLLElBQUksRUFBRTtZQUV4QyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEtBQUssSUFBSSxFQUFFO1lBRTFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7U0FDMUM7UUFFRCxJQUFJLElBQUksQ0FBQyw0QkFBNEIsS0FBSyxJQUFJLEVBQUU7WUFFNUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQztTQUMxQztJQUNMLENBQUM7OEdBcGlCUSxhQUFhO2tIQUFiLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUdXJib0dVSSBpcyBBIGxpYnJhcnkgdGhhdCBoZWxwcyB3aXRoIHRoZSBtb3N0IGNvbW1vbiBhbmQgZ2VuZXJpYyBVSSBlbGVtZW50cyBhbmQgZnVuY3Rpb25hbGl0aWVzXHJcbiAqXHJcbiAqIFdlYnNpdGUgOiAtPiBodHRwOi8vd3d3LnR1cmJvZ3VpLm9yZ1xyXG4gKiBMaWNlbnNlIDogLT4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gKiBMaWNlbnNlIFVybCA6IC0+IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gKiBDb3B5UmlnaHQgOiAtPiBDb3B5cmlnaHQgMjAxOCBFZGVydG9uZSBBZHZhbmRlZCBTb2x1dGlvbnMuIGh0dHBzOi8vd3d3LmVkZXJ0b25lLmNvbVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEFycmF5VXRpbHMsIE51bWVyaWNVdGlscyB9IGZyb20gJ3R1cmJvY29tbW9ucy10cyc7XHJcbmltcG9ydCB7IFR5cGUsIEluamVjdGFibGUsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgSW5qZWN0b3IsIEFwcGxpY2F0aW9uUmVmLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciwgTWF0U25hY2tCYXJDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBCdXN5U3RhdGVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vdmlldy9jb21wb25lbnRzL2J1c3ktc3RhdGUtYmFzZS9idXN5LXN0YXRlLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsLCBEb21Qb3J0YWxPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgRGlhbG9nQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZXcvY29tcG9uZW50cy9kaWFsb2ctYmFzZS9kaWFsb2ctYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEaWFsb2dEYXRlU2VsZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vdmlldy9jb21wb25lbnRzL2RpYWxvZy1kYXRlLXNlbGVjdGlvbi9kaWFsb2ctZGF0ZS1zZWxlY3Rpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2luZ2xldG9uZVN0cmljdENsYXNzIH0gZnJvbSAnLi4vbW9kZWwvY2xhc3Nlcy9TaW5nbGV0b25lU3RyaWN0Q2xhc3MnO1xuXHJcblxyXG4vKipcclxuICogTWFuYWdlcyB0aGUgYXBwbGljYXRpb24gbW9kYWwgYW5kIG5vbiBtb2RhbCBmbG9hdGluZyBlbGVtZW50c1xyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2UgZXh0ZW5kcyBTaW5nbGV0b25lU3RyaWN0Q2xhc3Mge1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZWQgdG8gbW9kaWZ5IHRoZSBidXN5IHN0YXRlIGNvbXBvbmVudCB0aGF0IGlzIHNob3duIGJ5IGRlZmF1bHQgYnkgdGhlIGFkZE1vZGFsQnVzeVN0YXRlKCkgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBzZWUgdGhpcy5hZGRNb2RhbEJ1c3lTdGF0ZSgpXHJcbiAgICAgKi9cclxuICAgIGN1c3RvbUJ1c3lTdGF0ZUNvbXBvbmVudENsYXNzOiBUeXBlPEJ1c3lTdGF0ZUJhc2VDb21wb25lbnQ+ID0gQnVzeVN0YXRlQmFzZUNvbXBvbmVudDtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBwdWJsaWMgZ2V0dGVyIGZvciBkb2NzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2lzRW5hYmxlZCA9IHRydWU7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsbHMgaWYgdGhlIG1haW4gYXBwbGljYXRpb24gaXMgY3VycmVudGx5IHNob3dpbmcgYSBidXN5IHN0YXRlIHRoYXQgYmxvY2tzIGFsbCB1c2VyIGludGVyYWN0aW9uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2lzU2hvd2luZ0J1c3lTdGF0ZSA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBtb2RhbCBidXN5IHN0YXRlIGNvbXBvbmVudCB0aGF0IGlzIGluaXRpYWxpemVkIG9ubHkgdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLlxyXG4gICAgICpcclxuICAgICAqIChUbyBhcHBlbmQgdGhlIGJ1c3kgc3RhdGUgZHluYW1pY2FsbHksIHdlIHVzZSB0aGUgUG9ydGFsIGNvbmNlcHQgZnJvbSB0aGUgYW5ndWxhciBtYXRlcmlhbCBsaWJyYXJ5KVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jb21wb25lbnRQb3J0YWw6IENvbXBvbmVudFBvcnRhbDxCdXN5U3RhdGVCYXNlQ29tcG9uZW50PiB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBtb2RhbCBidXN5IHN0YXRlIGNvbnRhaW5lciB3aGVyZSB0aGUgY29tcG9uZW50IHdpbGwgYmUgYWRkZWRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbW9kYWxCdXN5U3RhdGVIb3N0OiBEb21Qb3J0YWxPdXRsZXQgfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGUgbWFuYWdlciBpcyBjdXJyZW50bHkgc2hvd2luZyBhIHNuYWNrYmFyIGVsZW1lbnQgb3Igbm90XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2lzU2hvd2luZ1NuYWNrQmFyID0gZmFsc2U7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udGFpbnMgYSBsaXN0IG9mIHRoZSBkaWFsb2dzIHRoYXQgYXJlIGN1cnJlbnRseSB2aXNpYmxlIHRvIHRoZSB1c2VyLlxyXG4gICAgICogRWFjaCBpdGVtIGluIHRoaXMgbGlzdCBpcyBhIGhhc2ggdGhhdCBpcyBjb21wdXRlZCB3aGVuIGRpYWxvZyBpcyBjcmVhdGVkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGl0LlxyXG4gICAgICpcclxuICAgICAqIEVtcHR5IGxpc3QgbWVhbnMgbm8gZGlhbG9ncyBhcmUgY3VycmVudGx5IHZpc2libGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfYWN0aXZlRGlhbG9nczogc3RyaW5nW10gPSBbXTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWlucyBhIGxpc3Qgd2l0aCBhbGwgdGhlIE1hdERpYWxvZyBpbnN0YW5jZXMgdGhhdCBhcmUgY3VycmVudGx5IHZpc2libGUgdG8gdGhlIHVzZXIuXHJcbiAgICAgKiBUaGUgbGlzdCB1c2VzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBsaXN0IG9mIF9hY3RpdmVEaWFsb2dzIGhhc2ggdmFsdWVzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2FjdGl2ZURpYWxvZ0luc3RhbmNlczogTWF0RGlhbG9nUmVmPERpYWxvZ0Jhc2VDb21wb25lbnQ+W10gPSBbXTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBpbml0aWFsaXplZCBSZW5kZXJlciAyIGluc3RhbmNlIHRoYXQgaXMgdXNlZCBieSB0aGlzIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyOiBSZW5kZXJlcjI7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdXNlZCB0byBkZWxldGUgdGhlIHdpbmRvdyBiZWZvcmV1bmxvYWQgZXZlbnQgbGlzdGVuZXIgb25jZSBub3QgdXNlZCBhbnltb3JlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3dpbmRvd0JlZm9yZVVubG9hZFVuTGlzdGVuOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdGhhdCBpcyB1c2VkIHRvIGRlbGV0ZSB0aGUgZG9jdW1lbnQga2V5ZG93biBldmVudCBsaXN0ZW5lciBvbmNlIG5vdCB1c2VkIGFueW1vcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRLZXlkb3duVW5saXN0ZW46ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gZGVsZXRlIHRoZSBkb2N1bWVudCBtb3VzZWRvd24gZXZlbnQgbGlzdGVuZXIgb25jZSBub3QgdXNlZCBhbnltb3JlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2RvY3VtZW50TW91c2Vkb3duVW5saXN0ZW46ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gZGVsZXRlIHRoZSBkb2N1bWVudCBwb2ludGVyZG93biBldmVudCBsaXN0ZW5lciBvbmNlIG5vdCB1c2VkIGFueW1vcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRQb2ludGVyZG93blVubGlzdGVuOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IocmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtYXRTbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1hdERpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcclxuXHJcblx0XHRzdXBlcihEaWFsb2dTZXJ2aWNlKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIgPSByZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsbHMgaWYgdGhpcyBkaWFsb2cgc2VydmljZSBpcyBlbmFibGVkIG9yIG5vdC4gSWYgZGlhbG9nIHNlcnZpY2UgaXMgZGlzYWJsZWQsIG5vbmUgb2YgaXQncyBmZWF0dXJlcyB3aWxsIHdvcmtcclxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBibG9jayBhbGwgZGlhbG9nIGZlYXR1cmVzIG5vcm1hbGx5IHdoZW4gc2h1dHRpbmcgZG93biB0aGUgYXBwbGljYXRpb25cclxuICAgICAqXHJcbiAgICAgKiBVc2Ugd2l0aCBjYXV0aW9uLiBXaGVuIHRoaXMgaXMgc2V0IHRvIGZhbHNlLCBkaWFsb2cgc2VydmljZSBzdG9wcyB3b3JraW5nLlxyXG4gICAgICovXHJcbiAgICBzZXQgaXNFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuXHJcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuX2lzRW5hYmxlZCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5faXNFbmFibGVkID0gdjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGVzIGEgd2FybmluZyB0aGF0IHdpbGwgYmUgc2hvd24gdG8gdGhlIHVzZXIgd2hlbiBoZS9zaGUgdHJpZXMgdG8gY2xvc2UgdGhlIGFwcGxpY2F0aW9uLlxyXG4gICAgICogVGhpcyB3YXJuaW5nIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIGNvbnRpbnVlIHdpdGggdGhlIGV4aXQgcHJvY2VzcyBvciBjYW5jZWwgaXQuXHJcbiAgICAgKiBUaGUgc3BlY2lmaWMgdGV4dHMgb2YgdGhpcyBtZXNzYWdlIGFyZSBhIGdlbmVyaWMgb25lcyBhbmQgY2Fubm90IGJlIGNoYW5nZWQuXHJcbiAgICAgKlxyXG4gICAgICogSU1QT1JUQU5UOiBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgbWFpbiBhcHBsaWNhdGlvbiBoYXMgYmVlbiBpbml0aWFsaXplZCBpbiBvcmRlciB0byB3b3JrLFxyXG4gICAgICogb3RoZXJ3aXNlIGl0IHdpbGwgZG8gbm90aGluZy5cclxuICAgICAqL1xyXG4gICAgYWRkQ2xvc2VBcHBsaWNhdGlvbldhcm5pbmcoKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93aW5kb3dCZWZvcmVVbmxvYWRVbkxpc3RlbiA9PT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fd2luZG93QmVmb3JlVW5sb2FkVW5MaXN0ZW4gPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdiZWZvcmV1bmxvYWQnLFxyXG4gICAgICAgICAgICAgICAgKGV2ZW50KSA9PiBldmVudC5yZXR1cm5WYWx1ZSA9IHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgdGhlIGNsb3NlIGFwcGxpY2F0aW9uIHdhcm5pbmcgbWVzc2FnZSBpZiBwcmV2aW91c2x5IGFzc2lnbmVkXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUNsb3NlQXBwbGljYXRpb25XYXJuaW5nKCkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fd2luZG93QmVmb3JlVW5sb2FkVW5MaXN0ZW4gIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3dpbmRvd0JlZm9yZVVubG9hZFVuTGlzdGVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dpbmRvd0JlZm9yZVVubG9hZFVuTGlzdGVuID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlIHRoZSBhcHBsaWNhdGlvbiB2aXN1YWwgYXBwZWFyYW5jZSBzbyB0aGUgdXNlciBwZXJjZWl2ZXMgdGhhdCB0aGUgYXBwbGljYXRpb24gaXNcclxuICAgICAqIGN1cnJlbnRseSBidXN5LiBXaGlsZSBtb2RhbCBidXN5IHN0YXRlIGlzIGVuYWJsZWQsIG5vIHVzZXIgaW5wdXQgaXMgcG9zc2libGUgbmVpdGhlciB2aWFcclxuICAgICAqIGtleWJvYXJkLCBtb3VzZSBvciB0b3VjaC4gVXNlIHRoaXMgc3RhdGUgd2hlbiBwZXJmb3JtaW5nIHNlcnZlciByZXF1ZXN0cyBvciBvcGVyYXRpb25zIHRoYXRcclxuICAgICAqIG11c3QgYmxvY2sgdGhlIHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYXBwbGljYXRpb24uIFRvIGFsbG93IHVzZXIgaW50ZXJhY3Rpb24gYWdhaW4sIHlvdSBtdXN0XHJcbiAgICAgKiBjYWxsIHJlbW92ZU1vZGFsQnVzeVN0YXRlKClcclxuICAgICAqXHJcbiAgICAgKiBOb3RpY2U6IFdlIGNhbiBtb2RpZnkgdGhlIGJ1c3kgc3RhdGUgdmlzdWFsIGNvbXBvbmVudCB0aGF0IGlzIHNob3duIGJ5IHRoaXMgbWV0aG9kLiBUbyBkbyBpdCwgd2UgbXVzdFxyXG4gICAgICogc2V0IHRoaXMuY3VzdG9tQnVzeVN0YXRlQ29tcG9uZW50Q2xhc3MgcHJvcGVydHkgd2l0aCBvdXIgb3duIGN1c3RvbSBidXN5IHN0YXRlIGNvbXBvbmVudCBjbGFzcy4gKFdlIGNhbiBkbyBpdCBhdFxyXG4gICAgICogb3VyIG1haW4gYXBwbGljYXRpb24gY29tcG9uZW50IGNvbnN0cnVjdG9yIGZvciBleGFtcGxlKS4gT3VyIGN1c3RvbSBjb21wb25lbnQgbXVzdCBleHRlbmQgdGhlXHJcbiAgICAgKiBCdXN5U3RhdGVCYXNlQ29tcG9uZW50IG9uZSB0byBhZGQgaXRzIG93biB2aXN1YWwgYXBwZWFyYW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAc2VlIHRoaXMuY3VzdG9tQnVzeVN0YXRlQ29tcG9uZW50Q2xhc3NcclxuICAgICAqL1xyXG4gICAgYWRkTW9kYWxCdXN5U3RhdGUoKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5faXNFbmFibGVkIHx8IHRoaXMuX2lzU2hvd2luZ0J1c3lTdGF0ZSkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZVVzZXJJbnRlcmFjdGlvbigpO1xyXG5cclxuICAgICAgICAvLyBEeW5hbWljYWxseSBjcmVhdGUgdGhlIGJ1c3kgc3RhdGUgY29tcG9uZW50IHJlZmVyZW5jZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lXHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudFBvcnRhbCA9PT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50UG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbCh0aGlzLmN1c3RvbUJ1c3lTdGF0ZUNvbXBvbmVudENsYXNzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIFBvcnRhbEhvc3Qgd2l0aCBkb2N1bWVudC5ib2R5IGFzIGl0cyBhbmNob3IgZWxlbWVudFxyXG4gICAgICAgICAgICB0aGlzLl9tb2RhbEJ1c3lTdGF0ZUhvc3QgPSBuZXcgRG9tUG9ydGFsT3V0bGV0KFxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvblJlZixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICh0aGlzLl9tb2RhbEJ1c3lTdGF0ZUhvc3QgYXMgRG9tUG9ydGFsT3V0bGV0KS5hdHRhY2godGhpcy5fY29tcG9uZW50UG9ydGFsKTtcclxuXHJcbiAgICAgICAgdGhpcy5faXNTaG93aW5nQnVzeVN0YXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGUgYXBwbGljYXRpb24gaXMgY3VycmVudGx5IGxvY2tlZCBpbiBhIG1vZGFsIGJ1c3kgc3RhdGUgKGNhdXNlZCBieSBhbiBhZGRNb2RhbEJ1c3lTdGF0ZSgpIGNhbGwpXHJcbiAgICAgKi9cclxuICAgIGdldCBpc1Nob3dpbmdCdXN5U3RhdGUoKSB7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Nob3dpbmdCdXN5U3RhdGU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FuY2VsIHRoZSBhcHBsaWNhdGlvbiBidXN5IHN0YXRlIGFuZCByZXN0b3JlIGl0IGJhY2sgdG8gbm9ybWFsIHNvIHVzZXIgaW50ZXJhY3Rpb24gaXMgYWxsb3dlZCBhZ2FpblxyXG4gICAgICovXHJcbiAgICByZW1vdmVNb2RhbEJ1c3lTdGF0ZSgpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQgfHwgIXRoaXMuX2lzU2hvd2luZ0J1c3lTdGF0ZSkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudFBvcnRhbCAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgKHRoaXMuX21vZGFsQnVzeVN0YXRlSG9zdCBhcyBEb21Qb3J0YWxPdXRsZXQpLmRldGFjaCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW5hYmxlVXNlckludGVyYWN0aW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2lzU2hvd2luZ0J1c3lTdGF0ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVE9ETyAtIGFkYXB0IGZyb20gVFMgdmVyc2lvblxyXG4gICAgICovXHJcbiAgICBhZGRUb29sVGlwKCkge1xyXG5cclxuICAgICAgICAvLyBUT0RPIC0gYWRhcHQgZnJvbSBUUyB2ZXJzaW9uXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBhIG5vbiBtb2RhbCBzbmFja2JhciBub3RpZmljYXRpb24gdG8gdGhlIHVzZXIgKE9ubHkgb25lIHNuYWNrLWJhciBjYW4gZXZlciBiZSBvcGVuZWQgYXQgdGhlIHNhbWUgdGltZSkuXHJcbiAgICAgKlxyXG4gICAgICogU25hY2tiYXJzIGluZm9ybSB1c2VycyBvZiBhIHByb2Nlc3MgdGhhdCBhbiBhcHAgaGFzIHBlcmZvcm1lZCBvciB3aWxsIHBlcmZvcm0uIFRoZXkgYXBwZWFyIHRlbXBvcmFyaWx5LCB0b3dhcmRzIHRoZSBib3R0b20gb3IgdG9wIG9mIHRoZSBzY3JlZW4uXHJcbiAgICAgKiBUaGV5IHNob3VsZG7igJl0IGludGVycnVwdCB0aGUgdXNlciBleHBlcmllbmNlLCBhbmQgdGhleSBkb27igJl0IHJlcXVpcmUgdXNlciBpbnB1dCB0byBkaXNhcHBlYXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbmZpZyBBIE1hdFNuYWNrQmFyQ29uZmlnIGluc3RhbmNlIHdpdGggdGhlIGN1c3RvbWl6YXRpb25zIHdlIHdhbnQgZm9yIHRoaXMgc25hY2tiYXJcclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIHNob3cgb24gdGhlIHNuYWNrYmFyXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uIElmIG5vdCBlbXB0eSwgdGhlIHRleHQgdG8gcGxhY2Ugb24gdGhlIHNuYWNrYmFyIGNvbmZpcm1hdGlvbiBidXR0b25cclxuICAgICAqIEBwYXJhbSBhY3Rpb25DYWxsYmFjayBBIG1ldGhvZCB0byBleGVjdXRlIG9uY2UgdGhlIHVzZXIgY2xpY2tzIGludG8gdGhlIGFjdGlvbiBidXR0b24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKi9cclxuICAgIGFkZFNuYWNrQmFyKGNvbmZpZzogTWF0U25hY2tCYXJDb25maWcsIG1lc3NhZ2U6IHN0cmluZywgYWN0aW9uID0gJycsIGFjdGlvbkNhbGxiYWNrOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU2hvd2luZ1NuYWNrQmFyKSB7XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byBzaG93IGEgc25hY2tiYXIgd2hpbGUgYW5vdGhlciBvbmUgaXMgc3RpbGwgdmlzaWJsZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5faXNTaG93aW5nU25hY2tCYXIgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBzbmFja0JhclJlZiA9IHRoaXMubWF0U25hY2tCYXIub3BlbihtZXNzYWdlLCBhY3Rpb24gPT09ICcnID8gdW5kZWZpbmVkIDogYWN0aW9uLCBjb25maWcpO1xyXG5cclxuICAgICAgICBpZiAoYWN0aW9uQ2FsbGJhY2sgIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHNuYWNrQmFyUmVmLm9uQWN0aW9uKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBhY3Rpb25DYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsbHMgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGN1cnJlbnRseSBzaG93aW5nIGEgc25hY2tiYXIgb3Igbm90XHJcbiAgICAgKi9cclxuICAgIGdldCBpc1Nob3dpbmdTbmFja0JhcigpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2hvd2luZ1NuYWNrQmFyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcmNlIHRoZSByZW1vdmFsIG9mIHRoZSBzbmFjayBiYXIgZGlhbG9nIGlmIGl0IGV4aXN0cy5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBzbmFja2JhciBpcyBjdXJyZW50bHkgdmlzaWJsZSwgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZVNuYWNrQmFyKCkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCB8fCAhdGhpcy5faXNTaG93aW5nU25hY2tCYXIpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWF0U25hY2tCYXIuZGlzbWlzcygpO1xyXG5cclxuICAgICAgICB0aGlzLl9pc1Nob3dpbmdTbmFja0JhciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBkaWFsb2cgd2l0aCBvbmUgb3IgbW9yZSBvcHRpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2xvc2UgaXQuIFdlIGNhbiB1c2UgYW55IG9mIHRoZSBwcmVkZWZpbmVkIGRpYWxvZyB0eXBlcyB0aGF0IGFyZSBidW5kbGVkIHdpdGhcclxuICAgICAqIHRoaXMgbGlicmFyeSBvciBleHRlbmQgRGlhbG9nQmFzZUNvbXBvbmVudCB0byBjcmVhdGUgb3VyIG93biBjdXN0b20gb25lcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZGlhbG9nQ29tcG9uZW50Q2xhc3MgQSBjbGFzcyBmb3IgYSBjb21wb25lbnQgdGhhdCBleHRlbmRzIERpYWxvZ0Jhc2VDb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGRpYWxvZyB0aGF0IGlzIHNob3duIHRvIHRoZSB1c2VyLlxyXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVudCB2aXN1YWwgYW5kIHRleHR1YWwgb3B0aW9ucyB0aGF0IHRoaXMgZGlhbG9nIGFsbG93czpcclxuICAgICAqICAgICAgICAgICAgLSBpZDogVGhlIGh0bWwgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSBvbmNlIGNyZWF0ZWQuIElmIG5vdCBzcGVjaWZpZWQsIG5vIGlkIHdpbGwgYmUgZXhwbGljaXRseSBzZXRcclxuICAgICAqICAgICAgICAgICAgLSB3aWR0aDogNTAlIGJ5IGRlZmF1bHQuIFNwZWNpZnkgdGhlIGNzcyB2YWx1ZSBmb3IgdGhlIGRlZmF1bHQgZGlhbG9nIHdpZHRoLiBBcyB0aGUgZGlhbG9nIGlzIHJlc3BvbnNpdmUsIHRoZSB2YWx1ZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHlcclxuICAgICAqICAgICAgICAgICAgICByZWR1Y2VkIGlmIHRoZSBhdmFpbGFibGUgc2NyZWVuIGlzIG5vdCBlbm91Z2gsIGFuZCB3aWxsIHJlYWNoIHRoZSBkZXNpcmVkIHZhbHVlIG90aGVyd2lzZS4gV2UgY2FuIHNldCBhbnkgY3NzIHVuaXQgbGlrZSBwaXhlbHMsIFxyXG4gICAgICogICAgICAgICAgICAgICUsIHZoLCB2dywgb3IgYW55IG90aGVyLiBGb3IgZXhhbXBsZTogJzQwMHB4JywgJzUwJScsIGV0Yy5cclxuICAgICAqICAgICAgICAgICAgLSBtYXhXaWR0aDogRGVmaW5lcyB0aGUgbWF4aW11bSB3aWR0aCB0aGF0IHRoZSBkaWFsb2cgd2lsbCBoYXZlIHJlZ2FyZGluZyB0aGUgdmlld3BvcnQuIFdlIGNhbiBzcGVjaWZ5IGl0IGluICUgb3IgdncsIGp1c3QgbGlrZSBpcyBkb25lIGluXHJcbiAgICAgKiAgICAgICAgICAgICAgY3NzLiBCeSBkZWZhdWx0IGl0IGlzIGRlZmluZWQgYXMgOTZ2dywgd2hpY2ggd2lsbCBmaXQgOTYlIG9mIHRoZSB2aWV3cG9ydCBvbiBzbWFsbCBkZXZpY2VzXHJcbiAgICAgKiAgICAgICAgICAgIC0gaGVpZ2h0OiBUT0RPIGRvY3NcclxuICAgICAqICAgICAgICAgICAgLSBtYXhIZWlnaHQ6IFRPRE8gZG9jc1xyXG4gICAgICogICAgICAgICAgICAtIG1vZGFsOiBUcnVlIChkZWZhdWx0KSBpZiBzZWxlY3RpbmcgYW4gb3B0aW9uIGlzIG1hbmRhdG9yeSB0byBjbG9zZSB0aGUgZGlhbG9nLCBmYWxzZSBpZiB0aGUgZGlhbG9nIGNhbiBiZSBjbG9zZWRcclxuICAgICAqICAgICAgICAgICAgICBieSB0aGUgdXNlciBjbGlja2luZyBvdXRzaWRlIGl0IFxyXG4gICAgICogICAgICAgICAgICAtIHRleHRzOiBBIGxpc3Qgd2l0aCBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGRpYWxvZyB0ZXh0cywgc29ydGVkIGJ5IGltcG9ydGFuY2UuIFdoZW4gZGlhbG9nIGhhcyBhIHRpdGxlLCB0aGlzIHNob3VsZFxyXG4gICAgICogICAgICAgICAgICAgIGJlIHBsYWNlZCBmaXJzdCwgc3VidGl0bGUgc2Vjb25kIGFuZCBzbyAoRWFjaCBkaWFsb2cgbWF5IGFjY2VwdCBkaWZmZXJlbnQgbnVtYmVyIG9mIHRleHRzKS5cclxuICAgICAqICAgICAgICAgICAgLSBvcHRpb25zOiBBIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBidXR0b24gY2FwdGlvbnMgZm9yIGVhY2ggb25lIG9mIHRoZSBhY2NlcHRlZCBkaWFsb2cgb3B0aW9uc1xyXG4gICAgICogICAgICAgICAgICAtIHZpZXdDb250YWluZXJSZWY6IFRoaXMgaXMgaW1wb3J0YW50IGlmIHdlIHdhbnQgdG8gcHJvcGFnYXRlIHByb3ZpZGVycyBmcm9tIGEgcGFyZW50IGNvbXBvbmVudCB0byB0aGlzIGRpYWxvZy4gV2UgbXVzdCBzcGVjaWZ5IFxyXG5cdCAqICAgICAgICAgICAgICB0aGlzIHJlZmVyZW5jZSB0byBtYWtlIHN1cmUgdGhlIHNhbWUgc2VydmljZXMgaW5qZWN0ZWQgb24gdGhlIHBhcmVudCBhcmUgYXZhaWxhYmxlIHRvbyBhdCB0aGUgY2hpbGQgZGlhbG9nIFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBkaWFsb2cgaXMgY2xvc2VkIGFuZCB3aWxsIHJlY2VpdmUgYSBzZWxlY3Rpb24gb2JqZWN0IHdpdGggdGhlIG51bWVyaWMgaW5kZXggYW5kIHZhbHVlIGZvclxyXG4gICAgICogICAgICAgIHRoZSBvcHRpb24gdGhhdCdzIGJlZW4gc2VsZWN0ZWQgYnkgdGhlIHVzZXIuIGlmIG5vIG9wdGlvbiB3YXMgc2VsZWN0ZWQsIGluZGV4IHdpbGwgYmUgLTEgYW5kIHZhbHVlIG51bGxcclxuICAgICAqL1xyXG4gICAgYWRkRGlhbG9nKGRpYWxvZ0NvbXBvbmVudENsYXNzOiBUeXBlPERpYWxvZ0Jhc2VDb21wb25lbnQ+LFxyXG4gICAgICAgICAgICAgIHByb3BlcnRpZXM6IHtpZD86IHN0cmluZyxcclxuXHRcdFx0XHRcdFx0ICAgd2lkdGg/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWw/OiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0cz86IHN0cmluZ1tdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPzogc3RyaW5nW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY/OiBWaWV3Q29udGFpbmVyUmVmfSwgXHJcbiAgICAgICAgICAgICAgY2FsbGJhY2s6IG51bGwgfCAoKHNlbGVjdGlvbjoge2luZGV4Om51bWJlciwgdmFsdWU/OiBhbnl9KSA9PiB2b2lkKSA9IG51bGwpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIHNwZWNpZmllZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgcHJvcGVydGllcy5tb2RhbCA9IHByb3BlcnRpZXMubW9kYWwgPz8gdHJ1ZTtcclxuICAgICAgICBwcm9wZXJ0aWVzLnRleHRzID0gcHJvcGVydGllcy50ZXh0cyA/PyBbXTtcclxuICAgICAgICBwcm9wZXJ0aWVzLm9wdGlvbnMgPSBwcm9wZXJ0aWVzLm9wdGlvbnMgPz8gW107XHJcblxyXG4gICAgICAgIC8vIEdlbmVyYXRlIGEgc3RyaW5nIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgZGlhbG9nIG9uIHRoZSBsaXN0IG9mIGFjdGl2ZSBkaWFsb2dzXHJcbiAgICAgICAgLy8gQSBkaWFsb2cgaXMgY29uc2lkZXJlZCBhcyB1bmlxdWUgaWYgdGhlIGRpYWxvZyBpZCBhbmQgdGV4dHMgYXJlIGV4YWN0bHkgdGhlIHNhbWUuIFdlIGRvIG5vdCB0YWtlIG9wdGlvbnMgaW50byBjb25zaWRlcmF0aW9uXHJcbiAgICAgICAgLy8gYXMgdGhlcmUgbWF5IGJlIGRpYWxvZ3Mgd2l0aCBhIGJpZyBhbW91bnQgb2Ygb3B0aW9ucyBhdmFpbGFibGUuXHJcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IChkaWFsb2dDb21wb25lbnRDbGFzcyBhcyBhbnkpLkRJQUxPR19DTEFTU19OQU1FO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmKGNsYXNzTmFtZSA9PT0gJycpe1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzdGF0aWMgcHJvcGVydHkgRElBTE9HX0NMQVNTX05BTUUgaXMgbm90IGRlZmluZWQgb3IgaXMgZW1wdHkgZm9yIHRoaXMgZGlhbG9nIGNvbXBvbmVudCAoJHtkaWFsb2dDb21wb25lbnRDbGFzc30pYCk7ICAgICBcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgY29uc3QgZGlhbG9nSGFzaCA9IGNsYXNzTmFtZSArIHByb3BlcnRpZXMudGV4dHMuam9pbignJyk7XHJcblxyXG4gICAgICAgIC8vIGlkZW50aWNhbCBkaWFsb2dzIHdvbid0IGJlIGFsbG93ZWQgYXQgdGhlIHNhbWUgdGltZVxyXG4gICAgICAgIGlmICh0aGlzLl9hY3RpdmVEaWFsb2dzLmluY2x1ZGVzKGRpYWxvZ0hhc2gpKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLm1hdERpYWxvZy5vcGVuKGRpYWxvZ0NvbXBvbmVudENsYXNzLCB7XHJcbiAgICAgICAgICAgIHdpZHRoOiBwcm9wZXJ0aWVzLndpZHRoID8/IFwiNTAlXCIsXHJcbiAgICAgICAgICAgIG1heFdpZHRoOiBwcm9wZXJ0aWVzLm1heFdpZHRoID8/IFwiOTZ2d1wiLFxyXG4gICAgICAgICAgICBkaXNhYmxlQ2xvc2U6IHByb3BlcnRpZXMubW9kYWwsXHJcbiAgICAgICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgICAgIGNsb3NlT25OYXZpZ2F0aW9uOiAhcHJvcGVydGllcy5tb2RhbCxcclxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogcHJvcGVydGllcy52aWV3Q29udGFpbmVyUmVmLFxyXG4gICAgICAgICAgICBkYXRhOiB7IHRleHRzOiBwcm9wZXJ0aWVzLnRleHRzLCBvcHRpb25zOiBwcm9wZXJ0aWVzLm9wdGlvbnMgfVxyXG4gICAgICAgICAgfSk7ICAgICAgXHJcblx0XHRcclxuXHRcdC8vIEFzc2lnbiB0aGUgZGlhbG9nIElEIG9ubHkgaWYgc3BlY2lmaWNhbGx5IHNldCBvbiBwcm9wZXJ0aWVzXHJcblx0XHRpZihwcm9wZXJ0aWVzLmlkICYmIHByb3BlcnRpZXMuaWQgIT09IHVuZGVmaW5lZCl7XHJcblx0XHRcdFxyXG5cdFx0XHRkaWFsb2dSZWYuaWQgPSBwcm9wZXJ0aWVzLmlkO1xyXG5cdFx0fVxyXG5cdFx0XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlRGlhbG9ncy5wdXNoKGRpYWxvZ0hhc2gpO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2ZURpYWxvZ0luc3RhbmNlcy5wdXNoKGRpYWxvZ1JlZik7XHJcblxyXG4gICAgICAgIGRpYWxvZ1JlZi5iZWZvcmVDbG9zZWQoKS5zdWJzY3JpYmUoKHNlbGVjdGlvbjp7aW5kZXg6bnVtYmVyLCB2YWx1ZT86YW55fSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlRGlhbG9ncyA9IEFycmF5VXRpbHMucmVtb3ZlRWxlbWVudCh0aGlzLl9hY3RpdmVEaWFsb2dzLCBkaWFsb2dIYXNoKTtcclxuICAgICAgICAgICAgdGhpcy5fYWN0aXZlRGlhbG9nSW5zdGFuY2VzID0gQXJyYXlVdGlscy5yZW1vdmVFbGVtZW50KHRoaXMuX2FjdGl2ZURpYWxvZ0luc3RhbmNlcywgZGlhbG9nUmVmKTtcclxuXHJcbiAgICAgICAgICAgIGlmKCFwcm9wZXJ0aWVzLm1vZGFsICYmIHNlbGVjdGlvbiA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBzZWxlY3Rpb24gPSB7IGluZGV4OiAtMSB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgfWVsc2UgaWYgKCFOdW1lcmljVXRpbHMuaXNJbnRlZ2VyKHNlbGVjdGlvbi5pbmRleCkpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNsb3NlRGlhbG9nKCkgZXhwZWN0cyBpbmRleCB0byBiZSBhbiBpbnRlZ2VyYCk7ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKHNlbGVjdGlvbi5pbmRleCA+PSAwICYmIHNlbGVjdGlvbi52YWx1ZSA9PT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnZhbHVlID0gcHJvcGVydGllcy5vcHRpb25zIVtzZWxlY3Rpb24uaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIChjYWxsYmFjayBhcyAoKHNlbGVjdGlvbjp7aW5kZXg6bnVtYmVyLCB2YWx1ZT86YW55fSkgPT4gdm9pZCkpKHNlbGVjdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBkaWFsb2cgd2l0aCBhIGNhbGVuZGFyIHRvIGxldCB0aGUgdXNlciBwaWNrIGEgZGF0ZS5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gcHJvcGVydGllcyBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgZGlmZmVyZW50IHZpc3VhbCBhbmQgdGV4dHVhbCBvcHRpb25zIHRoYXQgdGhpcyBkaWFsb2cgYWxsb3dzOlxyXG4gICAgICogICAgICAgICAgICAtIGlkOiBUaGUgaHRtbCB1bmlxdWUgaWRlbnRpZmllciB0aGF0IHRoZSBkaWFsb2cgd2lsbCBoYXZlIG9uY2UgY3JlYXRlZC4gSWYgbm90IHNwZWNpZmllZCwgbm8gaWQgd2lsbCBiZSBleHBsaWNpdGx5IHNldFxyXG4gICAgICogICAgICAgICAgICAtIHdpZHRoOiBTcGVjaWZ5IHRoZSBjc3MgdmFsdWUgZm9yIHRoZSBkZWZhdWx0IGRpYWxvZyB3aWR0aC4gQXMgdGhlIGRpYWxvZyBpcyByZXNwb25zaXZlLCB0aGUgdmFsdWUgd2lsbCBiZSBhdXRvbWF0aWNhbGx5XHJcbiAgICAgKiAgICAgICAgICAgICAgcmVkdWNlZCBpZiB0aGUgYXZhaWxhYmxlIHNjcmVlbiBpcyBub3QgZW5vdWdoLCBhbmQgd2lsbCByZWFjaCB0aGUgZGVzaXJlZCB2YWx1ZSBvdGhlcndpc2UuIFdlIGNhbiBzZXQgYW55IGNzcyB1bml0IGxpa2UgcGl4ZWxzLCBcclxuICAgICAqICAgICAgICAgICAgICAlLCB2aCwgdncsIG9yIGFueSBvdGhlci4gRm9yIGV4YW1wbGU6ICc0MDBweCcsICc1MCUnLCBldGMuXHJcbiAgICAgKiAgICAgICAgICAgIC0gbWF4V2lkdGg6IERlZmluZXMgdGhlIG1heGltdW0gd2lkdGggdGhhdCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSByZWdhcmRpbmcgdGhlIHZpZXdwb3J0LiBXZSBjYW4gc3BlY2lmeSBpdCBpbiAlIG9yIHZ3LCBqdXN0IGxpa2UgaXMgZG9uZSBpblxyXG4gICAgICogICAgICAgICAgICAgIGNzcy4gQnkgZGVmYXVsdCBpdCBpcyBkZWZpbmVkIGFzIDk2dncsIHdoaWNoIHdpbGwgZml0IDk2JSBvZiB0aGUgdmlld3BvcnQgb24gc21hbGwgZGV2aWNlc1xyXG4gICAgICogICAgICAgICAgICAtIGhlaWdodDogVE9ETyBkb2NzXHJcbiAgICAgKiAgICAgICAgICAgIC0gbWF4SGVpZ2h0OiBUT0RPIGRvY3NcclxuICAgICAqICAgICAgICAgICAgLSBtb2RhbDogVHJ1ZSAoZGVmYXVsdCkgaWYgc2VsZWN0aW5nIGFuIG9wdGlvbiBpcyBtYW5kYXRvcnkgdG8gY2xvc2UgdGhlIGRpYWxvZywgZmFsc2UgaWYgdGhlIGRpYWxvZyBjYW4gYmUgY2xvc2VkXHJcbiAgICAgKiAgICAgICAgICAgICAgYnkgdGhlIHVzZXIgY2xpY2tpbmcgb3V0c2lkZSBpdCBcclxuICAgICAqICAgICAgICAgICAgLSB0aXRsZTogQW4gb3B0aW9uYWwgZGlhbG9nIHRpdGxlXHJcbiAgICAgKiAgICAgICAgICAgIC0gdmlld0NvbnRhaW5lclJlZjogVGhpcyBpcyBpbXBvcnRhbnQgdG8gcHJvcGFnYXRlIHByb3ZpZGVycyBmcm9tIGEgcGFyZW50IGNvbXBvbmVudCB0byB0aGlzIGRpYWxvZy4gV2UgbXVzdCBzcGVjaWZ5IFxyXG5cdCAqICAgICAgICAgICAgICB0aGlzIHJlZmVyZW5jZSB0byBtYWtlIHN1cmUgdGhlIHNhbWUgc2VydmljZXMgaW5qZWN0ZWQgb24gdGhlIHBhcmVudCBhcmUgYXZhaWxhYmxlIHRvbyBhdCB0aGUgY2hpbGQgZGlhbG9nIFxyXG4gICAgICogQHBhcmFtIGNhbGxiYWNrIEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBkaWFsb2cgaXMgY2xvc2VkLiBJdCB3aWxsIHJlY2VpdmUgYSBEYXRlKCkgb2JqZWN0IHNlbGVjdGVkIGJ5IHRoZSB1c2VyIG9yIG51bGwgaWYgbm8gc2VsZWN0aW9uIGhhcHBlbmVkXHJcbiAgICAgKi9cclxuICAgIGFkZERhdGVTZWxlY3Rpb25EaWFsb2cocHJvcGVydGllczoge2lkPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhXaWR0aD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEhlaWdodD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsPzogYm9vbGVhbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcdFx0XHRcdHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWZ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjazogKChzZWxlY3RlZERhdGU6IG51bGwgfCBEYXRlKSA9PiB2b2lkKSkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmFkZERpYWxvZyhEaWFsb2dEYXRlU2VsZWN0aW9uQ29tcG9uZW50LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZDogcHJvcGVydGllcy5pZCA/PyB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogcHJvcGVydGllcy53aWR0aCA/PyBcIjUwJVwiLFxyXG4gICAgICAgICAgICAgICAgbWF4V2lkdGg6IHByb3BlcnRpZXMubWF4V2lkdGggPz8gXCI5NnZ3XCIsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHByb3BlcnRpZXMuaGVpZ2h0ID8/IFwiNTAlXCIsXHJcbiAgICAgICAgICAgICAgICBtYXhIZWlnaHQ6IHByb3BlcnRpZXMubWF4SGVpZ2h0ID8/IFwiOTJ2d1wiLFxyXG4gICAgICAgICAgICAgICAgbW9kYWw6IHByb3BlcnRpZXMubW9kYWwgPz8gZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB0ZXh0czogW3Byb3BlcnRpZXMudGl0bGUgPz8gJyddLFxyXG4gICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogcHJvcGVydGllcy52aWV3Q29udGFpbmVyUmVmXHJcbiAgICAgICAgICAgIH0sKHNlbGVjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhzZWxlY3Rpb24uaW5kZXggPT09IC0xID8gbnVsbCA6IChzZWxlY3Rpb24udmFsdWUgYXMgRGF0ZSkpOyAgXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogRm9yY2UgdGhlIHJlbW92YWwgb2YgYWxsIHRoZSBkaWFsb2dzIHRoYXQgYXJlIGN1cnJlbnRseSB2aXNpYmxlLlxyXG4gICAgICpcclxuICAgICAqIElmIG5vIGRpYWxvZ3MgYXJlIGN1cnJlbnRseSB2aXNpYmxlLCB0aGlzIG1ldGhvZCB3aWxsIGRvIG5vdGhpbmdcclxuICAgICAqL1xyXG4gICAgcmVtb3ZlQWxsRGlhbG9ncygpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgZGlhbG9nUmVmIG9mIHRoaXMuX2FjdGl2ZURpYWxvZ0luc3RhbmNlcykge1xyXG5cclxuICAgICAgICAgICAgZGlhbG9nUmVmLmNsb3NlKHtpbmRleDotMX0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB0aGlzLl9hY3RpdmVEaWFsb2dzID0gW107XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlRGlhbG9nSW5zdGFuY2VzID0gW107XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVE9ETyAtIHRyYW5zbGF0ZSBmcm9tIFRTIHZlcnNpb25cclxuICAgICAqL1xyXG4vLyAgICBhZGRTaWRlTmF2KCl7XHJcbi8vXHJcbi8vICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUT0RPIC0gdHJhbnNsYXRlIGZyb20gVFMgdmVyc2lvblxyXG4gICAgICovXHJcbi8vICAgIGdldCBpc1Nob3dpbmdTaWRlTmF2KCl7XHJcbi8vXHJcbi8vICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUT0RPIC0gdHJhbnNsYXRlIGZyb20gVFMgdmVyc2lvblxyXG4gICAgICovXHJcbi8vICAgIHJlbW92ZVNpZGVOYXYoKXtcclxuLy9cclxuLy8gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQmxvY2sgYWxsIHRoZSB1c2VyIGludGVyYWN0aW9ucyB3aXRoIHRoZSBhcHBsaWNhdGlvbiAoa2V5Ym9hcmQsIHRvdWNoLCBtb3VzZSwgLi4uKVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9kaXNhYmxlVXNlckludGVyYWN0aW9uKCkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnRLZXlkb3duVW5saXN0ZW4gPT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50S2V5ZG93blVubGlzdGVuID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdrZXlkb3duJywgKGV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9kb2N1bWVudE1vdXNlZG93blVubGlzdGVuID09PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudE1vdXNlZG93blVubGlzdGVuID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdtb3VzZWRvd24nLCAoZXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RvY3VtZW50UG9pbnRlcmRvd25Vbmxpc3RlbiA9PT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRQb2ludGVyZG93blVubGlzdGVuID0gdGhpcy5fcmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdwb2ludGVyZG93bicsIChldmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlc3RvcmUgdGhlIHVzZXIgaW50ZXJhY3Rpb25zIHRoYXQgd2VyZSBwcmV2aW91c2x5IGRpc2FibGVkIHdpdGggX2Rpc2FibGVVc2VySW50ZXJhY3Rpb24gbWV0aG9kXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2VuYWJsZVVzZXJJbnRlcmFjdGlvbigpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RvY3VtZW50S2V5ZG93blVubGlzdGVuICE9PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudEtleWRvd25Vbmxpc3RlbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudEtleWRvd25Vbmxpc3RlbiA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnRNb3VzZWRvd25Vbmxpc3RlbiAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRNb3VzZWRvd25Vbmxpc3RlbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudE1vdXNlZG93blVubGlzdGVuID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9kb2N1bWVudFBvaW50ZXJkb3duVW5saXN0ZW4gIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50UG9pbnRlcmRvd25Vbmxpc3RlbigpO1xyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudE1vdXNlZG93blVubGlzdGVuID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
406
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dXJib2d1aS1hbmd1bGFyL3NyYy9tYWluL2NvbnRyb2xsZXIvZGlhbG9nLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7R0FPRztBQUVILE9BQU8sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFRLFVBQVUsRUFBcUcsTUFBTSxlQUFlLENBQUM7QUFHcEosT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV2RSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwwRUFBMEUsQ0FBQztBQUN4SCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7OztBQUcvRTs7R0FFRztBQUlILE1BQU0sT0FBTyxhQUFjLFNBQVEscUJBQXFCO0lBeUZwRCxZQUFZLGVBQWlDLEVBQ2hCLFdBQXdCLEVBQ3hCLFNBQW9CLEVBQ3BCLFFBQWtCLEVBQ2xCLGNBQThCLEVBQzlCLHdCQUFrRDtRQUVqRixLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7UUFOVSxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUEzRi9FOzs7O1dBSUc7UUFDSCxrQ0FBNkIsR0FBaUMsc0JBQXNCLENBQUM7UUFHckY7O1dBRUc7UUFDSyxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBRzFCOztXQUVHO1FBQ0ssd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBR3BDOzs7O1dBSUc7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LHdCQUF3QixLQUFLLElBQUksRUFBRTtZQUV4QyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1NBQ3hDO1FBRUQsSUFBSSxJQUFJLENBQUMsMEJBQTBCLEtBQUssSUFBSSxFQUFFO1lBRTFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQywwQkFBMEIsR0FBRyxJQUFJLENBQUM7U0FDMUM7UUFFRCxJQUFJLElBQUksQ0FBQyw0QkFBNEIsS0FBSyxJQUFJLEVBQUU7WUFFNUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLDBCQUEwQixHQUFHLElBQUksQ0FBQztTQUMxQztJQUNMLENBQUM7OEdBcGlCUSxhQUFhO2tIQUFiLGFBQWEsY0FGWixNQUFNOzsyRkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUdXJib0dVSSBpcyBBIGxpYnJhcnkgdGhhdCBoZWxwcyB3aXRoIHRoZSBtb3N0IGNvbW1vbiBhbmQgZ2VuZXJpYyBVSSBlbGVtZW50cyBhbmQgZnVuY3Rpb25hbGl0aWVzXHJcbiAqXHJcbiAqIFdlYnNpdGUgOiAtPiBodHRwOi8vd3d3LnR1cmJvZ3VpLm9yZ1xyXG4gKiBMaWNlbnNlIDogLT4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gKiBMaWNlbnNlIFVybCA6IC0+IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gKiBDb3B5UmlnaHQgOiAtPiBDb3B5cmlnaHQgMjAxOCBFZGVydG9uZSBBZHZhbmRlZCBTb2x1dGlvbnMuIGh0dHBzOi8vd3d3LmVkZXJ0b25lLmNvbVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IEFycmF5VXRpbHMsIE51bWVyaWNVdGlscyB9IGZyb20gJ3R1cmJvY29tbW9ucy10cyc7XHJcbmltcG9ydCB7IFR5cGUsIEluamVjdGFibGUsIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlciwgSW5qZWN0b3IsIEFwcGxpY2F0aW9uUmVmLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nLCBNYXREaWFsb2dSZWYgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciwgTWF0U25hY2tCYXJDb25maWcgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xyXG5pbXBvcnQgeyBCdXN5U3RhdGVCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vdmlldy9jb21wb25lbnRzL2J1c3ktc3RhdGUtYmFzZS9idXN5LXN0YXRlLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsLCBEb21Qb3J0YWxPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcclxuaW1wb3J0IHsgRGlhbG9nQmFzZUNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZXcvY29tcG9uZW50cy9kaWFsb2ctYmFzZS9kaWFsb2ctYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBEaWFsb2dEYXRlU2VsZWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vdmlldy9jb21wb25lbnRzL2RpYWxvZy1kYXRlLXNlbGVjdGlvbi9kaWFsb2ctZGF0ZS1zZWxlY3Rpb24uY29tcG9uZW50JztcclxuaW1wb3J0IHsgU2luZ2xldG9uZVN0cmljdENsYXNzIH0gZnJvbSAnLi4vbW9kZWwvY2xhc3Nlcy9TaW5nbGV0b25lU3RyaWN0Q2xhc3MnO1xuXHJcblxyXG4vKipcclxuICogTWFuYWdlcyB0aGUgYXBwbGljYXRpb24gbW9kYWwgYW5kIG5vbiBtb2RhbCBmbG9hdGluZyBlbGVtZW50c1xyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIERpYWxvZ1NlcnZpY2UgZXh0ZW5kcyBTaW5nbGV0b25lU3RyaWN0Q2xhc3Mge1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVzZWQgdG8gbW9kaWZ5IHRoZSBidXN5IHN0YXRlIGNvbXBvbmVudCB0aGF0IGlzIHNob3duIGJ5IGRlZmF1bHQgYnkgdGhlIGFkZE1vZGFsQnVzeVN0YXRlKCkgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEBzZWUgdGhpcy5hZGRNb2RhbEJ1c3lTdGF0ZSgpXHJcbiAgICAgKi9cclxuICAgIGN1c3RvbUJ1c3lTdGF0ZUNvbXBvbmVudENsYXNzOiBUeXBlPEJ1c3lTdGF0ZUJhc2VDb21wb25lbnQ+ID0gQnVzeVN0YXRlQmFzZUNvbXBvbmVudDtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVjayBwdWJsaWMgZ2V0dGVyIGZvciBkb2NzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2lzRW5hYmxlZCA9IHRydWU7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsbHMgaWYgdGhlIG1haW4gYXBwbGljYXRpb24gaXMgY3VycmVudGx5IHNob3dpbmcgYSBidXN5IHN0YXRlIHRoYXQgYmxvY2tzIGFsbCB1c2VyIGludGVyYWN0aW9uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2lzU2hvd2luZ0J1c3lTdGF0ZSA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBtb2RhbCBidXN5IHN0YXRlIGNvbXBvbmVudCB0aGF0IGlzIGluaXRpYWxpemVkIG9ubHkgdGhlIGZpcnN0IHRpbWUgaXQgaXMgY2FsbGVkLlxyXG4gICAgICpcclxuICAgICAqIChUbyBhcHBlbmQgdGhlIGJ1c3kgc3RhdGUgZHluYW1pY2FsbHksIHdlIHVzZSB0aGUgUG9ydGFsIGNvbmNlcHQgZnJvbSB0aGUgYW5ndWxhciBtYXRlcmlhbCBsaWJyYXJ5KVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jb21wb25lbnRQb3J0YWw6IENvbXBvbmVudFBvcnRhbDxCdXN5U3RhdGVCYXNlQ29tcG9uZW50PiB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEEgcmVmZXJlbmNlIHRvIHRoZSBtb2RhbCBidXN5IHN0YXRlIGNvbnRhaW5lciB3aGVyZSB0aGUgY29tcG9uZW50IHdpbGwgYmUgYWRkZWRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbW9kYWxCdXN5U3RhdGVIb3N0OiBEb21Qb3J0YWxPdXRsZXQgfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGUgbWFuYWdlciBpcyBjdXJyZW50bHkgc2hvd2luZyBhIHNuYWNrYmFyIGVsZW1lbnQgb3Igbm90XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2lzU2hvd2luZ1NuYWNrQmFyID0gZmFsc2U7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29udGFpbnMgYSBsaXN0IG9mIHRoZSBkaWFsb2dzIHRoYXQgYXJlIGN1cnJlbnRseSB2aXNpYmxlIHRvIHRoZSB1c2VyLlxyXG4gICAgICogRWFjaCBpdGVtIGluIHRoaXMgbGlzdCBpcyBhIGhhc2ggdGhhdCBpcyBjb21wdXRlZCB3aGVuIGRpYWxvZyBpcyBjcmVhdGVkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGl0LlxyXG4gICAgICpcclxuICAgICAqIEVtcHR5IGxpc3QgbWVhbnMgbm8gZGlhbG9ncyBhcmUgY3VycmVudGx5IHZpc2libGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfYWN0aXZlRGlhbG9nczogc3RyaW5nW10gPSBbXTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWlucyBhIGxpc3Qgd2l0aCBhbGwgdGhlIE1hdERpYWxvZyBpbnN0YW5jZXMgdGhhdCBhcmUgY3VycmVudGx5IHZpc2libGUgdG8gdGhlIHVzZXIuXHJcbiAgICAgKiBUaGUgbGlzdCB1c2VzIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBsaXN0IG9mIF9hY3RpdmVEaWFsb2dzIGhhc2ggdmFsdWVzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2FjdGl2ZURpYWxvZ0luc3RhbmNlczogTWF0RGlhbG9nUmVmPERpYWxvZ0Jhc2VDb21wb25lbnQ+W10gPSBbXTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBVc2VkIHRvIHN0b3JlIHRoZSBpbml0aWFsaXplZCBSZW5kZXJlciAyIGluc3RhbmNlIHRoYXQgaXMgdXNlZCBieSB0aGlzIGNsYXNzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVyOiBSZW5kZXJlcjI7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kIHRoYXQgaXMgdXNlZCB0byBkZWxldGUgdGhlIHdpbmRvdyBiZWZvcmV1bmxvYWQgZXZlbnQgbGlzdGVuZXIgb25jZSBub3QgdXNlZCBhbnltb3JlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3dpbmRvd0JlZm9yZVVubG9hZFVuTGlzdGVuOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgdGhhdCBpcyB1c2VkIHRvIGRlbGV0ZSB0aGUgZG9jdW1lbnQga2V5ZG93biBldmVudCBsaXN0ZW5lciBvbmNlIG5vdCB1c2VkIGFueW1vcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRLZXlkb3duVW5saXN0ZW46ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gZGVsZXRlIHRoZSBkb2N1bWVudCBtb3VzZWRvd24gZXZlbnQgbGlzdGVuZXIgb25jZSBub3QgdXNlZCBhbnltb3JlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2RvY3VtZW50TW91c2Vkb3duVW5saXN0ZW46ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gZGVsZXRlIHRoZSBkb2N1bWVudCBwb2ludGVyZG93biBldmVudCBsaXN0ZW5lciBvbmNlIG5vdCB1c2VkIGFueW1vcmVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZG9jdW1lbnRQb2ludGVyZG93blVubGlzdGVuOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcclxuXHJcblxyXG4gICAgY29uc3RydWN0b3IocmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBtYXRTbmFja0JhcjogTWF0U25hY2tCYXIsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG1hdERpYWxvZzogTWF0RGlhbG9nLFxyXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGFwcGxpY2F0aW9uUmVmOiBBcHBsaWNhdGlvblJlZixcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgcmVhZG9ubHkgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHtcclxuXHJcblx0XHRzdXBlcihEaWFsb2dTZXJ2aWNlKTtcclxuXHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIgPSByZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsbHMgaWYgdGhpcyBkaWFsb2cgc2VydmljZSBpcyBlbmFibGVkIG9yIG5vdC4gSWYgZGlhbG9nIHNlcnZpY2UgaXMgZGlzYWJsZWQsIG5vbmUgb2YgaXQncyBmZWF0dXJlcyB3aWxsIHdvcmtcclxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBibG9jayBhbGwgZGlhbG9nIGZlYXR1cmVzIG5vcm1hbGx5IHdoZW4gc2h1dHRpbmcgZG93biB0aGUgYXBwbGljYXRpb25cclxuICAgICAqXHJcbiAgICAgKiBVc2Ugd2l0aCBjYXV0aW9uLiBXaGVuIHRoaXMgaXMgc2V0IHRvIGZhbHNlLCBkaWFsb2cgc2VydmljZSBzdG9wcyB3b3JraW5nLlxyXG4gICAgICovXHJcbiAgICBzZXQgaXNFbmFibGVkKHY6IGJvb2xlYW4pIHtcclxuXHJcbiAgICAgICAgaWYgKHYgPT09IHRoaXMuX2lzRW5hYmxlZCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5faXNFbmFibGVkID0gdjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBFbmFibGVzIGEgd2FybmluZyB0aGF0IHdpbGwgYmUgc2hvd24gdG8gdGhlIHVzZXIgd2hlbiBoZS9zaGUgdHJpZXMgdG8gY2xvc2UgdGhlIGFwcGxpY2F0aW9uLlxyXG4gICAgICogVGhpcyB3YXJuaW5nIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIGNvbnRpbnVlIHdpdGggdGhlIGV4aXQgcHJvY2VzcyBvciBjYW5jZWwgaXQuXHJcbiAgICAgKiBUaGUgc3BlY2lmaWMgdGV4dHMgb2YgdGhpcyBtZXNzYWdlIGFyZSBhIGdlbmVyaWMgb25lcyBhbmQgY2Fubm90IGJlIGNoYW5nZWQuXHJcbiAgICAgKlxyXG4gICAgICogSU1QT1JUQU5UOiBUaGlzIG1ldGhvZCBtdXN0IGJlIGNhbGxlZCBhZnRlciB0aGUgbWFpbiBhcHBsaWNhdGlvbiBoYXMgYmVlbiBpbml0aWFsaXplZCBpbiBvcmRlciB0byB3b3JrLFxyXG4gICAgICogb3RoZXJ3aXNlIGl0IHdpbGwgZG8gbm90aGluZy5cclxuICAgICAqL1xyXG4gICAgYWRkQ2xvc2VBcHBsaWNhdGlvbldhcm5pbmcoKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl93aW5kb3dCZWZvcmVVbmxvYWRVbkxpc3RlbiA9PT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fd2luZG93QmVmb3JlVW5sb2FkVW5MaXN0ZW4gPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdiZWZvcmV1bmxvYWQnLFxyXG4gICAgICAgICAgICAgICAgKGV2ZW50KSA9PiBldmVudC5yZXR1cm5WYWx1ZSA9IHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZW1vdmUgdGhlIGNsb3NlIGFwcGxpY2F0aW9uIHdhcm5pbmcgbWVzc2FnZSBpZiBwcmV2aW91c2x5IGFzc2lnbmVkXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZUNsb3NlQXBwbGljYXRpb25XYXJuaW5nKCkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fd2luZG93QmVmb3JlVW5sb2FkVW5MaXN0ZW4gIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3dpbmRvd0JlZm9yZVVubG9hZFVuTGlzdGVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3dpbmRvd0JlZm9yZVVubG9hZFVuTGlzdGVuID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hhbmdlIHRoZSBhcHBsaWNhdGlvbiB2aXN1YWwgYXBwZWFyYW5jZSBzbyB0aGUgdXNlciBwZXJjZWl2ZXMgdGhhdCB0aGUgYXBwbGljYXRpb24gaXNcclxuICAgICAqIGN1cnJlbnRseSBidXN5LiBXaGlsZSBtb2RhbCBidXN5IHN0YXRlIGlzIGVuYWJsZWQsIG5vIHVzZXIgaW5wdXQgaXMgcG9zc2libGUgbmVpdGhlciB2aWFcclxuICAgICAqIGtleWJvYXJkLCBtb3VzZSBvciB0b3VjaC4gVXNlIHRoaXMgc3RhdGUgd2hlbiBwZXJmb3JtaW5nIHNlcnZlciByZXF1ZXN0cyBvciBvcGVyYXRpb25zIHRoYXRcclxuICAgICAqIG11c3QgYmxvY2sgdGhlIHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgYXBwbGljYXRpb24uIFRvIGFsbG93IHVzZXIgaW50ZXJhY3Rpb24gYWdhaW4sIHlvdSBtdXN0XHJcbiAgICAgKiBjYWxsIHJlbW92ZU1vZGFsQnVzeVN0YXRlKClcclxuICAgICAqXHJcbiAgICAgKiBOb3RpY2U6IFdlIGNhbiBtb2RpZnkgdGhlIGJ1c3kgc3RhdGUgdmlzdWFsIGNvbXBvbmVudCB0aGF0IGlzIHNob3duIGJ5IHRoaXMgbWV0aG9kLiBUbyBkbyBpdCwgd2UgbXVzdFxyXG4gICAgICogc2V0IHRoaXMuY3VzdG9tQnVzeVN0YXRlQ29tcG9uZW50Q2xhc3MgcHJvcGVydHkgd2l0aCBvdXIgb3duIGN1c3RvbSBidXN5IHN0YXRlIGNvbXBvbmVudCBjbGFzcy4gKFdlIGNhbiBkbyBpdCBhdFxyXG4gICAgICogb3VyIG1haW4gYXBwbGljYXRpb24gY29tcG9uZW50IGNvbnN0cnVjdG9yIGZvciBleGFtcGxlKS4gT3VyIGN1c3RvbSBjb21wb25lbnQgbXVzdCBleHRlbmQgdGhlXHJcbiAgICAgKiBCdXN5U3RhdGVCYXNlQ29tcG9uZW50IG9uZSB0byBhZGQgaXRzIG93biB2aXN1YWwgYXBwZWFyYW5jZS5cclxuICAgICAqXHJcbiAgICAgKiBAc2VlIHRoaXMuY3VzdG9tQnVzeVN0YXRlQ29tcG9uZW50Q2xhc3NcclxuICAgICAqL1xyXG4gICAgYWRkTW9kYWxCdXN5U3RhdGUoKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5faXNFbmFibGVkIHx8IHRoaXMuX2lzU2hvd2luZ0J1c3lTdGF0ZSkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZVVzZXJJbnRlcmFjdGlvbigpO1xyXG5cclxuICAgICAgICAvLyBEeW5hbWljYWxseSBjcmVhdGUgdGhlIGJ1c3kgc3RhdGUgY29tcG9uZW50IHJlZmVyZW5jZSBpZiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lXHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudFBvcnRhbCA9PT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fY29tcG9uZW50UG9ydGFsID0gbmV3IENvbXBvbmVudFBvcnRhbCh0aGlzLmN1c3RvbUJ1c3lTdGF0ZUNvbXBvbmVudENsYXNzKTtcclxuXHJcbiAgICAgICAgICAgIC8vIENyZWF0ZSBhIFBvcnRhbEhvc3Qgd2l0aCBkb2N1bWVudC5ib2R5IGFzIGl0cyBhbmNob3IgZWxlbWVudFxyXG4gICAgICAgICAgICB0aGlzLl9tb2RhbEJ1c3lTdGF0ZUhvc3QgPSBuZXcgRG9tUG9ydGFsT3V0bGV0KFxyXG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHksXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBsaWNhdGlvblJlZixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluamVjdG9yKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICh0aGlzLl9tb2RhbEJ1c3lTdGF0ZUhvc3QgYXMgRG9tUG9ydGFsT3V0bGV0KS5hdHRhY2godGhpcy5fY29tcG9uZW50UG9ydGFsKTtcclxuXHJcbiAgICAgICAgdGhpcy5faXNTaG93aW5nQnVzeVN0YXRlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGUgYXBwbGljYXRpb24gaXMgY3VycmVudGx5IGxvY2tlZCBpbiBhIG1vZGFsIGJ1c3kgc3RhdGUgKGNhdXNlZCBieSBhbiBhZGRNb2RhbEJ1c3lTdGF0ZSgpIGNhbGwpXHJcbiAgICAgKi9cclxuICAgIGdldCBpc1Nob3dpbmdCdXN5U3RhdGUoKSB7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9pc1Nob3dpbmdCdXN5U3RhdGU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FuY2VsIHRoZSBhcHBsaWNhdGlvbiBidXN5IHN0YXRlIGFuZCByZXN0b3JlIGl0IGJhY2sgdG8gbm9ybWFsIHNvIHVzZXIgaW50ZXJhY3Rpb24gaXMgYWxsb3dlZCBhZ2FpblxyXG4gICAgICovXHJcbiAgICByZW1vdmVNb2RhbEJ1c3lTdGF0ZSgpIHtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQgfHwgIXRoaXMuX2lzU2hvd2luZ0J1c3lTdGF0ZSkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudFBvcnRhbCAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgKHRoaXMuX21vZGFsQnVzeVN0YXRlSG9zdCBhcyBEb21Qb3J0YWxPdXRsZXQpLmRldGFjaCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fZW5hYmxlVXNlckludGVyYWN0aW9uKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2lzU2hvd2luZ0J1c3lTdGF0ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVE9ETyAtIGFkYXB0IGZyb20gVFMgdmVyc2lvblxyXG4gICAgICovXHJcbiAgICBhZGRUb29sVGlwKCkge1xyXG5cclxuICAgICAgICAvLyBUT0RPIC0gYWRhcHQgZnJvbSBUUyB2ZXJzaW9uXHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBhIG5vbiBtb2RhbCBzbmFja2JhciBub3RpZmljYXRpb24gdG8gdGhlIHVzZXIgKE9ubHkgb25lIHNuYWNrLWJhciBjYW4gZXZlciBiZSBvcGVuZWQgYXQgdGhlIHNhbWUgdGltZSkuXHJcbiAgICAgKlxyXG4gICAgICogU25hY2tiYXJzIGluZm9ybSB1c2VycyBvZiBhIHByb2Nlc3MgdGhhdCBhbiBhcHAgaGFzIHBlcmZvcm1lZCBvciB3aWxsIHBlcmZvcm0uIFRoZXkgYXBwZWFyIHRlbXBvcmFyaWx5LCB0b3dhcmRzIHRoZSBib3R0b20gb3IgdG9wIG9mIHRoZSBzY3JlZW4uXHJcbiAgICAgKiBUaGV5IHNob3VsZG7igJl0IGludGVycnVwdCB0aGUgdXNlciBleHBlcmllbmNlLCBhbmQgdGhleSBkb27igJl0IHJlcXVpcmUgdXNlciBpbnB1dCB0byBkaXNhcHBlYXIuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGNvbmZpZyBBIE1hdFNuYWNrQmFyQ29uZmlnIGluc3RhbmNlIHdpdGggdGhlIGN1c3RvbWl6YXRpb25zIHdlIHdhbnQgZm9yIHRoaXMgc25hY2tiYXJcclxuICAgICAqIEBwYXJhbSBtZXNzYWdlIFRoZSBtZXNzYWdlIHRvIHNob3cgb24gdGhlIHNuYWNrYmFyXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uIElmIG5vdCBlbXB0eSwgdGhlIHRleHQgdG8gcGxhY2Ugb24gdGhlIHNuYWNrYmFyIGNvbmZpcm1hdGlvbiBidXR0b25cclxuICAgICAqIEBwYXJhbSBhY3Rpb25DYWxsYmFjayBBIG1ldGhvZCB0byBleGVjdXRlIG9uY2UgdGhlIHVzZXIgY2xpY2tzIGludG8gdGhlIGFjdGlvbiBidXR0b24uXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybiB2b2lkXHJcbiAgICAgKi9cclxuICAgIGFkZFNuYWNrQmFyKGNvbmZpZzogTWF0U25hY2tCYXJDb25maWcsIG1lc3NhZ2U6IHN0cmluZywgYWN0aW9uID0gJycsIGFjdGlvbkNhbGxiYWNrOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2lzU2hvd2luZ1NuYWNrQmFyKSB7XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyeWluZyB0byBzaG93IGEgc25hY2tiYXIgd2hpbGUgYW5vdGhlciBvbmUgaXMgc3RpbGwgdmlzaWJsZScpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5faXNTaG93aW5nU25hY2tCYXIgPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBzbmFja0JhclJlZiA9IHRoaXMubWF0U25hY2tCYXIub3BlbihtZXNzYWdlLCBhY3Rpb24gPT09ICcnID8gdW5kZWZpbmVkIDogYWN0aW9uLCBjb25maWcpO1xyXG5cclxuICAgICAgICBpZiAoYWN0aW9uQ2FsbGJhY2sgIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHNuYWNrQmFyUmVmLm9uQWN0aW9uKCkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBhY3Rpb25DYWxsYmFjaygpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGVsbHMgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGN1cnJlbnRseSBzaG93aW5nIGEgc25hY2tiYXIgb3Igbm90XHJcbiAgICAgKi9cclxuICAgIGdldCBpc1Nob3dpbmdTbmFja0JhcigpIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU2hvd2luZ1NuYWNrQmFyO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZvcmNlIHRoZSByZW1vdmFsIG9mIHRoZSBzbmFjayBiYXIgZGlhbG9nIGlmIGl0IGV4aXN0cy5cclxuICAgICAqXHJcbiAgICAgKiBJZiBubyBzbmFja2JhciBpcyBjdXJyZW50bHkgdmlzaWJsZSwgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nXHJcbiAgICAgKi9cclxuICAgIHJlbW92ZVNuYWNrQmFyKCkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCB8fCAhdGhpcy5faXNTaG93aW5nU25hY2tCYXIpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWF0U25hY2tCYXIuZGlzbWlzcygpO1xyXG5cclxuICAgICAgICB0aGlzLl9pc1Nob3dpbmdTbmFja0JhciA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNob3cgYSBkaWFsb2cgd2l0aCBvbmUgb3IgbW9yZSBvcHRpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2xvc2UgaXQuIFdlIGNhbiB1c2UgYW55IG9mIHRoZSBwcmVkZWZpbmVkIGRpYWxvZyB0eXBlcyB0aGF0IGFyZSBidW5kbGVkIHdpdGhcclxuICAgICAqIHRoaXMgbGlicmFyeSBvciBleHRlbmQgRGlhbG9nQmFzZUNvbXBvbmVudCB0byBjcmVhdGUgb3VyIG93biBjdXN0b20gb25lcy5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gZGlhbG9nQ29tcG9uZW50Q2xhc3MgQSBjbGFzcyBmb3IgYSBjb21wb25lbnQgdGhhdCBleHRlbmRzIERpYWxvZ0Jhc2VDb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGRpYWxvZyB0aGF0IGlzIHNob3duIHRvIHRoZSB1c2VyLlxyXG4gICAgICogQHBhcmFtIHByb3BlcnRpZXMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRpZmZlcmVudCB2aXN1YWwgYW5kIHRleHR1YWwgb3B0aW9ucyB0aGF0IHRoaXMgZGlhbG9nIGFsbG93czpcclxuICAgICAqICAgICAgICAgICAgLSBpZDogVGhlIGh0bWwgdW5pcXVlIGlkZW50aWZpZXIgdGhhdCB0aGUgZGlhbG9nIHdpbGwgaGF2ZSBvbmNlIGNyZWF0ZWQuIElmIG5vdCBzcGVjaWZpZWQsIG5vIGlkIHdpbGwgYmUgZXhwbGljaXRseSBzZXRcclxuICAgICAqICAgICAgICAgICAgLSB3aWR0aDogNTAlIGJ5IGRlZmF1bHQuIFNwZWNpZnkgdGhlIGNzcyB2YWx1ZSBmb3IgdGhlIGRlZmF1bHQgZGlhbG9nIHdpZHRoLiBBcyB0aGUgZGlhbG9nIGlzIHJlc3BvbnNpdmUsIHRoZSB2YWx1ZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHlcclxuICAgICAqICAgICAgICAgICAgICByZWR1Y2VkIGlmIHRoZSBhdmFpbGFibGUgc2NyZWVuIGlzIG5vdCBlbm91Z2gsIGFuZCB3aWxsIHJlYWNoIHRoZSBkZXNpcmVkIHZhbHVlIG90aGVyd2lzZS4gV2UgY2FuIHNldCBhbnkgY3NzIHVuaXQgbGlrZSBwaXhlbHMsIFxyXG4gICAgICogICAgICAgICAgICAgICUsIHZoLCB2dywgb3IgYW55IG90aGVyLiBGb3IgZXhhbXBsZTogJzQwMHB4JywgJzUwJScsIGV0Yy5cclxuICAgICAqICAgICAgICAgICAgLSBtYXhXaWR0aDogRGVmaW5lcyB0aGUgbWF4aW11bSB3aWR0aCB0aGF0IHRoZSBkaWFsb2cgd2lsbCBoYXZlIHJlZ2FyZGluZyB0aGUgdmlld3BvcnQuIFdlIGNhbiBzcGVjaWZ5IGl0IGluICUgb3IgdncsIGp1c3QgbGlrZSBpcyBkb25lIGluXHJcbiAgICAgKiAgICAgICAgICAgICAgY3NzLiBCeSBkZWZhdWx0IGl0IGlzIGRlZmluZWQgYXMgOTZ2dywgd2hpY2ggd2lsbCBmaXQgOTYlIG9mIHRoZSB2aWV3cG9ydCBvbiBzbWFsbCBkZXZpY2VzXHJcbiAgICAgKiAgICAgICAgICAgIC0gaGVpZ2h0OiBUT0RPIGRvY3NcclxuICAgICAqICAgICAgICAgICAgLSBtYXhIZWlnaHQ6IFRPRE8gZG9jc1xyXG4gICAgICogICAgICAgICAgICAtIG1vZGFsOiBUcnVlIChkZWZhdWx0KSBpZiBzZWxlY3RpbmcgYW4gb3B0aW9uIGlzIG1hbmRhdG9yeSB0byBjbG9zZSB0aGUgZGlhbG9nLCBmYWxzZSBpZiB0aGUgZGlhbG9nIGNhbiBiZSBjbG9zZWRcclxuICAgICAqICAgICAgICAgICAgICBieSB0aGUgdXNlciBjbGlja2luZyBvdXRzaWRlIGl0IFxyXG4gICAgICogICAgICAgICAgICAtIHRleHRzOiBBIGxpc3Qgd2l0aCBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIGRpYWxvZyB0ZXh0cywgc29ydGVkIGJ5IGltcG9ydGFuY2UuIFdoZW4gZGlhbG9nIGhhcyBhIHRpdGxlLCB0aGlzIHNob3VsZFxyXG4gICAgICogICAgICAgICAgICAgIGJlIHBsYWNlZCBmaXJzdCwgc3VidGl0bGUgc2Vjb25kIGFuZCBzbyAoRWFjaCBkaWFsb2cgbWF5IGFjY2VwdCBkaWZmZXJlbnQgbnVtYmVyIG9mIHRleHRzKS5cclxuICAgICAqICAgICAgICAgICAgLSBvcHRpb25zOiBBIGxpc3Qgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgYmUgdXNlZCBhcyBidXR0b24gY2FwdGlvbnMgZm9yIGVhY2ggb25lIG9mIHRoZSBhY2NlcHRlZCBkaWFsb2cgb3B0aW9uc1xyXG4gICAgICogICAgICAgICAgICAtIHZpZXdDb250YWluZXJSZWY6IFRoaXMgaXMgaW1wb3J0YW50IGlmIHdlIHdhbnQgdG8gcHJvcGFnYXRlIHByb3ZpZGVycyBmcm9tIGEgcGFyZW50IGNvbXBvbmVudCB0byB0aGlzIGRpYWxvZy4gV2UgbXVzdCBzcGVjaWZ5IFxyXG5cdCAqICAgICAgICAgICAgICB0aGlzIHJlZmVyZW5jZSB0byBtYWtlIHN1cmUgdGhlIHNhbWUgc2VydmljZXMgaW5qZWN0ZWQgb24gdGhlIHBhcmVudCBhcmUgYXZhaWxhYmxlIHRvbyBhdCB0aGUgY2hpbGQgZGlhbG9nIFxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBkaWFsb2cgaXMgY2xvc2VkLiBJdCB3aWxsIHJlY2VpdmUgYSBzZWxlY3Rpb24gb2JqZWN0IHdpdGggdHdvIHByb3BlcnRpZXM6IGluZGV4IGFuZCB2YWx1ZS4gVGhvc2UgXHJcbiAgICAgKiAgICAgICAgd2lsbCBjb250YWluIHRoZSBpbmRleCBhbmQgdmFsdWUgZnJvbSB0aGUgb3B0aW9ucyBhcnJheSB0aGF0J3Mgc2VsZWN0ZWQgYnkgdGhlIHVzZXIuIGlmIG5vIG9wdGlvbiBzZWxlY3RlZCwgaW5kZXggd2lsbCBiZSAtMSBhbmQgdmFsdWUgbnVsbFxyXG4gICAgICovXHJcbiAgICBhZGREaWFsb2coZGlhbG9nQ29tcG9uZW50Q2xhc3M6IFR5cGU8RGlhbG9nQmFzZUNvbXBvbmVudD4sXHJcbiAgICAgICAgICAgICAgcHJvcGVydGllczoge2lkPzogc3RyaW5nLFxyXG5cdFx0XHRcdFx0XHQgICB3aWR0aD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0Pzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbD86IGJvb2xlYW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRzPzogc3RyaW5nW10sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM/OiBzdHJpbmdbXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZj86IFZpZXdDb250YWluZXJSZWZ9LCBcclxuICAgICAgICAgICAgICBjYWxsYmFjazogbnVsbCB8ICgoc2VsZWN0aW9uOiB7aW5kZXg6bnVtYmVyLCB2YWx1ZT86IGFueX0pID0+IHZvaWQpID0gbnVsbCkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICAvLyBTZXQgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciBub24gc3BlY2lmaWVkIHByb3BlcnRpZXNcclxuICAgICAgICBwcm9wZXJ0aWVzLm1vZGFsID0gcHJvcGVydGllcy5tb2RhbCA/PyB0cnVlO1xyXG4gICAgICAgIHByb3BlcnRpZXMudGV4dHMgPSBwcm9wZXJ0aWVzLnRleHRzID8/IFtdO1xyXG4gICAgICAgIHByb3BlcnRpZXMub3B0aW9ucyA9IHByb3BlcnRpZXMub3B0aW9ucyA/PyBbXTtcclxuXHJcbiAgICAgICAgLy8gR2VuZXJhdGUgYSBzdHJpbmcgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBkaWFsb2cgb24gdGhlIGxpc3Qgb2YgYWN0aXZlIGRpYWxvZ3NcclxuICAgICAgICAvLyBBIGRpYWxvZyBpcyBjb25zaWRlcmVkIGFzIHVuaXF1ZSBpZiB0aGUgZGlhbG9nIGlkIGFuZCB0ZXh0cyBhcmUgZXhhY3RseSB0aGUgc2FtZS4gV2UgZG8gbm90IHRha2Ugb3B0aW9ucyBpbnRvIGNvbnNpZGVyYXRpb25cclxuICAgICAgICAvLyBhcyB0aGVyZSBtYXkgYmUgZGlhbG9ncyB3aXRoIGEgYmlnIGFtb3VudCBvZiBvcHRpb25zIGF2YWlsYWJsZS5cclxuICAgICAgICBsZXQgY2xhc3NOYW1lID0gKGRpYWxvZ0NvbXBvbmVudENsYXNzIGFzIGFueSkuRElBTE9HX0NMQVNTX05BTUU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYoY2xhc3NOYW1lID09PSAnJyl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHN0YXRpYyBwcm9wZXJ0eSBESUFMT0dfQ0xBU1NfTkFNRSBpcyBub3QgZGVmaW5lZCBvciBpcyBlbXB0eSBmb3IgdGhpcyBkaWFsb2cgY29tcG9uZW50ICgke2RpYWxvZ0NvbXBvbmVudENsYXNzfSlgKTsgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBjb25zdCBkaWFsb2dIYXNoID0gY2xhc3NOYW1lICsgcHJvcGVydGllcy50ZXh0cy5qb2luKCcnKTtcclxuXHJcbiAgICAgICAgLy8gaWRlbnRpY2FsIGRpYWxvZ3Mgd29uJ3QgYmUgYWxsb3dlZCBhdCB0aGUgc2FtZSB0aW1lXHJcbiAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZURpYWxvZ3MuaW5jbHVkZXMoZGlhbG9nSGFzaCkpIHtcclxuXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMubWF0RGlhbG9nLm9wZW4oZGlhbG9nQ29tcG9uZW50Q2xhc3MsIHtcclxuICAgICAgICAgICAgd2lkdGg6IHByb3BlcnRpZXMud2lkdGggPz8gXCI1MCVcIixcclxuICAgICAgICAgICAgbWF4V2lkdGg6IHByb3BlcnRpZXMubWF4V2lkdGggPz8gXCI5NnZ3XCIsXHJcbiAgICAgICAgICAgIGRpc2FibGVDbG9zZTogcHJvcGVydGllcy5tb2RhbCxcclxuICAgICAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgICAgICAgY2xvc2VPbk5hdmlnYXRpb246ICFwcm9wZXJ0aWVzLm1vZGFsLFxyXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiBwcm9wZXJ0aWVzLnZpZXdDb250YWluZXJSZWYsXHJcbiAgICAgICAgICAgIGRhdGE6IHsgdGV4dHM6IHByb3BlcnRpZXMudGV4dHMsIG9wdGlvbnM6IHByb3BlcnRpZXMub3B0aW9ucyB9XHJcbiAgICAgICAgICB9KTsgICAgICBcclxuXHRcdFxyXG5cdFx0Ly8gQXNzaWduIHRoZSBkaWFsb2cgSUQgb25seSBpZiBzcGVjaWZpY2FsbHkgc2V0IG9uIHByb3BlcnRpZXNcclxuXHRcdGlmKHByb3BlcnRpZXMuaWQgJiYgcHJvcGVydGllcy5pZCAhPT0gdW5kZWZpbmVkKXtcclxuXHRcdFx0XHJcblx0XHRcdGRpYWxvZ1JlZi5pZCA9IHByb3BlcnRpZXMuaWQ7XHJcblx0XHR9XHJcblx0XHRcclxuICAgICAgICB0aGlzLl9hY3RpdmVEaWFsb2dzLnB1c2goZGlhbG9nSGFzaCk7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZlRGlhbG9nSW5zdGFuY2VzLnB1c2goZGlhbG9nUmVmKTtcclxuXHJcbiAgICAgICAgZGlhbG9nUmVmLmJlZm9yZUNsb3NlZCgpLnN1YnNjcmliZSgoc2VsZWN0aW9uOntpbmRleDpudW1iZXIsIHZhbHVlPzphbnl9KSA9PiB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVEaWFsb2dzID0gQXJyYXlVdGlscy5yZW1vdmVFbGVtZW50KHRoaXMuX2FjdGl2ZURpYWxvZ3MsIGRpYWxvZ0hhc2gpO1xyXG4gICAgICAgICAgICB0aGlzLl9hY3RpdmVEaWFsb2dJbnN0YW5jZXMgPSBBcnJheVV0aWxzLnJlbW92ZUVsZW1lbnQodGhpcy5fYWN0aXZlRGlhbG9nSW5zdGFuY2VzLCBkaWFsb2dSZWYpO1xyXG5cclxuICAgICAgICAgICAgaWYoIXByb3BlcnRpZXMubW9kYWwgJiYgc2VsZWN0aW9uID09PSB1bmRlZmluZWQpe1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHsgaW5kZXg6IC0xIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9ZWxzZSBpZiAoIU51bWVyaWNVdGlscy5pc0ludGVnZXIoc2VsZWN0aW9uLmluZGV4KSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgY2xvc2VEaWFsb2coKSBleHBlY3RzIGluZGV4IHRvIGJlIGFuIGludGVnZXJgKTsgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoc2VsZWN0aW9uLmluZGV4ID49IDAgJiYgc2VsZWN0aW9uLnZhbHVlID09PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb24udmFsdWUgPSBwcm9wZXJ0aWVzLm9wdGlvbnMhW3NlbGVjdGlvbi5pbmRleF07XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgKGNhbGxiYWNrIGFzICgoc2VsZWN0aW9uOntpbmRleDpudW1iZXIsIHZhbHVlPzphbnl9KSA9PiB2b2lkKSkoc2VsZWN0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogU2hvdyBhIGRpYWxvZyB3aXRoIGEgY2FsZW5kYXIgdG8gbGV0IHRoZSB1c2VyIHBpY2sgYSBkYXRlLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBkaWZmZXJlbnQgdmlzdWFsIGFuZCB0ZXh0dWFsIG9wdGlvbnMgdGhhdCB0aGlzIGRpYWxvZyBhbGxvd3M6XHJcbiAgICAgKiAgICAgICAgICAgIC0gaWQ6IFRoZSBodG1sIHVuaXF1ZSBpZGVudGlmaWVyIHRoYXQgdGhlIGRpYWxvZyB3aWxsIGhhdmUgb25jZSBjcmVhdGVkLiBJZiBub3Qgc3BlY2lmaWVkLCBubyBpZCB3aWxsIGJlIGV4cGxpY2l0bHkgc2V0XHJcbiAgICAgKiAgICAgICAgICAgIC0gd2lkdGg6IFNwZWNpZnkgdGhlIGNzcyB2YWx1ZSBmb3IgdGhlIGRlZmF1bHQgZGlhbG9nIHdpZHRoLiBBcyB0aGUgZGlhbG9nIGlzIHJlc3BvbnNpdmUsIHRoZSB2YWx1ZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHlcclxuICAgICAqICAgICAgICAgICAgICByZWR1Y2VkIGlmIHRoZSBhdmFpbGFibGUgc2NyZWVuIGlzIG5vdCBlbm91Z2gsIGFuZCB3aWxsIHJlYWNoIHRoZSBkZXNpcmVkIHZhbHVlIG90aGVyd2lzZS4gV2UgY2FuIHNldCBhbnkgY3NzIHVuaXQgbGlrZSBwaXhlbHMsIFxyXG4gICAgICogICAgICAgICAgICAgICUsIHZoLCB2dywgb3IgYW55IG90aGVyLiBGb3IgZXhhbXBsZTogJzQwMHB4JywgJzUwJScsIGV0Yy5cclxuICAgICAqICAgICAgICAgICAgLSBtYXhXaWR0aDogRGVmaW5lcyB0aGUgbWF4aW11bSB3aWR0aCB0aGF0IHRoZSBkaWFsb2cgd2lsbCBoYXZlIHJlZ2FyZGluZyB0aGUgdmlld3BvcnQuIFdlIGNhbiBzcGVjaWZ5IGl0IGluICUgb3IgdncsIGp1c3QgbGlrZSBpcyBkb25lIGluXHJcbiAgICAgKiAgICAgICAgICAgICAgY3NzLiBCeSBkZWZhdWx0IGl0IGlzIGRlZmluZWQgYXMgOTZ2dywgd2hpY2ggd2lsbCBmaXQgOTYlIG9mIHRoZSB2aWV3cG9ydCBvbiBzbWFsbCBkZXZpY2VzXHJcbiAgICAgKiAgICAgICAgICAgIC0gaGVpZ2h0OiBUT0RPIGRvY3NcclxuICAgICAqICAgICAgICAgICAgLSBtYXhIZWlnaHQ6IFRPRE8gZG9jc1xyXG4gICAgICogICAgICAgICAgICAtIG1vZGFsOiBUcnVlIChkZWZhdWx0KSBpZiBzZWxlY3RpbmcgYW4gb3B0aW9uIGlzIG1hbmRhdG9yeSB0byBjbG9zZSB0aGUgZGlhbG9nLCBmYWxzZSBpZiB0aGUgZGlhbG9nIGNhbiBiZSBjbG9zZWRcclxuICAgICAqICAgICAgICAgICAgICBieSB0aGUgdXNlciBjbGlja2luZyBvdXRzaWRlIGl0IFxyXG4gICAgICogICAgICAgICAgICAtIHRpdGxlOiBBbiBvcHRpb25hbCBkaWFsb2cgdGl0bGVcclxuICAgICAqICAgICAgICAgICAgLSB2aWV3Q29udGFpbmVyUmVmOiBUaGlzIGlzIGltcG9ydGFudCB0byBwcm9wYWdhdGUgcHJvdmlkZXJzIGZyb20gYSBwYXJlbnQgY29tcG9uZW50IHRvIHRoaXMgZGlhbG9nLiBXZSBtdXN0IHNwZWNpZnkgXHJcblx0ICogICAgICAgICAgICAgIHRoaXMgcmVmZXJlbmNlIHRvIG1ha2Ugc3VyZSB0aGUgc2FtZSBzZXJ2aWNlcyBpbmplY3RlZCBvbiB0aGUgcGFyZW50IGFyZSBhdmFpbGFibGUgdG9vIGF0IHRoZSBjaGlsZCBkaWFsb2cgXHJcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGRpYWxvZyBpcyBjbG9zZWQuIEl0IHdpbGwgcmVjZWl2ZSBhIERhdGUoKSBvYmplY3Qgc2VsZWN0ZWQgYnkgdGhlIHVzZXIgb3IgbnVsbCBpZiBubyBzZWxlY3Rpb24gaGFwcGVuZWRcclxuICAgICAqL1xyXG4gICAgYWRkRGF0ZVNlbGVjdGlvbkRpYWxvZyhwcm9wZXJ0aWVzOiB7aWQ/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD86IHN0cmluZyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heFdpZHRoPzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0Pzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4SGVpZ2h0Pzogc3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWw/OiBib29sZWFuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU/OiBzdHJpbmcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFx0XHRcdFx0dmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiAoKHNlbGVjdGVkRGF0ZTogbnVsbCB8IERhdGUpID0+IHZvaWQpKSB7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuYWRkRGlhbG9nKERpYWxvZ0RhdGVTZWxlY3Rpb25Db21wb25lbnQsXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIGlkOiBwcm9wZXJ0aWVzLmlkID8/IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiBwcm9wZXJ0aWVzLndpZHRoID8/IFwiNTAlXCIsXHJcbiAgICAgICAgICAgICAgICBtYXhXaWR0aDogcHJvcGVydGllcy5tYXhXaWR0aCA/PyBcIjk2dndcIixcclxuICAgICAgICAgICAgICAgIGhlaWdodDogcHJvcGVydGllcy5oZWlnaHQgPz8gXCI1MCVcIixcclxuICAgICAgICAgICAgICAgIG1heEhlaWdodDogcHJvcGVydGllcy5tYXhIZWlnaHQgPz8gXCI5MnZ3XCIsXHJcbiAgICAgICAgICAgICAgICBtb2RhbDogcHJvcGVydGllcy5tb2RhbCA/PyBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHRleHRzOiBbcHJvcGVydGllcy50aXRsZSA/PyAnJ10sXHJcbiAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiBwcm9wZXJ0aWVzLnZpZXdDb250YWluZXJSZWZcclxuICAgICAgICAgICAgfSwoc2VsZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNhbGxiYWNrKHNlbGVjdGlvbi5pbmRleCA9PT0gLTEgPyBudWxsIDogKHNlbGVjdGlvbi52YWx1ZSBhcyBEYXRlKSk7ICBcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JjZSB0aGUgcmVtb3ZhbCBvZiBhbGwgdGhlIGRpYWxvZ3MgdGhhdCBhcmUgY3VycmVudGx5IHZpc2libGUuXHJcbiAgICAgKlxyXG4gICAgICogSWYgbm8gZGlhbG9ncyBhcmUgY3VycmVudGx5IHZpc2libGUsIHRoaXMgbWV0aG9kIHdpbGwgZG8gbm90aGluZ1xyXG4gICAgICovXHJcbiAgICByZW1vdmVBbGxEaWFsb2dzKCkge1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBkaWFsb2dSZWYgb2YgdGhpcy5fYWN0aXZlRGlhbG9nSW5zdGFuY2VzKSB7XHJcblxyXG4gICAgICAgICAgICBkaWFsb2dSZWYuY2xvc2Uoe2luZGV4Oi0xfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuX2FjdGl2ZURpYWxvZ3MgPSBbXTtcclxuICAgICAgICB0aGlzLl9hY3RpdmVEaWFsb2dJbnN0YW5jZXMgPSBbXTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUT0RPIC0gdHJhbnNsYXRlIGZyb20gVFMgdmVyc2lvblxyXG4gICAgICovXHJcbi8vICAgIGFkZFNpZGVOYXYoKXtcclxuLy9cclxuLy8gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRPRE8gLSB0cmFuc2xhdGUgZnJvbSBUUyB2ZXJzaW9uXHJcbiAgICAgKi9cclxuLy8gICAgZ2V0IGlzU2hvd2luZ1NpZGVOYXYoKXtcclxuLy9cclxuLy8gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRPRE8gLSB0cmFuc2xhdGUgZnJvbSBUUyB2ZXJzaW9uXHJcbiAgICAgKi9cclxuLy8gICAgcmVtb3ZlU2lkZU5hdigpe1xyXG4vL1xyXG4vLyAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCbG9jayBhbGwgdGhlIHVzZXIgaW50ZXJhY3Rpb25zIHdpdGggdGhlIGFwcGxpY2F0aW9uIChrZXlib2FyZCwgdG91Y2gsIG1vdXNlLCAuLi4pXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2Rpc2FibGVVc2VySW50ZXJhY3Rpb24oKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9kb2N1bWVudEtleWRvd25Vbmxpc3RlbiA9PT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRLZXlkb3duVW5saXN0ZW4gPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2tleWRvd24nLCAoZXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RvY3VtZW50TW91c2Vkb3duVW5saXN0ZW4gPT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50TW91c2Vkb3duVW5saXN0ZW4gPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ21vdXNlZG93bicsIChldmVudCkgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnRQb2ludGVyZG93blVubGlzdGVuID09PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudFBvaW50ZXJkb3duVW5saXN0ZW4gPSB0aGlzLl9yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ3BvaW50ZXJkb3duJywgKGV2ZW50KSA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmVzdG9yZSB0aGUgdXNlciBpbnRlcmFjdGlvbnMgdGhhdCB3ZXJlIHByZXZpb3VzbHkgZGlzYWJsZWQgd2l0aCBfZGlzYWJsZVVzZXJJbnRlcmFjdGlvbiBtZXRob2RcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfZW5hYmxlVXNlckludGVyYWN0aW9uKCkge1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fZG9jdW1lbnRLZXlkb3duVW5saXN0ZW4gIT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50S2V5ZG93blVubGlzdGVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50S2V5ZG93blVubGlzdGVuID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9kb2N1bWVudE1vdXNlZG93blVubGlzdGVuICE9PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9kb2N1bWVudE1vdXNlZG93blVubGlzdGVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50TW91c2Vkb3duVW5saXN0ZW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX2RvY3VtZW50UG9pbnRlcmRvd25Vbmxpc3RlbiAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5fZG9jdW1lbnRQb2ludGVyZG93blVubGlzdGVuKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2RvY3VtZW50TW91c2Vkb3duVW5saXN0ZW4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
@@ -23,6 +23,8 @@ export class TurboApiCallerService extends SingletoneStrictClass {
23
23
  this.browserService = browserService;
24
24
  /**
25
25
  * URI Path to the web service that performs the user login
26
+ * TODO - crear una clase apipaths amb les constants de totes les rutes i moure aquestes 3 alla
27
+ * aquesta classe haura de ser extesa a la nostra app amb les altres que es fagin servir
26
28
  */
27
29
  this.loginServiceURI = 'users/login';
28
30
  /**
@@ -35,6 +37,8 @@ export class TurboApiCallerService extends SingletoneStrictClass {
35
37
  this.mailVerifyServiceURI = 'users/user-mail-verify';
36
38
  /**
37
39
  * The username that is currently defined and will be used by the login methods
40
+ * TODO - We must use a setter and a getter of user and psw. If any of the values change
41
+ * we must clear the logged state and the token.
38
42
  */
39
43
  this.userName = '';
40
44
  /**
@@ -140,10 +144,13 @@ export class TurboApiCallerService extends SingletoneStrictClass {
140
144
  ;
141
145
  }
142
146
  /**
143
- * Authenticates the user by sending an encoded credentials request to the login web service.
147
+ * Authenticates the userName and password that are currently defined at the respective properties of this service.
144
148
  * Returns a promise that resolves with the server's response or rejects with an error if the login fails.
145
149
  * Path to the login service must be correctly defined at this.loginWebService
146
150
  *
151
+ * The authentication process is performed by sending an encoded credentials request to the login web service using the
152
+ * currently defined user name and psw.
153
+ *
147
154
  * Here's an example of a call:
148
155
  *
149
156
  * login().then(response => {
@@ -194,7 +201,8 @@ export class TurboApiCallerService extends SingletoneStrictClass {
194
201
  return !StringUtils.isEmpty(this.userName) && !StringUtils.isEmpty(this.password);
195
202
  }
196
203
  /**
197
- * Tells if exists a user that is currently logged or not
204
+ * Tells if the user name and psw that are specified on this service are currently logged or not. This means
205
+ * also a token is active.
198
206
  */
199
207
  get isLogged() {
200
208
  return this._isLogged;
@@ -389,4 +397,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
389
397
  providedIn: 'root',
390
398
  }]
391
399
  }], ctorParameters: () => [{ type: i1.DialogService }, { type: i2.BrowserService }] });
392
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyYm8tYXBpLWNhbGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVyYm9ndWktYW5ndWxhci9zcmMvbWFpbi9jb250cm9sbGVyL3R1cmJvLWFwaS1jYWxsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7OztBQUk5Rjs7R0FFRztBQUlILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxxQkFBcUI7SUErRDVELFlBQW9CLGFBQTRCLEVBQzVCLGNBQThCO1FBRTlDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBSGIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBN0RsRDs7V0FFRztRQUNILG9CQUFlLEdBQUcsYUFBYSxDQUFDO1FBR2hDOztXQUVHO1FBQ0gscUJBQWdCLEdBQUcsY0FBYyxDQUFDO1FBR2xDOztXQUVHO1FBQ0gseUJBQW9CLEdBQUcsd0JBQXdCLENBQUM7UUFHaEQ7O1dBRUc7UUFDSCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBR2Q7O1dBRUc7UUFDSCxhQUFRLEdBQUcsRUFBRSxDQUFDO1FBR2Q7O1dBRUc7UUFDSyxzQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFHL0I7O1dBRUc7UUFDSyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRzFCOztXQUVHO1FBQ0ssV0FBTSxHQUFHLEVBQUUsQ0FBQztRQUdwQjs7V0FFRztRQUNL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QUcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7OEdBeGdCUSxxQkFBcUI7a0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR1cmJvR1VJIGlzIEEgbGlicmFyeSB0aGF0IGhlbHBzIHdpdGggdGhlIG1vc3QgY29tbW9uIGFuZCBnZW5lcmljIFVJIGVsZW1lbnRzIGFuZCBmdW5jdGlvbmFsaXRpZXNcclxuICpcclxuICogV2Vic2l0ZSA6IC0+IGh0dHA6Ly93d3cudHVyYm9ndWkub3JnXHJcbiAqIExpY2Vuc2UgOiAtPiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIExpY2Vuc2UgVXJsIDogLT4gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAqIENvcHlSaWdodCA6IC0+IENvcHlyaWdodCAyMDE4IEVkZXJ0b25lIEFkdmFuZGVkIFNvbHV0aW9ucy4gaHR0cHM6Ly93d3cuZWRlcnRvbmUuY29tXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnZlcnNpb25VdGlscywgSFRUUE1hbmFnZXIsIEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QsIFN0cmluZ1V0aWxzIH0gZnJvbSAndHVyYm9jb21tb25zLXRzJztcclxuaW1wb3J0IHsgU2luZ2xldG9uZVN0cmljdENsYXNzIH0gZnJvbSAnLi4vbW9kZWwvY2xhc3Nlcy9TaW5nbGV0b25lU3RyaWN0Q2xhc3MnO1xyXG5pbXBvcnQgeyBEaWFsb2dFcnJvckNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZXcvY29tcG9uZW50cy9kaWFsb2ctZXJyb3IvZGlhbG9nLWVycm9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJyb3dzZXJTZXJ2aWNlIH0gZnJvbSAnLi9icm93c2VyLnNlcnZpY2UnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBbGxvd3MgdXMgdG8gZWFzaWx5IHBlcmZvcm0gcmVxdWVzdHMgdG8gYSByZW1vdGUgQVBJIHRoYXQgaXMgZGV2ZWxvcGVkIHdpdGggVHVyYm8gZnJhbWV3b3JrLlxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFR1cmJvQXBpQ2FsbGVyU2VydmljZSBleHRlbmRzIFNpbmdsZXRvbmVTdHJpY3RDbGFzcyB7XHJcbiAgICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVSSSBQYXRoIHRvIHRoZSB3ZWIgc2VydmljZSB0aGF0IHBlcmZvcm1zIHRoZSB1c2VyIGxvZ2luXHJcbiAgICAgKi9cclxuICAgIGxvZ2luU2VydmljZVVSSSA9ICd1c2Vycy9sb2dpbic7XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBVUkkgUGF0aCB0byB0aGUgd2ViIHNlcnZpY2UgdGhhdCBwZXJmb3JtcyB0aGUgdXNlciBsb2cgb3V0XHJcbiAgICAgKi9cclxuICAgIGxvZ091dFNlcnZpY2VVUkkgPSAndXNlcnMvbG9nb3V0JztcclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFVSSSBQYXRoIHRvIHRoZSB3ZWIgc2VydmljZSB0aGF0IHBlcmZvcm1zIHRoZSB2ZXJpZmljYXRpb24gZm9yIGEgdXNlciBlbWFpbFxyXG4gICAgICovXHJcbiAgICBtYWlsVmVyaWZ5U2VydmljZVVSSSA9ICd1c2Vycy91c2VyLW1haWwtdmVyaWZ5JztcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdXNlcm5hbWUgdGhhdCBpcyBjdXJyZW50bHkgZGVmaW5lZCBhbmQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBsb2dpbiBtZXRob2RzXHJcbiAgICAgKi9cclxuICAgIHVzZXJOYW1lID0gJyc7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHBhc3N3b3JkIGZvciB0aGUgdXNlciB0aGF0IGlzIGN1cnJlbnRseSBkZWZpbmVkIGFuZCB3aWxsIGJlIHVzZWQgYnkgdGhlIGxvZ2luIG1ldGhvZHNcclxuICAgICAqL1xyXG4gICAgcGFzc3dvcmQgPSAnJztcclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENvbnRhaW5zIHRoZSBsYXN0IGVtYWlsIGFjY291bnQgdGhhdCBoYXMgYmVlbiB2ZXJpZmllZCAob3IgdHJpZWQgdG8gdmVyaWZ5KSBieSB0aGlzIHNlcnZpY2UsIGlmIGFueVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9sYXN0VmVyaWZpZWRNYWlsID0gJyc7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2sgcHVibGljIGdldHRlciBmb3IgZG9jc1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9pc0xvZ2dlZCA9IGZhbHNlO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzZWUgdG9rZW4oKSBnZXR0ZXIgZm9yIG1vcmUgaW5mb1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF90b2tlbiA9ICcnO1xyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogTGlzdCBvZiBvcGVyYXRpb25zIHRoYXQgYXJlIGFsbG93ZWQgdG8gdGhlIGN1cnJlbnRseSBsb2dlZCB1c2VyLiBJdCBnZXRzIGZpbGxlZCBqdXN0IGFmdGVyIGxvZ2luIGlzIHBlcmZvcm1lZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9vcGVyYXRpb25zOnN0cmluZ1tdID0gW107XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBQcml2YXRlIGh0dHAgc2VydmljZSBpbnN0YW5jZSB0aGF0IHdpbGwgYmUgZXhjbHVzaXZlIHRvIHRoaXMgdHVyYm8gYXBpIGNhbGxlciBzZXJ2aWNlLiBJdCBpcyBhIGR1cGxpY2F0ZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBodHRwTWFuYWdlcjogSFRUUE1hbmFnZXI7XHJcbiAgICBcclxuICAgIFxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlLCBcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgYnJvd3NlclNlcnZpY2U6IEJyb3dzZXJTZXJ2aWNlKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgc3VwZXIoVHVyYm9BcGlDYWxsZXJTZXJ2aWNlKTtcclxuICAgICAgICBcclxuICAgICAgICAvLyBDcmVhdGUgYSBmcmVzaCBpbnN0YW5jZSBvZiB0aGUgaHR0cCBzZXJ2aWNlIHNvIHdlIGNhbiB1c2UgaXQgaW5kZXBlbmRlbnRseVxyXG4gICAgICAgIHRoaXMuaHR0cE1hbmFnZXIgPSBuZXcgSFRUUE1hbmFnZXIoKTtcclxuICAgICAgICB0aGlzLl9jbGVhclVzZXJBbmRUb2tlbigpO1xyXG4gICAgfVxyXG4gICAgXHJcblxyXG4gICAgLyoqIFxyXG4gICAgICogRGVmaW5lIHRoZSByb290IHVybCB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgYWxsIHRoZSBBUEkgY2FsbHNcclxuICAgICAqL1xyXG4gICAgc2V0IGJhc2VVcmwodXJsOnN0cmluZyl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5odHRwTWFuYWdlci5iYXNlVXJsID0gdXJsO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKiBcclxuICAgICAqIERlZmluZSB0aGUgcm9vdCB1cmwgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGFsbCB0aGUgQVBJIGNhbGxzXHJcbiAgICAgKi9cclxuICAgIGdldCBiYXNlVXJsKCl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cE1hbmFnZXIuYmFzZVVybDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSBjdXJyZW50IGJyb3dzZXIgVVJMIGNvbnRhaW5zIGEgaGFzaCBmcmFnbWVudCAoVGhlIHBhcnQgYWZ0ZXIgdGhlICMgY2hhcmFjdGVyKSB0aGF0IGNvbnRhaW5zIGVuY29kZWQgdXNlciBvciBwYXNzd29yZFxyXG4gICAgICogdmFsdWVzLCB0aGlzIG1ldGhvZCB3aWxsIHBhcnNlIGFuZCBhdXRvbWF0aWNhbGx5IHNldCB0aGVtIGFzIHRoZSBjcmVkZW50aWFscyB0byB1c2UuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBVUkwgaGFzaCBpcyBub3QgYWx0ZXJlZCBpbiBhbnkgd2F5IGJ5IHRoaXMgbWV0aG9kLlxyXG4gICAgICpcclxuICAgICAqIEByZXR1cm5zIFRydWUgaWYgYW55IGNyZWRlbnRpYWxzIHdlcmUgZm91bmQgYW5kIGxvYWRlZCwgZmFsc2UgaWYgbm90aGluZyBoYXBwZW5lZFxyXG4gICAgICovXHJcbiAgICBsb2FkQ3JlZGVudGlhbHNGcm9tVVJMSGFzaEZyYWdtZW50KCkge1xyXG4gICAgXHJcbiAgICAgICAgLy8gSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgZW1wdHksIG5vdGhpbmcgdG8gZG9cclxuICAgICAgICBpZighdGhpcy5icm93c2VyU2VydmljZS5pc0N1cnJlbnRVcmxXaXRoSGFzaEZyYWdtZW50KCkpe1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICBcclxuICAgICAgICBsZXQgdmFsdWVzRm91bmQgPSBmYWxzZTtcclxuICAgICAgIFxyXG4gICAgICAgIC8vIFNwbGl0IHRoZSBoYXNoIGZyYWdtZW50IHRvIG9idGFpbiB0aGUgZGlmZmVyZW50IHZhbHVlcyB0aGF0IGNvbnRhaW5zXHJcbiAgICAgICAgbGV0IGhhc2hEYXRhID0gdGhpcy5icm93c2VyU2VydmljZS5nZXRDdXJyZW50VXJsSGFzaEZyYWdtZW50KCkuc3BsaXQoJy8nKTtcclxuICAgICAgIFxyXG4gICAgICAgIC8vIFVzZXIgbmFtZSBpcyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgaGFzaCBmcmFnbWVudC4gSWYgd2UgZm91bmQgYSB2YWx1ZSwgXHJcbiAgICAgICAgLy8gd2Ugd2lsbCBmaWxsIGl0IGF1dG9tYXRpY2FsbHlcclxuICAgICAgICBpZihoYXNoRGF0YS5sZW5ndGggPiAwKXtcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgdmFsdWVzRm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJOYW1lID0gQ29udmVyc2lvblV0aWxzLmJhc2U2NFRvU3RyaW5nKGhhc2hEYXRhWzBdKTtcclxuICAgICAgICB9XHJcbiAgICAgICBcclxuICAgICAgICAvLyBBdXRvIGZpbGwgdGhlIHBhc3N3b3JkIGlmIGl0IGlzIHJlY2VpdmVkXHJcbiAgICAgICAgaWYoaGFzaERhdGEubGVuZ3RoID4gMyl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHZhbHVlc0ZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5wYXNzd29yZCA9IENvbnZlcnNpb25VdGlscy5iYXNlNjRUb1N0cmluZyhoYXNoRGF0YVszXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlc0ZvdW5kO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogSWYgdGhlIGN1cnJlbnQgYnJvd3NlciBVUkwgY29udGFpbnMgYSBoYXNoIGZyYWdtZW50IChUaGUgcGFydCBhZnRlciB0aGUgIyBjaGFyYWN0ZXIpIHRoYXQgY29udGFpbnMgZW5jb2RlZCB1c2VyLCBtYWlsIGFuZFxyXG4gICAgICogaGFzIHZlcmlmaWNhdGlvbiBjb2RlIHZhbHVlcywgdGhpcyBtZXRob2Qgd2lsbCBwZXJmb3JtIHRoZSByZXF1ZXN0IHRvIHNlcnZlciB0byB2ZXJpZnkgdGhhdCBlbWFpbCBhY2NvdW50IGZvciB0aGUgdXNlci5cclxuICAgICAqIFxyXG4gICAgICogVGhlIFVSSSBwYXRoIHRvIHRoZSBtYWlsIHZlcmlmaWNhdGlvbiBzZXJ2aWNlIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgYXQgdGhpcy5tYWlsVmVyaWZ5U2VydmljZVVSSSBwcm9wZXJ0eS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzZXJ2ZXIgcmVzcG9uc2UgaWYgdGhlIHZlcmlmaWNhdGlvbiBpcyBzdWNjZXNzZnVsLFxyXG4gICAgICogICAgICAgICAgb3IgcmVqZWN0cyB3aXRoIGFuIGVycm9yIGlmIHRoZSB2ZXJpZmljYXRpb24gZmFpbHMuIFJlc3BvbnNlIHdpbGwgaGF2ZSA0IHBvc3NpYmxlIHZhbHVlczpcclxuICAgICAqICAgICAgICAgICAgICAgdW5kZWZpbmVkIC0gbWVhbmluZyB0aGF0IHRoZSBVUkwgaGFzaCBmcmFnbWVudCBkaWRuJ3QgY29udGFpbiB2YWxpZCB2ZXJpZmljYXRpb24gdmFsdWVzXHJcbiAgICAgKiAgICAgICAgICAgICAgLTEgLSBtZWFuaW5nIHZlcmlmaWNhdGlvbiBmYWlsZWRcclxuICAgICAqICAgICAgICAgICAgICAgMCAtIG1lYW5pbmcgdmVyaWZpY2F0aW9uIHN1Y2NlZWRlZFxyXG4gICAgICogICAgICAgICAgICAgICAxIC0gbWVhbmluZyB0aGUgZW1haWwgd2FzIGFscmVhZHkgcHJldmlvdWx5IHZlcmlmaWVkXHJcbiAgICAgKi9cclxuICAgIHZlcmlmeVVzZXJNYWlsRnJvbVVSTEhhc2hGcmFnbWVudCgpIHtcclxuXHJcbiAgICAgICAgLy8gSWYgdGhlIGhhc2ggZnJhZ21lbnQgaXMgZW1wdHksIG5vdGhpbmcgdG8gZG9cclxuICAgICAgICBpZih0aGlzLmJyb3dzZXJTZXJ2aWNlLmlzQ3VycmVudFVybFdpdGhIYXNoRnJhZ21lbnQoKSl7XHJcbiAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IGhhc2hEYXRhID0gdGhpcy5icm93c2VyU2VydmljZS5nZXRDdXJyZW50VXJsSGFzaEZyYWdtZW50KCkuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYoaGFzaERhdGEubGVuZ3RoID49IDMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIC8vIENhbGwgZm9yIHRoZSB1c2VyIG1haWwgdmVyaWZpY2F0aW9uIGlmIHVzZXIsIG1haWwgYW5kIGhhc2ggYXJlIHJlY2VpdmVkXHJcbiAgICAgICAgICAgICAgICBsZXQgdXNlciA9IENvbnZlcnNpb25VdGlscy5iYXNlNjRUb1N0cmluZyhoYXNoRGF0YVswXSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWFpbCA9IENvbnZlcnNpb25VdGlscy5iYXNlNjRUb1N0cmluZyhoYXNoRGF0YVsxXSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgaGFzaCA9IENvbnZlcnNpb25VdGlscy5iYXNlNjRUb1N0cmluZyhoYXNoRGF0YVsyXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYoIVN0cmluZ1V0aWxzLmlzRW1wdHkodXNlcikgJiYgIVN0cmluZ1V0aWxzLmlzRW1wdHkobWFpbCkgJiYgIVN0cmluZ1V0aWxzLmlzRW1wdHkoaGFzaCkpe1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xhc3RWZXJpZmllZE1haWwgPSBtYWlsO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNhbGwodGhpcy5tYWlsVmVyaWZ5U2VydmljZVVSSSwge3VzZXJOYW1lOiB1c2VyLCBtYWlsOiBtYWlsLCBoYXNoOiBoYXNofSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogT2J0YWluIHRoZSBsYXQgdXNlciBtYWlsIGFjY291bnQgdGhhdCBoYXMgYmVlbiB2ZXJpZmllZCAob3IgYXR0ZW1wdGVkIHRvIHZlcmlmeSkgYnkgdGhpcyBzZXJ2aWNlLlxyXG4gICAgICovXHJcbiAgICBnZXRMYXN0VmVyaWZpZWRNYWlsKCl7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl9sYXN0VmVyaWZpZWRNYWlsOztcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEF1dGhlbnRpY2F0ZXMgdGhlIHVzZXIgYnkgc2VuZGluZyBhbiBlbmNvZGVkIGNyZWRlbnRpYWxzIHJlcXVlc3QgdG8gdGhlIGxvZ2luIHdlYiBzZXJ2aWNlLlxyXG4gICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgaWYgdGhlIGxvZ2luIGZhaWxzLlxyXG4gICAgICogUGF0aCB0byB0aGUgbG9naW4gc2VydmljZSBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGF0IHRoaXMubG9naW5XZWJTZXJ2aWNlXHJcbiAgICAgKlxyXG4gICAgICogSGVyZSdzIGFuIGV4YW1wbGUgb2YgYSBjYWxsOlxyXG4gICAgICogXHJcbiAgICAgKiAgbG9naW4oKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAqICAgICBjb25zb2xlLmxvZygnTG9naW4gc3VjY2Vzc2Z1bDonLCByZXNwb25zZSk7XHJcbiAgICAgKiAgfSkuY2F0Y2goKCkgPT4ge1xyXG4gICAgICogICAgIGNvbnNvbGUuZXJyb3IoJ0xvZ2luIGZhaWxlZDonKTtcclxuICAgICAqICB9KTtcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2VydmVyIHJlc3BvbnNlIGlmIHRoZSBsb2dpbiBpcyBzdWNjZXNzZnVsLFxyXG4gICAgICogICAgICAgICAgb3IgcmVqZWN0cyB3aXRoIGFuIGVycm9yIGlmIHRoZSBsb2dpbiBmYWlscy5cclxuICAgICAqL1xyXG4gICAgbG9naW4oKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZE1vZGFsQnVzeVN0YXRlKCk7IFxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZToocjphbnkpID0+IGFueSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgSFRUUE1hbmFnZXJQb3N0UmVxdWVzdCh0aGlzLmxvZ2luU2VydmljZVVSSSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3QuaWdub3JlR2xvYmFsUG9zdFBhcmFtcyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkQ3JlZGVudGlhbHMgPSBDb252ZXJzaW9uVXRpbHMuc3RyaW5nVG9CYXNlNjQoXHJcbiAgICAgICAgICAgICAgICBDb252ZXJzaW9uVXRpbHMuc3RyaW5nVG9CYXNlNjQodGhpcy51c2VyTmFtZSkgKyAnLCcgKyBDb252ZXJzaW9uVXRpbHMuc3RyaW5nVG9CYXNlNjQodGhpcy5wYXNzd29yZCkpO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3QucGFyYW1ldGVycyA9IHsgZGF0YTogZW5jb2RlZENyZWRlbnRpYWxzIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LnN1Y2Nlc3NDYWxsYmFjayA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAhPT0gJycpIHtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IEpTT04ucGFyc2UocmVzcG9uc2UpOyAgICAgICAgICAgIFxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2lzTG9nZ2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl90b2tlbiA9IHJlc3BvbnNlLnRva2VuO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29wZXJhdGlvbnMgPSByZXNwb25zZS5vcGVyYXRpb25zO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuc2V0R2xvYmFsUG9zdFBhcmFtKCd0b2tlbicsIHJlc3BvbnNlLnRva2VuKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJVc2VyQW5kVG9rZW4oKTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5lcnJvckNhbGxiYWNrID0gKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFyVXNlckFuZFRva2VuKCk7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoKSk7ICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LmZpbmFsbHlDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZW1vdmVNb2RhbEJ1c3lTdGF0ZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyLmV4ZWN1dGUocmVxdWVzdCk7XHJcbiAgICAgICAgfSk7IFxyXG4gICAgfVxyXG4gICAgXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgdGhlIHVzZXIgYW5kIHBhc3N3b3JkIGNyZWRlbnRpYWxzIGFyZSBmaWxsZWQgYW5kIG5vdCBlbXB0eS5cclxuICAgICAqIElmIGFueSBvZiB0aGUgdHdvIHZhbHVlcyBpcyBlbXB0eSwgZmFsc2Ugd2lsbCBiZSByZXR1cm5lZFxyXG4gICAgICovXHJcbiAgICBnZXQgaXNVc2VyQW5kUHN3RGVmaW5lZCgpOiBib29sZWFuICB7XHJcblxyXG4gICAgICAgIHJldHVybiAhU3RyaW5nVXRpbHMuaXNFbXB0eSh0aGlzLnVzZXJOYW1lKSAmJiAhU3RyaW5nVXRpbHMuaXNFbXB0eSh0aGlzLnBhc3N3b3JkKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiBleGlzdHMgYSB1c2VyIHRoYXQgaXMgY3VycmVudGx5IGxvZ2dlZCBvciBub3RcclxuICAgICAqL1xyXG4gICAgZ2V0IGlzTG9nZ2VkKCk6IGJvb2xlYW4ge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2dnZWQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZXMgdGhlIHZhbHVlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSB1c2VyIGF1dGhlbnRpY2F0aW9uIHRva2VuIG9yIGFuIGVtcHR5IHN0cmluZyBpZiBubyB1c2VyIGxvZ2dlZFxyXG4gICAgICovXHJcbiAgICBnZXQgdG9rZW4oKSB7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgY3VycmVudGx5IGxvZ2dlZCB1c2VyIGlzIGFsbG93ZWQgdG8gcGVyZm9ybSB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbi5cclxuICAgICAqIFRoaXMgd2lsbCBjaGVjayB0aGUgdXNlciBwZXJtaXNpb25zIGFzIGRlZmluZWQgb24gc2VydmVyIHNpZGUgYW5kIHJldHVybiB0cnVlIGlmIHRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZFxyXG4gICAgICogb3IgZmFsc2UgaWYgbm90LiBXZSBjYW4gdGhlbiBkZWNpZGUgd2hhdCB0byBkbyAoaGlkZSBhbiBhcHAgc2VjdGlvbiwgYmxvY2sgYSBidXR0b24sIGV0YylcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uIHRvIGNoZWNrIFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlIFxyXG4gICAgICovXHJcbiAgICBpc1VzZXJBbGxvd2VkVG8ob3BlcmF0aW9uOnN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdGlvbnMuaW5jbHVkZXMob3BlcmF0aW9uKTtcclxuICAgIH1cclxuICAgICAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyBhIHN0YW5kYXJkIHJlcXVlc3QgdG8gYW4gQVBJIHNlcnZpY2UgYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSBjYWxsOlxyXG4gICAgICogXHJcbiAgICAgKiAgICAgdGhpcy5hcGlTZXJ2aWNlLmNhbGwoJ3VzZXJzL3VzZXItY3JlYXRlJywgdGhpcy51c2VyRGF0YSwge2hhbmRsZUVycm9yczogZmFsc2V9KS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAqICAgICAgICAgIFxyXG4gICAgICogICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzcG9uc2UpO1xyXG4gICAgICogICAgICAgICAgXHJcbiAgICAgKiAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAqICAgICAgICAgIFxyXG4gICAgICogICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgKiAgICAgIH0pO1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhcGlQYXRoIC0gQSByZWxhdGl2ZSBVUkwgKGJhc2VkIG9uIHRoZSBkZWZpbmVkIGJhc2Ugcm9vdCB1cmwpIHRoYXQgZGVmaW5lcyB0aGUgcGF0aCB0byB0aGUgc2VydmljZSB0byBjYWxsLlxyXG4gICAgICogICAgICAgIEZvciBleGFtcGxlOiAndXNlcnMvbG9naW4nXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyB0aGF0IGFyZSBzZW50IGFzIHRoZSByZXF1ZXN0IGJvZHkuXHJcbiAgICAgKiAgICAgICAgdG9rZW4gcGFyYW1ldGVyIGlzIG5vdCBuZWNlc3NhcnksIGl0IGlzIGF1dG9tYXRpY2FsbHkgYXBwZW5kZWRcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIEFuIG9iamVjdCBkZWZpbmluZyBzZXZlcmFsIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0OlxyXG4gICAgICogICAgICAgIHJlc3VsdEZvcm1hdDogJ0pTT04nIGJ5IGRlZmF1bHQuIFRoZSBleHBlY3RlZCBmb3JtYXQgb2YgdGhlIHJlc3BvbnNlLiBcclxuICAgICAqICAgICAgICBidXN5U3RhdGU6IEVuYWJsZWQgYnkgZGVmYXVsdC4gRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYnVzeSBzdGF0ZSB0byBsb2NrIHVzZXIgaW50ZXJhY3Rpb24gd2hpbGUgcGVyZm9ybWluZyB0aGUgaHR0cCBjYWxscy5cclxuICAgICAqICAgICAgICBoYW5kbGVFcnJvcnM6IEVuYWJsZWQgYnkgZGVmYXVsdC4gSWYgc2V0IHRvIHRydWUsIGFuIGVycm9yIGRpYWxvZyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2hvd24gd2hlbiB0aGUgY2FsbCBmYWlscy5cclxuICAgICAqICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwcm9taXNlIHdpbGwgZ2VuZXJhdGUgYSByZWplY3QgZXJyb3IgdGhhdCBtdXN0IGJlIGhhbmRsZWQgYnkgb3VyIGNvZGUuXHJcbiAgICAgKiAgICAgICBcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRhdGEgY29ycmVjdGx5IHBhcnNlZCBpZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCBvciByZWplY3RzIFxyXG4gICAgICogICAgICAgICAgd2l0aCBhbiBlcnJvciAoY29udGFpbmluZyBhbGwgdGhlIGVycm9yIHJlc3BvbnNlIGRldGFpbHMpIGlmIHRoZSByZXF1ZXN0IGZhaWxzLlxyXG4gICAgICovXHJcbiAgICBjYWxsKGFwaVBhdGg6c3RyaW5nLCBwYXJhbWV0ZXJzID0ge30sIG9wdGlvbnM6IHtyZXN1bHRGb3JtYXQ/OidTVFJJTkcnfCdKU09OJywgYnVzeVN0YXRlPzpib29sZWFuLCBoYW5kbGVFcnJvcnM/OmJvb2xlYW59ID0ge30pe1xyXG4gICAgXHJcbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIHNwZWNpZmllZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgb3B0aW9ucy5yZXN1bHRGb3JtYXQgPSBvcHRpb25zLnJlc3VsdEZvcm1hdCA/PyAnSlNPTic7XHJcbiAgICAgICAgb3B0aW9ucy5idXN5U3RhdGUgPSBvcHRpb25zLmJ1c3lTdGF0ZSA/PyB0cnVlO1xyXG4gICAgICAgIG9wdGlvbnMuaGFuZGxlRXJyb3JzID0gb3B0aW9ucy5oYW5kbGVFcnJvcnMgPz8gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICBpZihvcHRpb25zLmJ1c3lTdGF0ZSl7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZE1vZGFsQnVzeVN0YXRlKCk7IFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6KHI6YW55KSA9PiBhbnksIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSByZXF1ZXN0IG9iamVjdFxyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICBhcGlQYXRoLCBcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0Rm9ybWF0ID09PSAnU1RSSU5HJyA/IEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QuU1RSSU5HIDogSFRUUE1hbmFnZXJQb3N0UmVxdWVzdC5KU09OXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG5cclxuICAgICAgICAgICAgcmVxdWVzdC5zdWNjZXNzQ2FsbGJhY2sgPSAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlcXVlc3QuZXJyb3JDYWxsYmFjayA9IChlcnJvck1zZywgZXJyb3JDb2RlLCByZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuaGFuZGxlRXJyb3JzKXtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yRGlhbG9nKGVycm9yTXNnLCBlcnJvckNvZGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvck1zZyArICcgJyArIGVycm9yQ29kZSArICcgJyArIHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5maW5hbGx5Q2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuYnVzeVN0YXRlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVtb3ZlTW9kYWxCdXN5U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuZXhlY3V0ZShyZXF1ZXN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIGEgcmVxdWVzdCB0byBjaGFpbiBzZXZlcmFsIGFwaSBjYWxscyBpbnRvIGEgc2luZ2xlIGh0dHAgcmVxdWVzdCwgdmlhIHRoZSBjaGFpbiBzZXJ2aWNlcyBtZWNoYW5pc20gb2YgdGhlIHR1cmJvZnJhbWV3b3JrIEFQSS5cclxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzLiBPbmUgZm9yIGVhY2ggb2YgdGhlIHJlcXVlc3QgY2FsbHMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGFwaVBhdGggLSBBIHJlbGF0aXZlIFVSTCAoYmFzZWQgb24gdGhlIGRlZmluZWQgYmFzZSByb290IHVybCkgdGhhdCBkZWZpbmVzIHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBjaGFpbiBzZXJ2aWNlcyBjYWxsLlxyXG4gICAgICogICAgICAgIEZvciBleGFtcGxlOiAndHVyYm9zaXRlL2NoYWluL2NoYWluLXNlcnZpY2VzJ1xyXG4gICAgICogQHBhcmFtIHNlcnZpY2VzIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cywgd2VyZSBlYWNoIG9iamVjdCBjb250YWlucyBhIHZhbGlkIHN0cnVjdHVyZSBmb3IgdGhlIGNoYWluIHNlcnZpY2VzIGNhbGwuIFxyXG4gICAgICogICAgICAgIFRva2VuIHBhcmFtZXRlciBpcyBub3QgbmVjZXNzYXJ5LCBpdCBpcyBhdXRvbWF0aWNhbGx5IGFwcGVuZGVkXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgZGVmaW5pbmcgc2V2ZXJhbCBvcHRpb25zIGZvciB0aGUgcmVxdWVzdDpcclxuICAgICAqICAgICAgICBidXN5U3RhdGU6IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGJ1c3kgc3RhdGUgdG8gbG9jayB1c2VyIGludGVyYWN0aW9uIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGh0dHAgY2FsbHMuIEVuYWJsZWQgYnkgZGVmYXVsdFxyXG4gICAgICogICAgICAgIGhhbmRsZUVycm9yczogRW5hYmxlZCBieSBkZWZhdWx0LiBJZiBzZXQgdG8gdHJ1ZSwgYW4gZXJyb3IgZGlhbG9nIHdpbGwgYmUgYXV0b21hdGljYWxseSBzaG93biB3aGVuIHRoZSBjYWxsIGZhaWxzLlxyXG4gICAgICogICAgICAgIElmIHNldCB0byBmYWxzZSwgdGhlIHByb21pc2Ugd2lsbCBnZW5lcmF0ZSBhIHJlamVjdCBlcnJvciB0aGF0IG11c3QgYmUgaGFuZGxlZCBieSBvdXIgY29kZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGF0YSBjb3JyZWN0bHkgcGFyc2VkIGlmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwsIG9yIHJlamVjdHMgXHJcbiAgICAgKiAgICAgICAgICB3aXRoIGFuIGVycm9yIChjb250YWluaW5nIGFsbCB0aGUgZXJyb3IgcmVzcG9uc2UgZGV0YWlscykgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXHJcbiAgICAgKi9cclxuICAgIGNhbGxDaGFpbihhcGlQYXRoOnN0cmluZywgc2VydmljZXM6e31bXSwgb3B0aW9uczoge2J1c3lTdGF0ZT86Ym9vbGVhbiwgaGFuZGxlRXJyb3JzPzpib29sZWFufSA9IHt9KXtcclxuICAgIFxyXG4gICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIG5vbiBzcGVjaWZpZWQgcHJvcGVydGllc1xyXG4gICAgICAgIG9wdGlvbnMuYnVzeVN0YXRlID0gb3B0aW9ucy5idXN5U3RhdGUgPz8gdHJ1ZTtcclxuICAgICAgICBvcHRpb25zLmhhbmRsZUVycm9ycyA9IG9wdGlvbnMuaGFuZGxlRXJyb3JzID8/IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYob3B0aW9ucy5idXN5U3RhdGUpe1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hZGRNb2RhbEJ1c3lTdGF0ZSgpOyBcclxuICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6KHI6YW55KSA9PiBhbnksIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBIVFRQTWFuYWdlclBvc3RSZXF1ZXN0KGFwaVBhdGgsIEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QuSlNPTik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0Lmlnbm9yZUdsb2JhbFBvc3RQYXJhbXMgPSB0cnVlOyAgICAgIFxyXG5cclxuICAgICAgICAgICAgcmVxdWVzdC5wYXJhbWV0ZXJzID0geyBzZXJ2aWNlczogc2VydmljZXMgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3Quc3VjY2Vzc0NhbGxiYWNrID0gKHJlc3BvbnNlOmFueVtdKSA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH07ICAgICAgXHJcblxyXG4gICAgICAgICAgICByZXF1ZXN0LmVycm9yQ2FsbGJhY2sgPSAoZXJyb3JNc2csIGVycm9yQ29kZSwgcmVzcG9uc2UpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZihvcHRpb25zLmhhbmRsZUVycm9ycyl7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvckRpYWxvZyhlcnJvck1zZywgZXJyb3JDb2RlLCByZXNwb25zZSk7ICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yTXNnICsgJyAnICsgZXJyb3JDb2RlICsgJyAnICsgcmVzcG9uc2UpKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LmZpbmFsbHlDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucy5idXN5U3RhdGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZW1vdmVNb2RhbEJ1c3lTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlci5leGVjdXRlKHJlcXVlc3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQXV4IG1ldGhvZCB0byBzaG93IGFuIGVycm9yIGRpYWxvZyB3aGVuIGEgcmVxdWVzdCBmYWlscyBhbmQgZXJyb3IgaGFuZGxpbmcgaXMgZW5hYmxlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNob3dFcnJvckRpYWxvZyhlcnJvck1zZzpzdHJpbmcsIGVycm9yQ29kZTpudW1iZXIsIHJlc3BvbnNlOmFueSl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZXJyb3JNc2cgPSBlcnJvck1zZyArICdcXG5cXG4nICsgcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICBpZihTdHJpbmdVdGlscy5pc0VtcHR5KGVycm9yTXNnKSl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGVycm9yTXNnID0gJ1Vua25vd24gZXJyb3IuIE1ha2Ugc3VyZSBJbnRlcm5ldCBjb25uZWN0aW9uIGlzIGF2YWlsYWJsZSc7ICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZERpYWxvZyhEaWFsb2dFcnJvckNvbXBvbmVudCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6JzUwdncnLFxyXG4gICAgICAgICAgICAgICAgdGV4dHM6IFsnRXJyb3I6ICcgKyBlcnJvckNvZGUsIGVycm9yTXNnXSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IFsnT2snXVxyXG4gICAgICAgICAgICB9KTsgXHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIHRoZSBsb2dvdXQgZm9yIHRoZSBjdXJyZW50bHkgbG9nZ2VkIHVzZXJcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgZGVmaW5pbmcgc2V2ZXJhbCBvcHRpb25zIGZvciB0aGUgcmVxdWVzdDpcclxuICAgICAqICAgICAgICBoYW5kbGVFcnJvcnM6IEVuYWJsZWQgYnkgZGVmYXVsdC4gSWYgc2V0IHRvIHRydWUsIGFuIGVycm9yIGRpYWxvZyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2hvd24gd2hlbiB0aGUgY2FsbCBmYWlscy5cclxuICAgICAqICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwcm9taXNlIHdpbGwgZ2VuZXJhdGUgYSByZWplY3QgZXJyb3IgdGhhdCBtdXN0IGJlIGhhbmRsZWQgYnkgb3VyIGNvZGUuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGNvcnJlY3RseSBpZiB0aGUgbG9nb3V0IGlzIGNvcnJlY3QsIG9yIHJlamVjdHMgd2l0aCBhbiBlcnJvciAoY29udGFpbmluZyBhbGwgdGhlIGVycm9yIFxyXG4gICAgICogICAgICAgICAgcmVzcG9uc2UgZGV0YWlscykgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXHJcbiAgICAgKi9cclxuICAgIGxvZ291dChvcHRpb25zOiB7aGFuZGxlRXJyb3JzPzpib29sZWFufSA9IHt9KSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIHNwZWNpZmllZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgb3B0aW9ucy5oYW5kbGVFcnJvcnMgPSBvcHRpb25zLmhhbmRsZUVycm9ycyA/PyB0cnVlO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZE1vZGFsQnVzeVN0YXRlKCk7IFxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBIVFRQTWFuYWdlclBvc3RSZXF1ZXN0KHRoaXMubG9nT3V0U2VydmljZVVSSSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3QucGFyYW1ldGVycyA9IHsgdG9rZW46IHRoaXMuX3Rva2VuIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LnN1Y2Nlc3NDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhclVzZXJBbmRUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LmVycm9yQ2FsbGJhY2sgPSAoZXJyb3JNc2csIGVycm9yQ29kZSwgcmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucy5oYW5kbGVFcnJvcnMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yRGlhbG9nKGVycm9yTXNnLCBlcnJvckNvZGUsIHJlc3BvbnNlKTsgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3JNc2cgKyAnICcgKyBlcnJvckNvZGUgKyAnICcgKyByZXNwb25zZSkpO1xyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5maW5hbGx5Q2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVtb3ZlTW9kYWxCdXN5U3RhdGUoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlci5leGVjdXRlKHJlcXVlc3QpO1xyXG4gICAgICAgIH0pOyBcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEF1eCBtZXRob3QgdG8gY2xlYXIgYWxsIHRoZSBjdXJyZW50bHkgbG9nZ2VkIHVzZXIgZGF0YVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jbGVhclVzZXJBbmRUb2tlbigpe1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXNlck5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnBhc3N3b3JkID0gJyc7XHJcbiAgICAgICAgdGhpcy5faXNMb2dnZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90b2tlbiA9ICcnO1xyXG4gICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuc2V0R2xvYmFsUG9zdFBhcmFtKCd0b2tlbicsICctJyk7IFxyXG4gICAgfVxyXG59XHJcbiJdfQ==
400
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHVyYm8tYXBpLWNhbGxlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVyYm9ndWktYW5ndWxhci9zcmMvbWFpbi9jb250cm9sbGVyL3R1cmJvLWFwaS1jYWxsZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztHQU9HO0FBRUgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUMvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7OztBQUk5Rjs7R0FFRztBQUlILE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxxQkFBcUI7SUFtRTVELFlBQW9CLGFBQTRCLEVBQzVCLGNBQThCO1FBRTlDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBSGIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBakVsRDs7OztXQUlHO1FBQ0gsb0JBQWUsR0FBRyxhQUFhLENBQUM7UUFHaEM7O1dBRUc7UUFDSCxxQkFBZ0IsR0FBRyxjQUFjLENBQUM7UUFHbEM7O1dBRUc7UUFDSCx5QkFBb0IsR0FBRyx3QkFBd0IsQ0FBQztRQUdoRDs7OztXQUlHO1FBQ0gsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUdkOztXQUVHO1FBQ0gsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUdkOztXQUVHO1FBQ0ssc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBRy9COztXQUVHO1FBQ0ssY0FBUyxHQUFHLEtBQUssQ0FBQztRQUcxQjs7V0FFRztRQUNLLFdBQU0sR0FBRyxFQUFFLENBQUM7UUFHcEI7O1dBRUc7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TyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7OEdBaGhCUSxxQkFBcUI7a0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzsyRkFFUCxxQkFBcUI7a0JBSGpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFR1cmJvR1VJIGlzIEEgbGlicmFyeSB0aGF0IGhlbHBzIHdpdGggdGhlIG1vc3QgY29tbW9uIGFuZCBnZW5lcmljIFVJIGVsZW1lbnRzIGFuZCBmdW5jdGlvbmFsaXRpZXNcclxuICpcclxuICogV2Vic2l0ZSA6IC0+IGh0dHA6Ly93d3cudHVyYm9ndWkub3JnXHJcbiAqIExpY2Vuc2UgOiAtPiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXHJcbiAqIExpY2Vuc2UgVXJsIDogLT4gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXHJcbiAqIENvcHlSaWdodCA6IC0+IENvcHlyaWdodCAyMDE4IEVkZXJ0b25lIEFkdmFuZGVkIFNvbHV0aW9ucy4gaHR0cHM6Ly93d3cuZWRlcnRvbmUuY29tXHJcbiAqL1xyXG5cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnZlcnNpb25VdGlscywgSFRUUE1hbmFnZXIsIEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QsIFN0cmluZ1V0aWxzIH0gZnJvbSAndHVyYm9jb21tb25zLXRzJztcclxuaW1wb3J0IHsgU2luZ2xldG9uZVN0cmljdENsYXNzIH0gZnJvbSAnLi4vbW9kZWwvY2xhc3Nlcy9TaW5nbGV0b25lU3RyaWN0Q2xhc3MnO1xyXG5pbXBvcnQgeyBEaWFsb2dFcnJvckNvbXBvbmVudCB9IGZyb20gJy4uL3ZpZXcvY29tcG9uZW50cy9kaWFsb2ctZXJyb3IvZGlhbG9nLWVycm9yLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJyb3dzZXJTZXJ2aWNlIH0gZnJvbSAnLi9icm93c2VyLnNlcnZpY2UnO1xyXG5cclxuXHJcbi8qKlxyXG4gKiBBbGxvd3MgdXMgdG8gZWFzaWx5IHBlcmZvcm0gcmVxdWVzdHMgdG8gYSByZW1vdGUgQVBJIHRoYXQgaXMgZGV2ZWxvcGVkIHdpdGggVHVyYm8gZnJhbWV3b3JrLlxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFR1cmJvQXBpQ2FsbGVyU2VydmljZSBleHRlbmRzIFNpbmdsZXRvbmVTdHJpY3RDbGFzcyB7XHJcbiAgICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIFVSSSBQYXRoIHRvIHRoZSB3ZWIgc2VydmljZSB0aGF0IHBlcmZvcm1zIHRoZSB1c2VyIGxvZ2luXHJcbiAgICAgKiBUT0RPIC0gY3JlYXIgdW5hIGNsYXNlIGFwaXBhdGhzIGFtYiBsZXMgY29uc3RhbnRzIGRlIHRvdGVzIGxlcyBydXRlcyBpIG1vdXJlIGFxdWVzdGVzIDMgYWxsYVxyXG4gICAgICogYXF1ZXN0YSBjbGFzc2UgaGF1cmEgZGUgc2VyIGV4dGVzYSBhIGxhIG5vc3RyYSBhcHAgYW1iIGxlcyBhbHRyZXMgcXVlIGVzIGZhZ2luIHNlcnZpclxyXG4gICAgICovXHJcbiAgICBsb2dpblNlcnZpY2VVUkkgPSAndXNlcnMvbG9naW4nO1xyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogVVJJIFBhdGggdG8gdGhlIHdlYiBzZXJ2aWNlIHRoYXQgcGVyZm9ybXMgdGhlIHVzZXIgbG9nIG91dFxyXG4gICAgICovXHJcbiAgICBsb2dPdXRTZXJ2aWNlVVJJID0gJ3VzZXJzL2xvZ291dCc7XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBVUkkgUGF0aCB0byB0aGUgd2ViIHNlcnZpY2UgdGhhdCBwZXJmb3JtcyB0aGUgdmVyaWZpY2F0aW9uIGZvciBhIHVzZXIgZW1haWxcclxuICAgICAqL1xyXG4gICAgbWFpbFZlcmlmeVNlcnZpY2VVUkkgPSAndXNlcnMvdXNlci1tYWlsLXZlcmlmeSc7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIHVzZXJuYW1lIHRoYXQgaXMgY3VycmVudGx5IGRlZmluZWQgYW5kIHdpbGwgYmUgdXNlZCBieSB0aGUgbG9naW4gbWV0aG9kc1xyXG4gICAgICogVE9ETyAtIFdlIG11c3QgdXNlIGEgc2V0dGVyIGFuZCBhIGdldHRlciBvZiB1c2VyIGFuZCBwc3cuIElmIGFueSBvZiB0aGUgdmFsdWVzIGNoYW5nZVxyXG4gICAgICogd2UgbXVzdCBjbGVhciB0aGUgbG9nZ2VkIHN0YXRlIGFuZCB0aGUgdG9rZW4uIFxyXG4gICAgICovXHJcbiAgICB1c2VyTmFtZSA9ICcnO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBwYXNzd29yZCBmb3IgdGhlIHVzZXIgdGhhdCBpcyBjdXJyZW50bHkgZGVmaW5lZCBhbmQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBsb2dpbiBtZXRob2RzXHJcbiAgICAgKi9cclxuICAgIHBhc3N3b3JkID0gJyc7XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWlucyB0aGUgbGFzdCBlbWFpbCBhY2NvdW50IHRoYXQgaGFzIGJlZW4gdmVyaWZpZWQgKG9yIHRyaWVkIHRvIHZlcmlmeSkgYnkgdGhpcyBzZXJ2aWNlLCBpZiBhbnlcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbGFzdFZlcmlmaWVkTWFpbCA9ICcnO1xyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrIHB1YmxpYyBnZXR0ZXIgZm9yIGRvY3NcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfaXNMb2dnZWQgPSBmYWxzZTtcclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc2VlIHRva2VuKCkgZ2V0dGVyIGZvciBtb3JlIGluZm9cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfdG9rZW4gPSAnJztcclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIExpc3Qgb2Ygb3BlcmF0aW9ucyB0aGF0IGFyZSBhbGxvd2VkIHRvIHRoZSBjdXJyZW50bHkgbG9nZWQgdXNlci4gSXQgZ2V0cyBmaWxsZWQganVzdCBhZnRlciBsb2dpbiBpcyBwZXJmb3JtZWRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfb3BlcmF0aW9uczpzdHJpbmdbXSA9IFtdO1xyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogUHJpdmF0ZSBodHRwIHNlcnZpY2UgaW5zdGFuY2UgdGhhdCB3aWxsIGJlIGV4Y2x1c2l2ZSB0byB0aGlzIHR1cmJvIGFwaSBjYWxsZXIgc2VydmljZS4gSXQgaXMgYSBkdXBsaWNhdGUuXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgaHR0cE1hbmFnZXI6IEhUVFBNYW5hZ2VyO1xyXG4gICAgXHJcbiAgICBcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSwgXHJcbiAgICAgICAgICAgICAgICBwcml2YXRlIGJyb3dzZXJTZXJ2aWNlOiBCcm93c2VyU2VydmljZSkge1xyXG4gICAgICAgIFxyXG4gICAgICAgIHN1cGVyKFR1cmJvQXBpQ2FsbGVyU2VydmljZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gQ3JlYXRlIGEgZnJlc2ggaW5zdGFuY2Ugb2YgdGhlIGh0dHAgc2VydmljZSBzbyB3ZSBjYW4gdXNlIGl0IGluZGVwZW5kZW50bHlcclxuICAgICAgICB0aGlzLmh0dHBNYW5hZ2VyID0gbmV3IEhUVFBNYW5hZ2VyKCk7XHJcbiAgICAgICAgdGhpcy5fY2xlYXJVc2VyQW5kVG9rZW4oKTtcclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIC8qKiBcclxuICAgICAqIERlZmluZSB0aGUgcm9vdCB1cmwgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGFsbCB0aGUgQVBJIGNhbGxzXHJcbiAgICAgKi9cclxuICAgIHNldCBiYXNlVXJsKHVybDpzdHJpbmcpe1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuYmFzZVVybCA9IHVybDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKiogXHJcbiAgICAgKiBEZWZpbmUgdGhlIHJvb3QgdXJsIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhbGwgdGhlIEFQSSBjYWxsc1xyXG4gICAgICovXHJcbiAgICBnZXQgYmFzZVVybCgpe1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB0aGlzLmh0dHBNYW5hZ2VyLmJhc2VVcmw7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBJZiB0aGUgY3VycmVudCBicm93c2VyIFVSTCBjb250YWlucyBhIGhhc2ggZnJhZ21lbnQgKFRoZSBwYXJ0IGFmdGVyIHRoZSAjIGNoYXJhY3RlcikgdGhhdCBjb250YWlucyBlbmNvZGVkIHVzZXIgb3IgcGFzc3dvcmRcclxuICAgICAqIHZhbHVlcywgdGhpcyBtZXRob2Qgd2lsbCBwYXJzZSBhbmQgYXV0b21hdGljYWxseSBzZXQgdGhlbSBhcyB0aGUgY3JlZGVudGlhbHMgdG8gdXNlLlxyXG4gICAgICogXHJcbiAgICAgKiBUaGUgVVJMIGhhc2ggaXMgbm90IGFsdGVyZWQgaW4gYW55IHdheSBieSB0aGlzIG1ldGhvZC5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIGFueSBjcmVkZW50aWFscyB3ZXJlIGZvdW5kIGFuZCBsb2FkZWQsIGZhbHNlIGlmIG5vdGhpbmcgaGFwcGVuZWRcclxuICAgICAqL1xyXG4gICAgbG9hZENyZWRlbnRpYWxzRnJvbVVSTEhhc2hGcmFnbWVudCgpIHtcclxuICAgIFxyXG4gICAgICAgIC8vIElmIHRoZSBoYXNoIGZyYWdtZW50IGlzIGVtcHR5LCBub3RoaW5nIHRvIGRvXHJcbiAgICAgICAgaWYoIXRoaXMuYnJvd3NlclNlcnZpY2UuaXNDdXJyZW50VXJsV2l0aEhhc2hGcmFnbWVudCgpKXtcclxuICAgICAgICAgICBcclxuICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgICAgbGV0IHZhbHVlc0ZvdW5kID0gZmFsc2U7XHJcbiAgICAgICBcclxuICAgICAgICAvLyBTcGxpdCB0aGUgaGFzaCBmcmFnbWVudCB0byBvYnRhaW4gdGhlIGRpZmZlcmVudCB2YWx1ZXMgdGhhdCBjb250YWluc1xyXG4gICAgICAgIGxldCBoYXNoRGF0YSA9IHRoaXMuYnJvd3NlclNlcnZpY2UuZ2V0Q3VycmVudFVybEhhc2hGcmFnbWVudCgpLnNwbGl0KCcvJyk7XHJcbiAgICAgICBcclxuICAgICAgICAvLyBVc2VyIG5hbWUgaXMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGhhc2ggZnJhZ21lbnQuIElmIHdlIGZvdW5kIGEgdmFsdWUsIFxyXG4gICAgICAgIC8vIHdlIHdpbGwgZmlsbCBpdCBhdXRvbWF0aWNhbGx5XHJcbiAgICAgICAgaWYoaGFzaERhdGEubGVuZ3RoID4gMCl7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhbHVlc0ZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy51c2VyTmFtZSA9IENvbnZlcnNpb25VdGlscy5iYXNlNjRUb1N0cmluZyhoYXNoRGF0YVswXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgICAgLy8gQXV0byBmaWxsIHRoZSBwYXNzd29yZCBpZiBpdCBpcyByZWNlaXZlZFxyXG4gICAgICAgIGlmKGhhc2hEYXRhLmxlbmd0aCA+IDMpe1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICB2YWx1ZXNGb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMucGFzc3dvcmQgPSBDb252ZXJzaW9uVXRpbHMuYmFzZTY0VG9TdHJpbmcoaGFzaERhdGFbM10pO1xyXG4gICAgICAgIH1cclxuICAgICAgIFxyXG4gICAgICAgIHJldHVybiB2YWx1ZXNGb3VuZDtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIElmIHRoZSBjdXJyZW50IGJyb3dzZXIgVVJMIGNvbnRhaW5zIGEgaGFzaCBmcmFnbWVudCAoVGhlIHBhcnQgYWZ0ZXIgdGhlICMgY2hhcmFjdGVyKSB0aGF0IGNvbnRhaW5zIGVuY29kZWQgdXNlciwgbWFpbCBhbmRcclxuICAgICAqIGhhcyB2ZXJpZmljYXRpb24gY29kZSB2YWx1ZXMsIHRoaXMgbWV0aG9kIHdpbGwgcGVyZm9ybSB0aGUgcmVxdWVzdCB0byBzZXJ2ZXIgdG8gdmVyaWZ5IHRoYXQgZW1haWwgYWNjb3VudCBmb3IgdGhlIHVzZXIuXHJcbiAgICAgKiBcclxuICAgICAqIFRoZSBVUkkgcGF0aCB0byB0aGUgbWFpbCB2ZXJpZmljYXRpb24gc2VydmljZSBtdXN0IGJlIGNvcnJlY3RseSBkZWZpbmVkIGF0IHRoaXMubWFpbFZlcmlmeVNlcnZpY2VVUkkgcHJvcGVydHkuXHJcbiAgICAgKlxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2VydmVyIHJlc3BvbnNlIGlmIHRoZSB2ZXJpZmljYXRpb24gaXMgc3VjY2Vzc2Z1bCxcclxuICAgICAqICAgICAgICAgIG9yIHJlamVjdHMgd2l0aCBhbiBlcnJvciBpZiB0aGUgdmVyaWZpY2F0aW9uIGZhaWxzLiBSZXNwb25zZSB3aWxsIGhhdmUgNCBwb3NzaWJsZSB2YWx1ZXM6XHJcbiAgICAgKiAgICAgICAgICAgICAgIHVuZGVmaW5lZCAtIG1lYW5pbmcgdGhhdCB0aGUgVVJMIGhhc2ggZnJhZ21lbnQgZGlkbid0IGNvbnRhaW4gdmFsaWQgdmVyaWZpY2F0aW9uIHZhbHVlc1xyXG4gICAgICogICAgICAgICAgICAgIC0xIC0gbWVhbmluZyB2ZXJpZmljYXRpb24gZmFpbGVkXHJcbiAgICAgKiAgICAgICAgICAgICAgIDAgLSBtZWFuaW5nIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWRcclxuICAgICAqICAgICAgICAgICAgICAgMSAtIG1lYW5pbmcgdGhlIGVtYWlsIHdhcyBhbHJlYWR5IHByZXZpb3VseSB2ZXJpZmllZFxyXG4gICAgICovXHJcbiAgICB2ZXJpZnlVc2VyTWFpbEZyb21VUkxIYXNoRnJhZ21lbnQoKSB7XHJcblxyXG4gICAgICAgIC8vIElmIHRoZSBoYXNoIGZyYWdtZW50IGlzIGVtcHR5LCBub3RoaW5nIHRvIGRvXHJcbiAgICAgICAgaWYodGhpcy5icm93c2VyU2VydmljZS5pc0N1cnJlbnRVcmxXaXRoSGFzaEZyYWdtZW50KCkpe1xyXG4gICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCBoYXNoRGF0YSA9IHRoaXMuYnJvd3NlclNlcnZpY2UuZ2V0Q3VycmVudFVybEhhc2hGcmFnbWVudCgpLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKGhhc2hEYXRhLmxlbmd0aCA+PSAzKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyBDYWxsIGZvciB0aGUgdXNlciBtYWlsIHZlcmlmaWNhdGlvbiBpZiB1c2VyLCBtYWlsIGFuZCBoYXNoIGFyZSByZWNlaXZlZFxyXG4gICAgICAgICAgICAgICAgbGV0IHVzZXIgPSBDb252ZXJzaW9uVXRpbHMuYmFzZTY0VG9TdHJpbmcoaGFzaERhdGFbMF0pO1xyXG4gICAgICAgICAgICAgICAgbGV0IG1haWwgPSBDb252ZXJzaW9uVXRpbHMuYmFzZTY0VG9TdHJpbmcoaGFzaERhdGFbMV0pO1xyXG4gICAgICAgICAgICAgICAgbGV0IGhhc2ggPSBDb252ZXJzaW9uVXRpbHMuYmFzZTY0VG9TdHJpbmcoaGFzaERhdGFbMl0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKCFTdHJpbmdVdGlscy5pc0VtcHR5KHVzZXIpICYmICFTdHJpbmdVdGlscy5pc0VtcHR5KG1haWwpICYmICFTdHJpbmdVdGlscy5pc0VtcHR5KGhhc2gpKXtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sYXN0VmVyaWZpZWRNYWlsID0gbWFpbDtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jYWxsKHRoaXMubWFpbFZlcmlmeVNlcnZpY2VVUkksIHt1c2VyTmFtZTogdXNlciwgbWFpbDogbWFpbCwgaGFzaDogaGFzaH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIE9idGFpbiB0aGUgbGF0IHVzZXIgbWFpbCBhY2NvdW50IHRoYXQgaGFzIGJlZW4gdmVyaWZpZWQgKG9yIGF0dGVtcHRlZCB0byB2ZXJpZnkpIGJ5IHRoaXMgc2VydmljZS5cclxuICAgICAqL1xyXG4gICAgZ2V0TGFzdFZlcmlmaWVkTWFpbCgpe1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbGFzdFZlcmlmaWVkTWFpbDs7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBBdXRoZW50aWNhdGVzIHRoZSB1c2VyTmFtZSBhbmQgcGFzc3dvcmQgdGhhdCBhcmUgY3VycmVudGx5IGRlZmluZWQgYXQgdGhlIHJlc3BlY3RpdmUgcHJvcGVydGllcyBvZiB0aGlzIHNlcnZpY2UuXHJcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNlcnZlcidzIHJlc3BvbnNlIG9yIHJlamVjdHMgd2l0aCBhbiBlcnJvciBpZiB0aGUgbG9naW4gZmFpbHMuXHJcbiAgICAgKiBQYXRoIHRvIHRoZSBsb2dpbiBzZXJ2aWNlIG11c3QgYmUgY29ycmVjdGx5IGRlZmluZWQgYXQgdGhpcy5sb2dpbldlYlNlcnZpY2VcclxuICAgICAqIFxyXG4gICAgICogVGhlIGF1dGhlbnRpY2F0aW9uIHByb2Nlc3MgaXMgcGVyZm9ybWVkIGJ5IHNlbmRpbmcgYW4gZW5jb2RlZCBjcmVkZW50aWFscyByZXF1ZXN0IHRvIHRoZSBsb2dpbiB3ZWIgc2VydmljZSB1c2luZyB0aGUgXHJcbiAgICAgKiBjdXJyZW50bHkgZGVmaW5lZCB1c2VyIG5hbWUgYW5kIHBzdy5cclxuICAgICAqXHJcbiAgICAgKiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBhIGNhbGw6XHJcbiAgICAgKiBcclxuICAgICAqICBsb2dpbigpLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICogICAgIGNvbnNvbGUubG9nKCdMb2dpbiBzdWNjZXNzZnVsOicsIHJlc3BvbnNlKTtcclxuICAgICAqICB9KS5jYXRjaCgoKSA9PiB7XHJcbiAgICAgKiAgICAgY29uc29sZS5lcnJvcignTG9naW4gZmFpbGVkOicpO1xyXG4gICAgICogIH0pO1xyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBzZXJ2ZXIgcmVzcG9uc2UgaWYgdGhlIGxvZ2luIGlzIHN1Y2Nlc3NmdWwsXHJcbiAgICAgKiAgICAgICAgICBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgaWYgdGhlIGxvZ2luIGZhaWxzLlxyXG4gICAgICovXHJcbiAgICBsb2dpbigpIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYWRkTW9kYWxCdXN5U3RhdGUoKTsgXHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlOihyOmFueSkgPT4gYW55LCByZWplY3QpID0+IHtcclxuICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBIVFRQTWFuYWdlclBvc3RSZXF1ZXN0KHRoaXMubG9naW5TZXJ2aWNlVVJJKTtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5pZ25vcmVHbG9iYWxQb3N0UGFyYW1zID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGNvbnN0IGVuY29kZWRDcmVkZW50aWFscyA9IENvbnZlcnNpb25VdGlscy5zdHJpbmdUb0Jhc2U2NChcclxuICAgICAgICAgICAgICAgIENvbnZlcnNpb25VdGlscy5zdHJpbmdUb0Jhc2U2NCh0aGlzLnVzZXJOYW1lKSArICcsJyArIENvbnZlcnNpb25VdGlscy5zdHJpbmdUb0Jhc2U2NCh0aGlzLnBhc3N3b3JkKSk7XHJcbiAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5wYXJhbWV0ZXJzID0geyBkYXRhOiBlbmNvZGVkQ3JlZGVudGlhbHMgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3Quc3VjY2Vzc0NhbGxiYWNrID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICE9PSAnJykge1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gSlNPTi5wYXJzZShyZXNwb25zZSk7ICAgICAgICAgICAgXHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faXNMb2dnZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3Rva2VuID0gcmVzcG9uc2UudG9rZW47XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3BlcmF0aW9ucyA9IHJlc3BvbnNlLm9wZXJhdGlvbnM7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlci5zZXRHbG9iYWxQb3N0UGFyYW0oJ3Rva2VuJywgcmVzcG9uc2UudG9rZW4pO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jbGVhclVzZXJBbmRUb2tlbigpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LmVycm9yQ2FsbGJhY2sgPSAoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5fY2xlYXJVc2VyQW5kVG9rZW4oKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcigpKTsgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3QuZmluYWxseUNhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnJlbW92ZU1vZGFsQnVzeVN0YXRlKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuZXhlY3V0ZShyZXF1ZXN0KTtcclxuICAgICAgICB9KTsgXHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgdXNlciBhbmQgcGFzc3dvcmQgY3JlZGVudGlhbHMgYXJlIGZpbGxlZCBhbmQgbm90IGVtcHR5LlxyXG4gICAgICogSWYgYW55IG9mIHRoZSB0d28gdmFsdWVzIGlzIGVtcHR5LCBmYWxzZSB3aWxsIGJlIHJldHVybmVkXHJcbiAgICAgKi9cclxuICAgIGdldCBpc1VzZXJBbmRQc3dEZWZpbmVkKCk6IGJvb2xlYW4gIHtcclxuXHJcbiAgICAgICAgcmV0dXJuICFTdHJpbmdVdGlscy5pc0VtcHR5KHRoaXMudXNlck5hbWUpICYmICFTdHJpbmdVdGlscy5pc0VtcHR5KHRoaXMucGFzc3dvcmQpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRlbGxzIGlmIHRoZSB1c2VyIG5hbWUgYW5kIHBzdyB0aGF0IGFyZSBzcGVjaWZpZWQgb24gdGhpcyBzZXJ2aWNlIGFyZSBjdXJyZW50bHkgbG9nZ2VkIG9yIG5vdC4gVGhpcyBtZWFuc1xyXG4gICAgICogYWxzbyBhIHRva2VuIGlzIGFjdGl2ZS5cclxuICAgICAqL1xyXG4gICAgZ2V0IGlzTG9nZ2VkKCk6IGJvb2xlYW4ge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5faXNMb2dnZWQ7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2l2ZXMgdGhlIHZhbHVlIGZvciB0aGUgY3VycmVudGx5IGFjdGl2ZSB1c2VyIGF1dGhlbnRpY2F0aW9uIHRva2VuIG9yIGFuIGVtcHR5IHN0cmluZyBpZiBubyB1c2VyIGxvZ2dlZFxyXG4gICAgICovXHJcbiAgICBnZXQgdG9rZW4oKSB7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b2tlbjtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgY3VycmVudGx5IGxvZ2dlZCB1c2VyIGlzIGFsbG93ZWQgdG8gcGVyZm9ybSB0aGUgc3BlY2lmaWVkIG9wZXJhdGlvbi5cclxuICAgICAqIFRoaXMgd2lsbCBjaGVjayB0aGUgdXNlciBwZXJtaXNpb25zIGFzIGRlZmluZWQgb24gc2VydmVyIHNpZGUgYW5kIHJldHVybiB0cnVlIGlmIHRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZFxyXG4gICAgICogb3IgZmFsc2UgaWYgbm90LiBXZSBjYW4gdGhlbiBkZWNpZGUgd2hhdCB0byBkbyAoaGlkZSBhbiBhcHAgc2VjdGlvbiwgYmxvY2sgYSBidXR0b24sIGV0YylcclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIG9wZXJhdGlvbiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW9uIHRvIGNoZWNrIFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvcGVyYXRpb24gaXMgYWxsb3dlZCwgZmFsc2Ugb3RoZXJ3aXNlIFxyXG4gICAgICovXHJcbiAgICBpc1VzZXJBbGxvd2VkVG8ob3BlcmF0aW9uOnN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZXJhdGlvbnMuaW5jbHVkZXMob3BlcmF0aW9uKTtcclxuICAgIH1cclxuICAgICAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtcyBhIHN0YW5kYXJkIHJlcXVlc3QgdG8gYW4gQVBJIHNlcnZpY2UgYW5kIHJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGF0YS5cclxuICAgICAqIFxyXG4gICAgICogRm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2YgYSBjYWxsOlxyXG4gICAgICogXHJcbiAgICAgKiAgICAgdGhpcy5hcGlTZXJ2aWNlLmNhbGwoJ3VzZXJzL3VzZXItY3JlYXRlJywgdGhpcy51c2VyRGF0YSwge2hhbmRsZUVycm9yczogZmFsc2V9KS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAqICAgICAgICAgIFxyXG4gICAgICogICAgICAgICAgY29uc29sZS5sb2coJ1N1Y2Nlc3M6JywgcmVzcG9uc2UpO1xyXG4gICAgICogICAgICAgICAgXHJcbiAgICAgKiAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcclxuICAgICAqICAgICAgICAgIFxyXG4gICAgICogICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IubWVzc2FnZSk7XHJcbiAgICAgKiAgICAgIH0pO1xyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBhcGlQYXRoIC0gQSByZWxhdGl2ZSBVUkwgKGJhc2VkIG9uIHRoZSBkZWZpbmVkIGJhc2Ugcm9vdCB1cmwpIHRoYXQgZGVmaW5lcyB0aGUgcGF0aCB0byB0aGUgc2VydmljZSB0byBjYWxsLlxyXG4gICAgICogICAgICAgIEZvciBleGFtcGxlOiAndXNlcnMvbG9naW4nXHJcbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycyB0aGF0IGFyZSBzZW50IGFzIHRoZSByZXF1ZXN0IGJvZHkuXHJcbiAgICAgKiAgICAgICAgdG9rZW4gcGFyYW1ldGVyIGlzIG5vdCBuZWNlc3NhcnksIGl0IGlzIGF1dG9tYXRpY2FsbHkgYXBwZW5kZWRcclxuICAgICAqIEBwYXJhbSBvcHRpb25zIEFuIG9iamVjdCBkZWZpbmluZyBzZXZlcmFsIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0OlxyXG4gICAgICogICAgICAgIHJlc3VsdEZvcm1hdDogJ0pTT04nIGJ5IGRlZmF1bHQuIFRoZSBleHBlY3RlZCBmb3JtYXQgb2YgdGhlIHJlc3BvbnNlLiBcclxuICAgICAqICAgICAgICBidXN5U3RhdGU6IEVuYWJsZWQgYnkgZGVmYXVsdC4gRW5hYmxlcyBvciBkaXNhYmxlcyB0aGUgYnVzeSBzdGF0ZSB0byBsb2NrIHVzZXIgaW50ZXJhY3Rpb24gd2hpbGUgcGVyZm9ybWluZyB0aGUgaHR0cCBjYWxscy5cclxuICAgICAqICAgICAgICBoYW5kbGVFcnJvcnM6IEVuYWJsZWQgYnkgZGVmYXVsdC4gSWYgc2V0IHRvIHRydWUsIGFuIGVycm9yIGRpYWxvZyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2hvd24gd2hlbiB0aGUgY2FsbCBmYWlscy5cclxuICAgICAqICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwcm9taXNlIHdpbGwgZ2VuZXJhdGUgYSByZWplY3QgZXJyb3IgdGhhdCBtdXN0IGJlIGhhbmRsZWQgYnkgb3VyIGNvZGUuXHJcbiAgICAgKiAgICAgICBcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHJlc3BvbnNlIGRhdGEgY29ycmVjdGx5IHBhcnNlZCBpZiB0aGUgcmVxdWVzdCBpcyBzdWNjZXNzZnVsLCBvciByZWplY3RzIFxyXG4gICAgICogICAgICAgICAgd2l0aCBhbiBlcnJvciAoY29udGFpbmluZyBhbGwgdGhlIGVycm9yIHJlc3BvbnNlIGRldGFpbHMpIGlmIHRoZSByZXF1ZXN0IGZhaWxzLlxyXG4gICAgICovXHJcbiAgICBjYWxsKGFwaVBhdGg6c3RyaW5nLCBwYXJhbWV0ZXJzID0ge30sIG9wdGlvbnM6IHtyZXN1bHRGb3JtYXQ/OidTVFJJTkcnfCdKU09OJywgYnVzeVN0YXRlPzpib29sZWFuLCBoYW5kbGVFcnJvcnM/OmJvb2xlYW59ID0ge30pe1xyXG4gICAgXHJcbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIHNwZWNpZmllZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgb3B0aW9ucy5yZXN1bHRGb3JtYXQgPSBvcHRpb25zLnJlc3VsdEZvcm1hdCA/PyAnSlNPTic7XHJcbiAgICAgICAgb3B0aW9ucy5idXN5U3RhdGUgPSBvcHRpb25zLmJ1c3lTdGF0ZSA/PyB0cnVlO1xyXG4gICAgICAgIG9wdGlvbnMuaGFuZGxlRXJyb3JzID0gb3B0aW9ucy5oYW5kbGVFcnJvcnMgPz8gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICBpZihvcHRpb25zLmJ1c3lTdGF0ZSl7XHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZE1vZGFsQnVzeVN0YXRlKCk7IFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6KHI6YW55KSA9PiBhbnksIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSByZXF1ZXN0IG9iamVjdFxyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gbmV3IEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICBhcGlQYXRoLCBcclxuICAgICAgICAgICAgICAgIG9wdGlvbnMucmVzdWx0Rm9ybWF0ID09PSAnU1RSSU5HJyA/IEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QuU1RSSU5HIDogSFRUUE1hbmFnZXJQb3N0UmVxdWVzdC5KU09OXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICByZXF1ZXN0LnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xyXG5cclxuICAgICAgICAgICAgcmVxdWVzdC5zdWNjZXNzQ2FsbGJhY2sgPSAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlcXVlc3QuZXJyb3JDYWxsYmFjayA9IChlcnJvck1zZywgZXJyb3JDb2RlLCByZXNwb25zZSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuaGFuZGxlRXJyb3JzKXtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yRGlhbG9nKGVycm9yTXNnLCBlcnJvckNvZGUsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihlcnJvck1zZyArICcgJyArIGVycm9yQ29kZSArICcgJyArIHJlc3BvbnNlKSk7XHJcbiAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5maW5hbGx5Q2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGlmKG9wdGlvbnMuYnVzeVN0YXRlKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVtb3ZlTW9kYWxCdXN5U3RhdGUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuZXhlY3V0ZShyZXF1ZXN0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIFBlcmZvcm1zIGEgcmVxdWVzdCB0byBjaGFpbiBzZXZlcmFsIGFwaSBjYWxscyBpbnRvIGEgc2luZ2xlIGh0dHAgcmVxdWVzdCwgdmlhIHRoZSBjaGFpbiBzZXJ2aWNlcyBtZWNoYW5pc20gb2YgdGhlIHR1cmJvZnJhbWV3b3JrIEFQSS5cclxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiByZXNwb25zZSBvYmplY3RzLiBPbmUgZm9yIGVhY2ggb2YgdGhlIHJlcXVlc3QgY2FsbHMuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGFwaVBhdGggLSBBIHJlbGF0aXZlIFVSTCAoYmFzZWQgb24gdGhlIGRlZmluZWQgYmFzZSByb290IHVybCkgdGhhdCBkZWZpbmVzIHRoZSBwYXRoIHRvIHRoZSByb290IG9mIHRoZSBjaGFpbiBzZXJ2aWNlcyBjYWxsLlxyXG4gICAgICogICAgICAgIEZvciBleGFtcGxlOiAndHVyYm9zaXRlL2NoYWluL2NoYWluLXNlcnZpY2VzJ1xyXG4gICAgICogQHBhcmFtIHNlcnZpY2VzIC0gQW4gYXJyYXkgb2Ygb2JqZWN0cywgd2VyZSBlYWNoIG9iamVjdCBjb250YWlucyBhIHZhbGlkIHN0cnVjdHVyZSBmb3IgdGhlIGNoYWluIHNlcnZpY2VzIGNhbGwuIFxyXG4gICAgICogICAgICAgIFRva2VuIHBhcmFtZXRlciBpcyBub3QgbmVjZXNzYXJ5LCBpdCBpcyBhdXRvbWF0aWNhbGx5IGFwcGVuZGVkXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgZGVmaW5pbmcgc2V2ZXJhbCBvcHRpb25zIGZvciB0aGUgcmVxdWVzdDpcclxuICAgICAqICAgICAgICBidXN5U3RhdGU6IEVuYWJsZXMgb3IgZGlzYWJsZXMgdGhlIGJ1c3kgc3RhdGUgdG8gbG9jayB1c2VyIGludGVyYWN0aW9uIHdoaWxlIHBlcmZvcm1pbmcgdGhlIGh0dHAgY2FsbHMuIEVuYWJsZWQgYnkgZGVmYXVsdFxyXG4gICAgICogICAgICAgIGhhbmRsZUVycm9yczogRW5hYmxlZCBieSBkZWZhdWx0LiBJZiBzZXQgdG8gdHJ1ZSwgYW4gZXJyb3IgZGlhbG9nIHdpbGwgYmUgYXV0b21hdGljYWxseSBzaG93biB3aGVuIHRoZSBjYWxsIGZhaWxzLlxyXG4gICAgICogICAgICAgIElmIHNldCB0byBmYWxzZSwgdGhlIHByb21pc2Ugd2lsbCBnZW5lcmF0ZSBhIHJlamVjdCBlcnJvciB0aGF0IG11c3QgYmUgaGFuZGxlZCBieSBvdXIgY29kZS5cclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgcmVzcG9uc2UgZGF0YSBjb3JyZWN0bHkgcGFyc2VkIGlmIHRoZSByZXF1ZXN0IGlzIHN1Y2Nlc3NmdWwsIG9yIHJlamVjdHMgXHJcbiAgICAgKiAgICAgICAgICB3aXRoIGFuIGVycm9yIChjb250YWluaW5nIGFsbCB0aGUgZXJyb3IgcmVzcG9uc2UgZGV0YWlscykgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXHJcbiAgICAgKi9cclxuICAgIGNhbGxDaGFpbihhcGlQYXRoOnN0cmluZywgc2VydmljZXM6e31bXSwgb3B0aW9uczoge2J1c3lTdGF0ZT86Ym9vbGVhbiwgaGFuZGxlRXJyb3JzPzpib29sZWFufSA9IHt9KXtcclxuICAgIFxyXG4gICAgICAgIC8vIFNldCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIG5vbiBzcGVjaWZpZWQgcHJvcGVydGllc1xyXG4gICAgICAgIG9wdGlvbnMuYnVzeVN0YXRlID0gb3B0aW9ucy5idXN5U3RhdGUgPz8gdHJ1ZTtcclxuICAgICAgICBvcHRpb25zLmhhbmRsZUVycm9ycyA9IG9wdGlvbnMuaGFuZGxlRXJyb3JzID8/IHRydWU7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYob3B0aW9ucy5idXN5U3RhdGUpe1xyXG4gICAgICAgICAgIFxyXG4gICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5hZGRNb2RhbEJ1c3lTdGF0ZSgpOyBcclxuICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmU6KHI6YW55KSA9PiBhbnksIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBIVFRQTWFuYWdlclBvc3RSZXF1ZXN0KGFwaVBhdGgsIEhUVFBNYW5hZ2VyUG9zdFJlcXVlc3QuSlNPTik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0Lmlnbm9yZUdsb2JhbFBvc3RQYXJhbXMgPSB0cnVlOyAgICAgIFxyXG5cclxuICAgICAgICAgICAgcmVxdWVzdC5wYXJhbWV0ZXJzID0geyBzZXJ2aWNlczogc2VydmljZXMgfTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3Quc3VjY2Vzc0NhbGxiYWNrID0gKHJlc3BvbnNlOmFueVtdKSA9PiB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIH07ICAgICAgXHJcblxyXG4gICAgICAgICAgICByZXF1ZXN0LmVycm9yQ2FsbGJhY2sgPSAoZXJyb3JNc2csIGVycm9yQ29kZSwgcmVzcG9uc2UpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZihvcHRpb25zLmhhbmRsZUVycm9ycyl7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dFcnJvckRpYWxvZyhlcnJvck1zZywgZXJyb3JDb2RlLCByZXNwb25zZSk7ICAgIFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKGVycm9yTXNnICsgJyAnICsgZXJyb3JDb2RlICsgJyAnICsgcmVzcG9uc2UpKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LmZpbmFsbHlDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucy5idXN5U3RhdGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5yZW1vdmVNb2RhbEJ1c3lTdGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlci5leGVjdXRlKHJlcXVlc3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogQXV4IG1ldGhvZCB0byBzaG93IGFuIGVycm9yIGRpYWxvZyB3aGVuIGEgcmVxdWVzdCBmYWlscyBhbmQgZXJyb3IgaGFuZGxpbmcgaXMgZW5hYmxlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNob3dFcnJvckRpYWxvZyhlcnJvck1zZzpzdHJpbmcsIGVycm9yQ29kZTpudW1iZXIsIHJlc3BvbnNlOmFueSl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZXJyb3JNc2cgPSBlcnJvck1zZyArICdcXG5cXG4nICsgcmVzcG9uc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICBpZihTdHJpbmdVdGlscy5pc0VtcHR5KGVycm9yTXNnKSl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGVycm9yTXNnID0gJ1Vua25vd24gZXJyb3IuIE1ha2Ugc3VyZSBJbnRlcm5ldCBjb25uZWN0aW9uIGlzIGF2YWlsYWJsZSc7ICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZERpYWxvZyhEaWFsb2dFcnJvckNvbXBvbmVudCxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6JzUwdncnLFxyXG4gICAgICAgICAgICAgICAgdGV4dHM6IFsnRXJyb3I6ICcgKyBlcnJvckNvZGUsIGVycm9yTXNnXSxcclxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IFsnT2snXVxyXG4gICAgICAgICAgICB9KTsgXHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBQZXJmb3JtIHRoZSBsb2dvdXQgZm9yIHRoZSBjdXJyZW50bHkgbG9nZ2VkIHVzZXJcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBbiBvYmplY3QgZGVmaW5pbmcgc2V2ZXJhbCBvcHRpb25zIGZvciB0aGUgcmVxdWVzdDpcclxuICAgICAqICAgICAgICBoYW5kbGVFcnJvcnM6IEVuYWJsZWQgYnkgZGVmYXVsdC4gSWYgc2V0IHRvIHRydWUsIGFuIGVycm9yIGRpYWxvZyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2hvd24gd2hlbiB0aGUgY2FsbCBmYWlscy5cclxuICAgICAqICAgICAgICBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwcm9taXNlIHdpbGwgZ2VuZXJhdGUgYSByZWplY3QgZXJyb3IgdGhhdCBtdXN0IGJlIGhhbmRsZWQgYnkgb3VyIGNvZGUuXHJcbiAgICAgKiBcclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGNvcnJlY3RseSBpZiB0aGUgbG9nb3V0IGlzIGNvcnJlY3QsIG9yIHJlamVjdHMgd2l0aCBhbiBlcnJvciAoY29udGFpbmluZyBhbGwgdGhlIGVycm9yIFxyXG4gICAgICogICAgICAgICAgcmVzcG9uc2UgZGV0YWlscykgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXHJcbiAgICAgKi9cclxuICAgIGxvZ291dChvcHRpb25zOiB7aGFuZGxlRXJyb3JzPzpib29sZWFufSA9IHt9KSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8gU2V0IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3Igbm9uIHNwZWNpZmllZCBwcm9wZXJ0aWVzXHJcbiAgICAgICAgb3B0aW9ucy5oYW5kbGVFcnJvcnMgPSBvcHRpb25zLmhhbmRsZUVycm9ycyA/PyB0cnVlO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFkZE1vZGFsQnVzeVN0YXRlKCk7IFxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdCA9IG5ldyBIVFRQTWFuYWdlclBvc3RSZXF1ZXN0KHRoaXMubG9nT3V0U2VydmljZVVSSSk7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJlcXVlc3QucGFyYW1ldGVycyA9IHsgdG9rZW46IHRoaXMuX3Rva2VuIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LnN1Y2Nlc3NDYWxsYmFjayA9ICgpID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhclVzZXJBbmRUb2tlbigpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICByZXF1ZXN0LmVycm9yQ2FsbGJhY2sgPSAoZXJyb3JNc2csIGVycm9yQ29kZSwgcmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYob3B0aW9ucy5oYW5kbGVFcnJvcnMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0Vycm9yRGlhbG9nKGVycm9yTXNnLCBlcnJvckNvZGUsIHJlc3BvbnNlKTsgICAgXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoZXJyb3JNc2cgKyAnICcgKyBlcnJvckNvZGUgKyAnICcgKyByZXNwb25zZSkpO1xyXG4gICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVxdWVzdC5maW5hbGx5Q2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVtb3ZlTW9kYWxCdXN5U3RhdGUoKTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgdGhpcy5odHRwTWFuYWdlci5leGVjdXRlKHJlcXVlc3QpO1xyXG4gICAgICAgIH0pOyBcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEF1eCBtZXRob3QgdG8gY2xlYXIgYWxsIHRoZSBjdXJyZW50bHkgbG9nZ2VkIHVzZXIgZGF0YVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9jbGVhclVzZXJBbmRUb2tlbigpe1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMudXNlck5hbWUgPSAnJztcclxuICAgICAgICB0aGlzLnBhc3N3b3JkID0gJyc7XHJcbiAgICAgICAgdGhpcy5faXNMb2dnZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90b2tlbiA9ICcnO1xyXG4gICAgICAgIHRoaXMuaHR0cE1hbmFnZXIuc2V0R2xvYmFsUG9zdFBhcmFtKCd0b2tlbicsICctJyk7IFxyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -30,6 +30,10 @@ export class ViewsService extends SingletoneStrictClass {
30
30
  * Contains the reference to the currently loaded view component
31
31
  */
32
32
  this._currentComponentRef = null;
33
+ /**
34
+ * Flag that stores if any view is in the process of being loaded
35
+ */
36
+ this._isLoadingView = false;
33
37
  }
34
38
  /**
35
39
  * Tells if there's any view currently loaded on the application views container
@@ -51,20 +55,25 @@ export class ViewsService extends SingletoneStrictClass {
51
55
  }
52
56
  /**
53
57
  * Create a new view instance with the specified type and add it to the current application views container. Any currently loaded
54
- * view will be removed
58
+ * view will be removed.
55
59
  *
56
- * Make sure this method is called when all the visual components of the application have been created (ngAfterViewInit)
60
+ * If we push a view while another one is in the process of being loaded, the new push will be ignored.
57
61
  *
58
- * @param view The classname for the view that we want to create and add to the views container (must extend View base class).
62
+ * Make sure this method is called when all the visual components of the application have been created (ngAfterViewInit)
59
63
  *
60
- * @return The instance of the newly added and created view.
64
+ * @param view The classname for the view that we want to create (must extend View base class). A new angular object
65
+ * will be instantiated and loaded into the views container.
61
66
  */
62
67
  async pushView(view) {
63
- this.verifyViewsContainerExist();
64
68
  // If the loaded view is the same as the specified one, we will do nothing
65
69
  if (this._loadedViewClass === view) {
66
- return this._currentComponentRef;
70
+ return;
67
71
  }
72
+ // If a view is already being loaded, nothing to do
73
+ if (this._isLoadingView) {
74
+ return;
75
+ }
76
+ this._isLoadingView = true;
68
77
  // If a view is already loaded, we will unload it first
69
78
  if (this._loadedViewClass !== null) {
70
79
  await this.removeCurrentView();
@@ -83,18 +92,17 @@ export class ViewsService extends SingletoneStrictClass {
83
92
  fadeInPlayer.onDone(() => {
84
93
  this._currentComponentRef = newComponentRef;
85
94
  this._loadedViewClass = view;
95
+ this._isLoadingView = false;
86
96
  resolve();
87
97
  });
88
98
  fadeInPlayer.play();
89
99
  });
90
- return this._currentComponentRef;
91
100
  }
92
101
  /**
93
102
  * Delete the currently loaded view from the views container, and leave it empty.
94
103
  * If no view is currently loaded, this method will do nothing
95
104
  */
96
105
  async popView() {
97
- this.verifyViewsContainerExist();
98
106
  if (this._loadedViewClass !== null && this._currentComponentRef) {
99
107
  await this.removeCurrentView();
100
108
  }
@@ -103,6 +111,9 @@ export class ViewsService extends SingletoneStrictClass {
103
111
  * Aux method to remove the currently loaded view from the views container using a promise
104
112
  */
105
113
  removeCurrentView() {
114
+ if (this._viewContainerRef === null) {
115
+ throw new Error('Views container not defined. Please declare a <views-container> element in your application');
116
+ }
106
117
  return new Promise((resolve) => {
107
118
  if (this._currentComponentRef) {
108
119
  const element = this._currentComponentRef.location.nativeElement;
@@ -125,14 +136,6 @@ export class ViewsService extends SingletoneStrictClass {
125
136
  }
126
137
  });
127
138
  }
128
- /**
129
- * Auxiliary method to test if the views container instance is available on the application
130
- */
131
- verifyViewsContainerExist() {
132
- if (this._viewContainerRef === null) {
133
- throw new Error('Views container not defined. Please declare a <views-container> element in your application');
134
- }
135
- }
136
139
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ViewsService, deps: [{ token: i1.AnimationBuilder }], target: i0.ɵɵFactoryTarget.Injectable }); }
137
140
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.8", ngImport: i0, type: ViewsService, providedIn: 'root' }); }
138
141
  }
@@ -142,4 +145,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.8", ngImpor
142
145
  providedIn: 'root',
143
146
  }]
144
147
  }], ctorParameters: () => [{ type: i1.AnimationBuilder }] });
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1cmJvZ3VpLWFuZ3VsYXIvc3JjL21haW4vY29udHJvbGxlci92aWV3cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQTBCLFVBQVUsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUd2RTs7R0FFRztBQUlILE1BQU0sT0FBTyxZQUFhLFNBQVEscUJBQXFCO0lBcUJuRCxZQUFvQixnQkFBa0M7UUFFeEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRkUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQWxCdEQ7O1dBRUc7UUFDSyxxQkFBZ0IsR0FBc0IsSUFBSSxDQUFDO1FBR25EOztXQUVHO1FBQ0ssc0JBQWlCLEdBQTRCLElBQUksQ0FBQztRQUcxRDs7V0FFRztRQUNLLHlCQUFvQixHQUE4QixJQUFJLENBQUM7SUFNL0QsQ0FBQztJQUdEOztPQUVHO0lBQ0gsSUFBSSxZQUFZO1FBRVosT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssSUFBSSxDQUFDO0lBQzFDLENBQUM7SUFHRDs7Ozs7T0FLRztJQUNILElBQUksZ0JBQWdCLENBQUMsR0FBNEI7UUFFN0MsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxJQUFJLEVBQUU7WUFFakQsTUFBTSxJQUFJLEtBQUssQ0FBQywrRkFBK0YsQ0FBQyxDQUFDO1NBQ3BIO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEdBQUcsQ0FBQztJQUNqQyxDQUFDO0lBR0Q7Ozs7Ozs7OztPQVNHO0lBQ0gsS0FBSyxDQUFD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QztnQkFFSCxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7YUFFeEI7aUJBQU07Z0JBRUgsT0FBTyxFQUFFLENBQUM7YUFDYjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdEOztPQUVHO0lBQ0sseUJBQXlCO1FBRTdCLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksRUFBRTtZQUVqQyxNQUFNLElBQUksS0FBSyxDQUFDLDZGQUE2RixDQUFDLENBQUM7U0FDbEg7SUFDTCxDQUFDOzhHQXZLUSxZQUFZO2tIQUFaLFlBQVksY0FGWCxNQUFNOzsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUdXJib0dVSSBpcyBBIGxpYnJhcnkgdGhhdCBoZWxwcyB3aXRoIHRoZSBtb3N0IGNvbW1vbiBhbmQgZ2VuZXJpYyBVSSBlbGVtZW50cyBhbmQgZnVuY3Rpb25hbGl0aWVzXHJcbiAqXHJcbiAqIFdlYnNpdGUgOiAtPiBodHRwOi8vd3d3LnR1cmJvZ3VpLm9yZ1xyXG4gKiBMaWNlbnNlIDogLT4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gKiBMaWNlbnNlIFVybCA6IC0+IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gKiBDb3B5UmlnaHQgOiAtPiBDb3B5cmlnaHQgMjAxOCBFZGVydG9uZSBBZHZhbmRlZCBTb2x1dGlvbnMuIGh0dHBzOi8vd3d3LmVkZXJ0b25lLmNvbVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFR5cGUsIFZpZXdDb250YWluZXJSZWYsIEluamVjdGFibGUsIENvbXBvbmVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWaWV3IH0gZnJvbSAnLi4vbW9kZWwvY2xhc3Nlcy9WaWV3JztcclxuaW1wb3J0IHsgU2luZ2xldG9uZVN0cmljdENsYXNzIH0gZnJvbSAnLi4vbW9kZWwvY2xhc3Nlcy9TaW5nbGV0b25lU3RyaWN0Q2xhc3MnO1xuaW1wb3J0IHsgQW5pbWF0aW9uQnVpbGRlciwgYW5pbWF0ZSwgc3R5bGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxyXG5cclxuLyoqXHJcbiAqIE1hbmFnZXMgYWRkaW5nLCByZW1vdmluZyBhbmQgbWFuaXB1bGF0aW5nIHRoZSBhcHBsaWNhdGlvbiB2aWV3c1xyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdzU2VydmljZSBleHRlbmRzIFNpbmdsZXRvbmVTdHJpY3RDbGFzcyB7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VlIGdldHRlciBtZXRob2QgZm9yIGRvY3NcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbG9hZGVkVmlld0NsYXNzOiBUeXBlPFZpZXc+IHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VlIHNldHRlciBtZXRob2QgZm9yIGRvY3NcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IG51bGwgPSBudWxsO1xyXG4gICAgXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWlucyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50bHkgbG9hZGVkIHZpZXcgY29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2N1cnJlbnRDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxWaWV3PiB8IG51bGwgPSBudWxsO1xyXG4gICAgXHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhbmltYXRpb25CdWlsZGVyOiBBbmltYXRpb25CdWlsZGVyKSB7XHJcblxyXG5cdFx0c3VwZXIoVmlld3NTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGVyZSdzIGFueSB2aWV3IGN1cnJlbnRseSBsb2FkZWQgb24gdGhlIGFwcGxpY2F0aW9uIHZpZXdzIGNvbnRhaW5lclxyXG4gICAgICovXHJcbiAgICBnZXQgaXNWaWV3TG9hZGVkKCkge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkVmlld0NsYXNzICE9PSBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JlcyBhIHJlZmVyZW5jZSB0byB0aGUgdmlzdWFsIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRhaW5lciBmb3IgYWxsIHRoZSB2aWV3cy5cclxuICAgICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBhc3NpZ25lZCBieSB0aGUgdGctdmlld3MtY29udGFpbmVyIGNvbXBvbmVudCBvbmNlIGl0IGlzIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBWaWV3c0NvbnRhaW5lckNvbXBvbmVudCBmb3IgbW9yZSBpbmZvcm1hdGlvblxyXG4gICAgICovXHJcbiAgICBzZXQgdmlld0NvbnRhaW5lclJlZihyZWY6IFZpZXdDb250YWluZXJSZWYgfCBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmIChyZWYgIT09IG51bGwgJiYgdGhpcy5fdmlld0NvbnRhaW5lclJlZiAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWaWV3cyBjb250YWluZXIgYWxyZWFkeSBkZWZpbmVkLiBPbmx5IG9uZSB2aWV3cyBjb250YWluZXIgZWxlbWVudCBjYW4gZXhpc3Qgb24gYW4gYXBwbGljYXRpb24nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYgPSByZWY7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IHZpZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHR5cGUgYW5kIGFkZCBpdCB0byB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiB2aWV3cyBjb250YWluZXIuIEFueSBjdXJyZW50bHkgbG9hZGVkIFxyXG4gICAgICogdmlldyB3aWxsIGJlIHJlbW92ZWRcclxuICAgICAqXHJcbiAgICAgKiBNYWtlIHN1cmUgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYWxsIHRoZSB2aXN1YWwgY29tcG9uZW50cyBvZiB0aGUgYXBwbGljYXRpb24gaGF2ZSBiZWVuIGNyZWF0ZWQgKG5nQWZ0ZXJWaWV3SW5pdClcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmlldyBUaGUgY2xhc3NuYW1lIGZvciB0aGUgdmlldyB0aGF0IHdlIHdhbnQgdG8gY3JlYXRlIGFuZCBhZGQgdG8gdGhlIHZpZXdzIGNvbnRhaW5lciAobXVzdCBleHRlbmQgVmlldyBiYXNlIGNsYXNzKS5cclxuICAgICAqXHJcbiAgICAgKiBAcmV0dXJuIFRoZSBpbnN0YW5jZSBvZiB0aGUgbmV3bHkgYWRkZWQgYW5kIGNyZWF0ZWQgdmlldy4gXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHB1c2hWaWV3KHZpZXc6IFR5cGU8Vmlldz4pIHtcclxuICAgICAgICBcclxuICAgICAgICB0aGlzLnZlcmlmeVZpZXdzQ29udGFpbmVyRXhpc3QoKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIC8vIElmIHRoZSBsb2FkZWQgdmlldyBpcyB0aGUgc2FtZSBhcyB0aGUgc3BlY2lmaWVkIG9uZSwgd2Ugd2lsbCBkbyBub3RoaW5nXHJcbiAgICAgICAgaWYgKHRoaXMuX2xvYWRlZFZpZXdDbGFzcyA9PT0gdmlldykge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRDb21wb25lbnRSZWY7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgIC8vIElmIGEgdmlldyBpcyBhbHJlYWR5IGxvYWRlZCwgd2Ugd2lsbCB1bmxvYWQgaXQgZmlyc3RcclxuICAgICAgICBpZiAodGhpcy5fbG9hZGVkVmlld0NsYXNzICE9PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlbW92ZUN1cnJlbnRWaWV3KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBDcmVhdGUgdGhlIG5ldyB2aWV3XHJcbiAgICAgICAgY29uc3QgbmV3Q29tcG9uZW50UmVmID0gKHRoaXMuX3ZpZXdDb250YWluZXJSZWYgYXMgVmlld0NvbnRhaW5lclJlZikuY3JlYXRlQ29tcG9uZW50KHZpZXcpO1xyXG4gICAgICAgIG5ld0NvbXBvbmVudFJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcblxyXG4gICAgICAgIC8vIFNldCBpbml0aWFsIG9wYWNpdHkgdG8gMFxyXG4gICAgICAgIG5ld0NvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LnN0eWxlLm9wYWNpdHkgPSAnMCc7XHJcblxyXG4gICAgICAgIC8vIEZhZGUgaW4gdGhlIG5ldyB2aWV3XHJcbiAgICAgICAgY29uc3QgZmFkZUluUGxheWVyID0gdGhpcy5hbmltYXRpb25CdWlsZGVyLmJ1aWxkKFtcclxuICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwIH0pLFxyXG4gICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlJywgc3R5bGUoeyBvcGFjaXR5OiAxIH0pKVxyXG4gICAgICAgIF0pLmNyZWF0ZShuZXdDb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XHJcblxyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlKSA9PiB7XHJcbiAgICAgICAgICAgIGZhZGVJblBsYXllci5vbkRvbmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudENvbXBvbmVudFJlZiA9IG5ld0NvbXBvbmVudFJlZjtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2xvYWRlZFZpZXdDbGFzcyA9IHZpZXc7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBmYWRlSW5QbGF5ZXIucGxheSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudENvbXBvbmVudFJlZjtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGUgdGhlIGN1cnJlbnRseSBsb2FkZWQgdmlldyBmcm9tIHRoZSB2aWV3cyBjb250YWluZXIsIGFuZCBsZWF2ZSBpdCBlbXB0eS5cclxuICAgICAqIElmIG5vIHZpZXcgaXMgY3VycmVudGx5IGxvYWRlZCwgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHBvcFZpZXcoKSB7XHJcblxyXG4gICAgICAgIHRoaXMudmVyaWZ5Vmlld3NDb250YWluZXJFeGlzdCgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5fbG9hZGVkVmlld0NsYXNzICE9PSBudWxsICYmIHRoaXMuX2N1cnJlbnRDb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucmVtb3ZlQ3VycmVudFZpZXcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBcclxuICAgIFxyXG4gICAgLyoqXHJcbiAgICAgKiBBdXggbWV0aG9kIHRvIHJlbW92ZSB0aGUgY3VycmVudGx5IGxvYWRlZCB2aWV3IGZyb20gdGhlIHZpZXdzIGNvbnRhaW5lciB1c2luZyBhIHByb21pc2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSByZW1vdmVDdXJyZW50VmlldygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50Q29tcG9uZW50UmVmKSB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9jdXJyZW50Q29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZhZGVPdXRQbGF5ZXIgPSB0aGlzLmFuaW1hdGlvbkJ1aWxkZXIuYnVpbGQoW1xyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMSB9KSxcclxuICAgICAgICAgICAgICAgICAgICBhbmltYXRlKCczMDBtcyBlYXNlJywgc3R5bGUoeyBvcGFjaXR5OiAwIH0pKVxyXG4gICAgICAgICAgICAgICAgXSkuY3JlYXRlKGVsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZhZGVPdXRQbGF5ZXIub25Eb25lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLl92aWV3Q29udGFpbmVyUmVmICE9PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY2xlYXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY3VycmVudENvbXBvbmVudFJlZiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9hZGVkVmlld0NsYXNzID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICBmYWRlT3V0UGxheWVyLnBsYXkoKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdXhpbGlhcnkgbWV0aG9kIHRvIHRlc3QgaWYgdGhlIHZpZXdzIGNvbnRhaW5lciBpbnN0YW5jZSBpcyBhdmFpbGFibGUgb24gdGhlIGFwcGxpY2F0aW9uXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdmVyaWZ5Vmlld3NDb250YWluZXJFeGlzdCgpIHtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdDb250YWluZXJSZWYgPT09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVmlld3MgY29udGFpbmVyIG5vdCBkZWZpbmVkLiBQbGVhc2UgZGVjbGFyZSBhIDx2aWV3cy1jb250YWluZXI+IGVsZW1lbnQgaW4geW91ciBhcHBsaWNhdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iXX0=
148
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1cmJvZ3VpLWFuZ3VsYXIvc3JjL21haW4vY29udHJvbGxlci92aWV3cy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O0dBT0c7QUFFSCxPQUFPLEVBQTBCLFVBQVUsRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFFakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDL0UsT0FBTyxFQUFvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUd2RTs7R0FFRztBQUlILE1BQU0sT0FBTyxZQUFhLFNBQVEscUJBQXFCO0lBMkJuRCxZQUFvQixnQkFBa0M7UUFFeEQsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRkUscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXhCdEQ7O1dBRUc7UUFDSyxxQkFBZ0IsR0FBc0IsSUFBSSxDQUFDO1FBR25EOztXQUVHO1FBQ0ssc0JBQWlCLEdBQTRCLElBQUksQ0FBQztRQUcxRDs7V0FFRztRQUNLLHlCQUFvQixHQUE4QixJQUFJLENBQUM7UUFHL0Q7O1dBRUc7UUFDSyxtQkFBYyxHQUFHLEtBQUssQ0FBQztJQU0vQixDQUFDO0lBR0Q7O09BRUc7SUFDSCxJQUFJLFlBQVk7UUFFWixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxJQUFJLENBQUM7SUFDMUMsQ0FBQztJQUdEOzs7OztPQUtHO0lBQ0gsSUFBSSxnQkFBZ0IsQ0FBQyxHQUE0QjtRQUU3QyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksRUFBRTtZQUVqRCxNQUFNLElBQUksS0FBSyxDQUFDLCtGQUErRixDQUFDLENBQUM7U0FDcEg7UUFFRCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsR0FBRyxDQUFDO0lBQ2pD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S0FBSyxFQUFFLENBQUM7cUJBQ2xDO29CQUVELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7b0JBQzdCLE9BQU8sRUFBRSxDQUFDO2dCQUNkLENBQUMsQ0FBQyxDQUFDO2dCQUVILGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUV4QjtpQkFBTTtnQkFFSCxPQUFPLEVBQUUsQ0FBQzthQUNiO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzhHQTFLUSxZQUFZO2tIQUFaLFlBQVksY0FGWCxNQUFNOzsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBUdXJib0dVSSBpcyBBIGxpYnJhcnkgdGhhdCBoZWxwcyB3aXRoIHRoZSBtb3N0IGNvbW1vbiBhbmQgZ2VuZXJpYyBVSSBlbGVtZW50cyBhbmQgZnVuY3Rpb25hbGl0aWVzXHJcbiAqXHJcbiAqIFdlYnNpdGUgOiAtPiBodHRwOi8vd3d3LnR1cmJvZ3VpLm9yZ1xyXG4gKiBMaWNlbnNlIDogLT4gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMC4gWW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxyXG4gKiBMaWNlbnNlIFVybCA6IC0+IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxyXG4gKiBDb3B5UmlnaHQgOiAtPiBDb3B5cmlnaHQgMjAxOCBFZGVydG9uZSBBZHZhbmRlZCBTb2x1dGlvbnMuIGh0dHBzOi8vd3d3LmVkZXJ0b25lLmNvbVxyXG4gKi9cclxuXHJcbmltcG9ydCB7IFR5cGUsIFZpZXdDb250YWluZXJSZWYsIEluamVjdGFibGUsIENvbXBvbmVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWaWV3IH0gZnJvbSAnLi4vbW9kZWwvY2xhc3Nlcy9WaWV3JztcclxuaW1wb3J0IHsgU2luZ2xldG9uZVN0cmljdENsYXNzIH0gZnJvbSAnLi4vbW9kZWwvY2xhc3Nlcy9TaW5nbGV0b25lU3RyaWN0Q2xhc3MnO1xuaW1wb3J0IHsgQW5pbWF0aW9uQnVpbGRlciwgYW5pbWF0ZSwgc3R5bGUgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcblxyXG5cclxuLyoqXHJcbiAqIE1hbmFnZXMgYWRkaW5nLCByZW1vdmluZyBhbmQgbWFuaXB1bGF0aW5nIHRoZSBhcHBsaWNhdGlvbiB2aWV3c1xyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdzU2VydmljZSBleHRlbmRzIFNpbmdsZXRvbmVTdHJpY3RDbGFzcyB7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VlIGdldHRlciBtZXRob2QgZm9yIGRvY3NcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbG9hZGVkVmlld0NsYXNzOiBUeXBlPFZpZXc+IHwgbnVsbCA9IG51bGw7XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VlIHNldHRlciBtZXRob2QgZm9yIGRvY3NcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZiB8IG51bGwgPSBudWxsO1xyXG4gICAgXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDb250YWlucyB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50bHkgbG9hZGVkIHZpZXcgY29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2N1cnJlbnRDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxWaWV3PiB8IG51bGwgPSBudWxsO1xyXG4gICAgXHJcbiAgICBcclxuICAgIC8qKlxyXG4gICAgICogRmxhZyB0aGF0IHN0b3JlcyBpZiBhbnkgdmlldyBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBsb2FkZWRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfaXNMb2FkaW5nVmlldyA9IGZhbHNlO1xyXG4gICAgXHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBhbmltYXRpb25CdWlsZGVyOiBBbmltYXRpb25CdWlsZGVyKSB7XHJcblxyXG5cdFx0c3VwZXIoVmlld3NTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUZWxscyBpZiB0aGVyZSdzIGFueSB2aWV3IGN1cnJlbnRseSBsb2FkZWQgb24gdGhlIGFwcGxpY2F0aW9uIHZpZXdzIGNvbnRhaW5lclxyXG4gICAgICovXHJcbiAgICBnZXQgaXNWaWV3TG9hZGVkKCkge1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGVkVmlld0NsYXNzICE9PSBudWxsO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIFN0b3JlcyBhIHJlZmVyZW5jZSB0byB0aGUgdmlzdWFsIGVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGNvbnRhaW5lciBmb3IgYWxsIHRoZSB2aWV3cy5cclxuICAgICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBhc3NpZ25lZCBieSB0aGUgdGctdmlld3MtY29udGFpbmVyIGNvbXBvbmVudCBvbmNlIGl0IGlzIGNyZWF0ZWQuXHJcbiAgICAgKlxyXG4gICAgICogQHNlZSBWaWV3c0NvbnRhaW5lckNvbXBvbmVudCBmb3IgbW9yZSBpbmZvcm1hdGlvblxyXG4gICAgICovXHJcbiAgICBzZXQgdmlld0NvbnRhaW5lclJlZihyZWY6IFZpZXdDb250YWluZXJSZWYgfCBudWxsKSB7XHJcblxyXG4gICAgICAgIGlmIChyZWYgIT09IG51bGwgJiYgdGhpcy5fdmlld0NvbnRhaW5lclJlZiAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWaWV3cyBjb250YWluZXIgYWxyZWFkeSBkZWZpbmVkLiBPbmx5IG9uZSB2aWV3cyBjb250YWluZXIgZWxlbWVudCBjYW4gZXhpc3Qgb24gYW4gYXBwbGljYXRpb24nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYgPSByZWY7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ3JlYXRlIGEgbmV3IHZpZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHR5cGUgYW5kIGFkZCBpdCB0byB0aGUgY3VycmVudCBhcHBsaWNhdGlvbiB2aWV3cyBjb250YWluZXIuIEFueSBjdXJyZW50bHkgbG9hZGVkIFxyXG4gICAgICogdmlldyB3aWxsIGJlIHJlbW92ZWQuXHJcbiAgICAgKiBcclxuICAgICAqIElmIHdlIHB1c2ggYSB2aWV3IHdoaWxlIGFub3RoZXIgb25lIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGxvYWRlZCwgdGhlIG5ldyBwdXNoIHdpbGwgYmUgaWdub3JlZC5cclxuICAgICAqXHJcbiAgICAgKiBNYWtlIHN1cmUgdGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYWxsIHRoZSB2aXN1YWwgY29tcG9uZW50cyBvZiB0aGUgYXBwbGljYXRpb24gaGF2ZSBiZWVuIGNyZWF0ZWQgKG5nQWZ0ZXJWaWV3SW5pdClcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gdmlldyBUaGUgY2xhc3NuYW1lIGZvciB0aGUgdmlldyB0aGF0IHdlIHdhbnQgdG8gY3JlYXRlIChtdXN0IGV4dGVuZCBWaWV3IGJhc2UgY2xhc3MpLiBBIG5ldyBhbmd1bGFyIG9iamVjdCBcclxuICAgICAqICAgICAgICB3aWxsIGJlIGluc3RhbnRpYXRlZCBhbmQgbG9hZGVkIGludG8gdGhlIHZpZXdzIGNvbnRhaW5lci5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHVzaFZpZXcodmlldzogVHlwZTxWaWV3Pikge1xyXG4gICAgICAgIFxyXG4gICAgICAgIC8vIElmIHRoZSBsb2FkZWQgdmlldyBpcyB0aGUgc2FtZSBhcyB0aGUgc3BlY2lmaWVkIG9uZSwgd2Ugd2lsbCBkbyBub3RoaW5nXHJcbiAgICAgICAgaWYgKHRoaXMuX2xvYWRlZFZpZXdDbGFzcyA9PT0gdmlldykge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAvLyBJZiBhIHZpZXcgaXMgYWxyZWFkeSBiZWluZyBsb2FkZWQsIG5vdGhpbmcgdG8gZG9cclxuICAgICAgICBpZih0aGlzLl9pc0xvYWRpbmdWaWV3KXtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5faXNMb2FkaW5nVmlldyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAvLyBJZiBhIHZpZXcgaXMgYWxyZWFkeSBsb2FkZWQsIHdlIHdpbGwgdW5sb2FkIGl0IGZpcnN0XHJcbiAgICAgICAgaWYgKHRoaXMuX2xvYWRlZFZpZXdDbGFzcyAhPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVDdXJyZW50VmlldygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gQ3JlYXRlIHRoZSBuZXcgdmlld1xyXG4gICAgICAgIGNvbnN0IG5ld0NvbXBvbmVudFJlZiA9ICh0aGlzLl92aWV3Q29udGFpbmVyUmVmIGFzIFZpZXdDb250YWluZXJSZWYpLmNyZWF0ZUNvbXBvbmVudCh2aWV3KTtcclxuICAgICAgICBuZXdDb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgICAvLyBTZXQgaW5pdGlhbCBvcGFjaXR5IHRvIDBcclxuICAgICAgICBuZXdDb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudC5zdHlsZS5vcGFjaXR5ID0gJzAnO1xyXG5cclxuICAgICAgICAvLyBGYWRlIGluIHRoZSBuZXcgdmlld1xyXG4gICAgICAgIGNvbnN0IGZhZGVJblBsYXllciA9IHRoaXMuYW5pbWF0aW9uQnVpbGRlci5idWlsZChbXHJcbiAgICAgICAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCB9KSxcclxuICAgICAgICAgICAgYW5pbWF0ZSgnMzAwbXMgZWFzZScsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSlcclxuICAgICAgICBdKS5jcmVhdGUobmV3Q29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpO1xyXG5cclxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBmYWRlSW5QbGF5ZXIub25Eb25lKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRDb21wb25lbnRSZWYgPSBuZXdDb21wb25lbnRSZWY7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2FkZWRWaWV3Q2xhc3MgPSB2aWV3O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5faXNMb2FkaW5nVmlldyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZmFkZUluUGxheWVyLnBsYXkoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWxldGUgdGhlIGN1cnJlbnRseSBsb2FkZWQgdmlldyBmcm9tIHRoZSB2aWV3cyBjb250YWluZXIsIGFuZCBsZWF2ZSBpdCBlbXB0eS5cclxuICAgICAqIElmIG5vIHZpZXcgaXMgY3VycmVudGx5IGxvYWRlZCwgdGhpcyBtZXRob2Qgd2lsbCBkbyBub3RoaW5nXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHBvcFZpZXcoKSB7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLl9sb2FkZWRWaWV3Q2xhc3MgIT09IG51bGwgJiYgdGhpcy5fY3VycmVudENvbXBvbmVudFJlZikge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZW1vdmVDdXJyZW50VmlldygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIEF1eCBtZXRob2QgdG8gcmVtb3ZlIHRoZSBjdXJyZW50bHkgbG9hZGVkIHZpZXcgZnJvbSB0aGUgdmlld3MgY29udGFpbmVyIHVzaW5nIGEgcHJvbWlzZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHJlbW92ZUN1cnJlbnRWaWV3KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh0aGlzLl92aWV3Q29udGFpbmVyUmVmID09PSBudWxsKSB7XHJcblxyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZpZXdzIGNvbnRhaW5lciBub3QgZGVmaW5lZC4gUGxlYXNlIGRlY2xhcmUgYSA8dmlld3MtY29udGFpbmVyPiBlbGVtZW50IGluIHlvdXIgYXBwbGljYXRpb24nKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRDb21wb25lbnRSZWYpIHtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2N1cnJlbnRDb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudDtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgY29uc3QgZmFkZU91dFBsYXllciA9IHRoaXMuYW5pbWF0aW9uQnVpbGRlci5idWlsZChbXHJcbiAgICAgICAgICAgICAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGUoJzMwMG1zIGVhc2UnLCBzdHlsZSh7IG9wYWNpdHk6IDAgfSkpXHJcbiAgICAgICAgICAgICAgICBdKS5jcmVhdGUoZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgICAgICAgZmFkZU91dFBsYXllci5vbkRvbmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuX3ZpZXdDb250YWluZXJSZWYgIT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jdXJyZW50Q29tcG9uZW50UmVmID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2FkZWRWaWV3Q2xhc3MgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIGZhZGVPdXRQbGF5ZXIucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==