@c8y/ngx-components 1017.0.378 → 1017.0.383
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth-configuration/basic-settings/basic-auth-settings.component.d.ts +3 -0
- package/core/date-time-picker/close-date-picker.directive.d.ts +14 -0
- package/core/date-time-picker/date-time-picker.component.d.ts +7 -2
- package/core/date-time-picker/date-time-picker.module.d.ts +8 -7
- package/esm2020/auth-configuration/basic-settings/basic-auth-settings.component.mjs +10 -7
- package/esm2020/context-dashboard/widget-config.component.mjs +3 -3
- package/esm2020/core/date-time-picker/close-date-picker.directive.mjs +36 -0
- package/esm2020/core/date-time-picker/date-time-picker.component.mjs +28 -8
- package/esm2020/core/date-time-picker/date-time-picker.module.mjs +4 -3
- package/fesm2015/c8y-ngx-components-auth-configuration.mjs +54 -51
- package/fesm2015/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs +2 -2
- package/fesm2015/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +57 -8
- package/fesm2015/c8y-ngx-components.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-auth-configuration.mjs +54 -51
- package/fesm2020/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs +2 -2
- package/fesm2020/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +57 -8
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/package.json +2 -2
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { SimpleChanges } from '@angular/core';
|
|
2
2
|
import { TenantLoginOptionType } from '@c8y/client';
|
|
3
3
|
import { AuthConfiguration } from './auth-configuration.model';
|
|
4
|
+
import { ControlContainer } from '@angular/forms';
|
|
4
5
|
import { AuthenticationRestrictions } from './basic-settings.model';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
export declare class BasicAuthSettingsComponent {
|
|
8
|
+
private controlContainer;
|
|
7
9
|
authConfiguration: AuthConfiguration;
|
|
8
10
|
preferredLoginOptionType: TenantLoginOptionType;
|
|
9
11
|
tenantLoginOptionTypeEnum: typeof TenantLoginOptionType;
|
|
12
|
+
constructor(controlContainer: ControlContainer);
|
|
10
13
|
ngOnChanges(changes: SimpleChanges): void;
|
|
11
14
|
ngDoCheck(): void;
|
|
12
15
|
get forbiddenWebBrowsers(): boolean;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ElementRef } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { BsDatepickerDirective } from 'ngx-bootstrap/datepicker';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class CloseDatePickerDirective {
|
|
6
|
+
private el;
|
|
7
|
+
protected destroy$: Subject<unknown>;
|
|
8
|
+
closeDatepicker: BsDatepickerDirective;
|
|
9
|
+
constructor(el: ElementRef);
|
|
10
|
+
ngOnInit(): void;
|
|
11
|
+
ngOnDestroy(): void;
|
|
12
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<CloseDatePickerDirective, never>;
|
|
13
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<CloseDatePickerDirective, "[closeDatepicker]", never, { "closeDatepicker": "closeDatepicker"; }, {}, never, never, false>;
|
|
14
|
+
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import { OnDestroy } from '@angular/core';
|
|
1
|
+
import { OnDestroy, ChangeDetectorRef } from '@angular/core';
|
|
2
2
|
import { ControlValueAccessor, FormGroup, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
|
|
3
|
+
import { BsDatepickerDirective } from 'ngx-bootstrap/datepicker';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
export declare class DateTimePickerComponent implements ControlValueAccessor, Validator, OnDestroy {
|
|
6
|
+
private cd;
|
|
5
7
|
minDate: Date;
|
|
6
8
|
set _minDate(value: string);
|
|
7
9
|
maxDate: Date;
|
|
@@ -12,10 +14,12 @@ export declare class DateTimePickerComponent implements ControlValueAccessor, Va
|
|
|
12
14
|
defaultPlaceholder: any;
|
|
13
15
|
onChange: (value: string) => void;
|
|
14
16
|
onTouched: () => void;
|
|
17
|
+
datepicker: BsDatepickerDirective;
|
|
15
18
|
private previousValue;
|
|
16
19
|
private destroy$;
|
|
17
|
-
constructor();
|
|
20
|
+
constructor(cd: ChangeDetectorRef);
|
|
18
21
|
ngOnDestroy(): void;
|
|
22
|
+
ngAfterViewInit(): void;
|
|
19
23
|
/**
|
|
20
24
|
* Control Value Accessor - If form value changes by external factor, update date property and internal form with new value.
|
|
21
25
|
*/
|
|
@@ -26,6 +30,7 @@ export declare class DateTimePickerComponent implements ControlValueAccessor, Va
|
|
|
26
30
|
validate(_control: AbstractControl): ValidationErrors | null;
|
|
27
31
|
previousDay(): void;
|
|
28
32
|
nextDay(): void;
|
|
33
|
+
hide(): void;
|
|
29
34
|
/**
|
|
30
35
|
* If internal form changes its value, then combine date and time into one Date and pass its ISO string value to onChange method
|
|
31
36
|
* @param dateTime
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
import * as i1 from "./date-time-picker.component";
|
|
3
|
-
import * as i2 from "
|
|
4
|
-
import * as i3 from "
|
|
5
|
-
import * as i4 from "@angular/
|
|
6
|
-
import * as i5 from "
|
|
7
|
-
import * as i6 from "
|
|
8
|
-
import * as i7 from "../
|
|
3
|
+
import * as i2 from "./close-date-picker.directive";
|
|
4
|
+
import * as i3 from "../forms/forms.module";
|
|
5
|
+
import * as i4 from "@angular/common";
|
|
6
|
+
import * as i5 from "@angular/forms";
|
|
7
|
+
import * as i6 from "ngx-bootstrap/datepicker";
|
|
8
|
+
import * as i7 from "../common/common.module";
|
|
9
|
+
import * as i8 from "../time-picker/time-picker.module";
|
|
9
10
|
/**
|
|
10
11
|
* The angular module definition for a date-time picker - it provides FormControl that handles date and time.
|
|
11
12
|
* @exports DateTimePickerComponent
|
|
12
13
|
*/
|
|
13
14
|
export declare class DateTimePickerModule {
|
|
14
15
|
static ɵfac: i0.ɵɵFactoryDeclaration<DateTimePickerModule, never>;
|
|
15
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<DateTimePickerModule, [typeof i1.DateTimePickerComponent], [typeof
|
|
16
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<DateTimePickerModule, [typeof i1.DateTimePickerComponent, typeof i2.CloseDatePickerDirective], [typeof i3.FormsModule, typeof i4.CommonModule, typeof i5.FormsModule, typeof i5.ReactiveFormsModule, typeof i6.BsDatepickerModule, typeof i7.CommonModule, typeof i8.TimePickerModule], [typeof i1.DateTimePickerComponent]>;
|
|
16
17
|
static ɵinj: i0.ɵɵInjectorDeclaration<DateTimePickerModule>;
|
|
17
18
|
}
|
|
@@ -3,11 +3,12 @@ import { TenantLoginOptionType } from '@c8y/client';
|
|
|
3
3
|
import { ControlContainer, NgForm } from '@angular/forms';
|
|
4
4
|
import { UserAgent, isBasic } from './basic-settings.model';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/
|
|
7
|
-
import * as i2 from "@angular/
|
|
6
|
+
import * as i1 from "@angular/forms";
|
|
7
|
+
import * as i2 from "@angular/common";
|
|
8
8
|
import * as i3 from "@c8y/ngx-components";
|
|
9
9
|
export class BasicAuthSettingsComponent {
|
|
10
|
-
constructor() {
|
|
10
|
+
constructor(controlContainer) {
|
|
11
|
+
this.controlContainer = controlContainer;
|
|
11
12
|
this.preferredLoginOptionType = TenantLoginOptionType.BASIC;
|
|
12
13
|
this.tenantLoginOptionTypeEnum = TenantLoginOptionType;
|
|
13
14
|
}
|
|
@@ -33,9 +34,11 @@ export class BasicAuthSettingsComponent {
|
|
|
33
34
|
}
|
|
34
35
|
forbiddenUserAgentsRemove(id) {
|
|
35
36
|
this.authenticationRestrictions.forbiddenUserAgents = this.remove(this.authenticationRestrictions.forbiddenUserAgents, id);
|
|
37
|
+
this.controlContainer.control.markAsDirty();
|
|
36
38
|
}
|
|
37
39
|
trustedUserAgentsRemove(id) {
|
|
38
40
|
this.authenticationRestrictions.trustedUserAgents = this.remove(this.authenticationRestrictions.trustedUserAgents, id);
|
|
41
|
+
this.controlContainer.control.markAsDirty();
|
|
39
42
|
}
|
|
40
43
|
get authenticationRestrictions() {
|
|
41
44
|
return this.authConfiguration.loginOptions.find(isBasic).authenticationRestrictions;
|
|
@@ -51,12 +54,12 @@ export class BasicAuthSettingsComponent {
|
|
|
51
54
|
return newArray;
|
|
52
55
|
}
|
|
53
56
|
}
|
|
54
|
-
BasicAuthSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: BasicAuthSettingsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
55
|
-
BasicAuthSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: BasicAuthSettingsComponent, selector: "c8y-basic-auth-settings", inputs: { authConfiguration: "authConfiguration" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"card-block separator-top\"\n *ngIf=\"authConfiguration.preferredLoginOptionType !== 'BASIC'\"\n>\n <div class=\"col-sm-2\">\n <div class=\"h4 text-normal text-right text-left-xs\">\n {{ 'Basic Auth restrictions' | translate }}\n </div>\n </div>\n\n <div class=\"col-sm-9\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"c8y-switch\" title=\"{{ 'Forbidden for web browsers' | translate }}\">\n <input type=\"checkbox\" name=\"forbiddenWebBrowsers\" [(ngModel)]=\"forbiddenWebBrowsers\" />\n <span></span>\n <span>{{ 'Forbidden for web browsers' | translate }}</span>\n </label>\n <div\n class=\"alert alert-warning\"\n *ngIf=\"\n preferredLoginOptionType === tenantLoginOptionTypeEnum.BASIC && forbiddenWebBrowsers\n \"\n >\n {{\n 'You are about to forbid browsers from using Basic authentication. This will prevent users from using web applications on your tenant because you are going to set Basic authentication as the preferred login mode.'\n | translate\n }}\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <label title=\"{{ 'Forbidden user agents' | translate }}\">\n {{ 'Forbidden user agents' | translate }}\n </label>\n <div\n class=\"input-group m-t-8\"\n *ngFor=\"\n let forbiddenUserAgent of authenticationRestrictions.forbiddenUserAgents;\n last as isLast;\n first as isFirst\n \"\n >\n <input\n type=\"text\"\n [name]=\"'forbiddenUserAgent' + forbiddenUserAgent.id\"\n [(ngModel)]=\"forbiddenUserAgent.value\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} forbidden-agent\"\n />\n <div class=\"input-group-btn col-sm-2\">\n <button\n *ngIf=\"!(isFirst && isLast && forbiddenUserAgent.value === '')\"\n title=\"{{ 'Remove' | translate }}\"\n [name]=\"'forbiddenUserAgentRemove' + forbiddenUserAgent.id\"\n type=\"button\"\n class=\"btn btn-dot text-primary\"\n (click)=\"forbiddenUserAgentsRemove(forbiddenUserAgent.id)\"\n >\n <i class=\"dlt-c8y-icon-minus-circle text-danger\"></i>\n </button>\n <button\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n class=\"btn btn-dot text-primary\"\n (click)=\"add(authenticationRestrictions.forbiddenUserAgents)\"\n *ngIf=\"isLast\"\n >\n <i class=\"dlt-c8y-icon-plus-circle\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <label title=\"{{ 'Trusted user agents' | translate }}\">\n {{ 'Trusted user agents' | translate }}\n </label>\n <div\n class=\"input-group m-t-8\"\n *ngFor=\"\n let trustedUserAgent of authenticationRestrictions.trustedUserAgents;\n last as isLast;\n first as isFirst\n \"\n >\n <input\n type=\"text\"\n [name]=\"'trustedUserAgent' + trustedUserAgent.id\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} trusted-agent\"\n [(ngModel)]=\"trustedUserAgent.value\"\n />\n <div class=\"input-group-btn col-sm-2\">\n <button\n *ngIf=\"!(isFirst && isLast && trustedUserAgent.value === '')\"\n title=\"{{ 'Remove' | translate }}\"\n [name]=\"'trustedUserAgentRemove' + trustedUserAgent.id\"\n type=\"button\"\n class=\"btn btn-dot btn-dot--danger text-primary\"\n (click)=\"trustedUserAgentsRemove(trustedUserAgent.id)\"\n >\n <i class=\"dlt-c8y-icon-minus-circle\"></i>\n </button>\n <button\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"add(authenticationRestrictions.trustedUserAgents)\"\n class=\"btn btn-dot text-primary\"\n *ngIf=\"isLast\"\n >\n <i class=\"dlt-c8y-icon-plus-circle\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type:
|
|
57
|
+
BasicAuthSettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: BasicAuthSettingsComponent, deps: [{ token: i1.ControlContainer }], target: i0.ɵɵFactoryTarget.Component });
|
|
58
|
+
BasicAuthSettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: BasicAuthSettingsComponent, selector: "c8y-basic-auth-settings", inputs: { authConfiguration: "authConfiguration" }, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"card-block separator-top\"\n *ngIf=\"authConfiguration.preferredLoginOptionType !== 'BASIC'\"\n>\n <div class=\"col-sm-2\">\n <div class=\"h4 text-normal text-right text-left-xs\">\n {{ 'Basic Auth restrictions' | translate }}\n </div>\n </div>\n\n <div class=\"col-sm-9\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"c8y-switch\" title=\"{{ 'Forbidden for web browsers' | translate }}\">\n <input type=\"checkbox\" name=\"forbiddenWebBrowsers\" [(ngModel)]=\"forbiddenWebBrowsers\" />\n <span></span>\n <span>{{ 'Forbidden for web browsers' | translate }}</span>\n </label>\n <div\n class=\"alert alert-warning\"\n *ngIf=\"\n preferredLoginOptionType === tenantLoginOptionTypeEnum.BASIC && forbiddenWebBrowsers\n \"\n >\n {{\n 'You are about to forbid browsers from using Basic authentication. This will prevent users from using web applications on your tenant because you are going to set Basic authentication as the preferred login mode.'\n | translate\n }}\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <label title=\"{{ 'Forbidden user agents' | translate }}\">\n {{ 'Forbidden user agents' | translate }}\n </label>\n <div\n class=\"input-group m-t-8\"\n *ngFor=\"\n let forbiddenUserAgent of authenticationRestrictions.forbiddenUserAgents;\n last as isLast;\n first as isFirst\n \"\n >\n <input\n type=\"text\"\n [name]=\"'forbiddenUserAgent' + forbiddenUserAgent.id\"\n [(ngModel)]=\"forbiddenUserAgent.value\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} forbidden-agent\"\n />\n <div class=\"input-group-btn col-sm-2\">\n <button\n *ngIf=\"!(isFirst && isLast && forbiddenUserAgent.value === '')\"\n title=\"{{ 'Remove' | translate }}\"\n [name]=\"'forbiddenUserAgentRemove' + forbiddenUserAgent.id\"\n type=\"button\"\n class=\"btn btn-dot text-primary\"\n (click)=\"forbiddenUserAgentsRemove(forbiddenUserAgent.id)\"\n >\n <i class=\"dlt-c8y-icon-minus-circle text-danger\"></i>\n </button>\n <button\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n class=\"btn btn-dot text-primary\"\n (click)=\"add(authenticationRestrictions.forbiddenUserAgents)\"\n *ngIf=\"isLast\"\n >\n <i class=\"dlt-c8y-icon-plus-circle\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <label title=\"{{ 'Trusted user agents' | translate }}\">\n {{ 'Trusted user agents' | translate }}\n </label>\n <div\n class=\"input-group m-t-8\"\n *ngFor=\"\n let trustedUserAgent of authenticationRestrictions.trustedUserAgents;\n last as isLast;\n first as isFirst\n \"\n >\n <input\n type=\"text\"\n [name]=\"'trustedUserAgent' + trustedUserAgent.id\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} trusted-agent\"\n [(ngModel)]=\"trustedUserAgent.value\"\n />\n <div class=\"input-group-btn col-sm-2\">\n <button\n *ngIf=\"!(isFirst && isLast && trustedUserAgent.value === '')\"\n title=\"{{ 'Remove' | translate }}\"\n [name]=\"'trustedUserAgentRemove' + trustedUserAgent.id\"\n type=\"button\"\n class=\"btn btn-dot btn-dot--danger text-primary\"\n (click)=\"trustedUserAgentsRemove(trustedUserAgent.id)\"\n >\n <i class=\"dlt-c8y-icon-minus-circle\"></i>\n </button>\n <button\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"add(authenticationRestrictions.trustedUserAgents)\"\n class=\"btn btn-dot text-primary\"\n *ngIf=\"isLast\"\n >\n <i class=\"dlt-c8y-icon-plus-circle\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] });
|
|
56
59
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: BasicAuthSettingsComponent, decorators: [{
|
|
57
60
|
type: Component,
|
|
58
61
|
args: [{ selector: 'c8y-basic-auth-settings', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div\n class=\"card-block separator-top\"\n *ngIf=\"authConfiguration.preferredLoginOptionType !== 'BASIC'\"\n>\n <div class=\"col-sm-2\">\n <div class=\"h4 text-normal text-right text-left-xs\">\n {{ 'Basic Auth restrictions' | translate }}\n </div>\n </div>\n\n <div class=\"col-sm-9\">\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label class=\"c8y-switch\" title=\"{{ 'Forbidden for web browsers' | translate }}\">\n <input type=\"checkbox\" name=\"forbiddenWebBrowsers\" [(ngModel)]=\"forbiddenWebBrowsers\" />\n <span></span>\n <span>{{ 'Forbidden for web browsers' | translate }}</span>\n </label>\n <div\n class=\"alert alert-warning\"\n *ngIf=\"\n preferredLoginOptionType === tenantLoginOptionTypeEnum.BASIC && forbiddenWebBrowsers\n \"\n >\n {{\n 'You are about to forbid browsers from using Basic authentication. This will prevent users from using web applications on your tenant because you are going to set Basic authentication as the preferred login mode.'\n | translate\n }}\n </div>\n </c8y-form-group>\n </div>\n </div>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <label title=\"{{ 'Forbidden user agents' | translate }}\">\n {{ 'Forbidden user agents' | translate }}\n </label>\n <div\n class=\"input-group m-t-8\"\n *ngFor=\"\n let forbiddenUserAgent of authenticationRestrictions.forbiddenUserAgents;\n last as isLast;\n first as isFirst\n \"\n >\n <input\n type=\"text\"\n [name]=\"'forbiddenUserAgent' + forbiddenUserAgent.id\"\n [(ngModel)]=\"forbiddenUserAgent.value\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} forbidden-agent\"\n />\n <div class=\"input-group-btn col-sm-2\">\n <button\n *ngIf=\"!(isFirst && isLast && forbiddenUserAgent.value === '')\"\n title=\"{{ 'Remove' | translate }}\"\n [name]=\"'forbiddenUserAgentRemove' + forbiddenUserAgent.id\"\n type=\"button\"\n class=\"btn btn-dot text-primary\"\n (click)=\"forbiddenUserAgentsRemove(forbiddenUserAgent.id)\"\n >\n <i class=\"dlt-c8y-icon-minus-circle text-danger\"></i>\n </button>\n <button\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n class=\"btn btn-dot text-primary\"\n (click)=\"add(authenticationRestrictions.forbiddenUserAgents)\"\n *ngIf=\"isLast\"\n >\n <i class=\"dlt-c8y-icon-plus-circle\"></i>\n </button>\n </div>\n </div>\n </div>\n <div class=\"col-sm-6\">\n <label title=\"{{ 'Trusted user agents' | translate }}\">\n {{ 'Trusted user agents' | translate }}\n </label>\n <div\n class=\"input-group m-t-8\"\n *ngFor=\"\n let trustedUserAgent of authenticationRestrictions.trustedUserAgents;\n last as isLast;\n first as isFirst\n \"\n >\n <input\n type=\"text\"\n [name]=\"'trustedUserAgent' + trustedUserAgent.id\"\n class=\"form-control\"\n placeholder=\"{{ 'e.g.' | translate }} trusted-agent\"\n [(ngModel)]=\"trustedUserAgent.value\"\n />\n <div class=\"input-group-btn col-sm-2\">\n <button\n *ngIf=\"!(isFirst && isLast && trustedUserAgent.value === '')\"\n title=\"{{ 'Remove' | translate }}\"\n [name]=\"'trustedUserAgentRemove' + trustedUserAgent.id\"\n type=\"button\"\n class=\"btn btn-dot btn-dot--danger text-primary\"\n (click)=\"trustedUserAgentsRemove(trustedUserAgent.id)\"\n >\n <i class=\"dlt-c8y-icon-minus-circle\"></i>\n </button>\n <button\n title=\"{{ 'Add' | translate }}\"\n type=\"button\"\n (click)=\"add(authenticationRestrictions.trustedUserAgents)\"\n class=\"btn btn-dot text-primary\"\n *ngIf=\"isLast\"\n >\n <i class=\"dlt-c8y-icon-plus-circle\"></i>\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
59
|
-
}], propDecorators: { authConfiguration: [{
|
|
62
|
+
}], ctorParameters: function () { return [{ type: i1.ControlContainer }]; }, propDecorators: { authConfiguration: [{
|
|
60
63
|
type: Input
|
|
61
64
|
}] } });
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtYXV0aC1zZXR0aW5ncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hdXRoLWNvbmZpZ3VyYXRpb24vYmFzaWMtc2V0dGluZ3MvYmFzaWMtYXV0aC1zZXR0aW5ncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9hdXRoLWNvbmZpZ3VyYXRpb24vYmFzaWMtc2V0dGluZ3MvYmFzaWMtYXV0aC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXBELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUE4QixPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7QUFPeEYsTUFBTSxPQUFPLDBCQUEwQjtJQUx2QztRQVNFLDZCQUF3QixHQUEwQixxQkFBcUIsQ0FBQyxLQUFLLENBQUM7UUFFOUUsOEJBQXlCLEdBQUcscUJBQXFCLENBQUM7S0F1RG5EO0lBckRDLFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFO1lBQ3ZFLElBQUksQ0FBQyx3QkFBd0I7Z0JBQzNCLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsd0JBQXdCLENBQUM7U0FDbkU7SUFDSCxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksSUFBSSxDQUFDLHdCQUF3QixLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0IsRUFBRTtZQUNyRixJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHdCQUF3QixDQUFDO1lBQ2hGLElBQUksSUFBSSxDQUFDLHdCQUF3QixLQUFLLHFCQUFxQixDQUFDLEtBQUssRUFBRTtnQkFDakUsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQzthQUNuQztTQUNGO0lBQ0gsQ0FBQztJQUVELElBQUksb0JBQW9CO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLDBCQUEwQixDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuRixDQUFDO0lBRUQsSUFBSSxvQkFBb0IsQ0FBQyxLQUFjO1FBQ3JDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUNuRixDQUFDO0lBRUQseUJBQXlCLENBQUMsRUFBRTtRQUMxQixJQUFJLENBQUMsMEJBQTBCLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FDL0QsSUFBSSxDQUFDLDBCQUEwQixDQUFDLG1CQUFtQixFQUNuRCxFQUFFLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxFQUFFO1FBQ3hCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUM3RCxJQUFJLENBQUMsMEJBQTBCLENBQUMsaUJBQWlCLEVBQ2pELEVBQUUsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksMEJBQTBCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsMEJBQTBCLENBQUM7SUFDdEYsQ0FBQztJQUVELEdBQUcsQ0FBQyxVQUFVO1FBQ1osVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFTyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUU7UUFDM0IsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDcEIsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQzs7dUhBNURVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLHdJQ1h2QyxnaUpBMEhBLCt0Q0RqSGlCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzJGQUV4RCwwQkFBMEI7a0JBTHRDLFNBQVM7K0JBQ0UseUJBQXlCLGlCQUVwQixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQzs4QkFJbkUsaUJBQWlCO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVGVuYW50TG9naW5PcHRpb25UeXBlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXV0aENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2F1dGgtY29uZmlndXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0Zvcm0gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBVc2VyQWdlbnQsIEF1dGhlbnRpY2F0aW9uUmVzdHJpY3Rpb25zLCBpc0Jhc2ljIH0gZnJvbSAnLi9iYXNpYy1zZXR0aW5ncy5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1iYXNpYy1hdXRoLXNldHRpbmdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Jhc2ljLWF1dGgtc2V0dGluZ3MuY29tcG9uZW50Lmh0bWwnLFxuICB2aWV3UHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDb250cm9sQ29udGFpbmVyLCB1c2VFeGlzdGluZzogTmdGb3JtIH1dXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljQXV0aFNldHRpbmdzQ29tcG9uZW50IHtcbiAgQElucHV0KClcbiAgYXV0aENvbmZpZ3VyYXRpb246IEF1dGhDb25maWd1cmF0aW9uO1xuXG4gIHByZWZlcnJlZExvZ2luT3B0aW9uVHlwZTogVGVuYW50TG9naW5PcHRpb25UeXBlID0gVGVuYW50TG9naW5PcHRpb25UeXBlLkJBU0lDO1xuXG4gIHRlbmFudExvZ2luT3B0aW9uVHlwZUVudW0gPSBUZW5hbnRMb2dpbk9wdGlvblR5cGU7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmF1dGhDb25maWd1cmF0aW9uICYmIGNoYW5nZXMuYXV0aENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSA9XG4gICAgICAgIGNoYW5nZXMuYXV0aENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlLnByZWZlcnJlZExvZ2luT3B0aW9uVHlwZTtcbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgaWYgKHRoaXMucHJlZmVycmVkTG9naW5PcHRpb25UeXBlICE9PSB0aGlzLmF1dGhDb25maWd1cmF0aW9uLnByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSkge1xuICAgICAgdGhpcy5wcmVmZXJyZWRMb2dpbk9wdGlvblR5cGUgPSB0aGlzLmF1dGhDb25maWd1cmF0aW9uLnByZWZlcnJlZExvZ2luT3B0aW9uVHlwZTtcbiAgICAgIGlmICh0aGlzLnByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSA9PT0gVGVuYW50TG9naW5PcHRpb25UeXBlLkJBU0lDKSB7XG4gICAgICAgIHRoaXMuZm9yYmlkZGVuV2ViQnJvd3NlcnMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgZm9yYmlkZGVuV2ViQnJvd3NlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRpb25SZXN0cmljdGlvbnMuZm9yYmlkZGVuQ2xpZW50cy5pbmNsdWRlcygnV0VCX0JST1dTRVJTJyk7XG4gIH1cblxuICBzZXQgZm9yYmlkZGVuV2ViQnJvd3NlcnModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uUmVzdHJpY3Rpb25zLmZvcmJpZGRlbkNsaWVudHMgPSB2YWx1ZSA/IFsnV0VCX0JST1dTRVJTJ10gOiBbXTtcbiAgfVxuXG4gIGZvcmJpZGRlblVzZXJBZ2VudHNSZW1vdmUoaWQpIHtcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uUmVzdHJpY3Rpb25zLmZvcmJpZGRlblVzZXJBZ2VudHMgPSB0aGlzLnJlbW92ZShcbiAgICAgIHRoaXMuYXV0aGVudGljYXRpb25SZXN0cmljdGlvbnMuZm9yYmlkZGVuVXNlckFnZW50cyxcbiAgICAgIGlkXG4gICAgKTtcbiAgfVxuXG4gIHRydXN0ZWRVc2VyQWdlbnRzUmVtb3ZlKGlkKSB7XG4gICAgdGhpcy5hdXRoZW50aWNhdGlvblJlc3RyaWN0aW9ucy50cnVzdGVkVXNlckFnZW50cyA9IHRoaXMucmVtb3ZlKFxuICAgICAgdGhpcy5hdXRoZW50aWNhdGlvblJlc3RyaWN0aW9ucy50cnVzdGVkVXNlckFnZW50cyxcbiAgICAgIGlkXG4gICAgKTtcbiAgfVxuXG4gIGdldCBhdXRoZW50aWNhdGlvblJlc3RyaWN0aW9ucygpOiBBdXRoZW50aWNhdGlvblJlc3RyaWN0aW9ucyB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aENvbmZpZ3VyYXRpb24ubG9naW5PcHRpb25zLmZpbmQoaXNCYXNpYykuYXV0aGVudGljYXRpb25SZXN0cmljdGlvbnM7XG4gIH1cblxuICBhZGQoY29sbGVjdGlvbikge1xuICAgIGNvbGxlY3Rpb24ucHVzaChuZXcgVXNlckFnZW50KCcnKSk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZShjb2xsZWN0aW9uLCBpZCkge1xuICAgIGNvbnN0IG5ld0FycmF5ID0gY29sbGVjdGlvbi5maWx0ZXIob2JqID0+IG9iai5pZCAhPT0gaWQpO1xuICAgIGlmICghbmV3QXJyYXkubGVuZ3RoKSB7XG4gICAgICBuZXdBcnJheS5wdXNoKG5ldyBVc2VyQWdlbnQoJycpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld0FycmF5O1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiY2FyZC1ibG9jayBzZXBhcmF0b3ItdG9wXCJcbiAgKm5nSWY9XCJhdXRoQ29uZmlndXJhdGlvbi5wcmVmZXJyZWRMb2dpbk9wdGlvblR5cGUgIT09ICdCQVNJQydcIlxuPlxuICA8ZGl2IGNsYXNzPVwiY29sLXNtLTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaDQgdGV4dC1ub3JtYWwgdGV4dC1yaWdodCB0ZXh0LWxlZnQteHNcIj5cbiAgICAgIHt7ICdCYXNpYyBBdXRoIHJlc3RyaWN0aW9ucycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImNvbC1zbS05XCI+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjOHktc3dpdGNoXCIgdGl0bGU9XCJ7eyAnRm9yYmlkZGVuIGZvciB3ZWIgYnJvd3NlcnMnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImZvcmJpZGRlbldlYkJyb3dzZXJzXCIgWyhuZ01vZGVsKV09XCJmb3JiaWRkZW5XZWJCcm93c2Vyc1wiIC8+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICA8c3Bhbj57eyAnRm9yYmlkZGVuIGZvciB3ZWIgYnJvd3NlcnMnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJhbGVydCBhbGVydC13YXJuaW5nXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSA9PT0gdGVuYW50TG9naW5PcHRpb25UeXBlRW51bS5CQVNJQyAmJiBmb3JiaWRkZW5XZWJCcm93c2Vyc1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAnWW91IGFyZSBhYm91dCB0byBmb3JiaWQgYnJvd3NlcnMgZnJvbSB1c2luZyBCYXNpYyBhdXRoZW50aWNhdGlvbi4gVGhpcyB3aWxsIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyB3ZWIgYXBwbGljYXRpb25zIG9uIHlvdXIgdGVuYW50IGJlY2F1c2UgeW91IGFyZSBnb2luZyB0byBzZXQgQmFzaWMgYXV0aGVudGljYXRpb24gYXMgdGhlIHByZWZlcnJlZCBsb2dpbiBtb2RlLidcbiAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxsYWJlbCB0aXRsZT1cInt7ICdGb3JiaWRkZW4gdXNlciBhZ2VudHMnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAge3sgJ0ZvcmJpZGRlbiB1c2VyIGFnZW50cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXAgbS10LThcIlxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IGZvcmJpZGRlblVzZXJBZ2VudCBvZiBhdXRoZW50aWNhdGlvblJlc3RyaWN0aW9ucy5mb3JiaWRkZW5Vc2VyQWdlbnRzO1xuICAgICAgICAgICAgbGFzdCBhcyBpc0xhc3Q7XG4gICAgICAgICAgICBmaXJzdCBhcyBpc0ZpcnN0XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW25hbWVdPVwiJ2ZvcmJpZGRlblVzZXJBZ2VudCcgKyBmb3JiaWRkZW5Vc2VyQWdlbnQuaWRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmb3JiaWRkZW5Vc2VyQWdlbnQudmFsdWVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLicgfCB0cmFuc2xhdGUgfX0gZm9yYmlkZGVuLWFnZW50XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1idG4gY29sLXNtLTJcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhKGlzRmlyc3QgJiYgaXNMYXN0ICYmIGZvcmJpZGRlblVzZXJBZ2VudC52YWx1ZSA9PT0gJycpXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cIidmb3JiaWRkZW5Vc2VyQWdlbnRSZW1vdmUnICsgZm9yYmlkZGVuVXNlckFnZW50LmlkXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgdGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImZvcmJpZGRlblVzZXJBZ2VudHNSZW1vdmUoZm9yYmlkZGVuVXNlckFnZW50LmlkKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZGx0LWM4eS1pY29uLW1pbnVzLWNpcmNsZSB0ZXh0LWRhbmdlclwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBZGQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgdGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZChhdXRoZW50aWNhdGlvblJlc3RyaWN0aW9ucy5mb3JiaWRkZW5Vc2VyQWdlbnRzKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiaXNMYXN0XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJkbHQtYzh5LWljb24tcGx1cy1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICA8bGFiZWwgdGl0bGU9XCJ7eyAnVHJ1c3RlZCB1c2VyIGFnZW50cycgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICB7eyAnVHJ1c3RlZCB1c2VyIGFnZW50cycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiaW5wdXQtZ3JvdXAgbS10LThcIlxuICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgbGV0IHRydXN0ZWRVc2VyQWdlbnQgb2YgYXV0aGVudGljYXRpb25SZXN0cmljdGlvbnMudHJ1c3RlZFVzZXJBZ2VudHM7XG4gICAgICAgICAgICBsYXN0IGFzIGlzTGFzdDtcbiAgICAgICAgICAgIGZpcnN0IGFzIGlzRmlyc3RcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBbbmFtZV09XCIndHJ1c3RlZFVzZXJBZ2VudCcgKyB0cnVzdGVkVXNlckFnZW50LmlkXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4nIHwgdHJhbnNsYXRlIH19IHRydXN0ZWQtYWdlbnRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0cnVzdGVkVXNlckFnZW50LnZhbHVlXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cC1idG4gY29sLXNtLTJcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCIhKGlzRmlyc3QgJiYgaXNMYXN0ICYmIHRydXN0ZWRVc2VyQWdlbnQudmFsdWUgPT09ICcnKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICBbbmFtZV09XCIndHJ1c3RlZFVzZXJBZ2VudFJlbW92ZScgKyB0cnVzdGVkVXNlckFnZW50LmlkXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgYnRuLWRvdC0tZGFuZ2VyIHRleHQtcHJpbWFyeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0cnVzdGVkVXNlckFnZW50c1JlbW92ZSh0cnVzdGVkVXNlckFnZW50LmlkKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZGx0LWM4eS1pY29uLW1pbnVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdBZGQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGQoYXV0aGVudGljYXRpb25SZXN0cmljdGlvbnMudHJ1c3RlZFVzZXJBZ2VudHMpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRvdCB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICAqbmdJZj1cImlzTGFzdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZGx0LWM4eS1pY29uLXBsdXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtYXV0aC1zZXR0aW5ncy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hdXRoLWNvbmZpZ3VyYXRpb24vYmFzaWMtc2V0dGluZ3MvYmFzaWMtYXV0aC1zZXR0aW5ncy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9hdXRoLWNvbmZpZ3VyYXRpb24vYmFzaWMtc2V0dGluZ3MvYmFzaWMtYXV0aC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXBELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsU0FBUyxFQUE4QixPQUFPLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7Ozs7QUFPeEYsTUFBTSxPQUFPLDBCQUEwQjtJQVFyQyxZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUp0RCw2QkFBd0IsR0FBMEIscUJBQXFCLENBQUMsS0FBSyxDQUFDO1FBRTlFLDhCQUF5QixHQUFHLHFCQUFxQixDQUFDO0lBRU8sQ0FBQztJQUUxRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRTtZQUN2RSxJQUFJLENBQUMsd0JBQXdCO2dCQUMzQixPQUFPLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLHdCQUF3QixDQUFDO1NBQ25FO0lBQ0gsQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLElBQUksQ0FBQyx3QkFBd0IsS0FBSyxJQUFJLENBQUMsaUJBQWlCLENBQUMsd0JBQXdCLEVBQUU7WUFDckYsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyx3QkFBd0IsQ0FBQztZQUNoRixJQUFJLElBQUksQ0FBQyx3QkFBd0IsS0FBSyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUU7Z0JBQ2pFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7YUFDbkM7U0FDRjtJQUNILENBQUM7SUFFRCxJQUFJLG9CQUFvQjtRQUN0QixPQUFPLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUVELElBQUksb0JBQW9CLENBQUMsS0FBYztRQUNyQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkYsQ0FBQztJQUVELHlCQUF5QixDQUFDLEVBQUU7UUFDMUIsSUFBSSxDQUFDLDBCQUEwQixDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxNQUFNLENBQy9ELElBQUksQ0FBQywwQkFBMEIsQ0FBQyxtQkFBbUIsRUFDbkQsRUFBRSxDQUNILENBQUM7UUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxFQUFFO1FBQ3hCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUM3RCxJQUFJLENBQUMsMEJBQTBCLENBQUMsaUJBQWlCLEVBQ2pELEVBQUUsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSwwQkFBMEI7UUFDNUIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQywwQkFBMEIsQ0FBQztJQUN0RixDQUFDO0lBRUQsR0FBRyxDQUFDLFVBQVU7UUFDWixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxVQUFVLEVBQUUsRUFBRTtRQUMzQixNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRTtZQUNwQixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbEM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOzt1SEFoRVUsMEJBQTBCOzJHQUExQiwwQkFBMEIsd0lDWHZDLGdpSkEwSEEsK3RDRGpIaUIsQ0FBQyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLENBQUM7MkZBRXhELDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSx5QkFBeUIsaUJBRXBCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDO3VHQUluRSxpQkFBaUI7c0JBRGhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUZW5hbnRMb2dpbk9wdGlvblR5cGUgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBdXRoQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vYXV0aC1jb25maWd1cmF0aW9uLm1vZGVsJztcbmltcG9ydCB7IENvbnRyb2xDb250YWluZXIsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFVzZXJBZ2VudCwgQXV0aGVudGljYXRpb25SZXN0cmljdGlvbnMsIGlzQmFzaWMgfSBmcm9tICcuL2Jhc2ljLXNldHRpbmdzLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWJhc2ljLWF1dGgtc2V0dGluZ3MnLFxuICB0ZW1wbGF0ZVVybDogJy4vYmFzaWMtYXV0aC1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCcsXG4gIHZpZXdQcm92aWRlcnM6IFt7IHByb3ZpZGU6IENvbnRyb2xDb250YWluZXIsIHVzZUV4aXN0aW5nOiBOZ0Zvcm0gfV1cbn0pXG5leHBvcnQgY2xhc3MgQmFzaWNBdXRoU2V0dGluZ3NDb21wb25lbnQge1xuICBASW5wdXQoKVxuICBhdXRoQ29uZmlndXJhdGlvbjogQXV0aENvbmZpZ3VyYXRpb247XG5cbiAgcHJlZmVycmVkTG9naW5PcHRpb25UeXBlOiBUZW5hbnRMb2dpbk9wdGlvblR5cGUgPSBUZW5hbnRMb2dpbk9wdGlvblR5cGUuQkFTSUM7XG5cbiAgdGVuYW50TG9naW5PcHRpb25UeXBlRW51bSA9IFRlbmFudExvZ2luT3B0aW9uVHlwZTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNvbnRyb2xDb250YWluZXI6IENvbnRyb2xDb250YWluZXIpIHt9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmF1dGhDb25maWd1cmF0aW9uICYmIGNoYW5nZXMuYXV0aENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlKSB7XG4gICAgICB0aGlzLnByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSA9XG4gICAgICAgIGNoYW5nZXMuYXV0aENvbmZpZ3VyYXRpb24uY3VycmVudFZhbHVlLnByZWZlcnJlZExvZ2luT3B0aW9uVHlwZTtcbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgaWYgKHRoaXMucHJlZmVycmVkTG9naW5PcHRpb25UeXBlICE9PSB0aGlzLmF1dGhDb25maWd1cmF0aW9uLnByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSkge1xuICAgICAgdGhpcy5wcmVmZXJyZWRMb2dpbk9wdGlvblR5cGUgPSB0aGlzLmF1dGhDb25maWd1cmF0aW9uLnByZWZlcnJlZExvZ2luT3B0aW9uVHlwZTtcbiAgICAgIGlmICh0aGlzLnByZWZlcnJlZExvZ2luT3B0aW9uVHlwZSA9PT0gVGVuYW50TG9naW5PcHRpb25UeXBlLkJBU0lDKSB7XG4gICAgICAgIHRoaXMuZm9yYmlkZGVuV2ViQnJvd3NlcnMgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgZm9yYmlkZGVuV2ViQnJvd3NlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aGVudGljYXRpb25SZXN0cmljdGlvbnMuZm9yYmlkZGVuQ2xpZW50cy5pbmNsdWRlcygnV0VCX0JST1dTRVJTJyk7XG4gIH1cblxuICBzZXQgZm9yYmlkZGVuV2ViQnJvd3NlcnModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uUmVzdHJpY3Rpb25zLmZvcmJpZGRlbkNsaWVudHMgPSB2YWx1ZSA/IFsnV0VCX0JST1dTRVJTJ10gOiBbXTtcbiAgfVxuXG4gIGZvcmJpZGRlblVzZXJBZ2VudHNSZW1vdmUoaWQpIHtcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uUmVzdHJpY3Rpb25zLmZvcmJpZGRlblVzZXJBZ2VudHMgPSB0aGlzLnJlbW92ZShcbiAgICAgIHRoaXMuYXV0aGVudGljYXRpb25SZXN0cmljdGlvbnMuZm9yYmlkZGVuVXNlckFnZW50cyxcbiAgICAgIGlkXG4gICAgKTtcbiAgICB0aGlzLmNvbnRyb2xDb250YWluZXIuY29udHJvbC5tYXJrQXNEaXJ0eSgpO1xuICB9XG5cbiAgdHJ1c3RlZFVzZXJBZ2VudHNSZW1vdmUoaWQpIHtcbiAgICB0aGlzLmF1dGhlbnRpY2F0aW9uUmVzdHJpY3Rpb25zLnRydXN0ZWRVc2VyQWdlbnRzID0gdGhpcy5yZW1vdmUoXG4gICAgICB0aGlzLmF1dGhlbnRpY2F0aW9uUmVzdHJpY3Rpb25zLnRydXN0ZWRVc2VyQWdlbnRzLFxuICAgICAgaWRcbiAgICApO1xuICAgIHRoaXMuY29udHJvbENvbnRhaW5lci5jb250cm9sLm1hcmtBc0RpcnR5KCk7XG4gIH1cblxuICBnZXQgYXV0aGVudGljYXRpb25SZXN0cmljdGlvbnMoKTogQXV0aGVudGljYXRpb25SZXN0cmljdGlvbnMge1xuICAgIHJldHVybiB0aGlzLmF1dGhDb25maWd1cmF0aW9uLmxvZ2luT3B0aW9ucy5maW5kKGlzQmFzaWMpLmF1dGhlbnRpY2F0aW9uUmVzdHJpY3Rpb25zO1xuICB9XG5cbiAgYWRkKGNvbGxlY3Rpb24pIHtcbiAgICBjb2xsZWN0aW9uLnB1c2gobmV3IFVzZXJBZ2VudCgnJykpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmUoY29sbGVjdGlvbiwgaWQpIHtcbiAgICBjb25zdCBuZXdBcnJheSA9IGNvbGxlY3Rpb24uZmlsdGVyKG9iaiA9PiBvYmouaWQgIT09IGlkKTtcbiAgICBpZiAoIW5ld0FycmF5Lmxlbmd0aCkge1xuICAgICAgbmV3QXJyYXkucHVzaChuZXcgVXNlckFnZW50KCcnKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdBcnJheTtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cImNhcmQtYmxvY2sgc2VwYXJhdG9yLXRvcFwiXG4gICpuZ0lmPVwiYXV0aENvbmZpZ3VyYXRpb24ucHJlZmVycmVkTG9naW5PcHRpb25UeXBlICE9PSAnQkFTSUMnXCJcbj5cbiAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImg0IHRleHQtbm9ybWFsIHRleHQtcmlnaHQgdGV4dC1sZWZ0LXhzXCI+XG4gICAgICB7eyAnQmFzaWMgQXV0aCByZXN0cmljdGlvbnMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJjb2wtc20tOVwiPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LXN3aXRjaFwiIHRpdGxlPVwie3sgJ0ZvcmJpZGRlbiBmb3Igd2ViIGJyb3dzZXJzJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJmb3JiaWRkZW5XZWJCcm93c2Vyc1wiIFsobmdNb2RlbCldPVwiZm9yYmlkZGVuV2ViQnJvd3NlcnNcIiAvPlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgICAgPHNwYW4+e3sgJ0ZvcmJpZGRlbiBmb3Igd2ViIGJyb3dzZXJzJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiYWxlcnQgYWxlcnQtd2FybmluZ1wiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICBwcmVmZXJyZWRMb2dpbk9wdGlvblR5cGUgPT09IHRlbmFudExvZ2luT3B0aW9uVHlwZUVudW0uQkFTSUMgJiYgZm9yYmlkZGVuV2ViQnJvd3NlcnNcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgYWJvdXQgdG8gZm9yYmlkIGJyb3dzZXJzIGZyb20gdXNpbmcgQmFzaWMgYXV0aGVudGljYXRpb24uIFRoaXMgd2lsbCBwcmV2ZW50IHVzZXJzIGZyb20gdXNpbmcgd2ViIGFwcGxpY2F0aW9ucyBvbiB5b3VyIHRlbmFudCBiZWNhdXNlIHlvdSBhcmUgZ29pbmcgdG8gc2V0IEJhc2ljIGF1dGhlbnRpY2F0aW9uIGFzIHRoZSBwcmVmZXJyZWQgbG9naW4gbW9kZS4nXG4gICAgICAgICAgICAgICAgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICA8bGFiZWwgdGl0bGU9XCJ7eyAnRm9yYmlkZGVuIHVzZXIgYWdlbnRzJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgIHt7ICdGb3JiaWRkZW4gdXNlciBhZ2VudHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImlucHV0LWdyb3VwIG0tdC04XCJcbiAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgIGxldCBmb3JiaWRkZW5Vc2VyQWdlbnQgb2YgYXV0aGVudGljYXRpb25SZXN0cmljdGlvbnMuZm9yYmlkZGVuVXNlckFnZW50cztcbiAgICAgICAgICAgIGxhc3QgYXMgaXNMYXN0O1xuICAgICAgICAgICAgZmlyc3QgYXMgaXNGaXJzdFxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFtuYW1lXT1cIidmb3JiaWRkZW5Vc2VyQWdlbnQnICsgZm9yYmlkZGVuVXNlckFnZW50LmlkXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZm9yYmlkZGVuVXNlckFnZW50LnZhbHVlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4nIHwgdHJhbnNsYXRlIH19IGZvcmJpZGRlbi1hZ2VudFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuIGNvbC1zbS0yXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIShpc0ZpcnN0ICYmIGlzTGFzdCAmJiBmb3JiaWRkZW5Vc2VyQWdlbnQudmFsdWUgPT09ICcnKVwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICBbbmFtZV09XCInZm9yYmlkZGVuVXNlckFnZW50UmVtb3ZlJyArIGZvcmJpZGRlblVzZXJBZ2VudC5pZFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IHRleHQtcHJpbWFyeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJmb3JiaWRkZW5Vc2VyQWdlbnRzUmVtb3ZlKGZvcmJpZGRlblVzZXJBZ2VudC5pZClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImRsdC1jOHktaWNvbi1taW51cy1jaXJjbGUgdGV4dC1kYW5nZXJcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQWRkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IHRleHQtcHJpbWFyeVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGQoYXV0aGVudGljYXRpb25SZXN0cmljdGlvbnMuZm9yYmlkZGVuVXNlckFnZW50cylcIlxuICAgICAgICAgICAgICAqbmdJZj1cImlzTGFzdFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZGx0LWM4eS1pY29uLXBsdXMtY2lyY2xlXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgPGxhYmVsIHRpdGxlPVwie3sgJ1RydXN0ZWQgdXNlciBhZ2VudHMnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAge3sgJ1RydXN0ZWQgdXNlciBhZ2VudHMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImlucHV0LWdyb3VwIG0tdC04XCJcbiAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgIGxldCB0cnVzdGVkVXNlckFnZW50IG9mIGF1dGhlbnRpY2F0aW9uUmVzdHJpY3Rpb25zLnRydXN0ZWRVc2VyQWdlbnRzO1xuICAgICAgICAgICAgbGFzdCBhcyBpc0xhc3Q7XG4gICAgICAgICAgICBmaXJzdCBhcyBpc0ZpcnN0XG4gICAgICAgICAgXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW25hbWVdPVwiJ3RydXN0ZWRVc2VyQWdlbnQnICsgdHJ1c3RlZFVzZXJBZ2VudC5pZFwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuJyB8IHRyYW5zbGF0ZSB9fSB0cnVzdGVkLWFnZW50XCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidHJ1c3RlZFVzZXJBZ2VudC52YWx1ZVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuIGNvbC1zbS0yXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiIShpc0ZpcnN0ICYmIGlzTGFzdCAmJiB0cnVzdGVkVXNlckFnZW50LnZhbHVlID09PSAnJylcIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZW1vdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgW25hbWVdPVwiJ3RydXN0ZWRVc2VyQWdlbnRSZW1vdmUnICsgdHJ1c3RlZFVzZXJBZ2VudC5pZFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90IGJ0bi1kb3QtLWRhbmdlciB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwidHJ1c3RlZFVzZXJBZ2VudHNSZW1vdmUodHJ1c3RlZFVzZXJBZ2VudC5pZClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImRsdC1jOHktaWNvbi1taW51cy1jaXJjbGVcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnQWRkJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkKGF1dGhlbnRpY2F0aW9uUmVzdHJpY3Rpb25zLnRydXN0ZWRVc2VyQWdlbnRzKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kb3QgdGV4dC1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJpc0xhc3RcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImRsdC1jOHktaWNvbi1wbHVzLWNpcmNsZVwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -224,12 +224,12 @@ export class WidgetConfigComponent {
|
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
WidgetConfigComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetConfigComponent, deps: [{ token: i1.WidgetService }, { token: i2.BsModalRef }, { token: i3.InventoryService }, { token: i4.ContextDashboardService }], target: i0.ɵɵFactoryTarget.Component });
|
|
227
|
-
WidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: WidgetConfigComponent, selector: "c8y-widget-config", viewQueries: [{ propertyName: "dynamicComponent", first: true, predicate: ["config"], descendants: true }], ngImport: i0, template: "<div class=\"modal-header separator\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form\n name=\"form\"\n #configForm=\"ngForm\"\n>\n <div\n class=\"c8y-modal-tabs\"\n id=\"modal-body\"\n >\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"modal-body bg-level-2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean d-col card p-8\"\n [class.active]=\"selected === cmp\"\n type=\"button\"\n (click)=\"select(cmp)\"\n >\n <div\n class=\"text-center p-8 m-b-8 d-col flex-center flex-grow bg-level-2\"\n role=\"presentation\"\n >\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img\n class=\"widget-thumbnail\"\n alt\n [src]=\"cmp.previewImage\"\n />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"searchResult && searchResult.length === 0\"\n >\n <div\n class=\"h1\"\n c8yIcon=\"search\"\n ></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p\n class=\"m-r-8\"\n translate\n >\n Rephrase your search term.\n </p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div\n class=\"d-flex d-col fit-h\"\n *ngIf=\"selected\"\n [ngClass]=\"{ hidden: mode !== 'config' }\"\n >\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label\n for=\"widgetTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"widgetTitle\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n name=\"title\"\n type=\"text\"\n required\n [(ngModel)]=\"selected.data.title\"\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow\"\n [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\"\n >\n <div\n class=\"a-s-stretch\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div\n class=\"fit-h bg-inherit p-l-16\"\n [ngClass]=\"{ 'p-r-24': !hasConfig() }\"\n >\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n (onClearSelected)=\"selectionChanged()\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig()\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div\n class=\"modal-body p-t-0\"\n style=\"height: calc(100vh - 310px)\"\n *ngIf=\"mode === 'style'\"\n >\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"\n contextDashboardService.formDisabled || configForm.invalid || checkIfDeviceRequired()\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i5.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i5.DynamicComponentComponent, selector: "c8y-dynamic-component", inputs: ["componentId", "config", "mode", "notFoundError", "executeResolvers"], outputs: ["updateWidgetClasses"] }, { kind: "directive", type: i5.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit"] }, { kind: "component", type: i8.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected"] }, { kind: "component", type: i9.AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "possibleStylingTheme", "possibleStylingHeader"], outputs: ["themeClassChange", "headerClassChange"] }, { kind: "component", type: i10.WidgetPreviewComponent, selector: "c8y-widget-preview", inputs: ["previewClasses", "tab"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
|
|
227
|
+
WidgetConfigComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: WidgetConfigComponent, selector: "c8y-widget-config", viewQueries: [{ propertyName: "dynamicComponent", first: true, predicate: ["config"], descendants: true }], ngImport: i0, template: "<div class=\"modal-header separator\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form\n name=\"form\"\n #configForm=\"ngForm\"\n>\n <div\n class=\"c8y-modal-tabs\"\n id=\"modal-body\"\n >\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"modal-body bg-level-2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean d-col card p-8\"\n [class.active]=\"selected === cmp\"\n type=\"button\"\n (click)=\"select(cmp)\"\n >\n <div\n class=\"text-center p-8 m-b-8 d-col flex-center flex-grow bg-level-2\"\n role=\"presentation\"\n >\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img\n class=\"widget-thumbnail\"\n alt\n [src]=\"cmp.previewImage\"\n />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"searchResult && searchResult.length === 0\"\n >\n <div\n class=\"h1\"\n c8yIcon=\"search\"\n ></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p\n class=\"m-r-8\"\n translate\n >\n Rephrase your search term.\n </p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div\n class=\"d-flex d-col fit-h\"\n *ngIf=\"selected\"\n [ngClass]=\"{ hidden: mode !== 'config' }\"\n >\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label\n for=\"widgetTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"widgetTitle\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n name=\"title\"\n type=\"text\"\n required\n [(ngModel)]=\"selected.data.title\"\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow\"\n [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\"\n >\n <div\n class=\"a-s-stretch\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget && mode === 'config'\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div\n class=\"fit-h bg-inherit p-l-16\"\n [ngClass]=\"{ 'p-r-24': !hasConfig() }\"\n >\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n (onClearSelected)=\"selectionChanged()\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig()\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div\n class=\"modal-body p-t-0\"\n style=\"height: calc(100vh - 310px)\"\n *ngIf=\"mode === 'style'\"\n >\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"\n contextDashboardService.formDisabled || configForm.invalid || checkIfDeviceRequired()\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i5.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "directive", type: i7.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i7.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i7.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i5.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "component", type: i5.DynamicComponentComponent, selector: "c8y-dynamic-component", inputs: ["componentId", "config", "mode", "notFoundError", "executeResolvers"], outputs: ["updateWidgetClasses"] }, { kind: "directive", type: i5.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit"] }, { kind: "component", type: i8.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected"] }, { kind: "component", type: i9.AppearanceSettingsComponent, selector: "c8y-appearance-settings", inputs: ["themeClass", "headerClass", "defaultThemeClass", "defaultHeaderClass", "possibleStylingTheme", "possibleStylingHeader"], outputs: ["themeClassChange", "headerClassChange"] }, { kind: "component", type: i10.WidgetPreviewComponent, selector: "c8y-widget-preview", inputs: ["previewClasses", "tab"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
|
|
228
228
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: WidgetConfigComponent, decorators: [{
|
|
229
229
|
type: Component,
|
|
230
|
-
args: [{ selector: 'c8y-widget-config', template: "<div class=\"modal-header separator\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form\n name=\"form\"\n #configForm=\"ngForm\"\n>\n <div\n class=\"c8y-modal-tabs\"\n id=\"modal-body\"\n >\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"modal-body bg-level-2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean d-col card p-8\"\n [class.active]=\"selected === cmp\"\n type=\"button\"\n (click)=\"select(cmp)\"\n >\n <div\n class=\"text-center p-8 m-b-8 d-col flex-center flex-grow bg-level-2\"\n role=\"presentation\"\n >\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img\n class=\"widget-thumbnail\"\n alt\n [src]=\"cmp.previewImage\"\n />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"searchResult && searchResult.length === 0\"\n >\n <div\n class=\"h1\"\n c8yIcon=\"search\"\n ></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p\n class=\"m-r-8\"\n translate\n >\n Rephrase your search term.\n </p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div\n class=\"d-flex d-col fit-h\"\n *ngIf=\"selected\"\n [ngClass]=\"{ hidden: mode !== 'config' }\"\n >\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label\n for=\"widgetTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"widgetTitle\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n name=\"title\"\n type=\"text\"\n required\n [(ngModel)]=\"selected.data.title\"\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow\"\n [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\"\n >\n <div\n class=\"a-s-stretch\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div\n class=\"fit-h bg-inherit p-l-16\"\n [ngClass]=\"{ 'p-r-24': !hasConfig() }\"\n >\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n (onClearSelected)=\"selectionChanged()\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig()\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div\n class=\"modal-body p-t-0\"\n style=\"height: calc(100vh - 310px)\"\n *ngIf=\"mode === 'style'\"\n >\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"\n contextDashboardService.formDisabled || configForm.invalid || checkIfDeviceRequired()\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
|
|
230
|
+
args: [{ selector: 'c8y-widget-config', template: "<div class=\"modal-header separator\">\n <div\n class=\"h3\"\n title=\"{{ 'Add widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"!current\"\n translate\n >\n Add widget\n </div>\n <div\n class=\"h3\"\n title=\"{{ 'Edit widget' | translate }}\"\n id=\"modal-title\"\n *ngIf=\"current\"\n translate\n >\n Edit widget\n </div>\n</div>\n<form\n name=\"form\"\n #configForm=\"ngForm\"\n>\n <div\n class=\"c8y-modal-tabs\"\n id=\"modal-body\"\n >\n <div class=\"tabContainer\">\n <ul class=\"nav nav-tabs nav-tabsc8y p-l-24\">\n <li [class.active]=\"mode === 'select'\">\n <button\n class=\"btn\"\n title=\"{{ 'Select widget' | translate }}\"\n type=\"button\"\n (click)=\"changeMode('select'); (false)\"\n >\n <i c8yIcon=\"th-large\"></i>\n <span translate>Select widget</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'config'\">\n <button\n class=\"btn\"\n title=\"{{ 'Configuration' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('config'); (false)\"\n >\n <i c8yIcon=\"cog\"></i>\n <span translate>Configuration</span>\n </button>\n </li>\n <li [class.active]=\"mode === 'style'\">\n <button\n class=\"btn\"\n title=\"{{ 'Appearance' | translate }}\"\n type=\"button\"\n [disabled]=\"!selected\"\n (click)=\"changeMode('style'); (false)\"\n >\n <i c8yIcon=\"paint-brush\"></i>\n <span translate>Appearance</span>\n </button>\n </li>\n </ul>\n </div>\n </div>\n\n <div class=\"modal-inner-scroll modal-inner-scroll--fixed\">\n <div\n class=\"bg-level-0 p-l-24 p-r-24 p-t-8 p-b-8 sticky-header-top-0\"\n style=\"z-index: 2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <div class=\"input-group input-group-search\">\n <input\n class=\"form-control\"\n [attr.aria-label]=\"'Search' | translate\"\n placeholder=\"{{ 'Search\u2026' | translate }}\"\n type=\"text\"\n data-cy=\"widget-config--Search\"\n [(ngModel)]=\"searchTerm\"\n [ngModelOptions]=\"{ standalone: true }\"\n (keydown)=\"searchChange$.next($event)\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot\"\n title=\"{{ 'Search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n <i [c8yIcon]=\"searchTerm.length === 0 ? 'search' : 'close'\"></i>\n </button>\n </span>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"modal-body bg-level-2\"\n *ngIf=\"mode === 'select'\"\n >\n <div class=\"card-group card-select m-b-0\">\n <div\n class=\"col-md-3 col-sm-4 col-xs-6\"\n title=\"{{ cmp.description | translate }}\"\n *ngFor=\"let cmp of searchResult || components\"\n >\n <button\n class=\"btn-clean d-col card p-8\"\n [class.active]=\"selected === cmp\"\n type=\"button\"\n (click)=\"select(cmp)\"\n >\n <div\n class=\"text-center p-8 m-b-8 d-col flex-center flex-grow bg-level-2\"\n role=\"presentation\"\n >\n <ng-container *ngIf=\"!cmp.previewImage; else previewImage\">\n <div class=\"h1\"><i c8yIcon=\"file-image-o\"></i></div>\n <small translate>Preview not available</small>\n </ng-container>\n <ng-template #previewImage>\n <img\n class=\"widget-thumbnail\"\n alt\n [src]=\"cmp.previewImage\"\n />\n </ng-template>\n </div>\n <p class=\"card-title text-truncate\">\n <c8y-highlight\n text=\"{{ cmp.label | translate }}\"\n [pattern]=\"searchTerm\"\n ></c8y-highlight>\n </p>\n </button>\n </div>\n\n <div\n class=\"c8y-empty-state text-center\"\n *ngIf=\"searchResult && searchResult.length === 0\"\n >\n <div\n class=\"h1\"\n c8yIcon=\"search\"\n ></div>\n <h3 translate>No widgets found.</h3>\n <div class=\"d-flex\">\n <p\n class=\"m-r-8\"\n translate\n >\n Rephrase your search term.\n </p>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Reset search' | translate }}\"\n type=\"button\"\n (click)=\"resetSearch()\"\n >\n {{ 'Reset search' | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <!-- The following is intentional set to hidden to allow the ViewChild ref in the controller -->\n <div\n class=\"d-flex d-col fit-h\"\n *ngIf=\"selected\"\n [ngClass]=\"{ hidden: mode !== 'config' }\"\n >\n <div class=\"p-t-16 flex-no-shrink separator-bottom p-b-16\">\n <div class=\"row\">\n <div class=\"col-sm-4\">\n <div class=\"p-l-24\">\n <div class=\"text-left text-medium h4\">\n {{ selected.label | translate }}\n </div>\n <p>\n {{ selected.description | translate }}\n </p>\n </div>\n </div>\n <div class=\"col-sm-8\">\n <div class=\"p-r-24\">\n <c8y-form-group>\n <label\n for=\"widgetTitle\"\n translate\n >\n Title\n </label>\n <input\n class=\"form-control\"\n id=\"widgetTitle\"\n placeholder=\"{{ 'e.g.' | translate }} {{ componentLabel | translate }}\"\n name=\"title\"\n type=\"text\"\n required\n [(ngModel)]=\"selected.data.title\"\n />\n </c8y-form-group>\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"row flex-grow\"\n [ngClass]=\"{ 'd-flex': widgetConfig.options || hasConfig() }\"\n >\n <div\n class=\"a-s-stretch\"\n *ngIf=\"!widgetConfig.settings?.noDeviceTarget && mode === 'config'\"\n [ngClass]=\"{\n 'bg-level-1 col-sm-4 p-r-0': hasConfig(),\n 'bg-level-0 col-sm-12': !hasConfig()\n }\"\n >\n <div\n class=\"fit-h bg-inherit p-l-16\"\n [ngClass]=\"{ 'p-r-24': !hasConfig() }\"\n >\n <div class=\"p-relative bg-inherit\">\n <c8y-asset-selector-miller\n class=\"d-block bg-inherit p-relative\"\n style=\"height: calc(100vh - 422px)\"\n (onSelected)=\"selectionChanged($event)\"\n (onClearSelected)=\"selectionChanged()\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: this.widgetConfig.settings?.groupsSelectable,\n showChildDevices: true,\n columnHeaders: true,\n showUnassignedDevices: true,\n search: !this.widgetConfig.settings.context?.additionParents,\n showFilter: true,\n singleColumn: !!this.hasConfig()\n }\"\n [asset]=\"widgetConfig.settings?.context\"\n [selectedDevice]=\"selectedDevice\"\n ></c8y-asset-selector-miller>\n </div>\n </div>\n </div>\n <div\n [ngClass]=\"{\n 'col-sm-8': !widgetConfig.settings?.noDeviceTarget,\n 'col-sm-12': widgetConfig.settings?.noDeviceTarget,\n 'sr-only': !hasConfig()\n }\"\n >\n <c8y-dynamic-component\n class=\"d-block\"\n style=\"height: {{ hasConfig() ? 'calc(100vh - 422px)' : '0' }}\"\n [ngClass]=\"{ 'inner-scroll p-r-24': !widgetConfig.settings?.noDeviceTarget }\"\n [componentId]=\"selected.id\"\n mode=\"config\"\n [config]=\"widgetConfig\"\n [notFoundError]=\"false\"\n #config\n ></c8y-dynamic-component>\n </div>\n </div>\n </div>\n\n <div\n class=\"modal-body p-t-0\"\n style=\"height: calc(100vh - 310px)\"\n *ngIf=\"mode === 'style'\"\n >\n <div class=\"row\">\n <div class=\"col-xs-6\">\n <c8y-appearance-settings\n [(themeClass)]=\"styling.contentClass\"\n [(headerClass)]=\"styling.headerClass\"\n [possibleStylingTheme]=\"possibleStyling.WIDGET_CONTENT_CLASSES\"\n [possibleStylingHeader]=\"possibleStyling.WIDGET_HEADER_CLASSES\"\n [defaultThemeClass]=\"defaultStyling.contentClass\"\n [defaultHeaderClass]=\"defaultStyling.headerClass\"\n ></c8y-appearance-settings>\n </div>\n <div class=\"col-xs-6 sticky-header-top-0\">\n <c8y-widget-preview\n style=\"height: calc(100vh - 382px)\"\n [previewClasses]=\"getStyle(true)\"\n ></c8y-widget-preview>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"modal-footer\">\n <button\n class=\"btn btn-default\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"close()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n (click)=\"save()\"\n [disabled]=\"\n contextDashboardService.formDisabled || configForm.invalid || checkIfDeviceRequired()\n \"\n c8yProductExperience\n [actionName]=\"current ? 'editWidget' : 'createWidget'\"\n [actionData]=\"{ widgetName: selected && selected.id }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
|
|
231
231
|
}], ctorParameters: function () { return [{ type: i1.WidgetService }, { type: i2.BsModalRef }, { type: i3.InventoryService }, { type: i4.ContextDashboardService }]; }, propDecorators: { dynamicComponent: [{
|
|
232
232
|
type: ViewChild,
|
|
233
233
|
args: ['config', { static: false }]
|
|
234
234
|
}] } });
|
|
235
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC93aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL3dpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFzQyx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXBHLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUV0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQWtCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7QUFNL0QsTUFBTSxPQUFPLHFCQUFxQjtJQTRDaEMsWUFDVSxhQUE0QixFQUM1QixLQUFpQixFQUNqQixTQUEyQixFQUM1Qix1QkFBZ0Q7UUFIL0Msa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtR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QUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYTthQUNuQztZQUNELEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU07U0FDVixDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxZQUFpQztRQUNwRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4RSxJQUFJLFlBQVksRUFBRTtZQUNoQixZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7WUFFaEQsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHO2dCQUM5QyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWM7Z0JBQ2xELENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUV6QyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuQixZQUFZLENBQUMsTUFBTSxHQUFHO29CQUNwQixFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO2lCQUN4QixDQUFDO2FBQ0g7U0FDRjtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7O2tIQTFSVSxxQkFBcUI7c0dBQXJCLHFCQUFxQixxS0NyQmxDLHEyVUFtVUE7MkZEOVNhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxtQkFBbUI7a01BNEI3QixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sIFdpZGdldCwgRHluYW1pY0NvbXBvbmVudENvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXNzZXRTZWxlY3Rpb25DaGFuZ2VFdmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXNzZXRzLW5hdmlnYXRvcic7XG5pbXBvcnQgeyBjbG9uZSwgY2xvbmVEZWVwLCBlc2NhcGVSZWdFeHAsIGdldCwgb21pdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBpaWYsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBXSURHRVRfQ09OVEVOVF9DTEFTU0VTLFxuICBXSURHRVRfSEVBREVSX0NMQVNTRVMsXG4gIENvbnRleHRXaWRnZXRDb25maWdcbn0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5tb2RlbCc7XG5pbXBvcnQgeyBXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZXh0RGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQuc2VydmljZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXdpZGdldC1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0Q29uZmlnQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgc2VsZWN0ZWREZXZpY2U6IElNYW5hZ2VkT2JqZWN0O1xuICBtb2RlOiAnY29uZmlnJyB8ICdzZWxlY3QnIHwgJ3N0eWxlJyA9ICdzZWxlY3QnO1xuICBzZWFyY2hSZXN1bHQ6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uW107XG4gIGNvbXBvbmVudHM6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uW107XG4gIHNlbGVjdGVkOiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbjtcbiAgc2VhcmNoQ2hhbmdlJCA9IG5ldyBTdWJqZWN0KCk7XG4gIHNlYXJjaFRlcm0gPSAnJztcbiAgY29udGV4dDogYW55O1xuICBjb21wb25lbnRMYWJlbDogc3RyaW5nO1xuICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIHN0eWxpbmcgPSB7XG4gICAgaGVhZGVyQ2xhc3M6ICdwYW5lbC10aXRsZS1yZWd1bGFyJyxcbiAgICBjb250ZW50Q2xhc3M6ICdwYW5lbC1jb250ZW50LWxpZ2h0J1xuICB9O1xuICBkZWZhdWx0U3R5bGluZyA9IHtcbiAgICBoZWFkZXJDbGFzczogJ3BhbmVsLXRpdGxlLXJlZ3VsYXInLFxuICAgIGNvbnRlbnRDbGFzczogJ3BhbmVsLWNvbnRlbnQtbGlnaHQnXG4gIH07XG4gIHBvc3NpYmxlU3R5bGluZyA9IHsgV0lER0VUX0hFQURFUl9DTEFTU0VTLCBXSURHRVRfQ09OVEVOVF9DTEFTU0VTIH07XG4gIGN1cnJlbnQ6IGFueTtcbiAgd2lkZ2V0Q29uZmlnOiBDb250ZXh0V2lkZ2V0Q29uZmlnO1xuICBpc1VwZ3JhZGUgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdjb25maWcnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudENvbXBvbmVudDtcblxuICBnZXQgaXNFZGl0KCkge1xuICAgIHJldHVybiAhIXRoaXMuY3VycmVudDtcbiAgfVxuXG4gIGdldCBpc0RldmljZVR5cGVEYXNoYm9hcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5tby5jOHlfRGFzaGJvYXJkPy5kZXZpY2VUeXBlICYmICEhdGhpcy5tby5jOHlfRGFzaGJvYXJkPy5kZXZpY2VUeXBlVmFsdWU7XG4gIH1cblxuICByZXN1bHQ6IFByb21pc2U8V2lkZ2V0PiA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0aGlzLl9zYXZlID0gcmVzb2x2ZTtcbiAgICB0aGlzLl9jYW5jZWwgPSByZWplY3Q7XG4gIH0pO1xuXG4gIHByaXZhdGUgc2VhcmNoU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX3NhdmU6ICh2YWx1ZTogV2lkZ2V0KSA9PiB2b2lkO1xuICBwcml2YXRlIF9jYW5jZWw6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB3aWRnZXRTZXJ2aWNlOiBXaWRnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWw6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHVibGljIGNvbnRleHREYXNoYm9hcmRTZXJ2aWNlOiBDb250ZXh0RGFzaGJvYXJkU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdBZnRlckNvbnRlbnRJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY29tcG9uZW50cyA9IHRoaXMud2lkZ2V0U2VydmljZS5nZXRXaWRnZXREZWZpbml0aW9ucygpO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudCA9IGNsb25lKHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCwgdGhpcy5pc0VkaXQgPyAnY29uZmlnJyA6ICdzZWxlY3QnKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlYXJjaFN1YiA9IHRoaXMuc2VhcmNoQ2hhbmdlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IGlpZigoKSA9PiBldmVudC53aGljaCAhPT0gMTMsIHRpbWVyKDIwMCksIHRpbWVyKDEwKSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zZXRTdHlsaW5ncygpO1xuXG4gICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnICYmIHRoaXMud2lkZ2V0Q29uZmlnLmRldmljZSkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwodGhpcy53aWRnZXRDb25maWcuZGV2aWNlLmlkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREZXZpY2UgPSBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrSWZEZXZpY2VSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMud2lkZ2V0Q29uZmlnIHx8XG4gICAgICAoIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLmRldmljZVRhcmdldE5vdFJlcXVpcmVkICYmXG4gICAgICAgICF0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgJiZcbiAgICAgICAgIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLm5vRGV2aWNlVGFyZ2V0KVxuICAgICk7XG4gIH1cblxuICBzZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGlvbjogQXNzZXRTZWxlY3Rpb25DaGFuZ2VFdmVudCkge1xuICAgIHRoaXMud2lkZ2V0Q29uZmlnLmRldmljZSA9IHNlbGVjdGlvbi5jaGFuZ2UuaXRlbTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgY29uc3QgaG9va1N1Y2Nlc3MgPSBhd2FpdCB0aGlzLmR5bmFtaWNDb21wb25lbnQuY2FsbExpZmVDeWNsZUhvb2tzKCkudG9Qcm9taXNlKCk7XG4gICAgaWYgKCFob29rU3VjY2Vzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQgfSA9IHRoaXMuc2VsZWN0ZWQuZGF0YTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnICYmXG4gICAgICB0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgJiZcbiAgICAgIC8vIHNlcmlhbGl6aW5nIHdpbGwgYmUgaGFuZGxlZCBieSByZXNvbHZlclxuICAgICAgIXRoaXMuc2VsZWN0ZWQ/LnJlc29sdmU/LmRldmljZVxuICAgICkge1xuICAgICAgY29uc3QgeyBpZCwgbmFtZSB9ID0gdGhpcy53aWRnZXRDb25maWcuZGV2aWNlO1xuICAgICAgdGhpcy53aWRnZXRDb25maWcuZGV2aWNlID0geyBpZCwgbmFtZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IHdpZGdldCA9IHtcbiAgICAgIF94LFxuICAgICAgX3ksXG4gICAgICBfd2lkdGgsXG4gICAgICBfaGVpZ2h0LFxuICAgICAgY29uZmlnOiBvbWl0KHRoaXMud2lkZ2V0Q29uZmlnLCBbJ3NldHRpbmdzJywgJ2Rpc3BsYXlTZXR0aW5ncyddKSxcbiAgICAgIHRpdGxlOiB0aGlzLnNlbGVjdGVkLmRhdGEudGl0bGUsXG4gICAgICBjb21wb25lbnRJZDogdGhpcy5zZWxlY3RlZC5pZCxcbiAgICAgIGlkOiB0aGlzLmlzRWRpdCA/IHRoaXMuY3VycmVudC5kYXRhLmlkIDogU3RyaW5nKE1hdGgucmFuZG9tKCkpLnN1YnN0cigyKSxcbiAgICAgIGNsYXNzZXM6IHRoaXMuZ2V0U3R5bGUoKSxcbiAgICAgIC4uLighdGhpcy5pc0VkaXQgPyB0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncy53aWRnZXREZWZhdWx0cyA6IHt9KVxuICAgIH0gYXMgV2lkZ2V0O1xuXG4gICAgdGhpcy5fc2F2ZSh3aWRnZXQpO1xuICB9XG5cbiAgc2VsZWN0KGNtcCwgbW9kZTogJ3NlbGVjdCcgfCAnY29uZmlnJyA9ICdjb25maWcnKSB7XG4gICAgY21wLmRhdGEgPSBjbXAuZGF0YSB8fCB7fTtcbiAgICB0aGlzLnNlbGVjdGVkID0gY21wO1xuXG4gICAgdGhpcy5pc1VwZ3JhZGUgPSAhIWdldChjbXAsICdkYXRhLnNldHRpbmdzLnVwZ3JhZGUnKTtcbiAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmZvcm1EaXNhYmxlZCA9IHRoaXMuaXNVcGdyYWRlO1xuXG4gICAgaWYgKHRoaXMuaXNFZGl0KSB7XG4gICAgICBjb25zdCB7IF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0LCBjbGFzc2VzLCB0aXRsZSB9ID0gdGhpcy5jdXJyZW50LmRhdGE7XG4gICAgICB0aGlzLnNlbGVjdGVkLmRhdGEgPSB7IC4uLnRoaXMuc2VsZWN0ZWQuZGF0YSwgX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQsIGNsYXNzZXMsIHRpdGxlIH07XG4gICAgfVxuXG4gICAgdGhpcy53aWRnZXRDb25maWcgPSBjbG9uZURlZXAodGhpcy5jb21wb3NlV2lkZ2V0Q29uZmlnKHRoaXMuc2VsZWN0ZWQsIHRoaXMuY29udGV4dCkpO1xuXG4gICAgdGhpcy5zZWxlY3RlZC5kYXRhLnRpdGxlID0gdGhpcy5zZWxlY3RlZC5kYXRhLnRpdGxlIHx8IGNtcC5sYWJlbDtcbiAgICB0aGlzLmNvbXBvbmVudExhYmVsID0gY21wLmxhYmVsO1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gIH1cblxuICBzZWFyY2goKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGVybS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdCA9IHRoaXMuY29tcG9uZW50cy5maWx0ZXIoY21wID0+XG4gICAgICAgIG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKHRoaXMuc2VhcmNoVGVybS50cmltKCkpLCAnaScpLnRlc3QoY21wLmxhYmVsKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldFNlYXJjaCgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0U2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY2hhbmdlTW9kZShtb2RlOiAnY29uZmlnJyB8ICdzZWxlY3QnIHwgJ3N0eWxlJykge1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLl9jYW5jZWwoKTtcbiAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgfVxuXG4gIGdldFN0eWxlKGlzUHJldmlldyA9IGZhbHNlKSB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHt9O1xuICAgIGlmIChpc1ByZXZpZXcgfHwgIXRoaXMuaXNEYXNoYm9hcmREZWZhdWx0U3R5bGUodGhpcy5zdHlsaW5nLmhlYWRlckNsYXNzKSkge1xuICAgICAgY3NzQ2xhc3Nlc1t0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3NdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNQcmV2aWV3IHx8ICF0aGlzLmlzRGFzaGJvYXJkRGVmYXVsdFN0eWxlKHRoaXMuc3R5bGluZy5jb250ZW50Q2xhc3MpKSB7XG4gICAgICBjc3NDbGFzc2VzW3RoaXMuc3R5bGluZy5jb250ZW50Q2xhc3NdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNQcmV2aWV3KSB7XG4gICAgICBjc3NDbGFzc2VzW2BkYXNoYm9hcmQtdGhlbWUtJHt0aGlzLmRlZmF1bHRTdHlsaW5nLmNvbnRlbnRDbGFzcy5zcGxpdCgnLScpLnBvcCgpfWBdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzQ2xhc3NlcztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZm9ybURpc2FibGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5zZWFyY2hTdWIpIHtcbiAgICAgIHRoaXMuc2VhcmNoU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgaGFzQ29uZmlnKCkge1xuICAgIGlmICh0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncz8udXBncmFkZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy53aWRnZXRDb25maWcuc2V0dGluZ3M/LmNvbmZpZ0NvbXBvbmVudCB8fCB0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncz8uY29uZmlnVGVtcGxhdGVVcmxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAhdGhpcy5keW5hbWljQ29tcG9uZW50Py5lcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGluZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2xhc3Nlczogc3RyaW5nW10gPVxuICAgICAgKHRoaXMubW8uYzh5X0Rhc2hib2FyZD8uY2xhc3NlcyAmJiBPYmplY3Qua2V5cyh0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2xhc3NlcykpIHx8IFtdO1xuICAgIGNvbnN0IGRhc2hib2FyZFdpZGdldENsYXNzZXM6IHN0cmluZ1tdID1cbiAgICAgICh0aGlzLm1vLmM4eV9EYXNoYm9hcmQ/LndpZGdldENsYXNzZXMgJiYgT2JqZWN0LmtleXModGhpcy5tby5jOHlfRGFzaGJvYXJkLndpZGdldENsYXNzZXMpKSB8fFxuICAgICAgW107XG4gICAgY29uc3Qgd2lkZ2V0Q2xhc3Nlczogc3RyaW5nW10gPSB0aGlzLmlzRWRpdCA/IE9iamVjdC5rZXlzKHRoaXMuY3VycmVudC5kYXRhLmNsYXNzZXMpIDogW107XG5cbiAgICB0aGlzLnN0eWxpbmcgPSB0aGlzLnNldERlZmF1bHRTdHlsZShbXG4gICAgICAuLi5kYXNoYm9hcmRDbGFzc2VzLFxuICAgICAgLi4uZGFzaGJvYXJkV2lkZ2V0Q2xhc3NlcyxcbiAgICAgIC4uLndpZGdldENsYXNzZXNcbiAgICBdKTtcbiAgICB0aGlzLmRlZmF1bHRTdHlsaW5nID0gdGhpcy5zZXREZWZhdWx0U3R5bGUoWy4uLmRhc2hib2FyZENsYXNzZXMsIC4uLmRhc2hib2FyZFdpZGdldENsYXNzZXNdKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXNoYm9hcmREZWZhdWx0U3R5bGUoY2xhc3NOYW1lKSB7XG4gICAgY29uc3QgYWxsQ2xhc3NlcyA9IHtcbiAgICAgIC4uLnRoaXMubW8uYzh5X0Rhc2hib2FyZC5jbGFzc2VzLFxuICAgICAgLi4udGhpcy5tby5jOHlfRGFzaGJvYXJkLndpZGdldENsYXNzZXNcbiAgICB9O1xuICAgIGNvbnN0IHN0eWxlcyA9IE9iamVjdC5rZXlzKGFsbENsYXNzZXMpLm1hcChjc3NDbGFzcyA9PiAoeyBjbGFzczogY3NzQ2xhc3MgfSkpO1xuICAgIGNvbnN0IHN0eWxlID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRTdHlsaW5nKFxuICAgICAgc3R5bGVzLFxuICAgICAgY2xhc3NOYW1lLnNwbGl0KCctJykucG9wKCksXG4gICAgICB1bmRlZmluZWRcbiAgICApO1xuICAgIHJldHVybiAhIXN0eWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREZWZhdWx0U3R5bGUoc2V0Q2xhc3Nlczogc3RyaW5nW10pIHtcbiAgICBsZXQgY29udGVudENsYXNzID0gdGhpcy5zdHlsaW5nLmNvbnRlbnRDbGFzcztcbiAgICBsZXQgaGVhZGVyQ2xhc3MgPSB0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3M7XG4gICAgY29uc3Qgc3R5bGVzID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZVxuICAgICAgLmdldEZpbHRlcmVkRGFzaGJvYXJkU3R5bGVzKHNldENsYXNzZXMpXG4gICAgICAubWFwKGMgPT4gYy5zcGxpdCgnLScpLnBvcCgpKTtcbiAgICBzdHlsZXMuZm9yRWFjaChzdHlsZU5hbWUgPT4ge1xuICAgICAgY29udGVudENsYXNzID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRTdHlsaW5nKFxuICAgICAgICBXSURHRVRfQ09OVEVOVF9DTEFTU0VTLFxuICAgICAgICBzdHlsZU5hbWUsXG4gICAgICAgIGNvbnRlbnRDbGFzc1xuICAgICAgKTtcbiAgICAgIGhlYWRlckNsYXNzID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRTdHlsaW5nKFxuICAgICAgICBXSURHRVRfSEVBREVSX0NMQVNTRVMsXG4gICAgICAgIHN0eWxlTmFtZSxcbiAgICAgICAgaGVhZGVyQ2xhc3NcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBoZWFkZXJDbGFzcywgY29udGVudENsYXNzIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXBvc2VXaWRnZXRDb25maWcoc2VsZWN0ZWRDb21wb25lbnQsIGNvbnRleHQgPSB7fSkge1xuICAgIGNvbnN0IHNldHRpbmcgPSB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICAuLi5zZWxlY3RlZENvbXBvbmVudC5kYXRhLnNldHRpbmdzLFxuICAgICAgICAuLi5nZXQoc2VsZWN0ZWRDb21wb25lbnQuZGF0YS5zZXR0aW5ncywgJ25nMS5vcHRpb25zJyksXG4gICAgICAgIC4uLmdldChzZWxlY3RlZENvbXBvbmVudC5kYXRhLCAnbmcxLm9wdGlvbnMnKSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZGFzaGJvYXJkTW86IHRoaXMubW8uYzh5X0Rhc2hib2FyZFxuICAgICAgfSxcbiAgICAgIC4uLnNlbGVjdGVkQ29tcG9uZW50LmRhdGEuY29uZmlnXG4gICAgfSBhcyBDb250ZXh0V2lkZ2V0Q29uZmlnO1xuICAgIHJldHVybiB0aGlzLmFwcGx5VGFyZ2V0SWZEZXZpY2VEYXNoYm9hcmQoc2V0dGluZyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGFyZ2V0SWZEZXZpY2VEYXNoYm9hcmQod2lkZ2V0Q29uZmlnOiBDb250ZXh0V2lkZ2V0Q29uZmlnKSB7XG4gICAgY29uc3QgaXNEZXZpY2VUeXBlID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0RldmljZVR5cGUodGhpcy5tbyk7XG5cbiAgICBpZiAoaXNEZXZpY2VUeXBlKSB7XG4gICAgICB3aWRnZXRDb25maWcuc2V0dGluZ3MuaGlkZVRhcmdldCA9IGlzRGV2aWNlVHlwZTtcblxuICAgICAgY29uc3Qgbm9EZXZpY2VUYXJnZXQgPSB3aWRnZXRDb25maWcuc2V0dGluZ3MubmcxXG4gICAgICAgID8gd2lkZ2V0Q29uZmlnLnNldHRpbmdzLm5nMS5vcHRpb25zLm5vRGV2aWNlVGFyZ2V0XG4gICAgICAgIDogd2lkZ2V0Q29uZmlnLnNldHRpbmdzLm5vRGV2aWNlVGFyZ2V0O1xuXG4gICAgICBpZiAoIW5vRGV2aWNlVGFyZ2V0KSB7XG4gICAgICAgIHdpZGdldENvbmZpZy5kZXZpY2UgPSB7XG4gICAgICAgICAgaWQ6IHRoaXMuY29udGV4dC5pZCxcbiAgICAgICAgICBuYW1lOiB0aGlzLmNvbnRleHQubmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd2lkZ2V0Q29uZmlnO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHNlcGFyYXRvclwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJoM1wiXG4gICAgdGl0bGU9XCJ7eyAnQWRkIHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIGlkPVwibW9kYWwtdGl0bGVcIlxuICAgICpuZ0lmPVwiIWN1cnJlbnRcIlxuICAgIHRyYW5zbGF0ZVxuICA+XG4gICAgQWRkIHdpZGdldFxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiaDNcIlxuICAgIHRpdGxlPVwie3sgJ0VkaXQgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgaWQ9XCJtb2RhbC10aXRsZVwiXG4gICAgKm5nSWY9XCJjdXJyZW50XCJcbiAgICB0cmFuc2xhdGVcbiAgPlxuICAgIEVkaXQgd2lkZ2V0XG4gIDwvZGl2PlxuPC9kaXY+XG48Zm9ybVxuICBuYW1lPVwiZm9ybVwiXG4gICNjb25maWdGb3JtPVwibmdGb3JtXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYzh5LW1vZGFsLXRhYnNcIlxuICAgIGlkPVwibW9kYWwtYm9keVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwidGFiQ29udGFpbmVyXCI+XG4gICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgbmF2LXRhYnNjOHkgcC1sLTI0XCI+XG4gICAgICAgIDxsaSBbY2xhc3MuYWN0aXZlXT1cIm1vZGUgPT09ICdzZWxlY3QnXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU2VsZWN0IHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZSgnc2VsZWN0Jyk7IChmYWxzZSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJ0aC1sYXJnZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5TZWxlY3Qgd2lkZ2V0PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGkgW2NsYXNzLmFjdGl2ZV09XCJtb2RlID09PSAnY29uZmlnJ1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0NvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZSgnY29uZmlnJyk7IChmYWxzZSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJjb2dcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+Q29uZmlndXJhdGlvbjwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpIFtjbGFzcy5hY3RpdmVdPVwibW9kZSA9PT0gJ3N0eWxlJ1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FwcGVhcmFuY2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZSgnc3R5bGUnKTsgKGZhbHNlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cInBhaW50LWJydXNoXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkFwcGVhcmFuY2U8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaW5uZXItc2Nyb2xsIG1vZGFsLWlubmVyLXNjcm9sbC0tZml4ZWRcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImJnLWxldmVsLTAgcC1sLTI0IHAtci0yNCBwLXQtOCBwLWItOCBzdGlja3ktaGVhZGVyLXRvcC0wXCJcbiAgICAgIHN0eWxlPVwiei1pbmRleDogMlwiXG4gICAgICAqbmdJZj1cIm1vZGUgPT09ICdzZWxlY3QnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zZWFyY2hcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlYXJjaCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdTZWFyY2jigKYnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwid2lkZ2V0LWNvbmZpZy0tU2VhcmNoXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwic2VhcmNoQ2hhbmdlJC5uZXh0KCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdTZWFyY2gnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRTZWFyY2goKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCJzZWFyY2hUZXJtLmxlbmd0aCA9PT0gMCA/ICdzZWFyY2gnIDogJ2Nsb3NlJ1wiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtb2RhbC1ib2R5IGJnLWxldmVsLTJcIlxuICAgICAgKm5nSWY9XCJtb2RlID09PSAnc2VsZWN0J1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZ3JvdXAgY2FyZC1zZWxlY3QgbS1iLTBcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTQgY29sLXhzLTZcIlxuICAgICAgICAgIHRpdGxlPVwie3sgY21wLmRlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY21wIG9mIHNlYXJjaFJlc3VsdCB8fCBjb21wb25lbnRzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIGQtY29sIGNhcmQgcC04XCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWQgPT09IGNtcFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoY21wKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyIHAtOCBtLWItOCBkLWNvbCBmbGV4LWNlbnRlciBmbGV4LWdyb3cgYmctbGV2ZWwtMlwiXG4gICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNtcC5wcmV2aWV3SW1hZ2U7IGVsc2UgcHJldmlld0ltYWdlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgxXCI+PGkgYzh5SWNvbj1cImZpbGUtaW1hZ2Utb1wiPjwvaT48L2Rpdj5cbiAgICAgICAgICAgICAgICA8c21hbGwgdHJhbnNsYXRlPlByZXZpZXcgbm90IGF2YWlsYWJsZTwvc21hbGw+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3ByZXZpZXdJbWFnZT5cbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIndpZGdldC10aHVtYm5haWxcIlxuICAgICAgICAgICAgICAgICAgYWx0XG4gICAgICAgICAgICAgICAgICBbc3JjXT1cImNtcC5wcmV2aWV3SW1hZ2VcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10aXRsZSB0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgIDxjOHktaGlnaGxpZ2h0XG4gICAgICAgICAgICAgICAgdGV4dD1cInt7IGNtcC5sYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgW3BhdHRlcm5dPVwic2VhcmNoVGVybVwiXG4gICAgICAgICAgICAgID48L2M4eS1oaWdobGlnaHQ+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZSB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hSZXN1bHQgJiYgc2VhcmNoUmVzdWx0Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImgxXCJcbiAgICAgICAgICAgIGM4eUljb249XCJzZWFyY2hcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8aDMgdHJhbnNsYXRlPk5vIHdpZGdldHMgZm91bmQuPC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICA8cFxuICAgICAgICAgICAgICBjbGFzcz1cIm0tci04XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJlcGhyYXNlIHlvdXIgc2VhcmNoIHRlcm0uXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVzZXQgc2VhcmNoJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRTZWFyY2goKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdSZXNldCBzZWFyY2gnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGhlIGZvbGxvd2luZyBpcyBpbnRlbnRpb25hbCBzZXQgdG8gaGlkZGVuIHRvIGFsbG93IHRoZSBWaWV3Q2hpbGQgcmVmIGluIHRoZSBjb250cm9sbGVyIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGQtY29sIGZpdC1oXCJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWRcIlxuICAgICAgW25nQ2xhc3NdPVwieyBoaWRkZW46IG1vZGUgIT09ICdjb25maWcnIH1cIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMTYgZmxleC1uby1zaHJpbmsgc2VwYXJhdG9yLWJvdHRvbSBwLWItMTZcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbC0yNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1sZWZ0IHRleHQtbWVkaXVtIGg0XCI+XG4gICAgICAgICAgICAgICAge3sgc2VsZWN0ZWQubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkLmRlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtci0yNFwiPlxuICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICBmb3I9XCJ3aWRnZXRUaXRsZVwiXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBUaXRsZVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICBpZD1cIndpZGdldFRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4nIHwgdHJhbnNsYXRlIH19IHt7IGNvbXBvbmVudExhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZC5kYXRhLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicm93IGZsZXgtZ3Jvd1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2QtZmxleCc6IHdpZGdldENvbmZpZy5vcHRpb25zIHx8IGhhc0NvbmZpZygpIH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJhLXMtc3RyZXRjaFwiXG4gICAgICAgICAgKm5nSWY9XCIhd2lkZ2V0Q29uZmlnLnNldHRpbmdzPy5ub0RldmljZVRhcmdldFwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2JnLWxldmVsLTEgY29sLXNtLTQgcC1yLTAnOiBoYXNDb25maWcoKSxcbiAgICAgICAgICAgICdiZy1sZXZlbC0wIGNvbC1zbS0xMic6ICFoYXNDb25maWcoKVxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmaXQtaCBiZy1pbmhlcml0IHAtbC0xNlwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwLXItMjQnOiAhaGFzQ29uZmlnKCkgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtcmVsYXRpdmUgYmctaW5oZXJpdFwiPlxuICAgICAgICAgICAgICA8Yzh5LWFzc2V0LXNlbGVjdG9yLW1pbGxlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1ibG9jayBiZy1pbmhlcml0IHAtcmVsYXRpdmVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDIycHgpXCJcbiAgICAgICAgICAgICAgICAob25TZWxlY3RlZCk9XCJzZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbkNsZWFyU2VsZWN0ZWQpPVwic2VsZWN0aW9uQ2hhbmdlZCgpXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgICAgICAgICAgIHZpZXc6ICdtaWxsZXInLFxuICAgICAgICAgICAgICAgICAgZ3JvdXBzU2VsZWN0YWJsZTogdGhpcy53aWRnZXRDb25maWcuc2V0dGluZ3M/Lmdyb3Vwc1NlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICBzaG93Q2hpbGREZXZpY2VzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY29sdW1uSGVhZGVyczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHNob3dVbmFzc2lnbmVkRGV2aWNlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHNlYXJjaDogIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLmNvbnRleHQ/LmFkZGl0aW9uUGFyZW50cyxcbiAgICAgICAgICAgICAgICAgIHNob3dGaWx0ZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBzaW5nbGVDb2x1bW46ICEhdGhpcy5oYXNDb25maWcoKVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFthc3NldF09XCJ3aWRnZXRDb25maWcuc2V0dGluZ3M/LmNvbnRleHRcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZERldmljZV09XCJzZWxlY3RlZERldmljZVwiXG4gICAgICAgICAgICAgID48L2M4eS1hc3NldC1zZWxlY3Rvci1taWxsZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnY29sLXNtLTgnOiAhd2lkZ2V0Q29uZmlnLnNldHRpbmdzPy5ub0RldmljZVRhcmdldCxcbiAgICAgICAgICAgICdjb2wtc20tMTInOiB3aWRnZXRDb25maWcuc2V0dGluZ3M/Lm5vRGV2aWNlVGFyZ2V0LFxuICAgICAgICAgICAgJ3NyLW9ubHknOiAhaGFzQ29uZmlnKClcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZHluYW1pYy1jb21wb25lbnRcbiAgICAgICAgICAgIGNsYXNzPVwiZC1ibG9ja1wiXG4gICAgICAgICAgICBzdHlsZT1cImhlaWdodDoge3sgaGFzQ29uZmlnKCkgPyAnY2FsYygxMDB2aCAtIDQyMnB4KScgOiAnMCcgfX1cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaW5uZXItc2Nyb2xsIHAtci0yNCc6ICF3aWRnZXRDb25maWcuc2V0dGluZ3M/Lm5vRGV2aWNlVGFyZ2V0IH1cIlxuICAgICAgICAgICAgW2NvbXBvbmVudElkXT1cInNlbGVjdGVkLmlkXCJcbiAgICAgICAgICAgIG1vZGU9XCJjb25maWdcIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJ3aWRnZXRDb25maWdcIlxuICAgICAgICAgICAgW25vdEZvdW5kRXJyb3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgI2NvbmZpZ1xuICAgICAgICAgID48L2M4eS1keW5hbWljLWNvbXBvbmVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibW9kYWwtYm9keSBwLXQtMFwiXG4gICAgICBzdHlsZT1cImhlaWdodDogY2FsYygxMDB2aCAtIDMxMHB4KVwiXG4gICAgICAqbmdJZj1cIm1vZGUgPT09ICdzdHlsZSdcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02XCI+XG4gICAgICAgICAgPGM4eS1hcHBlYXJhbmNlLXNldHRpbmdzXG4gICAgICAgICAgICBbKHRoZW1lQ2xhc3MpXT1cInN0eWxpbmcuY29udGVudENsYXNzXCJcbiAgICAgICAgICAgIFsoaGVhZGVyQ2xhc3MpXT1cInN0eWxpbmcuaGVhZGVyQ2xhc3NcIlxuICAgICAgICAgICAgW3Bvc3NpYmxlU3R5bGluZ1RoZW1lXT1cInBvc3NpYmxlU3R5bGluZy5XSURHRVRfQ09OVEVOVF9DTEFTU0VTXCJcbiAgICAgICAgICAgIFtwb3NzaWJsZVN0eWxpbmdIZWFkZXJdPVwicG9zc2libGVTdHlsaW5nLldJREdFVF9IRUFERVJfQ0xBU1NFU1wiXG4gICAgICAgICAgICBbZGVmYXVsdFRoZW1lQ2xhc3NdPVwiZGVmYXVsdFN0eWxpbmcuY29udGVudENsYXNzXCJcbiAgICAgICAgICAgIFtkZWZhdWx0SGVhZGVyQ2xhc3NdPVwiZGVmYXVsdFN0eWxpbmcuaGVhZGVyQ2xhc3NcIlxuICAgICAgICAgID48L2M4eS1hcHBlYXJhbmNlLXNldHRpbmdzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IHN0aWNreS1oZWFkZXItdG9wLTBcIj5cbiAgICAgICAgICA8Yzh5LXdpZGdldC1wcmV2aWV3XG4gICAgICAgICAgICBzdHlsZT1cImhlaWdodDogY2FsYygxMDB2aCAtIDM4MnB4KVwiXG4gICAgICAgICAgICBbcHJldmlld0NsYXNzZXNdPVwiZ2V0U3R5bGUodHJ1ZSlcIlxuICAgICAgICAgID48L2M4eS13aWRnZXQtcHJldmlldz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgPlxuICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICB0aXRsZT1cInt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICBjb250ZXh0RGFzaGJvYXJkU2VydmljZS5mb3JtRGlzYWJsZWQgfHwgY29uZmlnRm9ybS5pbnZhbGlkIHx8IGNoZWNrSWZEZXZpY2VSZXF1aXJlZCgpXG4gICAgICBcIlxuICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgIFthY3Rpb25OYW1lXT1cImN1cnJlbnQgPyAnZWRpdFdpZGdldCcgOiAnY3JlYXRlV2lkZ2V0J1wiXG4gICAgICBbYWN0aW9uRGF0YV09XCJ7IHdpZGdldE5hbWU6IHNlbGVjdGVkICYmIHNlbGVjdGVkLmlkIH1cIlxuICAgID5cbiAgICAgIHt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
|
|
235
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC93aWRnZXQtY29uZmlnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL3dpZGdldC1jb25maWcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFzQyx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXBHLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUwsc0JBQXNCLEVBQ3RCLHFCQUFxQixFQUV0QixNQUFNLDJCQUEyQixDQUFDO0FBQ25DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQWtCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7Ozs7Ozs7QUFNL0QsTUFBTSxPQUFPLHFCQUFxQjtJQTRDaEMsWUFDVSxhQUE0QixFQUM1QixLQUFpQixFQUNqQixTQUEyQixFQUM1Qix1QkFBZ0Q7UUFIL0Msa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsVUFBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQixjQUFTLEdBQVQsU0FBUyxDQUFrQjtR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QUFFLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYTthQUNuQztZQUNELEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE1BQU07U0FDVixDQUFDO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyw0QkFBNEIsQ0FBQyxZQUFpQztRQUNwRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4RSxJQUFJLFlBQVksRUFBRTtZQUNoQixZQUFZLENBQUMsUUFBUSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUM7WUFFaEQsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHO2dCQUM5QyxDQUFDLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWM7Z0JBQ2xELENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUV6QyxJQUFJLENBQUMsY0FBYyxFQUFFO2dCQUNuQixZQUFZLENBQUMsTUFBTSxHQUFHO29CQUNwQixFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO29CQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO2lCQUN4QixDQUFDO2FBQ0g7U0FDRjtRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7O2tIQTFSVSxxQkFBcUI7c0dBQXJCLHFCQUFxQixxS0NyQmxDLDAzVUFtVUE7MkZEOVNhLHFCQUFxQjtrQkFKakMsU0FBUzsrQkFDRSxtQkFBbUI7a01BNEI3QixnQkFBZ0I7c0JBRGYsU0FBUzt1QkFBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudERlZmluaXRpb24sIFdpZGdldCwgRHluYW1pY0NvbXBvbmVudENvbXBvbmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXNzZXRTZWxlY3Rpb25DaGFuZ2VFdmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXNzZXRzLW5hdmlnYXRvcic7XG5pbXBvcnQgeyBjbG9uZSwgY2xvbmVEZWVwLCBlc2NhcGVSZWdFeHAsIGdldCwgb21pdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCc01vZGFsUmVmIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9tb2RhbCc7XG5pbXBvcnQgeyBpaWYsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENvbnRleHREYXNoYm9hcmRNYW5hZ2VkT2JqZWN0LFxuICBXSURHRVRfQ09OVEVOVF9DTEFTU0VTLFxuICBXSURHRVRfSEVBREVSX0NMQVNTRVMsXG4gIENvbnRleHRXaWRnZXRDb25maWdcbn0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5tb2RlbCc7XG5pbXBvcnQgeyBXaWRnZXRTZXJ2aWNlIH0gZnJvbSAnLi93aWRnZXQuc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZXh0RGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vY29udGV4dC1kYXNoYm9hcmQuc2VydmljZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXdpZGdldC1jb25maWcnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LWNvbmZpZy5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0Q29uZmlnQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgc2VsZWN0ZWREZXZpY2U6IElNYW5hZ2VkT2JqZWN0O1xuICBtb2RlOiAnY29uZmlnJyB8ICdzZWxlY3QnIHwgJ3N0eWxlJyA9ICdzZWxlY3QnO1xuICBzZWFyY2hSZXN1bHQ6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uW107XG4gIGNvbXBvbmVudHM6IER5bmFtaWNDb21wb25lbnREZWZpbml0aW9uW107XG4gIHNlbGVjdGVkOiBEeW5hbWljQ29tcG9uZW50RGVmaW5pdGlvbjtcbiAgc2VhcmNoQ2hhbmdlJCA9IG5ldyBTdWJqZWN0KCk7XG4gIHNlYXJjaFRlcm0gPSAnJztcbiAgY29udGV4dDogYW55O1xuICBjb21wb25lbnRMYWJlbDogc3RyaW5nO1xuICBtbzogQ29udGV4dERhc2hib2FyZE1hbmFnZWRPYmplY3Q7XG4gIHN0eWxpbmcgPSB7XG4gICAgaGVhZGVyQ2xhc3M6ICdwYW5lbC10aXRsZS1yZWd1bGFyJyxcbiAgICBjb250ZW50Q2xhc3M6ICdwYW5lbC1jb250ZW50LWxpZ2h0J1xuICB9O1xuICBkZWZhdWx0U3R5bGluZyA9IHtcbiAgICBoZWFkZXJDbGFzczogJ3BhbmVsLXRpdGxlLXJlZ3VsYXInLFxuICAgIGNvbnRlbnRDbGFzczogJ3BhbmVsLWNvbnRlbnQtbGlnaHQnXG4gIH07XG4gIHBvc3NpYmxlU3R5bGluZyA9IHsgV0lER0VUX0hFQURFUl9DTEFTU0VTLCBXSURHRVRfQ09OVEVOVF9DTEFTU0VTIH07XG4gIGN1cnJlbnQ6IGFueTtcbiAgd2lkZ2V0Q29uZmlnOiBDb250ZXh0V2lkZ2V0Q29uZmlnO1xuICBpc1VwZ3JhZGUgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdjb25maWcnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgZHluYW1pY0NvbXBvbmVudDogRHluYW1pY0NvbXBvbmVudENvbXBvbmVudDtcblxuICBnZXQgaXNFZGl0KCkge1xuICAgIHJldHVybiAhIXRoaXMuY3VycmVudDtcbiAgfVxuXG4gIGdldCBpc0RldmljZVR5cGVEYXNoYm9hcmQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5tby5jOHlfRGFzaGJvYXJkPy5kZXZpY2VUeXBlICYmICEhdGhpcy5tby5jOHlfRGFzaGJvYXJkPy5kZXZpY2VUeXBlVmFsdWU7XG4gIH1cblxuICByZXN1bHQ6IFByb21pc2U8V2lkZ2V0PiA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB0aGlzLl9zYXZlID0gcmVzb2x2ZTtcbiAgICB0aGlzLl9jYW5jZWwgPSByZWplY3Q7XG4gIH0pO1xuXG4gIHByaXZhdGUgc2VhcmNoU3ViOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgX3NhdmU6ICh2YWx1ZTogV2lkZ2V0KSA9PiB2b2lkO1xuICBwcml2YXRlIF9jYW5jZWw6IChyZWFzb24/OiBhbnkpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB3aWRnZXRTZXJ2aWNlOiBXaWRnZXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWw6IEJzTW9kYWxSZWYsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHVibGljIGNvbnRleHREYXNoYm9hcmRTZXJ2aWNlOiBDb250ZXh0RGFzaGJvYXJkU2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdBZnRlckNvbnRlbnRJbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuY29tcG9uZW50cyA9IHRoaXMud2lkZ2V0U2VydmljZS5nZXRXaWRnZXREZWZpbml0aW9ucygpO1xuXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudCA9IGNsb25lKHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgdGhpcy5zZWxlY3QodGhpcy5zZWxlY3RlZCwgdGhpcy5pc0VkaXQgPyAnY29uZmlnJyA6ICdzZWxlY3QnKTtcbiAgICB9XG5cbiAgICB0aGlzLnNlYXJjaFN1YiA9IHRoaXMuc2VhcmNoQ2hhbmdlJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IGlpZigoKSA9PiBldmVudC53aGljaCAhPT0gMTMsIHRpbWVyKDIwMCksIHRpbWVyKDEwKSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZWFyY2goKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5zZXRTdHlsaW5ncygpO1xuXG4gICAgaWYgKHRoaXMud2lkZ2V0Q29uZmlnICYmIHRoaXMud2lkZ2V0Q29uZmlnLmRldmljZSkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwodGhpcy53aWRnZXRDb25maWcuZGV2aWNlLmlkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWREZXZpY2UgPSBkYXRhO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrSWZEZXZpY2VSZXF1aXJlZCgpIHtcbiAgICByZXR1cm4gKFxuICAgICAgIXRoaXMud2lkZ2V0Q29uZmlnIHx8XG4gICAgICAoIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLmRldmljZVRhcmdldE5vdFJlcXVpcmVkICYmXG4gICAgICAgICF0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgJiZcbiAgICAgICAgIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLm5vRGV2aWNlVGFyZ2V0KVxuICAgICk7XG4gIH1cblxuICBzZWxlY3Rpb25DaGFuZ2VkKHNlbGVjdGlvbjogQXNzZXRTZWxlY3Rpb25DaGFuZ2VFdmVudCkge1xuICAgIHRoaXMud2lkZ2V0Q29uZmlnLmRldmljZSA9IHNlbGVjdGlvbi5jaGFuZ2UuaXRlbTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgY29uc3QgaG9va1N1Y2Nlc3MgPSBhd2FpdCB0aGlzLmR5bmFtaWNDb21wb25lbnQuY2FsbExpZmVDeWNsZUhvb2tzKCkudG9Qcm9taXNlKCk7XG4gICAgaWYgKCFob29rU3VjY2Vzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHsgX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQgfSA9IHRoaXMuc2VsZWN0ZWQuZGF0YTtcblxuICAgIGlmIChcbiAgICAgIHRoaXMud2lkZ2V0Q29uZmlnICYmXG4gICAgICB0aGlzLndpZGdldENvbmZpZy5kZXZpY2UgJiZcbiAgICAgIC8vIHNlcmlhbGl6aW5nIHdpbGwgYmUgaGFuZGxlZCBieSByZXNvbHZlclxuICAgICAgIXRoaXMuc2VsZWN0ZWQ/LnJlc29sdmU/LmRldmljZVxuICAgICkge1xuICAgICAgY29uc3QgeyBpZCwgbmFtZSB9ID0gdGhpcy53aWRnZXRDb25maWcuZGV2aWNlO1xuICAgICAgdGhpcy53aWRnZXRDb25maWcuZGV2aWNlID0geyBpZCwgbmFtZSB9O1xuICAgIH1cblxuICAgIGNvbnN0IHdpZGdldCA9IHtcbiAgICAgIF94LFxuICAgICAgX3ksXG4gICAgICBfd2lkdGgsXG4gICAgICBfaGVpZ2h0LFxuICAgICAgY29uZmlnOiBvbWl0KHRoaXMud2lkZ2V0Q29uZmlnLCBbJ3NldHRpbmdzJywgJ2Rpc3BsYXlTZXR0aW5ncyddKSxcbiAgICAgIHRpdGxlOiB0aGlzLnNlbGVjdGVkLmRhdGEudGl0bGUsXG4gICAgICBjb21wb25lbnRJZDogdGhpcy5zZWxlY3RlZC5pZCxcbiAgICAgIGlkOiB0aGlzLmlzRWRpdCA/IHRoaXMuY3VycmVudC5kYXRhLmlkIDogU3RyaW5nKE1hdGgucmFuZG9tKCkpLnN1YnN0cigyKSxcbiAgICAgIGNsYXNzZXM6IHRoaXMuZ2V0U3R5bGUoKSxcbiAgICAgIC4uLighdGhpcy5pc0VkaXQgPyB0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncy53aWRnZXREZWZhdWx0cyA6IHt9KVxuICAgIH0gYXMgV2lkZ2V0O1xuXG4gICAgdGhpcy5fc2F2ZSh3aWRnZXQpO1xuICB9XG5cbiAgc2VsZWN0KGNtcCwgbW9kZTogJ3NlbGVjdCcgfCAnY29uZmlnJyA9ICdjb25maWcnKSB7XG4gICAgY21wLmRhdGEgPSBjbXAuZGF0YSB8fCB7fTtcbiAgICB0aGlzLnNlbGVjdGVkID0gY21wO1xuXG4gICAgdGhpcy5pc1VwZ3JhZGUgPSAhIWdldChjbXAsICdkYXRhLnNldHRpbmdzLnVwZ3JhZGUnKTtcbiAgICB0aGlzLmNvbnRleHREYXNoYm9hcmRTZXJ2aWNlLmZvcm1EaXNhYmxlZCA9IHRoaXMuaXNVcGdyYWRlO1xuXG4gICAgaWYgKHRoaXMuaXNFZGl0KSB7XG4gICAgICBjb25zdCB7IF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0LCBjbGFzc2VzLCB0aXRsZSB9ID0gdGhpcy5jdXJyZW50LmRhdGE7XG4gICAgICB0aGlzLnNlbGVjdGVkLmRhdGEgPSB7IC4uLnRoaXMuc2VsZWN0ZWQuZGF0YSwgX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQsIGNsYXNzZXMsIHRpdGxlIH07XG4gICAgfVxuXG4gICAgdGhpcy53aWRnZXRDb25maWcgPSBjbG9uZURlZXAodGhpcy5jb21wb3NlV2lkZ2V0Q29uZmlnKHRoaXMuc2VsZWN0ZWQsIHRoaXMuY29udGV4dCkpO1xuXG4gICAgdGhpcy5zZWxlY3RlZC5kYXRhLnRpdGxlID0gdGhpcy5zZWxlY3RlZC5kYXRhLnRpdGxlIHx8IGNtcC5sYWJlbDtcbiAgICB0aGlzLmNvbXBvbmVudExhYmVsID0gY21wLmxhYmVsO1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gIH1cblxuICBzZWFyY2goKSB7XG4gICAgaWYgKHRoaXMuc2VhcmNoVGVybS5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNlYXJjaFJlc3VsdCA9IHRoaXMuY29tcG9uZW50cy5maWx0ZXIoY21wID0+XG4gICAgICAgIG5ldyBSZWdFeHAoZXNjYXBlUmVnRXhwKHRoaXMuc2VhcmNoVGVybS50cmltKCkpLCAnaScpLnRlc3QoY21wLmxhYmVsKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXNldFNlYXJjaCgpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0U2VhcmNoKCkge1xuICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgY2hhbmdlTW9kZShtb2RlOiAnY29uZmlnJyB8ICdzZWxlY3QnIHwgJ3N0eWxlJykge1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICB0aGlzLl9jYW5jZWwoKTtcbiAgICB0aGlzLm1vZGFsLmhpZGUoKTtcbiAgfVxuXG4gIGdldFN0eWxlKGlzUHJldmlldyA9IGZhbHNlKSB7XG4gICAgY29uc3QgY3NzQ2xhc3NlcyA9IHt9O1xuICAgIGlmIChpc1ByZXZpZXcgfHwgIXRoaXMuaXNEYXNoYm9hcmREZWZhdWx0U3R5bGUodGhpcy5zdHlsaW5nLmhlYWRlckNsYXNzKSkge1xuICAgICAgY3NzQ2xhc3Nlc1t0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3NdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNQcmV2aWV3IHx8ICF0aGlzLmlzRGFzaGJvYXJkRGVmYXVsdFN0eWxlKHRoaXMuc3R5bGluZy5jb250ZW50Q2xhc3MpKSB7XG4gICAgICBjc3NDbGFzc2VzW3RoaXMuc3R5bGluZy5jb250ZW50Q2xhc3NdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNQcmV2aWV3KSB7XG4gICAgICBjc3NDbGFzc2VzW2BkYXNoYm9hcmQtdGhlbWUtJHt0aGlzLmRlZmF1bHRTdHlsaW5nLmNvbnRlbnRDbGFzcy5zcGxpdCgnLScpLnBvcCgpfWBdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3NzQ2xhc3NlcztcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGV4dERhc2hib2FyZFNlcnZpY2UuZm9ybURpc2FibGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5zZWFyY2hTdWIpIHtcbiAgICAgIHRoaXMuc2VhcmNoU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgaGFzQ29uZmlnKCkge1xuICAgIGlmICh0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncz8udXBncmFkZSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy53aWRnZXRDb25maWcuc2V0dGluZ3M/LmNvbmZpZ0NvbXBvbmVudCB8fCB0aGlzLndpZGdldENvbmZpZy5zZXR0aW5ncz8uY29uZmlnVGVtcGxhdGVVcmxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiAhdGhpcy5keW5hbWljQ29tcG9uZW50Py5lcnJvcjtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U3R5bGluZ3MoKTogdm9pZCB7XG4gICAgY29uc3QgZGFzaGJvYXJkQ2xhc3Nlczogc3RyaW5nW10gPVxuICAgICAgKHRoaXMubW8uYzh5X0Rhc2hib2FyZD8uY2xhc3NlcyAmJiBPYmplY3Qua2V5cyh0aGlzLm1vLmM4eV9EYXNoYm9hcmQuY2xhc3NlcykpIHx8IFtdO1xuICAgIGNvbnN0IGRhc2hib2FyZFdpZGdldENsYXNzZXM6IHN0cmluZ1tdID1cbiAgICAgICh0aGlzLm1vLmM4eV9EYXNoYm9hcmQ/LndpZGdldENsYXNzZXMgJiYgT2JqZWN0LmtleXModGhpcy5tby5jOHlfRGFzaGJvYXJkLndpZGdldENsYXNzZXMpKSB8fFxuICAgICAgW107XG4gICAgY29uc3Qgd2lkZ2V0Q2xhc3Nlczogc3RyaW5nW10gPSB0aGlzLmlzRWRpdCA/IE9iamVjdC5rZXlzKHRoaXMuY3VycmVudC5kYXRhLmNsYXNzZXMpIDogW107XG5cbiAgICB0aGlzLnN0eWxpbmcgPSB0aGlzLnNldERlZmF1bHRTdHlsZShbXG4gICAgICAuLi5kYXNoYm9hcmRDbGFzc2VzLFxuICAgICAgLi4uZGFzaGJvYXJkV2lkZ2V0Q2xhc3NlcyxcbiAgICAgIC4uLndpZGdldENsYXNzZXNcbiAgICBdKTtcbiAgICB0aGlzLmRlZmF1bHRTdHlsaW5nID0gdGhpcy5zZXREZWZhdWx0U3R5bGUoWy4uLmRhc2hib2FyZENsYXNzZXMsIC4uLmRhc2hib2FyZFdpZGdldENsYXNzZXNdKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNEYXNoYm9hcmREZWZhdWx0U3R5bGUoY2xhc3NOYW1lKSB7XG4gICAgY29uc3QgYWxsQ2xhc3NlcyA9IHtcbiAgICAgIC4uLnRoaXMubW8uYzh5X0Rhc2hib2FyZC5jbGFzc2VzLFxuICAgICAgLi4udGhpcy5tby5jOHlfRGFzaGJvYXJkLndpZGdldENsYXNzZXNcbiAgICB9O1xuICAgIGNvbnN0IHN0eWxlcyA9IE9iamVjdC5rZXlzKGFsbENsYXNzZXMpLm1hcChjc3NDbGFzcyA9PiAoeyBjbGFzczogY3NzQ2xhc3MgfSkpO1xuICAgIGNvbnN0IHN0eWxlID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRTdHlsaW5nKFxuICAgICAgc3R5bGVzLFxuICAgICAgY2xhc3NOYW1lLnNwbGl0KCctJykucG9wKCksXG4gICAgICB1bmRlZmluZWRcbiAgICApO1xuICAgIHJldHVybiAhIXN0eWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXREZWZhdWx0U3R5bGUoc2V0Q2xhc3Nlczogc3RyaW5nW10pIHtcbiAgICBsZXQgY29udGVudENsYXNzID0gdGhpcy5zdHlsaW5nLmNvbnRlbnRDbGFzcztcbiAgICBsZXQgaGVhZGVyQ2xhc3MgPSB0aGlzLnN0eWxpbmcuaGVhZGVyQ2xhc3M7XG4gICAgY29uc3Qgc3R5bGVzID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZVxuICAgICAgLmdldEZpbHRlcmVkRGFzaGJvYXJkU3R5bGVzKHNldENsYXNzZXMpXG4gICAgICAubWFwKGMgPT4gYy5zcGxpdCgnLScpLnBvcCgpKTtcbiAgICBzdHlsZXMuZm9yRWFjaChzdHlsZU5hbWUgPT4ge1xuICAgICAgY29udGVudENsYXNzID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRTdHlsaW5nKFxuICAgICAgICBXSURHRVRfQ09OVEVOVF9DTEFTU0VTLFxuICAgICAgICBzdHlsZU5hbWUsXG4gICAgICAgIGNvbnRlbnRDbGFzc1xuICAgICAgKTtcbiAgICAgIGhlYWRlckNsYXNzID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5nZXRTdHlsaW5nKFxuICAgICAgICBXSURHRVRfSEVBREVSX0NMQVNTRVMsXG4gICAgICAgIHN0eWxlTmFtZSxcbiAgICAgICAgaGVhZGVyQ2xhc3NcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4geyBoZWFkZXJDbGFzcywgY29udGVudENsYXNzIH07XG4gIH1cblxuICBwcml2YXRlIGNvbXBvc2VXaWRnZXRDb25maWcoc2VsZWN0ZWRDb21wb25lbnQsIGNvbnRleHQgPSB7fSkge1xuICAgIGNvbnN0IHNldHRpbmcgPSB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICAuLi5zZWxlY3RlZENvbXBvbmVudC5kYXRhLnNldHRpbmdzLFxuICAgICAgICAuLi5nZXQoc2VsZWN0ZWRDb21wb25lbnQuZGF0YS5zZXR0aW5ncywgJ25nMS5vcHRpb25zJyksXG4gICAgICAgIC4uLmdldChzZWxlY3RlZENvbXBvbmVudC5kYXRhLCAnbmcxLm9wdGlvbnMnKSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgZGFzaGJvYXJkTW86IHRoaXMubW8uYzh5X0Rhc2hib2FyZFxuICAgICAgfSxcbiAgICAgIC4uLnNlbGVjdGVkQ29tcG9uZW50LmRhdGEuY29uZmlnXG4gICAgfSBhcyBDb250ZXh0V2lkZ2V0Q29uZmlnO1xuICAgIHJldHVybiB0aGlzLmFwcGx5VGFyZ2V0SWZEZXZpY2VEYXNoYm9hcmQoc2V0dGluZyk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5VGFyZ2V0SWZEZXZpY2VEYXNoYm9hcmQod2lkZ2V0Q29uZmlnOiBDb250ZXh0V2lkZ2V0Q29uZmlnKSB7XG4gICAgY29uc3QgaXNEZXZpY2VUeXBlID0gdGhpcy5jb250ZXh0RGFzaGJvYXJkU2VydmljZS5pc0RldmljZVR5cGUodGhpcy5tbyk7XG5cbiAgICBpZiAoaXNEZXZpY2VUeXBlKSB7XG4gICAgICB3aWRnZXRDb25maWcuc2V0dGluZ3MuaGlkZVRhcmdldCA9IGlzRGV2aWNlVHlwZTtcblxuICAgICAgY29uc3Qgbm9EZXZpY2VUYXJnZXQgPSB3aWRnZXRDb25maWcuc2V0dGluZ3MubmcxXG4gICAgICAgID8gd2lkZ2V0Q29uZmlnLnNldHRpbmdzLm5nMS5vcHRpb25zLm5vRGV2aWNlVGFyZ2V0XG4gICAgICAgIDogd2lkZ2V0Q29uZmlnLnNldHRpbmdzLm5vRGV2aWNlVGFyZ2V0O1xuXG4gICAgICBpZiAoIW5vRGV2aWNlVGFyZ2V0KSB7XG4gICAgICAgIHdpZGdldENvbmZpZy5kZXZpY2UgPSB7XG4gICAgICAgICAgaWQ6IHRoaXMuY29udGV4dC5pZCxcbiAgICAgICAgICBuYW1lOiB0aGlzLmNvbnRleHQubmFtZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd2lkZ2V0Q29uZmlnO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibW9kYWwtaGVhZGVyIHNlcGFyYXRvclwiPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJoM1wiXG4gICAgdGl0bGU9XCJ7eyAnQWRkIHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgIGlkPVwibW9kYWwtdGl0bGVcIlxuICAgICpuZ0lmPVwiIWN1cnJlbnRcIlxuICAgIHRyYW5zbGF0ZVxuICA+XG4gICAgQWRkIHdpZGdldFxuICA8L2Rpdj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiaDNcIlxuICAgIHRpdGxlPVwie3sgJ0VkaXQgd2lkZ2V0JyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgaWQ9XCJtb2RhbC10aXRsZVwiXG4gICAgKm5nSWY9XCJjdXJyZW50XCJcbiAgICB0cmFuc2xhdGVcbiAgPlxuICAgIEVkaXQgd2lkZ2V0XG4gIDwvZGl2PlxuPC9kaXY+XG48Zm9ybVxuICBuYW1lPVwiZm9ybVwiXG4gICNjb25maWdGb3JtPVwibmdGb3JtXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiYzh5LW1vZGFsLXRhYnNcIlxuICAgIGlkPVwibW9kYWwtYm9keVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwidGFiQ29udGFpbmVyXCI+XG4gICAgICA8dWwgY2xhc3M9XCJuYXYgbmF2LXRhYnMgbmF2LXRhYnNjOHkgcC1sLTI0XCI+XG4gICAgICAgIDxsaSBbY2xhc3MuYWN0aXZlXT1cIm1vZGUgPT09ICdzZWxlY3QnXCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJidG5cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU2VsZWN0IHdpZGdldCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZSgnc2VsZWN0Jyk7IChmYWxzZSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJ0aC1sYXJnZVwiPjwvaT5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5TZWxlY3Qgd2lkZ2V0PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGkgW2NsYXNzLmFjdGl2ZV09XCJtb2RlID09PSAnY29uZmlnJ1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0NvbmZpZ3VyYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZSgnY29uZmlnJyk7IChmYWxzZSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGM4eUljb249XCJjb2dcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGU+Q29uZmlndXJhdGlvbjwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpIFtjbGFzcy5hY3RpdmVdPVwibW9kZSA9PT0gJ3N0eWxlJ1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ0FwcGVhcmFuY2UnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZWxlY3RlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY2hhbmdlTW9kZSgnc3R5bGUnKTsgKGZhbHNlKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cInBhaW50LWJydXNoXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPkFwcGVhcmFuY2U8L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvbGk+XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwibW9kYWwtaW5uZXItc2Nyb2xsIG1vZGFsLWlubmVyLXNjcm9sbC0tZml4ZWRcIj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImJnLWxldmVsLTAgcC1sLTI0IHAtci0yNCBwLXQtOCBwLWItOCBzdGlja3ktaGVhZGVyLXRvcC0wXCJcbiAgICAgIHN0eWxlPVwiei1pbmRleDogMlwiXG4gICAgICAqbmdJZj1cIm1vZGUgPT09ICdzZWxlY3QnXCJcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zZWFyY2hcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlYXJjaCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdTZWFyY2jigKYnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICBkYXRhLWN5PVwid2lkZ2V0LWNvbmZpZy0tU2VhcmNoXCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwic2VhcmNoQ2hhbmdlJC5uZXh0KCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZG90XCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cInt7ICdTZWFyY2gnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRTZWFyY2goKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBbYzh5SWNvbl09XCJzZWFyY2hUZXJtLmxlbmd0aCA9PT0gMCA/ICdzZWFyY2gnIDogJ2Nsb3NlJ1wiPjwvaT5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJtb2RhbC1ib2R5IGJnLWxldmVsLTJcIlxuICAgICAgKm5nSWY9XCJtb2RlID09PSAnc2VsZWN0J1wiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cImNhcmQtZ3JvdXAgY2FyZC1zZWxlY3QgbS1iLTBcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTMgY29sLXNtLTQgY29sLXhzLTZcIlxuICAgICAgICAgIHRpdGxlPVwie3sgY21wLmRlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY21wIG9mIHNlYXJjaFJlc3VsdCB8fCBjb21wb25lbnRzXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWNsZWFuIGQtY29sIGNhcmQgcC04XCJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwic2VsZWN0ZWQgPT09IGNtcFwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoY21wKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyIHAtOCBtLWItOCBkLWNvbCBmbGV4LWNlbnRlciBmbGV4LWdyb3cgYmctbGV2ZWwtMlwiXG4gICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNtcC5wcmV2aWV3SW1hZ2U7IGVsc2UgcHJldmlld0ltYWdlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgxXCI+PGkgYzh5SWNvbj1cImZpbGUtaW1hZ2Utb1wiPjwvaT48L2Rpdj5cbiAgICAgICAgICAgICAgICA8c21hbGwgdHJhbnNsYXRlPlByZXZpZXcgbm90IGF2YWlsYWJsZTwvc21hbGw+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3ByZXZpZXdJbWFnZT5cbiAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIndpZGdldC10aHVtYm5haWxcIlxuICAgICAgICAgICAgICAgICAgYWx0XG4gICAgICAgICAgICAgICAgICBbc3JjXT1cImNtcC5wcmV2aWV3SW1hZ2VcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxwIGNsYXNzPVwiY2FyZC10aXRsZSB0ZXh0LXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgIDxjOHktaGlnaGxpZ2h0XG4gICAgICAgICAgICAgICAgdGV4dD1cInt7IGNtcC5sYWJlbCB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgICAgW3BhdHRlcm5dPVwic2VhcmNoVGVybVwiXG4gICAgICAgICAgICAgID48L2M4eS1oaWdobGlnaHQ+XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImM4eS1lbXB0eS1zdGF0ZSB0ZXh0LWNlbnRlclwiXG4gICAgICAgICAgKm5nSWY9XCJzZWFyY2hSZXN1bHQgJiYgc2VhcmNoUmVzdWx0Lmxlbmd0aCA9PT0gMFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImgxXCJcbiAgICAgICAgICAgIGM4eUljb249XCJzZWFyY2hcIlxuICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICA8aDMgdHJhbnNsYXRlPk5vIHdpZGdldHMgZm91bmQuPC9oMz5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgICA8cFxuICAgICAgICAgICAgICBjbGFzcz1cIm0tci04XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFJlcGhyYXNlIHlvdXIgc2VhcmNoIHRlcm0uXG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVzZXQgc2VhcmNoJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVzZXRTZWFyY2goKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdSZXNldCBzZWFyY2gnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVGhlIGZvbGxvd2luZyBpcyBpbnRlbnRpb25hbCBzZXQgdG8gaGlkZGVuIHRvIGFsbG93IHRoZSBWaWV3Q2hpbGQgcmVmIGluIHRoZSBjb250cm9sbGVyIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZC1mbGV4IGQtY29sIGZpdC1oXCJcbiAgICAgICpuZ0lmPVwic2VsZWN0ZWRcIlxuICAgICAgW25nQ2xhc3NdPVwieyBoaWRkZW46IG1vZGUgIT09ICdjb25maWcnIH1cIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMTYgZmxleC1uby1zaHJpbmsgc2VwYXJhdG9yLWJvdHRvbSBwLWItMTZcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tNFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtbC0yNFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1sZWZ0IHRleHQtbWVkaXVtIGg0XCI+XG4gICAgICAgICAgICAgICAge3sgc2VsZWN0ZWQubGFiZWwgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkLmRlc2NyaXB0aW9uIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtc20tOFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtci0yNFwiPlxuICAgICAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgICAgICBmb3I9XCJ3aWRnZXRUaXRsZVwiXG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICBUaXRsZVxuICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgICAgICBpZD1cIndpZGdldFRpdGxlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4nIHwgdHJhbnNsYXRlIH19IHt7IGNvbXBvbmVudExhYmVsIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAgIG5hbWU9XCJ0aXRsZVwiXG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICByZXF1aXJlZFxuICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxlY3RlZC5kYXRhLnRpdGxlXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicm93IGZsZXgtZ3Jvd1wiXG4gICAgICAgIFtuZ0NsYXNzXT1cInsgJ2QtZmxleCc6IHdpZGdldENvbmZpZy5vcHRpb25zIHx8IGhhc0NvbmZpZygpIH1cIlxuICAgICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJhLXMtc3RyZXRjaFwiXG4gICAgICAgICAgKm5nSWY9XCIhd2lkZ2V0Q29uZmlnLnNldHRpbmdzPy5ub0RldmljZVRhcmdldCAmJiBtb2RlID09PSAnY29uZmlnJ1wiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2JnLWxldmVsLTEgY29sLXNtLTQgcC1yLTAnOiBoYXNDb25maWcoKSxcbiAgICAgICAgICAgICdiZy1sZXZlbC0wIGNvbC1zbS0xMic6ICFoYXNDb25maWcoKVxuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmaXQtaCBiZy1pbmhlcml0IHAtbC0xNlwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwLXItMjQnOiAhaGFzQ29uZmlnKCkgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInAtcmVsYXRpdmUgYmctaW5oZXJpdFwiPlxuICAgICAgICAgICAgICA8Yzh5LWFzc2V0LXNlbGVjdG9yLW1pbGxlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1ibG9jayBiZy1pbmhlcml0IHAtcmVsYXRpdmVcIlxuICAgICAgICAgICAgICAgIHN0eWxlPVwiaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNDIycHgpXCJcbiAgICAgICAgICAgICAgICAob25TZWxlY3RlZCk9XCJzZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChvbkNsZWFyU2VsZWN0ZWQpPVwic2VsZWN0aW9uQ2hhbmdlZCgpXCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cIntcbiAgICAgICAgICAgICAgICAgIHZpZXc6ICdtaWxsZXInLFxuICAgICAgICAgICAgICAgICAgZ3JvdXBzU2VsZWN0YWJsZTogdGhpcy53aWRnZXRDb25maWcuc2V0dGluZ3M/Lmdyb3Vwc1NlbGVjdGFibGUsXG4gICAgICAgICAgICAgICAgICBzaG93Q2hpbGREZXZpY2VzOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgY29sdW1uSGVhZGVyczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHNob3dVbmFzc2lnbmVkRGV2aWNlczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHNlYXJjaDogIXRoaXMud2lkZ2V0Q29uZmlnLnNldHRpbmdzLmNvbnRleHQ/LmFkZGl0aW9uUGFyZW50cyxcbiAgICAgICAgICAgICAgICAgIHNob3dGaWx0ZXI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBzaW5nbGVDb2x1bW46ICEhdGhpcy5oYXNDb25maWcoKVxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFthc3NldF09XCJ3aWRnZXRDb25maWcuc2V0dGluZ3M/LmNvbnRleHRcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZERldmljZV09XCJzZWxlY3RlZERldmljZVwiXG4gICAgICAgICAgICAgID48L2M4eS1hc3NldC1zZWxlY3Rvci1taWxsZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnY29sLXNtLTgnOiAhd2lkZ2V0Q29uZmlnLnNldHRpbmdzPy5ub0RldmljZVRhcmdldCxcbiAgICAgICAgICAgICdjb2wtc20tMTInOiB3aWRnZXRDb25maWcuc2V0dGluZ3M/Lm5vRGV2aWNlVGFyZ2V0LFxuICAgICAgICAgICAgJ3NyLW9ubHknOiAhaGFzQ29uZmlnKClcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxjOHktZHluYW1pYy1jb21wb25lbnRcbiAgICAgICAgICAgIGNsYXNzPVwiZC1ibG9ja1wiXG4gICAgICAgICAgICBzdHlsZT1cImhlaWdodDoge3sgaGFzQ29uZmlnKCkgPyAnY2FsYygxMDB2aCAtIDQyMnB4KScgOiAnMCcgfX1cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaW5uZXItc2Nyb2xsIHAtci0yNCc6ICF3aWRnZXRDb25maWcuc2V0dGluZ3M/Lm5vRGV2aWNlVGFyZ2V0IH1cIlxuICAgICAgICAgICAgW2NvbXBvbmVudElkXT1cInNlbGVjdGVkLmlkXCJcbiAgICAgICAgICAgIG1vZGU9XCJjb25maWdcIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJ3aWRnZXRDb25maWdcIlxuICAgICAgICAgICAgW25vdEZvdW5kRXJyb3JdPVwiZmFsc2VcIlxuICAgICAgICAgICAgI2NvbmZpZ1xuICAgICAgICAgID48L2M4eS1keW5hbWljLWNvbXBvbmVudD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibW9kYWwtYm9keSBwLXQtMFwiXG4gICAgICBzdHlsZT1cImhlaWdodDogY2FsYygxMDB2aCAtIDMxMHB4KVwiXG4gICAgICAqbmdJZj1cIm1vZGUgPT09ICdzdHlsZSdcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02XCI+XG4gICAgICAgICAgPGM4eS1hcHBlYXJhbmNlLXNldHRpbmdzXG4gICAgICAgICAgICBbKHRoZW1lQ2xhc3MpXT1cInN0eWxpbmcuY29udGVudENsYXNzXCJcbiAgICAgICAgICAgIFsoaGVhZGVyQ2xhc3MpXT1cInN0eWxpbmcuaGVhZGVyQ2xhc3NcIlxuICAgICAgICAgICAgW3Bvc3NpYmxlU3R5bGluZ1RoZW1lXT1cInBvc3NpYmxlU3R5bGluZy5XSURHRVRfQ09OVEVOVF9DTEFTU0VTXCJcbiAgICAgICAgICAgIFtwb3NzaWJsZVN0eWxpbmdIZWFkZXJdPVwicG9zc2libGVTdHlsaW5nLldJREdFVF9IRUFERVJfQ0xBU1NFU1wiXG4gICAgICAgICAgICBbZGVmYXVsdFRoZW1lQ2xhc3NdPVwiZGVmYXVsdFN0eWxpbmcuY29udGVudENsYXNzXCJcbiAgICAgICAgICAgIFtkZWZhdWx0SGVhZGVyQ2xhc3NdPVwiZGVmYXVsdFN0eWxpbmcuaGVhZGVyQ2xhc3NcIlxuICAgICAgICAgID48L2M4eS1hcHBlYXJhbmNlLXNldHRpbmdzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IHN0aWNreS1oZWFkZXItdG9wLTBcIj5cbiAgICAgICAgICA8Yzh5LXdpZGdldC1wcmV2aWV3XG4gICAgICAgICAgICBzdHlsZT1cImhlaWdodDogY2FsYygxMDB2aCAtIDM4MnB4KVwiXG4gICAgICAgICAgICBbcHJldmlld0NsYXNzZXNdPVwiZ2V0U3R5bGUodHJ1ZSlcIlxuICAgICAgICAgID48L2M4eS13aWRnZXQtcHJldmlldz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlclwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIHRpdGxlPVwie3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAoY2xpY2spPVwiY2xvc2UoKVwiXG4gICAgPlxuICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXG4gICAgICB0aXRsZT1cInt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIChjbGljayk9XCJzYXZlKClcIlxuICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICBjb250ZXh0RGFzaGJvYXJkU2VydmljZS5mb3JtRGlzYWJsZWQgfHwgY29uZmlnRm9ybS5pbnZhbGlkIHx8IGNoZWNrSWZEZXZpY2VSZXF1aXJlZCgpXG4gICAgICBcIlxuICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgIFthY3Rpb25OYW1lXT1cImN1cnJlbnQgPyAnZWRpdFdpZGdldCcgOiAnY3JlYXRlV2lkZ2V0J1wiXG4gICAgICBbYWN0aW9uRGF0YV09XCJ7IHdpZGdldE5hbWU6IHNlbGVjdGVkICYmIHNlbGVjdGVkLmlkIH1cIlxuICAgID5cbiAgICAgIHt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
|