@c8y/ngx-components 1018.0.176 → 1018.0.183
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/core/bootstrap/cookie-banner/cookie-banner.service.d.ts +1 -1
- package/core/common/ApplicationOptions.d.ts +2 -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/core/product-experience/gainsight.service.d.ts +86 -28
- package/core/product-experience/index.d.ts +1 -0
- package/core/product-experience/product-experience.module.d.ts +18 -5
- package/core/product-experience/user-engagements.service.d.ts +109 -0
- package/core/user/user-edit-modal.component.d.ts +33 -6
- package/core/user/user-edit.component.d.ts +6 -11
- package/esm2020/context-dashboard/widget-config.component.mjs +3 -3
- package/esm2020/core/bootstrap/cookie-banner/cookie-banner.service.mjs +2 -2
- package/esm2020/core/common/ApplicationOptions.mjs +1 -1
- 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/esm2020/core/product-experience/gainsight.service.mjs +170 -81
- package/esm2020/core/product-experience/index.mjs +2 -1
- package/esm2020/core/product-experience/product-experience.module.mjs +42 -24
- package/esm2020/core/product-experience/user-engagements.service.mjs +174 -0
- package/esm2020/core/user/user-edit-modal.component.mjs +68 -33
- package/esm2020/core/user/user-edit.component.mjs +30 -39
- package/esm2020/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs +3 -3
- 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-datapoint-selector.mjs +2 -2
- package/fesm2015/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components.mjs +516 -167
- package/fesm2015/c8y-ngx-components.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-datapoint-selector.mjs +2 -2
- package/fesm2020/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components.mjs +511 -161
- package/fesm2020/c8y-ngx-components.mjs.map +1 -1
- package/locales/locales.pot +2 -2
- package/package.json +1 -1
|
@@ -4,9 +4,7 @@ import { clone } from 'lodash-es';
|
|
|
4
4
|
import { BsModalService } from 'ngx-bootstrap/modal';
|
|
5
5
|
import { AlertService } from '../alert/alert.service';
|
|
6
6
|
import { AppStateService } from '../common/ui-state.service';
|
|
7
|
-
import { UserPreferencesService } from '../common/user-preferences/user-preferences.service';
|
|
8
7
|
import { TranslateService } from '../i18n/translate.service';
|
|
9
|
-
import { GainsightService } from '../product-experience/gainsight.service';
|
|
10
8
|
import { UserTotpSetupComponent } from './user-totp-setup.component';
|
|
11
9
|
import * as i0 from "@angular/core";
|
|
12
10
|
import * as i1 from "../common/ui-state.service";
|
|
@@ -14,19 +12,17 @@ import * as i2 from "../i18n/translate.service";
|
|
|
14
12
|
import * as i3 from "ngx-bootstrap/modal";
|
|
15
13
|
import * as i4 from "../alert/alert.service";
|
|
16
14
|
import * as i5 from "@c8y/client";
|
|
17
|
-
import * as i6 from "../
|
|
18
|
-
import * as i7 from "../
|
|
19
|
-
import * as i8 from "
|
|
20
|
-
import * as i9 from "../forms/
|
|
21
|
-
import * as i10 from "
|
|
22
|
-
import * as i11 from "../
|
|
23
|
-
import * as i12 from "
|
|
24
|
-
import * as i13 from "../
|
|
25
|
-
import * as i14 from "
|
|
26
|
-
import * as i15 from "../authentication/new-password.component";
|
|
27
|
-
import * as i16 from "../i18n/c8y-translate.pipe";
|
|
15
|
+
import * as i6 from "../forms/phone-validation.directive";
|
|
16
|
+
import * as i7 from "../forms/default-validation.directive";
|
|
17
|
+
import * as i8 from "@angular/forms";
|
|
18
|
+
import * as i9 from "../forms/form-group.component";
|
|
19
|
+
import * as i10 from "../forms/required-input-placeholder.directive";
|
|
20
|
+
import * as i11 from "../i18n/c8y-translate.directive";
|
|
21
|
+
import * as i12 from "@angular/common";
|
|
22
|
+
import * as i13 from "../authentication/new-password.component";
|
|
23
|
+
import * as i14 from "../i18n/c8y-translate.pipe";
|
|
28
24
|
export class UserEditComponent {
|
|
29
|
-
constructor(state, translate, bsModalService, alert, userService, tenantLoginOptionsService, tenantService
|
|
25
|
+
constructor(state, translate, bsModalService, alert, userService, tenantLoginOptionsService, tenantService) {
|
|
30
26
|
this.state = state;
|
|
31
27
|
this.translate = translate;
|
|
32
28
|
this.bsModalService = bsModalService;
|
|
@@ -34,15 +30,13 @@ export class UserEditComponent {
|
|
|
34
30
|
this.userService = userService;
|
|
35
31
|
this.tenantLoginOptionsService = tenantLoginOptionsService;
|
|
36
32
|
this.tenantService = tenantService;
|
|
37
|
-
this.userPreferencesService = userPreferencesService;
|
|
38
|
-
this.gainsightService = gainsightService;
|
|
39
33
|
this.loading = false;
|
|
40
|
-
this.
|
|
34
|
+
this.showProductExperienceOptions = false;
|
|
41
35
|
this.isUsageTrackingEnabled = true;
|
|
42
|
-
this.
|
|
36
|
+
this.isUserEngagementPreferenceEnabled = true;
|
|
43
37
|
this.onUser = new EventEmitter();
|
|
44
|
-
this.
|
|
45
|
-
this.
|
|
38
|
+
this.onUsageTrackingChange = new EventEmitter();
|
|
39
|
+
this.onUserEngagementPreferenceChange = new EventEmitter();
|
|
46
40
|
this.onCancel = new EventEmitter();
|
|
47
41
|
this.userHasActiveTotp = false;
|
|
48
42
|
this.userCanSetupTotp = false;
|
|
@@ -67,13 +61,6 @@ export class UserEditComponent {
|
|
|
67
61
|
this.isPhoneRequired = true;
|
|
68
62
|
}
|
|
69
63
|
}
|
|
70
|
-
async onEnablingProductUsageTracking(isUsageTrackingEnabled) {
|
|
71
|
-
if (isUsageTrackingEnabled && this.isGainsightEngagementsEnabled === undefined) {
|
|
72
|
-
this.isGainsightEngagementsEnabled = await this.userPreferencesService
|
|
73
|
-
.get(this.gainsightService.USER_PREFERENCES_GAINSIGHT_ENGAGEMENTS_KEY)
|
|
74
|
-
.toPromise();
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
64
|
setupTotp() {
|
|
78
65
|
this.bsModalService.show(UserTotpSetupComponent, {
|
|
79
66
|
class: 'modal-sm',
|
|
@@ -89,9 +76,13 @@ export class UserEditComponent {
|
|
|
89
76
|
if (this.loading) {
|
|
90
77
|
return;
|
|
91
78
|
}
|
|
92
|
-
if (this.
|
|
93
|
-
this.
|
|
94
|
-
|
|
79
|
+
if (this.showProductExperienceOptions) {
|
|
80
|
+
this.onUsageTrackingChange.emit(this.isUsageTrackingEnabled);
|
|
81
|
+
/**
|
|
82
|
+
* Emits a user engagement preference change event.
|
|
83
|
+
* If usage tracking is disabled, it emits `false`. Otherwise, it emits the current state of the user engagement preference.
|
|
84
|
+
*/
|
|
85
|
+
this.onUserEngagementPreferenceChange.emit(this.isUsageTrackingEnabled === false ? false : this.isUserEngagementPreferenceEnabled);
|
|
95
86
|
}
|
|
96
87
|
this.onUser.emit(this._user);
|
|
97
88
|
}
|
|
@@ -116,28 +107,28 @@ export class UserEditComponent {
|
|
|
116
107
|
return loginOptions.some(({ tfaStrategy = '' }) => tfaStrategy.toLowerCase() === 'totp');
|
|
117
108
|
}
|
|
118
109
|
}
|
|
119
|
-
UserEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEditComponent, deps: [{ token: i1.AppStateService }, { token: i2.TranslateService }, { token: i3.BsModalService }, { token: i4.AlertService }, { token: i5.UserService }, { token: i5.TenantLoginOptionsService }, { token: i5.TenantService }
|
|
120
|
-
UserEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UserEditComponent, selector: "c8y-user-edit", inputs: { loading: "loading", user: "user",
|
|
110
|
+
UserEditComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEditComponent, deps: [{ token: i1.AppStateService }, { token: i2.TranslateService }, { token: i3.BsModalService }, { token: i4.AlertService }, { token: i5.UserService }, { token: i5.TenantLoginOptionsService }, { token: i5.TenantService }], target: i0.ɵɵFactoryTarget.Component });
|
|
111
|
+
UserEditComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: UserEditComponent, selector: "c8y-user-edit", inputs: { loading: "loading", user: "user", showProductExperienceOptions: "showProductExperienceOptions", isUsageTrackingEnabled: "isUsageTrackingEnabled", isUserEngagementPreferenceEnabled: "isUserEngagementPreferenceEnabled" }, outputs: { onUser: "onUser", onUsageTrackingChange: "onUsageTrackingChange", onUserEngagementPreferenceChange: "onUserEngagementPreferenceChange", onCancel: "onCancel" }, ngImport: i0, template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"d-block p-24 p-b-0\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n Some of the user settings are not editable here because they are managed via your\n authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"true\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. Joe`LOCALIZE`' | translate }}\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n id=\"userLastName\"\n class=\"form-control\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. Doe`LOCALIZE`' | translate }}\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n [required]=\"isPhoneRequired\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <c8y-form-group class=\"p-t-16 separator-top\" *ngIf=\"showProductExperienceOptions\">\n <label translate>Product experience</label>\n <label class=\"c8y-switch\" for=\"productUsageTracking\">\n <input\n id=\"productUsageTracking\"\n name=\"productUsageTracking\"\n type=\"checkbox\"\n [(ngModel)]=\"isUsageTrackingEnabled\"\n />\n <span></span>\n {{ 'Enable personalized product experience tracking' | translate }}\n </label>\n <ng-container *ngIf=\"isUsageTrackingEnabled\">\n <label class=\"c8y-switch m-l-0\" for=\"userEngagementPreference\">\n <input\n id=\"userEngagementPreference\"\n name=\"userEngagementPreference\"\n type=\"checkbox\"\n [(ngModel)]=\"isUserEngagementPreferenceEnabled\"\n />\n <span></span>\n {{ 'Enable in-product information & communication' | translate }}\n </label>\n </ng-container>\n </c8y-form-group>\n\n <div class=\"form-group p-t-16 separator-top\" *ngIf=\"!userIsExternal\">\n <label class=\"control-label\">{{ 'Login options' | translate }}</label>\n <c8y-new-password (password)=\"onNewPasswordChanged($event)\"></c8y-new-password>\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Set up two-factor authentication' | translate }}\"\n (click)=\"setupTotp()\"\n *ngIf=\"userCanSetupTotp && !userHasActiveTotp && isTfaEnabled\"\n >\n {{ 'Set up two-factor authentication' | translate }}\n </button>\n </div>\n\n <c8y-form-group *ngIf=\"!!(state.state$ | async).newsletter\">\n <label translate>Newsletter</label>\n <label\n title=\"{{ 'Send me information about outages, maintenance or updates.' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n name=\"newsletter\"\n [(ngModel)]=\"user.newsletter\"\n [disabled]=\"userIsExternal\"\n />\n <span></span>\n <span>\n {{ 'Send me information about outages, maintenance or updates.' | translate }}\n </span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"modal-footer separator-top bg-level-0 sticky-bottom\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Save' | translate }}\"\n [disabled]=\"!userForm.form.valid || userForm.form.pristine || loading\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i6.PhoneValidationDirective, selector: "[c8yPhoneValidation]" }, { kind: "directive", type: i7.DefaultValidationDirective, selector: "[c8yDefaultValidation]", inputs: ["c8yDefaultValidation"] }, { kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.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: i8.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.EmailValidator, selector: "[email][formControlName],[email][formControl],[email][ngModel]", inputs: ["email"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i9.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i10.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i11.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i12.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i13.NewPasswordComponent, selector: "c8y-new-password", outputs: ["password"] }, { kind: "pipe", type: i14.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i12.AsyncPipe, name: "async" }] });
|
|
121
112
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: UserEditComponent, decorators: [{
|
|
122
113
|
type: Component,
|
|
123
|
-
args: [{ selector: 'c8y-user-edit', template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"d-block p-24 p-b-0\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n Some of the user settings are not editable here because they are managed via your\n authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"true\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. Joe`LOCALIZE`' | translate }}\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n id=\"userLastName\"\n class=\"form-control\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. Doe`LOCALIZE`' | translate }}\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n [required]=\"isPhoneRequired\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <c8y-form-group class=\"p-t-16 separator-top\" *ngIf=\"
|
|
124
|
-
}], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: i2.TranslateService }, { type: i3.BsModalService }, { type: i4.AlertService }, { type: i5.UserService }, { type: i5.TenantLoginOptionsService }, { type: i5.TenantService }
|
|
114
|
+
args: [{ selector: 'c8y-user-edit', template: "<form #userForm=\"ngForm\" (ngSubmit)=\"userForm.form.valid && save()\">\n <div class=\"d-block p-24 p-b-0\">\n <div class=\"alert alert-warning\" role=\"alert\" *ngIf=\"userIsExternal\" translate>\n Some of the user settings are not editable here because they are managed via your\n authorization server.\n </div>\n <c8y-form-group>\n <label translate for=\"userName\">Username</label>\n <input\n id=\"userName\"\n class=\"form-control\"\n [(ngModel)]=\"user.userName\"\n name=\"userName\"\n autocomplete=\"off\"\n required\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [disabled]=\"user.id\"\n c8yDefaultValidation=\"user\"\n />\n </c8y-form-group>\n\n <c8y-form-group>\n <label translate for=\"displayName\">Login alias</label>\n <input\n id=\"displayName\"\n class=\"form-control\"\n [(ngModel)]=\"user.displayName\"\n name=\"displayName\"\n autocomplete=\"off\"\n maxlength=\"254\"\n placeholder=\"{{ 'e.g. joe.doe`LOCALIZE`' | translate }}\"\n [disabled]=\"userIsExternal\"\n c8yDefaultValidation=\"loginAlias\"\n />\n </c8y-form-group>\n\n <c8y-form-group [hasWarning]=\"!user.email\">\n <label translate for=\"userEmail\">Email</label>\n <input\n id=\"userEmail\"\n class=\"form-control\"\n type=\"email\"\n name=\"email\"\n [maxlength]=\"254\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. joe.doe@example.com`LOCALIZE`' | translate }}\"\n [(ngModel)]=\"user.email\"\n email\n [required]=\"true\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userFirstName\">First name</label>\n <input\n id=\"userFirstName\"\n class=\"form-control\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. Joe`LOCALIZE`' | translate }}\"\n maxlength=\"50\"\n name=\"firstName\"\n [(ngModel)]=\"user.firstName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label translate for=\"userLastName\">Last name</label>\n <input\n id=\"userLastName\"\n class=\"form-control\"\n autocomplete=\"off\"\n placeholder=\"{{ 'e.g. Doe`LOCALIZE`' | translate }}\"\n maxlength=\"50\"\n name=\"lastName\"\n [(ngModel)]=\"user.lastName\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n </div>\n </div>\n\n <c8y-form-group>\n <label translate for=\"userTelephone\">Telephone</label>\n <input\n id=\"userTelephone\"\n class=\"form-control\"\n autocomplete=\"off\"\n name=\"phone\"\n maxlength=\"254\"\n [(ngModel)]=\"user.phone\"\n placeholder=\"{{ 'e.g. +49 9 876 543 210`LOCALIZE`' | translate }}\"\n c8yPhoneValidation\n [required]=\"isPhoneRequired\"\n [disabled]=\"userIsExternal\"\n />\n </c8y-form-group>\n\n <c8y-form-group class=\"p-t-16 separator-top\" *ngIf=\"showProductExperienceOptions\">\n <label translate>Product experience</label>\n <label class=\"c8y-switch\" for=\"productUsageTracking\">\n <input\n id=\"productUsageTracking\"\n name=\"productUsageTracking\"\n type=\"checkbox\"\n [(ngModel)]=\"isUsageTrackingEnabled\"\n />\n <span></span>\n {{ 'Enable personalized product experience tracking' | translate }}\n </label>\n <ng-container *ngIf=\"isUsageTrackingEnabled\">\n <label class=\"c8y-switch m-l-0\" for=\"userEngagementPreference\">\n <input\n id=\"userEngagementPreference\"\n name=\"userEngagementPreference\"\n type=\"checkbox\"\n [(ngModel)]=\"isUserEngagementPreferenceEnabled\"\n />\n <span></span>\n {{ 'Enable in-product information & communication' | translate }}\n </label>\n </ng-container>\n </c8y-form-group>\n\n <div class=\"form-group p-t-16 separator-top\" *ngIf=\"!userIsExternal\">\n <label class=\"control-label\">{{ 'Login options' | translate }}</label>\n <c8y-new-password (password)=\"onNewPasswordChanged($event)\"></c8y-new-password>\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Set up two-factor authentication' | translate }}\"\n (click)=\"setupTotp()\"\n *ngIf=\"userCanSetupTotp && !userHasActiveTotp && isTfaEnabled\"\n >\n {{ 'Set up two-factor authentication' | translate }}\n </button>\n </div>\n\n <c8y-form-group *ngIf=\"!!(state.state$ | async).newsletter\">\n <label translate>Newsletter</label>\n <label\n title=\"{{ 'Send me information about outages, maintenance or updates.' | translate }}\"\n class=\"c8y-checkbox\"\n >\n <input\n type=\"checkbox\"\n name=\"newsletter\"\n [(ngModel)]=\"user.newsletter\"\n [disabled]=\"userIsExternal\"\n />\n <span></span>\n <span>\n {{ 'Send me information about outages, maintenance or updates.' | translate }}\n </span>\n </label>\n </c8y-form-group>\n </div>\n <div class=\"modal-footer separator-top bg-level-0 sticky-bottom\">\n <button\n class=\"btn btn-default\"\n type=\"button\"\n title=\"{{ 'Cancel' | translate }}\"\n (click)=\"cancel()\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary\"\n type=\"submit\"\n title=\"{{ 'Save' | translate }}\"\n [disabled]=\"!userForm.form.valid || userForm.form.pristine || loading\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n</form>\n" }]
|
|
115
|
+
}], ctorParameters: function () { return [{ type: i1.AppStateService }, { type: i2.TranslateService }, { type: i3.BsModalService }, { type: i4.AlertService }, { type: i5.UserService }, { type: i5.TenantLoginOptionsService }, { type: i5.TenantService }]; }, propDecorators: { loading: [{
|
|
125
116
|
type: Input
|
|
126
117
|
}], user: [{
|
|
127
118
|
type: Input
|
|
128
|
-
}],
|
|
119
|
+
}], showProductExperienceOptions: [{
|
|
129
120
|
type: Input
|
|
130
121
|
}], isUsageTrackingEnabled: [{
|
|
131
122
|
type: Input
|
|
132
|
-
}],
|
|
123
|
+
}], isUserEngagementPreferenceEnabled: [{
|
|
133
124
|
type: Input
|
|
134
125
|
}], onUser: [{
|
|
135
126
|
type: Output
|
|
136
|
-
}],
|
|
127
|
+
}], onUsageTrackingChange: [{
|
|
137
128
|
type: Output
|
|
138
|
-
}],
|
|
129
|
+
}], onUserEngagementPreferenceChange: [{
|
|
139
130
|
type: Output
|
|
140
131
|
}], onCancel: [{
|
|
141
132
|
type: Output
|
|
142
133
|
}] } });
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvdXNlci91c2VyLWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS91c2VyL3VzZXItZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBUyx5QkFBeUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDN0YsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVlyRSxNQUFNLE9BQU8saUJBQWlCO0lBMkI1QixZQUNTLEtBQXNCLEVBQ3RCLFNBQTJCLEVBQzFCLGNBQThCLEVBQzlCLEtBQW1CLEVBQ25CLFdBQXdCLEVBQ3hCLHlCQUFvRCxFQUNwRCxhQUE0QixFQUM1QixzQkFBOEMsRUFDOUMsZ0JBQWtDO1FBUm5DLFVBQUssR0FBTCxLQUFLLENBQWlCO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzFCLG1CQUFjLEdB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QU0sQ0FBQyxDQUFDO0lBQzNGLENBQUM7OzhHQTFHVSxpQkFBaUI7a0dBQWpCLGlCQUFpQiw0WkN0QjlCLGdtTUFzTEE7MkZEaEthLGlCQUFpQjtrQkFKN0IsU0FBUzsrQkFDRSxlQUFlOytWQUloQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ08sSUFBSTtzQkFBaEIsS0FBSztnQkFVRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVVzZXIsIFRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2UsIFRlbmFudFNlcnZpY2UsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTmV3UGFzc3dvcmQgfSBmcm9tICcuLi9hdXRoZW50aWNhdGlvbi9wYXNzd29yZC5tb2RlbCc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY29tbW9uL3VzZXItcHJlZmVyZW5jZXMvdXNlci1wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9pMThuL3RyYW5zbGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7IEdhaW5zaWdodFNlcnZpY2UgfSBmcm9tICcuLi9wcm9kdWN0LWV4cGVyaWVuY2UvZ2FpbnNpZ2h0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclRvdHBTZXR1cENvbXBvbmVudCB9IGZyb20gJy4vdXNlci10b3RwLXNldHVwLmNvbXBvbmVudCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciBleHRlbmRzIElVc2VyIHtcbiAgcGhvbmU6IHN0cmluZztcbiAgc2VuZFBhc3N3b3JkUmVzZXRFbWFpbDogYm9vbGVhbjtcbiAgbmV3c2xldHRlcj86IGJvb2xlYW47XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS11c2VyLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdXNlci1lZGl0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBVc2VyRWRpdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGxvYWRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgc2V0IHVzZXIodTogVXNlcikge1xuICAgIGlmICh1KSB7XG4gICAgICB0aGlzLl91c2VyID0gY2xvbmUodSk7XG4gICAgICB0aGlzLnVzZXJJc0V4dGVybmFsID0gdS5jdXN0b21Qcm9wZXJ0aWVzLnVzZXJPcmlnaW4gPT09ICdPQVVUSDInO1xuICAgICAgdGhpcy5pc1Bob25lUmVxdWlyZWQgPSB0aGlzLmlzUGhvbmVSZXF1aXJlZCAmJiB1LnR3b0ZhY3RvckF1dGhlbnRpY2F0aW9uRW5hYmxlZDtcbiAgICB9XG4gIH1cbiAgZ2V0IHVzZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXI7XG4gIH1cbiAgQElucHV0KCkgc2hvd1Byb2R1Y3RVc2FnZVNldHRpbmcgPSBmYWxzZTtcbiAgQElucHV0KCkgaXNVc2FnZVRyYWNraW5nRW5hYmxlZCA9IHRydWU7XG4gIEBJbnB1dCgpIGlzR2FpbnNpZ2h0RW5nYWdlbWVudHNFbmFibGVkID0gdHJ1ZTtcbiAgQE91dHB1dCgpIG9uVXNlcjogRXZlbnRFbWl0dGVyPFVzZXI+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25Qcm9kdWN0RXhwZXJpZW5jZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25HYWluc2lnaHRFbmdhZ2VtZW50czogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgb25DYW5jZWw6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgdXNlckhhc0FjdGl2ZVRvdHAgPSBmYWxzZTtcbiAgdXNlckNhblNldHVwVG90cCA9IGZhbHNlO1xuICBpc1Bob25lUmVxdWlyZWQgPSBmYWxzZTtcbiAgdXNlcklzRXh0ZXJuYWw6IGJvb2xlYW47XG4gIGlzVGZhRW5hYmxlZDogYm9vbGVhbjtcblxuICBwcml2YXRlIF91c2VyOiBVc2VyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdGF0ZTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHB1YmxpYyB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBic01vZGFsU2VydmljZTogQnNNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50TG9naW5PcHRpb25zU2VydmljZTogVGVuYW50TG9naW5PcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFNlcnZpY2U6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyUHJlZmVyZW5jZXNTZXJ2aWNlOiBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudCA9IChhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpKS5kYXRhO1xuICAgIGNvbnN0IHsgZW5hYmxlZE9uU3lzdGVtTGV2ZWwsIGVuYWJsZWRPblRlbmFudExldmVsIH0gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuZ2V0VGZhU2V0dGluZ3MoXG4gICAgICBjdXJyZW50VGVuYW50XG4gICAgKTtcbiAgICB0aGlzLmlzVGZhRW5hYmxlZCA9IGVuYWJsZWRPblN5c3RlbUxldmVsIHx8IGVuYWJsZWRPblRlbmFudExldmVsO1xuXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplVG90cFNldHRpbmdzKCk7XG4gICAgaWYgKHRoaXMudXNlci50d29GYWN0b3JBdXRoZW50aWNhdGlvbkVuYWJsZWQgJiYgIXRoaXMudXNlckNhblNldHVwVG90cCkge1xuICAgICAgdGhpcy5pc1Bob25lUmVxdWlyZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIG9uRW5hYmxpbmdQcm9kdWN0VXNhZ2VUcmFja2luZyhpc1VzYWdlVHJhY2tpbmdFbmFibGVkOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGlzVXNhZ2VUcmFja2luZ0VuYWJsZWQgJiYgdGhpcy5pc0dhaW5zaWdodEVuZ2FnZW1lbnRzRW5hYmxlZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmlzR2FpbnNpZ2h0RW5nYWdlbWVudHNFbmFibGVkID0gYXdhaXQgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlXG4gICAgICAgIC5nZXQodGhpcy5nYWluc2lnaHRTZXJ2aWNlLlVTRVJfUFJFRkVSRU5DRVNfR0FJTlNJR0hUX0VOR0FHRU1FTlRTX0tFWSlcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNldHVwVG90cCgpIHtcbiAgICB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coVXNlclRvdHBTZXR1cENvbXBvbmVudCwge1xuICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnXG4gICAgfSk7XG4gICAgdGhpcy5jYW5jZWwoKTsgLy8gdG8gY2xvc2UgdGhlIHVzZXIgZWRpdCBtb2RhbCBhbmQgcHJldmVudCBjb25zb2xlIGVycm9ycyBvbiBsb2dvdXRcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dQcm9kdWN0VXNhZ2VTZXR0aW5nKSB7XG4gICAgICB0aGlzLm9uUHJvZHVjdEV4cGVyaWVuY2UuZW1pdCh0aGlzLmlzVXNhZ2VUcmFja2luZ0VuYWJsZWQpO1xuICAgICAgdGhpcy5vbkdhaW5zaWdodEVuZ2FnZW1lbnRzLmVtaXQodGhpcy5pc0dhaW5zaWdodEVuZ2FnZW1lbnRzRW5hYmxlZCk7XG4gICAgfVxuXG4gICAgdGhpcy5vblVzZXIuZW1pdCh0aGlzLl91c2VyKTtcbiAgfVxuXG4gIG9uTmV3UGFzc3dvcmRDaGFuZ2VkKG5ld1Bhc3N3b3JkOiBOZXdQYXNzd29yZCkge1xuICAgIHRoaXMuX3VzZXIucGFzc3dvcmQgPSBuZXdQYXNzd29yZC5wYXNzd29yZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVRvdHBTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy51c2VyQ2FuU2V0dXBUb3RwID0gYXdhaXQgdGhpcy5jYW5Vc2VyU2V0dXBUb3RwKCk7XG4gICAgICBpZiAodGhpcy51c2VyQ2FuU2V0dXBUb3RwKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YTogdG90cEFjdGl2aXR5IH0gPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmdldEFjdGl2aXR5VG90cCgpO1xuICAgICAgICB0aGlzLnVzZXJIYXNBY3RpdmVUb3RwID0gdG90cEFjdGl2aXR5LmlzQWN0aXZlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0LnJlbW92ZUxhc3REYW5nZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNhblVzZXJTZXR1cFRvdHAoKSB7XG4gICAgLy8gd2UgZG9uJ3QgY2hlY2sgZm9yIHRlbmFudCBvcHRpb25zIGhlcmUgZHVlIHRvIHBlcm1pc3Npb24gcmVzdHJpY3Rpb25zIG9uIHRoYXQgZW5kLXBvaW50XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yQ3VycmVudFRlbmFudCgpKS5kYXRhO1xuICAgIHJldHVybiBsb2dpbk9wdGlvbnMuc29tZSgoeyB0ZmFTdHJhdGVneSA9ICcnIH0pID0+IHRmYVN0cmF0ZWd5LnRvTG93ZXJDYXNlKCkgPT09ICd0b3RwJyk7XG4gIH1cbn1cbiIsIjxmb3JtICN1c2VyRm9ybT1cIm5nRm9ybVwiIChuZ1N1Ym1pdCk9XCJ1c2VyRm9ybS5mb3JtLnZhbGlkICYmIHNhdmUoKVwiPlxuICA8ZGl2IGNsYXNzPVwiZC1ibG9jayBwLTI0IHAtYi0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIiByb2xlPVwiYWxlcnRcIiAqbmdJZj1cInVzZXJJc0V4dGVybmFsXCIgdHJhbnNsYXRlPlxuICAgICAgU29tZSBvZiB0aGUgdXNlciBzZXR0aW5ncyBhcmUgbm90IGVkaXRhYmxlIGhlcmUgYmVjYXVzZSB0aGV5IGFyZSBtYW5hZ2VkIHZpYSB5b3VyXG4gICAgICBhdXRob3JpemF0aW9uIHNlcnZlci5cbiAgICA8L2Rpdj5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJOYW1lXCI+VXNlcm5hbWU8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlck5hbWVcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwidXNlci51c2VyTmFtZVwiXG4gICAgICAgIG5hbWU9XCJ1c2VyTmFtZVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHJlcXVpcmVkXG4gICAgICAgIG1heGxlbmd0aD1cIjI1NFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gam9lLmRvZUBleGFtcGxlLmNvbWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInVzZXIuaWRcIlxuICAgICAgICBjOHlEZWZhdWx0VmFsaWRhdGlvbj1cInVzZXJcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZSBmb3I9XCJkaXNwbGF5TmFtZVwiPkxvZ2luIGFsaWFzPC9sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD1cImRpc3BsYXlOYW1lXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIuZGlzcGxheU5hbWVcIlxuICAgICAgICBuYW1lPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBtYXhsZW5ndGg9XCIyNTRcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIGpvZS5kb2VgTE9DQUxJWkVgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAgIGM4eURlZmF1bHRWYWxpZGF0aW9uPVwibG9naW5BbGlhc1wiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICA8Yzh5LWZvcm0tZ3JvdXAgW2hhc1dhcm5pbmddPVwiIXVzZXIuZW1haWxcIj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlckVtYWlsXCI+RW1haWw8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlckVtYWlsXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICBuYW1lPVwiZW1haWxcIlxuICAgICAgICBbbWF4bGVuZ3RoXT1cIjI1NFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gam9lLmRvZUBleGFtcGxlLmNvbWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ1c2VyLmVtYWlsXCJcbiAgICAgICAgZW1haWxcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJGaXJzdE5hbWVcIj5GaXJzdCBuYW1lPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwidXNlckZpcnN0TmFtZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLiBKb2VgTE9DQUxJWkVgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBtYXhsZW5ndGg9XCI1MFwiXG4gICAgICAgICAgICBuYW1lPVwiZmlyc3ROYW1lXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlci5maXJzdE5hbWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVzZXJJc0V4dGVybmFsXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlckxhc3ROYW1lXCI+TGFzdCBuYW1lPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwidXNlckxhc3ROYW1lXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIERvZWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjUwXCJcbiAgICAgICAgICAgIG5hbWU9XCJsYXN0TmFtZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIubGFzdE5hbWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVzZXJJc0V4dGVybmFsXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJUZWxlcGhvbmVcIj5UZWxlcGhvbmU8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlclRlbGVwaG9uZVwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgbmFtZT1cInBob25lXCJcbiAgICAgICAgbWF4bGVuZ3RoPVwiMjU0XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ1c2VyLnBob25lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLiArNDkgOSA4NzYgNTQzIDIxMGBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgYzh5UGhvbmVWYWxpZGF0aW9uXG4gICAgICAgIFtyZXF1aXJlZF09XCJpc1Bob25lUmVxdWlyZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC10LTE2IHNlcGFyYXRvci10b3BcIiAqbmdJZj1cInNob3dQcm9kdWN0VXNhZ2VTZXR0aW5nXCI+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlPlByb2R1Y3QgZXhwZXJpZW5jZTwvbGFiZWw+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjOHktc3dpdGNoXCIgZm9yPVwicHJvZHVjdFVzYWdlVHJhY2tpbmdcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgaWQ9XCJwcm9kdWN0VXNhZ2VUcmFja2luZ1wiXG4gICAgICAgICAgbmFtZT1cInByb2R1Y3RVc2FnZVRyYWNraW5nXCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib25FbmFibGluZ1Byb2R1Y3RVc2FnZVRyYWNraW5nKGlzVXNhZ2VUcmFja2luZ0VuYWJsZWQpXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImlzVXNhZ2VUcmFja2luZ0VuYWJsZWRcIlxuICAgICAgICAvPlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgIHt7ICdFbmFibGUgdHJhY2tpbmcgdG8gZW5oYW5jZSB0aGUgcHJvZHVjdCBleHBlcmllbmNlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgPC9sYWJlbD5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1VzYWdlVHJhY2tpbmdFbmFibGVkXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImM4eS1zd2l0Y2ggbS1sLTBcIiBmb3I9XCJnYWluc2lnaHRFbmdhZ2VtZW50c1wiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJnYWluc2lnaHRFbmdhZ2VtZW50c1wiXG4gICAgICAgICAgICBuYW1lPVwiZ2FpbnNpZ2h0RW5nYWdlbWVudHNcIlxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXNHYWluc2lnaHRFbmdhZ2VtZW50c0VuYWJsZWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgIHt7ICdFbmFibGUgaW4tcHJvZHVjdCBpbmZvcm1hdGlvbiAmIGNvbW11bmljYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcC10LTE2IHNlcGFyYXRvci10b3BcIiAqbmdJZj1cIiF1c2VySXNFeHRlcm5hbFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7ICdMb2dpbiBvcHRpb25zJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICA8Yzh5LW5ldy1wYXNzd29yZCAocGFzc3dvcmQpPVwib25OZXdQYXNzd29yZENoYW5nZWQoJGV2ZW50KVwiPjwvYzh5LW5ldy1wYXNzd29yZD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnU2V0IHVwIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgKGNsaWNrKT1cInNldHVwVG90cCgpXCJcbiAgICAgICAgKm5nSWY9XCJ1c2VyQ2FuU2V0dXBUb3RwICYmICF1c2VySGFzQWN0aXZlVG90cCAmJiBpc1RmYUVuYWJsZWRcIlxuICAgICAgPlxuICAgICAgICB7eyAnU2V0IHVwIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxjOHktZm9ybS1ncm91cCAqbmdJZj1cIiEhKHN0YXRlLnN0YXRlJCB8IGFzeW5jKS5uZXdzbGV0dGVyXCI+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlPk5ld3NsZXR0ZXI8L2xhYmVsPlxuICAgICAgPGxhYmVsXG4gICAgICAgIHRpdGxlPVwie3sgJ1NlbmQgbWUgaW5mb3JtYXRpb24gYWJvdXQgb3V0YWdlcywgbWFpbnRlbmFuY2Ugb3IgdXBkYXRlcy4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIG5hbWU9XCJuZXdzbGV0dGVyXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIubmV3c2xldHRlclwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInVzZXJJc0V4dGVybmFsXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7eyAnU2VuZCBtZSBpbmZvcm1hdGlvbiBhYm91dCBvdXRhZ2VzLCBtYWludGVuYW5jZSBvciB1cGRhdGVzLicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlciBzZXBhcmF0b3ItdG9wIGJnLWxldmVsLTAgc3RpY2t5LWJvdHRvbVwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICAgID5cbiAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICB0aXRsZT1cInt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIXVzZXJGb3JtLmZvcm0udmFsaWQgfHwgdXNlckZvcm0uZm9ybS5wcmlzdGluZSB8fCBsb2FkaW5nXCJcbiAgICA+XG4gICAgICB7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1lZGl0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvdXNlci91c2VyLWVkaXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vY29yZS91c2VyL3VzZXItZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBUyx5QkFBeUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV0RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZckUsTUFBTSxPQUFPLGlCQUFpQjtJQTJCNUIsWUFDUyxLQUFzQixFQUN0QixTQUEyQixFQUMxQixjQUE4QixFQUM5QixLQUFtQixFQUNuQixXQUF3QixFQUN4Qix5QkFBb0QsRUFDcEQsYUFBNEI7UUFON0IsVUFBSyxHQUFMLEtBQUssQ0FBaUI7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEyQjtRQUNwRCxrQkFBYSxHQUFiLGFB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bnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVVzZXIsIFRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2UsIFRlbmFudFNlcnZpY2UsIFVzZXJTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgY2xvbmUgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTmV3UGFzc3dvcmQgfSBmcm9tICcuLi9hdXRoZW50aWNhdGlvbi9wYXNzd29yZC5tb2RlbCc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnLi4vaTE4bi90cmFuc2xhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyVG90cFNldHVwQ29tcG9uZW50IH0gZnJvbSAnLi91c2VyLXRvdHAtc2V0dXAuY29tcG9uZW50JztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyIGV4dGVuZHMgSVVzZXIge1xuICBwaG9uZTogc3RyaW5nO1xuICBzZW5kUGFzc3dvcmRSZXNldEVtYWlsOiBib29sZWFuO1xuICBuZXdzbGV0dGVyPzogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXVzZXItZWRpdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi91c2VyLWVkaXQuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFVzZXJFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgbG9hZGluZyA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgdXNlcih1OiBVc2VyKSB7XG4gICAgaWYgKHUpIHtcbiAgICAgIHRoaXMuX3VzZXIgPSBjbG9uZSh1KTtcbiAgICAgIHRoaXMudXNlcklzRXh0ZXJuYWwgPSB1LmN1c3RvbVByb3BlcnRpZXMudXNlck9yaWdpbiA9PT0gJ09BVVRIMic7XG4gICAgICB0aGlzLmlzUGhvbmVSZXF1aXJlZCA9IHRoaXMuaXNQaG9uZVJlcXVpcmVkICYmIHUudHdvRmFjdG9yQXV0aGVudGljYXRpb25FbmFibGVkO1xuICAgIH1cbiAgfVxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlcjtcbiAgfVxuICBASW5wdXQoKSBzaG93UHJvZHVjdEV4cGVyaWVuY2VPcHRpb25zID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzVXNhZ2VUcmFja2luZ0VuYWJsZWQgPSB0cnVlO1xuICBASW5wdXQoKSBpc1VzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZUVuYWJsZWQgPSB0cnVlO1xuICBAT3V0cHV0KCkgb25Vc2VyOiBFdmVudEVtaXR0ZXI8VXNlcj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvblVzYWdlVHJhY2tpbmdDaGFuZ2U6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG9uVXNlckVuZ2FnZW1lbnRQcmVmZXJlbmNlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBvbkNhbmNlbDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICB1c2VySGFzQWN0aXZlVG90cCA9IGZhbHNlO1xuICB1c2VyQ2FuU2V0dXBUb3RwID0gZmFsc2U7XG4gIGlzUGhvbmVSZXF1aXJlZCA9IGZhbHNlO1xuICB1c2VySXNFeHRlcm5hbDogYm9vbGVhbjtcbiAgaXNUZmFFbmFibGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgX3VzZXI6IFVzZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN0YXRlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0OiBBbGVydFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlOiBUZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudCA9IChhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpKS5kYXRhO1xuICAgIGNvbnN0IHsgZW5hYmxlZE9uU3lzdGVtTGV2ZWwsIGVuYWJsZWRPblRlbmFudExldmVsIH0gPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuZ2V0VGZhU2V0dGluZ3MoXG4gICAgICBjdXJyZW50VGVuYW50XG4gICAgKTtcbiAgICB0aGlzLmlzVGZhRW5hYmxlZCA9IGVuYWJsZWRPblN5c3RlbUxldmVsIHx8IGVuYWJsZWRPblRlbmFudExldmVsO1xuXG4gICAgYXdhaXQgdGhpcy5pbml0aWFsaXplVG90cFNldHRpbmdzKCk7XG4gICAgaWYgKHRoaXMudXNlci50d29GYWN0b3JBdXRoZW50aWNhdGlvbkVuYWJsZWQgJiYgIXRoaXMudXNlckNhblNldHVwVG90cCkge1xuICAgICAgdGhpcy5pc1Bob25lUmVxdWlyZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldHVwVG90cCgpIHtcbiAgICB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coVXNlclRvdHBTZXR1cENvbXBvbmVudCwge1xuICAgICAgY2xhc3M6ICdtb2RhbC1zbScsXG4gICAgICBhcmlhRGVzY3JpYmVkYnk6ICdtb2RhbC1ib2R5JyxcbiAgICAgIGFyaWFMYWJlbGxlZEJ5OiAnbW9kYWwtdGl0bGUnXG4gICAgfSk7XG4gICAgdGhpcy5jYW5jZWwoKTsgLy8gdG8gY2xvc2UgdGhlIHVzZXIgZWRpdCBtb2RhbCBhbmQgcHJldmVudCBjb25zb2xlIGVycm9ycyBvbiBsb2dvdXRcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLm9uQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIGFzeW5jIHNhdmUoKSB7XG4gICAgaWYgKHRoaXMubG9hZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3dQcm9kdWN0RXhwZXJpZW5jZU9wdGlvbnMpIHtcbiAgICAgIHRoaXMub25Vc2FnZVRyYWNraW5nQ2hhbmdlLmVtaXQodGhpcy5pc1VzYWdlVHJhY2tpbmdFbmFibGVkKTtcbiAgICAgIC8qKlxuICAgICAgICogRW1pdHMgYSB1c2VyIGVuZ2FnZW1lbnQgcHJlZmVyZW5jZSBjaGFuZ2UgZXZlbnQuXG4gICAgICAgKiBJZiB1c2FnZSB0cmFja2luZyBpcyBkaXNhYmxlZCwgaXQgZW1pdHMgYGZhbHNlYC4gT3RoZXJ3aXNlLCBpdCBlbWl0cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgdXNlciBlbmdhZ2VtZW50IHByZWZlcmVuY2UuXG4gICAgICAgKi9cbiAgICAgIHRoaXMub25Vc2VyRW5nYWdlbWVudFByZWZlcmVuY2VDaGFuZ2UuZW1pdChcbiAgICAgICAgdGhpcy5pc1VzYWdlVHJhY2tpbmdFbmFibGVkID09PSBmYWxzZSA/IGZhbHNlIDogdGhpcy5pc1VzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZUVuYWJsZWRcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5vblVzZXIuZW1pdCh0aGlzLl91c2VyKTtcbiAgfVxuXG4gIG9uTmV3UGFzc3dvcmRDaGFuZ2VkKG5ld1Bhc3N3b3JkOiBOZXdQYXNzd29yZCkge1xuICAgIHRoaXMuX3VzZXIucGFzc3dvcmQgPSBuZXdQYXNzd29yZC5wYXNzd29yZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgaW5pdGlhbGl6ZVRvdHBTZXR0aW5ncygpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy51c2VyQ2FuU2V0dXBUb3RwID0gYXdhaXQgdGhpcy5jYW5Vc2VyU2V0dXBUb3RwKCk7XG4gICAgICBpZiAodGhpcy51c2VyQ2FuU2V0dXBUb3RwKSB7XG4gICAgICAgIGNvbnN0IHsgZGF0YTogdG90cEFjdGl2aXR5IH0gPSBhd2FpdCB0aGlzLnVzZXJTZXJ2aWNlLmdldEFjdGl2aXR5VG90cCgpO1xuICAgICAgICB0aGlzLnVzZXJIYXNBY3RpdmVUb3RwID0gdG90cEFjdGl2aXR5LmlzQWN0aXZlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0LnJlbW92ZUxhc3REYW5nZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNhblVzZXJTZXR1cFRvdHAoKSB7XG4gICAgLy8gd2UgZG9uJ3QgY2hlY2sgZm9yIHRlbmFudCBvcHRpb25zIGhlcmUgZHVlIHRvIHBlcm1pc3Npb24gcmVzdHJpY3Rpb25zIG9uIHRoYXQgZW5kLXBvaW50XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gKGF3YWl0IHRoaXMudGVuYW50TG9naW5PcHRpb25zU2VydmljZS5saXN0Rm9yQ3VycmVudFRlbmFudCgpKS5kYXRhO1xuICAgIHJldHVybiBsb2dpbk9wdGlvbnMuc29tZSgoeyB0ZmFTdHJhdGVneSA9ICcnIH0pID0+IHRmYVN0cmF0ZWd5LnRvTG93ZXJDYXNlKCkgPT09ICd0b3RwJyk7XG4gIH1cbn1cbiIsIjxmb3JtICN1c2VyRm9ybT1cIm5nRm9ybVwiIChuZ1N1Ym1pdCk9XCJ1c2VyRm9ybS5mb3JtLnZhbGlkICYmIHNhdmUoKVwiPlxuICA8ZGl2IGNsYXNzPVwiZC1ibG9jayBwLTI0IHAtYi0wXCI+XG4gICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmdcIiByb2xlPVwiYWxlcnRcIiAqbmdJZj1cInVzZXJJc0V4dGVybmFsXCIgdHJhbnNsYXRlPlxuICAgICAgU29tZSBvZiB0aGUgdXNlciBzZXR0aW5ncyBhcmUgbm90IGVkaXRhYmxlIGhlcmUgYmVjYXVzZSB0aGV5IGFyZSBtYW5hZ2VkIHZpYSB5b3VyXG4gICAgICBhdXRob3JpemF0aW9uIHNlcnZlci5cbiAgICA8L2Rpdj5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJOYW1lXCI+VXNlcm5hbWU8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlck5hbWVcIlxuICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwidXNlci51c2VyTmFtZVwiXG4gICAgICAgIG5hbWU9XCJ1c2VyTmFtZVwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHJlcXVpcmVkXG4gICAgICAgIG1heGxlbmd0aD1cIjI1NFwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gam9lLmRvZUBleGFtcGxlLmNvbWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cInVzZXIuaWRcIlxuICAgICAgICBjOHlEZWZhdWx0VmFsaWRhdGlvbj1cInVzZXJcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgPGxhYmVsIHRyYW5zbGF0ZSBmb3I9XCJkaXNwbGF5TmFtZVwiPkxvZ2luIGFsaWFzPC9sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBpZD1cImRpc3BsYXlOYW1lXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIuZGlzcGxheU5hbWVcIlxuICAgICAgICBuYW1lPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICBtYXhsZW5ndGg9XCIyNTRcIlxuICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIGpvZS5kb2VgTE9DQUxJWkVgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCJ1c2VySXNFeHRlcm5hbFwiXG4gICAgICAgIGM4eURlZmF1bHRWYWxpZGF0aW9uPVwibG9naW5BbGlhc1wiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG5cbiAgICA8Yzh5LWZvcm0tZ3JvdXAgW2hhc1dhcm5pbmddPVwiIXVzZXIuZW1haWxcIj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlckVtYWlsXCI+RW1haWw8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlckVtYWlsXCJcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICBuYW1lPVwiZW1haWxcIlxuICAgICAgICBbbWF4bGVuZ3RoXT1cIjI1NFwiXG4gICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ2UuZy4gam9lLmRvZUBleGFtcGxlLmNvbWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ1c2VyLmVtYWlsXCJcbiAgICAgICAgZW1haWxcbiAgICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJGaXJzdE5hbWVcIj5GaXJzdCBuYW1lPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwidXNlckZpcnN0TmFtZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLiBKb2VgTE9DQUxJWkVgJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICBtYXhsZW5ndGg9XCI1MFwiXG4gICAgICAgICAgICBuYW1lPVwiZmlyc3ROYW1lXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidXNlci5maXJzdE5hbWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVzZXJJc0V4dGVybmFsXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDxsYWJlbCB0cmFuc2xhdGUgZm9yPVwidXNlckxhc3ROYW1lXCI+TGFzdCBuYW1lPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGlkPVwidXNlckxhc3ROYW1lXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdlLmcuIERvZWBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIG1heGxlbmd0aD1cIjUwXCJcbiAgICAgICAgICAgIG5hbWU9XCJsYXN0TmFtZVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIubGFzdE5hbWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVzZXJJc0V4dGVybmFsXCJcbiAgICAgICAgICAvPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlIGZvcj1cInVzZXJUZWxlcGhvbmVcIj5UZWxlcGhvbmU8L2xhYmVsPlxuICAgICAgPGlucHV0XG4gICAgICAgIGlkPVwidXNlclRlbGVwaG9uZVwiXG4gICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgbmFtZT1cInBob25lXCJcbiAgICAgICAgbWF4bGVuZ3RoPVwiMjU0XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJ1c2VyLnBob25lXCJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnZS5nLiArNDkgOSA4NzYgNTQzIDIxMGBMT0NBTElaRWAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgYzh5UGhvbmVWYWxpZGF0aW9uXG4gICAgICAgIFtyZXF1aXJlZF09XCJpc1Bob25lUmVxdWlyZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwidXNlcklzRXh0ZXJuYWxcIlxuICAgICAgLz5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGM4eS1mb3JtLWdyb3VwIGNsYXNzPVwicC10LTE2IHNlcGFyYXRvci10b3BcIiAqbmdJZj1cInNob3dQcm9kdWN0RXhwZXJpZW5jZU9wdGlvbnNcIj5cbiAgICAgIDxsYWJlbCB0cmFuc2xhdGU+UHJvZHVjdCBleHBlcmllbmNlPC9sYWJlbD5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImM4eS1zd2l0Y2hcIiBmb3I9XCJwcm9kdWN0VXNhZ2VUcmFja2luZ1wiPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICBpZD1cInByb2R1Y3RVc2FnZVRyYWNraW5nXCJcbiAgICAgICAgICBuYW1lPVwicHJvZHVjdFVzYWdlVHJhY2tpbmdcIlxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpc1VzYWdlVHJhY2tpbmdFbmFibGVkXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICB7eyAnRW5hYmxlIHBlcnNvbmFsaXplZCBwcm9kdWN0IGV4cGVyaWVuY2UgdHJhY2tpbmcnIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2xhYmVsPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzVXNhZ2VUcmFja2luZ0VuYWJsZWRcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiYzh5LXN3aXRjaCBtLWwtMFwiIGZvcj1cInVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZVwiPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgaWQ9XCJ1c2VyRW5nYWdlbWVudFByZWZlcmVuY2VcIlxuICAgICAgICAgICAgbmFtZT1cInVzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZVwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJpc1VzZXJFbmdhZ2VtZW50UHJlZmVyZW5jZUVuYWJsZWRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgIHt7ICdFbmFibGUgaW4tcHJvZHVjdCBpbmZvcm1hdGlvbiAmIGNvbW11bmljYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuXG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXAgcC10LTE2IHNlcGFyYXRvci10b3BcIiAqbmdJZj1cIiF1c2VySXNFeHRlcm5hbFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY29udHJvbC1sYWJlbFwiPnt7ICdMb2dpbiBvcHRpb25zJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XG4gICAgICA8Yzh5LW5ldy1wYXNzd29yZCAocGFzc3dvcmQpPVwib25OZXdQYXNzd29yZENoYW5nZWQoJGV2ZW50KVwiPjwvYzh5LW5ldy1wYXNzd29yZD5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHRcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdGl0bGU9XCJ7eyAnU2V0IHVwIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgKGNsaWNrKT1cInNldHVwVG90cCgpXCJcbiAgICAgICAgKm5nSWY9XCJ1c2VyQ2FuU2V0dXBUb3RwICYmICF1c2VySGFzQWN0aXZlVG90cCAmJiBpc1RmYUVuYWJsZWRcIlxuICAgICAgPlxuICAgICAgICB7eyAnU2V0IHVwIHR3by1mYWN0b3IgYXV0aGVudGljYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cblxuICAgIDxjOHktZm9ybS1ncm91cCAqbmdJZj1cIiEhKHN0YXRlLnN0YXRlJCB8IGFzeW5jKS5uZXdzbGV0dGVyXCI+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlPk5ld3NsZXR0ZXI8L2xhYmVsPlxuICAgICAgPGxhYmVsXG4gICAgICAgIHRpdGxlPVwie3sgJ1NlbmQgbWUgaW5mb3JtYXRpb24gYWJvdXQgb3V0YWdlcywgbWFpbnRlbmFuY2Ugb3IgdXBkYXRlcy4nIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3hcIlxuICAgICAgPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIG5hbWU9XCJuZXdzbGV0dGVyXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cInVzZXIubmV3c2xldHRlclwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cInVzZXJJc0V4dGVybmFsXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICA8c3Bhbj5cbiAgICAgICAgICB7eyAnU2VuZCBtZSBpbmZvcm1hdGlvbiBhYm91dCBvdXRhZ2VzLCBtYWludGVuYW5jZSBvciB1cGRhdGVzLicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlciBzZXBhcmF0b3ItdG9wIGJnLWxldmVsLTAgc3RpY2t5LWJvdHRvbVwiPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgdGl0bGU9XCJ7eyAnQ2FuY2VsJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAoY2xpY2spPVwiY2FuY2VsKClcIlxuICAgID5cbiAgICAgIHt7ICdDYW5jZWwnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICB0aXRsZT1cInt7ICdTYXZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICBbZGlzYWJsZWRdPVwiIXVzZXJGb3JtLmZvcm0udmFsaWQgfHwgdXNlckZvcm0uZm9ybS5wcmlzdGluZSB8fCBsb2FkaW5nXCJcbiAgICA+XG4gICAgICB7eyAnU2F2ZScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
|
package/esm2020/datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.mjs
CHANGED
|
@@ -71,7 +71,7 @@ DatapointAttributesFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion:
|
|
|
71
71
|
useExisting: forwardRef(() => DatapointAttributesFormComponent),
|
|
72
72
|
multi: true
|
|
73
73
|
}
|
|
74
|
-
], ngImport: i0, template: "<div [formGroup]=\"formGroup\" *ngIf=\"!rawValue?.__template || showFormIfTemplateWasSelected\">\n <fieldset\n class=\"c8y-fieldset\"\n *ngIf=\"formGroup.controls?.label || formGroup.controls?.unit || formGroup.controls?.target\"\n >\n <legend translate>Details</legend>\n <div class=\"row\">\n <div class=\"col-md-6\" *ngIf=\"formGroup.controls?.label\">\n <c8y-form-group>\n <label translate>Label</label>\n <input\n class=\"form-control\"\n name=\"label\"\n formControlName=\"label\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'Temperature' }\"\n />\n <c8y-messages\n [show]=\"formGroup.controls.label.touched && formGroup.controls.label.errors\"\n >\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['label'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\" *ngIf=\"formGroup.controls?.unit\">\n <c8y-form-group>\n <label translate>Unit</label>\n <input\n class=\"form-control\"\n name=\"unit\"\n formControlName=\"unit\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '\u00BAC' }\"\n />\n <c8y-messages [show]=\"formGroup.controls.unit.touched && formGroup.controls.unit.errors\">\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['unit'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\" *ngIf=\"formGroup.controls?.target && showTarget\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || formGroup.controls.target.touched) &&\n formGroup.controls?.target?.errors\n }\"\n >\n <label translate>Target</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"target\"\n formControlName=\"target\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 25 }\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || formGroup.controls.target.touched) &&\n formGroup.controls.target.errors\n \"\n >\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['target'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset\" *ngIf=\"range && showRange\">\n <legend translate>Range</legend>\n <div class=\"row\" formGroupName=\"range\">\n <div class=\"col-md-6\">\n <c8y-form-group [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.min?.errors }\">\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 0 }\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.min?.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.max?.errors }\">\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.max?.errors\">\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['max'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" formGroupName=\"yellowRange\" *ngIf=\"yellowRange && showYellowRange\">\n <legend translate>Yellow range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 50 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || yellowRange?.touched) && yellowRange.controls?.min?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 75 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || yellowRange?.touched) && yellowRange.controls?.max?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" formGroupName=\"redRange\" *ngIf=\"redRange && showRedRange\">\n <legend translate>Red range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error': (range?.touched || redRange?.touched) && redRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 75 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.min?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error': (range?.touched || redRange?.touched) && redRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.max?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" *ngIf=\"chart && showChart\" formGroupName=\"chart\">\n <legend translate>Chart</legend>\n <div class=\"tight-grid\">\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group>\n <label for=\"display\">\n {{ 'Display' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ 'Value displayed when data is aggregated' | translate }}\"\n [placement]=\"'right'\"\n triggers=\"focus\"\n [container]=\"'body'\"\n ></button>\n </label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"renderType\">\n <option *ngFor=\"let type of CHART_RENDER_TYPES\" [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group>\n <label for=\"chartType\" translate>Chart type</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"lineType\">\n <option *ngFor=\"let type of CHART_LINE_TYPES\" [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group>\n <label for=\"yAxis\" translate>Y-axis</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"yAxisType\">\n <option *ngFor=\"let type of AXIS_TYPES\" [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n</div>\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.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: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i5.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }] });
|
|
74
|
+
], ngImport: i0, template: "<div [formGroup]=\"formGroup\">\n <ng-container *ngIf=\"!rawValue?.__template || showFormIfTemplateWasSelected\">\n <fieldset\n class=\"c8y-fieldset\"\n *ngIf=\"formGroup.controls?.label || formGroup.controls?.unit || formGroup.controls?.target\"\n >\n <legend translate>Details</legend>\n <div class=\"row\">\n <div class=\"col-md-6\" *ngIf=\"formGroup.controls?.label\">\n <c8y-form-group>\n <label translate>Label</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'Temperature' }\"\n name=\"label\"\n formControlName=\"label\"\n />\n <c8y-messages\n [show]=\"formGroup.controls.label.touched && formGroup.controls.label.errors\"\n >\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['label'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\" *ngIf=\"formGroup.controls?.unit\">\n <c8y-form-group>\n <label translate>Unit</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: '\u00BAC' }\"\n name=\"unit\"\n formControlName=\"unit\"\n />\n <c8y-messages\n [show]=\"formGroup.controls.unit.touched && formGroup.controls.unit.errors\"\n >\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['unit'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\" *ngIf=\"formGroup.controls?.target && showTarget\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || formGroup.controls.target.touched) &&\n formGroup.controls?.target?.errors\n }\"\n >\n <label translate>Target</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 25 }\"\n type=\"number\"\n name=\"target\"\n formControlName=\"target\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || formGroup.controls.target.touched) &&\n formGroup.controls.target.errors\n \"\n >\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['target'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset\" *ngIf=\"range && showRange\">\n <legend translate>Range</legend>\n <div class=\"row\" formGroupName=\"range\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.min?.errors }\"\n >\n <label translate>Min</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 0 }\"\n type=\"number\"\n name=\"min\"\n formControlName=\"min\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.min?.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.max?.errors }\"\n >\n <label translate>Max</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 100 }\"\n type=\"number\"\n name=\"max\"\n formControlName=\"max\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.max?.errors\">\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['max'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset\n class=\"c8y-fieldset\"\n *ngIf=\"yellowRange && showYellowRange\"\n formGroupName=\"yellowRange\"\n >\n <legend translate>Yellow range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 50 }\"\n type=\"number\"\n name=\"min\"\n formControlName=\"min\"\n />\n <c8y-messages\n [show]=\"(range?.touched || yellowRange?.touched) && yellowRange.controls?.min?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 75 }\"\n type=\"number\"\n name=\"max\"\n formControlName=\"max\"\n />\n <c8y-messages\n [show]=\"(range?.touched || yellowRange?.touched) && yellowRange.controls?.max?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" *ngIf=\"redRange && showRedRange\" formGroupName=\"redRange\">\n <legend translate>Red range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error': (range?.touched || redRange?.touched) && redRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 75 }\"\n type=\"number\"\n name=\"min\"\n formControlName=\"min\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.min?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error': (range?.touched || redRange?.touched) && redRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 100 }\"\n type=\"number\"\n name=\"max\"\n formControlName=\"max\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.max?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </ng-container>\n\n <fieldset class=\"c8y-fieldset\" *ngIf=\"chart && showChart\" formGroupName=\"chart\">\n <legend translate>Chart</legend>\n <div class=\"tight-grid\">\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group>\n <label for=\"display\">\n {{ 'Display' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [placement]=\"'right'\"\n [container]=\"'body'\"\n type=\"button\"\n popover=\"{{ 'Value displayed when data is aggregated' | translate }}\"\n triggers=\"focus\"\n ></button>\n </label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"renderType\">\n <option *ngFor=\"let type of CHART_RENDER_TYPES\" [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group>\n <label for=\"chartType\" translate>Chart type</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"lineType\">\n <option *ngFor=\"let type of CHART_LINE_TYPES\" [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group>\n <label for=\"yAxis\" translate>Y-axis</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"yAxisType\">\n <option *ngFor=\"let type of AXIS_TYPES\" [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n</div>\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i4.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: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults"] }, { kind: "directive", type: i2.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i5.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }] });
|
|
75
75
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DatapointAttributesFormComponent, decorators: [{
|
|
76
76
|
type: Component,
|
|
77
77
|
args: [{ selector: 'c8y-datapoint-attributes-form', providers: [
|
|
@@ -85,7 +85,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
85
85
|
useExisting: forwardRef(() => DatapointAttributesFormComponent),
|
|
86
86
|
multi: true
|
|
87
87
|
}
|
|
88
|
-
], template: "<div [formGroup]=\"formGroup\" *ngIf=\"!rawValue?.__template || showFormIfTemplateWasSelected\">\n <fieldset\n class=\"c8y-fieldset\"\n *ngIf=\"formGroup.controls?.label || formGroup.controls?.unit || formGroup.controls?.target\"\n >\n <legend translate>Details</legend>\n <div class=\"row\">\n <div class=\"col-md-6\" *ngIf=\"formGroup.controls?.label\">\n <c8y-form-group>\n <label translate>Label</label>\n <input\n class=\"form-control\"\n name=\"label\"\n formControlName=\"label\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'Temperature' }\"\n />\n <c8y-messages\n [show]=\"formGroup.controls.label.touched && formGroup.controls.label.errors\"\n >\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['label'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\" *ngIf=\"formGroup.controls?.unit\">\n <c8y-form-group>\n <label translate>Unit</label>\n <input\n class=\"form-control\"\n name=\"unit\"\n formControlName=\"unit\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: '\u00BAC' }\"\n />\n <c8y-messages [show]=\"formGroup.controls.unit.touched && formGroup.controls.unit.errors\">\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['unit'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\" *ngIf=\"formGroup.controls?.target && showTarget\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || formGroup.controls.target.touched) &&\n formGroup.controls?.target?.errors\n }\"\n >\n <label translate>Target</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"target\"\n formControlName=\"target\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 25 }\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || formGroup.controls.target.touched) &&\n formGroup.controls.target.errors\n \"\n >\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['target'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset\" *ngIf=\"range && showRange\">\n <legend translate>Range</legend>\n <div class=\"row\" formGroupName=\"range\">\n <div class=\"col-md-6\">\n <c8y-form-group [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.min?.errors }\">\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 0 }\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.min?.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.max?.errors }\">\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.max?.errors\">\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['max'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" formGroupName=\"yellowRange\" *ngIf=\"yellowRange && showYellowRange\">\n <legend translate>Yellow range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 50 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || yellowRange?.touched) && yellowRange.controls?.min?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 75 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || yellowRange?.touched) && yellowRange.controls?.max?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" formGroupName=\"redRange\" *ngIf=\"redRange && showRedRange\">\n <legend translate>Red range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error': (range?.touched || redRange?.touched) && redRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"min\"\n formControlName=\"min\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 75 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.min?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error': (range?.touched || redRange?.touched) && redRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n type=\"number\"\n class=\"form-control\"\n name=\"max\"\n formControlName=\"max\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.max?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" *ngIf=\"chart && showChart\" formGroupName=\"chart\">\n <legend translate>Chart</legend>\n <div class=\"tight-grid\">\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group>\n <label for=\"display\">\n {{ 'Display' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ 'Value displayed when data is aggregated' | translate }}\"\n [placement]=\"'right'\"\n triggers=\"focus\"\n [container]=\"'body'\"\n ></button>\n </label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"renderType\">\n <option *ngFor=\"let type of CHART_RENDER_TYPES\" [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group>\n <label for=\"chartType\" translate>Chart type</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"lineType\">\n <option *ngFor=\"let type of CHART_LINE_TYPES\" [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group>\n <label for=\"yAxis\" translate>Y-axis</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"yAxisType\">\n <option *ngFor=\"let type of AXIS_TYPES\" [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n</div>\n" }]
|
|
88
|
+
], template: "<div [formGroup]=\"formGroup\">\n <ng-container *ngIf=\"!rawValue?.__template || showFormIfTemplateWasSelected\">\n <fieldset\n class=\"c8y-fieldset\"\n *ngIf=\"formGroup.controls?.label || formGroup.controls?.unit || formGroup.controls?.target\"\n >\n <legend translate>Details</legend>\n <div class=\"row\">\n <div class=\"col-md-6\" *ngIf=\"formGroup.controls?.label\">\n <c8y-form-group>\n <label translate>Label</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 'Temperature' }\"\n name=\"label\"\n formControlName=\"label\"\n />\n <c8y-messages\n [show]=\"formGroup.controls.label.touched && formGroup.controls.label.errors\"\n >\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['label'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\" *ngIf=\"formGroup.controls?.unit\">\n <c8y-form-group>\n <label translate>Unit</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: '\u00BAC' }\"\n name=\"unit\"\n formControlName=\"unit\"\n />\n <c8y-messages\n [show]=\"formGroup.controls.unit.touched && formGroup.controls.unit.errors\"\n >\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['unit'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\" *ngIf=\"formGroup.controls?.target && showTarget\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || formGroup.controls.target.touched) &&\n formGroup.controls?.target?.errors\n }\"\n >\n <label translate>Target</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 25 }\"\n type=\"number\"\n name=\"target\"\n formControlName=\"target\"\n />\n <c8y-messages\n [show]=\"\n (range?.touched || formGroup.controls.target.touched) &&\n formGroup.controls.target.errors\n \"\n >\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['target'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n <fieldset class=\"c8y-fieldset\" *ngIf=\"range && showRange\">\n <legend translate>Range</legend>\n <div class=\"row\" formGroupName=\"range\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.min?.errors }\"\n >\n <label translate>Min</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 0 }\"\n type=\"number\"\n name=\"min\"\n formControlName=\"min\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.min?.errors\"></c8y-messages>\n </c8y-form-group>\n </div>\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.max?.errors }\"\n >\n <label translate>Max</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 100 }\"\n type=\"number\"\n name=\"max\"\n formControlName=\"max\"\n />\n <c8y-messages [show]=\"range?.touched && range.controls?.max?.errors\">\n <c8y-message\n *ngFor=\"let item of customValidationErrorMessages['max'] | keyvalue\"\n [name]=\"item.key\"\n [text]=\"item.value\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset\n class=\"c8y-fieldset\"\n *ngIf=\"yellowRange && showYellowRange\"\n formGroupName=\"yellowRange\"\n >\n <legend translate>Yellow range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 50 }\"\n type=\"number\"\n name=\"min\"\n formControlName=\"min\"\n />\n <c8y-messages\n [show]=\"(range?.touched || yellowRange?.touched) && yellowRange.controls?.min?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error':\n (range?.touched || yellowRange?.touched) && yellowRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 75 }\"\n type=\"number\"\n name=\"max\"\n formControlName=\"max\"\n />\n <c8y-messages\n [show]=\"(range?.touched || yellowRange?.touched) && yellowRange.controls?.max?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n\n <fieldset class=\"c8y-fieldset\" *ngIf=\"redRange && showRedRange\" formGroupName=\"redRange\">\n <legend translate>Red range</legend>\n <div class=\"row\">\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error': (range?.touched || redRange?.touched) && redRange?.controls?.min?.errors\n }\"\n >\n <label translate>Min</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 75 }\"\n type=\"number\"\n name=\"min\"\n formControlName=\"min\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.min?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n\n <div class=\"col-md-6\">\n <c8y-form-group\n [ngClass]=\"{\n 'has-error': (range?.touched || redRange?.touched) && redRange?.controls?.max?.errors\n }\"\n >\n <label translate>Max</label>\n <input\n class=\"form-control\"\n [placeholder]=\"'e.g. {{ example }}' | translate : { example: 100 }\"\n type=\"number\"\n name=\"max\"\n formControlName=\"max\"\n />\n <c8y-messages\n [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.max?.errors\"\n ></c8y-messages>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n </ng-container>\n\n <fieldset class=\"c8y-fieldset\" *ngIf=\"chart && showChart\" formGroupName=\"chart\">\n <legend translate>Chart</legend>\n <div class=\"tight-grid\">\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group>\n <label for=\"display\">\n {{ 'Display' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [placement]=\"'right'\"\n [container]=\"'body'\"\n type=\"button\"\n popover=\"{{ 'Value displayed when data is aggregated' | translate }}\"\n triggers=\"focus\"\n ></button>\n </label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"renderType\">\n <option *ngFor=\"let type of CHART_RENDER_TYPES\" [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group>\n <label for=\"chartType\" translate>Chart type</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"lineType\">\n <option *ngFor=\"let type of CHART_LINE_TYPES\" [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"col-xs-6 col-sm-4\">\n <c8y-form-group>\n <label for=\"yAxis\" translate>Y-axis</label>\n <div class=\"c8y-select-wrapper\">\n <select class=\"form-control\" formControlName=\"yAxisType\">\n <option *ngFor=\"let type of AXIS_TYPES\" [ngValue]=\"type.val\">\n {{ type.text | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </fieldset>\n</div>\n" }]
|
|
89
89
|
}], ctorParameters: function () { return [{ type: i1.DatapointAttributesFormValidationService }]; }, propDecorators: { showTarget: [{
|
|
90
90
|
type: Input
|
|
91
91
|
}], showRange: [{
|
|
@@ -99,4 +99,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
99
99
|
}], showFormIfTemplateWasSelected: [{
|
|
100
100
|
type: Input
|
|
101
101
|
}] } });
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LWF0dHJpYnV0ZXMtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9kYXRhcG9pbnQtc2VsZWN0b3IvZGF0YXBvaW50LWF0dHJpYnV0ZXMtZm9ybS9kYXRhcG9pbnQtYXR0cmlidXRlcy1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2RhdGFwb2ludC1zZWxlY3Rvci9kYXRhcG9pbnQtYXR0cmlidXRlcy1mb3JtL2RhdGFwb2ludC1hdHRyaWJ1dGVzLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFJTCxhQUFhLEVBQ2IsaUJBQWlCLEVBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUMxRyxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7QUFrQmhHLE1BQU0sT0FBTyxnQ0FBZ0M7SUF1QjNDLFlBQW9CLGVBQXlEO1FBQXpELG9CQUFlLEdBQWYsZUFBZSxDQUEwQztRQXRCcEUsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsa0NBQTZCLEdBQUcsS0FBSyxDQUFDO1FBTS9DLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDeEMscUJBQWdCLEdB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Q0UsK0JBQStCLGFBRTlCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGlDQUFpQyxDQUFDOzRCQUMvRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsaUNBQWlDLENBQUM7NEJBQy9ELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOytIQUdRLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyw2QkFBNkI7c0JBQXJDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtR3JvdXAsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3Jcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1WYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vZGF0YXBvaW50LWF0dHJpYnV0ZXMtZm9ybS12YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhJU19UWVBFUywgQ0hBUlRfTElORV9UWVBFUywgQ0hBUlRfUkVOREVSX1RZUEVTIH0gZnJvbSAnLi9kYXRhcG9pbnQtYXR0cmlidXRlcy5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnQtYXR0cmlidXRlcy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludC1hdHRyaWJ1dGVzLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGFwb2ludEF0dHJpYnV0ZXNGb3JtQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgQElucHV0KCkgc2hvd1RhcmdldCA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dSYW5nZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dZZWxsb3dSYW5nZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dSZWRSYW5nZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dDaGFydCA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dGb3JtSWZUZW1wbGF0ZVdhc1NlbGVjdGVkID0gZmFsc2U7XG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICByYW5nZTogRm9ybUdyb3VwO1xuICB5ZWxsb3dSYW5nZTogRm9ybUdyb3VwO1xuICByZWRSYW5nZTogRm9ybUdyb3VwO1xuICBjaGFydDogRm9ybUdyb3VwO1xuICByYXdWYWx1ZTogYW55ID0ge307XG4gIENIQVJUX1JFTkRFUl9UWVBFUyA9IENIQVJUX1JFTkRFUl9UWVBFUztcbiAgQ0hBUlRfTElORV9UWVBFUyA9IENIQVJUX0xJTkVfVFlQRVM7XG4gIEFYSVNfVFlQRVMgPSBBWElTX1RZUEVTO1xuXG4gIGN1c3RvbVZhbGlkYXRpb25FcnJvck1lc3NhZ2VzOiB7XG4gICAgW2Zvcm1GaWVsZDogc3RyaW5nXToge1xuICAgICAgW3ZhbGlkYXRpb25FcnJvcjogc3RyaW5nXTogc3RyaW5nO1xuICAgIH07XG4gIH0gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1WYWxpZGF0aW9uczogRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1WYWxpZGF0aW9uU2VydmljZSkge1xuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mb3JtVmFsaWRhdGlvbnMuZ2V0RGVmYXVsdEZvcm1Hcm91cCgpO1xuICAgIHRoaXMuc2V0U3ViRm9ybXMoKTtcbiAgfVxuXG4gIHZhbGlkYXRlKF9jb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXA/LnZhbGlkID8gbnVsbCA6IHsgZm9ybUludmFsaWQ6IHt9IH07XG4gIH1cblxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG4gICAgdGhpcy5yYXdWYWx1ZSA9IG9iaiB8fCB7fTtcbiAgICBpZiAob2JqKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuZm9ybVZhbGlkYXRpb25zLmNvbnZlcnRUb0Zvcm1Hcm91cEZvcm1hdChvYmopLCB7XG4gICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCh0aGlzLmZvcm1WYWxpZGF0aW9ucy5jb252ZXJ0VG9CYWNrZW5kRm9ybWF0KSxcbiAgICAgICAgbWFwKGZvcm1WYWx1ZSA9PiBPYmplY3QuYXNzaWduKHRoaXMucmF3VmFsdWUsIGZvcm1WYWx1ZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGZuKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZm4pO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaXNEaXNhYmxlZCA/IHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKSA6IHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdWJGb3JtcygpIHtcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICB0aGlzLnJhbmdlID0gdGhpcy55ZWxsb3dSYW5nZSA9IHRoaXMucmVkUmFuZ2UgPSB0aGlzLmNoYXJ0ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJhbmdlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdyYW5nZScpIGFzIEZvcm1Hcm91cDtcbiAgICB0aGlzLnllbGxvd1JhbmdlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCd5ZWxsb3dSYW5nZScpIGFzIEZvcm1Hcm91cDtcbiAgICB0aGlzLnJlZFJhbmdlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdyZWRSYW5nZScpIGFzIEZvcm1Hcm91cDtcbiAgICB0aGlzLmNoYXJ0ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdjaGFydCcpIGFzIEZvcm1Hcm91cDtcbiAgfVxufVxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiICpuZ0lmPVwiIXJhd1ZhbHVlPy5fX3RlbXBsYXRlIHx8IHNob3dGb3JtSWZUZW1wbGF0ZVdhc1NlbGVjdGVkXCI+XG4gIDxmaWVsZHNldFxuICAgIGNsYXNzPVwiYzh5LWZpZWxkc2V0XCJcbiAgICAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scz8ubGFiZWwgfHwgZm9ybUdyb3VwLmNvbnRyb2xzPy51bml0IHx8IGZvcm1Hcm91cC5jb250cm9scz8udGFyZ2V0XCJcbiAgPlxuICAgIDxsZWdlbmQgdHJhbnNsYXRlPkRldGFpbHM8L2xlZ2VuZD5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scz8ubGFiZWxcIj5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDxsYWJlbCB0cmFuc2xhdGU+TGFiZWw8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgbmFtZT1cImxhYmVsXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxhYmVsXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAnVGVtcGVyYXR1cmUnIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGM4eS1tZXNzYWdlc1xuICAgICAgICAgICAgW3Nob3ddPVwiZm9ybUdyb3VwLmNvbnRyb2xzLmxhYmVsLnRvdWNoZWQgJiYgZm9ybUdyb3VwLmNvbnRyb2xzLmxhYmVsLmVycm9yc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGN1c3RvbVZhbGlkYXRpb25FcnJvck1lc3NhZ2VzWydsYWJlbCddIHwga2V5dmFsdWVcIlxuICAgICAgICAgICAgICBbbmFtZV09XCJpdGVtLmtleVwiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJmb3JtR3JvdXAuY29udHJvbHM/LnVuaXRcIj5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDxsYWJlbCB0cmFuc2xhdGU+VW5pdDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBuYW1lPVwidW5pdFwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ1bml0XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAnwrpDJyB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxjOHktbWVzc2FnZXMgW3Nob3ddPVwiZm9ybUdyb3VwLmNvbnRyb2xzLnVuaXQudG91Y2hlZCAmJiBmb3JtR3JvdXAuY29udHJvbHMudW5pdC5lcnJvcnNcIj5cbiAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjdXN0b21WYWxpZGF0aW9uRXJyb3JNZXNzYWdlc1sndW5pdCddIHwga2V5dmFsdWVcIlxuICAgICAgICAgICAgICBbbmFtZV09XCJpdGVtLmtleVwiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJmb3JtR3JvdXAuY29udHJvbHM/LnRhcmdldCAmJiBzaG93VGFyZ2V0XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cFxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdoYXMtZXJyb3InOlxuICAgICAgICAgICAgICAocmFuZ2U/LnRvdWNoZWQgfHwgZm9ybUdyb3VwLmNvbnRyb2xzLnRhcmdldC50b3VjaGVkKSAmJlxuICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHM/LnRhcmdldD8uZXJyb3JzXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPlRhcmdldDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIG5hbWU9XCJ0YXJnZXRcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGFyZ2V0XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAyNSB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxjOHktbWVzc2FnZXNcbiAgICAgICAgICAgIFtzaG93XT1cIlxuICAgICAgICAgICAgICAocmFuZ2U/LnRvdWNoZWQgfHwgZm9ybUdyb3VwLmNvbnRyb2xzLnRhcmdldC50b3VjaGVkKSAmJlxuICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHMudGFyZ2V0LmVycm9yc1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY3VzdG9tVmFsaWRhdGlvbkVycm9yTWVzc2FnZXNbJ3RhcmdldCddIHwga2V5dmFsdWVcIlxuICAgICAgICAgICAgICBbbmFtZV09XCJpdGVtLmtleVwiXG4gICAgICAgICAgICAgIFt0ZXh0XT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9maWVsZHNldD5cbiAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0XCIgKm5nSWY9XCJyYW5nZSAmJiBzaG93UmFuZ2VcIj5cbiAgICA8bGVnZW5kIHRyYW5zbGF0ZT5SYW5nZTwvbGVnZW5kPlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIiBmb3JtR3JvdXBOYW1lPVwicmFuZ2VcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgW25nQ2xhc3NdPVwieyAnaGFzLWVycm9yJzogcmFuZ2U/LnRvdWNoZWQgJiYgcmFuZ2U/LmNvbnRyb2xzPy5taW4/LmVycm9ycyB9XCI+XG4gICAgICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5NaW48L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBuYW1lPVwibWluXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1pblwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGU6IHsgZXhhbXBsZTogMCB9XCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxjOHktbWVzc2FnZXMgW3Nob3ddPVwicmFuZ2U/LnRvdWNoZWQgJiYgcmFuZ2UuY29udHJvbHM/Lm1pbj8uZXJyb3JzXCI+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXAgW25nQ2xhc3NdPVwieyAnaGFzLWVycm9yJzogcmFuZ2U/LnRvdWNoZWQgJiYgcmFuZ2U/LmNvbnRyb2xzPy5tYXg/LmVycm9ycyB9XCI+XG4gICAgICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5NYXg8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBuYW1lPVwibWF4XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1heFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGU6IHsgZXhhbXBsZTogMTAwIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGM4eS1tZXNzYWdlcyBbc2hvd109XCJyYW5nZT8udG91Y2hlZCAmJiByYW5nZS5jb250cm9scz8ubWF4Py5lcnJvcnNcIj5cbiAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjdXN0b21WYWxpZGF0aW9uRXJyb3JNZXNzYWdlc1snbWF4J10gfCBrZXl2YWx1ZVwiXG4gICAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0ua2V5XCJcbiAgICAgICAgICAgICAgW3RleHRdPVwiaXRlbS52YWx1ZVwiXG4gICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICA8L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2ZpZWxkc2V0PlxuXG4gIDxmaWVsZHNldCBjbGFzcz1cImM4eS1maWVsZHNldFwiIGZvcm1Hcm91cE5hbWU9XCJ5ZWxsb3dSYW5nZVwiICpuZ0lmPVwieWVsbG93UmFuZ2UgJiYgc2hvd1llbGxvd1JhbmdlXCI+XG4gICAgPGxlZ2VuZCB0cmFuc2xhdGU+WWVsbG93IHJhbmdlPC9sZWdlbmQ+XG4gICAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cFxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdoYXMtZXJyb3InOlxuICAgICAgICAgICAgICAocmFuZ2U/LnRvdWNoZWQgfHwgeWVsbG93UmFuZ2U/LnRvdWNoZWQpICYmIHllbGxvd1JhbmdlPy5jb250cm9scz8ubWluPy5lcnJvcnNcbiAgICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxsYWJlbCB0cmFuc2xhdGU+TWluPC9sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgbmFtZT1cIm1pblwiXG4gICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtaW5cIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlOiB7IGV4YW1wbGU6IDUwIH1cIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPGM4eS1tZXNzYWdlc1xuICAgICAgICAgICAgW3Nob3ddPVwiKHJhbmdlPy50b3VjaGVkIHx8IHllbGxvd1JhbmdlPy50b3VjaGVkKSAmJiB5ZWxsb3dSYW5nZS5jb250cm9scz8ubWluPy5lcnJvcnNcIlxuICAgICAgICAgID48L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2hhcy1lcnJvcic6XG4gICAgICAgICAgICAgIChyYW5nZT8udG91Y2hlZCB8fCB5ZWxsb3dSYW5nZT8udG91Y2hlZCkgJiYgeWVsbG93UmFuZ2U/LmNvbnRyb2xzPy5tYXg/LmVycm9yc1xuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5NYXg8L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBuYW1lPVwibWF4XCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1heFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGU6IHsgZXhhbXBsZTogNzUgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICBbc2hvd109XCIocmFuZ2U/LnRvdWNoZWQgfHwgeWVsbG93UmFuZ2U/LnRvdWNoZWQpICYmIHllbGxvd1JhbmdlLmNvbnRyb2xzPy5tYXg/LmVycm9yc1wiXG4gICAgICAgICAgPjwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZmllbGRzZXQ+XG5cbiAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0XCIgZm9ybUdyb3VwTmFtZT1cInJlZFJhbmdlXCIgKm5nSWY9XCJyZWRSYW5nZSAmJiBzaG93UmVkUmFuZ2VcIj5cbiAgICA8bGVnZW5kIHRyYW5zbGF0ZT5SZWQgcmFuZ2U8L2xlZ2VuZD5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2hhcy1lcnJvcic6IChyYW5nZT8udG91Y2hlZCB8fCByZWRSYW5nZT8udG91Y2hlZCkgJiYgcmVkUmFuZ2U/LmNvbnRyb2xzPy5taW4/LmVycm9yc1xuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5NaW48L2xhYmVsPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICBuYW1lPVwibWluXCJcbiAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1pblwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGU6IHsgZXhhbXBsZTogNzUgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICBbc2hvd109XCIocmFuZ2U/LnRvdWNoZWQgfHwgcmVkUmFuZ2U/LnRvdWNoZWQpICYmIHJlZFJhbmdlLmNvbnRyb2xzPy5taW4/LmVycm9yc1wiXG4gICAgICAgICAgPjwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXBcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnaGFzLWVycm9yJzogKHJhbmdlPy50b3VjaGVkIHx8IHJlZFJhbmdlPy50b3VjaGVkKSAmJiByZWRSYW5nZT8uY29udHJvbHM/Lm1heD8uZXJyb3JzXG4gICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPk1heDwvbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIG5hbWU9XCJtYXhcIlxuICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4XCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZTogeyBleGFtcGxlOiAxMDAgfVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICBbc2hvd109XCIocmFuZ2U/LnRvdWNoZWQgfHwgcmVkUmFuZ2U/LnRvdWNoZWQpICYmIHJlZFJhbmdlLmNvbnRyb2xzPy5tYXg/LmVycm9yc1wiXG4gICAgICAgICAgPjwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZmllbGRzZXQ+XG5cbiAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0XCIgKm5nSWY9XCJjaGFydCAmJiBzaG93Q2hhcnRcIiBmb3JtR3JvdXBOYW1lPVwiY2hhcnRcIj5cbiAgICA8bGVnZW5kIHRyYW5zbGF0ZT5DaGFydDwvbGVnZW5kPlxuICAgIDxkaXYgY2xhc3M9XCJ0aWdodC1ncmlkXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTRcIj5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJkaXNwbGF5XCI+XG4gICAgICAgICAgICB7eyAnRGlzcGxheScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgcG9wb3Zlcj1cInt7ICdWYWx1ZSBkaXNwbGF5ZWQgd2hlbiBkYXRhIGlzIGFnZ3JlZ2F0ZWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICAgIFtjb250YWluZXJdPVwiJ2JvZHknXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJyZW5kZXJUeXBlXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHR5cGUgb2YgQ0hBUlRfUkVOREVSX1RZUEVTXCIgW25nVmFsdWVdPVwidHlwZS52YWxcIj5cbiAgICAgICAgICAgICAgICB7eyB0eXBlLnRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS00XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwiY2hhcnRUeXBlXCIgdHJhbnNsYXRlPkNoYXJ0IHR5cGU8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJsaW5lVHlwZVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0eXBlIG9mIENIQVJUX0xJTkVfVFlQRVNcIiBbbmdWYWx1ZV09XCJ0eXBlLnZhbFwiPlxuICAgICAgICAgICAgICAgIHt7IHR5cGUudGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXhzLTYgY29sLXNtLTRcIj5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJ5QXhpc1wiIHRyYW5zbGF0ZT5ZLWF4aXM8L2xhYmVsPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJ5QXhpc1R5cGVcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBBWElTX1RZUEVTXCIgW25nVmFsdWVdPVwidHlwZS52YWxcIj5cbiAgICAgICAgICAgICAgICB7eyB0eXBlLnRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2ZpZWxkc2V0PlxuPC9kaXY+XG4iXX0=
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXBvaW50LWF0dHJpYnV0ZXMtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9kYXRhcG9pbnQtc2VsZWN0b3IvZGF0YXBvaW50LWF0dHJpYnV0ZXMtZm9ybS9kYXRhcG9pbnQtYXR0cmlidXRlcy1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2RhdGFwb2ludC1zZWxlY3Rvci9kYXRhcG9pbnQtYXR0cmlidXRlcy1mb3JtL2RhdGFwb2ludC1hdHRyaWJ1dGVzLWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFJTCxhQUFhLEVBQ2IsaUJBQWlCLEVBR2xCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUMxRyxPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7QUFrQmhHLE1BQU0sT0FBTyxnQ0FBZ0M7SUF1QjNDLFlBQW9CLGVBQXlEO1FBQXpELG9CQUFlLEdBQWYsZUFBZSxDQUEwQztRQXRCcEUsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLG9CQUFlLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLGlCQUFZLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLGNBQVMsR0FBRyxJQUFJLENBQUM7UUFDakIsa0NBQTZCLEdBQUcsS0FBSyxDQUFDO1FBTS9DLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsdUJBQWtCLEdBQUcsa0JBQWtCLENBQUM7UUFDeEMscUJBQWdCLEdB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Q0UsK0JBQStCLGFBRTlCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGlDQUFpQyxDQUFDOzRCQUMvRCxLQUFLLEVBQUUsSUFBSTt5QkFDWjt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsYUFBYTs0QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsaUNBQWlDLENBQUM7NEJBQy9ELEtBQUssRUFBRSxJQUFJO3lCQUNaO3FCQUNGOytIQUdRLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyw2QkFBNkI7c0JBQXJDLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIGZvcndhcmRSZWYsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtR3JvdXAsXG4gIE5HX1ZBTElEQVRPUlMsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3Jcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1WYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vZGF0YXBvaW50LWF0dHJpYnV0ZXMtZm9ybS12YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQVhJU19UWVBFUywgQ0hBUlRfTElORV9UWVBFUywgQ0hBUlRfUkVOREVSX1RZUEVTIH0gZnJvbSAnLi9kYXRhcG9pbnQtYXR0cmlidXRlcy5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXRhcG9pbnQtYXR0cmlidXRlcy1mb3JtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFwb2ludC1hdHRyaWJ1dGVzLWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGFwb2ludEF0dHJpYnV0ZXNGb3JtQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yIHtcbiAgQElucHV0KCkgc2hvd1RhcmdldCA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dSYW5nZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dZZWxsb3dSYW5nZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dSZWRSYW5nZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dDaGFydCA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dGb3JtSWZUZW1wbGF0ZVdhc1NlbGVjdGVkID0gZmFsc2U7XG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICByYW5nZTogRm9ybUdyb3VwO1xuICB5ZWxsb3dSYW5nZTogRm9ybUdyb3VwO1xuICByZWRSYW5nZTogRm9ybUdyb3VwO1xuICBjaGFydDogRm9ybUdyb3VwO1xuICByYXdWYWx1ZTogYW55ID0ge307XG4gIENIQVJUX1JFTkRFUl9UWVBFUyA9IENIQVJUX1JFTkRFUl9UWVBFUztcbiAgQ0hBUlRfTElORV9UWVBFUyA9IENIQVJUX0xJTkVfVFlQRVM7XG4gIEFYSVNfVFlQRVMgPSBBWElTX1RZUEVTO1xuXG4gIGN1c3RvbVZhbGlkYXRpb25FcnJvck1lc3NhZ2VzOiB7XG4gICAgW2Zvcm1GaWVsZDogc3RyaW5nXToge1xuICAgICAgW3ZhbGlkYXRpb25FcnJvcjogc3RyaW5nXTogc3RyaW5nO1xuICAgIH07XG4gIH0gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1WYWxpZGF0aW9uczogRGF0YXBvaW50QXR0cmlidXRlc0Zvcm1WYWxpZGF0aW9uU2VydmljZSkge1xuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mb3JtVmFsaWRhdGlvbnMuZ2V0RGVmYXVsdEZvcm1Hcm91cCgpO1xuICAgIHRoaXMuc2V0U3ViRm9ybXMoKTtcbiAgfVxuXG4gIHZhbGlkYXRlKF9jb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtR3JvdXA/LnZhbGlkID8gbnVsbCA6IHsgZm9ybUludmFsaWQ6IHt9IH07XG4gIH1cblxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG4gICAgdGhpcy5yYXdWYWx1ZSA9IG9iaiB8fCB7fTtcbiAgICBpZiAob2JqKSB7XG4gICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHRoaXMuZm9ybVZhbGlkYXRpb25zLmNvbnZlcnRUb0Zvcm1Hcm91cEZvcm1hdChvYmopLCB7XG4gICAgICAgIGVtaXRFdmVudDogZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlc1xuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCh0aGlzLmZvcm1WYWxpZGF0aW9ucy5jb252ZXJ0VG9CYWNrZW5kRm9ybWF0KSxcbiAgICAgICAgbWFwKGZvcm1WYWx1ZSA9PiBPYmplY3QuYXNzaWduKHRoaXMucmF3VmFsdWUsIGZvcm1WYWx1ZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGZuKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoZm4pO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaXNEaXNhYmxlZCA/IHRoaXMuZm9ybUdyb3VwLmRpc2FibGUoKSA6IHRoaXMuZm9ybUdyb3VwLmVuYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTdWJGb3JtcygpIHtcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICB0aGlzLnJhbmdlID0gdGhpcy55ZWxsb3dSYW5nZSA9IHRoaXMucmVkUmFuZ2UgPSB0aGlzLmNoYXJ0ID0gdW5kZWZpbmVkO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnJhbmdlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdyYW5nZScpIGFzIEZvcm1Hcm91cDtcbiAgICB0aGlzLnllbGxvd1JhbmdlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCd5ZWxsb3dSYW5nZScpIGFzIEZvcm1Hcm91cDtcbiAgICB0aGlzLnJlZFJhbmdlID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdyZWRSYW5nZScpIGFzIEZvcm1Hcm91cDtcbiAgICB0aGlzLmNoYXJ0ID0gdGhpcy5mb3JtR3JvdXAuZ2V0KCdjaGFydCcpIGFzIEZvcm1Hcm91cDtcbiAgfVxufVxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXJhd1ZhbHVlPy5fX3RlbXBsYXRlIHx8IHNob3dGb3JtSWZUZW1wbGF0ZVdhc1NlbGVjdGVkXCI+XG4gICAgPGZpZWxkc2V0XG4gICAgICBjbGFzcz1cImM4eS1maWVsZHNldFwiXG4gICAgICAqbmdJZj1cImZvcm1Hcm91cC5jb250cm9scz8ubGFiZWwgfHwgZm9ybUdyb3VwLmNvbnRyb2xzPy51bml0IHx8IGZvcm1Hcm91cC5jb250cm9scz8udGFyZ2V0XCJcbiAgICA+XG4gICAgICA8bGVnZW5kIHRyYW5zbGF0ZT5EZXRhaWxzPC9sZWdlbmQ+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzPy5sYWJlbFwiPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICAgIDxsYWJlbCB0cmFuc2xhdGU+TGFiZWw8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlIDogeyBleGFtcGxlOiAnVGVtcGVyYXR1cmUnIH1cIlxuICAgICAgICAgICAgICBuYW1lPVwibGFiZWxcIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJsYWJlbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGM4eS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbc2hvd109XCJmb3JtR3JvdXAuY29udHJvbHMubGFiZWwudG91Y2hlZCAmJiBmb3JtR3JvdXAuY29udHJvbHMubGFiZWwuZXJyb3JzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY3VzdG9tVmFsaWRhdGlvbkVycm9yTWVzc2FnZXNbJ2xhYmVsJ10gfCBrZXl2YWx1ZVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5rZXlcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgIDwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzPy51bml0XCI+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5Vbml0PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogJ8K6QycgfVwiXG4gICAgICAgICAgICAgIG5hbWU9XCJ1bml0XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidW5pdFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGM4eS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbc2hvd109XCJmb3JtR3JvdXAuY29udHJvbHMudW5pdC50b3VjaGVkICYmIGZvcm1Hcm91cC5jb250cm9scy51bml0LmVycm9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGN1c3RvbVZhbGlkYXRpb25FcnJvck1lc3NhZ2VzWyd1bml0J10gfCBrZXl2YWx1ZVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5rZXlcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgIDwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwiZm9ybUdyb3VwLmNvbnRyb2xzPy50YXJnZXQgJiYgc2hvd1RhcmdldFwiPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cFxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnaGFzLWVycm9yJzpcbiAgICAgICAgICAgICAgICAocmFuZ2U/LnRvdWNoZWQgfHwgZm9ybUdyb3VwLmNvbnRyb2xzLnRhcmdldC50b3VjaGVkKSAmJlxuICAgICAgICAgICAgICAgIGZvcm1Hcm91cC5jb250cm9scz8udGFyZ2V0Py5lcnJvcnNcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCB0cmFuc2xhdGU+VGFyZ2V0PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogMjUgfVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBuYW1lPVwidGFyZ2V0XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidGFyZ2V0XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFtzaG93XT1cIlxuICAgICAgICAgICAgICAgIChyYW5nZT8udG91Y2hlZCB8fCBmb3JtR3JvdXAuY29udHJvbHMudGFyZ2V0LnRvdWNoZWQpICYmXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmNvbnRyb2xzLnRhcmdldC5lcnJvcnNcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGM4eS1tZXNzYWdlXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY3VzdG9tVmFsaWRhdGlvbkVycm9yTWVzc2FnZXNbJ3RhcmdldCddIHwga2V5dmFsdWVcIlxuICAgICAgICAgICAgICAgIFtuYW1lXT1cIml0ZW0ua2V5XCJcbiAgICAgICAgICAgICAgICBbdGV4dF09XCJpdGVtLnZhbHVlXCJcbiAgICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgICAgICAgICA8L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZmllbGRzZXQ+XG4gICAgPGZpZWxkc2V0IGNsYXNzPVwiYzh5LWZpZWxkc2V0XCIgKm5nSWY9XCJyYW5nZSAmJiBzaG93UmFuZ2VcIj5cbiAgICAgIDxsZWdlbmQgdHJhbnNsYXRlPlJhbmdlPC9sZWdlbmQ+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCIgZm9ybUdyb3VwTmFtZT1cInJhbmdlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cFxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaGFzLWVycm9yJzogcmFuZ2U/LnRvdWNoZWQgJiYgcmFuZ2U/LmNvbnRyb2xzPy5taW4/LmVycm9ycyB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPk1pbjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7IGV4YW1wbGU6IDAgfVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBuYW1lPVwibWluXCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWluXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzIFtzaG93XT1cInJhbmdlPy50b3VjaGVkICYmIHJhbmdlLmNvbnRyb2xzPy5taW4/LmVycm9yc1wiPjwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIj5cbiAgICAgICAgICA8Yzh5LWZvcm0tZ3JvdXBcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2hhcy1lcnJvcic6IHJhbmdlPy50b3VjaGVkICYmIHJhbmdlPy5jb250cm9scz8ubWF4Py5lcnJvcnMgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5NYXg8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlIDogeyBleGFtcGxlOiAxMDAgfVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBuYW1lPVwibWF4XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzIFtzaG93XT1cInJhbmdlPy50b3VjaGVkICYmIHJhbmdlLmNvbnRyb2xzPy5tYXg/LmVycm9yc1wiPlxuICAgICAgICAgICAgICA8Yzh5LW1lc3NhZ2VcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjdXN0b21WYWxpZGF0aW9uRXJyb3JNZXNzYWdlc1snbWF4J10gfCBrZXl2YWx1ZVwiXG4gICAgICAgICAgICAgICAgW25hbWVdPVwiaXRlbS5rZXlcIlxuICAgICAgICAgICAgICAgIFt0ZXh0XT1cIml0ZW0udmFsdWVcIlxuICAgICAgICAgICAgICA+PC9jOHktbWVzc2FnZT5cbiAgICAgICAgICAgIDwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9maWVsZHNldD5cblxuICAgIDxmaWVsZHNldFxuICAgICAgY2xhc3M9XCJjOHktZmllbGRzZXRcIlxuICAgICAgKm5nSWY9XCJ5ZWxsb3dSYW5nZSAmJiBzaG93WWVsbG93UmFuZ2VcIlxuICAgICAgZm9ybUdyb3VwTmFtZT1cInllbGxvd1JhbmdlXCJcbiAgICA+XG4gICAgICA8bGVnZW5kIHRyYW5zbGF0ZT5ZZWxsb3cgcmFuZ2U8L2xlZ2VuZD5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdoYXMtZXJyb3InOlxuICAgICAgICAgICAgICAgIChyYW5nZT8udG91Y2hlZCB8fCB5ZWxsb3dSYW5nZT8udG91Y2hlZCkgJiYgeWVsbG93UmFuZ2U/LmNvbnRyb2xzPy5taW4/LmVycm9yc1xuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGxhYmVsIHRyYW5zbGF0ZT5NaW48L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidlLmcuIHt7IGV4YW1wbGUgfX0nIHwgdHJhbnNsYXRlIDogeyBleGFtcGxlOiA1MCB9XCJcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgIG5hbWU9XCJtaW5cIlxuICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJtaW5cIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxjOHktbWVzc2FnZXNcbiAgICAgICAgICAgICAgW3Nob3ddPVwiKHJhbmdlPy50b3VjaGVkIHx8IHllbGxvd1JhbmdlPy50b3VjaGVkKSAmJiB5ZWxsb3dSYW5nZS5jb250cm9scz8ubWluPy5lcnJvcnNcIlxuICAgICAgICAgICAgPjwvYzh5LW1lc3NhZ2VzPlxuICAgICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cFxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnaGFzLWVycm9yJzpcbiAgICAgICAgICAgICAgICAocmFuZ2U/LnRvdWNoZWQgfHwgeWVsbG93UmFuZ2U/LnRvdWNoZWQpICYmIHllbGxvd1JhbmdlPy5jb250cm9scz8ubWF4Py5lcnJvcnNcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCB0cmFuc2xhdGU+TWF4PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogNzUgfVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBuYW1lPVwibWF4XCJcbiAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibWF4XCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8Yzh5LW1lc3NhZ2VzXG4gICAgICAgICAgICAgIFtzaG93XT1cIihyYW5nZT8udG91Y2hlZCB8fCB5ZWxsb3dSYW5nZT8udG91Y2hlZCkgJiYgeWVsbG93UmFuZ2UuY29udHJvbHM/Lm1heD8uZXJyb3JzXCJcbiAgICAgICAgICAgID48L2M4eS1tZXNzYWdlcz5cbiAgICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZmllbGRzZXQ+XG5cbiAgICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIiAqbmdJZj1cInJlZFJhbmdlICYmIHNob3dSZWRSYW5nZVwiIGZvcm1Hcm91cE5hbWU9XCJyZWRSYW5nZVwiPlxuICAgICAgPGxlZ2VuZCB0cmFuc2xhdGU+UmVkIHJhbmdlPC9sZWdlbmQ+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiPlxuICAgICAgICAgIDxjOHktZm9ybS1ncm91cFxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnaGFzLWVycm9yJzogKHJhbmdlPy50b3VjaGVkIHx8IHJlZFJhbmdlPy50b3VjaGVkKSAmJiByZWRSYW5nZT8uY29udHJvbHM/Lm1pbj8uZXJyb3JzXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bGFiZWwgdHJhbnNsYXRlPk1pbjwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2UuZy4ge3sgZXhhbXBsZSB9fScgfCB0cmFuc2xhdGUgOiB7IGV4YW1wbGU6IDc1IH1cIlxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgbmFtZT1cIm1pblwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1pblwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGM4eS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbc2hvd109XCIocmFuZ2U/LnRvdWNoZWQgfHwgcmVkUmFuZ2U/LnRvdWNoZWQpICYmIHJlZFJhbmdlLmNvbnRyb2xzPy5taW4/LmVycm9yc1wiXG4gICAgICAgICAgICA+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gICAgICAgICAgPGM4eS1mb3JtLWdyb3VwXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdoYXMtZXJyb3InOiAocmFuZ2U/LnRvdWNoZWQgfHwgcmVkUmFuZ2U/LnRvdWNoZWQpICYmIHJlZFJhbmdlPy5jb250cm9scz8ubWF4Py5lcnJvcnNcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxsYWJlbCB0cmFuc2xhdGU+TWF4PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogMTAwIH1cIlxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgbmFtZT1cIm1heFwiXG4gICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm1heFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGM4eS1tZXNzYWdlc1xuICAgICAgICAgICAgICBbc2hvd109XCIocmFuZ2U/LnRvdWNoZWQgfHwgcmVkUmFuZ2U/LnRvdWNoZWQpICYmIHJlZFJhbmdlLmNvbnRyb2xzPy5tYXg/LmVycm9yc1wiXG4gICAgICAgICAgICA+PC9jOHktbWVzc2FnZXM+XG4gICAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2ZpZWxkc2V0PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZmllbGRzZXQgY2xhc3M9XCJjOHktZmllbGRzZXRcIiAqbmdJZj1cImNoYXJ0ICYmIHNob3dDaGFydFwiIGZvcm1Hcm91cE5hbWU9XCJjaGFydFwiPlxuICAgIDxsZWdlbmQgdHJhbnNsYXRlPkNoYXJ0PC9sZWdlbmQ+XG4gICAgPGRpdiBjbGFzcz1cInRpZ2h0LWdyaWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtNiBjb2wtc20tNFwiPlxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImRpc3BsYXlcIj5cbiAgICAgICAgICAgIHt7ICdEaXNwbGF5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1oZWxwIGJ0bi1oZWxwLS1zbVwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgICAgICAgICAgICAgW2NvbnRhaW5lcl09XCInYm9keSdcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgcG9wb3Zlcj1cInt7ICdWYWx1ZSBkaXNwbGF5ZWQgd2hlbiBkYXRhIGlzIGFnZ3JlZ2F0ZWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVuZGVyVHlwZVwiPlxuICAgICAgICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCB0eXBlIG9mIENIQVJUX1JFTkRFUl9UWVBFU1wiIFtuZ1ZhbHVlXT1cInR5cGUudmFsXCI+XG4gICAgICAgICAgICAgICAge3sgdHlwZS50ZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wteHMtNiBjb2wtc20tNFwiPlxuICAgICAgICA8Yzh5LWZvcm0tZ3JvdXA+XG4gICAgICAgICAgPGxhYmVsIGZvcj1cImNoYXJ0VHlwZVwiIHRyYW5zbGF0ZT5DaGFydCB0eXBlPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwibGluZVR5cGVcIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBDSEFSVF9MSU5FX1RZUEVTXCIgW25nVmFsdWVdPVwidHlwZS52YWxcIj5cbiAgICAgICAgICAgICAgICB7eyB0eXBlLnRleHQgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC14cy02IGNvbC1zbS00XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgZm9yPVwieUF4aXNcIiB0cmFuc2xhdGU+WS1heGlzPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYzh5LXNlbGVjdC13cmFwcGVyXCI+XG4gICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwieUF4aXNUeXBlXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHR5cGUgb2YgQVhJU19UWVBFU1wiIFtuZ1ZhbHVlXT1cInR5cGUudmFsXCI+XG4gICAgICAgICAgICAgICAge3sgdHlwZS50ZXh0IHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9maWVsZHNldD5cbjwvZGl2PlxuIl19
|