@huntsman-cancer-institute/navigation 17.14.2 → 17.14.3

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.
@@ -437,7 +437,12 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
437
437
  this.boundFilters = [];
438
438
  this.boundAdvancedSearchFilters = [];
439
439
  for (let filterField of this.filterByAllowedFields) {
440
- this.boundFilters.push(new HciFilterDto(filterField, "string", undefined, undefined, "L", false));
440
+ let dataType = "string";
441
+ let field = this.fields.find(x => x.field == filterField);
442
+ if (field && field.type) {
443
+ dataType = field.type.toLowerCase();
444
+ }
445
+ this.boundFilters.push(new HciFilterDto(filterField, dataType, undefined, undefined, "L", false));
441
446
  }
442
447
  for (let filterField of this.advancedSearchFields) {
443
448
  this.boundAdvancedSearchFilters.push(new HciFilterDto(filterField, "string", undefined, undefined, "L", false));
@@ -491,7 +496,7 @@ let SearchListControllerComponent = class SearchListControllerComponent extends
491
496
  return;
492
497
  }
493
498
  for (let filter of this.boundFilters) {
494
- if (filter.value instanceof Date) {
499
+ if (filter.value instanceof Date || (filter.getDataType() == 'date' && filter.value && !isNaN(new Date(filter.value).getTime()))) {
495
500
  filter.valid = true;
496
501
  }
497
502
  else if (filter.value && filter.value.length > 0) {
@@ -1673,4 +1678,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
1673
1678
  type: HostListener,
1674
1679
  args: ["document:click", ["$event", "$event.target"]]
1675
1680
  }] } });
1676
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QtY29udHJvbGxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXZpZ2F0aW9uL3NyYy9jb21wb25lbnRzL3NlYXJjaC1saXN0L3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVoRDs7OztHQUlHO0FBc2pCSSxJQUFNLDZCQUE2QixHQUFuQyxNQUFNLDZCQUE4QixTQUFRLFlBQVk7SUF3RTdELGVBQWUsQ0FBQyxNQUFjO1FBQzVCLElBQUksaUJBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQ2hDLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BD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QUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBbXNCUCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBJbnB1dCxcclxuICBpc0Rldk1vZGUsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFJlbmRlcmVyMixcclxuICBUZW1wbGF0ZVJlZixcclxuICBTaW1wbGVDaGFuZ2VzXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0fSBmcm9tIFwicnhqc1wiO1xyXG5cclxuaW1wb3J0IHtIY2lGaWx0ZXJEdG8sIEhjaVNvcnREdG99IGZyb20gXCJAaHVudHNtYW4tY2FuY2VyLWluc3RpdHV0ZS9oY2ktbmctZ3JpZC1kdG9cIjtcclxuaW1wb3J0IHtDb21wb25lbnRUeXBlfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvdXRpbHNcIjtcclxuXHJcbmltcG9ydCB7TmF2Q29tcG9uZW50fSBmcm9tIFwiLi4vbmF2LmNvbXBvbmVudFwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25TZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvbkdsb2JhbFNlcnZpY2V9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9uYXZpZ2F0aW9uLWdsb2JhbC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcblxyXG4vKipcclxuICogVGhlIHNlYXJjaCBsaXN0IGNvbnRyb2xsZXIgcmVuZGVycyBhcyBhIGhlYWRlciB0byBvbmUgb3IgbW9yZSBzZWFyY2ggbGlzdHMuICBPbmx5IG9uZSBzZWFyY2ggbGlzdCBjYW4gYmUgc2hvd24gYXQgYSB0aW1lLlxyXG4gKiBUaGUgY29udHJvbGxlciBmZWF0dXJlcyB0aGUgYWJpbGl0eSB0byBoYW5kbGUgZmlsdGVyaW5nIGFuZCBzb3J0aW5nLiAgV2l0aG91dCB0aGUgY29udHJvbGxlciwgdGhlIHNlYXJjaCBsaXN0IGNhbiBleGlzdCxcclxuICogYnV0IGl0IGNhbiBvbmx5IGhhbmRsZSBwYWdpbmcgaW50ZXJuYWxseS5cclxuICovXHJcbkBDb21wb25lbnRUeXBlKFwiU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnRcIilcclxuQENvbXBvbmVudChcclxuICB7XHJcbiAgICBzZWxlY3RvcjogXCJoY2ktc2VhcmNoLWxpc3QtY29udHJvbGxlclwiLFxyXG4gICAgZXhwb3J0QXM6IFwic2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnRcIixcclxuICAgIHN0eWxlczogW1xyXG4gICAgICBgXHJcbiAgICAgICAgc2VsZWN0IHtcclxuICAgICAgICAgIHBhZGRpbmc6IC4yNWVtO1xyXG4gICAgICAgICAgcGFkZGluZy1yaWdodDogMGVtO1xyXG4gICAgICAgICAgb3V0bGluZS1vZmZzZXQ6IC0xcHg7XHJcbiAgICAgICAgICBib3JkZXI6IDA7XHJcbiAgICAgICAgICBjb2xvcjogIzhBOTQ5OTtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xyXG4gICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuY2xvc2VhYmxlIHtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtYm94IHtcclxuICAgICAgICAgIGJvcmRlcjogbm9uZTtcclxuICAgICAgICAgIGJvcmRlci1yaWdodDogMC4xcHggc29saWQgIzVCNjI2NjtcclxuICAgICAgICAgIHBhZGRpbmctbGVmdDogLjVyZW0gIWltcG9ydGFudDtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS1ncmV5LWRhcmtlc3QpO1xyXG4gICAgICAgICAgZm9udC1zaXplOiAwLjhyZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc2VhcmNoLW9wdGlvbnMge1xyXG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIC0tLS0tLS0gQlROIEdSQUQgQkxVRSAyIFNUWUxFUyAtLS0tLS0tICovXHJcbiAgICAgICAgLnNlYXJjaC1idXR0b246ZW5hYmxlZCB7XHJcbiAgICAgICAgICB3aWR0aDogMzAlO1xyXG4gICAgICAgICAgbWluLWhlaWdodDogMnJlbTtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS1ibHVld2FybS1kYXJrKSAzMCUsIHZhcigtLWJsdWV3YXJtLW1lZGRhcmspIDEwMCUpO1xyXG4gICAgICAgICAgbWFyZ2luOiAwO1xyXG4gICAgICAgICAgY29sb3I6IHZhcigtLXdoaXRlLWxpZ2h0ZXN0KTtcclxuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWV3YXJtLWRhcmspO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1idXR0b246aG92ZXIge1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHZhcigtLWJsdWV3YXJtLW1lZGRhcmspIDAlLCB2YXIoLS1ibHVld2FybS1kYXJrKSAxMDAlKTtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVld2FybS1kYXJrZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1idXR0b246ZGlzYWJsZWQge1xyXG4gICAgICAgICAgd2lkdGg6IDMwJTtcclxuICAgICAgICAgIG9wYWNpdHk6IDAuNTtcclxuICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XHJcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDBkZWcsIHZhcigtLWJsdWV3YXJtLWRhcmspIDMwJSwgdmFyKC0tYmx1ZXdhcm0tbWVkZGFyaykgMTAwJSk7XHJcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVld2FybS1kYXJrKTtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8qIC0tLS0tLS0gQlROIEdSQUQgQkxVRSAyIFNUWUxFUyAtLS0tLS0tICovXHJcblxyXG4gICAgICAgIC5nbG9iYWwtc2VhcmNoIHtcclxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDtcclxuICAgICAgICAgIGJvcmRlcjogMC4wNGVtIHNvbGlkIHZhcigtLWdyZXl3YXJtLWRhcmspO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRhYi10aXRsZS1jbGFzcyB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgaGVpZ2h0OiA1MHB4O1xyXG4gICAgICAgICAgYmFja2dyb3VuZDogbGlnaHRncmF5O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRhYi1wYW5lIHtcclxuICAgICAgICAgIHdpZHRoOiBtaW4tY29udGVudCAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1vcHRpb25zLmV4cGFuZGVkIHtcclxuICAgICAgICAgIGhlaWdodDogZml0LWNvbnRlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuYmFja0J1dHRvbiAuZmEtYW5nbGUtZG91YmxlLWxlZnQge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnN2Zy1pbmxpbmUtLWZhcyBmYS1hbmdsZS1kb3VibGUtbGVmdCB7XHJcbiAgICAgICAgICBjb2xvcjogd2hpdGU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC1pdGVtIHtcclxuICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICBjb2xvcjogYmxhY2s7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC1pY29uIHtcclxuICAgICAgICAgIHdpZHRoOiAxLjVyZW07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc29ydC10ZXh0OmhvdmVyIHtcclxuICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5oY2ktc2VhcmNoLWxpc3QtY29udHJvbGxlci1jb2xvciB7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAudGV4dGFyZWEtc2VhcmNoLWJveCB7XHJcbiAgICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XHJcbiAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgIG1pbi1oZWlnaHQ6IDMwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubXVsdGlsaW5lLXNlYXJjaC1idXR0b24ge1xyXG4gICAgICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICAgICAgbWF4LXdpZHRoOiAzcmVtO1xyXG4gICAgICAgICAgbWluLXdpZHRoOiAzcmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmZpbHRlci1zb3J0aW5nLXBhbmVsIHtcclxuICAgICAgICAgIG1hcmdpbi10b3A6IDMwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgLmRpc2FibGVkLWJ1dHRvbiB7XHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjU7XHJcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS1ibHVld2FybS1kYXJrKSAzMCUsIHZhcigtLWJsdWV3YXJtLW1lZGRhcmspIDEwMCUpO1xyXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZXdhcm0tZGFyayk7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLm5hdi1jb250YWluZXIge1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xyXG4gICAgICAgICAgZmxleC13cmFwOiBub3dyYXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAubm8tdXNlci1zZWxlY3QtdGV4dHtcclxuICAgICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcclxuICAgICAgICB9XHJcbiAgICAgIGBcclxuICAgIF0sXHJcbiAgICB0ZW1wbGF0ZTpcclxuICAgICAgYFxyXG4gICAgICAgIDxkaXYgaWQ9XCJzZWFyY2gtdGl0bGVcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUaXRsZVwiIGNsYXNzPVwiZC1mbGV4IHBzLTIgaGNpLXNlYXJjaC1saXN0LWNvbnRyb2xsZXItY29sb3JcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dCYWNrQnV0dG9uXCIgY2xhc3M9XCJtZS1hdXRvIG1zLTEgYmFja0J1dHRvblwiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImJhY2tCdXR0b25DbGlja2VkKClcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItYmFjay1idXR0b25cIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWFuZ2xlLWRvdWJsZS1sZWZ0XCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAge3t0aXRsZX19XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1yb3cgbXMtYXV0b1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJidXR0b25UZW1wbGF0ZVwiPjxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy1hdXRvIG1lLTJcIiAoY2xpY2spPVwidG9nZ2xlU2hvd09wdGlvbnMoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtZmlsdGVyXCI+PC9pPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1vcHRpb25zXCIgW2NsYXNzLmV4cGFuZGVkXT1cInNob3dPcHRpb25zXCIgW25nU3R5bGVdPVwieyd3aWR0aCc6IChzZWFyY2hPcHRpb25zV2lkdGggIT09ICcnKSA/IHNlYXJjaE9wdGlvbnNXaWR0aCA6ICdhdXRvJ31cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1ncm93LTFcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93VG9nZ2xlT3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXItY29tcG9uZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiBhdXRvXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiY2FyZC1oZWFkZXItYnV0dG9uIGJ0biBjbG9zZWFibGVcIiAoY2xpY2spPVwidG9nZ2xlU2hvd09wdGlvbnMoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci10b2dnbGUtb3B0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGNhcmQtaGVhZGVyLXRleHQ+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImRpc2FibGVMb2NhbEZpbHRlcmluZzsgZWxzZSBkaXNwbGF5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5hdiBuZ2JOYXYgI25hdj1cIm5nYk5hdlwiIFsoYWN0aXZlSWQpXT1cImFjdGl2ZVRhYlwiIGNsYXNzID0gXCJuYXYtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG5nYk5hdkl0ZW0gW25nYk5hdkl0ZW1dPVwiMVwiIGNsYXNzPVwidGFiLXRpdGxlLWNsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJCeUFsbG93ZWRGaWVsZHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzID1cImZsZXgtZ3Jvdy0xXCI+QkFTSUMgU0VBUkNIPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFzaWMtc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2xhc3NpZmljYXRpb24taGVhZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7dGhpcy5iYXNpY1NlYXJjaEhlYWRlcn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2VhcmNoLWNvbnRlbnQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgYm91bmRGaWx0ZXJzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpbHRlci5maWVsZCkgPT09ICdpbnB1dCcgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb3VibGUgY2hlY2sgaWYgdGhlIHRleHRhcmVhIG5lZWRlZCBpbiBCYXNpYyBTZWFyY2gtLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpbHRlci5maWVsZCkgPT09ICd0ZXh0YXJlYScgXCI+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIFtuZ01vZGVsXT1cImdsb2JhbFNlYXJjaFwiIGNsYXNzPSBcInNlYXJjaC1ib3hcIiAoa2V5dXApPVwiZG9HbG9iYWxTZWFyY2goJGV2ZW50KVwiLS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQtY29sb3I6ICNmMmYyZjJcIj48L3RleHRhcmVhPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4tLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpbHRlci5maWVsZCkgPT09ICdkcm9wZG93bicgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW25nTW9kZWxdPVwiZmlsdGVyLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZHNbaV0gJiYgZmllbGRzW2ldLnZhbHVlcyAmJiBmaWVsZHNbaV0udmFsdWVzWzBdLmRpc3BsYXk7ZWxzZSBkaXNwbGF5X3Jhd192YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5Ob25lPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmllbGRzW2ldLnZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZS5pZFwiPnt7dmFsdWUuZGlzcGxheX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlfcmF3X3ZhbHVlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5Ob25lPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmllbGRzW2ldLnZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiPnt7dmFsdWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpbHRlci5maWVsZCkgPT09ICdkYXRlJyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW25nTW9kZWxdPVwiZmlsdGVyLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCIgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwibXlQaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cImRhdGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cIm15UGlja2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cImZhXCIgZm9udEljb249XCJmYS1jYWxlbmRhci1hbHQgZmEtbGdcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjbXlQaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtbXNnLWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImJhc2ljLXNlYXJjaC1tc2ctaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1mb290ZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWhlYWRlci1yaWdodC1jb250YWluZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGNsYXNzID0gXCJyaS1idG4tY2FuY2VsXCIgW25nQ2xhc3NdPVwieydyaS1idG4tY2FuY2VsLWRpcnR5JzogdGhpcy5jaGFuZ2VkfVwiIFtkaXNhYmxlZF0gPVwiIXRoaXMuY2hhbmdlZFwiIChjbGljayk9XCJzZXR1cEZpbHRlcnMoZmFsc2UpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWNsZWFyLWJhc2ljLXNlYXJjaC1maWx0ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xFQVJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3M9XCJyaS1idG4tc2F2ZVwiIFtuZ0NsYXNzXT1cInsgJ3JpLWJ0bi1zYXZlLWRpcnR5JzogdGhpcy5jaGFuZ2VkfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiF0aGlzLmNoYW5nZWQgXCIgKGNsaWNrKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWFwcGx5LWJhc2ljLWZpbHRlci1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRUFSQ0hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjJcIiBjbGFzcz1cInRhYi10aXRsZS1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWR2YW5jZWRTZWFyY2hGaWVsZHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rIGNsYXNzID1cImZsZXgtZ3Jvdy0xXCI+QURWQU5DRUQgU0VBUkNIPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWRTZWFyY2gtc2Nyb2xsXCIgaWQ9XCJhZHZhbmNlZFNlYXJjaC1zY3JvbGwtcGFuZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHZhbmNlZFNlYXJjaC1wYW5lbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBwYXJhbSBvZiB0aGlzLmFkdmFuY2VkU2VhcmNoOyBpbmRleCBhcyBqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2FkdmFuY2VkLXNlYXJjaCc6ICF0aGlzLmhhc0FkdmFuY2VkU2VhcmNoVmVydGljYWxTY3JvbGxiYXIsICdhZHZhbmNlZC1zZWFyY2gtc2Nyb2xsZWQnOiB0aGlzLmhhc0FkdmFuY2VkU2VhcmNoVmVydGljYWxTY3JvbGxiYXJ9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWQtc2VhcmNoLWNsYXNzaWZpY2F0aW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3BhcmFtLmhlYWRlcn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWR2YW5jZWQtc2VhcmNoLWNvbnRlbnQtYm9keVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIHRoaXMucGFyYW0uZmllbGRzOyBpbmRleCBhcyBrXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWVsZC5maWVsZCkgPT09ICdpbnB1dCcgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpZWxkLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW25nTW9kZWxdPVwiZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpZWxkLmZpZWxkKSA9PT0gJ2NoZWNrYm94JyAgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCBjbGFzcz1cImNoZWNrYm94ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0RmllbGREaXNwbGF5KGZpZWxkLmZpZWxkKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpZWxkLmZpZWxkKSA9PT0gJ2Ryb3Bkb3duJyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmllbGQuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtuZ01vZGVsXT1cImdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5QWR2YW5jZWRTZWFyY2hGaWx0ZXJzKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInRoaXMuZmllbGQudmFsdWVVUkw7ZWxzZSBkaXNwbGF5X3Jhd192YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHRoaXMuZmllbGQudmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWUuaWRcIj57e3ZhbHVlLmRpc3BsYXl9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheV9yYXdfdmFsdWU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgdGhpcy5maWVsZC52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiPnt7dmFsdWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWVsZC5maWVsZCkgPT09ICdkYXRlJyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmllbGQuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbbmdNb2RlbF09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5QWR2YW5jZWRTZWFyY2hGaWx0ZXJzKCRldmVudClcIiBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXREYXRlcGlja2VyXT1cIm15UGlja2VyXCIgcGxhY2Vob2xkZXI9XCJkYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cIm15UGlja2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBmb250U2V0PVwiZmFcIiBmb250SWNvbj1cImZhLWNhbGVuZGFyLWFsdCBmYS1sZ1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjbXlQaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtbXNnLWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImFkdmFuY2VkLXNlYXJjaC1tc2ctaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1mb290ZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWhlYWRlci1yaWdodC1jb250YWluZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGNsYXNzID0gXCJyaS1idG4tY2FuY2VsXCIgW25nQ2xhc3NdPVwieydyaS1idG4tY2FuY2VsLWRpcnR5JzogdGhpcy5jaGFuZ2VkfVwiIFtkaXNhYmxlZF09XCIhdGhpcy5jaGFuZ2VkXCIgKGNsaWNrKT1cInNldHVwRmlsdGVycyhmYWxzZSlcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItY2xlYXItYWR2YW5jZS1zZWFyY2gtZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFSXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGNsYXNzID0gXCJyaS1idG4tc2F2ZVwiICBbbmdDbGFzc10gPVwieydyaS1idG4tc2F2ZS1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdGhpcy5jaGFuZ2VkXCIgKGNsaWNrKT1cImFwcGx5QWR2YW5jZWRTZWFyY2hGaWx0ZXJzKCRldmVudClcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItYXBwbHktYWR2YW5jZS1maWx0ZXItc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VBUkNIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjNcIiBjbGFzcz1cInRhYi10aXRsZS1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VhcmNoU29ydGluZ09wdGlvbnMubGVuZ3RoPjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcyA9XCJmbGV4LWdyb3ctMVwiID5TT1JUSU5HPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFzaWMtc2VhcmNoXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsYXNzaWZpY2F0aW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RoaXMuYmFzaWNTZWFyY2hIZWFkZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHNpZGViYXItZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc2VhcmNoU29ydEl0ZW0gb2Ygc2VhcmNoU29ydGluZ09wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNiBzb3J0LWl0ZW1cIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ2NvbC02IHNvcnQtaXRlbScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LWljb25cIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NvcnQtaWNvbicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRTZWFyY2hTb3J0aW5nLnZhbHVlPT1zZWFyY2hTb3J0SXRlbS52YWx1ZSAmJiBjdXJyZW50U2VhcmNoU29ydGluZy5pc0FzY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NvcnQtYXJyb3cnOnRydWV9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hcnJvdy1jaXJjbGUtdXAgZmEtbGdcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImN1cnJlbnRTZWFyY2hTb3J0aW5nLnZhbHVlPT1zZWFyY2hTb3J0SXRlbS52YWx1ZSAmJiAhY3VycmVudFNlYXJjaFNvcnRpbmcuaXNBc2NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzb3J0LWFycm93Jzp0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYXJyb3ctY2lyY2xlLWRvd24gZmEtbGdcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC10ZXh0IG5vLXVzZXItc2VsZWN0LXRleHRcIiAoY2xpY2spPVwib25TZWFyY2hTb3J0Q2xpY2tlZCgkZXZlbnQsIHNlYXJjaFNvcnRJdGVtKVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnc29ydC10ZXh0JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlYXJjaFNvcnRJdGVtLmRpc3BsYXl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiYXNpYy1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25hdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ2JOYXZPdXRsZXRdPVwibmF2XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuYXYgbmdiTmF2ICNuYXYxPVwibmdiTmF2XCIgWyhhY3RpdmVJZCldPVwiYWN0aXZlVGFiMVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnbmF2JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIxXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIiAqbmdJZj1cImZpbHRlckJ5QWxsb3dlZEZpZWxkcy5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbms+RklMVEVSPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFzaWMtc2VhcmNoIHNpZGViYXItZmlsdGVyIGZpbHRlci1zb3J0aW5nLXBhbmVsXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdiYXNpYy1zZWFyY2ggc2lkZWJhci1maWx0ZXIgZmlsdGVyLXNvcnRpbmctcGFuZWwnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzZWFyY2gtY29udGVudC1ib2R5XCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdyb3cgc2VhcmNoLWNvbnRlbnQtYm9keScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBib3VuZEZpbHRlcnM7IGluZGV4IGFzIGlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTZcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ2NvbC02JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmlsdGVyLmZpZWxkKSA9PT0gJ2lucHV0JyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdtYXQtZm9ybS1maWVsZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgW25nTW9kZWxdPVwiZmlsdGVyLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpbHRlci5maWVsZCkgPT09ICdkcm9wZG93bicgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnbWF0LWZvcm0tZmllbGQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgW25nTW9kZWxdPVwiZmlsdGVyLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWVsZHNbaV0gJiYgZmllbGRzW2ldLnZhbHVlcyAmJiBmaWVsZHNbaV0udmFsdWVzWzBdLmRpc3BsYXk7ZWxzZSBkaXNwbGF5X3Jhd192YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5Ob25lPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmllbGRzW2ldLnZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZS5pZFwiPnt7dmFsdWUuZGlzcGxheX19PC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlfcmF3X3ZhbHVlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5Ob25lPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZmllbGRzW2ldLnZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiPnt7dmFsdWV9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpbHRlci5maWVsZCkgPT09ICdkYXRlJyBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdtYXQtZm9ybS1maWVsZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWx0ZXIuZmllbGQpfX08L21hdC1sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW25nTW9kZWxdPVwiZmlsdGVyLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImFwcGx5RmlsdGVycygkZXZlbnQpXCIgbWF0SW5wdXQgW21hdERhdGVwaWNrZXJdPVwibXlQaWNrZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIm1tL2RkL3l5eXlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cIm15UGlja2VyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cImZhc1wiIGZvbnRJY29uPVwiZmEtY2FsZW5kYXItYWx0IGZhLWxnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI215UGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NlYXJjaC1tc2ctaG9sZGVyJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiYXNpYy1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGggc2lkZWJhci1maWx0ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1dHRvblJvd1RlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGNsYXNzPVwicmktYnRuLWNhbmNlbCByaS1idG4tY2FuY2VsLWRpcnR5XCIgKGNsaWNrKT1cInNldHVwRmlsdGVycyh0cnVlKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1maWx0ZXItcmVzZXRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNFVFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcz1cInJpLWJ0bi1zYXZlXCIgW25nQ2xhc3NdPVwieydyaS1idG4tc2F2ZS1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdGhpcy5jaGFuZ2VkIFwiIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1maWx0ZXItYXBwbHktZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMVEVSXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIyXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIiAqbmdJZj1cInNvcnRCeUFsbG93ZWRGaWVsZHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rPlNPUlRJTkc8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZ2JOYXZDb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXNpYy1zZWFyY2ggc2lkZWJhci1maWx0ZXIgZmlsdGVyLXNvcnRpbmctcGFuZWxcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ2Jhc2ljLXNlYXJjaCBzaWRlYmFyLWZpbHRlciBmaWx0ZXItc29ydGluZy1wYW5lbCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHNlYXJjaC1jb250ZW50LWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc29ydEZpZWxkIG9mIHNvcnRCeUFsbG93ZWRGaWVsZHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgc29ydC1pdGVtXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdjb2wtNiBzb3J0LWl0ZW0nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtaWNvblwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnc29ydC1pY29uJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU29ydChzb3J0RmllbGQpICYmIGlzU29ydEFzYyhzb3J0RmllbGQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J3NvcnQtYXJyb3cnOmlzRmlyc3RTb3J0KHNvcnRGaWVsZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYXJyb3ctY2lyY2xlLXVwIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzU29ydChzb3J0RmllbGQpICYmICFpc1NvcnRBc2Moc29ydEZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzb3J0LWFycm93Jzppc0ZpcnN0U29ydChzb3J0RmllbGQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWFycm93LWNpcmNsZS1kb3duIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtdGV4dFwiIChjbGljayk9XCJzZXRTb3J0KCRldmVudCwgc29ydEZpZWxkKVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnc29ydC10ZXh0JylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tnZXRGaWVsZERpc3BsYXkoc29ydEZpZWxkKX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYmFzaWMtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoIHNpZGViYXItZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L25hdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtuZ2JOYXZPdXRsZXRdPVwibmF2MVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYi0xIGdsb2JhbC1zZWFyY2hcIiAqbmdJZj1cImlucHV0TXVsdGlsaW5lID09PSBmYWxzZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXSA9IFwiIXF1aWNrU2VhcmNoRW5hYmxlZFwiIFtuZ01vZGVsXT1cImdsb2JhbFNlYXJjaFwiIGNsYXNzPVwic2VhcmNoLWJveFwiIChrZXl1cCk9XCJkb0dsb2JhbFNlYXJjaCgkZXZlbnQpXCIgW3BsYWNlaG9sZGVyXT1cImdsb2JhbFNlYXJjaFBsYWNlaG9sZGVyXCIgYXJpYS1sYWJlbD1cInF1aWNrLXNlYXJjaC1vcHRpb25zXCIvPlxyXG4gICAgICAgICAgICA8c2VsZWN0ICpuZ0lmPVwic2hvd1F1aWNrU2VhcmNoT3B0aW9uc1wiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRTZWFyY2hUeXBlXCIgKGNoYW5nZSk9XCJzZWxlY3RTZWFyY2hUeXBlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwic2VhcmNoLWlkZW50aWZpZXJcIiBzdHlsZT1cIndpZHRoOiAxMDAlOyBib3JkZXItcmFkaXVzOiAwcHg7IGJvcmRlci1jb2xvcjogYmxhY2s7IFwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHNlYXJjaFR5cGUgb2Ygc2VhcmNoVHlwZUFycmF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICB7e3NlYXJjaFR5cGV9fVxyXG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcz1cInBsLTEgcHItMSBzZWFyY2gtYnV0dG9uXCIgc3R5bGU9XCJoZWlnaHQ6IDEwMCVcIiBbZGlzYWJsZWRdID0gXCIhcXVpY2tTZWFyY2hFbmFibGVkXCIgW25nQ2xhc3NdID0gXCJ7J2Rpc2FibGVkLWJ1dHRvbic6IXF1aWNrU2VhcmNoRW5hYmxlZH1cIiAoY2xpY2spPVwic2VhcmNoQnV0dG9uQ2xpY2tlZCgpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLXF1aWNrLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWItMSBnbG9iYWwtc2VhcmNoXCIgKm5nSWY9XCJpbnB1dE11bHRpbGluZSA9PT0gdHJ1ZVwiPlxyXG4gICAgICAgICAgICA8dGV4dGFyZWEgYXJpYS1sYWJlbD1cImdsb2JhbFNlYXJjaFwiIFtkaXNhYmxlZF0gPSBcIiFxdWlja1NlYXJjaEVuYWJsZWRcIiBbbmdNb2RlbF09XCJnbG9iYWxTZWFyY2hcIiBjbGFzcz1cInNlYXJjaC1ib3ggdGV4dGFyZWEtc2VhcmNoLWJveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NlYXJjaC1ib3ggdGV4dGFyZWEtc2VhcmNoLWJveCcpXCIgIChrZXl1cCk9XCJkb0dsb2JhbFNlYXJjaCgkZXZlbnQpXCIgW3BsYWNlaG9sZGVyXT1cImdsb2JhbFNlYXJjaFBsYWNlaG9sZGVyXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgPHNlbGVjdCAqbmdJZj1cInNob3dRdWlja1NlYXJjaE9wdGlvbnNcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU2VhcmNoVHlwZVwiIChjaGFuZ2UpPVwic2VsZWN0U2VhcmNoVHlwZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cInNlYXJjaC1pZGVudGlmaWVyXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgYm9yZGVyLXJhZGl1czogMHB4OyBib3JkZXItY29sb3I6IGJsYWNrOyBcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBzZWFyY2hUeXBlIG9mIHNlYXJjaFR5cGVBcnJheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAge3tzZWFyY2hUeXBlfX1cclxuICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgYXJpYS1sYWJlbD1cInNlYXJjaEJ1dHRvblwiIGNsYXNzPVwicHMtMSBwZS0xIHNlYXJjaC1idXR0b24gbXVsdGlsaW5lLXNlYXJjaC1idXR0b25cIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NlYXJjaC1idXR0b24gbXVsdGlsaW5lLXNlYXJjaC1idXR0b24nKVwiIFtkaXNhYmxlZF0gPSBcIiFxdWlja1NlYXJjaEVuYWJsZWRcIiBbbmdDbGFzc10gPSBcInsnZGlzYWJsZWQtYnV0dG9uJzohcXVpY2tTZWFyY2hFbmFibGVkfVwiIChjbGljayk9XCJzZWFyY2hCdXR0b25DbGlja2VkKClcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItcXVpY2stc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtc2VhcmNoXCI+PC9pPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCB4LWF1dG9cIiAqbmdJZj1cImhhc1ZhbGlkRmlsdGVycygpXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlci52YWxpZFwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJjbGVhckZpbHRlcihmaWx0ZXIpXCIgY2xhc3M9XCJkLWZsZXggcGlsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7e2ZpbHRlci5maWVsZH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsb3NlLWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXRpbWVzLWNpcmNsZSBmYS14c1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VhcmNoTGlzdHMubGVuZ3RoID4gMVwiIGNsYXNzPVwiZC1mbGV4IHgtaGlkZGVuIGxpc3QtdG9nZ2xlXCI+XHJcbiAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZS1ncm91cCBbbmdNb2RlbF09XCJzZWxlY3RlZFNlYXJjaExpc3RcIiAobmdNb2RlbENoYW5nZSk9XCJzZXRTZWxlY3RlZFNlYXJjaExpc3QoJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSAqbmdGb3I9XCJsZXQgc2VhcmNoTGlzdCBvZiBzZWFyY2hMaXN0c1wiIG1hdC1yYWlzZWQtYnV0dG9uLXRvZ2dsZSBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoTGlzdFwiPlxyXG4gICAgICAgICAgICAgICAge3tzZWFyY2hMaXN0fX1cclxuICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlLWdyb3VwPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIGBcclxuICB9XHJcbilcclxuZXhwb3J0IGNsYXNzIFNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50IGV4dGVuZHMgTmF2Q29tcG9uZW50IHtcclxuICBASW5wdXQoKSBzaG93VGl0bGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGJ1dHRvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGlucHV0TXVsdGlsaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VhcmNoT3B0aW9uc1dpZHRoOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGZpZWxkczogYW55W10gPSBbXTtcclxuICBASW5wdXQoKSBjdXN0b21TdHlsZXM6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGJhc2ljU2VhcmNoOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBhZHZhbmNlZFNlYXJjaDogYW55ID0ge307XHJcbiAgQElucHV0KCkgZmlsdGVyQnlBbGxvd2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHF1aWNrU2VhcmNoRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGFkdmFuY2VkU2VhcmNoRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNvcnRCeUFsbG93ZWRGaWVsZHM6IHN0cmluZ1tdID0gW107XHJcbiAgQElucHV0KCkgc29ydHM6IEhjaVNvcnREdG9bXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNob3dRdWlja1NlYXJjaE9wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93QWR2YW5jZWRTZWFyY2hPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2VhcmNoVHlwZUFycmF5OiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFR5cGU6IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgc2VhcmNoVHlwZVNlbGVjdGVkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGJhc2ljU2VhcmNoSGVhZGVyOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGdsb2JhbFNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIGdsb2JhbFNlYXJjaFZhbGlkYXRvcjogYW55IHwgc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBidXR0b25Sb3dUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiA9IG51bGw7XHJcbiAgQElucHV0KCkgc2VhcmNoU29ydGluZ09wdGlvbnM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgbGFiZWxUZXh0OiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hMaXN0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xyXG5cclxuICBhY3RpdmVUYWIgPSAxO1xyXG5cclxuICBhY3RpdmVUYWIxID0gMTtcclxuXHJcbiAgYm91bmRGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IFtdO1xyXG4gIGJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzOiBIY2lGaWx0ZXJEdG9bXSA9IFtdO1xyXG4gIHVwZGF0ZWRBZHZhbmNlU2VhcmNoRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuXHJcbiAgZmlsdGVyc1N1YmplY3Q6IFN1YmplY3Q8SGNpRmlsdGVyRHRvW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIY2lGaWx0ZXJEdG9bXT4oW10pO1xyXG4gIGFkdmFuY2VkU2VhcmNoRmlsdGVyc1N1YmplY3Q6IFN1YmplY3Q8SGNpRmlsdGVyRHRvW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIY2lGaWx0ZXJEdG9bXT4oW10pO1xyXG4gIHNvcnRzU3ViamVjdDogU3ViamVjdDxIY2lTb3J0RHRvW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxIY2lTb3J0RHRvW10+KFtdKTtcclxuXHJcbiAgZ2xvYmFsU2VhcmNoOiBzdHJpbmcgPSBcIlwiO1xyXG5cclxuICBzaG93T3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNob3dCYWNrQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2VhcmNoTGlzdHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VsZWN0ZWRTZWFyY2hMaXN0OiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XHJcbiAgc2VhcmNoU3RyaW5nU3ViamVjdDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XHJcbiAgYmFja0J1dHRvblN1YmplY3Q6IFN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIGFkdmFuY2VkU2VhcmNoU3RyaW5nU3ViamVjdDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XHJcbiAgc2VsZWN0ZWRTZWFyY2hUeXBlOiBzdHJpbmc7XHJcbiAgc2VsZWN0ZWRTZWFyY2hUeXBlU3ViamVjdDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KHVuZGVmaW5lZCk7XHJcbiAgcGVyZm9ybWVkU2VhcmNoU3ViamVjdDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHBlcmZvcm1lZEJhc2ljU2VhcmNoU3ViamVjdDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIHBlcmZvcm1lZEFkdmFuY2VkU2VhcmNoU3ViamVjdDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gIGRpc2FibGVMb2NhbEZpbHRlcmluZyA9IGZhbHNlO1xyXG4gIGFkdmFuY2VkU2VhcmNoQWxsb3dGaWx0ZXIgPSBmYWxzZTtcclxuXHJcbiAgYWxsb3dTZWFyY2hTdWJqZWN0JDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgc2VhcmNoQWxsb3dlZFN1YmplY3QkOiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBhbGxvd1RvZ2dsZVN1YmplY3QkOiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICB0b2dnbGVTaG93U3ViamVjdCQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBjb2dXaGVlbENsaWNrZWRTdWJqZWN0JDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIGNoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBhbGxvd1NlYXJjaDogYm9vbGVhbiA9IHRydWU7XHJcbiAgYWxsb3dUb2dnbGU6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHNob3dUb2dnbGVPcHRpb25zOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgcXVpY2tTZWFyY2hFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgc2VhcmNoU29ydGluZ1NlbGVjdGlvbkNoYW5nZVN1YmplY3QkOiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBjdXJyZW50U2VhcmNoU29ydGluZyA9IHtcInZhbHVlXCI6dW5kZWZpbmVkLCBcImRpc3BsYXlcIjp1bmRlZmluZWQsIFwiaXNBc2NcIjp0cnVlfTtcclxuXHJcbiAgZ2V0Q3VzdG9tU3R5bGVzKHN0eWxlczogc3RyaW5nKTogYW55IHtcclxuICAgIGxldCBjdXN0b21TdHlsZU9iamVjdDogYW55ID0gXCJcIjtcclxuICAgIGZvciAobGV0IHN0eWxlIG9mIHN0eWxlcy5zcGxpdChcIiBcIikpIHtcclxuICAgICAgbGV0IHN0eWxlT2JqZWN0ID0gdGhpcy5jdXN0b21TdHlsZXNbc3R5bGVdO1xyXG4gICAgICBpZiAoc3R5bGVPYmplY3QpIHtcclxuICAgICAgICBjdXN0b21TdHlsZU9iamVjdCA9IE9iamVjdC5hc3NpZ24oe30sIGN1c3RvbVN0eWxlT2JqZWN0LCBzdHlsZU9iamVjdCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gY3VzdG9tU3R5bGVPYmplY3Q7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICByZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICAgIG5hdmlnYXRpb25HbG9iYWxTZXJ2aWNlOiBOYXZpZ2F0aW9uR2xvYmFsU2VydmljZSxcclxuICAgIEBPcHRpb25hbCgpIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge1xyXG4gICAgc3VwZXIoZWxlbWVudFJlZiwgcmVuZGVyZXIsIHJlc29sdmVyLCBuYXZpZ2F0aW9uU2VydmljZSwgY2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cclxuICAgIGlmICghbmF2aWdhdGlvblNlcnZpY2UpIHtcclxuICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZSA9IG5ldyBOYXZpZ2F0aW9uU2VydmljZShuYXZpZ2F0aW9uR2xvYmFsU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0SWQoKSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNSb290ID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBkYXRhIG9ubHkgd2hlbiB0aGUgY29tcG9uZW50IGhhcyBmdWxseSBpbml0aWFsaXplZCBhbmQgaXMgcmVuZGVyZWQuXHJcbiAgICovXHJcbiAgY2hlY2tJbml0aWFsaXplZCgpIHtcclxuICAgIGlmICh0aGlzLmFmdGVyVmlld0luaXQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudXBkYXRlQ29uZmlnKHRoaXMuY29uZmlnKTtcclxuICAgICAgdGhpcy5wb3N0SW5pdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0QnV0dG9uUm93VGVtcGxhdGUoYnV0dG9uUm93VGVtcGxhdGUpe1xyXG4gICAgdGhpcy5idXR0b25Sb3dUZW1wbGF0ZSA9IGJ1dHRvblJvd1RlbXBsYXRlO1xyXG4gIH1cclxuXHJcbiAgZG9HbG9iYWxTZWFyY2goZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGxldCBzZWFyY2hTdHJpbmc6IHN0cmluZyA9ICgoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS52YWx1ZSkudHJpbSgpO1xyXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDEzKSB7XHJcbiAgICAgIC8vIFNlbmQgYSBtZXNzYWdlIHdpdGggc2VhcmNoLXRleHRcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcIkluIFNlYXJjaExpc3RDb250cm9sbGVyIGVudGVyIHdhcyBkZXRlY3RlZFwiKTtcclxuICAgICAgdGhpcy5nbG9iYWxTZWFyY2ggPSBzZWFyY2hTdHJpbmc7XHJcbiAgICAgIHRoaXMuc2VhcmNoU3RyaW5nU3ViamVjdC5uZXh0KHRoaXMuZ2V0U2VhcmNoU3RyaW5nKHNlYXJjaFN0cmluZykpO1xyXG4gICAgICB0aGlzLnNlYXJjaEJ1dHRvbkNsaWNrZWQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRpc2FibGVMb2NhbEZpbHRlcmluZyA9PT0gZmFsc2UpIHtcclxuICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoICE9PSBzZWFyY2hTdHJpbmcpIHtcclxuICAgICAgICBpZiAoIXNlYXJjaFN0cmluZyB8fCBzZWFyY2hTdHJpbmcubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyRmllbGQ6IHN0cmluZztcclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmlsdGVyQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgICAgIGZpbHRlckZpZWxkID0gKGZpbHRlckZpZWxkKSA/IGZpbHRlckZpZWxkICsgXCIgb3IgXCIgKyBmaWVsZCA6IGZpZWxkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtuZXcgSGNpRmlsdGVyRHRvKGZpbHRlckZpZWxkLCBcInN0cmluZ1wiLCB0aGlzLmdldFNlYXJjaFN0cmluZyhzZWFyY2hTdHJpbmcpLCB1bmRlZmluZWQsIFwiTFwiLCB0cnVlKV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5nbG9iYWxTZWFyY2ggPSBzZWFyY2hTdHJpbmc7XHJcbiAgfVxyXG5cclxuICBzZWFyY2hCdXR0b25DbGlja2VkKCkge1xyXG5cclxuICAgIC8vIFZhbGlkYXRpb24gQ2hlY2s6IGlmIGludmFsaWQsIGRvIG5vdCBzZWFyY2guXHJcbiAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IgJiYgdGhpcy5pc0ludmFsaWQoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmFsbG93U2VhcmNoU3ViamVjdCQuc3Vic2NyaWJlKHZhbCA9PiB7XHJcbiAgICAgIGlmICh2YWwgPT09IFwiYWxsb3dTZWFyY2hcIikge1xyXG4gICAgICAgIHRoaXMuYWxsb3dTZWFyY2ggPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWwgPT09IFwicHJldmVudFNlYXJjaFwiKSB7XHJcbiAgICAgICAgICB0aGlzLmFsbG93U2VhcmNoID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hBbGxvd2VkU3ViamVjdCQubmV4dCh0aGlzLmFsbG93U2VhcmNoKTtcclxuXHJcbiAgICBpZiAodGhpcy5hbGxvd1NlYXJjaCkge1xyXG4gICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2gpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFN0cmluZ1N1YmplY3QubmV4dCh0aGlzLmdldFNlYXJjaFN0cmluZyh0aGlzLmdsb2JhbFNlYXJjaCkpO1xyXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbXSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxldCBmaWx0ZXJGaWVsZDogc3RyaW5nO1xyXG4gICAgICAgICAgaWYgKHRoaXMucXVpY2tTZWFyY2hGaWVsZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLnF1aWNrU2VhcmNoRmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgZmlsdGVyRmllbGQgPSAoZmlsdGVyRmllbGQpID8gZmlsdGVyRmllbGQgKyBcIiBvciBcIiArIGZpZWxkIDogZmllbGQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmlsdGVyQnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgICAgICAgZmlsdGVyRmllbGQgPSAoZmlsdGVyRmllbGQpID8gZmlsdGVyRmllbGQgKyBcIiBvciBcIiArIGZpZWxkIDogZmllbGQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtuZXcgSGNpRmlsdGVyRHRvKGZpbHRlckZpZWxkLCBcInN0cmluZ1wiLCB0aGlzLmdldFNlYXJjaFN0cmluZyh0aGlzLmdsb2JhbFNlYXJjaCksIHVuZGVmaW5lZCwgXCJMXCIsIHRydWUpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlU3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlKTtcclxuICAgICAgdGhpcy5wZXJmb3JtZWRTZWFyY2hTdWJqZWN0Lm5leHQoXCJzZWFyY2hQZXJmb3JtZWRcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0ZWRTZWFyY2hMaXN0KHNlbGVjdGVkU2VhcmNoTGlzdDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdCA9IHNlbGVjdGVkU2VhcmNoTGlzdDtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0KTtcclxuICAgIHRoaXMuc2VhcmNoTGlzdENoYW5nZS5lbWl0KHNlbGVjdGVkU2VhcmNoTGlzdCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RTZWFyY2hUeXBlKCkge1xyXG4gICAgY29uc29sZS5kZWJ1ZyhcInNlbGVjdFNlYXJjaFR5cGVcIik7XHJcbiAgICBjb25zb2xlLmRlYnVnKHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlU3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlKTtcclxuICB9XHJcblxyXG4gIGFkZFNlYXJjaExpc3QodGl0bGU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudC5hZGRTZWFyY2hMaXN0OiBcIiArIHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGl0bGUgJiYgdGhpcy5zZWFyY2hMaXN0cy5pbmRleE9mKHRpdGxlKSA9PT0gLTEpIHtcclxuICAgICAgdGhpcy5zZWFyY2hMaXN0cy5wdXNoKHRpdGxlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zZWFyY2hMaXN0cy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaExpc3QgPSB0aXRsZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaExpc3RTdWJqZWN0Lm5leHQodGhpcy5zZWxlY3RlZFNlYXJjaExpc3QpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZW5hYmxlUXVpY2tTZWFyY2goZW5hYmxlZDogYm9vbGVhbiA9IHRydWUpe1xyXG4gICAgdGhpcy5xdWlja1NlYXJjaEVuYWJsZWQgPSBlbmFibGVkO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGNvbmZpZyB3aXRoIG9wdGlvbnMgYW5kIHJlLWZldGNoZXMgZGF0YS5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb25maWdcclxuICAgKi9cclxuICB1cGRhdGVDb25maWcoY29uZmlnKSB7XHJcbiAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgY29uc29sZS5kZWJ1ZyhcInVwZGF0ZUNvbmZpZ1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY29uZmlnKSB7XHJcbiAgICAgIHRoaXMuY29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25maWcsIGNvbmZpZyk7XHJcblxyXG4gICAgICBpZiAoY29uZmlnLmZpbHRlckJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyQnlBbGxvd2VkRmllbGRzID0gY29uZmlnLmZpbHRlckJ5QWxsb3dlZEZpZWxkcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnF1aWNrU2VhcmNoRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5xdWlja1NlYXJjaEZpZWxkcyA9IGNvbmZpZy5xdWlja1NlYXJjaEZpZWxkcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmFkdmFuY2VkU2VhcmNoRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaEZpZWxkcyA9IGNvbmZpZy5hZHZhbmNlZFNlYXJjaEZpZWxkcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNvcnRCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLnNvcnRCeUFsbG93ZWRGaWVsZHMgPSBjb25maWcuc29ydEJ5QWxsb3dlZEZpZWxkcztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNob3dRdWlja1NlYXJjaE9wdGlvbnMpIHtcclxuICAgICAgICB0aGlzLnNob3dRdWlja1NlYXJjaE9wdGlvbnMgPSBjb25maWcuc2hvd1F1aWNrU2VhcmNoT3B0aW9ucztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmlucHV0TXVsdGlsaW5lKSB7XHJcbiAgICAgICAgdGhpcy5pbnB1dE11bHRpbGluZSA9IGNvbmZpZy5pbnB1dE11bHRpbGluZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNlYXJjaE9wdGlvbnNXaWR0aCkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoT3B0aW9uc1dpZHRoID0gY29uZmlnLnNlYXJjaE9wdGlvbnNXaWR0aDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNlYXJjaFR5cGVBcnJheSkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoVHlwZUFycmF5ID0gY29uZmlnLnNlYXJjaFR5cGVBcnJheTtcclxuICAgICAgICBpZiAoY29uZmlnLnNlYXJjaFR5cGUpIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlQXJyYXlbdGhpcy5zZWFyY2hUeXBlQXJyYXkuZmluZEluZGV4KHggPT4geCA9PT0gY29uZmlnLnNlYXJjaFR5cGUpXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFNlYXJjaFR5cGUgPSB0aGlzLnNlYXJjaFR5cGVBcnJheVswXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5kaXNhYmxlTG9jYWxGaWx0ZXJpbmcpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVMb2NhbEZpbHRlcmluZyA9IGNvbmZpZy5kaXNhYmxlTG9jYWxGaWx0ZXJpbmc7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5hZHZhbmNlZFNlYXJjaEFsbG93RmlsdGVyKSB7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaEFsbG93RmlsdGVyID0gY29uZmlnLmFkdmFuY2VkU2VhcmNoQWxsb3dGaWx0ZXI7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zZWxlY3RlZFNlYXJjaFN0cmluZykge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gY29uZmlnLnNlbGVjdGVkU2VhcmNoU3RyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc29ydHMpIHtcclxuICAgICAgICB0aGlzLnNvcnRzID0gY29uZmlnLnNvcnRzO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2VhcmNoTGlzdENoYW5nZSkge1xyXG4gICAgICAgIHRoaXMuc2VhcmNoTGlzdENoYW5nZSA9IGNvbmZpZy5zZWFyY2hMaXN0Q2hhbmdlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2hvd1RpdGxlICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLnNob3dUaXRsZSA9IGNvbmZpZy5zaG93VGl0bGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5idXR0b25UZW1wbGF0ZSkge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uVGVtcGxhdGUgPSBjb25maWcuYnV0dG9uVGVtcGxhdGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zaG93QmFja0J1dHRvbiAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zaG93QmFja0J1dHRvbiA9IGNvbmZpZy5zaG93QmFja0J1dHRvbjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmJhc2ljU2VhcmNoSGVhZGVyICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLmJhc2ljU2VhcmNoSGVhZGVyID0gY29uZmlnLmJhc2ljU2VhcmNoSGVhZGVyO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ2xvYmFsU2VhcmNoUGxhY2Vob2xkZXIpIHtcclxuICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaFBsYWNlaG9sZGVyID0gY29uZmlnLmdsb2JhbFNlYXJjaFBsYWNlaG9sZGVyO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yKSB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IgPSBjb25maWcuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuY3VzdG9tU3R5bGVzKSB7XHJcbiAgICAgICAgdGhpcy5jdXN0b21TdHlsZXMgPSBjb25maWcuY3VzdG9tU3R5bGVzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoY29uZmlnLmZpZWxkcyAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5maWVsZHMgPSBjb25maWcuZmllbGRzO1xyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkcykge1xyXG4gICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5maWVsZHMpIHtcclxuICAgICAgICAgICAgaWYgKGZpZWxkLnZhbHVlVVJMICYmICFmaWVsZC52YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAvLyBXZSBmb3VuZCBhIHZhbHVlIFVSTCBmb3IgdGhlIGZpZWxkIGFuZCB3aWxsIHBvcHVsYXRlIHRoZSB2YWx1ZXMgbm93XHJcbiAgICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZXNGcm9tVVJMKGZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmFkdmFuY2VkU2VhcmNoICE9IG51bGwpIHtcclxuICAgICAgICB0aGlzLmFkdmFuY2VkU2VhcmNoID0gY29uZmlnLmFkdmFuY2VkU2VhcmNoO1xyXG4gICAgICAgIGlmICh0aGlzLmFkdmFuY2VkU2VhcmNoICE9IG51bGwpIHtcclxuICAgICAgICAgIHZhciBpO1xyXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYWR2YW5jZWRTZWFyY2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgdmFyIGo7XHJcbiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS52YWx1ZVVSTCAmJiAhdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0udmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFZhbHVlc0Zyb21VUkwodGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoY29uZmlnLnNlYXJjaFNvcnRpbmdPcHRpb25zKXtcclxuICAgICAgICB0aGlzLnNlYXJjaFNvcnRpbmdPcHRpb25zID0gY29uZmlnLnNlYXJjaFNvcnRpbmdPcHRpb25zO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZihjb25maWcuaW5pdGlhbFNlYXJjaFNvcnRpbmdTZWxlY3Rpb24pe1xyXG4gICAgICAgIHRoaXMuY3VycmVudFNlYXJjaFNvcnRpbmcgPSBjb25maWcuaW5pdGlhbFNlYXJjaFNvcnRpbmdTZWxlY3Rpb247XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLnNvcnRCeUFsbG93ZWRGaWVsZHMubGVuZ3RoID4gMCAmJiB0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnNvcnRzLnB1c2gobmV3IEhjaVNvcnREdG8odGhpcy5zb3J0QnlBbGxvd2VkRmllbGRzWzBdKSk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLmxvZygnYW5vdGhlclNvcnRpbmcgRmllbGQ6JywgdGhpcy5zZWFyY2hTb3J0aW5nT3B0aW9ucyk7XHJcbiAgICB0aGlzLnNldHVwRmlsdGVycygpO1xyXG4gICAgc3VwZXIudXBkYXRlQ29uZmlnKGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBvYmplY3RzIGFmdGVyIG1ha2luZyBhIGh0dHAgY2FsbCB0byB0aGUgdmFsdWVVUkwgb2YgdGhlIGZpZWxkXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge2FueX0gZmllbGRcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XHJcbiAgICovXHJcbiAgZ2V0VmFsdWVzRnJvbVVSTChmaWVsZDogYW55KSB7XHJcbiAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICB1cmwgPSBmaWVsZC52YWx1ZVVSTDtcclxuICAgIHRoaXMuaHR0cC5nZXQodXJsKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIGRhdGEgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1ZyhcInZhbHVlcyBjb21pbmcgYmFjayBmcm9tXCIgKyBmaWVsZC52YWx1ZVVSTCk7XHJcbiAgICAgICAgICBsZXQgdmFsdWVzOiBhbnlbXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xyXG4gICAgICAgICAgY29uc29sZS5kZWJ1Zyh2YWx1ZXMpO1xyXG4gICAgICAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmaWVsZC52YWx1ZXMgPSB2YWx1ZXM7XHJcbiAgICAgICAgICAgIC8vU29ydCB0aGUgdmFsdWVzIG9mIHRoZSBkcm9wIGRvd24gbGlzdHMgYmVmaW5yZVxyXG4gICAgICAgICAgICB2YWx1ZXMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChhLmRpc3BsYXkgPCBiLmRpc3BsYXkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJFcnJvciB3aGlsZSBnZXR0aW5nIHZhbHVlcyBmb3IgVVJMXCIgKyB0aGlzLmdldEZpZWxkRGlzcGxheShmaWVsZCkpO1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBkaXNwbGF5IHByb3BlcnR5IG9mIHRoZSBmaWVsZCBpZiBpdCBleGlzdHMsIG90aGVyd2lzZSwgdHJ5IGNvbnZlcnRpbmcgY2FtZWwgY2FzZSB0byB3b3Jkcy5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG5cclxuXHJcbiAgZ2V0RmllbGREaXNwbGF5KGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8vdGhpcy5iYXNpY1NlYXJjaC5maWVsZHNcclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZC5maWVsZCA9PT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkLmRpc3BsYXk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIC8vYWR2YW5jZWRTZWFyY2ggZmllbGQgZGlzcGxheVxyXG4gICAgbGV0IGk7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hZHZhbmNlZFNlYXJjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgajtcclxuICAgICAgZm9yIChqID0gMDsgaiA8IHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLmZpZWxkID09PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS5kaXNwbGF5O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXNwbGF5OiBzdHJpbmcgPSBmaWVsZE5hbWUucmVwbGFjZSgvKFtBLVpdKS9nLCBcIiAkMVwiKTtcclxuICAgIHJldHVybiBkaXNwbGF5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgZGlzcGxheS5zbGljZSgxKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgdHlwZSBwcm9wZXJ0eSBvZiB0aGUgZmllbGQgaWYgaXQgZXhpc3RzLiBEZWZhdWx0cyB0byBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkTmFtZVxyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XHJcbiAgICovXHJcbiAgZ2V0RmllbGRUeXBlKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIC8vdGhpcy5iYXNpY1NlYXJjaC5maWVsZHNcclxuICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XHJcbiAgICAgIGlmIChmaWVsZC5maWVsZCA9PT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpZWxkLnR5cGU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgaTtcclxuICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkdmFuY2VkU2VhcmNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBqO1xyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0uZmllbGQgPT09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLnR5cGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJpbnB1dFwiO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGRzKCl7XHJcbiAgICByZXR1cm4gdGhpcy5maWVsZHM7XHJcbiAgfVxyXG5cclxuICBzZXRGaWVsZHMoZmllbGRzKXtcclxuICAgIHRoaXMuZmllbGRzID0gZmllbGRzO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGQoZmllbGROYW1lOnN0cmluZyl7XHJcbiAgICByZXR1cm4gdGhpcy5maWVsZHMuZmluZCh4PT54LmZpZWxkID09IGZpZWxkTmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGUgZmlsdGVycyBiYXNlZCB1cG9uIGF2YWlsYWJsZSBmaWVsZHMgZm9yIGZpbHRlcmluZy5cclxuICAgKi9cclxuICBzZXR1cEZpbHRlcnMoYXBwbHk6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgdGhpcy5ib3VuZEZpbHRlcnMgPSBbXTtcclxuICAgIHRoaXMuYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnMgPSBbXTtcclxuXHJcbiAgICBmb3IgKGxldCBmaWx0ZXJGaWVsZCBvZiB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICB0aGlzLmJvdW5kRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZmlsdGVyRmllbGQsIFwic3RyaW5nXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIkxcIiwgZmFsc2UpKTtcclxuICAgIH1cclxuICAgIGZvciAobGV0IGZpbHRlckZpZWxkIG9mIHRoaXMuYWR2YW5jZWRTZWFyY2hGaWVsZHMpIHtcclxuICAgICAgdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZmlsdGVyRmllbGQsIFwic3RyaW5nXCIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBcIkxcIiwgZmFsc2UpKTtcclxuICAgIH1cclxuICAgIGlmIChhcHBseSkge1xyXG4gICAgICB0aGlzLmFwcGx5RmlsdGVycygpO1xyXG4gICAgICB0aGlzLmFwcGx5QWR2YW5jZWRTZWFyY2hGaWx0ZXJzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgZmlsdGVyIGlzIHZhbGlkLlxyXG4gICAqXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaGFzVmFsaWRGaWx0ZXJzKCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuYm91bmRGaWx0ZXJzKSB7XHJcbiAgICAgIGlmIChmaWx0ZXIudmFsaWQpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgdmFsdWUgb2YgYSBmaWx0ZXIuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcclxuICAgKiBAcGFyYW0ge0hjaUZpbHRlckR0b30gZmlsdGVyXHJcbiAgICovXHJcbiAgc2V0RmlsdGVyKHZhbHVlOiBzdHJpbmcsIGZpbHRlcjogSGNpRmlsdGVyRHRvKTogdm9pZCB7XHJcbiAgICBmaWx0ZXIudmFsdWUgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XHJcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlTG9jYWxGaWx0ZXJpbmcpIHtcclxuICAgICAgICBmb3IgKGxldCBmbCBvZiB0aGlzLmJvdW5kRmlsdGVycykge1xyXG4gICAgICAgICAgaWYgKGZsLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdmFsaWQgZmlsdGVycyB0byB2YWxpZCBhbmQgY2FsbCBkYXRhLlxyXG4gICAqL1xyXG4gIGFwcGx5RmlsdGVycyhldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChldmVudCAmJiBldmVudC5rZXlDb2RlICE9PSAxMyAmJiBldmVudC50eXBlICYmIGV2ZW50LnR5cGUgIT09IFwiY2xpY2tcIikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuYm91bmRGaWx0ZXJzKSB7XHJcbiAgICAgIGlmIChmaWx0ZXIudmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgICAgZmlsdGVyLnZhbGlkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIGlmIChmaWx0ZXIudmFsdWUgJiYgZmlsdGVyLnZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmaWx0ZXIudmFsaWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbHRlci52YWxpZCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5nbG9iYWxTZWFyY2ggPSBcIlwiO1xyXG4gICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KHRoaXMuYm91bmRGaWx0ZXJzKTtcclxuICAgIC8vU2V0dGluZyBhIGZsYWcgb24gYnV0dG9uQ2xpY2sgZXZlbnQuXHJcbiAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LmtleUNvZGUgPT09IDEzIHx8IGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikpIHtcclxuICAgICAgdGhpcy5wZXJmb3JtZWRCYXNpY1NlYXJjaFN1YmplY3QubmV4dChcImJhc2ljU2VhcmNoQ2xpY2tlZFwiKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHZhbGlkIGFkdmFuY2VkIHNlYXJjaCBmaWx0ZXJzIHRvIHZhbGlkIGFuZCBjYWxsIGRhdGEuXHJcbiAgICovXHJcblxyXG4gIGFwcGx5QWR2YW5jZWRTZWFyY2hGaWx0ZXJzKGV2ZW50PzogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnMgPSBbXTtcclxuICAgIGlmIChldmVudCAmJiBldmVudC5rZXlDb2RlICE9PSAxMyAmJiBldmVudC50eXBlICYmIGV2ZW50LnR5cGUgIT09IFwiY2xpY2tcIikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgZmlsdGVyIG9mIHRoaXMuYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnMpIHtcclxuICAgICAgZmlsdGVyLnZhbGlkID0gKGZpbHRlci52YWx1ZSAmJiBmaWx0ZXIudmFsdWUubGVuZ3RoID4gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnMgPSB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzO1xyXG5cclxuICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gXCJcIjtcclxuICAgIGlmICh0aGlzLmFkdmFuY2VkU2VhcmNoQWxsb3dGaWx0ZXIpIHtcclxuICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KHRoaXMudXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbXSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFkdmFuY2VkU2VhcmNoRmlsdGVyc1N1YmplY3QubmV4dCh0aGlzLnVwZGF0ZWRBZHZhbmNlU2VhcmNoRmlsdGVycyk7XHJcblxyXG4gICAgaWYgKGV2ZW50ICYmIChldmVudC5rZXlDb2RlID09PSAxMyB8fCBldmVudC50eXBlID09PSBcImNsaWNrXCIpKSB7XHJcbiAgICAgIHRoaXMucGVyZm9ybWVkQWR2YW5jZWRTZWFyY2hTdWJqZWN0Lm5leHQoXCJhZHZhbmNlZFNlYXJjaENsaWNrZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBDbGVhciBmaWx0ZXIgZmllbGRzIGFuZCBtYWtlIGludmFsaWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge0hjaUZpbHRlckR0b30gZmlsdGVyXHJcbiAgICovXHJcbiAgY2xlYXJGaWx0ZXIoZmlsdGVyOiBIY2lGaWx0ZXJEdG8pOiB2b2lkIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5ib3VuZEZpbHRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKHRoaXMuYm91bmRGaWx0ZXJzW2ldLmZpZWxkID09PSBmaWx0ZXIuZmllbGQpIHtcclxuICAgICAgICB0aGlzLmJvdW5kRmlsdGVyc1tpXS5zZXRWYWx1ZSh1bmRlZmluZWQpO1xyXG4gICAgICAgIHRoaXMuYm91bmRGaWx0ZXJzW2ldLnNldFZhbGlkKGZhbHNlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dCh0aGlzLmJvdW5kRmlsdGVycyk7XHJcbiAgfVxyXG5cclxuICBvblNlYXJjaFNvcnRDbGlja2VkKCRldmVudDogTW91c2VFdmVudCwgc2VhcmNoU29ydEl0ZW06IGFueSl7XHJcbiAgICBpZih0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nLnZhbHVlID09PSBzZWFyY2hTb3J0SXRlbS52YWx1ZSl7XHJcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFNvcnRpbmcuaXNBc2MgPSAhdGhpcy5jdXJyZW50U2VhcmNoU29ydGluZy5pc0FzYztcclxuICAgIH1lbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50U2VhcmNoU29ydGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHNlYXJjaFNvcnRJdGVtKTtcclxuICAgICAgdGhpcy5jdXJyZW50U2VhcmNoU29ydGluZy5pc0FzYyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNlYXJjaFNvcnRpbmdTZWxlY3Rpb25DaGFuZ2VTdWJqZWN0JC5uZXh0KHRoaXMuY3VycmVudFNlYXJjaFNvcnRpbmcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVE9ETzogSWYgc29ydCBpbiBncm91cCwgcmVzZXQgZ3JvdXAgZGF0YSwgbm90IG92ZXJhbGwuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpZWxkXHJcbiAgICovXHJcbiAgc2V0U29ydChldmVudDogTW91c2VFdmVudCwgZmllbGQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc29ydHMgJiYgdGhpcy5zb3J0cy5sZW5ndGggPT09IDEgJiYgdGhpcy5zb3J0c1swXS5maWVsZCA9PT0gZmllbGQpIHtcclxuICAgICAgLy8gUmVndWxhciBiZWhhdmlvclxyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNvcnRzICYmIHRoaXMuc29ydHMubGVuZ3RoID09PSAxICYmICFldmVudC5jdHJsS2V5ICYmIHRoaXMuc29ydHNbMF0uZmllbGQgIT09IGZpZWxkKSB7XHJcbiAgICAgIHRoaXMuc29ydHMgPSBbXTtcclxuICAgIH0gZWxzZSBpZiAoIWV2ZW50LmN0cmxLZXkpIHtcclxuICAgICAgdGhpcy5zb3J0cyA9IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnNvcnRzLnB1c2gobmV3IEhjaVNvcnREdG8oZmllbGQpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBleGlzdHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgICAgaWYgKHNvcnQuZmllbGQgPT09IGZpZWxkKSB7XHJcbiAgICAgICAgICBzb3J0LmFzYyA9ICFzb3J0LmFzYztcclxuICAgICAgICAgIGV4aXN0cyA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghZXhpc3RzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cy5wdXNoKG5ldyBIY2lTb3J0RHRvKGZpZWxkKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc29ydHNTdWJqZWN0Lm5leHQodGhpcy5zb3J0cyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc29ydCBmaWVsZCBpcyB1c2VkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNvcnRGaWVsZFxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGlzU29ydChzb3J0RmllbGQpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICBpZiAoc29ydC5maWVsZCA9PT0gc29ydEZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgc29ydCBmaWVsZCBpcyBhc2NlbmRpbmcuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaXNTb3J0QXNjKHNvcnRGaWVsZCk6IGJvb2xlYW4ge1xyXG4gICAgZm9yIChsZXQgc29ydCBvZiB0aGlzLnNvcnRzKSB7XHJcbiAgICAgIGlmIChzb3J0LmZpZWxkID09PSBzb3J0RmllbGQpIHtcclxuICAgICAgICByZXR1cm4gc29ydC5hc2M7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSBmaWVsZCBpcyB0aGUgZmlyc3Qgc29ydCBmaWVsZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBpc0ZpcnN0U29ydChzb3J0RmllbGQpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5zb3J0cyB8fCB0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5zb3J0c1swXS5maWVsZCA9PT0gc29ydEZpZWxkO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVG9nZ2xlIHRoZSBvcHRpb25zIHBvcG91dC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7TW91c2VFdmVudH0gZXZlbnRcclxuICAgKi9cclxuICB0b2dnbGVTaG93T3B0aW9ucyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb2dXaGVlbENsaWNrZWRTdWJqZWN0JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZCh0aGlzLmFsbG93VG9nZ2xlU3ViamVjdCQuc3Vic2NyaWJlKHZhbCA9PiB7XHJcbiAgICAgIGlmICh2YWwgPT09IFwiYWxsb3dUb2dnbGVcIikge1xyXG4gICAgICAgIHRoaXMuYWxsb3dUb2dnbGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hvd1RvZ2dsZU9wdGlvbnMgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh2YWwgPT09IFwicHJldmVudFRvZ2dsZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLmFsbG93VG9nZ2xlID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLnNob3dUb2dnbGVPcHRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KSk7XHJcblxyXG4gICAgaWYgKHRoaXMuc2hvd09wdGlvbnMgJiYgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtb3B0aW9uc1wiKS5jb250YWlucyhldmVudC50YXJnZXQpXHJcbiAgICAgICYmICghKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJidXR0b24uY2FyZC1oZWFkZXItYnV0dG9uLmJ0bi5jbG9zZWFibGVcIikuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCB0aXRsZTogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiI3NlYXJjaC10aXRsZVwiKTtcclxuXHJcbiAgICBsZXQgb3B0aW9uczogSFRNTEVsZW1lbnQgPSB0aXRsZS5xdWVyeVNlbGVjdG9yKFwiLnNlYXJjaC1vcHRpb25zXCIpO1xyXG5cclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUob3B0aW9ucywgXCJsZWZ0XCIsICh0aXRsZS5vZmZzZXRMZWZ0ICsgdGl0bGUub2Zmc2V0V2lkdGgpICsgXCJweFwiKTtcclxuICAgIGlmICghb3B0aW9ucy5jbG9zZXN0KFwiLmRyb3Bkb3duLW1lbnVcIikpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShvcHRpb25zLCBcInRvcFwiLCB0aXRsZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgKyBcInB4XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2hvd09wdGlvbnMgPSAhdGhpcy5zaG93T3B0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRoaXMgZnVuY3Rpb24gd291bGQgbWF0Y2ggYSBIY2lGaWx0ZXJEdG8gYnkgY29tcGFyaW5nIGEgcHJvdmlkZWQgZmllbGQtbmFtZVxyXG4gICAqL1xyXG4gIGdldEZpbHRlckZvckZpZWxkKGZpZWxkTmFtZTogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycy5maW5kKHggPT4geC5maWVsZCA9PT0gZmllbGROYW1lKTtcclxuICB9XHJcblxyXG4gIGdldEJhc2ljRmlsdGVyRm9yRmllbGQoZmllbGROYW1lOiBzdHJpbmcpe1xyXG4gICAgcmV0dXJuIHRoaXMuYm91bmRGaWx0ZXJzLmZpbmQoeCA9PiB4LmZpZWxkID09PSBmaWVsZE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuZXIgZm9yIGJhY2sgYnV0dG9uXHJcbiAgICovXHJcblxyXG4gIGJhY2tCdXR0b25DbGlja2VkKCkge1xyXG4gICAgdGhpcy5iYWNrQnV0dG9uU3ViamVjdC5uZXh0KHRoaXMuYmFja0J1dHRvblN1YmplY3QpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTGlzdGVuIGZvciBkb2N1bWVudCBjbGlja3MuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XHJcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gdGFyZ2V0XHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcihcImRvY3VtZW50OmNsaWNrXCIsIFtcIiRldmVudFwiLCBcIiRldmVudC50YXJnZXRcIl0pXHJcbiAgZG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCwgdGFyZ2V0OiBIVE1MRWxlbWVudCkge1xyXG4gICAgaWYgKHRoaXMuYWxsb3dUb2dnbGUpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBpZiAodGFyZ2V0LnBhcmVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiY2xhc3NcIikuaW5jbHVkZXMoXCJjbG9zZWFibGVcIikpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd09wdGlvbnMgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMudG9nZ2xlU2hvd1N1YmplY3QkLm5leHQodGhpcy5zaG93T3B0aW9ucyk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGlzSW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgIGxldCBpbnZhbGlkID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IpIHtcclxuICAgICAgbGV0IHNlYXJjaFN0cmluZyA9IHRoaXMuZ2V0U2VhcmNoU3RyaW5nKHRoaXMuZ2xvYmFsU2VhcmNoKTtcclxuICAgICAgbGV0IGdsb2JhbFNlYXJjaFN0ckxpc3Q6IHN0cmluZ1tdID0gc2VhcmNoU3RyaW5nLnNwbGl0KFwiLFwiKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBmb3IgKGxldCBnbG9iYWxTZWFyY2hTdHIgb2YgZ2xvYmFsU2VhcmNoU3RyTGlzdCkge1xyXG4gICAgICAgICAgaWYoIWdsb2JhbFNlYXJjaFN0ci5tYXRjaCh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvcikpIHtcclxuICAgICAgICAgICAgaW52YWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IucmVxdWlyZWQgJiYgZ2xvYmFsU2VhcmNoU3RyTGlzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWluUmFuZ2UgJiYgIWlzTmFOKE51bWJlcih0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5taW5SYW5nZSkpKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBnbG9iYWxTZWFyY2hTdHIgb2YgZ2xvYmFsU2VhcmNoU3RyTGlzdCkge1xyXG4gICAgICAgICAgICBpZigoIWdsb2JhbFNlYXJjaFN0ciAmJiBOdW1iZXIodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWluUmFuZ2UpID4gMClcclxuICAgICAgICAgICAgICB8fCAoZ2xvYmFsU2VhcmNoU3RyICYmIGdsb2JhbFNlYXJjaFN0ci5sZW5ndGggPCBOdW1iZXIodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWluUmFuZ2UpKSkge1xyXG4gICAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5tYXhSYW5nZSAmJiAhaXNOYU4oTnVtYmVyKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1heFJhbmdlKSkpIHtcclxuICAgICAgICAgIGZvciAobGV0IGdsb2JhbFNlYXJjaFN0ciBvZiBnbG9iYWxTZWFyY2hTdHJMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmKGdsb2JhbFNlYXJjaFN0ciAmJiBnbG9iYWxTZWFyY2hTdHIubGVuZ3RoID4gTnVtYmVyKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1heFJhbmdlKSkge1xyXG4gICAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5wYXR0ZXJuKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBnbG9iYWxTZWFyY2hTdHIgb2YgZ2xvYmFsU2VhcmNoU3RyTGlzdCkge1xyXG4gICAgICAgICAgICBpZiAoIWdsb2JhbFNlYXJjaFN0ci5tYXRjaCh0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5wYXR0ZXJuKSkge1xyXG4gICAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaW52YWxpZDtcclxuICB9XHJcblxyXG4gIGdldFNlYXJjaFN0cmluZyhzZWFyY2hTdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzZWFyY2hTdHJpbmcgPSBzZWFyY2hTdHJpbmcucmVwbGFjZSgvXFxuL2csIFwiLFwiKTtcclxuICAgIGlmIChzZWFyY2hTdHJpbmcubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgc3RyTGlzdCA9IHNlYXJjaFN0cmluZy5zcGxpdChcIixcIik7XHJcbiAgICAgIHNlYXJjaFN0cmluZyA9IFwiXCI7XHJcbiAgICAgIGZvciAobGV0IHN0ciBvZiBzdHJMaXN0KSB7XHJcbiAgICAgICAgc3RyID0gc3RyLnRyaW0oKTtcclxuICAgICAgICBzZWFyY2hTdHJpbmcgPSBzZWFyY2hTdHJpbmcgPyAoc3RyID8gc2VhcmNoU3RyaW5nICsgXCIsXCIgKyBzdHIgOiBzZWFyY2hTdHJpbmcpIDogc3RyO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHNlYXJjaFN0cmluZztcclxuICB9XHJcblxyXG4gIGdldCBoYXNBZHZhbmNlZFNlYXJjaFZlcnRpY2FsU2Nyb2xsYmFyKCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZGl2UGFuZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFkdmFuY2VkU2VhcmNoLXNjcm9sbC1wYW5lbFwiKTtcclxuICAgIHJldHVybiBkaXZQYW5lbC5zY3JvbGxIZWlnaHQgPiBkaXZQYW5lbC5jbGllbnRIZWlnaHQ7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
1681
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWxpc3QtY29udHJvbGxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXZpZ2F0aW9uL3NyYy9jb21wb25lbnRzL3NlYXJjaC1saXN0L3NlYXJjaC1saXN0LWNvbnRyb2xsZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUN4QixVQUFVLEVBQ1YsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUNULFdBQVcsRUFFWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUU5QyxPQUFPLEVBQUMsWUFBWSxFQUFFLFVBQVUsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUvRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDcEUsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztBQUVoRDs7OztHQUlHO0FBc2pCSSxJQUFNLDZCQUE2QixHQUFuQyxNQUFNLDZCQUE4QixTQUFRLFlBQVk7SUF3RTdELGVBQWUsQ0FBQyxNQUFjO1FBQzVCLElBQUksaUJBQWlCLEdBQVEsRUFBRSxDQUFDO1FBQ2hDLEtBQUssSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3BD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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba2FDOzswQkE0RkYsUUFBUTtrR0F4RkYsU0FBUztzQkFBakIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyx5QkFBeUI7c0JBQWpDLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0ksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQXdzQlAsYUFBYTtzQkFEWixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxFQUFFLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5wdXQsXHJcbiAgaXNEZXZNb2RlLFxyXG4gIE9wdGlvbmFsLFxyXG4gIE91dHB1dCxcclxuICBSZW5kZXJlcjIsXHJcbiAgVGVtcGxhdGVSZWYsXHJcbiAgU2ltcGxlQ2hhbmdlc1xyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdH0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmltcG9ydCB7SGNpRmlsdGVyRHRvLCBIY2lTb3J0RHRvfSBmcm9tIFwiQGh1bnRzbWFuLWNhbmNlci1pbnN0aXR1dGUvaGNpLW5nLWdyaWQtZHRvXCI7XHJcbmltcG9ydCB7Q29tcG9uZW50VHlwZX0gZnJvbSBcIkBodW50c21hbi1jYW5jZXItaW5zdGl0dXRlL3V0aWxzXCI7XHJcblxyXG5pbXBvcnQge05hdkNvbXBvbmVudH0gZnJvbSBcIi4uL25hdi5jb21wb25lbnRcIjtcclxuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL25hdmlnYXRpb24uc2VydmljZVwiO1xyXG5pbXBvcnQge05hdmlnYXRpb25HbG9iYWxTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvbmF2aWdhdGlvbi1nbG9iYWwuc2VydmljZVwiO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBzZWFyY2ggbGlzdCBjb250cm9sbGVyIHJlbmRlcnMgYXMgYSBoZWFkZXIgdG8gb25lIG9yIG1vcmUgc2VhcmNoIGxpc3RzLiAgT25seSBvbmUgc2VhcmNoIGxpc3QgY2FuIGJlIHNob3duIGF0IGEgdGltZS5cclxuICogVGhlIGNvbnRyb2xsZXIgZmVhdHVyZXMgdGhlIGFiaWxpdHkgdG8gaGFuZGxlIGZpbHRlcmluZyBhbmQgc29ydGluZy4gIFdpdGhvdXQgdGhlIGNvbnRyb2xsZXIsIHRoZSBzZWFyY2ggbGlzdCBjYW4gZXhpc3QsXHJcbiAqIGJ1dCBpdCBjYW4gb25seSBoYW5kbGUgcGFnaW5nIGludGVybmFsbHkuXHJcbiAqL1xyXG5AQ29tcG9uZW50VHlwZShcIlNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50XCIpXHJcbkBDb21wb25lbnQoXHJcbiAge1xyXG4gICAgc2VsZWN0b3I6IFwiaGNpLXNlYXJjaC1saXN0LWNvbnRyb2xsZXJcIixcclxuICAgIGV4cG9ydEFzOiBcInNlYXJjaExpc3RDb250cm9sbGVyQ29tcG9uZW50XCIsXHJcbiAgICBzdHlsZXM6IFtcclxuICAgICAgYFxyXG4gICAgICAgIHNlbGVjdCB7XHJcbiAgICAgICAgICBwYWRkaW5nOiAuMjVlbTtcclxuICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDBlbTtcclxuICAgICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xyXG4gICAgICAgICAgYm9yZGVyOiAwO1xyXG4gICAgICAgICAgY29sb3I6ICM4QTk0OTk7XHJcbiAgICAgICAgICBmb250LXNpemU6IDAuOHJlbTtcclxuICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmNsb3NlYWJsZSB7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuc2VhcmNoLWJveCB7XHJcbiAgICAgICAgICBib3JkZXI6IG5vbmU7XHJcbiAgICAgICAgICBib3JkZXItcmlnaHQ6IDAuMXB4IHNvbGlkICM1QjYyNjY7XHJcbiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IC41cmVtICFpbXBvcnRhbnQ7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0tZ3JleS1kYXJrZXN0KTtcclxuICAgICAgICAgIGZvbnQtc2l6ZTogMC44cmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNlYXJjaC1vcHRpb25zIHtcclxuICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvKiAtLS0tLS0tIEJUTiBHUkFEIEJMVUUgMiBTVFlMRVMgLS0tLS0tLSAqL1xyXG4gICAgICAgIC5zZWFyY2gtYnV0dG9uOmVuYWJsZWQge1xyXG4gICAgICAgICAgd2lkdGg6IDMwJTtcclxuICAgICAgICAgIG1pbi1oZWlnaHQ6IDJyZW07XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMGRlZywgdmFyKC0tYmx1ZXdhcm0tZGFyaykgMzAlLCB2YXIoLS1ibHVld2FybS1tZWRkYXJrKSAxMDAlKTtcclxuICAgICAgICAgIG1hcmdpbjogMDtcclxuICAgICAgICAgIGNvbG9yOiB2YXIoLS13aGl0ZS1saWdodGVzdCk7XHJcbiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVld2FybS1kYXJrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtYnV0dG9uOmhvdmVyIHtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS1ibHVld2FybS1tZWRkYXJrKSAwJSwgdmFyKC0tYmx1ZXdhcm0tZGFyaykgMTAwJSk7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpO1xyXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZXdhcm0tZGFya2VyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtYnV0dG9uOmRpc2FibGVkIHtcclxuICAgICAgICAgIHdpZHRoOiAzMCU7XHJcbiAgICAgICAgICBvcGFjaXR5OiAwLjU7XHJcbiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xyXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgwZGVnLCB2YXIoLS1ibHVld2FybS1kYXJrKSAzMCUsIHZhcigtLWJsdWV3YXJtLW1lZGRhcmspIDEwMCUpO1xyXG4gICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZXdhcm0tZGFyayk7XHJcbiAgICAgICAgICBjb2xvcjogdmFyKC0td2hpdGUtbGlnaHRlc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvKiAtLS0tLS0tIEJUTiBHUkFEIEJMVUUgMiBTVFlMRVMgLS0tLS0tLSAqL1xyXG5cclxuICAgICAgICAuZ2xvYmFsLXNlYXJjaCB7XHJcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7XHJcbiAgICAgICAgICBib3JkZXI6IDAuMDRlbSBzb2xpZCB2YXIoLS1ncmV5d2FybS1kYXJrKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC50YWItdGl0bGUtY2xhc3Mge1xyXG4gICAgICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgICAgIGhlaWdodDogNTBweDtcclxuICAgICAgICAgIGJhY2tncm91bmQ6IGxpZ2h0Z3JheTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC50YWItcGFuZSB7XHJcbiAgICAgICAgICB3aWR0aDogbWluLWNvbnRlbnQgIWltcG9ydGFudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zZWFyY2gtb3B0aW9ucy5leHBhbmRlZCB7XHJcbiAgICAgICAgICBoZWlnaHQ6IGZpdC1jb250ZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLmJhY2tCdXR0b24gLmZhLWFuZ2xlLWRvdWJsZS1sZWZ0IHtcclxuICAgICAgICAgIGNvbG9yOiB3aGl0ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5zdmctaW5saW5lLS1mYXMgZmEtYW5nbGUtZG91YmxlLWxlZnQge1xyXG4gICAgICAgICAgY29sb3I6IHdoaXRlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNvcnQtaXRlbSB7XHJcbiAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgICAgICAgY29sb3I6IGJsYWNrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNvcnQtaWNvbiB7XHJcbiAgICAgICAgICB3aWR0aDogMS41cmVtO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnNvcnQtdGV4dDpob3ZlciB7XHJcbiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAuaGNpLXNlYXJjaC1saXN0LWNvbnRyb2xsZXItY29sb3Ige1xyXG4gICAgICAgICAgY29sb3I6IHZhcigtLXdoaXRlLWxpZ2h0ZXN0KSAhaW1wb3J0YW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLnRleHRhcmVhLXNlYXJjaC1ib3gge1xyXG4gICAgICAgICAgYWxpZ24tY29udGVudDogY2VudGVyO1xyXG4gICAgICAgICAgd2lkdGg6IDEwMCU7XHJcbiAgICAgICAgICBtaW4taGVpZ2h0OiAzMHB4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLm11bHRpbGluZS1zZWFyY2gtYnV0dG9uIHtcclxuICAgICAgICAgIGhlaWdodDogMTAwJTtcclxuICAgICAgICAgIG1heC13aWR0aDogM3JlbTtcclxuICAgICAgICAgIG1pbi13aWR0aDogM3JlbTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5maWx0ZXItc29ydGluZy1wYW5lbCB7XHJcbiAgICAgICAgICBtYXJnaW4tdG9wOiAzMHB4O1xyXG4gICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgIC5kaXNhYmxlZC1idXR0b24ge1xyXG4gICAgICAgICAgb3BhY2l0eTogMC41O1xyXG4gICAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcclxuICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7XHJcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMGRlZywgdmFyKC0tYmx1ZXdhcm0tZGFyaykgMzAlLCB2YXIoLS1ibHVld2FybS1tZWRkYXJrKSAxMDAlKTtcclxuICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWV3YXJtLWRhcmspO1xyXG4gICAgICAgICAgY29sb3I6IHZhcigtLXdoaXRlLWxpZ2h0ZXN0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC5uYXYtY29udGFpbmVyIHtcclxuICAgICAgICAgIGRpc3BsYXk6IGZsZXggIWltcG9ydGFudDtcclxuICAgICAgICAgIGZsZXgtd3JhcDogbm93cmFwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLm5vLXVzZXItc2VsZWN0LXRleHR7XHJcbiAgICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xyXG4gICAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xyXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICBgXHJcbiAgICBdLFxyXG4gICAgdGVtcGxhdGU6XHJcbiAgICAgIGBcclxuICAgICAgICA8ZGl2IGlkPVwic2VhcmNoLXRpdGxlXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93VGl0bGVcIiBjbGFzcz1cImQtZmxleCBwcy0yIGhjaS1zZWFyY2gtbGlzdC1jb250cm9sbGVyLWNvbG9yXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93QmFja0J1dHRvblwiIGNsYXNzPVwibWUtYXV0byBtcy0xIGJhY2tCdXR0b25cIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJiYWNrQnV0dG9uQ2xpY2tlZCgpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWJhY2stYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hbmdsZS1kb3VibGUtbGVmdFwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHt7dGl0bGV9fVxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGZsZXgtcm93IG1zLWF1dG9cIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYnV0dG9uVGVtcGxhdGVcIj48bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj48L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXMtYXV0byBtZS0yXCIgKGNsaWNrKT1cInRvZ2dsZVNob3dPcHRpb25zKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWZpbHRlclwiPjwvaT5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtb3B0aW9uc1wiIFtjbGFzcy5leHBhbmRlZF09XCJzaG93T3B0aW9uc1wiIFtuZ1N0eWxlXT1cInsnd2lkdGgnOiAoc2VhcmNoT3B0aW9uc1dpZHRoICE9PSAnJykgPyBzZWFyY2hPcHRpb25zV2lkdGggOiAnYXV0byd9XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1RvZ2dsZU9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyLWNvbXBvbmVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJtYXJnaW4tbGVmdDogYXV0b1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhcmQtaGVhZGVyLWJ1dHRvbiBidG4gY2xvc2VhYmxlXCIgKGNsaWNrKT1cInRvZ2dsZVNob3dPcHRpb25zKCRldmVudClcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItdG9nZ2xlLW9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIiBjYXJkLWhlYWRlci10ZXh0PjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJkaXNhYmxlTG9jYWxGaWx0ZXJpbmc7IGVsc2UgZGlzcGxheVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuYXYgbmdiTmF2ICNuYXY9XCJuZ2JOYXZcIiBbKGFjdGl2ZUlkKV09XCJhY3RpdmVUYWJcIiBjbGFzcyA9IFwibmF2LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBuZ2JOYXZJdGVtIFtuZ2JOYXZJdGVtXT1cIjFcIiBjbGFzcz1cInRhYi10aXRsZS1jbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmlsdGVyQnlBbGxvd2VkRmllbGRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcyA9XCJmbGV4LWdyb3ctMVwiPkJBU0lDIFNFQVJDSDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhc2ljLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNsYXNzaWZpY2F0aW9uLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3RoaXMuYmFzaWNTZWFyY2hIZWFkZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IHNlYXJjaC1jb250ZW50LWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGJvdW5kRmlsdGVyczsgaW5kZXggYXMgaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnaW5wdXQnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbbmdNb2RlbF09XCJmaWx0ZXIudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBmaWx0ZXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG91YmxlIGNoZWNrIGlmIHRoZSB0ZXh0YXJlYSBuZWVkZWQgaW4gQmFzaWMgU2VhcmNoLS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAndGV4dGFyZWEnIFwiPi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBbbmdNb2RlbF09XCJnbG9iYWxTZWFyY2hcIiBjbGFzcz0gXCJzZWFyY2gtYm94XCIgKGtleXVwKT1cImRvR2xvYmFsU2VhcmNoKCRldmVudClcIi0tPlxyXG48IS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kLWNvbG9yOiAjZjJmMmYyXCI+PC90ZXh0YXJlYT4tLT5cclxuPCEtLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+LS0+XHJcbjwhLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+LS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZHJvcGRvd24nIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRzW2ldICYmIGZpZWxkc1tpXS52YWx1ZXMgJiYgZmllbGRzW2ldLnZhbHVlc1swXS5kaXNwbGF5O2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWUuaWRcIj57e3ZhbHVlLmRpc3BsYXl9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5X3Jhd192YWx1ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIj57e3ZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZGF0ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiIG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cIm15UGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJkYXRlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJteVBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJmYVwiIGZvbnRJY29uPVwiZmEtY2FsZW5kYXItYWx0IGZhLWxnXCI+PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI215UGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJiYXNpYy1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcyA9IFwicmktYnRuLWNhbmNlbFwiIFtuZ0NsYXNzXT1cInsncmktYnRuLWNhbmNlbC1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIiBbZGlzYWJsZWRdID1cIiF0aGlzLmNoYW5nZWRcIiAoY2xpY2spPVwic2V0dXBGaWx0ZXJzKGZhbHNlKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1jbGVhci1iYXNpYy1zZWFyY2gtZmlsdGVyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMRUFSXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGNsYXNzPVwicmktYnRuLXNhdmVcIiBbbmdDbGFzc109XCJ7ICdyaS1idG4tc2F2ZS1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhdGhpcy5jaGFuZ2VkIFwiIChjbGljayk9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1hcHBseS1iYXNpYy1maWx0ZXItc2VhcmNoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0VBUkNIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIyXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFkdmFuY2VkU2VhcmNoRmllbGRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmdiTmF2TGluayBjbGFzcyA9XCJmbGV4LWdyb3ctMVwiPkFEVkFOQ0VEIFNFQVJDSDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkU2VhcmNoLXNjcm9sbFwiIGlkPVwiYWR2YW5jZWRTZWFyY2gtc2Nyb2xsLXBhbmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWR2YW5jZWRTZWFyY2gtcGFuZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcGFyYW0gb2YgdGhpcy5hZHZhbmNlZFNlYXJjaDsgaW5kZXggYXMgalwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydhZHZhbmNlZC1zZWFyY2gnOiAhdGhpcy5oYXNBZHZhbmNlZFNlYXJjaFZlcnRpY2FsU2Nyb2xsYmFyLCAnYWR2YW5jZWQtc2VhcmNoLXNjcm9sbGVkJzogdGhpcy5oYXNBZHZhbmNlZFNlYXJjaFZlcnRpY2FsU2Nyb2xsYmFyfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFkdmFuY2VkLXNlYXJjaC1jbGFzc2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3twYXJhbS5oZWFkZXJ9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFkdmFuY2VkLXNlYXJjaC1jb250ZW50LWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBmaWVsZCBvZiB0aGlzLnBhcmFtLmZpZWxkczsgaW5kZXggYXMga1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmllbGQuZmllbGQpID09PSAnaW5wdXQnIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtuZ01vZGVsXT1cImdldEZpbHRlckZvckZpZWxkKGZpZWxkLmZpZWxkKS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlBZHZhbmNlZFNlYXJjaEZpbHRlcnMoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWVsZC5maWVsZCkgPT09ICdjaGVja2JveCcgIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hlY2tib3ggY2xhc3M9XCJjaGVja2JveGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpLnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldEZpZWxkRGlzcGxheShmaWVsZC5maWVsZCl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWVsZC5maWVsZCkgPT09ICdkcm9wZG93bicgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpZWxkLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBbbmdNb2RlbF09XCJnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkudmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJ0aGlzLmZpZWxkLnZhbHVlVVJMO2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbj5Ob25lPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiB0aGlzLmZpZWxkLnZhbHVlc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInZhbHVlLmlkXCI+e3t2YWx1ZS5kaXNwbGF5fX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2Rpc3BsYXlfcmF3X3ZhbHVlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uPk5vbmU8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIHRoaXMuZmllbGQudmFsdWVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIj57e3ZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRGaWVsZFR5cGUoZmllbGQuZmllbGQpID09PSAnZGF0ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpZWxkLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgW25nTW9kZWxdPVwiZ2V0RmlsdGVyRm9yRmllbGQoZmllbGQuZmllbGQpLnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoJGV2ZW50LCBnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZC5maWVsZCkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCIgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0RGF0ZXBpY2tlcl09XCJteVBpY2tlclwiIHBsYWNlaG9sZGVyPVwiZGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJteVBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gZm9udFNldD1cImZhXCIgZm9udEljb249XCJmYS1jYWxlbmRhci1hbHQgZmEtbGdcIj48L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXIgI215UGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLW1zZy1ob2xkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJhZHZhbmNlZC1zZWFyY2gtbXNnLWhvbGRlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtZm9vdGVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1oZWFkZXItcmlnaHQtY29udGFpbmVyIHJpLWZ1bGwtd2lkdGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcyA9IFwicmktYnRuLWNhbmNlbFwiIFtuZ0NsYXNzXT1cInsncmktYnRuLWNhbmNlbC1kaXJ0eSc6IHRoaXMuY2hhbmdlZH1cIiBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZFwiIChjbGljayk9XCJzZXR1cEZpbHRlcnMoZmFsc2UpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWNsZWFyLWFkdmFuY2Utc2VhcmNoLWZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEVBUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcyA9IFwicmktYnRuLXNhdmVcIiAgW25nQ2xhc3NdID1cInsncmktYnRuLXNhdmUtZGlydHknOiB0aGlzLmNoYW5nZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZFwiIChjbGljayk9XCJhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygkZXZlbnQpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLWFwcGx5LWFkdmFuY2UtZmlsdGVyLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNFQVJDSFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgbmdiTmF2SXRlbSBbbmdiTmF2SXRlbV09XCIzXCIgY2xhc3M9XCJ0YWItdGl0bGUtY2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNlYXJjaFNvcnRpbmdPcHRpb25zLmxlbmd0aD4wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIG5nYk5hdkxpbmsgY2xhc3MgPVwiZmxleC1ncm93LTFcIiA+U09SVElORzwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhc2ljLXNlYXJjaFwiID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbGFzc2lmaWNhdGlvbi1oZWFkZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3t0aGlzLmJhc2ljU2VhcmNoSGVhZGVyfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzaWRlYmFyLWZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlYXJjaFNvcnRJdGVtIG9mIHNlYXJjaFNvcnRpbmdPcHRpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTYgc29ydC1pdGVtXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdjb2wtNiBzb3J0LWl0ZW0nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic29ydC1pY29uXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzb3J0LWljb24nKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50U2VhcmNoU29ydGluZy52YWx1ZT09c2VhcmNoU29ydEl0ZW0udmFsdWUgJiYgY3VycmVudFNlYXJjaFNvcnRpbmcuaXNBc2NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzb3J0LWFycm93Jzp0cnVlfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtYXJyb3ctY2lyY2xlLXVwIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjdXJyZW50U2VhcmNoU29ydGluZy52YWx1ZT09c2VhcmNoU29ydEl0ZW0udmFsdWUgJiYgIWN1cnJlbnRTZWFyY2hTb3J0aW5nLmlzQXNjXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc29ydC1hcnJvdyc6dHJ1ZX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWFycm93LWNpcmNsZS1kb3duIGZhLWxnXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNvcnQtdGV4dCBuby11c2VyLXNlbGVjdC10ZXh0XCIgKGNsaWNrKT1cIm9uU2VhcmNoU29ydENsaWNrZWQoJGV2ZW50LCBzZWFyY2hTb3J0SXRlbSlcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NvcnQtdGV4dCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZWFyY2hTb3J0SXRlbS5kaXNwbGF5fX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYmFzaWMtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdiTmF2T3V0bGV0XT1cIm5hdlwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGlzcGxheT5cclxuICAgICAgICAgICAgICAgICAgICA8bmF2IG5nYk5hdiAjbmF2MT1cIm5nYk5hdlwiIFsoYWN0aXZlSWQpXT1cImFjdGl2ZVRhYjFcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ25hdicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG5nYk5hdkl0ZW0gW25nYk5hdkl0ZW1dPVwiMVwiIGNsYXNzPVwidGFiLXRpdGxlLWNsYXNzXCIgKm5nSWY9XCJmaWx0ZXJCeUFsbG93ZWRGaWVsZHMubGVuZ3RoID4gMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBuZ2JOYXZMaW5rPkZJTFRFUjwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nYk5hdkNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJhc2ljLXNlYXJjaCBzaWRlYmFyLWZpbHRlciBmaWx0ZXItc29ydGluZy1wYW5lbFwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnYmFzaWMtc2VhcmNoIHNpZGViYXItZmlsdGVyIGZpbHRlci1zb3J0aW5nLXBhbmVsJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgc2VhcmNoLWNvbnRlbnQtYm9keVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygncm93IHNlYXJjaC1jb250ZW50LWJvZHknKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgYm91bmRGaWx0ZXJzOyBpbmRleCBhcyBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02XCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdjb2wtNicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0RmllbGRUeXBlKGZpbHRlci5maWVsZCkgPT09ICdpbnB1dCcgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnbWF0LWZvcm0tZmllbGQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZHJvcGRvd24nIFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm5vbmVcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ21hdC1mb3JtLWZpZWxkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7Z2V0RmllbGREaXNwbGF5KGZpbHRlci5maWVsZCl9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKCRldmVudCwgZmlsdGVyKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYXBwbHlGaWx0ZXJzKCRldmVudClcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZmllbGRzW2ldICYmIGZpZWxkc1tpXS52YWx1ZXMgJiYgZmllbGRzW2ldLnZhbHVlc1swXS5kaXNwbGF5O2Vsc2UgZGlzcGxheV9yYXdfdmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWUuaWRcIj57e3ZhbHVlLmRpc3BsYXl9fTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkaXNwbGF5X3Jhd192YWx1ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24+Tm9uZTwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGZpZWxkc1tpXS52YWx1ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidmFsdWVcIj57e3ZhbHVlfX08L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEZpZWxkVHlwZShmaWx0ZXIuZmllbGQpID09PSAnZGF0ZScgXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwibm9uZVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnbWF0LWZvcm0tZmllbGQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tnZXRGaWVsZERpc3BsYXkoZmlsdGVyLmZpZWxkKX19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtuZ01vZGVsXT1cImZpbHRlci52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcigkZXZlbnQsIGZpbHRlcilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJhcHBseUZpbHRlcnMoJGV2ZW50KVwiIG1hdElucHV0IFttYXREYXRlcGlja2VyXT1cIm15UGlja2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJtbS9kZC95eXl5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJteVBpY2tlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGZvbnRTZXQ9XCJmYXNcIiBmb250SWNvbj1cImZhLWNhbGVuZGFyLWFsdCBmYS1sZ1wiPjwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZGF0ZXBpY2tlci10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNteVBpY2tlcj48L21hdC1kYXRlcGlja2VyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1tc2ctaG9sZGVyXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzZWFyY2gtbXNnLWhvbGRlcicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwiYmFzaWMtc2VhcmNoLW1zZy1ob2xkZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWZvb3RlciByaS1mdWxsLXdpZHRoIHNpZGViYXItZmlsdGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmktbW9kYWwtaGVhZGVyLXJpZ2h0LWNvbnRhaW5lciByaS1mdWxsLXdpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25Sb3dUZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiByaVJpcHBsZUVmZmVjdCBjbGFzcz1cInJpLWJ0bi1jYW5jZWwgcmktYnRuLWNhbmNlbC1kaXJ0eVwiIChjbGljayk9XCJzZXR1cEZpbHRlcnModHJ1ZSlcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItZmlsdGVyLXJlc2V0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTRVRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3M9XCJyaS1idG4tc2F2ZVwiIFtuZ0NsYXNzXT1cInsncmktYnRuLXNhdmUtZGlydHknOiB0aGlzLmNoYW5nZWR9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXRoaXMuY2hhbmdlZCBcIiAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKClcIiBhcmlhLWxhYmVsPVwiaGNpLW5nLXNpZGViYXItZmlsdGVyLWFwcGx5LWZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTFRFUlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIG5nYk5hdkl0ZW0gW25nYk5hdkl0ZW1dPVwiMlwiIGNsYXNzPVwidGFiLXRpdGxlLWNsYXNzXCIgKm5nSWY9XCJzb3J0QnlBbGxvd2VkRmllbGRzLmxlbmd0aCA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgbmdiTmF2TGluaz5TT1JUSU5HPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmdiTmF2Q29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFzaWMtc2VhcmNoIHNpZGViYXItZmlsdGVyIGZpbHRlci1zb3J0aW5nLXBhbmVsXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdiYXNpYy1zZWFyY2ggc2lkZWJhci1maWx0ZXIgZmlsdGVyLXNvcnRpbmctcGFuZWwnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBzZWFyY2gtY29udGVudC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNvcnRGaWVsZCBvZiBzb3J0QnlBbGxvd2VkRmllbGRzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC02IHNvcnQtaXRlbVwiIFtuZ1N0eWxlXT1cImdldEN1c3RvbVN0eWxlcygnY29sLTYgc29ydC1pdGVtJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LWljb25cIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NvcnQtaWNvbicpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1NvcnQoc29ydEZpZWxkKSAmJiBpc1NvcnRBc2Moc29ydEZpZWxkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydzb3J0LWFycm93Jzppc0ZpcnN0U29ydChzb3J0RmllbGQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLWFycm93LWNpcmNsZS11cCBmYS1sZ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpc1NvcnQoc29ydEZpZWxkKSAmJiAhaXNTb3J0QXNjKHNvcnRGaWVsZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnc29ydC1hcnJvdyc6aXNGaXJzdFNvcnQoc29ydEZpZWxkKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1hcnJvdy1jaXJjbGUtZG93biBmYS1sZ1wiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzb3J0LXRleHRcIiAoY2xpY2spPVwic2V0U29ydCgkZXZlbnQsIHNvcnRGaWVsZClcIiBbbmdTdHlsZV09XCJnZXRDdXN0b21TdHlsZXMoJ3NvcnQtdGV4dCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7Z2V0RmllbGREaXNwbGF5KHNvcnRGaWVsZCl9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtbXNnLWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD1cImJhc2ljLXNlYXJjaC1tc2ctaG9sZGVyXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyaS1tb2RhbC1mb290ZXIgcmktZnVsbC13aWR0aCBzaWRlYmFyLWZpbHRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpLW1vZGFsLWhlYWRlci1yaWdodC1jb250YWluZXIgcmktZnVsbC13aWR0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbbmdiTmF2T3V0bGV0XT1cIm5hdjFcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWItMSBnbG9iYWwtc2VhcmNoXCIgKm5nSWY9XCJpbnB1dE11bHRpbGluZSA9PT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF0gPSBcIiFxdWlja1NlYXJjaEVuYWJsZWRcIiBbbmdNb2RlbF09XCJnbG9iYWxTZWFyY2hcIiBjbGFzcz1cInNlYXJjaC1ib3hcIiAoa2V5dXApPVwiZG9HbG9iYWxTZWFyY2goJGV2ZW50KVwiIFtwbGFjZWhvbGRlcl09XCJnbG9iYWxTZWFyY2hQbGFjZWhvbGRlclwiIGFyaWEtbGFiZWw9XCJxdWljay1zZWFyY2gtb3B0aW9uc1wiLz5cclxuICAgICAgICAgICAgPHNlbGVjdCAqbmdJZj1cInNob3dRdWlja1NlYXJjaE9wdGlvbnNcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkU2VhcmNoVHlwZVwiIChjaGFuZ2UpPVwic2VsZWN0U2VhcmNoVHlwZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBpZD1cInNlYXJjaC1pZGVudGlmaWVyXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTsgYm9yZGVyLXJhZGl1czogMHB4OyBib3JkZXItY29sb3I6IGJsYWNrOyBcIj5cclxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBzZWFyY2hUeXBlIG9mIHNlYXJjaFR5cGVBcnJheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwic2VhcmNoVHlwZVwiPlxyXG4gICAgICAgICAgICAgICAge3tzZWFyY2hUeXBlfX1cclxuICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDxidXR0b24gcmlSaXBwbGVFZmZlY3QgY2xhc3M9XCJwbC0xIHByLTEgc2VhcmNoLWJ1dHRvblwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCIgW2Rpc2FibGVkXSA9IFwiIXF1aWNrU2VhcmNoRW5hYmxlZFwiIFtuZ0NsYXNzXSA9IFwieydkaXNhYmxlZC1idXR0b24nOiFxdWlja1NlYXJjaEVuYWJsZWR9XCIgKGNsaWNrKT1cInNlYXJjaEJ1dHRvbkNsaWNrZWQoKVwiIGFyaWEtbGFiZWw9XCJoY2ktbmctc2lkZWJhci1xdWljay1zZWFyY2hcIj5cclxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1zZWFyY2hcIj48L2k+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTEgZ2xvYmFsLXNlYXJjaFwiICpuZ0lmPVwiaW5wdXRNdWx0aWxpbmUgPT09IHRydWVcIj5cclxuICAgICAgICAgICAgPHRleHRhcmVhIGFyaWEtbGFiZWw9XCJnbG9iYWxTZWFyY2hcIiBbZGlzYWJsZWRdID0gXCIhcXVpY2tTZWFyY2hFbmFibGVkXCIgW25nTW9kZWxdPVwiZ2xvYmFsU2VhcmNoXCIgY2xhc3M9XCJzZWFyY2gtYm94IHRleHRhcmVhLXNlYXJjaC1ib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzZWFyY2gtYm94IHRleHRhcmVhLXNlYXJjaC1ib3gnKVwiICAoa2V5dXApPVwiZG9HbG9iYWxTZWFyY2goJGV2ZW50KVwiIFtwbGFjZWhvbGRlcl09XCJnbG9iYWxTZWFyY2hQbGFjZWhvbGRlclwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgIDxzZWxlY3QgKm5nSWY9XCJzaG93UXVpY2tTZWFyY2hPcHRpb25zXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZFNlYXJjaFR5cGVcIiAoY2hhbmdlKT1cInNlbGVjdFNlYXJjaFR5cGUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJzZWFyY2gtaWRlbnRpZmllclwiIHN0eWxlPVwid2lkdGg6IDEwMCU7IGJvcmRlci1yYWRpdXM6IDBweDsgYm9yZGVyLWNvbG9yOiBibGFjazsgXCI+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgc2VhcmNoVHlwZSBvZiBzZWFyY2hUeXBlQXJyYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFR5cGVcIj5cclxuICAgICAgICAgICAgICAgIHt7c2VhcmNoVHlwZX19XHJcbiAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICA8YnV0dG9uIHJpUmlwcGxlRWZmZWN0IGFyaWEtbGFiZWw9XCJzZWFyY2hCdXR0b25cIiBjbGFzcz1cInBzLTEgcGUtMSBzZWFyY2gtYnV0dG9uIG11bHRpbGluZS1zZWFyY2gtYnV0dG9uXCIgW25nU3R5bGVdPVwiZ2V0Q3VzdG9tU3R5bGVzKCdzZWFyY2gtYnV0dG9uIG11bHRpbGluZS1zZWFyY2gtYnV0dG9uJylcIiBbZGlzYWJsZWRdID0gXCIhcXVpY2tTZWFyY2hFbmFibGVkXCIgW25nQ2xhc3NdID0gXCJ7J2Rpc2FibGVkLWJ1dHRvbic6IXF1aWNrU2VhcmNoRW5hYmxlZH1cIiAoY2xpY2spPVwic2VhcmNoQnV0dG9uQ2xpY2tlZCgpXCIgYXJpYS1sYWJlbD1cImhjaS1uZy1zaWRlYmFyLXF1aWNrLXNlYXJjaFwiPlxyXG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmFzIGZhLXNlYXJjaFwiPjwvaT5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggeC1hdXRvXCIgKm5nSWY9XCJoYXNWYWxpZEZpbHRlcnMoKVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGZpbHRlcnNcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudmFsaWRcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoZmlsdGVyKVwiIGNsYXNzPVwiZC1mbGV4IHBpbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3tmaWx0ZXIuZmllbGR9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjbG9zZS1pY29uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lcy1jaXJjbGUgZmEteHNcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaExpc3RzLmxlbmd0aCA+IDFcIiBjbGFzcz1cImQtZmxleCB4LWhpZGRlbiBsaXN0LXRvZ2dsZVwiPlxyXG4gICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXAgW25nTW9kZWxdPVwic2VsZWN0ZWRTZWFyY2hMaXN0XCIgKG5nTW9kZWxDaGFuZ2UpPVwic2V0U2VsZWN0ZWRTZWFyY2hMaXN0KCRldmVudClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgKm5nRm9yPVwibGV0IHNlYXJjaExpc3Qgb2Ygc2VhcmNoTGlzdHNcIiBtYXQtcmFpc2VkLWJ1dHRvbi10b2dnbGUgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaExpc3RcIj5cclxuICAgICAgICAgICAgICAgIHt7c2VhcmNoTGlzdH19XHJcbiAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICBgXHJcbiAgfVxyXG4pXHJcbmV4cG9ydCBjbGFzcyBTZWFyY2hMaXN0Q29udHJvbGxlckNvbXBvbmVudCBleHRlbmRzIE5hdkNvbXBvbmVudCB7XHJcbiAgQElucHV0KCkgc2hvd1RpdGxlOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBidXR0b25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBpbnB1dE11bHRpbGluZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaE9wdGlvbnNXaWR0aDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBmaWVsZHM6IGFueVtdID0gW107XHJcbiAgQElucHV0KCkgY3VzdG9tU3R5bGVzOiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBiYXNpY1NlYXJjaDogYW55ID0ge307XHJcbiAgQElucHV0KCkgYWR2YW5jZWRTZWFyY2g6IGFueSA9IHt9O1xyXG4gIEBJbnB1dCgpIGZpbHRlckJ5QWxsb3dlZEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBxdWlja1NlYXJjaEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBhZHZhbmNlZFNlYXJjaEZpZWxkczogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzb3J0QnlBbGxvd2VkRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIHNvcnRzOiBIY2lTb3J0RHRvW10gPSBbXTtcclxuICBASW5wdXQoKSBzaG93UXVpY2tTZWFyY2hPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd0FkdmFuY2VkU2VhcmNoT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFR5cGVBcnJheTogc3RyaW5nW10gPSBbXTtcclxuICBASW5wdXQoKSBzZWFyY2hUeXBlOiBzdHJpbmcgPSBcIlwiO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFR5cGVTZWxlY3RlZDogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBiYXNpY1NlYXJjaEhlYWRlcjogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBnbG9iYWxTZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nID0gXCJcIjtcclxuICBASW5wdXQoKSBnbG9iYWxTZWFyY2hWYWxpZGF0b3I6IGFueSB8IHN0cmluZyA9IFwiXCI7XHJcbiAgQElucHV0KCkgYnV0dG9uUm93VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gPSBudWxsO1xyXG4gIEBJbnB1dCgpIHNlYXJjaFNvcnRpbmdPcHRpb25zOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIGxhYmVsVGV4dDogc3RyaW5nID0gXCJcIjtcclxuICBAT3V0cHV0KCkgc2VhcmNoTGlzdENoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgYWN0aXZlVGFiID0gMTtcclxuXHJcbiAgYWN0aXZlVGFiMSA9IDE7XHJcblxyXG4gIGJvdW5kRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICBib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVyczogSGNpRmlsdGVyRHRvW10gPSBbXTtcclxuICB1cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnM6IEhjaUZpbHRlckR0b1tdID0gW107XHJcblxyXG4gIGZpbHRlcnNTdWJqZWN0OiBTdWJqZWN0PEhjaUZpbHRlckR0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpRmlsdGVyRHRvW10+KFtdKTtcclxuICBhZHZhbmNlZFNlYXJjaEZpbHRlcnNTdWJqZWN0OiBTdWJqZWN0PEhjaUZpbHRlckR0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpRmlsdGVyRHRvW10+KFtdKTtcclxuICBzb3J0c1N1YmplY3Q6IFN1YmplY3Q8SGNpU29ydER0b1tdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGNpU29ydER0b1tdPihbXSk7XHJcblxyXG4gIGdsb2JhbFNlYXJjaDogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgc2hvd09wdGlvbnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzaG93QmFja0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlYXJjaExpc3RzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNlbGVjdGVkU2VhcmNoTGlzdDogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHNlYXJjaFN0cmluZ1N1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIGJhY2tCdXR0b25TdWJqZWN0OiBTdWJqZWN0PGFueT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBhZHZhbmNlZFNlYXJjaFN0cmluZ1N1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHNlbGVjdGVkU2VhcmNoVHlwZTogc3RyaW5nO1xyXG4gIHNlbGVjdGVkU2VhcmNoVHlwZVN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPih1bmRlZmluZWQpO1xyXG4gIHBlcmZvcm1lZFNlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwZXJmb3JtZWRCYXNpY1NlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBwZXJmb3JtZWRBZHZhbmNlZFNlYXJjaFN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICBkaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPSBmYWxzZTtcclxuICBhZHZhbmNlZFNlYXJjaEFsbG93RmlsdGVyID0gZmFsc2U7XHJcblxyXG4gIGFsbG93U2VhcmNoU3ViamVjdCQ6IFN1YmplY3Q8YW55PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xyXG4gIHNlYXJjaEFsbG93ZWRTdWJqZWN0JDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgYWxsb3dUb2dnbGVTdWJqZWN0JDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgdG9nZ2xlU2hvd1N1YmplY3QkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgY29nV2hlZWxDbGlja2VkU3ViamVjdCQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4odW5kZWZpbmVkKTtcclxuICBjaGFuZ2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgYWxsb3dTZWFyY2g6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGFsbG93VG9nZ2xlOiBib29sZWFuID0gdHJ1ZTtcclxuICBzaG93VG9nZ2xlT3B0aW9uczogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHF1aWNrU2VhcmNoRW5hYmxlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIHNlYXJjaFNvcnRpbmdTZWxlY3Rpb25DaGFuZ2VTdWJqZWN0JDogU3ViamVjdDxhbnk+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KHVuZGVmaW5lZCk7XHJcbiAgY3VycmVudFNlYXJjaFNvcnRpbmcgPSB7XCJ2YWx1ZVwiOnVuZGVmaW5lZCwgXCJkaXNwbGF5XCI6dW5kZWZpbmVkLCBcImlzQXNjXCI6dHJ1ZX07XHJcblxyXG4gIGdldEN1c3RvbVN0eWxlcyhzdHlsZXM6IHN0cmluZyk6IGFueSB7XHJcbiAgICBsZXQgY3VzdG9tU3R5bGVPYmplY3Q6IGFueSA9IFwiXCI7XHJcbiAgICBmb3IgKGxldCBzdHlsZSBvZiBzdHlsZXMuc3BsaXQoXCIgXCIpKSB7XHJcbiAgICAgIGxldCBzdHlsZU9iamVjdCA9IHRoaXMuY3VzdG9tU3R5bGVzW3N0eWxlXTtcclxuICAgICAgaWYgKHN0eWxlT2JqZWN0KSB7XHJcbiAgICAgICAgY3VzdG9tU3R5bGVPYmplY3QgPSBPYmplY3QuYXNzaWduKHt9LCBjdXN0b21TdHlsZU9iamVjdCwgc3R5bGVPYmplY3QpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1c3RvbVN0eWxlT2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxyXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIHJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBuYXZpZ2F0aW9uR2xvYmFsU2VydmljZTogTmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UsXHJcbiAgICBAT3B0aW9uYWwoKSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXHJcbiAgICBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHN1cGVyKGVsZW1lbnRSZWYsIHJlbmRlcmVyLCByZXNvbHZlciwgbmF2aWdhdGlvblNlcnZpY2UsIGNoYW5nZURldGVjdG9yUmVmKTtcclxuXHJcbiAgICBpZiAoIW5hdmlnYXRpb25TZXJ2aWNlKSB7XHJcbiAgICAgIHRoaXMubmF2aWdhdGlvblNlcnZpY2UgPSBuZXcgTmF2aWdhdGlvblNlcnZpY2UobmF2aWdhdGlvbkdsb2JhbFNlcnZpY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5hdmlnYXRpb25TZXJ2aWNlLmdldElkKCkgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLmlzUm9vdCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgZGF0YSBvbmx5IHdoZW4gdGhlIGNvbXBvbmVudCBoYXMgZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGlzIHJlbmRlcmVkLlxyXG4gICAqL1xyXG4gIGNoZWNrSW5pdGlhbGl6ZWQoKSB7XHJcbiAgICBpZiAodGhpcy5hZnRlclZpZXdJbml0KSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUNvbmZpZyh0aGlzLmNvbmZpZyk7XHJcbiAgICAgIHRoaXMucG9zdEluaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldEJ1dHRvblJvd1RlbXBsYXRlKGJ1dHRvblJvd1RlbXBsYXRlKXtcclxuICAgIHRoaXMuYnV0dG9uUm93VGVtcGxhdGUgPSBidXR0b25Sb3dUZW1wbGF0ZTtcclxuICB9XHJcblxyXG4gIGRvR2xvYmFsU2VhcmNoKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBsZXQgc2VhcmNoU3RyaW5nOiBzdHJpbmcgPSAoKDxIVE1MSW5wdXRFbGVtZW50PmV2ZW50LnRhcmdldCkudmFsdWUpLnRyaW0oKTtcclxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSAxMykge1xyXG4gICAgICAvLyBTZW5kIGEgbWVzc2FnZSB3aXRoIHNlYXJjaC10ZXh0XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJJbiBTZWFyY2hMaXN0Q29udHJvbGxlciBlbnRlciB3YXMgZGV0ZWN0ZWRcIik7XHJcbiAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gc2VhcmNoU3RyaW5nO1xyXG4gICAgICB0aGlzLnNlYXJjaFN0cmluZ1N1YmplY3QubmV4dCh0aGlzLmdldFNlYXJjaFN0cmluZyhzZWFyY2hTdHJpbmcpKTtcclxuICAgICAgdGhpcy5zZWFyY2hCdXR0b25DbGlja2VkKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPT09IGZhbHNlKSB7XHJcbiAgICAgIGlmICh0aGlzLmdsb2JhbFNlYXJjaCAhPT0gc2VhcmNoU3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFzZWFyY2hTdHJpbmcgfHwgc2VhcmNoU3RyaW5nLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtdKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IGZpbHRlckZpZWxkOiBzdHJpbmc7XHJcbiAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZCA9IChmaWx0ZXJGaWVsZCkgPyBmaWx0ZXJGaWVsZCArIFwiIG9yIFwiICsgZmllbGQgOiBmaWVsZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbbmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5nZXRTZWFyY2hTdHJpbmcoc2VhcmNoU3RyaW5nKSwgdW5kZWZpbmVkLCBcIkxcIiwgdHJ1ZSldKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gc2VhcmNoU3RyaW5nO1xyXG4gIH1cclxuXHJcbiAgc2VhcmNoQnV0dG9uQ2xpY2tlZCgpIHtcclxuXHJcbiAgICAvLyBWYWxpZGF0aW9uIENoZWNrOiBpZiBpbnZhbGlkLCBkbyBub3Qgc2VhcmNoLlxyXG4gICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yICYmIHRoaXMuaXNJbnZhbGlkKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hbGxvd1NlYXJjaFN1YmplY3QkLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICBpZiAodmFsID09PSBcImFsbG93U2VhcmNoXCIpIHtcclxuICAgICAgICB0aGlzLmFsbG93U2VhcmNoID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodmFsID09PSBcInByZXZlbnRTZWFyY2hcIikge1xyXG4gICAgICAgICAgdGhpcy5hbGxvd1NlYXJjaCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIHRoaXMuc2VhcmNoQWxsb3dlZFN1YmplY3QkLm5leHQodGhpcy5hbGxvd1NlYXJjaCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYWxsb3dTZWFyY2gpIHtcclxuICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoKSB7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTdHJpbmdTdWJqZWN0Lm5leHQodGhpcy5nZXRTZWFyY2hTdHJpbmcodGhpcy5nbG9iYWxTZWFyY2gpKTtcclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2gubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZmlsdGVyRmllbGQ6IHN0cmluZztcclxuICAgICAgICAgIGlmICh0aGlzLnF1aWNrU2VhcmNoRmllbGRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2YgdGhpcy5xdWlja1NlYXJjaEZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGZpbHRlckZpZWxkID0gKGZpbHRlckZpZWxkKSA/IGZpbHRlckZpZWxkICsgXCIgb3IgXCIgKyBmaWVsZCA6IGZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcykge1xyXG4gICAgICAgICAgICAgIGZpbHRlckZpZWxkID0gKGZpbHRlckZpZWxkKSA/IGZpbHRlckZpZWxkICsgXCIgb3IgXCIgKyBmaWVsZCA6IGZpZWxkO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dChbbmV3IEhjaUZpbHRlckR0byhmaWx0ZXJGaWVsZCwgXCJzdHJpbmdcIiwgdGhpcy5nZXRTZWFyY2hTdHJpbmcodGhpcy5nbG9iYWxTZWFyY2gpLCB1bmRlZmluZWQsIFwiTFwiLCB0cnVlKV0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZVN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSk7XHJcbiAgICAgIHRoaXMucGVyZm9ybWVkU2VhcmNoU3ViamVjdC5uZXh0KFwic2VhcmNoUGVyZm9ybWVkXCIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5maWx0ZXJzU3ViamVjdC5uZXh0KFtdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldFNlbGVjdGVkU2VhcmNoTGlzdChzZWxlY3RlZFNlYXJjaExpc3Q6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFNlYXJjaExpc3QgPSBzZWxlY3RlZFNlYXJjaExpc3Q7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdFN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkU2VhcmNoTGlzdCk7XHJcbiAgICB0aGlzLnNlYXJjaExpc3RDaGFuZ2UuZW1pdChzZWxlY3RlZFNlYXJjaExpc3QpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0U2VhcmNoVHlwZSgpIHtcclxuICAgIGNvbnNvbGUuZGVidWcoXCJzZWxlY3RTZWFyY2hUeXBlXCIpO1xyXG4gICAgY29uc29sZS5kZWJ1Zyh0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZVN1YmplY3QubmV4dCh0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSk7XHJcbiAgfVxyXG5cclxuICBhZGRTZWFyY2hMaXN0KHRpdGxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICBjb25zb2xlLmRlYnVnKFwiU2VhcmNoTGlzdENvbnRyb2xsZXJDb21wb25lbnQuYWRkU2VhcmNoTGlzdDogXCIgKyB0aXRsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRpdGxlICYmIHRoaXMuc2VhcmNoTGlzdHMuaW5kZXhPZih0aXRsZSkgPT09IC0xKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoTGlzdHMucHVzaCh0aXRsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc2VhcmNoTGlzdHMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0ID0gdGl0bGU7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0U3ViamVjdC5uZXh0KHRoaXMuc2VsZWN0ZWRTZWFyY2hMaXN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVuYWJsZVF1aWNrU2VhcmNoKGVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlKXtcclxuICAgIHRoaXMucXVpY2tTZWFyY2hFbmFibGVkID0gZW5hYmxlZDtcclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIHRoZSBjb25maWcgd2l0aCBvcHRpb25zIGFuZCByZS1mZXRjaGVzIGRhdGEuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29uZmlnXHJcbiAgICovXHJcbiAgdXBkYXRlQ29uZmlnKGNvbmZpZykge1xyXG4gICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgIGNvbnNvbGUuZGVidWcoXCJ1cGRhdGVDb25maWdcIik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNvbmZpZykge1xyXG4gICAgICB0aGlzLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY29uZmlnLCBjb25maWcpO1xyXG5cclxuICAgICAgaWYgKGNvbmZpZy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgICB0aGlzLmZpbHRlckJ5QWxsb3dlZEZpZWxkcyA9IGNvbmZpZy5maWx0ZXJCeUFsbG93ZWRGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5xdWlja1NlYXJjaEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMucXVpY2tTZWFyY2hGaWVsZHMgPSBjb25maWcucXVpY2tTZWFyY2hGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5hZHZhbmNlZFNlYXJjaEZpZWxkcykge1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hGaWVsZHMgPSBjb25maWcuYWR2YW5jZWRTZWFyY2hGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zb3J0QnlBbGxvd2VkRmllbGRzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0QnlBbGxvd2VkRmllbGRzID0gY29uZmlnLnNvcnRCeUFsbG93ZWRGaWVsZHM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zaG93UXVpY2tTZWFyY2hPcHRpb25zKSB7XHJcbiAgICAgICAgdGhpcy5zaG93UXVpY2tTZWFyY2hPcHRpb25zID0gY29uZmlnLnNob3dRdWlja1NlYXJjaE9wdGlvbnM7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5pbnB1dE11bHRpbGluZSkge1xyXG4gICAgICAgIHRoaXMuaW5wdXRNdWx0aWxpbmUgPSBjb25maWcuaW5wdXRNdWx0aWxpbmU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zZWFyY2hPcHRpb25zV2lkdGgpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaE9wdGlvbnNXaWR0aCA9IGNvbmZpZy5zZWFyY2hPcHRpb25zV2lkdGg7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5zZWFyY2hUeXBlQXJyYXkpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaFR5cGVBcnJheSA9IGNvbmZpZy5zZWFyY2hUeXBlQXJyYXk7XHJcbiAgICAgICAgaWYgKGNvbmZpZy5zZWFyY2hUeXBlKSB7XHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkU2VhcmNoVHlwZSA9IHRoaXMuc2VhcmNoVHlwZUFycmF5W3RoaXMuc2VhcmNoVHlwZUFycmF5LmZpbmRJbmRleCh4ID0+IHggPT09IGNvbmZpZy5zZWFyY2hUeXBlKV07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTZWFyY2hUeXBlID0gdGhpcy5zZWFyY2hUeXBlQXJyYXlbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuZGlzYWJsZUxvY2FsRmlsdGVyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlTG9jYWxGaWx0ZXJpbmcgPSBjb25maWcuZGlzYWJsZUxvY2FsRmlsdGVyaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlcikge1xyXG4gICAgICAgIHRoaXMuYWR2YW5jZWRTZWFyY2hBbGxvd0ZpbHRlciA9IGNvbmZpZy5hZHZhbmNlZFNlYXJjaEFsbG93RmlsdGVyO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2VsZWN0ZWRTZWFyY2hTdHJpbmcpIHtcclxuICAgICAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IGNvbmZpZy5zZWxlY3RlZFNlYXJjaFN0cmluZztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNvcnRzKSB7XHJcbiAgICAgICAgdGhpcy5zb3J0cyA9IGNvbmZpZy5zb3J0cztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNlYXJjaExpc3RDaGFuZ2UpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaExpc3RDaGFuZ2UgPSBjb25maWcuc2VhcmNoTGlzdENoYW5nZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLnNob3dUaXRsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5zaG93VGl0bGUgPSBjb25maWcuc2hvd1RpdGxlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuYnV0dG9uVGVtcGxhdGUpIHtcclxuICAgICAgICB0aGlzLmJ1dHRvblRlbXBsYXRlID0gY29uZmlnLmJ1dHRvblRlbXBsYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb25maWcuc2hvd0JhY2tCdXR0b24gIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0JhY2tCdXR0b24gPSBjb25maWcuc2hvd0JhY2tCdXR0b247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5iYXNpY1NlYXJjaEhlYWRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5iYXNpY1NlYXJjaEhlYWRlciA9IGNvbmZpZy5iYXNpY1NlYXJjaEhlYWRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdsb2JhbFNlYXJjaFBsYWNlaG9sZGVyKSB7XHJcbiAgICAgICAgdGhpcy5nbG9iYWxTZWFyY2hQbGFjZWhvbGRlciA9IGNvbmZpZy5nbG9iYWxTZWFyY2hQbGFjZWhvbGRlcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmdsb2JhbFNlYXJjaFZhbGlkYXRvcikge1xyXG4gICAgICAgIHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yID0gY29uZmlnLmdsb2JhbFNlYXJjaFZhbGlkYXRvcjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY29uZmlnLmN1c3RvbVN0eWxlcykge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tU3R5bGVzID0gY29uZmlnLmN1c3RvbVN0eWxlcztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNvbmZpZy5maWVsZHMgIT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZmllbGRzID0gY29uZmlnLmZpZWxkcztcclxuICAgICAgICBpZiAodGhpcy5maWVsZHMpIHtcclxuICAgICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKSB7XHJcbiAgICAgICAgICAgIGlmIChmaWVsZC52YWx1ZVVSTCAmJiAhZmllbGQudmFsdWVzKSB7XHJcbiAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSB2YWx1ZSBVUkwgZm9yIHRoZSBmaWVsZCBhbmQgd2lsbCBwb3B1bGF0ZSB0aGUgdmFsdWVzIG5vd1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0VmFsdWVzRnJvbVVSTChmaWVsZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvbmZpZy5hZHZhbmNlZFNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5hZHZhbmNlZFNlYXJjaCA9IGNvbmZpZy5hZHZhbmNlZFNlYXJjaDtcclxuICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaCAhPSBudWxsKSB7XHJcbiAgICAgICAgICB2YXIgaTtcclxuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmFkdmFuY2VkU2VhcmNoLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHZhciBqO1xyXG4gICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0udmFsdWVVUkwgJiYgIXRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLnZhbHVlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRWYWx1ZXNGcm9tVVJMKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmKGNvbmZpZy5zZWFyY2hTb3J0aW5nT3B0aW9ucyl7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hTb3J0aW5nT3B0aW9ucyA9IGNvbmZpZy5zZWFyY2hTb3J0aW5nT3B0aW9ucztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYoY29uZmlnLmluaXRpYWxTZWFyY2hTb3J0aW5nU2VsZWN0aW9uKXtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nID0gY29uZmlnLmluaXRpYWxTZWFyY2hTb3J0aW5nU2VsZWN0aW9uO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5zb3J0QnlBbGxvd2VkRmllbGRzLmxlbmd0aCA+IDAgJiYgdGhpcy5zb3J0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5zb3J0cy5wdXNoKG5ldyBIY2lTb3J0RHRvKHRoaXMuc29ydEJ5QWxsb3dlZEZpZWxkc1swXSkpO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coJ2Fub3RoZXJTb3J0aW5nIEZpZWxkOicsIHRoaXMuc2VhcmNoU29ydGluZ09wdGlvbnMpO1xyXG4gICAgdGhpcy5zZXR1cEZpbHRlcnMoKTtcclxuICAgIHN1cGVyLnVwZGF0ZUNvbmZpZyhjb25maWcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgb2JqZWN0cyBhZnRlciBtYWtpbmcgYSBodHRwIGNhbGwgdG8gdGhlIHZhbHVlVVJMIG9mIHRoZSBmaWVsZFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHthbnl9IGZpZWxkXHJcbiAgICogQHJldHVybnMge3N0cmluZ1tdfVxyXG4gICAqL1xyXG4gIGdldFZhbHVlc0Zyb21VUkwoZmllbGQ6IGFueSkge1xyXG4gICAgbGV0IHVybDogc3RyaW5nO1xyXG4gICAgdXJsID0gZmllbGQudmFsdWVVUkw7XHJcbiAgICB0aGlzLmh0dHAuZ2V0KHVybClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICBkYXRhID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcoXCJ2YWx1ZXMgY29taW5nIGJhY2sgZnJvbVwiICsgZmllbGQudmFsdWVVUkwpO1xyXG4gICAgICAgICAgbGV0IHZhbHVlczogYW55W10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgICAgICAgIGNvbnNvbGUuZGVidWcodmFsdWVzKTtcclxuICAgICAgICAgIGlmICh2YWx1ZXMgJiYgdmFsdWVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgZmllbGQudmFsdWVzID0gdmFsdWVzO1xyXG4gICAgICAgICAgICAvL1NvcnQgdGhlIHZhbHVlcyBvZiB0aGUgZHJvcCBkb3duIGxpc3RzIGJlZmlucmVcclxuICAgICAgICAgICAgdmFsdWVzLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYS5kaXNwbGF5IDwgYi5kaXNwbGF5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2V0dGluZyB2YWx1ZXMgZm9yIFVSTFwiICsgdGhpcy5nZXRGaWVsZERpc3BsYXkoZmllbGQpKTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybiB0aGUgZGlzcGxheSBwcm9wZXJ0eSBvZiB0aGUgZmllbGQgaWYgaXQgZXhpc3RzLCBvdGhlcndpc2UsIHRyeSBjb252ZXJ0aW5nIGNhbWVsIGNhc2UgdG8gd29yZHMuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGROYW1lXHJcbiAgICogQHJldHVybnMge3N0cmluZ31cclxuICAgKi9cclxuXHJcblxyXG4gIGdldEZpZWxkRGlzcGxheShmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAvL3RoaXMuYmFzaWNTZWFyY2guZmllbGRzXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xyXG4gICAgICBpZiAoZmllbGQuZmllbGQgPT09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgIHJldHVybiBmaWVsZC5kaXNwbGF5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvL2FkdmFuY2VkU2VhcmNoIGZpZWxkIGRpc3BsYXlcclxuICAgIGxldCBpO1xyXG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMuYWR2YW5jZWRTZWFyY2gubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGo7XHJcbiAgICAgIGZvciAoaiA9IDA7IGogPCB0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkcy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmICh0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS5maWVsZCA9PT0gZmllbGROYW1lKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5hZHZhbmNlZFNlYXJjaFtpXS5maWVsZHNbal0uZGlzcGxheTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlzcGxheTogc3RyaW5nID0gZmllbGROYW1lLnJlcGxhY2UoLyhbQS1aXSkvZywgXCIgJDFcIik7XHJcbiAgICByZXR1cm4gZGlzcGxheS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGRpc3BsYXkuc2xpY2UoMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdGhlIHR5cGUgcHJvcGVydHkgb2YgdGhlIGZpZWxkIGlmIGl0IGV4aXN0cy4gRGVmYXVsdHMgdG8gaW5wdXRcclxuICAgKlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZE5hbWVcclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxyXG4gICAqL1xyXG4gIGdldEZpZWxkVHlwZShmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICAvL3RoaXMuYmFzaWNTZWFyY2guZmllbGRzXHJcbiAgICBmb3IgKGxldCBmaWVsZCBvZiB0aGlzLmZpZWxkcykge1xyXG4gICAgICBpZiAoZmllbGQuZmllbGQgPT09IGZpZWxkTmFtZSkge1xyXG4gICAgICAgIHJldHVybiBmaWVsZC50eXBlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGk7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5hZHZhbmNlZFNlYXJjaC5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgajtcclxuICAgICAgZm9yIChqID0gMDsgaiA8IHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWR2YW5jZWRTZWFyY2hbaV0uZmllbGRzW2pdLmZpZWxkID09PSBmaWVsZE5hbWUpIHtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2VkU2VhcmNoW2ldLmZpZWxkc1tqXS50eXBlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiaW5wdXRcIjtcclxuICB9XHJcblxyXG4gIGdldEZpZWxkcygpe1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGRzO1xyXG4gIH1cclxuXHJcbiAgc2V0RmllbGRzKGZpZWxkcyl7XHJcbiAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcztcclxuICB9XHJcblxyXG4gIGdldEZpZWxkKGZpZWxkTmFtZTpzdHJpbmcpe1xyXG4gICAgcmV0dXJuIHRoaXMuZmllbGRzLmZpbmQoeD0+eC5maWVsZCA9PSBmaWVsZE5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlIGZpbHRlcnMgYmFzZWQgdXBvbiBhdmFpbGFibGUgZmllbGRzIGZvciBmaWx0ZXJpbmcuXHJcbiAgICovXHJcbiAgc2V0dXBGaWx0ZXJzKGFwcGx5OiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcclxuICAgIHRoaXMuYm91bmRGaWx0ZXJzID0gW107XHJcbiAgICB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgZmlsdGVyRmllbGQgb2YgdGhpcy5maWx0ZXJCeUFsbG93ZWRGaWVsZHMpIHtcclxuICAgICAgbGV0IGRhdGFUeXBlID0gXCJzdHJpbmdcIjtcclxuICAgICAgbGV0IGZpZWxkID0gdGhpcy5maWVsZHMuZmluZCh4PT54LmZpZWxkID09IGZpbHRlckZpZWxkKTtcclxuICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLnR5cGUpIHtcclxuICAgICAgICBkYXRhVHlwZSA9IGZpZWxkLnR5cGUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmJvdW5kRmlsdGVycy5wdXNoKG5ldyBIY2lGaWx0ZXJEdG8oZmlsdGVyRmllbGQsIGRhdGFUeXBlLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCJMXCIsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBmaWx0ZXJGaWVsZCBvZiB0aGlzLmFkdmFuY2VkU2VhcmNoRmllbGRzKSB7XHJcbiAgICAgIHRoaXMuYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnMucHVzaChuZXcgSGNpRmlsdGVyRHRvKGZpbHRlckZpZWxkLCBcInN0cmluZ1wiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgXCJMXCIsIGZhbHNlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoYXBwbHkpIHtcclxuICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKTtcclxuICAgICAgdGhpcy5hcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycygpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGFuZ2VkID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgYXQgbGVhc3Qgb25lIGZpbHRlciBpcyB2YWxpZC5cclxuICAgKlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGhhc1ZhbGlkRmlsdGVycygpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmJvdW5kRmlsdGVycykge1xyXG4gICAgICBpZiAoZmlsdGVyLnZhbGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgZmlsdGVyLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXHJcbiAgICogQHBhcmFtIHtIY2lGaWx0ZXJEdG99IGZpbHRlclxyXG4gICAqL1xyXG4gIHNldEZpbHRlcih2YWx1ZTogc3RyaW5nLCBmaWx0ZXI6IEhjaUZpbHRlckR0byk6IHZvaWQge1xyXG4gICAgZmlsdGVyLnZhbHVlID0gdmFsdWU7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2hhbmdlZCA9IGZhbHNlO1xyXG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZUxvY2FsRmlsdGVyaW5nKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZmwgb2YgdGhpcy5ib3VuZEZpbHRlcnMpIHtcclxuICAgICAgICAgIGlmIChmbC52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHZhbGlkIGZpbHRlcnMgdG8gdmFsaWQgYW5kIGNhbGwgZGF0YS5cclxuICAgKi9cclxuICBhcHBseUZpbHRlcnMoZXZlbnQ/OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQua2V5Q29kZSAhPT0gMTMgJiYgZXZlbnQudHlwZSAmJiBldmVudC50eXBlICE9PSBcImNsaWNrXCIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmJvdW5kRmlsdGVycykge1xyXG4gICAgICBpZiAoZmlsdGVyLnZhbHVlIGluc3RhbmNlb2YgRGF0ZSB8fCAoZmlsdGVyLmdldERhdGFUeXBlKCkgPT0gJ2RhdGUnICYmIGZpbHRlci52YWx1ZSAmJiAhaXNOYU4obmV3IERhdGUoZmlsdGVyLnZhbHVlKS5nZXRUaW1lKCkpKSkge1xyXG4gICAgICAgIGZpbHRlci52YWxpZCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLnZhbHVlICYmIGZpbHRlci52YWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZmlsdGVyLnZhbGlkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmaWx0ZXIudmFsaWQgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZ2xvYmFsU2VhcmNoID0gXCJcIjtcclxuICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dCh0aGlzLmJvdW5kRmlsdGVycyk7XHJcbiAgICAvL1NldHRpbmcgYSBmbGFnIG9uIGJ1dHRvbkNsaWNrIGV2ZW50LlxyXG4gICAgaWYgKGV2ZW50ICYmIChldmVudC5rZXlDb2RlID09PSAxMyB8fCBldmVudC50eXBlID09PSBcImNsaWNrXCIpKSB7XHJcbiAgICAgIHRoaXMucGVyZm9ybWVkQmFzaWNTZWFyY2hTdWJqZWN0Lm5leHQoXCJiYXNpY1NlYXJjaENsaWNrZWRcIik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoYW5nZWQgPSB0cnVlO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB2YWxpZCBhZHZhbmNlZCBzZWFyY2ggZmlsdGVycyB0byB2YWxpZCBhbmQgY2FsbCBkYXRhLlxyXG4gICAqL1xyXG5cclxuICBhcHBseUFkdmFuY2VkU2VhcmNoRmlsdGVycyhldmVudD86IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzID0gW107XHJcbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQua2V5Q29kZSAhPT0gMTMgJiYgZXZlbnQudHlwZSAmJiBldmVudC50eXBlICE9PSBcImNsaWNrXCIpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGZpbHRlciBvZiB0aGlzLmJvdW5kQWR2YW5jZWRTZWFyY2hGaWx0ZXJzKSB7XHJcbiAgICAgIGZpbHRlci52YWxpZCA9IChmaWx0ZXIudmFsdWUgJiYgZmlsdGVyLnZhbHVlLmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlZEFkdmFuY2VTZWFyY2hGaWx0ZXJzID0gdGhpcy5ib3VuZEFkdmFuY2VkU2VhcmNoRmlsdGVycztcclxuXHJcbiAgICB0aGlzLmdsb2JhbFNlYXJjaCA9IFwiXCI7XHJcbiAgICBpZiAodGhpcy5hZHZhbmNlZFNlYXJjaEFsbG93RmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuZmlsdGVyc1N1YmplY3QubmV4dCh0aGlzLnVwZGF0ZWRBZHZhbmNlU2VhcmNoRmlsdGVycyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQoW10pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hZHZhbmNlZFNlYXJjaEZpbHRlcnNTdWJqZWN0Lm5leHQodGhpcy51cGRhdGVkQWR2YW5jZVNlYXJjaEZpbHRlcnMpO1xyXG5cclxuICAgIGlmIChldmVudCAmJiAoZXZlbnQua2V5Q29kZSA9PT0gMTMgfHwgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSkge1xyXG4gICAgICB0aGlzLnBlcmZvcm1lZEFkdmFuY2VkU2VhcmNoU3ViamVjdC5uZXh0KFwiYWR2YW5jZWRTZWFyY2hDbGlja2VkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2hhbmdlZCA9IHRydWU7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgZmlsdGVyIGZpZWxkcyBhbmQgbWFrZSBpbnZhbGlkLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtIY2lGaWx0ZXJEdG99IGZpbHRlclxyXG4gICAqL1xyXG4gIGNsZWFyRmlsdGVyKGZpbHRlcjogSGNpRmlsdGVyRHRvKTogdm9pZCB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYm91bmRGaWx0ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmJvdW5kRmlsdGVyc1tpXS5maWVsZCA9PT0gZmlsdGVyLmZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5ib3VuZEZpbHRlcnNbaV0uc2V0VmFsdWUodW5kZWZpbmVkKTtcclxuICAgICAgICB0aGlzLmJvdW5kRmlsdGVyc1tpXS5zZXRWYWxpZChmYWxzZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlcnNTdWJqZWN0Lm5leHQodGhpcy5ib3VuZEZpbHRlcnMpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hTb3J0Q2xpY2tlZCgkZXZlbnQ6IE1vdXNlRXZlbnQsIHNlYXJjaFNvcnRJdGVtOiBhbnkpe1xyXG4gICAgaWYodGhpcy5jdXJyZW50U2VhcmNoU29ydGluZy52YWx1ZSA9PT0gc2VhcmNoU29ydEl0ZW0udmFsdWUpe1xyXG4gICAgICB0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nLmlzQXNjID0gIXRoaXMuY3VycmVudFNlYXJjaFNvcnRpbmcuaXNBc2M7XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFNvcnRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzZWFyY2hTb3J0SXRlbSk7XHJcbiAgICAgIHRoaXMuY3VycmVudFNlYXJjaFNvcnRpbmcuaXNBc2MgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWFyY2hTb3J0aW5nU2VsZWN0aW9uQ2hhbmdlU3ViamVjdCQubmV4dCh0aGlzLmN1cnJlbnRTZWFyY2hTb3J0aW5nKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRPRE86IElmIHNvcnQgaW4gZ3JvdXAsIHJlc2V0IGdyb3VwIGRhdGEsIG5vdCBvdmVyYWxsLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZFxyXG4gICAqL1xyXG4gIHNldFNvcnQoZXZlbnQ6IE1vdXNlRXZlbnQsIGZpZWxkOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnNvcnRzICYmIHRoaXMuc29ydHMubGVuZ3RoID09PSAxICYmIHRoaXMuc29ydHNbMF0uZmllbGQgPT09IGZpZWxkKSB7XHJcbiAgICAgIC8vIFJlZ3VsYXIgYmVoYXZpb3JcclxuICAgIH0gZWxzZSBpZiAodGhpcy5zb3J0cyAmJiB0aGlzLnNvcnRzLmxlbmd0aCA9PT0gMSAmJiAhZXZlbnQuY3RybEtleSAmJiB0aGlzLnNvcnRzWzBdLmZpZWxkICE9PSBmaWVsZCkge1xyXG4gICAgICB0aGlzLnNvcnRzID0gW107XHJcbiAgICB9IGVsc2UgaWYgKCFldmVudC5jdHJsS2V5KSB7XHJcbiAgICAgIHRoaXMuc29ydHMgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5zb3J0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgdGhpcy5zb3J0cy5wdXNoKG5ldyBIY2lTb3J0RHRvKGZpZWxkKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZXhpc3RzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICAgIGlmIChzb3J0LmZpZWxkID09PSBmaWVsZCkge1xyXG4gICAgICAgICAgc29ydC5hc2MgPSAhc29ydC5hc2M7XHJcbiAgICAgICAgICBleGlzdHMgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWV4aXN0cykge1xyXG4gICAgICAgIHRoaXMuc29ydHMucHVzaChuZXcgSGNpU29ydER0byhmaWVsZCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnNvcnRzU3ViamVjdC5uZXh0KHRoaXMuc29ydHMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHNvcnQgZmllbGQgaXMgdXNlZC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSBzb3J0RmllbGRcclxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICAgKi9cclxuICBpc1NvcnQoc29ydEZpZWxkKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBzb3J0IG9mIHRoaXMuc29ydHMpIHtcclxuICAgICAgaWYgKHNvcnQuZmllbGQgPT09IHNvcnRGaWVsZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHNvcnQgZmllbGQgaXMgYXNjZW5kaW5nLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHNvcnRGaWVsZFxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxyXG4gICAqL1xyXG4gIGlzU29ydEFzYyhzb3J0RmllbGQpOiBib29sZWFuIHtcclxuICAgIGZvciAobGV0IHNvcnQgb2YgdGhpcy5zb3J0cykge1xyXG4gICAgICBpZiAoc29ydC5maWVsZCA9PT0gc29ydEZpZWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIHNvcnQuYXNjO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmllbGQgaXMgdGhlIGZpcnN0IHNvcnQgZmllbGQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gc29ydEZpZWxkXHJcbiAgICogQHJldHVybnMge2Jvb2xlYW59XHJcbiAgICovXHJcbiAgaXNGaXJzdFNvcnQoc29ydEZpZWxkKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuc29ydHMgfHwgdGhpcy5zb3J0cy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuc29ydHNbMF0uZmllbGQgPT09IHNvcnRGaWVsZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZSB0aGUgb3B0aW9ucyBwb3BvdXQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge01vdXNlRXZlbnR9IGV2ZW50XHJcbiAgICovXHJcbiAgdG9nZ2xlU2hvd09wdGlvbnMoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuY29nV2hlZWxDbGlja2VkU3ViamVjdCQubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5hbGxvd1RvZ2dsZVN1YmplY3QkLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICBpZiAodmFsID09PSBcImFsbG93VG9nZ2xlXCIpIHtcclxuICAgICAgICB0aGlzLmFsbG93VG9nZ2xlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dUb2dnbGVPcHRpb25zID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodmFsID09PSBcInByZXZlbnRUb2dnbGVcIikge1xyXG4gICAgICAgICAgdGhpcy5hbGxvd1RvZ2dsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zaG93VG9nZ2xlT3B0aW9ucyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSkpO1xyXG5cclxuICAgIGlmICh0aGlzLnNob3dPcHRpb25zICYmIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc2VhcmNoLW9wdGlvbnNcIikuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxyXG4gICAgICAmJiAoISh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiYnV0dG9uLmNhcmQtaGVhZGVyLWJ1dHRvbi5idG4uY2xvc2VhYmxlXCIpLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgdGl0bGU6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcIiNzZWFyY2gtdGl0bGVcIik7XHJcblxyXG4gICAgbGV0IG9wdGlvbnM6IEhUTUxFbGVtZW50ID0gdGl0bGUucXVlcnlTZWxlY3RvcihcIi5zZWFyY2gtb3B0aW9uc1wiKTtcclxuXHJcbiAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKG9wdGlvbnMsIFwibGVmdFwiLCAodGl0bGUub2Zmc2V0TGVmdCArIHRpdGxlLm9mZnNldFdpZHRoKSArIFwicHhcIik7XHJcbiAgICBpZiAoIW9wdGlvbnMuY2xvc2VzdChcIi5kcm9wZG93bi1tZW51XCIpKSB7XHJcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUob3B0aW9ucywgXCJ0b3BcIiwgdGl0bGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgXCJweFwiKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNob3dPcHRpb25zID0gIXRoaXMuc2hvd09wdGlvbnM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUaGlzIGZ1bmN0aW9uIHdvdWxkIG1hdGNoIGEgSGNpRmlsdGVyRHRvIGJ5IGNvbXBhcmluZyBhIHByb3ZpZGVkIGZpZWxkLW5hbWVcclxuICAgKi9cclxuICBnZXRGaWx0ZXJGb3JGaWVsZChmaWVsZE5hbWU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYm91bmRBZHZhbmNlZFNlYXJjaEZpbHRlcnMuZmluZCh4ID0+IHguZmllbGQgPT09IGZpZWxkTmFtZSk7XHJcbiAgfVxyXG5cclxuICBnZXRCYXNpY0ZpbHRlckZvckZpZWxkKGZpZWxkTmFtZTogc3RyaW5nKXtcclxuICAgIHJldHVybiB0aGlzLmJvdW5kRmlsdGVycy5maW5kKHggPT4geC5maWVsZCA9PT0gZmllbGROYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbmVyIGZvciBiYWNrIGJ1dHRvblxyXG4gICAqL1xyXG5cclxuICBiYWNrQnV0dG9uQ2xpY2tlZCgpIHtcclxuICAgIHRoaXMuYmFja0J1dHRvblN1YmplY3QubmV4dCh0aGlzLmJhY2tCdXR0b25TdWJqZWN0KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExpc3RlbiBmb3IgZG9jdW1lbnQgY2xpY2tzLlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtNb3VzZUV2ZW50fSBldmVudFxyXG4gICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldFxyXG4gICAqL1xyXG4gIEBIb3N0TGlzdGVuZXIoXCJkb2N1bWVudDpjbGlja1wiLCBbXCIkZXZlbnRcIiwgXCIkZXZlbnQudGFyZ2V0XCJdKVxyXG4gIGRvY3VtZW50Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQsIHRhcmdldDogSFRNTEVsZW1lbnQpIHtcclxuICAgIGlmICh0aGlzLmFsbG93VG9nZ2xlKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgaWYgKHRhcmdldC5wYXJlbnRFbGVtZW50LmdldEF0dHJpYnV0ZShcImNsYXNzXCIpLmluY2x1ZGVzKFwiY2xvc2VhYmxlXCIpKSB7XHJcbiAgICAgICAgICB0aGlzLnNob3dPcHRpb25zID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnRvZ2dsZVNob3dTdWJqZWN0JC5uZXh0KHRoaXMuc2hvd09wdGlvbnMpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpc0ludmFsaWQoKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgaW52YWxpZCA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yKSB7XHJcbiAgICAgIGxldCBzZWFyY2hTdHJpbmcgPSB0aGlzLmdldFNlYXJjaFN0cmluZyh0aGlzLmdsb2JhbFNlYXJjaCk7XHJcbiAgICAgIGxldCBnbG9iYWxTZWFyY2hTdHJMaXN0OiBzdHJpbmdbXSA9IHNlYXJjaFN0cmluZy5zcGxpdChcIixcIik7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZ2xvYmFsU2VhcmNoU3RyIG9mIGdsb2JhbFNlYXJjaFN0ckxpc3QpIHtcclxuICAgICAgICAgIGlmKCFnbG9iYWxTZWFyY2hTdHIubWF0Y2godGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IpKSB7XHJcbiAgICAgICAgICAgIGludmFsaWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yID09PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLnJlcXVpcmVkICYmIGdsb2JhbFNlYXJjaFN0ckxpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1pblJhbmdlICYmICFpc05hTihOdW1iZXIodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWluUmFuZ2UpKSkge1xyXG4gICAgICAgICAgZm9yIChsZXQgZ2xvYmFsU2VhcmNoU3RyIG9mIGdsb2JhbFNlYXJjaFN0ckxpc3QpIHtcclxuICAgICAgICAgICAgaWYoKCFnbG9iYWxTZWFyY2hTdHIgJiYgTnVtYmVyKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1pblJhbmdlKSA+IDApXHJcbiAgICAgICAgICAgICAgfHwgKGdsb2JhbFNlYXJjaFN0ciAmJiBnbG9iYWxTZWFyY2hTdHIubGVuZ3RoIDwgTnVtYmVyKHRoaXMuZ2xvYmFsU2VhcmNoVmFsaWRhdG9yLm1pblJhbmdlKSkpIHtcclxuICAgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IubWF4UmFuZ2UgJiYgIWlzTmFOKE51bWJlcih0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5tYXhSYW5nZSkpKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBnbG9iYWxTZWFyY2hTdHIgb2YgZ2xvYmFsU2VhcmNoU3RyTGlzdCkge1xyXG4gICAgICAgICAgICBpZihnbG9iYWxTZWFyY2hTdHIgJiYgZ2xvYmFsU2VhcmNoU3RyLmxlbmd0aCA+IE51bWJlcih0aGlzLmdsb2JhbFNlYXJjaFZhbGlkYXRvci5tYXhSYW5nZSkpIHtcclxuICAgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IucGF0dGVybikge1xyXG4gICAgICAgICAgZm9yIChsZXQgZ2xvYmFsU2VhcmNoU3RyIG9mIGdsb2JhbFNlYXJjaFN0ckxpc3QpIHtcclxuICAgICAgICAgICAgaWYgKCFnbG9iYWxTZWFyY2hTdHIubWF0Y2godGhpcy5nbG9iYWxTZWFyY2hWYWxpZGF0b3IucGF0dGVybikpIHtcclxuICAgICAgICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpbnZhbGlkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGludmFsaWQ7XHJcbiAgfVxyXG5cclxuICBnZXRTZWFyY2hTdHJpbmcoc2VhcmNoU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgc2VhcmNoU3RyaW5nID0gc2VhcmNoU3RyaW5nLnJlcGxhY2UoL1xcbi9nLCBcIixcIik7XHJcbiAgICBpZiAoc2VhcmNoU3RyaW5nLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IHN0ckxpc3QgPSBzZWFyY2hTdHJpbmcuc3BsaXQoXCIsXCIpO1xyXG4gICAgICBzZWFyY2hTdHJpbmcgPSBcIlwiO1xyXG4gICAgICBmb3IgKGxldCBzdHIgb2Ygc3RyTGlzdCkge1xyXG4gICAgICAgIHN0ciA9IHN0ci50cmltKCk7XHJcbiAgICAgICAgc2VhcmNoU3RyaW5nID0gc2VhcmNoU3RyaW5nID8gKHN0ciA/IHNlYXJjaFN0cmluZyArIFwiLFwiICsgc3RyIDogc2VhcmNoU3RyaW5nKSA6IHN0cjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzZWFyY2hTdHJpbmc7XHJcbiAgfVxyXG5cclxuICBnZXQgaGFzQWR2YW5jZWRTZWFyY2hWZXJ0aWNhbFNjcm9sbGJhcigpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGRpdlBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhZHZhbmNlZFNlYXJjaC1zY3JvbGwtcGFuZWxcIik7XHJcbiAgICByZXR1cm4gZGl2UGFuZWwuc2Nyb2xsSGVpZ2h0ID4gZGl2UGFuZWwuY2xpZW50SGVpZ2h0O1xyXG4gIH1cclxuXHJcbn1cclxuIl19