@c8y/ngx-components 1019.5.6 → 1019.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/authentication/new-password.component.d.ts +9 -3
- package/core/authentication/new-password.component.d.ts.map +1 -1
- package/core/authentication/password-check-list.component.d.ts +16 -5
- package/core/authentication/password-check-list.component.d.ts.map +1 -1
- package/core/authentication/password-strength.component.d.ts +3 -0
- package/core/authentication/password-strength.component.d.ts.map +1 -1
- package/core/data-grid/column/filtering-form-renderer.component.d.ts.map +1 -1
- package/core/docs/docs.service.d.ts.map +1 -1
- package/core/forms/validation-pattern.d.ts +2 -1
- package/core/forms/validation-pattern.d.ts.map +1 -1
- package/core/login/change-password.component.d.ts +1 -3
- package/core/login/change-password.component.d.ts.map +1 -1
- package/core/login/login.service.d.ts +2 -2
- package/data-broker/data-broker-subscriptions.service.d.ts +1 -0
- package/data-broker/data-broker-subscriptions.service.d.ts.map +1 -1
- package/ecosystem/shared/application-card.component.d.ts.map +1 -1
- package/esm2022/auth-configuration/basic-settings/login-settings.component.mjs +3 -3
- package/esm2022/context-dashboard/context-dashboard.component.mjs +2 -2
- package/esm2022/core/authentication/new-password.component.mjs +32 -15
- package/esm2022/core/authentication/password-check-list.component.mjs +49 -21
- package/esm2022/core/authentication/password-strength.component.mjs +4 -1
- package/esm2022/core/data-grid/column/filtering-form-renderer.component.mjs +4 -1
- package/esm2022/core/docs/docs.service.mjs +1 -11
- package/esm2022/core/forms/validation-pattern.mjs +3 -2
- package/esm2022/core/list-group/list-item.component.mjs +3 -3
- package/esm2022/core/login/change-password.component.mjs +20 -26
- package/esm2022/core/login/login.service.mjs +3 -3
- package/esm2022/core/select-modal/select-modal.component.mjs +3 -3
- package/esm2022/data-broker/data-broker-subscriptions.service.mjs +3 -2
- package/esm2022/device-profile/device-profile-list.component.mjs +3 -3
- package/esm2022/device-profile/device-profile.component.mjs +3 -3
- package/esm2022/device-profile/device-tab-profile/device-tab-profile.component.mjs +3 -3
- package/esm2022/ecosystem/application-properties/application-properties.component.mjs +3 -3
- package/esm2022/ecosystem/shared/application-card.component.mjs +2 -3
- package/esm2022/ecosystem/shared/ecosystem.service.mjs +2 -2
- package/esm2022/repository/firmware/list/firmware-details.component.mjs +3 -3
- package/esm2022/widgets/implementations/device-control-message/device-control-message-widget-view/device-control-message-widget-view.component.mjs +17 -9
- package/esm2022/widgets/implementations/three-d-rotation/lazy-box-model/lazy-load-box-model.mjs +3 -3
- package/esm2022/widgets/implementations/three-d-rotation/lazy-phone-model/lazy-load-phone-model.mjs +3 -3
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +2 -2
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs +1 -1
- package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-broker.mjs +2 -1
- package/fesm2022/c8y-ngx-components-data-broker.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +6 -6
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +2 -3
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +2 -2
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +2 -2
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs +15 -8
- package/fesm2022/c8y-ngx-components-widgets-implementations-device-control-message.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation-lazy-box-model.mjs +2 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation-lazy-box-model.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation-lazy-phone-model.mjs +2 -2
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation-lazy-phone-model.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +117 -76
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +12 -15
- package/locales/es.po +12 -15
- package/locales/fr.po +12 -15
- package/locales/locales.pot +28 -11
- package/locales/nl.po +12 -15
- package/locales/pl.po +12 -15
- package/locales/pt_BR.po +12 -15
- package/package.json +1 -1
- package/widgets/implementations/device-control-message/device-control-message-widget-view/device-control-message-widget-view.component.d.ts +4 -2
- package/widgets/implementations/device-control-message/device-control-message-widget-view/device-control-message-widget-view.component.d.ts.map +1 -1
- package/widgets/implementations/three-d-rotation/lazy-box-model/lazy-load-box-model.d.ts +79 -1
- package/widgets/implementations/three-d-rotation/lazy-box-model/lazy-load-box-model.d.ts.map +1 -1
- package/widgets/implementations/three-d-rotation/lazy-phone-model/lazy-load-phone-model.d.ts +76 -1
- package/widgets/implementations/three-d-rotation/lazy-phone-model/lazy-load-phone-model.d.ts.map +1 -1
- package/esm2022/widgets/implementations/three-d-rotation/box-model/c8y-ngx-components-widgets-implementations-three-d-rotation-box-model.mjs +0 -5
- package/esm2022/widgets/implementations/three-d-rotation/box-model/index.mjs +0 -4
- package/esm2022/widgets/implementations/three-d-rotation/phone-model/c8y-ngx-components-widgets-implementations-three-d-rotation-phone-model.mjs +0 -5
- package/esm2022/widgets/implementations/three-d-rotation/phone-model/index.mjs +0 -4
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation-box-model.mjs +0 -10
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation-box-model.mjs.map +0 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation-phone-model.mjs +0 -10
- package/fesm2022/c8y-ngx-components-widgets-implementations-three-d-rotation-phone-model.mjs.map +0 -1
- package/widgets/implementations/three-d-rotation/box-model/c8y-ngx-components-widgets-implementations-three-d-rotation-box-model.d.ts.map +0 -1
- package/widgets/implementations/three-d-rotation/box-model/index.d.ts +0 -2
- package/widgets/implementations/three-d-rotation/box-model/index.d.ts.map +0 -1
- package/widgets/implementations/three-d-rotation/phone-model/c8y-ngx-components-widgets-implementations-three-d-rotation-phone-model.d.ts.map +0 -1
- package/widgets/implementations/three-d-rotation/phone-model/index.d.ts +0 -2
- package/widgets/implementations/three-d-rotation/phone-model/index.d.ts.map +0 -1
|
@@ -1,19 +1,25 @@
|
|
|
1
|
-
import { EventEmitter, OnInit } from '@angular/core';
|
|
1
|
+
import { ChangeDetectorRef, EventEmitter, OnInit } from '@angular/core';
|
|
2
2
|
import { NewPassword } from './password.model';
|
|
3
|
+
import { NgModel, ValidatorFn } from '@angular/forms';
|
|
3
4
|
import { LoginService } from '../login/login.service';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
export declare class NewPasswordComponent implements OnInit {
|
|
6
7
|
private loginService;
|
|
8
|
+
private cdRef;
|
|
7
9
|
password: EventEmitter<object | NewPassword>;
|
|
8
10
|
model: any;
|
|
9
11
|
changePassword: boolean;
|
|
10
12
|
passwordEnforced: boolean;
|
|
11
13
|
minlength: number;
|
|
12
|
-
|
|
14
|
+
requirementsFulfilled: boolean;
|
|
15
|
+
newPasswordModel: NgModel;
|
|
16
|
+
set _newPasswordModel(ngModel: NgModel);
|
|
17
|
+
constructor(loginService: LoginService, cdRef: ChangeDetectorRef);
|
|
18
|
+
passwordChecklistValidator: ValidatorFn;
|
|
13
19
|
ngOnInit(): void;
|
|
14
20
|
newPasswordChanged(): void;
|
|
21
|
+
updateValidity(requirementsFulfilled: boolean): void;
|
|
15
22
|
loadPasswordStrengthSettings(): Promise<void>;
|
|
16
|
-
showPasswordStrength(): boolean;
|
|
17
23
|
toggleChangePassword(): void;
|
|
18
24
|
static ɵfac: i0.ɵɵFactoryDeclaration<NewPasswordComponent, never>;
|
|
19
25
|
static ɵcmp: i0.ɵɵComponentDeclaration<NewPasswordComponent, "c8y-new-password", never, {}, { "password": "password"; }, never, never, false, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"new-password.component.d.ts","sourceRoot":"","sources":["../../../core/authentication/new-password.component.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"new-password.component.d.ts","sourceRoot":"","sources":["../../../core/authentication/new-password.component.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,YAAY,EACZ,MAAM,EAGP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAA4B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;;AAEtD,qBAKa,oBAAqB,YAAW,MAAM;IAkB/C,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,KAAK;IAlBL,QAAQ,qCAA4C;IAC9D,KAAK,EAAE,GAAG,CAAM;IAChB,cAAc,UAAS;IACvB,gBAAgB,UAAS;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,OAAO,CAAC;IAC/B,gBAAgB,EAAE,OAAO,CAAC;IAE1B,IACI,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAKrC;gBAGS,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,iBAAiB;IAGlC,0BAA0B,EAAE,WAAW,CACmC;IAE1E,QAAQ;IAOR,kBAAkB;IAOlB,cAAc,CAAC,qBAAqB,EAAE,OAAO;IAWvC,4BAA4B;IAIlC,oBAAoB;yCAtDT,oBAAoB;2CAApB,oBAAoB;CA6DhC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { OnInit } from '@angular/core';
|
|
1
|
+
import { OnInit, EventEmitter } from '@angular/core';
|
|
2
2
|
import { PasswordService } from './password.service';
|
|
3
3
|
import { LoginService } from '../login/login.service';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
@@ -6,41 +6,52 @@ export declare class PasswordCheckListComponent implements OnInit {
|
|
|
6
6
|
loginService: LoginService;
|
|
7
7
|
private passwordStrengthChecker;
|
|
8
8
|
private passwordService;
|
|
9
|
+
strengthEnforced: boolean;
|
|
9
10
|
set password(password: string);
|
|
11
|
+
onRequirementsFulfilled: EventEmitter<boolean>;
|
|
10
12
|
minGreenLength: number;
|
|
11
|
-
|
|
13
|
+
enhancedStrengthCheckList: ({
|
|
12
14
|
label: "Include lowercase characters (for example, abcdef)";
|
|
13
15
|
check: (password: string) => boolean;
|
|
14
16
|
icon: string;
|
|
15
17
|
contextualColor: string;
|
|
18
|
+
textColor: string;
|
|
16
19
|
} | {
|
|
17
20
|
label: "Include uppercase characters (for example, ABCDEF)";
|
|
18
21
|
check: (password: string) => boolean;
|
|
19
22
|
icon: string;
|
|
20
23
|
contextualColor: string;
|
|
24
|
+
textColor: string;
|
|
21
25
|
} | {
|
|
22
26
|
label: "Include numbers (for example, 123456)";
|
|
23
27
|
check: (password: string) => boolean;
|
|
24
28
|
icon: string;
|
|
25
29
|
contextualColor: string;
|
|
30
|
+
textColor: string;
|
|
26
31
|
} | {
|
|
27
32
|
label: "Include symbols (for example, !@#$%^)";
|
|
28
33
|
check: (password: string) => boolean;
|
|
29
34
|
icon: string;
|
|
30
35
|
contextualColor: string;
|
|
31
|
-
|
|
36
|
+
textColor: string;
|
|
37
|
+
})[];
|
|
38
|
+
basicChecklist: {
|
|
32
39
|
label: "Must have at least {{length}} characters";
|
|
33
40
|
check: (password: any) => boolean;
|
|
34
41
|
icon: string;
|
|
35
42
|
contextualColor: string;
|
|
36
|
-
|
|
43
|
+
textColor: string;
|
|
44
|
+
}[];
|
|
45
|
+
combinedChecklist: any[];
|
|
37
46
|
constructor(loginService: LoginService, passwordStrengthChecker: PasswordService, passwordService: PasswordService);
|
|
38
47
|
ngOnInit(): Promise<void>;
|
|
39
48
|
get translateParams(): {
|
|
40
49
|
length: number;
|
|
41
50
|
};
|
|
51
|
+
checkRequirement(requirement: any, password: any): any;
|
|
42
52
|
onPasswordChange(password: any): void;
|
|
53
|
+
isPasswordValid(): boolean;
|
|
43
54
|
static ɵfac: i0.ɵɵFactoryDeclaration<PasswordCheckListComponent, never>;
|
|
44
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<PasswordCheckListComponent, "c8y-password-check-list", never, { "password": { "alias": "password"; "required": false; }; }, {}, never, never, false, never>;
|
|
55
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<PasswordCheckListComponent, "c8y-password-check-list", never, { "strengthEnforced": { "alias": "strengthEnforced"; "required": false; }; "password": { "alias": "password"; "required": false; }; }, { "onRequirementsFulfilled": "onRequirementsFulfilled"; }, never, never, false, never>;
|
|
45
56
|
}
|
|
46
57
|
//# sourceMappingURL=password-check-list.component.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-check-list.component.d.ts","sourceRoot":"","sources":["../../../core/authentication/password-check-list.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"password-check-list.component.d.ts","sourceRoot":"","sources":["../../../core/authentication/password-check-list.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAiB,YAAY,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;;AAItD,qBAKa,0BAA2B,YAAW,MAAM;IA0D9C,YAAY,EAAE,YAAY;IACjC,OAAO,CAAC,uBAAuB;IAC/B,OAAO,CAAC,eAAe;IA1DzB,gBAAgB,UAAS;IAEzB,IACI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAI5B;IAED,uBAAuB,wBAA+B;IAEtD,cAAc,SAAK;IAEnB,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;SA6BvB;IAEF,cAAc;;;;;;QAQZ;IACF,iBAAiB,QAAM;gBAGd,YAAY,EAAE,YAAY,EACzB,uBAAuB,EAAE,eAAe,EACxC,eAAe,EAAE,eAAe;IAGpC,QAAQ;IAQd,IAAI,eAAe;;MAIlB;IAED,gBAAgB,CAAC,WAAW,KAAA,EAAE,QAAQ,KAAA;IAUtC,gBAAgB,CAAC,QAAQ,KAAA;IAWzB,eAAe;yCAlGJ,0BAA0B;2CAA1B,0BAA0B;CAsGtC"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { EventEmitter } from '@angular/core';
|
|
2
2
|
import { PasswordService } from './password.service';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated: [MTM-56403] Password strength indicator removed from UI in favor of the enhanced password strength check list.
|
|
6
|
+
*/
|
|
4
7
|
export declare class PasswordStrengthComponent {
|
|
5
8
|
private passwordStrengthCheckerService;
|
|
6
9
|
set password(password: string);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password-strength.component.d.ts","sourceRoot":"","sources":["../../../core/authentication/password-strength.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;;AAErD,qBAIa,yBAAyB;IAaxB,OAAO,CAAC,8BAA8B;IAZlD,IACI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAK5B;IAED,QAAQ,oBAAsB;IAE9B,KAAK,MAAC;gBAEc,8BAA8B,EAAE,eAAe;yCAbxD,yBAAyB;2CAAzB,yBAAyB;CAgBrC"}
|
|
1
|
+
{"version":3,"file":"password-strength.component.d.ts","sourceRoot":"","sources":["../../../core/authentication/password-strength.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAiB,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;;AAErD;;GAEG;AACH,qBAIa,yBAAyB;IAaxB,OAAO,CAAC,8BAA8B;IAZlD,IACI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAK5B;IAED,QAAQ,oBAAsB;IAE9B,KAAK,MAAC;gBAEc,8BAA8B,EAAE,eAAe;yCAbxD,yBAAyB;2CAAzB,yBAAyB;CAgBrC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filtering-form-renderer.component.d.ts","sourceRoot":"","sources":["../../../../core/data-grid/column/filtering-form-renderer.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EAEjB,QAAQ,EAER,SAAS,EAGV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAgC,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;;AAEpG,qBAKa,8BAA+B,YAAW,SAAS;
|
|
1
|
+
{"version":3,"file":"filtering-form-renderer.component.d.ts","sourceRoot":"","sources":["../../../../core/data-grid/column/filtering-form-renderer.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,iBAAiB,EAEjB,QAAQ,EAER,SAAS,EAGV,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAgC,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;;AAEpG,qBAKa,8BAA+B,YAAW,SAAS;IAY5D,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,EAAE;IAZZ,IAAI,EAAE,yBAAyB,CAAC;IAChC,IACI,KAAK,CAAC,IAAI,EAAE,yBAAyB,EAExC;IAED,YAAY,EAAE,UAAU,GAAG,WAAW,CAAC;IACvC,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,yBAAyB,SAAM;gBAGrB,QAAQ,EAAE,QAAQ,EAClB,EAAE,EAAE,iBAAiB;IAG/B,WAAW;yCAhBA,8BAA8B;2CAA9B,8BAA8B;CAsC1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"docs.service.d.ts","sourceRoot":"","sources":["../../../core/docs/docs.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"docs.service.d.ts","sourceRoot":"","sources":["../../../core/docs/docs.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAA+B,MAAM,eAAe,CAAC;AACrE,OAAO,EACL,oCAAoC,EAGrC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGzC,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;;AAEnD,qBAGa,WAAY,SAAQ,oCAAoC,CAAC,OAAO,CAAC;IAM1E,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,GAAG;IAEX,OAAO,CAAC,MAAM;IARhB;;OAEG;IACH,QAAQ,CAAC,qBAAqB,gCAAgC;gBAEpD,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,eAAe,EAC5B,YAAY,EAAE,QAAQ,EACd,MAAM,EAAE,MAAM,EACtB,OAAO,EAAE,qBAAqB;IAMhC,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAKxD;;;;;;OAMG;IACH,qBAAqB,CACnB,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAA;KAAuB,GACvD,MAAM;IAST,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,gBAAgB,CAAC,IAAI,KAAA;IAUrB,IAAI;IASJ,GAAG;IA8BH,SAAS,CAAC,oBAAoB,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;IASvD,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,eAAe;IAMvB;;;;;;;OAOG;IACH,OAAO,CAAC,0BAA0B;yCA7HvB,WAAW;6CAAX,WAAW;CAqIvB"}
|
|
@@ -34,7 +34,8 @@ export declare class ValidationPattern {
|
|
|
34
34
|
readonly opcuaBrowsePath: "Invalid OPC UA URI.";
|
|
35
35
|
readonly password: "Password must have at least 8 characters and no more than 32 and can only contain letters, numbers and following symbols: `~!@#$%^&*()_|+-=?;:'\",.<>{}[]\\/";
|
|
36
36
|
readonly passwordConfirm: "Passwords do not match.";
|
|
37
|
-
readonly passwordStrength: "Password not
|
|
37
|
+
readonly passwordStrength: "Password is not strong enough, use a stronger password.";
|
|
38
|
+
readonly passwordStrengthChecklist: "Password is not strong enough, use a stronger password. Check the requirements listed on the right.";
|
|
38
39
|
readonly required: "This field is required.";
|
|
39
40
|
readonly tenantId: string;
|
|
40
41
|
readonly urlSegment: "Slash, single or double dots and white space not allowed.";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation-pattern.d.ts","sourceRoot":"","sources":["../../../core/forms/validation-pattern.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,oBAAY,gCAAgC;IAC1C,WAAW,aAAa;IACxB,OAAO,YAAY;IACnB,qBAAqB,WAAW;IAChC,iBAAiB,sBAAsB;IACvC,sBAAsB,2BAA2B;IACjD,mBAAmB,wBAAwB;IAC3C,sBAAsB,2BAA2B;IACjD,mBAAmB,wBAAwB;IAC3C,gBAAgB,mBAAmB;IACnC,gBAAgB,mBAAmB;CACpC;AAGD,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CAAC,QAAQ
|
|
1
|
+
{"version":3,"file":"validation-pattern.d.ts","sourceRoot":"","sources":["../../../core/forms/validation-pattern.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,oBAAY,gCAAgC;IAC1C,WAAW,aAAa;IACxB,OAAO,YAAY;IACnB,qBAAqB,WAAW;IAChC,iBAAiB,sBAAsB;IACvC,sBAAsB,2BAA2B;IACjD,mBAAmB,wBAAwB;IAC3C,sBAAsB,2BAA2B;IACjD,mBAAmB,wBAAwB;IAC3C,gBAAgB,mBAAmB;IACnC,gBAAgB,mBAAmB;CACpC;AAGD,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,QAAQ,CAAC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6Db;IAEX,MAAM,CAAC,QAAQ,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA6CnB;IAEF,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM;CAIvB"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { OnInit, EventEmitter } from '@angular/core';
|
|
2
2
|
import { LoginService } from './login.service';
|
|
3
|
-
import { PasswordService } from '../authentication/password.service';
|
|
4
3
|
import { ICredentials, UserService } from '@c8y/client';
|
|
5
4
|
import { OptionsService } from '../common/options.service';
|
|
6
5
|
import { AlertService } from '../alert/alert.service';
|
|
@@ -8,7 +7,6 @@ import * as i0 from "@angular/core";
|
|
|
8
7
|
export declare class ChangePasswordComponent implements OnInit {
|
|
9
8
|
loginService: LoginService;
|
|
10
9
|
private users;
|
|
11
|
-
private passwordStrengthCheckerService;
|
|
12
10
|
private options;
|
|
13
11
|
private alert;
|
|
14
12
|
credentials: ICredentials;
|
|
@@ -25,7 +23,7 @@ export declare class ChangePasswordComponent implements OnInit {
|
|
|
25
23
|
passwordStrengthEnforced: boolean;
|
|
26
24
|
private TOKEN_PARAM;
|
|
27
25
|
private EMAIL_PARAM;
|
|
28
|
-
constructor(loginService: LoginService, users: UserService,
|
|
26
|
+
constructor(loginService: LoginService, users: UserService, options: OptionsService, alert: AlertService);
|
|
29
27
|
ngOnInit(): Promise<void>;
|
|
30
28
|
changePassword(): Promise<void>;
|
|
31
29
|
static ɵfac: i0.ɵɵFactoryDeclaration<ChangePasswordComponent, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"change-password.component.d.ts","sourceRoot":"","sources":["../../../core/login/change-password.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAiB,YAAY,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,
|
|
1
|
+
{"version":3,"file":"change-password.component.d.ts","sourceRoot":"","sources":["../../../core/login/change-password.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,MAAM,EAAiB,YAAY,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAkB,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;;AAGtD,qBAKa,uBAAwB,YAAW,MAAM;IAmB3C,YAAY,EAAE,YAAY;IACjC,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IArBN,WAAW,EAAE,YAAY,CAAC;IACzB,YAAY,oBAAsB;IAE5C,eAAe,SAA4D;IAC3E,SAAS,UAAS;IAClB,KAAK;;;;;MAKH;IACF,aAAa,UAAS;IACtB,wBAAwB,UAAS;IAEjC,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,WAAW,CAAW;gBAGrB,YAAY,EAAE,YAAY,EACzB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,YAAY;IAGvB,QAAQ;IAOR,cAAc;yCAhCT,uBAAuB;2CAAvB,uBAAuB;CA0DnC"}
|
|
@@ -37,7 +37,7 @@ export declare class LoginService {
|
|
|
37
37
|
automaticLoginInProgress$: BehaviorSubject<boolean>;
|
|
38
38
|
ERROR_MESSAGES: {
|
|
39
39
|
minlength: "Password must have at least 8 characters and no more than 32.";
|
|
40
|
-
password_missmatch: "
|
|
40
|
+
password_missmatch: "Passwords do not match.";
|
|
41
41
|
maxlength: "Password must have at least 8 characters and no more than 32.";
|
|
42
42
|
password_strength: "Your password is not strong enough. Please include numbers, lower and upper case characters";
|
|
43
43
|
remote_error: "Server error occurred.";
|
|
@@ -49,7 +49,7 @@ export declare class LoginService {
|
|
|
49
49
|
internationalPhoneNumber: "Must be a valid phone number (only digits, spaces, slashes (\"/\"), dashes (\"-\"), and plus (\"+\") allowed, for example: +49 9 876 543 210).";
|
|
50
50
|
phone_number_error: "Could not update phone number.";
|
|
51
51
|
pinAlreadySent: "The verification code was already sent. For a new verification code, please click on the link above.";
|
|
52
|
-
passwordConfirm: "
|
|
52
|
+
passwordConfirm: "Passwords do not match.";
|
|
53
53
|
tfaExpired: "Two-factor authentication token expired.";
|
|
54
54
|
};
|
|
55
55
|
private SUCCESS_MESSAGES;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-broker-subscriptions.service.d.ts","sourceRoot":"","sources":["../../data-broker/data-broker-subscriptions.service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,cAAc,EAEd,WAAW,EACX,gBAAgB,EAChB,yBAAyB,EAE1B,MAAM,aAAa,CAAC;AAIrB,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,EAC9B,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGL,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,wCAAwC,CAAC;;AAOhD,qBACa,8BAA8B;
|
|
1
|
+
{"version":3,"file":"data-broker-subscriptions.service.d.ts","sourceRoot":"","sources":["../../data-broker/data-broker-subscriptions.service.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,cAAc,EAEd,WAAW,EACX,gBAAgB,EAChB,yBAAyB,EAE1B,MAAM,aAAa,CAAC;AAIrB,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,EAC9B,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAGL,qBAAqB,EACrB,yBAAyB,EAC1B,MAAM,wCAAwC,CAAC;;AAOhD,qBACa,8BAA8B;IAiCvC,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,8BAA8B;IACtC,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,yBAAyB;IACjC,OAAO,CAAC,eAAe;IArCzB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA8B;IAC5D,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA4B;IACpE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAS;IACzD;;OAEG;IACH,OAAO,CAAC,kCAAkC,CAAqC;IAC/E;;OAEG;IACH,OAAO,CAAC,sCAAsC,CAAgC;IAE9E,OAAO,CAAC,0BAA0B,CAAmC;IAErE,OAAO,CAAC,kBAAkB,CAAC;IAE3B,OAAO,CAAC,sBAAsB,CAAmC;IAEjE,OAAO;;;MAGL;IAEF;;OAEG;IACH,yBAAyB,MAAC;gBAGhB,iBAAiB,EAAE,4BAA4B,EAC/C,8BAA8B,EAAE,8BAA8B,EAC9D,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,EACxB,yBAAyB,EAAE,yBAAyB,EACpD,eAAe,EAAE,eAAe;IAWpC,0BAA0B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAI7D;;OAEG;IACH,wBAAwB,CAAC,IAAI,KAAA,GAAG,MAAM;IAIhC,MAAM,CAAC,YAAY,EAAE,qBAAqB;IAe1C,SAAS,CACb,YAAY,EAAE,qBAAqB,EACnC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,qBAAqB,CAAC;IAYjC;;OAEG;IACG,8BAA8B,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAStE;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAIxD;;OAEG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM;IAI1B;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IASxD,SAAS,CAAC,EACR,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,UAAU,EACX;;;;;KAAA,GAAG,yBAAyB;IA2E7B,OAAO,CAAC,kDAAkD;IAe1D,OAAO,CAAC,+BAA+B;YAczB,kBAAkB;IAkBhC,OAAO,CAAC,kBAAkB;yCA/Pf,8BAA8B;6CAA9B,8BAA8B;CAkQ1C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"application-card.component.d.ts","sourceRoot":"","sources":["../../../ecosystem/shared/application-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAS,MAAM,EAAU,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EACL,YAAY,EACZ,gBAAgB,EAEhB,WAAW,EACX,cAAc,EAId,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAa,gBAAgB,EAAuB,MAAM,uBAAuB,CAAC;;AAEzF,qBAIa,wBAAyB,YAAW,MAAM;IA0CnD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,gBAAgB;IAhD1B,gBAAgB,SAAiB;IAExB,GAAG,EAAE,YAAY,CAAC;IAClB,OAAO,UAAQ;IACd,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,CAAsB;IACtD,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,CAAsB;IAC/D,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,mBAAmB,EAAE,gBAAgB,CAAC;IACtC,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,2BAA2B,EAAE,mBAAmB,EAAE,CAAC;IACnD,wBAAwB,EAAE,mBAAmB,CAAC;IAC9C,aAAa,EAAE,OAAO,CAAC;IACvB,yBAAyB,EAAE,OAAO,CAAC;IACnC,IAAI,eAAe,+CAIlB;IAED,QAAQ,CAAC,iBAAiB;;;;;;;;;;;;;MAAuB;IACjD,QAAQ,CAAC,YAAY,qBAAe;IACpC,QAAQ,CAAC,cAAc,0BAA4B;IACnD,QAAQ,CAAC,kBAAkB,yIAEzB;IACF,QAAQ,CAAC,kCAAkC,8CAEzC;gBAGQ,kBAAkB,EAAE,kBAAkB,EACtC,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,cAAc,EAC7B,gBAAgB,EAAE,gBAAgB;IAGtC,QAAQ;IAmBd,iBAAiB;
|
|
1
|
+
{"version":3,"file":"application-card.component.d.ts","sourceRoot":"","sources":["../../../ecosystem/shared/application-card.component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,YAAY,EAAS,MAAM,EAAU,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EACL,YAAY,EACZ,gBAAgB,EAEhB,WAAW,EACX,cAAc,EAId,kBAAkB,EACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAGvD,OAAO,EAAa,gBAAgB,EAAuB,MAAM,uBAAuB,CAAC;;AAEzF,qBAIa,wBAAyB,YAAW,MAAM;IA0CnD,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,gBAAgB;IAhD1B,gBAAgB,SAAiB;IAExB,GAAG,EAAE,YAAY,CAAC;IAClB,OAAO,UAAQ;IACd,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,CAAsB;IACtD,WAAW,EAAE,YAAY,CAAC,IAAI,CAAC,CAAsB;IAC/D,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,mBAAmB,EAAE,gBAAgB,CAAC;IACtC,WAAW,EAAE,WAAW,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,2BAA2B,EAAE,mBAAmB,EAAE,CAAC;IACnD,wBAAwB,EAAE,mBAAmB,CAAC;IAC9C,aAAa,EAAE,OAAO,CAAC;IACvB,yBAAyB,EAAE,OAAO,CAAC;IACnC,IAAI,eAAe,+CAIlB;IAED,QAAQ,CAAC,iBAAiB;;;;;;;;;;;;;MAAuB;IACjD,QAAQ,CAAC,YAAY,qBAAe;IACpC,QAAQ,CAAC,cAAc,0BAA4B;IACnD,QAAQ,CAAC,kBAAkB,yIAEzB;IACF,QAAQ,CAAC,kCAAkC,8CAEzC;gBAGQ,kBAAkB,EAAE,kBAAkB,EACtC,gBAAgB,EAAE,gBAAgB,EAClC,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,MAAM,EACd,kBAAkB,EAAE,kBAAkB,EACtC,KAAK,EAAE,YAAY,EACnB,aAAa,EAAE,cAAc,EAC7B,gBAAgB,EAAE,gBAAgB;IAGtC,QAAQ;IAmBd,iBAAiB;IAIjB,MAAM;IA4BN,OAAO;IAID,MAAM;IA2BN,KAAK;YA+BG,sBAAsB;yCArKzB,wBAAwB;2CAAxB,wBAAwB;CA4LpC"}
|
|
@@ -51,12 +51,12 @@ export class LoginSettingsComponent {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoginSettingsComponent, deps: [{ token: i1.TenantUiService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
54
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LoginSettingsComponent, selector: "c8y-login-settings", inputs: { authConfiguration: "authConfiguration" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"card-block separator-top overflow-auto\" *ngIf=\"authConfiguration\">\n <div class=\"col-sm-2\">\n <div class=\"h4 text-normal text-right text-left-xs\">{{ 'Login settings' | translate }}</div>\n </div>\n\n <div class=\"col-sm-9\">\n <div class=\"row m-b-8\">\n <c8y-form-group class=\"col-sm-6\">\n <label>\n {{ 'Preferred login mode' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ PREFERRED_LOGIN_MODE_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n [attr.aria-label]=\"'Auth type' | translate\"\n class=\"form-control\"\n id=\"preferredLoginOptionType\"\n name=\"preferredLoginOptionType\"\n [(ngModel)]=\"authConfiguration.preferredLoginOptionType\"\n >\n <option value=\"{{ tenantLoginOptionTypeEnum.BASIC }}\" translate>Basic Auth</option>\n <option value=\"{{ tenantLoginOptionTypeEnum.OAUTH2_INTERNAL }}\" translate>\n OAI-Secure\n </option>\n <option value=\"{{ tenantLoginOptionTypeEnum.OAUTH2 }}\" [disabled]=\"!isOauth2\" translate>\n Single sign-on redirect\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label title=\"{{ 'Password validity limit' | translate }}\">\n {{ 'Password validity limit' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ ENFORCED_BY_PLATFORM_POPOVER | translate }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n *ngIf=\"systemPasswordLimitValidity\"\n ></button>\n </label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n name=\"passwordLimitValidity\"\n class=\"form-control text-right\"\n [(ngModel)]=\"passwordLimitValidity\"\n min=\"0\"\n max=\"999999\"\n step=\"1\"\n required\n [disabled]=\"systemPasswordLimitValidity\"\n />\n <span class=\"input-group-addon\" translate>days</span>\n </div>\n <p class=\"help-block\">\n {{ 'Default: 0 (unlimited validity)' | translate }}\n </p>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label title=\"{{ 'Password strength' | translate }}\">\n {{ 'Password strength' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ ENFORCED_BY_PLATFORM_POPOVER | translate }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n *ngIf=\"systemPasswordEnforceStrength\"\n ></button>\n </label>\n <div>\n <label\n title=\"{{ 'Enforce that all passwords are strong
|
|
54
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: LoginSettingsComponent, selector: "c8y-login-settings", inputs: { authConfiguration: "authConfiguration" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"card-block separator-top overflow-auto\" *ngIf=\"authConfiguration\">\n <div class=\"col-sm-2\">\n <div class=\"h4 text-normal text-right text-left-xs\">{{ 'Login settings' | translate }}</div>\n </div>\n\n <div class=\"col-sm-9\">\n <div class=\"row m-b-8\">\n <c8y-form-group class=\"col-sm-6\">\n <label>\n {{ 'Preferred login mode' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ PREFERRED_LOGIN_MODE_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n [attr.aria-label]=\"'Auth type' | translate\"\n class=\"form-control\"\n id=\"preferredLoginOptionType\"\n name=\"preferredLoginOptionType\"\n [(ngModel)]=\"authConfiguration.preferredLoginOptionType\"\n >\n <option value=\"{{ tenantLoginOptionTypeEnum.BASIC }}\" translate>Basic Auth</option>\n <option value=\"{{ tenantLoginOptionTypeEnum.OAUTH2_INTERNAL }}\" translate>\n OAI-Secure\n </option>\n <option value=\"{{ tenantLoginOptionTypeEnum.OAUTH2 }}\" [disabled]=\"!isOauth2\" translate>\n Single sign-on redirect\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label title=\"{{ 'Password validity limit' | translate }}\">\n {{ 'Password validity limit' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ ENFORCED_BY_PLATFORM_POPOVER | translate }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n *ngIf=\"systemPasswordLimitValidity\"\n ></button>\n </label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n name=\"passwordLimitValidity\"\n class=\"form-control text-right\"\n [(ngModel)]=\"passwordLimitValidity\"\n min=\"0\"\n max=\"999999\"\n step=\"1\"\n required\n [disabled]=\"systemPasswordLimitValidity\"\n />\n <span class=\"input-group-addon\" translate>days</span>\n </div>\n <p class=\"help-block\">\n {{ 'Default: 0 (unlimited validity)' | translate }}\n </p>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label title=\"{{ 'Password strength' | translate }}\">\n {{ 'Password strength' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ ENFORCED_BY_PLATFORM_POPOVER | translate }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n *ngIf=\"systemPasswordEnforceStrength\"\n ></button>\n </label>\n <div>\n <label\n title=\"{{ 'Enforce that all passwords are strong' | translate }}\"\n class=\"c8y-switch\"\n >\n <input\n type=\"checkbox\"\n name=\"passwordEnforceStrength\"\n data-cy=\"c8y-form-group--password-enforce-toggle-btn\"\n [(ngModel)]=\"passwordEnforceStrength\"\n [disabled]=\"systemPasswordEnforceStrength\"\n />\n <span></span>\n <span>{{ 'Enforce strong passwords (green)' | translate }}</span>\n </label>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i1.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.MinValidationDirective, selector: "[min]", inputs: ["min"] }, { kind: "directive", type: i1.MaxValidationDirective, selector: "[max]", inputs: ["max"] }, { kind: "directive", type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i3.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: i3.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { kind: "directive", type: i3.MaxValidator, selector: "input[type=number][max][formControlName],input[type=number][max][formControl],input[type=number][max][ngModel]", inputs: ["max"] }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i1.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i1.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i4.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: i1.C8yTranslatePipe, name: "translate" }], viewProviders: [{ provide: ControlContainer, useExisting: NgForm }] }); }
|
|
55
55
|
}
|
|
56
56
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LoginSettingsComponent, decorators: [{
|
|
57
57
|
type: Component,
|
|
58
|
-
args: [{ selector: 'c8y-login-settings', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"card-block separator-top overflow-auto\" *ngIf=\"authConfiguration\">\n <div class=\"col-sm-2\">\n <div class=\"h4 text-normal text-right text-left-xs\">{{ 'Login settings' | translate }}</div>\n </div>\n\n <div class=\"col-sm-9\">\n <div class=\"row m-b-8\">\n <c8y-form-group class=\"col-sm-6\">\n <label>\n {{ 'Preferred login mode' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ PREFERRED_LOGIN_MODE_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n [attr.aria-label]=\"'Auth type' | translate\"\n class=\"form-control\"\n id=\"preferredLoginOptionType\"\n name=\"preferredLoginOptionType\"\n [(ngModel)]=\"authConfiguration.preferredLoginOptionType\"\n >\n <option value=\"{{ tenantLoginOptionTypeEnum.BASIC }}\" translate>Basic Auth</option>\n <option value=\"{{ tenantLoginOptionTypeEnum.OAUTH2_INTERNAL }}\" translate>\n OAI-Secure\n </option>\n <option value=\"{{ tenantLoginOptionTypeEnum.OAUTH2 }}\" [disabled]=\"!isOauth2\" translate>\n Single sign-on redirect\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label title=\"{{ 'Password validity limit' | translate }}\">\n {{ 'Password validity limit' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ ENFORCED_BY_PLATFORM_POPOVER | translate }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n *ngIf=\"systemPasswordLimitValidity\"\n ></button>\n </label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n name=\"passwordLimitValidity\"\n class=\"form-control text-right\"\n [(ngModel)]=\"passwordLimitValidity\"\n min=\"0\"\n max=\"999999\"\n step=\"1\"\n required\n [disabled]=\"systemPasswordLimitValidity\"\n />\n <span class=\"input-group-addon\" translate>days</span>\n </div>\n <p class=\"help-block\">\n {{ 'Default: 0 (unlimited validity)' | translate }}\n </p>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label title=\"{{ 'Password strength' | translate }}\">\n {{ 'Password strength' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ ENFORCED_BY_PLATFORM_POPOVER | translate }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n *ngIf=\"systemPasswordEnforceStrength\"\n ></button>\n </label>\n <div>\n <label\n title=\"{{ 'Enforce that all passwords are strong
|
|
58
|
+
args: [{ selector: 'c8y-login-settings', viewProviders: [{ provide: ControlContainer, useExisting: NgForm }], template: "<div class=\"card-block separator-top overflow-auto\" *ngIf=\"authConfiguration\">\n <div class=\"col-sm-2\">\n <div class=\"h4 text-normal text-right text-left-xs\">{{ 'Login settings' | translate }}</div>\n </div>\n\n <div class=\"col-sm-9\">\n <div class=\"row m-b-8\">\n <c8y-form-group class=\"col-sm-6\">\n <label>\n {{ 'Preferred login mode' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ PREFERRED_LOGIN_MODE_POPOVER | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n container=\"body\"\n ></button>\n </label>\n <div class=\"c8y-select-wrapper\">\n <select\n [attr.aria-label]=\"'Auth type' | translate\"\n class=\"form-control\"\n id=\"preferredLoginOptionType\"\n name=\"preferredLoginOptionType\"\n [(ngModel)]=\"authConfiguration.preferredLoginOptionType\"\n >\n <option value=\"{{ tenantLoginOptionTypeEnum.BASIC }}\" translate>Basic Auth</option>\n <option value=\"{{ tenantLoginOptionTypeEnum.OAUTH2_INTERNAL }}\" translate>\n OAI-Secure\n </option>\n <option value=\"{{ tenantLoginOptionTypeEnum.OAUTH2 }}\" [disabled]=\"!isOauth2\" translate>\n Single sign-on redirect\n </option>\n </select>\n </div>\n </c8y-form-group>\n </div>\n <div class=\"row\">\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label title=\"{{ 'Password validity limit' | translate }}\">\n {{ 'Password validity limit' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ ENFORCED_BY_PLATFORM_POPOVER | translate }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n *ngIf=\"systemPasswordLimitValidity\"\n ></button>\n </label>\n <div class=\"input-group\">\n <input\n type=\"number\"\n name=\"passwordLimitValidity\"\n class=\"form-control text-right\"\n [(ngModel)]=\"passwordLimitValidity\"\n min=\"0\"\n max=\"999999\"\n step=\"1\"\n required\n [disabled]=\"systemPasswordLimitValidity\"\n />\n <span class=\"input-group-addon\" translate>days</span>\n </div>\n <p class=\"help-block\">\n {{ 'Default: 0 (unlimited validity)' | translate }}\n </p>\n </c8y-form-group>\n </div>\n <div class=\"col-sm-6\">\n <c8y-form-group>\n <label title=\"{{ 'Password strength' | translate }}\">\n {{ 'Password strength' | translate }}\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ ENFORCED_BY_PLATFORM_POPOVER | translate }}\"\n placement=\"bottom\"\n triggers=\"focus\"\n *ngIf=\"systemPasswordEnforceStrength\"\n ></button>\n </label>\n <div>\n <label\n title=\"{{ 'Enforce that all passwords are strong' | translate }}\"\n class=\"c8y-switch\"\n >\n <input\n type=\"checkbox\"\n name=\"passwordEnforceStrength\"\n data-cy=\"c8y-form-group--password-enforce-toggle-btn\"\n [(ngModel)]=\"passwordEnforceStrength\"\n [disabled]=\"systemPasswordEnforceStrength\"\n />\n <span></span>\n <span>{{ 'Enforce strong passwords (green)' | translate }}</span>\n </label>\n </div>\n </c8y-form-group>\n </div>\n </div>\n </div>\n</div>\n" }]
|
|
59
59
|
}], ctorParameters: function () { return [{ type: i1.TenantUiService }]; }, propDecorators: { authConfiguration: [{
|
|
60
60
|
type: Input
|
|
61
61
|
}] } });
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4tc2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL2Jhc2ljLXNldHRpbmdzL2xvZ2luLXNldHRpbmdzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9iYXNpYy1zZXR0aW5ncy9sb2dpbi1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7QUFPcEQsTUFBTSxPQUFPLHNCQUFzQjtJQWlCakMsWUFBb0IsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBaEJwRCxpQ0FBNEIsR0FBRyxPQUFPLENBQ3BDLDBYQUEwWCxDQUMzWCxDQUFDO1FBQ0YsaUNBQTRCLEdBQUcsT0FBTyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFNekYsOEJBQXlCLEdBQUcscUJBQXFCLENBQUM7UUFFMUMsc0JBQWlCLEdBQUcsVUFBVSxDQUFDO1FBQy9CLHVCQUFrQixHQUFHLGdCQUFnQixDQUFDO1FBQ3RDLGlDQUE0QixHQUFHLG1CQUFtQixDQUFDO1FBQ25ELGlDQUE0QixHQUFHLGtCQUFrQixDQUFDO0lBRUgsQ0FBQztJQUV4RCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRTtZQUN2RSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3hFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUM5QixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsSUFBSSwyQkFBMkI7UUFDN0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQywyQkFBMkIsS0FBSyxJQUFJO1lBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCO1lBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCxJQUFJLHFCQUFxQixDQUFDLEtBQUs7UUFDN0IsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEtBQUssSUFBSSxFQUFFO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQy9GO0lBQ0gsQ0FBQztJQUVELElBQUksNkJBQTZCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FDakUsSUFBSSxDQUFDLDRCQUE0QixDQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksdUJBQXVCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLDZCQUE2QjtZQUN2QyxDQUFDLENBQUMsSUFBSSxDQUFDLDZCQUE2QjtZQUNwQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FDMUQsSUFBSSxDQUFDLDRCQUE0QixDQUNsQyxDQUFDO0lBQ1IsQ0FBQztJQUVELElBQUksdUJBQXVCLENBQUMsS0FBSztRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQzFELElBQUksQ0FBQyw0QkFBNEIsQ0FDbEMsR0FBRyxLQUFLLENBQUM7U0FDWDtJQUNILENBQUM7K0dBL0RVLHNCQUFzQjttR0FBdEIsc0JBQXNCLG1JQ1puQyxraUlBNEdBLGs4RkRsR2lCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzs0RkFFeEQsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG9CQUFvQixpQkFFZixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztzR0FTbkUsaUJBQWlCO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXV0aENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2F1dGgtY29uZmlndXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBUZW5hbnRVaVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRlbmFudExvZ2luT3B0aW9uVHlwZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWxvZ2luLXNldHRpbmdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcbiAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XVxufSlcbmV4cG9ydCBjbGFzcyBMb2dpblNldHRpbmdzQ29tcG9uZW50IHtcbiAgUFJFRkVSUkVEX0xPR0lOX01PREVfUE9QT1ZFUiA9IGdldHRleHQoXG4gICAgJ01haW4gZGlmZmVyZW5jZSBpcyB0aGUgc3RvcmFnZSBvZiB0aGUgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24uIFdpdGggQmFzaWMgQXV0aCwgaXQgaXMgc2F2ZWQgaW4gYSBzZXNzaW9uIHN0b3JhZ2UgYW5kIHdpdGggT0FJLVNlY3VyZSBpbiBhIEh0dHBPbmx5IGNvb2tpZS4gT0FJLVNlY3VyZSBncmFudCBpcyByZWNvbW1lbmRlZCBhcyB0aGUgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gaXMgbm90IGFjY2Vzc2libGUgdmlhIEphdmFTY3JpcHQuIFNpbmdsZSBzaWduLW9uIHJlZGlyZWN0IGFsbG93cyBhIHVzZXIgdG8gbG9naW4gd2l0aCBhIHNpbmdsZSAzcmQtcGFydHkgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgdXNpbmcgdGhlIE9BdXRoMiBwcm90b2NvbC4nXG4gICk7XG4gIEVORk9SQ0VEX0JZX1BMQVRGT1JNX1BPUE9WRVIgPSBnZXR0ZXh0KCdUaGUgc2V0dGluZyBpcyBlbmZvcmNlZCBvbiB0aGUgcGxhdGZvcm0gbGV2ZWwuJyk7XG5cbiAgQElucHV0KClcbiAgYXV0aENvbmZpZ3VyYXRpb246IEF1dGhDb25maWd1cmF0aW9uO1xuXG4gIGlzT2F1dGgyOiBib29sZWFuO1xuICB0ZW5hbnRMb2dpbk9wdGlvblR5cGVFbnVtID0gVGVuYW50TG9naW5PcHRpb25UeXBlO1xuXG4gIHByaXZhdGUgUEFTU1dPUkRfQ0FURUdPUlkgPSAncGFzc3dvcmQnO1xuICBwcml2YXRlIExJTUlUX1ZBTElESVRZX0tFWSA9ICdsaW1pdC52YWxpZGl0eSc7XG4gIHByaXZhdGUgVEVOQU5UX1NUUkVOR1RIX1ZBTElESVRZX0tFWSA9ICdzdHJlbmd0aC52YWxpZGl0eSc7XG4gIHByaXZhdGUgU1lTVEVNX1NUUkVOR1RIX1ZBTElESVRZX0tFWSA9ICdlbmZvcmNlLnN0cmVuZ3RoJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRlbmFudFVpU2VydmljZTogVGVuYW50VWlTZXJ2aWNlKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hdXRoQ29uZmlndXJhdGlvbiAmJiBjaGFuZ2VzLmF1dGhDb25maWd1cmF0aW9uLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5pc09hdXRoMiA9ICEhY2hhbmdlcy5hdXRoQ29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWUubG9naW5PcHRpb25zLmZpbmQoXG4gICAgICAgIHRoaXMudGVuYW50VWlTZXJ2aWNlLmlzT2F1dGgyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzeXN0ZW1QYXNzd29yZExpbWl0VmFsaWRpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aENvbmZpZ3VyYXRpb24uc3lzdGVtT3B0aW9uc1t0aGlzLlBBU1NXT1JEX0NBVEVHT1JZXVt0aGlzLkxJTUlUX1ZBTElESVRZX0tFWV07XG4gIH1cblxuICBnZXQgcGFzc3dvcmRMaW1pdFZhbGlkaXR5KCkge1xuICAgIHJldHVybiB0aGlzLnN5c3RlbVBhc3N3b3JkTGltaXRWYWxpZGl0eSAhPT0gbnVsbFxuICAgICAgPyB0aGlzLnN5c3RlbVBhc3N3b3JkTGltaXRWYWxpZGl0eVxuICAgICAgOiB0aGlzLmF1dGhDb25maWd1cmF0aW9uLnRlbmFudE9wdGlvbnNbdGhpcy5QQVNTV09SRF9DQVRFR09SWV1bdGhpcy5MSU1JVF9WQUxJRElUWV9LRVldO1xuICB9XG5cbiAgc2V0IHBhc3N3b3JkTGltaXRWYWxpZGl0eSh2YWx1ZSkge1xuICAgIGlmICh0aGlzLnN5c3RlbVBhc3N3b3JkTGltaXRWYWxpZGl0eSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5hdXRoQ29uZmlndXJhdGlvbi50ZW5hbnRPcHRpb25zW3RoaXMuUEFTU1dPUkRfQ0FURUdPUlldW3RoaXMuTElNSVRfVkFMSURJVFlfS0VZXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzeXN0ZW1QYXNzd29yZEVuZm9yY2VTdHJlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoQ29uZmlndXJhdGlvbi5zeXN0ZW1PcHRpb25zW3RoaXMuUEFTU1dPUkRfQ0FURUdPUlldW1xuICAgICAgdGhpcy5TWVNURU1fU1RSRU5HVEhfVkFMSURJVFlfS0VZXG4gICAgXTtcbiAgfVxuXG4gIGdldCBwYXNzd29yZEVuZm9yY2VTdHJlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5zeXN0ZW1QYXNzd29yZEVuZm9yY2VTdHJlbmd0aFxuICAgICAgPyB0aGlzLnN5c3RlbVBhc3N3b3JkRW5mb3JjZVN0cmVuZ3RoXG4gICAgICA6IHRoaXMuYXV0aENvbmZpZ3VyYXRpb24udGVuYW50T3B0aW9uc1t0aGlzLlBBU1NXT1JEX0NBVEVHT1JZXVtcbiAgICAgICAgICB0aGlzLlRFTkFOVF9TVFJFTkdUSF9WQUxJRElUWV9LRVlcbiAgICAgICAgXTtcbiAgfVxuXG4gIHNldCBwYXNzd29yZEVuZm9yY2VTdHJlbmd0aCh2YWx1ZSkge1xuICAgIGlmICghdGhpcy5zeXN0ZW1QYXNzd29yZEVuZm9yY2VTdHJlbmd0aCkge1xuICAgICAgdGhpcy5hdXRoQ29uZmlndXJhdGlvbi50ZW5hbnRPcHRpb25zW3RoaXMuUEFTU1dPUkRfQ0FURUdPUlldW1xuICAgICAgICB0aGlzLlRFTkFOVF9TVFJFTkdUSF9WQUxJRElUWV9LRVlcbiAgICAgIF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHNlcGFyYXRvci10b3Agb3ZlcmZsb3ctYXV0b1wiICpuZ0lmPVwiYXV0aENvbmZpZ3VyYXRpb25cIj5cbiAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImg0IHRleHQtbm9ybWFsIHRleHQtcmlnaHQgdGV4dC1sZWZ0LXhzXCI+e3sgJ0xvZ2luIHNldHRpbmdzJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IG0tYi04XCI+XG4gICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICA8bGFiZWw+XG4gICAgICAgICAge3sgJ1ByZWZlcnJlZCBsb2dpbiBtb2RlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgcG9wb3Zlcj1cInt7IFBSRUZFUlJFRF9MT0dJTl9NT0RFX1BPUE9WRVIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBdXRoIHR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGlkPVwicHJlZmVycmVkTG9naW5PcHRpb25UeXBlXCJcbiAgICAgICAgICAgIG5hbWU9XCJwcmVmZXJyZWRMb2dpbk9wdGlvblR5cGVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhdXRoQ29uZmlndXJhdGlvbi5wcmVmZXJyZWRMb2dpbk9wdGlvblR5cGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ7eyB0ZW5hbnRMb2dpbk9wdGlvblR5cGVFbnVtLkJBU0lDIH19XCIgdHJhbnNsYXRlPkJhc2ljIEF1dGg8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ7eyB0ZW5hbnRMb2dpbk9wdGlvblR5cGVFbnVtLk9BVVRIMl9JTlRFUk5BTCB9fVwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgT0FJLVNlY3VyZVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwie3sgdGVuYW50TG9naW5PcHRpb25UeXBlRW51bS5PQVVUSDIgfX1cIiBbZGlzYWJsZWRdPVwiIWlzT2F1dGgyXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBTaW5nbGUgc2lnbi1vbiByZWRpcmVjdFxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDxsYWJlbCB0aXRsZT1cInt7ICdQYXNzd29yZCB2YWxpZGl0eSBsaW1pdCcgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgIHt7ICdQYXNzd29yZCB2YWxpZGl0eSBsaW1pdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscCBidG4taGVscC0tc21cIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwb3BvdmVyPVwie3sgRU5GT1JDRURfQllfUExBVEZPUk1fUE9QT1ZFUiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICAqbmdJZj1cInN5c3RlbVBhc3N3b3JkTGltaXRWYWxpZGl0eVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgbmFtZT1cInBhc3N3b3JkTGltaXRWYWxpZGl0eVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtcmlnaHRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3N3b3JkTGltaXRWYWxpZGl0eVwiXG4gICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICBtYXg9XCI5OTk5OTlcIlxuICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzeXN0ZW1QYXNzd29yZExpbWl0VmFsaWRpdHlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIiB0cmFuc2xhdGU+ZGF5czwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cCBjbGFzcz1cImhlbHAtYmxvY2tcIj5cbiAgICAgICAgICAgIHt7ICdEZWZhdWx0OiAwICh1bmxpbWl0ZWQgdmFsaWRpdHkpJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgdGl0bGU9XCJ7eyAnUGFzc3dvcmQgc3RyZW5ndGgnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICB7eyAnUGFzc3dvcmQgc3RyZW5ndGgnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgcG9wb3Zlcj1cInt7IEVORk9SQ0VEX0JZX1BMQVRGT1JNX1BPUE9WRVIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzeXN0ZW1QYXNzd29yZEVuZm9yY2VTdHJlbmd0aFwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0VuZm9yY2UgdGhhdCBhbGwgcGFzc3dvcmRzIGFyZSBzdHJvbmcgKGdyZWVuKScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICBjbGFzcz1cImM4eS1zd2l0Y2hcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIG5hbWU9XCJwYXNzd29yZEVuZm9yY2VTdHJlbmd0aFwiXG4gICAgICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1mb3JtLWdyb3VwLS1wYXNzd29yZC1lbmZvcmNlLXRvZ2dsZS1idG5cIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicGFzc3dvcmRFbmZvcmNlU3RyZW5ndGhcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzeXN0ZW1QYXNzd29yZEVuZm9yY2VTdHJlbmd0aFwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4+e3sgJ0VuZm9yY2Ugc3Ryb25nIHBhc3N3b3JkcyAoZ3JlZW4pJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4tc2V0dGluZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXV0aC1jb25maWd1cmF0aW9uL2Jhc2ljLXNldHRpbmdzL2xvZ2luLXNldHRpbmdzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL2F1dGgtY29uZmlndXJhdGlvbi9iYXNpYy1zZXR0aW5ncy9sb2dpbi1zZXR0aW5ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7QUFPcEQsTUFBTSxPQUFPLHNCQUFzQjtJQWlCakMsWUFBb0IsZUFBZ0M7UUFBaEMsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBaEJwRCxpQ0FBNEIsR0FBRyxPQUFPLENBQ3BDLDBYQUEwWCxDQUMzWCxDQUFDO1FBQ0YsaUNBQTRCLEdBQUcsT0FBTyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7UUFNekYsOEJBQXlCLEdBQUcscUJBQXFCLENBQUM7UUFFMUMsc0JBQWlCLEdBQUcsVUFBVSxDQUFDO1FBQy9CLHVCQUFrQixHQUFHLGdCQUFnQixDQUFDO1FBQ3RDLGlDQUE0QixHQUFHLG1CQUFtQixDQUFDO1FBQ25ELGlDQUE0QixHQUFHLGtCQUFrQixDQUFDO0lBRUgsQ0FBQztJQUV4RCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsaUJBQWlCLElBQUksT0FBTyxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFBRTtZQUN2RSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQ3hFLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUM5QixDQUFDO1NBQ0g7SUFDSCxDQUFDO0lBRUQsSUFBSSwyQkFBMkI7UUFDN0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQywyQkFBMkIsS0FBSyxJQUFJO1lBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCO1lBQ2xDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzVGLENBQUM7SUFFRCxJQUFJLHFCQUFxQixDQUFDLEtBQUs7UUFDN0IsSUFBSSxJQUFJLENBQUMsMkJBQTJCLEtBQUssSUFBSSxFQUFFO1lBQzdDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsS0FBSyxDQUFDO1NBQy9GO0lBQ0gsQ0FBQztJQUVELElBQUksNkJBQTZCO1FBQy9CLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FDakUsSUFBSSxDQUFDLDRCQUE0QixDQUNsQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksdUJBQXVCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLDZCQUE2QjtZQUN2QyxDQUFDLENBQUMsSUFBSSxDQUFDLDZCQUE2QjtZQUNwQyxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FDMUQsSUFBSSxDQUFDLDRCQUE0QixDQUNsQyxDQUFDO0lBQ1IsQ0FBQztJQUVELElBQUksdUJBQXVCLENBQUMsS0FBSztRQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLDZCQUE2QixFQUFFO1lBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQzFELElBQUksQ0FBQyw0QkFBNEIsQ0FDbEMsR0FBRyxLQUFLLENBQUM7U0FDWDtJQUNILENBQUM7K0dBL0RVLHNCQUFzQjttR0FBdEIsc0JBQXNCLG1JQ1puQywwaElBNEdBLGs4RkRsR2lCLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxDQUFDOzs0RkFFeEQsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNFLG9CQUFvQixpQkFFZixDQUFDLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsQ0FBQztzR0FTbkUsaUJBQWlCO3NCQURoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQ29udHJvbENvbnRhaW5lciwgTmdGb3JtIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQXV0aENvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2F1dGgtY29uZmlndXJhdGlvbi5tb2RlbCc7XG5pbXBvcnQgeyBUZW5hbnRVaVNlcnZpY2UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IFRlbmFudExvZ2luT3B0aW9uVHlwZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWxvZ2luLXNldHRpbmdzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvZ2luLXNldHRpbmdzLmNvbXBvbmVudC5odG1sJyxcbiAgdmlld1Byb3ZpZGVyczogW3sgcHJvdmlkZTogQ29udHJvbENvbnRhaW5lciwgdXNlRXhpc3Rpbmc6IE5nRm9ybSB9XVxufSlcbmV4cG9ydCBjbGFzcyBMb2dpblNldHRpbmdzQ29tcG9uZW50IHtcbiAgUFJFRkVSUkVEX0xPR0lOX01PREVfUE9QT1ZFUiA9IGdldHRleHQoXG4gICAgJ01haW4gZGlmZmVyZW5jZSBpcyB0aGUgc3RvcmFnZSBvZiB0aGUgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24uIFdpdGggQmFzaWMgQXV0aCwgaXQgaXMgc2F2ZWQgaW4gYSBzZXNzaW9uIHN0b3JhZ2UgYW5kIHdpdGggT0FJLVNlY3VyZSBpbiBhIEh0dHBPbmx5IGNvb2tpZS4gT0FJLVNlY3VyZSBncmFudCBpcyByZWNvbW1lbmRlZCBhcyB0aGUgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gaXMgbm90IGFjY2Vzc2libGUgdmlhIEphdmFTY3JpcHQuIFNpbmdsZSBzaWduLW9uIHJlZGlyZWN0IGFsbG93cyBhIHVzZXIgdG8gbG9naW4gd2l0aCBhIHNpbmdsZSAzcmQtcGFydHkgYXV0aG9yaXphdGlvbiBzZXJ2ZXIgdXNpbmcgdGhlIE9BdXRoMiBwcm90b2NvbC4nXG4gICk7XG4gIEVORk9SQ0VEX0JZX1BMQVRGT1JNX1BPUE9WRVIgPSBnZXR0ZXh0KCdUaGUgc2V0dGluZyBpcyBlbmZvcmNlZCBvbiB0aGUgcGxhdGZvcm0gbGV2ZWwuJyk7XG5cbiAgQElucHV0KClcbiAgYXV0aENvbmZpZ3VyYXRpb246IEF1dGhDb25maWd1cmF0aW9uO1xuXG4gIGlzT2F1dGgyOiBib29sZWFuO1xuICB0ZW5hbnRMb2dpbk9wdGlvblR5cGVFbnVtID0gVGVuYW50TG9naW5PcHRpb25UeXBlO1xuXG4gIHByaXZhdGUgUEFTU1dPUkRfQ0FURUdPUlkgPSAncGFzc3dvcmQnO1xuICBwcml2YXRlIExJTUlUX1ZBTElESVRZX0tFWSA9ICdsaW1pdC52YWxpZGl0eSc7XG4gIHByaXZhdGUgVEVOQU5UX1NUUkVOR1RIX1ZBTElESVRZX0tFWSA9ICdzdHJlbmd0aC52YWxpZGl0eSc7XG4gIHByaXZhdGUgU1lTVEVNX1NUUkVOR1RIX1ZBTElESVRZX0tFWSA9ICdlbmZvcmNlLnN0cmVuZ3RoJztcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRlbmFudFVpU2VydmljZTogVGVuYW50VWlTZXJ2aWNlKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hdXRoQ29uZmlndXJhdGlvbiAmJiBjaGFuZ2VzLmF1dGhDb25maWd1cmF0aW9uLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5pc09hdXRoMiA9ICEhY2hhbmdlcy5hdXRoQ29uZmlndXJhdGlvbi5jdXJyZW50VmFsdWUubG9naW5PcHRpb25zLmZpbmQoXG4gICAgICAgIHRoaXMudGVuYW50VWlTZXJ2aWNlLmlzT2F1dGgyXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzeXN0ZW1QYXNzd29yZExpbWl0VmFsaWRpdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXV0aENvbmZpZ3VyYXRpb24uc3lzdGVtT3B0aW9uc1t0aGlzLlBBU1NXT1JEX0NBVEVHT1JZXVt0aGlzLkxJTUlUX1ZBTElESVRZX0tFWV07XG4gIH1cblxuICBnZXQgcGFzc3dvcmRMaW1pdFZhbGlkaXR5KCkge1xuICAgIHJldHVybiB0aGlzLnN5c3RlbVBhc3N3b3JkTGltaXRWYWxpZGl0eSAhPT0gbnVsbFxuICAgICAgPyB0aGlzLnN5c3RlbVBhc3N3b3JkTGltaXRWYWxpZGl0eVxuICAgICAgOiB0aGlzLmF1dGhDb25maWd1cmF0aW9uLnRlbmFudE9wdGlvbnNbdGhpcy5QQVNTV09SRF9DQVRFR09SWV1bdGhpcy5MSU1JVF9WQUxJRElUWV9LRVldO1xuICB9XG5cbiAgc2V0IHBhc3N3b3JkTGltaXRWYWxpZGl0eSh2YWx1ZSkge1xuICAgIGlmICh0aGlzLnN5c3RlbVBhc3N3b3JkTGltaXRWYWxpZGl0eSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5hdXRoQ29uZmlndXJhdGlvbi50ZW5hbnRPcHRpb25zW3RoaXMuUEFTU1dPUkRfQ0FURUdPUlldW3RoaXMuTElNSVRfVkFMSURJVFlfS0VZXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzeXN0ZW1QYXNzd29yZEVuZm9yY2VTdHJlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5hdXRoQ29uZmlndXJhdGlvbi5zeXN0ZW1PcHRpb25zW3RoaXMuUEFTU1dPUkRfQ0FURUdPUlldW1xuICAgICAgdGhpcy5TWVNURU1fU1RSRU5HVEhfVkFMSURJVFlfS0VZXG4gICAgXTtcbiAgfVxuXG4gIGdldCBwYXNzd29yZEVuZm9yY2VTdHJlbmd0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5zeXN0ZW1QYXNzd29yZEVuZm9yY2VTdHJlbmd0aFxuICAgICAgPyB0aGlzLnN5c3RlbVBhc3N3b3JkRW5mb3JjZVN0cmVuZ3RoXG4gICAgICA6IHRoaXMuYXV0aENvbmZpZ3VyYXRpb24udGVuYW50T3B0aW9uc1t0aGlzLlBBU1NXT1JEX0NBVEVHT1JZXVtcbiAgICAgICAgICB0aGlzLlRFTkFOVF9TVFJFTkdUSF9WQUxJRElUWV9LRVlcbiAgICAgICAgXTtcbiAgfVxuXG4gIHNldCBwYXNzd29yZEVuZm9yY2VTdHJlbmd0aCh2YWx1ZSkge1xuICAgIGlmICghdGhpcy5zeXN0ZW1QYXNzd29yZEVuZm9yY2VTdHJlbmd0aCkge1xuICAgICAgdGhpcy5hdXRoQ29uZmlndXJhdGlvbi50ZW5hbnRPcHRpb25zW3RoaXMuUEFTU1dPUkRfQ0FURUdPUlldW1xuICAgICAgICB0aGlzLlRFTkFOVF9TVFJFTkdUSF9WQUxJRElUWV9LRVlcbiAgICAgIF0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjYXJkLWJsb2NrIHNlcGFyYXRvci10b3Agb3ZlcmZsb3ctYXV0b1wiICpuZ0lmPVwiYXV0aENvbmZpZ3VyYXRpb25cIj5cbiAgPGRpdiBjbGFzcz1cImNvbC1zbS0yXCI+XG4gICAgPGRpdiBjbGFzcz1cImg0IHRleHQtbm9ybWFsIHRleHQtcmlnaHQgdGV4dC1sZWZ0LXhzXCI+e3sgJ0xvZ2luIHNldHRpbmdzJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY29sLXNtLTlcIj5cbiAgICA8ZGl2IGNsYXNzPVwicm93IG0tYi04XCI+XG4gICAgICA8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJjb2wtc20tNlwiPlxuICAgICAgICA8bGFiZWw+XG4gICAgICAgICAge3sgJ1ByZWZlcnJlZCBsb2dpbiBtb2RlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgcG9wb3Zlcj1cInt7IFBSRUZFUlJFRF9MT0dJTl9NT0RFX1BPUE9WRVIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjOHktc2VsZWN0LXdyYXBwZXJcIj5cbiAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBdXRoIHR5cGUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcbiAgICAgICAgICAgIGlkPVwicHJlZmVycmVkTG9naW5PcHRpb25UeXBlXCJcbiAgICAgICAgICAgIG5hbWU9XCJwcmVmZXJyZWRMb2dpbk9wdGlvblR5cGVcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhdXRoQ29uZmlndXJhdGlvbi5wcmVmZXJyZWRMb2dpbk9wdGlvblR5cGVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ7eyB0ZW5hbnRMb2dpbk9wdGlvblR5cGVFbnVtLkJBU0lDIH19XCIgdHJhbnNsYXRlPkJhc2ljIEF1dGg8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJ7eyB0ZW5hbnRMb2dpbk9wdGlvblR5cGVFbnVtLk9BVVRIMl9JTlRFUk5BTCB9fVwiIHRyYW5zbGF0ZT5cbiAgICAgICAgICAgICAgT0FJLVNlY3VyZVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwie3sgdGVuYW50TG9naW5PcHRpb25UeXBlRW51bS5PQVVUSDIgfX1cIiBbZGlzYWJsZWRdPVwiIWlzT2F1dGgyXCIgdHJhbnNsYXRlPlxuICAgICAgICAgICAgICBTaW5nbGUgc2lnbi1vbiByZWRpcmVjdFxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLXNtLTZcIj5cbiAgICAgICAgPGM4eS1mb3JtLWdyb3VwPlxuICAgICAgICAgIDxsYWJlbCB0aXRsZT1cInt7ICdQYXNzd29yZCB2YWxpZGl0eSBsaW1pdCcgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgIHt7ICdQYXNzd29yZCB2YWxpZGl0eSBsaW1pdCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4taGVscCBidG4taGVscC0tc21cIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBwb3BvdmVyPVwie3sgRU5GT1JDRURfQllfUExBVEZPUk1fUE9QT1ZFUiB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbVwiXG4gICAgICAgICAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgICAgICAgICAqbmdJZj1cInN5c3RlbVBhc3N3b3JkTGltaXRWYWxpZGl0eVwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgbmFtZT1cInBhc3N3b3JkTGltaXRWYWxpZGl0eVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIHRleHQtcmlnaHRcIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3N3b3JkTGltaXRWYWxpZGl0eVwiXG4gICAgICAgICAgICAgIG1pbj1cIjBcIlxuICAgICAgICAgICAgICBtYXg9XCI5OTk5OTlcIlxuICAgICAgICAgICAgICBzdGVwPVwiMVwiXG4gICAgICAgICAgICAgIHJlcXVpcmVkXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzeXN0ZW1QYXNzd29yZExpbWl0VmFsaWRpdHlcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW5wdXQtZ3JvdXAtYWRkb25cIiB0cmFuc2xhdGU+ZGF5czwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8cCBjbGFzcz1cImhlbHAtYmxvY2tcIj5cbiAgICAgICAgICAgIHt7ICdEZWZhdWx0OiAwICh1bmxpbWl0ZWQgdmFsaWRpdHkpJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvcD5cbiAgICAgICAgPC9jOHktZm9ybS1ncm91cD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1zbS02XCI+XG4gICAgICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgICAgICA8bGFiZWwgdGl0bGU9XCJ7eyAnUGFzc3dvcmQgc3RyZW5ndGgnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICB7eyAnUGFzc3dvcmQgc3RyZW5ndGgnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0hlbHAnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgcG9wb3Zlcj1cInt7IEVORk9SQ0VEX0JZX1BMQVRGT1JNX1BPUE9WRVIgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxuICAgICAgICAgICAgICB0cmlnZ2Vycz1cImZvY3VzXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJzeXN0ZW1QYXNzd29yZEVuZm9yY2VTdHJlbmd0aFwiXG4gICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGxhYmVsXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0VuZm9yY2UgdGhhdCBhbGwgcGFzc3dvcmRzIGFyZSBzdHJvbmcnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjOHktc3dpdGNoXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICBuYW1lPVwicGFzc3dvcmRFbmZvcmNlU3RyZW5ndGhcIlxuICAgICAgICAgICAgICAgIGRhdGEtY3k9XCJjOHktZm9ybS1ncm91cC0tcGFzc3dvcmQtZW5mb3JjZS10b2dnbGUtYnRuXCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3N3b3JkRW5mb3JjZVN0cmVuZ3RoXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic3lzdGVtUGFzc3dvcmRFbmZvcmNlU3RyZW5ndGhcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgICAgIDxzcGFuPnt7ICdFbmZvcmNlIHN0cm9uZyBwYXNzd29yZHMgKGdyZWVuKScgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|