@lowcodeunit/applications-flow-common 1.33.287-lets-get-social-ish → 1.33.290-lets-get-social-ish

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.
@@ -6,17 +6,13 @@ import * as i0 from "@angular/core";
6
6
  import * as i1 from "../../services/eac.service";
7
7
  import * as i2 from "@angular/forms";
8
8
  import * as i3 from "../../services/applications-flow.service";
9
- import * as i4 from "@angular/material/card";
10
- import * as i5 from "skeleton-elements/angular";
11
- import * as i6 from "@angular/material/form-field";
12
- import * as i7 from "@angular/material/select";
13
- import * as i8 from "@angular/material/core";
14
- import * as i9 from "@angular/material/icon";
15
- import * as i10 from "@angular/material/button";
16
- import * as i11 from "@lowcodeunit/app-host-common";
17
- import * as i12 from "@angular/common";
18
- import * as i13 from "@angular/material/input";
19
- import * as i14 from "@angular/flex-layout/flex";
9
+ import * as i4 from "skeleton-elements/angular";
10
+ import * as i5 from "@angular/material/form-field";
11
+ import * as i6 from "@angular/material/select";
12
+ import * as i7 from "@angular/material/core";
13
+ import * as i8 from "@angular/material/icon";
14
+ import * as i9 from "@angular/common";
15
+ import * as i10 from "@angular/material/input";
20
16
  export class BuildPipelineFormComponent {
21
17
  constructor(eacSvc, formBuilder, appsFlowSvc) {
22
18
  this.eacSvc = eacSvc;
@@ -214,7 +210,7 @@ export class BuildPipelineFormComponent {
214
210
  }
215
211
  loadProjectHostingDetails() {
216
212
  this.HostingDetails.Loading = true;
217
- this.appsFlowSvc.NewLoadProjectHostingDetails().subscribe((response) => {
213
+ this.appsFlowSvc.LoadProjectHostingDetails().subscribe((response) => {
218
214
  this.HostingDetails = response.Model;
219
215
  // console.log("response: ", response);
220
216
  this.HostingDetails.Loading = false;
@@ -230,10 +226,10 @@ export class BuildPipelineFormComponent {
230
226
  }
231
227
  }
232
228
  BuildPipelineFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BuildPipelineFormComponent, deps: [{ token: i1.EaCService }, { token: i2.FormBuilder }, { token: i3.ApplicationsFlowService }], target: i0.ɵɵFactoryTarget.Component });
233
- BuildPipelineFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BuildPipelineFormComponent, selector: "lcu-build-pipeline-form", inputs: { DevOpsActionLookup: ["devops-action-lookup", "DevOpsActionLookup"], Disabled: ["disabled", "Disabled"], Environment: ["environment", "Environment"], EnvironmentLookup: ["environment-lookup", "EnvironmentLookup"], HostingDetails: ["hosting-details", "HostingDetails"] }, outputs: { ResponseEvent: "response-event" }, ngImport: i0, template: "<form \n class=\"form-card\" \n [formGroup]=\"BuildPipelineFormGroup\" \n (ngSubmit)=\"SubmitBuildPipeline()\"\n>\n <mat-card\n class=\"spread\" \n >\n <mat-card-header>\n <mat-card-title> Build Pipeline </mat-card-title>\n\n <mat-hint>\n Changes made here are reflected for all sources using this\n DevOpsAction\n </mat-hint>\n </mat-card-header>\n\n <mat-card-content>\n\n <ng-container *ngIf=\"HostingDetails?.Loading || State?.Loading\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <ng-container *ngIf=\"SelectedHostingOption?.Inputs\">\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n </ng-container>\n\n <skeleton-block \n *ngIf=\"\"\n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n <ng-container *ngIf=\"!HostingDetails?.Loading && !State?.Loading\">\n\n <!-- <div *ngIf=\"!HostingDetails?.Loading\"> -->\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n formControlName=\"buildPipeline\"\n placeholder=\"Build Pipeline\"\n [disabled]=\"Disabled\"\n (selectionChange)=\"BuildPipelineChanged()\"\n required\n >\n <ng-container\n *ngFor=\"let hostOption of HostingDetails?.HostingOptions; let i = index\"\n >\n <mat-option [value]=\"hostOption.Lookup\">\n {{ hostOption.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n <span *ngIf=\"BuildPipeline == hostOption?.Lookup\">\n {{ hostOption.Description }}\n </span>\n </ng-container>\n </mat-hint>\n </mat-form-field>\n \n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n formControlName=\"devOpsActionName\"\n placeholder=\"Name of DevOps Action\"\n required=\"true\"\n />\n </mat-form-field>\n \n <ng-container *ngFor=\"let input of SelectedHostingOption?.Inputs\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n [formControlName]=\"input.Lookup\"\n [placeholder]=\"input.Placeholder\"\n [required]=\"input.Required\"\n />\n \n <mat-hint>{{ input.Hint }}</mat-hint>\n </mat-form-field>\n </ng-container>\n \n <div *ngIf=\"BuildPipeline == 'npm-release'\">\n <mat-form-field class=\"mat-full-width with-hint padding-bottom-4\">\n <mat-icon matPrefix>security</mat-icon>\n \n <input\n id=\"npm-token\"\n matInput\n type=\"text\"\n formControlName=\"npmToken\"\n placeholder=\"NPM token\"\n [required]=\"!Disabled\"\n style=\"-webkit-text-security: disc;\"\n />\n <mat-hint>\n Securely publish to NPM, provide an NPM Personal Access Token (PAT) with publish access to the organization used for your NPM packages. \n Learn how to create and view access tokens \n <a\n href=\"https://docs.npmjs.com/creating-and-viewing-access-tokens\"\n target=\"_blank\"\n class=\"primary-link\"\n >\n here.\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n <!-- </div> -->\n \n <!-- <div *ngIf=\"HostingDetails?.Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n \n <div class=\"margin-3\">\n <h4 class=\"mat-title\">Loading hosting details</h4>\n </div>\n </div>\n </div> -->\n </ng-container>\n </mat-card-content>\n\n <mat-card-actions fxLayoutAlign=\"center center\">\n\n <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!BuildPipelineFormGroup.valid || !BuildPipelineFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Build Pipeline\n </button>\n <lcu-loader [loading]=\"State?.Loading\"></lcu-loader> \n \n </mat-card-actions>\n </mat-card>\n</form>\n", styles: [".s-block{margin:10px 0;width:100%;height:40px}.primary-link{color:#4a918e;text-decoration:none}\n"], components: [{ type: i4.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i4.MatCardHeader, selector: "mat-card-header" }, { type: i5.SkeletonBlockComponent, selector: "skeleton-block", inputs: ["width", "height", "effect", "borderRadius"] }, { type: i6.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i7.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i8.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i10.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i11.LoaderComponent, selector: "lcu-loader", inputs: ["diameter", "hide-inner", "loading"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i6.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i4.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i13.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i6.MatPrefix, selector: "[matPrefix]" }, { type: i4.MatCardActions, selector: "mat-card-actions", inputs: ["align"], exportAs: ["matCardActions"] }, { type: i14.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i14.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
229
+ BuildPipelineFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.2", type: BuildPipelineFormComponent, selector: "lcu-build-pipeline-form", inputs: { DevOpsActionLookup: ["devops-action-lookup", "DevOpsActionLookup"], Disabled: ["disabled", "Disabled"], Environment: ["environment", "Environment"], EnvironmentLookup: ["environment-lookup", "EnvironmentLookup"], HostingDetails: ["hosting-details", "HostingDetails"] }, outputs: { ResponseEvent: "response-event" }, ngImport: i0, template: "<form \n class=\"form-card\" \n [formGroup]=\"BuildPipelineFormGroup\" \n (ngSubmit)=\"SubmitBuildPipeline()\"\n>\n <!-- <mat-card\n class=\"spread\" \n > -->\n <!-- <mat-card-header>\n <mat-card-title> Build Pipeline </mat-card-title>\n\n <mat-hint>\n Changes made here are reflected for all sources using this\n DevOpsAction\n </mat-hint>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n\n <ng-container *ngIf=\"HostingDetails?.Loading || State?.Loading\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <ng-container *ngIf=\"SelectedHostingOption?.Inputs\">\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n </ng-container>\n\n <skeleton-block \n *ngIf=\"\"\n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n <ng-container *ngIf=\"!HostingDetails?.Loading && !State?.Loading\">\n\n <!-- <div *ngIf=\"!HostingDetails?.Loading\"> -->\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n formControlName=\"buildPipeline\"\n placeholder=\"Build Pipeline\"\n [disabled]=\"Disabled\"\n (selectionChange)=\"BuildPipelineChanged()\"\n required\n >\n <ng-container\n *ngFor=\"let hostOption of HostingDetails?.HostingOptions; let i = index\"\n >\n <mat-option [value]=\"hostOption.Lookup\">\n {{ hostOption.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n <span *ngIf=\"BuildPipeline == hostOption?.Lookup\">\n {{ hostOption.Description }}\n </span>\n </ng-container>\n </mat-hint>\n </mat-form-field>\n \n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n formControlName=\"devOpsActionName\"\n placeholder=\"Name of DevOps Action\"\n required=\"true\"\n />\n </mat-form-field>\n \n <ng-container *ngFor=\"let input of SelectedHostingOption?.Inputs\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n [formControlName]=\"input.Lookup\"\n [placeholder]=\"input.Placeholder\"\n [required]=\"input.Required\"\n />\n \n <mat-hint>{{ input.Hint }}</mat-hint>\n </mat-form-field>\n </ng-container>\n \n <div *ngIf=\"BuildPipeline == 'npm-release'\">\n <mat-form-field class=\"mat-full-width with-hint padding-bottom-4\">\n <mat-icon matPrefix>security</mat-icon>\n \n <input\n id=\"npm-token\"\n matInput\n type=\"text\"\n formControlName=\"npmToken\"\n placeholder=\"NPM token\"\n [required]=\"!Disabled\"\n style=\"-webkit-text-security: disc;\"\n />\n <mat-hint>\n Securely publish to NPM, provide an NPM Personal Access Token (PAT) with publish access to the organization used for your NPM packages. \n Learn how to create and view access tokens \n <a\n href=\"https://docs.npmjs.com/creating-and-viewing-access-tokens\"\n target=\"_blank\"\n class=\"primary-link\"\n >\n here.\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n <!-- </div> -->\n \n <!-- <div *ngIf=\"HostingDetails?.Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n \n <div class=\"margin-3\">\n <h4 class=\"mat-title\">Loading hosting details</h4>\n </div>\n </div>\n </div> -->\n </ng-container>\n <!-- </mat-card-content> -->\n\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!BuildPipelineFormGroup.valid || !BuildPipelineFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Build Pipeline\n </button> -->\n <!-- <lcu-loader [loading]=\"State?.Loading\"></lcu-loader> -->\n \n <!-- </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>\n", styles: [".s-block{margin:10px 0;width:100%;height:40px}.primary-link{color:#4a918e;text-decoration:none}\n"], components: [{ type: i4.SkeletonBlockComponent, selector: "skeleton-block", inputs: ["width", "height", "effect", "borderRadius"] }, { type: i5.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { type: i6.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i5.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { type: i10.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i5.MatPrefix, selector: "[matPrefix]" }] });
234
230
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImport: i0, type: BuildPipelineFormComponent, decorators: [{
235
231
  type: Component,
236
- args: [{ selector: 'lcu-build-pipeline-form', template: "<form \n class=\"form-card\" \n [formGroup]=\"BuildPipelineFormGroup\" \n (ngSubmit)=\"SubmitBuildPipeline()\"\n>\n <mat-card\n class=\"spread\" \n >\n <mat-card-header>\n <mat-card-title> Build Pipeline </mat-card-title>\n\n <mat-hint>\n Changes made here are reflected for all sources using this\n DevOpsAction\n </mat-hint>\n </mat-card-header>\n\n <mat-card-content>\n\n <ng-container *ngIf=\"HostingDetails?.Loading || State?.Loading\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <ng-container *ngIf=\"SelectedHostingOption?.Inputs\">\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n </ng-container>\n\n <skeleton-block \n *ngIf=\"\"\n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n <ng-container *ngIf=\"!HostingDetails?.Loading && !State?.Loading\">\n\n <!-- <div *ngIf=\"!HostingDetails?.Loading\"> -->\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n formControlName=\"buildPipeline\"\n placeholder=\"Build Pipeline\"\n [disabled]=\"Disabled\"\n (selectionChange)=\"BuildPipelineChanged()\"\n required\n >\n <ng-container\n *ngFor=\"let hostOption of HostingDetails?.HostingOptions; let i = index\"\n >\n <mat-option [value]=\"hostOption.Lookup\">\n {{ hostOption.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n <span *ngIf=\"BuildPipeline == hostOption?.Lookup\">\n {{ hostOption.Description }}\n </span>\n </ng-container>\n </mat-hint>\n </mat-form-field>\n \n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n formControlName=\"devOpsActionName\"\n placeholder=\"Name of DevOps Action\"\n required=\"true\"\n />\n </mat-form-field>\n \n <ng-container *ngFor=\"let input of SelectedHostingOption?.Inputs\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n [formControlName]=\"input.Lookup\"\n [placeholder]=\"input.Placeholder\"\n [required]=\"input.Required\"\n />\n \n <mat-hint>{{ input.Hint }}</mat-hint>\n </mat-form-field>\n </ng-container>\n \n <div *ngIf=\"BuildPipeline == 'npm-release'\">\n <mat-form-field class=\"mat-full-width with-hint padding-bottom-4\">\n <mat-icon matPrefix>security</mat-icon>\n \n <input\n id=\"npm-token\"\n matInput\n type=\"text\"\n formControlName=\"npmToken\"\n placeholder=\"NPM token\"\n [required]=\"!Disabled\"\n style=\"-webkit-text-security: disc;\"\n />\n <mat-hint>\n Securely publish to NPM, provide an NPM Personal Access Token (PAT) with publish access to the organization used for your NPM packages. \n Learn how to create and view access tokens \n <a\n href=\"https://docs.npmjs.com/creating-and-viewing-access-tokens\"\n target=\"_blank\"\n class=\"primary-link\"\n >\n here.\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n <!-- </div> -->\n \n <!-- <div *ngIf=\"HostingDetails?.Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n \n <div class=\"margin-3\">\n <h4 class=\"mat-title\">Loading hosting details</h4>\n </div>\n </div>\n </div> -->\n </ng-container>\n </mat-card-content>\n\n <mat-card-actions fxLayoutAlign=\"center center\">\n\n <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!BuildPipelineFormGroup.valid || !BuildPipelineFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Build Pipeline\n </button>\n <lcu-loader [loading]=\"State?.Loading\"></lcu-loader> \n \n </mat-card-actions>\n </mat-card>\n</form>\n", styles: [".s-block{margin:10px 0;width:100%;height:40px}.primary-link{color:#4a918e;text-decoration:none}\n"] }]
232
+ args: [{ selector: 'lcu-build-pipeline-form', template: "<form \n class=\"form-card\" \n [formGroup]=\"BuildPipelineFormGroup\" \n (ngSubmit)=\"SubmitBuildPipeline()\"\n>\n <!-- <mat-card\n class=\"spread\" \n > -->\n <!-- <mat-card-header>\n <mat-card-title> Build Pipeline </mat-card-title>\n\n <mat-hint>\n Changes made here are reflected for all sources using this\n DevOpsAction\n </mat-hint>\n </mat-card-header> -->\n\n <!-- <mat-card-content> -->\n\n <ng-container *ngIf=\"HostingDetails?.Loading || State?.Loading\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n <ng-container *ngIf=\"SelectedHostingOption?.Inputs\">\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n\n <skeleton-block \n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n </ng-container>\n\n <skeleton-block \n *ngIf=\"\"\n class=\"s-block\"\n effect=\"wave\" \n ></skeleton-block>\n\n </ng-container>\n\n <ng-container *ngIf=\"!HostingDetails?.Loading && !State?.Loading\">\n\n <!-- <div *ngIf=\"!HostingDetails?.Loading\"> -->\n <mat-form-field class=\"mat-full-width\">\n <mat-select\n formControlName=\"buildPipeline\"\n placeholder=\"Build Pipeline\"\n [disabled]=\"Disabled\"\n (selectionChange)=\"BuildPipelineChanged()\"\n required\n >\n <ng-container\n *ngFor=\"let hostOption of HostingDetails?.HostingOptions; let i = index\"\n >\n <mat-option [value]=\"hostOption.Lookup\">\n {{ hostOption.Name }}\n </mat-option>\n </ng-container>\n </mat-select>\n \n <mat-hint>\n <ng-container *ngFor=\"let hostOption of HostingDetails?.HostingOptions\">\n <span *ngIf=\"BuildPipeline == hostOption?.Lookup\">\n {{ hostOption.Description }}\n </span>\n </ng-container>\n </mat-hint>\n </mat-form-field>\n \n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n formControlName=\"devOpsActionName\"\n placeholder=\"Name of DevOps Action\"\n required=\"true\"\n />\n </mat-form-field>\n \n <ng-container *ngFor=\"let input of SelectedHostingOption?.Inputs\">\n <mat-form-field class=\"mat-full-width\">\n <input\n matInput\n [formControlName]=\"input.Lookup\"\n [placeholder]=\"input.Placeholder\"\n [required]=\"input.Required\"\n />\n \n <mat-hint>{{ input.Hint }}</mat-hint>\n </mat-form-field>\n </ng-container>\n \n <div *ngIf=\"BuildPipeline == 'npm-release'\">\n <mat-form-field class=\"mat-full-width with-hint padding-bottom-4\">\n <mat-icon matPrefix>security</mat-icon>\n \n <input\n id=\"npm-token\"\n matInput\n type=\"text\"\n formControlName=\"npmToken\"\n placeholder=\"NPM token\"\n [required]=\"!Disabled\"\n style=\"-webkit-text-security: disc;\"\n />\n <mat-hint>\n Securely publish to NPM, provide an NPM Personal Access Token (PAT) with publish access to the organization used for your NPM packages. \n Learn how to create and view access tokens \n <a\n href=\"https://docs.npmjs.com/creating-and-viewing-access-tokens\"\n target=\"_blank\"\n class=\"primary-link\"\n >\n here.\n </a>\n </mat-hint>\n </mat-form-field>\n </div>\n <!-- </div> -->\n \n <!-- <div *ngIf=\"HostingDetails?.Loading\">\n <div class=\"spread\">\n <lcu-loader style=\"margin: auto\" [loading]=\"true\"></lcu-loader>\n \n <div class=\"margin-3\">\n <h4 class=\"mat-title\">Loading hosting details</h4>\n </div>\n </div>\n </div> -->\n </ng-container>\n <!-- </mat-card-content> -->\n\n <!-- <mat-card-actions fxLayoutAlign=\"center center\"> -->\n\n <!-- <button \n *ngIf=\"!State?.Loading\"\n mat-raised-button \n type=\"submit\" \n fxFlex=\"100%\" \n color=\"primary\" \n [disabled]=\"!BuildPipelineFormGroup.valid || !BuildPipelineFormGroup.dirty\">\n <mat-icon>save</mat-icon>\n Save Build Pipeline\n </button> -->\n <!-- <lcu-loader [loading]=\"State?.Loading\"></lcu-loader> -->\n \n <!-- </mat-card-actions> -->\n <!-- </mat-card> -->\n</form>\n", styles: [".s-block{margin:10px 0;width:100%;height:40px}.primary-link{color:#4a918e;text-decoration:none}\n"] }]
237
233
  }], ctorParameters: function () { return [{ type: i1.EaCService }, { type: i2.FormBuilder }, { type: i3.ApplicationsFlowService }]; }, propDecorators: { DevOpsActionLookup: [{
238
234
  type: Input,
239
235
  args: ['devops-action-lookup']
@@ -253,4 +249,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.2", ngImpor
253
249
  type: Output,
254
250
  args: ['response-event']
255
251
  }] } });
256
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtcGlwZWxpbmUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9jb250cm9scy9idWlsZC1waXBlbGluZS1mb3JtL2J1aWxkLXBpcGVsaW5lLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvY29udHJvbHMvYnVpbGQtcGlwZWxpbmUtZm9ybS9idWlsZC1waXBlbGluZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUlMLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBdUIsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBWXhELE9BQU8sRUFFTCxxQkFBcUIsR0FFdEIsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQU83QyxNQUFNLE9BQU8sMEJBQTBCO0lBZ0dyQyxZQUNZLE1BQWtCLEVBQ2xCLFdBQXdCLEVBQ3hCLFdBQW9DO1FBRnBDLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDbEIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZ0JBQVcsR0FBWCxXQUFXLENBQXlCO1FBRTlDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxxQkFBcUIsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxZQUFZLENBQUM7SUFDeEMsQ0FBQztJQWhGRCxJQUFXLFFBQVE7UUFDakIsK0VBQStFO1FBQy9FLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLGNB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RyxFQUFFLEVBQUU7WUFDTixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdEMsQ0FBQyxDQUNGLENBQUM7UUFDRix5REFBeUQ7SUFDM0QsQ0FBQzs7dUhBdFVVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLHFZQzlCdkMsdTBLQStKQTsyRkRqSWEsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLHlCQUF5QjtpS0FXNUIsa0JBQWtCO3NCQUR4QixLQUFLO3VCQUFDLHNCQUFzQjtnQkFJdEIsUUFBUTtzQkFEZCxLQUFLO3VCQUFDLFVBQVU7Z0JBSVYsV0FBVztzQkFEakIsS0FBSzt1QkFBQyxhQUFhO2dCQUliLGlCQUFpQjtzQkFEdkIsS0FBSzt1QkFBQyxvQkFBb0I7Z0JBSXBCLGNBQWM7c0JBRHBCLEtBQUs7dUJBQUMsaUJBQWlCO2dCQUlqQixhQUFhO3NCQURuQixNQUFNO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUJ1aWxkZXIsXG4gIEZvcm1Hcm91cCxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmFzZU1vZGVsZWRSZXNwb25zZSwgR3VpZCB9IGZyb20gJ0BsY3UvY29tbW9uJztcbmltcG9ydCB7XG4gIEVhQ0FydGlmYWN0LFxuICBFYUNEZXZPcHNBY3Rpb24sXG4gIEVhQ0Vudmlyb25tZW50QXNDb2RlLFxuICBFYUNTb3VyY2VDb250cm9sLFxufSBmcm9tICdAc2VtYW50aWNqcy9jb21tb24nO1xuaW1wb3J0IHsgQXBwbGljYXRpb25zRmxvd1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHBsaWNhdGlvbnMtZmxvdy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEVhQ1NlcnZpY2UsXG4gIFNhdmVFbnZpcm9ubWVudEFzQ29kZUV2ZW50UmVxdWVzdCxcbn0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWFjLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25zRmxvd1N0YXRlLFxuICBQcm9qZWN0SG9zdGluZ0RldGFpbHMsXG4gIFByb2plY3RIb3N0aW5nT3B0aW9uLFxufSBmcm9tICcuLi8uLi9zdGF0ZS9hcHBsaWNhdGlvbnMtZmxvdy5zdGF0ZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xjdS1idWlsZC1waXBlbGluZS1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2J1aWxkLXBpcGVsaW5lLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9idWlsZC1waXBlbGluZS1mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEJ1aWxkUGlwZWxpbmVGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLy9QUk9QRVJUSUVTXG5cbiAgLy8gQElucHV0KCdidWlsZC1waXBlbGluZScpXG4gIHB1YmxpYyBCdWlsZFBpcGVsaW5lOiBzdHJpbmc7XG5cbiAgQElucHV0KCdkZXZvcHMtYWN0aW9uLWxvb2t1cCcpXG4gIHB1YmxpYyBEZXZPcHNBY3Rpb25Mb29rdXA6IHN0cmluZztcblxuICBASW5wdXQoJ2Rpc2FibGVkJylcbiAgcHVibGljIERpc2FibGVkOiBib29sZWFuO1xuXG4gIEBJbnB1dCgnZW52aXJvbm1lbnQnKVxuICBwdWJsaWMgRW52aXJvbm1lbnQ6IEVhQ0Vudmlyb25tZW50QXNDb2RlO1xuXG4gIEBJbnB1dCgnZW52aXJvbm1lbnQtbG9va3VwJylcbiAgcHVibGljIEVudmlyb25tZW50TG9va3VwOiBzdHJpbmc7XG5cbiAgQElucHV0KCdob3N0aW5nLWRldGFpbHMnKVxuICBwdWJsaWMgSG9zdGluZ0RldGFpbHM6IFByb2plY3RIb3N0aW5nRGV0YWlscztcblxuICBAT3V0cHV0KCdyZXNwb25zZS1ldmVudCcpXG4gIHB1YmxpYyBSZXNwb25zZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcblxuICBwdWJsaWMgZ2V0IEFydGlmYWN0KCk6IEVhQ0FydGlmYWN0IHtcbiAgICAvLyBjb25zb2xlLmxvZyhcIkFSVElGQUNUOiBcIiwgdGhpcy5FbnZpcm9ubWVudD8uQXJ0aWZhY3RzW3RoaXMuQXJ0aWZhY3RMb29rdXBdKTtcbiAgICByZXR1cm4gdGhpcy5FbnZpcm9ubWVudD8uQXJ0aWZhY3RzICYmIHRoaXMuQXJ0aWZhY3RMb29rdXBcbiAgICAgID8gdGhpcy5FbnZpcm9ubWVudD8uQXJ0aWZhY3RzW3RoaXMuQXJ0aWZhY3RMb29rdXBdIHx8IHt9XG4gICAgICA6IHt9O1xuICB9XG5cbiAgcHVibGljIGdldCBBcnRpZmFjdExvb2t1cCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGFydExvb2t1cCA9IHRoaXMuRGV2T3BzQWN0aW9uPy5BcnRpZmFjdExvb2t1cHNcbiAgICAgID8gdGhpcy5EZXZPcHNBY3Rpb24/LkFydGlmYWN0TG9va3Vwc1swXVxuICAgICAgOiBudWxsO1xuXG4gICAgcmV0dXJuIGFydExvb2t1cDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgQnVpbGRQaXBlbGluZUZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cD8uZ2V0KCdidWlsZFBpcGVsaW5lJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IERldk9wc0FjdGlvbigpOiBFYUNEZXZPcHNBY3Rpb24ge1xuICAgIHJldHVybiB0aGlzLkVudmlyb25tZW50LkRldk9wc0FjdGlvbnMgJiYgdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXBcbiAgICAgID8gdGhpcy5FbnZpcm9ubWVudC5EZXZPcHNBY3Rpb25zW3RoaXMuRGV2T3BzQWN0aW9uTG9va3VwXSB8fCB7fVxuICAgICAgOiB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRGV2T3BzQWN0aW9ucygpOiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ0Rldk9wc0FjdGlvbiB9IHtcbiAgICByZXR1cm4gdGhpcy5FbnZpcm9ubWVudC5EZXZPcHNBY3Rpb25zIHx8IHt9O1xuICB9XG5cbiAgcHVibGljIGdldCBEZXZPcHNBY3Rpb25OYW1lRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmdldCgnZGV2T3BzQWN0aW9uTmFtZScpO1xuICB9XG5cbiAgcHVibGljIGdldCBOUE1Ub2tlbkZvcm1Db250cm9sKCk6IEFic3RyYWN0Q29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5nZXQoJ25wbVRva2VuJyk7XG4gIH1cblxuICAvLyAoaG8pID0+IGhvLkxvb2t1cCA9PT0gdGhpcy5CdWlsZFBpcGVsaW5lXG4gIHB1YmxpYyBnZXQgU2VsZWN0ZWRIb3N0aW5nT3B0aW9uKCk6IFByb2plY3RIb3N0aW5nT3B0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5Ib3N0aW5nRGV0YWlscz8uSG9zdGluZ09wdGlvbnM/LmZpbmQoXG4gICAgICAoaG8pID0+IGhvLkxvb2t1cCA9PT0gdGhpcy5CdWlsZFBpcGVsaW5lXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU2VsZWN0ZWRIb3N0aW5nT3B0aW9uSW5wdXRDb250cm9sVmFsdWVzKCk6IHtcbiAgICBbbG9va3VwOiBzdHJpbmddOiBhbnk7XG4gIH0ge1xuICAgIHJldHVybiB0aGlzLlNlbGVjdGVkSG9zdGluZ09wdGlvbj8uSW5wdXRzPy5yZWR1Y2UoKHByZXYsIGN1cikgPT4ge1xuICAgICAgY29uc3QgcmVzID0ge1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgfTtcblxuICAgICAgcmVzW2N1ci5Mb29rdXBdID0gdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmNvbnRyb2xzW2N1ci5Mb29rdXBdLnZhbHVlO1xuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU291cmNlQ29udHJvbExvb2t1cHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuU291cmNlQ29udHJvbHMgfHwge30pO1xuICB9XG5cbiAgcHVibGljIGdldCBTb3VyY2VDb250cm9scygpOiB7IFtsb29rdXA6IHN0cmluZ106IEVhQ1NvdXJjZUNvbnRyb2wgfSB7XG4gICAgcmV0dXJuIHRoaXMuRW52aXJvbm1lbnQuU291cmNlcyB8fCB7fTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgU3RhdGUoKTogQXBwbGljYXRpb25zRmxvd1N0YXRle1xuICAgIHJldHVybiB0aGlzLmVhY1N2Yy5TdGF0ZTtcbiAgfVxuXG4gIHB1YmxpYyBCdWlsZFBpcGVsaW5lRm9ybUdyb3VwOiBGb3JtR3JvdXA7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGVhY1N2YzogRWFDU2VydmljZSxcbiAgICBwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByb3RlY3RlZCBhcHBzRmxvd1N2YzogQXBwbGljYXRpb25zRmxvd1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuSG9zdGluZ0RldGFpbHMgPSBuZXcgUHJvamVjdEhvc3RpbmdEZXRhaWxzKCk7XG4gICAgdGhpcy5SZXNwb25zZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAvLyBjb25zb2xlLmxvZygnQnVpbGRQaXBlbGluZSA9ICcsIHRoaXMuQnVpbGRQaXBlbGluZSlcblxuICAgIC8vIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe30pO1xuXG4gICAgLy8gaWYgKHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cCAhPSBudWxsKSB7XG4gICAgLy8gICB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgnaG9zdGluZ0RldGFpbHMnKTtcbiAgICAvLyB9XG5cbiAgICAvLyB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAvLyAgICdob3N0aW5nRGV0YWlscycsXG4gICAgdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICAvLyBidWlsZFBpcGVsaW5lOiBbdGhpcy5CdWlsZFBpcGVsaW5lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF1dLFxuICAgIH0pO1xuICAgIC8vICk7XG5cbiAgICB0aGlzLmxvYWRQcm9qZWN0SG9zdGluZ0RldGFpbHMoKTtcbiAgICAvLyB0aGlzLnNldHVwQ29udHJvbHNGb3JGb3JtKCk7XG4gIH1cblxuICAvL0FQSSBNRVRIT0RTXG5cbiAgcHVibGljIEJ1aWxkUGlwZWxpbmVDaGFuZ2VkKCk6IHZvaWQge1xuICAgIC8vZm9yIHNvbWUgcmVhc29uIHRoaXMgdmFsdWUgaXMgY29taW5nIGJhY2sgdW5kZWZpbmVkXG4gICAgLy8gY29uc29sZS5sb2coXCJidWlsZCBwaXBlbGluZSB2YWx1ZTogXCIsIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Db250cm9sPy52YWx1ZSlcbiAgICB0aGlzLkJ1aWxkUGlwZWxpbmUgPSB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtQ29udHJvbD8udmFsdWU7XG5cbiAgICB0aGlzLnNldHVwQ29udHJvbHNGb3JGb3JtKCk7XG4gIH1cblxuICBwdWJsaWMgU3VibWl0QnVpbGRQaXBlbGluZSgpIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInN1Ym1pdHRpbmcgYnVpbGQgcGlwZWxpbmU6IFwiLCB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAudmFsdWUpO1xuICAgIHRoaXMuU2F2ZUVudmlyb25tZW50KCk7XG4gIH1cblxuICBwdWJsaWMgU2F2ZUVudmlyb25tZW50KCk6IHZvaWQge1xuICAgIGNvbnN0IHNhdmVFbnZSZXE6IFNhdmVFbnZpcm9ubWVudEFzQ29kZUV2ZW50UmVxdWVzdCA9IHtcbiAgICAgIEVudmlyb25tZW50OiB7XG4gICAgICAgIC4uLnRoaXMuRW52aXJvbm1lbnQsXG4gICAgICAgIEFydGlmYWN0czogdGhpcy5FbnZpcm9ubWVudC5BcnRpZmFjdHMgfHwge30sXG4gICAgICAgIERldk9wc0FjdGlvbnM6IHRoaXMuRW52aXJvbm1lbnQuRGV2T3BzQWN0aW9ucyB8fCB7fSxcbiAgICAgICAgU2VjcmV0czogdGhpcy5FbnZpcm9ubWVudC5TZWNyZXRzIHx8IHt9LFxuICAgICAgICBTb3VyY2VzOiB0aGlzLkVudmlyb25tZW50LlNvdXJjZXMgfHwge30sXG4gICAgICB9LFxuICAgICAgRW52aXJvbm1lbnRMb29rdXA6IHRoaXMuRW52aXJvbm1lbnRMb29rdXAsXG4gICAgICBFbnRlcnByaXNlRGF0YVRva2Vuczoge30sXG4gICAgfTtcblxuICAgIGxldCBhcnRpZmFjdExvb2t1cDogc3RyaW5nO1xuXG4gICAgbGV0IGFydGlmYWN0OiBFYUNBcnRpZmFjdCA9IHtcbiAgICAgIC4uLnRoaXMuQXJ0aWZhY3QsXG4gICAgICAuLi50aGlzLlNlbGVjdGVkSG9zdGluZ09wdGlvbklucHV0Q29udHJvbFZhbHVlcyxcbiAgICB9O1xuXG4gICAgaWYgKCF0aGlzLkFydGlmYWN0TG9va3VwKSB7XG4gICAgICBhcnRpZmFjdExvb2t1cCA9IEd1aWQuQ3JlYXRlUmF3KCk7XG5cbiAgICAgIGFydGlmYWN0ID0ge1xuICAgICAgICAuLi5hcnRpZmFjdCxcbiAgICAgICAgVHlwZTogdGhpcy5TZWxlY3RlZEhvc3RpbmdPcHRpb24uQXJ0aWZhY3RUeXBlLFxuICAgICAgICBOYW1lOiB0aGlzLlNlbGVjdGVkSG9zdGluZ09wdGlvbi5OYW1lLFxuICAgICAgICBOUE1SZWdpc3RyeTogJ2h0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLycsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBhcnRpZmFjdExvb2t1cCA9IHRoaXMuQXJ0aWZhY3RMb29rdXA7XG4gICAgfVxuXG4gICAgc2F2ZUVudlJlcS5FbnZpcm9ubWVudC5BcnRpZmFjdHNbYXJ0aWZhY3RMb29rdXBdID0gYXJ0aWZhY3Q7XG5cbiAgICBsZXQgZGV2T3BzQWN0aW9uTG9va3VwOiBzdHJpbmc7XG5cbiAgICBpZiAoIXRoaXMuRGV2T3BzQWN0aW9uTG9va3VwKSB7XG4gICAgICBkZXZPcHNBY3Rpb25Mb29rdXAgPSBHdWlkLkNyZWF0ZVJhdygpO1xuXG4gICAgICBjb25zdCBkb2E6IEVhQ0Rldk9wc0FjdGlvbiA9IHtcbiAgICAgICAgLi4udGhpcy5EZXZPcHNBY3Rpb24sXG4gICAgICAgIEFydGlmYWN0TG9va3VwczogW2FydGlmYWN0TG9va3VwXSxcbiAgICAgICAgTmFtZTogdGhpcy5EZXZPcHNBY3Rpb25OYW1lRm9ybUNvbnRyb2wudmFsdWUsXG4gICAgICAgIFBhdGg6IHRoaXMuU2VsZWN0ZWRIb3N0aW5nT3B0aW9uLlBhdGgsXG4gICAgICAgIFRlbXBsYXRlczogdGhpcy5TZWxlY3RlZEhvc3RpbmdPcHRpb24uVGVtcGxhdGVzLFxuICAgICAgfTtcblxuICAgICAgaWYgKHRoaXMuTlBNVG9rZW5Gb3JtQ29udHJvbD8udmFsdWUpIHtcbiAgICAgICAgY29uc3Qgc2VjcmV0TG9va3VwID0gJ25wbS1hY2Nlc3MtdG9rZW4nO1xuXG4gICAgICAgIGRvYS5TZWNyZXRMb29rdXBzID0gW3NlY3JldExvb2t1cF07XG5cbiAgICAgICAgc2F2ZUVudlJlcS5FbnZpcm9ubWVudC5TZWNyZXRzW3NlY3JldExvb2t1cF0gPSB7XG4gICAgICAgICAgTmFtZTogJ05QTSBBY2Nlc3MgVG9rZW4nLFxuICAgICAgICAgIERhdGFUb2tlbkxvb2t1cDogc2VjcmV0TG9va3VwLFxuICAgICAgICAgIEtub3duQXM6ICdOUE1fVE9LRU4nLFxuICAgICAgICB9O1xuXG4gICAgICAgIHNhdmVFbnZSZXEuRW50ZXJwcmlzZURhdGFUb2tlbnNbc2VjcmV0TG9va3VwXSA9IHtcbiAgICAgICAgICBOYW1lOiBzYXZlRW52UmVxLkVudmlyb25tZW50LlNlY3JldHNbc2VjcmV0TG9va3VwXS5OYW1lLFxuICAgICAgICAgIERlc2NyaXB0aW9uOiBzYXZlRW52UmVxLkVudmlyb25tZW50LlNlY3JldHNbc2VjcmV0TG9va3VwXS5OYW1lLFxuICAgICAgICAgIFZhbHVlOiB0aGlzLk5QTVRva2VuRm9ybUNvbnRyb2wudmFsdWUsXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHNhdmVFbnZSZXEuRW52aXJvbm1lbnQuRGV2T3BzQWN0aW9uc1tkZXZPcHNBY3Rpb25Mb29rdXBdID0gZG9hO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZXZPcHNBY3Rpb25Mb29rdXAgPSB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cDtcblxuICAgICAgY29uc3QgZG9hOiBFYUNEZXZPcHNBY3Rpb24gPSB7XG4gICAgICAgIC4uLnRoaXMuRGV2T3BzQWN0aW9uLFxuICAgICAgICBOYW1lOiB0aGlzLkRldk9wc0FjdGlvbk5hbWVGb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgIH07XG5cbiAgICAgIHNhdmVFbnZSZXEuRW52aXJvbm1lbnQuRGV2T3BzQWN0aW9uc1tkZXZPcHNBY3Rpb25Mb29rdXBdID0gZG9hO1xuICAgIH1cblxuICAgIFxuICAgIHRoaXMuZWFjU3ZjLlNhdmVFbnZpcm9ubWVudEFzQ29kZShzYXZlRW52UmVxKS50aGVuKHJlcyA9PntcbiAgICAgIHRoaXMuUmVzcG9uc2VFdmVudC5lbWl0KHJlcyk7XG4gICAgfSk7XG4gICAgXG4gIH1cblxuICAvLyAgSGVscGVyc1xuICBwcm90ZWN0ZWQgc2V0dXBDb250cm9sc0ZvckZvcm0oKTogdm9pZCB7XG4gICAgLy8gdGhpcy5CdWlsZFBpcGVsaW5lID1cbiAgICAvLyAgICAgICAgIHRoaXMuQnVpbGRQaXBlbGluZSB8fCB0aGlzLkhvc3RpbmdEZXRhaWxzPy5Ib3N0aW5nT3B0aW9uc1xuICAgIC8vICAgICAgICAgICA/IHRoaXMuSG9zdGluZ0RldGFpbHM/Lkhvc3RpbmdPcHRpb25zWzBdPy5Mb29rdXBcbiAgICAvLyAgICAgICAgICAgOiAnJztcblxuICAgIC8vIGNvbnNvbGUubG9nKFwiaG9zdGluZyBkZXRhaWxzOiBcIiwgdGhpcy5Ib3N0aW5nRGV0YWlscylcblxuICAgIGZvciAoY29uc3QgY3RybE5hbWUgaW4gdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmNvbnRyb2xzKSB7XG4gICAgICAvL2Rldk9wc0FjdGlvbiBkb2Vzbid0IGV4aXN0XG4gICAgICAvL3JlbW92ZXMgaG9zdGluZyBkZXRhaWxzXG4gICAgICBpZiAoY3RybE5hbWUgIT09ICdidWlsZFBpcGVsaW5lJyAmJiBjdHJsTmFtZSAhPT0gJ2Rldk9wc0FjdGlvbicpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZW1vdmluZyBjb250cm9sOiBcIiwgY3RybE5hbWUpXG4gICAgICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5yZW1vdmVDb250cm9sKGN0cmxOYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdidWlsZFBpcGVsaW5lJyxcbiAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgICAgdGhpcy5CdWlsZFBpcGVsaW5lIHx8ICcnLFxuICAgICAgICBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgIClcbiAgICAgICk7XG5cbiAgICB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAuYWRkQ29udHJvbChcbiAgICAgICdkZXZPcHNBY3Rpb25OYW1lJyxcbiAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgICAgdGhpcy5EZXZPcHNBY3Rpb24/Lk5hbWUgfHwgdGhpcy5TZWxlY3RlZEhvc3RpbmdPcHRpb24/Lk5hbWUgfHwgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcInNlbGVjdGVkIGhvc3Rpbmcgb3B0aW9uczogXCIsIHRoaXMuU2VsZWN0ZWRIb3N0aW5nT3B0aW9uLklucHV0cyk7XG5cbiAgICB0aGlzLlNlbGVjdGVkSG9zdGluZ09wdGlvbj8uSW5wdXRzPy5mb3JFYWNoKChpbnB1dCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdG9ycyA9IGlucHV0LlJlcXVpcmVkID8gW1ZhbGlkYXRvcnMucmVxdWlyZWRdIDogW107XG5cbiAgICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgICBpbnB1dC5Mb29rdXAsXG4gICAgICAgIHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChcbiAgICAgICAgICB0aGlzLkFydGlmYWN0W2lucHV0Lkxvb2t1cF0gfHwgaW5wdXQuRGVmYXVsdFZhbHVlIHx8ICcnLFxuICAgICAgICAgIHZhbGlkYXRvcnNcbiAgICAgICAgKVxuICAgICAgKTtcblxuICAgICAgLy8gaWYgKHRoaXMuRGlzYWJsZWQpIHtcbiAgICAgIC8vICAgdGhpcy5Gb3JtR3JvdXAuY29udHJvbHNbaW5wdXQuTG9va3VwXS5kaXNhYmxlKCk7XG4gICAgICAvLyB9XG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5CdWlsZFBpcGVsaW5lRm9ybUNvbnRyb2w/LnZhbHVlID09PSAnbnBtLXJlbGVhc2UnKSB7XG4gICAgICBjb25zb2xlLmxvZyhcIm5wbSByZWxlYXNlXCIpXG4gICAgICBpZiAoIXRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cD8uY29udHJvbHM/Lm5wbVRva2VuKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwibnBtIHRva2VuIGlmXCIpXG4gICAgICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgICAgICducG1Ub2tlbicsXG4gICAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICB0aGlzLkRpc2FibGVkID8gW10gOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMuRGlzYWJsZWQpIHtcbiAgICAgICAgICB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAuY29udHJvbHMubnBtVG9rZW4uZGlzYWJsZSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Db250cm9sPy52YWx1ZSA9PT0gJ2dpdGh1Yi1hcnRpZmFjdHMtcmVsZWFzZSdcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXA/LmNvbnRyb2xzPy5ucG1Ub2tlbikge1xuICAgICAgICB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAucmVtb3ZlQ29udHJvbCgnbnBtVG9rZW4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbG9hZFByb2plY3RIb3N0aW5nRGV0YWlscygpOiB2b2lkIHtcbiAgICB0aGlzLkhvc3RpbmdEZXRhaWxzLkxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuYXBwc0Zsb3dTdmMuTmV3TG9hZFByb2plY3RIb3N0aW5nRGV0YWlscygpLnN1YnNjcmliZShcbiAgICAgIChyZXNwb25zZTogQmFzZU1vZGVsZWRSZXNwb25zZTxQcm9qZWN0SG9zdGluZ0RldGFpbHM+KSA9PiB7XG4gICAgICAgIHRoaXMuSG9zdGluZ0RldGFpbHMgPSByZXNwb25zZS5Nb2RlbDtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZXNwb25zZTogXCIsIHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5Ib3N0aW5nRGV0YWlscy5Mb2FkaW5nID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgaG9zdE9wdGlvbiA9IHRoaXMuSG9zdGluZ0RldGFpbHM/Lkhvc3RpbmdPcHRpb25zPy5maW5kKFxuICAgICAgICAgIChobykgPT4gaG8uUGF0aCA9PT0gdGhpcy5EZXZPcHNBY3Rpb24uUGF0aFxuICAgICAgICApO1xuICAgICAgICB0aGlzLkJ1aWxkUGlwZWxpbmUgPSBob3N0T3B0aW9uPy5Mb29rdXA7XG5cbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJCdWlsZCBQaXBlbGluZSBIRVJFPSBcIiwgdGhpcy5CdWlsZFBpcGVsaW5lKTtcblxuICAgICAgICB0aGlzLnNldHVwQ29udHJvbHNGb3JGb3JtKCk7XG4gICAgICB9LFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnRVJSOiAnLCBlcnIpO1xuICAgICAgICB0aGlzLkhvc3RpbmdEZXRhaWxzLkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH1cbiAgICApO1xuICAgIC8vIGNvbnNvbGUubG9nKCdIT1NUSU5HIERFVEFJTFM6ICcsIHRoaXMuSG9zdGluZ0RldGFpbHMpO1xuICB9XG59XG4iLCI8Zm9ybSBcbiAgY2xhc3M9XCJmb3JtLWNhcmRcIiBcbiAgW2Zvcm1Hcm91cF09XCJCdWlsZFBpcGVsaW5lRm9ybUdyb3VwXCIgXG4gIChuZ1N1Ym1pdCk9XCJTdWJtaXRCdWlsZFBpcGVsaW5lKClcIlxuPlxuICAgIDxtYXQtY2FyZFxuICAgICAgY2xhc3M9XCJzcHJlYWRcIiAgXG4gICAgPlxuICAgICAgPG1hdC1jYXJkLWhlYWRlcj5cbiAgICAgICAgPG1hdC1jYXJkLXRpdGxlPiBCdWlsZCBQaXBlbGluZSA8L21hdC1jYXJkLXRpdGxlPlxuXG4gICAgICAgIDxtYXQtaGludD5cbiAgICAgICAgICBDaGFuZ2VzIG1hZGUgaGVyZSBhcmUgcmVmbGVjdGVkIGZvciBhbGwgc291cmNlcyB1c2luZyB0aGlzXG4gICAgICAgICAgRGV2T3BzQWN0aW9uXG4gICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICA8L21hdC1jYXJkLWhlYWRlcj5cblxuICAgICAgPG1hdC1jYXJkLWNvbnRlbnQ+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIkhvc3RpbmdEZXRhaWxzPy5Mb2FkaW5nIHx8IFN0YXRlPy5Mb2FkaW5nXCI+XG5cbiAgICAgICAgICA8c2tlbGV0b24tYmxvY2sgXG4gICAgICAgICAgICBjbGFzcz1cInMtYmxvY2tcIlxuICAgICAgICAgICAgZWZmZWN0PVwid2F2ZVwiIFxuICAgICAgICAgID48L3NrZWxldG9uLWJsb2NrPlxuXG4gICAgICAgICAgPHNrZWxldG9uLWJsb2NrIFxuICAgICAgICAgICAgY2xhc3M9XCJzLWJsb2NrXCJcbiAgICAgICAgICAgIGVmZmVjdD1cIndhdmVcIiBcbiAgICAgICAgICA+PC9za2VsZXRvbi1ibG9jaz5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJTZWxlY3RlZEhvc3RpbmdPcHRpb24/LklucHV0c1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaG9zdE9wdGlvbiBvZiBIb3N0aW5nRGV0YWlscz8uSG9zdGluZ09wdGlvbnNcIj5cblxuICAgICAgICAgICAgICA8c2tlbGV0b24tYmxvY2sgXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzLWJsb2NrXCJcbiAgICAgICAgICAgICAgICBlZmZlY3Q9XCJ3YXZlXCIgXG4gICAgICAgICAgICAgICA+PC9za2VsZXRvbi1ibG9jaz5cblxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxza2VsZXRvbi1ibG9jayBcbiAgICAgICAgICAgICpuZ0lmPVwiXCJcbiAgICAgICAgICAgIGNsYXNzPVwicy1ibG9ja1wiXG4gICAgICAgICAgICBlZmZlY3Q9XCJ3YXZlXCIgXG4gICAgICAgICAgPjwvc2tlbGV0b24tYmxvY2s+XG5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFIb3N0aW5nRGV0YWlscz8uTG9hZGluZyAmJiAhU3RhdGU/LkxvYWRpbmdcIj5cblxuICAgICAgICAgIDwhLS0gPGRpdiAgKm5nSWY9XCIhSG9zdGluZ0RldGFpbHM/LkxvYWRpbmdcIj4gLS0+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImJ1aWxkUGlwZWxpbmVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQnVpbGQgUGlwZWxpbmVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJEaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJCdWlsZFBpcGVsaW5lQ2hhbmdlZCgpXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGhvc3RPcHRpb24gb2YgSG9zdGluZ0RldGFpbHM/Lkhvc3RpbmdPcHRpb25zOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiaG9zdE9wdGlvbi5Mb29rdXBcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaG9zdE9wdGlvbi5OYW1lIH19XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICBcbiAgICAgICAgICAgICAgPG1hdC1oaW50PlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGhvc3RPcHRpb24gb2YgSG9zdGluZ0RldGFpbHM/Lkhvc3RpbmdPcHRpb25zXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIkJ1aWxkUGlwZWxpbmUgPT0gaG9zdE9wdGlvbj8uTG9va3VwXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IGhvc3RPcHRpb24uRGVzY3JpcHRpb24gfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtaGludD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgXG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aFwiPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRldk9wc0FjdGlvbk5hbWVcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTmFtZSBvZiBEZXZPcHMgQWN0aW9uXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICBcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGlucHV0IG9mIFNlbGVjdGVkSG9zdGluZ09wdGlvbj8uSW5wdXRzXCI+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJpbnB1dC5Mb29rdXBcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImlucHV0LlBsYWNlaG9sZGVyXCJcbiAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpbnB1dC5SZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8bWF0LWhpbnQ+e3sgaW5wdXQuSGludCB9fTwvbWF0LWhpbnQ+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJCdWlsZFBpcGVsaW5lID09ICducG0tcmVsZWFzZSdcIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGggd2l0aC1oaW50IHBhZGRpbmctYm90dG9tLTRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4PnNlY3VyaXR5PC9tYXQtaWNvbj5cbiAgICAgICAgICBcbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIGlkPVwibnBtLXRva2VuXCJcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJucG1Ub2tlblwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIk5QTSB0b2tlblwiXG4gICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiIURpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIHN0eWxlPVwiLXdlYmtpdC10ZXh0LXNlY3VyaXR5OiBkaXNjO1wiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgICAgICAgICBTZWN1cmVseSBwdWJsaXNoIHRvIE5QTSwgcHJvdmlkZSBhbiBOUE0gUGVyc29uYWwgQWNjZXNzIFRva2VuIChQQVQpIHdpdGggcHVibGlzaCBhY2Nlc3MgdG8gdGhlIG9yZ2FuaXphdGlvbiB1c2VkIGZvciB5b3VyIE5QTSBwYWNrYWdlcy4gICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgTGVhcm4gaG93IHRvIGNyZWF0ZSBhbmQgdmlldyBhY2Nlc3MgdG9rZW5zIFxuICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgaHJlZj1cImh0dHBzOi8vZG9jcy5ucG1qcy5jb20vY3JlYXRpbmctYW5kLXZpZXdpbmctYWNjZXNzLXRva2Vuc1wiXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJpbWFyeS1saW5rXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgaGVyZS5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8L2Rpdj4gLS0+XG4gICAgICAgICAgXG4gICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiSG9zdGluZ0RldGFpbHM/LkxvYWRpbmdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcHJlYWRcIj5cbiAgICAgICAgICAgICAgPGxjdS1sb2FkZXIgc3R5bGU9XCJtYXJnaW46IGF1dG9cIiBbbG9hZGluZ109XCJ0cnVlXCI+PC9sY3UtbG9hZGVyPlxuICAgICAgICAgIFxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWFyZ2luLTNcIj5cbiAgICAgICAgICAgICAgICA8aDQgY2xhc3M9XCJtYXQtdGl0bGVcIj5Mb2FkaW5nIGhvc3RpbmcgZGV0YWlsczwvaDQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG5cbiAgICAgIDxtYXQtY2FyZC1hY3Rpb25zIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCI+XG5cbiAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAqbmdJZj1cIiFTdGF0ZT8uTG9hZGluZ1wiXG4gICAgICAgICAgbWF0LXJhaXNlZC1idXR0b24gXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiIFxuICAgICAgICAgIGZ4RmxleD1cIjEwMCVcIiBcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIiBcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIUJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAudmFsaWQgfHwgIUJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAuZGlydHlcIj5cbiAgICAgICAgICA8bWF0LWljb24+c2F2ZTwvbWF0LWljb24+XG4gICAgICAgICAgU2F2ZSBCdWlsZCBQaXBlbGluZVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGxjdS1sb2FkZXIgW2xvYWRpbmddPVwiU3RhdGU/LkxvYWRpbmdcIj48L2xjdS1sb2FkZXI+ICBcbiAgICAgICAgXG4gICAgPC9tYXQtY2FyZC1hY3Rpb25zPlxuICAgIDwvbWF0LWNhcmQ+XG48L2Zvcm0+XG4iXX0=
252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtcGlwZWxpbmUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb24vc3JjL2xpYi9jb250cm9scy9idWlsZC1waXBlbGluZS1mb3JtL2J1aWxkLXBpcGVsaW5lLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29tbW9uL3NyYy9saWIvY29udHJvbHMvYnVpbGQtcGlwZWxpbmUtZm9ybS9idWlsZC1waXBlbGluZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0UsT0FBTyxFQUlMLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBdUIsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBWXhELE9BQU8sRUFFTCxxQkFBcUIsR0FFdEIsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7Ozs7Ozs7O0FBTzdDLE1BQU0sT0FBTywwQkFBMEI7SUFnR3JDLFlBQ1ksTUFBa0IsRUFDbEIsV0FBd0IsRUFDeEIsV0FBb0M7UUFGcEMsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNsQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixnQkFBVyxHQUFYLFdBQVcsQ0FBeUI7UUFFOUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLFlBQVksQ0FBQztJQUN4QyxDQUFDO0lBaEZELElBQVcsUUFBUTtRQUNqQiwrRUFBK0U7UUFDL0UsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsSUFBSSxJQUFJLENBQUMsY0FBYztZQUN2RCxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUU7WUFDeEQsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNULENBQUM7SUFFRCxJQUFXLGNBQWM7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxlQUFlO1lBQ2xELENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7WUFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUVULE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFXLHdCQUF3QjtRQUNqQyxPQUFPLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxrQkFBa0I7WUFDOUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLEVBQUU7WUFDL0QsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNULENBQUM7SUFFRCxJQUFXLGFBQWE7UUFDdEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQVcsMkJBQTJCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFXLG1CQUFtQjtRQUM1QixPQUFPLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELDJDQUEyQztJQUMzQyxJQUFXLHFCQUFxQjtRQUM5QixPQUFPLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLElBQUksQ0FDOUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFXLHVDQUF1QztRQUdoRCxPQUFPLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzlELE1BQU0sR0FBRyxHQUFHO2dCQUNWLEdBQUcsSUFBSTthQUNSLENBQUM7WUFFRixHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUV6RSxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNULENBQUM7SUFFRCxJQUFXLG9CQUFvQjtRQUM3QixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRUQsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUFXLEtBQUs7UUFDZCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFjTSxRQUFRO1FBQ2Isc0RBQXNEO1FBRXRELDREQUE0RDtRQUU1RCw2Q0FBNkM7UUFDN0MsaUVBQWlFO1FBQ2pFLElBQUk7UUFFSiwwQ0FBMEM7UUFDMUMsc0JBQXNCO1FBQ3RCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUNuRCw4REFBOEQ7U0FDL0QsQ0FBQyxDQUFDO1FBQ0gsS0FBSztRQUVMLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pDLCtCQUErQjtJQUNqQyxDQUFDO0lBRUQsYUFBYTtJQUVOLG9CQUFvQjtRQUN6QixxREFBcUQ7UUFDckQsOEVBQThFO1FBQzlFLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQztRQUUxRCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRU0sbUJBQW1CO1FBQ3hCLGlGQUFpRjtRQUNqRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVNLGVBQWU7UUFDcEIsTUFBTSxVQUFVLEdBQXNDO1lBQ3BELFdBQVcsRUFBRTtnQkFDWCxHQUFHLElBQUksQ0FBQyxXQUFXO2dCQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLElBQUksRUFBRTtnQkFDM0MsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLEVBQUU7Z0JBQ25ELE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sSUFBSSxFQUFFO2dCQUN2QyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksRUFBRTthQUN4QztZQUNELGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDekMsb0JBQW9CLEVBQUUsRUFBRTtTQUN6QixDQUFDO1FBRUYsSUFBSSxjQUFzQixDQUFDO1FBRTNCLElBQUksUUFBUSxHQUFnQjtZQUMxQixHQUFHLElBQUksQ0FBQyxRQUFRO1lBQ2hCLEdBQUcsSUFBSSxDQUFDLHVDQUF1QztTQUNoRCxDQUFDO1FBRUYsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUVsQyxRQUFRLEdBQUc7Z0JBQ1QsR0FBRyxRQUFRO2dCQUNYLElBQUksRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsWUFBWTtnQkFDN0MsSUFBSSxFQUFFLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJO2dCQUNyQyxXQUFXLEVBQUUsNkJBQTZCO2FBQzNDLENBQUM7U0FDSDthQUFNO1lBQ0wsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7U0FDdEM7UUFFRCxVQUFVLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsR0FBRyxRQUFRLENBQUM7UUFFNUQsSUFBSSxrQkFBMEIsQ0FBQztRQUUvQixJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQzVCLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUV0QyxNQUFNLEdBQUcsR0FBb0I7Z0JBQzNCLEdBQUcsSUFBSSxDQUFDLFlBQVk7Z0JBQ3BCLGVBQWUsRUFBRSxDQUFDLGNBQWMsQ0FBQztnQkFDakMsSUFBSSxFQUFFLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLO2dCQUM1QyxJQUFJLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUk7Z0JBQ3JDLFNBQVMsRUFBRSxJQUFJLENBQUMscUJBQXFCLENBQUMsU0FBUzthQUNoRCxDQUFDO1lBRUYsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxFQUFFO2dCQUNuQyxNQUFNLFlBQVksR0FBRyxrQkFBa0IsQ0FBQztnQkFFeEMsR0FBRyxDQUFDLGFBQWEsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUVuQyxVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsR0FBRztvQkFDN0MsSUFBSSxFQUFFLGtCQUFrQjtvQkFDeEIsZUFBZSxFQUFFLFlBQVk7b0JBQzdCLE9BQU8sRUFBRSxXQUFXO2lCQUNyQixDQUFDO2dCQUVGLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsR0FBRztvQkFDOUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUk7b0JBQ3ZELFdBQVcsRUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJO29CQUM5RCxLQUFLLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUs7aUJBQ3RDLENBQUM7YUFDSDtZQUVELFVBQVUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQ2hFO2FBQU07WUFDTCxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFFN0MsTUFBTSxHQUFHLEdBQW9CO2dCQUMzQixHQUFHLElBQUksQ0FBQyxZQUFZO2dCQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUs7YUFDN0MsQ0FBQztZQUVGLFVBQVUsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQ2hFO1FBR0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQsV0FBVztJQUNELG9CQUFvQjtRQUM1Qix1QkFBdUI7UUFDdkIsb0VBQW9FO1FBQ3BFLDZEQUE2RDtRQUM3RCxrQkFBa0I7UUFFbEIsd0RBQXdEO1FBRXhELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRTtZQUMzRCw0QkFBNEI7WUFDNUIseUJBQXlCO1lBQ3pCLElBQUksUUFBUSxLQUFLLGVBQWUsSUFBSSxRQUFRLEtBQUssY0FBYyxFQUFFO2dCQUMvRCw4Q0FBOEM7Z0JBQzlDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDckQ7U0FDRjtRQUVELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxVQUFVLENBQ3BDLGVBQWUsRUFDZixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FDdEIsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLEVBQ3hCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUN0QixDQUNBLENBQUM7UUFFSixJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUNwQyxrQkFBa0IsRUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQ3RCLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLElBQUksRUFBRSxFQUNqRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FDdEIsQ0FDRixDQUFDO1FBRUYsZ0ZBQWdGO1FBRWhGLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUUvRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUNwQyxLQUFLLENBQUMsTUFBTSxFQUNaLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsRUFDdkQsVUFBVSxDQUNYLENBQ0YsQ0FBQztZQUVGLHVCQUF1QjtZQUN2QixxREFBcUQ7WUFDckQsSUFBSTtRQUNOLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsS0FBSyxLQUFLLGFBQWEsRUFBRTtZQUMxRCxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRTtnQkFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtnQkFDM0IsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFVBQVUsQ0FDcEMsVUFBVSxFQUNWLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUN0QixFQUFFLEVBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FDM0MsQ0FDRixDQUFDO2dCQUVGLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDakIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7aUJBQ3pEO2FBQ0Y7U0FDRjthQUFNLElBQ0wsSUFBSSxDQUFDLHdCQUF3QixFQUFFLEtBQUssS0FBSywwQkFBMEIsRUFDbkU7WUFDQSxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFO2dCQUNuRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3ZEO1NBQ0Y7SUFDSCxDQUFDO0lBRVMseUJBQXlCO1FBQ2pDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLHlCQUF5QixFQUFFLENBQUMsU0FBUyxDQUNwRCxDQUFDLFFBQW9ELEVBQUUsRUFBRTtZQUN2RCxJQUFJLENBQUMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDckMsdUNBQXVDO1lBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUVwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLENBQzFELENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUMzQyxDQUFDO1lBQ0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLEVBQUUsTUFBTSxDQUFDO1lBRXhDLDREQUE0RDtZQUU1RCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM5QixDQUFDLEVBQ0QsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUNOLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUN0QyxDQUFDLENBQ0YsQ0FBQztRQUNGLHlEQUF5RDtJQUMzRCxDQUFDOzt1SEF0VVUsMEJBQTBCOzJHQUExQiwwQkFBMEIscVlDOUJ2Qyx3NUtBK0pBOzJGRGpJYSwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UseUJBQXlCO2lLQVc1QixrQkFBa0I7c0JBRHhCLEtBQUs7dUJBQUMsc0JBQXNCO2dCQUl0QixRQUFRO3NCQURkLEtBQUs7dUJBQUMsVUFBVTtnQkFJVixXQUFXO3NCQURqQixLQUFLO3VCQUFDLGFBQWE7Z0JBSWIsaUJBQWlCO3NCQUR2QixLQUFLO3VCQUFDLG9CQUFvQjtnQkFJcEIsY0FBYztzQkFEcEIsS0FBSzt1QkFBQyxpQkFBaUI7Z0JBSWpCLGFBQWE7c0JBRG5CLE1BQU07dUJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUdyb3VwLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCYXNlTW9kZWxlZFJlc3BvbnNlLCBHdWlkIH0gZnJvbSAnQGxjdS9jb21tb24nO1xuaW1wb3J0IHtcbiAgRWFDQXJ0aWZhY3QsXG4gIEVhQ0Rldk9wc0FjdGlvbixcbiAgRWFDRW52aXJvbm1lbnRBc0NvZGUsXG4gIEVhQ1NvdXJjZUNvbnRyb2wsXG59IGZyb20gJ0BzZW1hbnRpY2pzL2NvbW1vbic7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbnNGbG93U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2FwcGxpY2F0aW9ucy1mbG93LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgRWFDU2VydmljZSxcbiAgU2F2ZUVudmlyb25tZW50QXNDb2RlRXZlbnRSZXF1ZXN0LFxufSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lYWMuc2VydmljZSc7XG5pbXBvcnQge1xuICBBcHBsaWNhdGlvbnNGbG93U3RhdGUsXG4gIFByb2plY3RIb3N0aW5nRGV0YWlscyxcbiAgUHJvamVjdEhvc3RpbmdPcHRpb24sXG59IGZyb20gJy4uLy4uL3N0YXRlL2FwcGxpY2F0aW9ucy1mbG93LnN0YXRlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGN1LWJ1aWxkLXBpcGVsaW5lLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vYnVpbGQtcGlwZWxpbmUtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2J1aWxkLXBpcGVsaW5lLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQnVpbGRQaXBlbGluZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvL1BST1BFUlRJRVNcblxuICAvLyBASW5wdXQoJ2J1aWxkLXBpcGVsaW5lJylcbiAgcHVibGljIEJ1aWxkUGlwZWxpbmU6IHN0cmluZztcblxuICBASW5wdXQoJ2Rldm9wcy1hY3Rpb24tbG9va3VwJylcbiAgcHVibGljIERldk9wc0FjdGlvbkxvb2t1cDogc3RyaW5nO1xuXG4gIEBJbnB1dCgnZGlzYWJsZWQnKVxuICBwdWJsaWMgRGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgQElucHV0KCdlbnZpcm9ubWVudCcpXG4gIHB1YmxpYyBFbnZpcm9ubWVudDogRWFDRW52aXJvbm1lbnRBc0NvZGU7XG5cbiAgQElucHV0KCdlbnZpcm9ubWVudC1sb29rdXAnKVxuICBwdWJsaWMgRW52aXJvbm1lbnRMb29rdXA6IHN0cmluZztcblxuICBASW5wdXQoJ2hvc3RpbmctZGV0YWlscycpXG4gIHB1YmxpYyBIb3N0aW5nRGV0YWlsczogUHJvamVjdEhvc3RpbmdEZXRhaWxzO1xuXG4gIEBPdXRwdXQoJ3Jlc3BvbnNlLWV2ZW50JylcbiAgcHVibGljIFJlc3BvbnNlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIHB1YmxpYyBnZXQgQXJ0aWZhY3QoKTogRWFDQXJ0aWZhY3Qge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiQVJUSUZBQ1Q6IFwiLCB0aGlzLkVudmlyb25tZW50Py5BcnRpZmFjdHNbdGhpcy5BcnRpZmFjdExvb2t1cF0pO1xuICAgIHJldHVybiB0aGlzLkVudmlyb25tZW50Py5BcnRpZmFjdHMgJiYgdGhpcy5BcnRpZmFjdExvb2t1cFxuICAgICAgPyB0aGlzLkVudmlyb25tZW50Py5BcnRpZmFjdHNbdGhpcy5BcnRpZmFjdExvb2t1cF0gfHwge31cbiAgICAgIDoge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IEFydGlmYWN0TG9va3VwKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYXJ0TG9va3VwID0gdGhpcy5EZXZPcHNBY3Rpb24/LkFydGlmYWN0TG9va3Vwc1xuICAgICAgPyB0aGlzLkRldk9wc0FjdGlvbj8uQXJ0aWZhY3RMb29rdXBzWzBdXG4gICAgICA6IG51bGw7XG5cbiAgICByZXR1cm4gYXJ0TG9va3VwO1xuICB9XG5cbiAgcHVibGljIGdldCBCdWlsZFBpcGVsaW5lRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwPy5nZXQoJ2J1aWxkUGlwZWxpbmUnKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRGV2T3BzQWN0aW9uKCk6IEVhQ0Rldk9wc0FjdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuRW52aXJvbm1lbnQuRGV2T3BzQWN0aW9ucyAmJiB0aGlzLkRldk9wc0FjdGlvbkxvb2t1cFxuICAgICAgPyB0aGlzLkVudmlyb25tZW50LkRldk9wc0FjdGlvbnNbdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXBdIHx8IHt9XG4gICAgICA6IHt9O1xuICB9XG5cbiAgcHVibGljIGdldCBEZXZPcHNBY3Rpb25zKCk6IHsgW2xvb2t1cDogc3RyaW5nXTogRWFDRGV2T3BzQWN0aW9uIH0ge1xuICAgIHJldHVybiB0aGlzLkVudmlyb25tZW50LkRldk9wc0FjdGlvbnMgfHwge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IERldk9wc0FjdGlvbk5hbWVGb3JtQ29udHJvbCgpOiBBYnN0cmFjdENvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAuZ2V0KCdkZXZPcHNBY3Rpb25OYW1lJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IE5QTVRva2VuRm9ybUNvbnRyb2woKTogQWJzdHJhY3RDb250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmdldCgnbnBtVG9rZW4nKTtcbiAgfVxuXG4gIC8vIChobykgPT4gaG8uTG9va3VwID09PSB0aGlzLkJ1aWxkUGlwZWxpbmVcbiAgcHVibGljIGdldCBTZWxlY3RlZEhvc3RpbmdPcHRpb24oKTogUHJvamVjdEhvc3RpbmdPcHRpb24ge1xuICAgIHJldHVybiB0aGlzLkhvc3RpbmdEZXRhaWxzPy5Ib3N0aW5nT3B0aW9ucz8uZmluZChcbiAgICAgIChobykgPT4gaG8uTG9va3VwID09PSB0aGlzLkJ1aWxkUGlwZWxpbmVcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldCBTZWxlY3RlZEhvc3RpbmdPcHRpb25JbnB1dENvbnRyb2xWYWx1ZXMoKToge1xuICAgIFtsb29rdXA6IHN0cmluZ106IGFueTtcbiAgfSB7XG4gICAgcmV0dXJuIHRoaXMuU2VsZWN0ZWRIb3N0aW5nT3B0aW9uPy5JbnB1dHM/LnJlZHVjZSgocHJldiwgY3VyKSA9PiB7XG4gICAgICBjb25zdCByZXMgPSB7XG4gICAgICAgIC4uLnByZXYsXG4gICAgICB9O1xuXG4gICAgICByZXNbY3VyLkxvb2t1cF0gPSB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAuY29udHJvbHNbY3VyLkxvb2t1cF0udmFsdWU7XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSwge30pO1xuICB9XG5cbiAgcHVibGljIGdldCBTb3VyY2VDb250cm9sTG9va3VwcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5Tb3VyY2VDb250cm9scyB8fCB7fSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IFNvdXJjZUNvbnRyb2xzKCk6IHsgW2xvb2t1cDogc3RyaW5nXTogRWFDU291cmNlQ29udHJvbCB9IHtcbiAgICByZXR1cm4gdGhpcy5FbnZpcm9ubWVudC5Tb3VyY2VzIHx8IHt9O1xuICB9XG5cbiAgcHVibGljIGdldCBTdGF0ZSgpOiBBcHBsaWNhdGlvbnNGbG93U3RhdGV7XG4gICAgcmV0dXJuIHRoaXMuZWFjU3ZjLlN0YXRlO1xuICB9XG5cbiAgcHVibGljIEJ1aWxkUGlwZWxpbmVGb3JtR3JvdXA6IEZvcm1Hcm91cDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgZWFjU3ZjOiBFYUNTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJvdGVjdGVkIGFwcHNGbG93U3ZjOiBBcHBsaWNhdGlvbnNGbG93U2VydmljZVxuICApIHtcbiAgICB0aGlzLkRpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5Ib3N0aW5nRGV0YWlscyA9IG5ldyBQcm9qZWN0SG9zdGluZ0RldGFpbHMoKTtcbiAgICB0aGlzLlJlc3BvbnNlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIGNvbnNvbGUubG9nKCdCdWlsZFBpcGVsaW5lID0gJywgdGhpcy5CdWlsZFBpcGVsaW5lKVxuXG4gICAgLy8gdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7fSk7XG5cbiAgICAvLyBpZiAodGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwICE9IG51bGwpIHtcbiAgICAvLyAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCdob3N0aW5nRGV0YWlscycpO1xuICAgIC8vIH1cblxuICAgIC8vIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgIC8vICAgJ2hvc3RpbmdEZXRhaWxzJyxcbiAgICB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIC8vIGJ1aWxkUGlwZWxpbmU6IFt0aGlzLkJ1aWxkUGlwZWxpbmUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgfSk7XG4gICAgLy8gKTtcblxuICAgIHRoaXMubG9hZFByb2plY3RIb3N0aW5nRGV0YWlscygpO1xuICAgIC8vIHRoaXMuc2V0dXBDb250cm9sc0ZvckZvcm0oKTtcbiAgfVxuXG4gIC8vQVBJIE1FVEhPRFNcblxuICBwdWJsaWMgQnVpbGRQaXBlbGluZUNoYW5nZWQoKTogdm9pZCB7XG4gICAgLy9mb3Igc29tZSByZWFzb24gdGhpcyB2YWx1ZSBpcyBjb21pbmcgYmFjayB1bmRlZmluZWRcbiAgICAvLyBjb25zb2xlLmxvZyhcImJ1aWxkIHBpcGVsaW5lIHZhbHVlOiBcIiwgdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUNvbnRyb2w/LnZhbHVlKVxuICAgIHRoaXMuQnVpbGRQaXBlbGluZSA9IHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Db250cm9sPy52YWx1ZTtcblxuICAgIHRoaXMuc2V0dXBDb250cm9sc0ZvckZvcm0oKTtcbiAgfVxuXG4gIHB1YmxpYyBTdWJtaXRCdWlsZFBpcGVsaW5lKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKFwic3VibWl0dGluZyBidWlsZCBwaXBlbGluZTogXCIsIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC52YWx1ZSk7XG4gICAgdGhpcy5TYXZlRW52aXJvbm1lbnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBTYXZlRW52aXJvbm1lbnQoKTogdm9pZCB7XG4gICAgY29uc3Qgc2F2ZUVudlJlcTogU2F2ZUVudmlyb25tZW50QXNDb2RlRXZlbnRSZXF1ZXN0ID0ge1xuICAgICAgRW52aXJvbm1lbnQ6IHtcbiAgICAgICAgLi4udGhpcy5FbnZpcm9ubWVudCxcbiAgICAgICAgQXJ0aWZhY3RzOiB0aGlzLkVudmlyb25tZW50LkFydGlmYWN0cyB8fCB7fSxcbiAgICAgICAgRGV2T3BzQWN0aW9uczogdGhpcy5FbnZpcm9ubWVudC5EZXZPcHNBY3Rpb25zIHx8IHt9LFxuICAgICAgICBTZWNyZXRzOiB0aGlzLkVudmlyb25tZW50LlNlY3JldHMgfHwge30sXG4gICAgICAgIFNvdXJjZXM6IHRoaXMuRW52aXJvbm1lbnQuU291cmNlcyB8fCB7fSxcbiAgICAgIH0sXG4gICAgICBFbnZpcm9ubWVudExvb2t1cDogdGhpcy5FbnZpcm9ubWVudExvb2t1cCxcbiAgICAgIEVudGVycHJpc2VEYXRhVG9rZW5zOiB7fSxcbiAgICB9O1xuXG4gICAgbGV0IGFydGlmYWN0TG9va3VwOiBzdHJpbmc7XG5cbiAgICBsZXQgYXJ0aWZhY3Q6IEVhQ0FydGlmYWN0ID0ge1xuICAgICAgLi4udGhpcy5BcnRpZmFjdCxcbiAgICAgIC4uLnRoaXMuU2VsZWN0ZWRIb3N0aW5nT3B0aW9uSW5wdXRDb250cm9sVmFsdWVzLFxuICAgIH07XG5cbiAgICBpZiAoIXRoaXMuQXJ0aWZhY3RMb29rdXApIHtcbiAgICAgIGFydGlmYWN0TG9va3VwID0gR3VpZC5DcmVhdGVSYXcoKTtcblxuICAgICAgYXJ0aWZhY3QgPSB7XG4gICAgICAgIC4uLmFydGlmYWN0LFxuICAgICAgICBUeXBlOiB0aGlzLlNlbGVjdGVkSG9zdGluZ09wdGlvbi5BcnRpZmFjdFR5cGUsXG4gICAgICAgIE5hbWU6IHRoaXMuU2VsZWN0ZWRIb3N0aW5nT3B0aW9uLk5hbWUsXG4gICAgICAgIE5QTVJlZ2lzdHJ5OiAnaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJyxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFydGlmYWN0TG9va3VwID0gdGhpcy5BcnRpZmFjdExvb2t1cDtcbiAgICB9XG5cbiAgICBzYXZlRW52UmVxLkVudmlyb25tZW50LkFydGlmYWN0c1thcnRpZmFjdExvb2t1cF0gPSBhcnRpZmFjdDtcblxuICAgIGxldCBkZXZPcHNBY3Rpb25Mb29rdXA6IHN0cmluZztcblxuICAgIGlmICghdGhpcy5EZXZPcHNBY3Rpb25Mb29rdXApIHtcbiAgICAgIGRldk9wc0FjdGlvbkxvb2t1cCA9IEd1aWQuQ3JlYXRlUmF3KCk7XG5cbiAgICAgIGNvbnN0IGRvYTogRWFDRGV2T3BzQWN0aW9uID0ge1xuICAgICAgICAuLi50aGlzLkRldk9wc0FjdGlvbixcbiAgICAgICAgQXJ0aWZhY3RMb29rdXBzOiBbYXJ0aWZhY3RMb29rdXBdLFxuICAgICAgICBOYW1lOiB0aGlzLkRldk9wc0FjdGlvbk5hbWVGb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgICAgUGF0aDogdGhpcy5TZWxlY3RlZEhvc3RpbmdPcHRpb24uUGF0aCxcbiAgICAgICAgVGVtcGxhdGVzOiB0aGlzLlNlbGVjdGVkSG9zdGluZ09wdGlvbi5UZW1wbGF0ZXMsXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5OUE1Ub2tlbkZvcm1Db250cm9sPy52YWx1ZSkge1xuICAgICAgICBjb25zdCBzZWNyZXRMb29rdXAgPSAnbnBtLWFjY2Vzcy10b2tlbic7XG5cbiAgICAgICAgZG9hLlNlY3JldExvb2t1cHMgPSBbc2VjcmV0TG9va3VwXTtcblxuICAgICAgICBzYXZlRW52UmVxLkVudmlyb25tZW50LlNlY3JldHNbc2VjcmV0TG9va3VwXSA9IHtcbiAgICAgICAgICBOYW1lOiAnTlBNIEFjY2VzcyBUb2tlbicsXG4gICAgICAgICAgRGF0YVRva2VuTG9va3VwOiBzZWNyZXRMb29rdXAsXG4gICAgICAgICAgS25vd25BczogJ05QTV9UT0tFTicsXG4gICAgICAgIH07XG5cbiAgICAgICAgc2F2ZUVudlJlcS5FbnRlcnByaXNlRGF0YVRva2Vuc1tzZWNyZXRMb29rdXBdID0ge1xuICAgICAgICAgIE5hbWU6IHNhdmVFbnZSZXEuRW52aXJvbm1lbnQuU2VjcmV0c1tzZWNyZXRMb29rdXBdLk5hbWUsXG4gICAgICAgICAgRGVzY3JpcHRpb246IHNhdmVFbnZSZXEuRW52aXJvbm1lbnQuU2VjcmV0c1tzZWNyZXRMb29rdXBdLk5hbWUsXG4gICAgICAgICAgVmFsdWU6IHRoaXMuTlBNVG9rZW5Gb3JtQ29udHJvbC52YWx1ZSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgc2F2ZUVudlJlcS5FbnZpcm9ubWVudC5EZXZPcHNBY3Rpb25zW2Rldk9wc0FjdGlvbkxvb2t1cF0gPSBkb2E7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRldk9wc0FjdGlvbkxvb2t1cCA9IHRoaXMuRGV2T3BzQWN0aW9uTG9va3VwO1xuXG4gICAgICBjb25zdCBkb2E6IEVhQ0Rldk9wc0FjdGlvbiA9IHtcbiAgICAgICAgLi4udGhpcy5EZXZPcHNBY3Rpb24sXG4gICAgICAgIE5hbWU6IHRoaXMuRGV2T3BzQWN0aW9uTmFtZUZvcm1Db250cm9sLnZhbHVlLFxuICAgICAgfTtcblxuICAgICAgc2F2ZUVudlJlcS5FbnZpcm9ubWVudC5EZXZPcHNBY3Rpb25zW2Rldk9wc0FjdGlvbkxvb2t1cF0gPSBkb2E7XG4gICAgfVxuXG4gICAgXG4gICAgdGhpcy5lYWNTdmMuU2F2ZUVudmlyb25tZW50QXNDb2RlKHNhdmVFbnZSZXEpLnRoZW4ocmVzID0+e1xuICAgICAgdGhpcy5SZXNwb25zZUV2ZW50LmVtaXQocmVzKTtcbiAgICB9KTtcbiAgICBcbiAgfVxuXG4gIC8vICBIZWxwZXJzXG4gIHByb3RlY3RlZCBzZXR1cENvbnRyb2xzRm9yRm9ybSgpOiB2b2lkIHtcbiAgICAvLyB0aGlzLkJ1aWxkUGlwZWxpbmUgPVxuICAgIC8vICAgICAgICAgdGhpcy5CdWlsZFBpcGVsaW5lIHx8IHRoaXMuSG9zdGluZ0RldGFpbHM/Lkhvc3RpbmdPcHRpb25zXG4gICAgLy8gICAgICAgICAgID8gdGhpcy5Ib3N0aW5nRGV0YWlscz8uSG9zdGluZ09wdGlvbnNbMF0/Lkxvb2t1cFxuICAgIC8vICAgICAgICAgICA6ICcnO1xuXG4gICAgLy8gY29uc29sZS5sb2coXCJob3N0aW5nIGRldGFpbHM6IFwiLCB0aGlzLkhvc3RpbmdEZXRhaWxzKVxuXG4gICAgZm9yIChjb25zdCBjdHJsTmFtZSBpbiB0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXAuY29udHJvbHMpIHtcbiAgICAgIC8vZGV2T3BzQWN0aW9uIGRvZXNuJ3QgZXhpc3RcbiAgICAgIC8vcmVtb3ZlcyBob3N0aW5nIGRldGFpbHNcbiAgICAgIGlmIChjdHJsTmFtZSAhPT0gJ2J1aWxkUGlwZWxpbmUnICYmIGN0cmxOYW1lICE9PSAnZGV2T3BzQWN0aW9uJykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJlbW92aW5nIGNvbnRyb2w6IFwiLCBjdHJsTmFtZSlcbiAgICAgICAgdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woY3RybE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ2J1aWxkUGlwZWxpbmUnLFxuICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgICB0aGlzLkJ1aWxkUGlwZWxpbmUgfHwgJycsXG4gICAgICAgIFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgKVxuICAgICAgKTtcblxuICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5hZGRDb250cm9sKFxuICAgICAgJ2Rldk9wc0FjdGlvbk5hbWUnLFxuICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgICB0aGlzLkRldk9wc0FjdGlvbj8uTmFtZSB8fCB0aGlzLlNlbGVjdGVkSG9zdGluZ09wdGlvbj8uTmFtZSB8fCAnJyxcbiAgICAgICAgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKFwic2VsZWN0ZWQgaG9zdGluZyBvcHRpb25zOiBcIiwgdGhpcy5TZWxlY3RlZEhvc3RpbmdPcHRpb24uSW5wdXRzKTtcblxuICAgIHRoaXMuU2VsZWN0ZWRIb3N0aW5nT3B0aW9uPy5JbnB1dHM/LmZvckVhY2goKGlucHV0KSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0b3JzID0gaW5wdXQuUmVxdWlyZWQgPyBbVmFsaWRhdG9ycy5yZXF1aXJlZF0gOiBbXTtcblxuICAgICAgdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAgIGlucHV0Lkxvb2t1cCxcbiAgICAgICAgdGhpcy5mb3JtQnVpbGRlci5jb250cm9sKFxuICAgICAgICAgIHRoaXMuQXJ0aWZhY3RbaW5wdXQuTG9va3VwXSB8fCBpbnB1dC5EZWZhdWx0VmFsdWUgfHwgJycsXG4gICAgICAgICAgdmFsaWRhdG9yc1xuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICAvLyBpZiAodGhpcy5EaXNhYmxlZCkge1xuICAgICAgLy8gICB0aGlzLkZvcm1Hcm91cC5jb250cm9sc1tpbnB1dC5Mb29rdXBdLmRpc2FibGUoKTtcbiAgICAgIC8vIH1cbiAgICB9KTtcblxuICAgIGlmICh0aGlzLkJ1aWxkUGlwZWxpbmVGb3JtQ29udHJvbD8udmFsdWUgPT09ICducG0tcmVsZWFzZScpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwibnBtIHJlbGVhc2VcIilcbiAgICAgIGlmICghdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwPy5jb250cm9scz8ubnBtVG9rZW4pIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJucG0gdG9rZW4gaWZcIilcbiAgICAgICAgdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmFkZENvbnRyb2woXG4gICAgICAgICAgJ25wbVRva2VuJyxcbiAgICAgICAgICB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2woXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIHRoaXMuRGlzYWJsZWQgPyBbXSA6IFtWYWxpZGF0b3JzLnJlcXVpcmVkXVxuICAgICAgICAgIClcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGhpcy5EaXNhYmxlZCkge1xuICAgICAgICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5jb250cm9scy5ucG1Ub2tlbi5kaXNhYmxlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5CdWlsZFBpcGVsaW5lRm9ybUNvbnRyb2w/LnZhbHVlID09PSAnZ2l0aHViLWFydGlmYWN0cy1yZWxlYXNlJ1xuICAgICkge1xuICAgICAgaWYgKHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cD8uY29udHJvbHM/Lm5wbVRva2VuKSB7XG4gICAgICAgIHRoaXMuQnVpbGRQaXBlbGluZUZvcm1Hcm91cC5yZW1vdmVDb250cm9sKCducG1Ub2tlbicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBsb2FkUHJvamVjdEhvc3RpbmdEZXRhaWxzKCk6IHZvaWQge1xuICAgIHRoaXMuSG9zdGluZ0RldGFpbHMuTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5hcHBzRmxvd1N2Yy5Mb2FkUHJvamVjdEhvc3RpbmdEZXRhaWxzKCkuc3Vic2NyaWJlKFxuICAgICAgKHJlc3BvbnNlOiBCYXNlTW9kZWxlZFJlc3BvbnNlPFByb2plY3RIb3N0aW5nRGV0YWlscz4pID0+IHtcbiAgICAgICAgdGhpcy5Ib3N0aW5nRGV0YWlscyA9IHJlc3BvbnNlLk1vZGVsO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInJlc3BvbnNlOiBcIiwgcmVzcG9uc2UpO1xuICAgICAgICB0aGlzLkhvc3RpbmdEZXRhaWxzLkxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBob3N0T3B0aW9uID0gdGhpcy5Ib3N0aW5nRGV0YWlscz8uSG9zdGluZ09wdGlvbnM/LmZpbmQoXG4gICAgICAgICAgKGhvKSA9PiBoby5QYXRoID09PSB0aGlzLkRldk9wc0FjdGlvbi5QYXRoXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuQnVpbGRQaXBlbGluZSA9IGhvc3RPcHRpb24/Lkxvb2t1cDtcblxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkJ1aWxkIFBpcGVsaW5lIEhFUkU9IFwiLCB0aGlzLkJ1aWxkUGlwZWxpbmUpO1xuXG4gICAgICAgIHRoaXMuc2V0dXBDb250cm9sc0ZvckZvcm0oKTtcbiAgICAgIH0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdFUlI6ICcsIGVycik7XG4gICAgICAgIHRoaXMuSG9zdGluZ0RldGFpbHMuTG9hZGluZyA9IGZhbHNlO1xuICAgICAgfVxuICAgICk7XG4gICAgLy8gY29uc29sZS5sb2coJ0hPU1RJTkcgREVUQUlMUzogJywgdGhpcy5Ib3N0aW5nRGV0YWlscyk7XG4gIH1cbn1cbiIsIjxmb3JtIFxuICBjbGFzcz1cImZvcm0tY2FyZFwiIFxuICBbZm9ybUdyb3VwXT1cIkJ1aWxkUGlwZWxpbmVGb3JtR3JvdXBcIiBcbiAgKG5nU3VibWl0KT1cIlN1Ym1pdEJ1aWxkUGlwZWxpbmUoKVwiXG4+XG4gICAgPCEtLSA8bWF0LWNhcmRcbiAgICAgIGNsYXNzPVwic3ByZWFkXCIgIFxuICAgID4gLS0+XG4gICAgICA8IS0tIDxtYXQtY2FyZC1oZWFkZXI+XG4gICAgICAgIDxtYXQtY2FyZC10aXRsZT4gQnVpbGQgUGlwZWxpbmUgPC9tYXQtY2FyZC10aXRsZT5cblxuICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgQ2hhbmdlcyBtYWRlIGhlcmUgYXJlIHJlZmxlY3RlZCBmb3IgYWxsIHNvdXJjZXMgdXNpbmcgdGhpc1xuICAgICAgICAgIERldk9wc0FjdGlvblxuICAgICAgICA8L21hdC1oaW50PlxuICAgICAgPC9tYXQtY2FyZC1oZWFkZXI+IC0tPlxuXG4gICAgICA8IS0tIDxtYXQtY2FyZC1jb250ZW50PiAtLT5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiSG9zdGluZ0RldGFpbHM/LkxvYWRpbmcgfHwgU3RhdGU/LkxvYWRpbmdcIj5cblxuICAgICAgICAgIDxza2VsZXRvbi1ibG9jayBcbiAgICAgICAgICAgIGNsYXNzPVwicy1ibG9ja1wiXG4gICAgICAgICAgICBlZmZlY3Q9XCJ3YXZlXCIgXG4gICAgICAgICAgPjwvc2tlbGV0b24tYmxvY2s+XG5cbiAgICAgICAgICA8c2tlbGV0b24tYmxvY2sgXG4gICAgICAgICAgICBjbGFzcz1cInMtYmxvY2tcIlxuICAgICAgICAgICAgZWZmZWN0PVwid2F2ZVwiIFxuICAgICAgICAgID48L3NrZWxldG9uLWJsb2NrPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlNlbGVjdGVkSG9zdGluZ09wdGlvbj8uSW5wdXRzXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBob3N0T3B0aW9uIG9mIEhvc3RpbmdEZXRhaWxzPy5Ib3N0aW5nT3B0aW9uc1wiPlxuXG4gICAgICAgICAgICAgIDxza2VsZXRvbi1ibG9jayBcbiAgICAgICAgICAgICAgICBjbGFzcz1cInMtYmxvY2tcIlxuICAgICAgICAgICAgICAgIGVmZmVjdD1cIndhdmVcIiBcbiAgICAgICAgICAgICAgID48L3NrZWxldG9uLWJsb2NrPlxuXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPHNrZWxldG9uLWJsb2NrIFxuICAgICAgICAgICAgKm5nSWY9XCJcIlxuICAgICAgICAgICAgY2xhc3M9XCJzLWJsb2NrXCJcbiAgICAgICAgICAgIGVmZmVjdD1cIndhdmVcIiBcbiAgICAgICAgICA+PC9za2VsZXRvbi1ibG9jaz5cblxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIUhvc3RpbmdEZXRhaWxzPy5Mb2FkaW5nICYmICFTdGF0ZT8uTG9hZGluZ1wiPlxuXG4gICAgICAgICAgPCEtLSA8ZGl2ICAqbmdJZj1cIiFIb3N0aW5nRGV0YWlscz8uTG9hZGluZ1wiPiAtLT5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYnVpbGRQaXBlbGluZVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJCdWlsZCBQaXBlbGluZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIkRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIkJ1aWxkUGlwZWxpbmVDaGFuZ2VkKClcIlxuICAgICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaG9zdE9wdGlvbiBvZiBIb3N0aW5nRGV0YWlscz8uSG9zdGluZ09wdGlvbnM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJob3N0T3B0aW9uLkxvb2t1cFwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBob3N0T3B0aW9uLk5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgIFxuICAgICAgICAgICAgICA8bWF0LWhpbnQ+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaG9zdE9wdGlvbiBvZiBIb3N0aW5nRGV0YWlscz8uSG9zdGluZ09wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiQnVpbGRQaXBlbGluZSA9PSBob3N0T3B0aW9uPy5Mb29rdXBcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgaG9zdE9wdGlvbi5EZXNjcmlwdGlvbiB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L21hdC1oaW50PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICBcbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1hdC1mdWxsLXdpZHRoXCI+XG4gICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZGV2T3BzQWN0aW9uTmFtZVwiXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJOYW1lIG9mIERldk9wcyBBY3Rpb25cIlxuICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIFxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaW5wdXQgb2YgU2VsZWN0ZWRIb3N0aW5nT3B0aW9uPy5JbnB1dHNcIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWF0LWZ1bGwtd2lkdGhcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImlucHV0Lkxvb2t1cFwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaW5wdXQuUGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlucHV0LlJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxtYXQtaGludD57eyBpbnB1dC5IaW50IH19PC9tYXQtaGludD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIFxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIkJ1aWxkUGlwZWxpbmUgPT0gJ25wbS1yZWxlYXNlJ1wiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJtYXQtZnVsbC13aWR0aCB3aXRoLWhpbnQgcGFkZGluZy1ib3R0b20tNFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+c2VjdXJpdHk8L21hdC1pY29uPlxuICAgICAgICAgIFxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgaWQ9XCJucG0tdG9rZW5cIlxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5wbVRva2VuXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTlBNIHRva2VuXCJcbiAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCIhRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgc3R5bGU9XCItd2Via2l0LXRleHQtc2VjdXJpdHk6IGRpc2M7XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxtYXQtaGludD5cbiAgICAgICAgICAgICAgICAgIFNlY3VyZWx5IHB1Ymxpc2ggdG8gTlBNLCBwcm92aWRlIGFuIE5QTSBQZXJzb25hbCBBY2Nlc3MgVG9rZW4gKFBBVCkgd2l0aCBwdWJsaXNoIGFjY2VzcyB0byB0aGUgb3JnYW5pemF0aW9uIHVzZWQgZm9yIHlvdXIgTlBNIHBhY2thZ2VzLiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICBMZWFybiBob3cgdG8gY3JlYXRlIGFuZCB2aWV3IGFjY2VzcyB0b2tlbnMgXG4gICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICBocmVmPVwiaHR0cHM6Ly9kb2NzLm5wbWpzLmNvbS9jcmVhdGluZy1hbmQtdmlld2luZy1hY2Nlc3MtdG9rZW5zXCJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwcmltYXJ5LWxpbmtcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBoZXJlLlxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvbWF0LWhpbnQ+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIDwvZGl2PiAtLT5cbiAgICAgICAgICBcbiAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJIb3N0aW5nRGV0YWlscz8uTG9hZGluZ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwcmVhZFwiPlxuICAgICAgICAgICAgICA8bGN1LWxvYWRlciBzdHlsZT1cIm1hcmdpbjogYXV0b1wiIFtsb2FkaW5nXT1cInRydWVcIj48L2xjdS1sb2FkZXI+XG4gICAgICAgICAgXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXJnaW4tM1wiPlxuICAgICAgICAgICAgICAgIDxoNCBjbGFzcz1cIm1hdC10aXRsZVwiPkxvYWRpbmcgaG9zdGluZyBkZXRhaWxzPC9oND5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwhLS0gPC9tYXQtY2FyZC1jb250ZW50PiAtLT5cblxuICAgICAgPCEtLSA8bWF0LWNhcmQtYWN0aW9ucyBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiPiAtLT5cblxuICAgICAgICA8IS0tIDxidXR0b24gXG4gICAgICAgICAgKm5nSWY9XCIhU3RhdGU/LkxvYWRpbmdcIlxuICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIiBcbiAgICAgICAgICBmeEZsZXg9XCIxMDAlXCIgXG4gICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXG4gICAgICAgICAgW2Rpc2FibGVkXT1cIiFCdWlsZFBpcGVsaW5lRm9ybUdyb3VwLnZhbGlkIHx8ICFCdWlsZFBpcGVsaW5lRm9ybUdyb3VwLmRpcnR5XCI+XG4gICAgICAgICAgPG1hdC1pY29uPnNhdmU8L21hdC1pY29uPlxuICAgICAgICAgIFNhdmUgQnVpbGQgUGlwZWxpbmVcbiAgICAgICAgPC9idXR0b24+IC0tPlxuICAgICAgICA8IS0tIDxsY3UtbG9hZGVyIFtsb2FkaW5nXT1cIlN0YXRlPy5Mb2FkaW5nXCI+PC9sY3UtbG9hZGVyPiAgIC0tPlxuICAgICAgICBcbiAgICA8IS0tIDwvbWF0LWNhcmQtYWN0aW9ucz4gLS0+XG4gICAgPCEtLSA8L21hdC1jYXJkPiAtLT5cbjwvZm9ybT5cbiJdfQ==