@libs-ui/components-inputs-upload 0.2.348-8 → 0.2.350-1

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.
@@ -2,11 +2,11 @@ import { AsyncPipe, NgComponentOutlet } from '@angular/common';
2
2
  import { ChangeDetectionStrategy, Component, Inject, input, model, Optional, output } from '@angular/core';
3
3
  import { LibsUiComponentsSpinnerComponent } from '@libs-ui/components-spinner';
4
4
  import { LibsUiIconsGetIconComponentPipe } from '@libs-ui/icons';
5
+ import { LibsUiPipesCheckFileExtensionPipe } from '@libs-ui/pipes-check-file-extension';
5
6
  import { LibsUiPipesSecurityTrustPipe } from '@libs-ui/pipes-security-trust';
6
7
  import { LINK_IMAGE_ERROR_TOKEN_INJECT } from '@libs-ui/utils';
7
8
  import { TranslateModule } from '@ngx-translate/core';
8
9
  import { LibsUiPipesInputsUploadCalcDurationVideoPipe } from '../pipes/calc-duration-video.pipe';
9
- import { LibsUiPipesInputsUploadCheckFileExtensionPipe } from '../pipes/check-file-extension.pipe';
10
10
  import * as i0 from "@angular/core";
11
11
  export class LibsUiComponentsInputsUploadAvatarComponent {
12
12
  linkImageError;
@@ -30,15 +30,15 @@ export class LibsUiComponentsInputsUploadAvatarComponent {
30
30
  this.outOpenPreview.emit(this.item());
31
31
  }
32
32
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsUploadAvatarComponent, deps: [{ token: LINK_IMAGE_ERROR_TOKEN_INJECT, optional: true }], target: i0.ɵɵFactoryTarget.Component });
33
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsInputsUploadAvatarComponent, isStandalone: true, selector: "libs_ui-components-inputs-upload-avatar", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, showVideoDuration: { classPropertyName: "showVideoDuration", publicName: "showVideoDuration", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { item: "itemChange", outOpenPreview: "outOpenPreview" }, ngImport: i0, template: "<div\n class=\"flex mr-[12px] bg-[#ffffff] rounded-[4px] {{ classInclude() }}\"\n [class.libs-ui-disable]=\"disable() || item().isUploading || item().error\">\n @if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe: 'image') {\n <div\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"relative\">\n @if (item().url || item().origin_url; as url) {\n <img\n [src]=\"url\"\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"rounded-[4px] cursor-pointer\"\n alt\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerImageClick($event)\" />\n } @else {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n } @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe: 'video') {\n <div\n class=\"relative\"\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\">\n @if (item().url || item().origin_url) {\n @let constHtmlSrc = item().url || item().origin_url || '';\n <video\n #videoRef\n [style.width.px]=\"size || 32\"\n [style.height.px]=\"size || 32\"\n class=\"rounded-[4px]\"\n preload=\"metadata\"\n [src]=\"constHtmlSrc | LibsUiPipesSecurityTrustPipe: 'resourceUrl' | async\"></video>\n <div class=\"absolute w-full h-full top-0 bg-[#001433] opacity-40 rounded-[4px]\"></div>\n <div class=\"absolute w-full h-full flex items-center justify-center top-0\">\n <i class=\"text-[#ffffff] libs-ui-icon-play-solid before:!text-[10px]\"></i>\n </div>\n @if (showVideoDuration()) {\n <div class=\"flex text-[5px] absolute bottom-0 right-0 py-[2px] px-[4px] rounded-[4px] bg-[#000000] text-[#ffffff]\">\n {{ videoRef.duration | LibsUiPipesInputsUploadCalcDurationVideoPipe }}\n </div>\n }\n } @else {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n } @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe: 'pdf') {\n <ng-container *ngComponentOutlet=\"'pdf' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe: 'word') {\n <ng-container *ngComponentOutlet=\"'word' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe: 'pptx') {\n <ng-container *ngComponentOutlet=\"'pptx' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe: 'xlsx') {\n <ng-container *ngComponentOutlet=\"'xlsx' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else {\n <div\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"flex items-center justify-center\">\n <i\n class=\"libs-ui-icon-file before:!text-[19px]\"\n [class.text-[#6a7383]]=\"!item().isUploading && !item().error\"\n [class.text-[#071631]]=\"disable() || item().isUploading || item().error\"></i>\n </div>\n }\n</div>\n", dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "pipe", type: LibsUiPipesInputsUploadCalcDurationVideoPipe, name: "LibsUiPipesInputsUploadCalcDurationVideoPipe" }, { kind: "pipe", type: LibsUiPipesInputsUploadCheckFileExtensionPipe, name: "LibsUiPipesInputsUploadCheckFileExtensionPipe" }, { kind: "pipe", type: LibsUiIconsGetIconComponentPipe, name: "LibsUiIconsGetIconComponentPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
33
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: LibsUiComponentsInputsUploadAvatarComponent, isStandalone: true, selector: "libs_ui-components-inputs-upload-avatar", inputs: { item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: true, transformFunction: null }, showVideoDuration: { classPropertyName: "showVideoDuration", publicName: "showVideoDuration", isSignal: true, isRequired: false, transformFunction: null }, disable: { classPropertyName: "disable", publicName: "disable", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, classInclude: { classPropertyName: "classInclude", publicName: "classInclude", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { item: "itemChange", outOpenPreview: "outOpenPreview" }, ngImport: i0, template: "<div\n class=\"flex mr-[12px] bg-[#ffffff] rounded-[4px] {{ classInclude() }}\"\n [class.libs-ui-disable]=\"disable() || item().isUploading || item().error\">\n @if (item() | LibsUiPipesCheckFileExtensionPipe: 'image') {\n <div\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"relative\">\n @if (item().url || item().origin_url; as url) {\n <img\n [src]=\"url\"\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"rounded-[4px] cursor-pointer\"\n alt\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerImageClick($event)\" />\n } @else {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n } @else if (item() | LibsUiPipesCheckFileExtensionPipe: 'video') {\n <div\n class=\"relative\"\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\">\n @if (item().url || item().origin_url) {\n @let constHtmlSrc = item().url || item().origin_url || '';\n <video\n #videoRef\n [style.width.px]=\"size || 32\"\n [style.height.px]=\"size || 32\"\n class=\"rounded-[4px]\"\n preload=\"metadata\"\n [src]=\"constHtmlSrc | LibsUiPipesSecurityTrustPipe: 'resourceUrl' | async\"></video>\n <div class=\"absolute w-full h-full top-0 bg-[#001433] opacity-40 rounded-[4px]\"></div>\n <div class=\"absolute w-full h-full flex items-center justify-center top-0\">\n <i class=\"text-[#ffffff] libs-ui-icon-play-solid before:!text-[10px]\"></i>\n </div>\n @if (showVideoDuration()) {\n <div class=\"flex text-[5px] absolute bottom-0 right-0 py-[2px] px-[4px] rounded-[4px] bg-[#000000] text-[#ffffff]\">\n {{ videoRef.duration | LibsUiPipesInputsUploadCalcDurationVideoPipe }}\n </div>\n }\n } @else {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n } @else if (item() | LibsUiPipesCheckFileExtensionPipe: 'pdf') {\n <ng-container *ngComponentOutlet=\"'pdf' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else if (item() | LibsUiPipesCheckFileExtensionPipe: 'word') {\n <ng-container *ngComponentOutlet=\"'word' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else if (item() | LibsUiPipesCheckFileExtensionPipe: 'pptx') {\n <ng-container *ngComponentOutlet=\"'pptx' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else if (item() | LibsUiPipesCheckFileExtensionPipe: 'xlsx') {\n <ng-container *ngComponentOutlet=\"'xlsx' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else {\n <div\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"flex items-center justify-center\">\n <i\n class=\"libs-ui-icon-file before:!text-[19px]\"\n [class.text-[#6a7383]]=\"!item().isUploading && !item().error\"\n [class.text-[#071631]]=\"disable() || item().isUploading || item().error\"></i>\n </div>\n }\n</div>\n", dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: LibsUiComponentsSpinnerComponent, selector: "libs_ui-components-spinner", inputs: ["type", "size"] }, { kind: "pipe", type: LibsUiPipesSecurityTrustPipe, name: "LibsUiPipesSecurityTrustPipe" }, { kind: "pipe", type: LibsUiPipesInputsUploadCalcDurationVideoPipe, name: "LibsUiPipesInputsUploadCalcDurationVideoPipe" }, { kind: "pipe", type: LibsUiPipesCheckFileExtensionPipe, name: "LibsUiPipesCheckFileExtensionPipe" }, { kind: "pipe", type: LibsUiIconsGetIconComponentPipe, name: "LibsUiIconsGetIconComponentPipe" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
34
34
  }
35
35
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiComponentsInputsUploadAvatarComponent, decorators: [{
36
36
  type: Component,
37
- args: [{ selector: 'libs_ui-components-inputs-upload-avatar', standalone: true, imports: [NgComponentOutlet, AsyncPipe, TranslateModule, LibsUiComponentsSpinnerComponent, LibsUiPipesSecurityTrustPipe, LibsUiPipesInputsUploadCalcDurationVideoPipe, LibsUiPipesInputsUploadCheckFileExtensionPipe, LibsUiIconsGetIconComponentPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex mr-[12px] bg-[#ffffff] rounded-[4px] {{ classInclude() }}\"\n [class.libs-ui-disable]=\"disable() || item().isUploading || item().error\">\n @if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe: 'image') {\n <div\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"relative\">\n @if (item().url || item().origin_url; as url) {\n <img\n [src]=\"url\"\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"rounded-[4px] cursor-pointer\"\n alt\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerImageClick($event)\" />\n } @else {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n } @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe: 'video') {\n <div\n class=\"relative\"\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\">\n @if (item().url || item().origin_url) {\n @let constHtmlSrc = item().url || item().origin_url || '';\n <video\n #videoRef\n [style.width.px]=\"size || 32\"\n [style.height.px]=\"size || 32\"\n class=\"rounded-[4px]\"\n preload=\"metadata\"\n [src]=\"constHtmlSrc | LibsUiPipesSecurityTrustPipe: 'resourceUrl' | async\"></video>\n <div class=\"absolute w-full h-full top-0 bg-[#001433] opacity-40 rounded-[4px]\"></div>\n <div class=\"absolute w-full h-full flex items-center justify-center top-0\">\n <i class=\"text-[#ffffff] libs-ui-icon-play-solid before:!text-[10px]\"></i>\n </div>\n @if (showVideoDuration()) {\n <div class=\"flex text-[5px] absolute bottom-0 right-0 py-[2px] px-[4px] rounded-[4px] bg-[#000000] text-[#ffffff]\">\n {{ videoRef.duration | LibsUiPipesInputsUploadCalcDurationVideoPipe }}\n </div>\n }\n } @else {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n } @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe: 'pdf') {\n <ng-container *ngComponentOutlet=\"'pdf' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe: 'word') {\n <ng-container *ngComponentOutlet=\"'word' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe: 'pptx') {\n <ng-container *ngComponentOutlet=\"'pptx' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else if (item() | LibsUiPipesInputsUploadCheckFileExtensionPipe: 'xlsx') {\n <ng-container *ngComponentOutlet=\"'xlsx' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else {\n <div\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"flex items-center justify-center\">\n <i\n class=\"libs-ui-icon-file before:!text-[19px]\"\n [class.text-[#6a7383]]=\"!item().isUploading && !item().error\"\n [class.text-[#071631]]=\"disable() || item().isUploading || item().error\"></i>\n </div>\n }\n</div>\n" }]
37
+ args: [{ selector: 'libs_ui-components-inputs-upload-avatar', standalone: true, imports: [NgComponentOutlet, AsyncPipe, TranslateModule, LibsUiComponentsSpinnerComponent, LibsUiPipesSecurityTrustPipe, LibsUiPipesInputsUploadCalcDurationVideoPipe, LibsUiPipesCheckFileExtensionPipe, LibsUiIconsGetIconComponentPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex mr-[12px] bg-[#ffffff] rounded-[4px] {{ classInclude() }}\"\n [class.libs-ui-disable]=\"disable() || item().isUploading || item().error\">\n @if (item() | LibsUiPipesCheckFileExtensionPipe: 'image') {\n <div\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"relative\">\n @if (item().url || item().origin_url; as url) {\n <img\n [src]=\"url\"\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"rounded-[4px] cursor-pointer\"\n alt\n (error)=\"handlerImageError($event)\"\n (click)=\"handlerImageClick($event)\" />\n } @else {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n } @else if (item() | LibsUiPipesCheckFileExtensionPipe: 'video') {\n <div\n class=\"relative\"\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\">\n @if (item().url || item().origin_url) {\n @let constHtmlSrc = item().url || item().origin_url || '';\n <video\n #videoRef\n [style.width.px]=\"size || 32\"\n [style.height.px]=\"size || 32\"\n class=\"rounded-[4px]\"\n preload=\"metadata\"\n [src]=\"constHtmlSrc | LibsUiPipesSecurityTrustPipe: 'resourceUrl' | async\"></video>\n <div class=\"absolute w-full h-full top-0 bg-[#001433] opacity-40 rounded-[4px]\"></div>\n <div class=\"absolute w-full h-full flex items-center justify-center top-0\">\n <i class=\"text-[#ffffff] libs-ui-icon-play-solid before:!text-[10px]\"></i>\n </div>\n @if (showVideoDuration()) {\n <div class=\"flex text-[5px] absolute bottom-0 right-0 py-[2px] px-[4px] rounded-[4px] bg-[#000000] text-[#ffffff]\">\n {{ videoRef.duration | LibsUiPipesInputsUploadCalcDurationVideoPipe }}\n </div>\n }\n } @else {\n <libs_ui-components-spinner [size]=\"'medium'\" />\n }\n </div>\n } @else if (item() | LibsUiPipesCheckFileExtensionPipe: 'pdf') {\n <ng-container *ngComponentOutlet=\"'pdf' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else if (item() | LibsUiPipesCheckFileExtensionPipe: 'word') {\n <ng-container *ngComponentOutlet=\"'word' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else if (item() | LibsUiPipesCheckFileExtensionPipe: 'pptx') {\n <ng-container *ngComponentOutlet=\"'pptx' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else if (item() | LibsUiPipesCheckFileExtensionPipe: 'xlsx') {\n <ng-container *ngComponentOutlet=\"'xlsx' | LibsUiIconsGetIconComponentPipe | async; inputs: { size: size() || 32 }\" />\n } @else {\n <div\n [style.width.px]=\"size() || 32\"\n [style.height.px]=\"size() || 32\"\n class=\"flex items-center justify-center\">\n <i\n class=\"libs-ui-icon-file before:!text-[19px]\"\n [class.text-[#6a7383]]=\"!item().isUploading && !item().error\"\n [class.text-[#071631]]=\"disable() || item().isUploading || item().error\"></i>\n </div>\n }\n</div>\n" }]
38
38
  }], ctorParameters: () => [{ type: undefined, decorators: [{
39
39
  type: Optional
40
40
  }, {
41
41
  type: Inject,
42
42
  args: [LINK_IMAGE_ERROR_TOKEN_INJECT]
43
43
  }] }] });
44
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkL3NyYy9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkL3NyYy9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0UsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2pHLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOztBQVVuRyxNQUFNLE9BQU8sMkNBQTJDO0lBU2lCO0lBUjlELElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFTLENBQUM7SUFDL0IsaUJBQWlCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDckMsT0FBTyxHQUFHLEtBQUssRUFBVyxDQUFDO0lBQzNCLElBQUksR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUN2QixZQUFZLEdBQUcsS0FBSyxDQUE2QixFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTVGLGNBQWMsR0FBRyxNQUFNLEVBQVMsQ0FBQztJQUUxQyxZQUF1RSxjQUFzQjtRQUF0QixtQkFBYyxHQUFkLGNBQWMsQ0FBUTtJQUFHLENBQUM7SUFFdkYsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQVk7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUNBLEtBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQ3JELENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxLQUFZO1FBQ3RDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO3dHQXJCVSwyQ0FBMkMsa0JBU3RCLDZCQUE2Qjs0RkFUbEQsMkNBQTJDLGswQkNuQnhELG92R0FvRUEsNENEcERZLGlCQUFpQiwrT0FBRSxTQUFTLDZDQUFFLGVBQWUsK0JBQUUsZ0NBQWdDLDRGQUFFLDRCQUE0QixnRUFBRSw0Q0FBNEMsZ0ZBQUUsNkNBQTZDLGlGQUFFLCtCQUErQjs7NEZBRzFPLDJDQUEyQztrQkFSdkQsU0FBUzsrQkFFRSx5Q0FBeUMsY0FFdkMsSUFBSSxXQUNQLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxnQ0FBZ0MsRUFBRSw0QkFBNEIsRUFBRSw0Q0FBNEMsRUFBRSw2Q0FBNkMsRUFBRSwrQkFBK0IsQ0FBQyxtQkFDck8sdUJBQXVCLENBQUMsTUFBTTs7MEJBV2xDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NvbXBvbmVudE91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIGlucHV0LCBtb2RlbCwgT3B0aW9uYWwsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNwaW5uZXInO1xuaW1wb3J0IHsgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB9IGZyb20gJ0BsaWJzLXVpL2ljb25zJztcbmltcG9ydCB7IElFdmVudCwgSUZpbGUgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1zZWN1cml0eS10cnVzdCc7XG5pbXBvcnQgeyBMSU5LX0lNQUdFX0VSUk9SX1RPS0VOX0lOSkVDVCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNJbnB1dHNVcGxvYWRDYWxjRHVyYXRpb25WaWRlb1BpcGUgfSBmcm9tICcuLi9waXBlcy9jYWxjLWR1cmF0aW9uLXZpZGVvLnBpcGUnO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNJbnB1dHNVcGxvYWRDaGVja0ZpbGVFeHRlbnNpb25QaXBlIH0gZnJvbSAnLi4vcGlwZXMvY2hlY2stZmlsZS1leHRlbnNpb24ucGlwZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWF2YXRhcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdmF0YXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbTmdDb21wb25lbnRPdXRsZXQsIEFzeW5jUGlwZSwgVHJhbnNsYXRlTW9kdWxlLCBMaWJzVWlDb21wb25lbnRzU3Bpbm5lckNvbXBvbmVudCwgTGlic1VpUGlwZXNTZWN1cml0eVRydXN0UGlwZSwgTGlic1VpUGlwZXNJbnB1dHNVcGxvYWRDYWxjRHVyYXRpb25WaWRlb1BpcGUsIExpYnNVaVBpcGVzSW5wdXRzVXBsb2FkQ2hlY2tGaWxlRXh0ZW5zaW9uUGlwZSwgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBMaWJzVWlDb21wb25lbnRzSW5wdXRzVXBsb2FkQXZhdGFyQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgaXRlbSA9IG1vZGVsLnJlcXVpcmVkPElGaWxlPigpO1xuICByZWFkb25seSBzaG93VmlkZW9EdXJhdGlvbiA9IGlucHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGRpc2FibGUgPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBzaXplID0gaW5wdXQ8bnVtYmVyPigpO1xuICByZWFkb25seSBjbGFzc0luY2x1ZGUgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJycsIHsgdHJhbnNmb3JtOiAodmFsdWUpID0+IHZhbHVlID8/ICcnIH0pO1xuXG4gIHJlYWRvbmx5IG91dE9wZW5QcmV2aWV3ID0gb3V0cHV0PElGaWxlPigpO1xuXG4gIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoTElOS19JTUFHRV9FUlJPUl9UT0tFTl9JTkpFQ1QpIHByaXZhdGUgbGlua0ltYWdlRXJyb3I6IHN0cmluZykge31cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckltYWdlRXJyb3IoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLmxpbmtJbWFnZUVycm9yKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIChldmVudCBhcyBJRXZlbnQpLnRhcmdldC5zcmMgPSB0aGlzLmxpbmtJbWFnZUVycm9yO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZXJJbWFnZUNsaWNrKGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMub3V0T3BlblByZXZpZXcuZW1pdCh0aGlzLml0ZW0oKSk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJmbGV4IG1yLVsxMnB4XSBiZy1bI2ZmZmZmZl0gcm91bmRlZC1bNHB4XSB7eyBjbGFzc0luY2x1ZGUoKSB9fVwiXG4gIFtjbGFzcy5saWJzLXVpLWRpc2FibGVdPVwiZGlzYWJsZSgpIHx8IGl0ZW0oKS5pc1VwbG9hZGluZyB8fCBpdGVtKCkuZXJyb3JcIj5cbiAgQGlmIChpdGVtKCkgfCBMaWJzVWlQaXBlc0lucHV0c1VwbG9hZENoZWNrRmlsZUV4dGVuc2lvblBpcGU6ICdpbWFnZScpIHtcbiAgICA8ZGl2XG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwic2l6ZSgpIHx8IDMyXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwic2l6ZSgpIHx8IDMyXCJcbiAgICAgIGNsYXNzPVwicmVsYXRpdmVcIj5cbiAgICAgIEBpZiAoaXRlbSgpLnVybCB8fCBpdGVtKCkub3JpZ2luX3VybDsgYXMgdXJsKSB7XG4gICAgICAgIDxpbWdcbiAgICAgICAgICBbc3JjXT1cInVybFwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInNpemUoKSB8fCAzMlwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJzaXplKCkgfHwgMzJcIlxuICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1bNHB4XSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgYWx0XG4gICAgICAgICAgKGVycm9yKT1cImhhbmRsZXJJbWFnZUVycm9yKCRldmVudClcIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVySW1hZ2VDbGljaygkZXZlbnQpXCIgLz5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9IEBlbHNlIGlmIChpdGVtKCkgfCBMaWJzVWlQaXBlc0lucHV0c1VwbG9hZENoZWNrRmlsZUV4dGVuc2lvblBpcGU6ICd2aWRlbycpIHtcbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgIFtzdHlsZS53aWR0aC5weF09XCJzaXplKCkgfHwgMzJcIlxuICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJzaXplKCkgfHwgMzJcIj5cbiAgICAgIEBpZiAoaXRlbSgpLnVybCB8fCBpdGVtKCkub3JpZ2luX3VybCkge1xuICAgICAgICBAbGV0IGNvbnN0SHRtbFNyYyA9IGl0ZW0oKS51cmwgfHwgaXRlbSgpLm9yaWdpbl91cmwgfHwgJyc7XG4gICAgICAgIDx2aWRlb1xuICAgICAgICAgICN2aWRlb1JlZlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJzaXplIHx8IDMyXCJcbiAgICAgICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInNpemUgfHwgMzJcIlxuICAgICAgICAgIGNsYXNzPVwicm91bmRlZC1bNHB4XVwiXG4gICAgICAgICAgcHJlbG9hZD1cIm1ldGFkYXRhXCJcbiAgICAgICAgICBbc3JjXT1cImNvbnN0SHRtbFNyYyB8IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGU6ICdyZXNvdXJjZVVybCcgfCBhc3luY1wiPjwvdmlkZW8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSB3LWZ1bGwgaC1mdWxsIHRvcC0wIGJnLVsjMDAxNDMzXSBvcGFjaXR5LTQwIHJvdW5kZWQtWzRweF1cIj48L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFic29sdXRlIHctZnVsbCBoLWZ1bGwgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdG9wLTBcIj5cbiAgICAgICAgICA8aSBjbGFzcz1cInRleHQtWyNmZmZmZmZdIGxpYnMtdWktaWNvbi1wbGF5LXNvbGlkIGJlZm9yZTohdGV4dC1bMTBweF1cIj48L2k+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBAaWYgKHNob3dWaWRlb0R1cmF0aW9uKCkpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCB0ZXh0LVs1cHhdIGFic29sdXRlIGJvdHRvbS0wIHJpZ2h0LTAgcHktWzJweF0gcHgtWzRweF0gcm91bmRlZC1bNHB4XSBiZy1bIzAwMDAwMF0gdGV4dC1bI2ZmZmZmZl1cIj5cbiAgICAgICAgICAgIHt7IHZpZGVvUmVmLmR1cmF0aW9uIHwgTGlic1VpUGlwZXNJbnB1dHNVcGxvYWRDYWxjRHVyYXRpb25WaWRlb1BpcGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtc3Bpbm5lciBbc2l6ZV09XCInbWVkaXVtJ1wiIC8+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH0gQGVsc2UgaWYgKGl0ZW0oKSB8IExpYnNVaVBpcGVzSW5wdXRzVXBsb2FkQ2hlY2tGaWxlRXh0ZW5zaW9uUGlwZTogJ3BkZicpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cIidwZGYnIHwgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB8IGFzeW5jOyBpbnB1dHM6IHsgc2l6ZTogc2l6ZSgpIHx8IDMyIH1cIiAvPlxuICB9IEBlbHNlIGlmIChpdGVtKCkgfCBMaWJzVWlQaXBlc0lucHV0c1VwbG9hZENoZWNrRmlsZUV4dGVuc2lvblBpcGU6ICd3b3JkJykge1xuICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiJ3dvcmQnIHwgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB8IGFzeW5jOyBpbnB1dHM6IHsgc2l6ZTogc2l6ZSgpIHx8IDMyIH1cIiAvPlxuICB9IEBlbHNlIGlmIChpdGVtKCkgfCBMaWJzVWlQaXBlc0lucHV0c1VwbG9hZENoZWNrRmlsZUV4dGVuc2lvblBpcGU6ICdwcHR4Jykge1xuICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiJ3BwdHgnIHwgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB8IGFzeW5jOyBpbnB1dHM6IHsgc2l6ZTogc2l6ZSgpIHx8IDMyIH1cIiAvPlxuICB9IEBlbHNlIGlmIChpdGVtKCkgfCBMaWJzVWlQaXBlc0lucHV0c1VwbG9hZENoZWNrRmlsZUV4dGVuc2lvblBpcGU6ICd4bHN4Jykge1xuICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiJ3hsc3gnIHwgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB8IGFzeW5jOyBpbnB1dHM6IHsgc2l6ZTogc2l6ZSgpIHx8IDMyIH1cIiAvPlxuICB9IEBlbHNlIHtcbiAgICA8ZGl2XG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwic2l6ZSgpIHx8IDMyXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwic2l6ZSgpIHx8IDMyXCJcbiAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgIDxpXG4gICAgICAgIGNsYXNzPVwibGlicy11aS1pY29uLWZpbGUgYmVmb3JlOiF0ZXh0LVsxOXB4XVwiXG4gICAgICAgIFtjbGFzcy50ZXh0LVsjNmE3MzgzXV09XCIhaXRlbSgpLmlzVXBsb2FkaW5nICYmICFpdGVtKCkuZXJyb3JcIlxuICAgICAgICBbY2xhc3MudGV4dC1bIzA3MTYzMV1dPVwiZGlzYWJsZSgpIHx8IGl0ZW0oKS5pc1VwbG9hZGluZyB8fCBpdGVtKCkuZXJyb3JcIj48L2k+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXZhdGFyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkL3NyYy9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkL3NyYy9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDL0UsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFakUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDeEYsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDN0UsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSw0Q0FBNEMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQVVqRyxNQUFNLE9BQU8sMkNBQTJDO0lBU2lCO0lBUjlELElBQUksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFTLENBQUM7SUFDL0IsaUJBQWlCLEdBQUcsS0FBSyxFQUFXLENBQUM7SUFDckMsT0FBTyxHQUFHLEtBQUssRUFBVyxDQUFDO0lBQzNCLElBQUksR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUN2QixZQUFZLEdBQUcsS0FBSyxDQUE2QixFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTVGLGNBQWMsR0FBRyxNQUFNLEVBQVMsQ0FBQztJQUUxQyxZQUF1RSxjQUFzQjtRQUF0QixtQkFBYyxHQUFkLGNBQWMsQ0FBUTtJQUFHLENBQUM7SUFFdkYsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEtBQVk7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUNBLEtBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQ3JELENBQUM7SUFFUyxpQkFBaUIsQ0FBQyxLQUFZO1FBQ3RDLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO3dHQXJCVSwyQ0FBMkMsa0JBU3RCLDZCQUE2Qjs0RkFUbEQsMkNBQTJDLGswQkNuQnhELDRxR0FvRUEsNENEcERZLGlCQUFpQiwrT0FBRSxTQUFTLDZDQUFFLGVBQWUsK0JBQUUsZ0NBQWdDLDRGQUFFLDRCQUE0QixnRUFBRSw0Q0FBNEMsZ0ZBQUUsaUNBQWlDLHFFQUFFLCtCQUErQjs7NEZBRzlOLDJDQUEyQztrQkFSdkQsU0FBUzsrQkFFRSx5Q0FBeUMsY0FFdkMsSUFBSSxXQUNQLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxnQ0FBZ0MsRUFBRSw0QkFBNEIsRUFBRSw0Q0FBNEMsRUFBRSxpQ0FBaUMsRUFBRSwrQkFBK0IsQ0FBQyxtQkFDek4sdUJBQXVCLENBQUMsTUFBTTs7MEJBV2xDLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBOZ0NvbXBvbmVudE91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbmplY3QsIGlucHV0LCBtb2RlbCwgT3B0aW9uYWwsIG91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNwaW5uZXInO1xuaW1wb3J0IHsgTGlic1VpSWNvbnNHZXRJY29uQ29tcG9uZW50UGlwZSB9IGZyb20gJ0BsaWJzLXVpL2ljb25zJztcbmltcG9ydCB7IElFdmVudCwgSUZpbGUgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaVBpcGVzQ2hlY2tGaWxlRXh0ZW5zaW9uUGlwZSB9IGZyb20gJ0BsaWJzLXVpL3BpcGVzLWNoZWNrLWZpbGUtZXh0ZW5zaW9uJztcbmltcG9ydCB7IExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGUgfSBmcm9tICdAbGlicy11aS9waXBlcy1zZWN1cml0eS10cnVzdCc7XG5pbXBvcnQgeyBMSU5LX0lNQUdFX0VSUk9SX1RPS0VOX0lOSkVDVCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zbGF0ZU1vZHVsZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTGlic1VpUGlwZXNJbnB1dHNVcGxvYWRDYWxjRHVyYXRpb25WaWRlb1BpcGUgfSBmcm9tICcuLi9waXBlcy9jYWxjLWR1cmF0aW9uLXZpZGVvLnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcbiAgc2VsZWN0b3I6ICdsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1hdmF0YXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYXZhdGFyLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW05nQ29tcG9uZW50T3V0bGV0LCBBc3luY1BpcGUsIFRyYW5zbGF0ZU1vZHVsZSwgTGlic1VpQ29tcG9uZW50c1NwaW5uZXJDb21wb25lbnQsIExpYnNVaVBpcGVzU2VjdXJpdHlUcnVzdFBpcGUsIExpYnNVaVBpcGVzSW5wdXRzVXBsb2FkQ2FsY0R1cmF0aW9uVmlkZW9QaXBlLCBMaWJzVWlQaXBlc0NoZWNrRmlsZUV4dGVuc2lvblBpcGUsIExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZEF2YXRhckNvbXBvbmVudCB7XG4gIHJlYWRvbmx5IGl0ZW0gPSBtb2RlbC5yZXF1aXJlZDxJRmlsZT4oKTtcbiAgcmVhZG9ubHkgc2hvd1ZpZGVvRHVyYXRpb24gPSBpbnB1dDxib29sZWFuPigpO1xuICByZWFkb25seSBkaXNhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgc2l6ZSA9IGlucHV0PG51bWJlcj4oKTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnJyB9KTtcblxuICByZWFkb25seSBvdXRPcGVuUHJldmlldyA9IG91dHB1dDxJRmlsZT4oKTtcblxuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBASW5qZWN0KExJTktfSU1BR0VfRVJST1JfVE9LRU5fSU5KRUNUKSBwcml2YXRlIGxpbmtJbWFnZUVycm9yOiBzdHJpbmcpIHt9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJJbWFnZUVycm9yKGV2ZW50OiBFdmVudCkge1xuICAgIGlmICghdGhpcy5saW5rSW1hZ2VFcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAoZXZlbnQgYXMgSUV2ZW50KS50YXJnZXQuc3JjID0gdGhpcy5saW5rSW1hZ2VFcnJvcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVySW1hZ2VDbGljayhldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLm91dE9wZW5QcmV2aWV3LmVtaXQodGhpcy5pdGVtKCkpO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZmxleCBtci1bMTJweF0gYmctWyNmZmZmZmZdIHJvdW5kZWQtWzRweF0ge3sgY2xhc3NJbmNsdWRlKCkgfX1cIlxuICBbY2xhc3MubGlicy11aS1kaXNhYmxlXT1cImRpc2FibGUoKSB8fCBpdGVtKCkuaXNVcGxvYWRpbmcgfHwgaXRlbSgpLmVycm9yXCI+XG4gIEBpZiAoaXRlbSgpIHwgTGlic1VpUGlwZXNDaGVja0ZpbGVFeHRlbnNpb25QaXBlOiAnaW1hZ2UnKSB7XG4gICAgPGRpdlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInNpemUoKSB8fCAzMlwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInNpemUoKSB8fCAzMlwiXG4gICAgICBjbGFzcz1cInJlbGF0aXZlXCI+XG4gICAgICBAaWYgKGl0ZW0oKS51cmwgfHwgaXRlbSgpLm9yaWdpbl91cmw7IGFzIHVybCkge1xuICAgICAgICA8aW1nXG4gICAgICAgICAgW3NyY109XCJ1cmxcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJzaXplKCkgfHwgMzJcIlxuICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwic2l6ZSgpIHx8IDMyXCJcbiAgICAgICAgICBjbGFzcz1cInJvdW5kZWQtWzRweF0gY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIGFsdFxuICAgICAgICAgIChlcnJvcik9XCJoYW5kbGVySW1hZ2VFcnJvcigkZXZlbnQpXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlckltYWdlQ2xpY2soJGV2ZW50KVwiIC8+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1zcGlubmVyIFtzaXplXT1cIidtZWRpdW0nXCIgLz5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfSBAZWxzZSBpZiAoaXRlbSgpIHwgTGlic1VpUGlwZXNDaGVja0ZpbGVFeHRlbnNpb25QaXBlOiAndmlkZW8nKSB7XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyZWxhdGl2ZVwiXG4gICAgICBbc3R5bGUud2lkdGgucHhdPVwic2l6ZSgpIHx8IDMyXCJcbiAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwic2l6ZSgpIHx8IDMyXCI+XG4gICAgICBAaWYgKGl0ZW0oKS51cmwgfHwgaXRlbSgpLm9yaWdpbl91cmwpIHtcbiAgICAgICAgQGxldCBjb25zdEh0bWxTcmMgPSBpdGVtKCkudXJsIHx8IGl0ZW0oKS5vcmlnaW5fdXJsIHx8ICcnO1xuICAgICAgICA8dmlkZW9cbiAgICAgICAgICAjdmlkZW9SZWZcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwic2l6ZSB8fCAzMlwiXG4gICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJzaXplIHx8IDMyXCJcbiAgICAgICAgICBjbGFzcz1cInJvdW5kZWQtWzRweF1cIlxuICAgICAgICAgIHByZWxvYWQ9XCJtZXRhZGF0YVwiXG4gICAgICAgICAgW3NyY109XCJjb25zdEh0bWxTcmMgfCBMaWJzVWlQaXBlc1NlY3VyaXR5VHJ1c3RQaXBlOiAncmVzb3VyY2VVcmwnIHwgYXN5bmNcIj48L3ZpZGVvPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCB0b3AtMCBiZy1bIzAwMTQzM10gb3BhY2l0eS00MCByb3VuZGVkLVs0cHhdXCI+PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSB3LWZ1bGwgaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRvcC0wXCI+XG4gICAgICAgICAgPGkgY2xhc3M9XCJ0ZXh0LVsjZmZmZmZmXSBsaWJzLXVpLWljb24tcGxheS1zb2xpZCBiZWZvcmU6IXRleHQtWzEwcHhdXCI+PC9pPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChzaG93VmlkZW9EdXJhdGlvbigpKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdGV4dC1bNXB4XSBhYnNvbHV0ZSBib3R0b20tMCByaWdodC0wIHB5LVsycHhdIHB4LVs0cHhdIHJvdW5kZWQtWzRweF0gYmctWyMwMDAwMDBdIHRleHQtWyNmZmZmZmZdXCI+XG4gICAgICAgICAgICB7eyB2aWRlb1JlZi5kdXJhdGlvbiB8IExpYnNVaVBpcGVzSW5wdXRzVXBsb2FkQ2FsY0R1cmF0aW9uVmlkZW9QaXBlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICA8bGlic191aS1jb21wb25lbnRzLXNwaW5uZXIgW3NpemVdPVwiJ21lZGl1bSdcIiAvPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9IEBlbHNlIGlmIChpdGVtKCkgfCBMaWJzVWlQaXBlc0NoZWNrRmlsZUV4dGVuc2lvblBpcGU6ICdwZGYnKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCIncGRmJyB8IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfCBhc3luYzsgaW5wdXRzOiB7IHNpemU6IHNpemUoKSB8fCAzMiB9XCIgLz5cbiAgfSBAZWxzZSBpZiAoaXRlbSgpIHwgTGlic1VpUGlwZXNDaGVja0ZpbGVFeHRlbnNpb25QaXBlOiAnd29yZCcpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cIid3b3JkJyB8IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfCBhc3luYzsgaW5wdXRzOiB7IHNpemU6IHNpemUoKSB8fCAzMiB9XCIgLz5cbiAgfSBAZWxzZSBpZiAoaXRlbSgpIHwgTGlic1VpUGlwZXNDaGVja0ZpbGVFeHRlbnNpb25QaXBlOiAncHB0eCcpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cIidwcHR4JyB8IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfCBhc3luYzsgaW5wdXRzOiB7IHNpemU6IHNpemUoKSB8fCAzMiB9XCIgLz5cbiAgfSBAZWxzZSBpZiAoaXRlbSgpIHwgTGlic1VpUGlwZXNDaGVja0ZpbGVFeHRlbnNpb25QaXBlOiAneGxzeCcpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cIid4bHN4JyB8IExpYnNVaUljb25zR2V0SWNvbkNvbXBvbmVudFBpcGUgfCBhc3luYzsgaW5wdXRzOiB7IHNpemU6IHNpemUoKSB8fCAzMiB9XCIgLz5cbiAgfSBAZWxzZSB7XG4gICAgPGRpdlxuICAgICAgW3N0eWxlLndpZHRoLnB4XT1cInNpemUoKSB8fCAzMlwiXG4gICAgICBbc3R5bGUuaGVpZ2h0LnB4XT1cInNpemUoKSB8fCAzMlwiXG4gICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICA8aVxuICAgICAgICBjbGFzcz1cImxpYnMtdWktaWNvbi1maWxlIGJlZm9yZTohdGV4dC1bMTlweF1cIlxuICAgICAgICBbY2xhc3MudGV4dC1bIzZhNzM4M11dPVwiIWl0ZW0oKS5pc1VwbG9hZGluZyAmJiAhaXRlbSgpLmVycm9yXCJcbiAgICAgICAgW2NsYXNzLnRleHQtWyMwNzE2MzFdXT1cImRpc2FibGUoKSB8fCBpdGVtKCkuaXNVcGxvYWRpbmcgfHwgaXRlbSgpLmVycm9yXCI+PC9pPlxuICAgIDwvZGl2PlxuICB9XG48L2Rpdj5cbiJdfQ==
package/esm2022/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- export * from './upload.component';
2
1
  export * from './avatar/avatar.component';
3
2
  export * from './interfaces/upload.interface';
4
- export * from './upload-file.directive';
5
3
  export * from './upload-drop-file.directive';
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDhCQUE4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi91cGxvYWQuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vYXZhdGFyL2F2YXRhci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL3VwbG9hZC5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi91cGxvYWQtZmlsZS5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi91cGxvYWQtZHJvcC1maWxlLmRpcmVjdGl2ZSc7XG4iXX0=
4
+ export * from './upload-file.directive';
5
+ export * from './upload.component';
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3VwbG9hZC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9hdmF0YXIvYXZhdGFyLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMvdXBsb2FkLmludGVyZmFjZSc7XG5leHBvcnQgKiBmcm9tICcuL3VwbG9hZC1kcm9wLWZpbGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vdXBsb2FkLWZpbGUuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vdXBsb2FkLmNvbXBvbmVudCc7XG4iXX0=
@@ -5,7 +5,7 @@ import { LibsUiComponentsImageEditorComponent } from '@libs-ui/components-image-
5
5
  import { LibsUiComponentsLabelComponent } from '@libs-ui/components-label';
6
6
  import { LibsUiComponentsPreviewFileComponent } from '@libs-ui/components-preview-file';
7
7
  import { LibsUiComponentsScrollOverlayDirective } from '@libs-ui/components-scroll-overlay';
8
- import { LibsUiDynamicComponentService } from '@libs-ui/services-dynamic-component';
8
+ import { LibsUiDynamicComponentService, setInputs } from '@libs-ui/services-dynamic-component';
9
9
  import { LibsUiNotificationService } from '@libs-ui/services-notification';
10
10
  import { AudioExtList, convertBlobToFile, convertFileToBase64_ObjectUrl, DocumentExtList, downloadFileByUrl, ERROR_MESSAGE_EMPTY_VALID, getFileExtension, getLabelBySizeFile, ImageExtList, isIncludeAudioExtList, isIncludeDocumentExtList, isIncludeImageExtList, isIncludeVideoExtList, isTypeAudio, isTypeImage, isTypeVideo, uuid, VideoExtList, } from '@libs-ui/utils';
11
11
  import { TranslateModule, TranslateService } from '@ngx-translate/core';
@@ -222,8 +222,7 @@ export class LibsUiComponentsInputsUploadComponent {
222
222
  return;
223
223
  }
224
224
  this.previewFileComponentRef = this.dynamicComponentService.resolveComponentFactory(LibsUiComponentsPreviewFileComponent);
225
- this.previewFileComponentRef.setInput('data', item);
226
- this.previewFileComponentRef.setInput('zIndex', this.zIndex() + 1);
225
+ setInputs(this.previewFileComponentRef, { index: 0, data: [item], zIndex: this.zIndex() + 1 });
227
226
  this.previewFileComponentRef.instance.outClose.subscribe(() => {
228
227
  this.dynamicComponentService.remove(this.previewFileComponentRef);
229
228
  this.previewFileComponentRef = undefined;
@@ -441,4 +440,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
441
440
  LibsUiComponentsInputsUploadDropFileDirective,
442
441
  ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col w-full h-full\">\n <div>\n @if (labelConfig(); as labelConfig) {\n <libs_ui-components-label\n [classInclude]=\"labelConfig.classInclude\"\n [labelLeft]=\"labelConfig.labelLeft\"\n [labelLeftClass]=\"labelConfig.labelLeftClass\"\n [required]=\"labelConfig.required\"\n [description]=\"labelConfig.description\"\n [labelRight]=\"labelConfig.labelRight\"\n [labelRightClass]=\"labelConfig.labelRightClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [buttonsLeft]=\"labelConfig.buttonsLeft\"\n [buttonsRight]=\"labelConfig.buttonsRight\"\n [disableButtonsLeft]=\"labelConfig.disableButtonsLeft || disable() || readonly()\"\n [disableButtonsRight]=\"labelConfig.disableButtonsRight || disable() || readonly()\"\n [hasToggle]=\"labelConfig.hasToggle\"\n [toggleActive]=\"labelConfig.toggleActive\"\n [toggleDisable]=\"labelConfig.toggleDisable || disable() || readonly()\"\n [popover]=\"labelConfig.popover\"\n [iconPopoverClass]=\"labelConfig.iconPopoverClass\"\n [onlyShowCount]=\"labelConfig.onlyShowCount\"\n [limitLength]=\"labelConfig.limitLength\"\n [buttonsDescription]=\"labelConfig.buttonsDescription\"\n [disableButtonsDescription]=\"labelConfig.disableButtonsDescription || disable() || readonly()\"\n [buttonsDescriptionContainerClass]=\"labelConfig.buttonsDescriptionContainerClass\"\n [count]=\"labelConfig.count\" />\n }\n @if ((!configDownloadSampleFile()?.position || configDownloadSampleFile()?.position === 'top') && configDownloadSampleFile(); as configDownloadSampleFile) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [classLabel]=\"'libs-ui-font-h7m'\"\n [classInclude]=\"'!mb-[8px] !p-0'\"\n [classIconLeft]=\"'libs-ui-icon-attachment before:!text-[12px]'\"\n [label]=\"configDownloadSampleFile?.title || ' '\"\n (outClick)=\"handlerDownloadSampleFile($event)\" />\n }\n @if (multiple() || !showPopupUploadWhenHasFileAndModeSingle() || (!fileList().length && !multiple())) {\n <div\n #upload\n LibsUiComponentsInputsUploadDirective\n LibsUiComponentsInputsUploadDropFileDirective\n class=\"libs-ui-components-inputs-upload\"\n [class.libs-ui-components-inputs-upload-disable]=\"disable() || readonly() || (!multiple() && fileList().length && !canUploadIfHasExistFile())\"\n [class.libs-ui-components-inputs-upload-readonly]=\"readonly()\"\n [class.libs-ui-components-inputs-upload-error]=\"messageError()\"\n [multiple]=\"multiple()\"\n [accessFiles]=\"accessFiles()\"\n (outUploadFiles)=\"handleUploadFiles($event)\"\n (outUploadFile)=\"handleUploadFiles([$event])\"\n (outDragOver)=\"handlerSetClassDrag(true)\"\n (outDragLeave)=\"handlerSetClassDrag(false)\"\n (outDrop)=\"handlerSetClassDrag(false)\"\n (outDropFiles)=\"handleUploadFiles($event)\"\n (outDropFile)=\"handleUploadFiles([$event])\">\n <div class=\"flex items-center\">\n <div class=\"mr-[16px]\">\n <i class=\"libs-ui-components-inputs-upload-icon libs-ui-icon-file-upload before:!text-[32px]\"></i>\n </div>\n <div class=\"libs-ui-components-inputs-upload-description\">\n @let constHtmlMessage = configDescriptionInputUpload().message || ' ';\n <div\n class=\"mb-[4px] libs-ui-font-h6m\"\n [innerHTML]=\"constHtmlMessage | translate: configDescriptionInputUpload().interpolateParams\"></div>\n @for (item of descriptionFormatAndSizeFileComputed(); track item; let last = $last) {\n <div\n class=\"libs-ui-font-h7r\"\n [class.mb-[4px]]=\"!last\"\n [innerHTML]=\"item.message | translate: item.interpolateParams\"></div>\n }\n </div>\n </div>\n @if (multiple()) {\n <input\n #uploadInput\n class=\"upload-input hidden\"\n type=\"file\"\n name=\"files[]\"\n multiple\n [accept]=\"accessFiles()\" />\n } @else {\n <input\n #uploadInput\n class=\"upload-input hidden\"\n type=\"file\"\n name=\"files[]\"\n [accept]=\"accessFiles()\" />\n }\n </div>\n }\n @if (messageError() && (multiple() || !showPopupUploadWhenHasFileAndModeSingle() || (!fileList().length && !multiple()))) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\">\n @let constHtmlMessage = messageError() || ' ';\n {{ constHtmlMessage | translate: { value: limitFile() } }}\n </div>\n }\n @if (configDownloadSampleFile()?.position === 'bottom' && configDownloadSampleFile(); as configDownloadSampleFile) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-primary'\"\n [classLabel]=\"'libs-ui-font-h7m'\"\n [classInclude]=\"'!mt-[8px] !p-0'\"\n [classIconLeft]=\"'libs-ui-icon-attachment before:!text-[12px]'\"\n [label]=\"configDownloadSampleFile.title || ' '\"\n (moClick)=\"handlerDownloadSampleFile($event)\" />\n }\n </div>\n @if (fileList().length) {\n <div\n LibsUiComponentsScrollOverlayDirective\n class=\"relative w-full h-full px-[10px] libs-ui-components-inputs-upload-view-list {{ classIncludeFileContent() || '' }}\"\n [class.mt-[12px]]=\"multiple() || !showPopupUploadWhenHasFileAndModeSingle()\">\n <ng-content select=\"[label-file]\"></ng-content>\n @for (item of fileList(); track item(); let first = $first) {\n <div\n class=\"libs-ui-components-inputs-upload-view-list-item {{ classIncludeListItem() || '' }}\"\n [class.libs-ui-components-inputs-upload-file-full]=\"modeDisplayFile() === 'full'\"\n [class.libs-ui-components-inputs-upload-file-short]=\"modeDisplayFile() === 'short'\"\n [class.libs-ui-border-error-general]=\"item().error || (messageError() && showBorderErrorAllItemWhenError())\"\n [class.mt-0]=\"first && !multiple() && !showPopupUploadWhenHasFileAndModeSingle()\">\n <div class=\"flex w-full\">\n <div class=\"flex items-center\">\n @if (canSetAvatar() && item().type === 'image') {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [classIconLeft]=\"\n '!mr-0' + (item().isAvatar ? ' libs-ui-icon-check-circle-solid before:!text-[#00bc62]' : ' libs-ui-icon-check-circle-outline') + (disable() || readonly() || item().isUploading || !!item().error ? ' libs-ui-disable' : '')\n \"\n [popover]=\"{ config: { content: item().isAvatar ? 'i18n_avatar' : 'i18n_choose_as_your_avatar', zIndex: zIndex() } }\"\n [classInclude]=\"'!mr-[12px] !p-0'\"\n [disable]=\"disable() || readonly() || item().isUploading || !!item().error\"\n (outClick)=\"handlerSetAvatar($event, item)\" />\n }\n </div>\n <div\n class=\"flex\"\n [class.w-[calc(100%-28px)]]=\"canSetAvatar()\"\n [class.w-full]=\"!canSetAvatar()\">\n @if (modeDisplayFile() === 'full') {\n <libs_ui-components-inputs-upload-avatar\n [classInclude]=\"classIncludeAvatar()\"\n [disable]=\"disable() || readonly()\"\n [(item)]=\"item\"\n [showVideoDuration]=\"showVideoDuration()\"\n (outOpenPreview)=\"handlerOpenPreviewFile($event)\" />\n }\n <div class=\"relative w-full\">\n <div\n class=\"flex absolute w-full h-full flex-col\"\n [class.flex-col]=\"modeDisplayFile() === 'full'\"\n [class.justify-center]=\"modeDisplayFile() === 'full'\"\n [class.items-center]=\"modeDisplayFile() === 'short'\">\n <libs_ui-components-label\n class=\"flex w-full\"\n [labelLeft]=\"item().name\"\n [zIndexPopover]=\"zIndex() + 1\"\n [labelLeftClass]=\"'libs-ui-font-h6m ' + (disable() || readonly() || item().isUploading || item().error ? 'text-[#6a7383]' : 'text-[#071631]')\"\n [classInclude]=\"modeDisplayFile() === 'short' ? '!mb-0' : ''\" />\n\n @if (!ignoreShowSizeFile()) {\n <div\n class=\"text-[#9ca2ad] libs-ui-font-h7r shrink-0\"\n [class.flex]=\"modeDisplayFile() === 'full'\"\n [class.items-center]=\"modeDisplayFile() === 'short'\"\n [class.ml-[12px]]=\"modeDisplayFile() === 'short'\">\n {{ item().size }}\n </div>\n }\n </div>\n </div>\n @if (item().isUploading && item().percentUploading) {\n <div\n class=\"flex items-center ml-[16px]\"\n [class.mr-[26px]]=\"modeDisplayFile() === 'full'\">\n <div class=\"w-[120px] h-[4px] rounded-[4px] bg-[#f8f9fa] relative\">\n <div\n class=\"absolute top-0 left-0 h-[4px] rounded-[4px] bg-[#00bc62]\"\n [style.width.px]=\"(item().percentUploading ?? 0) * 1.2\"></div>\n </div>\n </div>\n }\n </div>\n </div>\n\n <div class=\"flex ml-[16px]\">\n @if (!ignoreIconPreview()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [classIconLeft]=\"'libs-ui-icon-eye-outline !mr-0'\"\n [popover]=\"{ config: { content: 'i18n_preview', zIndex: zIndex() + 1 } }\"\n [classInclude]=\"'!p-0' + (ignoreIconRemove() && !ignoreIconEdit() ? '' : ' !mr-[12px]')\"\n [disable]=\"item().isUploading || disable() || readonly()\"\n (outClick)=\"handlerOpenPreviewFile(item())\" />\n }\n @if (item().type === 'image' && !item().error && !ignoreIconEdit()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [classIconLeft]=\"'libs-ui-icon-edit-line !mr-0'\"\n [popover]=\"{ config: { content: 'i18n_edit', zIndex: zIndex() + 1 } }\"\n [classInclude]=\"'!p-0' + (ignoreIconRemove() ? '' : ' !mr-[12px]')\"\n [disable]=\"item().isUploading || disable() || readonly()\"\n (outClick)=\"handlerEditImage($event, item)\" />\n }\n @if (!ignoreIconRemove()) {\n <libs_ui-components-buttons-button\n [type]=\"'button-link-third'\"\n [classIconLeft]=\"'libs-ui-icon-close !mr-0'\"\n [popover]=\"{ config: { content: 'i18n_delete', zIndex: zIndex() + 1 } }\"\n [classInclude]=\"'!p-0'\"\n [disable]=\"item().isUploading || disable() || readonly()\"\n (outClick)=\"handlerRemoveFile($event, item)\" />\n }\n </div>\n </div>\n @if (item().error && (multiple() || showPopupUploadWhenHasFileAndModeSingle())) {\n <div class=\"mt-[8px] text-[#ee2d41] libs-ui-font-h7r\">\n @let constHtmlMessage = item().error || ' ';\n {{ constHtmlMessage | translate }}\n </div>\n }\n }\n </div>\n }\n</div>\n", styles: [":host ::ng-deep .libs-ui-components-inputs-upload{width:100%;padding:16px;display:flex;align-items:center;justify-content:center;border-radius:8px;cursor:pointer;background-color:#fff;border:1px dashed #e6e7ea}:host ::ng-deep .libs-ui-components-inputs-upload .libs-ui-components-inputs-upload-icon:before{color:#9ca2ad}:host ::ng-deep .libs-ui-components-inputs-upload .libs-ui-components-inputs-upload-description{color:#9ca2ad}:host ::ng-deep .libs-ui-components-inputs-upload .libs-ui-components-inputs-upload-description span{color:var(--libs-ui-color-default, #226ff5)}:host ::ng-deep .libs-ui-components-inputs-upload:hover,:host ::ng-deep .libs-ui-components-inputs-upload.libs-ui-components-inputs-upload-drag-over{background-color:var(--libs-ui-color-light-3, #f4f8ff);border:1px dashed var(--libs-ui-color-light-1, #226ff5)}:host ::ng-deep .libs-ui-components-inputs-upload:hover .libs-ui-components-inputs-upload-icon:before,:host ::ng-deep .libs-ui-components-inputs-upload.libs-ui-components-inputs-upload-drag-over .libs-ui-components-inputs-upload-icon:before{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload:hover .libs-ui-components-inputs-upload-description,:host ::ng-deep .libs-ui-components-inputs-upload.libs-ui-components-inputs-upload-drag-over .libs-ui-components-inputs-upload-description{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload:hover .libs-ui-components-inputs-upload-description span,:host ::ng-deep .libs-ui-components-inputs-upload.libs-ui-components-inputs-upload-drag-over .libs-ui-components-inputs-upload-description span{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload-disable{cursor:default!important;text-decoration:none;pointer-events:none;background-color:var(--libs-ui-background-disable, #f8f9fa)!important;border:1px dashed #e6e7ea!important}:host ::ng-deep .libs-ui-components-inputs-upload-disable .libs-ui-components-inputs-upload-icon:before{color:var(--libs-ui-text-disable, #9ca2ad)}:host ::ng-deep .libs-ui-components-inputs-upload-disable .libs-ui-components-inputs-upload-description{color:var(--libs-ui-text-disable, #9ca2ad)}:host ::ng-deep .libs-ui-components-inputs-upload-disable .libs-ui-components-inputs-upload-description span{color:var(--libs-ui-text-disable, #9ca2ad)}:host ::ng-deep .libs-ui-components-inputs-upload-readonly{cursor:default!important;text-decoration:none;pointer-events:none;background-color:var(--libs-ui-backgrond-realonly, #f8f9fa)!important;border:1px dashed #e6e7ea!important}:host ::ng-deep .libs-ui-components-inputs-upload-readonly .libs-ui-components-inputs-upload-icon:before{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload-readonly .libs-ui-components-inputs-upload-description{color:var(--libs-ui-text-realonly, #071631)}:host ::ng-deep .libs-ui-components-inputs-upload-readonly .libs-ui-components-inputs-upload-description span{color:var(--libs-ui-text-realonly, #071631)}:host ::ng-deep .libs-ui-components-inputs-upload-error{background-color:#fef5f6!important;border:1px dashed #ee2d41!important}:host ::ng-deep .libs-ui-components-inputs-upload-error .libs-ui-components-inputs-upload-icon:before{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload-error .libs-ui-components-inputs-upload-description{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload-error .libs-ui-components-inputs-upload-description span{color:#cdd0d6}:host ::ng-deep .libs-ui-components-inputs-upload-file-full{background-color:#fff;padding:8px 12px}:host ::ng-deep .libs-ui-components-inputs-upload-file-short{background-color:#f4f8ff;padding:6px 12px}.libs-ui-components-inputs-upload-view-list{overflow-y:auto;max-height:100%;padding:0 10px}.libs-ui-components-inputs-upload-view-list .libs-ui-components-inputs-upload-view-list-item{width:100%;display:flex;align-items:center;justify-content:center;border-radius:4px;margin-bottom:8px}.libs-ui-components-inputs-upload-view-list .libs-ui-components-inputs-upload-view-list-item:hover{background-color:#f8f9fa}\n"] }]
443
442
  }], ctorParameters: () => [] });
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkL3NyYy91cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy91cGxvYWQvc3JjL3VwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsUUFBUSxFQUFFLE1BQU0sRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3ROLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JGLE9BQU8sRUFBYSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25HLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTVGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNFLE9BQU8sRUFDTCxZQUFZLEVBQ1osaUJBQWlCLEVBQ2pCLDZCQUE2QixFQUM3QixlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLHlCQUF5QixFQUN6QixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVBQ2xCLFlBQVksRUFDWixxQkFBcUIsRUFDckIsd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUNyQixxQkFBcUIsRUFDckIsV0FBVyxFQUNYLFdBQVcsRUFDWCxXQUFXLEVBQ1gsSUFBSSxFQUNKLFlBQVksR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSwyQ0FBMkMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWpGLE9BQU8sRUFBRSw2Q0FBNkMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzdGLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7QUFrQmhGLE1BQU0sT0FBTyxxQ0FBcUM7SUFDaEQscUJBQXFCO0lBQ2IsdUJBQXVCLENBQXNEO0lBQzdFLHVCQUF1QixDQUFzRDtJQUM3RSw0QkFBNEIsQ0FBd0Q7SUFDbEYsVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixRQUFRLEdBQUcsTUFBTSxDQUErQixFQUFFLENBQUMsQ0FBQztJQUNwRCxXQUFXLEdBQUcsTUFBTSxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLFlBQVksR0FBRyxNQUFNLENBQXFCLFNBQVMsQ0FBQyxDQUFDO0lBQ3JELG9DQUFvQyxHQUFHLFFBQVEsQ0FBNkMsR0FBRyxFQUFFO1FBQ3pHLElBQUksSUFBSSxDQUFDLDRCQUE0QixFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDaEQsT0FBTyxJQUFJLENBQUMsNEJBQTRCLEVBQTJELENBQUM7UUFDdEcsQ0FBQztRQUNELE9BQU8sc0NBQXNDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQ3hKLENBQUMsQ0FBQyxDQUFDO0lBRUssU0FBUyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDeEMsYUFBYTtJQUViLGlCQUFpQjtJQUNSLFdBQVcsR0FBRyxLQUFLLENBQXlFLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbkksUUFBUSxHQUFHLEtBQUssQ0FBaUQsc0JBQXNCLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxzQkFBc0IsRUFBRSxDQUFDLENBQUM7SUFDaEosUUFBUSxHQUFHLEtBQUssRUFBVyxDQUFDO0lBQzVCLHVCQUF1QixHQUFHLEtBQUssQ0FBK0IsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMzRyxZQUFZLEdBQUcsS0FBSyxDQUFzQixLQUFLLENBQUMsQ0FBQztJQUNqRCxTQUFTLEdBQUcsS0FBSyxDQUE2QixFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLFlBQVksR0FBRyxLQUFLLENBQTZCLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BILFlBQVksR0FBRyxLQUFLLENBQTZCLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xILFlBQVksR0FBRyxLQUFLLENBQTZCLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BILGVBQWUsR0FBRyxLQUFLLENBQTZCLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZILFlBQVksR0FBRyxLQUFLLENBQTZCLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3BILFlBQVksR0FBRyxLQUFLLENBQWlDLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDaEgsWUFBWSxHQUFHLEtBQUssQ0FBaUMsWUFBWSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQztJQUNoSCxlQUFlLEdBQUcsS0FBSyxDQUFpQyxlQUFlLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQyxDQUFDO0lBQ3pILFlBQVksR0FBRyxLQUFLLENBQWlDLFlBQVksRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDaEgsb0JBQW9CLEdBQUcsS0FBSyxFQUFVLENBQUM7SUFDdkMsYUFBYSxHQUFHLEtBQUssRUFBb0IsQ0FBQztJQUMxQyxPQUFPLEdBQUcsS0FBSyxDQUErQixLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzNGLFFBQVEsR0FBRyxLQUFLLENBQStCLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDNUYsV0FBVyxHQUFHLEtBQUssRUFBZ0IsQ0FBQztJQUNwQyxNQUFNLEdBQUcsS0FBSyxDQUE2QixJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RGLGtCQUFrQixHQUFHLEtBQUssQ0FBK0IsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztJQUN0RyxnQ0FBZ0MsR0FBRyxLQUFLLENBQStCLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEgsb0JBQW9CLEdBQUcsS0FBSyxDQUE2Qiw2Q0FBNkMsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLDZDQUE2QyxFQUFFLENBQUMsQ0FBQztJQUN0TCxtQkFBbUIsR0FBRyxLQUFLLENBQTZCLDBDQUEwQyxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksMENBQTBDLEVBQUUsQ0FBQyxDQUFDO0lBQy9LLHNCQUFzQixHQUFHLEtBQUssQ0FBNkIsMEJBQTBCLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSwwQkFBMEIsRUFBRSxDQUFDLENBQUM7SUFDbEosNEJBQTRCLEdBQUcsS0FBSyxDQUE2QixtRUFBbUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLG1FQUFtRSxFQUFFLENBQUMsQ0FBQztJQUMxTyw0QkFBNEIsR0FBRyxLQUFLLENBQzNDLEVBQUUsT0FBTyxFQUFFLDhDQUE4QyxFQUFFLEVBQzNEO1FBQ0UsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsOENBQThDLEVBQUU7S0FDdkYsQ0FDRixDQUFDO0lBRU8sZUFBZSxHQUFHLEtBQUssQ0FBNkQsTUFBTSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNuSSw0QkFBNEIsR0FBRyxLQUFLLEVBQThDLENBQUM7SUFDbkYsaUJBQWlCLEdBQUcsS0FBSyxDQUErQixLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3JHLFdBQVcsR0FBRyxLQUFLLEVBQVUsQ0FBQztJQUM5Qix1Q0FBdUMsR0FBRyxLQUFLLENBQStCLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0gsZ0JBQWdCLEdBQUcsS0FBSyxDQUErQixLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3BHLGNBQWMsR0FBRyxLQUFLLENBQStCLEtBQUssRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDbEcsaUJBQWlCLEdBQUcsS0FBSyxDQUErQixJQUFJLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLHVCQUF1QixHQUFHLEtBQUssQ0FBNkIsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN2RyxrQkFBa0IsR0FBRyxLQUFLLENBQTZCLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEcsK0JBQStCLEdBQUcsS0FBSyxDQUErQixLQUFLLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ25ILHdCQUF3QixHQUFHLEtBQUssRUFBbUMsQ0FBQztJQUM3RSxhQUFhO0lBRWIsa0JBQWtCO0lBQ1QsUUFBUSxHQUFHLE1BQU0sRUFBVyxDQUFDO0lBQzdCLGNBQWMsR0FBRyxNQUFNLEVBQWdDLENBQUM7SUFDeEQsY0FBYyxHQUFHLE1BQU0sRUFBeUIsQ0FBQztJQUNqRCxtQkFBbUIsR0FBRyxNQUFNLEVBQStCLENBQUM7SUFDckUsYUFBYTtJQUViLHdCQUF3QjtJQUNmLFNBQVMsR0FBRyxTQUFTLENBQWEsUUFBUSxDQUFDLENBQUM7SUFDNUMsY0FBYyxHQUFHLFNBQVMsQ0FBYSxhQUFhLENBQUMsQ0FBQztJQUMvRCxhQUFhO0lBRWIscUJBQXFCO0lBQ2IsdUJBQXVCLEdBQUcsTUFBTSxDQUFDLDZCQUE2QixDQUFDLENBQUM7SUFDaEUsZ0JBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDNUMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDaEUsYUFBYTtJQUViO1FBQ0UsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNWLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQ3ZCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixRQUFRO1FBQ04sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQsZUFBZTtRQUNiLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ1IsQ0FBQztJQUNELGFBQWE7SUFFYix5QkFBeUI7SUFDZixLQUFLLENBQUMsZUFBZTtRQUM3QixNQUFNLFVBQVUsR0FBYSxFQUFFLENBQUM7UUFDaEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU3QyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ25DLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDaEMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBQ0QsYUFBYTtJQUViLDBCQUEwQjtJQUNoQixLQUFLLENBQUMsbUJBQW1CLENBQUMsTUFBZTtRQUNqRCxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsNENBQTRDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDekcsQ0FBQztJQUVTLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFrQjtRQUNsRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUVkLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3RDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3pCLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMseUJBQXlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRTlLLE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDNUIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsRUFBRSxDQUFDO1lBQ2xGLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLENBQUM7UUFDbEUsSUFBSSxLQUFLLENBQUMsTUFBTSxHQUFHLGVBQWUsRUFBRSxDQUFDO1lBQ25DLG1CQUFtQixHQUFHLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3RDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxNQUFNLE9BQU8sR0FBVTtnQkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLElBQUksRUFBRSxJQUFJO2dCQUNWLElBQUksRUFBRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUNuQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVTtnQkFDNUUsRUFBRSxFQUFFLElBQUksRUFBRTthQUNYLENBQUM7WUFDRixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RyxDQUFDO2dCQUNELE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQ3pDLFNBQVM7WUFDWCxDQUFDO1lBQ0QsSUFBSSxDQUFDLENBQUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztvQkFDekIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQztnQkFDdEcsQ0FBQztnQkFDRCxPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLElBQUksQ0FBQyxnQ0FBZ0MsRUFBRSxFQUFFLENBQUM7b0JBQ2hFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDO29CQUUzRSxPQUFPO2dCQUNULENBQUM7Z0JBQ0QsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDekMsU0FBUztZQUNYLENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUN0RyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNoQyxNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUM7Z0JBQ25FLElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2QsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQzVELENBQUM7Z0JBQ0QsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7WUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQVUsRUFBRSxPQUFjO1FBQ3JELE9BQU8sQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLDZCQUE2QixDQUFDLElBQUksQ0FBQyxDQUFXLENBQUM7UUFFcEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNoQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUUsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRVMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLElBQVc7UUFDaEQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMvQixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU8sS0FBSyxDQUFDLG1CQUFtQixDQUFDLElBQVc7UUFDM0MsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsdUJBQXVCLENBQUMsb0NBQW9DLENBQUMsQ0FBQztRQUMxSCxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDbkUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM1RCxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxTQUFTLENBQUM7UUFDM0MsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsSUFBVztRQUN4QyxJQUFJLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1lBQ3RDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLDRCQUE0QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyx1QkFBdUIsQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO1FBQ2pJLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN4QyxJQUFJLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNyRSxJQUFJLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzFFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFJLENBQUMsNEJBQTRCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ2pFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLDRCQUE0QixHQUFHLFNBQVMsQ0FBQztRQUNoRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVTLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFZLEVBQUUsSUFBMkI7UUFDeEUsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0IsQ0FBQztJQUVTLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxLQUFZLEVBQUUsSUFBMkI7UUFDekUsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLHVDQUF1QyxFQUFFLEVBQUUsQ0FBQztZQUN2RSxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN6QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDUixDQUFDO0lBQ0gsQ0FBQztJQUVTLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBK0I7UUFDeEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNGLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLFFBQVEsRUFBRSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDekUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtnQkFDaEMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBRTVELE9BQU8sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFUyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQStCO1FBQzNELElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDakMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUksUUFBUSxFQUFFLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLHVCQUF1QixDQUFDLG9DQUFvQyxDQUFDLENBQUM7UUFFMUgsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDNUQsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNsRSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFpQixFQUFFLEVBQUU7WUFDdEYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVHLE1BQU0sUUFBUSxHQUFHLFFBQVEsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLElBQUksUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO1lBQzFELFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ2xPLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLGtCQUFrQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDckYsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFUyxLQUFLLENBQUMsdUJBQXVCLENBQUMsSUFBVTtRQUNoRCxNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDZixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDekUsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3pFLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLGFBQWEsR0FBRyx3QkFBd0IsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUM7UUFFbEYsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU3QyxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNuQyxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRVMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLElBQWlCO1FBQ2xELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRTFELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFN0MsSUFBSSxPQUFPLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxJQUFJLE9BQU8sSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0MsT0FBTyxVQUFVLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksT0FBTyxJQUFJLFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7WUFDbkMsT0FBTyxhQUFhLENBQUM7UUFDdkIsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVTLEtBQUssQ0FBQyxRQUFRO1FBQ3RCLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsT0FBTyxJQUFJLHlCQUF5QixDQUFDLENBQUM7WUFFbEYsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQyxDQUFDO1lBRTNELE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRS9ELElBQUksU0FBUyxFQUFFLENBQUM7WUFDZCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUUzRixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVqQyxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFUyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBWSxFQUFFLElBQTJCO1FBQ3hFLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNyRCxPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLEtBQUssQ0FBQyxhQUFhO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFUyxLQUFLLENBQUMseUJBQXlCLENBQUMsS0FBWTtRQUNwRCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUNyQixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFFbEIsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5QyxDQUFDO0lBQ0gsQ0FBQztJQUVPLEtBQUssQ0FBQyxlQUFlO1FBQzNCLElBQUksQ0FBQyxjQUFjLEVBQUUsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDN0MsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUFFLGFBQWEsQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxhQUFhO0lBRWIsb0JBQW9CO0lBQ3BCLElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU87WUFDTCxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3RDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDeEMsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztnQkFFdkUsSUFBSSxhQUFhLEVBQUUsQ0FBQztvQkFDbEIsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sQ0FBQyxPQUFPLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUN6SCxDQUFDO1lBQ0gsQ0FBQztZQUNELGVBQWUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFO2dCQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxFQUFFLEVBQUUsQ0FBQztvQkFDUCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7b0JBRW5FLElBQUksU0FBUyxFQUFFLENBQUM7d0JBQ2QsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzVELENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7U0FDbkQsQ0FBQztJQUNKLENBQUM7SUFDRCxhQUFhO0lBRWIsV0FBVztRQUNULElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM1QixDQUFDO3dHQXJkVSxxQ0FBcUM7NEZBQXJDLHFDQUFxQyxraU5DdERsRCw4aVhBK05BLDAvSERuTEksZUFBZSw0RkFDZixzQ0FBc0Msc2pCQUN0Qyw4QkFBOEIsNHFCQUM5QiwyQ0FBMkMseU1BQzNDLHNDQUFzQyw2U0FDdEMscUNBQXFDLHVLQUNyQyw2Q0FBNkM7OzRGQUlwQyxxQ0FBcUM7a0JBakJqRCxTQUFTOytCQUVFLGtDQUFrQyxjQUdoQyxJQUFJLFdBQ1A7d0JBQ1AsZUFBZTt3QkFDZixzQ0FBc0M7d0JBQ3RDLDhCQUE4Qjt3QkFDOUIsMkNBQTJDO3dCQUMzQyxzQ0FBc0M7d0JBQ3RDLHFDQUFxQzt3QkFDckMsNkNBQTZDO3FCQUM5QyxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbXBvbmVudFJlZiwgY29tcHV0ZWQsIGVmZmVjdCwgRWxlbWVudFJlZiwgaW5qZWN0LCBpbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIG91dHB1dCwgc2lnbmFsLCB1bnRyYWNrZWQsIHZpZXdDaGlsZCwgV3JpdGFibGVTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1idXR0b25zLWJ1dHRvbic7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzR2FsbGVyeVZpZXdlckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtZ2FsbGVyeSc7XG5pbXBvcnQgeyBJU2F2ZUZpbGUsIExpYnNVaUNvbXBvbmVudHNJbWFnZUVkaXRvckNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtaW1hZ2UtZWRpdG9yJztcbmltcG9ydCB7IElMYWJlbCwgTGlic1VpQ29tcG9uZW50c0xhYmVsQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1sYWJlbCc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzUHJldmlld0ZpbGVDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXByZXZpZXctZmlsZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZSB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtc2Nyb2xsLW92ZXJsYXknO1xuaW1wb3J0IHsgSUFzcGVjdFJhdGlvLCBJRmlsZSwgSUlzVmFsaWRSZXF1aXJlZCwgSU1lc3NhZ2VUcmFuc2xhdGUgfSBmcm9tICdAbGlicy11aS9pbnRlcmZhY2VzLXR5cGVzJztcbmltcG9ydCB7IExpYnNVaUR5bmFtaWNDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlic1VpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLW5vdGlmaWNhdGlvbic7XG5pbXBvcnQge1xuICBBdWRpb0V4dExpc3QsXG4gIGNvbnZlcnRCbG9iVG9GaWxlLFxuICBjb252ZXJ0RmlsZVRvQmFzZTY0X09iamVjdFVybCxcbiAgRG9jdW1lbnRFeHRMaXN0LFxuICBkb3dubG9hZEZpbGVCeVVybCxcbiAgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCxcbiAgZ2V0RmlsZUV4dGVuc2lvbixcbiAgZ2V0TGFiZWxCeVNpemVGaWxlLFxuICBJbWFnZUV4dExpc3QsXG4gIGlzSW5jbHVkZUF1ZGlvRXh0TGlzdCxcbiAgaXNJbmNsdWRlRG9jdW1lbnRFeHRMaXN0LFxuICBpc0luY2x1ZGVJbWFnZUV4dExpc3QsXG4gIGlzSW5jbHVkZVZpZGVvRXh0TGlzdCxcbiAgaXNUeXBlQXVkaW8sXG4gIGlzVHlwZUltYWdlLFxuICBpc1R5cGVWaWRlbyxcbiAgdXVpZCxcbiAgVmlkZW9FeHRMaXN0LFxufSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbnB1dHNVcGxvYWRBdmF0YXJDb21wb25lbnQgfSBmcm9tICcuL2F2YXRhci9hdmF0YXIuY29tcG9uZW50JztcbmltcG9ydCB7IGdldERlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGVEZWZhdWx0IH0gZnJvbSAnLi9kZWZpbmVzL2hlbHBlci5kZWZpbmUnO1xuaW1wb3J0IHsgSVVwbG9hZENvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSwgSVVwbG9hZERlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGUsIElVcGxvYWRGdW5jdGlvbkNvbnRyb2xFdmVudCwgVFlQRV9GSUxFX1VQTE9BRCwgVFlQRV9NT0RFX0ZJTEVfRElTUExBWSB9IGZyb20gJy4vaW50ZXJmYWNlcy91cGxvYWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbnB1dHNVcGxvYWREcm9wRmlsZURpcmVjdGl2ZSB9IGZyb20gJy4vdXBsb2FkLWRyb3AtZmlsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZERpcmVjdGl2ZSB9IGZyb20gJy4vdXBsb2FkLWZpbGUuZGlyZWN0aXZlJztcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzSW5wdXRzVXBsb2FkQXZhdGFyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlLFxuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNVcGxvYWREaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZERyb3BGaWxlRGlyZWN0aXZlLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUSUVTXG4gIHByaXZhdGUgaW1hZ2VFZGl0b3JDb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c0ltYWdlRWRpdG9yQ29tcG9uZW50PjtcbiAgcHJpdmF0ZSBwcmV2aWV3RmlsZUNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzUHJldmlld0ZpbGVDb21wb25lbnQ+O1xuICBwcml2YXRlIHByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQ+O1xuICBwcm90ZWN0ZWQgaXNEcmFnT3ZlciA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBmaWxlTGlzdCA9IHNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxJRmlsZT4+PihbXSk7XG4gIHByb3RlY3RlZCBhY2Nlc3NGaWxlcyA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIG1lc3NhZ2VFcnJvciA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBkZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlQ29tcHV0ZWQgPSBjb21wdXRlZDxBcnJheTxJVXBsb2FkRGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZT4+KCgpID0+IHtcbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlKCk/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZSgpIGFzIHVua25vd24gYXMgQXJyYXk8SVVwbG9hZERlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGU+O1xuICAgIH1cbiAgICByZXR1cm4gZ2V0RGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZURlZmF1bHQodGhpcy5maWxlVHlwZSgpLCB0aGlzLm1heEltYWdlU2l6ZSgpLCB0aGlzLm1heFZpZGVvU2l6ZSgpLCB0aGlzLm1heERvY3VtZW50U2l6ZSgpLCB0aGlzLm1heEF1ZGlvU2l6ZSgpKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFNcbiAgcmVhZG9ubHkgb3JpZ2luRmlsZXMgPSBpbnB1dDxBcnJheTxXcml0YWJsZVNpZ25hbDxJRmlsZT4+LCBBcnJheTxXcml0YWJsZVNpZ25hbDxJRmlsZT4+IHwgdW5kZWZpbmVkPihbXSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBbXSB9KTtcbiAgcmVhZG9ubHkgZmlsZVR5cGUgPSBpbnB1dDxUWVBFX0ZJTEVfVVBMT0FELCBUWVBFX0ZJTEVfVVBMT0FEIHwgdW5kZWZpbmVkPignaW1hZ2VfdmlkZW9fZG9jdW1lbnQnLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/ICdpbWFnZV92aWRlb19kb2N1bWVudCcgfSk7XG4gIHJlYWRvbmx5IG11bHRpcGxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgY2FuVXBsb2FkSWZIYXNFeGlzdEZpbGUgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgY2FuU2V0QXZhdGFyID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBsaW1pdEZpbGUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gMTAgfSk7XG4gIHJlYWRvbmx5IG1heFRvdGFsU2l6ZSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMCAqIDEwMjQgKiAxMDI0LCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IDEwICogMTAyNCAqIDEwMjQgfSk7XG4gIHJlYWRvbmx5IG1heEltYWdlU2l6ZSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPig1ICogMTAyNCAqIDEwMjQsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gNSAqIDEwMjQgKiAxMDI0IH0pO1xuICByZWFkb25seSBtYXhWaWRlb1NpemUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAgKiAxMDI0ICogMTAyNCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAxMCAqIDEwMjQgKiAxMDI0IH0pO1xuICByZWFkb25seSBtYXhEb2N1bWVudFNpemUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAgKiAxMDI0ICogMTAyNCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAxMCAqIDEwMjQgKiAxMDI0IH0pO1xuICByZWFkb25seSBtYXhBdWRpb1NpemUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAgKiAxMDI0ICogMTAyNCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAxMCAqIDEwMjQgKiAxMDI0IH0pO1xuICByZWFkb25seSBpbWFnZUV4dExpc3QgPSBpbnB1dDxzdHJpbmdbXSwgc3RyaW5nW10gfCB1bmRlZmluZWQ+KEltYWdlRXh0TGlzdCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBJbWFnZUV4dExpc3QgfSk7XG4gIHJlYWRvbmx5IHZpZGVvRXh0TGlzdCA9IGlucHV0PHN0cmluZ1tdLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4oVmlkZW9FeHRMaXN0LCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IFZpZGVvRXh0TGlzdCB9KTtcbiAgcmVhZG9ubHkgZG9jdW1lbnRFeHRMaXN0ID0gaW5wdXQ8c3RyaW5nW10sIHN0cmluZ1tdIHwgdW5kZWZpbmVkPihEb2N1bWVudEV4dExpc3QsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gRG9jdW1lbnRFeHRMaXN0IH0pO1xuICByZWFkb25seSBhdWRpb0V4dExpc3QgPSBpbnB1dDxzdHJpbmdbXSwgc3RyaW5nW10gfCB1bmRlZmluZWQ+KEF1ZGlvRXh0TGlzdCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBBdWRpb0V4dExpc3QgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZUxpc3RJdGVtID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SUlzVmFsaWRSZXF1aXJlZD4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSByZWFkb25seSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBhc3BlY3RSYXRpbyA9IGlucHV0PElBc3BlY3RSYXRpbz4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDEyMDAsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gMTIwMCB9KTtcbiAgcmVhZG9ubHkgaWdub3JlU2hvd1NpemVGaWxlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGFsbG93U2hvd1B1c2hNZXNzYWdlTWF4U2l6ZUVycm9yID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IG1lc3NhZ2VUeXBlRmlsZUVycm9yID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdpMThuX3RoZV9maWxlX3N1cHBvcnRfZm9ybWF0X2lzX25vdF9jb3JyZWN0JywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCB8fCAnaTE4bl90aGVfZmlsZV9zdXBwb3J0X2Zvcm1hdF9pc19ub3RfY29ycmVjdCcgfSk7XG4gIHJlYWRvbmx5IG1lc3NhZ2VNYXhTaXplRXJyb3IgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2kxOG5fZmlsZV9zaXplX2V4Y2VlZHNfdGhlX2FsbG93ZWRfbGltaXQnLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsIHx8ICdpMThuX2ZpbGVfc2l6ZV9leGNlZWRzX3RoZV9hbGxvd2VkX2xpbWl0JyB9KTtcbiAgcmVhZG9ubHkgbWVzc2FnZUZpbGVVcGxvYWRFcnJvciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9pbnZhbGlkX2ZpbGVfdXBsb2FkJywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCB8fCAnaTE4bl9pbnZhbGlkX2ZpbGVfdXBsb2FkJyB9KTtcbiAgcmVhZG9ubHkgbWVzc2FnZVRvdGFsRmlsZUV4Y2VlZHNFcnJvciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9maWxlX251bWJlcl9leGNlZWRzX3RoZV9hbGxvd2VkX2xpbWl0X3BsZWFzZV9kZWxldGVfdGhlX2ZpbGUnLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsIHx8ICdpMThuX2ZpbGVfbnVtYmVyX2V4Y2VlZHNfdGhlX2FsbG93ZWRfbGltaXRfcGxlYXNlX2RlbGV0ZV90aGVfZmlsZScgfSk7XG4gIHJlYWRvbmx5IGNvbmZpZ0Rlc2NyaXB0aW9uSW5wdXRVcGxvYWQgPSBpbnB1dDxJTWVzc2FnZVRyYW5zbGF0ZSwgSU1lc3NhZ2VUcmFuc2xhdGUgfCB1bmRlZmluZWQ+KFxuICAgIHsgbWVzc2FnZTogJ2kxOG5fZHJhZ19maWxlX2hlcmVfdG9fdXBsb2FkX29yX3NlbGVjdF9maWxlJyB9LFxuICAgIHtcbiAgICAgIHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IHsgbWVzc2FnZTogJ2kxOG5fZHJhZ19maWxlX2hlcmVfdG9fdXBsb2FkX29yX3NlbGVjdF9maWxlJyB9LFxuICAgIH1cbiAgKTtcblxuICByZWFkb25seSBtb2RlRGlzcGxheUZpbGUgPSBpbnB1dDxUWVBFX01PREVfRklMRV9ESVNQTEFZLCBUWVBFX01PREVfRklMRV9ESVNQTEFZIHwgdW5kZWZpbmVkPignZnVsbCcsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgfHwgJ2Z1bGwnIH0pO1xuICByZWFkb25seSBkZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlID0gaW5wdXQ8QXJyYXk8SVVwbG9hZERlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGU+PigpO1xuICByZWFkb25seSBzaG93VmlkZW9EdXJhdGlvbiA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBsYWJlbENvbmZpZyA9IGlucHV0PElMYWJlbD4oKTtcbiAgcmVhZG9ubHkgc2hvd1BvcHVwVXBsb2FkV2hlbkhhc0ZpbGVBbmRNb2RlU2luZ2xlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZUljb25SZW1vdmUgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlSWNvbkVkaXQgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlSWNvblByZXZpZXcgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPih0cnVlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IHRydWUgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZUZpbGVDb250ZW50ID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlQXZhdGFyID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgc2hvd0JvcmRlckVycm9yQWxsSXRlbVdoZW5FcnJvciA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUgPSBpbnB1dDxJVXBsb2FkQ29uZmlnRG93bmxvYWRTYW1wbGVGaWxlPigpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRTXG4gIHJlYWRvbmx5IG91dENsb3NlID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dEZpbGVDaGFuZ2VkID0gb3V0cHV0PEFycmF5PFdyaXRhYmxlU2lnbmFsPElGaWxlPj4+KCk7XG4gIHJlYWRvbmx5IG91dEZpbGVSZW1vdmVkID0gb3V0cHV0PFdyaXRhYmxlU2lnbmFsPElGaWxlPj4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJVXBsb2FkRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFZJRVcgQ0hJTERSRU5cbiAgcmVhZG9ubHkgdXBsb2FkUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd1cGxvYWQnKTtcbiAgcmVhZG9ubHkgdXBsb2FkSW5wdXRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3VwbG9hZElucHV0Jyk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIElOSkVDVElPTlNcbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KExpYnNVaU5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9yaWdpbkZpbGVzKCkpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZpbGVMaXN0LnNldChbLi4udGhpcy5vcmlnaW5GaWxlcygpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gI3JlZ2lvbiBMSUZFQ1lDTEUgSE9PS1NcbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQodGhpcy5GdW5jdGlvbnNDb250cm9sKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5pdEFjY2Vzc0ZpbGVzKCk7XG4gICAgfSwgMCk7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gSU5JVElBTElaQVRJT05cbiAgcHJvdGVjdGVkIGFzeW5jIGluaXRBY2Nlc3NGaWxlcygpIHtcbiAgICBjb25zdCBhY2Nlc3NFeHRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHR5cGVTcGxpdCA9IHRoaXMuZmlsZVR5cGUoKS5zcGxpdCgnXycpO1xuXG4gICAgaWYgKHR5cGVTcGxpdC5pbmNsdWRlcygnaW1hZ2UnKSkge1xuICAgICAgYWNjZXNzRXh0cy5wdXNoKC4uLnRoaXMuaW1hZ2VFeHRMaXN0KCkpO1xuICAgIH1cbiAgICBpZiAodHlwZVNwbGl0LmluY2x1ZGVzKCdkb2N1bWVudCcpKSB7XG4gICAgICBhY2Nlc3NFeHRzLnB1c2goLi4udGhpcy5kb2N1bWVudEV4dExpc3QoKSk7XG4gICAgfVxuICAgIGlmICh0eXBlU3BsaXQuaW5jbHVkZXMoJ3ZpZGVvJykpIHtcbiAgICAgIGFjY2Vzc0V4dHMucHVzaCguLi50aGlzLnZpZGVvRXh0TGlzdCgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVTcGxpdC5pbmNsdWRlcygnYXVkaW8nKSkge1xuICAgICAgYWNjZXNzRXh0cy5wdXNoKC4uLnRoaXMuYXVkaW9FeHRMaXN0KCkpO1xuICAgIH1cbiAgICB0aGlzLmFjY2Vzc0ZpbGVzLnNldChhY2Nlc3NFeHRzLm1hcCgoZXh0KSA9PiBgLiR7ZXh0fWApLmpvaW4oJywnKSk7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gRklMRSBPUEVSQVRJT05TXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2V0Q2xhc3NEcmFnKHRvb2dsZTogYm9vbGVhbikge1xuICAgIHRoaXMudXBsb2FkUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnbGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtZHJhZy1vdmVyJywgdG9vZ2xlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVVcGxvYWRGaWxlcyhmaWxlczogQXJyYXk8RmlsZT4pIHtcbiAgICBpZiAodGhpcy5tYXhUb3RhbFNpemUoKSkge1xuICAgICAgbGV0IHRvdGFsID0gMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0b3RhbCArPSBmaWxlc1tpXS5zaXplO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tYXhUb3RhbFNpemUoKSA8IHRvdGFsKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zaG93Q29tcFR5cGVUZXh0RXJyb3IodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2kxOG5fc2l6ZV9ub3RfbnVtYmVyX21iJywgeyBudW1iZXI6IHRoaXMubWF4VG90YWxTaXplKCkgLyAxMDI0IC8gMTAyNCB9KSwgeyB0aW1lUmVtb3ZlOiAzMDAwIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZXJyb3JFeGNlZWRzTWF4RmlsZSA9IGZhbHNlO1xuICAgIGlmICghZmlsZXMgfHwgIWZpbGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUoKSAmJiB0aGlzLmZpbGVMaXN0KCkubGVuZ3RoICYmICF0aGlzLmNhblVwbG9hZElmSGFzRXhpc3RGaWxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZW1haW5GaWxlVG90YWwgPSB0aGlzLmxpbWl0RmlsZSgpIC0gdGhpcy5maWxlTGlzdCgpLmxlbmd0aDtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gcmVtYWluRmlsZVRvdGFsKSB7XG4gICAgICBlcnJvckV4Y2VlZHNNYXhGaWxlID0gdHJ1ZTtcbiAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh0aGlzLm1lc3NhZ2VUb3RhbEZpbGVFeGNlZWRzRXJyb3IoKSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcbiAgICAgIGNvbnN0IGlzSW1hZ2UgPSBpc1R5cGVJbWFnZShmaWxlKTtcbiAgICAgIGNvbnN0IGlzVmlkZW8gPSBpc1R5cGVWaWRlbyhmaWxlKTtcbiAgICAgIGNvbnN0IGlzQXVkaW8gPSBpc1R5cGVBdWRpbyhmaWxlKTtcbiAgICAgIGNvbnN0IG5ld0ZpbGU6IElGaWxlID0ge1xuICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIGZpbGU6IGZpbGUsXG4gICAgICAgIHNpemU6IGdldExhYmVsQnlTaXplRmlsZShmaWxlLnNpemUpLFxuICAgICAgICB0eXBlOiBpc0ltYWdlID8gJ2ltYWdlJyA6IGlzVmlkZW8gPyAndmlkZW8nIDogaXNBdWRpbyA/ICdhdWRpbycgOiAnZG9jdW1lbnQnLFxuICAgICAgICBpZDogdXVpZCgpLFxuICAgICAgfTtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuY2hlY2tWYWxpZEZpbGVFeHRlbnNpb24oZmlsZSkpKSB7XG4gICAgICAgIGlmICghZXJyb3JFeGNlZWRzTWF4RmlsZSkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh0aGlzLm11bHRpcGxlKCkgPyB0aGlzLm1lc3NhZ2VGaWxlVXBsb2FkRXJyb3IoKSA6IHRoaXMubWVzc2FnZVR5cGVGaWxlRXJyb3IoKSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3RmlsZS5lcnJvciA9IHRoaXMubWVzc2FnZVR5cGVGaWxlRXJyb3IoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wdXNoRmlsZUluTGlzdChmaWxlLCBuZXdGaWxlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmNoZWNrVmFsaWRGaWxlU2l6ZShmaWxlKSkpIHtcbiAgICAgICAgaWYgKCFlcnJvckV4Y2VlZHNNYXhGaWxlKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHRoaXMubXVsdGlwbGUoKSA/IHRoaXMubWVzc2FnZUZpbGVVcGxvYWRFcnJvcigpIDogdGhpcy5tZXNzYWdlTWF4U2l6ZUVycm9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIG5ld0ZpbGUuZXJyb3IgPSB0aGlzLm1lc3NhZ2VNYXhTaXplRXJyb3IoKTtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKCkgJiYgdGhpcy5hbGxvd1Nob3dQdXNoTWVzc2FnZU1heFNpemVFcnJvcigpKSB7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dDb21wVHlwZVRleHRFcnJvcih0aGlzLm1lc3NhZ2VNYXhTaXplRXJyb3IoKSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5wdXNoRmlsZUluTGlzdChmaWxlLCBuZXdGaWxlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnB1c2hGaWxlSW5MaXN0KGZpbGUsIG5ld0ZpbGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYW5TZXRBdmF0YXIoKSAmJiB0aGlzLmZpbGVMaXN0KCkubGVuZ3RoICYmICF0aGlzLmZpbGVMaXN0KCkuZmluZCgoZmlsZSkgPT4gZmlsZSgpLmlzQXZhdGFyKSkge1xuICAgICAgdGhpcy5maWxlTGlzdC51cGRhdGUoKGZpbGVMaXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1JbWFnZSA9IGZpbGVMaXN0LmZpbmQoKGZpbGUpID0+IGZpbGUoKS50eXBlID09PSAnaW1hZ2UnKTtcbiAgICAgICAgaWYgKGl0ZW1JbWFnZSkge1xuICAgICAgICAgIGl0ZW1JbWFnZS51cGRhdGUoKGZpbGUpID0+ICh7IC4uLmZpbGUsIGlzQXZhdGFyOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLmZpbGVMaXN0XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHB1c2hGaWxlSW5MaXN0KGZpbGU6IEZpbGUsIG5ld0ZpbGU6IElGaWxlKSB7XG4gICAgbmV3RmlsZS51cmwgPSAoYXdhaXQgY29udmVydEZpbGVUb0Jhc2U2NF9PYmplY3RVcmwoZmlsZSkpIGFzIHN0cmluZztcblxuICAgIHRoaXMuZmlsZUxpc3QudXBkYXRlKChmaWxlTGlzdCkgPT4ge1xuICAgICAgZmlsZUxpc3Quc3BsaWNlKDAsIHRoaXMuY2FuVXBsb2FkSWZIYXNFeGlzdEZpbGUoKSA/IDEgOiAwLCBzaWduYWwobmV3RmlsZSkpO1xuICAgICAgcmV0dXJuIFsuLi5maWxlTGlzdF07XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlck9wZW5QcmV2aWV3RmlsZShpdGVtOiBJRmlsZSkge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdkb2N1bWVudCcpIHtcbiAgICAgIHRoaXMucHJldmlld0ZpbGVEb2N1bWVudChpdGVtKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcmV2aWV3RmlsZUltYWdlKGl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmV2aWV3RmlsZURvY3VtZW50KGl0ZW06IElGaWxlKSB7XG4gICAgaWYgKHRoaXMucHJldmlld0ZpbGVDb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcmV2aWV3RmlsZUNvbXBvbmVudFJlZiA9IHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c1ByZXZpZXdGaWxlQ29tcG9uZW50KTtcbiAgICB0aGlzLnByZXZpZXdGaWxlQ29tcG9uZW50UmVmLnNldElucHV0KCdkYXRhJywgaXRlbSk7XG4gICAgdGhpcy5wcmV2aWV3RmlsZUNvbXBvbmVudFJlZi5zZXRJbnB1dCgnekluZGV4JywgdGhpcy56SW5kZXgoKSArIDEpO1xuICAgIHRoaXMucHJldmlld0ZpbGVDb21wb25lbnRSZWYuaW5zdGFuY2Uub3V0Q2xvc2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMucHJldmlld0ZpbGVDb21wb25lbnRSZWYpO1xuICAgICAgdGhpcy5wcmV2aWV3RmlsZUNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmFkZFRvQm9keSh0aGlzLnByZXZpZXdGaWxlQ29tcG9uZW50UmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJldmlld0ZpbGVJbWFnZShpdGVtOiBJRmlsZSkge1xuICAgIGlmICh0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMaWJzVWlDb21wb25lbnRzR2FsbGVyeVZpZXdlckNvbXBvbmVudCk7XG4gICAgY29uc3QgdXJsID0gaXRlbS51cmwgfHwgaXRlbS5vcmlnaW5fdXJsO1xuICAgIHRoaXMucHJldmlld0ZpbGVJbWFnZUNvbXBvbmVudFJlZi5zZXRJbnB1dCgnaW1hZ2VzJywgW3sgdXJsIH1dKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYuc2V0SW5wdXQoJ2ltYWdlU2VsZWN0ZWQnLCB7IHVybCB9KTtcbiAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYuc2V0SW5wdXQoJ2ZpZWxkRGlzcGxheVNyY0ltYWdlJywgJ3VybCcpO1xuICAgIHRoaXMucHJldmlld0ZpbGVJbWFnZUNvbXBvbmVudFJlZi5zZXRJbnB1dCgnc2luZ2xlSW1hZ2UnLCB0cnVlKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYuc2V0SW5wdXQoJ3pJbmRleCcsIHRoaXMuekluZGV4KCkgKyAxKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYuaW5zdGFuY2Uub3V0Q2xvc2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMucHJldmlld0ZpbGVJbWFnZUNvbXBvbmVudFJlZik7XG4gICAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyRWRpdEltYWdlKGV2ZW50OiBFdmVudCwgaXRlbTogV3JpdGFibGVTaWduYWw8SUZpbGU+KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zaG93RWRpdE1vZGFsKGl0ZW0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJSZW1vdmVGaWxlKGV2ZW50OiBFdmVudCwgaXRlbTogV3JpdGFibGVTaWduYWw8SUZpbGU+KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5yZW1vdmVGaWxlKGl0ZW0pO1xuICAgIGlmICh0aGlzLm9yaWdpbkZpbGVzKCkuZmluZCgoZmlsZSkgPT4gZmlsZSgpLnVybCA9PT0gaXRlbSgpLnVybCkpIHtcbiAgICAgIHRoaXMub3V0RmlsZVJlbW92ZWQuZW1pdChpdGVtKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSgpICYmIHRoaXMuc2hvd1BvcHVwVXBsb2FkV2hlbkhhc0ZpbGVBbmRNb2RlU2luZ2xlKCkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dVcGxvYWRQb3B1cCgpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbW92ZUZpbGUoZmlsZUl0ZW06IFdyaXRhYmxlU2lnbmFsPElGaWxlPikge1xuICAgIHRoaXMuZmlsZUxpc3QudXBkYXRlKChmaWxlTGlzdCkgPT4gZmlsZUxpc3QuZmlsdGVyKChpdGVtKSA9PiBpdGVtKCkuaWQgIT09IGZpbGVJdGVtKCkuaWQpKTtcbiAgICBpZiAodGhpcy5jYW5TZXRBdmF0YXIoKSAmJiBmaWxlSXRlbSgpLmlzQXZhdGFyICYmIHRoaXMuZmlsZUxpc3QoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsZUxpc3QudXBkYXRlKChmaWxlTGlzdCkgPT4ge1xuICAgICAgICBmaWxlTGlzdFswXS51cGRhdGUoKGZpbGUpID0+ICh7IC4uLmZpbGUsIGlzQXZhdGFyOiB0cnVlIH0pKTtcblxuICAgICAgICByZXR1cm4gWy4uLmZpbGVMaXN0XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzaG93RWRpdE1vZGFsKGZpbGVJdGVtOiBXcml0YWJsZVNpZ25hbDxJRmlsZT4pIHtcbiAgICBpZiAodGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWxlRGF0YVVybCA9IGZpbGVJdGVtKCkudXJsIHx8IGZpbGVJdGVtKCkub3JpZ2luX3VybCB8fCAnJztcbiAgICB0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JDb21wb25lbnQpO1xuXG4gICAgdGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZi5zZXRJbnB1dCgnaW1nU3JjJywgZmlsZURhdGFVcmwpO1xuICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWYuc2V0SW5wdXQoJ3pJbmRleCcsIHRoaXMuekluZGV4KCkgKyAxKTtcbiAgICB0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmLnNldElucHV0KCduYW1lRmlsZScsIGZpbGVJdGVtKCkubmFtZSk7XG4gICAgdGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZi5zZXRJbnB1dCgnYXNwZWN0UmF0aW8nLCB0aGlzLmFzcGVjdFJhdGlvKCkpO1xuICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWYuaW5zdGFuY2Uub3V0Q2xvc2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWYpO1xuICAgICAgdGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWYuaW5zdGFuY2Uub3V0U2F2ZUZpbGUuc3Vic2NyaWJlKGFzeW5jIChyZXN1bHQ6IElTYXZlRmlsZSkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZUVycm9yID0gIShhd2FpdCB0aGlzLmNoZWNrVmFsaWRGaWxlU2l6ZShyZXN1bHQuZmlsZSkpID8gdGhpcy5tZXNzYWdlTWF4U2l6ZUVycm9yKCkgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBuYW1lRmlsZSA9IGZpbGVJdGVtKCkuZmlsZT8ubmFtZSB8fCBmaWxlSXRlbSgpLm5hbWU7XG4gICAgICBmaWxlSXRlbS51cGRhdGUoKGRhdGEpID0+ICh7IC4uLmRhdGEsIGZpbGU6IGNvbnZlcnRCbG9iVG9GaWxlKHJlc3VsdC5maWxlLCBuYW1lRmlsZSksIG5hbWU6IG5hbWVGaWxlLCBvcmlnaW5fdXJsOiB1bmRlZmluZWQsIHNpemU6IGdldExhYmVsQnlTaXplRmlsZShyZXN1bHQuZmlsZS5zaXplKSwgZXJyb3I6IG1lc3NhZ2VFcnJvciwgdXJsOiByZXN1bHQudXJsLCBpc1VwZGF0ZTogdHJ1ZSB9KSk7XG4gICAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWY/Lmluc3RhbmNlLm91dENsb3NlLmVtaXQoeyBpc0NsaWNrQnV0dG9uQ2xvc2U6IHRydWUgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZik7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2hlY2tWYWxpZEZpbGVFeHRlbnNpb24oZmlsZTogRmlsZSkge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGdldEZpbGVFeHRlbnNpb24oZmlsZSk7XG5cbiAgICBpZiAoIWV4dGVuc2lvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpc0ltYWdlID0gaXNUeXBlSW1hZ2UoZmlsZSk7XG4gICAgY29uc3QgaXNWaWRlbyA9IGlzVHlwZVZpZGVvKGZpbGUpO1xuICAgIGNvbnN0IGlzQXVkaW8gPSBpc1R5cGVBdWRpbyhmaWxlKTtcbiAgICBjb25zdCB2YWxpZEltYWdlID0gaXNJbmNsdWRlSW1hZ2VFeHRMaXN0KGV4dGVuc2lvbiwgdGhpcy5pbWFnZUV4dExpc3QoKSk7XG4gICAgY29uc3QgdmFsaWRWaWRlbyA9IGlzSW5jbHVkZVZpZGVvRXh0TGlzdChleHRlbnNpb24sIHRoaXMudmlkZW9FeHRMaXN0KCkpO1xuICAgIGNvbnN0IHZhbGlkQXVkaW8gPSBpc0luY2x1ZGVBdWRpb0V4dExpc3QoZXh0ZW5zaW9uLCB0aGlzLmF1ZGlvRXh0TGlzdCgpKTtcbiAgICBjb25zdCB2YWxpZERvY3VtZW50ID0gaXNJbmNsdWRlRG9jdW1lbnRFeHRMaXN0KGV4dGVuc2lvbiwgdGhpcy5kb2N1bWVudEV4dExpc3QoKSk7XG5cbiAgICBjb25zdCB0eXBlU3BsaXQgPSB0aGlzLmZpbGVUeXBlKCkuc3BsaXQoJ18nKTtcblxuICAgIGlmIChpc0ltYWdlICYmIHR5cGVTcGxpdC5pbmNsdWRlcygnaW1hZ2UnKSkge1xuICAgICAgcmV0dXJuIHZhbGlkSW1hZ2U7XG4gICAgfVxuICAgIGlmIChpc1ZpZGVvICYmIHR5cGVTcGxpdC5pbmNsdWRlcygndmlkZW8nKSkge1xuICAgICAgcmV0dXJuIHZhbGlkVmlkZW87XG4gICAgfVxuICAgIGlmIChpc0F1ZGlvICYmIHR5cGVTcGxpdC5pbmNsdWRlcygnYXVkaW8nKSkge1xuICAgICAgcmV0dXJuIHZhbGlkQXVkaW87XG4gICAgfVxuICAgIGlmICh0eXBlU3BsaXQuaW5jbHVkZXMoJ2RvY3VtZW50JykpIHtcbiAgICAgIHJldHVybiB2YWxpZERvY3VtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjaGVja1ZhbGlkRmlsZVNpemUoZmlsZTogRmlsZSB8IEJsb2IpIHtcbiAgICBjb25zdCBpc0ltYWdlID0gaXNUeXBlSW1hZ2UoZmlsZSk7XG4gICAgY29uc3QgaXNWaWRlbyA9IGlzVHlwZVZpZGVvKGZpbGUpO1xuICAgIGNvbnN0IGlzQXVkaW8gPSBpc1R5cGVBdWRpbyhmaWxlKTtcbiAgICBjb25zdCB2YWxpZEltYWdlID0gZmlsZS5zaXplIDw9IHRoaXMubWF4SW1hZ2VTaXplKCk7XG4gICAgY29uc3QgdmFsaWRWaWRlbyA9IGZpbGUuc2l6ZSA8PSB0aGlzLm1heFZpZGVvU2l6ZSgpO1xuICAgIGNvbnN0IHZhbGlkQXVkaW8gPSBmaWxlLnNpemUgPD0gdGhpcy5tYXhBdWRpb1NpemUoKTtcbiAgICBjb25zdCB2YWxpZERvY3VtZW50ID0gZmlsZS5zaXplIDw9IHRoaXMubWF4RG9jdW1lbnRTaXplKCk7XG5cbiAgICBjb25zdCB0eXBlU3BsaXQgPSB0aGlzLmZpbGVUeXBlKCkuc3BsaXQoJ18nKTtcblxuICAgIGlmIChpc0ltYWdlICYmIHR5cGVTcGxpdC5pbmNsdWRlcygnaW1hZ2UnKSkge1xuICAgICAgcmV0dXJuIHZhbGlkSW1hZ2U7XG4gICAgfVxuICAgIGlmIChpc1ZpZGVvICYmIHR5cGVTcGxpdC5pbmNsdWRlcygndmlkZW8nKSkge1xuICAgICAgcmV0dXJuIHZhbGlkVmlkZW87XG4gICAgfVxuICAgIGlmIChpc0F1ZGlvICYmIHR5cGVTcGxpdC5pbmNsdWRlcygnYXVkaW8nKSkge1xuICAgICAgcmV0dXJuIHZhbGlkQXVkaW87XG4gICAgfVxuICAgIGlmICh0eXBlU3BsaXQuaW5jbHVkZXMoJ2RvY3VtZW50JykpIHtcbiAgICAgIHJldHVybiB2YWxpZERvY3VtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWxpZFJlcXVpcmVkKCk/LmlzUmVxdWlyZWQgJiYgIXRoaXMuZmlsZUxpc3QoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh0aGlzLnZhbGlkUmVxdWlyZWQoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5tdWx0aXBsZSgpICYmIHRoaXMuZmlsZUxpc3QoKS5sZW5ndGggPiB0aGlzLmxpbWl0RmlsZSgpKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VFcnJvci5zZXQodGhpcy5tZXNzYWdlVG90YWxGaWxlRXhjZWVkc0Vycm9yKCkpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVFcnJvciA9IHRoaXMuZmlsZUxpc3QoKS5maW5kKChpdGVtKSA9PiBpdGVtKCkuZXJyb3IpO1xuXG4gICAgaWYgKGZpbGVFcnJvcikge1xuICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHRoaXMubXVsdGlwbGUoKSA/IHRoaXMubWVzc2FnZUZpbGVVcGxvYWRFcnJvcigpIDogZmlsZUVycm9yKCkuZXJyb3IpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh1bmRlZmluZWQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNldEF2YXRhcihldmVudDogRXZlbnQsIGZpbGU6IFdyaXRhYmxlU2lnbmFsPElGaWxlPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5maWxlTGlzdCgpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtKCkuaWQgPT09IGZpbGUoKS5pZCkge1xuICAgICAgICBpdGVtLnVwZGF0ZSgoZmlsZSkgPT4gKHsgLi4uZmlsZSwgaXNBdmF0YXI6IHRydWUgfSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpdGVtLnVwZGF0ZSgoZmlsZSkgPT4gKHsgLi4uZmlsZSwgaXNBdmF0YXI6IGZhbHNlIH0pKTtcbiAgICB9KTtcbiAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlQWxsRmlsZSgpIHtcbiAgICB0aGlzLmZpbGVMaXN0LnNldChbXSk7XG4gICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckRvd25sb2FkU2FtcGxlRmlsZShldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjb25maWc/LmNhbGxCYWNrKSB7XG4gICAgICBjb25maWcuY2FsbEJhY2soKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29uZmlnPy51cmwpIHtcbiAgICAgIGRvd25sb2FkRmlsZUJ5VXJsKGNvbmZpZy51cmwsIGNvbmZpZy50aXRsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaG93VXBsb2FkUG9wdXAoKSB7XG4gICAgdGhpcy51cGxvYWRJbnB1dFJlZigpPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgdGhpcy51cGxvYWRJbnB1dFJlZigpPy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYWNjZXB0JywgdGhpcy5hY2Nlc3NGaWxlcygpKTtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIEZVTkNUSU9OU1xuICBwdWJsaWMgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKTogSVVwbG9hZEZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tJc1ZhbGlkOiB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyksXG4gICAgICByZW1vdmVBbGw6IHRoaXMucmVtb3ZlQWxsRmlsZS5iaW5kKHRoaXMpLFxuICAgICAgdXBsb2FkaW5nOiBhc3luYyAocHJvY2VzcywgaWQpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVVwbG9hZGluZyA9IHRoaXMuZmlsZUxpc3QoKS5maW5kKChmaWxlKSA9PiBmaWxlKCkuaWQgPT09IGlkKTtcblxuICAgICAgICBpZiAoZmlsZVVwbG9hZGluZykge1xuICAgICAgICAgIGZpbGVVcGxvYWRpbmcudXBkYXRlKChmaWxlKSA9PiAoeyAuLi5maWxlLCBwZXJjZW50VXBsb2FkaW5nOiBwcm9jZXNzLnBlcmNlbnQsIGlzVXBsb2FkaW5nOiBwcm9jZXNzLnBlcmNlbnQgIT09IDEwMCB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXRNZXNzYWdlRXJyb3I6IGFzeW5jIChtZXNzYWdlLCBpZCkgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VFcnJvci5zZXQobWVzc2FnZSk7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIGNvbnN0IGZpbGVFcnJvciA9IHRoaXMuZmlsZUxpc3QoKS5maW5kKChmaWxlKSA9PiBmaWxlKCkuaWQgPT09IGlkKTtcblxuICAgICAgICAgIGlmIChmaWxlRXJyb3IpIHtcbiAgICAgICAgICAgIGZpbGVFcnJvci51cGRhdGUoKGZpbGUpID0+ICh7IC4uLmZpbGUsIGVycm9yOiBtZXNzYWdlIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyVXBsb2FkRmlsZTogdGhpcy5zaG93VXBsb2FkUG9wdXAuYmluZCh0aGlzKSxcbiAgICB9O1xuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiPlxuICA8ZGl2PlxuICAgIEBpZiAobGFiZWxDb25maWcoKTsgYXMgbGFiZWxDb25maWcpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWxcbiAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJsYWJlbENvbmZpZy5jbGFzc0luY2x1ZGVcIlxuICAgICAgICBbbGFiZWxMZWZ0XT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgICAgIFtsYWJlbExlZnRDbGFzc109XCJsYWJlbENvbmZpZy5sYWJlbExlZnRDbGFzc1wiXG4gICAgICAgIFtyZXF1aXJlZF09XCJsYWJlbENvbmZpZy5yZXF1aXJlZFwiXG4gICAgICAgIFtkZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICAgIFtsYWJlbFJpZ2h0XT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRcIlxuICAgICAgICBbbGFiZWxSaWdodENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgICBbYnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuYnV0dG9uc0xlZnRcIlxuICAgICAgICBbYnV0dG9uc1JpZ2h0XT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNSaWdodFwiXG4gICAgICAgIFtkaXNhYmxlQnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNMZWZ0IHx8IGRpc2FibGUoKSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNSaWdodCB8fCBkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgIFtoYXNUb2dnbGVdPVwibGFiZWxDb25maWcuaGFzVG9nZ2xlXCJcbiAgICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJsYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgICBbdG9nZ2xlRGlzYWJsZV09XCJsYWJlbENvbmZpZy50b2dnbGVEaXNhYmxlIHx8IGRpc2FibGUoKSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgW3BvcG92ZXJdPVwibGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImxhYmVsQ29uZmlnLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgICBbZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uIHx8IGRpc2FibGUoKSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgICAgW2NvdW50XT1cImxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbiAgICB9XG4gICAgQGlmICgoIWNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpPy5wb3NpdGlvbiB8fCBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUoKT8ucG9zaXRpb24gPT09ICd0b3AnKSAmJiBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUoKTsgYXMgY29uZmlnRG93bmxvYWRTYW1wbGVGaWxlKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgIFtjbGFzc0xhYmVsXT1cIidsaWJzLXVpLWZvbnQtaDdtJ1wiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFtYi1bOHB4XSAhcC0wJ1wiXG4gICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tYXR0YWNobWVudCBiZWZvcmU6IXRleHQtWzEycHhdJ1wiXG4gICAgICAgIFtsYWJlbF09XCJjb25maWdEb3dubG9hZFNhbXBsZUZpbGU/LnRpdGxlIHx8ICcgJ1wiXG4gICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyRG93bmxvYWRTYW1wbGVGaWxlKCRldmVudClcIiAvPlxuICAgIH1cbiAgICBAaWYgKG11bHRpcGxlKCkgfHwgIXNob3dQb3B1cFVwbG9hZFdoZW5IYXNGaWxlQW5kTW9kZVNpbmdsZSgpIHx8ICghZmlsZUxpc3QoKS5sZW5ndGggJiYgIW11bHRpcGxlKCkpKSB7XG4gICAgICA8ZGl2XG4gICAgICAgICN1cGxvYWRcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZERpcmVjdGl2ZVxuICAgICAgICBMaWJzVWlDb21wb25lbnRzSW5wdXRzVXBsb2FkRHJvcEZpbGVEaXJlY3RpdmVcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZFwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1kaXNhYmxlXT1cImRpc2FibGUoKSB8fCByZWFkb25seSgpIHx8ICghbXVsdGlwbGUoKSAmJiBmaWxlTGlzdCgpLmxlbmd0aCAmJiAhY2FuVXBsb2FkSWZIYXNFeGlzdEZpbGUoKSlcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1lcnJvcl09XCJtZXNzYWdlRXJyb3IoKVwiXG4gICAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZSgpXCJcbiAgICAgICAgW2FjY2Vzc0ZpbGVzXT1cImFjY2Vzc0ZpbGVzKClcIlxuICAgICAgICAob3V0VXBsb2FkRmlsZXMpPVwiaGFuZGxlVXBsb2FkRmlsZXMoJGV2ZW50KVwiXG4gICAgICAgIChvdXRVcGxvYWRGaWxlKT1cImhhbmRsZVVwbG9hZEZpbGVzKFskZXZlbnRdKVwiXG4gICAgICAgIChvdXREcmFnT3Zlcik9XCJoYW5kbGVyU2V0Q2xhc3NEcmFnKHRydWUpXCJcbiAgICAgICAgKG91dERyYWdMZWF2ZSk9XCJoYW5kbGVyU2V0Q2xhc3NEcmFnKGZhbHNlKVwiXG4gICAgICAgIChvdXREcm9wKT1cImhhbmRsZXJTZXRDbGFzc0RyYWcoZmFsc2UpXCJcbiAgICAgICAgKG91dERyb3BGaWxlcyk9XCJoYW5kbGVVcGxvYWRGaWxlcygkZXZlbnQpXCJcbiAgICAgICAgKG91dERyb3BGaWxlKT1cImhhbmRsZVVwbG9hZEZpbGVzKFskZXZlbnRdKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItWzE2cHhdXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWljb24gbGlicy11aS1pY29uLWZpbGUtdXBsb2FkIGJlZm9yZTohdGV4dC1bMzJweF1cIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICBAbGV0IGNvbnN0SHRtbE1lc3NhZ2UgPSBjb25maWdEZXNjcmlwdGlvbklucHV0VXBsb2FkKCkubWVzc2FnZSB8fCAnICc7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibWItWzRweF0gbGlicy11aS1mb250LWg2bVwiXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiY29uc3RIdG1sTWVzc2FnZSB8IHRyYW5zbGF0ZTogY29uZmlnRGVzY3JpcHRpb25JbnB1dFVwbG9hZCgpLmludGVycG9sYXRlUGFyYW1zXCI+PC9kaXY+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGRlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGVDb21wdXRlZCgpOyB0cmFjayBpdGVtOyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZm9udC1oN3JcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5tYi1bNHB4XV09XCIhbGFzdFwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJpdGVtLm1lc3NhZ2UgfCB0cmFuc2xhdGU6IGl0ZW0uaW50ZXJwb2xhdGVQYXJhbXNcIj48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAobXVsdGlwbGUoKSkge1xuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3VwbG9hZElucHV0XG4gICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1pbnB1dCBoaWRkZW5cIlxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgbmFtZT1cImZpbGVzW11cIlxuICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgIFthY2NlcHRdPVwiYWNjZXNzRmlsZXMoKVwiIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3VwbG9hZElucHV0XG4gICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1pbnB1dCBoaWRkZW5cIlxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgbmFtZT1cImZpbGVzW11cIlxuICAgICAgICAgICAgW2FjY2VwdF09XCJhY2Nlc3NGaWxlcygpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAobWVzc2FnZUVycm9yKCkgJiYgKG11bHRpcGxlKCkgfHwgIXNob3dQb3B1cFVwbG9hZFdoZW5IYXNGaWxlQW5kTW9kZVNpbmdsZSgpIHx8ICghZmlsZUxpc3QoKS5sZW5ndGggJiYgIW11bHRpcGxlKCkpKSkge1xuICAgICAgPGRpdiBjbGFzcz1cIm10LVs4cHhdIHRleHQtWyNlZTJkNDFdIGxpYnMtdWktZm9udC1oN3JcIj5cbiAgICAgICAgQGxldCBjb25zdEh0bWxNZXNzYWdlID0gbWVzc2FnZUVycm9yKCkgfHwgJyAnO1xuICAgICAgICB7eyBjb25zdEh0bWxNZXNzYWdlIHwgdHJhbnNsYXRlOiB7IHZhbHVlOiBsaW1pdEZpbGUoKSB9IH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChjb25maWdEb3dubG9hZFNhbXBsZUZpbGUoKT8ucG9zaXRpb24gPT09ICdib3R0b20nICYmIGNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpOyBhcyBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgW2NsYXNzTGFiZWxdPVwiJ2xpYnMtdWktZm9udC1oN20nXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIW10LVs4cHhdICFwLTAnXCJcbiAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1hdHRhY2htZW50IGJlZm9yZTohdGV4dC1bMTJweF0nXCJcbiAgICAgICAgW2xhYmVsXT1cImNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZS50aXRsZSB8fCAnICdcIlxuICAgICAgICAobW9DbGljayk9XCJoYW5kbGVyRG93bmxvYWRTYW1wbGVGaWxlKCRldmVudClcIiAvPlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZiAoZmlsZUxpc3QoKS5sZW5ndGgpIHtcbiAgICA8ZGl2XG4gICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHB4LVsxMHB4XSBsaWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC12aWV3LWxpc3Qge3sgY2xhc3NJbmNsdWRlRmlsZUNvbnRlbnQoKSB8fCAnJyB9fVwiXG4gICAgICBbY2xhc3MubXQtWzEycHhdXT1cIm11bHRpcGxlKCkgfHwgIXNob3dQb3B1cFVwbG9hZFdoZW5IYXNGaWxlQW5kTW9kZVNpbmdsZSgpXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGFiZWwtZmlsZV1cIj48L25nLWNvbnRlbnQ+XG4gICAgICBAZm9yIChpdGVtIG9mIGZpbGVMaXN0KCk7IHRyYWNrIGl0ZW0oKTsgbGV0IGZpcnN0ID0gJGZpcnN0KSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLXZpZXctbGlzdC1pdGVtIHt7IGNsYXNzSW5jbHVkZUxpc3RJdGVtKCkgfHwgJycgfX1cIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1maWxlLWZ1bGxdPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdmdWxsJ1wiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWZpbGUtc2hvcnRdPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdzaG9ydCdcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1lcnJvci1nZW5lcmFsXT1cIml0ZW0oKS5lcnJvciB8fCAobWVzc2FnZUVycm9yKCkgJiYgc2hvd0JvcmRlckVycm9yQWxsSXRlbVdoZW5FcnJvcigpKVwiXG4gICAgICAgICAgW2NsYXNzLm10LTBdPVwiZmlyc3QgJiYgIW11bHRpcGxlKCkgJiYgIXNob3dQb3B1cFVwbG9hZFdoZW5IYXNGaWxlQW5kTW9kZVNpbmdsZSgpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgQGlmIChjYW5TZXRBdmF0YXIoKSAmJiBpdGVtKCkudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiXG4gICAgICAgICAgICAgICAgICAgICchbXItMCcgKyAoaXRlbSgpLmlzQXZhdGFyID8gJyBsaWJzLXVpLWljb24tY2hlY2stY2lyY2xlLXNvbGlkIGJlZm9yZTohdGV4dC1bIzAwYmM2Ml0nIDogJyBsaWJzLXVpLWljb24tY2hlY2stY2lyY2xlLW91dGxpbmUnKSArIChkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKSB8fCBpdGVtKCkuaXNVcGxvYWRpbmcgfHwgISFpdGVtKCkuZXJyb3IgPyAnIGxpYnMtdWktZGlzYWJsZScgOiAnJylcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJ7IGNvbmZpZzogeyBjb250ZW50OiBpdGVtKCkuaXNBdmF0YXIgPyAnaTE4bl9hdmF0YXInIDogJ2kxOG5fY2hvb3NlX2FzX3lvdXJfYXZhdGFyJywgekluZGV4OiB6SW5kZXgoKSB9IH1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIW1yLVsxMnB4XSAhcC0wJ1wiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKSB8fCBpdGVtKCkuaXNVcGxvYWRpbmcgfHwgISFpdGVtKCkuZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTZXRBdmF0YXIoJGV2ZW50LCBpdGVtKVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXhcIlxuICAgICAgICAgICAgICBbY2xhc3Mudy1bY2FsYygxMDAlLTI4cHgpXV09XCJjYW5TZXRBdmF0YXIoKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy53LWZ1bGxdPVwiIWNhblNldEF2YXRhcigpXCI+XG4gICAgICAgICAgICAgIEBpZiAobW9kZURpc3BsYXlGaWxlKCkgPT09ICdmdWxsJykge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1hdmF0YXJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY2xhc3NJbmNsdWRlQXZhdGFyKClcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgWyhpdGVtKV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93VmlkZW9EdXJhdGlvbl09XCJzaG93VmlkZW9EdXJhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRPcGVuUHJldmlldyk9XCJoYW5kbGVyT3BlblByZXZpZXdGaWxlKCRldmVudClcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCBmbGV4LWNvbFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZmxleC1jb2xdPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdmdWxsJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuanVzdGlmeS1jZW50ZXJdPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdmdWxsJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXRlbXMtY2VudGVyXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnc2hvcnQnXCI+XG4gICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCB3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxMZWZ0XT1cIml0ZW0oKS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3pJbmRleFBvcG92ZXJdPVwiekluZGV4KCkgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsTGVmdENsYXNzXT1cIidsaWJzLXVpLWZvbnQtaDZtICcgKyAoZGlzYWJsZSgpIHx8IHJlYWRvbmx5KCkgfHwgaXRlbSgpLmlzVXBsb2FkaW5nIHx8IGl0ZW0oKS5lcnJvciA/ICd0ZXh0LVsjNmE3MzgzXScgOiAndGV4dC1bIzA3MTYzMV0nKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdzaG9ydCcgPyAnIW1iLTAnIDogJydcIiAvPlxuXG4gICAgICAgICAgICAgICAgICBAaWYgKCFpZ25vcmVTaG93U2l6ZUZpbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LVsjOWNhMmFkXSBsaWJzLXVpLWZvbnQtaDdyIHNocmluay0wXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmxleF09XCJtb2RlRGlzcGxheUZpbGUoKSA9PT0gJ2Z1bGwnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXRlbXMtY2VudGVyXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnc2hvcnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubWwtWzEycHhdXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnc2hvcnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgaXRlbSgpLnNpemUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBAaWYgKGl0ZW0oKS5pc1VwbG9hZGluZyAmJiBpdGVtKCkucGVyY2VudFVwbG9hZGluZykge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbWwtWzE2cHhdXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5tci1bMjZweF1dPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdmdWxsJ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctWzEyMHB4XSBoLVs0cHhdIHJvdW5kZWQtWzRweF0gYmctWyNmOGY5ZmFdIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHRvcC0wIGxlZnQtMCBoLVs0cHhdIHJvdW5kZWQtWzRweF0gYmctWyMwMGJjNjJdXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiKGl0ZW0oKS5wZXJjZW50VXBsb2FkaW5nID8/IDApICogMS4yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtbC1bMTZweF1cIj5cbiAgICAgICAgICAgIEBpZiAoIWlnbm9yZUljb25QcmV2aWV3KCkpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tZXllLW91dGxpbmUgIW1yLTAnXCJcbiAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJ7IGNvbmZpZzogeyBjb250ZW50OiAnaTE4bl9wcmV2aWV3JywgekluZGV4OiB6SW5kZXgoKSArIDEgfSB9XCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcC0wJyArIChpZ25vcmVJY29uUmVtb3ZlKCkgJiYgIWlnbm9yZUljb25FZGl0KCkgPyAnJyA6ICcgIW1yLVsxMnB4XScpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJpdGVtKCkuaXNVcGxvYWRpbmcgfHwgZGlzYWJsZSgpIHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyT3BlblByZXZpZXdGaWxlKGl0ZW0oKSlcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChpdGVtKCkudHlwZSA9PT0gJ2ltYWdlJyAmJiAhaXRlbSgpLmVycm9yICYmICFpZ25vcmVJY29uRWRpdCgpKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWVkaXQtbGluZSAhbXItMCdcIlxuICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cInsgY29uZmlnOiB7IGNvbnRlbnQ6ICdpMThuX2VkaXQnLCB6SW5kZXg6IHpJbmRleCgpICsgMSB9IH1cIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnICsgKGlnbm9yZUljb25SZW1vdmUoKSA/ICcnIDogJyAhbXItWzEycHhdJylcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cIml0ZW0oKS5pc1VwbG9hZGluZyB8fCBkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJFZGl0SW1hZ2UoJGV2ZW50LCBpdGVtKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCFpZ25vcmVJY29uUmVtb3ZlKCkpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tY2xvc2UgIW1yLTAnXCJcbiAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJ7IGNvbmZpZzogeyBjb250ZW50OiAnaTE4bl9kZWxldGUnLCB6SW5kZXg6IHpJbmRleCgpICsgMSB9IH1cIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJpdGVtKCkuaXNVcGxvYWRpbmcgfHwgZGlzYWJsZSgpIHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyUmVtb3ZlRmlsZSgkZXZlbnQsIGl0ZW0pXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoaXRlbSgpLmVycm9yICYmIChtdWx0aXBsZSgpIHx8IHNob3dQb3B1cFVwbG9hZFdoZW5IYXNGaWxlQW5kTW9kZVNpbmdsZSgpKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC1bOHB4XSB0ZXh0LVsjZWUyZDQxXSBsaWJzLXVpLWZvbnQtaDdyXCI+XG4gICAgICAgICAgICBAbGV0IGNvbnN0SHRtbE1lc3NhZ2UgPSBpdGVtKCkuZXJyb3IgfHwgJyAnO1xuICAgICAgICAgICAge3sgY29uc3RIdG1sTWVzc2FnZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19
443
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvY29tcG9uZW50cy9pbnB1dHMvdXBsb2FkL3NyYy91cGxvYWQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2lucHV0cy91cGxvYWQvc3JjL3VwbG9hZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBZ0IsUUFBUSxFQUFFLE1BQU0sRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQWtCLE1BQU0sZUFBZSxDQUFDO0FBQ3ROLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzVGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3JGLE9BQU8sRUFBYSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ25HLE9BQU8sRUFBVSw4QkFBOEIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxzQ0FBc0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRTVGLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMzRSxPQUFPLEVBQ0wsWUFBWSxFQUNaLGlCQUFpQixFQUNqQiw2QkFBNkIsRUFDN0IsZUFBZSxFQUNmLGlCQUFpQixFQUNqQix5QkFBeUIsRUFDekIsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixZQUFZLEVBQ1oscUJBQXFCLEVBQ3JCLHdCQUF3QixF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LElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUM1RCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1NBQ25ELENBQUM7SUFDSixDQUFDO0lBQ0QsYUFBYTtJQUViLFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzt3R0FwZFUscUNBQXFDOzRGQUFyQyxxQ0FBcUMsa2lOQ3REbEQsOGlYQStOQSwwL0hEbkxJLGVBQWUsNEZBQ2Ysc0NBQXNDLHNqQkFDdEMsOEJBQThCLDRxQkFDOUIsMkNBQTJDLHlNQUMzQyxzQ0FBc0MsNlNBQ3RDLHFDQUFxQyx1S0FDckMsNkNBQTZDOzs0RkFJcEMscUNBQXFDO2tCQWpCakQsU0FBUzsrQkFFRSxrQ0FBa0MsY0FHaEMsSUFBSSxXQUNQO3dCQUNQLGVBQWU7d0JBQ2Ysc0NBQXNDO3dCQUN0Qyw4QkFBOEI7d0JBQzlCLDJDQUEyQzt3QkFDM0Msc0NBQXNDO3dCQUN0QyxxQ0FBcUM7d0JBQ3JDLDZDQUE2QztxQkFDOUMsbUJBQ2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb21wb25lbnRSZWYsIGNvbXB1dGVkLCBlZmZlY3QsIEVsZW1lbnRSZWYsIGluamVjdCwgaW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBvdXRwdXQsIHNpZ25hbCwgdW50cmFja2VkLCB2aWV3Q2hpbGQsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaWJzVWlDb21wb25lbnRzQnV0dG9uc0J1dHRvbkNvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtYnV0dG9ucy1idXR0b24nO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWdhbGxlcnknO1xuaW1wb3J0IHsgSVNhdmVGaWxlLCBMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JDb21wb25lbnQgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLWltYWdlLWVkaXRvcic7XG5pbXBvcnQgeyBJTGFiZWwsIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCB9IGZyb20gJ0BsaWJzLXVpL2NvbXBvbmVudHMtbGFiZWwnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1ByZXZpZXdGaWxlQ29tcG9uZW50IH0gZnJvbSAnQGxpYnMtdWkvY29tcG9uZW50cy1wcmV2aWV3LWZpbGUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c1Njcm9sbE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICdAbGlicy11aS9jb21wb25lbnRzLXNjcm9sbC1vdmVybGF5JztcbmltcG9ydCB7IElBc3BlY3RSYXRpbywgSUZpbGUsIElJc1ZhbGlkUmVxdWlyZWQsIElNZXNzYWdlVHJhbnNsYXRlIH0gZnJvbSAnQGxpYnMtdWkvaW50ZXJmYWNlcy10eXBlcyc7XG5pbXBvcnQgeyBMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSwgc2V0SW5wdXRzIH0gZnJvbSAnQGxpYnMtdWkvc2VydmljZXMtZHluYW1pYy1jb21wb25lbnQnO1xuaW1wb3J0IHsgTGlic1VpTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJ0BsaWJzLXVpL3NlcnZpY2VzLW5vdGlmaWNhdGlvbic7XG5pbXBvcnQge1xuICBBdWRpb0V4dExpc3QsXG4gIGNvbnZlcnRCbG9iVG9GaWxlLFxuICBjb252ZXJ0RmlsZVRvQmFzZTY0X09iamVjdFVybCxcbiAgRG9jdW1lbnRFeHRMaXN0LFxuICBkb3dubG9hZEZpbGVCeVVybCxcbiAgRVJST1JfTUVTU0FHRV9FTVBUWV9WQUxJRCxcbiAgZ2V0RmlsZUV4dGVuc2lvbixcbiAgZ2V0TGFiZWxCeVNpemVGaWxlLFxuICBJbWFnZUV4dExpc3QsXG4gIGlzSW5jbHVkZUF1ZGlvRXh0TGlzdCxcbiAgaXNJbmNsdWRlRG9jdW1lbnRFeHRMaXN0LFxuICBpc0luY2x1ZGVJbWFnZUV4dExpc3QsXG4gIGlzSW5jbHVkZVZpZGVvRXh0TGlzdCxcbiAgaXNUeXBlQXVkaW8sXG4gIGlzVHlwZUltYWdlLFxuICBpc1R5cGVWaWRlbyxcbiAgdXVpZCxcbiAgVmlkZW9FeHRMaXN0LFxufSBmcm9tICdAbGlicy11aS91dGlscyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbnB1dHNVcGxvYWRBdmF0YXJDb21wb25lbnQgfSBmcm9tICcuL2F2YXRhci9hdmF0YXIuY29tcG9uZW50JztcbmltcG9ydCB7IGdldERlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGVEZWZhdWx0IH0gZnJvbSAnLi9kZWZpbmVzL2hlbHBlci5kZWZpbmUnO1xuaW1wb3J0IHsgSVVwbG9hZENvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSwgSVVwbG9hZERlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGUsIElVcGxvYWRGdW5jdGlvbkNvbnRyb2xFdmVudCwgVFlQRV9GSUxFX1VQTE9BRCwgVFlQRV9NT0RFX0ZJTEVfRElTUExBWSB9IGZyb20gJy4vaW50ZXJmYWNlcy91cGxvYWQuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpYnNVaUNvbXBvbmVudHNJbnB1dHNVcGxvYWREcm9wRmlsZURpcmVjdGl2ZSB9IGZyb20gJy4vdXBsb2FkLWRyb3AtZmlsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZERpcmVjdGl2ZSB9IGZyb20gJy4vdXBsb2FkLWZpbGUuZGlyZWN0aXZlJztcbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ2xpYnNfdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3VwbG9hZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3VwbG9hZC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIExpYnNVaUNvbXBvbmVudHNCdXR0b25zQnV0dG9uQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNMYWJlbENvbXBvbmVudCxcbiAgICBMaWJzVWlDb21wb25lbnRzSW5wdXRzVXBsb2FkQXZhdGFyQ29tcG9uZW50LFxuICAgIExpYnNVaUNvbXBvbmVudHNTY3JvbGxPdmVybGF5RGlyZWN0aXZlLFxuICAgIExpYnNVaUNvbXBvbmVudHNJbnB1dHNVcGxvYWREaXJlY3RpdmUsXG4gICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZERyb3BGaWxlRGlyZWN0aXZlLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gI3JlZ2lvbiBQUk9QRVJUSUVTXG4gIHByaXZhdGUgaW1hZ2VFZGl0b3JDb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c0ltYWdlRWRpdG9yQ29tcG9uZW50PjtcbiAgcHJpdmF0ZSBwcmV2aWV3RmlsZUNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxMaWJzVWlDb21wb25lbnRzUHJldmlld0ZpbGVDb21wb25lbnQ+O1xuICBwcml2YXRlIHByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWY/OiBDb21wb25lbnRSZWY8TGlic1VpQ29tcG9uZW50c0dhbGxlcnlWaWV3ZXJDb21wb25lbnQ+O1xuICBwcm90ZWN0ZWQgaXNEcmFnT3ZlciA9IHNpZ25hbChmYWxzZSk7XG4gIHByb3RlY3RlZCBmaWxlTGlzdCA9IHNpZ25hbDxBcnJheTxXcml0YWJsZVNpZ25hbDxJRmlsZT4+PihbXSk7XG4gIHByb3RlY3RlZCBhY2Nlc3NGaWxlcyA9IHNpZ25hbDxzdHJpbmc+KCcnKTtcbiAgcHJvdGVjdGVkIG1lc3NhZ2VFcnJvciA9IHNpZ25hbDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIHByb3RlY3RlZCBkZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlQ29tcHV0ZWQgPSBjb21wdXRlZDxBcnJheTxJVXBsb2FkRGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZT4+KCgpID0+IHtcbiAgICBpZiAodGhpcy5kZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlKCk/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZSgpIGFzIHVua25vd24gYXMgQXJyYXk8SVVwbG9hZERlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGU+O1xuICAgIH1cbiAgICByZXR1cm4gZ2V0RGVzY3JpcHRpb25Gb3JtYXRBbmRTaXplRmlsZURlZmF1bHQodGhpcy5maWxlVHlwZSgpLCB0aGlzLm1heEltYWdlU2l6ZSgpLCB0aGlzLm1heFZpZGVvU2l6ZSgpLCB0aGlzLm1heERvY3VtZW50U2l6ZSgpLCB0aGlzLm1heEF1ZGlvU2l6ZSgpKTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSBvbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBJTlBVVFNcbiAgcmVhZG9ubHkgb3JpZ2luRmlsZXMgPSBpbnB1dDxBcnJheTxXcml0YWJsZVNpZ25hbDxJRmlsZT4+LCBBcnJheTxXcml0YWJsZVNpZ25hbDxJRmlsZT4+IHwgdW5kZWZpbmVkPihbXSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBbXSB9KTtcbiAgcmVhZG9ubHkgZmlsZVR5cGUgPSBpbnB1dDxUWVBFX0ZJTEVfVVBMT0FELCBUWVBFX0ZJTEVfVVBMT0FEIHwgdW5kZWZpbmVkPignaW1hZ2VfdmlkZW9fZG9jdW1lbnQnLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/ICdpbWFnZV92aWRlb19kb2N1bWVudCcgfSk7XG4gIHJlYWRvbmx5IG11bHRpcGxlID0gaW5wdXQ8Ym9vbGVhbj4oKTtcbiAgcmVhZG9ubHkgY2FuVXBsb2FkSWZIYXNFeGlzdEZpbGUgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgY2FuU2V0QXZhdGFyID0gaW5wdXQ8Ym9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UpO1xuICByZWFkb25seSBsaW1pdEZpbGUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gMTAgfSk7XG4gIHJlYWRvbmx5IG1heFRvdGFsU2l6ZSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPigxMCAqIDEwMjQgKiAxMDI0LCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IDEwICogMTAyNCAqIDEwMjQgfSk7XG4gIHJlYWRvbmx5IG1heEltYWdlU2l6ZSA9IGlucHV0PG51bWJlciwgbnVtYmVyIHwgdW5kZWZpbmVkPig1ICogMTAyNCAqIDEwMjQsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gNSAqIDEwMjQgKiAxMDI0IH0pO1xuICByZWFkb25seSBtYXhWaWRlb1NpemUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAgKiAxMDI0ICogMTAyNCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAxMCAqIDEwMjQgKiAxMDI0IH0pO1xuICByZWFkb25seSBtYXhEb2N1bWVudFNpemUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAgKiAxMDI0ICogMTAyNCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAxMCAqIDEwMjQgKiAxMDI0IH0pO1xuICByZWFkb25seSBtYXhBdWRpb1NpemUgPSBpbnB1dDxudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZD4oMTAgKiAxMDI0ICogMTAyNCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyAxMCAqIDEwMjQgKiAxMDI0IH0pO1xuICByZWFkb25seSBpbWFnZUV4dExpc3QgPSBpbnB1dDxzdHJpbmdbXSwgc3RyaW5nW10gfCB1bmRlZmluZWQ+KEltYWdlRXh0TGlzdCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBJbWFnZUV4dExpc3QgfSk7XG4gIHJlYWRvbmx5IHZpZGVvRXh0TGlzdCA9IGlucHV0PHN0cmluZ1tdLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4oVmlkZW9FeHRMaXN0LCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IFZpZGVvRXh0TGlzdCB9KTtcbiAgcmVhZG9ubHkgZG9jdW1lbnRFeHRMaXN0ID0gaW5wdXQ8c3RyaW5nW10sIHN0cmluZ1tdIHwgdW5kZWZpbmVkPihEb2N1bWVudEV4dExpc3QsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gRG9jdW1lbnRFeHRMaXN0IH0pO1xuICByZWFkb25seSBhdWRpb0V4dExpc3QgPSBpbnB1dDxzdHJpbmdbXSwgc3RyaW5nW10gfCB1bmRlZmluZWQ+KEF1ZGlvRXh0TGlzdCwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBBdWRpb0V4dExpc3QgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZUxpc3RJdGVtID0gaW5wdXQ8c3RyaW5nPigpO1xuICByZWFkb25seSB2YWxpZFJlcXVpcmVkID0gaW5wdXQ8SUlzVmFsaWRSZXF1aXJlZD4oKTtcbiAgcmVhZG9ubHkgZGlzYWJsZSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSByZWFkb25seSA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBhc3BlY3RSYXRpbyA9IGlucHV0PElBc3BlY3RSYXRpbz4oKTtcbiAgcmVhZG9ubHkgekluZGV4ID0gaW5wdXQ8bnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWQ+KDEyMDAsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gMTIwMCB9KTtcbiAgcmVhZG9ubHkgaWdub3JlU2hvd1NpemVGaWxlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGFsbG93U2hvd1B1c2hNZXNzYWdlTWF4U2l6ZUVycm9yID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IG1lc3NhZ2VUeXBlRmlsZUVycm9yID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCdpMThuX3RoZV9maWxlX3N1cHBvcnRfZm9ybWF0X2lzX25vdF9jb3JyZWN0JywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCB8fCAnaTE4bl90aGVfZmlsZV9zdXBwb3J0X2Zvcm1hdF9pc19ub3RfY29ycmVjdCcgfSk7XG4gIHJlYWRvbmx5IG1lc3NhZ2VNYXhTaXplRXJyb3IgPSBpbnB1dDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4oJ2kxOG5fZmlsZV9zaXplX2V4Y2VlZHNfdGhlX2FsbG93ZWRfbGltaXQnLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsIHx8ICdpMThuX2ZpbGVfc2l6ZV9leGNlZWRzX3RoZV9hbGxvd2VkX2xpbWl0JyB9KTtcbiAgcmVhZG9ubHkgbWVzc2FnZUZpbGVVcGxvYWRFcnJvciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9pbnZhbGlkX2ZpbGVfdXBsb2FkJywgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCB8fCAnaTE4bl9pbnZhbGlkX2ZpbGVfdXBsb2FkJyB9KTtcbiAgcmVhZG9ubHkgbWVzc2FnZVRvdGFsRmlsZUV4Y2VlZHNFcnJvciA9IGlucHV0PHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPignaTE4bl9maWxlX251bWJlcl9leGNlZWRzX3RoZV9hbGxvd2VkX2xpbWl0X3BsZWFzZV9kZWxldGVfdGhlX2ZpbGUnLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsIHx8ICdpMThuX2ZpbGVfbnVtYmVyX2V4Y2VlZHNfdGhlX2FsbG93ZWRfbGltaXRfcGxlYXNlX2RlbGV0ZV90aGVfZmlsZScgfSk7XG4gIHJlYWRvbmx5IGNvbmZpZ0Rlc2NyaXB0aW9uSW5wdXRVcGxvYWQgPSBpbnB1dDxJTWVzc2FnZVRyYW5zbGF0ZSwgSU1lc3NhZ2VUcmFuc2xhdGUgfCB1bmRlZmluZWQ+KFxuICAgIHsgbWVzc2FnZTogJ2kxOG5fZHJhZ19maWxlX2hlcmVfdG9fdXBsb2FkX29yX3NlbGVjdF9maWxlJyB9LFxuICAgIHtcbiAgICAgIHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IHsgbWVzc2FnZTogJ2kxOG5fZHJhZ19maWxlX2hlcmVfdG9fdXBsb2FkX29yX3NlbGVjdF9maWxlJyB9LFxuICAgIH1cbiAgKTtcblxuICByZWFkb25seSBtb2RlRGlzcGxheUZpbGUgPSBpbnB1dDxUWVBFX01PREVfRklMRV9ESVNQTEFZLCBUWVBFX01PREVfRklMRV9ESVNQTEFZIHwgdW5kZWZpbmVkPignZnVsbCcsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgfHwgJ2Z1bGwnIH0pO1xuICByZWFkb25seSBkZXNjcmlwdGlvbkZvcm1hdEFuZFNpemVGaWxlID0gaW5wdXQ8QXJyYXk8SVVwbG9hZERlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGU+PigpO1xuICByZWFkb25seSBzaG93VmlkZW9EdXJhdGlvbiA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBsYWJlbENvbmZpZyA9IGlucHV0PElMYWJlbD4oKTtcbiAgcmVhZG9ubHkgc2hvd1BvcHVwVXBsb2FkV2hlbkhhc0ZpbGVBbmRNb2RlU2luZ2xlID0gaW5wdXQ8Ym9vbGVhbiwgYm9vbGVhbiB8IHVuZGVmaW5lZD4oZmFsc2UsIHsgdHJhbnNmb3JtOiAodmFsKSA9PiB2YWwgPz8gZmFsc2UgfSk7XG4gIHJlYWRvbmx5IGlnbm9yZUljb25SZW1vdmUgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlSWNvbkVkaXQgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPihmYWxzZSwgeyB0cmFuc2Zvcm06ICh2YWwpID0+IHZhbCA/PyBmYWxzZSB9KTtcbiAgcmVhZG9ubHkgaWdub3JlSWNvblByZXZpZXcgPSBpbnB1dDxib29sZWFuLCBib29sZWFuIHwgdW5kZWZpbmVkPih0cnVlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IHRydWUgfSk7XG4gIHJlYWRvbmx5IGNsYXNzSW5jbHVkZUZpbGVDb250ZW50ID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgY2xhc3NJbmNsdWRlQXZhdGFyID0gaW5wdXQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+KCcnLCB7IHRyYW5zZm9ybTogKHZhbHVlKSA9PiB2YWx1ZSA/PyAnJyB9KTtcbiAgcmVhZG9ubHkgc2hvd0JvcmRlckVycm9yQWxsSXRlbVdoZW5FcnJvciA9IGlucHV0PGJvb2xlYW4sIGJvb2xlYW4gfCB1bmRlZmluZWQ+KGZhbHNlLCB7IHRyYW5zZm9ybTogKHZhbCkgPT4gdmFsID8/IGZhbHNlIH0pO1xuICByZWFkb25seSBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUgPSBpbnB1dDxJVXBsb2FkQ29uZmlnRG93bmxvYWRTYW1wbGVGaWxlPigpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgLy8gI3JlZ2lvbiBPVVRQVVRTXG4gIHJlYWRvbmx5IG91dENsb3NlID0gb3V0cHV0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IG91dEZpbGVDaGFuZ2VkID0gb3V0cHV0PEFycmF5PFdyaXRhYmxlU2lnbmFsPElGaWxlPj4+KCk7XG4gIHJlYWRvbmx5IG91dEZpbGVSZW1vdmVkID0gb3V0cHV0PFdyaXRhYmxlU2lnbmFsPElGaWxlPj4oKTtcbiAgcmVhZG9ubHkgb3V0RnVuY3Rpb25zQ29udHJvbCA9IG91dHB1dDxJVXBsb2FkRnVuY3Rpb25Db250cm9sRXZlbnQ+KCk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIFZJRVcgQ0hJTERSRU5cbiAgcmVhZG9ubHkgdXBsb2FkUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWY+KCd1cGxvYWQnKTtcbiAgcmVhZG9ubHkgdXBsb2FkSW5wdXRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ3VwbG9hZElucHV0Jyk7XG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIElOSkVDVElPTlNcbiAgcHJpdmF0ZSBkeW5hbWljQ29tcG9uZW50U2VydmljZSA9IGluamVjdChMaWJzVWlEeW5hbWljQ29tcG9uZW50U2VydmljZSk7XG4gIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlID0gaW5qZWN0KExpYnNVaU5vdGlmaWNhdGlvblNlcnZpY2UpO1xuICAvLyAjZW5kcmVnaW9uXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLm9yaWdpbkZpbGVzKCkpIHtcbiAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmZpbGVMaXN0LnNldChbLi4udGhpcy5vcmlnaW5GaWxlcygpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gI3JlZ2lvbiBMSUZFQ1lDTEUgSE9PS1NcbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vdXRGdW5jdGlvbnNDb250cm9sLmVtaXQodGhpcy5GdW5jdGlvbnNDb250cm9sKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaW5pdEFjY2Vzc0ZpbGVzKCk7XG4gICAgfSwgMCk7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gSU5JVElBTElaQVRJT05cbiAgcHJvdGVjdGVkIGFzeW5jIGluaXRBY2Nlc3NGaWxlcygpIHtcbiAgICBjb25zdCBhY2Nlc3NFeHRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IHR5cGVTcGxpdCA9IHRoaXMuZmlsZVR5cGUoKS5zcGxpdCgnXycpO1xuXG4gICAgaWYgKHR5cGVTcGxpdC5pbmNsdWRlcygnaW1hZ2UnKSkge1xuICAgICAgYWNjZXNzRXh0cy5wdXNoKC4uLnRoaXMuaW1hZ2VFeHRMaXN0KCkpO1xuICAgIH1cbiAgICBpZiAodHlwZVNwbGl0LmluY2x1ZGVzKCdkb2N1bWVudCcpKSB7XG4gICAgICBhY2Nlc3NFeHRzLnB1c2goLi4udGhpcy5kb2N1bWVudEV4dExpc3QoKSk7XG4gICAgfVxuICAgIGlmICh0eXBlU3BsaXQuaW5jbHVkZXMoJ3ZpZGVvJykpIHtcbiAgICAgIGFjY2Vzc0V4dHMucHVzaCguLi50aGlzLnZpZGVvRXh0TGlzdCgpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVTcGxpdC5pbmNsdWRlcygnYXVkaW8nKSkge1xuICAgICAgYWNjZXNzRXh0cy5wdXNoKC4uLnRoaXMuYXVkaW9FeHRMaXN0KCkpO1xuICAgIH1cbiAgICB0aGlzLmFjY2Vzc0ZpbGVzLnNldChhY2Nlc3NFeHRzLm1hcCgoZXh0KSA9PiBgLiR7ZXh0fWApLmpvaW4oJywnKSk7XG4gIH1cbiAgLy8gI2VuZHJlZ2lvblxuXG4gIC8vICNyZWdpb24gRklMRSBPUEVSQVRJT05TXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyU2V0Q2xhc3NEcmFnKHRvb2dsZTogYm9vbGVhbikge1xuICAgIHRoaXMudXBsb2FkUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZSgnbGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtZHJhZy1vdmVyJywgdG9vZ2xlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVVcGxvYWRGaWxlcyhmaWxlczogQXJyYXk8RmlsZT4pIHtcbiAgICBpZiAodGhpcy5tYXhUb3RhbFNpemUoKSkge1xuICAgICAgbGV0IHRvdGFsID0gMDtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0b3RhbCArPSBmaWxlc1tpXS5zaXplO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tYXhUb3RhbFNpemUoKSA8IHRvdGFsKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zaG93Q29tcFR5cGVUZXh0RXJyb3IodGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoJ2kxOG5fc2l6ZV9ub3RfbnVtYmVyX21iJywgeyBudW1iZXI6IHRoaXMubWF4VG90YWxTaXplKCkgLyAxMDI0IC8gMTAyNCB9KSwgeyB0aW1lUmVtb3ZlOiAzMDAwIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgZXJyb3JFeGNlZWRzTWF4RmlsZSA9IGZhbHNlO1xuICAgIGlmICghZmlsZXMgfHwgIWZpbGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMubXVsdGlwbGUoKSAmJiB0aGlzLmZpbGVMaXN0KCkubGVuZ3RoICYmICF0aGlzLmNhblVwbG9hZElmSGFzRXhpc3RGaWxlKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByZW1haW5GaWxlVG90YWwgPSB0aGlzLmxpbWl0RmlsZSgpIC0gdGhpcy5maWxlTGlzdCgpLmxlbmd0aDtcbiAgICBpZiAoZmlsZXMubGVuZ3RoID4gcmVtYWluRmlsZVRvdGFsKSB7XG4gICAgICBlcnJvckV4Y2VlZHNNYXhGaWxlID0gdHJ1ZTtcbiAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh0aGlzLm1lc3NhZ2VUb3RhbEZpbGVFeGNlZWRzRXJyb3IoKSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBmaWxlc1tpXTtcbiAgICAgIGNvbnN0IGlzSW1hZ2UgPSBpc1R5cGVJbWFnZShmaWxlKTtcbiAgICAgIGNvbnN0IGlzVmlkZW8gPSBpc1R5cGVWaWRlbyhmaWxlKTtcbiAgICAgIGNvbnN0IGlzQXVkaW8gPSBpc1R5cGVBdWRpbyhmaWxlKTtcbiAgICAgIGNvbnN0IG5ld0ZpbGU6IElGaWxlID0ge1xuICAgICAgICBuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgIGZpbGU6IGZpbGUsXG4gICAgICAgIHNpemU6IGdldExhYmVsQnlTaXplRmlsZShmaWxlLnNpemUpLFxuICAgICAgICB0eXBlOiBpc0ltYWdlID8gJ2ltYWdlJyA6IGlzVmlkZW8gPyAndmlkZW8nIDogaXNBdWRpbyA/ICdhdWRpbycgOiAnZG9jdW1lbnQnLFxuICAgICAgICBpZDogdXVpZCgpLFxuICAgICAgfTtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuY2hlY2tWYWxpZEZpbGVFeHRlbnNpb24oZmlsZSkpKSB7XG4gICAgICAgIGlmICghZXJyb3JFeGNlZWRzTWF4RmlsZSkge1xuICAgICAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh0aGlzLm11bHRpcGxlKCkgPyB0aGlzLm1lc3NhZ2VGaWxlVXBsb2FkRXJyb3IoKSA6IHRoaXMubWVzc2FnZVR5cGVGaWxlRXJyb3IoKSk7XG4gICAgICAgIH1cbiAgICAgICAgbmV3RmlsZS5lcnJvciA9IHRoaXMubWVzc2FnZVR5cGVGaWxlRXJyb3IoKTtcbiAgICAgICAgYXdhaXQgdGhpcy5wdXNoRmlsZUluTGlzdChmaWxlLCBuZXdGaWxlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmNoZWNrVmFsaWRGaWxlU2l6ZShmaWxlKSkpIHtcbiAgICAgICAgaWYgKCFlcnJvckV4Y2VlZHNNYXhGaWxlKSB7XG4gICAgICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHRoaXMubXVsdGlwbGUoKSA/IHRoaXMubWVzc2FnZUZpbGVVcGxvYWRFcnJvcigpIDogdGhpcy5tZXNzYWdlTWF4U2l6ZUVycm9yKCkpO1xuICAgICAgICB9XG4gICAgICAgIG5ld0ZpbGUuZXJyb3IgPSB0aGlzLm1lc3NhZ2VNYXhTaXplRXJyb3IoKTtcbiAgICAgICAgaWYgKCF0aGlzLm11bHRpcGxlKCkgJiYgdGhpcy5hbGxvd1Nob3dQdXNoTWVzc2FnZU1heFNpemVFcnJvcigpKSB7XG4gICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnNob3dDb21wVHlwZVRleHRFcnJvcih0aGlzLm1lc3NhZ2VNYXhTaXplRXJyb3IoKSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgdGhpcy5wdXNoRmlsZUluTGlzdChmaWxlLCBuZXdGaWxlKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnB1c2hGaWxlSW5MaXN0KGZpbGUsIG5ld0ZpbGUpO1xuICAgIH1cbiAgICBpZiAodGhpcy5jYW5TZXRBdmF0YXIoKSAmJiB0aGlzLmZpbGVMaXN0KCkubGVuZ3RoICYmICF0aGlzLmZpbGVMaXN0KCkuZmluZCgoZmlsZSkgPT4gZmlsZSgpLmlzQXZhdGFyKSkge1xuICAgICAgdGhpcy5maWxlTGlzdC51cGRhdGUoKGZpbGVMaXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1JbWFnZSA9IGZpbGVMaXN0LmZpbmQoKGZpbGUpID0+IGZpbGUoKS50eXBlID09PSAnaW1hZ2UnKTtcbiAgICAgICAgaWYgKGl0ZW1JbWFnZSkge1xuICAgICAgICAgIGl0ZW1JbWFnZS51cGRhdGUoKGZpbGUpID0+ICh7IC4uLmZpbGUsIGlzQXZhdGFyOiB0cnVlIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLmZpbGVMaXN0XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgICB0aGlzLnZhbGlkYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHB1c2hGaWxlSW5MaXN0KGZpbGU6IEZpbGUsIG5ld0ZpbGU6IElGaWxlKSB7XG4gICAgbmV3RmlsZS51cmwgPSAoYXdhaXQgY29udmVydEZpbGVUb0Jhc2U2NF9PYmplY3RVcmwoZmlsZSkpIGFzIHN0cmluZztcblxuICAgIHRoaXMuZmlsZUxpc3QudXBkYXRlKChmaWxlTGlzdCkgPT4ge1xuICAgICAgZmlsZUxpc3Quc3BsaWNlKDAsIHRoaXMuY2FuVXBsb2FkSWZIYXNFeGlzdEZpbGUoKSA/IDEgOiAwLCBzaWduYWwobmV3RmlsZSkpO1xuICAgICAgcmV0dXJuIFsuLi5maWxlTGlzdF07XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlck9wZW5QcmV2aWV3RmlsZShpdGVtOiBJRmlsZSkge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdkb2N1bWVudCcpIHtcbiAgICAgIHRoaXMucHJldmlld0ZpbGVEb2N1bWVudChpdGVtKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcmV2aWV3RmlsZUltYWdlKGl0ZW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBwcmV2aWV3RmlsZURvY3VtZW50KGl0ZW06IElGaWxlKSB7XG4gICAgaWYgKHRoaXMucHJldmlld0ZpbGVDb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcmV2aWV3RmlsZUNvbXBvbmVudFJlZiA9IHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoTGlic1VpQ29tcG9uZW50c1ByZXZpZXdGaWxlQ29tcG9uZW50KTtcbiAgICBzZXRJbnB1dHModGhpcy5wcmV2aWV3RmlsZUNvbXBvbmVudFJlZiwgeyBpbmRleDogMCwgZGF0YTogW2l0ZW1dLCB6SW5kZXg6IHRoaXMuekluZGV4KCkgKyAxIH0pO1xuICAgIHRoaXMucHJldmlld0ZpbGVDb21wb25lbnRSZWYuaW5zdGFuY2Uub3V0Q2xvc2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMucHJldmlld0ZpbGVDb21wb25lbnRSZWYpO1xuICAgICAgdGhpcy5wcmV2aWV3RmlsZUNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICB0aGlzLmR5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmFkZFRvQm9keSh0aGlzLnByZXZpZXdGaWxlQ29tcG9uZW50UmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJldmlld0ZpbGVJbWFnZShpdGVtOiBJRmlsZSkge1xuICAgIGlmICh0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMaWJzVWlDb21wb25lbnRzR2FsbGVyeVZpZXdlckNvbXBvbmVudCk7XG4gICAgY29uc3QgdXJsID0gaXRlbS51cmwgfHwgaXRlbS5vcmlnaW5fdXJsO1xuICAgIHRoaXMucHJldmlld0ZpbGVJbWFnZUNvbXBvbmVudFJlZi5zZXRJbnB1dCgnaW1hZ2VzJywgW3sgdXJsIH1dKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYuc2V0SW5wdXQoJ2ltYWdlU2VsZWN0ZWQnLCB7IHVybCB9KTtcbiAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYuc2V0SW5wdXQoJ2ZpZWxkRGlzcGxheVNyY0ltYWdlJywgJ3VybCcpO1xuICAgIHRoaXMucHJldmlld0ZpbGVJbWFnZUNvbXBvbmVudFJlZi5zZXRJbnB1dCgnc2luZ2xlSW1hZ2UnLCB0cnVlKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYuc2V0SW5wdXQoJ3pJbmRleCcsIHRoaXMuekluZGV4KCkgKyAxKTtcbiAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYuaW5zdGFuY2Uub3V0Q2xvc2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMucHJldmlld0ZpbGVJbWFnZUNvbXBvbmVudFJlZik7XG4gICAgICB0aGlzLnByZXZpZXdGaWxlSW1hZ2VDb21wb25lbnRSZWYgPSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5wcmV2aWV3RmlsZUltYWdlQ29tcG9uZW50UmVmKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBoYW5kbGVyRWRpdEltYWdlKGV2ZW50OiBFdmVudCwgaXRlbTogV3JpdGFibGVTaWduYWw8SUZpbGU+KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5zaG93RWRpdE1vZGFsKGl0ZW0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGhhbmRsZXJSZW1vdmVGaWxlKGV2ZW50OiBFdmVudCwgaXRlbTogV3JpdGFibGVTaWduYWw8SUZpbGU+KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5yZW1vdmVGaWxlKGl0ZW0pO1xuICAgIGlmICh0aGlzLm9yaWdpbkZpbGVzKCkuZmluZCgoZmlsZSkgPT4gZmlsZSgpLnVybCA9PT0gaXRlbSgpLnVybCkpIHtcbiAgICAgIHRoaXMub3V0RmlsZVJlbW92ZWQuZW1pdChpdGVtKTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZSgpO1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSgpICYmIHRoaXMuc2hvd1BvcHVwVXBsb2FkV2hlbkhhc0ZpbGVBbmRNb2RlU2luZ2xlKCkpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnNob3dVcGxvYWRQb3B1cCgpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlbW92ZUZpbGUoZmlsZUl0ZW06IFdyaXRhYmxlU2lnbmFsPElGaWxlPikge1xuICAgIHRoaXMuZmlsZUxpc3QudXBkYXRlKChmaWxlTGlzdCkgPT4gZmlsZUxpc3QuZmlsdGVyKChpdGVtKSA9PiBpdGVtKCkuaWQgIT09IGZpbGVJdGVtKCkuaWQpKTtcbiAgICBpZiAodGhpcy5jYW5TZXRBdmF0YXIoKSAmJiBmaWxlSXRlbSgpLmlzQXZhdGFyICYmIHRoaXMuZmlsZUxpc3QoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZmlsZUxpc3QudXBkYXRlKChmaWxlTGlzdCkgPT4ge1xuICAgICAgICBmaWxlTGlzdFswXS51cGRhdGUoKGZpbGUpID0+ICh7IC4uLmZpbGUsIGlzQXZhdGFyOiB0cnVlIH0pKTtcblxuICAgICAgICByZXR1cm4gWy4uLmZpbGVMaXN0XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBzaG93RWRpdE1vZGFsKGZpbGVJdGVtOiBXcml0YWJsZVNpZ25hbDxJRmlsZT4pIHtcbiAgICBpZiAodGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBmaWxlRGF0YVVybCA9IGZpbGVJdGVtKCkudXJsIHx8IGZpbGVJdGVtKCkub3JpZ2luX3VybCB8fCAnJztcbiAgICB0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmID0gdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShMaWJzVWlDb21wb25lbnRzSW1hZ2VFZGl0b3JDb21wb25lbnQpO1xuXG4gICAgdGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZi5zZXRJbnB1dCgnaW1nU3JjJywgZmlsZURhdGFVcmwpO1xuICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWYuc2V0SW5wdXQoJ3pJbmRleCcsIHRoaXMuekluZGV4KCkgKyAxKTtcbiAgICB0aGlzLmltYWdlRWRpdG9yQ29tcG9uZW50UmVmLnNldElucHV0KCduYW1lRmlsZScsIGZpbGVJdGVtKCkubmFtZSk7XG4gICAgdGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZi5zZXRJbnB1dCgnYXNwZWN0UmF0aW8nLCB0aGlzLmFzcGVjdFJhdGlvKCkpO1xuICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWYuaW5zdGFuY2Uub3V0Q2xvc2Uuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuZHluYW1pY0NvbXBvbmVudFNlcnZpY2UucmVtb3ZlKHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWYpO1xuICAgICAgdGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZiA9IHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWYuaW5zdGFuY2Uub3V0U2F2ZUZpbGUuc3Vic2NyaWJlKGFzeW5jIChyZXN1bHQ6IElTYXZlRmlsZSkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZUVycm9yID0gIShhd2FpdCB0aGlzLmNoZWNrVmFsaWRGaWxlU2l6ZShyZXN1bHQuZmlsZSkpID8gdGhpcy5tZXNzYWdlTWF4U2l6ZUVycm9yKCkgOiB1bmRlZmluZWQ7XG4gICAgICBjb25zdCBuYW1lRmlsZSA9IGZpbGVJdGVtKCkuZmlsZT8ubmFtZSB8fCBmaWxlSXRlbSgpLm5hbWU7XG4gICAgICBmaWxlSXRlbS51cGRhdGUoKGRhdGEpID0+ICh7IC4uLmRhdGEsIGZpbGU6IGNvbnZlcnRCbG9iVG9GaWxlKHJlc3VsdC5maWxlLCBuYW1lRmlsZSksIG5hbWU6IG5hbWVGaWxlLCBvcmlnaW5fdXJsOiB1bmRlZmluZWQsIHNpemU6IGdldExhYmVsQnlTaXplRmlsZShyZXN1bHQuZmlsZS5zaXplKSwgZXJyb3I6IG1lc3NhZ2VFcnJvciwgdXJsOiByZXN1bHQudXJsLCBpc1VwZGF0ZTogdHJ1ZSB9KSk7XG4gICAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgICAgIHRoaXMuaW1hZ2VFZGl0b3JDb21wb25lbnRSZWY/Lmluc3RhbmNlLm91dENsb3NlLmVtaXQoeyBpc0NsaWNrQnV0dG9uQ2xvc2U6IHRydWUgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5keW5hbWljQ29tcG9uZW50U2VydmljZS5hZGRUb0JvZHkodGhpcy5pbWFnZUVkaXRvckNvbXBvbmVudFJlZik7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgY2hlY2tWYWxpZEZpbGVFeHRlbnNpb24oZmlsZTogRmlsZSkge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGdldEZpbGVFeHRlbnNpb24oZmlsZSk7XG5cbiAgICBpZiAoIWV4dGVuc2lvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBpc0ltYWdlID0gaXNUeXBlSW1hZ2UoZmlsZSk7XG4gICAgY29uc3QgaXNWaWRlbyA9IGlzVHlwZVZpZGVvKGZpbGUpO1xuICAgIGNvbnN0IGlzQXVkaW8gPSBpc1R5cGVBdWRpbyhmaWxlKTtcbiAgICBjb25zdCB2YWxpZEltYWdlID0gaXNJbmNsdWRlSW1hZ2VFeHRMaXN0KGV4dGVuc2lvbiwgdGhpcy5pbWFnZUV4dExpc3QoKSk7XG4gICAgY29uc3QgdmFsaWRWaWRlbyA9IGlzSW5jbHVkZVZpZGVvRXh0TGlzdChleHRlbnNpb24sIHRoaXMudmlkZW9FeHRMaXN0KCkpO1xuICAgIGNvbnN0IHZhbGlkQXVkaW8gPSBpc0luY2x1ZGVBdWRpb0V4dExpc3QoZXh0ZW5zaW9uLCB0aGlzLmF1ZGlvRXh0TGlzdCgpKTtcbiAgICBjb25zdCB2YWxpZERvY3VtZW50ID0gaXNJbmNsdWRlRG9jdW1lbnRFeHRMaXN0KGV4dGVuc2lvbiwgdGhpcy5kb2N1bWVudEV4dExpc3QoKSk7XG5cbiAgICBjb25zdCB0eXBlU3BsaXQgPSB0aGlzLmZpbGVUeXBlKCkuc3BsaXQoJ18nKTtcblxuICAgIGlmIChpc0ltYWdlICYmIHR5cGVTcGxpdC5pbmNsdWRlcygnaW1hZ2UnKSkge1xuICAgICAgcmV0dXJuIHZhbGlkSW1hZ2U7XG4gICAgfVxuICAgIGlmIChpc1ZpZGVvICYmIHR5cGVTcGxpdC5pbmNsdWRlcygndmlkZW8nKSkge1xuICAgICAgcmV0dXJuIHZhbGlkVmlkZW87XG4gICAgfVxuICAgIGlmIChpc0F1ZGlvICYmIHR5cGVTcGxpdC5pbmNsdWRlcygnYXVkaW8nKSkge1xuICAgICAgcmV0dXJuIHZhbGlkQXVkaW87XG4gICAgfVxuICAgIGlmICh0eXBlU3BsaXQuaW5jbHVkZXMoJ2RvY3VtZW50JykpIHtcbiAgICAgIHJldHVybiB2YWxpZERvY3VtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBjaGVja1ZhbGlkRmlsZVNpemUoZmlsZTogRmlsZSB8IEJsb2IpIHtcbiAgICBjb25zdCBpc0ltYWdlID0gaXNUeXBlSW1hZ2UoZmlsZSk7XG4gICAgY29uc3QgaXNWaWRlbyA9IGlzVHlwZVZpZGVvKGZpbGUpO1xuICAgIGNvbnN0IGlzQXVkaW8gPSBpc1R5cGVBdWRpbyhmaWxlKTtcbiAgICBjb25zdCB2YWxpZEltYWdlID0gZmlsZS5zaXplIDw9IHRoaXMubWF4SW1hZ2VTaXplKCk7XG4gICAgY29uc3QgdmFsaWRWaWRlbyA9IGZpbGUuc2l6ZSA8PSB0aGlzLm1heFZpZGVvU2l6ZSgpO1xuICAgIGNvbnN0IHZhbGlkQXVkaW8gPSBmaWxlLnNpemUgPD0gdGhpcy5tYXhBdWRpb1NpemUoKTtcbiAgICBjb25zdCB2YWxpZERvY3VtZW50ID0gZmlsZS5zaXplIDw9IHRoaXMubWF4RG9jdW1lbnRTaXplKCk7XG5cbiAgICBjb25zdCB0eXBlU3BsaXQgPSB0aGlzLmZpbGVUeXBlKCkuc3BsaXQoJ18nKTtcblxuICAgIGlmIChpc0ltYWdlICYmIHR5cGVTcGxpdC5pbmNsdWRlcygnaW1hZ2UnKSkge1xuICAgICAgcmV0dXJuIHZhbGlkSW1hZ2U7XG4gICAgfVxuICAgIGlmIChpc1ZpZGVvICYmIHR5cGVTcGxpdC5pbmNsdWRlcygndmlkZW8nKSkge1xuICAgICAgcmV0dXJuIHZhbGlkVmlkZW87XG4gICAgfVxuICAgIGlmIChpc0F1ZGlvICYmIHR5cGVTcGxpdC5pbmNsdWRlcygnYXVkaW8nKSkge1xuICAgICAgcmV0dXJuIHZhbGlkQXVkaW87XG4gICAgfVxuICAgIGlmICh0eXBlU3BsaXQuaW5jbHVkZXMoJ2RvY3VtZW50JykpIHtcbiAgICAgIHJldHVybiB2YWxpZERvY3VtZW50O1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyB2YWxpZGF0ZSgpIHtcbiAgICBpZiAodGhpcy52YWxpZFJlcXVpcmVkKCk/LmlzUmVxdWlyZWQgJiYgIXRoaXMuZmlsZUxpc3QoKS5sZW5ndGgpIHtcbiAgICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh0aGlzLnZhbGlkUmVxdWlyZWQoKT8ubWVzc2FnZSB8fCBFUlJPUl9NRVNTQUdFX0VNUFRZX1ZBTElEKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5tdWx0aXBsZSgpICYmIHRoaXMuZmlsZUxpc3QoKS5sZW5ndGggPiB0aGlzLmxpbWl0RmlsZSgpKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VFcnJvci5zZXQodGhpcy5tZXNzYWdlVG90YWxGaWxlRXhjZWVkc0Vycm9yKCkpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGZpbGVFcnJvciA9IHRoaXMuZmlsZUxpc3QoKS5maW5kKChpdGVtKSA9PiBpdGVtKCkuZXJyb3IpO1xuXG4gICAgaWYgKGZpbGVFcnJvcikge1xuICAgICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHRoaXMubXVsdGlwbGUoKSA/IHRoaXMubWVzc2FnZUZpbGVVcGxvYWRFcnJvcigpIDogZmlsZUVycm9yKCkuZXJyb3IpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMubWVzc2FnZUVycm9yLnNldCh1bmRlZmluZWQpO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlclNldEF2YXRhcihldmVudDogRXZlbnQsIGZpbGU6IFdyaXRhYmxlU2lnbmFsPElGaWxlPikge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5maWxlTGlzdCgpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGlmIChpdGVtKCkuaWQgPT09IGZpbGUoKS5pZCkge1xuICAgICAgICBpdGVtLnVwZGF0ZSgoZmlsZSkgPT4gKHsgLi4uZmlsZSwgaXNBdmF0YXI6IHRydWUgfSkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpdGVtLnVwZGF0ZSgoZmlsZSkgPT4gKHsgLi4uZmlsZSwgaXNBdmF0YXI6IGZhbHNlIH0pKTtcbiAgICB9KTtcbiAgICB0aGlzLm91dEZpbGVDaGFuZ2VkLmVtaXQodGhpcy5maWxlTGlzdCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVtb3ZlQWxsRmlsZSgpIHtcbiAgICB0aGlzLmZpbGVMaXN0LnNldChbXSk7XG4gICAgdGhpcy5tZXNzYWdlRXJyb3Iuc2V0KHVuZGVmaW5lZCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgaGFuZGxlckRvd25sb2FkU2FtcGxlRmlsZShldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpO1xuICAgIGlmICghY29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjb25maWc/LmNhbGxCYWNrKSB7XG4gICAgICBjb25maWcuY2FsbEJhY2soKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29uZmlnPy51cmwpIHtcbiAgICAgIGRvd25sb2FkRmlsZUJ5VXJsKGNvbmZpZy51cmwsIGNvbmZpZy50aXRsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaG93VXBsb2FkUG9wdXAoKSB7XG4gICAgdGhpcy51cGxvYWRJbnB1dFJlZigpPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgdGhpcy51cGxvYWRJbnB1dFJlZigpPy5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYWNjZXB0JywgdGhpcy5hY2Nlc3NGaWxlcygpKTtcbiAgfVxuXG4gIC8vICNlbmRyZWdpb25cblxuICAvLyAjcmVnaW9uIEZVTkNUSU9OU1xuICBwdWJsaWMgZ2V0IEZ1bmN0aW9uc0NvbnRyb2woKTogSVVwbG9hZEZ1bmN0aW9uQ29udHJvbEV2ZW50IHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tJc1ZhbGlkOiB0aGlzLnZhbGlkYXRlLmJpbmQodGhpcyksXG4gICAgICByZW1vdmVBbGw6IHRoaXMucmVtb3ZlQWxsRmlsZS5iaW5kKHRoaXMpLFxuICAgICAgdXBsb2FkaW5nOiBhc3luYyAocHJvY2VzcywgaWQpID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVVwbG9hZGluZyA9IHRoaXMuZmlsZUxpc3QoKS5maW5kKChmaWxlKSA9PiBmaWxlKCkuaWQgPT09IGlkKTtcblxuICAgICAgICBpZiAoZmlsZVVwbG9hZGluZykge1xuICAgICAgICAgIGZpbGVVcGxvYWRpbmcudXBkYXRlKChmaWxlKSA9PiAoeyAuLi5maWxlLCBwZXJjZW50VXBsb2FkaW5nOiBwcm9jZXNzLnBlcmNlbnQsIGlzVXBsb2FkaW5nOiBwcm9jZXNzLnBlcmNlbnQgIT09IDEwMCB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBzZXRNZXNzYWdlRXJyb3I6IGFzeW5jIChtZXNzYWdlLCBpZCkgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VFcnJvci5zZXQobWVzc2FnZSk7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgIGNvbnN0IGZpbGVFcnJvciA9IHRoaXMuZmlsZUxpc3QoKS5maW5kKChmaWxlKSA9PiBmaWxlKCkuaWQgPT09IGlkKTtcblxuICAgICAgICAgIGlmIChmaWxlRXJyb3IpIHtcbiAgICAgICAgICAgIGZpbGVFcnJvci51cGRhdGUoKGZpbGUpID0+ICh7IC4uLmZpbGUsIGVycm9yOiBtZXNzYWdlIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBoYW5kbGVyVXBsb2FkRmlsZTogdGhpcy5zaG93VXBsb2FkUG9wdXAuYmluZCh0aGlzKSxcbiAgICB9O1xuICB9XG4gIC8vICNlbmRyZWdpb25cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm9uRGVzdHJveS5uZXh0KCk7XG4gICAgdGhpcy5vbkRlc3Ryb3kuY29tcGxldGUoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgdy1mdWxsIGgtZnVsbFwiPlxuICA8ZGl2PlxuICAgIEBpZiAobGFiZWxDb25maWcoKTsgYXMgbGFiZWxDb25maWcpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtbGFiZWxcbiAgICAgICAgW2NsYXNzSW5jbHVkZV09XCJsYWJlbENvbmZpZy5jbGFzc0luY2x1ZGVcIlxuICAgICAgICBbbGFiZWxMZWZ0XT1cImxhYmVsQ29uZmlnLmxhYmVsTGVmdFwiXG4gICAgICAgIFtsYWJlbExlZnRDbGFzc109XCJsYWJlbENvbmZpZy5sYWJlbExlZnRDbGFzc1wiXG4gICAgICAgIFtyZXF1aXJlZF09XCJsYWJlbENvbmZpZy5yZXF1aXJlZFwiXG4gICAgICAgIFtkZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5kZXNjcmlwdGlvblwiXG4gICAgICAgIFtsYWJlbFJpZ2h0XT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRcIlxuICAgICAgICBbbGFiZWxSaWdodENsYXNzXT1cImxhYmVsQ29uZmlnLmxhYmVsUmlnaHRDbGFzc1wiXG4gICAgICAgIFtvbmx5U2hvd0NvdW50XT1cImxhYmVsQ29uZmlnLm9ubHlTaG93Q291bnRcIlxuICAgICAgICBbYnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuYnV0dG9uc0xlZnRcIlxuICAgICAgICBbYnV0dG9uc1JpZ2h0XT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNSaWdodFwiXG4gICAgICAgIFtkaXNhYmxlQnV0dG9uc0xlZnRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNMZWZ0IHx8IGRpc2FibGUoKSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgW2Rpc2FibGVCdXR0b25zUmlnaHRdPVwibGFiZWxDb25maWcuZGlzYWJsZUJ1dHRvbnNSaWdodCB8fCBkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgIFtoYXNUb2dnbGVdPVwibGFiZWxDb25maWcuaGFzVG9nZ2xlXCJcbiAgICAgICAgW3RvZ2dsZUFjdGl2ZV09XCJsYWJlbENvbmZpZy50b2dnbGVBY3RpdmVcIlxuICAgICAgICBbdG9nZ2xlRGlzYWJsZV09XCJsYWJlbENvbmZpZy50b2dnbGVEaXNhYmxlIHx8IGRpc2FibGUoKSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgW3BvcG92ZXJdPVwibGFiZWxDb25maWcucG9wb3ZlclwiXG4gICAgICAgIFtpY29uUG9wb3ZlckNsYXNzXT1cImxhYmVsQ29uZmlnLmljb25Qb3BvdmVyQ2xhc3NcIlxuICAgICAgICBbb25seVNob3dDb3VudF09XCJsYWJlbENvbmZpZy5vbmx5U2hvd0NvdW50XCJcbiAgICAgICAgW2xpbWl0TGVuZ3RoXT1cImxhYmVsQ29uZmlnLmxpbWl0TGVuZ3RoXCJcbiAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5idXR0b25zRGVzY3JpcHRpb25cIlxuICAgICAgICBbZGlzYWJsZUJ1dHRvbnNEZXNjcmlwdGlvbl09XCJsYWJlbENvbmZpZy5kaXNhYmxlQnV0dG9uc0Rlc2NyaXB0aW9uIHx8IGRpc2FibGUoKSB8fCByZWFkb25seSgpXCJcbiAgICAgICAgW2J1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXT1cImxhYmVsQ29uZmlnLmJ1dHRvbnNEZXNjcmlwdGlvbkNvbnRhaW5lckNsYXNzXCJcbiAgICAgICAgW2NvdW50XT1cImxhYmVsQ29uZmlnLmNvdW50XCIgLz5cbiAgICB9XG4gICAgQGlmICgoIWNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpPy5wb3NpdGlvbiB8fCBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUoKT8ucG9zaXRpb24gPT09ICd0b3AnKSAmJiBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUoKTsgYXMgY29uZmlnRG93bmxvYWRTYW1wbGVGaWxlKSB7XG4gICAgICA8bGlic191aS1jb21wb25lbnRzLWJ1dHRvbnMtYnV0dG9uXG4gICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay1wcmltYXJ5J1wiXG4gICAgICAgIFtjbGFzc0xhYmVsXT1cIidsaWJzLXVpLWZvbnQtaDdtJ1wiXG4gICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFtYi1bOHB4XSAhcC0wJ1wiXG4gICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tYXR0YWNobWVudCBiZWZvcmU6IXRleHQtWzEycHhdJ1wiXG4gICAgICAgIFtsYWJlbF09XCJjb25maWdEb3dubG9hZFNhbXBsZUZpbGU/LnRpdGxlIHx8ICcgJ1wiXG4gICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyRG93bmxvYWRTYW1wbGVGaWxlKCRldmVudClcIiAvPlxuICAgIH1cbiAgICBAaWYgKG11bHRpcGxlKCkgfHwgIXNob3dQb3B1cFVwbG9hZFdoZW5IYXNGaWxlQW5kTW9kZVNpbmdsZSgpIHx8ICghZmlsZUxpc3QoKS5sZW5ndGggJiYgIW11bHRpcGxlKCkpKSB7XG4gICAgICA8ZGl2XG4gICAgICAgICN1cGxvYWRcbiAgICAgICAgTGlic1VpQ29tcG9uZW50c0lucHV0c1VwbG9hZERpcmVjdGl2ZVxuICAgICAgICBMaWJzVWlDb21wb25lbnRzSW5wdXRzVXBsb2FkRHJvcEZpbGVEaXJlY3RpdmVcbiAgICAgICAgY2xhc3M9XCJsaWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZFwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1kaXNhYmxlXT1cImRpc2FibGUoKSB8fCByZWFkb25seSgpIHx8ICghbXVsdGlwbGUoKSAmJiBmaWxlTGlzdCgpLmxlbmd0aCAmJiAhY2FuVXBsb2FkSWZIYXNFeGlzdEZpbGUoKSlcIlxuICAgICAgICBbY2xhc3MubGlicy11aS1jb21wb25lbnRzLWlucHV0cy11cGxvYWQtcmVhZG9ubHldPVwicmVhZG9ubHkoKVwiXG4gICAgICAgIFtjbGFzcy5saWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1lcnJvcl09XCJtZXNzYWdlRXJyb3IoKVwiXG4gICAgICAgIFttdWx0aXBsZV09XCJtdWx0aXBsZSgpXCJcbiAgICAgICAgW2FjY2Vzc0ZpbGVzXT1cImFjY2Vzc0ZpbGVzKClcIlxuICAgICAgICAob3V0VXBsb2FkRmlsZXMpPVwiaGFuZGxlVXBsb2FkRmlsZXMoJGV2ZW50KVwiXG4gICAgICAgIChvdXRVcGxvYWRGaWxlKT1cImhhbmRsZVVwbG9hZEZpbGVzKFskZXZlbnRdKVwiXG4gICAgICAgIChvdXREcmFnT3Zlcik9XCJoYW5kbGVyU2V0Q2xhc3NEcmFnKHRydWUpXCJcbiAgICAgICAgKG91dERyYWdMZWF2ZSk9XCJoYW5kbGVyU2V0Q2xhc3NEcmFnKGZhbHNlKVwiXG4gICAgICAgIChvdXREcm9wKT1cImhhbmRsZXJTZXRDbGFzc0RyYWcoZmFsc2UpXCJcbiAgICAgICAgKG91dERyb3BGaWxlcyk9XCJoYW5kbGVVcGxvYWRGaWxlcygkZXZlbnQpXCJcbiAgICAgICAgKG91dERyb3BGaWxlKT1cImhhbmRsZVVwbG9hZEZpbGVzKFskZXZlbnRdKVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibXItWzE2cHhdXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWljb24gbGlicy11aS1pY29uLWZpbGUtdXBsb2FkIGJlZm9yZTohdGV4dC1bMzJweF1cIj48L2k+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWRlc2NyaXB0aW9uXCI+XG4gICAgICAgICAgICBAbGV0IGNvbnN0SHRtbE1lc3NhZ2UgPSBjb25maWdEZXNjcmlwdGlvbklucHV0VXBsb2FkKCkubWVzc2FnZSB8fCAnICc7XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibWItWzRweF0gbGlicy11aS1mb250LWg2bVwiXG4gICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiY29uc3RIdG1sTWVzc2FnZSB8IHRyYW5zbGF0ZTogY29uZmlnRGVzY3JpcHRpb25JbnB1dFVwbG9hZCgpLmludGVycG9sYXRlUGFyYW1zXCI+PC9kaXY+XG4gICAgICAgICAgICBAZm9yIChpdGVtIG9mIGRlc2NyaXB0aW9uRm9ybWF0QW5kU2l6ZUZpbGVDb21wdXRlZCgpOyB0cmFjayBpdGVtOyBsZXQgbGFzdCA9ICRsYXN0KSB7XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cImxpYnMtdWktZm9udC1oN3JcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5tYi1bNHB4XV09XCIhbGFzdFwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJpdGVtLm1lc3NhZ2UgfCB0cmFuc2xhdGU6IGl0ZW0uaW50ZXJwb2xhdGVQYXJhbXNcIj48L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAobXVsdGlwbGUoKSkge1xuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3VwbG9hZElucHV0XG4gICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1pbnB1dCBoaWRkZW5cIlxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgbmFtZT1cImZpbGVzW11cIlxuICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgIFthY2NlcHRdPVwiYWNjZXNzRmlsZXMoKVwiIC8+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI3VwbG9hZElucHV0XG4gICAgICAgICAgICBjbGFzcz1cInVwbG9hZC1pbnB1dCBoaWRkZW5cIlxuICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgbmFtZT1cImZpbGVzW11cIlxuICAgICAgICAgICAgW2FjY2VwdF09XCJhY2Nlc3NGaWxlcygpXCIgLz5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgfVxuICAgIEBpZiAobWVzc2FnZUVycm9yKCkgJiYgKG11bHRpcGxlKCkgfHwgIXNob3dQb3B1cFVwbG9hZFdoZW5IYXNGaWxlQW5kTW9kZVNpbmdsZSgpIHx8ICghZmlsZUxpc3QoKS5sZW5ndGggJiYgIW11bHRpcGxlKCkpKSkge1xuICAgICAgPGRpdiBjbGFzcz1cIm10LVs4cHhdIHRleHQtWyNlZTJkNDFdIGxpYnMtdWktZm9udC1oN3JcIj5cbiAgICAgICAgQGxldCBjb25zdEh0bWxNZXNzYWdlID0gbWVzc2FnZUVycm9yKCkgfHwgJyAnO1xuICAgICAgICB7eyBjb25zdEh0bWxNZXNzYWdlIHwgdHJhbnNsYXRlOiB7IHZhbHVlOiBsaW1pdEZpbGUoKSB9IH19XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gICAgQGlmIChjb25maWdEb3dubG9hZFNhbXBsZUZpbGUoKT8ucG9zaXRpb24gPT09ICdib3R0b20nICYmIGNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZSgpOyBhcyBjb25maWdEb3dubG9hZFNhbXBsZUZpbGUpIHtcbiAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgW3R5cGVdPVwiJ2J1dHRvbi1saW5rLXByaW1hcnknXCJcbiAgICAgICAgW2NsYXNzTGFiZWxdPVwiJ2xpYnMtdWktZm9udC1oN20nXCJcbiAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIW10LVs4cHhdICFwLTAnXCJcbiAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiJ2xpYnMtdWktaWNvbi1hdHRhY2htZW50IGJlZm9yZTohdGV4dC1bMTJweF0nXCJcbiAgICAgICAgW2xhYmVsXT1cImNvbmZpZ0Rvd25sb2FkU2FtcGxlRmlsZS50aXRsZSB8fCAnICdcIlxuICAgICAgICAobW9DbGljayk9XCJoYW5kbGVyRG93bmxvYWRTYW1wbGVGaWxlKCRldmVudClcIiAvPlxuICAgIH1cbiAgPC9kaXY+XG4gIEBpZiAoZmlsZUxpc3QoKS5sZW5ndGgpIHtcbiAgICA8ZGl2XG4gICAgICBMaWJzVWlDb21wb25lbnRzU2Nyb2xsT3ZlcmxheURpcmVjdGl2ZVxuICAgICAgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGwgaC1mdWxsIHB4LVsxMHB4XSBsaWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC12aWV3LWxpc3Qge3sgY2xhc3NJbmNsdWRlRmlsZUNvbnRlbnQoKSB8fCAnJyB9fVwiXG4gICAgICBbY2xhc3MubXQtWzEycHhdXT1cIm11bHRpcGxlKCkgfHwgIXNob3dQb3B1cFVwbG9hZFdoZW5IYXNGaWxlQW5kTW9kZVNpbmdsZSgpXCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbbGFiZWwtZmlsZV1cIj48L25nLWNvbnRlbnQ+XG4gICAgICBAZm9yIChpdGVtIG9mIGZpbGVMaXN0KCk7IHRyYWNrIGl0ZW0oKTsgbGV0IGZpcnN0ID0gJGZpcnN0KSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImxpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLXZpZXctbGlzdC1pdGVtIHt7IGNsYXNzSW5jbHVkZUxpc3RJdGVtKCkgfHwgJycgfX1cIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1maWxlLWZ1bGxdPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdmdWxsJ1wiXG4gICAgICAgICAgW2NsYXNzLmxpYnMtdWktY29tcG9uZW50cy1pbnB1dHMtdXBsb2FkLWZpbGUtc2hvcnRdPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdzaG9ydCdcIlxuICAgICAgICAgIFtjbGFzcy5saWJzLXVpLWJvcmRlci1lcnJvci1nZW5lcmFsXT1cIml0ZW0oKS5lcnJvciB8fCAobWVzc2FnZUVycm9yKCkgJiYgc2hvd0JvcmRlckVycm9yQWxsSXRlbVdoZW5FcnJvcigpKVwiXG4gICAgICAgICAgW2NsYXNzLm10LTBdPVwiZmlyc3QgJiYgIW11bHRpcGxlKCkgJiYgIXNob3dQb3B1cFVwbG9hZFdoZW5IYXNGaWxlQW5kTW9kZVNpbmdsZSgpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgQGlmIChjYW5TZXRBdmF0YXIoKSAmJiBpdGVtKCkudHlwZSA9PT0gJ2ltYWdlJykge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSWNvbkxlZnRdPVwiXG4gICAgICAgICAgICAgICAgICAgICchbXItMCcgKyAoaXRlbSgpLmlzQXZhdGFyID8gJyBsaWJzLXVpLWljb24tY2hlY2stY2lyY2xlLXNvbGlkIGJlZm9yZTohdGV4dC1bIzAwYmM2Ml0nIDogJyBsaWJzLXVpLWljb24tY2hlY2stY2lyY2xlLW91dGxpbmUnKSArIChkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKSB8fCBpdGVtKCkuaXNVcGxvYWRpbmcgfHwgISFpdGVtKCkuZXJyb3IgPyAnIGxpYnMtdWktZGlzYWJsZScgOiAnJylcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJ7IGNvbmZpZzogeyBjb250ZW50OiBpdGVtKCkuaXNBdmF0YXIgPyAnaTE4bl9hdmF0YXInIDogJ2kxOG5fY2hvb3NlX2FzX3lvdXJfYXZhdGFyJywgekluZGV4OiB6SW5kZXgoKSB9IH1cIlxuICAgICAgICAgICAgICAgICAgW2NsYXNzSW5jbHVkZV09XCInIW1yLVsxMnB4XSAhcC0wJ1wiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKSB8fCBpdGVtKCkuaXNVcGxvYWRpbmcgfHwgISFpdGVtKCkuZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJTZXRBdmF0YXIoJGV2ZW50LCBpdGVtKVwiIC8+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXhcIlxuICAgICAgICAgICAgICBbY2xhc3Mudy1bY2FsYygxMDAlLTI4cHgpXV09XCJjYW5TZXRBdmF0YXIoKVwiXG4gICAgICAgICAgICAgIFtjbGFzcy53LWZ1bGxdPVwiIWNhblNldEF2YXRhcigpXCI+XG4gICAgICAgICAgICAgIEBpZiAobW9kZURpc3BsYXlGaWxlKCkgPT09ICdmdWxsJykge1xuICAgICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtaW5wdXRzLXVwbG9hZC1hdmF0YXJcbiAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiY2xhc3NJbmNsdWRlQXZhdGFyKClcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVdPVwiZGlzYWJsZSgpIHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgICAgWyhpdGVtKV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgIFtzaG93VmlkZW9EdXJhdGlvbl09XCJzaG93VmlkZW9EdXJhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgIChvdXRPcGVuUHJldmlldyk9XCJoYW5kbGVyT3BlblByZXZpZXdGaWxlKCRldmVudClcIiAvPlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSB3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggYWJzb2x1dGUgdy1mdWxsIGgtZnVsbCBmbGV4LWNvbFwiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZmxleC1jb2xdPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdmdWxsJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuanVzdGlmeS1jZW50ZXJdPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdmdWxsJ1wiXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuaXRlbXMtY2VudGVyXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnc2hvcnQnXCI+XG4gICAgICAgICAgICAgICAgICA8bGlic191aS1jb21wb25lbnRzLWxhYmVsXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCB3LWZ1bGxcIlxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxMZWZ0XT1cIml0ZW0oKS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3pJbmRleFBvcG92ZXJdPVwiekluZGV4KCkgKyAxXCJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsTGVmdENsYXNzXT1cIidsaWJzLXVpLWZvbnQtaDZtICcgKyAoZGlzYWJsZSgpIHx8IHJlYWRvbmx5KCkgfHwgaXRlbSgpLmlzVXBsb2FkaW5nIHx8IGl0ZW0oKS5lcnJvciA/ICd0ZXh0LVsjNmE3MzgzXScgOiAndGV4dC1bIzA3MTYzMV0nKVwiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdzaG9ydCcgPyAnIW1iLTAnIDogJydcIiAvPlxuXG4gICAgICAgICAgICAgICAgICBAaWYgKCFpZ25vcmVTaG93U2l6ZUZpbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LVsjOWNhMmFkXSBsaWJzLXVpLWZvbnQtaDdyIHNocmluay0wXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmxleF09XCJtb2RlRGlzcGxheUZpbGUoKSA9PT0gJ2Z1bGwnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXRlbXMtY2VudGVyXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnc2hvcnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MubWwtWzEycHhdXT1cIm1vZGVEaXNwbGF5RmlsZSgpID09PSAnc2hvcnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgaXRlbSgpLnNpemUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBAaWYgKGl0ZW0oKS5pc1VwbG9hZGluZyAmJiBpdGVtKCkucGVyY2VudFVwbG9hZGluZykge1xuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgbWwtWzE2cHhdXCJcbiAgICAgICAgICAgICAgICAgIFtjbGFzcy5tci1bMjZweF1dPVwibW9kZURpc3BsYXlGaWxlKCkgPT09ICdmdWxsJ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctWzEyMHB4XSBoLVs0cHhdIHJvdW5kZWQtWzRweF0gYmctWyNmOGY5ZmFdIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFic29sdXRlIHRvcC0wIGxlZnQtMCBoLVs0cHhdIHJvdW5kZWQtWzRweF0gYmctWyMwMGJjNjJdXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiKGl0ZW0oKS5wZXJjZW50VXBsb2FkaW5nID8/IDApICogMS4yXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtbC1bMTZweF1cIj5cbiAgICAgICAgICAgIEBpZiAoIWlnbm9yZUljb25QcmV2aWV3KCkpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tZXllLW91dGxpbmUgIW1yLTAnXCJcbiAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJ7IGNvbmZpZzogeyBjb250ZW50OiAnaTE4bl9wcmV2aWV3JywgekluZGV4OiB6SW5kZXgoKSArIDEgfSB9XCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJbmNsdWRlXT1cIichcC0wJyArIChpZ25vcmVJY29uUmVtb3ZlKCkgJiYgIWlnbm9yZUljb25FZGl0KCkgPyAnJyA6ICcgIW1yLVsxMnB4XScpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJpdGVtKCkuaXNVcGxvYWRpbmcgfHwgZGlzYWJsZSgpIHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyT3BlblByZXZpZXdGaWxlKGl0ZW0oKSlcIiAvPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGlmIChpdGVtKCkudHlwZSA9PT0gJ2ltYWdlJyAmJiAhaXRlbSgpLmVycm9yICYmICFpZ25vcmVJY29uRWRpdCgpKSB7XG4gICAgICAgICAgICAgIDxsaWJzX3VpLWNvbXBvbmVudHMtYnV0dG9ucy1idXR0b25cbiAgICAgICAgICAgICAgICBbdHlwZV09XCInYnV0dG9uLWxpbmstdGhpcmQnXCJcbiAgICAgICAgICAgICAgICBbY2xhc3NJY29uTGVmdF09XCInbGlicy11aS1pY29uLWVkaXQtbGluZSAhbXItMCdcIlxuICAgICAgICAgICAgICAgIFtwb3BvdmVyXT1cInsgY29uZmlnOiB7IGNvbnRlbnQ6ICdpMThuX2VkaXQnLCB6SW5kZXg6IHpJbmRleCgpICsgMSB9IH1cIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnICsgKGlnbm9yZUljb25SZW1vdmUoKSA/ICcnIDogJyAhbXItWzEycHhdJylcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlXT1cIml0ZW0oKS5pc1VwbG9hZGluZyB8fCBkaXNhYmxlKCkgfHwgcmVhZG9ubHkoKVwiXG4gICAgICAgICAgICAgICAgKG91dENsaWNrKT1cImhhbmRsZXJFZGl0SW1hZ2UoJGV2ZW50LCBpdGVtKVwiIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBAaWYgKCFpZ25vcmVJY29uUmVtb3ZlKCkpIHtcbiAgICAgICAgICAgICAgPGxpYnNfdWktY29tcG9uZW50cy1idXR0b25zLWJ1dHRvblxuICAgICAgICAgICAgICAgIFt0eXBlXT1cIididXR0b24tbGluay10aGlyZCdcIlxuICAgICAgICAgICAgICAgIFtjbGFzc0ljb25MZWZ0XT1cIidsaWJzLXVpLWljb24tY2xvc2UgIW1yLTAnXCJcbiAgICAgICAgICAgICAgICBbcG9wb3Zlcl09XCJ7IGNvbmZpZzogeyBjb250ZW50OiAnaTE4bl9kZWxldGUnLCB6SW5kZXg6IHpJbmRleCgpICsgMSB9IH1cIlxuICAgICAgICAgICAgICAgIFtjbGFzc0luY2x1ZGVdPVwiJyFwLTAnXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZV09XCJpdGVtKCkuaXNVcGxvYWRpbmcgfHwgZGlzYWJsZSgpIHx8IHJlYWRvbmx5KClcIlxuICAgICAgICAgICAgICAgIChvdXRDbGljayk9XCJoYW5kbGVyUmVtb3ZlRmlsZSgkZXZlbnQsIGl0ZW0pXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoaXRlbSgpLmVycm9yICYmIChtdWx0aXBsZSgpIHx8IHNob3dQb3B1cFVwbG9hZFdoZW5IYXNGaWxlQW5kTW9kZVNpbmdsZSgpKSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC1bOHB4XSB0ZXh0LVsjZWUyZDQxXSBsaWJzLXVpLWZvbnQtaDdyXCI+XG4gICAgICAgICAgICBAbGV0IGNvbnN0SHRtbE1lc3NhZ2UgPSBpdGVtKCkuZXJyb3IgfHwgJyAnO1xuICAgICAgICAgICAge3sgY29uc3RIdG1sTWVzc2FnZSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19