@eui/components 18.0.1 → 18.0.2-snapshot-1718193852574

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.
@@ -1,5 +1,6 @@
1
1
  import { Component, HostBinding, ViewEncapsulation, Input, Output, EventEmitter, HostListener, booleanAttribute, } from '@angular/core';
2
2
  import { consumeEvent } from '@eui/core';
3
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
3
4
  import * as i0 from "@angular/core";
4
5
  import * as i1 from "@angular/common";
5
6
  import * as i2 from "@angular/router";
@@ -16,12 +17,7 @@ export class EuiMenuItemComponent {
16
17
  return this.item?.children?.length > 0 ? true : undefined;
17
18
  }
18
19
  get ariaExpanded() {
19
- if (this.item.children) {
20
- return this.item.expanded ? true : false;
21
- }
22
- else {
23
- return undefined;
24
- }
20
+ return this.item.children ? coerceBooleanProperty(this.item.expanded) : undefined;
25
21
  }
26
22
  get ariaDisabled() {
27
23
  return this.item.disabled;
@@ -101,7 +97,6 @@ export class EuiMenuItemComponent {
101
97
  }
102
98
  /**
103
99
  * Check if an element is visible in the viewport
104
- * @param el
105
100
  * @param partiallyVisible
106
101
  */
107
102
  elementIsVisibleInViewport(partiallyVisible = false) {
@@ -121,31 +116,16 @@ export class EuiMenuItemComponent {
121
116
  this.elementRef.nativeElement.scrollIntoView(properties);
122
117
  }
123
118
  getTooltipFromItem(item) {
124
- if (item.tagLabel && item.label) {
125
- return item.label + ' (' + item.tagLabel + ')';
126
- }
127
- else if (item.label) {
128
- return item.label;
129
- }
130
- else if (item.tagLabel) {
131
- return item.tagLabel;
132
- }
133
- return null;
119
+ return item.label && item.tagLabel ? `${item.label} (${item.tagLabel})` : item.label ||
120
+ item.tagLabel ||
121
+ null;
134
122
  }
135
123
  getAriaLabel() {
136
- if (this.item.label) {
137
- return this.item.label;
138
- }
139
- else if (this.item.tagLabel) {
140
- return this.item.tagLabel;
141
- }
142
- else if (this.item.actionIcon && this.item.actionIcon.label) {
143
- return this.item.actionIcon.label;
144
- }
145
- else if (this.item.iconLabel) {
146
- return this.item.iconLabel;
147
- }
148
- return 'Eui menu item';
124
+ return this.item.label ||
125
+ this.item.tagLabel ||
126
+ (this.item.actionIcon && this.item.actionIcon.label) ||
127
+ this.item.iconLabel ||
128
+ 'Eui menu item';
149
129
  }
150
130
  /**
151
131
  * Returns the default eui-menu-item class on the HostBinding function
@@ -211,4 +191,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
211
191
  type: HostListener,
212
192
  args: ['click', ['$event']]
213
193
  }] } });
214
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLW1lbnUtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktbWVudS9ldWktbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2V1aS1tZW51L2V1aS1tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFJWixnQkFBZ0IsR0FFbkIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7O0FBU3pDLE1BQU0sT0FBTyxvQkFBb0I7SUFLN0IsSUFDVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUNJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzdELENBQUM7SUFDRCxJQUNJLFlBQVk7UUFDWixJQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDN0MsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDO0lBQ0wsQ0FBQztJQUNELElBQ0ksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDN0IsQ0FBQztJQXFCRCxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBNUNoQixTQUFJLEdB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QUFPO2dCQUlVLFFBQVE7c0JBQXJDLFdBQVc7dUJBQUMsZUFBZTtnQkFFeEIsWUFBWTtzQkFEZixXQUFXO3VCQUFDLG9CQUFvQjtnQkFLN0IsWUFBWTtzQkFEZixXQUFXO3VCQUFDLG9CQUFvQjtnQkFTN0IsWUFBWTtzQkFEZixXQUFXO3VCQUFDLG9CQUFvQjtnQkFLeEIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBVWlDLE9BQU87c0JBQTlDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxXQUFXO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLG9CQUFvQjtzQkFBM0QsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxnQkFBZ0I7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBNEIvQixlQUFlO3NCQURyQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIE9uSW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIEVsZW1lbnRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9jdXNhYmxlT3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuXG5pbXBvcnQgeyBjb25zdW1lRXZlbnQgfSBmcm9tICdAZXVpL2NvcmUnO1xuaW1wb3J0IHsgRXVpTWVudUl0ZW0gfSBmcm9tICcuL21vZGVscy9ldWktbWVudS1pdGVtLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktbWVudS1pdGVtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLW1lbnUtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc3R5bGVzL19pbmRleC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbn0pXG5leHBvcnQgY2xhc3MgRXVpTWVudUl0ZW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgRm9jdXNhYmxlT3B0aW9uIHtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZSA9ICdtZW51aXRlbSc7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBhcmlhTGFiZWwgPSAnJztcblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MnKVxuICAgIHB1YmxpYyBnZXQgY3NzQ2xhc3NlcygpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRDc3NDbGFzc2VzKCk7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpIHRhYmluZGV4ID0gJy0xJztcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oYXNwb3B1cCcpXG4gICAgZ2V0IGFyaWFIYXNQb3B1cCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbT8uY2hpbGRyZW4/Lmxlbmd0aCA+IDA/IHRydWUgOiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJylcbiAgICBnZXQgYXJpYUV4cGFuZGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZih0aGlzLml0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW0uZXhwYW5kZWQgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJylcbiAgICBnZXQgYXJpYURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtLmRpc2FibGVkXG4gICAgfVxuXG4gICAgQElucHV0KCkgaXRlbTogRXVpTWVudUl0ZW07XG4gICAgQElucHV0KCkgcGFyZW50OiBFdWlNZW51SXRlbTtcbiAgICBAT3V0cHV0KCkgZXhwYW5kVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlNZW51SXRlbT4oKTtcbiAgICBAT3V0cHV0KCkgaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlNZW51SXRlbT4oKTtcblxuICAgIGV4cGFuZE1lbnVMYWJlbCA9ICdFeHBhbmQnO1xuICAgIGNvbGxhcHNlTWVudUxhYmVsID0gJ0NvbGxhcHNlJztcblxuICAgIGlzVXJsSXRlbSA9IGZhbHNlO1xuICAgIGlzTGlua0l0ZW0gPSBmYWxzZTtcbiAgICBpc0xhYmVsSXRlbSA9IGZhbHNlO1xuICAgIGlzQWN0aW9uSWNvbkZvY3VzZWQgPSBmYWxzZTtcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNJY29uOiBib29sZWFuO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNUb29sdGlwOiBib29sZWFuO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0NvbGxhcHNlZDogYm9vbGVhbjtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzQ29sbGFwc2VkSW5pdGlhbHM6IGJvb2xlYW47XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc0JvbGRSb290TGV2ZWw6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc1VybEl0ZW0gPSAodGhpcy5pdGVtLnVybCB8fCB0aGlzLml0ZW0udXJsRXh0ZXJuYWwgfHwgdGhpcy5pdGVtLmNoaWxkcmVuIHx8IHRoaXMuaXRlbS5jb21tYW5kKSAmJiAhdGhpcy5pdGVtLmxpbms7XG4gICAgICAgIHRoaXMuaXNMYWJlbEl0ZW0gPSAhdGhpcy5pdGVtLnVybCAmJiAhdGhpcy5pdGVtLnVybEV4dGVybmFsICYmICF0aGlzLml0ZW0uY29tbWFuZCAmJiAhdGhpcy5pdGVtLmNoaWxkcmVuICYmICF0aGlzLml0ZW0ubGluaztcblxuICAgICAgICB0aGlzLmlzTGlua0l0ZW0gPSAhdGhpcy5pc1VybEl0ZW0gJiYgIXRoaXMuaXNMYWJlbEl0ZW07XG4gICAgICAgIHRoaXMuYXJpYUxhYmVsID0gdGhpcy5nZXRBcmlhTGFiZWwoKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLml0ZW0gJiYgY2hhbmdlcy5pdGVtLmlzRmlyc3RDaGFuZ2UoKSkge1xuICAgICAgICAgICAgdGhpcy5pdGVtID0gY2hhbmdlcy5pdGVtLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmKCF0aGlzLml0ZW0udXJsRXh0ZXJuYWxUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW0udXJsRXh0ZXJuYWxUYXJnZXQgPSAnX2JsYW5rJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMuaXRlbS5maWx0ZXJlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtLmZpbHRlcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmKHRoaXMuaXRlbS5kaXNhYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtLnZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIHB1YmxpYyBzdG9wUHJvcGFnYXRpb24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQodGhpcy5pdGVtKTtcbiAgICAgICAgY29uc3VtZUV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBnZXQgbWVudUl0ZW1Ub29sdGlwKCk6IHN0cmluZyB7XG4gICAgICAgIGlmICh0aGlzLmhhc1Rvb2x0aXAgJiYgdGhpcy5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS50b29sdGlwIHx8IHRoaXMuZ2V0VG9vbHRpcEZyb21JdGVtKHRoaXMuaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2xpY2soZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbUNsaWNrLmVtaXQodGhpcy5pdGVtKTtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICBjb25zdW1lRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkV4cGFuZFRvZ2dsZShldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5leHBhbmRUb2dnbGUuZW1pdCh0aGlzLml0ZW0pO1xuICAgICAgICBjb25zdW1lRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkFjdGlvbkljb25DbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtLmFjdGlvbkljb24/LmFjdGlvbihldmVudCk7XG4gICAgICAgIGNvbnN1bWVFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgb25BY3Rpb25JY29uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW0uYWN0aW9uSWNvbj8uYWN0aW9uKGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnN1bWVFdmVudChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNBY3Rpb25JY29uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZXVpLW1lbnUtaXRlbV9fbGluay1hY3Rpb24taWNvbicpLmZvY3VzKCk7XG4gICAgICAgIHRoaXMuaXNBY3Rpb25JY29uRm9jdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgb25BY3Rpb25JY29uRm9jdXNPdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNBY3Rpb25JY29uRm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhbiBlbGVtZW50IGlzIHZpc2libGUgaW4gdGhlIHZpZXdwb3J0XG4gICAgICogQHBhcmFtIGVsXG4gICAgICogQHBhcmFtIHBhcnRpYWxseVZpc2libGVcbiAgICAgKi9cbiAgICBlbGVtZW50SXNWaXNpYmxlSW5WaWV3cG9ydChwYXJ0aWFsbHlWaXNpYmxlID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQgfSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB7IGlubmVySGVpZ2h0LCBpbm5lcldpZHRoIH0gPSB3aW5kb3c7XG4gICAgICAgIHJldHVybiBwYXJ0aWFsbHlWaXNpYmxlXG4gICAgICAgICAgICA/ICgodG9wID4gMCAmJiB0b3AgPCBpbm5lckhlaWdodCkgfHxcbiAgICAgICAgICAgICAgICAoYm90dG9tID4gMCAmJiBib3R0b20gPCBpbm5lckhlaWdodCkpICYmXG4gICAgICAgICAgICAoKGxlZnQgPiAwICYmIGxlZnQgPCBpbm5lcldpZHRoKSB8fCAocmlnaHQgPiAwICYmIHJpZ2h0IDwgaW5uZXJXaWR0aCkpXG4gICAgICAgICAgICA6IHRvcCA+PSAwICYmIGxlZnQgPj0gMCAmJiBib3R0b20gPD0gaW5uZXJIZWlnaHQgJiYgcmlnaHQgPD0gaW5uZXJXaWR0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTY3JvbGwgdGhlIGVsZW1lbnQgaW50byB2aWV3XG4gICAgICogQHBhcmFtIHByb3BlcnRpZXNcbiAgICAgKi9cbiAgICBzY3JvbGxJbnRvVmlldyhwcm9wZXJ0aWVzOiB1bmtub3duKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbEludG9WaWV3KHByb3BlcnRpZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VG9vbHRpcEZyb21JdGVtKGl0ZW06IEV1aU1lbnVJdGVtKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKGl0ZW0udGFnTGFiZWwgJiYgaXRlbS5sYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubGFiZWwgKyAnICgnICsgaXRlbS50YWdMYWJlbCArICcpJztcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS5sYWJlbDtcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnRhZ0xhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gaXRlbS50YWdMYWJlbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5pdGVtLmxhYmVsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtLmxhYmVsO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbS50YWdMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS50YWdMYWJlbDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLml0ZW0uYWN0aW9uSWNvbiAmJiB0aGlzLml0ZW0uYWN0aW9uSWNvbi5sYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbS5hY3Rpb25JY29uLmxhYmVsO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXRlbS5pY29uTGFiZWwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW0uaWNvbkxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnRXVpIG1lbnUgaXRlbSc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgZGVmYXVsdCBldWktbWVudS1pdGVtIGNsYXNzIG9uIHRoZSBIb3N0QmluZGluZyBmdW5jdGlvblxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRDc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZXVpLW1lbnUtaXRlbScsXG4gICAgICAgICAgICAhdGhpcy5wYXJlbnQgJiYgdGhpcy5oYXNCb2xkUm9vdExldmVsID8gJ2V1aS1tZW51LWl0ZW0tLWJvbGQnIDogJycsXG4gICAgICAgIF0uam9pbignICcpLnRyaW0oKTtcbiAgICB9XG59XG4iLCJAaWYgKGl0ZW0udmlzaWJsZSAmJiBpdGVtLmZpbHRlcmVkKSB7XG4gICAgQGlmIChpc0xhYmVsSXRlbSkge1xuICAgICAgICA8bGlcbiAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgIGlkPVwie3tpdGVtLmlkfX1cIlxuICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19jb250ZW50XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZTJlXT1cIml0ZW0uZTJlQXR0clwiXG4gICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbS0tZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2V1aVRvb2x0aXBdPVwibWVudUl0ZW1Ub29sdGlwXCJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgcG9zaXRpb249XCJhZnRlclwiPlxuXG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluayBldWktbWVudS1pdGVtX19saW5rLWNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0tZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWFjdGl2ZV09XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWhhcy1zdWJdPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgICAgICAgICAgW2V1aVRvb2x0aXBdPVwibWVudUl0ZW1Ub29sdGlwXCJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbj1cImFmdGVyXCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1zdGFydC1ibG9ja1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtSWNvbkNvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1jb250ZW50LWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWxhYmVsLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWxhYmVsLWNhdGVnb3J5XCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1lbmQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbUVuZENvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbGk+XG4gICAgfVxuXG4gICAgQGlmIChpc1VybEl0ZW0pIHtcbiAgICAgICAgPGxpXG4gICAgICAgICAgICByb2xlPVwibm9uZVwiXG4gICAgICAgICAgICBpZD1cInt7aXRlbS5pZH19XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtZTJlXT1cIml0ZW0uZTJlQXR0clwiXG4gICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2NvbnRlbnRcIlxuICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW0tLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW0tLWV4cGFuZGVkXT1cIml0ZW0uZXhwYW5kZWQgfHwgaXRlbS5maWx0ZXJlZFwiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIj5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0tZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWFjdGl2ZV09XCJpdGVtLmFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWhhcy1zdWJdPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiaXRlbS51cmwgPyBpdGVtLnVybCA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rQWN0aXZlXT1cIml0ZW0udXJsID8gJ2V1aS1tZW51LWl0ZW1fX2xpbmstLWFjdGl2ZScgOiAnJ1wiXG4gICAgICAgICAgICAgICAgW2V1aVRvb2x0aXBdPVwibWVudUl0ZW1Ub29sdGlwXCJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbj1cImFmdGVyXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibGlua0NvbnRlbnRcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGl0ZW0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2E+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnRcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2xpPlxuICAgIH1cblxuICAgIEBpZiAoaXNMaW5rSXRlbSkge1xuICAgICAgICA8bGlcbiAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgIGlkPVwie3tpdGVtLmlkfX1cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1lMmVdPVwiaXRlbS5lMmVBdHRyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fY29udGVudFwiXG4gICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbS0tZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbS0tZXhwYW5kZWRdPVwiaXRlbS5leHBhbmRlZCB8fCBpdGVtLmZpbHRlcmVkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmtcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtX19saW5rLS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0tYWN0aXZlXT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0taGFzLXN1Yl09XCJpdGVtLmNoaWxkcmVuPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICAgICAgICBbZXVpVG9vbHRpcF09XCJtZW51SXRlbVRvb2x0aXBcIlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uPVwiYWZ0ZXJcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaW5rQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbGk+XG4gICAgfVxufVxuXG48bmctdGVtcGxhdGUgI2xpbmtDb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLXN0YXJ0LWJsb2NrXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1JY29uQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWNvbnRlbnQtYmxvY2tcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstbGFiZWwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstbGFiZWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXRlbS51cmxFeHRlcm5hbCAmJiBpdGVtLnVybEV4dGVybmFsVGFyZ2V0ID09PSAnX2JsYW5rJ1wiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19sYWJlbC1leHRlcm5hbFwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImV1aS1lY2wtZXh0ZXJuYWxcIlxuICAgICAgICAgICAgICAgIHNpemU9XCIyeHNcIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJleHRlcm5hbCBsaW5rIGljb25cIlxuICAgICAgICAgICAgICAgIGV1aUVuZD5cbiAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWVuZC1ibG9ja1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtRW5kQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUFJPSkVDVEVEIENPTlRFTlQgQkxPQ0sgLS0+XG48bmctdGVtcGxhdGUgI2NvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQUk9KRUNURUQgU1RBUlQgQkxPQ0sgLS0+XG48bmctdGVtcGxhdGUgI2l0ZW1JY29uQ29udGVudD5cbiAgICBAaWYgKCFpc0NvbGxhcHNlZCkge1xuICAgICAgICBAaWYgKGhhc0ljb24pIHtcbiAgICAgICAgICAgIEBpZiAoaXRlbS5pY29uU3ZnTmFtZSkge1xuICAgICAgICAgICAgICAgIDwhLS0gU1ZHIC0tPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWljb25cIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwie3sgaXRlbS5pY29uU3ZnTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IGl0ZW0uaWNvblR5cGVDbGFzcyB9fVwiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgfSBAZWxzZSBpZiAoaXRlbS5oYXNNYXJrZXIpIHtcbiAgICAgICAgICAgICAgICA8IS0tIE1BUktFUiAtLT5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1tYXJrZXJcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJ7eyBpdGVtPy5tYXJrZXJUeXBlQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICBpY29uPVwiZWxsaXBzZTpzaGFycFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCIyeHNcIlxuICAgICAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJpdGVtLm1hcmtlclR5cGVDbGFzcyArICcgJyArICdtYXJrZXInXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAZWxzZSBpZiAoIWlzTGFiZWxJdGVtKSB7XG4gICAgICAgICAgICAgICAgPCEtLSBERUZBVUxUIGZvciBub24gY2F0ZWdvcnkgaXRlbXMgLS0+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJlbGxpcHNlOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwibmV1dHJhbC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCIyeHNcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBAZWxzZSBpZiAoaXRlbS5oYXNNYXJrZXIpIHtcbiAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstbWFya2VyXCJcbiAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJ7eyBpdGVtPy5tYXJrZXJUeXBlQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgIGljb249XCJlbGxpcHNlOnNoYXJwXCJcbiAgICAgICAgICAgICAgICBzaXplPVwiMnhzXCJcbiAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJpdGVtLm1hcmtlclR5cGVDbGFzcyArICcgJyArICdtYXJrZXInXCI+XG4gICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgfVxuXG4gICAgfSBAZWxzZSB7XG4gICAgICAgIEBpZiAoaGFzQ29sbGFwc2VkSW5pdGlhbHMpIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1pbml0aWFscyBldWktdS1jLWJnLXt7aXRlbS5pY29uVHlwZUNsYXNzfX1cIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLmluaXRpYWxzIH19XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgQGlmIChoYXNJY29uKSB7XG4gICAgICAgICAgICAgICAgQGlmIChpdGVtLmljb25TdmdOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU1ZHIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstaWNvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwie3sgaXRlbS5pY29uU3ZnTmFtZSB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJ7eyBpdGVtLmljb25UeXBlQ2xhc3MgfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIGlmIChpdGVtLmhhc01hcmtlcikge1xuICAgICAgICAgICAgICAgICAgICA8IS0tIE1BUktFUiAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLW1hcmtlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJ7eyBpdGVtPy5tYXJrZXJUeXBlQ2xhc3MgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImVsbGlwc2U6c2hhcnBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJpdGVtLm1hcmtlclR5cGVDbGFzcyArICcgJyArICdtYXJrZXInXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICA8IS0tIERFRkFVTFQgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJlbGxpcHNlOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cIm5ldXRyYWwtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjJ4c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYS1sYWJlbF09XCJpdGVtLmljb25MYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1pY29uIGV1aS11LW1sLTJ4c1wiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJzcXVhcmU6c2hhcnBcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJuZXV0cmFsLWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjJ4c1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQUk9KRUNURUQgRU5EIEJMT0NLIC0tPlxuPG5nLXRlbXBsYXRlICNpdGVtRW5kQ29udGVudD5cbiAgICBAaWYgKGl0ZW0udGFnTGFiZWwpIHtcbiAgICAgICAgQGlmIChpc0NvbGxhcHNlZCkge1xuICAgICAgICAgICAgPGV1aS1iYWRnZSBbZXVpVmFyaWFudF09XCJpdGVtLnRhZ1R5cGVDbGFzc1wiIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1kb3R0ZWQtYmFkZ2VcIj48L2V1aS1iYWRnZT5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8ZXVpLWJhZGdlIFtldWlWYXJpYW50XT1cIml0ZW0udGFnVHlwZUNsYXNzXCI+XG4gICAgICAgICAgICAgICAge3sgaXRlbS50YWdMYWJlbCB9fVxuICAgICAgICAgICAgPC9ldWktYmFkZ2U+XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwiaXRlbS5hY3Rpb25JY29uXCJcbiAgICAgICAgZXVpQnV0dG9uXG4gICAgICAgIGV1aVJvdW5kZWRcbiAgICAgICAgZXVpSWNvbkJ1dHRvblxuICAgICAgICBldWlTaXplU1xuICAgICAgICBldWlCYXNpY0J1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgIChrZXlkb3duKT1cIm9uQWN0aW9uSWNvbktleURvd24oJGV2ZW50KVwiXG4gICAgICAgIChmb2N1c291dCk9XCJvbkFjdGlvbkljb25Gb2N1c091dCgpXCJcbiAgICAgICAgKGZvY3VzKT1cImZvY3VzQWN0aW9uSWNvbigpXCJcbiAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWFjdGlvbi1pY29uXCJcbiAgICAgICAgW2V1aURpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0uYWN0aW9uSWNvbj8ubGFiZWxcIlxuICAgICAgICAoY2xpY2spPVwib25BY3Rpb25JY29uQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICA8ZXVpLWljb24tc3ZnIFtpY29uXT1cIml0ZW0uYWN0aW9uSWNvbj8uaWNvblwiIFtmaWxsQ29sb3JdPVwiaXRlbS5hY3Rpb25JY29uPy5jb2xvclwiPjwvZXVpLWljb24tc3ZnPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGV1aS1pY29uLWJ1dHRvbiAqbmdJZj1cIml0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDBcIlxuICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstdG9nZ2xlXCJcbiAgICAgICAgW2ljb25dPVwiaXRlbS5leHBhbmRlZCA/ICdjaGV2cm9uLXVwOnNoYXJwJzogJ2NoZXZyb24tZG93bjpzaGFycCdcIlxuICAgICAgICAoYnV0dG9uQ2xpY2spPVwib25FeHBhbmRUb2dnbGUoJGV2ZW50KVwiXG4gICAgICAgIFthcmlhTGFiZWxdPVwiaXRlbS5leHBhbmRlZCA/IGNvbGxhcHNlTWVudUxhYmVsIDogZXhwYW5kTWVudUxhYmVsXCJcbiAgICAgICAgZXVpUm91bmRlZFxuICAgICAgICBzaXplPVwic1wiXG4gICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgIFtldWlEaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCIvPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLW1lbnUtaXRlbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9ldWktbWVudS9ldWktbWVudS1pdGVtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2V1aS1tZW51L2V1aS1tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLFlBQVksRUFJWixnQkFBZ0IsR0FFbkIsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV6QyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7O0FBUTlELE1BQU0sT0FBTyxvQkFBb0I7SUFLN0IsSUFDVyxVQUFVO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUNJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQzlELENBQUM7SUFDRCxJQUNJLFlBQVk7UUFDWixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDdEYsQ0FBQztJQUNELElBQ0ksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUE7SUFDN0IsQ0FBQztJQXFCRCxZQUFvQixVQUFzQjtRQUF0QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBeENoQixTQUFJLEdBQUcsVUFBVSxDQUFDO1FB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QkFBM0QsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxnQkFBZ0I7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBNEIvQixlQUFlO3NCQURyQixZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIElucHV0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIE9uSW5pdCxcbiAgICBPbkNoYW5nZXMsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIEVsZW1lbnRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9jdXNhYmxlT3B0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuXG5pbXBvcnQgeyBjb25zdW1lRXZlbnQgfSBmcm9tICdAZXVpL2NvcmUnO1xuaW1wb3J0IHsgRXVpTWVudUl0ZW0gfSBmcm9tICcuL21vZGVscy9ldWktbWVudS1pdGVtLm1vZGVsJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZXVpLW1lbnUtaXRlbScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS1tZW51LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEV1aU1lbnVJdGVtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEZvY3VzYWJsZU9wdGlvbiB7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucm9sZScpIHJvbGUgPSAnbWVudWl0ZW0nO1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWxhYmVsJykgYXJpYUxhYmVsID0gJyc7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0Q3NzQ2xhc3NlcygpO1xuICAgIH1cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIudGFiaW5kZXgnKSB0YWJpbmRleCA9ICctMSc7XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaGFzcG9wdXAnKVxuICAgIGdldCBhcmlhSGFzUG9wdXAoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW0/LmNoaWxkcmVuPy5sZW5ndGggPiAwID8gdHJ1ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZXhwYW5kZWQnKVxuICAgIGdldCBhcmlhRXhwYW5kZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW0uY2hpbGRyZW4gPyBjb2VyY2VCb29sZWFuUHJvcGVydHkodGhpcy5pdGVtLmV4cGFuZGVkKSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGlzYWJsZWQnKVxuICAgIGdldCBhcmlhRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLml0ZW0uZGlzYWJsZWRcbiAgICB9XG5cbiAgICBASW5wdXQoKSBpdGVtOiBFdWlNZW51SXRlbTtcbiAgICBASW5wdXQoKSBwYXJlbnQ6IEV1aU1lbnVJdGVtO1xuICAgIEBPdXRwdXQoKSBleHBhbmRUb2dnbGUgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aU1lbnVJdGVtPigpO1xuICAgIEBPdXRwdXQoKSBpdGVtQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPEV1aU1lbnVJdGVtPigpO1xuXG4gICAgZXhwYW5kTWVudUxhYmVsID0gJ0V4cGFuZCc7XG4gICAgY29sbGFwc2VNZW51TGFiZWwgPSAnQ29sbGFwc2UnO1xuXG4gICAgaXNVcmxJdGVtID0gZmFsc2U7XG4gICAgaXNMaW5rSXRlbSA9IGZhbHNlO1xuICAgIGlzTGFiZWxJdGVtID0gZmFsc2U7XG4gICAgaXNBY3Rpb25JY29uRm9jdXNlZCA9IGZhbHNlO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc0ljb246IGJvb2xlYW47XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc1Rvb2x0aXA6IGJvb2xlYW47XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ29sbGFwc2VkOiBib29sZWFuO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNDb2xsYXBzZWRJbml0aWFsczogYm9vbGVhbjtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzQm9sZFJvb3RMZXZlbDogYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZikge31cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzVXJsSXRlbSA9ICh0aGlzLml0ZW0udXJsIHx8IHRoaXMuaXRlbS51cmxFeHRlcm5hbCB8fCB0aGlzLml0ZW0uY2hpbGRyZW4gfHwgdGhpcy5pdGVtLmNvbW1hbmQpICYmICF0aGlzLml0ZW0ubGluaztcbiAgICAgICAgdGhpcy5pc0xhYmVsSXRlbSA9ICF0aGlzLml0ZW0udXJsICYmICF0aGlzLml0ZW0udXJsRXh0ZXJuYWwgJiYgIXRoaXMuaXRlbS5jb21tYW5kICYmICF0aGlzLml0ZW0uY2hpbGRyZW4gJiYgIXRoaXMuaXRlbS5saW5rO1xuXG4gICAgICAgIHRoaXMuaXNMaW5rSXRlbSA9ICF0aGlzLmlzVXJsSXRlbSAmJiAhdGhpcy5pc0xhYmVsSXRlbTtcbiAgICAgICAgdGhpcy5hcmlhTGFiZWwgPSB0aGlzLmdldEFyaWFMYWJlbCgpO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaXRlbSAmJiBjaGFuZ2VzLml0ZW0uaXNGaXJzdENoYW5nZSgpKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW0gPSBjaGFuZ2VzLml0ZW0uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgaWYoIXRoaXMuaXRlbS51cmxFeHRlcm5hbFRhcmdldCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbS51cmxFeHRlcm5hbFRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5pdGVtLmZpbHRlcmVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW0uZmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYodGhpcy5pdGVtLmRpc2FibGVkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW0udmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIHN0b3BQcm9wYWdhdGlvbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2suZW1pdCh0aGlzLml0ZW0pO1xuICAgICAgICBjb25zdW1lRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIGdldCBtZW51SXRlbVRvb2x0aXAoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzVG9vbHRpcCAmJiB0aGlzLmlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pdGVtLnRvb2x0aXAgfHwgdGhpcy5nZXRUb29sdGlwRnJvbUl0ZW0odGhpcy5pdGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DbGljayhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2suZW1pdCh0aGlzLml0ZW0pO1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIGNvbnN1bWVFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uRXhwYW5kVG9nZ2xlKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmV4cGFuZFRvZ2dsZS5lbWl0KHRoaXMuaXRlbSk7XG4gICAgICAgIGNvbnN1bWVFdmVudChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uQWN0aW9uSWNvbkNsaWNrKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLml0ZW0uYWN0aW9uSWNvbj8uYWN0aW9uKGV2ZW50KTtcbiAgICAgICAgY29uc3VtZUV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25BY3Rpb25JY29uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW0uYWN0aW9uSWNvbj8uYWN0aW9uKGV2ZW50KTtcbiAgICAgICAgICAgIGNvbnN1bWVFdmVudChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZm9jdXNBY3Rpb25JY29uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuZXVpLW1lbnUtaXRlbV9fbGluay1hY3Rpb24taWNvbicpLmZvY3VzKCk7XG4gICAgICAgIHRoaXMuaXNBY3Rpb25JY29uRm9jdXNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgb25BY3Rpb25JY29uRm9jdXNPdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNBY3Rpb25JY29uRm9jdXNlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiBhbiBlbGVtZW50IGlzIHZpc2libGUgaW4gdGhlIHZpZXdwb3J0XG4gICAgICogQHBhcmFtIHBhcnRpYWxseVZpc2libGVcbiAgICAgKi9cbiAgICBlbGVtZW50SXNWaXNpYmxlSW5WaWV3cG9ydChwYXJ0aWFsbHlWaXNpYmxlID0gZmFsc2UpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgeyB0b3AsIGxlZnQsIGJvdHRvbSwgcmlnaHQgfSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB7IGlubmVySGVpZ2h0LCBpbm5lcldpZHRoIH0gPSB3aW5kb3cgYXMgV2luZG93O1xuICAgICAgICByZXR1cm4gcGFydGlhbGx5VmlzaWJsZVxuICAgICAgICAgICAgPyAoKHRvcCA+IDAgJiYgdG9wIDwgaW5uZXJIZWlnaHQpIHx8XG4gICAgICAgICAgICAgICAgKGJvdHRvbSA+IDAgJiYgYm90dG9tIDwgaW5uZXJIZWlnaHQpKSAmJlxuICAgICAgICAgICAgKChsZWZ0ID4gMCAmJiBsZWZ0IDwgaW5uZXJXaWR0aCkgfHwgKHJpZ2h0ID4gMCAmJiByaWdodCA8IGlubmVyV2lkdGgpKVxuICAgICAgICAgICAgOiB0b3AgPj0gMCAmJiBsZWZ0ID49IDAgJiYgYm90dG9tIDw9IGlubmVySGVpZ2h0ICYmIHJpZ2h0IDw9IGlubmVyV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2Nyb2xsIHRoZSBlbGVtZW50IGludG8gdmlld1xuICAgICAqIEBwYXJhbSBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgc2Nyb2xsSW50b1ZpZXcocHJvcGVydGllczogdW5rbm93bik6IHZvaWQge1xuICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyhwcm9wZXJ0aWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRvb2x0aXBGcm9tSXRlbShpdGVtOiBFdWlNZW51SXRlbSk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBpdGVtLmxhYmVsICYmIGl0ZW0udGFnTGFiZWwgPyBgJHtpdGVtLmxhYmVsfSAoJHtpdGVtLnRhZ0xhYmVsfSlgIDogaXRlbS5sYWJlbCB8fFxuICAgICAgICAgICAgaXRlbS50YWdMYWJlbCB8fFxuICAgICAgICAgICAgbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEFyaWFMYWJlbCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtLmxhYmVsIHx8XG4gICAgICAgICAgICB0aGlzLml0ZW0udGFnTGFiZWwgfHxcbiAgICAgICAgICAgICh0aGlzLml0ZW0uYWN0aW9uSWNvbiAmJiB0aGlzLml0ZW0uYWN0aW9uSWNvbi5sYWJlbCkgfHxcbiAgICAgICAgICAgIHRoaXMuaXRlbS5pY29uTGFiZWwgfHxcbiAgICAgICAgICAgICdFdWkgbWVudSBpdGVtJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGV1aS1tZW51LWl0ZW0gY2xhc3Mgb24gdGhlIEhvc3RCaW5kaW5nIGZ1bmN0aW9uXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdldWktbWVudS1pdGVtJyxcbiAgICAgICAgICAgICF0aGlzLnBhcmVudCAmJiB0aGlzLmhhc0JvbGRSb290TGV2ZWwgPyAnZXVpLW1lbnUtaXRlbS0tYm9sZCcgOiAnJyxcbiAgICAgICAgXS5qb2luKCcgJykudHJpbSgpO1xuICAgIH1cbn1cbiIsIkBpZiAoaXRlbS52aXNpYmxlICYmIGl0ZW0uZmlsdGVyZWQpIHtcbiAgICBAaWYgKGlzTGFiZWxJdGVtKSB7XG4gICAgICAgIDxsaVxuICAgICAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICAgICAgaWQ9XCJ7e2l0ZW0uaWR9fVwiXG4gICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2NvbnRlbnRcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1lMmVdPVwiaXRlbS5lMmVBdHRyXCJcbiAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtLS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbZXVpVG9vbHRpcF09XCJtZW51SXRlbVRvb2x0aXBcIlxuICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICBwb3NpdGlvbj1cImFmdGVyXCI+XG5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rIGV1aS1tZW51LWl0ZW1fX2xpbmstY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtX19saW5rLS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0tYWN0aXZlXT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0taGFzLXN1Yl09XCJpdGVtLmNoaWxkcmVuPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCJcbiAgICAgICAgICAgICAgICBbZXVpVG9vbHRpcF09XCJtZW51SXRlbVRvb2x0aXBcIlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uPVwiYWZ0ZXJcIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLXN0YXJ0LWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1JY29uQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWNvbnRlbnQtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstbGFiZWwtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstbGFiZWwtY2F0ZWdvcnlcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWVuZC1ibG9ja1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtRW5kQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgPC9saT5cbiAgICB9XG5cbiAgICBAaWYgKGlzVXJsSXRlbSkge1xuICAgICAgICA8bGlcbiAgICAgICAgICAgIHJvbGU9XCJub25lXCJcbiAgICAgICAgICAgIGlkPVwie3tpdGVtLmlkfX1cIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1lMmVdPVwiaXRlbS5lMmVBdHRyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fY29udGVudFwiXG4gICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbS0tZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbS0tZXhwYW5kZWRdPVwiaXRlbS5leHBhbmRlZCB8fCBpdGVtLmZpbHRlcmVkXCJcbiAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiPlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGljaygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmtcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtX19saW5rLS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0tYWN0aXZlXT1cIml0ZW0uYWN0aXZlXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuZXVpLW1lbnUtaXRlbV9fbGluay0taGFzLXN1Yl09XCJpdGVtLmNoaWxkcmVuPy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnVybCA/IGl0ZW0udXJsIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwiaXRlbS51cmwgPyAnZXVpLW1lbnUtaXRlbV9fbGluay0tYWN0aXZlJyA6ICcnXCJcbiAgICAgICAgICAgICAgICBbZXVpVG9vbHRpcF09XCJtZW51SXRlbVRvb2x0aXBcIlxuICAgICAgICAgICAgICAgIHBvc2l0aW9uPVwiYWZ0ZXJcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsaW5rQ29udGVudFwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogaXRlbSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29udGVudFwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbGk+XG4gICAgfVxuXG4gICAgQGlmIChpc0xpbmtJdGVtKSB7XG4gICAgICAgIDxsaVxuICAgICAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICAgICAgaWQ9XCJ7e2l0ZW0uaWR9fVwiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWUyZV09XCJpdGVtLmUyZUF0dHJcIlxuICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19jb250ZW50XCJcbiAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtLS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtLS1leHBhbmRlZF09XCJpdGVtLmV4cGFuZGVkIHx8IGl0ZW0uZmlsdGVyZWRcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCI+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGlua1wiXG4gICAgICAgICAgICAgICAgW2NsYXNzLmV1aS1tZW51LWl0ZW1fX2xpbmstLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtX19saW5rLS1hY3RpdmVdPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5ldWktbWVudS1pdGVtX19saW5rLS1oYXMtc3ViXT1cIml0ZW0uY2hpbGRyZW4/Lmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgICAgIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIlxuICAgICAgICAgICAgICAgIFtldWlUb29sdGlwXT1cIm1lbnVJdGVtVG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgcG9zaXRpb249XCJhZnRlclwiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImxpbmtDb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9hPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9saT5cbiAgICB9XG59XG5cbjxuZy10ZW1wbGF0ZSAjbGlua0NvbnRlbnQ+XG4gICAgPGRpdiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstc3RhcnQtYmxvY2tcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbUljb25Db250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstY29udGVudC1ibG9ja1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1sYWJlbC1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1sYWJlbFwiPnt7IGl0ZW0ubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtLnVybEV4dGVybmFsICYmIGl0ZW0udXJsRXh0ZXJuYWxUYXJnZXQgPT09ICdfYmxhbmsnXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xhYmVsLWV4dGVybmFsXCJcbiAgICAgICAgICAgICAgICBpY29uPVwiZXVpLWVjbC1leHRlcm5hbFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cIjJ4c1wiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cImV4dGVybmFsIGxpbmsgaWNvblwiXG4gICAgICAgICAgICAgICAgZXVpRW5kPlxuICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstZW5kLWJsb2NrXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1FbmRDb250ZW50XCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBpdGVtIH1cIj48L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBQUk9KRUNURUQgQ09OVEVOVCBCTE9DSyAtLT5cbjxuZy10ZW1wbGF0ZSAjY29udGVudD5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBST0pFQ1RFRCBTVEFSVCBCTE9DSyAtLT5cbjxuZy10ZW1wbGF0ZSAjaXRlbUljb25Db250ZW50PlxuICAgIEBpZiAoIWlzQ29sbGFwc2VkKSB7XG4gICAgICAgIEBpZiAoaGFzSWNvbikge1xuICAgICAgICAgICAgQGlmIChpdGVtLmljb25TdmdOYW1lKSB7XG4gICAgICAgICAgICAgICAgPCEtLSBTVkcgLS0+XG4gICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstaWNvblwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJ7eyBpdGVtLmljb25TdmdOYW1lIH19XCJcbiAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwie3sgaXRlbS5pY29uVHlwZUNsYXNzIH19XCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChpdGVtLmhhc01hcmtlcikge1xuICAgICAgICAgICAgICAgIDwhLS0gTUFSS0VSIC0tPlxuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLW1hcmtlclwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IGl0ZW0/Lm1hcmtlclR5cGVDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJlbGxpcHNlOnNoYXJwXCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjJ4c1wiXG4gICAgICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cIml0ZW0ubWFya2VyVHlwZUNsYXNzICsgJyAnICsgJ21hcmtlcidcIj5cbiAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEBlbHNlIGlmICghaXNMYWJlbEl0ZW0pIHtcbiAgICAgICAgICAgICAgICA8IS0tIERFRkFVTFQgZm9yIG5vbiBjYXRlZ29yeSBpdGVtcyAtLT5cbiAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImVsbGlwc2U6c2hhcnBcIlxuICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3I9XCJuZXV0cmFsLWxpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIjJ4c1wiPlxuICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgfVxuICAgICAgICB9IEBlbHNlIGlmIChpdGVtLmhhc01hcmtlcikge1xuICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1tYXJrZXJcIlxuICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IGl0ZW0/Lm1hcmtlclR5cGVDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgaWNvbj1cImVsbGlwc2U6c2hhcnBcIlxuICAgICAgICAgICAgICAgIHNpemU9XCIyeHNcIlxuICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cIml0ZW0ubWFya2VyVHlwZUNsYXNzICsgJyAnICsgJ21hcmtlcidcIj5cbiAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICB9XG5cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgQGlmIChoYXNDb2xsYXBzZWRJbml0aWFscykge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWluaXRpYWxzIGV1aS11LWMtYmcte3tpdGVtLmljb25UeXBlQ2xhc3N9fVwiPlxuICAgICAgICAgICAgICAgIHt7IGl0ZW0uaW5pdGlhbHMgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBAaWYgKGhhc0ljb24pIHtcbiAgICAgICAgICAgICAgICBAaWYgKGl0ZW0uaWNvblN2Z05hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTVkcgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay1pY29uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ7eyBpdGVtLmljb25TdmdOYW1lIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IGl0ZW0uaWNvblR5cGVDbGFzcyB9fVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2V1aS1pY29uLXN2Zz5cblxuICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGl0ZW0uaGFzTWFya2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gTUFSS0VSIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZXVpLWljb24tc3ZnXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstbWFya2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cInt7IGl0ZW0/Lm1hcmtlclR5cGVDbGFzcyB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiZWxsaXBzZTpzaGFycFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwiMnhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cIml0ZW0ubWFya2VyVHlwZUNsYXNzICsgJyAnICsgJ21hcmtlcidcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gREVGQVVMVCAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGV1aS1pY29uLXN2Z1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cImVsbGlwc2U6c2hhcnBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsbENvbG9yPVwibmV1dHJhbC1saWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwiMnhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhLWxhYmVsXT1cIml0ZW0uaWNvbkxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxldWktaWNvbi1zdmdcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWljb24gZXVpLXUtbWwtMnhzXCJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cInNxdWFyZTpzaGFycFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGxDb2xvcj1cIm5ldXRyYWwtbGlnaHRcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwiMnhzXCI+XG4gICAgICAgICAgICAgICAgPC9ldWktaWNvbi1zdmc+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuXG48IS0tIFBST0pFQ1RFRCBFTkQgQkxPQ0sgLS0+XG48bmctdGVtcGxhdGUgI2l0ZW1FbmRDb250ZW50PlxuICAgIEBpZiAoaXRlbS50YWdMYWJlbCkge1xuICAgICAgICBAaWYgKGlzQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICA8ZXVpLWJhZGdlIFtldWlWYXJpYW50XT1cIml0ZW0udGFnVHlwZUNsYXNzXCIgY2xhc3M9XCJldWktbWVudS1pdGVtX19saW5rLWRvdHRlZC1iYWRnZVwiPjwvZXVpLWJhZGdlPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxldWktYmFkZ2UgW2V1aVZhcmlhbnRdPVwiaXRlbS50YWdUeXBlQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICB7eyBpdGVtLnRhZ0xhYmVsIH19XG4gICAgICAgICAgICA8L2V1aS1iYWRnZT5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCJpdGVtLmFjdGlvbkljb25cIlxuICAgICAgICBldWlCdXR0b25cbiAgICAgICAgZXVpUm91bmRlZFxuICAgICAgICBldWlJY29uQnV0dG9uXG4gICAgICAgIGV1aVNpemVTXG4gICAgICAgIGV1aUJhc2ljQnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgKGtleWRvd24pPVwib25BY3Rpb25JY29uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgKGZvY3Vzb3V0KT1cIm9uQWN0aW9uSWNvbkZvY3VzT3V0KClcIlxuICAgICAgICAoZm9jdXMpPVwiZm9jdXNBY3Rpb25JY29uKClcIlxuICAgICAgICBjbGFzcz1cImV1aS1tZW51LWl0ZW1fX2xpbmstYWN0aW9uLWljb25cIlxuICAgICAgICBbZXVpRGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5hY3Rpb25JY29uPy5sYWJlbFwiXG4gICAgICAgIChjbGljayk9XCJvbkFjdGlvbkljb25DbGljaygkZXZlbnQpXCI+XG4gICAgICAgIDxldWktaWNvbi1zdmcgW2ljb25dPVwiaXRlbS5hY3Rpb25JY29uPy5pY29uXCIgW2ZpbGxDb2xvcl09XCJpdGVtLmFjdGlvbkljb24/LmNvbG9yXCI+PC9ldWktaWNvbi1zdmc+XG4gICAgPC9idXR0b24+XG5cbiAgICA8ZXVpLWljb24tYnV0dG9uICpuZ0lmPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoID4gMFwiXG4gICAgICAgIGNsYXNzPVwiZXVpLW1lbnUtaXRlbV9fbGluay10b2dnbGVcIlxuICAgICAgICBbaWNvbl09XCJpdGVtLmV4cGFuZGVkID8gJ2NoZXZyb24tdXA6c2hhcnAnOiAnY2hldnJvbi1kb3duOnNoYXJwJ1wiXG4gICAgICAgIChidXR0b25DbGljayk9XCJvbkV4cGFuZFRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgW2FyaWFMYWJlbF09XCJpdGVtLmV4cGFuZGVkID8gY29sbGFwc2VNZW51TGFiZWwgOiBleHBhbmRNZW51TGFiZWxcIlxuICAgICAgICBldWlSb3VuZGVkXG4gICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgW3RhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgW2V1aURpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIi8+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -55,7 +55,7 @@ export class EuiMenuComponent {
55
55
  case 'Enter': {
56
56
  if ((this.focusKeyManager.activeItem.isLinkItem || this.focusKeyManager.activeItem.isUrlItem) &&
57
57
  !this.focusKeyManager.activeItem.disabled) {
58
- this.focusKeyManager.activeItem.onClick(event);
58
+ this.focusKeyManager.activeItem.onClick(undefined);
59
59
  event.preventDefault();
60
60
  }
61
61
  break;
@@ -453,21 +453,6 @@ export class EuiMenuComponent {
453
453
  }
454
454
  return item;
455
455
  }
456
- /**
457
- * Check if an element is visible in the viewport
458
- * @param el
459
- * @param partiallyVisible
460
- * @private
461
- */
462
- elementIsVisibleInViewport(el, partiallyVisible = false) {
463
- const { top, left, bottom, right } = el.getBoundingClientRect();
464
- const { innerHeight, innerWidth } = window;
465
- return partiallyVisible
466
- ? ((top > 0 && top < innerHeight) ||
467
- (bottom > 0 && bottom < innerHeight)) &&
468
- ((left > 0 && left < innerWidth) || (right > 0 && right < innerWidth))
469
- : top >= 0 && left >= 0 && bottom <= innerHeight && right <= innerWidth;
470
- }
471
456
  /**
472
457
  * Scroll to an item if it's not visible in the viewport
473
458
  * @param url
@@ -546,4 +531,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.2", ngImpor
546
531
  type: HostListener,
547
532
  args: ['click', ['$event']]
548
533
  }] } });
549
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLW1lbnUvZXVpLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLW1lbnUvZXVpLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFlBQVksRUFDWixnQkFBZ0IsRUFHaEIsWUFBWSxFQUdaLFNBQVMsRUFDVCxVQUFVLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQixhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7QUFTakUsTUFBTSxPQUFPLGdCQUFnQjtJQUl6QixJQUNXLFVBQVU7UUFDakIsT0FBTztZQUNILFVBQVU7WUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFBLENBQUMsQ0FBQyxFQUFFO1NBQ3JDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUE0QkQsWUFDWSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIs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cEUsU0FBUzt1QkFBQyxhQUFhLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUduQyxVQUFVO3NCQURwQixXQUFXO3VCQUFDLE9BQU87Z0JBVVgsS0FBSztzQkFBYixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUVrQyxXQUFXO3NCQUFsRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLG9CQUFvQjtzQkFBM0QsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxTQUFTO3NCQUFoRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFLRSxjQUFjO3NCQUFyRCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLE1BQU07c0JBQTdDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsZUFBZTtzQkFBdEQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxnQkFBZ0I7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBRTVCLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFZUCxlQUFlO3NCQURkLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT25DaGFuZ2VzLFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgT25EZXN0cm95LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgRWxlbWVudFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uRW5kIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBGb2N1c0tleU1hbmFnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgY29uc3VtZUV2ZW50IH0gZnJvbSAnQGV1aS9jb3JlJztcbmltcG9ydCB7IEV1aU1lbnVJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9ldWktbWVudS1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFdWlNZW51SXRlbSB9IGZyb20gJy4vbW9kZWxzL2V1aS1tZW51LWl0ZW0ubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2V1aS1tZW51JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZXVpLW1lbnUuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3N0eWxlcy9faW5kZXguc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG59KVxuZXhwb3J0IGNsYXNzIEV1aU1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcbiAgICBAVmlld0NoaWxkcmVuKEV1aU1lbnVJdGVtQ29tcG9uZW50KSBwcm90ZWN0ZWQgbWVudUl0ZW1zQ29tcG9uZW50czogUXVlcnlMaXN0PEV1aU1lbnVJdGVtQ29tcG9uZW50PjtcbiAgICBAVmlld0NoaWxkKCdmaWx0ZXJJbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBwcm90ZWN0ZWQgZmlsdGVySW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD47XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgICBwdWJsaWMgZ2V0IGNzc0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICdldWktbWVudScsXG4gICAgICAgICAgICB0aGlzLmlzQ29sbGFwc2VkID8gJ2V1aS1tZW51LS1jb2xsYXBzZWQnIDogJycsXG4gICAgICAgICAgICAhdGhpcy5oYXNJY29ucyA/ICdldWktbWVudS0tbm8taWNvbnMnIDogJycsXG4gICAgICAgICAgICB0aGlzLmlzRmxhdCA/ICdldWktbWVudS0tZmxhdCc6ICcnLFxuICAgICAgICBdLmpvaW4oJyAnKS50cmltKCk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgaXRlbXM6IEV1aU1lbnVJdGVtW107XG4gICAgQElucHV0KCkgc2VhcmNoRmlsdGVyTGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKSBleHRlcm5hbExpbmtMYWJlbDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGZyYWdtZW50SWQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBmaWx0ZXJWYWx1ZSA9ICcnO1xuXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzQ29sbGFwc2VkID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc0NvbGxhcHNlZEluaXRpYWxzID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc0ZpbHRlciA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNJY29ucyA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNUb29sdGlwID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBFeHBhbmQgYWxsIGl0ZW1zIGluIHRoZSBtZW51LiBBZmZlY3RzIG9ubHkgaXRlbXMgdGhhdCBoYXZlIG5vIGV4cGFuZGVkIHByb3BlcnR5IHNldC5cbiAgICAgKiBlLmcuIGl0ZW1zID0gW3tsYWJlbDogdGVzdCwgZXhwYW5kZWQ6IHRydWV9LCB7bGFiZWw6IHRlc3QyLCBleHBhbmRlZDogZmFsc2V9LCB7bGFiZWw6IHRlc3QzfV0gd2lsbCBleHBhbmQgb25seSB0ZXN0My5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZXhwYW5kQWxsSXRlbXMgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaXNGbGF0ID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGhhc1Njcm9sbFRvSXRlbSA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNCb2xkUm9vdExldmVsID0gZmFsc2U7XG5cbiAgICBAT3V0cHV0KCkgaXNDbGljazogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBpdGVtQ2xpY2s6IEV2ZW50RW1pdHRlcjxFdWlNZW51SXRlbT4gPSBuZXcgRXZlbnRFbWl0dGVyPEV1aU1lbnVJdGVtPigpO1xuXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGZvY3VzS2V5TWFuYWdlcjogRm9jdXNLZXlNYW5hZ2VyPEV1aU1lbnVJdGVtQ29tcG9uZW50PjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgICAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICAgICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgKSB7fVxuXG4gICAgQEhvc3RMaXN0ZW5lcignY2xpY2snLCBbJyRldmVudCddKVxuICAgIHN0b3BQcm9wYWdhdGlvbihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIC8vIGZpbmRzIGZpcnN0IGNoaWxkIHdoZW4gQXJyb3dEb3duXG4gICAgICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtPy5pdGVtLmNoaWxkcmVuPyB0aGlzLmZpbmRGaXJzdEZpbHRlcmVkSXRlbSh0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtPy5pdGVtLmNoaWxkcmVuKSA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmlyc3RGb2N1c2FibGVJdGVtID0gdGhpcy5maW5kRm9jdXNhYmxlSXRlbShmaXJzdENoaWxkKTtcbiAgICAgICAgLy8gZmluZHMgdGhlIHBhcmVudCBlbGVtZW50XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/Lml0ZW0ucGFyZW50O1xuICAgICAgICBjb25zdCBwYXJlbnRGb2N1c2FibGVJdGVtID0gdGhpcy5maW5kRm9jdXNhYmxlSXRlbShwYXJlbnQpO1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgICAgICAgY2FzZSAnRW50ZXInOiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbS5pc0xpbmtJdGVtIHx8IHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uaXNVcmxJdGVtKSAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbS5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtLm9uQ2xpY2soZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOiB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8uaXRlbS5hY3Rpb25JY29uKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0FjdGlvbkljb25Gb2N1c1N0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8uaXRlbS5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8ub25FeHBhbmRUb2dnbGUoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnQXJyb3dMZWZ0Jzoge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/Lml0ZW0uYWN0aW9uSWNvbil7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tBY3Rpb25JY29uRm9jdXNTdGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8uaXRlbS5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbS5vbkV4cGFuZFRvZ2dsZShldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzoge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/Lml0ZW0uY2hpbGRyZW4gJiYgdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8uaXRlbS5leHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICAvL2ZvY3VzZXMgZmlyc3QgY2hpbGRcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RGb2N1c2FibGVJdGVtPy5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci51cGRhdGVBY3RpdmVJdGVtKGZpcnN0Rm9jdXNhYmxlSXRlbSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZmluZHMgbGFzdCBmaWx0ZXJlZCBjaGlsZCB3aGVuIEFycm93RG93biBhbmQgbmF2aWdhdGluZyB3aXRoaW4gc3VibWVudVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZENoaWxkcmVuID0gdGhpcy5maW5kRmlsdGVyZWRJdGVtcyhwYXJlbnQuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q2hpbGRJbmRleCA9IChmaWx0ZXJlZENoaWxkcmVuPy5sZW5ndGgpIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdENoaWxkID0gZmlsdGVyZWRDaGlsZHJlbltsYXN0Q2hpbGRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RGb2N1c2FibGVJdGVtID0gdGhpcy5maW5kRm9jdXNhYmxlSXRlbShsYXN0Q2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgYWN0aXZlIGl0ZW0gaXMgdGhlIGxhc3QgY2hpbGQsIHB1dHMgdGhlIGZvY3VzIG9uIHRoZSBuZXh0IHBhcmVudFxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtID09PSBsYXN0Rm9jdXNhYmxlSXRlbSl7XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0ocGFyZW50Rm9jdXNhYmxlSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldE5leHRJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCArMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBza2lwcyByZW1haW5pbmcgY2hpbGRyZW4gaW4gdGhlIHF1ZXJ5IGxpc3Qgd2hlbiB0aGVyZSBpcyBleHBhbmRlZCBub2RlXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNraXBQcmVkaWNhdGUobWVudUl0ZW0gPT4gbWVudUl0ZW0ucGFyZW50ICE9IHVuZGVmaW5lZCB8fCBtZW51SXRlbS5pdGVtLnZpc2libGUgPT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdBcnJvd1VwJzoge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBmaW5kcyBmaXJzdCBmaWx0ZXJlZCBjaGlsZCB3aGVuIEFycm93VXBcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRDaGlsZHJlbiA9IHRoaXMuZmluZEZpbHRlcmVkSXRlbXMocGFyZW50LmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RDaGlsZFVwID0gZmlsdGVyZWRDaGlsZHJlblsnMCddXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlSXRlbVVwID0gdGhpcy5maW5kRm9jdXNhYmxlSXRlbShmaXJzdENoaWxkVXApO1xuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIG5hdmlnYXRpbmcgdXAgb24gYSBzdWJtZW51IGZvY3VzZXMgdGhlIHBhcmVudCBpZiB0aGUgYWN0aXZlIGl0ZW0gaXMgdGhlIGZpcnN0IGNoaWxkXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0gPT09IGZpcnN0Rm9jdXNhYmxlSXRlbVVwKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0ocGFyZW50Rm9jdXNhYmxlSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbSh0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXggLTEpO1xuICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gbmF2aWdhdGluZyB1cCBmcm9tIGEgcGFyZW50IGVsZW1lbnQgdG8gYW4gZXhwYW5kZWQgc3VibWVudSwgZmluZHMgdGhlIGxhc3QgY2hpbGQgYW5kIGZvY3VzZXMgaXRcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8uaXRlbS5jaGlsZHJlbiAmJiB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtPy5pdGVtLmV4cGFuZGVkKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ2hpbGRyZW4gPSB0aGlzLmZpbmRGaWx0ZXJlZEl0ZW1zKHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/Lml0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdENoaWxkSW5kZXhVcCA9IChmaWx0ZXJlZENoaWxkcmVuLmxlbmd0aCkgLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEZvY3VzYWJsZUl0ZW1VcCA9dGhpcy5maW5kRm9jdXNhYmxlSXRlbShmaWx0ZXJlZENoaWxkcmVuW2xhc3RDaGlsZEluZGV4VXBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0obGFzdEZvY3VzYWJsZUl0ZW1VcCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuaXRlbXMpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmNvbmZpZ3VyZUl0ZW1zKHRoaXMuaXRlbXMpO1xuICAgICAgICAgICAgLy8gZ2V0IGN1cnJlbnQgdXJsXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VXJsID0gdGhpcy5yb3V0ZXIudXJsO1xuICAgICAgICAgICAgLy8gZmluZCBhbiBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUgY3VycmVudCB1cmwgb3IgdGhlIG1vc3QgcmVsZXZhbnQgb25lXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5maW5kTW9zdFJlbGV2YW50SXRlbShjdXJyZW50VXJsLCB0aGlzLml0ZW1zKTtcbiAgICAgICAgICAgIC8vIGV4cGFuZCB0byB0aGF0IGl0ZW1cbiAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRUb0dpdmVuSXRlbShpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEV4cGFuZCAvIENvbGxhcHNlIEFsbCBpdGVtc1xuICAgICAgICBpZiAoY2hhbmdlcy5leHBhbmRBbGxJdGVtcykge1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuc2V0RXhwYW5kZWRUb0FsbEl0ZW1zKGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShjaGFuZ2VzLmV4cGFuZEFsbEl0ZW1zLmN1cnJlbnRWYWx1ZSksIHRoaXMuaXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZmlsdGVyVmFsdWUgJiYgdGhpcy5oYXNGaWx0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMub25GaWx0ZXIoY2hhbmdlcy5maWx0ZXJWYWx1ZS5jdXJyZW50VmFsdWUgPz8gJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVmcmVzaCB3aGVuIGludGVyYWN0aXZlIGNvbGxhcHNlZCB0byBpbml0aWFsc1xuICAgICAgICBpZiAoY2hhbmdlcy5oYXNDb2xsYXBzZWRJbml0aWFscykge1xuICAgICAgICAgICAgdGhpcy5oYXNDb2xsYXBzZWRJbml0aWFscyA9IGNoYW5nZXMuaGFzQ29sbGFwc2VkSW5pdGlhbHMuY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuY29uZmlndXJlSXRlbXModGhpcy5pdGVtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihjaGFuZ2VzLmhhc1Njcm9sbFRvSXRlbSl7XG4gICAgICAgICAgICB0aGlzLmhhc1Njcm9sbFRvSXRlbSA9IGNoYW5nZXMuaGFzU2Nyb2xsVG9JdGVtLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmKHRoaXMuaGFzU2Nyb2xsVG9JdGVtKXtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvSXRlbSh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYoY2hhbmdlcy5oYXNGaWx0ZXIpe1xuICAgICAgICAgICAgdGhpcy5oYXNGaWx0ZXIgPSBjaGFuZ2VzLmhhc0ZpbHRlci5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICBpZighdGhpcy5oYXNGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBpdGVyYXRlIHRocm91Z2ggYWxsIGl0ZW1zIGFuZCByZXNldCB0aGUgZmlsdGVyZWQgcHJvcGVydHlcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5maWx0ZXJNZW51SXRlbXModGhpcy5pdGVtcywgJycpXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gTGFiZWxzIGRlZmF1bHQgdmFsdWVzIC0gVE9ETyA6IHRyYW5zbGF0aW9uc1xuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoRmlsdGVyTGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRmlsdGVyTGFiZWwgPSAnU2VhcmNoIGZpbHRlcic7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdWJzY3JpcHRpb24gdG8gcm91dGVzIHVybCBjaGFuZ2VzIGZvciBhY3RpdmF0aW5nIHRoZSBzY3JvbGxJbnRvVmlld1xuICAgICAgICB0aGlzLnJvdXRlci5ldmVudHMuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gSGFuZGxlIHJvdXRlIGNoYW5nZSBldmVudFxuICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc1Njcm9sbFRvSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvSXRlbShldmVudC51cmwpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBpbnN0YW50aWF0ZXMgRm9jdXNLZXlNYW5hZ2VyIHdpdGggdGhlIHF1ZXJ5IGxpc3Qgb2YgaXRlbXMgZW5hYmxpbmcgd3JhcHBpbmdcbiAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyKHRoaXMubWVudUl0ZW1zQ29tcG9uZW50cykud2l0aFdyYXAoKTtcblxuICAgICAgICAvLyBzY3JvbGxzIHRvIHRoZSBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUgY3VycmVudCB1cmxcbiAgICAgICAgaWYodGhpcy5oYXNTY3JvbGxUb0l0ZW0pe1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0l0ZW0odGhpcy5yb3V0ZXIudXJsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6dm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkNsaWNrKGl0ZW06IEV1aU1lbnVJdGVtKTogdm9pZCB7XG4gICAgICAgIGlmICghaXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgaWYgKGl0ZW0udXJsRXh0ZXJuYWwpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihpdGVtLnVybEV4dGVybmFsLCBpdGVtLnVybEV4dGVybmFsVGFyZ2V0IHx8ICdfYmxhbmsnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS51cmwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbaXRlbS51cmxdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUsIGZyYWdtZW50OiB0aGlzLmZyYWdtZW50SWQgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXRlbS5jb21tYW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uY29tbWFuZCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FeHBhbmRUb2dnbGUoaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5saW5rKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXM/Lm1hcCgoaXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaXQuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdC5pZCA9PT0gaXRlbS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXQuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzQ2xpY2suZW1pdCh0cnVlKTtcbiAgICAgICAgdGhpcy5pdGVtQ2xpY2suZW1pdChpdGVtKTtcblxuICAgICAgICBjb25zdCBmb2N1c2VkSXRlbSA9IHRoaXMuZmluZEZvY3VzYWJsZUl0ZW0oaXRlbSk7XG4gICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oZm9jdXNlZEl0ZW0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbkV4cGFuZFRvZ2dsZShpdGVtOiBFdWlNZW51SXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgICAgdGhpcy5vbkV4cGFuZFRvZ2dsZWQoaXRlbSwgdGhpcy5pdGVtcyk7XG4gICAgICAgICAgICAvLyBUT0RPOiBpbnZlc3RpZ2F0ZSB3aHkgdGhlIGFib3ZlIGlzIG5lZWRlZC4gQ2FuIGl0IGJlIHNpbXBseSBcIml0ZW0uZXhwYW5kZWQgPSAhaXRlbS5leHBhbmRlZDtcIiA/XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb25NZW51RmlsdGVyQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3VtZUV2ZW50KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXIgdGhlIG1lbnUgaXRlbXMgYmFzZWQgb24gdGhlIGlucHV0IHZhbHVlXG4gICAgICogQHBhcmFtIGV2ZW50XG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvbkZpbHRlcihldmVudDogRXZlbnQpOiB2b2lkO1xuICAgIHByb3RlY3RlZCBvbkZpbHRlcih2YWx1ZTogc3RyaW5nKTogdm9pZDtcbiAgICBwcm90ZWN0ZWQgb25GaWx0ZXIoZXZlbnRPclZhbHVlOiBFdmVudCB8IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGV2ZW50T3JWYWx1ZSBpbnN0YW5jZW9mIEV2ZW50XG4gICAgICAgICAgICA/IChldmVudE9yVmFsdWUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlXG4gICAgICAgICAgICA6IGV2ZW50T3JWYWx1ZTtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZmlsdGVyTWVudUl0ZW1zKHRoaXMuaXRlbXMsIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBmaW5kcyB0aGUgRXVpTWVudUl0ZW1Db21wb25lbnQgaW4gdGhlIHF1ZXJpZWQgZm9jdXNhYmxlSXRlbXNbXSB0aGF0ICBtYXRjaGVzIHRoZSBwYXNzZWQgRXVpTWVudUl0ZW0gb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWVudUl0ZW0gYW4gRXVpTWVudUl0ZW1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZmluZEZvY3VzYWJsZUl0ZW0obWVudUl0ZW06IEV1aU1lbnVJdGVtICk6IEV1aU1lbnVJdGVtQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVudUl0ZW1zQ29tcG9uZW50cy5maW5kKFxuICAgICAgICAgICAgKGZvY3VzYWJsZUl0ZW0pID0+IGZvY3VzYWJsZUl0ZW0uaXRlbS5sYWJlbCA9PT0gbWVudUl0ZW0/LmxhYmVsICYmIGZvY3VzYWJsZUl0ZW0uaXRlbS5pZCA9PT0gbWVudUl0ZW0uaWQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZmluZHMgdGhlIGZpcnN0IGl0ZW0gdGhhdCBpcyBmaWx0ZXJlZFxuICAgICAqXG4gICAgICogQHBhcmFtIG1lbnVJdGVtcyBhbiBhcnJheSBvZiBFdWlNZW51SXRlbVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaW5kRmlyc3RGaWx0ZXJlZEl0ZW0obWVudUl0ZW1zOiBFdWlNZW51SXRlbSBbXSk6IEV1aU1lbnVJdGVtIHtcbiAgICAgICAgcmV0dXJuIG1lbnVJdGVtcy5maW5kKChpdGVtKSA9PiBpdGVtLmZpbHRlcmVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBmaW5kcyBhbGwgZmlsdGVyZWQgbWVudSBpdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIG1lbnVJdGVtcyBhbiBhcnJheSBvZiBFdWlNZW51SXRlbVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaW5kRmlsdGVyZWRJdGVtcyhtZW51SXRlbXM6IEV1aU1lbnVJdGVtIFtdKTogRXVpTWVudUl0ZW0gW10ge1xuICAgICAgICByZXR1cm4gbWVudUl0ZW1zLmZpbHRlcigoaXRlbXMpID0+IGl0ZW1zLmZpbHRlcmVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjaGVja3MgdGhlIGZvY3VzIHN0YXRlIG9mIHRoZSBhY3Rpb24gaWNvblxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGNoZWNrQWN0aW9uSWNvbkZvY3VzU3RhdGUoKTogdm9pZCB7XG4gICAgICAgIC8vIGNoZWNrIGlmIHRoZSBhY3Rpb24gaWNvbiBpcyBmb2N1c2VkIGFuZCBpZiBub3QgZm9jdXMgaXQsIG90aGVyd2lzZSBmb2N1cyB0aGUgYWN0aXZlIGl0ZW1cbiAgICAgICAgIXRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uaXNBY3Rpb25JY29uRm9jdXNlZCA/IHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uZm9jdXNBY3Rpb25JY29uKCkgOiB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtLmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZmlsdGVyIGFsbCBtZW51IGl0ZW1zIGdpdmVuIGEgdmFsdWVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZW51SXRlbXMgYW4gYXJyYXkgb2YgbWVudSBpdGVtc1xuICAgICAqIEBwYXJhbSBmaWx0ZXJWYWx1ZSB0aGUgdmFsdWUgdG8gZmlsdGVyIG1lbnUgaXRlbXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZmlsdGVyTWVudUl0ZW1zKG1lbnVJdGVtczogRXVpTWVudUl0ZW1bXSwgZmlsdGVyVmFsdWU6IHN0cmluZyk6IEV1aU1lbnVJdGVtW10ge1xuICAgICAgICByZXR1cm4gbWVudUl0ZW1zPy5tYXAoKGl0ZW06IEV1aU1lbnVJdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGl0ZW0ubGFiZWw/LnRvTG93ZXJDYXNlKCkuaW5kZXhPZihmaWx0ZXJWYWx1ZS50b0xvd2VyQ2FzZSgpKSAhPT0gLTE7XG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGl0ZW0uY2hpbGRyZW4gPSB0aGlzLmZpbHRlck1lbnVJdGVtcyhpdGVtLmNoaWxkcmVuLCBmaWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaXRlbS5maWx0ZXJlZCA9IGl0ZW0uY2hpbGRyZW4uZmlsdGVyKChsKSA9PiBsWydmaWx0ZXJlZCddID09PSB0cnVlKS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICAgIGl0ZW0uZmlsdGVyZWQgPSBmb3VuZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaXRlbS5maWx0ZXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pIHx8IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGV4cGFuZCAvIGNvbGxhcHNlIGFsbCBpdGVtc1xuICAgICAqXG4gICAgICogQHBhcmFtIGlzRXhwYW5kZWRcbiAgICAgKiBAcGFyYW0gaXRlbXNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0RXhwYW5kZWRUb0FsbEl0ZW1zKGlzRXhwYW5kZWQ6IGJvb2xlYW4sIGl0ZW1zOiBFdWlNZW51SXRlbVtdKTogRXVpTWVudUl0ZW1bXSB7XG4gICAgICAgIHJldHVybiBpdGVtcz8ubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGl0ZW0uZXhwYW5kZWQgPSBpdGVtLmV4cGFuZGVkID8/IGlzRXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgaXRlbS5jaGlsZHJlbiA9IHRoaXMuc2V0RXhwYW5kZWRUb0FsbEl0ZW1zKGlzRXhwYW5kZWQsIGl0ZW0uY2hpbGRyZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oaXRlbSwgeyB2aXNpYmxlOiBpdGVtLnZpc2libGUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBpdGVtLnZpc2libGUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGV4cGFuZCAvIGNvbGxhcHNlIGEgbWVudSBpdGVtXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSBUaGUgaXRlbSB3aGVyZSB0aGUgXCJleHBhbmRcIiBoYWQgYmVlbiB0b2dnbGVkXG4gICAgICogQHBhcmFtIGl0ZW1zIFRoZSBpdGVtcyBsaXN0ICh1c2VkIGZvciByZWN1cnNpb24pXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIG9uRXhwYW5kVG9nZ2xlZChpdGVtOiBFdWlNZW51SXRlbSwgaXRlbXM6IEV1aU1lbnVJdGVtW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXRlbUlkeCA9IGl0ZW1zPy5pbmRleE9mKGl0ZW0pO1xuICAgICAgICBpZiAoaXRlbUlkeCA+IC0xKSB7XG4gICAgICAgICAgICBpdGVtc1tpdGVtSWR4XS5leHBhbmRlZCA9ICFpdGVtc1tpdGVtSWR4XS5leHBhbmRlZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goKGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRXhwYW5kVG9nZ2xlZChpdGVtLCBpLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNvbmZpZ3VyZSBhbiBhcnJheSBvZiBpdGVtcyB3aXRoIHZpc2libGUsIGZpbHRlcmVkIGFuZCBleHBhbmQgKGluIGNhc2Ugb2YgZXhwYW5kQWxsSXRlbXMgZmxhZyBlbmFibGVkKSBwcm9wZXJ0aWVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbXMgQW4gYXJyYXkgb2YgRXVpTWVudUl0ZW1cbiAgICAgKiBAcGFyYW0gcGFyZW50IHRoZSBwYXJlbnQgaXRlbSBvZiBpdGVtcyBpZiBleGlzdHNcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY29uZmlndXJlSXRlbXMoaXRlbXM6IEV1aU1lbnVJdGVtW10sIHBhcmVudD86IEV1aU1lbnVJdGVtKTogRXVpTWVudUl0ZW1bXSB7XG4gICAgICAgIHJldHVybiBpdGVtcz8ubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAvLyByZWN1cnNpb24gaW4gY2FzZSB0aGVyZSBhcmUgY2hpbGRyZW5cbiAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5jaGlsZHJlbiA9IHRoaXMuY29uZmlndXJlSXRlbXMoaXRlbS5jaGlsZHJlbiwgaXRlbSk7XG4gICAgICAgICAgICAgICAgLy8gZXhwYW5kIGFsbCBwYXJlbnRzIHdpdGggY2hpbGRyZW5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5leHBhbmRBbGxJdGVtcykge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmV4cGFuZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBwb2ludCB0byB0aGUgcGFyZW50XG4gICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgaXRlbS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgaXRlbXMgYXJlIGNvbmZpZ3VyZWQgd2l0aCBhIHVuaXF1ZSBpZFxuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXM/Lm1hcCgoaXRlbSkgPT4gdGhpcy5zZXRSYW5kb21JZChpdGVtKSk7XG5cbiAgICAgICAgICAgIGlmIChpdGVtLmxhYmVsICYmIHRoaXMuaGFzQ29sbGFwc2VkSW5pdGlhbHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB3b3JkcyA9IGl0ZW0ubGFiZWwuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgICAgICBpZiAod29yZHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaW5pdGlhbHMgPSBgJHtpdGVtLmxhYmVsLnN1YnN0cmluZygwLCAxKX0ke2l0ZW0ubGFiZWwuc3Vic3RyaW5nKDEsIDEpfWA7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLmluaXRpYWxzID0gYCR7d29yZHNbMF0uc3Vic3RyaW5nKDAsIDEpfSR7d29yZHNbMV0uc3Vic3RyaW5nKDAsIDEpfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihpdGVtLCB7IHZpc2libGU6IGl0ZW0udmlzaWJsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGl0ZW0udmlzaWJsZSwgZmlsdGVyZWQ6IHRydWUgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIGEgVVJMIGFuZCBhIGxpc3Qgb2YgaXRlbXMsIGl0IHdpbGwgZXhwYW5kIHRoZSBpdGVtIHRoYXQgbWF0Y2hlcyB0aGUgVVJMLiBJZiBub3QgaXRlbSBtYXRjaGVzIGV4YWN0bHkgdGhlIHVybCwgdGhlbiBpdCB3aWxsXG4gICAgICogbWF0Y2ggdGhlIGl0ZW0gdGhhdCBpcyBtb3N0IHJlbGV2YW50IHRvIHRoYXQgdXJsLlxuICAgICAqXG4gICAgICogQHBhcmFtIHVybFxuICAgICAqIEBwYXJhbSBpdGVtc1xuICAgICAqIEBwYXJhbSByZWxldmFudEl0ZW1cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgZmluZE1vc3RSZWxldmFudEl0ZW0odXJsOiBzdHJpbmcsIGl0ZW1zOiBFdWlNZW51SXRlbVtdLCByZWxldmFudEl0ZW0/OiBFdWlNZW51SXRlbSk6IEV1aU1lbnVJdGVtIHtcbiAgICAgICAgaWYgKCFpdGVtcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS51cmwgJiYgdXJsLmluZGV4T2YoaXRlbS51cmwuc3Vic3RyaW5nKDEpKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgcmVsZXZhbnRJdGVtID0gdGhpcy5nZXRNb3N0UmVsZXZhbnRJdGVtKHVybCwgcmVsZXZhbnRJdGVtLCBpdGVtKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICByZWxldmFudEl0ZW0gPSB0aGlzLmZpbmRNb3N0UmVsZXZhbnRJdGVtKHVybCwgaXRlbS5jaGlsZHJlbiwgcmVsZXZhbnRJdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlbGV2YW50SXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiB0d28gaXRlbXMgd2l0aCB1cmwgcmV0dXJuIHRoZSBvbmUgd2l0aCB0aGUgbW9zdCByZWxldmFudCB1cmwgdGhhdCBtYXRjaGVzIGdpdmVuIHVybFxuICAgICAqXG4gICAgICogQHBhcmFtIHVybCBBIFVSTCB0byBiZSBtYXRjaGVkIHdpdGggdGhlIG9uZSBvZiBnaXZlbiBpdGVtc1xuICAgICAqIEBwYXJhbSBpdGVtMVxuICAgICAqIEBwYXJhbSBpdGVtMlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRNb3N0UmVsZXZhbnRJdGVtKHVybDogc3RyaW5nLCBpdGVtMTogRXVpTWVudUl0ZW0sIGl0ZW0yOiBFdWlNZW51SXRlbSk6IEV1aU1lbnVJdGVtIHtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyMSA9IHVybC5yZXBsYWNlKGl0ZW0xPy51cmwgfHwgJycsICcnKTtcbiAgICAgICAgY29uc3QgcmVtYWluZGVyMiA9IHVybC5yZXBsYWNlKGl0ZW0yPy51cmwgfHwgJycsICcnKTtcblxuICAgICAgICByZXR1cm4gcmVtYWluZGVyMS5sZW5ndGggPCByZW1haW5kZXIyLmxlbmd0aCA/IGl0ZW0xIDogaXRlbTI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYW4gaXRlbSwgaWYgdGhlcmUncyBhIHBhcmVudCBleHBhbmQgaXQgdW50aWwgeW91IHJlYWNoIHRoZSByb290IGl0ZW1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIEdpdmVuIG1lbnUgaXRlbVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBleHBhbmRUb0dpdmVuSXRlbShpdGVtOiBFdWlNZW51SXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAoaXRlbS5wYXJlbnQpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gKGl0ZW0ucGFyZW50LmV4cGFuZGVkID0gdHJ1ZSkpO1xuICAgICAgICAgICAgdGhpcy5leHBhbmRUb0dpdmVuSXRlbShpdGVtLnBhcmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXQgYSByYW5kb20gaWQgdG8gYW4gaXRlbSBhbmQgaXRzIGNoaWxkIGlmIHRoZXkgZG9uJ3QgaGF2ZSBvbmVcbiAgICAgKiBAcGFyYW0gaXRlbVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRSYW5kb21JZChpdGVtOiBFdWlNZW51SXRlbSk6IEV1aU1lbnVJdGVtIHtcbiAgICAgICAgaXRlbS5pZCA9IGl0ZW0uaWQgfHwgY3J5cHRvLnJhbmRvbVVVSUQoKTtcbiAgICAgICAgaWYoaXRlbS5jaGlsZHJlbil7XG4gICAgICAgICAgICBpdGVtLmNoaWxkcmVuID0gaXRlbS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0UmFuZG9tSWQoY2hpbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYW4gZWxlbWVudCBpcyB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydFxuICAgICAqIEBwYXJhbSBlbFxuICAgICAqIEBwYXJhbSBwYXJ0aWFsbHlWaXNpYmxlXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGVsZW1lbnRJc1Zpc2libGVJblZpZXdwb3J0KGVsOiBIVE1MRWxlbWVudCwgcGFydGlhbGx5VmlzaWJsZSA9IGZhbHNlKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHsgdG9wLCBsZWZ0LCBib3R0b20sIHJpZ2h0IH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgeyBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCB9ID0gd2luZG93O1xuICAgICAgICByZXR1cm4gcGFydGlhbGx5VmlzaWJsZVxuICAgICAgICAgICAgPyAoKHRvcCA+IDAgJiYgdG9wIDwgaW5uZXJIZWlnaHQpIHx8XG4gICAgICAgICAgICAgICAgKGJvdHRvbSA+IDAgJiYgYm90dG9tIDwgaW5uZXJIZWlnaHQpKSAmJlxuICAgICAgICAgICAgKChsZWZ0ID4gMCAmJiBsZWZ0IDwgaW5uZXJXaWR0aCkgfHwgKHJpZ2h0ID4gMCAmJiByaWdodCA8IGlubmVyV2lkdGgpKVxuICAgICAgICAgICAgOiB0b3AgPj0gMCAmJiBsZWZ0ID49IDAgJiYgYm90dG9tIDw9IGlubmVySGVpZ2h0ICYmIHJpZ2h0IDw9IGlubmVyV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2Nyb2xsIHRvIGFuIGl0ZW0gaWYgaXQncyBub3QgdmlzaWJsZSBpbiB0aGUgdmlld3BvcnRcbiAgICAgKiBAcGFyYW0gdXJsXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNjcm9sbFRvSXRlbSh1cmw6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5maW5kTW9zdFJlbGV2YW50SXRlbSh1cmwsIHRoaXMuaXRlbXMpO1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgLy8gY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGF0IGl0ZW0gdG8gZXhwYW5kZWQgaWYgaXQncyBub3RcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kVG9HaXZlbkl0ZW0oaXRlbSk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KF8gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGhpcy5tZW51SXRlbXNDb21wb25lbnRzPy5maW5kKChtZW51SXRlbSkgPT4gbWVudUl0ZW0uaXRlbS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgaWYobWVudUl0ZW0gJiYgIW1lbnVJdGVtLmVsZW1lbnRJc1Zpc2libGVJblZpZXdwb3J0KCkpe1xuICAgICAgICAgICAgICAgICAgICBtZW51SXRlbS5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAzMDApO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGlmIChoYXNGaWx0ZXIpIHtcbiAgICA8ZGl2IGNsYXNzPVwiZXVpLW1lbnUtZmlsdGVyXCIgW2NsYXNzLmV1aS1tZW51LWZpbHRlci0tY29sbGFwc2VkXT1cImlzQ29sbGFwc2VkXCIgKGNsaWNrKT1cIm9uTWVudUZpbHRlckNsaWNrKCRldmVudClcIj5cbiAgICAgICAgPGV1aS1pY29uLWlucHV0PlxuICAgICAgICAgICAgPGV1aS1pY29uLXN2ZyBpY29uPVwiZXVpLWVjbC1zZWFyY2hcIiBmaWxsQ29sb3I9XCJuZXV0cmFsLWxpZ2h0ZXJcIiBhcmlhLWxhYmVsPVwiU2VhcmNoIEljb25cIj48L2V1aS1pY29uLXN2Zz5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICNmaWx0ZXJJbnB1dFxuICAgICAgICAgICAgICAgIGV1aUlucHV0VGV4dFxuICAgICAgICAgICAgICAgIFtldWlDbGVhcmFibGVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRmlsdGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hGaWx0ZXJMYWJlbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJzZWFyY2hGaWx0ZXJMYWJlbFwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImZpbHRlclZhbHVlXCIgLz5cbiAgICAgICAgPC9ldWktaWNvbi1pbnB1dD5cbiAgICA8L2Rpdj5cbn1cblxuPHVsIGV1aUxpc3QgY2xhc3M9XCJldWktbWVudVwiIHJvbGU9XCJtZW51YmFyXCIgYXJpYS1vcmllbnRhdGlvbj1cInZlcnRpY2FsXCIgdGFiaW5kZXg9XCIwXCIgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIj5cbiAgICBAaWYgKGl0ZW1zKSB7XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrIGl0ZW0uaWQ7IGxldCBpbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm1lbnVJdGVtVGVtcGxhdGVSZWZcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBtZW51SXRlbTogaXRlbSwgaW5kZXg6IGluZGV4IH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZXVpLW1lbnUtLW5vLWl0ZW1zXCI+Tm8gbWVudSBpdGVtcyBkZWZpbmVkPC9zcGFuPlxuICAgIH1cbjwvdWw+XG5cbjwhLS0gZGVzY3JpYmUgdGhlIHJlY3Vyc2l2ZSB0ZW1wbGF0ZSBvZiB0aGUgbWVudSBpdGVtIC0tPlxuPG5nLXRlbXBsYXRlICNtZW51SXRlbVRlbXBsYXRlUmVmIGxldC1pdGVtPVwibWVudUl0ZW1cIiBsZXQtcGFyZW50PVwicGFyZW50XCIgbGV0LWk9XCJpbmRleFwiPlxuICAgIDwhLS0gcmVuZGVyIHRoZSBtZW51IGl0ZW0tLT5cbiAgICA8ZXVpLW1lbnUtaXRlbVxuICAgICAgICAqbmdJZj1cIml0ZW0uZmlsdGVyZWRcIlxuICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgW3BhcmVudF09XCJwYXJlbnRcIlxuICAgICAgICBbaGFzSWNvbl09XCJoYXNJY29uc1wiXG4gICAgICAgIFtoYXNUb29sdGlwXT1cImhhc1Rvb2x0aXBcIlxuICAgICAgICBbaXNDb2xsYXBzZWRdPVwiaXNDb2xsYXBzZWRcIlxuICAgICAgICBbaGFzQm9sZFJvb3RMZXZlbF09XCJoYXNCb2xkUm9vdExldmVsXCJcbiAgICAgICAgW2hhc0NvbGxhcHNlZEluaXRpYWxzXT1cImhhc0NvbGxhcHNlZEluaXRpYWxzXCJcbiAgICAgICAgKGV4cGFuZFRvZ2dsZSk9XCJvbkV4cGFuZFRvZ2dsZSgkZXZlbnQpXCJcbiAgICAgICAgKGl0ZW1DbGljayk9XCJvbkNsaWNrKCRldmVudClcIj5cbiAgICAgICAgPCEtLSBpZiB0aGUgbWVudSBpdGVtIGhhcyBjaGlsZHJlbiwgcmVuZGVyIHRoZSBjaGlsZHJlbiAtLT5cbiAgICAgICAgQGlmIChpdGVtLmNoaWxkcmVuICYmIChpdGVtLmV4cGFuZGVkIHx8IChoYXNGaWx0ZXIgJiYgaXRlbS5maWx0ZXJlZCAmJiBmaWx0ZXJJbnB1dD8ubmF0aXZlRWxlbWVudD8udmFsdWUubGVuZ3RoID4gMCkpKSB7XG4gICAgICAgICAgICA8dWwgZXVpTGlzdCBjbGFzcz1cImV1aS1tZW51IGV1aS1tZW51LXN1YlwiIHJvbGU9XCJtZW51XCIgW2F0dHIuYXJpYS1sYWJlbF09XCJpdGVtLmxhYmVsXCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGNoaWxkIG9mIGl0ZW0uY2hpbGRyZW47IHRyYWNrIGNoaWxkLmlkOyBsZXQgY2hpbGRJbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibWVudUl0ZW1UZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG1lbnVJdGVtOiBjaGlsZCwgaW5kZXg6IGNoaWxkSW5kZXgsIHBhcmVudDogaXRlbSB9XCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgfVxuICAgIDwvZXVpLW1lbnUtaXRlbT5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
534
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLW1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vZXVpLW1lbnUvZXVpLW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZXVpLW1lbnUvZXVpLW1lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsaUJBQWlCLEVBQ2pCLEtBQUssRUFFTCxNQUFNLEVBQ04sWUFBWSxFQUdaLFlBQVksRUFDWixnQkFBZ0IsRUFHaEIsWUFBWSxFQUdaLFNBQVMsRUFDVCxVQUFVLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUEwQixhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFHcEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7QUFTakUsTUFBTSxPQUFPLGdCQUFnQjtJQUl6QixJQUNXLFVBQVU7UUFDakIsT0FBTztZQUNILFVBQVU7WUFDVixJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFBLENBQUMsQ0FBQyxFQUFFO1NBQ3JDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUE0QkQsWUFDWSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIs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QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUNFLGVBQWU7c0JBQXRELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsZ0JBQWdCO3NCQUF2RCxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUU1QixPQUFPO3NCQUFoQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBWVAsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIE9uRGVzdHJveSxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIFZpZXdDaGlsZHJlbixcbiAgICBRdWVyeUxpc3QsXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSwgTmF2aWdhdGlvbkVuZCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGNvbnN1bWVFdmVudCB9IGZyb20gJ0BldWkvY29yZSc7XG5pbXBvcnQgeyBFdWlNZW51SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vZXVpLW1lbnUtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXVpTWVudUl0ZW0gfSBmcm9tICcuL21vZGVscy9ldWktbWVudS1pdGVtLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdldWktbWVudScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2V1aS1tZW51LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9zdHlsZXMvX2luZGV4LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxufSlcbmV4cG9ydCBjbGFzcyBFdWlNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XG4gICAgQFZpZXdDaGlsZHJlbihFdWlNZW51SXRlbUNvbXBvbmVudCkgcHJvdGVjdGVkIG1lbnVJdGVtc0NvbXBvbmVudHM6IFF1ZXJ5TGlzdDxFdWlNZW51SXRlbUNvbXBvbmVudD47XG4gICAgQFZpZXdDaGlsZCgnZmlsdGVySW5wdXQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgcHJvdGVjdGVkIGZpbHRlcklucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgcHVibGljIGdldCBjc3NDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAnZXVpLW1lbnUnLFxuICAgICAgICAgICAgdGhpcy5pc0NvbGxhcHNlZCA/ICdldWktbWVudS0tY29sbGFwc2VkJyA6ICcnLFxuICAgICAgICAgICAgIXRoaXMuaGFzSWNvbnMgPyAnZXVpLW1lbnUtLW5vLWljb25zJyA6ICcnLFxuICAgICAgICAgICAgdGhpcy5pc0ZsYXQgPyAnZXVpLW1lbnUtLWZsYXQnOiAnJyxcbiAgICAgICAgXS5qb2luKCcgJykudHJpbSgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGl0ZW1zOiBFdWlNZW51SXRlbVtdO1xuICAgIEBJbnB1dCgpIHNlYXJjaEZpbHRlckxhYmVsOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZXh0ZXJuYWxMaW5rTGFiZWw6IHN0cmluZztcbiAgICBASW5wdXQoKSBmcmFnbWVudElkOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZmlsdGVyVmFsdWUgPSAnJztcblxuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBpc0NvbGxhcHNlZCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNDb2xsYXBzZWRJbml0aWFscyA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNGaWx0ZXIgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzSWNvbnMgPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzVG9vbHRpcCA9IHRydWU7XG4gICAgLyoqXG4gICAgICogRXhwYW5kIGFsbCBpdGVtcyBpbiB0aGUgbWVudS4gQWZmZWN0cyBvbmx5IGl0ZW1zIHRoYXQgaGF2ZSBubyBleHBhbmRlZCBwcm9wZXJ0eSBzZXQuXG4gICAgICogZS5nLiBpdGVtcyA9IFt7bGFiZWw6IHRlc3QsIGV4cGFuZGVkOiB0cnVlfSwge2xhYmVsOiB0ZXN0MiwgZXhwYW5kZWQ6IGZhbHNlfSwge2xhYmVsOiB0ZXN0M31dIHdpbGwgZXhwYW5kIG9ubHkgdGVzdDMuXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGV4cGFuZEFsbEl0ZW1zID0gZmFsc2U7XG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGlzRmxhdCA9IGZhbHNlO1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBoYXNTY3JvbGxUb0l0ZW0gPSBmYWxzZTtcbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgaGFzQm9sZFJvb3RMZXZlbCA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIGlzQ2xpY2s6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgaXRlbUNsaWNrOiBFdmVudEVtaXR0ZXI8RXVpTWVudUl0ZW0+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdWlNZW51SXRlbT4oKTtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBmb2N1c0tleU1hbmFnZXI6IEZvY3VzS2V5TWFuYWdlcjxFdWlNZW51SXRlbUNvbXBvbmVudD47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICAgICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICkge31cblxuICAgIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgICBzdG9wUHJvcGFnYXRpb24oZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIG9uS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICAvLyBmaW5kcyBmaXJzdCBjaGlsZCB3aGVuIEFycm93RG93blxuICAgICAgICBjb25zdCBmaXJzdENoaWxkID0gdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8uaXRlbS5jaGlsZHJlbj8gdGhpcy5maW5kRmlyc3RGaWx0ZXJlZEl0ZW0odGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8uaXRlbS5jaGlsZHJlbikgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGZpcnN0Rm9jdXNhYmxlSXRlbSA9IHRoaXMuZmluZEZvY3VzYWJsZUl0ZW0oZmlyc3RDaGlsZCk7XG4gICAgICAgIC8vIGZpbmRzIHRoZSBwYXJlbnQgZWxlbWVudFxuICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtPy5pdGVtLnBhcmVudDtcbiAgICAgICAgY29uc3QgcGFyZW50Rm9jdXNhYmxlSXRlbSA9IHRoaXMuZmluZEZvY3VzYWJsZUl0ZW0ocGFyZW50KTtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0VudGVyJzoge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uaXNMaW5rSXRlbSB8fCB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtLmlzVXJsSXRlbSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uZGlzYWJsZWRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbS5vbkNsaWNrKHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnQXJyb3dSaWdodCc6IHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtPy5pdGVtLmFjdGlvbkljb24pe1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQWN0aW9uSWNvbkZvY3VzU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtPy5pdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtPy5vbkV4cGFuZFRvZ2dsZShldmVudCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOiB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8uaXRlbS5hY3Rpb25JY29uKXtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja0FjdGlvbkljb25Gb2N1c1N0YXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtPy5pdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtLm9uRXhwYW5kVG9nZ2xlKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8uaXRlbS5jaGlsZHJlbiAmJiB0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtPy5pdGVtLmV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vZm9jdXNlcyBmaXJzdCBjaGlsZFxuICAgICAgICAgICAgICAgICAgICBmaXJzdEZvY3VzYWJsZUl0ZW0/LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnVwZGF0ZUFjdGl2ZUl0ZW0oZmlyc3RGb2N1c2FibGVJdGVtKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBmaW5kcyBsYXN0IGZpbHRlcmVkIGNoaWxkIHdoZW4gQXJyb3dEb3duIGFuZCBuYXZpZ2F0aW5nIHdpdGhpbiBzdWJtZW51XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ2hpbGRyZW4gPSB0aGlzLmZpbmRGaWx0ZXJlZEl0ZW1zKHBhcmVudC5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDaGlsZEluZGV4ID0gKGZpbHRlcmVkQ2hpbGRyZW4/Lmxlbmd0aCkgLSAxO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q2hpbGQgPSBmaWx0ZXJlZENoaWxkcmVuW2xhc3RDaGlsZEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGFzdEZvY3VzYWJsZUl0ZW0gPSB0aGlzLmZpbmRGb2N1c2FibGVJdGVtKGxhc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBhY3RpdmUgaXRlbSBpcyB0aGUgbGFzdCBjaGlsZCwgcHV0cyB0aGUgZm9jdXMgb24gdGhlIG5leHQgcGFyZW50XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0gPT09IGxhc3RGb2N1c2FibGVJdGVtKXtcbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShwYXJlbnRGb2N1c2FibGVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0TmV4dEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4ICsxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNraXBzIHJlbWFpbmluZyBjaGlsZHJlbiBpbiB0aGUgcXVlcnkgbGlzdCB3aGVuIHRoZXJlIGlzIGV4cGFuZGVkIG5vZGVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2tpcFByZWRpY2F0ZShtZW51SXRlbSA9PiBtZW51SXRlbS5wYXJlbnQgIT0gdW5kZWZpbmVkIHx8IG1lbnVJdGVtLml0ZW0udmlzaWJsZSA9PT0gZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOiB7XG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGZpbmRzIGZpcnN0IGZpbHRlcmVkIGNoaWxkIHdoZW4gQXJyb3dVcFxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZENoaWxkcmVuID0gdGhpcy5maW5kRmlsdGVyZWRJdGVtcyhwYXJlbnQuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaXJzdENoaWxkVXAgPSBmaWx0ZXJlZENoaWxkcmVuWycwJ11cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlyc3RGb2N1c2FibGVJdGVtVXAgPSB0aGlzLmZpbmRGb2N1c2FibGVJdGVtKGZpcnN0Q2hpbGRVcCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gbmF2aWdhdGluZyB1cCBvbiBhIHN1Ym1lbnUgZm9jdXNlcyB0aGUgcGFyZW50IGlmIHRoZSBhY3RpdmUgaXRlbSBpcyB0aGUgZmlyc3QgY2hpbGRcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbSA9PT0gZmlyc3RGb2N1c2FibGVJdGVtVXApe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShwYXJlbnRGb2N1c2FibGVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCAtMSk7XG4gICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBuYXZpZ2F0aW5nIHVwIGZyb20gYSBwYXJlbnQgZWxlbWVudCB0byBhbiBleHBhbmRlZCBzdWJtZW51LCBmaW5kcyB0aGUgbGFzdCBjaGlsZCBhbmQgZm9jdXNlcyBpdFxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmZvY3VzS2V5TWFuYWdlci5hY3RpdmVJdGVtPy5pdGVtLmNoaWxkcmVuICYmIHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0/Lml0ZW0uZXhwYW5kZWQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRDaGlsZHJlbiA9IHRoaXMuZmluZEZpbHRlcmVkSXRlbXModGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbT8uaXRlbS5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0Q2hpbGRJbmRleFVwID0gKGZpbHRlcmVkQ2hpbGRyZW4ubGVuZ3RoKSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsYXN0Rm9jdXNhYmxlSXRlbVVwID10aGlzLmZpbmRGb2N1c2FibGVJdGVtKGZpbHRlcmVkQ2hpbGRyZW5bbGFzdENoaWxkSW5kZXhVcF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIuc2V0QWN0aXZlSXRlbShsYXN0Rm9jdXNhYmxlSXRlbVVwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlci5vbktleWRvd24oZXZlbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5pdGVtcykge1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuY29uZmlndXJlSXRlbXModGhpcy5pdGVtcyk7XG4gICAgICAgICAgICAvLyBnZXQgY3VycmVudCB1cmxcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRVcmwgPSB0aGlzLnJvdXRlci51cmw7XG4gICAgICAgICAgICAvLyBmaW5kIGFuIGl0ZW0gdGhhdCBtYXRjaGVzIHRoZSBjdXJyZW50IHVybCBvciB0aGUgbW9zdCByZWxldmFudCBvbmVcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZpbmRNb3N0UmVsZXZhbnRJdGVtKGN1cnJlbnRVcmwsIHRoaXMuaXRlbXMpO1xuICAgICAgICAgICAgLy8gZXhwYW5kIHRvIHRoYXQgaXRlbVxuICAgICAgICAgICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZFRvR2l2ZW5JdGVtKGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRXhwYW5kIC8gQ29sbGFwc2UgQWxsIGl0ZW1zXG4gICAgICAgIGlmIChjaGFuZ2VzLmV4cGFuZEFsbEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5zZXRFeHBhbmRlZFRvQWxsSXRlbXMoY29lcmNlQm9vbGVhblByb3BlcnR5KGNoYW5nZXMuZXhwYW5kQWxsSXRlbXMuY3VycmVudFZhbHVlKSwgdGhpcy5pdGVtcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5maWx0ZXJWYWx1ZSAmJiB0aGlzLmhhc0ZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5vbkZpbHRlcihjaGFuZ2VzLmZpbHRlclZhbHVlLmN1cnJlbnRWYWx1ZSA/PyAnJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZWZyZXNoIHdoZW4gaW50ZXJhY3RpdmUgY29sbGFwc2VkIHRvIGluaXRpYWxzXG4gICAgICAgIGlmIChjaGFuZ2VzLmhhc0NvbGxhcHNlZEluaXRpYWxzKSB7XG4gICAgICAgICAgICB0aGlzLmhhc0NvbGxhcHNlZEluaXRpYWxzID0gY2hhbmdlcy5oYXNDb2xsYXBzZWRJbml0aWFscy5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5jb25maWd1cmVJdGVtcyh0aGlzLml0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGNoYW5nZXMuaGFzU2Nyb2xsVG9JdGVtKXtcbiAgICAgICAgICAgIHRoaXMuaGFzU2Nyb2xsVG9JdGVtID0gY2hhbmdlcy5oYXNTY3JvbGxUb0l0ZW0uY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgaWYodGhpcy5oYXNTY3JvbGxUb0l0ZW0pe1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9JdGVtKHRoaXMucm91dGVyLnVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZihjaGFuZ2VzLmhhc0ZpbHRlcil7XG4gICAgICAgICAgICB0aGlzLmhhc0ZpbHRlciA9IGNoYW5nZXMuaGFzRmlsdGVyLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmKCF0aGlzLmhhc0ZpbHRlcikge1xuICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBhbGwgaXRlbXMgYW5kIHJlc2V0IHRoZSBmaWx0ZXJlZCBwcm9wZXJ0eVxuICAgICAgICAgICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmZpbHRlck1lbnVJdGVtcyh0aGlzLml0ZW1zLCAnJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBMYWJlbHMgZGVmYXVsdCB2YWx1ZXMgLSBUT0RPIDogdHJhbnNsYXRpb25zXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hGaWx0ZXJMYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hGaWx0ZXJMYWJlbCA9ICdTZWFyY2ggZmlsdGVyJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHN1YnNjcmlwdGlvbiB0byByb3V0ZXMgdXJsIGNoYW5nZXMgZm9yIGFjdGl2YXRpbmcgdGhlIHNjcm9sbEludG9WaWV3XG4gICAgICAgIHRoaXMucm91dGVyLmV2ZW50cy5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAvLyBIYW5kbGUgcm91dGUgY2hhbmdlIGV2ZW50XG4gICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBOYXZpZ2F0aW9uRW5kKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzU2Nyb2xsVG9JdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9JdGVtKGV2ZW50LnVybCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIGluc3RhbnRpYXRlcyBGb2N1c0tleU1hbmFnZXIgd2l0aCB0aGUgcXVlcnkgbGlzdCBvZiBpdGVtcyBlbmFibGluZyB3cmFwcGluZ1xuICAgICAgICB0aGlzLmZvY3VzS2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXIodGhpcy5tZW51SXRlbXNDb21wb25lbnRzKS53aXRoV3JhcCgpO1xuXG4gICAgICAgIC8vIHNjcm9sbHMgdG8gdGhlIGl0ZW0gdGhhdCBtYXRjaGVzIHRoZSBjdXJyZW50IHVybFxuICAgICAgICBpZih0aGlzLmhhc1Njcm9sbFRvSXRlbSl7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvSXRlbSh0aGlzLnJvdXRlci51cmwpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTp2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uQ2xpY2soaXRlbTogRXVpTWVudUl0ZW0pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpdGVtLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAoaXRlbS51cmxFeHRlcm5hbCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKGl0ZW0udXJsRXh0ZXJuYWwsIGl0ZW0udXJsRXh0ZXJuYWxUYXJnZXQgfHwgJ19ibGFuaycpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnVybCkge1xuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtpdGVtLnVybF0sIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgZnJhZ21lbnQ6IHRoaXMuZnJhZ21lbnRJZCB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLmNvbW1hbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5jb21tYW5kKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkV4cGFuZFRvZ2dsZShpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpdGVtLmxpbmspIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcz8ubWFwKChpdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdC5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LmlkID09PSBpdGVtLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdC5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaXNDbGljay5lbWl0KHRydWUpO1xuICAgICAgICB0aGlzLml0ZW1DbGljay5lbWl0KGl0ZW0pO1xuXG4gICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gdGhpcy5maW5kRm9jdXNhYmxlSXRlbShpdGVtKTtcbiAgICAgICAgdGhpcy5mb2N1c0tleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbShmb2N1c2VkSXRlbSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIG9uRXhwYW5kVG9nZ2xlKGl0ZW06IEV1aU1lbnVJdGVtKTogdm9pZCB7XG4gICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICB0aGlzLm9uRXhwYW5kVG9nZ2xlZChpdGVtLCB0aGlzLml0ZW1zKTtcbiAgICAgICAgICAgIC8vIFRPRE86IGludmVzdGlnYXRlIHdoeSB0aGUgYWJvdmUgaXMgbmVlZGVkLiBDYW4gaXQgYmUgc2ltcGx5IFwiaXRlbS5leHBhbmRlZCA9ICFpdGVtLmV4cGFuZGVkO1wiID9cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvbk1lbnVGaWx0ZXJDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdW1lRXZlbnQoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbHRlciB0aGUgbWVudSBpdGVtcyBiYXNlZCBvbiB0aGUgaW5wdXQgdmFsdWVcbiAgICAgKiBAcGFyYW0gZXZlbnRcbiAgICAgKiBAcHJvdGVjdGVkXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9uRmlsdGVyKGV2ZW50OiBFdmVudCk6IHZvaWQ7XG4gICAgcHJvdGVjdGVkIG9uRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkO1xuICAgIHByb3RlY3RlZCBvbkZpbHRlcihldmVudE9yVmFsdWU6IEV2ZW50IHwgc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZXZlbnRPclZhbHVlIGluc3RhbmNlb2YgRXZlbnRcbiAgICAgICAgICAgID8gKGV2ZW50T3JWYWx1ZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWVcbiAgICAgICAgICAgIDogZXZlbnRPclZhbHVlO1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5maWx0ZXJNZW51SXRlbXModGhpcy5pdGVtcywgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZpbmRzIHRoZSBFdWlNZW51SXRlbUNvbXBvbmVudCBpbiB0aGUgcXVlcmllZCBmb2N1c2FibGVJdGVtc1tdIHRoYXQgIG1hdGNoZXMgdGhlIHBhc3NlZCBFdWlNZW51SXRlbSBvYmplY3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBtZW51SXRlbSBhbiBFdWlNZW51SXRlbVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaW5kRm9jdXNhYmxlSXRlbShtZW51SXRlbTogRXVpTWVudUl0ZW0gKTogRXVpTWVudUl0ZW1Db21wb25lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5tZW51SXRlbXNDb21wb25lbnRzLmZpbmQoXG4gICAgICAgICAgICAoZm9jdXNhYmxlSXRlbSkgPT4gZm9jdXNhYmxlSXRlbS5pdGVtLmxhYmVsID09PSBtZW51SXRlbT8ubGFiZWwgJiYgZm9jdXNhYmxlSXRlbS5pdGVtLmlkID09PSBtZW51SXRlbS5pZCxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBmaW5kcyB0aGUgZmlyc3QgaXRlbSB0aGF0IGlzIGZpbHRlcmVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWVudUl0ZW1zIGFuIGFycmF5IG9mIEV1aU1lbnVJdGVtXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbmRGaXJzdEZpbHRlcmVkSXRlbShtZW51SXRlbXM6IEV1aU1lbnVJdGVtIFtdKTogRXVpTWVudUl0ZW0ge1xuICAgICAgICByZXR1cm4gbWVudUl0ZW1zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uZmlsdGVyZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGZpbmRzIGFsbCBmaWx0ZXJlZCBtZW51IGl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbWVudUl0ZW1zIGFuIGFycmF5IG9mIEV1aU1lbnVJdGVtXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGZpbmRGaWx0ZXJlZEl0ZW1zKG1lbnVJdGVtczogRXVpTWVudUl0ZW0gW10pOiBFdWlNZW51SXRlbSBbXSB7XG4gICAgICAgIHJldHVybiBtZW51SXRlbXMuZmlsdGVyKChpdGVtcykgPT4gaXRlbXMuZmlsdGVyZWQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGNoZWNrcyB0aGUgZm9jdXMgc3RhdGUgb2YgdGhlIGFjdGlvbiBpY29uXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgY2hlY2tBY3Rpb25JY29uRm9jdXNTdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGFjdGlvbiBpY29uIGlzIGZvY3VzZWQgYW5kIGlmIG5vdCBmb2N1cyBpdCwgb3RoZXJ3aXNlIGZvY3VzIHRoZSBhY3RpdmUgaXRlbVxuICAgICAgICAhdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbS5pc0FjdGlvbkljb25Gb2N1c2VkID8gdGhpcy5mb2N1c0tleU1hbmFnZXIuYWN0aXZlSXRlbS5mb2N1c0FjdGlvbkljb24oKSA6IHRoaXMuZm9jdXNLZXlNYW5hZ2VyLmFjdGl2ZUl0ZW0uZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBmaWx0ZXIgYWxsIG1lbnUgaXRlbXMgZ2l2ZW4gYSB2YWx1ZVxuICAgICAqXG4gICAgICogQHBhcmFtIG1lbnVJdGVtcyBhbiBhcnJheSBvZiBtZW51IGl0ZW1zXG4gICAgICogQHBhcmFtIGZpbHRlclZhbHVlIHRoZSB2YWx1ZSB0byBmaWx0ZXIgbWVudSBpdGVtc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaWx0ZXJNZW51SXRlbXMobWVudUl0ZW1zOiBFdWlNZW51SXRlbVtdLCBmaWx0ZXJWYWx1ZTogc3RyaW5nKTogRXVpTWVudUl0ZW1bXSB7XG4gICAgICAgIHJldHVybiBtZW51SXRlbXM/Lm1hcCgoaXRlbTogRXVpTWVudUl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gaXRlbS5sYWJlbD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKGZpbHRlclZhbHVlLnRvTG93ZXJDYXNlKCkpICE9PSAtMTtcbiAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5jaGlsZHJlbiA9IHRoaXMuZmlsdGVyTWVudUl0ZW1zKGl0ZW0uY2hpbGRyZW4sIGZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgICAgICBpdGVtLmZpbHRlcmVkID0gaXRlbS5jaGlsZHJlbi5maWx0ZXIoKGwpID0+IGxbJ2ZpbHRlcmVkJ10gPT09IHRydWUpLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5maWx0ZXJlZCA9IGZvdW5kO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtLmZpbHRlcmVkID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSkgfHwgW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZXhwYW5kIC8gY29sbGFwc2UgYWxsIGl0ZW1zXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNFeHBhbmRlZFxuICAgICAqIEBwYXJhbSBpdGVtc1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRFeHBhbmRlZFRvQWxsSXRlbXMoaXNFeHBhbmRlZDogYm9vbGVhbiwgaXRlbXM6IEV1aU1lbnVJdGVtW10pOiBFdWlNZW51SXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zPy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgaXRlbS5leHBhbmRlZCA9IGl0ZW0uZXhwYW5kZWQgPz8gaXNFeHBhbmRlZDtcbiAgICAgICAgICAgICAgICBpdGVtLmNoaWxkcmVuID0gdGhpcy5zZXRFeHBhbmRlZFRvQWxsSXRlbXMoaXNFeHBhbmRlZCwgaXRlbS5jaGlsZHJlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihpdGVtLCB7IHZpc2libGU6IGl0ZW0udmlzaWJsZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGl0ZW0udmlzaWJsZSB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZXhwYW5kIC8gY29sbGFwc2UgYSBtZW51IGl0ZW1cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtIFRoZSBpdGVtIHdoZXJlIHRoZSBcImV4cGFuZFwiIGhhZCBiZWVuIHRvZ2dsZWRcbiAgICAgKiBAcGFyYW0gaXRlbXMgVGhlIGl0ZW1zIGxpc3QgKHVzZWQgZm9yIHJlY3Vyc2lvbilcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgb25FeHBhbmRUb2dnbGVkKGl0ZW06IEV1aU1lbnVJdGVtLCBpdGVtczogRXVpTWVudUl0ZW1bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpdGVtSWR4ID0gaXRlbXM/LmluZGV4T2YoaXRlbSk7XG4gICAgICAgIGlmIChpdGVtSWR4ID4gLTEpIHtcbiAgICAgICAgICAgIGl0ZW1zW2l0ZW1JZHhdLmV4cGFuZGVkID0gIWl0ZW1zW2l0ZW1JZHhdLmV4cGFuZGVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbXMuZm9yRWFjaCgoaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FeHBhbmRUb2dnbGVkKGl0ZW0sIGkuY2hpbGRyZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY29uZmlndXJlIGFuIGFycmF5IG9mIGl0ZW1zIHdpdGggdmlzaWJsZSwgZmlsdGVyZWQgYW5kIGV4cGFuZCAoaW4gY2FzZSBvZiBleHBhbmRBbGxJdGVtcyBmbGFnIGVuYWJsZWQpIHByb3BlcnRpZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtcyBBbiBhcnJheSBvZiBFdWlNZW51SXRlbVxuICAgICAqIEBwYXJhbSBwYXJlbnQgdGhlIHBhcmVudCBpdGVtIG9mIGl0ZW1zIGlmIGV4aXN0c1xuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb25maWd1cmVJdGVtcyhpdGVtczogRXVpTWVudUl0ZW1bXSwgcGFyZW50PzogRXVpTWVudUl0ZW0pOiBFdWlNZW51SXRlbVtdIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1zPy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIC8vIHJlY3Vyc2lvbiBpbiBjYXNlIHRoZXJlIGFyZSBjaGlsZHJlblxuICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBpdGVtLmNoaWxkcmVuID0gdGhpcy5jb25maWd1cmVJdGVtcyhpdGVtLmNoaWxkcmVuLCBpdGVtKTtcbiAgICAgICAgICAgICAgICAvLyBleHBhbmQgYWxsIHBhcmVudHMgd2l0aCBjaGlsZHJlblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmV4cGFuZEFsbEl0ZW1zKSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHBvaW50IHRvIHRoZSBwYXJlbnRcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBpdGVtLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBpdGVtcyBhcmUgY29uZmlndXJlZCB3aXRoIGEgdW5pcXVlIGlkXG4gICAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcz8ubWFwKChpdGVtKSA9PiB0aGlzLnNldFJhbmRvbUlkKGl0ZW0pKTtcblxuICAgICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgJiYgdGhpcy5oYXNDb2xsYXBzZWRJbml0aWFscykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gaXRlbS5sYWJlbC5zcGxpdCgnICcpO1xuICAgICAgICAgICAgICAgIGlmICh3b3Jkcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5pbml0aWFscyA9IGAke2l0ZW0ubGFiZWwuc3Vic3RyaW5nKDAsIDEpfSR7aXRlbS5sYWJlbC5zdWJzdHJpbmcoMSwgMSl9YDtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uaW5pdGlhbHMgPSBgJHt3b3Jkc1swXS5zdWJzdHJpbmcoMCwgMSl9JHt3b3Jkc1sxXS5zdWJzdHJpbmcoMCwgMSl9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGl0ZW0sIHsgdmlzaWJsZTogaXRlbS52aXNpYmxlID09PSB1bmRlZmluZWQgPyB0cnVlIDogaXRlbS52aXNpYmxlLCBmaWx0ZXJlZDogdHJ1ZSB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBVUkwgYW5kIGEgbGlzdCBvZiBpdGVtcywgaXQgd2lsbCBleHBhbmQgdGhlIGl0ZW0gdGhhdCBtYXRjaGVzIHRoZSBVUkwuIElmIG5vdCBpdGVtIG1hdGNoZXMgZXhhY3RseSB0aGUgdXJsLCB0aGVuIGl0IHdpbGxcbiAgICAgKiBtYXRjaCB0aGUgaXRlbSB0aGF0IGlzIG1vc3QgcmVsZXZhbnQgdG8gdGhhdCB1cmwuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsXG4gICAgICogQHBhcmFtIGl0ZW1zXG4gICAgICogQHBhcmFtIHJlbGV2YW50SXRlbVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSBmaW5kTW9zdFJlbGV2YW50SXRlbSh1cmw6IHN0cmluZywgaXRlbXM6IEV1aU1lbnVJdGVtW10sIHJlbGV2YW50SXRlbT86IEV1aU1lbnVJdGVtKTogRXVpTWVudUl0ZW0ge1xuICAgICAgICBpZiAoIWl0ZW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLnVybCAmJiB1cmwuaW5kZXhPZihpdGVtLnVybC5zdWJzdHJpbmcoMSkpID4gLTEpIHtcbiAgICAgICAgICAgICAgICByZWxldmFudEl0ZW0gPSB0aGlzLmdldE1vc3RSZWxldmFudEl0ZW0odXJsLCByZWxldmFudEl0ZW0sIGl0ZW0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIHJlbGV2YW50SXRlbSA9IHRoaXMuZmluZE1vc3RSZWxldmFudEl0ZW0odXJsLCBpdGVtLmNoaWxkcmVuLCByZWxldmFudEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVsZXZhbnRJdGVtO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdpdmVuIHR3byBpdGVtcyB3aXRoIHVybCByZXR1cm4gdGhlIG9uZSB3aXRoIHRoZSBtb3N0IHJlbGV2YW50IHVybCB0aGF0IG1hdGNoZXMgZ2l2ZW4gdXJsXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdXJsIEEgVVJMIHRvIGJlIG1hdGNoZWQgd2l0aCB0aGUgb25lIG9mIGdpdmVuIGl0ZW1zXG4gICAgICogQHBhcmFtIGl0ZW0xXG4gICAgICogQHBhcmFtIGl0ZW0yXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1vc3RSZWxldmFudEl0ZW0odXJsOiBzdHJpbmcsIGl0ZW0xOiBFdWlNZW51SXRlbSwgaXRlbTI6IEV1aU1lbnVJdGVtKTogRXVpTWVudUl0ZW0ge1xuICAgICAgICBjb25zdCByZW1haW5kZXIxID0gdXJsLnJlcGxhY2UoaXRlbTE/LnVybCB8fCAnJywgJycpO1xuICAgICAgICBjb25zdCByZW1haW5kZXIyID0gdXJsLnJlcGxhY2UoaXRlbTI/LnVybCB8fCAnJywgJycpO1xuXG4gICAgICAgIHJldHVybiByZW1haW5kZXIxLmxlbmd0aCA8IHJlbWFpbmRlcjIubGVuZ3RoID8gaXRlbTEgOiBpdGVtMjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhbiBpdGVtLCBpZiB0aGVyZSdzIGEgcGFyZW50IGV4cGFuZCBpdCB1bnRpbCB5b3UgcmVhY2ggdGhlIHJvb3QgaXRlbVxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0gR2l2ZW4gbWVudSBpdGVtXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGV4cGFuZFRvR2l2ZW5JdGVtKGl0ZW06IEV1aU1lbnVJdGVtKTogdm9pZCB7XG4gICAgICAgIGlmIChpdGVtLnBhcmVudCkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiAoaXRlbS5wYXJlbnQuZXhwYW5kZWQgPSB0cnVlKSk7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZFRvR2l2ZW5JdGVtKGl0ZW0ucGFyZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNldCBhIHJhbmRvbSBpZCB0byBhbiBpdGVtIGFuZCBpdHMgY2hpbGQgaWYgdGhleSBkb24ndCBoYXZlIG9uZVxuICAgICAqIEBwYXJhbSBpdGVtXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFJhbmRvbUlkKGl0ZW06IEV1aU1lbnVJdGVtKTogRXVpTWVudUl0ZW0ge1xuICAgICAgICBpdGVtLmlkID0gaXRlbS5pZCB8fCBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuICAgICAgICBpZihpdGVtLmNoaWxkcmVuKXtcbiAgICAgICAgICAgIGl0ZW0uY2hpbGRyZW4gPSBpdGVtLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZXRSYW5kb21JZChjaGlsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTY3JvbGwgdG8gYW4gaXRlbSBpZiBpdCdzIG5vdCB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydFxuICAgICAqIEBwYXJhbSB1cmxcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgc2Nyb2xsVG9JdGVtKHVybDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmZpbmRNb3N0UmVsZXZhbnRJdGVtKHVybCwgdGhpcy5pdGVtcyk7XG4gICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoYXQgaXRlbSB0byBleHBhbmRlZCBpZiBpdCdzIG5vdFxuICAgICAgICAgICAgdGhpcy5leHBhbmRUb0dpdmVuSXRlbShpdGVtKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoXyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVudUl0ZW0gPSB0aGlzLm1lbnVJdGVtc0NvbXBvbmVudHM/LmZpbmQoKG1lbnVJdGVtKSA9PiBtZW51SXRlbS5pdGVtLmlkID09PSBpdGVtLmlkKTtcbiAgICAgICAgICAgICAgICBpZihtZW51SXRlbSAmJiAhbWVudUl0ZW0uZWxlbWVudElzVmlzaWJsZUluVmlld3BvcnQoKSl7XG4gICAgICAgICAgICAgICAgICAgIG1lbnVJdGVtLnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDMwMCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaWYgKGhhc0ZpbHRlcikge1xuICAgIDxkaXYgY2xhc3M9XCJldWktbWVudS1maWx0ZXJcIiBbY2xhc3MuZXVpLW1lbnUtZmlsdGVyLS1jb2xsYXBzZWRdPVwiaXNDb2xsYXBzZWRcIiAoY2xpY2spPVwib25NZW51RmlsdGVyQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICA8ZXVpLWljb24taW5wdXQ+XG4gICAgICAgICAgICA8ZXVpLWljb24tc3ZnIGljb249XCJldWktZWNsLXNlYXJjaFwiIGZpbGxDb2xvcj1cIm5ldXRyYWwtbGlnaHRlclwiIGFyaWEtbGFiZWw9XCJTZWFyY2ggSWNvblwiPjwvZXVpLWljb24tc3ZnPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI2ZpbHRlcklucHV0XG4gICAgICAgICAgICAgICAgZXVpSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgW2V1aUNsZWFyYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25GaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaEZpbHRlckxhYmVsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cInNlYXJjaEZpbHRlckxhYmVsXCJcbiAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZmlsdGVyVmFsdWVcIiAvPlxuICAgICAgICA8L2V1aS1pY29uLWlucHV0PlxuICAgIDwvZGl2PlxufVxuXG48dWwgZXVpTGlzdCBjbGFzcz1cImV1aS1tZW51XCIgcm9sZT1cIm1lbnViYXJcIiBhcmlhLW9yaWVudGF0aW9uPVwidmVydGljYWxcIiB0YWJpbmRleD1cIjBcIiAoa2V5ZG93bik9XCJvbktleWRvd24oJGV2ZW50KVwiPlxuICAgIEBpZiAoaXRlbXMpIHtcbiAgICAgICAgQGZvciAoaXRlbSBvZiBpdGVtczsgdHJhY2sgaXRlbS5pZDsgbGV0IGluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwibWVudUl0ZW1UZW1wbGF0ZVJlZlwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IG1lbnVJdGVtOiBpdGVtLCBpbmRleDogaW5kZXggfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJldWktbWVudS0tbm8taXRlbXNcIj5ObyBtZW51IGl0ZW1zIGRlZmluZWQ8L3NwYW4+XG4gICAgfVxuPC91bD5cblxuPCEtLSBkZXNjcmliZSB0aGUgcmVjdXJzaXZlIHRlbXBsYXRlIG9mIHRoZSBtZW51IGl0ZW0gLS0+XG48bmctdGVtcGxhdGUgI21lbnVJdGVtVGVtcGxhdGVSZWYgbGV0LWl0ZW09XCJtZW51SXRlbVwiIGxldC1wYXJlbnQ9XCJwYXJlbnRcIiBsZXQtaT1cImluZGV4XCI+XG4gICAgPCEtLSByZW5kZXIgdGhlIG1lbnUgaXRlbS0tPlxuICAgIDxldWktbWVudS1pdGVtXG4gICAgICAgICpuZ0lmPVwiaXRlbS5maWx0ZXJlZFwiXG4gICAgICAgIFtpdGVtXT1cIml0ZW1cIlxuICAgICAgICBbcGFyZW50XT1cInBhcmVudFwiXG4gICAgICAgIFtoYXNJY29uXT1cImhhc0ljb25zXCJcbiAgICAgICAgW2hhc1Rvb2x0aXBdPVwiaGFzVG9vbHRpcFwiXG4gICAgICAgIFtpc0NvbGxhcHNlZF09XCJpc0NvbGxhcHNlZFwiXG4gICAgICAgIFtoYXNCb2xkUm9vdExldmVsXT1cImhhc0JvbGRSb290TGV2ZWxcIlxuICAgICAgICBbaGFzQ29sbGFwc2VkSW5pdGlhbHNdPVwiaGFzQ29sbGFwc2VkSW5pdGlhbHNcIlxuICAgICAgICAoZXhwYW5kVG9nZ2xlKT1cIm9uRXhwYW5kVG9nZ2xlKCRldmVudClcIlxuICAgICAgICAoaXRlbUNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiPlxuICAgICAgICA8IS0tIGlmIHRoZSBtZW51IGl0ZW0gaGFzIGNoaWxkcmVuLCByZW5kZXIgdGhlIGNoaWxkcmVuIC0tPlxuICAgICAgICBAaWYgKGl0ZW0uY2hpbGRyZW4gJiYgKGl0ZW0uZXhwYW5kZWQgfHwgKGhhc0ZpbHRlciAmJiBpdGVtLmZpbHRlcmVkICYmIGZpbHRlcklucHV0Py5uYXRpdmVFbGVtZW50Py52YWx1ZS5sZW5ndGggPiAwKSkpIHtcbiAgICAgICAgICAgIDx1bCBldWlMaXN0IGNsYXNzPVwiZXVpLW1lbnUgZXVpLW1lbnUtc3ViXCIgcm9sZT1cIm1lbnVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIml0ZW0ubGFiZWxcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgQGZvciAoY2hpbGQgb2YgaXRlbS5jaGlsZHJlbjsgdHJhY2sgY2hpbGQuaWQ7IGxldCBjaGlsZEluZGV4ID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJtZW51SXRlbVRlbXBsYXRlUmVmXCIgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgbWVudUl0ZW06IGNoaWxkLCBpbmRleDogY2hpbGRJbmRleCwgcGFyZW50OiBpdGVtIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICB9XG4gICAgPC9ldWktbWVudS1pdGVtPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==