mmhglobal-dynamicform 2.10.3 → 2.10.4

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.
package/README.md CHANGED
@@ -3,21 +3,26 @@
3
3
  This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.2.13.
4
4
 
5
5
  ## Changelog
6
+ `2.10.4`<br/>
7
+ [zTreelist] - enable setFieldElementOptions for public use.<br/>
8
+ [zTreelist] - added beforeLoadColumn event to be triggered when load the column if set to group.<br/>
9
+ [zTreelist] - field element attribute DisplayName to be pirority if undefined, will use Name.
10
+
6
11
  `2.10.3`<br/>
7
- [zloop] Fix child components in zloop get duplicated after page navigation.<br/>
8
- [ztreelist] Fix zlabel not supported in ztreelist bug.<br/>
12
+ [zloop] - Fix child components in zloop get duplicated after page navigation.<br/>
13
+ [ztreelist] - Fix zlabel not supported in ztreelist bug.<br/>
9
14
 
10
15
  `2.10.2`<br/>
11
- [zselectmultiple] Use InternalComponentType to control which kendo dropdown to use.<br/>
12
- [zselectmultiple] Fix filtering issue in 2.10.1.
16
+ [zselectmultiple] - Use InternalComponentType to control which kendo dropdown to use.<br/>
17
+ [zselectmultiple] - Fix filtering issue in 2.10.1.
13
18
 
14
19
  `2.10.1`<br/>
15
20
  Added new component: ksplitter. (Require middleware 2.1.2).<br/>
16
- [zdiv] Added onclick event.<br/>
17
- [zselectmultiple] Added kendo-dropdownlist (data.Multiple == false && data.Filterable == false).<br/>
18
- [zselectmultiple] Added configurable property: enableFiltering and ClearButton.<br/>
19
- [ztree] Allow binding dynamic icon list per data items.<br/>
20
- [mainservice] shifted removeTextEditorValueFromFormPatching function to zcore.
21
+ [zdiv] - Added onclick event.<br/>
22
+ [zselectmultiple] - Added kendo-dropdownlist (data.Multiple == false && data.Filterable == false).<br/>
23
+ [zselectmultiple] - Added configurable property: enableFiltering and ClearButton.<br/>
24
+ [ztree] - Allow binding dynamic icon list per data items.<br/>
25
+ [mainservice] - shifted removeTextEditorValueFromFormPatching function to zcore.
21
26
 
22
27
  `2.10.0`<br/>
23
28
  Added new component: zloop. That clone it's child components to simulate ngFor behaviour. (Require middleware 2.1.1)<br/>
@@ -179,6 +179,9 @@ export class ZtreelistComponent extends DataListingFieldBase {
179
179
  this.options.pageAble = this.data.pageAble != undefined ? this.data.pageAble : false;
180
180
  let zfields = [];
181
181
  this.fieldService.getFormFieldCode(this.data["ColumnFieldCode"], "FormField", null, null).pipe(switchMap(fields => {
182
+ //Before get grid data
183
+ return this.beforeLoadColumn(this.group, fields, this);
184
+ }), switchMap(fields => {
182
185
  zfields = fields;
183
186
  return this.getButtonsFromZButtons(fields);
184
187
  }), tap((buttons) => {
@@ -192,6 +195,13 @@ export class ZtreelistComponent extends DataListingFieldBase {
192
195
  this.isLoading = false;
193
196
  })).subscribe();
194
197
  }
198
+ beforeLoadColumn(group, fields, me) {
199
+ if (!group.beforeLoadColumn) {
200
+ console.warn("group.beforeLoadColumn is undefined");
201
+ return of(fields);
202
+ }
203
+ return group.beforeLoadColumn(group, fields, me);
204
+ }
195
205
  // const zbuttonFields = [] as Array<ZField>;
196
206
  // fields.forEach(field => {
197
207
  // if (field.Type === "zbuttons") {
@@ -283,7 +293,7 @@ export class ZtreelistComponent extends DataListingFieldBase {
283
293
  });
284
294
  }
285
295
  insertField(field) {
286
- let colTitle = field.Name;
296
+ let colTitle = field.DisplayName ?? field.Name;
287
297
  if (colTitle.toString().startsWith('group.')) {
288
298
  colTitle = ZComponentHelper.getGroupValue(colTitle.toString(), this.group);
289
299
  }
@@ -554,4 +564,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
554
564
  type: ViewChild,
555
565
  args: [TooltipDirective]
556
566
  }] } });
557
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWVsaXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3p0cmVlbGlzdC96dHJlZWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWVsaXN0L3p0cmVlbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEQsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBNEIsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEQsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFFTyxnQkFBZ0IsRUFDN0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJuRSxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlBQ1MsUUFBa0IsRUFDbEIsU0FBbUIsRUFDbkIsVUFBb0IsRUFDcEIsV0FBcUIsRUFDckIsVUFBb0IsRUFDcEIsVUFBdUIsRUFDdkIsT0FBaUIsRUFDakIsUUFBa0IsRUFDbEIsVUFBbUIsRUFDbkIsU0FBZSxFQUNmLE9BQWdCLEVBQ2hCLGFBQXNCLEVBQ3RCLE9BQW9CLEVBQ3BCLFNBQWUsRUFDZixR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QyxDQUFDO1FBQ3RELE9BQU8sQ0FBQyxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQztJQUNoQyxDQUFDOzsrR0F6a0JVLGtCQUFrQjttR0FBbEIsa0JBQWtCLGlHQUNsQixnQkFBZ0IsdUVDaEU3Qix1OWJBcU1BOzJGRHRJYSxrQkFBa0I7a0JBTjlCLFNBQVM7K0JBQ0UsZUFBZTsyT0FNVyxVQUFVO3NCQUE3QyxTQUFTO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgb2YsIGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENlbGxDbGlja0V2ZW50LCBFeHBhbmRFdmVudCwgU2Nyb2xsTW9kZSB9IGZyb20gJ0Bwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXRyZWVsaXN0JztcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgRGF0YUxpc3RpbmdGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9kYXRhbGlzdGluZ2ZpZWxkYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcbiAgRmllbGRTZXJ2aWNlLCBXZWJBcGlTZXJ2aWNlLCBBdXRoU2VydmljZSxcclxuICBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIFpGaWVsZFxyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10b29sdGlwXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFpUcmVlTGlzdENvbHVtbiB7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIHdpZHRoOiBudW1iZXI7XHJcbiAgdmlzaWJsZTogYm9vbGVhbiB8IGFueTtcclxuICBmaWVsZFR5cGU6IHN0cmluZztcclxuICBuYXZpZ2F0ZVRvOiBzdHJpbmc7XHJcbiAgY29tbWFuZDogYW55O1xyXG4gIGNsYXNzOiBhbnk7XHJcbiAgZm9vdGVyVGVtcGxhdGU6IGJvb2xlYW47XHJcbiAgYWdncmVnYXRlVHlwZTogc3RyaW5nO1xyXG4gIGFnZ3JlZ2F0ZVRpdGxlOiBzdHJpbmc7XHJcbiAgaWNvbk9ubHk/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgWlRyZWVMaXN0T3B0aW9ucyB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc29ydGFibGU/OiBib29sZWFuLFxyXG4gICAgcHVibGljIHJlc2l6YWJsZT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgZmlsdGVyYWJsZT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgcmVvcmRlcmFibGU/OiBib29sZWFuLFxyXG4gICAgcHVibGljIGNvbHVtbk1lbnU/OiBib29sZWFuLFxyXG4gICAgcHVibGljIHNjcm9sbGFibGU/OiBTY3JvbGxNb2RlLFxyXG4gICAgcHVibGljIHJlZnJlc2g/OiBib29sZWFuLFxyXG4gICAgcHVibGljIGF1dG9CaW5kPzogYm9vbGVhbixcclxuICAgIHB1YmxpYyBkYXRhU291cmNlPzogc3RyaW5nLFxyXG4gICAgcHVibGljIGRhdGFCb3VuZD86IGFueSxcclxuICAgIHB1YmxpYyBpZEZpZWxkPzogc3RyaW5nLFxyXG4gICAgcHVibGljIHBhcmVudElkRmllbGQ/OiBzdHJpbmcsXHJcbiAgICBwdWJsaWMgY29sdW1ucz86IEFycmF5PGFueT4sXHJcbiAgICBwdWJsaWMgYWdncmVnYXRlPzogYW55LFxyXG4gICAgcHVibGljIHBhZ2VBYmxlPzogYW55LFxyXG4gICkgeyB9XHJcbn1cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtenRyZWVsaXN0XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96dHJlZWxpc3QuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4venRyZWVsaXN0LmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFp0cmVlbGlzdENvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0aW5nRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoVG9vbHRpcERpcmVjdGl2ZSkgcHVibGljIHRvb2x0aXBEaXI6IFRvb2x0aXBEaXJlY3RpdmU7XHJcbiAgLy8gQFZpZXdDaGlsZChaVHJlZUxpc3RCaW5kaW5nRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgenRyZWVsaXN0OiBaVHJlZUxpc3RCaW5kaW5nRGlyZWN0aXZlO1xyXG5cclxuICB6dHJlZWxpc3Q6IGFueSA9IG51bGw7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgZGF0YVNvdXJjZTogYW55O1xyXG4gIGlkRmllbGQgPSBcIklkXCI7XHJcbiAgcGFyZW50SWRGaWVsZCA9IFwiUGFyZW50SWRcIjtcclxuICBvcHRpb25zOiBaVHJlZUxpc3RPcHRpb25zID0gbmV3IFpUcmVlTGlzdE9wdGlvbnMoKTtcclxuICBwdWJsaWMgZ3JpZEJ0bjtcclxuICBmaWVsZGdyaWRDb2xWaXNpYmxlOiBhbnlbXTtcclxuICBwYWdlU2l6ZSA9IDIwO1xyXG4gIGlubGluZUVkaXRlZEZvcm1Hcm91cHM6IHt9O1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbjtcclxuICB0cmVlbGlzdFN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICBwcml2YXRlIGV4cGFuZGVkSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYmFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSk7XHJcbiAgfVxyXG4gIC8vIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAvLyAgIC8vIHRoaXMuenRyZWVsaXN0LnNldE9wdGlvbnMoe2RhdGE6IHRoaXMuZGF0YSwgZ3JvdXA6IHRoaXMuZ3JvdXB9KTtcclxuICAvLyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgc3VwZXIuaW5pdENvbXBvbmVudCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0dXBHcmlkQnV0dG9ucygpO1xyXG5cclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMuZGF0YS5QYWdlU2l6ZSB8fCAyMDtcclxuICAgICAgaWYgKCEhdGhpcy5kYXRhLk9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnNldExvY2FsT3B0aW9ucygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRFbGVtZW50T3B0aW9ucygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgLy8gaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAvLyAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGF0YSA9IChnRGF0YTogYW55KSA9PiB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBnRGF0YTtcclxuICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzRm9ySW5saW5lRWRpdChnRGF0YSk7XHJcbiAgICB0aGlzLnNldERlZmF1bHRFeHBhbmRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNCdXR0b25IaWRkZW4oY29sOiBhbnksIGNlbGxDb250YWluOiBhbnkpIHtcclxuICAgIGlmIChjb2wudmlzaWJsZSkge1xyXG4gICAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGNvbC52aXNpYmxlLCBjZWxsQ29udGFpbi52aWV3SXRlbS5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWNvbC5oaWRkZW5QYXJhbSB8fCBjb2wuaGlkZGVuVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2VsbENvbnRhaW4udmlld0l0ZW0uZGF0YVtjb2wuaGlkZGVuUGFyYW1dID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjZWxsQ29udGFpbi52aWV3SXRlbS5kYXRhW2NvbC5oaWRkZW5QYXJhbV0gPT09IGNvbC5oaWRkZW5WYWx1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGJ1dHRvbkNsaWNrKGJ1dHRvbjogYW55LCBjZWxsQ29udGV4dDogYW55KSB7XHJcbiAgICBpZiAoYnV0dG9uLmVkaXQpIHtcclxuICAgICAgYnV0dG9uLmVkaXQoY2VsbENvbnRleHQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwiYnV0dG9uQ2xpY2tcIixcclxuICAgICAgICB0YXJnZXQ6IGJ1dHRvbi5DbGlja0V2ZW50LFxyXG4gICAgICAgIGRhdGE6IGNlbGxDb250ZXh0XHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbk5hdmlnYXRlVG8oZXZlbnQ6IGFueSwgY29sU2V0dGluZzogYW55LCByb3dEYXRhOiBhbnksIGNlbGxEYXRhOiBzdHJpbmcpIHtcclxuICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgLy8gY29uc3QgbiA9IGNvbFNldHRpbmcubmF2aWdhdGVUby5yZXBsYWNlKCcvOmlkJywgY2VsbERhdGEpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6ICd6Z3JpZC1vbk5hdmlnYXRlVG8nLFxyXG4gICAgICB0YXJnZXQ6IGNvbFNldHRpbmcubmF2aWdhdGVUbyxcclxuICAgICAgZGF0YTogY2VsbERhdGFcclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0NvbHVtbnNWaXNpYmxlKGZpZWxkRXhwcikge1xyXG4gICAgaWYgKGZpZWxkRXhwciAhPT0gZmFsc2UgJiYgIWZpZWxkRXhwcikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHYgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgZmllbGRFeHByKTtcclxuICAgIHJldHVybiB2O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRMb2NhbE9wdGlvbnMoKSB7XHJcbiAgICBjb25zdCBvcHRpb25zOiBaVHJlZUxpc3RPcHRpb25zID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKFxyXG4gICAgICB0aGlzLmRhdGEuT3B0aW9ucyxcclxuICAgICAgdGhpcy5ncm91cFxyXG4gICAgKTtcclxuICAgIGlmICghb3B0aW9ucykge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJObyBpbml0aWFsaXNlIGZvciBGaWVsZC5PcHRpb25zOiBcIiwgdGhpcy5kYXRhLk9wdGlvbnMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgdGhpcy5vcHRpb25zLmlkRmllbGQgPSB0aGlzLm9wdGlvbnMuaWRGaWVsZCB8fCB0aGlzLmlkRmllbGQ7XHJcbiAgICB0aGlzLm9wdGlvbnMucGFyZW50SWRGaWVsZCA9IHRoaXMub3B0aW9ucy5wYXJlbnRJZEZpZWxkIHx8IHRoaXMucGFyZW50SWRGaWVsZDtcclxuXHJcbiAgICBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5vcHRpb25zLmNvbHVtbnMpLnN1YnNjcmliZSgoKSA9PiB7IHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7IH0pO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5vcHRpb25zLmRhdGFTb3VyY2UgJiZcclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5kYXRhU291cmNlID09PSBcInN0cmluZ1wiXHJcbiAgICApIHtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhU291cmNlLnN0YXJ0c1dpdGgoXCJncm91cC5cIikpIHtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5vcHRpb25zLmRhdGFTb3VyY2UsIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdEV4cGFuZGFibGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKHRoaXMuZGF0YS5OYW1lICsgXCIgLSBoYXMgaW52YWxpZCBkYXRhU291cmNlXCIpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKHRoaXMuZGF0YS5OYW1lICsgXCIgLSBkYXRhU291cmNlIHByb3BlcnR5IGlzIG5vdCBkZWNsYXJlZC5cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldEZpZWxkRWxlbWVudE9wdGlvbnMoKSB7XHJcbiAgICB0aGlzLm9wdGlvbnMuc29ydGFibGUgPSB0cnVlO1xyXG4gICAgdGhpcy5vcHRpb25zLnJlc2l6YWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnMuZmlsdGVyYWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnMucmVzaXphYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMub3B0aW9ucy5jb2x1bW5NZW51ID0gdGhpcy5kYXRhLkRpc2FibGVHcmlkQ29sdW1uTWVudSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIHRoaXMub3B0aW9ucy5zY3JvbGxhYmxlID0gdGhpcy5kYXRhWydTY3JvbGxNb2RlJ10gPyB0aGlzLmRhdGFbJ1Njcm9sbE1vZGUnXSA6ICd2aXJ0dWFsJztcclxuICAgIHRoaXMub3B0aW9ucy5pZEZpZWxkID0gdGhpcy5kYXRhW1wiaWRGaWVsZFwiXSB8fCB0aGlzLmlkRmllbGQ7XHJcbiAgICB0aGlzLm9wdGlvbnMucGFyZW50SWRGaWVsZCA9IHRoaXMuZGF0YVtcInBhcmVudElkRmllbGRcIl0gfHwgdGhpcy5wYXJlbnRJZEZpZWxkO1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbHVtbnMgPSBbXTtcclxuICAgIHRoaXMub3B0aW9ucy5hZ2dyZWdhdGUgPSBbXTtcclxuICAgIHRoaXMub3B0aW9ucy5wYWdlQWJsZSA9IHRoaXMuZGF0YS5wYWdlQWJsZSAhPSB1bmRlZmluZWQgPyB0aGlzLmRhdGEucGFnZUFibGUgOiBmYWxzZTtcclxuXHJcbiAgICBsZXQgemZpZWxkcyA9IFtdO1xyXG4gICAgdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZSh0aGlzLmRhdGFbXCJDb2x1bW5GaWVsZENvZGVcIl0sIFwiRm9ybUZpZWxkXCIsIG51bGwsIG51bGwpLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcChmaWVsZHMgPT4ge1xyXG4gICAgICAgIHpmaWVsZHMgPSBmaWVsZHM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9uc0Zyb21aQnV0dG9ucyhmaWVsZHMpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKChidXR0b25zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRUcmVlTGlzdENvbHVtbnMoemZpZWxkcywgYnV0dG9ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihbdGhpcy5nZXREYXRhQmluZGluZygpLCBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5vcHRpb25zLmNvbHVtbnMpXSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoZGF0YSA9PiB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbHNGb3JJbmxpbmVFZGl0KGRhdGFbMF0pO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IGRhdGFbMF0gfHwgW107XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0RXhwYW5kYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gY29uc3QgemJ1dHRvbkZpZWxkcyA9IFtdIGFzIEFycmF5PFpGaWVsZD47XHJcbiAgLy8gZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gIC8vICAgICBpZiAoZmllbGQuVHlwZSA9PT0gXCJ6YnV0dG9uc1wiKSB7XHJcbiAgLy8gICAgICAgICBsZXQgZmllbGRDb2xWaXNpYmxlID0gZmllbGQuZ3JpZENvbFZpc2libGU7XHJcbiAgLy8gICAgICAgICBpZiAoZmllbGQuZ3JpZENvbFZpc2libGUgJiYgZmllbGQuZ3JpZENvbFZpc2libGUudG9TdHJpbmcoKS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gIC8vICAgICAgICAgICAgIC8vIGZpZWxkLmdyaWRDb2xWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGZpZWxkLmdyaWRDb2xWaXNpYmxlLnRvU3RyaW5nKCksIHRoaXMuZ3JvdXApO1xyXG4gIC8vICAgICAgICAgICAgIGZpZWxkQ29sVmlzaWJsZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShmaWVsZC5ncmlkQ29sVmlzaWJsZS50b1N0cmluZygpLCB0aGlzLmdyb3VwKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgICAgIC8vIGlmIChmaWVsZC5ncmlkQ29sVmlzaWJsZSA9PT0gdHJ1ZSkge1xyXG4gIC8vICAgICAgICAgaWYgKGZpZWxkQ29sVmlzaWJsZSA9PT0gdHJ1ZSkge1xyXG4gIC8vICAgICAgICAgICAgIHpidXR0b25GaWVsZHMucHVzaChmaWVsZCk7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgIH1cclxuICAvLyB9KTtcclxuXHJcbiAgLy8gaWYgKHpidXR0b25GaWVsZHMubGVuZ3RoID09PSAwKSB7XHJcbiAgLy8gICAgIHJldHVybiBvZihbXSk7XHJcbiAgLy8gfVxyXG4gIC8vIHpidXR0b25GaWVsZHMuZm9yRWFjaCh6YnV0dG9uRmllbGQgPT4ge1xyXG4gIC8vICAgICB6YnV0dG9uUmVzdWx0LnB1c2goXHJcbiAgLy8gICAgICAgICB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKHpidXR0b25GaWVsZC5WYWx1ZSwgXCJGb3JtRmllbGRcIiwgbnVsbCwgbnVsbCkucGlwZShcclxuICAvLyAgICAgICAgICAgICBzd2l0Y2hNYXAoYnV0dG9ucyA9PiB7XHJcbiAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBvZih7IHpidXR0b25GaWVsZCwgYnV0dG9ucyB9KTtcclxuICAvLyAgICAgICAgICAgICB9KSlcclxuICAvLyAgICAgKTtcclxuICAvLyB9KTtcclxuXHJcbiAgcHJpdmF0ZSBnZXRCdXR0b25zRnJvbVpCdXR0b25zKGZpZWxkczogQXJyYXk8WkZpZWxkPik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCBidXR0b25DbWQgPSBbXTtcclxuICAgIGNvbnN0IHpidXR0b25SZXN1bHQgPSBbXTtcclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgaWYgKGZpZWxkLlR5cGUgPT09IFwiemJ1dHRvbnNcIiAmJiBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoZmllbGQuZ3JpZENvbFZpc2libGUgYXMgc3RyaW5nLCB0aGlzLmdyb3VwKSkge1xyXG4gICAgICAgIHpidXR0b25SZXN1bHQucHVzaChcclxuICAgICAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoZmllbGQuVmFsdWUsIFwiRm9ybUZpZWxkXCIsIG51bGwsIG51bGwpLnBpcGUoXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChidXR0b25zID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gb2YoeyBmaWVsZCwgYnV0dG9ucyB9KTtcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHpidXR0b25SZXN1bHQubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZvcmtKb2luKHpidXR0b25SZXN1bHQpLnBpcGUoXHJcbiAgICAgIHRhcChyZXNwID0+IHtcclxuICAgICAgICByZXNwLmZvckVhY2goemJ1dHRvbnNBcnJheSA9PlxyXG4gICAgICAgICAgemJ1dHRvbnNBcnJheVtcImJ1dHRvbnNcIl0uZm9yRWFjaCgoYnV0dG9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgYnV0dG9uQ21kLnB1c2goe1xyXG4gICAgICAgICAgICAgIHpidXR0b25zTmFtZTogemJ1dHRvbnNBcnJheVtcImZpZWxkXCJdLlZhbHVlLFxyXG4gICAgICAgICAgICAgIG5hbWU6IGJ1dHRvbi5WYWx1ZSxcclxuICAgICAgICAgICAgICBjbGFzczogYnV0dG9uLkNsYXNzLFxyXG4gICAgICAgICAgICAgIHRleHQ6IGJ1dHRvbi5MYWJlbCxcclxuICAgICAgICAgICAgICBpY29uOiBidXR0b24uSWNvbixcclxuICAgICAgICAgICAgICB2aXNpYmxlOiBidXR0b24uVmlzaWJsZSxcclxuICAgICAgICAgICAgICBoaWRkZW5QYXJhbTogYnV0dG9uW1wiaGlkZGVuUGFyYW1cIl0sXHJcbiAgICAgICAgICAgICAgaGlkZGVuVmFsdWU6IGJ1dHRvbltcImhpZGRlblZhbHVlXCJdLFxyXG4gICAgICAgICAgICAgIGVkaXQ6IGJ1dHRvbi5lZGl0LFxyXG4gICAgICAgICAgICAgIENsaWNrRXZlbnQ6IGJ1dHRvbi5DbGlja0V2ZW50LFxyXG4gICAgICAgICAgICAgIFNob3dMYWJlbDogYnV0dG9uLlNob3dMYWJlbCxcclxuICAgICAgICAgICAgICBjb2xvcjogYnV0dG9uLkNvbG9yXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KSxcclxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICByZXR1cm4gb2YoYnV0dG9uQ21kKTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldFRyZWVMaXN0Q29sdW1ucyhmaWVsZHM6IEFycmF5PFpGaWVsZD4sIGJ1dHRvbnM6IGFueSkge1xyXG4gICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWVsZC5WYWx1ZSkpIHtcclxuICAgICAgICB0aGlzLnNldFRyZWVMaXN0Q29sdW1ucyhmaWVsZC5WYWx1ZSwgYnV0dG9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShmaWVsZC5ncmlkQ29sVmlzaWJsZSBhcyBzdHJpbmcsIHRoaXMuZ3JvdXApID09PSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKGZpZWxkLlR5cGUgPT09IFwiemJ1dHRvbnNcIikge1xyXG4gICAgICAgICAgdGhpcy5pbnNlcnRDb21tYW5kKGZpZWxkLCBidXR0b25zKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKGZpZWxkLkFnZ3JlZ2F0ZVR5cGUgJiYgZmllbGQuQWdncmVnYXRlVHlwZSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBsZXQgYWdncmVnYXRldGl0bGUgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoZmllbGQuQWdncmVnYXRlVHlwZSA9PT0gXCJzdW1cIikge1xyXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0ZXRpdGxlID0gXCJUb3RhbDogXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgYWdncmVnYXRldGl0bGUgPSBmaWVsZC5BZ2dyZWdhdGVUeXBlICsgXCI6IFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0Rm9vdGVyVGVtcGxhdGVGaWVsZChmaWVsZCwgYWdncmVnYXRldGl0bGUpO1xyXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMuYWdncmVnYXRlLnB1c2goe1xyXG4gICAgICAgICAgICAgIGZpZWxkOiBmaWVsZC5WYWx1ZSxcclxuICAgICAgICAgICAgICBhZ2dyZWdhdGU6IGZpZWxkLkFnZ3JlZ2F0ZVR5cGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmluc2VydEZpZWxkKGZpZWxkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRGaWVsZChmaWVsZDogWkZpZWxkKSB7XHJcbiAgICBsZXQgY29sVGl0bGUgPSBmaWVsZC5OYW1lO1xyXG4gICAgaWYgKGNvbFRpdGxlLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgY29sVGl0bGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoY29sVGl0bGUudG9TdHJpbmcoKSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sdW1ucy5wdXNoKFxyXG4gICAgICBPYmplY3QuYXNzaWduKGZpZWxkLCB7XHJcbiAgICAgICAgZmllbGQ6IGZpZWxkLlZhbHVlLFxyXG4gICAgICAgIHRpdGxlOiBjb2xUaXRsZSxcclxuICAgICAgICB3aWR0aDogZmllbGQud2lkdGgsXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBmaWVsZFR5cGU6IGZpZWxkLlR5cGUsXHJcbiAgICAgICAgbmF2aWdhdGVUbzogZmllbGQuTmF2aWdhdGVUbyxcclxuICAgICAgICBjb21tYW5kOiBudWxsLFxyXG4gICAgICAgIGNsYXNzOiBmaWVsZC5EaXZDbGFzcyxcclxuICAgICAgICBmb290ZXJUZW1wbGF0ZTogZmFsc2UsXHJcbiAgICAgICAgYWdncmVnYXRlVHlwZTogXCJcIixcclxuICAgICAgICBhZ2dyZWdhdGVUaXRsZTogXCJcIixcclxuICAgICAgICBpc0VkaXRhYmxlSW5HcmlkOiBmaWVsZC5Jc0VkaXRhYmxlSW5HcmlkXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnNlcnRDb21tYW5kKGZpZWxkOiBaRmllbGQsIGJ1dHRvbnM6IGFueSkge1xyXG4gICAgbGV0IGNvbFRpdGxlID0gZmllbGQuTmFtZTtcclxuICAgIGlmIChjb2xUaXRsZS50b1N0cmluZygpLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIGNvbFRpdGxlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGNvbFRpdGxlLnRvU3RyaW5nKCksIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmNvbHVtbnMucHVzaCh7XHJcbiAgICAgIGZpZWxkOiBmaWVsZC5OYW1lLFxyXG4gICAgICB0aXRsZTogY29sVGl0bGUsXHJcbiAgICAgIHdpZHRoOiBmaWVsZC53aWR0aCxcclxuICAgICAgdmlzaWJsZTogZmllbGQuVmlzaWJsZSxcclxuICAgICAgZmllbGRUeXBlOiBmaWVsZC5UeXBlLFxyXG4gICAgICBuYXZpZ2F0ZVRvOiBmaWVsZC5OYXZpZ2F0ZVRvLFxyXG4gICAgICBjb21tYW5kOiBidXR0b25zLmZpbHRlcih4ID0+IHguemJ1dHRvbnNOYW1lID09PSBmaWVsZC5WYWx1ZSksXHJcbiAgICAgIGNsYXNzOiBmaWVsZC5EaXZDbGFzcyxcclxuICAgICAgZm9vdGVyVGVtcGxhdGU6IGZhbHNlLFxyXG4gICAgICBhZ2dyZWdhdGVUeXBlOiBcIlwiLFxyXG4gICAgICBhZ2dyZWdhdGVUaXRsZTogXCJcIixcclxuICAgICAgaXNFZGl0YWJsZUluR3JpZDogZmllbGQuSXNFZGl0YWJsZUluR3JpZFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluc2VydEZvb3RlclRlbXBsYXRlRmllbGQoZmllbGQ6IFpGaWVsZCwgYWdncmVnYXRldGl0bGU6IHN0cmluZykge1xyXG4gICAgbGV0IGNvbFRpdGxlID0gZmllbGQuTmFtZTtcclxuICAgIGlmIChjb2xUaXRsZS50b1N0cmluZygpLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIGNvbFRpdGxlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGNvbFRpdGxlLnRvU3RyaW5nKCksIHRoaXMuZ3JvdXApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vcHRpb25zLmNvbHVtbnMucHVzaCh7XHJcbiAgICAgIGZpZWxkOiBmaWVsZC5WYWx1ZSxcclxuICAgICAgdGl0bGU6IGNvbFRpdGxlLFxyXG4gICAgICB3aWR0aDogZmllbGQud2lkdGgsXHJcbiAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgIGZpZWxkVHlwZTogZmllbGQuVHlwZSxcclxuICAgICAgbmF2aWdhdGVUbzogZmllbGQuTmF2aWdhdGVUbyxcclxuICAgICAgY29tbWFuZDogbnVsbCxcclxuICAgICAgY2xhc3M6IGZpZWxkLkRpdkNsYXNzLFxyXG4gICAgICBmb290ZXJUZW1wbGF0ZTogdHJ1ZSxcclxuICAgICAgYWdncmVnYXRlVHlwZTogZmllbGQuQWdncmVnYXRlVHlwZSxcclxuICAgICAgYWdncmVnYXRlVGl0bGU6IGFnZ3JlZ2F0ZXRpdGxlLFxyXG4gICAgICBpc0VkaXRhYmxlSW5HcmlkOiBmaWVsZC5Jc0VkaXRhYmxlSW5HcmlkXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0RGF0YUJpbmRpbmcoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGlmICh0aGlzLmRhdGEuRGF0YVNvdXJjZSkge1xyXG4gICAgICByZXR1cm4gb2YoWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5EYXRhU291cmNlLCB0aGlzLmdyb3VwKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmVzb3VyY2VVcmwgPSB0aGlzLmdldFJlc291Y2VVUkwoKTtcclxuICAgIGlmIChyZXNvdXJjZVVybCkge1xyXG4gICAgICByZXR1cm4gdGhpcy53ZWJhcGlTZXJ2aWNlLmdldEFwaShyZXNvdXJjZVVybCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb2YoW10pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRSZXNvdWNlVVJMKCkge1xyXG4gICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShcclxuICAgICAgdGhpcy5kYXRhLlJlc291cmNlVVJMLFxyXG4gICAgICB0aGlzLmdyb3VwXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2VsbENsaWNrSGFuZGxlcihldmVudDogQ2VsbENsaWNrRXZlbnQpIHtcclxuICAgIGlmICghIXRoaXMuZGF0YS5EaXNhYmxlQ2VsbENsaWNrSGFuZGxlcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJjZWxsQ2xpY2sgZXZlbnQ6IFwiLCBldmVudCk7XHJcbiAgICBpZiAodGhpcy5kYXRhLk9uSXRlbUNsaWNrKSB7XHJcbiAgICAgIGNvbnN0IGZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLk9uSXRlbUNsaWNrKTtcclxuICAgICAgaWYgKHR5cGVvZiBmdW5jID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgY29uc3QgY2FsbEZ1bmMgPSBmdW5jLmJpbmQodGhpcy5ncm91cC5jdHJsU2NvcGUpO1xyXG4gICAgICAgIGNhbGxGdW5jKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lZGl0TW9kZWwoZXZlbnQuZGF0YUl0ZW0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlZGl0TW9kZWwoZGF0YUl0ZW06IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5FZGl0Q2xpY2tVUkwpIHtcclxuICAgICAgLy8gVE9ETzpcclxuICAgICAgLy8gZGVidWdnZXI7XHJcbiAgICAgIC8vIHRoaXMucm91dGVyLm5hdmlnYXRlKFt0aGlzLmRhdGEuRWRpdENsaWNrVVJMLCBkYXRhSXRlbS5JZF0pO1xyXG4gICAgICBjb25zdCBjb2xGaWVsZHMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLkNvbHVtbkZpZWxkcywgdGhpcy5ncm91cCk7XHJcbiAgICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgICB0eXBlOiBcInpncmlkLWNlbGxDbGlja1wiLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhLkVkaXRDbGlja1VSTCxcclxuICAgICAgICBkYXRhOiBkYXRhSXRlbSxcclxuICAgICAgICBjb2x1bW5GaWVsZHMkOiBjb2xGaWVsZHNcclxuICAgICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZ3JvdXAuZWRpdE1vZGVsVVJMLCBkYXRhSXRlbS5JZCwgJ2VkaXQnXSwge1xyXG4gICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGVcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdQYXRoOiAnLCB0aGlzLmFjdGl2YXRlZFJvdXRlWydfcm91dGVyU3RhdGUnXS5zbmFwc2hvdC51cmwpO1xyXG4gICAgICAvLyBjb25zdCBjdXJyZW50UGF0aCA9IHRoaXMuYWN0aXZhdGVkUm91dGVbJ19yb3V0ZXJTdGF0ZSddLnNuYXBzaG90LnVybDtcclxuICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2N1cnJlbnRQYXRoICsgXCIvXCIgKyB0aGlzLmdyb3VwLmVkaXRNb2RlbFVSTCwgZGF0YUl0ZW0uSWRdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtYXQoY29sOiBhbnkpIHtcclxuICAgIGxldCBmb3JtYXQgPSBcIlwiO1xyXG4gICAgY29uc3QgZm9ybWF0QXJyID0gY29sLkZvcm1hdE9wdGlvbnMuc3BsaXQoXCIuXCIpXHJcbiAgICBsZXQgZHAgPSAwO1xyXG5cclxuICAgIGlmIChmb3JtYXRBcnIubGVuZ3RoID4gMSkge1xyXG4gICAgICBkcCA9IGZvcm1hdEFyclsxXS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRwICE9PSAwKSB7XHJcbiAgICAgIGZvcm1hdCA9IFwiMS5cIiArIGRwICsgXCItXCIgKyBkcDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ybWF0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEhlYWRlclRleHQoY29sdW1uTmFtZTogc3RyaW5nLCBuZXdIZWFkZXJUaXRsZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBncmlkQ29sdW1ucyA9IHRoaXMub3B0aW9ucy5jb2x1bW5zO1xyXG4gICAgZ3JpZENvbHVtbnMuZm9yRWFjaCgoY29sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGNvbC5OYW1lID09PSBjb2x1bW5OYW1lIHx8IGNvbC5maWVsZCA9PT0gY29sdW1uTmFtZSkge1xyXG4gICAgICAgIGNvbC50aXRsZSA9IG5ld0hlYWRlclRpdGxlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRDb2xDbGFzcyhkYXRhSXRlbTogYW55LCBjb2w6IGFueSkge1xyXG4gICAgbGV0IG5nQ2xhc3MgPSBcImdyaWRDZWxsIFwiO1xyXG4gICAgaWYgKGNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeScgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJykge1xyXG4gICAgICBuZ0NsYXNzICs9IFwicmlnaHRBbGlnbmVkIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRhSXRlbVtjb2wuZmllbGQgKyAnX0NsYXNzJ10pIHtcclxuICAgICAgbmdDbGFzcyArPSBkYXRhSXRlbVtjb2wuZmllbGQgKyAnX0NsYXNzJ10gKyBcIiBcIjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29sLkNsYXNzKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gY29sLkNsYXNzICsgXCIgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG5nQ2xhc3M7XHJcbiAgfVxyXG5cclxuICBvbkZpbHRlckNoYW5nZShldmVudDogYW55KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy56dHJlZWxpc3QpIHtcclxuICAgICAgLy8gdG8gYmUgaW1wbGVtZW50LlxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpbHRlcmFibGUodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzb3J0YWJsZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldERlZmF1bHRFeHBhbmRhYmxlKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5UcmVlTGlzdEluaXRpYWxseUV4cGFuZGVkRGF0YUlkcykge1xyXG4gICAgICBjb25zdCBpZExpc3QgPSB0eXBlb2YgdGhpcy5kYXRhLlRyZWVMaXN0SW5pdGlhbGx5RXhwYW5kZWREYXRhSWRzID09ICdzdHJpbmcnID8gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKHRoaXMuZGF0YS5UcmVlTGlzdEluaXRpYWxseUV4cGFuZGVkRGF0YUlkcyBhcyBzdHJpbmcsIHRoaXMuZ3JvdXApIDogdGhpcy5kYXRhLlRyZWVMaXN0SW5pdGlhbGx5RXhwYW5kZWREYXRhSWRzO1xyXG4gICAgICBpZiAoaWRMaXN0ICYmIEFycmF5LmlzQXJyYXkoaWRMaXN0KSkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRJZHMgPSBpZExpc3QubWFwKGkgPT4gaS50b1N0cmluZygpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5kYXRhLkRlZmF1bHRDb2xsYXBzZSA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5leHBhbmRlZElkcyA9IHRoaXMuZGF0YVNvdXJjZS5tYXAoZCA9PiBkW3RoaXMuaWRGaWVsZF0udG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNFeHBhbmRlZCA9IChkYXRhSXRlbTogYW55KTogYm9vbGVhbiA9PiB7XHJcbiAgICByZXR1cm4gdGhpcy5leHBhbmRlZElkcy5pbmRleE9mKGRhdGFJdGVtW3RoaXMuaWRGaWVsZF0udG9TdHJpbmcoKSkgPiAtMTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgb25Db2xsYXBzZShhcmdzOiBFeHBhbmRFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5leHBhbmRlZElkcyA9IHRoaXMuZXhwYW5kZWRJZHMuZmlsdGVyKChpZCkgPT4gaWQgIT0gYXJncy5kYXRhSXRlbVt0aGlzLmlkRmllbGRdLnRvU3RyaW5nKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uRXhwYW5kKGFyZ3M6IEV4cGFuZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cGFuZGVkSWRzLnB1c2goYXJncy5kYXRhSXRlbVt0aGlzLmlkRmllbGRdLnRvU3RyaW5nKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZE5ldygpIHtcclxuICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgdHlwZTogXCJidXR0b25DbGlja1wiLFxyXG4gICAgICB0YXJnZXQ6IFwiZ3JvdXAubmV3TW9kZWwoKVwiLFxyXG4gICAgICBkYXRhOiBudWxsXHJcbiAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVmcmVzaERhdGEoKSB7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6IFwiYnV0dG9uQ2xpY2tcIixcclxuICAgICAgdGFyZ2V0OiBcImdyb3VwLnJlZnJlc2hUcmVlTGlzdCgpXCIsXHJcbiAgICAgIGRhdGE6IG51bGxcclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0dXBHcmlkQnV0dG9ucygpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiB8fCB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSkge1xyXG4gICAgICB0aGlzLmdyaWRCdG4gPSB7XHJcbiAgICAgICAgUmVhZE9ubHk6IGZhbHNlLFxyXG4gICAgICAgIFZpc2libGU6IHRydWUsXHJcbiAgICAgICAgSXNSZXF1aXJlZDogZmFsc2UsXHJcbiAgICAgICAgV29ya2Zsb3dDb2RlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRixcclxuICAgICAgICBWYWx1ZTogdGhpcy5kYXRhLkdyaWRCdXR0b25GaWVsZE5hbWUsXHJcbiAgICAgICAgVHlwZTogdGhpcy5kYXRhLkdyaWRCdXR0b25GaWVsZE5hbWVfV0YgPyBcInp3b3JrZmxvd2J1dHRvbnNcIiA6IFwiemJ1dHRvbnNcIlxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd1Rvb2x0aXAoZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5Jc1Nob3dUb29sVGlwID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBlbGVtZW50ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgbGV0IGlzQ29tbWFuZENvbHVtbiA9IGZhbHNlO1xyXG4gICAgZWxlbWVudC5jbGFzc0xpc3QuZm9yRWFjaChkYXRhID0+IHtcclxuICAgICAgaWYgKGRhdGEgPT0gJ2stY29tbWFuZC1jZWxsJykge1xyXG4gICAgICAgIGlzQ29tbWFuZENvbHVtbiA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghaXNDb21tYW5kQ29sdW1uICYmXHJcbiAgICAgIChcclxuICAgICAgICAoKGVsZW1lbnQubm9kZU5hbWUgPT09ICdURCcgfHwgZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1RIJykgJiYgZWxlbWVudC5vZmZzZXRXaWR0aCA8IChlbGVtZW50LnNjcm9sbFdpZHRoKSkgfHxcclxuICAgICAgICAoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1NQQU4nICYmIGVsZW1lbnQuY2xhc3NMaXN0ICYmIGVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCA+IDAgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2dyaWQtY2VsbC1kYXRhJykgJiYgZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQub2Zmc2V0V2lkdGggPCAoZWxlbWVudC5wYXJlbnRFbGVtZW50LnBhcmVudEVsZW1lbnQuc2Nyb2xsV2lkdGgpKSlcclxuICAgICkge1xyXG4gICAgICB0aGlzLnRvb2x0aXBEaXIudG9nZ2xlKGVsZW1lbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci5oaWRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gSW5saW5lIEVkaXRcclxuICBwcml2YXRlIGNyZWF0ZUZvcm1Db250cm9sc0ZvcklubGluZUVkaXQoZGF0YTogYW55KSB7XHJcbiAgICBsZXQgY291bnRlckluZGV4ID0gMDtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuY29sdW1ucy5maW5kKGMgPT4gYy5pc0VkaXRhYmxlSW5HcmlkKSA9PT0gdW5kZWZpbmVkIHx8ICFkYXRhKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgPSB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHMgfHwge307XHJcblxyXG4gICAgZGF0YS5mb3JFYWNoKGQgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtcyA9IHt9O1xyXG4gICAgICB0aGlzLm9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xyXG4gICAgICAgIGl0ZW1zW2MuZmllbGRdID0gbmV3IEZvcm1Db250cm9sKGRbYy5maWVsZF0pO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cChpdGVtcyk7XHJcblxyXG4gICAgICBpZiAoZFtcIklkXCJdKSB7XHJcbiAgICAgICAgaXRlbXNbXCJJZFwiXSA9IG5ldyBGb3JtQ29udHJvbCh7IHZhbHVlOiBkW1wiSWRcIl0sIGRpc2FibGVkOiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBkW1wiSWRcIl0gPSBjb3VudGVySW5kZXgrKztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHNbZFtcIklkXCJdXSA9IGZvcm1Hcm91cDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElubGluZUZpZWxkKHZhbHVlOiBhbnkpIHtcclxuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuY29sdW1ucy5maW5kKHggPT4geC5WYWx1ZSA9PT0gdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldElubGluZUZvcm0oZGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2RhdGFbXCJJZFwiXSB8fCByb3dJbmRleF07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Rm9ybUNvbnRyb2xEYXRhKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBrIG9mIE9iamVjdC5rZXlzKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcykpIHtcclxuICAgICAgZGF0YS5wdXNoKHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1trXT8udmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNJbmxpbmVFZGl0Q29sVmlzaWJsZShkYXRhSXRlbTogYW55LCBjb2x1bW46IGFueSkge1xyXG4gICAgY29uc3QgaXNWaXNpYmxlID0gZGF0YUl0ZW1bYCR7Y29sdW1uLlZhbHVlfV9WaXNpYmxlYF07XHJcbiAgICByZXR1cm4gIShpc1Zpc2libGUgPT09IGZhbHNlKTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cIiFpc0xvYWRpbmcgJiYgKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpXCJcclxuICAgICBjbGFzcz1cImdyaWQtY29udGFpbmVyIGUxdGFnLXN0eWxlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGVcIj5cclxuICA8bmctdGVtcGxhdGUgI3RlbXBsYXRlIGxldC1hbmNob3I+XHJcbiAgICA8c3Bhbj57eyBhbmNob3IubmF0aXZlRWxlbWVudC5pbm5lclRleHQgfX08L3NwYW4+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuICA8ZGl2IGtlbmRvVG9vbHRpcCBzaG93T249XCJub25lXCIgW3Rvb2x0aXBUZW1wbGF0ZV09XCJ0ZW1wbGF0ZVwiIGZpbHRlcj1cIi5rLWdyaWQgdGRcIiAobW91c2VvdmVyKT1cInNob3dUb29sdGlwKCRldmVudClcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiPlxyXG4gICAgPGtlbmRvLXRyZWVsaXN0IFtrZW5kb1RyZWVMaXN0RmxhdEJpbmRpbmddPVwiZGF0YVNvdXJjZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMlwiIGNsYXNzPVwiZGVza3RvcC1ncmlkIGUxdGFnLXN0eWxlMlwiIFtpZEZpZWxkXT1cIm9wdGlvbnMuaWRGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BhcmVudElkRmllbGRdPVwib3B0aW9ucy5wYXJlbnRJZEZpZWxkXCIgKGNlbGxDbGljayk9XCJjZWxsQ2xpY2tIYW5kbGVyKCRldmVudClcIiBbc29ydGFibGVdPVwib3B0aW9ucy5zb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Jlc2l6YWJsZV09XCJvcHRpb25zLnJlc2l6YWJsZVwiIFtmaWx0ZXJhYmxlXT1cIm9wdGlvbnMuZmlsdGVyYWJsZVwiIFtyZW9yZGVyYWJsZV09XCJmYWxzZVwiIFtjb2x1bW5NZW51XT1cIm9wdGlvbnMuY29sdW1uTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGFibGVdPVwib3B0aW9ucy5zY3JvbGxhYmxlXCIgW2FnZ3JlZ2F0ZV09XCJvcHRpb25zLmFnZ3JlZ2F0ZVwiIFtwYWdlYWJsZV09XCJvcHRpb25zLnBhZ2VBYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGFnZVNpemVdPVwiZGF0YS5QYWdlU2l6ZVwiIFtpc0V4cGFuZGVkXT1cImlzRXhwYW5kZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwib25GaWx0ZXJDaGFuZ2UoJGV2ZW50KVwiIChleHBhbmQpPVwib25FeHBhbmQoJGV2ZW50KVwiIChjb2xsYXBzZSk9XCJvbkNvbGxhcHNlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGtlbmRvVHJlZUxpc3RFeHBhbmRhYmxlIHRyZWVsaXN0PlxyXG4gICAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlTGlzdFRvb2xiYXJUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkFsbG93UmVmcmVzaEJ1dHRvbiB8fCBkYXRhLkFsbG93RXhwb3J0IHx8IGRhdGEuVGl0bGUgfHwgZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IGRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b29iYXItbGVmdC1pdGVtXCI+XHJcbiAgICAgICAgICA8ZmEtaWNvbiAqbmdJZj1cImRhdGEuSWNvblwiIGNsYXNzPVwiZ3JpZFRpdGxlSWNvblwiIFtpY29uXT1cImRhdGEuSWNvblwiPjwvZmEtaWNvbj5cclxuICAgICAgICAgIDxrZW5kby1sYWJlbCBjbGFzcz1cImdyaWRUaXRsZVwiPnt7ZGF0YS5UaXRsZX19PC9rZW5kby1sYWJlbD5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpb24tYWN0aXZhdGFibGUgcmlwcGxlLXBhcmVudCBrLWJ1dHRvbiByZWZyZXNoLWJ0blwiIChjbGljayk9XCJyZWZyZXNoRGF0YSgpXCIgKm5nSWY9XCJkYXRhLkFsbG93UmVmcmVzaEJ1dHRvblwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktcmVmcmVzaC1zbVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPGlvbi1yaXBwbGUtZWZmZWN0PjwvaW9uLXJpcHBsZS1lZmZlY3Q+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwidG9vbGJhci1yaWdodC1pdGVtXCI+XHJcbiAgICAgICAgICA8YXBwLXp3b3JrZmxvd2J1dHRvbnMgKm5nSWY9XCJncmlkQnRuICYmIGdyaWRCdG4uVHlwZSA9PT0gJ3p3b3JrZmxvd2J1dHRvbnMnXCIgW2RhdGFdPVwiZ3JpZEJ0blwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImZvcm1cIj48L2FwcC16d29ya2Zsb3didXR0b25zPlxyXG4gICAgICAgICAgPGFwcC16YnV0dG9ucyAqbmdJZj1cImdyaWRCdG4gJiYgZ3JpZEJ0bi5UeXBlID09PSAnemJ1dHRvbnMnXCIgW2RhdGFdPVwiZ3JpZEJ0blwiIFtncm91cF09XCJncm91cFwiIFtmb3JtXT1cImZvcm1cIj48L2FwcC16YnV0dG9ucz5cclxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpb24tYWN0aXZhdGFibGUgcmlwcGxlLXBhcmVudCBrLWJ1dHRvblwiIGtlbmRvVHJlZUxpc3RFeGNlbENvbW1hbmRcclxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLkFsbG93RXhwb3J0XCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1kb3dubG9hZFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgPGlvbi1yaXBwbGUtZWZmZWN0PjwvaW9uLXJpcHBsZS1lZmZlY3Q+XHJcbiAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPCEtLVxyXG4gICAgICAgIFtmaWx0ZXJhYmxlXT1cIm9wdGlvbnMuZmlsdGVyYWJsZVwiXHJcbiAgICAgIFtyZW9yZGVyYWJsZV09XCJvcHRpb25zLnJlc2l6YWJsZVwiXHJcbiAgICAgICAgLS0+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbCBvZiBvcHRpb25zLmNvbHVtbnM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICA8a2VuZG8tdHJlZWxpc3QtY29sdW1uICpuZ0lmPVwiIWNvbC5jb21tYW5kXCIgW2NsYXNzXT1cImNvbC5jbGFzc1wiIFtleHBhbmRhYmxlXT1cImk9PT0wXCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiY29sLnRpdGxlIHx8IGNvbC5maWVsZFwiIFt3aWR0aF09XCJjb2wud2lkdGggfHwgMjUwXCIgW2ZpbHRlcmFibGVdPVwiZmlsdGVyYWJsZShjb2wuZW5hYmxlRmlsdGVyaW5nKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc29ydGFibGVdPVwic29ydGFibGUoY29sLmVuYWJsZVNvcnRpbmcpXCIgW2hpZGRlbl09XCIhaXNDb2x1bW5zVmlzaWJsZShjb2wudmlzaWJsZSlcIiBbc3R5bGVdPVwiZ2V0R3JpZENvbHVtblN0eWxlKClcIiBjbGFzcz1cImUxdGFnLXN0eWxlM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVhZGVyU3R5bGVdPVwiZ2V0R3JpZEhlYWRlclN0eWxlKClcIiBoZWFkZXJDbGFzcz1cImUxdGFnLXN0eWxlNFwiIFtmb290ZXJTdHlsZV09XCJnZXRHcmlkRm9vdGVyU3R5bGUoKVwiIGZvb3RlckNsYXNzPVwiZTF0YWctc3R5bGU5XCI+XHJcbiAgICAgICAgICA8ZGl2IFtuZ1N3aXRjaF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeSdcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ3pudW1lcmljJ1wiPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0RmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LW51bWVyaWMtZmlsdGVyLWNlbGwgW2NvbHVtbl09XCJjb2x1bW5cIiBbZmlsdGVyXT1cImZpbHRlclwiIG9wZXJhdG9yPVwiZXFcIj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbmVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICA8L2tlbmRvLXRyZWVsaXN0LW51bWVyaWMtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cImNvbC5maWVsZFR5cGUgPT0gJ3pkYXRlJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnemRhdGV0aW1lJ1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnenVpZGF0ZXRpbWUnXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5maWx0ZXJCeURhdGVSYW5nZSA9PT0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvVHJlZUxpc3RGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCIgb3BlcmF0b3I9XCJsdGVcIj5cclxuICAgICAgICAgICAgICAgICAgPGRhdGUtcmFuZ2UtZmlsdGVyLWNlbGwgY2xhc3M9XCJkYXRlLXJhbmdlLWZpbHRlclwiIFtmaWx0ZXJdPVwiZmlsdGVyXCIgW2ZpZWxkXT1cImNvbC5maWVsZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGF0ZS1yYW5nZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbC5maWx0ZXJCeURhdGVSYW5nZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0RmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZGF0ZS1maWx0ZXItY2VsbCBbY29sdW1uXT1cImNvbHVtblwiIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJsdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWx0LW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWx0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWd0LW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWd0LW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItZ3RlLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWd0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8L2tlbmRvLXRyZWVsaXN0LWRhdGUtZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hEZWZhdWx0PlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0RmlsdGVyQ2VsbFRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LXN0cmluZy1maWx0ZXItY2VsbCBbY29sdW1uXT1cImNvbHVtblwiIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJjb250YWluc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWNvbnRhaW5zLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWVxLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLW5lcS1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1uZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItc3RhcnRzd2l0aC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1zdGFydHN3aXRoLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWVuZHN3aXRoLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWVuZHN3aXRoLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tdHJlZWxpc3Qtc3RyaW5nLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlTGlzdENlbGxUZW1wbGF0ZSBsZXQtZGF0YUl0ZW0gbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIiBsZXQtY2VsbENvbnRleHQ9XCJjZWxsQ29udGV4dFwiPlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA3cHggMDtkaXNwbGF5OiBpbmxpbmU7XCIgW3N0eWxlLmNvbG9yXT1cIighIWRhdGFJdGVtLkNvbG9yID8gW2RhdGFJdGVtLkNvbG9yXSA6ICdibGFjaycpXCJcclxuICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wubmF2aWdhdGVUbyAmJiBjb2wuaXNFZGl0YWJsZUluR3JpZCAhPT0gdHJ1ZVwiIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCJcclxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDb2xDbGFzcyhkYXRhSXRlbSwgY29sKVwiPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInemRhdGUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6ICdkZC9NTS95eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pzaG9ydGRhdGUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6ICdNTU0geXl5eScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZXRpbWUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3p1aWRhdGV0aW1lJ1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBkYXRlOiAnZGQvTU0veXl5eSBoaDptbTpzcyBhYScgfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHQ7XCI+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlciB9fSA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodDtcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyOiAnMS4yLTInIH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInem51bWVyaWMnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cInRleHQtYWxpZ246cmlnaHQ7XCI+e3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IG51bWJlcjogZ2V0Rm9ybWF0KGNvbCkgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid1cmwnXCIgc3R5bGU9XCJjb2xvcjogYmx1ZTsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6bGFiZWwnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInp0cmVlLWlubGluZS1ibG9jayBlMXRhZy1zdHlsZTEwXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxMFwiIFtpbm5lckhUTUxdPVwiZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGh0bWxTYW5pdGl6ZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hEZWZhdWx0IGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwibWFyZ2luOiA3cHggMDtkaXNwbGF5OiBpbmxpbmU7XCIgW3N0eWxlLmNvbG9yXT1cIighIWRhdGFJdGVtLkNvbG9yID8gW2RhdGFJdGVtLkNvbG9yXSA6ICdibGFjaycpXCJcclxuICAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wubmF2aWdhdGVUbyAmJiBjb2wuaXNFZGl0YWJsZUluR3JpZCA9PT0gdHJ1ZSAmJiBpc0lubGluZUVkaXRDb2xWaXNpYmxlKGRhdGFJdGVtLCBjb2wpXCJcclxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRDb2xDbGFzcyhkYXRhSXRlbSwgY29sKVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiIGNsYXNzPVwiZTF0YWctc3R5bGU1XCI+XHJcbiAgICAgICAgICAgICAgPGFwcC16aW5wdXQtY29udGFpbmVyIFtkYXRhXT1cImdldElubGluZUZpZWxkKGNvbC5maWVsZClcIiBbZ3JvdXBdPVwiZ3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybV09XCJnZXRJbmxpbmVGb3JtKGRhdGFJdGVtLCByb3dJbmRleClcIiBbY29udGFpbmVyRmllbGRdPVwiY29udGFpbmVyRmllbGRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImUxdGFnLXN0eWxlNlwiPlxyXG4gICAgICAgICAgICAgIDwvYXBwLXppbnB1dC1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiEhY29sLm5hdmlnYXRlVG9cIiAoY2xpY2spPVwib25OYXZpZ2F0ZVRvKCRldmVudCwgY29sLCBkYXRhSXRlbSwgZGF0YUl0ZW1bY29sLmZpZWxkXSlcIj5cclxuICAgICAgICAgICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cImxpZ2h0XCIgc2l6ZT1cInNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIH19XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxpb24taWNvbiBzbG90PSBcImVuZFwiIG5hbWU9XCJhcnJvdy1mb3J3YXJkXCI+PC9pb24taWNvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBzbG90PVwiZW5kXCIgW2ljb25dPVwiJ2Fycm93LXJpZ2h0J1wiPjwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICA8L2lvbi1idXR0b24+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCJjb2wuZm9vdGVyVGVtcGxhdGVcIiBrZW5kb1RyZWVMaXN0Rm9vdGVyVGVtcGxhdGUgbGV0LWFnZ3JlZ2F0ZXM9XCJhZ2dyZWdhdGVzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhY29sLm5hdmlnYXRlVG9cIiBbbmdTd2l0Y2hdPVwiY29sLmZpZWxkVHlwZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlN1wiXHJcbiAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydyaWdodEFsaWduZWQnOiBjb2wuZmllbGRUeXBlID09PSAnbnVtYmVyJyB8fCBjb2wuZmllbGRUeXBlID09PSAnY3VycmVuY3knfVwiIGNsYXNzPVwiZTF0YWctc3R5bGU3XCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidudW1iZXInXCI+XHJcbiAgICAgICAgICAgICAgICA8Yj5cclxuICAgICAgICAgICAgICAgICAge3sgY29sLmFnZ3JlZ2F0ZVRpdGxlIHwgdGl0bGVjYXNlIH19IHt7IGFnZ3JlZ2F0ZXNbY29sLmZpZWxkXVtjb2wuYWdncmVnYXRlVHlwZV0gfCBudW1iZXIgfX1cclxuICAgICAgICAgICAgICAgIDwvYj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgIDxiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVGl0bGUgfCB0aXRsZWNhc2UgfX0ge3sgYWdncmVnYXRlc1tjb2wuZmllbGRdW2NvbC5hZ2dyZWdhdGVUeXBlXSB8IG51bWJlcjogJzEuMi0yJyB9fVxyXG4gICAgICAgICAgICAgICAgPC9iPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwva2VuZG8tdHJlZWxpc3QtY29sdW1uPlxyXG4gICAgICAgIDxrZW5kby10cmVlbGlzdC1jb21tYW5kLWNvbHVtbiAqbmdJZj1cIiEhY29sLmNvbW1hbmRcIiBbdGl0bGVdPVwiY29sLnRpdGxlIHx8IGNvbC5maWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCJjb2wud2lkdGggfHwgMjUwXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU4XCIgY2xhc3M9XCJlMXRhZy1zdHlsZThcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0Q2VsbFRlbXBsYXRlIGxldC1jZWxsQ29udGV4dD1cImNlbGxDb250ZXh0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiY29sLmNsYXNzXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdGb3I9XCJsZXQgY29sMiBvZiBjb2wuY29tbWFuZDsgaW5kZXggYXMgaVwiIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2tlbmRvVHJlZUxpc3RFZGl0Q29tbWFuZF09XCJjZWxsQ29udGV4dFwiIFt0aXRsZV09XCJjb2wyLnRleHRcIiAoY2xpY2spPVwiYnV0dG9uQ2xpY2soY29sMiwgY2VsbENvbnRleHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtoaWRkZW5dPVwiaXNCdXR0b25IaWRkZW4oY29sMiwgY2VsbENvbnRleHQpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZmEtaWNvbiBbaWNvbl09XCJjb2wyLmljb25cIiBbc3R5bGUuY29sb3JdPVwiKCEhY29sMi5jb2xvciA/IFtjb2wyLmNvbG9yXSA6ICdibGFjaycpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2ZhLWljb24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sMi5TaG93TGFiZWwgPT09IHVuZGVmaW5lZCB8fCBjb2wyLlNob3dMYWJlbFwiPnt7Y29sMi50ZXh0fX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwva2VuZG8tdHJlZWxpc3QtY29tbWFuZC1jb2x1bW4+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPCEtLSA8a2VuZG8tdHJlZWxpc3QtY29tbWFuZC1jb2x1bW4gd2lkdGg9XCIxNDBcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0Q2VsbFRlbXBsYXRlIGxldC1pc05ldz1cImlzTmV3XCIgbGV0LWNlbGxDb250ZXh0PVwiY2VsbENvbnRleHRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIFtrZW5kb1RyZWVMaXN0QWRkQ29tbWFuZF09XCJjZWxsQ29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiZmlsdGVyLWFkZC1leHByZXNzaW9uXCIgdGl0bGU9XCJBZGQgQ2hpbGRcIj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIFtrZW5kb1RyZWVMaXN0Q2FuY2VsQ29tbWFuZF09XCJjZWxsQ29udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwiY2FuY2VsXCIgdGl0bGU9XCJ7eyBpc05ldyA/ICdEaXNjYXJkIGNoYW5nZXMnIDogJ0NhbmNlbCcgfX1cIj5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDwva2VuZG8tdHJlZWxpc3QtY29tbWFuZC1jb2x1bW4+IC0tPlxyXG4gICAgPC9rZW5kby10cmVlbGlzdD5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
567
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienRyZWVsaXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3p0cmVlbGlzdC96dHJlZWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenRyZWVsaXN0L3p0cmVlbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEQsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBNEIsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHaEQsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBRXBGLE9BQU8sRUFFTyxnQkFBZ0IsRUFDN0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJuRSxNQUFNLE9BQU8sZ0JBQWdCO0lBQzNCLFlBQ1MsUUFBa0IsRUFDbEIsU0FBbUIsRUFDbkIsVUFBb0IsRUFDcEIsV0FBcUIsRUFDckIsVUFBb0IsRUFDcEIsVUFBdUIsRUFDdkIsT0FBaUIsRUFDakIsUUFBa0IsRUFDbEIsVUFBbUIsRUFDbkIsU0FBZSxFQUNmLE9BQWdCLEVBQ2hCLGFBQXNCLEVBQ3RCLE9BQW9CLEVBQ3BCLFNBQWUsRUFDZixR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LE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNoQixLQUFLLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEVBQUU7WUFDeEQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7U0FDbEQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxRQUFhLEVBQUUsTUFBVztRQUN0RCxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxVQUFVLENBQUMsQ0FBQztRQUN0RCxPQUFPLENBQUMsQ0FBQyxTQUFTLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDaEMsQ0FBQzs7K0dBcmxCVSxrQkFBa0I7bUdBQWxCLGtCQUFrQixpR0FDbEIsZ0JBQWdCLHVFQ2hFN0IsdTliQXFNQTsyRkR0SWEsa0JBQWtCO2tCQU45QixTQUFTOytCQUNFLGVBQWU7Mk9BTVcsVUFBVTtzQkFBN0MsU0FBUzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IG9mLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRhcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDZWxsQ2xpY2tFdmVudCwgRXhwYW5kRXZlbnQsIFNjcm9sbE1vZGUgfSBmcm9tICdAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10cmVlbGlzdCc7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IERhdGFMaXN0aW5nRmllbGRCYXNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvZGF0YWxpc3RpbmdmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gIEZpZWxkU2VydmljZSwgV2ViQXBpU2VydmljZSwgQXV0aFNlcnZpY2UsXHJcbiAgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LCBaRmllbGQsIFpHcm91cFxyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci10b29sdGlwXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFpUcmVlTGlzdENvbHVtbiB7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIHdpZHRoOiBudW1iZXI7XHJcbiAgdmlzaWJsZTogYm9vbGVhbiB8IGFueTtcclxuICBmaWVsZFR5cGU6IHN0cmluZztcclxuICBuYXZpZ2F0ZVRvOiBzdHJpbmc7XHJcbiAgY29tbWFuZDogYW55O1xyXG4gIGNsYXNzOiBhbnk7XHJcbiAgZm9vdGVyVGVtcGxhdGU6IGJvb2xlYW47XHJcbiAgYWdncmVnYXRlVHlwZTogc3RyaW5nO1xyXG4gIGFnZ3JlZ2F0ZVRpdGxlOiBzdHJpbmc7XHJcbiAgaWNvbk9ubHk/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgWlRyZWVMaXN0T3B0aW9ucyB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgc29ydGFibGU/OiBib29sZWFuLFxyXG4gICAgcHVibGljIHJlc2l6YWJsZT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgZmlsdGVyYWJsZT86IGJvb2xlYW4sXHJcbiAgICBwdWJsaWMgcmVvcmRlcmFibGU/OiBib29sZWFuLFxyXG4gICAgcHVibGljIGNvbHVtbk1lbnU/OiBib29sZWFuLFxyXG4gICAgcHVibGljIHNjcm9sbGFibGU/OiBTY3JvbGxNb2RlLFxyXG4gICAgcHVibGljIHJlZnJlc2g/OiBib29sZWFuLFxyXG4gICAgcHVibGljIGF1dG9CaW5kPzogYm9vbGVhbixcclxuICAgIHB1YmxpYyBkYXRhU291cmNlPzogc3RyaW5nLFxyXG4gICAgcHVibGljIGRhdGFCb3VuZD86IGFueSxcclxuICAgIHB1YmxpYyBpZEZpZWxkPzogc3RyaW5nLFxyXG4gICAgcHVibGljIHBhcmVudElkRmllbGQ/OiBzdHJpbmcsXHJcbiAgICBwdWJsaWMgY29sdW1ucz86IEFycmF5PGFueT4sXHJcbiAgICBwdWJsaWMgYWdncmVnYXRlPzogYW55LFxyXG4gICAgcHVibGljIHBhZ2VBYmxlPzogYW55LFxyXG4gICkgeyB9XHJcbn1cclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtenRyZWVsaXN0XCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96dHJlZWxpc3QuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4venRyZWVsaXN0LmNvbXBvbmVudC5zY3NzXCJdLFxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFp0cmVlbGlzdENvbXBvbmVudCBleHRlbmRzIERhdGFMaXN0aW5nRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoVG9vbHRpcERpcmVjdGl2ZSkgcHVibGljIHRvb2x0aXBEaXI6IFRvb2x0aXBEaXJlY3RpdmU7XHJcbiAgLy8gQFZpZXdDaGlsZChaVHJlZUxpc3RCaW5kaW5nRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgenRyZWVsaXN0OiBaVHJlZUxpc3RCaW5kaW5nRGlyZWN0aXZlO1xyXG5cclxuICB6dHJlZWxpc3Q6IGFueSA9IG51bGw7XHJcbiAgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgZGF0YVNvdXJjZTogYW55O1xyXG4gIGlkRmllbGQgPSBcIklkXCI7XHJcbiAgcGFyZW50SWRGaWVsZCA9IFwiUGFyZW50SWRcIjtcclxuICBvcHRpb25zOiBaVHJlZUxpc3RPcHRpb25zID0gbmV3IFpUcmVlTGlzdE9wdGlvbnMoKTtcclxuICBwdWJsaWMgZ3JpZEJ0bjtcclxuICBmaWVsZGdyaWRDb2xWaXNpYmxlOiBhbnlbXTtcclxuICBwYWdlU2l6ZSA9IDIwO1xyXG4gIGlubGluZUVkaXRlZEZvcm1Hcm91cHM6IHt9O1xyXG4gIGlzTG9hZGluZzogYm9vbGVhbjtcclxuICB0cmVlbGlzdFN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICBwcml2YXRlIGV4cGFuZGVkSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgZmllbGRTZXJ2aWNlOiBGaWVsZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYmFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSk7XHJcbiAgfVxyXG4gIC8vIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAvLyAgIC8vIHRoaXMuenRyZWVsaXN0LnNldE9wdGlvbnMoe2RhdGE6IHRoaXMuZGF0YSwgZ3JvdXA6IHRoaXMuZ3JvdXB9KTtcclxuICAvLyB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgc3VwZXIuaW5pdENvbXBvbmVudCgpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuc2V0dXBHcmlkQnV0dG9ucygpO1xyXG5cclxuICAgICAgdGhpcy5wYWdlU2l6ZSA9IHRoaXMuZGF0YS5QYWdlU2l6ZSB8fCAyMDtcclxuICAgICAgaWYgKCEhdGhpcy5kYXRhLk9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnNldExvY2FsT3B0aW9ucygpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0RmllbGRFbGVtZW50T3B0aW9ucygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgLy8gaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAvLyAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGF0YSA9IChnRGF0YTogYW55KSA9PiB7XHJcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBnRGF0YTtcclxuICAgIHRoaXMuY3JlYXRlRm9ybUNvbnRyb2xzRm9ySW5saW5lRWRpdChnRGF0YSk7XHJcbiAgICB0aGlzLnNldERlZmF1bHRFeHBhbmRhYmxlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaXNCdXR0b25IaWRkZW4oY29sOiBhbnksIGNlbGxDb250YWluOiBhbnkpIHtcclxuICAgIGlmIChjb2wudmlzaWJsZSkge1xyXG4gICAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGNvbC52aXNpYmxlLCBjZWxsQ29udGFpbi52aWV3SXRlbS5kYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWNvbC5oaWRkZW5QYXJhbSB8fCBjb2wuaGlkZGVuVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2VsbENvbnRhaW4udmlld0l0ZW0uZGF0YVtjb2wuaGlkZGVuUGFyYW1dID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjZWxsQ29udGFpbi52aWV3SXRlbS5kYXRhW2NvbC5oaWRkZW5QYXJhbV0gPT09IGNvbC5oaWRkZW5WYWx1ZSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7IHJldHVybiBmYWxzZTsgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGJ1dHRvbkNsaWNrKGJ1dHRvbjogYW55LCBjZWxsQ29udGV4dDogYW55KSB7XHJcbiAgICBpZiAoYnV0dG9uLmVkaXQpIHtcclxuICAgICAgYnV0dG9uLmVkaXQoY2VsbENvbnRleHQpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwiYnV0dG9uQ2xpY2tcIixcclxuICAgICAgICB0YXJnZXQ6IGJ1dHRvbi5DbGlja0V2ZW50LFxyXG4gICAgICAgIGRhdGE6IGNlbGxDb250ZXh0XHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbk5hdmlnYXRlVG8oZXZlbnQ6IGFueSwgY29sU2V0dGluZzogYW55LCByb3dEYXRhOiBhbnksIGNlbGxEYXRhOiBzdHJpbmcpIHtcclxuICAgIC8vIGRlYnVnZ2VyO1xyXG4gICAgLy8gY29uc3QgbiA9IGNvbFNldHRpbmcubmF2aWdhdGVUby5yZXBsYWNlKCcvOmlkJywgY2VsbERhdGEpO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgIHR5cGU6ICd6Z3JpZC1vbk5hdmlnYXRlVG8nLFxyXG4gICAgICB0YXJnZXQ6IGNvbFNldHRpbmcubmF2aWdhdGVUbyxcclxuICAgICAgZGF0YTogY2VsbERhdGFcclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0NvbHVtbnNWaXNpYmxlKGZpZWxkRXhwcikge1xyXG4gICAgaWYgKGZpZWxkRXhwciAhPT0gZmFsc2UgJiYgIWZpZWxkRXhwcikge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHYgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgZmllbGRFeHByKTtcclxuICAgIHJldHVybiB2O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRMb2NhbE9wdGlvbnMoKSB7XHJcbiAgICBjb25zdCBvcHRpb25zOiBaVHJlZUxpc3RPcHRpb25zID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKFxyXG4gICAgICB0aGlzLmRhdGEuT3B0aW9ucyxcclxuICAgICAgdGhpcy5ncm91cFxyXG4gICAgKTtcclxuICAgIGlmICghb3B0aW9ucykge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJObyBpbml0aWFsaXNlIGZvciBGaWVsZC5PcHRpb25zOiBcIiwgdGhpcy5kYXRhLk9wdGlvbnMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xyXG4gICAgdGhpcy5vcHRpb25zLmlkRmllbGQgPSB0aGlzLm9wdGlvbnMuaWRGaWVsZCB8fCB0aGlzLmlkRmllbGQ7XHJcbiAgICB0aGlzLm9wdGlvbnMucGFyZW50SWRGaWVsZCA9IHRoaXMub3B0aW9ucy5wYXJlbnRJZEZpZWxkIHx8IHRoaXMucGFyZW50SWRGaWVsZDtcclxuXHJcbiAgICBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5vcHRpb25zLmNvbHVtbnMpLnN1YnNjcmliZSgoKSA9PiB7IHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7IH0pO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5vcHRpb25zLmRhdGFTb3VyY2UgJiZcclxuICAgICAgdHlwZW9mIHRoaXMub3B0aW9ucy5kYXRhU291cmNlID09PSBcInN0cmluZ1wiXHJcbiAgICApIHtcclxuICAgICAgaWYgKHRoaXMub3B0aW9ucy5kYXRhU291cmNlLnN0YXJ0c1dpdGgoXCJncm91cC5cIikpIHtcclxuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5vcHRpb25zLmRhdGFTb3VyY2UsIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdEV4cGFuZGFibGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKHRoaXMuZGF0YS5OYW1lICsgXCIgLSBoYXMgaW52YWxpZCBkYXRhU291cmNlXCIpO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKHRoaXMuZGF0YS5OYW1lICsgXCIgLSBkYXRhU291cmNlIHByb3BlcnR5IGlzIG5vdCBkZWNsYXJlZC5cIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RmllbGRFbGVtZW50T3B0aW9ucygpIHtcclxuICAgIHRoaXMub3B0aW9ucy5zb3J0YWJsZSA9IHRydWU7XHJcbiAgICB0aGlzLm9wdGlvbnMucmVzaXphYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMub3B0aW9ucy5maWx0ZXJhYmxlID0gdHJ1ZTtcclxuICAgIHRoaXMub3B0aW9ucy5yZXNpemFibGUgPSB0cnVlO1xyXG4gICAgdGhpcy5vcHRpb25zLmNvbHVtbk1lbnUgPSB0aGlzLmRhdGEuRGlzYWJsZUdyaWRDb2x1bW5NZW51ID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgdGhpcy5vcHRpb25zLnNjcm9sbGFibGUgPSB0aGlzLmRhdGFbJ1Njcm9sbE1vZGUnXSA/IHRoaXMuZGF0YVsnU2Nyb2xsTW9kZSddIDogJ3ZpcnR1YWwnO1xyXG4gICAgdGhpcy5vcHRpb25zLmlkRmllbGQgPSB0aGlzLmRhdGFbXCJpZEZpZWxkXCJdIHx8IHRoaXMuaWRGaWVsZDtcclxuICAgIHRoaXMub3B0aW9ucy5wYXJlbnRJZEZpZWxkID0gdGhpcy5kYXRhW1wicGFyZW50SWRGaWVsZFwiXSB8fCB0aGlzLnBhcmVudElkRmllbGQ7XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sdW1ucyA9IFtdO1xyXG4gICAgdGhpcy5vcHRpb25zLmFnZ3JlZ2F0ZSA9IFtdO1xyXG4gICAgdGhpcy5vcHRpb25zLnBhZ2VBYmxlID0gdGhpcy5kYXRhLnBhZ2VBYmxlICE9IHVuZGVmaW5lZCA/IHRoaXMuZGF0YS5wYWdlQWJsZSA6IGZhbHNlO1xyXG5cclxuICAgIGxldCB6ZmllbGRzID0gW107XHJcbiAgICB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKHRoaXMuZGF0YVtcIkNvbHVtbkZpZWxkQ29kZVwiXSwgXCJGb3JtRmllbGRcIiwgbnVsbCwgbnVsbCkucGlwZShcclxuICAgICAgc3dpdGNoTWFwKGZpZWxkcyA9PiB7XHJcbiAgICAgICAgLy9CZWZvcmUgZ2V0IGdyaWQgZGF0YVxyXG4gICAgICAgIHJldHVybiB0aGlzLmJlZm9yZUxvYWRDb2x1bW4odGhpcy5ncm91cCwgZmllbGRzLCB0aGlzKTtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcChmaWVsZHMgPT4ge1xyXG4gICAgICAgIHpmaWVsZHMgPSBmaWVsZHM7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9uc0Zyb21aQnV0dG9ucyhmaWVsZHMpO1xyXG4gICAgICB9KSxcclxuICAgICAgdGFwKChidXR0b25zKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXRUcmVlTGlzdENvbHVtbnMoemZpZWxkcywgYnV0dG9ucyk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihbdGhpcy5nZXREYXRhQmluZGluZygpLCBzdXBlci50cmFuc2xhdGVDb2x1bW5IZWFkZXIodGhpcy5vcHRpb25zLmNvbHVtbnMpXSk7XHJcbiAgICAgIH0pLFxyXG4gICAgICB0YXAoZGF0YSA9PiB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVGb3JtQ29udHJvbHNGb3JJbmxpbmVFZGl0KGRhdGFbMF0pO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IGRhdGFbMF0gfHwgW107XHJcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0RXhwYW5kYWJsZSgpO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGJlZm9yZUxvYWRDb2x1bW4oZ3JvdXA6IFpHcm91cCwgZmllbGRzOiBhbnksIG1lOiBhbnkpIHtcclxuICAgIGlmICghZ3JvdXAuYmVmb3JlTG9hZENvbHVtbikge1xyXG4gICAgICBjb25zb2xlLndhcm4oXCJncm91cC5iZWZvcmVMb2FkQ29sdW1uIGlzIHVuZGVmaW5lZFwiKTtcclxuICAgICAgcmV0dXJuIG9mKGZpZWxkcyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZ3JvdXAuYmVmb3JlTG9hZENvbHVtbihncm91cCwgZmllbGRzLCBtZSk7XHJcbiAgfVxyXG5cclxuICAvLyBjb25zdCB6YnV0dG9uRmllbGRzID0gW10gYXMgQXJyYXk8WkZpZWxkPjtcclxuICAvLyBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgLy8gICAgIGlmIChmaWVsZC5UeXBlID09PSBcInpidXR0b25zXCIpIHtcclxuICAvLyAgICAgICAgIGxldCBmaWVsZENvbFZpc2libGUgPSBmaWVsZC5ncmlkQ29sVmlzaWJsZTtcclxuICAvLyAgICAgICAgIGlmIChmaWVsZC5ncmlkQ29sVmlzaWJsZSAmJiBmaWVsZC5ncmlkQ29sVmlzaWJsZS50b1N0cmluZygpLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgLy8gICAgICAgICAgICAgLy8gZmllbGQuZ3JpZENvbFZpc2libGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoZmllbGQuZ3JpZENvbFZpc2libGUudG9TdHJpbmcoKSwgdGhpcy5ncm91cCk7XHJcbiAgLy8gICAgICAgICAgICAgZmllbGRDb2xWaXNpYmxlID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGZpZWxkLmdyaWRDb2xWaXNpYmxlLnRvU3RyaW5nKCksIHRoaXMuZ3JvdXApO1xyXG4gIC8vICAgICAgICAgfVxyXG4gIC8vICAgICAgICAgLy8gaWYgKGZpZWxkLmdyaWRDb2xWaXNpYmxlID09PSB0cnVlKSB7XHJcbiAgLy8gICAgICAgICBpZiAoZmllbGRDb2xWaXNpYmxlID09PSB0cnVlKSB7XHJcbiAgLy8gICAgICAgICAgICAgemJ1dHRvbkZpZWxkcy5wdXNoKGZpZWxkKTtcclxuICAvLyAgICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vIH0pO1xyXG5cclxuICAvLyBpZiAoemJ1dHRvbkZpZWxkcy5sZW5ndGggPT09IDApIHtcclxuICAvLyAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAvLyB9XHJcbiAgLy8gemJ1dHRvbkZpZWxkcy5mb3JFYWNoKHpidXR0b25GaWVsZCA9PiB7XHJcbiAgLy8gICAgIHpidXR0b25SZXN1bHQucHVzaChcclxuICAvLyAgICAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLmdldEZvcm1GaWVsZENvZGUoemJ1dHRvbkZpZWxkLlZhbHVlLCBcIkZvcm1GaWVsZFwiLCBudWxsLCBudWxsKS5waXBlKFxyXG4gIC8vICAgICAgICAgICAgIHN3aXRjaE1hcChidXR0b25zID0+IHtcclxuICAvLyAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHsgemJ1dHRvbkZpZWxkLCBidXR0b25zIH0pO1xyXG4gIC8vICAgICAgICAgICAgIH0pKVxyXG4gIC8vICAgICApO1xyXG4gIC8vIH0pO1xyXG5cclxuICBwcml2YXRlIGdldEJ1dHRvbnNGcm9tWkJ1dHRvbnMoZmllbGRzOiBBcnJheTxaRmllbGQ+KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGNvbnN0IGJ1dHRvbkNtZCA9IFtdO1xyXG4gICAgY29uc3QgemJ1dHRvblJlc3VsdCA9IFtdO1xyXG4gICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBpZiAoZmllbGQuVHlwZSA9PT0gXCJ6YnV0dG9uc1wiICYmIFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShmaWVsZC5ncmlkQ29sVmlzaWJsZSBhcyBzdHJpbmcsIHRoaXMuZ3JvdXApKSB7XHJcbiAgICAgICAgemJ1dHRvblJlc3VsdC5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5maWVsZFNlcnZpY2UuZ2V0Rm9ybUZpZWxkQ29kZShmaWVsZC5WYWx1ZSwgXCJGb3JtRmllbGRcIiwgbnVsbCwgbnVsbCkucGlwZShcclxuICAgICAgICAgICAgc3dpdGNoTWFwKGJ1dHRvbnMgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiBvZih7IGZpZWxkLCBidXR0b25zIH0pO1xyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoemJ1dHRvblJlc3VsdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ya0pvaW4oemJ1dHRvblJlc3VsdCkucGlwZShcclxuICAgICAgdGFwKHJlc3AgPT4ge1xyXG4gICAgICAgIHJlc3AuZm9yRWFjaCh6YnV0dG9uc0FycmF5ID0+XHJcbiAgICAgICAgICB6YnV0dG9uc0FycmF5W1wiYnV0dG9uc1wiXS5mb3JFYWNoKChidXR0b246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBidXR0b25DbWQucHVzaCh7XHJcbiAgICAgICAgICAgICAgemJ1dHRvbnNOYW1lOiB6YnV0dG9uc0FycmF5W1wiZmllbGRcIl0uVmFsdWUsXHJcbiAgICAgICAgICAgICAgbmFtZTogYnV0dG9uLlZhbHVlLFxyXG4gICAgICAgICAgICAgIGNsYXNzOiBidXR0b24uQ2xhc3MsXHJcbiAgICAgICAgICAgICAgdGV4dDogYnV0dG9uLkxhYmVsLFxyXG4gICAgICAgICAgICAgIGljb246IGJ1dHRvbi5JY29uLFxyXG4gICAgICAgICAgICAgIHZpc2libGU6IGJ1dHRvbi5WaXNpYmxlLFxyXG4gICAgICAgICAgICAgIGhpZGRlblBhcmFtOiBidXR0b25bXCJoaWRkZW5QYXJhbVwiXSxcclxuICAgICAgICAgICAgICBoaWRkZW5WYWx1ZTogYnV0dG9uW1wiaGlkZGVuVmFsdWVcIl0sXHJcbiAgICAgICAgICAgICAgZWRpdDogYnV0dG9uLmVkaXQsXHJcbiAgICAgICAgICAgICAgQ2xpY2tFdmVudDogYnV0dG9uLkNsaWNrRXZlbnQsXHJcbiAgICAgICAgICAgICAgU2hvd0xhYmVsOiBidXR0b24uU2hvd0xhYmVsLFxyXG4gICAgICAgICAgICAgIGNvbG9yOiBidXR0b24uQ29sb3JcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pLFxyXG4gICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBvZihidXR0b25DbWQpO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0VHJlZUxpc3RDb2x1bW5zKGZpZWxkczogQXJyYXk8WkZpZWxkPiwgYnV0dG9uczogYW55KSB7XHJcbiAgICBmaWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLlZhbHVlKSkge1xyXG4gICAgICAgIHRoaXMuc2V0VHJlZUxpc3RDb2x1bW5zKGZpZWxkLlZhbHVlLCBidXR0b25zKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKGZpZWxkLmdyaWRDb2xWaXNpYmxlIGFzIHN0cmluZywgdGhpcy5ncm91cCkgPT09IHRydWUpIHtcclxuICAgICAgICBpZiAoZmllbGQuVHlwZSA9PT0gXCJ6YnV0dG9uc1wiKSB7XHJcbiAgICAgICAgICB0aGlzLmluc2VydENvbW1hbmQoZmllbGQsIGJ1dHRvbnMpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoZmllbGQuQWdncmVnYXRlVHlwZSAmJiBmaWVsZC5BZ2dyZWdhdGVUeXBlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGxldCBhZ2dyZWdhdGV0aXRsZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZC5BZ2dyZWdhdGVUeXBlID09PSBcInN1bVwiKSB7XHJcbiAgICAgICAgICAgICAgYWdncmVnYXRldGl0bGUgPSBcIlRvdGFsOiBcIjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBhZ2dyZWdhdGV0aXRsZSA9IGZpZWxkLkFnZ3JlZ2F0ZVR5cGUgKyBcIjogXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pbnNlcnRGb290ZXJUZW1wbGF0ZUZpZWxkKGZpZWxkLCBhZ2dyZWdhdGV0aXRsZSk7XHJcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5hZ2dyZWdhdGUucHVzaCh7XHJcbiAgICAgICAgICAgICAgZmllbGQ6IGZpZWxkLlZhbHVlLFxyXG4gICAgICAgICAgICAgIGFnZ3JlZ2F0ZTogZmllbGQuQWdncmVnYXRlVHlwZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0RmllbGQoZmllbGQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluc2VydEZpZWxkKGZpZWxkOiBaRmllbGQpIHtcclxuICAgIGxldCBjb2xUaXRsZSA9IGZpZWxkLkRpc3BsYXlOYW1lID8/IGZpZWxkLk5hbWU7XHJcbiAgICBpZiAoY29sVGl0bGUudG9TdHJpbmcoKS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICBjb2xUaXRsZSA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZShjb2xUaXRsZS50b1N0cmluZygpLCB0aGlzLmdyb3VwKTtcclxuICAgIH1cclxuICAgIHRoaXMub3B0aW9ucy5jb2x1bW5zLnB1c2goXHJcbiAgICAgIE9iamVjdC5hc3NpZ24oZmllbGQsIHtcclxuICAgICAgICBmaWVsZDogZmllbGQuVmFsdWUsXHJcbiAgICAgICAgdGl0bGU6IGNvbFRpdGxlLFxyXG4gICAgICAgIHdpZHRoOiBmaWVsZC53aWR0aCxcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGZpZWxkVHlwZTogZmllbGQuVHlwZSxcclxuICAgICAgICBuYXZpZ2F0ZVRvOiBmaWVsZC5OYXZpZ2F0ZVRvLFxyXG4gICAgICAgIGNvbW1hbmQ6IG51bGwsXHJcbiAgICAgICAgY2xhc3M6IGZpZWxkLkRpdkNsYXNzLFxyXG4gICAgICAgIGZvb3RlclRlbXBsYXRlOiBmYWxzZSxcclxuICAgICAgICBhZ2dyZWdhdGVUeXBlOiBcIlwiLFxyXG4gICAgICAgIGFnZ3JlZ2F0ZVRpdGxlOiBcIlwiLFxyXG4gICAgICAgIGlzRWRpdGFibGVJbkdyaWQ6IGZpZWxkLklzRWRpdGFibGVJbkdyaWRcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluc2VydENvbW1hbmQoZmllbGQ6IFpGaWVsZCwgYnV0dG9uczogYW55KSB7XHJcbiAgICBsZXQgY29sVGl0bGUgPSBmaWVsZC5OYW1lO1xyXG4gICAgaWYgKGNvbFRpdGxlLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgY29sVGl0bGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoY29sVGl0bGUudG9TdHJpbmcoKSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sdW1ucy5wdXNoKHtcclxuICAgICAgZmllbGQ6IGZpZWxkLk5hbWUsXHJcbiAgICAgIHRpdGxlOiBjb2xUaXRsZSxcclxuICAgICAgd2lkdGg6IGZpZWxkLndpZHRoLFxyXG4gICAgICB2aXNpYmxlOiBmaWVsZC5WaXNpYmxlLFxyXG4gICAgICBmaWVsZFR5cGU6IGZpZWxkLlR5cGUsXHJcbiAgICAgIG5hdmlnYXRlVG86IGZpZWxkLk5hdmlnYXRlVG8sXHJcbiAgICAgIGNvbW1hbmQ6IGJ1dHRvbnMuZmlsdGVyKHggPT4geC56YnV0dG9uc05hbWUgPT09IGZpZWxkLlZhbHVlKSxcclxuICAgICAgY2xhc3M6IGZpZWxkLkRpdkNsYXNzLFxyXG4gICAgICBmb290ZXJUZW1wbGF0ZTogZmFsc2UsXHJcbiAgICAgIGFnZ3JlZ2F0ZVR5cGU6IFwiXCIsXHJcbiAgICAgIGFnZ3JlZ2F0ZVRpdGxlOiBcIlwiLFxyXG4gICAgICBpc0VkaXRhYmxlSW5HcmlkOiBmaWVsZC5Jc0VkaXRhYmxlSW5HcmlkXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5zZXJ0Rm9vdGVyVGVtcGxhdGVGaWVsZChmaWVsZDogWkZpZWxkLCBhZ2dyZWdhdGV0aXRsZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgY29sVGl0bGUgPSBmaWVsZC5OYW1lO1xyXG4gICAgaWYgKGNvbFRpdGxlLnRvU3RyaW5nKCkuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgY29sVGl0bGUgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUoY29sVGl0bGUudG9TdHJpbmcoKSwgdGhpcy5ncm91cCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMuY29sdW1ucy5wdXNoKHtcclxuICAgICAgZmllbGQ6IGZpZWxkLlZhbHVlLFxyXG4gICAgICB0aXRsZTogY29sVGl0bGUsXHJcbiAgICAgIHdpZHRoOiBmaWVsZC53aWR0aCxcclxuICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgZmllbGRUeXBlOiBmaWVsZC5UeXBlLFxyXG4gICAgICBuYXZpZ2F0ZVRvOiBmaWVsZC5OYXZpZ2F0ZVRvLFxyXG4gICAgICBjb21tYW5kOiBudWxsLFxyXG4gICAgICBjbGFzczogZmllbGQuRGl2Q2xhc3MsXHJcbiAgICAgIGZvb3RlclRlbXBsYXRlOiB0cnVlLFxyXG4gICAgICBhZ2dyZWdhdGVUeXBlOiBmaWVsZC5BZ2dyZWdhdGVUeXBlLFxyXG4gICAgICBhZ2dyZWdhdGVUaXRsZTogYWdncmVnYXRldGl0bGUsXHJcbiAgICAgIGlzRWRpdGFibGVJbkdyaWQ6IGZpZWxkLklzRWRpdGFibGVJbkdyaWRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXREYXRhQmluZGluZygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5EYXRhU291cmNlKSB7XHJcbiAgICAgIHJldHVybiBvZihaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLkRhdGFTb3VyY2UsIHRoaXMuZ3JvdXApKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXNvdXJjZVVybCA9IHRoaXMuZ2V0UmVzb3VjZVVSTCgpO1xyXG4gICAgaWYgKHJlc291cmNlVXJsKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLndlYmFwaVNlcnZpY2UuZ2V0QXBpKHJlc291cmNlVXJsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCB0cnVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBvZihbXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdldFJlc291Y2VVUkwoKSB7XHJcbiAgICByZXR1cm4gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cFZhbHVlKFxyXG4gICAgICB0aGlzLmRhdGEuUmVzb3VyY2VVUkwsXHJcbiAgICAgIHRoaXMuZ3JvdXBcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBjZWxsQ2xpY2tIYW5kbGVyKGV2ZW50OiBDZWxsQ2xpY2tFdmVudCkge1xyXG4gICAgaWYgKCEhdGhpcy5kYXRhLkRpc2FibGVDZWxsQ2xpY2tIYW5kbGVyKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcImNlbGxDbGljayBldmVudDogXCIsIGV2ZW50KTtcclxuICAgIGlmICh0aGlzLmRhdGEuT25JdGVtQ2xpY2spIHtcclxuICAgICAgY29uc3QgZnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25JdGVtQ2xpY2spO1xyXG4gICAgICBpZiAodHlwZW9mIGZ1bmMgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBjb25zdCBjYWxsRnVuYyA9IGZ1bmMuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgICAgY2FsbEZ1bmMoZXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVkaXRNb2RlbChldmVudC5kYXRhSXRlbSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVkaXRNb2RlbChkYXRhSXRlbTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkVkaXRDbGlja1VSTCkge1xyXG4gICAgICAvLyBUT0RPOlxyXG4gICAgICAvLyBkZWJ1Z2dlcjtcclxuICAgICAgLy8gdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3RoaXMuZGF0YS5FZGl0Q2xpY2tVUkwsIGRhdGFJdGVtLklkXSk7XHJcbiAgICAgIGNvbnN0IGNvbEZpZWxkcyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBWYWx1ZSh0aGlzLmRhdGEuQ29sdW1uRmllbGRzLCB0aGlzLmdyb3VwKTtcclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwiemdyaWQtY2VsbENsaWNrXCIsXHJcbiAgICAgICAgdGFyZ2V0OiB0aGlzLmRhdGEuRWRpdENsaWNrVVJMLFxyXG4gICAgICAgIGRhdGE6IGRhdGFJdGVtLFxyXG4gICAgICAgIGNvbHVtbkZpZWxkcyQ6IGNvbEZpZWxkc1xyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdGhpcy5ncm91cC5lZGl0TW9kZWxVUkwsIGRhdGFJdGVtLklkLCAnZWRpdCddLCB7XHJcbiAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmF0ZWRSb3V0ZVxyXG4gICAgICB9KTtcclxuICAgICAgLy8gY29uc29sZS5sb2coJ1BhdGg6ICcsIHRoaXMuYWN0aXZhdGVkUm91dGVbJ19yb3V0ZXJTdGF0ZSddLnNuYXBzaG90LnVybCk7XHJcbiAgICAgIC8vIGNvbnN0IGN1cnJlbnRQYXRoID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZVsnX3JvdXRlclN0YXRlJ10uc25hcHNob3QudXJsO1xyXG4gICAgICAvLyB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbY3VycmVudFBhdGggKyBcIi9cIiArIHRoaXMuZ3JvdXAuZWRpdE1vZGVsVVJMLCBkYXRhSXRlbS5JZF0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZvcm1hdChjb2w6IGFueSkge1xyXG4gICAgbGV0IGZvcm1hdCA9IFwiXCI7XHJcbiAgICBjb25zdCBmb3JtYXRBcnIgPSBjb2wuRm9ybWF0T3B0aW9ucy5zcGxpdChcIi5cIilcclxuICAgIGxldCBkcCA9IDA7XHJcblxyXG4gICAgaWYgKGZvcm1hdEFyci5sZW5ndGggPiAxKSB7XHJcbiAgICAgIGRwID0gZm9ybWF0QXJyWzFdLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZHAgIT09IDApIHtcclxuICAgICAgZm9ybWF0ID0gXCIxLlwiICsgZHAgKyBcIi1cIiArIGRwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0SGVhZGVyVGV4dChjb2x1bW5OYW1lOiBzdHJpbmcsIG5ld0hlYWRlclRpdGxlOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGdyaWRDb2x1bW5zID0gdGhpcy5vcHRpb25zLmNvbHVtbnM7XHJcbiAgICBncmlkQ29sdW1ucy5mb3JFYWNoKChjb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoY29sLk5hbWUgPT09IGNvbHVtbk5hbWUgfHwgY29sLmZpZWxkID09PSBjb2x1bW5OYW1lKSB7XHJcbiAgICAgICAgY29sLnRpdGxlID0gbmV3SGVhZGVyVGl0bGU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENvbENsYXNzKGRhdGFJdGVtOiBhbnksIGNvbDogYW55KSB7XHJcbiAgICBsZXQgbmdDbGFzcyA9IFwiZ3JpZENlbGwgXCI7XHJcbiAgICBpZiAoY29sLmZpZWxkVHlwZSA9PT0gJ251bWJlcicgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ2N1cnJlbmN5JyB8fCBjb2wuZmllbGRUeXBlID09PSAnem51bWVyaWMnKSB7XHJcbiAgICAgIG5nQ2xhc3MgKz0gXCJyaWdodEFsaWduZWQgXCI7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGFJdGVtW2NvbC5maWVsZCArICdfQ2xhc3MnXSkge1xyXG4gICAgICBuZ0NsYXNzICs9IGRhdGFJdGVtW2NvbC5maWVsZCArICdfQ2xhc3MnXSArIFwiIFwiO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjb2wuQ2xhc3MpIHtcclxuICAgICAgbmdDbGFzcyArPSBjb2wuQ2xhc3MgKyBcIiBcIjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbmdDbGFzcztcclxuICB9XHJcblxyXG4gIG9uRmlsdGVyQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnp0cmVlbGlzdCkge1xyXG4gICAgICAvLyB0byBiZSBpbXBsZW1lbnQuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmlsdGVyYWJsZSh2YWx1ZTogYW55KSB7XHJcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNvcnRhYmxlKHZhbHVlOiBhbnkpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RGVmYXVsdEV4cGFuZGFibGUoKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLlRyZWVMaXN0SW5pdGlhbGx5RXhwYW5kZWREYXRhSWRzKSB7XHJcbiAgICAgIGNvbnN0IGlkTGlzdCA9IHR5cGVvZiB0aGlzLmRhdGEuVHJlZUxpc3RJbml0aWFsbHlFeHBhbmRlZERhdGFJZHMgPT0gJ3N0cmluZycgPyBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwVmFsdWUodGhpcy5kYXRhLlRyZWVMaXN0SW5pdGlhbGx5RXhwYW5kZWREYXRhSWRzIGFzIHN0cmluZywgdGhpcy5ncm91cCkgOiB0aGlzLmRhdGEuVHJlZUxpc3RJbml0aWFsbHlFeHBhbmRlZERhdGFJZHM7XHJcbiAgICAgIGlmIChpZExpc3QgJiYgQXJyYXkuaXNBcnJheShpZExpc3QpKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZElkcyA9IGlkTGlzdC5tYXAoaSA9PiBpLnRvU3RyaW5nKCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmRhdGEuRGVmYXVsdENvbGxhcHNlID09PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkSWRzID0gdGhpcy5kYXRhU291cmNlLm1hcChkID0+IGRbdGhpcy5pZEZpZWxkXS50b1N0cmluZygpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0V4cGFuZGVkID0gKGRhdGFJdGVtOiBhbnkpOiBib29sZWFuID0+IHtcclxuICAgIHJldHVybiB0aGlzLmV4cGFuZGVkSWRzLmluZGV4T2YoZGF0YUl0ZW1bdGhpcy5pZEZpZWxkXS50b1N0cmluZygpKSA+IC0xO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBvbkNvbGxhcHNlKGFyZ3M6IEV4cGFuZEV2ZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLmV4cGFuZGVkSWRzID0gdGhpcy5leHBhbmRlZElkcy5maWx0ZXIoKGlkKSA9PiBpZCAhPSBhcmdzLmRhdGFJdGVtW3RoaXMuaWRGaWVsZF0udG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25FeHBhbmQoYXJnczogRXhwYW5kRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuZXhwYW5kZWRJZHMucHVzaChhcmdzLmRhdGFJdGVtW3RoaXMuaWRGaWVsZF0udG9TdHJpbmcoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkTmV3KCkge1xyXG4gICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICB0eXBlOiBcImJ1dHRvbkNsaWNrXCIsXHJcbiAgICAgIHRhcmdldDogXCJncm91cC5uZXdNb2RlbCgpXCIsXHJcbiAgICAgIGRhdGE6IG51bGxcclxuICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWZyZXNoRGF0YSgpIHtcclxuICAgIHRoaXMuZ3JvdXAuc3ViamVjdC5uZXh0KHtcclxuICAgICAgdHlwZTogXCJidXR0b25DbGlja1wiLFxyXG4gICAgICB0YXJnZXQ6IFwiZ3JvdXAucmVmcmVzaFRyZWVMaXN0KClcIixcclxuICAgICAgZGF0YTogbnVsbFxyXG4gICAgfSBhcyBaQ29tcG9uZW50T3V0cHV0RXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cEdyaWRCdXR0b25zKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGIHx8IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lKSB7XHJcbiAgICAgIHRoaXMuZ3JpZEJ0biA9IHtcclxuICAgICAgICBSZWFkT25seTogZmFsc2UsXHJcbiAgICAgICAgVmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBJc1JlcXVpcmVkOiBmYWxzZSxcclxuICAgICAgICBXb3JrZmxvd0NvZGU6IHRoaXMuZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lX1dGLFxyXG4gICAgICAgIFZhbHVlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZSxcclxuICAgICAgICBUeXBlOiB0aGlzLmRhdGEuR3JpZEJ1dHRvbkZpZWxkTmFtZV9XRiA/IFwiendvcmtmbG93YnV0dG9uc1wiIDogXCJ6YnV0dG9uc1wiXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93VG9vbHRpcChlOiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kYXRhLklzU2hvd1Rvb2xUaXAgPT09IGZhbHNlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGVsZW1lbnQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBsZXQgaXNDb21tYW5kQ29sdW1uID0gZmFsc2U7XHJcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICBpZiAoZGF0YSA9PSAnay1jb21tYW5kLWNlbGwnKSB7XHJcbiAgICAgICAgaXNDb21tYW5kQ29sdW1uID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKCFpc0NvbW1hbmRDb2x1bW4gJiZcclxuICAgICAgKFxyXG4gICAgICAgICgoZWxlbWVudC5ub2RlTmFtZSA9PT0gJ1REJyB8fCBlbGVtZW50Lm5vZGVOYW1lID09PSAnVEgnKSAmJiBlbGVtZW50Lm9mZnNldFdpZHRoIDwgKGVsZW1lbnQuc2Nyb2xsV2lkdGgpKSB8fFxyXG4gICAgICAgIChlbGVtZW50Lm5vZGVOYW1lID09PSAnU1BBTicgJiYgZWxlbWVudC5jbGFzc0xpc3QgJiYgZWxlbWVudC5jbGFzc0xpc3QubGVuZ3RoID4gMCAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZ3JpZC1jZWxsLWRhdGEnKSAmJiBlbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5vZmZzZXRXaWR0aCA8IChlbGVtZW50LnBhcmVudEVsZW1lbnQucGFyZW50RWxlbWVudC5zY3JvbGxXaWR0aCkpKVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcERpci50b2dnbGUoZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50b29sdGlwRGlyLmhpZGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vI3JlZ2lvbiBJbmxpbmUgRWRpdFxyXG4gIHByaXZhdGUgY3JlYXRlRm9ybUNvbnRyb2xzRm9ySW5saW5lRWRpdChkYXRhOiBhbnkpIHtcclxuICAgIGxldCBjb3VudGVySW5kZXggPSAwO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5jb2x1bW5zLmZpbmQoYyA9PiBjLmlzRWRpdGFibGVJbkdyaWQpID09PSB1bmRlZmluZWQgfHwgIWRhdGEpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyA9IHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3VwcyB8fCB7fTtcclxuXHJcbiAgICBkYXRhLmZvckVhY2goZCA9PiB7XHJcbiAgICAgIGNvbnN0IGl0ZW1zID0ge307XHJcbiAgICAgIHRoaXMub3B0aW9ucy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XHJcbiAgICAgICAgaXRlbXNbYy5maWVsZF0gPSBuZXcgRm9ybUNvbnRyb2woZFtjLmZpZWxkXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgICBjb25zdCBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKGl0ZW1zKTtcclxuXHJcbiAgICAgIGlmIChkW1wiSWRcIl0pIHtcclxuICAgICAgICBpdGVtc1tcIklkXCJdID0gbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGRbXCJJZFwiXSwgZGlzYWJsZWQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGRbXCJJZFwiXSA9IGNvdW50ZXJJbmRleCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuaW5saW5lRWRpdGVkRm9ybUdyb3Vwc1tkW1wiSWRcIl1dID0gZm9ybUdyb3VwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRmllbGQodmFsdWU6IGFueSkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5jb2x1bW5zLmZpbmQoeCA9PiB4LlZhbHVlID09PSB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SW5saW5lRm9ybShkYXRhOiBhbnksIHJvd0luZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiB0aGlzLmlubGluZUVkaXRlZEZvcm1Hcm91cHNbZGF0YVtcIklkXCJdIHx8IHJvd0luZGV4XTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRGb3JtQ29udHJvbERhdGEoKSB7XHJcbiAgICBjb25zdCBkYXRhID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzKSkge1xyXG4gICAgICBkYXRhLnB1c2godGhpcy5pbmxpbmVFZGl0ZWRGb3JtR3JvdXBzW2tdPy52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpc0lubGluZUVkaXRDb2xWaXNpYmxlKGRhdGFJdGVtOiBhbnksIGNvbHVtbjogYW55KSB7XHJcbiAgICBjb25zdCBpc1Zpc2libGUgPSBkYXRhSXRlbVtgJHtjb2x1bW4uVmFsdWV9X1Zpc2libGVgXTtcclxuICAgIHJldHVybiAhKGlzVmlzaWJsZSA9PT0gZmFsc2UpO1xyXG4gIH1cclxuICAvLyNlbmRyZWdpb25cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiIWlzTG9hZGluZyAmJiAoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIlxyXG4gICAgIGNsYXNzPVwiZ3JpZC1jb250YWluZXIgZTF0YWctc3R5bGVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiPlxyXG4gIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGUgbGV0LWFuY2hvcj5cclxuICAgIDxzcGFuPnt7IGFuY2hvci5uYXRpdmVFbGVtZW50LmlubmVyVGV4dCB9fTwvc3Bhbj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG4gIDxkaXYga2VuZG9Ub29sdGlwIHNob3dPbj1cIm5vbmVcIiBbdG9vbHRpcFRlbXBsYXRlXT1cInRlbXBsYXRlXCIgZmlsdGVyPVwiLmstZ3JpZCB0ZFwiIChtb3VzZW92ZXIpPVwic2hvd1Rvb2x0aXAoJGV2ZW50KVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiIGNsYXNzPVwiZTF0YWctc3R5bGUxXCI+XHJcbiAgICA8a2VuZG8tdHJlZWxpc3QgW2tlbmRvVHJlZUxpc3RGbGF0QmluZGluZ109XCJkYXRhU291cmNlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUyXCIgY2xhc3M9XCJkZXNrdG9wLWdyaWQgZTF0YWctc3R5bGUyXCIgW2lkRmllbGRdPVwib3B0aW9ucy5pZEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGFyZW50SWRGaWVsZF09XCJvcHRpb25zLnBhcmVudElkRmllbGRcIiAoY2VsbENsaWNrKT1cImNlbGxDbGlja0hhbmRsZXIoJGV2ZW50KVwiIFtzb3J0YWJsZV09XCJvcHRpb25zLnNvcnRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVzaXphYmxlXT1cIm9wdGlvbnMucmVzaXphYmxlXCIgW2ZpbHRlcmFibGVdPVwib3B0aW9ucy5maWx0ZXJhYmxlXCIgW3Jlb3JkZXJhYmxlXT1cImZhbHNlXCIgW2NvbHVtbk1lbnVdPVwib3B0aW9ucy5jb2x1bW5NZW51XCJcclxuICAgICAgICAgICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJvcHRpb25zLnNjcm9sbGFibGVcIiBbYWdncmVnYXRlXT1cIm9wdGlvbnMuYWdncmVnYXRlXCIgW3BhZ2VhYmxlXT1cIm9wdGlvbnMucGFnZUFibGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJkYXRhLlBhZ2VTaXplXCIgW2lzRXhwYW5kZWRdPVwiaXNFeHBhbmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJvbkZpbHRlckNoYW5nZSgkZXZlbnQpXCIgKGV4cGFuZCk9XCJvbkV4cGFuZCgkZXZlbnQpXCIgKGNvbGxhcHNlKT1cIm9uQ29sbGFwc2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAga2VuZG9UcmVlTGlzdEV4cGFuZGFibGUgdHJlZWxpc3Q+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0VG9vbGJhclRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uIHx8IGRhdGEuQWxsb3dFeHBvcnQgfHwgZGF0YS5UaXRsZSB8fCBkYXRhLkdyaWRCdXR0b25GaWVsZE5hbWVfV0YgfHwgZGF0YS5HcmlkQnV0dG9uRmllbGROYW1lXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRvb2Jhci1sZWZ0LWl0ZW1cIj5cclxuICAgICAgICAgIDxmYS1pY29uICpuZ0lmPVwiZGF0YS5JY29uXCIgY2xhc3M9XCJncmlkVGl0bGVJY29uXCIgW2ljb25dPVwiZGF0YS5JY29uXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgPGtlbmRvLWxhYmVsIGNsYXNzPVwiZ3JpZFRpdGxlXCI+e3tkYXRhLlRpdGxlfX08L2tlbmRvLWxhYmVsPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImlvbi1hY3RpdmF0YWJsZSByaXBwbGUtcGFyZW50IGstYnV0dG9uIHJlZnJlc2gtYnRuXCIgKGNsaWNrKT1cInJlZnJlc2hEYXRhKClcIiAqbmdJZj1cImRhdGEuQWxsb3dSZWZyZXNoQnV0dG9uXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiay1pY29uIGstaS1yZWZyZXNoLXNtXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8aW9uLXJpcHBsZS1lZmZlY3Q+PC9pb24tcmlwcGxlLWVmZmVjdD5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0b29sYmFyLXJpZ2h0LWl0ZW1cIj5cclxuICAgICAgICAgIDxhcHAtendvcmtmbG93YnV0dG9ucyAqbmdJZj1cImdyaWRCdG4gJiYgZ3JpZEJ0bi5UeXBlID09PSAnendvcmtmbG93YnV0dG9ucydcIiBbZGF0YV09XCJncmlkQnRuXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiPjwvYXBwLXp3b3JrZmxvd2J1dHRvbnM+XHJcbiAgICAgICAgICA8YXBwLXpidXR0b25zICpuZ0lmPVwiZ3JpZEJ0biAmJiBncmlkQnRuLlR5cGUgPT09ICd6YnV0dG9ucydcIiBbZGF0YV09XCJncmlkQnRuXCIgW2dyb3VwXT1cImdyb3VwXCIgW2Zvcm1dPVwiZm9ybVwiPjwvYXBwLXpidXR0b25zPlxyXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImlvbi1hY3RpdmF0YWJsZSByaXBwbGUtcGFyZW50IGstYnV0dG9uXCIga2VuZG9UcmVlTGlzdEV4Y2VsQ29tbWFuZFxyXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuQWxsb3dFeHBvcnRcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLWRvd25sb2FkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICA8aW9uLXJpcHBsZS1lZmZlY3Q+PC9pb24tcmlwcGxlLWVmZmVjdD5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8IS0tXHJcbiAgICAgICAgW2ZpbHRlcmFibGVdPVwib3B0aW9ucy5maWx0ZXJhYmxlXCJcclxuICAgICAgW3Jlb3JkZXJhYmxlXT1cIm9wdGlvbnMucmVzaXphYmxlXCJcclxuICAgICAgICAtLT5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sIG9mIG9wdGlvbnMuY29sdW1uczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgIDxrZW5kby10cmVlbGlzdC1jb2x1bW4gKm5nSWY9XCIhY29sLmNvbW1hbmRcIiBbY2xhc3NdPVwiY29sLmNsYXNzXCIgW2V4cGFuZGFibGVdPVwiaT09PTBcIiBbZmllbGRdPVwiY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJjb2wudGl0bGUgfHwgY29sLmZpZWxkXCIgW3dpZHRoXT1cImNvbC53aWR0aCB8fCAyNTBcIiBbZmlsdGVyYWJsZV09XCJmaWx0ZXJhYmxlKGNvbC5lbmFibGVGaWx0ZXJpbmcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0YWJsZV09XCJzb3J0YWJsZShjb2wuZW5hYmxlU29ydGluZylcIiBbaGlkZGVuXT1cIiFpc0NvbHVtbnNWaXNpYmxlKGNvbC52aXNpYmxlKVwiIFtzdHlsZV09XCJnZXRHcmlkQ29sdW1uU3R5bGUoKVwiIGNsYXNzPVwiZTF0YWctc3R5bGUzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXJTdHlsZV09XCJnZXRHcmlkSGVhZGVyU3R5bGUoKVwiIGhlYWRlckNsYXNzPVwiZTF0YWctc3R5bGU0XCIgW2Zvb3RlclN0eWxlXT1cImdldEdyaWRGb290ZXJTdHlsZSgpXCIgZm9vdGVyQ2xhc3M9XCJlMXRhZy1zdHlsZTlcIj5cclxuICAgICAgICAgIDxkaXYgW25nU3dpdGNoXT1cInRydWVcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiY29sLmZpZWxkVHlwZSA9PT0gJ251bWJlcidcclxuICAgICAgICAgICAgICAgfHwgY29sLmZpZWxkVHlwZSA9PT0gJ2N1cnJlbmN5J1xyXG4gICAgICAgICAgICAgICB8fCBjb2wuZmllbGRUeXBlID09PSAnem51bWVyaWMnXCI+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvVHJlZUxpc3RGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtbnVtZXJpYy1maWx0ZXItY2VsbCBbY29sdW1uXT1cImNvbHVtblwiIFtmaWx0ZXJdPVwiZmlsdGVyXCIgb3BlcmF0b3I9XCJlcVwiPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWVxLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLW5lcS1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1uZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItbHRlLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWx0ZS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1ndC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICA8a2VuZG8tZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj48L2tlbmRvLWZpbHRlci1pc251bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgIDwva2VuZG8tdHJlZWxpc3QtbnVtZXJpYy1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiY29sLmZpZWxkVHlwZSA9PSAnemRhdGUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6ZGF0ZXRpbWUnXHJcbiAgICAgICAgICAgICAgIHx8IGNvbC5maWVsZFR5cGUgPT09ICd6dWlkYXRldGltZSdcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUga2VuZG9UcmVlTGlzdEZpbHRlckNlbGxUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC1jb2x1bW49XCJjb2x1bW5cIiBvcGVyYXRvcj1cImx0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGF0ZS1yYW5nZS1maWx0ZXItY2VsbCBjbGFzcz1cImRhdGUtcmFuZ2UtZmlsdGVyXCIgW2ZpbHRlcl09XCJmaWx0ZXJcIiBbZmllbGRdPVwiY29sLmZpZWxkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1sdC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1sdC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWx0ZS1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1sdGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1ndC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1ndC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWd0ZS1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1ndGUtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1pc251bGwtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItaXNudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPC9kYXRlLXJhbmdlLWZpbHRlci1jZWxsPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY29sLmZpbHRlckJ5RGF0ZVJhbmdlID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvVHJlZUxpc3RGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1kYXRlLWZpbHRlci1jZWxsIFtjb2x1bW5dPVwiY29sdW1uXCIgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImx0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItbHQtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItbHQtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1sdGUtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItbHRlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItZ3Qtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItZ3Qtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1ndGUtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItZ3RlLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbm90bnVsbC1vcGVyYXRvcj48L2tlbmRvLXRyZWVsaXN0LWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDwva2VuZG8tdHJlZWxpc3QtZGF0ZS1maWx0ZXItY2VsbD5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvVHJlZUxpc3RGaWx0ZXJDZWxsVGVtcGxhdGUgbGV0LWZpbHRlciBsZXQtY29sdW1uPVwiY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8a2VuZG8tdHJlZWxpc3Qtc3RyaW5nLWZpbHRlci1jZWxsIFtjb2x1bW5dPVwiY29sdW1uXCIgW2ZpbHRlcl09XCJmaWx0ZXJcIiBvcGVyYXRvcj1cImNvbnRhaW5zXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItY29udGFpbnMtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItY29udGFpbnMtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItZXEtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItZXEtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItbmVxLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLW5lcS1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1zdGFydHN3aXRoLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLXN0YXJ0c3dpdGgtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItZW5kc3dpdGgtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItZW5kc3dpdGgtb3BlcmF0b3I+XHJcbiAgICAgICAgICAgICAgICAgIDxrZW5kby10cmVlbGlzdC1maWx0ZXItaXNudWxsLW9wZXJhdG9yPjwva2VuZG8tdHJlZWxpc3QtZmlsdGVyLWlzbnVsbC1vcGVyYXRvcj5cclxuICAgICAgICAgICAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWZpbHRlci1pc25vdG51bGwtb3BlcmF0b3I+PC9rZW5kby10cmVlbGlzdC1maWx0ZXItaXNub3RudWxsLW9wZXJhdG9yPlxyXG4gICAgICAgICAgICAgICAgPC9rZW5kby10cmVlbGlzdC1zdHJpbmctZmlsdGVyLWNlbGw+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBrZW5kb1RyZWVMaXN0Q2VsbFRlbXBsYXRlIGxldC1kYXRhSXRlbSBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiIGxldC1jZWxsQ29udGV4dD1cImNlbGxDb250ZXh0XCI+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDdweCAwO2Rpc3BsYXk6IGlubGluZTtcIiBbc3R5bGUuY29sb3JdPVwiKCEhZGF0YUl0ZW0uQ29sb3IgPyBbZGF0YUl0ZW0uQ29sb3JdIDogJ2JsYWNrJylcIlxyXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5uYXZpZ2F0ZVRvICYmIGNvbC5pc0VkaXRhYmxlSW5HcmlkICE9PSB0cnVlXCIgW25nU3dpdGNoXT1cImNvbC5maWVsZFR5cGVcIlxyXG4gICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENvbENsYXNzKGRhdGFJdGVtLCBjb2wpXCI+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6ZGF0ZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ2RkL01NL3l5eXknIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenNob3J0ZGF0ZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ01NTSB5eXl5JyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3pkYXRldGltZSdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgZGF0ZTogJ2RkL01NL3l5eXkgaGg6bW06c3MgYWEnIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaENhc2U9XCInenVpZGF0ZXRpbWUnXCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB8IGRhdGU6ICdkZC9NTS95eXl5IGhoOm1tOnNzIGFhJyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodDtcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyIH19IDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiIGNsYXNzPVwiZ3JpZC1jZWxsLWRhdGFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOnJpZ2h0O1wiPnt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfCBudW1iZXI6ICcxLjItMicgfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIid6bnVtZXJpYydcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwidGV4dC1hbGlnbjpyaWdodDtcIj57eyBkYXRhSXRlbVtjb2wuZmllbGRdIHwgbnVtYmVyOiBnZXRGb3JtYXQoY29sKSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3VybCdcIiBzdHlsZT1cImNvbG9yOiBibHVlOyBjdXJzb3I6IHBvaW50ZXI7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7XCIgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ3psYWJlbCdcIiBjbGFzcz1cImdyaWQtY2VsbC1kYXRhXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwienRyZWUtaW5saW5lLWJsb2NrIGUxdGFnLXN0eWxlMTBcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTEwXCIgW2lubmVySFRNTF09XCJkYXRhSXRlbVtjb2wuZmllbGRdIHwgaHRtbFNhbml0aXplXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDxzcGFuICpuZ1N3aXRjaERlZmF1bHQgY2xhc3M9XCJncmlkLWNlbGwtZGF0YVwiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YUl0ZW1bY29sLmZpZWxkXSB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW46IDdweCAwO2Rpc3BsYXk6IGlubGluZTtcIiBbc3R5bGUuY29sb3JdPVwiKCEhZGF0YUl0ZW0uQ29sb3IgPyBbZGF0YUl0ZW0uQ29sb3JdIDogJ2JsYWNrJylcIlxyXG4gICAgICAgICAgICAgICAgICpuZ0lmPVwiIWNvbC5uYXZpZ2F0ZVRvICYmIGNvbC5pc0VkaXRhYmxlSW5HcmlkID09PSB0cnVlICYmIGlzSW5saW5lRWRpdENvbFZpc2libGUoZGF0YUl0ZW0sIGNvbClcIlxyXG4gICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldENvbENsYXNzKGRhdGFJdGVtLCBjb2wpXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTVcIj5cclxuICAgICAgICAgICAgICA8YXBwLXppbnB1dC1jb250YWluZXIgW2RhdGFdPVwiZ2V0SW5saW5lRmllbGQoY29sLmZpZWxkKVwiIFtncm91cF09XCJncm91cFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtXT1cImdldElubGluZUZvcm0oZGF0YUl0ZW0sIHJvd0luZGV4KVwiIFtjb250YWluZXJGaWVsZF09XCJjb250YWluZXJGaWVsZFwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZTF0YWctc3R5bGU2XCI+XHJcbiAgICAgICAgICAgICAgPC9hcHAtemlucHV0LWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiISFjb2wubmF2aWdhdGVUb1wiIChjbGljayk9XCJvbk5hdmlnYXRlVG8oJGV2ZW50LCBjb2wsIGRhdGFJdGVtLCBkYXRhSXRlbVtjb2wuZmllbGRdKVwiPlxyXG4gICAgICAgICAgICAgIDxpb24tYnV0dG9uIGNvbG9yPVwibGlnaHRcIiBzaXplPVwic21hbGxcIj5cclxuICAgICAgICAgICAgICAgIHt7IGRhdGFJdGVtW2NvbC5maWVsZF0gfX1cclxuICAgICAgICAgICAgICAgIDwhLS0gPGlvbi1pY29uIHNsb3Q9IFwiZW5kXCIgbmFtZT1cImFycm93LWZvcndhcmRcIj48L2lvbi1pY29uPiAtLT5cclxuICAgICAgICAgICAgICAgIDxmYS1pY29uIHNsb3Q9XCJlbmRcIiBbaWNvbl09XCInYXJyb3ctcmlnaHQnXCI+PC9mYS1pY29uPlxyXG4gICAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNvbC5mb290ZXJUZW1wbGF0ZVwiIGtlbmRvVHJlZUxpc3RGb290ZXJUZW1wbGF0ZSBsZXQtYWdncmVnYXRlcz1cImFnZ3JlZ2F0ZXNcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFjb2wubmF2aWdhdGVUb1wiIFtuZ1N3aXRjaF09XCJjb2wuZmllbGRUeXBlXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU3XCJcclxuICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3JpZ2h0QWxpZ25lZCc6IGNvbC5maWVsZFR5cGUgPT09ICdudW1iZXInIHx8IGNvbC5maWVsZFR5cGUgPT09ICdjdXJyZW5jeSd9XCIgY2xhc3M9XCJlMXRhZy1zdHlsZTdcIj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ251bWJlcidcIj5cclxuICAgICAgICAgICAgICAgIDxiPlxyXG4gICAgICAgICAgICAgICAgICB7eyBjb2wuYWdncmVnYXRlVGl0bGUgfCB0aXRsZWNhc2UgfX0ge3sgYWdncmVnYXRlc1tjb2wuZmllbGRdW2NvbC5hZ2dyZWdhdGVUeXBlXSB8IG51bWJlciB9fVxyXG4gICAgICAgICAgICAgICAgPC9iPlxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8c3BhbiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAgPGI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGNvbC5hZ2dyZWdhdGVUaXRsZSB8IHRpdGxlY2FzZSB9fSB7eyBhZ2dyZWdhdGVzW2NvbC5maWVsZF1bY29sLmFnZ3JlZ2F0ZVR5cGVdIHwgbnVtYmVyOiAnMS4yLTInIH19XHJcbiAgICAgICAgICAgICAgICA8L2I+XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9rZW5kby10cmVlbGlzdC1jb2x1bW4+XHJcbiAgICAgICAgPGtlbmRvLXRyZWVsaXN0LWNvbW1hbmQtY29sdW1uICpuZ0lmPVwiISFjb2wuY29tbWFuZFwiIFt0aXRsZV09XCJjb2wudGl0bGUgfHwgY29sLmZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cImNvbC53aWR0aCB8fCAyNTBcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZThcIiBjbGFzcz1cImUxdGFnLXN0eWxlOFwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvVHJlZUxpc3RDZWxsVGVtcGxhdGUgbGV0LWNlbGxDb250ZXh0PVwiY2VsbENvbnRleHRcIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJjb2wuY2xhc3NcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uICpuZ0Zvcj1cImxldCBjb2wyIG9mIGNvbC5jb21tYW5kOyBpbmRleCBhcyBpXCIgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBba2VuZG9UcmVlTGlzdEVkaXRDb21tYW5kXT1cImNlbGxDb250ZXh0XCIgW3RpdGxlXT1cImNvbDIudGV4dFwiIChjbGljayk9XCJidXR0b25DbGljayhjb2wyLCBjZWxsQ29udGV4dClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbl09XCJpc0J1dHRvbkhpZGRlbihjb2wyLCBjZWxsQ29udGV4dClcIj5cclxuICAgICAgICAgICAgICAgIDxmYS1pY29uIFtpY29uXT1cImNvbDIuaWNvblwiIFtzdHlsZS5jb2xvcl09XCIoISFjb2wyLmNvbG9yID8gW2NvbDIuY29sb3JdIDogJ2JsYWNrJylcIj5cclxuICAgICAgICAgICAgICAgIDwvZmEtaWNvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb2wyLlNob3dMYWJlbCA9PT0gdW5kZWZpbmVkIHx8IGNvbDIuU2hvd0xhYmVsXCI+e3tjb2wyLnRleHR9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9rZW5kby10cmVlbGlzdC1jb21tYW5kLWNvbHVtbj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8IS0tIDxrZW5kby10cmVlbGlzdC1jb21tYW5kLWNvbHVtbiB3aWR0aD1cIjE0MFwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIGtlbmRvVHJlZUxpc3RDZWxsVGVtcGxhdGUgbGV0LWlzTmV3PVwiaXNOZXdcIiBsZXQtY2VsbENvbnRleHQ9XCJjZWxsQ29udGV4dFwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gW2tlbmRvVHJlZUxpc3RBZGRDb21tYW5kXT1cImNlbGxDb250ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJmaWx0ZXItYWRkLWV4cHJlc3Npb25cIiB0aXRsZT1cIkFkZCBDaGlsZFwiPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gW2tlbmRvVHJlZUxpc3RDYW5jZWxDb21tYW5kXT1cImNlbGxDb250ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJjYW5jZWxcIiB0aXRsZT1cInt7IGlzTmV3ID8gJ0Rpc2NhcmQgY2hhbmdlcycgOiAnQ2FuY2VsJyB9fVwiPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPC9rZW5kby10cmVlbGlzdC1jb21tYW5kLWNvbHVtbj4gLS0+XHJcbiAgICA8L2tlbmRvLXRyZWVsaXN0PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
@@ -11236,6 +11236,9 @@ class ZtreelistComponent extends DataListingFieldBase {
11236
11236
  this.options.pageAble = this.data.pageAble != undefined ? this.data.pageAble : false;
11237
11237
  let zfields = [];
11238
11238
  this.fieldService.getFormFieldCode(this.data["ColumnFieldCode"], "FormField", null, null).pipe(switchMap(fields => {
11239
+ //Before get grid data
11240
+ return this.beforeLoadColumn(this.group, fields, this);
11241
+ }), switchMap(fields => {
11239
11242
  zfields = fields;
11240
11243
  return this.getButtonsFromZButtons(fields);
11241
11244
  }), tap$1((buttons) => {
@@ -11249,6 +11252,13 @@ class ZtreelistComponent extends DataListingFieldBase {
11249
11252
  this.isLoading = false;
11250
11253
  })).subscribe();
11251
11254
  }
11255
+ beforeLoadColumn(group, fields, me) {
11256
+ if (!group.beforeLoadColumn) {
11257
+ console.warn("group.beforeLoadColumn is undefined");
11258
+ return of(fields);
11259
+ }
11260
+ return group.beforeLoadColumn(group, fields, me);
11261
+ }
11252
11262
  // const zbuttonFields = [] as Array<ZField>;
11253
11263
  // fields.forEach(field => {
11254
11264
  // if (field.Type === "zbuttons") {
@@ -11340,7 +11350,8 @@ class ZtreelistComponent extends DataListingFieldBase {
11340
11350
  });
11341
11351
  }
11342
11352
  insertField(field) {
11343
- let colTitle = field.Name;
11353
+ var _a;
11354
+ let colTitle = (_a = field.DisplayName) !== null && _a !== void 0 ? _a : field.Name;
11344
11355
  if (colTitle.toString().startsWith('group.')) {
11345
11356
  colTitle = ZComponentHelper.getGroupValue(colTitle.toString(), this.group);
11346
11357
  }