@sumaris-net/ngx-components 18.5.4-alpha4 → 18.5.5
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/doc/changelog.md +7 -0
- package/esm2022/src/app/core/account/account.page.mjs +1 -1
- package/esm2022/src/app/core/form/entity/entity-editor.class.mjs +2 -1
- package/esm2022/src/app/core/home/home.mjs +2 -2
- package/esm2022/src/app/core/install/install-upgrade-card.component.mjs +9 -5
- package/esm2022/src/app/shared/audio/audio.mjs +9 -3
- package/fesm2022/sumaris-net.ngx-components.mjs +18 -7
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/install/install-upgrade-card.component.d.ts +3 -2
- package/src/app/shared/audio/audio.d.ts +1 -0
- package/src/assets/manifest.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, Inject, Input } from '@angular/core';
|
|
2
|
-
import { from, Subscription } from 'rxjs';
|
|
2
|
+
import { firstValueFrom, from, Subscription } from 'rxjs';
|
|
3
3
|
import { debounceTime, distinctUntilChanged, filter, map, switchMap } from 'rxjs/operators';
|
|
4
4
|
import { CORE_CONFIG_OPTIONS } from '../services/config/core.config';
|
|
5
5
|
import { VersionUtils } from '../../shared/version/versions';
|
|
@@ -40,6 +40,7 @@ export class AppInstallUpgradeCard {
|
|
|
40
40
|
showUpgradeWarning = true;
|
|
41
41
|
showOfflineWarning = true;
|
|
42
42
|
showInstallButton = false;
|
|
43
|
+
debug;
|
|
43
44
|
constructor(configService, toastController, alertController, translate, cd, platform, network, environment) {
|
|
44
45
|
this.configService = configService;
|
|
45
46
|
this.toastController = toastController;
|
|
@@ -49,6 +50,7 @@ export class AppInstallUpgradeCard {
|
|
|
49
50
|
this.platform = platform;
|
|
50
51
|
this.network = network;
|
|
51
52
|
this.environment = environment;
|
|
53
|
+
this.debug = !environment.production;
|
|
52
54
|
}
|
|
53
55
|
ngOnInit() {
|
|
54
56
|
this.offline = this.network.offline;
|
|
@@ -315,7 +317,7 @@ export class AppInstallUpgradeCard {
|
|
|
315
317
|
else {
|
|
316
318
|
console.info(`[install-upgrade-card] Platform is already downloading!`);
|
|
317
319
|
}
|
|
318
|
-
const location = await job
|
|
320
|
+
const location = await firstValueFrom(job);
|
|
319
321
|
if (location) {
|
|
320
322
|
console.info('[install-upgrade-card] File downloaded at: ' + location);
|
|
321
323
|
this.showDownloadCompleteDialog();
|
|
@@ -370,11 +372,11 @@ export class AppInstallUpgradeCard {
|
|
|
370
372
|
await Toasts.show(this.toastController, this.translate, opts);
|
|
371
373
|
}
|
|
372
374
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppInstallUpgradeCard, deps: [{ token: i1.ConfigService }, { token: i2.ToastController }, { token: i2.AlertController }, { token: i3.TranslateService }, { token: i0.ChangeDetectorRef }, { token: i4.PlatformService }, { token: i5.NetworkService }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component });
|
|
373
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppInstallUpgradeCard, selector: "app-install-upgrade-card", inputs: { isLogin: "isLogin", showUpgradeWarning: "showUpgradeWarning", showOfflineWarning: "showOfflineWarning", showInstallButton: "showInstallButton" }, ngImport: i0, template: "<!-- Offline mode card-->\n<ion-card\n *ngIf=\"showOfflineWarning && ((!loading && offline) || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n @if (waitingNetwork) {\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT' | translate\"></ion-text>\n } @else {\n <ion-text class=\"ion-text-wrap\">\n <h4>\n @if (isLogin) {\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED' | translate\"></b>\n } @else {\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE' | translate\"></b>\n }\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP' | translate\"></small>\n </h3>\n </ion-text>\n }\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-items-end\">\n <!-- Retry button -->\n @if (waitingNetwork) {\n <ion-spinner color=\"light\"></ion-spinner>\n } @else {\n <ion-button color=\"tertiary\" class=\"ion-float-end\" (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n }\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card\n *ngIf=\"showUpgradeWarning && !loading && !offline && upgradeLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of upgradeLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n @if (link.version) {\n <span [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION' | translate: link\"></span>\n } @else {\n <span [innerHTML]=\"'INFO.UPDATE_APP' | translate: link\"></span>\n }\n </h3>\n <h4>\n @if (last) {\n <small [innerHTML]=\"'INFO.UPDATE_APP_HELP' | translate\"></small>\n }\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card\n *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col size=\"12\" size-sm=\"8\">\n <ion-text class=\"ion-text-wrap\">\n <h3\n [innerHTML]=\"\n 'INFO.DOWNLOAD_APP_TITLE' | translate: { name: link.name, platform: getPlatformName(link.platform) }\n \"\n ></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP' | translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n @if (link.filename) {\n @if (hasDownloader) {\n <!-- Download using platform -->\n @if (!link.location) {\n <ion-button\n (click)=\"download($event, asLink(link))\"\n [disabled]=\"link.downloading\"\n color=\"tertiary\"\n class=\"ion-float-end\"\n >\n <ion-icon slot=\"start\" *ngIf=\"!link.downloading\" name=\"download\"></ion-icon>\n <ion-spinner slot=\"start\" class=\"ion-no-padding\" *ngIf=\"link.downloading\"></ion-spinner>\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n } @else {\n <!-- Open APK button -->\n <ion-button (click)=\"openFile($event, link)\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_INSTALL</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web download button -->\n <ion-button [download]=\"link.filename\" [href]=\"link.url\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web redirect button -->\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n }\n</ng-template>\n", styles: ["ion-text small{font-size:85%}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], animations: [slideUpDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
375
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AppInstallUpgradeCard, selector: "app-install-upgrade-card", inputs: { isLogin: "isLogin", showUpgradeWarning: "showUpgradeWarning", showOfflineWarning: "showOfflineWarning", showInstallButton: "showInstallButton", debug: "debug" }, ngImport: i0, template: "<!-- Offline mode card-->\n<ion-card\n *ngIf=\"showOfflineWarning && ((!loading && offline) || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n @if (waitingNetwork) {\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT' | translate\"></ion-text>\n } @else {\n <ion-text class=\"ion-text-wrap\">\n <h4>\n @if (isLogin) {\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED' | translate\"></b>\n } @else {\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE' | translate\"></b>\n }\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP' | translate\"></small>\n </h3>\n </ion-text>\n }\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-items-end\">\n <!-- Retry button -->\n @if (waitingNetwork) {\n <ion-spinner color=\"light\"></ion-spinner>\n } @else {\n <ion-button color=\"tertiary\" class=\"ion-float-end\" (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n }\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card\n *ngIf=\"showUpgradeWarning && !loading && !offline && upgradeLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of upgradeLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n @if (link.version) {\n <span [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION' | translate: link\"></span>\n } @else {\n <span [innerHTML]=\"'INFO.UPDATE_APP' | translate: link\"></span>\n }\n </h3>\n <h4>\n @if (last) {\n <small [innerHTML]=\"'INFO.UPDATE_APP_HELP' | translate\"></small>\n }\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card\n *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col size=\"12\" size-sm=\"8\">\n <ion-text class=\"ion-text-wrap\">\n <h3\n [innerHTML]=\"\n 'INFO.DOWNLOAD_APP_TITLE' | translate: { name: link.name, platform: getPlatformName(link.platform) }\n \"\n ></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP' | translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n @if (link.filename) {\n @if (hasDownloader) {\n <!-- Download using platform -->\n @if (!link.location) {\n <ion-button\n (click)=\"download($event, asLink(link))\"\n [disabled]=\"link.downloading\"\n color=\"tertiary\"\n class=\"ion-float-end\"\n >\n <ion-icon slot=\"start\" *ngIf=\"!link.downloading\" name=\"download\"></ion-icon>\n <ion-spinner slot=\"start\" class=\"ion-no-padding\" *ngIf=\"link.downloading\"></ion-spinner>\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n } @else {\n <!-- Open APK button -->\n <ion-button (click)=\"openFile($event, link)\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_INSTALL</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web download button -->\n <ion-button [download]=\"link.filename\" [href]=\"link.url\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web redirect button -->\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n @if (debug) {\n <ion-note>{{ link.url }}</ion-note>\n }\n }\n</ng-template>\n", styles: ["ion-text small{font-size:85%}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonNote, selector: "ion-note", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], animations: [slideUpDownAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
374
376
|
}
|
|
375
377
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AppInstallUpgradeCard, decorators: [{
|
|
376
378
|
type: Component,
|
|
377
|
-
args: [{ selector: 'app-install-upgrade-card', changeDetection: ChangeDetectionStrategy.OnPush, animations: [slideUpDownAnimation], template: "<!-- Offline mode card-->\n<ion-card\n *ngIf=\"showOfflineWarning && ((!loading && offline) || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n @if (waitingNetwork) {\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT' | translate\"></ion-text>\n } @else {\n <ion-text class=\"ion-text-wrap\">\n <h4>\n @if (isLogin) {\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED' | translate\"></b>\n } @else {\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE' | translate\"></b>\n }\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP' | translate\"></small>\n </h3>\n </ion-text>\n }\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-items-end\">\n <!-- Retry button -->\n @if (waitingNetwork) {\n <ion-spinner color=\"light\"></ion-spinner>\n } @else {\n <ion-button color=\"tertiary\" class=\"ion-float-end\" (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n }\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card\n *ngIf=\"showUpgradeWarning && !loading && !offline && upgradeLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of upgradeLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n @if (link.version) {\n <span [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION' | translate: link\"></span>\n } @else {\n <span [innerHTML]=\"'INFO.UPDATE_APP' | translate: link\"></span>\n }\n </h3>\n <h4>\n @if (last) {\n <small [innerHTML]=\"'INFO.UPDATE_APP_HELP' | translate\"></small>\n }\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card\n *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col size=\"12\" size-sm=\"8\">\n <ion-text class=\"ion-text-wrap\">\n <h3\n [innerHTML]=\"\n 'INFO.DOWNLOAD_APP_TITLE' | translate: { name: link.name, platform: getPlatformName(link.platform) }\n \"\n ></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP' | translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n @if (link.filename) {\n @if (hasDownloader) {\n <!-- Download using platform -->\n @if (!link.location) {\n <ion-button\n (click)=\"download($event, asLink(link))\"\n [disabled]=\"link.downloading\"\n color=\"tertiary\"\n class=\"ion-float-end\"\n >\n <ion-icon slot=\"start\" *ngIf=\"!link.downloading\" name=\"download\"></ion-icon>\n <ion-spinner slot=\"start\" class=\"ion-no-padding\" *ngIf=\"link.downloading\"></ion-spinner>\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n } @else {\n <!-- Open APK button -->\n <ion-button (click)=\"openFile($event, link)\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_INSTALL</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web download button -->\n <ion-button [download]=\"link.filename\" [href]=\"link.url\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web redirect button -->\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n }\n</ng-template>\n", styles: ["ion-text small{font-size:85%}\n"] }]
|
|
379
|
+
args: [{ selector: 'app-install-upgrade-card', changeDetection: ChangeDetectionStrategy.OnPush, animations: [slideUpDownAnimation], template: "<!-- Offline mode card-->\n<ion-card\n *ngIf=\"showOfflineWarning && ((!loading && offline) || waitingNetwork)\"\n color=\"accent\"\n class=\"main ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row>\n <ion-col>\n @if (waitingNetwork) {\n <ion-text class=\"ion-text-wrap\" [innerHTML]=\"'NETWORK.INFO.RETRY_TO_CONNECT' | translate\"></ion-text>\n } @else {\n <ion-text class=\"ion-text-wrap\">\n <h4>\n @if (isLogin) {\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE_OR_UNAUTHORIZED' | translate\"></b>\n } @else {\n <b [innerHTML]=\"'NETWORK.INFO.OFFLINE' | translate\"></b>\n }\n </h4>\n <h3>\n <small [innerHTML]=\"'NETWORK.INFO.OFFLINE_HELP' | translate\"></small>\n </h3>\n </ion-text>\n }\n </ion-col>\n <ion-col size=\"auto\" class=\"ion-align-items-end\">\n <!-- Retry button -->\n @if (waitingNetwork) {\n <ion-spinner color=\"light\"></ion-spinner>\n } @else {\n <ion-button color=\"tertiary\" class=\"ion-float-end\" (click)=\"tryOnline()\">\n <span translate>NETWORK.BTN_CHECK_ALIVE</span>\n </ion-button>\n }\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Upgrade links -->\n<ion-card\n *ngIf=\"showUpgradeWarning && !loading && !offline && upgradeLinks\"\n color=\"accent\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of upgradeLinks; last as last\">\n <ion-col>\n <ion-text class=\"ion-text-wrap\">\n <h3>\n @if (link.version) {\n <span [innerHTML]=\"'INFO.UPDATE_APP_TO_VERSION' | translate: link\"></span>\n } @else {\n <span [innerHTML]=\"'INFO.UPDATE_APP' | translate: link\"></span>\n }\n </h3>\n <h4>\n @if (last) {\n <small [innerHTML]=\"'INFO.UPDATE_APP_HELP' | translate\"></small>\n }\n </h4>\n </ion-text>\n </ion-col>\n\n <ion-col size=\"auto\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Install links -->\n<ion-card\n *ngIf=\"showInstallButton && !loading && !offline && installLinks\"\n color=\"secondary\"\n class=\"ion-no-margin\"\n @slideUpDownAnimation\n>\n <ion-card-content class=\"ion-no-padding\">\n <ion-grid>\n <ion-row *ngFor=\"let link of installLinks; last as last\">\n <ion-col size=\"12\" size-sm=\"8\">\n <ion-text class=\"ion-text-wrap\">\n <h3\n [innerHTML]=\"\n 'INFO.DOWNLOAD_APP_TITLE' | translate: { name: link.name, platform: getPlatformName(link.platform) }\n \"\n ></h3>\n <h4><small *ngIf=\"last\" [innerHTML]=\"'INFO.DOWNLOAD_APP_HELP' | translate\"></small></h4>\n </ion-text>\n </ion-col>\n <ion-col size=\"12\" size-sm=\"4\">\n <ng-container *ngTemplateOutlet=\"downloadButton; context: { $implicit: link }\"></ng-container>\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n</ion-card>\n\n<!-- Display a download button, depending on the link URL, and the device platform -->\n<ng-template #downloadButton let-link>\n @if (link.filename) {\n @if (hasDownloader) {\n <!-- Download using platform -->\n @if (!link.location) {\n <ion-button\n (click)=\"download($event, asLink(link))\"\n [disabled]=\"link.downloading\"\n color=\"tertiary\"\n class=\"ion-float-end\"\n >\n <ion-icon slot=\"start\" *ngIf=\"!link.downloading\" name=\"download\"></ion-icon>\n <ion-spinner slot=\"start\" class=\"ion-no-padding\" *ngIf=\"link.downloading\"></ion-spinner>\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n } @else {\n <!-- Open APK button -->\n <ion-button (click)=\"openFile($event, link)\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_INSTALL</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web download button -->\n <ion-button [download]=\"link.filename\" [href]=\"link.url\" color=\"tertiary\" class=\"ion-float-end\">\n <ion-label translate>COMMON.BTN_DOWNLOAD</ion-label>\n </ion-button>\n }\n } @else {\n <!-- Web redirect button -->\n <ion-button [href]=\"link.url\" rel=\"external\" color=\"tertiary\" class=\"ion-float-end\" target=\"_blank\">\n <ion-label translate>COMMON.BTN_SHOW_MORE</ion-label>\n </ion-button>\n @if (debug) {\n <ion-note>{{ link.url }}</ion-note>\n }\n }\n</ng-template>\n", styles: ["ion-text small{font-size:85%}\n"] }]
|
|
378
380
|
}], ctorParameters: () => [{ type: i1.ConfigService }, { type: i2.ToastController }, { type: i2.AlertController }, { type: i3.TranslateService }, { type: i0.ChangeDetectorRef }, { type: i4.PlatformService }, { type: i5.NetworkService }, { type: i7.Environment, decorators: [{
|
|
379
381
|
type: Inject,
|
|
380
382
|
args: [ENVIRONMENT]
|
|
@@ -386,5 +388,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
386
388
|
type: Input
|
|
387
389
|
}], showInstallButton: [{
|
|
388
390
|
type: Input
|
|
391
|
+
}], debug: [{
|
|
392
|
+
type: Input
|
|
389
393
|
}] } });
|
|
390
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFeEgsT0FBTyxFQUFFLElBQUksRUFBYyxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTVGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pHLE9BQU8sRUFBZSxXQUFXLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQW9CLE1BQU0sRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDekQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDZCQUE2QixDQUFD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QUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEUsQ0FBQzt3R0FoWlUscUJBQXFCLDJPQXdCdEIsV0FBVzs0RkF4QlYscUJBQXFCLDROQ3hDbEMsaS9KQTZJQSxpbUVEdkdjLENBQUMsb0JBQW9CLENBQUM7OzRGQUV2QixxQkFBcUI7a0JBUGpDLFNBQVM7K0JBQ0UsMEJBQTBCLG1CQUduQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLENBQUMsb0JBQW9CLENBQUM7OzBCQTBCL0IsTUFBTTsyQkFBQyxXQUFXO3lDQWJaLE9BQU87c0JBQWYsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IGZyb20sIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL2NvbmZpZy5tb2RlbCc7XG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGxhdGZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvcGxhdGZvcm0uc2VydmljZSc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTmV0d29ya1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ09SRV9DT05GSUdfT1BUSU9OUyB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy9jb3JlLmNvbmZpZyc7XG5pbXBvcnQgeyBWZXJzaW9uVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdmVyc2lvbi92ZXJzaW9ucyc7XG5pbXBvcnQgeyBzbGlkZVVwRG93bkFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9tYXRlcmlhbC9tYXRlcmlhbC5hbmltYXRpb25zJztcbmltcG9ydCB7IGlzTmlsT3JCbGFuaywgaXNOb3RFbXB0eUFycmF5LCBpc05vdE5pbCwgaXNOb3ROaWxPckJsYW5rLCBzbGVlcCB9IGZyb20gJy4uLy4uL3NoYXJlZC9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgRW52aXJvbm1lbnQsIEVOVklST05NRU5UIH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7IFNob3dUb2FzdE9wdGlvbnMsIFRvYXN0cyB9IGZyb20gJy4uLy4uL3NoYXJlZC90b2FzdC90b2FzdHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgUGVlciB9IGZyb20gJy4uL3NlcnZpY2VzL21vZGVsL3BlZXIubW9kZWwnO1xuaW1wb3J0IHsgTWltZVR5cGVzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ZpbGUvZmlsZS51dGlscyc7XG5pbXBvcnQgeyBVcmlVdGlscyB9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL3VyaS51dGlscyc7XG5pbXBvcnQgeyBpc0FuZHJvaWQsIGlzSU9TIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5cbmV4cG9ydCBkZWNsYXJlIGludGVyZmFjZSBJbnN0YWxsQXBwTGluayB7XG4gIG5hbWU6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIHBsYXRmb3JtPzogJ2FuZHJvaWQnIHwgJ2lvcycgfCAnZWxlY3Ryb24nO1xuICB2ZXJzaW9uPzogc3RyaW5nO1xuICBmaWxlbmFtZT86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBtaW1lVHlwZT86IHN0cmluZztcbiAgZG93bmxvYWRpbmc/OiBib29sZWFuO1xuICBsb2NhdGlvbj86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWluc3RhbGwtdXBncmFkZS1jYXJkJyxcbiAgdGVtcGxhdGVVcmw6ICdpbnN0YWxsLXVwZ3JhZGUtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2luc3RhbGwtdXBncmFkZS1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBhbmltYXRpb25zOiBbc2xpZGVVcERvd25BbmltYXRpb25dLFxufSlcbmV4cG9ydCBjbGFzcyBBcHBJbnN0YWxsVXBncmFkZUNhcmQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICBsb2FkaW5nID0gdHJ1ZTtcbiAgaGFzRG93bmxvYWRlciA9IGZhbHNlO1xuICBkb3dubG9hZGluZyA9IGZhbHNlO1xuICB3YWl0aW5nTmV0d29yayA9IGZhbHNlO1xuICBpbnN0YWxsTGlua3M6IEluc3RhbGxBcHBMaW5rW107XG4gIHVwZ3JhZGVMaW5rczogSW5zdGFsbEFwcExpbmtbXTtcbiAgb2ZmbGluZTogYm9vbGVhbjtcblxuICBASW5wdXQoKSBpc0xvZ2luOiBib29sZWFuO1xuICBASW5wdXQoKSBzaG93VXBncmFkZVdhcm5pbmcgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93T2ZmbGluZVdhcm5pbmcgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93SW5zdGFsbEJ1dHRvbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29uZmlnU2VydmljZTogQ29uZmlnU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0Q29udHJvbGxlcjogVG9hc3RDb250cm9sbGVyLFxuICAgIHByaXZhdGUgYWxlcnRDb250cm9sbGVyOiBBbGVydENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2UsXG4gICAgcHVibGljIG5ldHdvcms6IE5ldHdvcmtTZXJ2aWNlLFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudDogRW52aXJvbm1lbnRcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMub2ZmbGluZSA9IHRoaXMubmV0d29yay5vZmZsaW5lO1xuXG4gICAgLy8gTGlzdGVuIHBvZCBjb25maWdcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgZnJvbSh0aGlzLm5ldHdvcmsucmVhZHkoKSlcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMDApLFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLmNvbmZpZ1NlcnZpY2UuY29uZmlnKSxcbiAgICAgICAgICBmaWx0ZXIoaXNOb3ROaWwpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgoY29uZmlnKSA9PiB0aGlzLmNoZWNrTmVlZEluc3RhbGxPclVwZGF0ZShjb25maWcpKVxuICAgICk7XG5cbiAgICAvLyBMaXN0ZW4gbmV0d29yayBjaGFuZ2VzXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMubmV0d29yay5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIC8vZGVib3VuY2VUaW1lKDQ1MCksXG4gICAgICAgICAgLy90YXAoKCkgPT4gdGhpcy53YWl0aW5nTmV0d29yayA9IGZhbHNlKSxcbiAgICAgICAgICBtYXAoKGNvbm5lY3Rpb25UeXBlKSA9PiBjb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgob2ZmbGluZSkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLm9mZmxpbmUgIT09IG9mZmxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMub2ZmbGluZSA9IG9mZmxpbmU7XG4gICAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB0aGlzLmluc3RhbGxMaW5rcyA9IG51bGw7XG4gICAgdGhpcy51cGdyYWRlTGlua3MgPSBudWxsO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWQoZXZlbnQ6IEV2ZW50LCBsaW5rOiBJbnN0YWxsQXBwTGluaykge1xuICAgIGlmICghbGluayB8fCAhbGluay51cmwpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbaW5zdGFsbC11cGdyYWRlLWNhcmRdIE1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgJ2xpbmsudXJsJ1wiKTtcbiAgICAgIHJldHVybjsgLy8gU2tpcFxuICAgIH1cblxuICAgIC8vIE1hcmsgbGluayBhcyBkb3dubG9hZGluZ1xuICAgIGxpbmsuZG93bmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLmxpc3RlbkRvd25sb2FkSm9iKFxuICAgICAgbGluay51cmwsXG4gICAgICB0aGlzLnBsYXRmb3JtLmRvd25sb2FkKHtcbiAgICAgICAgdXJpOiBsaW5rLnVybCxcbiAgICAgICAgdGl0bGU6IGxpbmsudGl0bGUsXG4gICAgICAgIGZpbGVuYW1lOiBsaW5rLmZpbGVuYW1lLFxuICAgICAgICBtaW1lVHlwZTogbGluay5taW1lVHlwZSxcbiAgICAgIH0pXG4gICAgKVxuICAgICAgLnRoZW4oKGxvY2F0aW9uKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLmNhbk9wZW5GaWxlKSBsaW5rLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgICAgIGxpbmsuZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKCkgPT4gKGxpbmsuZG93bmxvYWRpbmcgPSBmYWxzZSkpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLm1hcmtGb3JDaGVjaygpKTtcbiAgfVxuXG4gIGFzeW5jIG9wZW5GaWxlKGV2ZW50OiBFdmVudCwgbGluazogSW5zdGFsbEFwcExpbmspIHtcbiAgICBpZiAoIWxpbmsgfHwgIWxpbmsubG9jYXRpb24gfHwgIWxpbmsubWltZVR5cGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJbaW5zdGFsbC11cGdyYWRlLWNhcmRdIE1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgJ2xpbmsubG9jYXRpb24nIG9yICdsaW5rLm1pbWVUeXBlJ1wiKTtcbiAgICAgIHJldHVybjsgLy8gU2tpcFxuICAgIH1cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5wbGF0Zm9ybS5vcGVuKGxpbmsubG9jYXRpb24pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW2luc3RhbGwtdXBncmFkZS1jYXJkXSBDYW5ub3Qgb3BlbiBmaWxlOiAnICsgKChlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVyciksIGVycik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdHJ5T25saW5lKCkge1xuICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSB0cnVlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5uZXR3b3JrLnRyeU9ubGluZSh7XG4gICAgICAgIHNob3dMb2FkaW5nVG9hc3Q6IGZhbHNlLFxuICAgICAgICBzaG93T25saW5lVG9hc3Q6IHRydWUsXG4gICAgICAgIHNob3dPZmZsaW5lVG9hc3Q6IGZhbHNlLFxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGxhdGZvcm1OYW1lKHBsYXRmb3JtOiAnYW5kcm9pZCcgfCAnaW9zJyB8ICdlbGVjdHJvbicpIHtcbiAgICBzd2l0Y2ggKHBsYXRmb3JtKSB7XG4gICAgICBjYXNlICdhbmRyb2lkJzpcbiAgICAgICAgcmV0dXJuICdBbmRyb2lkJztcbiAgICAgIGNhc2UgJ2lvcyc6XG4gICAgICAgIHJldHVybiAnaU9TJztcbiAgICAgIGNhc2UgJ2VsZWN0cm9uJzpcbiAgICAgICAgcmV0dXJuICdkZXNrdG9wJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICBhc0xpbmsodmFsdWU6IGFueSk6IEluc3RhbGxBcHBMaW5rIHtcbiAgICByZXR1cm4gdmFsdWUgYXMgSW5zdGFsbEFwcExpbms7XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIG1ldGhvZCAgLS0gKi9cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrTmVlZEluc3RhbGxPclVwZGF0ZShjb25maWc6IENvbmZpZ3VyYXRpb24pIHtcbiAgICBpZiAoIWNvbmZpZykgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICBjb25zb2xlLmluZm8oJ1tpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gQ2hlY2sgaWYgbmVlZCB0byBpbnN0YWxsIG9yIHVwZ3JhZGUuLi4nKTtcblxuICAgIHRoaXMuaGFzRG93bmxvYWRlciA9IHRoaXMucGxhdGZvcm0uY2FuRG93bmxvYWQ7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbGlua3MgPSB0aGlzLmdldExpbmtzKGNvbmZpZyk7XG5cbiAgICAgIC8vIENoZWNrIGZvciB1cGdyYWRlXG4gICAgICB0aGlzLnVwZ3JhZGVMaW5rcyA9IHRoaXMuZ2V0Q29tcGF0aWJsZVVwZ3JhZGVMaW5rcyhsaW5rcywgY29uZmlnKTtcblxuICAgICAgaWYgKGlzTm90RW1wdHlBcnJheSh0aGlzLnVwZ3JhZGVMaW5rcykpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbaW5zdGFsbC11cGdyYWRlLWNhcmRdIEZpbmQgdXBncmFkZSBsaW5rczogJHt0aGlzLnVwZ3JhZGVMaW5rcy5tYXAoKGwpID0+IGwudXJsKS5qb2luKCcsJyl9YCk7XG4gICAgICAgIHRoaXMuaW5zdGFsbExpbmtzID0gbnVsbDtcbiAgICAgICAgdGhpcy5saXN0ZW5Eb3dubG9hZEpvYnMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIENoZWNrIGZvciBpbnN0YWxsIGxpbmtzXG4gICAgICAgIHRoaXMuaW5zdGFsbExpbmtzID0gdGhpcy5nZXRDb21wYXRpYmxlSW5zdGFsbExpbmtzKGxpbmtzKTtcbiAgICAgICAgaWYgKGlzTm90RW1wdHlBcnJheSh0aGlzLmluc3RhbGxMaW5rcykpIHtcbiAgICAgICAgICBjb25zb2xlLmluZm8oYFtpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gRmluZCBpbnN0YWxsYXRpb24gbGlua3MgJHt0aGlzLmluc3RhbGxMaW5rcy5tYXAoKGwpID0+IGwudXJsKS5qb2luKCcsJyl9YCk7XG4gICAgICAgICAgYXdhaXQgc2xlZXAoMTAwMCk7IC8vIEFkZCBhIGRlbGF5LCBmb3IgYW5pbWF0aW9uXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKGBbaW5zdGFsbC11cGdyYWRlLWNhcmRdIE5vIGluc3RhbGxhdGlvbiBvciB1cGdyYWRlIGxpbmtzIHRvIGRpc3BsYXkuYCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tcGF0aWJsZUluc3RhbGxMaW5rcyhpbnN0YWxsTGlua3M6IEluc3RhbGxBcHBMaW5rW10pOiBJbnN0YWxsQXBwTGlua1tdIHtcbiAgICAvLyBBbHJlYWR5IGFuIG5hdGl2ZSBBcHA6IG5vdCBuZWVkIHRvIGluc3RhbGxcbiAgICBpZiAodGhpcy5wbGF0Zm9ybS5pc0FwcCgpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgLy8gSWYgbW9iaWxlIHdlYjogcmV0dXJuIGFsbCBjb21wYXRpYmxlLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtXG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXNNb2JpbGVXZWIoKSkge1xuICAgICAgcmV0dXJuIGluc3RhbGxMaW5rcy5maWx0ZXIoXG4gICAgICAgIChsaW5rKSA9PlxuICAgICAgICAgICFsaW5rLnBsYXRmb3JtIHx8XG4gICAgICAgICAgdGhpcy5wbGF0Zm9ybS5pcyhsaW5rLnBsYXRmb3JtKSB8fFxuICAgICAgICAgIChsaW5rLnBsYXRmb3JtID09PSAnYW5kcm9pZCcgJiYgaXNBbmRyb2lkKHdpbmRvdykpIHx8XG4gICAgICAgICAgKGxpbmsucGxhdGZvcm0gPT09ICdpb3MnICYmIGlzSU9TKHdpbmRvdykpXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBhdGlibGVVcGdyYWRlTGlua3MoaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdLCBjb25maWc6IENvbmZpZ3VyYXRpb24pOiBJbnN0YWxsQXBwTGlua1tdIHtcbiAgICBjb25zdCBhcHBWZXJzaW9uID0gdGhpcy5lbnZpcm9ubWVudC52ZXJzaW9uO1xuICAgIGNvbnN0IGFwcE1pblZlcnNpb25Gcm9tUG9kID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVBQX01JTl9WRVJTSU9OKTtcblxuICAgIGlmICghYXBwVmVyc2lvbikge1xuICAgICAgY29uc29sZS5lcnJvcihcIk1pc3NpbmcgdmFsdWUgZm9yICdlbnZpcm9ubWVudC52ZXJzaW9uJzogY2Fubm90IGNoZWNrIGFwcCBjb21wYXRpYmlsaXR5IVwiKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgbmVlZFVwZ3JhZGUgPSBhcHBNaW5WZXJzaW9uRnJvbVBvZCAmJiAhVmVyc2lvblV0aWxzLmlzQ29tcGF0aWJsZShhcHBNaW5WZXJzaW9uRnJvbVBvZCwgYXBwVmVyc2lvbik7XG4gICAgaWYgKCFuZWVkVXBncmFkZSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIEZpbHRlciBvbiBwbGF0Zm9ybSwgaWYgbW9iaWxlIEFwcFxuICAgIGNvbnN0IHVwZ3JhZGVMaW5rcyA9IChpbnN0YWxsTGlua3MgfHwgW10pLmZpbHRlcigobGluaykgPT4gbGluay5wbGF0Zm9ybSAmJiB0aGlzLnBsYXRmb3JtLmlzKGxpbmsucGxhdGZvcm0pKTtcblxuICAgIC8vIFVzZSBtaW4gdmVyc2lvbiBhcyBkZWZhdWx0IHZlcnNpb25cbiAgICB1cGdyYWRlTGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgbGluay52ZXJzaW9uID0gbGluay52ZXJzaW9uIHx8IGFwcE1pblZlcnNpb25Gcm9tUG9kO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlzTm90RW1wdHlBcnJheSh1cGdyYWRlTGlua3MpID8gdXBncmFkZUxpbmtzIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRMaW5rcyhjb25maWc6IENvbmZpZ3VyYXRpb24pOiBJbnN0YWxsQXBwTGlua1tdIHtcbiAgICBjb25zdCByZXN1bHQ6IEluc3RhbGxBcHBMaW5rW10gPSBbXTtcblxuICAgIC8vIENvbXB1dGUgQXBwIG5hbWVcbiAgICBjb25zdCBtaW5WZXJzaW9uID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQVBQX01JTl9WRVJTSU9OKTtcbiAgICBjb25zdCBkZWZhdWx0QXBwTmFtZSA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEFwcE5hbWUgfHwgJ1NVTUFSaVMnO1xuXG4gICAgLy8gQW5kcm9pZFxuICAgIHtcbiAgICAgIC8vIEdldCBVUkwgKGZyb20gY29uZmlnLCBvciBlbnZpcm9ubWVudClcbiAgICAgIGxldCB1cmwgPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5BTkRST0lEX0lOU1RBTExfVVJMKTtcbiAgICAgIGlmIChpc05pbE9yQmxhbmsodXJsKSkgdXJsID0gdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0QW5kcm9pZEluc3RhbGxVcmwgfHwgbnVsbDtcblxuICAgICAgLy8gUmVzb2x2ZSByZWxhdGl2ZSBVUkxcbiAgICAgIGNvbnN0IHBlZXIgPSB0aGlzLm5ldHdvcmsucGVlcjtcbiAgICAgIGlmIChwZWVyICYmIHVybCAmJiAodXJsLnN0YXJ0c1dpdGgoJy4vJykgfHwgdXJsLnN0YXJ0c1dpdGgoJy8nKSkpIHtcbiAgICAgICAgdXJsID0gUGVlci5wYXRoKHBlZXIsIHVybCk7XG4gICAgICB9XG5cbiAgICAgIC8vIENvbXB1dGUgQXBwIG5hbWUgKHVzZSBjb25maWcgaWYgVVJMIGlzIHNwZWNpZmljKVxuICAgICAgY29uc3QgbmFtZTogc3RyaW5nID0gaXNOb3ROaWxPckJsYW5rKHVybCkgPyBjb25maWcubGFiZWwgOiBkZWZhdWx0QXBwTmFtZTtcblxuICAgICAgaWYgKHVybCkge1xuICAgICAgICBsZXQgdGl0bGU6IHN0cmluZztcbiAgICAgICAgbGV0IG1pbWVUeXBlOiBzdHJpbmc7XG5cbiAgICAgICAgLy8gR2V0IGZpbGUgbmFtZVxuICAgICAgICBsZXQgZmlsZW5hbWUgPSBVcmlVdGlscy5nZXRGaWxlbmFtZSh1cmwpO1xuICAgICAgICBsZXQgdmVyc2lvbiA9IG1pblZlcnNpb24gfHwgJ2xhdGVzdCc7XG5cbiAgICAgICAgLy8gT0ssIHRoaXMgaXMgYSBkb3dubG9hZGFibGUgQVBLIGZpbGUgKGUuZy4gTk9UIGEgbGluayB0byBhIHBsYXlzdG9yZSlcbiAgICAgICAgaWYgKGZpbGVuYW1lPy50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKCcuYXBrJykpIHtcbiAgICAgICAgICAvLyBEZWZpbmUgbWltZSB0eXBlXG4gICAgICAgICAgbWltZVR5cGUgPSBNaW1lVHlwZXMuQU5EUk9JRF9BUEs7XG5cbiAgICAgICAgICAvLyBHZXQgdGhlIGZpbGUgdmVyc2lvbiAoaWYgYW55KVxuICAgICAgICAgIGNvbnN0IHZlcnNpb25NYXRjaGVzID0gLy12KFsxLTldWzAtOV0qXFwuWzAtOV0rXFwuKDo/KDo/YWxwaGF8YmV0YXxyYyk/WzAtOV0qKSkvaS5leGVjKGZpbGVuYW1lKTtcbiAgICAgICAgICB2ZXJzaW9uID0gKHZlcnNpb25NYXRjaGVzICYmIHZlcnNpb25NYXRjaGVzWzFdKSB8fCB2ZXJzaW9uO1xuXG4gICAgICAgICAgLy8gQ29tcHV0ZSBhIG5ldyBmaWxlIG5hbWUsIHdpdGggdGhlIHZlcnNpb25cbiAgICAgICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKG5hbWUpICYmIHZlcnNpb24gIT09ICdsYXRlc3QnKSB7XG4gICAgICAgICAgICBmaWxlbmFtZSA9IGAke25hbWV9LXYke3ZlcnNpb259LmFwa2AudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgIHRpdGxlID0gYCR7bmFtZX0gdiR7dmVyc2lvbn1gO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFJlcGxhY2UgJ2xhdGVzdCcgd2l0aCB0aGUgYXBwIHZlcnNpb24sIGlmIHByZXNlbnQgaW4gdGhlIGZpbGVuYW1lXG4gICAgICAgICAgZWxzZSBpZiAoZmlsZW5hbWUuaW5kZXhPZignbGF0ZXN0JykgIT09IC0xICYmIHZlcnNpb24gIT09ICdsYXRlc3QnKSB7XG4gICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoJ2xhdGVzdCcsIHZlcnNpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5wdXNoKHsgbmFtZSwgdXJsLCBwbGF0Zm9ybTogJ2FuZHJvaWQnLCB2ZXJzaW9uLCBmaWxlbmFtZSwgdGl0bGUsIG1pbWVUeXBlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGlPU1xuICAgIHtcbiAgICAgIC8vIEdldCBVUkwgKGZyb20gY29uZmlnLCBvciBlbnZpcm9ubWVudClcbiAgICAgIGxldCB1cmwgPSBjb25maWcuZ2V0UHJvcGVydHkoQ09SRV9DT05GSUdfT1BUSU9OUy5JT1NfSU5TVEFMTF9VUkwpO1xuICAgICAgaWYgKGlzTmlsT3JCbGFuayh1cmwpKSB1cmwgPSB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRJT1NJbnN0YWxsVXJsIHx8IG51bGw7XG5cbiAgICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgVVJMXG4gICAgICBjb25zdCBwZWVyID0gdGhpcy5uZXR3b3JrLnBlZXI7XG4gICAgICBpZiAocGVlciAmJiB1cmwgJiYgKHVybC5zdGFydHNXaXRoKCcuLycpIHx8IHVybC5zdGFydHNXaXRoKCcvJykpKSB7XG4gICAgICAgIHVybCA9IFBlZXIucGF0aChwZWVyLCB1cmwpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb21wdXRlIEFwcCBuYW1lICh1c2UgY29uZmlnIGlmIFVSTCBpcyBzcGVjaWZpYylcbiAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IGlzTm90TmlsT3JCbGFuayh1cmwpID8gY29uZmlnLmxhYmVsIDogZGVmYXVsdEFwcE5hbWU7XG5cbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IG1pblZlcnNpb24gfHwgJ2xhdGVzdCc7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gYCR7bmFtZX0gdiR7dmVyc2lvbn1gO1xuICAgICAgICByZXN1bHQucHVzaCh7IG5hbWUsIHVybCwgcGxhdGZvcm06ICdpb3MnLCB2ZXJzaW9uLCB0aXRsZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZXNrdG9wIChFbGVjdHJvbilcbiAgICB7XG4gICAgICAvLyBHZXQgVVJMIChmcm9tIGNvbmZpZywgb3IgZW52aXJvbm1lbnQpXG4gICAgICBsZXQgdXJsID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuREVTS1RPUF9JTlNUQUxMX1VSTCk7XG4gICAgICBpZiAoaXNOaWxPckJsYW5rKHVybCkpIHVybCA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdERlc2t0b3BJbnN0YWxsVXJsIHx8IG51bGw7XG5cbiAgICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgVVJMXG4gICAgICBjb25zdCBwZWVyID0gdGhpcy5uZXR3b3JrLnBlZXI7XG4gICAgICBpZiAocGVlciAmJiB1cmwgJiYgKHVybC5zdGFydHNXaXRoKCcuLycpIHx8IHVybC5zdGFydHNXaXRoKCcvJykpKSB7XG4gICAgICAgIHVybCA9IFBlZXIucGF0aChwZWVyLCB1cmwpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb21wdXRlIEFwcCBuYW1lICh1c2UgY29uZmlnIGlmIFVSTCBpcyBzcGVjaWZpYylcbiAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IGlzTm90TmlsT3JCbGFuayh1cmwpID8gY29uZmlnLmxhYmVsIDogZGVmYXVsdEFwcE5hbWU7XG5cbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IG1pblZlcnNpb24gfHwgJ2xhdGVzdCc7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gYCR7bmFtZX0gdiR7dmVyc2lvbn1gO1xuICAgICAgICByZXN1bHQucHVzaCh7IG5hbWUsIHVybCwgcGxhdGZvcm06ICdlbGVjdHJvbicsIHZlcnNpb24sIHRpdGxlIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkRvd25sb2FkSm9icygpIHtcbiAgICAvLyBMaXN0ZW5pbmcgZG93bmxvYWRpbmcgcHJvbWlzZSwgaWYgZXhpc3RzXG4gICAgKHRoaXMudXBncmFkZUxpbmtzIHx8IFtdKS5mb3JFYWNoKChsaW5rKSA9PiB7XG4gICAgICBjb25zdCBqb2IgPSB0aGlzLnBsYXRmb3JtLmdldERvd25sb2FkaW5nSm9iKGxpbmsudXJsKTtcbiAgICAgIGlmIChqb2IpIHtcbiAgICAgICAgbGluay5kb3dubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubGlzdGVuRG93bmxvYWRKb2IobGluay51cmwsIGpvYilcbiAgICAgICAgICAudGhlbigobG9jYXRpb24pID0+IHtcbiAgICAgICAgICAgIGxpbmsubG9jYXRpb24gPSBsb2NhdGlvbjtcbiAgICAgICAgICAgIGxpbmsuZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoKSA9PiAobGluay5kb3dubG9hZGluZyA9IGZhbHNlKSlcbiAgICAgICAgICAudGhlbigoKSA9PiB0aGlzLm1hcmtGb3JDaGVjaygpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbGlzdGVuRG93bmxvYWRKb2IodXJsOiBzdHJpbmcsIGpvYjogT2JzZXJ2YWJsZTxzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBpZiAoIXVybCB8fCAham9iKSByZXR1cm47IC8vIFNraXBcblxuICAgIHRyeSB7XG4gICAgICAvLyBNYXJrIGFzIGRvd25sb2FkaW5nXG4gICAgICBpZiAoIXRoaXMuZG93bmxvYWRpbmcpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbaW5zdGFsbC11cGdyYWRlLWNhcmRdIEFza2luZyBwbGF0Zm9ybSB0byBkb3dubG9hZCAnJHt1cmx9Jy4uLmApO1xuICAgICAgICB0aGlzLmRvd25sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2luc3RhbGwtdXBncmFkZS1jYXJkXSBQbGF0Zm9ybSBpcyBhbHJlYWR5IGRvd25sb2FkaW5nIWApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsb2NhdGlvbiA9IGF3YWl0IGpvYi50b1Byb21pc2UoKTtcbiAgICAgIGlmIChsb2NhdGlvbikge1xuICAgICAgICBjb25zb2xlLmluZm8oJ1tpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gRmlsZSBkb3dubG9hZGVkIGF0OiAnICsgbG9jYXRpb24pO1xuICAgICAgICB0aGlzLnNob3dEb3dubG9hZENvbXBsZXRlRGlhbG9nKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG9jYXRpb247XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBGYWlsZWQ6IGRpc3BsYXkgYSB0b2FzdFxuICAgICAgY29uc29sZS5lcnJvcignW2luc3RhbGwtdXBncmFkZS1jYXJkXSBEb3dubG9hZCBmYWlsZWQ6ICcgKyAoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKSk7XG4gICAgICB0aGlzLnNob3dEb3dubG9hZEZhaWxlZFRvYXN0KGVycik7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMuZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzaG93RG93bmxvYWRGYWlsZWRUb2FzdChlcnIpIHtcbiAgICByZXR1cm4gdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgbWVzc2FnZTogJ0VSUk9SLkRPV05MT0FEX0ZBSUxFRCcsXG4gICAgICBtZXNzYWdlUGFyYW1zOiB7IGVycm9yOiBlcnIgfSxcbiAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dEb3dubG9hZENvbXBsZXRlRGlhbG9nKCkge1xuICAgIGlmICghdGhpcy5fc3Vic2NyaXB0aW9uKSByZXR1cm47IC8vIFNraXAgaWYgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZFxuXG4gICAgY29uc3QgdHJhbnNsYXRpb25zID0gYXdhaXQgdGhpcy50cmFuc2xhdGUuaW5zdGFudChbJ0lORk8uQUxFUlRfSEVBREVSJywgJ0lORk8uVVBEQVRFX0FQUF9ET1dOTE9BREVEJywgJ0NPTU1PTi5CVE5fQ0xPU0UnXSk7XG4gICAgY29uc3QgYWxlcnQgPSBhd2FpdCB0aGlzLmFsZXJ0Q29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgaGVhZGVyOiB0cmFuc2xhdGlvbnNbJ0lORk8uQUxFUlRfSEVBREVSJ10sXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGlvbnNbJ0lORk8uVVBEQVRFX0FQUF9ET1dOTE9BREVEJ10sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0ZXh0OiB0cmFuc2xhdGlvbnNbJ0NPTU1PTi5CVE5fQ0xPU0UnXSxcbiAgICAgICAgICByb2xlOiAnY2FuY2VsJyxcbiAgICAgICAgICBjc3NDbGFzczogJ3NlY29uZGFyeScsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuXG4gICAgYXdhaXQgYWxlcnQucHJlc2VudCgpO1xuICAgIGF3YWl0IGFsZXJ0Lm9uRGlkRGlzbWlzcygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgaWYgKCF0aGlzLl9zdWJzY3JpcHRpb24pIHJldHVybjsgLy8gU2tpcCBpZiBkZXN0cm95ZWRcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaG93VG9hc3Qob3B0czogU2hvd1RvYXN0T3B0aW9ucykge1xuICAgIGlmICghdGhpcy5fc3Vic2NyaXB0aW9uKSByZXR1cm47IC8vIFNraXAgaWYgY29tcG9uZW50IGhhcyBiZWVuIGRlc3Ryb3llZFxuICAgIGF3YWl0IFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cbn1cbiIsIjwhLS0gT2ZmbGluZSBtb2RlIGNhcmQtLT5cbjxpb24tY2FyZFxuICAqbmdJZj1cInNob3dPZmZsaW5lV2FybmluZyAmJiAoKCFsb2FkaW5nICYmIG9mZmxpbmUpIHx8IHdhaXRpbmdOZXR3b3JrKVwiXG4gIGNvbG9yPVwiYWNjZW50XCJcbiAgY2xhc3M9XCJtYWluIGlvbi1uby1tYXJnaW5cIlxuICBAc2xpZGVVcERvd25BbmltYXRpb25cbj5cbiAgPGlvbi1jYXJkLWNvbnRlbnQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgIDxpb24tZ3JpZD5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICBAaWYgKHdhaXRpbmdOZXR3b3JrKSB7XG4gICAgICAgICAgICA8aW9uLXRleHQgY2xhc3M9XCJpb24tdGV4dC13cmFwXCIgW2lubmVySFRNTF09XCInTkVUV09SSy5JTkZPLlJFVFJZX1RPX0NPTk5FQ1QnIHwgdHJhbnNsYXRlXCI+PC9pb24tdGV4dD5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxpb24tdGV4dCBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIj5cbiAgICAgICAgICAgICAgPGg0PlxuICAgICAgICAgICAgICAgIEBpZiAoaXNMb2dpbikge1xuICAgICAgICAgICAgICAgICAgPGIgW2lubmVySFRNTF09XCInTkVUV09SSy5JTkZPLk9GRkxJTkVfT1JfVU5BVVRIT1JJWkVEJyB8IHRyYW5zbGF0ZVwiPjwvYj5cbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIDxiIFtpbm5lckhUTUxdPVwiJ05FVFdPUksuSU5GTy5PRkZMSU5FJyB8IHRyYW5zbGF0ZVwiPjwvYj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgIDxoMz5cbiAgICAgICAgICAgICAgICA8c21hbGwgW2lubmVySFRNTF09XCInTkVUV09SSy5JTkZPLk9GRkxJTkVfSEVMUCcgfCB0cmFuc2xhdGVcIj48L3NtYWxsPlxuICAgICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICB9XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIiBjbGFzcz1cImlvbi1hbGlnbi1pdGVtcy1lbmRcIj5cbiAgICAgICAgICA8IS0tIFJldHJ5IGJ1dHRvbiAtLT5cbiAgICAgICAgICBAaWYgKHdhaXRpbmdOZXR3b3JrKSB7XG4gICAgICAgICAgICA8aW9uLXNwaW5uZXIgY29sb3I9XCJsaWdodFwiPjwvaW9uLXNwaW5uZXI+XG4gICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICA8aW9uLWJ1dHRvbiBjb2xvcj1cInRlcnRpYXJ5XCIgY2xhc3M9XCJpb24tZmxvYXQtZW5kXCIgKGNsaWNrKT1cInRyeU9ubGluZSgpXCI+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5ORVRXT1JLLkJUTl9DSEVDS19BTElWRTwvc3Bhbj5cbiAgICAgICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgICAgICB9XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICA8L2lvbi1ncmlkPlxuICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG48L2lvbi1jYXJkPlxuXG48IS0tIFVwZ3JhZGUgbGlua3MgLS0+XG48aW9uLWNhcmRcbiAgKm5nSWY9XCJzaG93VXBncmFkZVdhcm5pbmcgJiYgIWxvYWRpbmcgJiYgIW9mZmxpbmUgJiYgdXBncmFkZUxpbmtzXCJcbiAgY29sb3I9XCJhY2NlbnRcIlxuICBjbGFzcz1cImlvbi1uby1tYXJnaW5cIlxuICBAc2xpZGVVcERvd25BbmltYXRpb25cbj5cbiAgPGlvbi1jYXJkLWNvbnRlbnQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgIDxpb24tZ3JpZD5cbiAgICAgIDxpb24tcm93ICpuZ0Zvcj1cImxldCBsaW5rIG9mIHVwZ3JhZGVMaW5rczsgbGFzdCBhcyBsYXN0XCI+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tdGV4dCBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIj5cbiAgICAgICAgICAgIDxoMz5cbiAgICAgICAgICAgICAgQGlmIChsaW5rLnZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBbaW5uZXJIVE1MXT1cIidJTkZPLlVQREFURV9BUFBfVE9fVkVSU0lPTicgfCB0cmFuc2xhdGU6IGxpbmtcIj48L3NwYW4+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiJ0lORk8uVVBEQVRFX0FQUCcgfCB0cmFuc2xhdGU6IGxpbmtcIj48L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICA8aDQ+XG4gICAgICAgICAgICAgIEBpZiAobGFzdCkge1xuICAgICAgICAgICAgICAgIDxzbWFsbCBbaW5uZXJIVE1MXT1cIidJTkZPLlVQREFURV9BUFBfSEVMUCcgfCB0cmFuc2xhdGVcIj48L3NtYWxsPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2g0PlxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkb3dubG9hZEJ1dHRvbjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGxpbmsgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgPC9pb24tZ3JpZD5cbiAgPC9pb24tY2FyZC1jb250ZW50PlxuPC9pb24tY2FyZD5cblxuPCEtLSBJbnN0YWxsIGxpbmtzIC0tPlxuPGlvbi1jYXJkXG4gICpuZ0lmPVwic2hvd0luc3RhbGxCdXR0b24gJiYgIWxvYWRpbmcgJiYgIW9mZmxpbmUgJiYgaW5zdGFsbExpbmtzXCJcbiAgY29sb3I9XCJzZWNvbmRhcnlcIlxuICBjbGFzcz1cImlvbi1uby1tYXJnaW5cIlxuICBAc2xpZGVVcERvd25BbmltYXRpb25cbj5cbiAgPGlvbi1jYXJkLWNvbnRlbnQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgIDxpb24tZ3JpZD5cbiAgICAgIDxpb24tcm93ICpuZ0Zvcj1cImxldCBsaW5rIG9mIGluc3RhbGxMaW5rczsgbGFzdCBhcyBsYXN0XCI+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCIxMlwiIHNpemUtc209XCI4XCI+XG4gICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLXRleHQtd3JhcFwiPlxuICAgICAgICAgICAgPGgzXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiXG4gICAgICAgICAgICAgICAgJ0lORk8uRE9XTkxPQURfQVBQX1RJVExFJyB8IHRyYW5zbGF0ZTogeyBuYW1lOiBsaW5rLm5hbWUsIHBsYXRmb3JtOiBnZXRQbGF0Zm9ybU5hbWUobGluay5wbGF0Zm9ybSkgfVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvaDM+XG4gICAgICAgICAgICA8aDQ+PHNtYWxsICpuZ0lmPVwibGFzdFwiIFtpbm5lckhUTUxdPVwiJ0lORk8uRE9XTkxPQURfQVBQX0hFTFAnIHwgdHJhbnNsYXRlXCI+PC9zbWFsbD48L2g0PlxuICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCIgc2l6ZS1zbT1cIjRcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZG93bmxvYWRCdXR0b247IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBsaW5rIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIDwvaW9uLWNhcmQtY29udGVudD5cbjwvaW9uLWNhcmQ+XG5cbjwhLS0gRGlzcGxheSBhIGRvd25sb2FkIGJ1dHRvbiwgZGVwZW5kaW5nIG9uIHRoZSBsaW5rIFVSTCwgYW5kIHRoZSBkZXZpY2UgcGxhdGZvcm0gLS0+XG48bmctdGVtcGxhdGUgI2Rvd25sb2FkQnV0dG9uIGxldC1saW5rPlxuICBAaWYgKGxpbmsuZmlsZW5hbWUpIHtcbiAgICBAaWYgKGhhc0Rvd25sb2FkZXIpIHtcbiAgICAgIDwhLS0gRG93bmxvYWQgdXNpbmcgcGxhdGZvcm0gLS0+XG4gICAgICBAaWYgKCFsaW5rLmxvY2F0aW9uKSB7XG4gICAgICAgIDxpb24tYnV0dG9uXG4gICAgICAgICAgKGNsaWNrKT1cImRvd25sb2FkKCRldmVudCwgYXNMaW5rKGxpbmspKVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImxpbmsuZG93bmxvYWRpbmdcIlxuICAgICAgICAgIGNvbG9yPVwidGVydGlhcnlcIlxuICAgICAgICAgIGNsYXNzPVwiaW9uLWZsb2F0LWVuZFwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgKm5nSWY9XCIhbGluay5kb3dubG9hZGluZ1wiIG5hbWU9XCJkb3dubG9hZFwiPjwvaW9uLWljb24+XG4gICAgICAgICAgPGlvbi1zcGlubmVyIHNsb3Q9XCJzdGFydFwiIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIiAqbmdJZj1cImxpbmsuZG93bmxvYWRpbmdcIj48L2lvbi1zcGlubmVyPlxuICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fRE9XTkxPQUQ8L2lvbi1sYWJlbD5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDwhLS0gT3BlbiBBUEsgYnV0dG9uIC0tPlxuICAgICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwib3BlbkZpbGUoJGV2ZW50LCBsaW5rKVwiIGNvbG9yPVwidGVydGlhcnlcIiBjbGFzcz1cImlvbi1mbG9hdC1lbmRcIj5cbiAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX0lOU1RBTEw8L2lvbi1sYWJlbD5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgfVxuICAgIH0gQGVsc2Uge1xuICAgICAgPCEtLSBXZWIgZG93bmxvYWQgYnV0dG9uIC0tPlxuICAgICAgPGlvbi1idXR0b24gW2Rvd25sb2FkXT1cImxpbmsuZmlsZW5hbWVcIiBbaHJlZl09XCJsaW5rLnVybFwiIGNvbG9yPVwidGVydGlhcnlcIiBjbGFzcz1cImlvbi1mbG9hdC1lbmRcIj5cbiAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9ET1dOTE9BRDwvaW9uLWxhYmVsPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIH1cbiAgfSBAZWxzZSB7XG4gICAgPCEtLSBXZWIgcmVkaXJlY3QgYnV0dG9uIC0tPlxuICAgIDxpb24tYnV0dG9uIFtocmVmXT1cImxpbmsudXJsXCIgcmVsPVwiZXh0ZXJuYWxcIiBjb2xvcj1cInRlcnRpYXJ5XCIgY2xhc3M9XCJpb24tZmxvYXQtZW5kXCIgdGFyZ2V0PVwiX2JsYW5rXCI+XG4gICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX1NIT1dfTU9SRTwvaW9uLWxhYmVsPlxuICAgIDwvaW9uLWJ1dHRvbj5cbiAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
394
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL2luc3RhbGwvaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFFeEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXRFLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RyxPQUFPLEVBQWUsV0FBVyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUFvQixNQUFNLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVyRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDcEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw2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QUksQ0FBQyxJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sQ0FBQyx1Q0FBdUM7UUFDeEUsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRSxDQUFDO3dHQW5aVSxxQkFBcUIsMk9BeUJ0QixXQUFXOzRGQXpCVixxQkFBcUIsNE9DeENsQyxzaktBZ0pBLDJyRUQxR2MsQ0FBQyxvQkFBb0IsQ0FBQzs7NEZBRXZCLHFCQUFxQjtrQkFQakMsU0FBUzsrQkFDRSwwQkFBMEIsbUJBR25CLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsQ0FBQyxvQkFBb0IsQ0FBQzs7MEJBMkIvQixNQUFNOzJCQUFDLFdBQVc7eUNBZFosT0FBTztzQkFBZixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxlcnRDb250cm9sbGVyLCBNb2RhbENvbnRyb2xsZXIsIFRvYXN0Q29udHJvbGxlciB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IGZpcnN0VmFsdWVGcm9tLCBmcm9tLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IFBsYXRmb3JtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE5ldHdvcmtTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay5zZXJ2aWNlJztcbmltcG9ydCB7IENPUkVfQ09ORklHX09QVElPTlMgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb25maWcvY29yZS5jb25maWcnO1xuaW1wb3J0IHsgVmVyc2lvblV0aWxzIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHsgc2xpZGVVcERvd25BbmltYXRpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBpc05pbE9yQmxhbmssIGlzTm90RW1wdHlBcnJheSwgaXNOb3ROaWwsIGlzTm90TmlsT3JCbGFuaywgc2xlZXAgfSBmcm9tICcuLi8uLi9zaGFyZWQvZnVuY3Rpb25zJztcbmltcG9ydCB7IEVudmlyb25tZW50LCBFTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudC5jbGFzcyc7XG5pbXBvcnQgeyBTaG93VG9hc3RPcHRpb25zLCBUb2FzdHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFBlZXIgfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7IE1pbWVUeXBlcyB9IGZyb20gJy4uLy4uL3NoYXJlZC9maWxlL2ZpbGUudXRpbHMnO1xuaW1wb3J0IHsgVXJpVXRpbHMgfSBmcm9tICcuLi8uLi9zaGFyZWQvZmlsZS91cmkudXRpbHMnO1xuaW1wb3J0IHsgaXNBbmRyb2lkLCBpc0lPUyB9IGZyb20gJy4uLy4uL3NoYXJlZC9wbGF0Zm9ybXMnO1xuXG5leHBvcnQgZGVjbGFyZSBpbnRlcmZhY2UgSW5zdGFsbEFwcExpbmsge1xuICBuYW1lOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBwbGF0Zm9ybT86ICdhbmRyb2lkJyB8ICdpb3MnIHwgJ2VsZWN0cm9uJztcbiAgdmVyc2lvbj86IHN0cmluZztcbiAgZmlsZW5hbWU/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgbWltZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25sb2FkaW5nPzogYm9vbGVhbjtcbiAgbG9jYXRpb24/OiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1pbnN0YWxsLXVwZ3JhZGUtY2FyZCcsXG4gIHRlbXBsYXRlVXJsOiAnaW5zdGFsbC11cGdyYWRlLWNhcmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9pbnN0YWxsLXVwZ3JhZGUtY2FyZC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW3NsaWRlVXBEb3duQW5pbWF0aW9uXSxcbn0pXG5leHBvcnQgY2xhc3MgQXBwSW5zdGFsbFVwZ3JhZGVDYXJkIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgbG9hZGluZyA9IHRydWU7XG4gIGhhc0Rvd25sb2FkZXIgPSBmYWxzZTtcbiAgZG93bmxvYWRpbmcgPSBmYWxzZTtcbiAgd2FpdGluZ05ldHdvcmsgPSBmYWxzZTtcbiAgaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdO1xuICB1cGdyYWRlTGlua3M6IEluc3RhbGxBcHBMaW5rW107XG4gIG9mZmxpbmU6IGJvb2xlYW47XG5cbiAgQElucHV0KCkgaXNMb2dpbjogYm9vbGVhbjtcbiAgQElucHV0KCkgc2hvd1VwZ3JhZGVXYXJuaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd09mZmxpbmVXYXJuaW5nID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd0luc3RhbGxCdXR0b24gPSBmYWxzZTtcbiAgQElucHV0KCkgZGVidWc6IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RDb250cm9sbGVyOiBUb2FzdENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBhbGVydENvbnRyb2xsZXI6IEFsZXJ0Q29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgcGxhdGZvcm06IFBsYXRmb3JtU2VydmljZSxcbiAgICBwdWJsaWMgbmV0d29yazogTmV0d29ya1NlcnZpY2UsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50OiBFbnZpcm9ubWVudFxuICApIHtcbiAgICB0aGlzLmRlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLm9mZmxpbmUgPSB0aGlzLm5ldHdvcmsub2ZmbGluZTtcblxuICAgIC8vIExpc3RlbiBwb2QgY29uZmlnXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIGZyb20odGhpcy5uZXR3b3JrLnJlYWR5KCkpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDAwKSxcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5jb25maWdTZXJ2aWNlLmNvbmZpZyksXG4gICAgICAgICAgZmlsdGVyKGlzTm90TmlsKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGNvbmZpZykgPT4gdGhpcy5jaGVja05lZWRJbnN0YWxsT3JVcGRhdGUoY29uZmlnKSlcbiAgICApO1xuXG4gICAgLy8gTGlzdGVuIG5ldHdvcmsgY2hhbmdlc1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLm5ldHdvcmsub25OZXR3b3JrU3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShcbiAgICAgICAgICAvL2RlYm91bmNlVGltZSg0NTApLFxuICAgICAgICAgIC8vdGFwKCgpID0+IHRoaXMud2FpdGluZ05ldHdvcmsgPSBmYWxzZSksXG4gICAgICAgICAgbWFwKChjb25uZWN0aW9uVHlwZSkgPT4gY29ubmVjdGlvblR5cGUgPT09ICdub25lJyksXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKG9mZmxpbmUpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5vZmZsaW5lICE9PSBvZmZsaW5lKSB7XG4gICAgICAgICAgICB0aGlzLm9mZmxpbmUgPSBvZmZsaW5lO1xuICAgICAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgdGhpcy5pbnN0YWxsTGlua3MgPSBudWxsO1xuICAgIHRoaXMudXBncmFkZUxpbmtzID0gbnVsbDtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkKGV2ZW50OiBFdmVudCwgbGluazogSW5zdGFsbEFwcExpbmspIHtcbiAgICBpZiAoIWxpbmsgfHwgIWxpbmsudXJsKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW2luc3RhbGwtdXBncmFkZS1jYXJkXSBNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50ICdsaW5rLnVybCdcIik7XG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG5cbiAgICAvLyBNYXJrIGxpbmsgYXMgZG93bmxvYWRpbmdcbiAgICBsaW5rLmRvd25sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy5saXN0ZW5Eb3dubG9hZEpvYihcbiAgICAgIGxpbmsudXJsLFxuICAgICAgdGhpcy5wbGF0Zm9ybS5kb3dubG9hZCh7XG4gICAgICAgIHVyaTogbGluay51cmwsXG4gICAgICAgIHRpdGxlOiBsaW5rLnRpdGxlLFxuICAgICAgICBmaWxlbmFtZTogbGluay5maWxlbmFtZSxcbiAgICAgICAgbWltZVR5cGU6IGxpbmsubWltZVR5cGUsXG4gICAgICB9KVxuICAgIClcbiAgICAgIC50aGVuKChsb2NhdGlvbikgPT4ge1xuICAgICAgICBpZiAodGhpcy5wbGF0Zm9ybS5jYW5PcGVuRmlsZSkgbGluay5sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgICAgICBsaW5rLmRvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IChsaW5rLmRvd25sb2FkaW5nID0gZmFsc2UpKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5tYXJrRm9yQ2hlY2soKSk7XG4gIH1cblxuICBhc3luYyBvcGVuRmlsZShldmVudDogRXZlbnQsIGxpbms6IEluc3RhbGxBcHBMaW5rKSB7XG4gICAgaWYgKCFsaW5rIHx8ICFsaW5rLmxvY2F0aW9uIHx8ICFsaW5rLm1pbWVUeXBlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFwiW2luc3RhbGwtdXBncmFkZS1jYXJkXSBNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50ICdsaW5rLmxvY2F0aW9uJyBvciAnbGluay5taW1lVHlwZSdcIik7XG4gICAgICByZXR1cm47IC8vIFNraXBcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMucGxhdGZvcm0ub3BlbihsaW5rLmxvY2F0aW9uKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gQ2Fubm90IG9wZW4gZmlsZTogJyArICgoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpLCBlcnIpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHRyeU9ubGluZSgpIHtcbiAgICB0aGlzLndhaXRpbmdOZXR3b3JrID0gdHJ1ZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubmV0d29yay50cnlPbmxpbmUoe1xuICAgICAgICBzaG93TG9hZGluZ1RvYXN0OiBmYWxzZSxcbiAgICAgICAgc2hvd09ubGluZVRvYXN0OiB0cnVlLFxuICAgICAgICBzaG93T2ZmbGluZVRvYXN0OiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLndhaXRpbmdOZXR3b3JrID0gZmFsc2U7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGdldFBsYXRmb3JtTmFtZShwbGF0Zm9ybTogJ2FuZHJvaWQnIHwgJ2lvcycgfCAnZWxlY3Ryb24nKSB7XG4gICAgc3dpdGNoIChwbGF0Zm9ybSkge1xuICAgICAgY2FzZSAnYW5kcm9pZCc6XG4gICAgICAgIHJldHVybiAnQW5kcm9pZCc7XG4gICAgICBjYXNlICdpb3MnOlxuICAgICAgICByZXR1cm4gJ2lPUyc7XG4gICAgICBjYXNlICdlbGVjdHJvbic6XG4gICAgICAgIHJldHVybiAnZGVza3RvcCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgYXNMaW5rKHZhbHVlOiBhbnkpOiBJbnN0YWxsQXBwTGluayB7XG4gICAgcmV0dXJuIHZhbHVlIGFzIEluc3RhbGxBcHBMaW5rO1xuICB9XG5cbiAgLyogLS0gcHJpdmF0ZSBtZXRob2QgIC0tICovXG5cbiAgcHJpdmF0ZSBhc3luYyBjaGVja05lZWRJbnN0YWxsT3JVcGRhdGUoY29uZmlnOiBDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKCFjb25maWcpIHJldHVybjsgLy8gU2tpcFxuXG4gICAgY29uc29sZS5pbmZvKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIENoZWNrIGlmIG5lZWQgdG8gaW5zdGFsbCBvciB1cGdyYWRlLi4uJyk7XG5cbiAgICB0aGlzLmhhc0Rvd25sb2FkZXIgPSB0aGlzLnBsYXRmb3JtLmNhbkRvd25sb2FkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxpbmtzID0gdGhpcy5nZXRMaW5rcyhjb25maWcpO1xuXG4gICAgICAvLyBDaGVjayBmb3IgdXBncmFkZVxuICAgICAgdGhpcy51cGdyYWRlTGlua3MgPSB0aGlzLmdldENvbXBhdGlibGVVcGdyYWRlTGlua3MobGlua3MsIGNvbmZpZyk7XG5cbiAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkodGhpcy51cGdyYWRlTGlua3MpKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2luc3RhbGwtdXBncmFkZS1jYXJkXSBGaW5kIHVwZ3JhZGUgbGlua3M6ICR7dGhpcy51cGdyYWRlTGlua3MubWFwKChsKSA9PiBsLnVybCkuam9pbignLCcpfWApO1xuICAgICAgICB0aGlzLmluc3RhbGxMaW5rcyA9IG51bGw7XG4gICAgICAgIHRoaXMubGlzdGVuRG93bmxvYWRKb2JzKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDaGVjayBmb3IgaW5zdGFsbCBsaW5rc1xuICAgICAgICB0aGlzLmluc3RhbGxMaW5rcyA9IHRoaXMuZ2V0Q29tcGF0aWJsZUluc3RhbGxMaW5rcyhsaW5rcyk7XG4gICAgICAgIGlmIChpc05vdEVtcHR5QXJyYXkodGhpcy5pbnN0YWxsTGlua3MpKSB7XG4gICAgICAgICAgY29uc29sZS5pbmZvKGBbaW5zdGFsbC11cGdyYWRlLWNhcmRdIEZpbmQgaW5zdGFsbGF0aW9uIGxpbmtzICR7dGhpcy5pbnN0YWxsTGlua3MubWFwKChsKSA9PiBsLnVybCkuam9pbignLCcpfWApO1xuICAgICAgICAgIGF3YWl0IHNsZWVwKDEwMDApOyAvLyBBZGQgYSBkZWxheSwgZm9yIGFuaW1hdGlvblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuaW5mbyhgW2luc3RhbGwtdXBncmFkZS1jYXJkXSBObyBpbnN0YWxsYXRpb24gb3IgdXBncmFkZSBsaW5rcyB0byBkaXNwbGF5LmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldENvbXBhdGlibGVJbnN0YWxsTGlua3MoaW5zdGFsbExpbmtzOiBJbnN0YWxsQXBwTGlua1tdKTogSW5zdGFsbEFwcExpbmtbXSB7XG4gICAgLy8gQWxyZWFkeSBhbiBuYXRpdmUgQXBwOiBub3QgbmVlZCB0byBpbnN0YWxsXG4gICAgaWYgKHRoaXMucGxhdGZvcm0uaXNBcHAoKSkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIC8vIElmIG1vYmlsZSB3ZWI6IHJldHVybiBhbGwgY29tcGF0aWJsZSwgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybVxuICAgIGlmICh0aGlzLnBsYXRmb3JtLmlzTW9iaWxlV2ViKCkpIHtcbiAgICAgIHJldHVybiBpbnN0YWxsTGlua3MuZmlsdGVyKFxuICAgICAgICAobGluaykgPT5cbiAgICAgICAgICAhbGluay5wbGF0Zm9ybSB8fFxuICAgICAgICAgIHRoaXMucGxhdGZvcm0uaXMobGluay5wbGF0Zm9ybSkgfHxcbiAgICAgICAgICAobGluay5wbGF0Zm9ybSA9PT0gJ2FuZHJvaWQnICYmIGlzQW5kcm9pZCh3aW5kb3cpKSB8fFxuICAgICAgICAgIChsaW5rLnBsYXRmb3JtID09PSAnaW9zJyAmJiBpc0lPUyh3aW5kb3cpKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb21wYXRpYmxlVXBncmFkZUxpbmtzKGluc3RhbGxMaW5rczogSW5zdGFsbEFwcExpbmtbXSwgY29uZmlnOiBDb25maWd1cmF0aW9uKTogSW5zdGFsbEFwcExpbmtbXSB7XG4gICAgY29uc3QgYXBwVmVyc2lvbiA9IHRoaXMuZW52aXJvbm1lbnQudmVyc2lvbjtcbiAgICBjb25zdCBhcHBNaW5WZXJzaW9uRnJvbVBvZCA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkFQUF9NSU5fVkVSU0lPTik7XG5cbiAgICBpZiAoIWFwcFZlcnNpb24pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJNaXNzaW5nIHZhbHVlIGZvciAnZW52aXJvbm1lbnQudmVyc2lvbic6IGNhbm5vdCBjaGVjayBhcHAgY29tcGF0aWJpbGl0eSFcIik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IG5lZWRVcGdyYWRlID0gYXBwTWluVmVyc2lvbkZyb21Qb2QgJiYgIVZlcnNpb25VdGlscy5pc0NvbXBhdGlibGUoYXBwTWluVmVyc2lvbkZyb21Qb2QsIGFwcFZlcnNpb24pO1xuICAgIGlmICghbmVlZFVwZ3JhZGUpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAvLyBGaWx0ZXIgb24gcGxhdGZvcm0sIGlmIG1vYmlsZSBBcHBcbiAgICBjb25zdCB1cGdyYWRlTGlua3MgPSAoaW5zdGFsbExpbmtzIHx8IFtdKS5maWx0ZXIoKGxpbmspID0+IGxpbmsucGxhdGZvcm0gJiYgdGhpcy5wbGF0Zm9ybS5pcyhsaW5rLnBsYXRmb3JtKSk7XG5cbiAgICAvLyBVc2UgbWluIHZlcnNpb24gYXMgZGVmYXVsdCB2ZXJzaW9uXG4gICAgdXBncmFkZUxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgIGxpbmsudmVyc2lvbiA9IGxpbmsudmVyc2lvbiB8fCBhcHBNaW5WZXJzaW9uRnJvbVBvZDtcbiAgICB9KTtcblxuICAgIHJldHVybiBpc05vdEVtcHR5QXJyYXkodXBncmFkZUxpbmtzKSA/IHVwZ3JhZGVMaW5rcyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGlua3MoY29uZmlnOiBDb25maWd1cmF0aW9uKTogSW5zdGFsbEFwcExpbmtbXSB7XG4gICAgY29uc3QgcmVzdWx0OiBJbnN0YWxsQXBwTGlua1tdID0gW107XG5cbiAgICAvLyBDb21wdXRlIEFwcCBuYW1lXG4gICAgY29uc3QgbWluVmVyc2lvbiA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkFQUF9NSU5fVkVSU0lPTik7XG4gICAgY29uc3QgZGVmYXVsdEFwcE5hbWUgPSB0aGlzLmVudmlyb25tZW50LmRlZmF1bHRBcHBOYW1lIHx8ICdTVU1BUmlTJztcblxuICAgIC8vIEFuZHJvaWRcbiAgICB7XG4gICAgICAvLyBHZXQgVVJMIChmcm9tIGNvbmZpZywgb3IgZW52aXJvbm1lbnQpXG4gICAgICBsZXQgdXJsID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuQU5EUk9JRF9JTlNUQUxMX1VSTCk7XG4gICAgICBpZiAoaXNOaWxPckJsYW5rKHVybCkpIHVybCA9IHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdEFuZHJvaWRJbnN0YWxsVXJsIHx8IG51bGw7XG5cbiAgICAgIC8vIFJlc29sdmUgcmVsYXRpdmUgVVJMXG4gICAgICBjb25zdCBwZWVyID0gdGhpcy5uZXR3b3JrLnBlZXI7XG4gICAgICBpZiAocGVlciAmJiB1cmwgJiYgKHVybC5zdGFydHNXaXRoKCcuLycpIHx8IHVybC5zdGFydHNXaXRoKCcvJykpKSB7XG4gICAgICAgIHVybCA9IFBlZXIucGF0aChwZWVyLCB1cmwpO1xuICAgICAgfVxuXG4gICAgICAvLyBDb21wdXRlIEFwcCBuYW1lICh1c2UgY29uZmlnIGlmIFVSTCBpcyBzcGVjaWZpYylcbiAgICAgIGNvbnN0IG5hbWU6IHN0cmluZyA9IGlzTm90TmlsT3JCbGFuayh1cmwpID8gY29uZmlnLmxhYmVsIDogZGVmYXVsdEFwcE5hbWU7XG5cbiAgICAgIGlmICh1cmwpIHtcbiAgICAgICAgbGV0IHRpdGxlOiBzdHJpbmc7XG4gICAgICAgIGxldCBtaW1lVHlwZTogc3RyaW5nO1xuXG4gICAgICAgIC8vIEdldCBmaWxlIG5hbWVcbiAgICAgICAgbGV0IGZpbGVuYW1lID0gVXJpVXRpbHMuZ2V0RmlsZW5hbWUodXJsKTtcbiAgICAgICAgbGV0IHZlcnNpb24gPSBtaW5WZXJzaW9uIHx8ICdsYXRlc3QnO1xuXG4gICAgICAgIC8vIE9LLCB0aGlzIGlzIGEgZG93bmxvYWRhYmxlIEFQSyBmaWxlIChlLmcuIE5PVCBhIGxpbmsgdG8gYSBwbGF5c3RvcmUpXG4gICAgICAgIGlmIChmaWxlbmFtZT8udG9Mb3dlckNhc2UoKS5lbmRzV2l0aCgnLmFwaycpKSB7XG4gICAgICAgICAgLy8gRGVmaW5lIG1pbWUgdHlwZVxuICAgICAgICAgIG1pbWVUeXBlID0gTWltZVR5cGVzLkFORFJPSURfQVBLO1xuXG4gICAgICAgICAgLy8gR2V0IHRoZSBmaWxlIHZlcnNpb24gKGlmIGFueSlcbiAgICAgICAgICBjb25zdCB2ZXJzaW9uTWF0Y2hlcyA9IC8tdihbMS05XVswLTldKlxcLlswLTldK1xcLig6Pyg6P2FscGhhfGJldGF8cmMpP1swLTldKikpL2kuZXhlYyhmaWxlbmFtZSk7XG4gICAgICAgICAgdmVyc2lvbiA9ICh2ZXJzaW9uTWF0Y2hlcyAmJiB2ZXJzaW9uTWF0Y2hlc1sxXSkgfHwgdmVyc2lvbjtcblxuICAgICAgICAgIC8vIENvbXB1dGUgYSBuZXcgZmlsZSBuYW1lLCB3aXRoIHRoZSB2ZXJzaW9uXG4gICAgICAgICAgaWYgKGlzTm90TmlsT3JCbGFuayhuYW1lKSAmJiB2ZXJzaW9uICE9PSAnbGF0ZXN0Jykge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBgJHtuYW1lfS12JHt2ZXJzaW9ufS5hcGtgLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB0aXRsZSA9IGAke25hbWV9IHYke3ZlcnNpb259YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZXBsYWNlICdsYXRlc3QnIHdpdGggdGhlIGFwcCB2ZXJzaW9uLCBpZiBwcmVzZW50IGluIHRoZSBmaWxlbmFtZVxuICAgICAgICAgIGVsc2UgaWYgKGZpbGVuYW1lLmluZGV4T2YoJ2xhdGVzdCcpICE9PSAtMSAmJiB2ZXJzaW9uICE9PSAnbGF0ZXN0Jykge1xuICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yZXBsYWNlKCdsYXRlc3QnLCB2ZXJzaW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHQucHVzaCh7IG5hbWUsIHVybCwgcGxhdGZvcm06ICdhbmRyb2lkJywgdmVyc2lvbiwgZmlsZW5hbWUsIHRpdGxlLCBtaW1lVHlwZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpT1NcbiAgICB7XG4gICAgICAvLyBHZXQgVVJMIChmcm9tIGNvbmZpZywgb3IgZW52aXJvbm1lbnQpXG4gICAgICBsZXQgdXJsID0gY29uZmlnLmdldFByb3BlcnR5KENPUkVfQ09ORklHX09QVElPTlMuSU9TX0lOU1RBTExfVVJMKTtcbiAgICAgIGlmIChpc05pbE9yQmxhbmsodXJsKSkgdXJsID0gdGhpcy5lbnZpcm9ubWVudC5kZWZhdWx0SU9TSW5zdGFsbFVybCB8fCBudWxsO1xuXG4gICAgICAvLyBSZXNvbHZlIHJlbGF0aXZlIFVSTFxuICAgICAgY29uc3QgcGVlciA9IHRoaXMubmV0d29yay5wZWVyO1xuICAgICAgaWYgKHBlZXIgJiYgdXJsICYmICh1cmwuc3RhcnRzV2l0aCgnLi8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnLycpKSkge1xuICAgICAgICB1cmwgPSBQZWVyLnBhdGgocGVlciwgdXJsKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcHV0ZSBBcHAgbmFtZSAodXNlIGNvbmZpZyBpZiBVUkwgaXMgc3BlY2lmaWMpXG4gICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSBpc05vdE5pbE9yQmxhbmsodXJsKSA/IGNvbmZpZy5sYWJlbCA6IGRlZmF1bHRBcHBOYW1lO1xuXG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBtaW5WZXJzaW9uIHx8ICdsYXRlc3QnO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGAke25hbWV9IHYke3ZlcnNpb259YDtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBuYW1lLCB1cmwsIHBsYXRmb3JtOiAnaW9zJywgdmVyc2lvbiwgdGl0bGUgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVza3RvcCAoRWxlY3Ryb24pXG4gICAge1xuICAgICAgLy8gR2V0IFVSTCAoZnJvbSBjb25maWcsIG9yIGVudmlyb25tZW50KVxuICAgICAgbGV0IHVybCA9IGNvbmZpZy5nZXRQcm9wZXJ0eShDT1JFX0NPTkZJR19PUFRJT05TLkRFU0tUT1BfSU5TVEFMTF9VUkwpO1xuICAgICAgaWYgKGlzTmlsT3JCbGFuayh1cmwpKSB1cmwgPSB0aGlzLmVudmlyb25tZW50LmRlZmF1bHREZXNrdG9wSW5zdGFsbFVybCB8fCBudWxsO1xuXG4gICAgICAvLyBSZXNvbHZlIHJlbGF0aXZlIFVSTFxuICAgICAgY29uc3QgcGVlciA9IHRoaXMubmV0d29yay5wZWVyO1xuICAgICAgaWYgKHBlZXIgJiYgdXJsICYmICh1cmwuc3RhcnRzV2l0aCgnLi8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnLycpKSkge1xuICAgICAgICB1cmwgPSBQZWVyLnBhdGgocGVlciwgdXJsKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcHV0ZSBBcHAgbmFtZSAodXNlIGNvbmZpZyBpZiBVUkwgaXMgc3BlY2lmaWMpXG4gICAgICBjb25zdCBuYW1lOiBzdHJpbmcgPSBpc05vdE5pbE9yQmxhbmsodXJsKSA/IGNvbmZpZy5sYWJlbCA6IGRlZmF1bHRBcHBOYW1lO1xuXG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb24gPSBtaW5WZXJzaW9uIHx8ICdsYXRlc3QnO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGAke25hbWV9IHYke3ZlcnNpb259YDtcbiAgICAgICAgcmVzdWx0LnB1c2goeyBuYW1lLCB1cmwsIHBsYXRmb3JtOiAnZWxlY3Ryb24nLCB2ZXJzaW9uLCB0aXRsZSB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5Eb3dubG9hZEpvYnMoKSB7XG4gICAgLy8gTGlzdGVuaW5nIGRvd25sb2FkaW5nIHByb21pc2UsIGlmIGV4aXN0c1xuICAgICh0aGlzLnVwZ3JhZGVMaW5rcyB8fCBbXSkuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgY29uc3Qgam9iID0gdGhpcy5wbGF0Zm9ybS5nZXREb3dubG9hZGluZ0pvYihsaW5rLnVybCk7XG4gICAgICBpZiAoam9iKSB7XG4gICAgICAgIGxpbmsuZG93bmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpc3RlbkRvd25sb2FkSm9iKGxpbmsudXJsLCBqb2IpXG4gICAgICAgICAgLnRoZW4oKGxvY2F0aW9uKSA9PiB7XG4gICAgICAgICAgICBsaW5rLmxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgICAgICAgICBsaW5rLmRvd25sb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKCkgPT4gKGxpbmsuZG93bmxvYWRpbmcgPSBmYWxzZSkpXG4gICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5tYXJrRm9yQ2hlY2soKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxpc3RlbkRvd25sb2FkSm9iKHVybDogc3RyaW5nLCBqb2I6IE9ic2VydmFibGU8c3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgaWYgKCF1cmwgfHwgIWpvYikgcmV0dXJuOyAvLyBTa2lwXG5cbiAgICB0cnkge1xuICAgICAgLy8gTWFyayBhcyBkb3dubG9hZGluZ1xuICAgICAgaWYgKCF0aGlzLmRvd25sb2FkaW5nKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2luc3RhbGwtdXBncmFkZS1jYXJkXSBBc2tpbmcgcGxhdGZvcm0gdG8gZG93bmxvYWQgJyR7dXJsfScuLi5gKTtcbiAgICAgICAgdGhpcy5kb3dubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtpbnN0YWxsLXVwZ3JhZGUtY2FyZF0gUGxhdGZvcm0gaXMgYWxyZWFkeSBkb3dubG9hZGluZyFgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbG9jYXRpb24gPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShqb2IpO1xuICAgICAgaWYgKGxvY2F0aW9uKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbygnW2luc3RhbGwtdXBncmFkZS1jYXJkXSBGaWxlIGRvd25sb2FkZWQgYXQ6ICcgKyBsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuc2hvd0Rvd25sb2FkQ29tcGxldGVEaWFsb2coKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsb2NhdGlvbjtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIEZhaWxlZDogZGlzcGxheSBhIHRvYXN0XG4gICAgICBjb25zb2xlLmVycm9yKCdbaW5zdGFsbC11cGdyYWRlLWNhcmRdIERvd25sb2FkIGZhaWxlZDogJyArICgoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpKTtcbiAgICAgIHRoaXMuc2hvd0Rvd25sb2FkRmFpbGVkVG9hc3QoZXJyKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kb3dubG9hZGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNob3dEb3dubG9hZEZhaWxlZFRvYXN0KGVycikge1xuICAgIHJldHVybiB0aGlzLnNob3dUb2FzdCh7XG4gICAgICBtZXNzYWdlOiAnRVJST1IuRE9XTkxPQURfRkFJTEVEJyxcbiAgICAgIG1lc3NhZ2VQYXJhbXM6IHsgZXJyb3I6IGVyciB9LFxuICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hvd0Rvd25sb2FkQ29tcGxldGVEaWFsb2coKSB7XG4gICAgaWYgKCF0aGlzLl9zdWJzY3JpcHRpb24pIHJldHVybjsgLy8gU2tpcCBpZiBjb21wb25lbnQgaGFzIGJlZW4gZGVzdHJveWVkXG5cbiAgICBjb25zdCB0cmFuc2xhdGlvbnMgPSBhd2FpdCB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFsnSU5GTy5BTEVSVF9IRUFERVInLCAnSU5GTy5VUERBVEVfQVBQX0RPV05MT0FERUQnLCAnQ09NTU9OLkJUTl9DTE9TRSddKTtcbiAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICBoZWFkZXI6IHRyYW5zbGF0aW9uc1snSU5GTy5BTEVSVF9IRUFERVInXSxcbiAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0aW9uc1snSU5GTy5VUERBVEVfQVBQX0RPV05MT0FERUQnXSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0aW9uc1snQ09NTU9OLkJUTl9DTE9TRSddLFxuICAgICAgICAgIHJvbGU6ICdjYW5jZWwnLFxuICAgICAgICAgIGNzc0NsYXNzOiAnc2Vjb25kYXJ5JyxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBhd2FpdCBhbGVydC5wcmVzZW50KCk7XG4gICAgYXdhaXQgYWxlcnQub25EaWREaXNtaXNzKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICBpZiAoIXRoaXMuX3N1YnNjcmlwdGlvbikgcmV0dXJuOyAvLyBTa2lwIGlmIGRlc3Ryb3llZFxuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNob3dUb2FzdChvcHRzOiBTaG93VG9hc3RPcHRpb25zKSB7XG4gICAgaWYgKCF0aGlzLl9zdWJzY3JpcHRpb24pIHJldHVybjsgLy8gU2tpcCBpZiBjb21wb25lbnQgaGFzIGJlZW4gZGVzdHJveWVkXG4gICAgYXdhaXQgVG9hc3RzLnNob3codGhpcy50b2FzdENvbnRyb2xsZXIsIHRoaXMudHJhbnNsYXRlLCBvcHRzKTtcbiAgfVxufVxuIiwiPCEtLSBPZmZsaW5lIG1vZGUgY2FyZC0tPlxuPGlvbi1jYXJkXG4gICpuZ0lmPVwic2hvd09mZmxpbmVXYXJuaW5nICYmICgoIWxvYWRpbmcgJiYgb2ZmbGluZSkgfHwgd2FpdGluZ05ldHdvcmspXCJcbiAgY29sb3I9XCJhY2NlbnRcIlxuICBjbGFzcz1cIm1haW4gaW9uLW5vLW1hcmdpblwiXG4gIEBzbGlkZVVwRG93bkFuaW1hdGlvblxuPlxuICA8aW9uLWNhcmQtY29udGVudCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgPGlvbi1ncmlkPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIEBpZiAod2FpdGluZ05ldHdvcmspIHtcbiAgICAgICAgICAgIDxpb24tdGV4dCBjbGFzcz1cImlvbi10ZXh0LXdyYXBcIiBbaW5uZXJIVE1MXT1cIidORVRXT1JLLklORk8uUkVUUllfVE9fQ09OTkVDVCcgfCB0cmFuc2xhdGVcIj48L2lvbi10ZXh0PlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLXRleHQtd3JhcFwiPlxuICAgICAgICAgICAgICA8aDQ+XG4gICAgICAgICAgICAgICAgQGlmIChpc0xvZ2luKSB7XG4gICAgICAgICAgICAgICAgICA8YiBbaW5uZXJIVE1MXT1cIidORVRXT1JLLklORk8uT0ZGTElORV9PUl9VTkFVVEhPUklaRUQnIHwgdHJhbnNsYXRlXCI+PC9iPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgPGIgW2lubmVySFRNTF09XCInTkVUV09SSy5JTkZPLk9GRkxJTkUnIHwgdHJhbnNsYXRlXCI+PC9iPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgPGgzPlxuICAgICAgICAgICAgICAgIDxzbWFsbCBbaW5uZXJIVE1MXT1cIidORVRXT1JLLklORk8uT0ZGTElORV9IRUxQJyB8IHRyYW5zbGF0ZVwiPjwvc21hbGw+XG4gICAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiIGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWVuZFwiPlxuICAgICAgICAgIDwhLS0gUmV0cnkgYnV0dG9uIC0tPlxuICAgICAgICAgIEBpZiAod2FpdGluZ05ldHdvcmspIHtcbiAgICAgICAgICAgIDxpb24tc3Bpbm5lciBjb2xvcj1cImxpZ2h0XCI+PC9pb24tc3Bpbm5lcj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxpb24tYnV0dG9uIGNvbG9yPVwidGVydGlhcnlcIiBjbGFzcz1cImlvbi1mbG9hdC1lbmRcIiAoY2xpY2spPVwidHJ5T25saW5lKClcIj5cbiAgICAgICAgICAgICAgPHNwYW4gdHJhbnNsYXRlPk5FVFdPUksuQlROX0NIRUNLX0FMSVZFPC9zcGFuPlxuICAgICAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgICAgIH1cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIDwvaW9uLWNhcmQtY29udGVudD5cbjwvaW9uLWNhcmQ+XG5cbjwhLS0gVXBncmFkZSBsaW5rcyAtLT5cbjxpb24tY2FyZFxuICAqbmdJZj1cInNob3dVcGdyYWRlV2FybmluZyAmJiAhbG9hZGluZyAmJiAhb2ZmbGluZSAmJiB1cGdyYWRlTGlua3NcIlxuICBjb2xvcj1cImFjY2VudFwiXG4gIGNsYXNzPVwiaW9uLW5vLW1hcmdpblwiXG4gIEBzbGlkZVVwRG93bkFuaW1hdGlvblxuPlxuICA8aW9uLWNhcmQtY29udGVudCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgPGlvbi1ncmlkPlxuICAgICAgPGlvbi1yb3cgKm5nRm9yPVwibGV0IGxpbmsgb2YgdXBncmFkZUxpbmtzOyBsYXN0IGFzIGxhc3RcIj5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi10ZXh0IGNsYXNzPVwiaW9uLXRleHQtd3JhcFwiPlxuICAgICAgICAgICAgPGgzPlxuICAgICAgICAgICAgICBAaWYgKGxpbmsudmVyc2lvbikge1xuICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiJ0lORk8uVVBEQVRFX0FQUF9UT19WRVJTSU9OJyB8IHRyYW5zbGF0ZTogbGlua1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCInSU5GTy5VUERBVEVfQVBQJyB8IHRyYW5zbGF0ZTogbGlua1wiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICAgIDxoND5cbiAgICAgICAgICAgICAgQGlmIChsYXN0KSB7XG4gICAgICAgICAgICAgICAgPHNtYWxsIFtpbm5lckhUTUxdPVwiJ0lORk8uVVBEQVRFX0FQUF9IRUxQJyB8IHRyYW5zbGF0ZVwiPjwvc21hbGw+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDxpb24tY29sIHNpemU9XCJhdXRvXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRvd25sb2FkQnV0dG9uOyBjb250ZXh0OiB7ICRpbXBsaWNpdDogbGluayB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvaW9uLWNvbD5cbiAgICAgIDwvaW9uLXJvdz5cbiAgICA8L2lvbi1ncmlkPlxuICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG48L2lvbi1jYXJkPlxuXG48IS0tIEluc3RhbGwgbGlua3MgLS0+XG48aW9uLWNhcmRcbiAgKm5nSWY9XCJzaG93SW5zdGFsbEJ1dHRvbiAmJiAhbG9hZGluZyAmJiAhb2ZmbGluZSAmJiBpbnN0YWxsTGlua3NcIlxuICBjb2xvcj1cInNlY29uZGFyeVwiXG4gIGNsYXNzPVwiaW9uLW5vLW1hcmdpblwiXG4gIEBzbGlkZVVwRG93bkFuaW1hdGlvblxuPlxuICA8aW9uLWNhcmQtY29udGVudCBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCI+XG4gICAgPGlvbi1ncmlkPlxuICAgICAgPGlvbi1yb3cgKm5nRm9yPVwibGV0IGxpbmsgb2YgaW5zdGFsbExpbmtzOyBsYXN0IGFzIGxhc3RcIj5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjEyXCIgc2l6ZS1zbT1cIjhcIj5cbiAgICAgICAgICA8aW9uLXRleHQgY2xhc3M9XCJpb24tdGV4dC13cmFwXCI+XG4gICAgICAgICAgICA8aDNcbiAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJcbiAgICAgICAgICAgICAgICAnSU5GTy5ET1dOTE9BRF9BUFBfVElUTEUnIHwgdHJhbnNsYXRlOiB7IG5hbWU6IGxpbmsubmFtZSwgcGxhdGZvcm06IGdldFBsYXRmb3JtTmFtZShsaW5rLnBsYXRmb3JtKSB9XG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9oMz5cbiAgICAgICAgICAgIDxoND48c21hbGwgKm5nSWY9XCJsYXN0XCIgW2lubmVySFRNTF09XCInSU5GTy5ET1dOTE9BRF9BUFBfSEVMUCcgfCB0cmFuc2xhdGVcIj48L3NtYWxsPjwvaDQ+XG4gICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiMTJcIiBzaXplLXNtPVwiNFwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkb3dubG9hZEJ1dHRvbjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGxpbmsgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2lvbi1jb2w+XG4gICAgICA8L2lvbi1yb3c+XG4gICAgPC9pb24tZ3JpZD5cbiAgPC9pb24tY2FyZC1jb250ZW50PlxuPC9pb24tY2FyZD5cblxuPCEtLSBEaXNwbGF5IGEgZG93bmxvYWQgYnV0dG9uLCBkZXBlbmRpbmcgb24gdGhlIGxpbmsgVVJMLCBhbmQgdGhlIGRldmljZSBwbGF0Zm9ybSAtLT5cbjxuZy10ZW1wbGF0ZSAjZG93bmxvYWRCdXR0b24gbGV0LWxpbms+XG4gIEBpZiAobGluay5maWxlbmFtZSkge1xuICAgIEBpZiAoaGFzRG93bmxvYWRlcikge1xuICAgICAgPCEtLSBEb3dubG9hZCB1c2luZyBwbGF0Zm9ybSAtLT5cbiAgICAgIEBpZiAoIWxpbmsubG9jYXRpb24pIHtcbiAgICAgICAgPGlvbi1idXR0b25cbiAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWQoJGV2ZW50LCBhc0xpbmsobGluaykpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwibGluay5kb3dubG9hZGluZ1wiXG4gICAgICAgICAgY29sb3I9XCJ0ZXJ0aWFyeVwiXG4gICAgICAgICAgY2xhc3M9XCJpb24tZmxvYXQtZW5kXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpb24taWNvbiBzbG90PVwic3RhcnRcIiAqbmdJZj1cIiFsaW5rLmRvd25sb2FkaW5nXCIgbmFtZT1cImRvd25sb2FkXCI+PC9pb24taWNvbj5cbiAgICAgICAgICA8aW9uLXNwaW5uZXIgc2xvdD1cInN0YXJ0XCIgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiICpuZ0lmPVwibGluay5kb3dubG9hZGluZ1wiPjwvaW9uLXNwaW5uZXI+XG4gICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9ET1dOTE9BRDwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPCEtLSBPcGVuIEFQSyBidXR0b24gLS0+XG4gICAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJvcGVuRmlsZSgkZXZlbnQsIGxpbmspXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIGNsYXNzPVwiaW9uLWZsb2F0LWVuZFwiPlxuICAgICAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fSU5TVEFMTDwvaW9uLWxhYmVsPlxuICAgICAgICA8L2lvbi1idXR0b24+XG4gICAgICB9XG4gICAgfSBAZWxzZSB7XG4gICAgICA8IS0tIFdlYiBkb3dubG9hZCBidXR0b24gLS0+XG4gICAgICA8aW9uLWJ1dHRvbiBbZG93bmxvYWRdPVwibGluay5maWxlbmFtZVwiIFtocmVmXT1cImxpbmsudXJsXCIgY29sb3I9XCJ0ZXJ0aWFyeVwiIGNsYXNzPVwiaW9uLWZsb2F0LWVuZFwiPlxuICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uQlROX0RPV05MT0FEPC9pb24tbGFiZWw+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICA8IS0tIFdlYiByZWRpcmVjdCBidXR0b24gLS0+XG4gICAgPGlvbi1idXR0b24gW2hyZWZdPVwibGluay51cmxcIiByZWw9XCJleHRlcm5hbFwiIGNvbG9yPVwidGVydGlhcnlcIiBjbGFzcz1cImlvbi1mbG9hdC1lbmRcIiB0YXJnZXQ9XCJfYmxhbmtcIj5cbiAgICAgIDxpb24tbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5CVE5fU0hPV19NT1JFPC9pb24tbGFiZWw+XG4gICAgPC9pb24tYnV0dG9uPlxuICAgIEBpZiAoZGVidWcpIHtcbiAgICAgIDxpb24tbm90ZT57eyBsaW5rLnVybCB9fTwvaW9uLW5vdGU+XG4gICAgfVxuICB9XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
@@ -33,6 +33,7 @@ export class AudioProvider extends StartableService {
|
|
|
33
33
|
audioManagement;
|
|
34
34
|
_audioType;
|
|
35
35
|
_audioMode = AudioManagement.AudioMode.NORMAL;
|
|
36
|
+
_enableAudioManagment = false;
|
|
36
37
|
_assetPathPrefix = '';
|
|
37
38
|
_preloadedSounds = {};
|
|
38
39
|
_htmlAudioCache = {};
|
|
@@ -46,9 +47,10 @@ export class AudioProvider extends StartableService {
|
|
|
46
47
|
const cordova = this.platform.is('cordova');
|
|
47
48
|
this._assetPathPrefix = cordova ? 'public/' : '';
|
|
48
49
|
this._audioType = cordova && Capacitor.isPluginAvailable('NativeAudio') ? 'native' : 'html5';
|
|
49
|
-
|
|
50
|
+
this._enableAudioManagment = cordova && this.audioManagement && this.platform.is('android');
|
|
51
|
+
console.info(`[audio] Starting audio provider {type: ${this._audioType}, management: ${this._enableAudioManagment}}...`);
|
|
50
52
|
// Listen audio mode changed
|
|
51
|
-
if (
|
|
53
|
+
if (this._enableAudioManagment) {
|
|
52
54
|
await this.readAudioMode();
|
|
53
55
|
}
|
|
54
56
|
// Pre-loading system sounds
|
|
@@ -217,6 +219,10 @@ export class AudioProvider extends StartableService {
|
|
|
217
219
|
}
|
|
218
220
|
}
|
|
219
221
|
async setAudioMode(mode) {
|
|
222
|
+
if (!this._enableAudioManagment) {
|
|
223
|
+
console.debug(`[audio] Cannot change audio mode to {${audioModeToString(mode)}} - skipping`);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
220
226
|
try {
|
|
221
227
|
console.info(`[audio] Changing audio mode to {${audioModeToString(mode)}}`);
|
|
222
228
|
await this.audioManagement.setAudioMode(mode);
|
|
@@ -246,4 +252,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
246
252
|
}], ctorParameters: () => [{ type: i1.Platform }, { type: i2.AudioManagement, decorators: [{
|
|
247
253
|
type: Optional
|
|
248
254
|
}] }] });
|
|
249
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9hdWRpby9hdWRpby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBYTVDLE1BQU0sYUFBYSxHQUFZO0lBQzdCLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsNEJBQTRCLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtJQUMzRixFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLCtCQUErQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDdkYsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSw2QkFBNkIsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO0lBQ3BGLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxvQ0FBb0MsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0NBQzlHLENBQUM7QUFFRixNQUFNLHlCQUF5QixHQUFvQztJQUNqRSxTQUFTLEVBQUUsZUFBZSxDQUFDLFNB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QUFDO1FBQ0YsT0FBTyxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsS0FBSyxDQUFDLEtBQUssaUJBQWlCLEtBQUssQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3RHLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztJQUNwQyxDQUFDO3dHQTVOVSxhQUFhOzRHQUFiLGFBQWEsY0FEQSxNQUFNOzs0RkFDbkIsYUFBYTtrQkFEekIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7OzBCQVc3QixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgQXVkaW9NYW5hZ2VtZW50IH0gZnJvbSAnQGlvbmljLW5hdGl2ZS9hdWRpby1tYW5hZ2VtZW50L25neCc7XG5pbXBvcnQgeyBpc05pbCwgc2xlZXAsIHRvQm9vbGVhbiB9IGZyb20gJy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBTdGFydGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc3RhcnRhYmxlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgSGFwdGljcyB9IGZyb20gJ0BjYXBhY2l0b3IvaGFwdGljcyc7XG5pbXBvcnQgeyBOYXRpdmVBdWRpbyB9IGZyb20gJ0BjYXBhY2l0b3ItY29tbXVuaXR5L25hdGl2ZS1hdWRpbyc7XG5pbXBvcnQgeyBDYXBhY2l0b3IgfSBmcm9tICdAY2FwYWNpdG9yL2NvcmUnO1xuXG5leHBvcnQgdHlwZSBBdWRpb1R5cGUgPSAnaHRtbDUnIHwgJ25hdGl2ZSc7XG5leHBvcnQgaW50ZXJmYWNlIFNvdW5kIHtcbiAgYXNzZXRJZDogc3RyaW5nOyAvLyB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgZmlsZVxuICBhc3NldFBhdGg6IHN0cmluZzsgLy8gIHJlbGF0aXZlIHBhdGggb2YgdGhlIGZpbGUgb3IgYWJzb2x1dGUgdXJsIChmaWxlOi8vKVxuICB2b2x1bWU/OiBudW1iZXI7IC8vIFNvdW5kIHZvbHVtZVxuICBpc1VybD86IGJvb2xlYW47IC8vIHBhc3MgdHJ1ZSBpZiBhc3NldFBhdGggaXMgYSBgZmlsZTovL2AgdXJsXG4gIHRpbWU/OiBudW1iZXI7IC8vIHNvdW5kIHNlZWsgdGltZVxuICBhdWRpb0NoYW5uZWxOdW0/OiBudW1iZXI7IC8vIG51bWJlciBvZiBhdWRpbyBjaGFubmVsc1xuICB2aWJyYXRpb24/OiBudW1iZXIgfCBudW1iZXJbXTsgLy8gU2hvdWxkIHZpYnJhdGUgPyBzZXQgZHVyYXRpb25cbn1cblxuY29uc3QgU1lTVEVNX1NPVU5EUzogU291bmRbXSA9IFtcbiAgeyBhc3NldElkOiAnc3RhcnR1cCcsIGFzc2V0UGF0aDogJ2Fzc2V0cy9hdWRpby91bmZhLXBpbmcubXAzJywgdmlicmF0aW9uOiBbMzAwLCAyNTAsIDc1MF0gfSxcbiAgeyBhc3NldElkOiAnYmVlcC1jb25maXJtJywgYXNzZXRQYXRoOiAnYXNzZXRzL2F1ZGlvL2JlZXAtY29uZmlybS5tcDMnLCB2aWJyYXRpb246IDI1MCB9LFxuICB7IGFzc2V0SWQ6ICdiZWVwLWVycm9yJywgYXNzZXRQYXRoOiAnYXNzZXRzL2F1ZGlvL2JlZXAtZXJyb3IubXAzJywgdmlicmF0aW9uOiAxMDAwIH0sXG4gIHsgYXNzZXRJZDogJ2JlZXAtbm90aWZpY2F0aW9uJywgYXNzZXRQYXRoOiAnYXNzZXRzL2F1ZGlvL2JlZXAtbm90aWZpY2F0aW9uLm1wMycsIHZpYnJhdGlvbjogWzQ1MCwgMTUwLCA0NTBdIH0sXG5dO1xuXG5jb25zdCBERUZBVUxUX0FVRElPX01PREVfUkVUVVJOOiBBdWRpb01hbmFnZW1lbnQuQXVkaW9Nb2RlUmV0dXJuID0ge1xuICBhdWRpb01vZGU6IEF1ZGlvTWFuYWdlbWVudC5BdWRpb01vZGUuTk9STUFMLFxuICBsYWJlbDogJ05vcm1hbCcsXG59O1xuXG5mdW5jdGlvbiBhdWRpb01vZGVUb1N0cmluZyhtb2RlOiBBdWRpb01hbmFnZW1lbnQuQXVkaW9Nb2RlKSB7XG4gIHN3aXRjaCAobW9kZSkge1xuICAgIGNhc2UgQXVkaW9NYW5hZ2VtZW50LkF1ZGlvTW9kZS5TSUxFTlQ6XG4gICAgICByZXR1cm4gJ1NpbGVudCc7XG4gICAgY2FzZSBBdWRpb01hbmFnZW1lbnQuQXVkaW9Nb2RlLk5PUk1BTDpcbiAgICAgIHJldHVybiAnTm9ybWFsJztcbiAgICBjYXNlIEF1ZGlvTWFuYWdlbWVudC5BdWRpb01vZGUuVklCUkFURTpcbiAgICAgIHJldHVybiAnVmlicmF0ZSc7XG4gIH1cbn1cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBBdWRpb1Byb3ZpZGVyIGV4dGVuZHMgU3RhcnRhYmxlU2VydmljZTx2b2lkPiB7XG4gIHByaXZhdGUgX2F1ZGlvVHlwZTogQXVkaW9UeXBlO1xuICBwcml2YXRlIF9hdWRpb01vZGU6IEF1ZGlvTWFuYWdlbWVudC5BdWRpb01vZGUgPSBBdWRpb01hbmFnZW1lbnQuQXVkaW9Nb2RlLk5PUk1BTDtcbiAgcHJpdmF0ZSBfYXNzZXRQYXRoUHJlZml4ID0gJyc7XG5cbiAgcHJpdmF0ZSBfcHJlbG9hZGVkU291bmRzOiB7IFtpZDogc3RyaW5nXTogU291bmQgfSA9IHt9O1xuICBwcml2YXRlIF9odG1sQXVkaW9DYWNoZTogeyBbaWQ6IHN0cmluZ106IEhUTUxBdWRpb0VsZW1lbnQgfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBhdWRpb01hbmFnZW1lbnQ6IEF1ZGlvTWFuYWdlbWVudFxuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybSk7XG4gICAgY29uc29sZS5pbmZvKGBbYXVkaW9dIENyZWF0ZSBhdWRpbyBwcm92aWRlcmApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIG5nT25TdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjb3Jkb3ZhID0gdGhpcy5wbGF0Zm9ybS5pcygnY29yZG92YScpO1xuICAgIHRoaXMuX2Fzc2V0UGF0aFByZWZpeCA9IGNvcmRvdmEgPyAncHVibGljLycgOiAnJztcbiAgICB0aGlzLl9hdWRpb1R5cGUgPSBjb3Jkb3ZhICYmIENhcGFjaXRvci5pc1BsdWdpbkF2YWlsYWJsZSgnTmF0aXZlQXVkaW8nKSA/ICduYXRpdmUnIDogJ2h0bWw1JztcbiAgICBjb25zb2xlLmluZm8oYFthdWRpb10gU3RhcnRpbmcgYXVkaW8gcHJvdmlkZXIgeyR7dGhpcy5fYXVkaW9UeXBlfX0uLi5gKTtcblxuICAgIC8vIExpc3RlbiBhdWRpbyBtb2RlIGNoYW5nZWRcbiAgICBpZiAoY29yZG92YSAmJiB0aGlzLmF1ZGlvTWFuYWdlbWVudCkge1xuICAgICAgYXdhaXQgdGhpcy5yZWFkQXVkaW9Nb2RlKCk7XG4gICAgfVxuXG4gICAgLy8gUHJlLWxvYWRpbmcgc3lzdGVtIHNvdW5kc1xuICAgIGNvbnNvbGUuZGVidWcoJ1thdWRpb10gUHJlbG9hZGluZyBhdWRpbyBzb3VuZHMuLi4nKTtcbiAgICBsZXQgZXJyb3JDb3VudCA9IDA7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBTWVNURU1fU09VTkRTLm1hcCgocykgPT4ge1xuICAgICAgICAvLyBEaXNhYmxlIHZpYnJhdGlvbiBpbiBIVE1MIDUgbW9kZVxuICAgICAgICBpZiAodGhpcy5fYXVkaW9UeXBlID09PSAnaHRtbDUnKSBzLnZpYnJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlbG9hZChzKS5jYXRjaCgoXykgPT4gZXJyb3JDb3VudCsrKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmIChlcnJvckNvdW50ID4gMCkge1xuICAgICAgY29uc29sZS53YXJuKCdbYXVkaW9dIFByZWxvYWRpbmcgYXVkaW8gc291bmRzIFtPS10gd2l0aCAke2Vycm9yQ291bnR9IGVycm9ycyBkdXJpbmcgcHJlbG9hZC4nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW2F1ZGlvXSBQcmVsb2FkaW5nIGF1ZGlvIHNvdW5kcyBbT0tdJyk7XG4gICAgfVxuICB9XG5cbiAgcGxheUJlZXBDb25maXJtKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucGxheSgnYmVlcC1jb25maXJtJywge1xuICAgICAgLy8gVmlicmF0ZSBvbmx5IGlmIGluIHZpYnJhdGlvbiBtb2RlXG4gICAgICB2aWJyYXRlOiB0aGlzLl9hdWRpb01vZGUgPT09IEF1ZGlvTWFuYWdlbWVudC5BdWRpb01vZGUuVklCUkFURSxcbiAgICB9KTtcbiAgfVxuXG4gIHBsYXlCZWVwRXJyb3IoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wbGF5KCdiZWVwLWVycm9yJywge1xuICAgICAgLy8gQWx3YXlzIHZpYnJhdGUgKHdpbGwgc2tpcCB2aWJyYXRpb24gaWYgc2lsZW50IG1vZGUpXG4gICAgICB2aWJyYXRlOiB0cnVlLFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgcGxheUJlZXBOb3RpZmljYXRpb24oKTogUHJvbWlzZTxhbnk+IHtcbiAgICBhd2FpdCB0aGlzLnBsYXkoJ2JlZXAtbm90aWZpY2F0aW9uJywge1xuICAgICAgdmlicmF0ZTogdGhpcy5fYXVkaW9Nb2RlID09PSBBdWRpb01hbmFnZW1lbnQuQXVkaW9Nb2RlLlZJQlJBVEUsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBwbGF5U3RhcnR1cFNvdW5kKCk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMucGxheSgnc3RhcnR1cCcpO1xuICB9XG5cbiAgYXN5bmMgcHJlbG9hZChzb3VuZDogU291bmQpIHtcbiAgICBpZiAoIXNvdW5kPy5hc3NldElkKSByZXR1cm47IC8vIFNraXBcbiAgICBpZiAodGhpcy5fcHJlbG9hZGVkU291bmRzW3NvdW5kLmFzc2V0SWRdKSByZXR1cm47IC8vIEFscmVhZHkgcHJlbG9hZGVkXG4gICAgaWYgKGlzTmlsKHRoaXMuX2F1ZGlvVHlwZSkpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IGFzc2V0UGF0aCA9ICh0aGlzLl9hc3NldFBhdGhQcmVmaXggfHwgJycpICsgc291bmQuYXNzZXRQYXRoO1xuICAgIGNvbnNvbGUuaW5mbyhgW2F1ZGlvXSBQcmVsb2FkaW5nIHNvdW5kICcke3NvdW5kLmFzc2V0SWR9JywgZnJvbSBmaWxlICcke2Fzc2V0UGF0aH0nLi4uYCk7XG5cbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMuX2F1ZGlvVHlwZSA9PT0gJ25hdGl2ZScpIHtcbiAgICAgICAgdGhpcy5fcHJlbG9hZGVkU291bmRzW3NvdW5kLmFzc2V0SWRdID0gc291bmQ7XG4gICAgICAgIGF3YWl0IE5hdGl2ZUF1ZGlvLnByZWxvYWQoe1xuICAgICAgICAgIGF1ZGlvQ2hhbm5lbE51bTogMSxcbiAgICAgICAgICBpc1VybDogZmFsc2UsXG4gICAgICAgICAgLi4uc291bmQsXG4gICAgICAgICAgYXNzZXRQYXRoLFxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2h0bWxBdWRpb0NhY2hlW3NvdW5kLmFzc2V0SWRdID0gbmV3IEF1ZGlvKGFzc2V0UGF0aCk7XG4gICAgICAgIHRoaXMuX3ByZWxvYWRlZFNvdW5kc1tzb3VuZC5hc3NldElkXSA9IHNvdW5kO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgdG8gbWFwXG4gICAgICBjb25zb2xlLmluZm8oYFthdWRpb10gUHJlbG9hZGluZyBzb3VuZCAnJHtzb3VuZC5hc3NldElkfScgW09LXWApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc3QgZXJyb3JNc2cgPSBlcnI/Lm1lc3NhZ2UgfHwgZXJyO1xuICAgICAgaWYgKGVycm9yTXNnID09PSAnQXVkaW8gQXNzZXQgYWxyZWFkeSBleGlzdHMnKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW2F1ZGlvXSBQcmVsb2FkaW5nIHNvdW5kICcke3NvdW5kLmFzc2V0SWR9JzogU2tpcHBlZCAoJHtlcnJvck1zZ30pYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9wcmVsb2FkZWRTb3VuZHNbc291bmQuYXNzZXRJZF0gPSBudWxsO1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbYXVkaW9dIFVuYWJsZSB0byBwcmVsb2FkIHNvdW5kICcke3NvdW5kLmFzc2V0SWR9JywgZnJvbSBmaWxlICcke2Fzc2V0UGF0aH0nOiAke2Vycm9yTXNnfVxcbiR7ZXJyPy5vcmlnaW5hbFN0YWNrIHx8ICcnfWApO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcGxheShhc3NldElkOiBzdHJpbmcsIG9wdHM/OiB7IHZpYnJhdGU/OiBib29sZWFuOyB2aWJyYXRpb24/OiBudW1iZXIgfCBudW1iZXJbXSB9KSB7XG4gICAgLy8gTWFrZSBzdXJlIHByb3ZpZGVyIGlzIHJlYWR5XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcblxuICAgIGNvbnN0IHNvdW5kID0gdGhpcy5fcHJlbG9hZGVkU291bmRzW2Fzc2V0SWRdO1xuICAgIGlmICghc291bmQpIHtcbiAgICAgIHRocm93IEVycm9yKGBVbmFibGUgdG8gZmluZCBzb3VuZCAnJHthc3NldElkfScuIFBsZWFzZSBjYWxsIHByZWxvYWQoKSBiZWZvcmUgcGxheWluZyBhIHNvdW5kLmApO1xuICAgIH1cblxuICAgIC8vIElmIHNpbGVudDogc2tpcFxuICAgIGlmICh0aGlzLl9hdWRpb01vZGUgPT09IEF1ZGlvTWFuYWdlbWVudC5BdWRpb01vZGUuU0lMRU5UKSByZXR1cm47XG5cbiAgICBjb25zdCBwcm9taXNlczogUHJvbWlzZTxhbnk+W10gPSBbXTtcblxuICAgIC8vIE5vcm1hbCBtb2RlID0gY2FuIHBsYXkgdGhlIHNvdW5kXG4gICAgaWYgKHRoaXMuX2F1ZGlvTW9kZSA9PT0gQXVkaW9NYW5hZ2VtZW50LkF1ZGlvTW9kZS5OT1JNQUwpIHtcbiAgICAgIC8vIFVzZSBuYXRpdmUgYXVkaW9cbiAgICAgIGlmICh0aGlzLl9hdWRpb1R5cGUgPT09ICduYXRpdmUnKSB7XG4gICAgICAgIHByb21pc2VzLnB1c2goXG4gICAgICAgICAgTmF0aXZlQXVkaW8ucGxheSh7XG4gICAgICAgICAgICBhc3NldElkOiBzb3VuZC5hc3NldElkLFxuICAgICAgICAgICAgdGltZTogc291bmQudGltZSB8fCAwLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBPciBIVE1MIDUgYXVkaW9cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBhdWRpbyA9IHRoaXMuX2h0bWxBdWRpb0NhY2hlW2Fzc2V0SWRdIHx8IG5ldyBBdWRpbyhzb3VuZC5hc3NldFBhdGgpO1xuICAgICAgICBwcm9taXNlcy5wdXNoKGF1ZGlvLnBsYXkoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmlicmF0ZSBtb2RlOiBieSBkZWZhdWx0IG1ha2UgdmlicmF0aW9uIGlzIGVuYWJsZVxuICAgIGVsc2UgaWYgKGlzTmlsKHNvdW5kLnZpYnJhdGlvbikgJiYgaXNOaWwob3B0cyAmJiBvcHRzLnZpYnJhdGUpKSB7XG4gICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgIG9wdHMudmlicmF0ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gRG8gdmlicmF0aW9uIChpZiBzb3VuZCBhcyBkZWZhdWx0IHZpYnJhdGlvbiwgb3IgaWYgdXNlciBhc2sgZm9yIGl0KVxuICAgIGlmICh0b0Jvb2xlYW4ob3B0cz8udmlicmF0ZSwgISFzb3VuZC52aWJyYXRpb24pKSB7XG4gICAgICBwcm9taXNlcy5wdXNoKHRoaXMudmlicmF0ZSgob3B0cyAmJiBvcHRzLnZpYnJhdGlvbikgfHwgc291bmQudmlicmF0aW9uKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChwcm9taXNlcy5sZW5ndGggPT09IDEgPyBwcm9taXNlc1swXSA6IFByb21pc2UuYWxsKHByb21pc2VzKSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcihgW2F1ZGlvXSBFcnJvciB3aGlsZSBwbGF5aW5nIGF1ZGlvIHNvdW5kICcke2Fzc2V0SWR9JzogJHsoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnJ9YCwgZXJyKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHVubG9hZChhc3NldElkOiBzdHJpbmcpIHtcbiAgICBpZiAoaXNOaWwodGhpcy5fYXVkaW9UeXBlKSkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgLy8gUmVtb3ZlIGZyb20gbWFwXG4gICAgdGhpcy5fcHJlbG9hZGVkU291bmRzW2Fzc2V0SWRdID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gTmF0aXZlIHVubG9hZFxuICAgIGlmICh0aGlzLl9hdWRpb1R5cGUgPT09ICduYXRpdmUnKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBOYXRpdmVBdWRpby51bmxvYWQoeyBhc3NldElkIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFthdWRpb10gVW5hYmxlIHRvIHVubG9hZCBhdWRpbyAnJHthc3NldElkfSc6ICR7KGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyfWAsIGVycik7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEhUTUw1IGF1ZGlvIHVubG9hZFxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5faHRtbEF1ZGlvQ2FjaGVbYXNzZXRJZF0ucmVtb3ZlKCk7XG4gICAgICB0aGlzLl9odG1sQXVkaW9DYWNoZVthc3NldElkXSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGR1cmF0aW9uIER1cmF0aW9uIG9mIHRoZSB2aWJyYXRpb24gaW4gbWlsbGlzZWNvbmRzLlxuICAgKi9cbiAgYXN5bmMgdmlicmF0ZShkdXJhdGlvbj86IG51bWJlciB8IG51bWJlcltdKSB7XG4gICAgaWYgKCF0aGlzLnN0YXJ0ZWQpIGF3YWl0IHRoaXMucmVhZHkoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkdXJhdGlvbikpIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2F1ZGlvXSBWaWJyYXRlOiAnICsgSlNPTi5zdHJpbmdpZnkoZHVyYXRpb24pKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZHVyYXRpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgdGltZSA9IGR1cmF0aW9uW2ldO1xuICAgICAgICBjb25zdCBzaWxlbnQgPSBpICUgMiAhPT0gMDtcbiAgICAgICAgaWYgKHNpbGVudCkge1xuICAgICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2F1ZGlvXSBzaWxlbnQgZHVyaW5nICcgKyB0aW1lKTtcbiAgICAgICAgICBhd2FpdCBzbGVlcCh0aW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thdWRpb10gdmlicmF0ZSBkdXJpbmcgJyArIHRpbWUpO1xuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtIYXB0aWNzLnZpYnJhdGUoeyBkdXJhdGlvbjogdGltZSB9KSwgc2xlZXAodGltZSldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoJ1thdWRpb10gdmlicmF0ZSBkdXJpbmcgJyArIGR1cmF0aW9uKTtcbiAgICAgIGF3YWl0IEhhcHRpY3MudmlicmF0ZSh7IGR1cmF0aW9uIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNldEF1ZGlvTW9kZShtb2RlOiBBdWRpb01hbmFnZW1lbnQuQXVkaW9Nb2RlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnNvbGUuaW5mbyhgW2F1ZGlvXSBDaGFuZ2luZyBhdWRpbyBtb2RlIHRvIHske2F1ZGlvTW9kZVRvU3RyaW5nKG1vZGUpfX1gKTtcbiAgICAgIGF3YWl0IHRoaXMuYXVkaW9NYW5hZ2VtZW50LnNldEF1ZGlvTW9kZShtb2RlKTtcbiAgICAgIHRoaXMuX2F1ZGlvTW9kZSA9IG1vZGU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbYXVkaW9dIEVycm9yIHdoaWxlIGNoYW5naW5nIGF1ZGlvIG1vZGUgdG8geyR7YXVkaW9Nb2RlVG9TdHJpbmcobW9kZSl9fTogJHtlcnI/Lm1lc3NhZ2UgfHwgZXJyfWAsIGVycik7XG4gICAgICAvLyBDb250aW51ZVxuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzICAtLSAqL1xuXG4gIHByb3RlY3RlZCBhc3luYyByZWFkQXVkaW9Nb2RlKCkge1xuICAgIGxldCB2YWx1ZSA9IGF3YWl0IHRoaXMuYXVkaW9NYW5hZ2VtZW50LmdldEF1ZGlvTW9kZSgpO1xuICAgIHZhbHVlID0ge1xuICAgICAgLi4uREVGQVVMVF9BVURJT19NT0RFX1JFVFVSTixcbiAgICAgIC4uLnZhbHVlLFxuICAgIH07XG4gICAgY29uc29sZS5kZWJ1ZyhgW2F1ZGlvXSBEZXRlY3RlZCBhdWRpbyBtb2RlIHtsYWJlbDogJyR7dmFsdWUubGFiZWx9JywgYXVkaW9Nb2RlOiAke3ZhbHVlLmF1ZGlvTW9kZX19YCk7XG4gICAgdGhpcy5fYXVkaW9Nb2RlID0gdmFsdWUuYXVkaW9Nb2RlO1xuICB9XG59XG4iXX0=
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9hdWRpby9hdWRpby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVyRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDckUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7O0FBYTVDLE1BQU0sYUFBYSxHQUFZO0lBQzdCLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsNEJBQTRCLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRTtJQUMzRixFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLCtCQUErQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUU7SUFDdkYsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSw2QkFBNkIsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFO0lBQ3BGLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxvQ0FBb0MsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFO0NBQzlHLENBQUM7QUFFRixNQUFNLHlCQUF5QixHQUFvQztJQUNqRSxTQUFTLEVBQUUsZUFBZSxDQUFDLFNB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LENBQUMsS0FBSyxDQUFDLCtDQUErQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsT0FBTyxJQUFJLEdBQUcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3RILFdBQVc7UUFDYixDQUFDO0lBQ0gsQ0FBQztJQUVELDhCQUE4QjtJQUVwQixLQUFLLENBQUMsYUFBYTtRQUMzQixJQUFJLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEQsS0FBSyxHQUFHO1lBQ04sR0FBRyx5QkFBeUI7WUFDNUIsR0FBRyxLQUFLO1NBQ1QsQ0FBQztRQUNGLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0NBQXdDLEtBQUssQ0FBQyxLQUFLLGlCQUFpQixLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUN0RyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUM7SUFDcEMsQ0FBQzt3R0FuT1UsYUFBYTs0R0FBYixhQUFhLGNBREEsTUFBTTs7NEZBQ25CLGFBQWE7a0JBRHpCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFZN0IsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7IEF1ZGlvTWFuYWdlbWVudCB9IGZyb20gJ0Bpb25pYy1uYXRpdmUvYXVkaW8tbWFuYWdlbWVudC9uZ3gnO1xuaW1wb3J0IHsgaXNOaWwsIHNsZWVwLCB0b0Jvb2xlYW4gfSBmcm9tICcuLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgU3RhcnRhYmxlU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0YXJ0YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEhhcHRpY3MgfSBmcm9tICdAY2FwYWNpdG9yL2hhcHRpY3MnO1xuaW1wb3J0IHsgTmF0aXZlQXVkaW8gfSBmcm9tICdAY2FwYWNpdG9yLWNvbW11bml0eS9uYXRpdmUtYXVkaW8nO1xuaW1wb3J0IHsgQ2FwYWNpdG9yIH0gZnJvbSAnQGNhcGFjaXRvci9jb3JlJztcblxuZXhwb3J0IHR5cGUgQXVkaW9UeXBlID0gJ2h0bWw1JyB8ICduYXRpdmUnO1xuZXhwb3J0IGludGVyZmFjZSBTb3VuZCB7XG4gIGFzc2V0SWQ6IHN0cmluZzsgLy8gdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGZpbGVcbiAgYXNzZXRQYXRoOiBzdHJpbmc7IC8vICByZWxhdGl2ZSBwYXRoIG9mIHRoZSBmaWxlIG9yIGFic29sdXRlIHVybCAoZmlsZTovLylcbiAgdm9sdW1lPzogbnVtYmVyOyAvLyBTb3VuZCB2b2x1bWVcbiAgaXNVcmw/OiBib29sZWFuOyAvLyBwYXNzIHRydWUgaWYgYXNzZXRQYXRoIGlzIGEgYGZpbGU6Ly9gIHVybFxuICB0aW1lPzogbnVtYmVyOyAvLyBzb3VuZCBzZWVrIHRpbWVcbiAgYXVkaW9DaGFubmVsTnVtPzogbnVtYmVyOyAvLyBudW1iZXIgb2YgYXVkaW8gY2hhbm5lbHNcbiAgdmlicmF0aW9uPzogbnVtYmVyIHwgbnVtYmVyW107IC8vIFNob3VsZCB2aWJyYXRlID8gc2V0IGR1cmF0aW9uXG59XG5cbmNvbnN0IFNZU1RFTV9TT1VORFM6IFNvdW5kW10gPSBbXG4gIHsgYXNzZXRJZDogJ3N0YXJ0dXAnLCBhc3NldFBhdGg6ICdhc3NldHMvYXVkaW8vdW5mYS1waW5nLm1wMycsIHZpYnJhdGlvbjogWzMwMCwgMjUwLCA3NTBdIH0sXG4gIHsgYXNzZXRJZDogJ2JlZXAtY29uZmlybScsIGFzc2V0UGF0aDogJ2Fzc2V0cy9hdWRpby9iZWVwLWNvbmZpcm0ubXAzJywgdmlicmF0aW9uOiAyNTAgfSxcbiAgeyBhc3NldElkOiAnYmVlcC1lcnJvcicsIGFzc2V0UGF0aDogJ2Fzc2V0cy9hdWRpby9iZWVwLWVycm9yLm1wMycsIHZpYnJhdGlvbjogMTAwMCB9LFxuICB7IGFzc2V0SWQ6ICdiZWVwLW5vdGlmaWNhdGlvbicsIGFzc2V0UGF0aDogJ2Fzc2V0cy9hdWRpby9iZWVwLW5vdGlmaWNhdGlvbi5tcDMnLCB2aWJyYXRpb246IFs0NTAsIDE1MCwgNDUwXSB9LFxuXTtcblxuY29uc3QgREVGQVVMVF9BVURJT19NT0RFX1JFVFVSTjogQXVkaW9NYW5hZ2VtZW50LkF1ZGlvTW9kZVJldHVybiA9IHtcbiAgYXVkaW9Nb2RlOiBBdWRpb01hbmFnZW1lbnQuQXVkaW9Nb2RlLk5PUk1BTCxcbiAgbGFiZWw6ICdOb3JtYWwnLFxufTtcblxuZnVuY3Rpb24gYXVkaW9Nb2RlVG9TdHJpbmcobW9kZTogQXVkaW9NYW5hZ2VtZW50LkF1ZGlvTW9kZSkge1xuICBzd2l0Y2ggKG1vZGUpIHtcbiAgICBjYXNlIEF1ZGlvTWFuYWdlbWVudC5BdWRpb01vZGUuU0lMRU5UOlxuICAgICAgcmV0dXJuICdTaWxlbnQnO1xuICAgIGNhc2UgQXVkaW9NYW5hZ2VtZW50LkF1ZGlvTW9kZS5OT1JNQUw6XG4gICAgICByZXR1cm4gJ05vcm1hbCc7XG4gICAgY2FzZSBBdWRpb01hbmFnZW1lbnQuQXVkaW9Nb2RlLlZJQlJBVEU6XG4gICAgICByZXR1cm4gJ1ZpYnJhdGUnO1xuICB9XG59XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgQXVkaW9Qcm92aWRlciBleHRlbmRzIFN0YXJ0YWJsZVNlcnZpY2U8dm9pZD4ge1xuICBwcml2YXRlIF9hdWRpb1R5cGU6IEF1ZGlvVHlwZTtcbiAgcHJpdmF0ZSBfYXVkaW9Nb2RlOiBBdWRpb01hbmFnZW1lbnQuQXVkaW9Nb2RlID0gQXVkaW9NYW5hZ2VtZW50LkF1ZGlvTW9kZS5OT1JNQUw7XG4gIHByaXZhdGUgX2VuYWJsZUF1ZGlvTWFuYWdtZW50ID0gZmFsc2U7XG4gIHByaXZhdGUgX2Fzc2V0UGF0aFByZWZpeCA9ICcnO1xuXG4gIHByaXZhdGUgX3ByZWxvYWRlZFNvdW5kczogeyBbaWQ6IHN0cmluZ106IFNvdW5kIH0gPSB7fTtcbiAgcHJpdmF0ZSBfaHRtbEF1ZGlvQ2FjaGU6IHsgW2lkOiBzdHJpbmddOiBIVE1MQXVkaW9FbGVtZW50IH0gPSB7fTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgYXVkaW9NYW5hZ2VtZW50OiBBdWRpb01hbmFnZW1lbnRcbiAgKSB7XG4gICAgc3VwZXIocGxhdGZvcm0pO1xuICAgIGNvbnNvbGUuaW5mbyhgW2F1ZGlvXSBDcmVhdGUgYXVkaW8gcHJvdmlkZXJgKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBuZ09uU3RhcnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY29yZG92YSA9IHRoaXMucGxhdGZvcm0uaXMoJ2NvcmRvdmEnKTtcbiAgICB0aGlzLl9hc3NldFBhdGhQcmVmaXggPSBjb3Jkb3ZhID8gJ3B1YmxpYy8nIDogJyc7XG4gICAgdGhpcy5fYXVkaW9UeXBlID0gY29yZG92YSAmJiBDYXBhY2l0b3IuaXNQbHVnaW5BdmFpbGFibGUoJ05hdGl2ZUF1ZGlvJykgPyAnbmF0aXZlJyA6ICdodG1sNSc7XG4gICAgdGhpcy5fZW5hYmxlQXVkaW9NYW5hZ21lbnQgPSBjb3Jkb3ZhICYmIHRoaXMuYXVkaW9NYW5hZ2VtZW50ICYmIHRoaXMucGxhdGZvcm0uaXMoJ2FuZHJvaWQnKTtcbiAgICBjb25zb2xlLmluZm8oYFthdWRpb10gU3RhcnRpbmcgYXVkaW8gcHJvdmlkZXIge3R5cGU6ICR7dGhpcy5fYXVkaW9UeXBlfSwgbWFuYWdlbWVudDogJHt0aGlzLl9lbmFibGVBdWRpb01hbmFnbWVudH19Li4uYCk7XG5cbiAgICAvLyBMaXN0ZW4gYXVkaW8gbW9kZSBjaGFuZ2VkXG4gICAgaWYgKHRoaXMuX2VuYWJsZUF1ZGlvTWFuYWdtZW50KSB7XG4gICAgICBhd2FpdCB0aGlzLnJlYWRBdWRpb01vZGUoKTtcbiAgICB9XG5cbiAgICAvLyBQcmUtbG9hZGluZyBzeXN0ZW0gc291bmRzXG4gICAgY29uc29sZS5kZWJ1ZygnW2F1ZGlvXSBQcmVsb2FkaW5nIGF1ZGlvIHNvdW5kcy4uLicpO1xuICAgIGxldCBlcnJvckNvdW50ID0gMDtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIFNZU1RFTV9TT1VORFMubWFwKChzKSA9PiB7XG4gICAgICAgIC8vIERpc2FibGUgdmlicmF0aW9uIGluIEhUTUwgNSBtb2RlXG4gICAgICAgIGlmICh0aGlzLl9hdWRpb1R5cGUgPT09ICdodG1sNScpIHMudmlicmF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVsb2FkKHMpLmNhdGNoKChfKSA9PiBlcnJvckNvdW50KyspO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKGVycm9yQ291bnQgPiAwKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1thdWRpb10gUHJlbG9hZGluZyBhdWRpbyBzb3VuZHMgW09LXSB3aXRoICR7ZXJyb3JDb3VudH0gZXJyb3JzIGR1cmluZyBwcmVsb2FkLicpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbYXVkaW9dIFByZWxvYWRpbmcgYXVkaW8gc291bmRzIFtPS10nKTtcbiAgICB9XG4gIH1cblxuICBwbGF5QmVlcENvbmZpcm0oKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wbGF5KCdiZWVwLWNvbmZpcm0nLCB7XG4gICAgICAvLyBWaWJyYXRlIG9ubHkgaWYgaW4gdmlicmF0aW9uIG1vZGVcbiAgICAgIHZpYnJhdGU6IHRoaXMuX2F1ZGlvTW9kZSA9PT0gQXVkaW9NYW5hZ2VtZW50LkF1ZGlvTW9kZS5WSUJSQVRFLFxuICAgIH0pO1xuICB9XG5cbiAgcGxheUJlZXBFcnJvcigpOiBQcm9taXNlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLnBsYXkoJ2JlZXAtZXJyb3InLCB7XG4gICAgICAvLyBBbHdheXMgdmlicmF0ZSAod2lsbCBza2lwIHZpYnJhdGlvbiBpZiBzaWxlbnQgbW9kZSlcbiAgICAgIHZpYnJhdGU6IHRydWUsXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBwbGF5QmVlcE5vdGlmaWNhdGlvbigpOiBQcm9taXNlPGFueT4ge1xuICAgIGF3YWl0IHRoaXMucGxheSgnYmVlcC1ub3RpZmljYXRpb24nLCB7XG4gICAgICB2aWJyYXRlOiB0aGlzLl9hdWRpb01vZGUgPT09IEF1ZGlvTWFuYWdlbWVudC5BdWRpb01vZGUuVklCUkFURSxcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIHBsYXlTdGFydHVwU291bmQoKTogUHJvbWlzZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5wbGF5KCdzdGFydHVwJyk7XG4gIH1cblxuICBhc3luYyBwcmVsb2FkKHNvdW5kOiBTb3VuZCkge1xuICAgIGlmICghc291bmQ/LmFzc2V0SWQpIHJldHVybjsgLy8gU2tpcFxuICAgIGlmICh0aGlzLl9wcmVsb2FkZWRTb3VuZHNbc291bmQuYXNzZXRJZF0pIHJldHVybjsgLy8gQWxyZWFkeSBwcmVsb2FkZWRcbiAgICBpZiAoaXNOaWwodGhpcy5fYXVkaW9UeXBlKSkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3QgYXNzZXRQYXRoID0gKHRoaXMuX2Fzc2V0UGF0aFByZWZpeCB8fCAnJykgKyBzb3VuZC5hc3NldFBhdGg7XG4gICAgY29uc29sZS5pbmZvKGBbYXVkaW9dIFByZWxvYWRpbmcgc291bmQgJyR7c291bmQuYXNzZXRJZH0nLCBmcm9tIGZpbGUgJyR7YXNzZXRQYXRofScuLi5gKTtcblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5fYXVkaW9UeXBlID09PSAnbmF0aXZlJykge1xuICAgICAgICB0aGlzLl9wcmVsb2FkZWRTb3VuZHNbc291bmQuYXNzZXRJZF0gPSBzb3VuZDtcbiAgICAgICAgYXdhaXQgTmF0aXZlQXVkaW8ucHJlbG9hZCh7XG4gICAgICAgICAgYXVkaW9DaGFubmVsTnVtOiAxLFxuICAgICAgICAgIGlzVXJsOiBmYWxzZSxcbiAgICAgICAgICAuLi5zb3VuZCxcbiAgICAgICAgICBhc3NldFBhdGgsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faHRtbEF1ZGlvQ2FjaGVbc291bmQuYXNzZXRJZF0gPSBuZXcgQXVkaW8oYXNzZXRQYXRoKTtcbiAgICAgICAgdGhpcy5fcHJlbG9hZGVkU291bmRzW3NvdW5kLmFzc2V0SWRdID0gc291bmQ7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB0byBtYXBcbiAgICAgIGNvbnNvbGUuaW5mbyhgW2F1ZGlvXSBQcmVsb2FkaW5nIHNvdW5kICcke3NvdW5kLmFzc2V0SWR9JyBbT0tdYCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zdCBlcnJvck1zZyA9IGVycj8ubWVzc2FnZSB8fCBlcnI7XG4gICAgICBpZiAoZXJyb3JNc2cgPT09ICdBdWRpbyBBc3NldCBhbHJlYWR5IGV4aXN0cycpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbYXVkaW9dIFByZWxvYWRpbmcgc291bmQgJyR7c291bmQuYXNzZXRJZH0nOiBTa2lwcGVkICgke2Vycm9yTXNnfSlgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3ByZWxvYWRlZFNvdW5kc1tzb3VuZC5hc3NldElkXSA9IG51bGw7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFthdWRpb10gVW5hYmxlIHRvIHByZWxvYWQgc291bmQgJyR7c291bmQuYXNzZXRJZH0nLCBmcm9tIGZpbGUgJyR7YXNzZXRQYXRofSc6ICR7ZXJyb3JNc2d9XFxuJHtlcnI/Lm9yaWdpbmFsU3RhY2sgfHwgJyd9YCk7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBwbGF5KGFzc2V0SWQ6IHN0cmluZywgb3B0cz86IHsgdmlicmF0ZT86IGJvb2xlYW47IHZpYnJhdGlvbj86IG51bWJlciB8IG51bWJlcltdIH0pIHtcbiAgICAvLyBNYWtlIHN1cmUgcHJvdmlkZXIgaXMgcmVhZHlcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuXG4gICAgY29uc3Qgc291bmQgPSB0aGlzLl9wcmVsb2FkZWRTb3VuZHNbYXNzZXRJZF07XG4gICAgaWYgKCFzb3VuZCkge1xuICAgICAgdGhyb3cgRXJyb3IoYFVuYWJsZSB0byBmaW5kIHNvdW5kICcke2Fzc2V0SWR9Jy4gUGxlYXNlIGNhbGwgcHJlbG9hZCgpIGJlZm9yZSBwbGF5aW5nIGEgc291bmQuYCk7XG4gICAgfVxuXG4gICAgLy8gSWYgc2lsZW50OiBza2lwXG4gICAgaWYgKHRoaXMuX2F1ZGlvTW9kZSA9PT0gQXVkaW9NYW5hZ2VtZW50LkF1ZGlvTW9kZS5TSUxFTlQpIHJldHVybjtcblxuICAgIGNvbnN0IHByb21pc2VzOiBQcm9taXNlPGFueT5bXSA9IFtdO1xuXG4gICAgLy8gTm9ybWFsIG1vZGUgPSBjYW4gcGxheSB0aGUgc291bmRcbiAgICBpZiAodGhpcy5fYXVkaW9Nb2RlID09PSBBdWRpb01hbmFnZW1lbnQuQXVkaW9Nb2RlLk5PUk1BTCkge1xuICAgICAgLy8gVXNlIG5hdGl2ZSBhdWRpb1xuICAgICAgaWYgKHRoaXMuX2F1ZGlvVHlwZSA9PT0gJ25hdGl2ZScpIHtcbiAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICBOYXRpdmVBdWRpby5wbGF5KHtcbiAgICAgICAgICAgIGFzc2V0SWQ6IHNvdW5kLmFzc2V0SWQsXG4gICAgICAgICAgICB0aW1lOiBzb3VuZC50aW1lIHx8IDAsXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIE9yIEhUTUwgNSBhdWRpb1xuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGF1ZGlvID0gdGhpcy5faHRtbEF1ZGlvQ2FjaGVbYXNzZXRJZF0gfHwgbmV3IEF1ZGlvKHNvdW5kLmFzc2V0UGF0aCk7XG4gICAgICAgIHByb21pc2VzLnB1c2goYXVkaW8ucGxheSgpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWaWJyYXRlIG1vZGU6IGJ5IGRlZmF1bHQgbWFrZSB2aWJyYXRpb24gaXMgZW5hYmxlXG4gICAgZWxzZSBpZiAoaXNOaWwoc291bmQudmlicmF0aW9uKSAmJiBpc05pbChvcHRzICYmIG9wdHMudmlicmF0ZSkpIHtcbiAgICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgICAgb3B0cy52aWJyYXRlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBEbyB2aWJyYXRpb24gKGlmIHNvdW5kIGFzIGRlZmF1bHQgdmlicmF0aW9uLCBvciBpZiB1c2VyIGFzayBmb3IgaXQpXG4gICAgaWYgKHRvQm9vbGVhbihvcHRzPy52aWJyYXRlLCAhIXNvdW5kLnZpYnJhdGlvbikpIHtcbiAgICAgIHByb21pc2VzLnB1c2godGhpcy52aWJyYXRlKChvcHRzICYmIG9wdHMudmlicmF0aW9uKSB8fCBzb3VuZC52aWJyYXRpb24pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKHByb21pc2VzLmxlbmd0aCA9PT0gMSA/IHByb21pc2VzWzBdIDogUHJvbWlzZS5hbGwocHJvbWlzZXMpKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKGBbYXVkaW9dIEVycm9yIHdoaWxlIHBsYXlpbmcgYXVkaW8gc291bmQgJyR7YXNzZXRJZH0nOiAkeyhlcnIgJiYgZXJyLm1lc3NhZ2UpIHx8IGVycn1gLCBlcnIpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgdW5sb2FkKGFzc2V0SWQ6IHN0cmluZykge1xuICAgIGlmIChpc05pbCh0aGlzLl9hdWRpb1R5cGUpKSBhd2FpdCB0aGlzLnJlYWR5KCk7XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBtYXBcbiAgICB0aGlzLl9wcmVsb2FkZWRTb3VuZHNbYXNzZXRJZF0gPSB1bmRlZmluZWQ7XG5cbiAgICAvLyBOYXRpdmUgdW5sb2FkXG4gICAgaWYgKHRoaXMuX2F1ZGlvVHlwZSA9PT0gJ25hdGl2ZScpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IE5hdGl2ZUF1ZGlvLnVubG9hZCh7IGFzc2V0SWQgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW2F1ZGlvXSBVbmFibGUgdG8gdW5sb2FkIGF1ZGlvICcke2Fzc2V0SWR9JzogJHsoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnJ9YCwgZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSFRNTDUgYXVkaW8gdW5sb2FkXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl9odG1sQXVkaW9DYWNoZVthc3NldElkXS5yZW1vdmUoKTtcbiAgICAgIHRoaXMuX2h0bWxBdWRpb0NhY2hlW2Fzc2V0SWRdID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gZHVyYXRpb24gRHVyYXRpb24gb2YgdGhlIHZpYnJhdGlvbiBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICBhc3luYyB2aWJyYXRlKGR1cmF0aW9uPzogbnVtYmVyIHwgbnVtYmVyW10pIHtcbiAgICBpZiAoIXRoaXMuc3RhcnRlZCkgYXdhaXQgdGhpcy5yZWFkeSgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGR1cmF0aW9uKSkge1xuICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYXVkaW9dIFZpYnJhdGU6ICcgKyBKU09OLnN0cmluZ2lmeShkdXJhdGlvbikpO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkdXJhdGlvbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCB0aW1lID0gZHVyYXRpb25baV07XG4gICAgICAgIGNvbnN0IHNpbGVudCA9IGkgJSAyICE9PSAwO1xuICAgICAgICBpZiAoc2lsZW50KSB7XG4gICAgICAgICAgaWYgKHRoaXMuX2RlYnVnKSBjb25zb2xlLmRlYnVnKCdbYXVkaW9dIHNpbGVudCBkdXJpbmcgJyArIHRpbWUpO1xuICAgICAgICAgIGF3YWl0IHNsZWVwKHRpbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2F1ZGlvXSB2aWJyYXRlIGR1cmluZyAnICsgdGltZSk7XG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW0hhcHRpY3MudmlicmF0ZSh7IGR1cmF0aW9uOiB0aW1lIH0pLCBzbGVlcCh0aW1lKV0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLl9kZWJ1ZykgY29uc29sZS5kZWJ1ZygnW2F1ZGlvXSB2aWJyYXRlIGR1cmluZyAnICsgZHVyYXRpb24pO1xuICAgICAgYXdhaXQgSGFwdGljcy52aWJyYXRlKHsgZHVyYXRpb24gfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2V0QXVkaW9Nb2RlKG1vZGU6IEF1ZGlvTWFuYWdlbWVudC5BdWRpb01vZGUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuX2VuYWJsZUF1ZGlvTWFuYWdtZW50KSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbYXVkaW9dIENhbm5vdCBjaGFuZ2UgYXVkaW8gbW9kZSB0byB7JHthdWRpb01vZGVUb1N0cmluZyhtb2RlKX19IC0gc2tpcHBpbmdgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc29sZS5pbmZvKGBbYXVkaW9dIENoYW5naW5nIGF1ZGlvIG1vZGUgdG8geyR7YXVkaW9Nb2RlVG9TdHJpbmcobW9kZSl9fWApO1xuICAgICAgYXdhaXQgdGhpcy5hdWRpb01hbmFnZW1lbnQuc2V0QXVkaW9Nb2RlKG1vZGUpO1xuICAgICAgdGhpcy5fYXVkaW9Nb2RlID0gbW9kZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFthdWRpb10gRXJyb3Igd2hpbGUgY2hhbmdpbmcgYXVkaW8gbW9kZSB0byB7JHthdWRpb01vZGVUb1N0cmluZyhtb2RlKX19OiAke2Vycj8ubWVzc2FnZSB8fCBlcnJ9YCwgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgIC0tICovXG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlYWRBdWRpb01vZGUoKSB7XG4gICAgbGV0IHZhbHVlID0gYXdhaXQgdGhpcy5hdWRpb01hbmFnZW1lbnQuZ2V0QXVkaW9Nb2RlKCk7XG4gICAgdmFsdWUgPSB7XG4gICAgICAuLi5ERUZBVUxUX0FVRElPX01PREVfUkVUVVJOLFxuICAgICAgLi4udmFsdWUsXG4gICAgfTtcbiAgICBjb25zb2xlLmRlYnVnKGBbYXVkaW9dIERldGVjdGVkIGF1ZGlvIG1vZGUge2xhYmVsOiAnJHt2YWx1ZS5sYWJlbH0nLCBhdWRpb01vZGU6ICR7dmFsdWUuYXVkaW9Nb2RlfX1gKTtcbiAgICB0aGlzLl9hdWRpb01vZGUgPSB2YWx1ZS5hdWRpb01vZGU7XG4gIH1cbn1cbiJdfQ==
|