@idea-ionic/auth 7.2.5 → 7.2.8

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.
@@ -1,7 +1,7 @@
1
- import { Component } from '@angular/core';
1
+ import { Component, inject } from '@angular/core';
2
2
  import { Browser } from '@capacitor/browser';
3
+ import { IDEAEnvironment } from '@idea-ionic/common';
3
4
  import { LoginOutcomeActions } from './auth.service';
4
- import { environment as env } from '@env/environment';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@ionic/angular";
7
7
  import * as i2 from "@idea-ionic/common";
@@ -15,13 +15,14 @@ export class IDEASignInPage {
15
15
  this.loading = loading;
16
16
  this.t = t;
17
17
  this.auth = auth;
18
- this.title = env.idea.app.title;
19
- this.registrationPossible = env.idea.auth.registrationIsPossible;
20
- this.hasIntroPage = env.idea.app.hasIntroPage;
21
- this.website = env.idea.website;
18
+ this.env = inject(IDEAEnvironment);
22
19
  this.agreementsCheck = true;
23
20
  this.newAccountRegistered = false;
24
21
  this.darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
22
+ this.title = this.env.idea.auth.title;
23
+ this.registrationPossible = this.env.idea.auth.registrationIsPossible;
24
+ this.hasIntroPage = this.env.idea.auth.hasIntroPage;
25
+ this.website = this.env.idea.auth.website;
25
26
  }
26
27
  ionViewDidEnter() {
27
28
  // manage the scenario in which we just created a new account (show a explanatory message: email must be confirmed)
@@ -79,4 +80,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
79
80
  type: Component,
80
81
  args: [{ selector: 'idea-sign-in', template: "<ion-content>\n <ion-card color=\"warning\" *ngIf=\"newAccountRegistered\">\n <ion-card-content>{{ 'IDEA_AUTH.CONFIRM_YOUR_EMAIL_TO_LOGIN' | translate }}</ion-card-content>\n </ion-card>\n <form class=\"flexBox\">\n <div>\n <ion-card class=\"authCard\">\n <ion-img\n [title]=\"'IDEA_AUTH.SERVICE_LOGO' | translate\"\n [src]=\"darkMode ? 'assets/icons/icon-auth-alt.svg' : 'assets/icons/icon-auth.svg'\"\n ></ion-img>\n <ion-card-header>\n <ion-card-title color=\"primary\" *ngIf=\"title\">{{ title }}</ion-card-title>\n <ion-card-subtitle *ngIf=\"translationExists('IDEA_VARIABLES.TAGLINE')\">\n {{ 'IDEA_VARIABLES.TAGLINE' | translate }}\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\"><b>{{ 'IDEA_AUTH.WARNING' | translate }}.</b> {{ errorMsg }}</p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"email\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"login()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n id=\"current-password\"\n type=\"password\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"current-password\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.PASSWORD_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"password\"\n (keyup.enter)=\"login()\"\n ></ion-input>\n </ion-item>\n <ion-row\n class=\"agreementsAcceptanceRow\"\n *ngIf=\"\n !registrationPossible &&\n (translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL'))\n \"\n >\n <ion-col>\n <ion-checkbox\n size=\"small\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"agreementsCheck\"\n ></ion-checkbox>\n {{ 'IDEA_AUTH.AGREEMENTS_CHECK_LOGIN' | translate }}:\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\"\n [title]=\"'IDEA_AUTH.TERMS_AND_CONDITIONS_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL' | translate\"\n >\n {{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}\n </a>\n <ion-text\n *ngIf=\"\n translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL') && translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\n \"\n >\n &\n </ion-text>\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n [title]=\"'IDEA_AUTH.PRIVACY_POLICY_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.PRIVACY_POLICY_URL' | translate\"\n >\n {{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}\n </a>\n </ion-col>\n </ion-row>\n <ion-button\n expand=\"block\"\n [disabled]=\"!agreementsCheck\"\n [title]=\"'IDEA_AUTH.SIGN_IN_HINT' | translate\"\n (click)=\"login()\"\n >\n {{ 'IDEA_AUTH.SIGN_IN' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n *ngIf=\"registrationPossible\"\n [title]=\"'IDEA_AUTH.CREATE_AN_ACCOUNT_HINT' | translate\"\n (click)=\"goToRegistration()\"\n >\n {{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.I_FORGOT_MY_PASSWORD_HINT' | translate\"\n (click)=\"goToForgotPassword()\"\n >\n {{ 'IDEA_AUTH.I_FORGOT_MY_PASSWORD' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n color=\"medium\"\n class=\"smallCaseButton\"\n *ngIf=\"hasIntroPage\"\n [title]=\"'IDEA_AUTH.BACK_TO_INTRO_HINT' | translate\"\n (click)=\"goToIntro()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_INTRO' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n <ion-img\n class=\"ideaLogo\"\n *ngIf=\"website\"\n [src]=\"darkMode ? './assets/icons/idea-alt.png' : './assets/icons/idea.png'\"\n [title]=\"'IDEA_AUTH.IDEA_TAGLINE' | translate\"\n (click)=\"openLink(website)\"\n ></ion-img>\n </div>\n </form>\n</ion-content>\n", styles: [".flexBox{background:var(--idea-auth-background-color, var(--ion-color-white-shade))}.authCard{min-width:400px;max-width:550px;margin:0 10px;padding:20px;background-color:var(--idea-auth-card-background-color, var(--ion-color-white));border:1px solid var(--idea-auth-card-border-color, var(--ion-color-light));border-radius:10px;box-shadow:none;text-align:center}.authCard ion-img{width:150px;display:block;margin:0 auto}.authCard ion-card-title{font-family:auth-title;font-size:3em}.authCard ion-card-subtitle{font-family:auth-title;font-size:1.2em}.authCard ion-card-content{padding-top:16px}.authCard ion-card-content .errorBox{padding-left:10px;margin-bottom:20px;text-align:left;border-left:2px solid var(--ion-color-danger)}.authCard ion-card-content ion-item{--ion-item-background: var(--idea-auth-card-background-color, var(--ion-color-white));--border-color: var(--idea-auth-card-border-color, var(--ion-color-light))}.authCard ion-card-content ion-label[position=inline] ion-icon{padding-top:4px;padding-right:5px;font-size:1.3em}.authCard ion-card-content .agreementsAcceptanceRow{margin-top:15px;font-size:.9em}.authCard ion-card-content .agreementsAcceptanceRow ion-checkbox{vertical-align:bottom;margin-right:3px}.authCard ion-card-content ion-button:not([slot=end]){margin-top:15px}.authCard ion-card-content .smallCaseButton{text-transform:none;letter-spacing:normal;font-size:1em}@media only screen and (max-width: 500px){.authCard{background-color:transparent;border:none}}.ideaLogo{width:65px;margin:40px auto 0;cursor:pointer}.passwordPolicyPopover{--width: 350px}\n"] }]
81
82
  }], ctorParameters: () => [{ type: i1.NavController }, { type: i2.IDEAMessageService }, { type: i2.IDEALoadingService }, { type: i2.IDEATranslationsService }, { type: i3.IDEAAuthService }] });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbkluLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2F1dGgvc3JjL3NpZ25Jbi5wYWdlLnRzIiwiLi4vLi4vLi4vLi4vbW9kdWxlcy9hdXRoL3NyYy9zaWduSW4ucGFnZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRzdDLE9BQU8sRUFBbUIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RSxPQUFPLEVBQUUsV0FBVyxJQUFJLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7O0FBT3RELE1BQU0sT0FBTyxjQUFjO0lBYXpCLFlBQ1UsT0FBc0IsRUFDdEIsT0FBMkIsRUFDM0IsT0FBMkIsRUFDM0IsQ0FBMEIsRUFDMUIsSUFBcUI7UUFKckIsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQUN0QixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixZQUFPLEdBQVAsT0FBTyxDQUFvQjtRQUMzQixNQUFDLEdBQUQsQ0FBQyxDQUF5QjtRQUMxQixTQUFJLEdBQUosSUFBSSxDQUFpQjtRQWpCL0IsVUFBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQztRQUMzQix5QkFBb0IsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztRQUM1RCxpQkFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQztRQUN6QyxZQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7UUFJM0Isb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRTdCLGFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUMsT0FBTyxDQUFDO0lBUWxFLENBQUM7SUFDSixlQUFlO1FBQ2IsbUhBQW1IO1FBQ25ILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO1FBQ3RFLElBQUksSUFBSSxDQUFDLG9CQUFvQjtZQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0lBQ3RGLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSztRQUNULElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZTtZQUFFLE9BQU87UUFDbEMsSUFBSSxDQUFDO1lBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckUsSUFBSSxXQUFXLEtBQUssbUJBQW1CLENBQUMsWUFBWTtnQkFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO2lCQUN4RyxJQUFJLFdBQVcsS0FBSyxtQkFBbUIsQ0FBQyxhQUFhO2dCQUN4RCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQyxDQUFDO2lCQUNyRCxJQUFJLFdBQVcsS0FBSyxtQkFBbUIsQ0FBQyxTQUFTO2dCQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7O2dCQUN2RyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUssR0FBVyxDQUFDLElBQUksS0FBSywyQkFBMkI7Z0JBQ25ELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsdUNBQXVDLENBQUMsQ0FBQztpQkFDL0QsSUFDRixHQUFXLENBQUMsSUFBSSxLQUFLLCtCQUErQjtnQkFDcEQsR0FBVyxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsMEJBQTBCLENBQUM7Z0JBRTFELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMseUNBQXlDLENBQUMsQ0FBQztZQUN0RSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO1FBQ3hELENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxTQUFTO1FBQ1AsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUNELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVELGlCQUFpQixDQUFDLEdBQVc7UUFDM0IsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBVztRQUN4QixNQUFNLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7OEdBbkVVLGNBQWM7a0dBQWQsY0FBYyxvRENkM0IsbzdMQXNKQTs7MkZEeElhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEJyb3dzZXIgfSBmcm9tICdAY2FwYWNpdG9yL2Jyb3dzZXInO1xuaW1wb3J0IHsgSURFQU1lc3NhZ2VTZXJ2aWNlLCBJREVBTG9hZGluZ1NlcnZpY2UsIElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQGlkZWEtaW9uaWMvY29tbW9uJztcblxuaW1wb3J0IHsgSURFQUF1dGhTZXJ2aWNlLCBMb2dpbk91dGNvbWVBY3Rpb25zIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBlbnZpcm9ubWVudCBhcyBlbnYgfSBmcm9tICdAZW52L2Vudmlyb25tZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWRlYS1zaWduLWluJyxcbiAgdGVtcGxhdGVVcmw6ICdzaWduSW4ucGFnZS5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2F1dGguc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIElERUFTaWduSW5QYWdlIHtcbiAgdGl0bGUgPSBlbnYuaWRlYS5hcHAudGl0bGU7XG4gIHJlZ2lzdHJhdGlvblBvc3NpYmxlID0gZW52LmlkZWEuYXV0aC5yZWdpc3RyYXRpb25Jc1Bvc3NpYmxlO1xuICBoYXNJbnRyb1BhZ2UgPSBlbnYuaWRlYS5hcHAuaGFzSW50cm9QYWdlO1xuICB3ZWJzaXRlID0gZW52LmlkZWEud2Vic2l0ZTtcblxuICBlbWFpbDogc3RyaW5nO1xuICBwYXNzd29yZDogc3RyaW5nO1xuICBhZ3JlZW1lbnRzQ2hlY2sgPSB0cnVlO1xuICBuZXdBY2NvdW50UmVnaXN0ZXJlZCA9IGZhbHNlO1xuICBlcnJvck1zZzogc3RyaW5nO1xuICBkYXJrTW9kZSA9IHdpbmRvdy5tYXRjaE1lZGlhKCcocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspJykubWF0Y2hlcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIG5hdkN0cmw6IE5hdkNvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBtZXNzYWdlOiBJREVBTWVzc2FnZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2FkaW5nOiBJREVBTG9hZGluZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSB0OiBJREVBVHJhbnNsYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGF1dGg6IElERUFBdXRoU2VydmljZVxuICApIHt9XG4gIGlvblZpZXdEaWRFbnRlcigpOiB2b2lkIHtcbiAgICAvLyBtYW5hZ2UgdGhlIHNjZW5hcmlvIGluIHdoaWNoIHdlIGp1c3QgY3JlYXRlZCBhIG5ldyBhY2NvdW50IChzaG93IGEgZXhwbGFuYXRvcnkgbWVzc2FnZTogZW1haWwgbXVzdCBiZSBjb25maXJtZWQpXG4gICAgdGhpcy5uZXdBY2NvdW50UmVnaXN0ZXJlZCA9ICEhdGhpcy5hdXRoLmdldE5ld0FjY291bnRKdXN0UmVnaXN0ZXJlZCgpO1xuICAgIGlmICh0aGlzLm5ld0FjY291bnRSZWdpc3RlcmVkKSB0aGlzLmVtYWlsID0gdGhpcy5hdXRoLmdldE5ld0FjY291bnRKdXN0UmVnaXN0ZXJlZCgpO1xuICB9XG5cbiAgYXN5bmMgbG9naW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmFncmVlbWVudHNDaGVjaykgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmVycm9yTXNnID0gbnVsbDtcbiAgICAgIGF3YWl0IHRoaXMubG9hZGluZy5zaG93KCk7XG4gICAgICBjb25zdCBsb2dpbkFjdGlvbiA9IGF3YWl0IHRoaXMuYXV0aC5sb2dpbih0aGlzLmVtYWlsLCB0aGlzLnBhc3N3b3JkKTtcbiAgICAgIGlmIChsb2dpbkFjdGlvbiA9PT0gTG9naW5PdXRjb21lQWN0aW9ucy5ORVdfUEFTU1dPUkQpIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZUZvcndhcmQoWydhdXRoJywgJ25ldy1wYXNzd29yZCddKTtcbiAgICAgIGVsc2UgaWYgKGxvZ2luQWN0aW9uID09PSBMb2dpbk91dGNvbWVBY3Rpb25zLk1GQV9DSEFMTEVOR0UpXG4gICAgICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZUZvcndhcmQoWydhdXRoJywgJ21mYS1jaGFsbGVuZ2UnXSk7XG4gICAgICBlbHNlIGlmIChsb2dpbkFjdGlvbiA9PT0gTG9naW5PdXRjb21lQWN0aW9ucy5NRkFfU0VUVVApIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZUZvcndhcmQoWydhdXRoJywgJ3NldHVwLW1mYSddKTtcbiAgICAgIGVsc2Ugd2luZG93LmxvY2F0aW9uLmFzc2lnbignJyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoKGVyciBhcyBhbnkpLm5hbWUgPT09ICdVc2VyTm90Q29uZmlybWVkRXhjZXB0aW9uJylcbiAgICAgICAgdGhpcy5lcnJvck1zZyA9IHRoaXMudC5fKCdJREVBX0FVVEguQ09ORklSTV9ZT1VSX0VNQUlMX1RPX0xPR0lOJyk7XG4gICAgICBlbHNlIGlmIChcbiAgICAgICAgKGVyciBhcyBhbnkpLm5hbWUgPT09ICdVc2VyTGFtYmRhVmFsaWRhdGlvbkV4Y2VwdGlvbicgJiZcbiAgICAgICAgKGVyciBhcyBhbnkpLm1lc3NhZ2U/LmluY2x1ZGVzKCdASURFQV9DT0dOSVRPX1RSQU5TSVRJT04nKVxuICAgICAgKVxuICAgICAgICB0aGlzLmVycm9yTXNnID0gdGhpcy50Ll8oJ0lERUFfQVVUSC5DSEFOR0VfWU9VUl9QQVNTV09SRF9UT19MT0dJTicpO1xuICAgICAgdGhpcy5tZXNzYWdlLmVycm9yKCdJREVBX0FVVEguQVVUSEVOVElDQVRJT05fRkFJTEVEJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZy5oaWRlKCk7XG4gICAgfVxuICB9XG5cbiAgZ29Ub0ludHJvKCk6IHZvaWQge1xuICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZUJhY2soWydpbnRybyddKTtcbiAgfVxuICBnb1RvRm9yZ290UGFzc3dvcmQoKTogdm9pZCB7XG4gICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlRm9yd2FyZChbJ2F1dGgvZm9yZ290LXBhc3N3b3JkJ10pO1xuICB9XG4gIGdvVG9SZWdpc3RyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlRm9yd2FyZChbJ2F1dGgnLCAnc2lnbi11cCddKTtcbiAgfVxuXG4gIHRyYW5zbGF0aW9uRXhpc3RzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy50Ll8oa2V5KTtcbiAgfVxuXG4gIGFzeW5jIG9wZW5MaW5rKHVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgQnJvd3Nlci5vcGVuKHsgdXJsIH0pO1xuICB9XG59XG4iLCI8aW9uLWNvbnRlbnQ+XG4gIDxpb24tY2FyZCBjb2xvcj1cIndhcm5pbmdcIiAqbmdJZj1cIm5ld0FjY291bnRSZWdpc3RlcmVkXCI+XG4gICAgPGlvbi1jYXJkLWNvbnRlbnQ+e3sgJ0lERUFfQVVUSC5DT05GSVJNX1lPVVJfRU1BSUxfVE9fTE9HSU4nIHwgdHJhbnNsYXRlIH19PC9pb24tY2FyZC1jb250ZW50PlxuICA8L2lvbi1jYXJkPlxuICA8Zm9ybSBjbGFzcz1cImZsZXhCb3hcIj5cbiAgICA8ZGl2PlxuICAgICAgPGlvbi1jYXJkIGNsYXNzPVwiYXV0aENhcmRcIj5cbiAgICAgICAgPGlvbi1pbWdcbiAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5TRVJWSUNFX0xPR08nIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbc3JjXT1cImRhcmtNb2RlID8gJ2Fzc2V0cy9pY29ucy9pY29uLWF1dGgtYWx0LnN2ZycgOiAnYXNzZXRzL2ljb25zL2ljb24tYXV0aC5zdmcnXCJcbiAgICAgICAgPjwvaW9uLWltZz5cbiAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICA8aW9uLWNhcmQtdGl0bGUgY29sb3I9XCJwcmltYXJ5XCIgKm5nSWY9XCJ0aXRsZVwiPnt7IHRpdGxlIH19PC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGUgKm5nSWY9XCJ0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuVEFHTElORScpXCI+XG4gICAgICAgICAgICB7eyAnSURFQV9WQVJJQUJMRVMuVEFHTElORScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPHAgY2xhc3M9XCJlcnJvckJveFwiICpuZ0lmPVwiZXJyb3JNc2dcIj48Yj57eyAnSURFQV9BVVRILldBUk5JTkcnIHwgdHJhbnNsYXRlIH19LjwvYj4ge3sgZXJyb3JNc2cgfX08L3A+XG4gICAgICAgICAgPGlvbi1pdGVtPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCBwb3NpdGlvbj1cImlubGluZVwiPlxuICAgICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInBlcnNvbi1jaXJjbGVcIiBjb2xvcj1cInByaW1hcnlcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8aW9uLWlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgIGlucHV0bW9kZT1cImVtYWlsXCJcbiAgICAgICAgICAgICAgcGF0dGVybj1cIltBLVphLXowLTkuXyUrLV17Mix9QFthLXpBLVotXy5dezIsfVsuXXsxfVthLXpBLVpdezIsfVwiXG4gICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIGF1dG9jb3JyZWN0PVwib2ZmXCJcbiAgICAgICAgICAgICAgYXV0b2NhcGl0YWxpemU9XCJvZmZcIlxuICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInSURFQV9BVVRILkVNQUlMJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILkVNQUlMX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbWFpbFwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJsb2dpbigpXCJcbiAgICAgICAgICAgID48L2lvbi1pbnB1dD5cbiAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgIDxpb24taXRlbT5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgcG9zaXRpb249XCJpbmxpbmVcIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJrZXlcIiBjb2xvcj1cInByaW1hcnlcIj48L2lvbi1pY29uPlxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgICA8aW9uLWlucHV0XG4gICAgICAgICAgICAgIGlkPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgICAgIGF1dG9jb3JyZWN0PVwib2ZmXCJcbiAgICAgICAgICAgICAgYXV0b2NhcGl0YWxpemU9XCJvZmZcIlxuICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJjdXJyZW50LXBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgW2NsZWFyT25FZGl0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidJREVBX0FVVEguUEFTU1dPUkQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguUEFTU1dPUkRfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cImxvZ2luKClcIlxuICAgICAgICAgICAgPjwvaW9uLWlucHV0PlxuICAgICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgICAgPGlvbi1yb3dcbiAgICAgICAgICAgIGNsYXNzPVwiYWdyZWVtZW50c0FjY2VwdGFuY2VSb3dcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgIXJlZ2lzdHJhdGlvblBvc3NpYmxlICYmXG4gICAgICAgICAgICAgICh0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuVEVSTVNfQU5EX0NPTkRJVElPTlNfVVJMJykgfHwgdHJhbnNsYXRpb25FeGlzdHMoJ0lERUFfVkFSSUFCTEVTLlBSSVZBQ1lfUE9MSUNZX1VSTCcpKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgPGlvbi1jaGVja2JveFxuICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImFncmVlbWVudHNDaGVja1wiXG4gICAgICAgICAgICAgID48L2lvbi1jaGVja2JveD5cbiAgICAgICAgICAgICAge3sgJ0lERUFfQVVUSC5BR1JFRU1FTlRTX0NIRUNLX0xPR0lOJyB8IHRyYW5zbGF0ZSB9fTpcbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBpb24tdGV4dFxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5URVJNU19BTkRfQ09ORElUSU9OU19VUkwnKVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguVEVSTVNfQU5EX0NPTkRJVElPTlNfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtocmVmXT1cIidJREVBX1ZBUklBQkxFUy5URVJNU19BTkRfQ09ORElUSU9OU19VUkwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICdJREVBX0FVVEguVEVSTVNfQU5EX0NPTkRJVElPTlMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgPGlvbi10ZXh0XG4gICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuUFJJVkFDWV9QT0xJQ1lfVVJMJykgJiYgdHJhbnNsYXRpb25FeGlzdHMoJ0lERUFfVkFSSUFCTEVTLlRFUk1TX0FORF9DT05ESVRJT05TX1VSTCcpXG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICZcbiAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICBpb24tdGV4dFxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5QUklWQUNZX1BPTElDWV9VUkwnKVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguUFJJVkFDWV9QT0xJQ1lfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtocmVmXT1cIidJREVBX1ZBUklBQkxFUy5QUklWQUNZX1BPTElDWV9VUkwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7ICdJREVBX0FVVEguUFJJVkFDWV9QT0xJQ1knIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgIGV4cGFuZD1cImJsb2NrXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhYWdyZWVtZW50c0NoZWNrXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILlNJR05fSU5fSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImxvZ2luKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdJREVBX0FVVEguU0lHTl9JTicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgICBleHBhbmQ9XCJibG9ja1wiXG4gICAgICAgICAgICBjbGFzcz1cInNtYWxsQ2FzZUJ1dHRvblwiXG4gICAgICAgICAgICAqbmdJZj1cInJlZ2lzdHJhdGlvblBvc3NpYmxlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILkNSRUFURV9BTl9BQ0NPVU5UX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJnb1RvUmVnaXN0cmF0aW9uKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7ICdJREVBX0FVVEguQ1JFQVRFX0FOX0FDQ09VTlQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgICAgY2xhc3M9XCJzbWFsbENhc2VCdXR0b25cIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguSV9GT1JHT1RfTVlfUEFTU1dPUkRfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9Gb3Jnb3RQYXNzd29yZCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnSURFQV9BVVRILklfRk9SR09UX01ZX1BBU1NXT1JEJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgZmlsbD1cImNsZWFyXCJcbiAgICAgICAgICAgIGV4cGFuZD1cImJsb2NrXCJcbiAgICAgICAgICAgIGNvbG9yPVwibWVkaXVtXCJcbiAgICAgICAgICAgIGNsYXNzPVwic21hbGxDYXNlQnV0dG9uXCJcbiAgICAgICAgICAgICpuZ0lmPVwiaGFzSW50cm9QYWdlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILkJBQ0tfVE9fSU5UUk9fSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9JbnRybygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnSURFQV9BVVRILkJBQ0tfVE9fSU5UUk8nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICA8L2lvbi1jYXJkPlxuICAgICAgPGlvbi1pbWdcbiAgICAgICAgY2xhc3M9XCJpZGVhTG9nb1wiXG4gICAgICAgICpuZ0lmPVwid2Vic2l0ZVwiXG4gICAgICAgIFtzcmNdPVwiZGFya01vZGUgPyAnLi9hc3NldHMvaWNvbnMvaWRlYS1hbHQucG5nJyA6ICcuL2Fzc2V0cy9pY29ucy9pZGVhLnBuZydcIlxuICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5JREVBX1RBR0xJTkUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKGNsaWNrKT1cIm9wZW5MaW5rKHdlYnNpdGUpXCJcbiAgICAgID48L2lvbi1pbWc+XG4gICAgPC9kaXY+XG4gIDwvZm9ybT5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnbkluLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2F1dGgvc3JjL3NpZ25Jbi5wYWdlLnRzIiwiLi4vLi4vLi4vLi4vbW9kdWxlcy9hdXRoL3NyYy9zaWduSW4ucGFnZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsZUFBZSxFQUFtRSxNQUFNLG9CQUFvQixDQUFDO0FBRXRILE9BQU8sRUFBbUIsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQU90RSxNQUFNLE9BQU8sY0FBYztJQWV6QixZQUNVLE9BQXNCLEVBQ3RCLE9BQTJCLEVBQzNCLE9BQTJCLEVBQzNCLENBQTBCLEVBQzFCLElBQXFCO1FBSnJCLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFDdEIsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsTUFBQyxHQUFELENBQUMsQ0FBeUI7UUFDMUIsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFuQnJCLFFBQUcsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFTeEMsb0JBQWUsR0FBRyxJQUFJLENBQUM7UUFDdkIseUJBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRTdCLGFBQVEsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLDhCQUE4QixDQUFDLENBQUMsT0FBTyxDQUFDO1FBU25FLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUN0QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFz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QztJQUN6QixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFXO1FBQ3hCLE1BQU0sT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQzs4R0ExRVUsY0FBYztrR0FBZCxjQUFjLG9EQ1ozQixvN0xBc0pBOzsyRkQxSWEsY0FBYztrQkFMMUIsU0FBUzsrQkFDRSxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdkNvbnRyb2xsZXIgfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBCcm93c2VyIH0gZnJvbSAnQGNhcGFjaXRvci9icm93c2VyJztcbmltcG9ydCB7IElERUFFbnZpcm9ubWVudCwgSURFQU1lc3NhZ2VTZXJ2aWNlLCBJREVBTG9hZGluZ1NlcnZpY2UsIElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQGlkZWEtaW9uaWMvY29tbW9uJztcblxuaW1wb3J0IHsgSURFQUF1dGhTZXJ2aWNlLCBMb2dpbk91dGNvbWVBY3Rpb25zIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZGVhLXNpZ24taW4nLFxuICB0ZW1wbGF0ZVVybDogJ3NpZ25Jbi5wYWdlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnYXV0aC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSURFQVNpZ25JblBhZ2Uge1xuICBwcm90ZWN0ZWQgZW52ID0gaW5qZWN0KElERUFFbnZpcm9ubWVudCk7XG5cbiAgdGl0bGU6IHN0cmluZztcbiAgcmVnaXN0cmF0aW9uUG9zc2libGU6IGJvb2xlYW47XG4gIGhhc0ludHJvUGFnZTogYm9vbGVhbjtcbiAgd2Vic2l0ZTogc3RyaW5nO1xuXG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG4gIGFncmVlbWVudHNDaGVjayA9IHRydWU7XG4gIG5ld0FjY291bnRSZWdpc3RlcmVkID0gZmFsc2U7XG4gIGVycm9yTXNnOiBzdHJpbmc7XG4gIGRhcmtNb2RlID0gd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5tYXRjaGVzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbmF2Q3RybDogTmF2Q29udHJvbGxlcixcbiAgICBwcml2YXRlIG1lc3NhZ2U6IElERUFNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGxvYWRpbmc6IElERUFMb2FkaW5nU2VydmljZSxcbiAgICBwcml2YXRlIHQ6IElERUFUcmFuc2xhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXV0aDogSURFQUF1dGhTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudGl0bGUgPSB0aGlzLmVudi5pZGVhLmF1dGgudGl0bGU7XG4gICAgdGhpcy5yZWdpc3RyYXRpb25Qb3NzaWJsZSA9IHRoaXMuZW52LmlkZWEuYXV0aC5yZWdpc3RyYXRpb25Jc1Bvc3NpYmxlO1xuICAgIHRoaXMuaGFzSW50cm9QYWdlID0gdGhpcy5lbnYuaWRlYS5hdXRoLmhhc0ludHJvUGFnZTtcbiAgICB0aGlzLndlYnNpdGUgPSB0aGlzLmVudi5pZGVhLmF1dGgud2Vic2l0ZTtcbiAgfVxuICBpb25WaWV3RGlkRW50ZXIoKTogdm9pZCB7XG4gICAgLy8gbWFuYWdlIHRoZSBzY2VuYXJpbyBpbiB3aGljaCB3ZSBqdXN0IGNyZWF0ZWQgYSBuZXcgYWNjb3VudCAoc2hvdyBhIGV4cGxhbmF0b3J5IG1lc3NhZ2U6IGVtYWlsIG11c3QgYmUgY29uZmlybWVkKVxuICAgIHRoaXMubmV3QWNjb3VudFJlZ2lzdGVyZWQgPSAhIXRoaXMuYXV0aC5nZXROZXdBY2NvdW50SnVzdFJlZ2lzdGVyZWQoKTtcbiAgICBpZiAodGhpcy5uZXdBY2NvdW50UmVnaXN0ZXJlZCkgdGhpcy5lbWFpbCA9IHRoaXMuYXV0aC5nZXROZXdBY2NvdW50SnVzdFJlZ2lzdGVyZWQoKTtcbiAgfVxuXG4gIGFzeW5jIGxvZ2luKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5hZ3JlZW1lbnRzQ2hlY2spIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IG51bGw7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRpbmcuc2hvdygpO1xuICAgICAgY29uc3QgbG9naW5BY3Rpb24gPSBhd2FpdCB0aGlzLmF1dGgubG9naW4odGhpcy5lbWFpbCwgdGhpcy5wYXNzd29yZCk7XG4gICAgICBpZiAobG9naW5BY3Rpb24gPT09IExvZ2luT3V0Y29tZUFjdGlvbnMuTkVXX1BBU1NXT1JEKSB0aGlzLm5hdkN0cmwubmF2aWdhdGVGb3J3YXJkKFsnYXV0aCcsICduZXctcGFzc3dvcmQnXSk7XG4gICAgICBlbHNlIGlmIChsb2dpbkFjdGlvbiA9PT0gTG9naW5PdXRjb21lQWN0aW9ucy5NRkFfQ0hBTExFTkdFKVxuICAgICAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVGb3J3YXJkKFsnYXV0aCcsICdtZmEtY2hhbGxlbmdlJ10pO1xuICAgICAgZWxzZSBpZiAobG9naW5BY3Rpb24gPT09IExvZ2luT3V0Y29tZUFjdGlvbnMuTUZBX1NFVFVQKSB0aGlzLm5hdkN0cmwubmF2aWdhdGVGb3J3YXJkKFsnYXV0aCcsICdzZXR1cC1tZmEnXSk7XG4gICAgICBlbHNlIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oJycpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKChlcnIgYXMgYW55KS5uYW1lID09PSAnVXNlck5vdENvbmZpcm1lZEV4Y2VwdGlvbicpXG4gICAgICAgIHRoaXMuZXJyb3JNc2cgPSB0aGlzLnQuXygnSURFQV9BVVRILkNPTkZJUk1fWU9VUl9FTUFJTF9UT19MT0dJTicpO1xuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIChlcnIgYXMgYW55KS5uYW1lID09PSAnVXNlckxhbWJkYVZhbGlkYXRpb25FeGNlcHRpb24nICYmXG4gICAgICAgIChlcnIgYXMgYW55KS5tZXNzYWdlPy5pbmNsdWRlcygnQElERUFfQ09HTklUT19UUkFOU0lUSU9OJylcbiAgICAgIClcbiAgICAgICAgdGhpcy5lcnJvck1zZyA9IHRoaXMudC5fKCdJREVBX0FVVEguQ0hBTkdFX1lPVVJfUEFTU1dPUkRfVE9fTE9HSU4nKTtcbiAgICAgIHRoaXMubWVzc2FnZS5lcnJvcignSURFQV9BVVRILkFVVEhFTlRJQ0FUSU9OX0ZBSUxFRCcpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxvYWRpbmcuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIGdvVG9JbnRybygpOiB2b2lkIHtcbiAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVCYWNrKFsnaW50cm8nXSk7XG4gIH1cbiAgZ29Ub0ZvcmdvdFBhc3N3b3JkKCk6IHZvaWQge1xuICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZUZvcndhcmQoWydhdXRoL2ZvcmdvdC1wYXNzd29yZCddKTtcbiAgfVxuICBnb1RvUmVnaXN0cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMubmF2Q3RybC5uYXZpZ2F0ZUZvcndhcmQoWydhdXRoJywgJ3NpZ24tdXAnXSk7XG4gIH1cblxuICB0cmFuc2xhdGlvbkV4aXN0cyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMudC5fKGtleSk7XG4gIH1cblxuICBhc3luYyBvcGVuTGluayh1cmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IEJyb3dzZXIub3Blbih7IHVybCB9KTtcbiAgfVxufVxuIiwiPGlvbi1jb250ZW50PlxuICA8aW9uLWNhcmQgY29sb3I9XCJ3YXJuaW5nXCIgKm5nSWY9XCJuZXdBY2NvdW50UmVnaXN0ZXJlZFwiPlxuICAgIDxpb24tY2FyZC1jb250ZW50Pnt7ICdJREVBX0FVVEguQ09ORklSTV9ZT1VSX0VNQUlMX1RPX0xPR0lOJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWNhcmQtY29udGVudD5cbiAgPC9pb24tY2FyZD5cbiAgPGZvcm0gY2xhc3M9XCJmbGV4Qm94XCI+XG4gICAgPGRpdj5cbiAgICAgIDxpb24tY2FyZCBjbGFzcz1cImF1dGhDYXJkXCI+XG4gICAgICAgIDxpb24taW1nXG4gICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguU0VSVklDRV9MT0dPJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW3NyY109XCJkYXJrTW9kZSA/ICdhc3NldHMvaWNvbnMvaWNvbi1hdXRoLWFsdC5zdmcnIDogJ2Fzc2V0cy9pY29ucy9pY29uLWF1dGguc3ZnJ1wiXG4gICAgICAgID48L2lvbi1pbWc+XG4gICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgPGlvbi1jYXJkLXRpdGxlIGNvbG9yPVwicHJpbWFyeVwiICpuZ0lmPVwidGl0bGVcIj57eyB0aXRsZSB9fTwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlICpuZ0lmPVwidHJhbnNsYXRpb25FeGlzdHMoJ0lERUFfVkFSSUFCTEVTLlRBR0xJTkUnKVwiPlxuICAgICAgICAgICAge3sgJ0lERUFfVkFSSUFCTEVTLlRBR0xJTkUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9pb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDxwIGNsYXNzPVwiZXJyb3JCb3hcIiAqbmdJZj1cImVycm9yTXNnXCI+PGI+e3sgJ0lERUFfQVVUSC5XQVJOSU5HJyB8IHRyYW5zbGF0ZSB9fS48L2I+IHt7IGVycm9yTXNnIH19PC9wPlxuICAgICAgICAgIDxpb24taXRlbT5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgcG9zaXRpb249XCJpbmxpbmVcIj5cbiAgICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJwZXJzb24tY2lyY2xlXCIgY29sb3I9XCJwcmltYXJ5XCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPGlvbi1pbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwiZW1haWxcIlxuICAgICAgICAgICAgICBpbnB1dG1vZGU9XCJlbWFpbFwiXG4gICAgICAgICAgICAgIHBhdHRlcm49XCJbQS1aYS16MC05Ll8lKy1dezIsfUBbYS16QS1aLV8uXXsyLH1bLl17MX1bYS16QS1aXXsyLH1cIlxuICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBhdXRvY29ycmVjdD1cIm9mZlwiXG4gICAgICAgICAgICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCJcbiAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwiZW1haWxcIlxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0lERUFfQVVUSC5FTUFJTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5FTUFJTF9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZW1haWxcIlxuICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwibG9naW4oKVwiXG4gICAgICAgICAgICA+PC9pb24taW5wdXQ+XG4gICAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgICA8aW9uLWl0ZW0+XG4gICAgICAgICAgICA8aW9uLWxhYmVsIHBvc2l0aW9uPVwiaW5saW5lXCI+XG4gICAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwia2V5XCIgY29sb3I9XCJwcmltYXJ5XCI+PC9pb24taWNvbj5cbiAgICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgPGlvbi1pbnB1dFxuICAgICAgICAgICAgICBpZD1cImN1cnJlbnQtcGFzc3dvcmRcIlxuICAgICAgICAgICAgICB0eXBlPVwicGFzc3dvcmRcIlxuICAgICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgICBhdXRvY29ycmVjdD1cIm9mZlwiXG4gICAgICAgICAgICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCJcbiAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwiY3VycmVudC1wYXNzd29yZFwiXG4gICAgICAgICAgICAgIFtjbGVhck9uRWRpdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInSURFQV9BVVRILlBBU1NXT1JEJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILlBBU1NXT1JEX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJsb2dpbigpXCJcbiAgICAgICAgICAgID48L2lvbi1pbnB1dD5cbiAgICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICAgIDxpb24tcm93XG4gICAgICAgICAgICBjbGFzcz1cImFncmVlbWVudHNBY2NlcHRhbmNlUm93XCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICFyZWdpc3RyYXRpb25Qb3NzaWJsZSAmJlxuICAgICAgICAgICAgICAodHJhbnNsYXRpb25FeGlzdHMoJ0lERUFfVkFSSUFCTEVTLlRFUk1TX0FORF9DT05ESVRJT05TX1VSTCcpIHx8IHRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5QUklWQUNZX1BPTElDWV9VUkwnKSlcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgIDxpb24tY2hlY2tib3hcbiAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhZ3JlZW1lbnRzQ2hlY2tcIlxuICAgICAgICAgICAgICA+PC9pb24tY2hlY2tib3g+XG4gICAgICAgICAgICAgIHt7ICdJREVBX0FVVEguQUdSRUVNRU5UU19DSEVDS19MT0dJTicgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgaW9uLXRleHRcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuVEVSTVNfQU5EX0NPTkRJVElPTlNfVVJMJylcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILlRFUk1TX0FORF9DT05ESVRJT05TX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbaHJlZl09XCInSURFQV9WQVJJQUJMRVMuVEVSTVNfQU5EX0NPTkRJVElPTlNfVVJMJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAnSURFQV9BVVRILlRFUk1TX0FORF9DT05ESVRJT05TJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxpb24tdGV4dFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgdHJhbnNsYXRpb25FeGlzdHMoJ0lERUFfVkFSSUFCTEVTLlBSSVZBQ1lfUE9MSUNZX1VSTCcpICYmIHRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5URVJNU19BTkRfQ09ORElUSU9OU19VUkwnKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAmXG4gICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgaW9uLXRleHRcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuUFJJVkFDWV9QT0xJQ1lfVVJMJylcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILlBSSVZBQ1lfUE9MSUNZX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbaHJlZl09XCInSURFQV9WQVJJQUJMRVMuUFJJVkFDWV9QT0xJQ1lfVVJMJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyAnSURFQV9BVVRILlBSSVZBQ1lfUE9MSUNZJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICBleHBhbmQ9XCJibG9ja1wiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFncmVlbWVudHNDaGVja1wiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5TSUdOX0lOX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJsb2dpbigpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnSURFQV9BVVRILlNJR05fSU4nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgICAgY2xhc3M9XCJzbWFsbENhc2VCdXR0b25cIlxuICAgICAgICAgICAgKm5nSWY9XCJyZWdpc3RyYXRpb25Qb3NzaWJsZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5DUkVBVEVfQU5fQUNDT1VOVF9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZ29Ub1JlZ2lzdHJhdGlvbigpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnSURFQV9BVVRILkNSRUFURV9BTl9BQ0NPVU5UJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgICAgZmlsbD1cImNsZWFyXCJcbiAgICAgICAgICAgIGV4cGFuZD1cImJsb2NrXCJcbiAgICAgICAgICAgIGNsYXNzPVwic21hbGxDYXNlQnV0dG9uXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILklfRk9SR09UX01ZX1BBU1NXT1JEX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJnb1RvRm9yZ290UGFzc3dvcmQoKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ0lERUFfQVVUSC5JX0ZPUkdPVF9NWV9QQVNTV09SRCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgICBleHBhbmQ9XCJibG9ja1wiXG4gICAgICAgICAgICBjb2xvcj1cIm1lZGl1bVwiXG4gICAgICAgICAgICBjbGFzcz1cInNtYWxsQ2FzZUJ1dHRvblwiXG4gICAgICAgICAgICAqbmdJZj1cImhhc0ludHJvUGFnZVwiXG4gICAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5CQUNLX1RPX0lOVFJPX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIChjbGljayk9XCJnb1RvSW50cm8oKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ0lERUFfQVVUSC5CQUNLX1RPX0lOVFJPJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgPC9pb24tY2FyZD5cbiAgICAgIDxpb24taW1nXG4gICAgICAgIGNsYXNzPVwiaWRlYUxvZ29cIlxuICAgICAgICAqbmdJZj1cIndlYnNpdGVcIlxuICAgICAgICBbc3JjXT1cImRhcmtNb2RlID8gJy4vYXNzZXRzL2ljb25zL2lkZWEtYWx0LnBuZycgOiAnLi9hc3NldHMvaWNvbnMvaWRlYS5wbmcnXCJcbiAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguSURFQV9UQUdMSU5FJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIChjbGljayk9XCJvcGVuTGluayh3ZWJzaXRlKVwiXG4gICAgICA+PC9pb24taW1nPlxuICAgIDwvZGl2PlxuICA8L2Zvcm0+XG48L2lvbi1jb250ZW50PlxuIl19
@@ -1,7 +1,7 @@
1
- import { Component } from '@angular/core';
1
+ import { Component, inject } from '@angular/core';
2
2
  import { isEmpty } from 'idea-toolbox';
3
+ import { IDEAEnvironment } from '@idea-ionic/common';
3
4
  import { IDEAPasswordPolicyComponent } from './passwordPolicy.component';
4
- import { environment as env } from '@env/environment';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@ionic/angular";
7
7
  import * as i2 from "@idea-ionic/common";
@@ -16,11 +16,12 @@ export class IDEASignUpPage {
16
16
  this.loading = loading;
17
17
  this.t = t;
18
18
  this.auth = auth;
19
+ this.env = inject(IDEAEnvironment);
19
20
  this.agreementsCheck = false;
20
- this.passwordPolicy = env.idea.auth.passwordPolicy;
21
+ this.passwordPolicy = this.env.idea.auth.passwordPolicy;
21
22
  }
22
23
  ngOnInit() {
23
- if (!env.idea.auth.registrationIsPossible)
24
+ if (!this.env.idea.auth.registrationIsPossible)
24
25
  return this.goToAuth();
25
26
  this.agreementsCheck =
26
27
  this.t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || this.t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')
@@ -76,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
76
77
  type: Component,
77
78
  args: [{ selector: 'idea-sign-up', template: "<ion-content>\n <form class=\"flexBox\">\n <ion-card class=\"authCard\">\n <ion-card-header>\n <ion-card-title color=\"primary\">{{ 'IDEA_AUTH.NEW_ACCOUNT' | translate }}</ion-card-title>\n <ion-card-subtitle>{{ 'IDEA_AUTH.REGISTER_A_NEW_ACCOUNT_TO_THE_SYSTEM' | translate }}</ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <p class=\"errorBox\" *ngIf=\"errorMsg\">\n <b> {{ 'IDEA_AUTH.ERROR' | translate }}. </b>\n {{ errorMsg }}\n </p>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"person-circle\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"email\"\n inputmode=\"email\"\n pattern=\"[A-Za-z0-9._%+-]{2,}@[a-zA-Z-_.]{2,}[.]{1}[a-zA-Z]{2,}\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [placeholder]=\"'IDEA_AUTH.EMAIL' | translate\"\n [title]=\"'IDEA_AUTH.REGISTRATION_EMAIL_HINT' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"email\"\n (keyup.enter)=\"register()\"\n ></ion-input>\n </ion-item>\n <ion-item>\n <ion-label position=\"inline\">\n <ion-icon name=\"key\" color=\"primary\"></ion-icon>\n </ion-label>\n <ion-input\n type=\"password\"\n spellcheck=\"false\"\n autocorrect=\"off\"\n autocapitalize=\"off\"\n autocomplete=\"off\"\n [pattern]=\"auth.getPasswordPolicyPatternForInput()\"\n [clearOnEdit]=\"false\"\n [placeholder]=\"'IDEA_AUTH.PASSWORD' | translate\"\n [title]=\"'IDEA_AUTH.CHOOSE_A_PASSWORD' | translate\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"password\"\n (keyup.enter)=\"register()\"\n ></ion-input>\n <ion-button slot=\"end\" fill=\"clear\" color=\"dark\" (click)=\"openPasswordPolicy($event)\">\n <ion-icon icon=\"help-circle-outline\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-item>\n <ion-row\n class=\"agreementsAcceptanceRow\"\n *ngIf=\"translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n >\n <ion-col>\n <ion-checkbox\n size=\"small\"\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"agreementsCheck\"\n ></ion-checkbox>\n {{ 'IDEA_AUTH.AGREEMENTS_CHECK_REGISTRATION' | translate }}:\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\"\n [title]=\"'IDEA_AUTH.TERMS_AND_CONDITIONS_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL' | translate\"\n >\n {{ 'IDEA_AUTH.TERMS_AND_CONDITIONS' | translate }}\n </a>\n <ion-text\n *ngIf=\"\n translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL') && translationExists('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL')\n \"\n >\n &\n </ion-text>\n <a\n ion-text\n color=\"primary\"\n target=\"_blank\"\n *ngIf=\"translationExists('IDEA_VARIABLES.PRIVACY_POLICY_URL')\"\n [title]=\"'IDEA_AUTH.PRIVACY_POLICY_HINT' | translate\"\n [href]=\"'IDEA_VARIABLES.PRIVACY_POLICY_URL' | translate\"\n >\n {{ 'IDEA_AUTH.PRIVACY_POLICY' | translate }}\n </a>\n </ion-col>\n </ion-row>\n <ion-button\n expand=\"block\"\n [disabled]=\"!agreementsCheck\"\n [title]=\"'IDEA_AUTH.CREATE_AN_ACCOUNT_HINT' | translate\"\n (click)=\"register()\"\n >\n {{ 'IDEA_AUTH.CREATE_AN_ACCOUNT' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.HAVEN_T_RECEIVED_CONFIRMATION_LINK_HINT' | translate\"\n (click)=\"goToResendLink()\"\n >\n {{ 'IDEA_AUTH.HAVEN_T_RECEIVED_CONFIRMATION_LINK' | translate }}\n </ion-button>\n <ion-button\n fill=\"clear\"\n expand=\"block\"\n class=\"smallCaseButton\"\n [title]=\"'IDEA_AUTH.BACK_TO_SIGN_IN_HINT' | translate\"\n (click)=\"goToAuth()\"\n >\n {{ 'IDEA_AUTH.BACK_TO_SIGN_IN' | translate }}\n </ion-button>\n </ion-card-content>\n </ion-card>\n </form>\n</ion-content>\n", styles: [".flexBox{background:var(--idea-auth-background-color, var(--ion-color-white-shade))}.authCard{min-width:400px;max-width:550px;margin:0 10px;padding:20px;background-color:var(--idea-auth-card-background-color, var(--ion-color-white));border:1px solid var(--idea-auth-card-border-color, var(--ion-color-light));border-radius:10px;box-shadow:none;text-align:center}.authCard ion-img{width:150px;display:block;margin:0 auto}.authCard ion-card-title{font-family:auth-title;font-size:3em}.authCard ion-card-subtitle{font-family:auth-title;font-size:1.2em}.authCard ion-card-content{padding-top:16px}.authCard ion-card-content .errorBox{padding-left:10px;margin-bottom:20px;text-align:left;border-left:2px solid var(--ion-color-danger)}.authCard ion-card-content ion-item{--ion-item-background: var(--idea-auth-card-background-color, var(--ion-color-white));--border-color: var(--idea-auth-card-border-color, var(--ion-color-light))}.authCard ion-card-content ion-label[position=inline] ion-icon{padding-top:4px;padding-right:5px;font-size:1.3em}.authCard ion-card-content .agreementsAcceptanceRow{margin-top:15px;font-size:.9em}.authCard ion-card-content .agreementsAcceptanceRow ion-checkbox{vertical-align:bottom;margin-right:3px}.authCard ion-card-content ion-button:not([slot=end]){margin-top:15px}.authCard ion-card-content .smallCaseButton{text-transform:none;letter-spacing:normal;font-size:1em}@media only screen and (max-width: 500px){.authCard{background-color:transparent;border:none}}.ideaLogo{width:65px;margin:40px auto 0;cursor:pointer}.passwordPolicyPopover{--width: 350px}\n"] }]
78
79
  }], ctorParameters: () => [{ type: i1.NavController }, { type: i1.PopoverController }, { type: i2.IDEAMessageService }, { type: i2.IDEALoadingService }, { type: i2.IDEATranslationsService }, { type: i3.IDEAAuthService }] });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblVwLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2F1dGgvc3JjL3NpZ25VcC5wYWdlLnRzIiwiLi4vLi4vLi4vLi4vbW9kdWxlcy9hdXRoL3NyYy9zaWduVXAucGFnZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUd2QyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUl6RSxPQUFPLEVBQUUsV0FBVyxJQUFJLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7O0FBT3RELE1BQU0sT0FBTyxjQUFjO0lBT3pCLFlBQ1UsT0FBc0IsRUFDdEIsV0FBOEIsRUFDOUIsT0FBMkIsRUFDM0IsT0FBMkIsRUFDM0IsQ0FBMEIsRUFDM0IsSUFBcUI7UUFMcEIsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQUN0QixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFDOUIsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsWUFBTyxHQUFQLE9BQU8sQ0FBb0I7UUFDM0IsTUFBQyxHQUFELENBQUMsQ0FBeUI7UUFDM0IsU0FBSSxHQUFKLElBQUksQ0FBaUI7UUFWOUIsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsbUJBQWMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFVM0MsQ0FBQztJQUNKLFFBQVE7UUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCO1lBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLGVBQWU7WUFDbEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMseUNBQXlDLENBQUMsSUFBSSxJQUFJLENB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bnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdkNvbnRyb2xsZXIsIFBvcG92ZXJDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2lkZWEtdG9vbGJveCc7XG5pbXBvcnQgeyBJREVBTWVzc2FnZVNlcnZpY2UsIElERUFMb2FkaW5nU2VydmljZSwgSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICdAaWRlYS1pb25pYy9jb21tb24nO1xuXG5pbXBvcnQgeyBJREVBUGFzc3dvcmRQb2xpY3lDb21wb25lbnQgfSBmcm9tICcuL3Bhc3N3b3JkUG9saWN5LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IElERUFBdXRoU2VydmljZSB9IGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcblxuaW1wb3J0IHsgZW52aXJvbm1lbnQgYXMgZW52IH0gZnJvbSAnQGVudi9lbnZpcm9ubWVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2lkZWEtc2lnbi11cCcsXG4gIHRlbXBsYXRlVXJsOiAnc2lnblVwLnBhZ2UuaHRtbCcsXG4gIHN0eWxlVXJsczogWydhdXRoLnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBJREVBU2lnblVwUGFnZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGVtYWlsOiBzdHJpbmc7XG4gIHBhc3N3b3JkOiBzdHJpbmc7XG4gIGFncmVlbWVudHNDaGVjayA9IGZhbHNlO1xuICBwYXNzd29yZFBvbGljeSA9IGVudi5pZGVhLmF1dGgucGFzc3dvcmRQb2xpY3k7XG4gIGVycm9yTXNnOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuYXZDdHJsOiBOYXZDb250cm9sbGVyLFxuICAgIHByaXZhdGUgcG9wb3ZlckN0cmw6IFBvcG92ZXJDb250cm9sbGVyLFxuICAgIHByaXZhdGUgbWVzc2FnZTogSURFQU1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9hZGluZzogSURFQUxvYWRpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdDogSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UsXG4gICAgcHVibGljIGF1dGg6IElERUFBdXRoU2VydmljZVxuICApIHt9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghZW52LmlkZWEuYXV0aC5yZWdpc3RyYXRpb25Jc1Bvc3NpYmxlKSByZXR1cm4gdGhpcy5nb1RvQXV0aCgpO1xuICAgIHRoaXMuYWdyZWVtZW50c0NoZWNrID1cbiAgICAgIHRoaXMudC5fKCdJREVBX1ZBUklBQkxFUy5URVJNU19BTkRfQ09ORElUSU9OU19VUkwnKSB8fCB0aGlzLnQuXygnSURFQV9WQVJJQUJMRVMuUFJJVkFDWV9QT0xJQ1lfVVJMJylcbiAgICAgICAgPyB0aGlzLmFncmVlbWVudHNDaGVja1xuICAgICAgICA6IHRydWU7XG4gIH1cblxuICBhc3luYyByZWdpc3RlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmVycm9yTXNnID0gbnVsbDtcbiAgICBpZiAoaXNFbXB0eSh0aGlzLmVtYWlsLCAnZW1haWwnKSkgdGhpcy5lcnJvck1zZyA9IHRoaXMudC5fKCdJREVBX0FVVEguVkFMSURfRU1BSUxfT0JMSUdBVE9SWScpO1xuICAgIGVsc2Uge1xuICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5hdXRoLnZhbGlkYXRlUGFzc3dvcmRBZ2FpbnN0UG9saWN5KHRoaXMucGFzc3dvcmQpO1xuICAgICAgaWYgKGVycm9ycy5sZW5ndGgpXG4gICAgICAgIHRoaXMuZXJyb3JNc2cgPSBbXG4gICAgICAgICAgdGhpcy50Ll8oJ0lERUFfQVVUSC5QQVNTV09SRF9SRVFVSVJFTUVOVFNfRk9MTE9XJyksXG4gICAgICAgICAgLi4uZXJyb3JzLm1hcCh4ID0+XG4gICAgICAgICAgICB0aGlzLnQuXygnSURFQV9BVVRILlBBU1NXT1JEX1JFUVVJUkVNRU5UUy4nLmNvbmNhdCh4KSwgeyBuOiB0aGlzLnBhc3N3b3JkUG9saWN5Lm1pbkxlbmd0aCB9KVxuICAgICAgICAgIClcbiAgICAgICAgXS5qb2luKCcgJyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVycm9yTXNnKSByZXR1cm4gdGhpcy5tZXNzYWdlLmVycm9yKCdJREVBX0FVVEguUkVHSVNUUkFUSU9OX0ZBSUxFRCcpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZGluZy5zaG93KCk7XG4gICAgICBhd2FpdCB0aGlzLmF1dGgucmVnaXN0ZXIodGhpcy5lbWFpbCwgdGhpcy5wYXNzd29yZCk7XG4gICAgICB0aGlzLm1lc3NhZ2Uuc3VjY2VzcygnSURFQV9BVVRILlJFR0lTVFJBVElPTl9DT01QTEVURUQnKTtcbiAgICAgIHRoaXMuZ29Ub0F1dGgoKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuZXJyb3JNc2cgPSAoZXJyIGFzIGFueSkubWVzc2FnZTtcbiAgICAgIHRoaXMubWVzc2FnZS5lcnJvcignSURFQV9BVVRILlJFR0lTVFJBVElPTl9GQUlMRUQnKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nLmhpZGUoKTtcbiAgICB9XG4gIH1cblxuICB0cmFuc2xhdGlvbkV4aXN0cyhrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMudC5fKGtleSk7XG4gIH1cblxuICBhc3luYyBvcGVuUGFzc3dvcmRQb2xpY3koZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3NzQ2xhc3MgPSAncGFzc3dvcmRQb2xpY3lQb3BvdmVyJztcbiAgICBjb25zdCBwb3BvdmVyID0gYXdhaXQgdGhpcy5wb3BvdmVyQ3RybC5jcmVhdGUoeyBjb21wb25lbnQ6IElERUFQYXNzd29yZFBvbGljeUNvbXBvbmVudCwgZXZlbnQsIGNzc0NsYXNzIH0pO1xuICAgIGF3YWl0IHBvcG92ZXIucHJlc2VudCgpO1xuICB9XG5cbiAgZ29Ub1Jlc2VuZExpbmsoKTogdm9pZCB7XG4gICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlRm9yd2FyZChbJ2F1dGgvcmVzZW5kLWxpbmsnXSk7XG4gIH1cbiAgZ29Ub0F1dGgoKTogdm9pZCB7XG4gICAgdGhpcy5uYXZDdHJsLm5hdmlnYXRlQmFjayhbJ2F1dGgnXSk7XG4gIH1cbn1cbiIsIjxpb24tY29udGVudD5cbiAgPGZvcm0gY2xhc3M9XCJmbGV4Qm94XCI+XG4gICAgPGlvbi1jYXJkIGNsYXNzPVwiYXV0aENhcmRcIj5cbiAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgIDxpb24tY2FyZC10aXRsZSBjb2xvcj1cInByaW1hcnlcIj57eyAnSURFQV9BVVRILk5FV19BQ0NPVU5UJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT57eyAnSURFQV9BVVRILlJFR0lTVEVSX0FfTkVXX0FDQ09VTlRfVE9fVEhFX1NZU1RFTScgfCB0cmFuc2xhdGUgfX08L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgPHAgY2xhc3M9XCJlcnJvckJveFwiICpuZ0lmPVwiZXJyb3JNc2dcIj5cbiAgICAgICAgICA8Yj4ge3sgJ0lERUFfQVVUSC5FUlJPUicgfCB0cmFuc2xhdGUgfX0uIDwvYj5cbiAgICAgICAgICB7eyBlcnJvck1zZyB9fVxuICAgICAgICA8L3A+XG4gICAgICAgIDxpb24taXRlbT5cbiAgICAgICAgICA8aW9uLWxhYmVsIHBvc2l0aW9uPVwiaW5saW5lXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cInBlcnNvbi1jaXJjbGVcIiBjb2xvcj1cInByaW1hcnlcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgIDxpb24taW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJlbWFpbFwiXG4gICAgICAgICAgICBpbnB1dG1vZGU9XCJlbWFpbFwiXG4gICAgICAgICAgICBwYXR0ZXJuPVwiW0EtWmEtejAtOS5fJSstXXsyLH1AW2EtekEtWi1fLl17Mix9Wy5dezF9W2EtekEtWl17Mix9XCJcbiAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgICBhdXRvY29ycmVjdD1cIm9mZlwiXG4gICAgICAgICAgICBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidJREVBX0FVVEguRU1BSUwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILlJFR0lTVFJBVElPTl9FTUFJTF9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlbWFpbFwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwicmVnaXN0ZXIoKVwiXG4gICAgICAgICAgPjwvaW9uLWlucHV0PlxuICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICA8aW9uLWl0ZW0+XG4gICAgICAgICAgPGlvbi1sYWJlbCBwb3NpdGlvbj1cImlubGluZVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJrZXlcIiBjb2xvcj1cInByaW1hcnlcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWxhYmVsPlxuICAgICAgICAgIDxpb24taW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICAgICAgICBzcGVsbGNoZWNrPVwiZmFsc2VcIlxuICAgICAgICAgICAgYXV0b2NvcnJlY3Q9XCJvZmZcIlxuICAgICAgICAgICAgYXV0b2NhcGl0YWxpemU9XCJvZmZcIlxuICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgIFtwYXR0ZXJuXT1cImF1dGguZ2V0UGFzc3dvcmRQb2xpY3lQYXR0ZXJuRm9ySW5wdXQoKVwiXG4gICAgICAgICAgICBbY2xlYXJPbkVkaXRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidJREVBX0FVVEguUEFTU1dPUkQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILkNIT09TRV9BX1BBU1NXT1JEJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJwYXNzd29yZFwiXG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwicmVnaXN0ZXIoKVwiXG4gICAgICAgICAgPjwvaW9uLWlucHV0PlxuICAgICAgICAgIDxpb24tYnV0dG9uIHNsb3Q9XCJlbmRcIiBmaWxsPVwiY2xlYXJcIiBjb2xvcj1cImRhcmtcIiAoY2xpY2spPVwib3BlblBhc3N3b3JkUG9saWN5KCRldmVudClcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBpY29uPVwiaGVscC1jaXJjbGUtb3V0bGluZVwiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPC9pb24taXRlbT5cbiAgICAgICAgPGlvbi1yb3dcbiAgICAgICAgICBjbGFzcz1cImFncmVlbWVudHNBY2NlcHRhbmNlUm93XCJcbiAgICAgICAgICAqbmdJZj1cInRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5URVJNU19BTkRfQ09ORElUSU9OU19VUkwnKSB8fCB0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuUFJJVkFDWV9QT0xJQ1lfVVJMJylcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICA8aW9uLWNoZWNrYm94XG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYWdyZWVtZW50c0NoZWNrXCJcbiAgICAgICAgICAgID48L2lvbi1jaGVja2JveD5cbiAgICAgICAgICAgIHt7ICdJREVBX0FVVEguQUdSRUVNRU5UU19DSEVDS19SRUdJU1RSQVRJT04nIHwgdHJhbnNsYXRlIH19OlxuICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgaW9uLXRleHRcbiAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJ0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuVEVSTVNfQU5EX0NPTkRJVElPTlNfVVJMJylcIlxuICAgICAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5URVJNU19BTkRfQ09ORElUSU9OU19ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgIFtocmVmXT1cIidJREVBX1ZBUklBQkxFUy5URVJNU19BTkRfQ09ORElUSU9OU19VUkwnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge3sgJ0lERUFfQVVUSC5URVJNU19BTkRfQ09ORElUSU9OUycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgIDxpb24tdGV4dFxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICB0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuUFJJVkFDWV9QT0xJQ1lfVVJMJykgJiYgdHJhbnNsYXRpb25FeGlzdHMoJ0lERUFfVkFSSUFCTEVTLlRFUk1TX0FORF9DT05ESVRJT05TX1VSTCcpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICZcbiAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBpb24tdGV4dFxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAqbmdJZj1cInRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5QUklWQUNZX1BPTElDWV9VUkwnKVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILlBSSVZBQ1lfUE9MSUNZX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2hyZWZdPVwiJ0lERUFfVkFSSUFCTEVTLlBSSVZBQ1lfUE9MSUNZX1VSTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnSURFQV9BVVRILlBSSVZBQ1lfUE9MSUNZJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPC9pb24tcm93PlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIGV4cGFuZD1cImJsb2NrXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIWFncmVlbWVudHNDaGVja1wiXG4gICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguQ1JFQVRFX0FOX0FDQ09VTlRfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIChjbGljayk9XCJyZWdpc3RlcigpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdJREVBX0FVVEguQ1JFQVRFX0FOX0FDQ09VTlQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgIGV4cGFuZD1cImJsb2NrXCJcbiAgICAgICAgICBjbGFzcz1cInNtYWxsQ2FzZUJ1dHRvblwiXG4gICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguSEFWRU5fVF9SRUNFSVZFRF9DT05GSVJNQVRJT05fTElOS19ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImdvVG9SZXNlbmRMaW5rKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ0lERUFfQVVUSC5IQVZFTl9UX1JFQ0VJVkVEX0NPTkZJUk1BVElPTl9MSU5LJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgZmlsbD1cImNsZWFyXCJcbiAgICAgICAgICBleHBhbmQ9XCJibG9ja1wiXG4gICAgICAgICAgY2xhc3M9XCJzbWFsbENhc2VCdXR0b25cIlxuICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILkJBQ0tfVE9fU0lHTl9JTl9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cImdvVG9BdXRoKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ0lERUFfQVVUSC5CQUNLX1RPX1NJR05fSU4nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICA8L2lvbi1jYXJkPlxuICA8L2Zvcm0+XG48L2lvbi1jb250ZW50PlxuIl19
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2lnblVwLnBhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9tb2R1bGVzL2F1dGgvc3JjL3NpZ25VcC5wYWdlLnRzIiwiLi4vLi4vLi4vLi4vbW9kdWxlcy9hdXRoL3NyYy9zaWduVXAucGFnZS5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBbUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV0SCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7Ozs7OztBQVN6RSxNQUFNLE9BQU8sY0FBYztJQVN6QixZQUNVLE9BQXNCLEVBQ3RCLFdBQThCLEVBQzlCLE9BQTJCLEVBQzNCLE9BQTJCLEVBQzNCLENBQTBCLEVBQzNCLElBQXFCO1FBTHBCLFlBQU8sR0FBUCxPQUFPLENBQWU7UUFDdEIsZ0JBQVcsR0FBWCxXQUFXLENBQW1CO1FBQzlCLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBQzNCLE1BQUMsR0FBRCxDQUFDLENBQXlCO1FBQzNCLFNBQUksR0FBSixJQUFJLENBQWlCO1FBZHBCLFFBQUcsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFJeEMsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFZdEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzFELENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0I7WUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN2RSxJQUFJLENBQUMsZUFBZTtZQUNsQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyx5Q0FBeUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1DQUFtQyxDQUFDO2dCQUNsRyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWU7Z0JBQ3RCLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDYixDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVE7UUFDWixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQztZQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUMsQ0FBQzthQUMxRixDQUFDO1lBQ0osTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdEUsSUFBSSxNQUFNLENBQUMsTUFBTTtnQkFDZixJQUFJLENBQUMsUUFBUSxHQUFHO29CQUNkLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLHdDQUF3QyxDQUFDO29CQUNsRCxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FDN0Y7aUJBQ0YsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFFOUUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDbEIsQ0FBQztRQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLENBQUMsUUFBUSxHQUFJLEdBQVcsQ0FBQyxPQUFPLENBQUM7WUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQztRQUN0RCxDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBVztRQUMzQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQVk7UUFDbkMsTUFBTSxRQUFRLEdBQUcsdUJBQXVCLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFNBQVMsRUFBRSwyQkFBMkIsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUMzRyxNQUFNLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFDRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7OEdBdEVVLGNBQWM7a0dBQWQsY0FBYyxvRENkM0IsMDFKQTJIQTs7MkZEN0dhLGNBQWM7a0JBTDFCLFNBQVM7K0JBQ0UsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5hdkNvbnRyb2xsZXIsIFBvcG92ZXJDb250cm9sbGVyIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2lkZWEtdG9vbGJveCc7XG5pbXBvcnQgeyBJREVBRW52aXJvbm1lbnQsIElERUFNZXNzYWdlU2VydmljZSwgSURFQUxvYWRpbmdTZXJ2aWNlLCBJREVBVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJ0BpZGVhLWlvbmljL2NvbW1vbic7XG5cbmltcG9ydCB7IElERUFQYXNzd29yZFBvbGljeUNvbXBvbmVudCB9IGZyb20gJy4vcGFzc3dvcmRQb2xpY3kuY29tcG9uZW50JztcblxuaW1wb3J0IHsgSURFQUF1dGhTZXJ2aWNlIH0gZnJvbSAnLi9hdXRoLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdpZGVhLXNpZ24tdXAnLFxuICB0ZW1wbGF0ZVVybDogJ3NpZ25VcC5wYWdlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnYXV0aC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgSURFQVNpZ25VcFBhZ2UgaW1wbGVtZW50cyBPbkluaXQge1xuICBwcm90ZWN0ZWQgZW52ID0gaW5qZWN0KElERUFFbnZpcm9ubWVudCk7XG5cbiAgZW1haWw6IHN0cmluZztcbiAgcGFzc3dvcmQ6IHN0cmluZztcbiAgYWdyZWVtZW50c0NoZWNrID0gZmFsc2U7XG4gIHBhc3N3b3JkUG9saWN5OiBhbnk7XG4gIGVycm9yTXNnOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBuYXZDdHJsOiBOYXZDb250cm9sbGVyLFxuICAgIHByaXZhdGUgcG9wb3ZlckN0cmw6IFBvcG92ZXJDb250cm9sbGVyLFxuICAgIHByaXZhdGUgbWVzc2FnZTogSURFQU1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9hZGluZzogSURFQUxvYWRpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdDogSURFQVRyYW5zbGF0aW9uc1NlcnZpY2UsXG4gICAgcHVibGljIGF1dGg6IElERUFBdXRoU2VydmljZVxuICApIHtcbiAgICB0aGlzLnBhc3N3b3JkUG9saWN5ID0gdGhpcy5lbnYuaWRlYS5hdXRoLnBhc3N3b3JkUG9saWN5O1xuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5lbnYuaWRlYS5hdXRoLnJlZ2lzdHJhdGlvbklzUG9zc2libGUpIHJldHVybiB0aGlzLmdvVG9BdXRoKCk7XG4gICAgdGhpcy5hZ3JlZW1lbnRzQ2hlY2sgPVxuICAgICAgdGhpcy50Ll8oJ0lERUFfVkFSSUFCTEVTLlRFUk1TX0FORF9DT05ESVRJT05TX1VSTCcpIHx8IHRoaXMudC5fKCdJREVBX1ZBUklBQkxFUy5QUklWQUNZX1BPTElDWV9VUkwnKVxuICAgICAgICA/IHRoaXMuYWdyZWVtZW50c0NoZWNrXG4gICAgICAgIDogdHJ1ZTtcbiAgfVxuXG4gIGFzeW5jIHJlZ2lzdGVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZXJyb3JNc2cgPSBudWxsO1xuICAgIGlmIChpc0VtcHR5KHRoaXMuZW1haWwsICdlbWFpbCcpKSB0aGlzLmVycm9yTXNnID0gdGhpcy50Ll8oJ0lERUFfQVVUSC5WQUxJRF9FTUFJTF9PQkxJR0FUT1JZJyk7XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmF1dGgudmFsaWRhdGVQYXNzd29yZEFnYWluc3RQb2xpY3kodGhpcy5wYXNzd29yZCk7XG4gICAgICBpZiAoZXJyb3JzLmxlbmd0aClcbiAgICAgICAgdGhpcy5lcnJvck1zZyA9IFtcbiAgICAgICAgICB0aGlzLnQuXygnSURFQV9BVVRILlBBU1NXT1JEX1JFUVVJUkVNRU5UU19GT0xMT1cnKSxcbiAgICAgICAgICAuLi5lcnJvcnMubWFwKHggPT5cbiAgICAgICAgICAgIHRoaXMudC5fKCdJREVBX0FVVEguUEFTU1dPUkRfUkVRVUlSRU1FTlRTLicuY29uY2F0KHgpLCB7IG46IHRoaXMucGFzc3dvcmRQb2xpY3kubWluTGVuZ3RoIH0pXG4gICAgICAgICAgKVxuICAgICAgICBdLmpvaW4oJyAnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZXJyb3JNc2cpIHJldHVybiB0aGlzLm1lc3NhZ2UuZXJyb3IoJ0lERUFfQVVUSC5SRUdJU1RSQVRJT05fRkFJTEVEJyk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkaW5nLnNob3coKTtcbiAgICAgIGF3YWl0IHRoaXMuYXV0aC5yZWdpc3Rlcih0aGlzLmVtYWlsLCB0aGlzLnBhc3N3b3JkKTtcbiAgICAgIHRoaXMubWVzc2FnZS5zdWNjZXNzKCdJREVBX0FVVEguUkVHSVNUUkFUSU9OX0NPTVBMRVRFRCcpO1xuICAgICAgdGhpcy5nb1RvQXV0aCgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5lcnJvck1zZyA9IChlcnIgYXMgYW55KS5tZXNzYWdlO1xuICAgICAgdGhpcy5tZXNzYWdlLmVycm9yKCdJREVBX0FVVEguUkVHSVNUUkFUSU9OX0ZBSUxFRCcpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmxvYWRpbmcuaGlkZSgpO1xuICAgIH1cbiAgfVxuXG4gIHRyYW5zbGF0aW9uRXhpc3RzKGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy50Ll8oa2V5KTtcbiAgfVxuXG4gIGFzeW5jIG9wZW5QYXNzd29yZFBvbGljeShldmVudDogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjc3NDbGFzcyA9ICdwYXNzd29yZFBvbGljeVBvcG92ZXInO1xuICAgIGNvbnN0IHBvcG92ZXIgPSBhd2FpdCB0aGlzLnBvcG92ZXJDdHJsLmNyZWF0ZSh7IGNvbXBvbmVudDogSURFQVBhc3N3b3JkUG9saWN5Q29tcG9uZW50LCBldmVudCwgY3NzQ2xhc3MgfSk7XG4gICAgYXdhaXQgcG9wb3Zlci5wcmVzZW50KCk7XG4gIH1cblxuICBnb1RvUmVzZW5kTGluaygpOiB2b2lkIHtcbiAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVGb3J3YXJkKFsnYXV0aC9yZXNlbmQtbGluayddKTtcbiAgfVxuICBnb1RvQXV0aCgpOiB2b2lkIHtcbiAgICB0aGlzLm5hdkN0cmwubmF2aWdhdGVCYWNrKFsnYXV0aCddKTtcbiAgfVxufVxuIiwiPGlvbi1jb250ZW50PlxuICA8Zm9ybSBjbGFzcz1cImZsZXhCb3hcIj5cbiAgICA8aW9uLWNhcmQgY2xhc3M9XCJhdXRoQ2FyZFwiPlxuICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgPGlvbi1jYXJkLXRpdGxlIGNvbG9yPVwicHJpbWFyeVwiPnt7ICdJREVBX0FVVEguTkVXX0FDQ09VTlQnIHwgdHJhbnNsYXRlIH19PC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPnt7ICdJREVBX0FVVEguUkVHSVNURVJfQV9ORVdfQUNDT1VOVF9UT19USEVfU1lTVEVNJyB8IHRyYW5zbGF0ZSB9fTwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICA8cCBjbGFzcz1cImVycm9yQm94XCIgKm5nSWY9XCJlcnJvck1zZ1wiPlxuICAgICAgICAgIDxiPiB7eyAnSURFQV9BVVRILkVSUk9SJyB8IHRyYW5zbGF0ZSB9fS4gPC9iPlxuICAgICAgICAgIHt7IGVycm9yTXNnIH19XG4gICAgICAgIDwvcD5cbiAgICAgICAgPGlvbi1pdGVtPlxuICAgICAgICAgIDxpb24tbGFiZWwgcG9zaXRpb249XCJpbmxpbmVcIj5cbiAgICAgICAgICAgIDxpb24taWNvbiBuYW1lPVwicGVyc29uLWNpcmNsZVwiIGNvbG9yPVwicHJpbWFyeVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPGlvbi1pbnB1dFxuICAgICAgICAgICAgdHlwZT1cImVtYWlsXCJcbiAgICAgICAgICAgIGlucHV0bW9kZT1cImVtYWlsXCJcbiAgICAgICAgICAgIHBhdHRlcm49XCJbQS1aYS16MC05Ll8lKy1dezIsfUBbYS16QS1aLV8uXXsyLH1bLl17MX1bYS16QS1aXXsyLH1cIlxuICAgICAgICAgICAgc3BlbGxjaGVjaz1cImZhbHNlXCJcbiAgICAgICAgICAgIGF1dG9jb3JyZWN0PVwib2ZmXCJcbiAgICAgICAgICAgIGF1dG9jYXBpdGFsaXplPVwib2ZmXCJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0lERUFfQVVUSC5FTUFJTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguUkVHSVNUUkFUSU9OX0VNQUlMX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVtYWlsXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJyZWdpc3RlcigpXCJcbiAgICAgICAgICA+PC9pb24taW5wdXQ+XG4gICAgICAgIDwvaW9uLWl0ZW0+XG4gICAgICAgIDxpb24taXRlbT5cbiAgICAgICAgICA8aW9uLWxhYmVsIHBvc2l0aW9uPVwiaW5saW5lXCI+XG4gICAgICAgICAgICA8aW9uLWljb24gbmFtZT1cImtleVwiIGNvbG9yPVwicHJpbWFyeVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPGlvbi1pbnB1dFxuICAgICAgICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgIHNwZWxsY2hlY2s9XCJmYWxzZVwiXG4gICAgICAgICAgICBhdXRvY29ycmVjdD1cIm9mZlwiXG4gICAgICAgICAgICBhdXRvY2FwaXRhbGl6ZT1cIm9mZlwiXG4gICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgW3BhdHRlcm5dPVwiYXV0aC5nZXRQYXNzd29yZFBvbGljeVBhdHRlcm5Gb3JJbnB1dCgpXCJcbiAgICAgICAgICAgIFtjbGVhck9uRWRpdF09XCJmYWxzZVwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ0lERUFfQVVUSC5QQVNTV09SRCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguQ0hPT1NFX0FfUEFTU1dPUkQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInBhc3N3b3JkXCJcbiAgICAgICAgICAgIChrZXl1cC5lbnRlcik9XCJyZWdpc3RlcigpXCJcbiAgICAgICAgICA+PC9pb24taW5wdXQ+XG4gICAgICAgICAgPGlvbi1idXR0b24gc2xvdD1cImVuZFwiIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJvcGVuUGFzc3dvcmRQb2xpY3koJGV2ZW50KVwiPlxuICAgICAgICAgICAgPGlvbi1pY29uIGljb249XCJoZWxwLWNpcmNsZS1vdXRsaW5lXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8L2lvbi1pdGVtPlxuICAgICAgICA8aW9uLXJvd1xuICAgICAgICAgIGNsYXNzPVwiYWdyZWVtZW50c0FjY2VwdGFuY2VSb3dcIlxuICAgICAgICAgICpuZ0lmPVwidHJhbnNsYXRpb25FeGlzdHMoJ0lERUFfVkFSSUFCTEVTLlRFUk1TX0FORF9DT05ESVRJT05TX1VSTCcpIHx8IHRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5QUklWQUNZX1BPTElDWV9VUkwnKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgIDxpb24tY2hlY2tib3hcbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJhZ3JlZW1lbnRzQ2hlY2tcIlxuICAgICAgICAgICAgPjwvaW9uLWNoZWNrYm94PlxuICAgICAgICAgICAge3sgJ0lERUFfQVVUSC5BR1JFRU1FTlRTX0NIRUNLX1JFR0lTVFJBVElPTicgfCB0cmFuc2xhdGUgfX06XG4gICAgICAgICAgICA8YVxuICAgICAgICAgICAgICBpb24tdGV4dFxuICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAqbmdJZj1cInRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5URVJNU19BTkRfQ09ORElUSU9OU19VUkwnKVwiXG4gICAgICAgICAgICAgIFt0aXRsZV09XCInSURFQV9BVVRILlRFUk1TX0FORF9DT05ESVRJT05TX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgW2hyZWZdPVwiJ0lERUFfVkFSSUFCTEVTLlRFUk1TX0FORF9DT05ESVRJT05TX1VSTCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyAnSURFQV9BVVRILlRFUk1TX0FORF9DT05ESVRJT05TJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPGlvbi10ZXh0XG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0aW9uRXhpc3RzKCdJREVBX1ZBUklBQkxFUy5QUklWQUNZX1BPTElDWV9VUkwnKSAmJiB0cmFuc2xhdGlvbkV4aXN0cygnSURFQV9WQVJJQUJMRVMuVEVSTVNfQU5EX0NPTkRJVElPTlNfVVJMJylcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJlxuICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGlvbi10ZXh0XG4gICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICpuZ0lmPVwidHJhbnNsYXRpb25FeGlzdHMoJ0lERUFfVkFSSUFCTEVTLlBSSVZBQ1lfUE9MSUNZX1VSTCcpXCJcbiAgICAgICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguUFJJVkFDWV9QT0xJQ1lfSElOVCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICBbaHJlZl09XCInSURFQV9WQVJJQUJMRVMuUFJJVkFDWV9QT0xJQ1lfVVJMJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7ICdJREVBX0FVVEguUFJJVkFDWV9QT0xJQ1knIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhYWdyZWVtZW50c0NoZWNrXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5DUkVBVEVfQU5fQUNDT1VOVF9ISU5UJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgKGNsaWNrKT1cInJlZ2lzdGVyKClcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ0lERUFfQVVUSC5DUkVBVEVfQU5fQUNDT1VOVCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICA8aW9uLWJ1dHRvblxuICAgICAgICAgIGZpbGw9XCJjbGVhclwiXG4gICAgICAgICAgZXhwYW5kPVwiYmxvY2tcIlxuICAgICAgICAgIGNsYXNzPVwic21hbGxDYXNlQnV0dG9uXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0lERUFfQVVUSC5IQVZFTl9UX1JFQ0VJVkVEX0NPTkZJUk1BVElPTl9MSU5LX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAoY2xpY2spPVwiZ29Ub1Jlc2VuZExpbmsoKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnSURFQV9BVVRILkhBVkVOX1RfUkVDRUlWRURfQ09ORklSTUFUSU9OX0xJTksnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICBmaWxsPVwiY2xlYXJcIlxuICAgICAgICAgIGV4cGFuZD1cImJsb2NrXCJcbiAgICAgICAgICBjbGFzcz1cInNtYWxsQ2FzZUJ1dHRvblwiXG4gICAgICAgICAgW3RpdGxlXT1cIidJREVBX0FVVEguQkFDS19UT19TSUdOX0lOX0hJTlQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAoY2xpY2spPVwiZ29Ub0F1dGgoKVwiXG4gICAgICAgID5cbiAgICAgICAgICB7eyAnSURFQV9BVVRILkJBQ0tfVE9fU0lHTl9JTicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgIDwvaW9uLWNhcmQ+XG4gIDwvZm9ybT5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component, EventEmitter, Input, Output, NgModule } from '@angular/core';
2
+ import { inject, Injectable, Component, EventEmitter, Input, Output, NgModule } from '@angular/core';
3
3
  import * as i4 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
5
  import * as i5 from '@angular/forms';
@@ -9,17 +9,12 @@ import { IonicModule } from '@ionic/angular';
9
9
  import * as i2$1 from '@angular/router';
10
10
  import { RouterModule } from '@angular/router';
11
11
  import * as i2 from '@idea-ionic/common';
12
- import { IDEATranslationsModule } from '@idea-ionic/common';
12
+ import { IDEAEnvironment, IDEATranslationsModule } from '@idea-ionic/common';
13
13
  import { Browser } from '@capacitor/browser';
14
14
  import { CognitoUserPool, AuthenticationDetails, CognitoUser, CognitoUserAttribute, CognitoRefreshToken } from 'amazon-cognito-identity-js';
15
- import { environment } from '@env/environment';
16
15
  import { isEmpty } from 'idea-toolbox';
17
16
  import { toCanvas } from 'qrcode';
18
17
 
19
- /**
20
- * The name of the Cognito's user attribute which contains the key of the last device to login in this project.
21
- */
22
- const DEVICE_KEY_ATTRIBUTE = 'custom:'.concat(environment.idea.project);
23
18
  /**
24
19
  * Cognito wrapper to manage the authentication flow.
25
20
  *
@@ -28,12 +23,14 @@ const DEVICE_KEY_ATTRIBUTE = 'custom:'.concat(environment.idea.project);
28
23
  class IDEAAuthService {
29
24
  constructor(storage) {
30
25
  this.storage = storage;
31
- this.mfaProjectName = environment.idea.app.title ?? environment.idea.project;
32
- this.passwordPolicy = environment.idea.auth.passwordPolicy;
26
+ this.env = inject(IDEAEnvironment);
27
+ this.deviceKeyAttribute = 'custom:'.concat(this.env.idea.project);
33
28
  this.userPool = new CognitoUserPool({
34
- UserPoolId: environment.aws.cognito.userPoolId,
35
- ClientId: environment.aws.cognito.userPoolClientId
29
+ UserPoolId: this.env.aws.cognito.userPoolId,
30
+ ClientId: this.env.aws.cognito.userPoolClientId
36
31
  });
32
+ this.mfaProjectName = this.env.idea.auth.title ?? this.env.idea.project;
33
+ this.passwordPolicy = this.env.idea.auth.passwordPolicy;
37
34
  }
38
35
  /**
39
36
  * Prepare the necessary structure to get authorized in Cognito.
@@ -60,7 +57,7 @@ class IDEAAuthService {
60
57
  return new Promise((resolve, reject) => {
61
58
  const user = this.prepareCognitoUser(username);
62
59
  user.authenticateUser(this.prepareAuthDetails(username, password), {
63
- onSuccess: () => resolve(environment.idea.auth.forceLoginWithMFA ? LoginOutcomeActions.MFA_SETUP : LoginOutcomeActions.NONE),
60
+ onSuccess: () => resolve(this.env.idea.auth.forceLoginWithMFA ? LoginOutcomeActions.MFA_SETUP : LoginOutcomeActions.NONE),
64
61
  onFailure: (err) => reject(err),
65
62
  newPasswordRequired: () => {
66
63
  this.challengeUsername = username;
@@ -177,7 +174,7 @@ class IDEAAuthService {
177
174
  if (err)
178
175
  return resolve();
179
176
  // if a reference to the device was saved, forget it
180
- if (environment.idea.auth.singleSimultaneousSession)
177
+ if (this.env.idea.auth.singleSimultaneousSession)
181
178
  await this.setCurrentDeviceForProject(null);
182
179
  // sign-out from the pool (terminate the current session or all the sessions)
183
180
  if (options.global)
@@ -305,7 +302,7 @@ class IDEAAuthService {
305
302
  if (err)
306
303
  return reject(err);
307
304
  const isMFAEnabled = !!(data.UserMFASettingList && data.UserMFASettingList.includes('SOFTWARE_TOKEN_MFA'));
308
- if (!isMFAEnabled && environment.idea.auth.forceLoginWithMFA)
305
+ if (!isMFAEnabled && this.env.idea.auth.forceLoginWithMFA)
309
306
  return reject(new Error(LoginOutcomeActions.MFA_SETUP));
310
307
  user.getUserAttributes((e, attributes) => {
311
308
  if (e)
@@ -375,7 +372,7 @@ class IDEAAuthService {
375
372
  if (isRobot)
376
373
  return callback(new Error('ROBOT_USER'));
377
374
  // in case the project limits each account to only one simultaneous session, run a check
378
- if (environment.idea.auth.singleSimultaneousSession)
375
+ if (this.env.idea.auth.singleSimultaneousSession)
379
376
  return this.checkForSimultaneousSessions(userDetails, callback);
380
377
  // otherwise, we're done
381
378
  callback();
@@ -392,7 +389,7 @@ class IDEAAuthService {
392
389
  await this.storage.set('AuthDeviceKey', currentDeviceKey);
393
390
  }
394
391
  // check whether the last device to sign-into this project (if any) is the current one
395
- const lastDeviceToSignIntoThisProject = userDetails[DEVICE_KEY_ATTRIBUTE];
392
+ const lastDeviceToSignIntoThisProject = userDetails[this.deviceKeyAttribute];
396
393
  // if it's the first user's device to sign-in, save the reference in Cognito and resolve
397
394
  if (!lastDeviceToSignIntoThisProject) {
398
395
  this.setCurrentDeviceForProject(currentDeviceKey)
@@ -412,7 +409,7 @@ class IDEAAuthService {
412
409
  setCurrentDeviceForProject(deviceKey) {
413
410
  const attributes = {};
414
411
  // note: an empty string will remove the attribute from Cognito
415
- attributes[DEVICE_KEY_ATTRIBUTE] = deviceKey || '';
412
+ attributes[this.deviceKeyAttribute] = deviceKey || '';
416
413
  return this.updateUserAttributes(attributes);
417
414
  }
418
415
  /**
@@ -497,13 +494,14 @@ class IDEASignInPage {
497
494
  this.loading = loading;
498
495
  this.t = t;
499
496
  this.auth = auth;
500
- this.title = environment.idea.app.title;
501
- this.registrationPossible = environment.idea.auth.registrationIsPossible;
502
- this.hasIntroPage = environment.idea.app.hasIntroPage;
503
- this.website = environment.idea.website;
497
+ this.env = inject(IDEAEnvironment);
504
498
  this.agreementsCheck = true;
505
499
  this.newAccountRegistered = false;
506
500
  this.darkMode = window.matchMedia('(prefers-color-scheme: dark)').matches;
501
+ this.title = this.env.idea.auth.title;
502
+ this.registrationPossible = this.env.idea.auth.registrationIsPossible;
503
+ this.hasIntroPage = this.env.idea.auth.hasIntroPage;
504
+ this.website = this.env.idea.auth.website;
507
505
  }
508
506
  ionViewDidEnter() {
509
507
  // manage the scenario in which we just created a new account (show a explanatory message: email must be confirmed)
@@ -564,7 +562,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.0", ngImpor
564
562
 
565
563
  class IDEAPasswordPolicyComponent {
566
564
  constructor() {
567
- this.passwordPolicy = environment.idea.auth.passwordPolicy;
565
+ this.env = inject(IDEAEnvironment);
566
+ this.passwordPolicy = this.env.idea.auth.passwordPolicy;
568
567
  }
569
568
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.0", ngImport: i0, type: IDEAPasswordPolicyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
570
569
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.0", type: IDEAPasswordPolicyComponent, selector: "idea-password-policy", ngImport: i0, template: `
@@ -628,11 +627,12 @@ class IDEASignUpPage {
628
627
  this.loading = loading;
629
628
  this.t = t;
630
629
  this.auth = auth;
630
+ this.env = inject(IDEAEnvironment);
631
631
  this.agreementsCheck = false;
632
- this.passwordPolicy = environment.idea.auth.passwordPolicy;
632
+ this.passwordPolicy = this.env.idea.auth.passwordPolicy;
633
633
  }
634
634
  ngOnInit() {
635
- if (!environment.idea.auth.registrationIsPossible)
635
+ if (!this.env.idea.auth.registrationIsPossible)
636
636
  return this.goToAuth();
637
637
  this.agreementsCheck =
638
638
  this.t._('IDEA_VARIABLES.TERMS_AND_CONDITIONS_URL') || this.t._('IDEA_VARIABLES.PRIVACY_POLICY_URL')
@@ -697,7 +697,8 @@ class IDEANewPasswordPage {
697
697
  this.loading = loading;
698
698
  this.t = t;
699
699
  this.auth = auth;
700
- this.passwordPolicy = environment.idea.auth.passwordPolicy;
700
+ this.env = inject(IDEAEnvironment);
701
+ this.passwordPolicy = this.env.idea.auth.passwordPolicy;
701
702
  }
702
703
  ngOnInit() {
703
704
  if (!this.auth.challengeUsername)
@@ -826,7 +827,8 @@ class IDEAConfirmPasswordPage {
826
827
  this.loading = loading;
827
828
  this.t = t;
828
829
  this.auth = auth;
829
- this.passwordPolicy = environment.idea.auth.passwordPolicy;
830
+ this.env = inject(IDEAEnvironment);
831
+ this.passwordPolicy = this.env.idea.auth.passwordPolicy;
830
832
  }
831
833
  ngOnInit() {
832
834
  this.email = this.route.snapshot.queryParamMap.get('email') ?? null;