qms-angular 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.mjs +3 -3
- package/esm2022/lib/components/related/popup/related-popup.component.mjs +3 -3
- package/esm2022/lib/components/related/risk/analysis/analysis.component.mjs +2 -2
- package/esm2022/lib/components/select-access-dialog/select-access-dialog.component.mjs +3 -3
- package/esm2022/lib/components/select-department/select-department.component.mjs +3 -3
- package/esm2022/lib/components/select-department-tree/select-department-tree.component.mjs +5 -5
- package/esm2022/lib/components/select-one/select-one.component.mjs +10 -12
- package/esm2022/lib/components/select-process-data/select-process-data.component.mjs +3 -3
- package/esm2022/lib/components/select-process-data-tree/select-process-data-tree.component.mjs +3 -3
- package/esm2022/lib/qms-ckeditor-components/common/module/confirm/qms-ckeditor-confirm.component.mjs +2 -2
- package/esm2022/lib/qms-ckeditor-components/components/qms-ckeditor-about/qms-ckeditor-about.component.mjs +2 -2
- package/esm2022/lib/qms-ckeditor-components/components/qms-ckeditor-imagemap/qms-ckeditor-imagemap.component.mjs +2 -2
- package/esm2022/lib/qms-ckeditor-components/components/qms-ckeditor-link/attachments/link-attachment.component.mjs +2 -2
- package/esm2022/lib/qms-ckeditor-components/components/qms-ckeditor-link/qms-ckeditor-link.component.mjs +2 -2
- package/esm2022/lib/qms-ckeditor-components/components/qms-ckeditor-link-simple/qms-ckeditor-link-simple.component.mjs +2 -2
- package/esm2022/lib/qms-ckeditor-components/components/qms-ckeditor-load-template/qms-ckeditor-load-template.component.mjs +2 -2
- package/esm2022/lib/qms-ckeditor-components/components/qms-ckeditor-relation/qmsckeditor-related.component.mjs +2 -2
- package/esm2022/lib/qms-ckeditor-components/components/qms-ckeditor-template/qms-ckeditor-template.component.mjs +2 -2
- package/esm2022/lib/qms-ckeditor-components/components/qms-ckeditor-tooltip/qms-ckeditor-tooltip.component.mjs +2 -2
- package/esm2022/lib/qms-ckeditor-components/qms-ckeditor.component.mjs +2 -2
- package/fesm2022/qms-angular.mjs +42 -42
- package/fesm2022/qms-angular.mjs.map +1 -1
- package/package.json +1 -1
- package/src/assets/qms-ckeditor-plugin/build/ckeditor.js +1 -1
- package/src/lib/components/banner/qms-banner-confirm/qms-banner-confirm.component.scss +44 -44
- package/src/lib/components/related/risk/analysis/analysis.component.scss +0 -3
- package/src/lib/components/select-access-dialog/select-access-dialog.component.scss +8 -2
- package/src/lib/components/select-department/select-department.component.scss +3 -3
- package/src/lib/components/select-department-tree/select-department-tree.component.scss +1 -1
- package/src/lib/components/select-dialog/select-dialog.scss +1 -1
- package/src/lib/components/select-process-data/select-process-data.component.scss +1 -1
- package/src/lib/components/select-process-data-tree/select-process-data-tree.component.scss +1 -1
- package/src/lib/components/select-process-document/select-process-document.component.scss +5 -6
- package/src/lib/qms-ckeditor-components/styles/_modules.scss +149 -146
- package/src/themes/core/_checkbox.scss +5 -1
- package/src/themes/core/_dialog.scss +42 -53
- package/src/themes/core/_form.scss +40 -35
- package/src/themes/core/_radio.scss +5 -1
- package/src/themes/core/_range-slider.scss +223 -201
- package/src/themes/core/_slide-toggle.scss +48 -6
- package/src/themes/core/_tab.scss +516 -512
@@ -1232,11 +1232,11 @@ export class RelatedPopupComponent {
|
|
1232
1232
|
this.isLoadingVideoFile = false;
|
1233
1233
|
}
|
1234
1234
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RelatedPopupComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.TranslateLibraryService }, { token: i2.MatDialogRef }, { token: i3.QMSRelatedGlobalService }, { token: i4.MatIconRegistry }, { token: i5.DomSanitizer }, { token: i6.QMSIconRegistryService }, { token: i0.ElementRef }, { token: i7.QMSCKEditorUploadService }, { token: i2.MatDialog }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
|
1235
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: RelatedPopupComponent, selector: "qms-related-popup", host: { listeners: { "window:message": "onMessage($event)" } }, viewQueries: [{ propertyName: "autoComplete", first: true, predicate: ["autoCompleteInputSearch"], descendants: true, read: MatAutocompleteTrigger, static: true }, { propertyName: "dataTrees", predicate: TreeComponent, descendants: true }], ngImport: i0, template: "<h3 mat-dialog-title class=\"more-action\">\n <span class=\"module-name\">{{ moduleName | uppercase }}</span>\n <button matDialogClose class=\"btn-close-dialog\" color=\"light\" qms-btn-icon (click)=\"onCloseClick()\">\n <mat-icon>close</mat-icon>\n </button>\n</h3>\n<mat-dialog-content>\n <!-- Ckeditor Using -->\n <div *ngIf=\"canUploadImage || canUploadVideo || canUpdateVideoProperties\" id=\"qmslib_related_popup_header_001\"\n [ngClass]=\"{\n panel_header_height_with_video_upload: canUploadVideo,\n panel_header_height_without_video_upload: !canUploadVideo && canUploadImage && canUpdateVideoProperties\n }\" mat-dialog-content class=\"row\">\n <div *ngIf=\"canUploadImage\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadImageName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputImageType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputImageFile? qmsInputImageFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingImageFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputImageFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensions\"\n accept=\".pjp, .jpg, .pjpeg, .jpeg, .jfif, .png, .gif, .bmp, .webp, .tif, .tiff\"\n [maxSize]=\"maxVideoThumbnailSizeKB\" (change)=\"onChangeImage($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingImageFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputImageFile && qmsInputImageFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputImageFile()\" [disabled]=\"isLoadingImageFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputImageFile && qmsInputImageFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.EXTENSION_IS_NOT_SUPPORTED }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_IMAGE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.poster\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div class=\"selected-image col-12\">\n <div *ngIf=\"canUploadVideo\" class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadFileName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputVideoType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputVideoFile? qmsInputVideoFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingVideoFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputVideoFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensionsForVideo\" accept=\".mp4\" (change)=\"onChangeFile($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingVideoFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputVideoFile()\" [disabled]=\"isLoadingVideoFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.ACCEPT_MP4_ONLY }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\" *ngIf=\"canUpdateVideoProperties\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_SOURCE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.src\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div *ngIf=\"canUpdateVideoProperties\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.WIDTH }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.width\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.HEIGHT }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.height\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>Id</mat-label>\n <input matInput [(ngModel)]=\"videoData.id\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n <!-- Related module -->\n <div class=\"sticky-block\">\n <input type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput [formControl]=\"myControl\" [matAutocomplete]=\"auto\" />\n <mat-icon>search</mat-icon>\n </div>\n <div class=\"line__divider\"></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"mat-autocomplete_related-viewport\"\n (optionSelected)=\"selectRelated($event.option.value)\" [displayWith]=\"displayWhenSelectRelatedOption\">\n <cdk-virtual-scroll-viewport qms-scrollbar itemSize=\"10\" [class.related-viewport]=\"isInputValue\"\n *ngIf=\"filteredOptions.length\">\n <ng-container *ngFor=\"let type of searchOrder\">\n <div class=\"search__module-result\" *ngIf=\"canShowSearchOption(type.value)\">\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\n <mat-option class=\"search__option\" *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\n [value]=\"option\" [disabled]=\"option.disabled\">\n <qms-list-item type=\"image-square\">\n <mat-icon leading-icon type=\"image-square\" [svgIcon]=\"getNodeIcon(option)\"></mat-icon>\n <div qms-list-header>\n <div qms-line type=\"caption\" qms-tool-tip=\"{{\n isEllipsisActive(searchItemResult) ? option.parentName : ''\n }}\" mode=\"dark\" *ngIf=\"getParentName(option)\">\n <span #searchItemResult class=\"search__result__parent-name\">\n {{ option.parentName }}\n </span>\n </div>\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\n {{ option.itemName }}\n </div>\n <div class=\"caption\" *ngIf=\"option.breadcumbs && option.breadcumbs.length\">\n <qms-breadcrumb class=\"breadcrumb-container\" type=\"table\" numDisplayItem=\"1\"\n [nodes]=\"option.breadcumbs\">\n </qms-breadcrumb>\n </div>\n </div>\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\n <span>\n <mat-icon class=\"material-icons-outlined search__description-icon\">local_offer</mat-icon>\n </span>\n {{ getItemId(option) }}\n </div>\n </qms-list-item>\n </mat-option>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </mat-autocomplete>\n\n <div class=\"row\">\n <div class=\"qms-scrollbar qmslib_related_popup_content\" [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length,\n panel__content_height_with_upload: canUploadImage && !checkedNodeList.length,\n panel__content_item_height_with_upload: canUploadImage && checkedNodeList.length,\n 'col-6': splitView,\n 'col-12': !splitView\n }\">\n <ng-container *ngIf=\"treeData1.length > 0\">\n <mat-expansion-panel hideToggle id=\"qmslib_related_popup_common_001\" [expanded]=\"isCommonExpanded\"\n (opened)=\"isCommonExpanded = true\" (closed)=\"isCommonExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\n {{ LANG.PROCESSES | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.deviation\">\n {{ LANG.DEVIATION | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.checklist\">\n {{ LANG.CHECKLIST | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.risk\">\n {{ LANG.ASSESSMENT | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_common_002\">\n <qms-tree [treeData]=\"treeData1\" [treeConfig]=\"treeConfig1\" [selectedData]=\"selectedData\"\n [selectedRiskData]=\"selectedRiskData\" [disabledList]=\"disabledList\"\n (checkBoxEvent)=\"getCommonCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeProcess($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n\n <ng-container *ngIf=\"treeData2.length > 0\">\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\n\n <mat-expansion-panel hideToggle *ngIf=\"moduleId === module.documentProcess\"\n id=\"qmslib_related_popup_document_001\" [expanded]=\"isDocumentExpanded\" (opened)=\"isDocumentExpanded = true\"\n (closed)=\"isDocumentExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title>\n {{ LANG.DOCUMENTS | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isDocumentExpanded\n ? \"keyboard_arrow_up\"\n : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_document_002\">\n <qms-tree [treeData]=\"treeData2\" [treeConfig]=\"treeConfig2\" [selectedData]=\"selectedData2\"\n [disabledList]=\"disabledList2\" (checkBoxEvent)=\"getDocumentCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\n (selectNodeEvent)=\"selectNodeTree2Event($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeDocument($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </div>\n <div *ngIf=\"splitView\" class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\n [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length\n }\">\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\n {{ splitViewTitle }}\n </div>\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\n <mat-checkbox qms-group-options [disabled]=\"node.disabled\" color=\"default\" [checked]=\"isNodeSelected(node)\"\n (change)=\"toggleSelectItem(node)\"></mat-checkbox>\n <mat-icon class=\"mat-icon-rtl-mirror material-icons-outlined\" [svgIcon]=\"getNodeIcon(node)\"></mat-icon>\n <span class=\"text-node\">{{ node.itemName }}</span>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\n\n <div class=\"row\">\n <div class=\"col-12 pr-0 pe-0\">\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\n <button *ngIf=\"item.itemName\" mat-button class=\"related__item__content\" qms-tool-tip=\"{{\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\n }}\" mode=\"dark\">\n <span class=\"related__item__content_name\" #itemName>{{\n getItemChipName(item)\n }}</span>\n <mat-icon *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\"\n (click)=\"removeCheckedNodeList(item)\">cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <mat-divider class=\"w-100 mb-3\"></mat-divider>\n <button class=\"me-2\" qms-btn-text [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\"\n (click)=\"onCloseClick()\">\n {{ LANG.CANCEL }}\n </button>\n <button *ngIf=\"!checkedNodeList.length\" qms-btn style=\"margin-top: 7px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }}\n </button>\n <button *ngIf=\"checkedNodeList.length\" qms-btn style=\"margin-top: 0px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\n </button>\n</mat-dialog-actions>\n\n<!-- \n<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\n <div id=\"qmslib_related_popup_header\">\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\n <mat-icon mat-icon>close</mat-icon>\n </span>\n <div *ngIf=\"canUploadImage || canUploadVideo || canUpdateVideoProperties\" id=\"qmslib_related_popup_header_001\"\n [ngClass]=\"{\n panel_header_height_with_video_upload: canUploadVideo,\n panel_header_height_without_video_upload: !canUploadVideo && canUploadImage && canUpdateVideoProperties\n }\" mat-dialog-content class=\"row\">\n <div *ngIf=\"canUploadImage\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadImageName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputImageType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputImageFile? qmsInputImageFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingImageFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputImageFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensions\"\n accept=\".pjp, .jpg, .pjpeg, .jpeg, .jfif, .png, .gif, .bmp, .webp, .tif, .tiff\"\n [maxSize]=\"maxVideoThumbnailSizeKB\" (change)=\"onChangeImage($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingImageFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputImageFile && qmsInputImageFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputImageFile()\" [disabled]=\"isLoadingImageFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputImageFile && qmsInputImageFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.EXTENSION_IS_NOT_SUPPORTED }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_IMAGE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.poster\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div class=\"selected-image col-12\">\n <div *ngIf=\"canUploadVideo\" class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadFileName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputVideoType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputVideoFile? qmsInputVideoFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingVideoFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputVideoFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensionsForVideo\" accept=\".mp4\" (change)=\"onChangeFile($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingVideoFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputVideoFile()\" [disabled]=\"isLoadingVideoFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.ACCEPT_MP4_ONLY }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\" *ngIf=\"canUpdateVideoProperties\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_SOURCE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.src\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div *ngIf=\"canUpdateVideoProperties\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.WIDTH }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.width\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.HEIGHT }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.height\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>Id</mat-label>\n <input matInput [(ngModel)]=\"videoData.id\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <span class=\"module-name\">{{ moduleName | uppercase }}</span>\n </div>\n </div>\n\n <div id=\"qmslib_related_popup_search\" class=\"input__field\">\n <input type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput [formControl]=\"myControl\" [matAutocomplete]=\"auto\" />\n <mat-icon>search</mat-icon>\n </div>\n\n <div class=\"line__divider\"></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"mat-autocomplete_related-viewport\"\n (optionSelected)=\"selectRelated($event.option.value)\" [displayWith]=\"displayWhenSelectRelatedOption\">\n <cdk-virtual-scroll-viewport qms-scrollbar itemSize=\"10\" [class.related-viewport]=\"isInputValue\"\n *ngIf=\"filteredOptions.length\">\n <ng-container *ngFor=\"let type of searchOrder\">\n <div class=\"search__module-result\" *ngIf=\"canShowSearchOption(type.value)\">\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\n <mat-option class=\"search__option\" *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\n [value]=\"option\" [disabled]=\"option.disabled\">\n <qms-list-item type=\"image-square\">\n <mat-icon leading-icon type=\"image-square\" [svgIcon]=\"getNodeIcon(option)\"></mat-icon>\n <div qms-list-header>\n <div qms-line type=\"caption\" qms-tool-tip=\"{{\n isEllipsisActive(searchItemResult) ? option.parentName : ''\n }}\" mode=\"dark\" *ngIf=\"getParentName(option)\">\n <span #searchItemResult class=\"search__result__parent-name\">\n {{ option.parentName }}\n </span>\n </div>\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\n {{ option.itemName }}\n </div>\n <div class=\"caption\" *ngIf=\"option.breadcumbs && option.breadcumbs.length\">\n <qms-breadcrumb class=\"breadcrumb-container\" type=\"table\" numDisplayItem=\"1\"\n [nodes]=\"option.breadcumbs\">\n </qms-breadcrumb>\n </div>\n </div>\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\n <span>\n <mat-icon class=\"material-icons-outlined search__description-icon\">local_offer</mat-icon>\n </span>\n {{ getItemId(option) }}\n </div>\n </qms-list-item>\n </mat-option>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </mat-autocomplete>\n\n <div class=\"row\">\n <div class=\"qms-scrollbar qmslib_related_popup_content\" [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length,\n panel__content_height_with_upload: canUploadImage && !checkedNodeList.length,\n panel__content_item_height_with_upload: canUploadImage && checkedNodeList.length,\n 'col-6': splitView,\n 'col-12': !splitView\n }\">\n <ng-container *ngIf=\"treeData1.length > 0\">\n <mat-expansion-panel hideToggle id=\"qmslib_related_popup_common_001\" [expanded]=\"isCommonExpanded\"\n (opened)=\"isCommonExpanded = true\" (closed)=\"isCommonExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\n {{ LANG.PROCESSES | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.deviation\">\n {{ LANG.DEVIATION | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.checklist\">\n {{ LANG.CHECKLIST | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.risk\">\n {{ LANG.ASSESSMENT | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_common_002\">\n <qms-tree [treeData]=\"treeData1\" [treeConfig]=\"treeConfig1\" [selectedData]=\"selectedData\"\n [selectedRiskData]=\"selectedRiskData\" [disabledList]=\"disabledList\"\n (checkBoxEvent)=\"getCommonCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeProcess($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n\n <ng-container *ngIf=\"treeData2.length > 0\">\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\n\n <mat-expansion-panel hideToggle *ngIf=\"moduleId === module.documentProcess\"\n id=\"qmslib_related_popup_document_001\" [expanded]=\"isDocumentExpanded\" (opened)=\"isDocumentExpanded = true\"\n (closed)=\"isDocumentExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title>\n {{ LANG.DOCUMENTS | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isDocumentExpanded\n ? \"keyboard_arrow_up\"\n : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_document_002\">\n <qms-tree [treeData]=\"treeData2\" [treeConfig]=\"treeConfig2\" [selectedData]=\"selectedData2\"\n [disabledList]=\"disabledList2\" (checkBoxEvent)=\"getDocumentCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\n (selectNodeEvent)=\"selectNodeTree2Event($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeDocument($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </div>\n <div *ngIf=\"splitView\" class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\n [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length\n }\">\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\n {{ splitViewTitle }}\n </div>\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\n <mat-checkbox qms-group-options [disabled]=\"node.disabled\" color=\"default\" [checked]=\"isNodeSelected(node)\"\n (change)=\"toggleSelectItem(node)\"></mat-checkbox>\n <mat-icon class=\"mat-icon-rtl-mirror material-icons-outlined\" [svgIcon]=\"getNodeIcon(node)\"></mat-icon>\n <span class=\"text-node\">{{ node.itemName }}</span>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\n\n <div class=\"row\">\n <div class=\"col-12 pr-0 pe-0\">\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\n <button *ngIf=\"item.itemName\" mat-button class=\"related__item__content\" qms-tool-tip=\"{{\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\n }}\" mode=\"dark\">\n <span class=\"related__item__content_name\" #itemName>{{\n getItemChipName(item)\n }}</span>\n <mat-icon *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\"\n (click)=\"removeCheckedNodeList(item)\">cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"line__divider\"></div>\n\n <div class=\"confirm__button__groups\">\n <button *ngIf=\"!checkedNodeList.length\" qms-btn style=\"margin-top: 7px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }}\n </button>\n <button *ngIf=\"checkedNodeList.length\" qms-btn style=\"margin-top: 0px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\n </button>\n <button qms-btn-text [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\" (click)=\"onCloseClick()\">\n {{ LANG.CANCEL }}\n </button>\n </div>\n</div> -->", styles: ["::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{background:#0000001f;background-clip:content-box}::-webkit-scrollbar-thumb{background:#00000061;border-radius:20px;width:4px;border:4px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:#00000080;background-clip:content-box;border:4px solid transparent}.qms__popup .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qms__danger button{border:none;color:var(--text-white);padding:0;text-align:center;text-decoration:none;display:inline-block;cursor:pointer;height:20px;width:20px;font-family:Open Sans;font-size:12px;font-weight:600;font-style:normal;line-height:16px}.qms__danger .red{background-color:var(--button-red-background);margin-left:10px}.qms__danger .yellow{background-color:var(--button-yellow-background);margin-left:10px;color:var(--popup-title-color)}.qms__danger .green{background-color:var(--button-green-background);margin-left:10px}.confirm__button__groups{margin-top:11px}.confirm__button__groups button{min-height:36px;width:auto;font-family:Open Sans;font-weight:500;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px;margin-right:5px;float:right}.confirm__button__groups .confirm{background:var(--button-background)}.confirm__button__groups .confirm:hover{background:var(--primary-button-background-color);color:var(--primary-button-text-color)}.confirm__button__groups .confirm:disabled{cursor:not-allowed}.confirm__button__groups .cancel{background:var(--button-background)}.confirm__button__groups .cancel:hover{background:var(--primary-button-background-color);color:var(--primary-button-text-color)}.sticky-block{position:sticky;top:-1px;left:0;right:0;background:#fdfbff}.qmslib__related__popup__container .input__field{display:flex;align-items:center}.qmslib__related__popup__container .input__field input{width:100%;padding:10px;outline:none;border:none;background:var(--background-input-text)}.qmslib__related__popup__container .input__field .mat-icon{margin-left:-30px;cursor:pointer;vertical-align:middle}.qmslib__related__popup__container .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qmslib__related__popup__container .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qmslib__related__popup__container .panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_height_with_upload{height:380px}.qmslib__related__popup__container .panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_item_height_with_upload{height:257px}.qmslib__related__popup__container .panel-tree .mat-expansion-panel-body{padding:0 12px 12px}.qmslib__related__popup__container .mat-expansion-panel-header{height:30px;font-size:12px;letter-spacing:1px;font-family:Raleway;font-weight:600;padding:0}.qmslib__related__popup__container .mat-expansion-panel-header .mat-expansion-panel-header-title{align-items:center;margin-left:12px}.qmslib__related__popup__container .mat-expansion-panel-header .related_popup_toggle-btn{width:1.5rem;height:1.5rem;line-height:1.5rem}.qmslib__related__popup__container .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none}.qmslib__related__popup__container .panel__item{height:100px;margin-top:12px;overflow-x:hidden;overflow-y:auto;padding-right:5px;width:100%;max-width:100%;display:flex;flex-wrap:wrap;align-content:flex-start}.qmslib__related__popup__container .panel__item .related__item__inline{max-width:100%}.qmslib__related__popup__container .panel__item .related__item__content{height:32px;line-height:32px;background-color:var(--related-item-background);max-width:100%;margin-bottom:5px;margin-left:2.5px;margin-right:2.5px}.qmslib__related__popup__container .panel__item .related__item__content .mat-icon{color:var(--related-mat-icon-color);font-size:24px}.qmslib__related__popup__container .panel__item .related__item__content span.related__item__content_name{display:inline-block;min-width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:278px}.qmslib__related__popup__container .qmslib-related-popup-splitview{background-color:#fff;border-left:1px solid #ccc;height:450px;overflow-y:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview .splitview-header{font-size:12px;letter-spacing:1px;font-family:RALEWAY;font-weight:600;display:flex;align-items:center}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-mdc-checkbox.qms-group-options{padding:0}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-mdc-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:11px}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-mdc-checkbox.qms-group-options.mat-checkbox-checked{background:transparent!important}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node{margin-left:8px;display:flex;align-items:center;min-height:40px}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon{color:#0009;margin-right:17px;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon svg{display:block;min-width:fit-content}.qmslib__related__popup__container .module-name{margin-top:10px;display:block;font-weight:600;font-family:Raleway}.qmslib__related__popup__container input::-webkit-outer-spin-button,.qmslib__related__popup__container input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.qmslib__related__popup__container input[type=number]{-moz-appearance:textfield}.qmslib__related__popup__container .panel_header_height_with_video_upload{height:350px}.qmslib__related__popup__container .panel_header_height_without_video_upload{height:300px}cdk-virtual-scroll-viewport{overflow-x:hidden}cdk-virtual-scroll-viewport .search__module-result{margin:1.5rem;padding:0 0 .5rem 0px}cdk-virtual-scroll-viewport .search__module-result .search__module-title{font-size:14px;font-weight:600}cdk-virtual-scroll-viewport .search__module-result .search__option{height:auto;line-height:normal;padding:8px 0;border-bottom:1px solid #e0e0e0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item.mat-2-line.image-item{height:auto}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content{margin:0;border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square{width:2.5rem;height:100%;background:transparent;align-self:center;margin-right:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square img{width:24px;height:24px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .material-icons-outlined.leading-icon,cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content mat-icon.leading-icon{padding:4px 0 4px 4px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .subtitle{font-weight:400}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption{overflow:hidden;line-height:normal;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;padding:0;margin:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption span.search__result__parent-name{display:inline-block;width:auto;width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .default-subtitle{color:#00000061}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .search__description-icon{margin-right:0;width:12px;height:12px;font-size:12px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .qms-list-text{border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .breadcrumb-container .qms-breadcrumb-item .mat-icon{font-size:16px!important;padding-bottom:1px}cdk-virtual-scroll-viewport .search__module-result .mat-mdc-option[aria-disabled=true] .subtitle{color:#00000061}cdk-virtual-scroll-viewport .search__module-result .mat-mdc-option[aria-disabled=true] .breadcrumb-container .qms-breadcrumb-item .mat-icon{color:#00000061}cdk-virtual-scroll-viewport .search__module-result .mat-mdc-option[aria-disabled=true] .breadcrumb-container .qms-breadcrumb-item-text{color:#00000061}cdk-virtual-scroll-viewport .search__module-result svg{display:block}#qmslib_related_popup_header_001{width:100%;padding:0;font-weight:600;font-family:Raleway;margin:0}#qmslib_related_popup_header_001 .selected-image{padding-bottom:10px;width:100%}#qmslib_related_popup_header_001 .selected-image .input-upload,#qmslib_related_popup_header_001 .selected-image .module-name{width:100%;height:60px}.padding-5{padding:5px}.mat-mdc-autocomplete_related-viewport{height:100%;max-height:100%!important}.mat-mdc-autocomplete_related-viewport .cdk-virtual-scroll-content-wrapper{width:100%}.mat-mdc-autocomplete_related-viewport .related-viewport{min-height:300px}\n"], dependencies: [{ kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i12.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i12.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: i13.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i14.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i13.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i15.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "component", type: i15.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i16.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i17.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i18.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i18.MatLabel, selector: "mat-label" }, { kind: "directive", type: i18.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i18.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i18.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i19.QMSButton, selector: "button[qms-btn], button[qms-btn-lg], button[qms-btn-outlined],\n button[qms-btn-outlined-lg], button[qms-btn-text], button[qms-btn-text-lg],\n button[qms-btn-fab],button[qms-btn-fab-sm],button[qms-btn-fab-ext],\n button[qms-btn-fab-outlined],button[qms-btn-fab-outlined-sm],button[qms-btn-fab-outlined-ext]", inputs: ["disabled", "color"], exportAs: ["qmsButton"] }, { kind: "component", type: i19.QMSButtonIcon, selector: "button[qms-btn-icon]", inputs: ["disabled", "color", "active"], exportAs: ["qmsButtonIcon"] }, { kind: "component", type: i20.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i21.QMSListItem, selector: "qms-list-item", inputs: ["type", "disabled"] }, { kind: "directive", type: i21.QMSListLeadingIcon, selector: "[leading-icon]" }, { kind: "directive", type: i21.QMSListLine, selector: "[qms-line]", inputs: ["size", "type", "color"] }, { kind: "directive", type: i21.QMSListHeader, selector: "[qms-list-header]" }, { kind: "directive", type: i22.QMSInputClearDirective, selector: "[qms-input-clear]" }, { kind: "directive", type: i23.QMSFormFieldDirective, selector: "[qms-form]" }, { kind: "directive", type: i23.QMSGroupOptionDirective, selector: "[qms-group-options]", inputs: ["label"] }, { kind: "directive", type: i23.AutocompleteOffDirective, selector: "[qms-group-options]" }, { kind: "directive", type: i24.QMSFileUploadDirective, selector: "[qms-file-upload]", inputs: ["isLoading"] }, { kind: "directive", type: i25.QMSFileUploadDisplayDirective, selector: "[qms-file-upload-display]", inputs: ["value"] }, { kind: "directive", type: i26.QMSFileUploadSelectorDirective, selector: "[qms-file-upload-selector]", inputs: ["inputFile", "acceptExtensions", "maxSize"], outputs: ["inputFileChange", "onFileUploaded"] }, { kind: "directive", type: i27.QMSScrollbarDirective, selector: "[qms-scrollbar]", inputs: ["isNoneBackground"] }, { kind: "directive", type: i28.QMSToolTipRendererDirective, selector: "[qms-tool-tip]", inputs: ["showToolTip", "mode", "qms-tool-tip", "contentTemplate", "position"] }, { kind: "component", type: i29.QMSBreadcrumb, selector: "qms-breadcrumb", inputs: ["nodes", "type", "maxLine", "numDisplayItem", "onlyItem", "disabledLastItem"], outputs: ["onItemClick"] }, { kind: "component", type: i30.TreeComponent, selector: "qms-tree", inputs: ["treeData", "treeConfig", "selectedData", "selectedRiskData", "disabledList", "expandOnTitleClick", "expandToChildNode", "parentNodeOnClick"], outputs: ["selectNodeEvent", "selectFolderEvent", "checkBoxEvent", "childCheckedEvent", "nodeExpandEvent", "treeControlNodes", "nodeCondensedEvent"] }, { kind: "pipe", type: i9.UpperCasePipe, name: "uppercase" }], encapsulation: i0.ViewEncapsulation.None }); }
|
1235
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: RelatedPopupComponent, selector: "qms-related-popup", host: { listeners: { "window:message": "onMessage($event)" } }, viewQueries: [{ propertyName: "autoComplete", first: true, predicate: ["autoCompleteInputSearch"], descendants: true, read: MatAutocompleteTrigger, static: true }, { propertyName: "dataTrees", predicate: TreeComponent, descendants: true }], ngImport: i0, template: "<h3 mat-dialog-title class=\"more-action\">\n {{ moduleName | uppercase }}\n <button matDialogClose class=\"close-btn\" color=\"light\" qms-btn-icon (click)=\"onCloseClick()\">\n <mat-icon>close</mat-icon>\n </button>\n</h3>\n<mat-dialog-content>\n <!-- Ckeditor Using -->\n <div *ngIf=\"canUploadImage || canUploadVideo || canUpdateVideoProperties\" id=\"qmslib_related_popup_header_001\"\n [ngClass]=\"{\n panel_header_height_with_video_upload: canUploadVideo,\n panel_header_height_without_video_upload: !canUploadVideo && canUploadImage && canUpdateVideoProperties\n }\" mat-dialog-content class=\"row\">\n <div *ngIf=\"canUploadImage\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadImageName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputImageType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputImageFile? qmsInputImageFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingImageFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputImageFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensions\"\n accept=\".pjp, .jpg, .pjpeg, .jpeg, .jfif, .png, .gif, .bmp, .webp, .tif, .tiff\"\n [maxSize]=\"maxVideoThumbnailSizeKB\" (change)=\"onChangeImage($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingImageFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputImageFile && qmsInputImageFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputImageFile()\" [disabled]=\"isLoadingImageFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputImageFile && qmsInputImageFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.EXTENSION_IS_NOT_SUPPORTED }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_IMAGE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.poster\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div class=\"selected-image col-12\">\n <div *ngIf=\"canUploadVideo\" class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadFileName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputVideoType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputVideoFile? qmsInputVideoFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingVideoFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputVideoFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensionsForVideo\" accept=\".mp4\" (change)=\"onChangeFile($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingVideoFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputVideoFile()\" [disabled]=\"isLoadingVideoFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.ACCEPT_MP4_ONLY }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\" *ngIf=\"canUpdateVideoProperties\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_SOURCE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.src\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div *ngIf=\"canUpdateVideoProperties\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.WIDTH }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.width\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.HEIGHT }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.height\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>Id</mat-label>\n <input matInput [(ngModel)]=\"videoData.id\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n <!-- Related module -->\n <div class=\"sticky-block\">\n <input type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput [formControl]=\"myControl\" [matAutocomplete]=\"auto\" />\n <mat-icon>search</mat-icon>\n </div>\n <div class=\"line__divider\"></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"mat-autocomplete_related-viewport\"\n (optionSelected)=\"selectRelated($event.option.value)\" [displayWith]=\"displayWhenSelectRelatedOption\">\n <cdk-virtual-scroll-viewport qms-scrollbar itemSize=\"10\" [class.related-viewport]=\"isInputValue\"\n *ngIf=\"filteredOptions.length\">\n <ng-container *ngFor=\"let type of searchOrder\">\n <div class=\"search__module-result\" *ngIf=\"canShowSearchOption(type.value)\">\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\n <mat-option class=\"search__option\" *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\n [value]=\"option\" [disabled]=\"option.disabled\">\n <qms-list-item type=\"image-square\">\n <mat-icon leading-icon type=\"image-square\" [svgIcon]=\"getNodeIcon(option)\"></mat-icon>\n <div qms-list-header>\n <div qms-line type=\"caption\" qms-tool-tip=\"{{\n isEllipsisActive(searchItemResult) ? option.parentName : ''\n }}\" mode=\"dark\" *ngIf=\"getParentName(option)\">\n <span #searchItemResult class=\"search__result__parent-name\">\n {{ option.parentName }}\n </span>\n </div>\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\n {{ option.itemName }}\n </div>\n <div class=\"caption\" *ngIf=\"option.breadcumbs && option.breadcumbs.length\">\n <qms-breadcrumb class=\"breadcrumb-container\" type=\"table\" numDisplayItem=\"1\"\n [nodes]=\"option.breadcumbs\">\n </qms-breadcrumb>\n </div>\n </div>\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\n <span>\n <mat-icon class=\"material-icons-outlined search__description-icon\">local_offer</mat-icon>\n </span>\n {{ getItemId(option) }}\n </div>\n </qms-list-item>\n </mat-option>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </mat-autocomplete>\n\n <div class=\"row\">\n <div class=\"qms-scrollbar qmslib_related_popup_content\" [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length,\n panel__content_height_with_upload: canUploadImage && !checkedNodeList.length,\n panel__content_item_height_with_upload: canUploadImage && checkedNodeList.length,\n 'col-6': splitView,\n 'col-12': !splitView\n }\">\n <ng-container *ngIf=\"treeData1.length > 0\">\n <mat-expansion-panel hideToggle id=\"qmslib_related_popup_common_001\" [expanded]=\"isCommonExpanded\"\n (opened)=\"isCommonExpanded = true\" (closed)=\"isCommonExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\n {{ LANG.PROCESSES | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.deviation\">\n {{ LANG.DEVIATION | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.checklist\">\n {{ LANG.CHECKLIST | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.risk\">\n {{ LANG.ASSESSMENT | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_common_002\">\n <qms-tree [treeData]=\"treeData1\" [treeConfig]=\"treeConfig1\" [selectedData]=\"selectedData\"\n [selectedRiskData]=\"selectedRiskData\" [disabledList]=\"disabledList\"\n (checkBoxEvent)=\"getCommonCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeProcess($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n\n <ng-container *ngIf=\"treeData2.length > 0\">\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\n\n <mat-expansion-panel hideToggle *ngIf=\"moduleId === module.documentProcess\"\n id=\"qmslib_related_popup_document_001\" [expanded]=\"isDocumentExpanded\" (opened)=\"isDocumentExpanded = true\"\n (closed)=\"isDocumentExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title>\n {{ LANG.DOCUMENTS | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isDocumentExpanded\n ? \"keyboard_arrow_up\"\n : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_document_002\">\n <qms-tree [treeData]=\"treeData2\" [treeConfig]=\"treeConfig2\" [selectedData]=\"selectedData2\"\n [disabledList]=\"disabledList2\" (checkBoxEvent)=\"getDocumentCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\n (selectNodeEvent)=\"selectNodeTree2Event($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeDocument($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </div>\n <div *ngIf=\"splitView\" class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\n [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length\n }\">\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\n {{ splitViewTitle }}\n </div>\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\n <mat-checkbox qms-group-options [disabled]=\"node.disabled\" color=\"default\" [checked]=\"isNodeSelected(node)\"\n (change)=\"toggleSelectItem(node)\"></mat-checkbox>\n <mat-icon class=\"mat-icon-rtl-mirror material-icons-outlined\" [svgIcon]=\"getNodeIcon(node)\"></mat-icon>\n <span class=\"text-node\">{{ node.itemName }}</span>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\n\n <div class=\"row\">\n <div class=\"col-12 pr-0 pe-0\">\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\n <button *ngIf=\"item.itemName\" mat-button class=\"related__item__content\" qms-tool-tip=\"{{\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\n }}\" mode=\"dark\">\n <span class=\"related__item__content_name\" #itemName>{{\n getItemChipName(item)\n }}</span>\n <mat-icon *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\"\n (click)=\"removeCheckedNodeList(item)\">cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <mat-divider class=\"w-100 mb-3\"></mat-divider>\n <button class=\"me-2\" qms-btn-text [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\"\n (click)=\"onCloseClick()\">\n {{ LANG.CANCEL }}\n </button>\n <button *ngIf=\"!checkedNodeList.length\" qms-btn style=\"margin-top: 7px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }}\n </button>\n <button *ngIf=\"checkedNodeList.length\" qms-btn style=\"margin-top: 0px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\n </button>\n</mat-dialog-actions>\n\n<!-- \n<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\n <div id=\"qmslib_related_popup_header\">\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\n <mat-icon mat-icon>close</mat-icon>\n </span>\n <div *ngIf=\"canUploadImage || canUploadVideo || canUpdateVideoProperties\" id=\"qmslib_related_popup_header_001\"\n [ngClass]=\"{\n panel_header_height_with_video_upload: canUploadVideo,\n panel_header_height_without_video_upload: !canUploadVideo && canUploadImage && canUpdateVideoProperties\n }\" mat-dialog-content class=\"row\">\n <div *ngIf=\"canUploadImage\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadImageName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputImageType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputImageFile? qmsInputImageFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingImageFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputImageFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensions\"\n accept=\".pjp, .jpg, .pjpeg, .jpeg, .jfif, .png, .gif, .bmp, .webp, .tif, .tiff\"\n [maxSize]=\"maxVideoThumbnailSizeKB\" (change)=\"onChangeImage($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingImageFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputImageFile && qmsInputImageFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputImageFile()\" [disabled]=\"isLoadingImageFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputImageFile && qmsInputImageFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.EXTENSION_IS_NOT_SUPPORTED }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_IMAGE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.poster\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div class=\"selected-image col-12\">\n <div *ngIf=\"canUploadVideo\" class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadFileName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputVideoType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputVideoFile? qmsInputVideoFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingVideoFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputVideoFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensionsForVideo\" accept=\".mp4\" (change)=\"onChangeFile($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingVideoFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputVideoFile()\" [disabled]=\"isLoadingVideoFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.ACCEPT_MP4_ONLY }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\" *ngIf=\"canUpdateVideoProperties\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_SOURCE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.src\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div *ngIf=\"canUpdateVideoProperties\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.WIDTH }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.width\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.HEIGHT }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.height\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>Id</mat-label>\n <input matInput [(ngModel)]=\"videoData.id\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <span class=\"module-name\">{{ moduleName | uppercase }}</span>\n </div>\n </div>\n\n <div id=\"qmslib_related_popup_search\" class=\"input__field\">\n <input type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput [formControl]=\"myControl\" [matAutocomplete]=\"auto\" />\n <mat-icon>search</mat-icon>\n </div>\n\n <div class=\"line__divider\"></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"mat-autocomplete_related-viewport\"\n (optionSelected)=\"selectRelated($event.option.value)\" [displayWith]=\"displayWhenSelectRelatedOption\">\n <cdk-virtual-scroll-viewport qms-scrollbar itemSize=\"10\" [class.related-viewport]=\"isInputValue\"\n *ngIf=\"filteredOptions.length\">\n <ng-container *ngFor=\"let type of searchOrder\">\n <div class=\"search__module-result\" *ngIf=\"canShowSearchOption(type.value)\">\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\n <mat-option class=\"search__option\" *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\n [value]=\"option\" [disabled]=\"option.disabled\">\n <qms-list-item type=\"image-square\">\n <mat-icon leading-icon type=\"image-square\" [svgIcon]=\"getNodeIcon(option)\"></mat-icon>\n <div qms-list-header>\n <div qms-line type=\"caption\" qms-tool-tip=\"{{\n isEllipsisActive(searchItemResult) ? option.parentName : ''\n }}\" mode=\"dark\" *ngIf=\"getParentName(option)\">\n <span #searchItemResult class=\"search__result__parent-name\">\n {{ option.parentName }}\n </span>\n </div>\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\n {{ option.itemName }}\n </div>\n <div class=\"caption\" *ngIf=\"option.breadcumbs && option.breadcumbs.length\">\n <qms-breadcrumb class=\"breadcrumb-container\" type=\"table\" numDisplayItem=\"1\"\n [nodes]=\"option.breadcumbs\">\n </qms-breadcrumb>\n </div>\n </div>\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\n <span>\n <mat-icon class=\"material-icons-outlined search__description-icon\">local_offer</mat-icon>\n </span>\n {{ getItemId(option) }}\n </div>\n </qms-list-item>\n </mat-option>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </mat-autocomplete>\n\n <div class=\"row\">\n <div class=\"qms-scrollbar qmslib_related_popup_content\" [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length,\n panel__content_height_with_upload: canUploadImage && !checkedNodeList.length,\n panel__content_item_height_with_upload: canUploadImage && checkedNodeList.length,\n 'col-6': splitView,\n 'col-12': !splitView\n }\">\n <ng-container *ngIf=\"treeData1.length > 0\">\n <mat-expansion-panel hideToggle id=\"qmslib_related_popup_common_001\" [expanded]=\"isCommonExpanded\"\n (opened)=\"isCommonExpanded = true\" (closed)=\"isCommonExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\n {{ LANG.PROCESSES | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.deviation\">\n {{ LANG.DEVIATION | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.checklist\">\n {{ LANG.CHECKLIST | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.risk\">\n {{ LANG.ASSESSMENT | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_common_002\">\n <qms-tree [treeData]=\"treeData1\" [treeConfig]=\"treeConfig1\" [selectedData]=\"selectedData\"\n [selectedRiskData]=\"selectedRiskData\" [disabledList]=\"disabledList\"\n (checkBoxEvent)=\"getCommonCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeProcess($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n\n <ng-container *ngIf=\"treeData2.length > 0\">\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\n\n <mat-expansion-panel hideToggle *ngIf=\"moduleId === module.documentProcess\"\n id=\"qmslib_related_popup_document_001\" [expanded]=\"isDocumentExpanded\" (opened)=\"isDocumentExpanded = true\"\n (closed)=\"isDocumentExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title>\n {{ LANG.DOCUMENTS | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isDocumentExpanded\n ? \"keyboard_arrow_up\"\n : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_document_002\">\n <qms-tree [treeData]=\"treeData2\" [treeConfig]=\"treeConfig2\" [selectedData]=\"selectedData2\"\n [disabledList]=\"disabledList2\" (checkBoxEvent)=\"getDocumentCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\n (selectNodeEvent)=\"selectNodeTree2Event($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeDocument($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </div>\n <div *ngIf=\"splitView\" class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\n [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length\n }\">\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\n {{ splitViewTitle }}\n </div>\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\n <mat-checkbox qms-group-options [disabled]=\"node.disabled\" color=\"default\" [checked]=\"isNodeSelected(node)\"\n (change)=\"toggleSelectItem(node)\"></mat-checkbox>\n <mat-icon class=\"mat-icon-rtl-mirror material-icons-outlined\" [svgIcon]=\"getNodeIcon(node)\"></mat-icon>\n <span class=\"text-node\">{{ node.itemName }}</span>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\n\n <div class=\"row\">\n <div class=\"col-12 pr-0 pe-0\">\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\n <button *ngIf=\"item.itemName\" mat-button class=\"related__item__content\" qms-tool-tip=\"{{\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\n }}\" mode=\"dark\">\n <span class=\"related__item__content_name\" #itemName>{{\n getItemChipName(item)\n }}</span>\n <mat-icon *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\"\n (click)=\"removeCheckedNodeList(item)\">cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"line__divider\"></div>\n\n <div class=\"confirm__button__groups\">\n <button *ngIf=\"!checkedNodeList.length\" qms-btn style=\"margin-top: 7px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }}\n </button>\n <button *ngIf=\"checkedNodeList.length\" qms-btn style=\"margin-top: 0px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\n </button>\n <button qms-btn-text [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\" (click)=\"onCloseClick()\">\n {{ LANG.CANCEL }}\n </button>\n </div>\n</div> -->", styles: ["::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{background:#0000001f;background-clip:content-box}::-webkit-scrollbar-thumb{background:#00000061;border-radius:20px;width:4px;border:4px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:#00000080;background-clip:content-box;border:4px solid transparent}.qms__popup .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qms__danger button{border:none;color:var(--text-white);padding:0;text-align:center;text-decoration:none;display:inline-block;cursor:pointer;height:20px;width:20px;font-family:Open Sans;font-size:12px;font-weight:600;font-style:normal;line-height:16px}.qms__danger .red{background-color:var(--button-red-background);margin-left:10px}.qms__danger .yellow{background-color:var(--button-yellow-background);margin-left:10px;color:var(--popup-title-color)}.qms__danger .green{background-color:var(--button-green-background);margin-left:10px}.confirm__button__groups{margin-top:11px}.confirm__button__groups button{min-height:36px;width:auto;font-family:Open Sans;font-weight:500;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px;margin-right:5px;float:right}.confirm__button__groups .confirm{background:var(--button-background)}.confirm__button__groups .confirm:hover{background:var(--primary-button-background-color);color:var(--primary-button-text-color)}.confirm__button__groups .confirm:disabled{cursor:not-allowed}.confirm__button__groups .cancel{background:var(--button-background)}.confirm__button__groups .cancel:hover{background:var(--primary-button-background-color);color:var(--primary-button-text-color)}.sticky-block{position:sticky;top:-1px;left:0;right:0;background:#fdfbff}.qmslib__related__popup__container .input__field{display:flex;align-items:center}.qmslib__related__popup__container .input__field input{width:100%;padding:10px;outline:none;border:none;background:var(--background-input-text)}.qmslib__related__popup__container .input__field .mat-icon{margin-left:-30px;cursor:pointer;vertical-align:middle}.qmslib__related__popup__container .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qmslib__related__popup__container .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qmslib__related__popup__container .panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_height_with_upload{height:380px}.qmslib__related__popup__container .panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_item_height_with_upload{height:257px}.qmslib__related__popup__container .panel-tree .mat-expansion-panel-body{padding:0 12px 12px}.qmslib__related__popup__container .mat-expansion-panel-header{height:30px;font-size:12px;letter-spacing:1px;font-family:Raleway;font-weight:600;padding:0}.qmslib__related__popup__container .mat-expansion-panel-header .mat-expansion-panel-header-title{align-items:center;margin-left:12px}.qmslib__related__popup__container .mat-expansion-panel-header .related_popup_toggle-btn{width:1.5rem;height:1.5rem;line-height:1.5rem}.qmslib__related__popup__container .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none}.qmslib__related__popup__container .panel__item{height:100px;margin-top:12px;overflow-x:hidden;overflow-y:auto;padding-right:5px;width:100%;max-width:100%;display:flex;flex-wrap:wrap;align-content:flex-start}.qmslib__related__popup__container .panel__item .related__item__inline{max-width:100%}.qmslib__related__popup__container .panel__item .related__item__content{height:32px;line-height:32px;background-color:var(--related-item-background);max-width:100%;margin-bottom:5px;margin-left:2.5px;margin-right:2.5px}.qmslib__related__popup__container .panel__item .related__item__content .mat-icon{color:var(--related-mat-icon-color);font-size:24px}.qmslib__related__popup__container .panel__item .related__item__content span.related__item__content_name{display:inline-block;min-width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:278px}.qmslib__related__popup__container .qmslib-related-popup-splitview{background-color:#fff;border-left:1px solid #ccc;height:450px;overflow-y:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview .splitview-header{font-size:12px;letter-spacing:1px;font-family:RALEWAY;font-weight:600;display:flex;align-items:center}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-mdc-checkbox.qms-group-options{padding:0}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-mdc-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:11px}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-mdc-checkbox.qms-group-options.mat-checkbox-checked{background:transparent!important}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node{margin-left:8px;display:flex;align-items:center;min-height:40px}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon{color:#0009;margin-right:17px;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon svg{display:block;min-width:fit-content}.qmslib__related__popup__container .module-name{margin-top:10px;display:block;font-weight:600;font-family:Raleway}.qmslib__related__popup__container input::-webkit-outer-spin-button,.qmslib__related__popup__container input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.qmslib__related__popup__container input[type=number]{-moz-appearance:textfield}.qmslib__related__popup__container .panel_header_height_with_video_upload{height:350px}.qmslib__related__popup__container .panel_header_height_without_video_upload{height:300px}cdk-virtual-scroll-viewport{overflow-x:hidden}cdk-virtual-scroll-viewport .search__module-result{margin:1.5rem;padding:0 0 .5rem 0px}cdk-virtual-scroll-viewport .search__module-result .search__module-title{font-size:14px;font-weight:600}cdk-virtual-scroll-viewport .search__module-result .search__option{height:auto;line-height:normal;padding:8px 0;border-bottom:1px solid #e0e0e0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item.mat-2-line.image-item{height:auto}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content{margin:0;border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square{width:2.5rem;height:100%;background:transparent;align-self:center;margin-right:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square img{width:24px;height:24px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .material-icons-outlined.leading-icon,cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content mat-icon.leading-icon{padding:4px 0 4px 4px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .subtitle{font-weight:400}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption{overflow:hidden;line-height:normal;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;padding:0;margin:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption span.search__result__parent-name{display:inline-block;width:auto;width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .default-subtitle{color:#00000061}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .search__description-icon{margin-right:0;width:12px;height:12px;font-size:12px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .qms-list-text{border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .breadcrumb-container .qms-breadcrumb-item .mat-icon{font-size:16px!important;padding-bottom:1px}cdk-virtual-scroll-viewport .search__module-result .mat-mdc-option[aria-disabled=true] .subtitle{color:#00000061}cdk-virtual-scroll-viewport .search__module-result .mat-mdc-option[aria-disabled=true] .breadcrumb-container .qms-breadcrumb-item .mat-icon{color:#00000061}cdk-virtual-scroll-viewport .search__module-result .mat-mdc-option[aria-disabled=true] .breadcrumb-container .qms-breadcrumb-item-text{color:#00000061}cdk-virtual-scroll-viewport .search__module-result svg{display:block}#qmslib_related_popup_header_001{width:100%;padding:0;font-weight:600;font-family:Raleway;margin:0}#qmslib_related_popup_header_001 .selected-image{padding-bottom:10px;width:100%}#qmslib_related_popup_header_001 .selected-image .input-upload,#qmslib_related_popup_header_001 .selected-image .module-name{width:100%;height:60px}.padding-5{padding:5px}.mat-mdc-autocomplete_related-viewport{height:100%;max-height:100%!important}.mat-mdc-autocomplete_related-viewport .cdk-virtual-scroll-content-wrapper{width:100%}.mat-mdc-autocomplete_related-viewport .related-viewport{min-height:300px}\n"], dependencies: [{ kind: "directive", type: i8.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i8.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i12.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i12.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "component", type: i13.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i14.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i13.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: i8.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i15.CdkFixedSizeVirtualScroll, selector: "cdk-virtual-scroll-viewport[itemSize]", inputs: ["itemSize", "minBufferPx", "maxBufferPx"] }, { kind: "component", type: i15.CdkVirtualScrollViewport, selector: "cdk-virtual-scroll-viewport", inputs: ["orientation", "appendOnly"], outputs: ["scrolledIndexChange"] }, { kind: "component", type: i16.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i17.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i18.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i18.MatLabel, selector: "mat-label" }, { kind: "directive", type: i18.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i18.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i18.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i2.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i19.QMSButton, selector: "button[qms-btn], button[qms-btn-lg], button[qms-btn-outlined],\n button[qms-btn-outlined-lg], button[qms-btn-text], button[qms-btn-text-lg],\n button[qms-btn-fab],button[qms-btn-fab-sm],button[qms-btn-fab-ext],\n button[qms-btn-fab-outlined],button[qms-btn-fab-outlined-sm],button[qms-btn-fab-outlined-ext]", inputs: ["disabled", "color"], exportAs: ["qmsButton"] }, { kind: "component", type: i19.QMSButtonIcon, selector: "button[qms-btn-icon]", inputs: ["disabled", "color", "active"], exportAs: ["qmsButtonIcon"] }, { kind: "component", type: i20.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i21.QMSListItem, selector: "qms-list-item", inputs: ["type", "disabled"] }, { kind: "directive", type: i21.QMSListLeadingIcon, selector: "[leading-icon]" }, { kind: "directive", type: i21.QMSListLine, selector: "[qms-line]", inputs: ["size", "type", "color"] }, { kind: "directive", type: i21.QMSListHeader, selector: "[qms-list-header]" }, { kind: "directive", type: i22.QMSInputClearDirective, selector: "[qms-input-clear]" }, { kind: "directive", type: i23.QMSFormFieldDirective, selector: "[qms-form]" }, { kind: "directive", type: i23.QMSGroupOptionDirective, selector: "[qms-group-options]", inputs: ["label"] }, { kind: "directive", type: i23.AutocompleteOffDirective, selector: "[qms-group-options]" }, { kind: "directive", type: i24.QMSFileUploadDirective, selector: "[qms-file-upload]", inputs: ["isLoading"] }, { kind: "directive", type: i25.QMSFileUploadDisplayDirective, selector: "[qms-file-upload-display]", inputs: ["value"] }, { kind: "directive", type: i26.QMSFileUploadSelectorDirective, selector: "[qms-file-upload-selector]", inputs: ["inputFile", "acceptExtensions", "maxSize"], outputs: ["inputFileChange", "onFileUploaded"] }, { kind: "directive", type: i27.QMSScrollbarDirective, selector: "[qms-scrollbar]", inputs: ["isNoneBackground"] }, { kind: "directive", type: i28.QMSToolTipRendererDirective, selector: "[qms-tool-tip]", inputs: ["showToolTip", "mode", "qms-tool-tip", "contentTemplate", "position"] }, { kind: "component", type: i29.QMSBreadcrumb, selector: "qms-breadcrumb", inputs: ["nodes", "type", "maxLine", "numDisplayItem", "onlyItem", "disabledLastItem"], outputs: ["onItemClick"] }, { kind: "component", type: i30.TreeComponent, selector: "qms-tree", inputs: ["treeData", "treeConfig", "selectedData", "selectedRiskData", "disabledList", "expandOnTitleClick", "expandToChildNode", "parentNodeOnClick"], outputs: ["selectNodeEvent", "selectFolderEvent", "checkBoxEvent", "childCheckedEvent", "nodeExpandEvent", "treeControlNodes", "nodeCondensedEvent"] }, { kind: "pipe", type: i9.UpperCasePipe, name: "uppercase" }], encapsulation: i0.ViewEncapsulation.None }); }
|
1236
1236
|
}
|
1237
1237
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: RelatedPopupComponent, decorators: [{
|
1238
1238
|
type: Component,
|
1239
|
-
args: [{ selector: 'qms-related-popup', encapsulation: ViewEncapsulation.None, template: "<h3 mat-dialog-title class=\"more-action\">\n <span class=\"module-name\">{{ moduleName | uppercase }}</span>\n <button matDialogClose class=\"btn-close-dialog\" color=\"light\" qms-btn-icon (click)=\"onCloseClick()\">\n <mat-icon>close</mat-icon>\n </button>\n</h3>\n<mat-dialog-content>\n <!-- Ckeditor Using -->\n <div *ngIf=\"canUploadImage || canUploadVideo || canUpdateVideoProperties\" id=\"qmslib_related_popup_header_001\"\n [ngClass]=\"{\n panel_header_height_with_video_upload: canUploadVideo,\n panel_header_height_without_video_upload: !canUploadVideo && canUploadImage && canUpdateVideoProperties\n }\" mat-dialog-content class=\"row\">\n <div *ngIf=\"canUploadImage\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadImageName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputImageType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputImageFile? qmsInputImageFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingImageFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputImageFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensions\"\n accept=\".pjp, .jpg, .pjpeg, .jpeg, .jfif, .png, .gif, .bmp, .webp, .tif, .tiff\"\n [maxSize]=\"maxVideoThumbnailSizeKB\" (change)=\"onChangeImage($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingImageFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputImageFile && qmsInputImageFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputImageFile()\" [disabled]=\"isLoadingImageFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputImageFile && qmsInputImageFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.EXTENSION_IS_NOT_SUPPORTED }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_IMAGE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.poster\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div class=\"selected-image col-12\">\n <div *ngIf=\"canUploadVideo\" class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadFileName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputVideoType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputVideoFile? qmsInputVideoFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingVideoFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputVideoFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensionsForVideo\" accept=\".mp4\" (change)=\"onChangeFile($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingVideoFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputVideoFile()\" [disabled]=\"isLoadingVideoFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.ACCEPT_MP4_ONLY }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\" *ngIf=\"canUpdateVideoProperties\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_SOURCE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.src\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div *ngIf=\"canUpdateVideoProperties\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.WIDTH }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.width\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.HEIGHT }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.height\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>Id</mat-label>\n <input matInput [(ngModel)]=\"videoData.id\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n <!-- Related module -->\n <div class=\"sticky-block\">\n <input type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput [formControl]=\"myControl\" [matAutocomplete]=\"auto\" />\n <mat-icon>search</mat-icon>\n </div>\n <div class=\"line__divider\"></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"mat-autocomplete_related-viewport\"\n (optionSelected)=\"selectRelated($event.option.value)\" [displayWith]=\"displayWhenSelectRelatedOption\">\n <cdk-virtual-scroll-viewport qms-scrollbar itemSize=\"10\" [class.related-viewport]=\"isInputValue\"\n *ngIf=\"filteredOptions.length\">\n <ng-container *ngFor=\"let type of searchOrder\">\n <div class=\"search__module-result\" *ngIf=\"canShowSearchOption(type.value)\">\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\n <mat-option class=\"search__option\" *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\n [value]=\"option\" [disabled]=\"option.disabled\">\n <qms-list-item type=\"image-square\">\n <mat-icon leading-icon type=\"image-square\" [svgIcon]=\"getNodeIcon(option)\"></mat-icon>\n <div qms-list-header>\n <div qms-line type=\"caption\" qms-tool-tip=\"{{\n isEllipsisActive(searchItemResult) ? option.parentName : ''\n }}\" mode=\"dark\" *ngIf=\"getParentName(option)\">\n <span #searchItemResult class=\"search__result__parent-name\">\n {{ option.parentName }}\n </span>\n </div>\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\n {{ option.itemName }}\n </div>\n <div class=\"caption\" *ngIf=\"option.breadcumbs && option.breadcumbs.length\">\n <qms-breadcrumb class=\"breadcrumb-container\" type=\"table\" numDisplayItem=\"1\"\n [nodes]=\"option.breadcumbs\">\n </qms-breadcrumb>\n </div>\n </div>\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\n <span>\n <mat-icon class=\"material-icons-outlined search__description-icon\">local_offer</mat-icon>\n </span>\n {{ getItemId(option) }}\n </div>\n </qms-list-item>\n </mat-option>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </mat-autocomplete>\n\n <div class=\"row\">\n <div class=\"qms-scrollbar qmslib_related_popup_content\" [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length,\n panel__content_height_with_upload: canUploadImage && !checkedNodeList.length,\n panel__content_item_height_with_upload: canUploadImage && checkedNodeList.length,\n 'col-6': splitView,\n 'col-12': !splitView\n }\">\n <ng-container *ngIf=\"treeData1.length > 0\">\n <mat-expansion-panel hideToggle id=\"qmslib_related_popup_common_001\" [expanded]=\"isCommonExpanded\"\n (opened)=\"isCommonExpanded = true\" (closed)=\"isCommonExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\n {{ LANG.PROCESSES | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.deviation\">\n {{ LANG.DEVIATION | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.checklist\">\n {{ LANG.CHECKLIST | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.risk\">\n {{ LANG.ASSESSMENT | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_common_002\">\n <qms-tree [treeData]=\"treeData1\" [treeConfig]=\"treeConfig1\" [selectedData]=\"selectedData\"\n [selectedRiskData]=\"selectedRiskData\" [disabledList]=\"disabledList\"\n (checkBoxEvent)=\"getCommonCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeProcess($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n\n <ng-container *ngIf=\"treeData2.length > 0\">\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\n\n <mat-expansion-panel hideToggle *ngIf=\"moduleId === module.documentProcess\"\n id=\"qmslib_related_popup_document_001\" [expanded]=\"isDocumentExpanded\" (opened)=\"isDocumentExpanded = true\"\n (closed)=\"isDocumentExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title>\n {{ LANG.DOCUMENTS | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isDocumentExpanded\n ? \"keyboard_arrow_up\"\n : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_document_002\">\n <qms-tree [treeData]=\"treeData2\" [treeConfig]=\"treeConfig2\" [selectedData]=\"selectedData2\"\n [disabledList]=\"disabledList2\" (checkBoxEvent)=\"getDocumentCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\n (selectNodeEvent)=\"selectNodeTree2Event($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeDocument($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </div>\n <div *ngIf=\"splitView\" class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\n [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length\n }\">\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\n {{ splitViewTitle }}\n </div>\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\n <mat-checkbox qms-group-options [disabled]=\"node.disabled\" color=\"default\" [checked]=\"isNodeSelected(node)\"\n (change)=\"toggleSelectItem(node)\"></mat-checkbox>\n <mat-icon class=\"mat-icon-rtl-mirror material-icons-outlined\" [svgIcon]=\"getNodeIcon(node)\"></mat-icon>\n <span class=\"text-node\">{{ node.itemName }}</span>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\n\n <div class=\"row\">\n <div class=\"col-12 pr-0 pe-0\">\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\n <button *ngIf=\"item.itemName\" mat-button class=\"related__item__content\" qms-tool-tip=\"{{\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\n }}\" mode=\"dark\">\n <span class=\"related__item__content_name\" #itemName>{{\n getItemChipName(item)\n }}</span>\n <mat-icon *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\"\n (click)=\"removeCheckedNodeList(item)\">cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <mat-divider class=\"w-100 mb-3\"></mat-divider>\n <button class=\"me-2\" qms-btn-text [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\"\n (click)=\"onCloseClick()\">\n {{ LANG.CANCEL }}\n </button>\n <button *ngIf=\"!checkedNodeList.length\" qms-btn style=\"margin-top: 7px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }}\n </button>\n <button *ngIf=\"checkedNodeList.length\" qms-btn style=\"margin-top: 0px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\n </button>\n</mat-dialog-actions>\n\n<!-- \n<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\n <div id=\"qmslib_related_popup_header\">\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\n <mat-icon mat-icon>close</mat-icon>\n </span>\n <div *ngIf=\"canUploadImage || canUploadVideo || canUpdateVideoProperties\" id=\"qmslib_related_popup_header_001\"\n [ngClass]=\"{\n panel_header_height_with_video_upload: canUploadVideo,\n panel_header_height_without_video_upload: !canUploadVideo && canUploadImage && canUpdateVideoProperties\n }\" mat-dialog-content class=\"row\">\n <div *ngIf=\"canUploadImage\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadImageName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputImageType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputImageFile? qmsInputImageFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingImageFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputImageFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensions\"\n accept=\".pjp, .jpg, .pjpeg, .jpeg, .jfif, .png, .gif, .bmp, .webp, .tif, .tiff\"\n [maxSize]=\"maxVideoThumbnailSizeKB\" (change)=\"onChangeImage($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingImageFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputImageFile && qmsInputImageFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputImageFile()\" [disabled]=\"isLoadingImageFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputImageFile && qmsInputImageFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.EXTENSION_IS_NOT_SUPPORTED }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_IMAGE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.poster\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div class=\"selected-image col-12\">\n <div *ngIf=\"canUploadVideo\" class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadFileName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputVideoType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputVideoFile? qmsInputVideoFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingVideoFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputVideoFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensionsForVideo\" accept=\".mp4\" (change)=\"onChangeFile($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingVideoFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputVideoFile()\" [disabled]=\"isLoadingVideoFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.ACCEPT_MP4_ONLY }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\" *ngIf=\"canUpdateVideoProperties\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_SOURCE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.src\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div *ngIf=\"canUpdateVideoProperties\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.WIDTH }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.width\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.HEIGHT }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.height\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>Id</mat-label>\n <input matInput [(ngModel)]=\"videoData.id\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <span class=\"module-name\">{{ moduleName | uppercase }}</span>\n </div>\n </div>\n\n <div id=\"qmslib_related_popup_search\" class=\"input__field\">\n <input type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput [formControl]=\"myControl\" [matAutocomplete]=\"auto\" />\n <mat-icon>search</mat-icon>\n </div>\n\n <div class=\"line__divider\"></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"mat-autocomplete_related-viewport\"\n (optionSelected)=\"selectRelated($event.option.value)\" [displayWith]=\"displayWhenSelectRelatedOption\">\n <cdk-virtual-scroll-viewport qms-scrollbar itemSize=\"10\" [class.related-viewport]=\"isInputValue\"\n *ngIf=\"filteredOptions.length\">\n <ng-container *ngFor=\"let type of searchOrder\">\n <div class=\"search__module-result\" *ngIf=\"canShowSearchOption(type.value)\">\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\n <mat-option class=\"search__option\" *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\n [value]=\"option\" [disabled]=\"option.disabled\">\n <qms-list-item type=\"image-square\">\n <mat-icon leading-icon type=\"image-square\" [svgIcon]=\"getNodeIcon(option)\"></mat-icon>\n <div qms-list-header>\n <div qms-line type=\"caption\" qms-tool-tip=\"{{\n isEllipsisActive(searchItemResult) ? option.parentName : ''\n }}\" mode=\"dark\" *ngIf=\"getParentName(option)\">\n <span #searchItemResult class=\"search__result__parent-name\">\n {{ option.parentName }}\n </span>\n </div>\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\n {{ option.itemName }}\n </div>\n <div class=\"caption\" *ngIf=\"option.breadcumbs && option.breadcumbs.length\">\n <qms-breadcrumb class=\"breadcrumb-container\" type=\"table\" numDisplayItem=\"1\"\n [nodes]=\"option.breadcumbs\">\n </qms-breadcrumb>\n </div>\n </div>\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\n <span>\n <mat-icon class=\"material-icons-outlined search__description-icon\">local_offer</mat-icon>\n </span>\n {{ getItemId(option) }}\n </div>\n </qms-list-item>\n </mat-option>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </mat-autocomplete>\n\n <div class=\"row\">\n <div class=\"qms-scrollbar qmslib_related_popup_content\" [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length,\n panel__content_height_with_upload: canUploadImage && !checkedNodeList.length,\n panel__content_item_height_with_upload: canUploadImage && checkedNodeList.length,\n 'col-6': splitView,\n 'col-12': !splitView\n }\">\n <ng-container *ngIf=\"treeData1.length > 0\">\n <mat-expansion-panel hideToggle id=\"qmslib_related_popup_common_001\" [expanded]=\"isCommonExpanded\"\n (opened)=\"isCommonExpanded = true\" (closed)=\"isCommonExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\n {{ LANG.PROCESSES | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.deviation\">\n {{ LANG.DEVIATION | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.checklist\">\n {{ LANG.CHECKLIST | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.risk\">\n {{ LANG.ASSESSMENT | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_common_002\">\n <qms-tree [treeData]=\"treeData1\" [treeConfig]=\"treeConfig1\" [selectedData]=\"selectedData\"\n [selectedRiskData]=\"selectedRiskData\" [disabledList]=\"disabledList\"\n (checkBoxEvent)=\"getCommonCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeProcess($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n\n <ng-container *ngIf=\"treeData2.length > 0\">\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\n\n <mat-expansion-panel hideToggle *ngIf=\"moduleId === module.documentProcess\"\n id=\"qmslib_related_popup_document_001\" [expanded]=\"isDocumentExpanded\" (opened)=\"isDocumentExpanded = true\"\n (closed)=\"isDocumentExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title>\n {{ LANG.DOCUMENTS | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isDocumentExpanded\n ? \"keyboard_arrow_up\"\n : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_document_002\">\n <qms-tree [treeData]=\"treeData2\" [treeConfig]=\"treeConfig2\" [selectedData]=\"selectedData2\"\n [disabledList]=\"disabledList2\" (checkBoxEvent)=\"getDocumentCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\n (selectNodeEvent)=\"selectNodeTree2Event($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeDocument($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </div>\n <div *ngIf=\"splitView\" class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\n [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length\n }\">\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\n {{ splitViewTitle }}\n </div>\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\n <mat-checkbox qms-group-options [disabled]=\"node.disabled\" color=\"default\" [checked]=\"isNodeSelected(node)\"\n (change)=\"toggleSelectItem(node)\"></mat-checkbox>\n <mat-icon class=\"mat-icon-rtl-mirror material-icons-outlined\" [svgIcon]=\"getNodeIcon(node)\"></mat-icon>\n <span class=\"text-node\">{{ node.itemName }}</span>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\n\n <div class=\"row\">\n <div class=\"col-12 pr-0 pe-0\">\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\n <button *ngIf=\"item.itemName\" mat-button class=\"related__item__content\" qms-tool-tip=\"{{\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\n }}\" mode=\"dark\">\n <span class=\"related__item__content_name\" #itemName>{{\n getItemChipName(item)\n }}</span>\n <mat-icon *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\"\n (click)=\"removeCheckedNodeList(item)\">cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"line__divider\"></div>\n\n <div class=\"confirm__button__groups\">\n <button *ngIf=\"!checkedNodeList.length\" qms-btn style=\"margin-top: 7px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }}\n </button>\n <button *ngIf=\"checkedNodeList.length\" qms-btn style=\"margin-top: 0px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\n </button>\n <button qms-btn-text [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\" (click)=\"onCloseClick()\">\n {{ LANG.CANCEL }}\n </button>\n </div>\n</div> -->", styles: ["::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{background:#0000001f;background-clip:content-box}::-webkit-scrollbar-thumb{background:#00000061;border-radius:20px;width:4px;border:4px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:#00000080;background-clip:content-box;border:4px solid transparent}.qms__popup .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qms__danger button{border:none;color:var(--text-white);padding:0;text-align:center;text-decoration:none;display:inline-block;cursor:pointer;height:20px;width:20px;font-family:Open Sans;font-size:12px;font-weight:600;font-style:normal;line-height:16px}.qms__danger .red{background-color:var(--button-red-background);margin-left:10px}.qms__danger .yellow{background-color:var(--button-yellow-background);margin-left:10px;color:var(--popup-title-color)}.qms__danger .green{background-color:var(--button-green-background);margin-left:10px}.confirm__button__groups{margin-top:11px}.confirm__button__groups button{min-height:36px;width:auto;font-family:Open Sans;font-weight:500;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px;margin-right:5px;float:right}.confirm__button__groups .confirm{background:var(--button-background)}.confirm__button__groups .confirm:hover{background:var(--primary-button-background-color);color:var(--primary-button-text-color)}.confirm__button__groups .confirm:disabled{cursor:not-allowed}.confirm__button__groups .cancel{background:var(--button-background)}.confirm__button__groups .cancel:hover{background:var(--primary-button-background-color);color:var(--primary-button-text-color)}.sticky-block{position:sticky;top:-1px;left:0;right:0;background:#fdfbff}.qmslib__related__popup__container .input__field{display:flex;align-items:center}.qmslib__related__popup__container .input__field input{width:100%;padding:10px;outline:none;border:none;background:var(--background-input-text)}.qmslib__related__popup__container .input__field .mat-icon{margin-left:-30px;cursor:pointer;vertical-align:middle}.qmslib__related__popup__container .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qmslib__related__popup__container .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qmslib__related__popup__container .panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_height_with_upload{height:380px}.qmslib__related__popup__container .panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_item_height_with_upload{height:257px}.qmslib__related__popup__container .panel-tree .mat-expansion-panel-body{padding:0 12px 12px}.qmslib__related__popup__container .mat-expansion-panel-header{height:30px;font-size:12px;letter-spacing:1px;font-family:Raleway;font-weight:600;padding:0}.qmslib__related__popup__container .mat-expansion-panel-header .mat-expansion-panel-header-title{align-items:center;margin-left:12px}.qmslib__related__popup__container .mat-expansion-panel-header .related_popup_toggle-btn{width:1.5rem;height:1.5rem;line-height:1.5rem}.qmslib__related__popup__container .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none}.qmslib__related__popup__container .panel__item{height:100px;margin-top:12px;overflow-x:hidden;overflow-y:auto;padding-right:5px;width:100%;max-width:100%;display:flex;flex-wrap:wrap;align-content:flex-start}.qmslib__related__popup__container .panel__item .related__item__inline{max-width:100%}.qmslib__related__popup__container .panel__item .related__item__content{height:32px;line-height:32px;background-color:var(--related-item-background);max-width:100%;margin-bottom:5px;margin-left:2.5px;margin-right:2.5px}.qmslib__related__popup__container .panel__item .related__item__content .mat-icon{color:var(--related-mat-icon-color);font-size:24px}.qmslib__related__popup__container .panel__item .related__item__content span.related__item__content_name{display:inline-block;min-width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:278px}.qmslib__related__popup__container .qmslib-related-popup-splitview{background-color:#fff;border-left:1px solid #ccc;height:450px;overflow-y:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview .splitview-header{font-size:12px;letter-spacing:1px;font-family:RALEWAY;font-weight:600;display:flex;align-items:center}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-mdc-checkbox.qms-group-options{padding:0}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-mdc-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:11px}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-mdc-checkbox.qms-group-options.mat-checkbox-checked{background:transparent!important}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node{margin-left:8px;display:flex;align-items:center;min-height:40px}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon{color:#0009;margin-right:17px;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon svg{display:block;min-width:fit-content}.qmslib__related__popup__container .module-name{margin-top:10px;display:block;font-weight:600;font-family:Raleway}.qmslib__related__popup__container input::-webkit-outer-spin-button,.qmslib__related__popup__container input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.qmslib__related__popup__container input[type=number]{-moz-appearance:textfield}.qmslib__related__popup__container .panel_header_height_with_video_upload{height:350px}.qmslib__related__popup__container .panel_header_height_without_video_upload{height:300px}cdk-virtual-scroll-viewport{overflow-x:hidden}cdk-virtual-scroll-viewport .search__module-result{margin:1.5rem;padding:0 0 .5rem 0px}cdk-virtual-scroll-viewport .search__module-result .search__module-title{font-size:14px;font-weight:600}cdk-virtual-scroll-viewport .search__module-result .search__option{height:auto;line-height:normal;padding:8px 0;border-bottom:1px solid #e0e0e0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item.mat-2-line.image-item{height:auto}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content{margin:0;border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square{width:2.5rem;height:100%;background:transparent;align-self:center;margin-right:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square img{width:24px;height:24px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .material-icons-outlined.leading-icon,cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content mat-icon.leading-icon{padding:4px 0 4px 4px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .subtitle{font-weight:400}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption{overflow:hidden;line-height:normal;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;padding:0;margin:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption span.search__result__parent-name{display:inline-block;width:auto;width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .default-subtitle{color:#00000061}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .search__description-icon{margin-right:0;width:12px;height:12px;font-size:12px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .qms-list-text{border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .breadcrumb-container .qms-breadcrumb-item .mat-icon{font-size:16px!important;padding-bottom:1px}cdk-virtual-scroll-viewport .search__module-result .mat-mdc-option[aria-disabled=true] .subtitle{color:#00000061}cdk-virtual-scroll-viewport .search__module-result .mat-mdc-option[aria-disabled=true] .breadcrumb-container .qms-breadcrumb-item .mat-icon{color:#00000061}cdk-virtual-scroll-viewport .search__module-result .mat-mdc-option[aria-disabled=true] .breadcrumb-container .qms-breadcrumb-item-text{color:#00000061}cdk-virtual-scroll-viewport .search__module-result svg{display:block}#qmslib_related_popup_header_001{width:100%;padding:0;font-weight:600;font-family:Raleway;margin:0}#qmslib_related_popup_header_001 .selected-image{padding-bottom:10px;width:100%}#qmslib_related_popup_header_001 .selected-image .input-upload,#qmslib_related_popup_header_001 .selected-image .module-name{width:100%;height:60px}.padding-5{padding:5px}.mat-mdc-autocomplete_related-viewport{height:100%;max-height:100%!important}.mat-mdc-autocomplete_related-viewport .cdk-virtual-scroll-content-wrapper{width:100%}.mat-mdc-autocomplete_related-viewport .related-viewport{min-height:300px}\n"] }]
|
1239
|
+
args: [{ selector: 'qms-related-popup', encapsulation: ViewEncapsulation.None, template: "<h3 mat-dialog-title class=\"more-action\">\n {{ moduleName | uppercase }}\n <button matDialogClose class=\"close-btn\" color=\"light\" qms-btn-icon (click)=\"onCloseClick()\">\n <mat-icon>close</mat-icon>\n </button>\n</h3>\n<mat-dialog-content>\n <!-- Ckeditor Using -->\n <div *ngIf=\"canUploadImage || canUploadVideo || canUpdateVideoProperties\" id=\"qmslib_related_popup_header_001\"\n [ngClass]=\"{\n panel_header_height_with_video_upload: canUploadVideo,\n panel_header_height_without_video_upload: !canUploadVideo && canUploadImage && canUpdateVideoProperties\n }\" mat-dialog-content class=\"row\">\n <div *ngIf=\"canUploadImage\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadImageName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputImageType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputImageFile? qmsInputImageFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingImageFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputImageFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensions\"\n accept=\".pjp, .jpg, .pjpeg, .jpeg, .jfif, .png, .gif, .bmp, .webp, .tif, .tiff\"\n [maxSize]=\"maxVideoThumbnailSizeKB\" (change)=\"onChangeImage($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingImageFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputImageFile && qmsInputImageFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputImageFile()\" [disabled]=\"isLoadingImageFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputImageFile && qmsInputImageFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.EXTENSION_IS_NOT_SUPPORTED }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_IMAGE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.poster\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div class=\"selected-image col-12\">\n <div *ngIf=\"canUploadVideo\" class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadFileName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputVideoType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputVideoFile? qmsInputVideoFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingVideoFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputVideoFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensionsForVideo\" accept=\".mp4\" (change)=\"onChangeFile($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingVideoFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputVideoFile()\" [disabled]=\"isLoadingVideoFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.ACCEPT_MP4_ONLY }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\" *ngIf=\"canUpdateVideoProperties\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_SOURCE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.src\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div *ngIf=\"canUpdateVideoProperties\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.WIDTH }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.width\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.HEIGHT }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.height\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>Id</mat-label>\n <input matInput [(ngModel)]=\"videoData.id\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n <!-- Related module -->\n <div class=\"sticky-block\">\n <input type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput [formControl]=\"myControl\" [matAutocomplete]=\"auto\" />\n <mat-icon>search</mat-icon>\n </div>\n <div class=\"line__divider\"></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"mat-autocomplete_related-viewport\"\n (optionSelected)=\"selectRelated($event.option.value)\" [displayWith]=\"displayWhenSelectRelatedOption\">\n <cdk-virtual-scroll-viewport qms-scrollbar itemSize=\"10\" [class.related-viewport]=\"isInputValue\"\n *ngIf=\"filteredOptions.length\">\n <ng-container *ngFor=\"let type of searchOrder\">\n <div class=\"search__module-result\" *ngIf=\"canShowSearchOption(type.value)\">\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\n <mat-option class=\"search__option\" *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\n [value]=\"option\" [disabled]=\"option.disabled\">\n <qms-list-item type=\"image-square\">\n <mat-icon leading-icon type=\"image-square\" [svgIcon]=\"getNodeIcon(option)\"></mat-icon>\n <div qms-list-header>\n <div qms-line type=\"caption\" qms-tool-tip=\"{{\n isEllipsisActive(searchItemResult) ? option.parentName : ''\n }}\" mode=\"dark\" *ngIf=\"getParentName(option)\">\n <span #searchItemResult class=\"search__result__parent-name\">\n {{ option.parentName }}\n </span>\n </div>\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\n {{ option.itemName }}\n </div>\n <div class=\"caption\" *ngIf=\"option.breadcumbs && option.breadcumbs.length\">\n <qms-breadcrumb class=\"breadcrumb-container\" type=\"table\" numDisplayItem=\"1\"\n [nodes]=\"option.breadcumbs\">\n </qms-breadcrumb>\n </div>\n </div>\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\n <span>\n <mat-icon class=\"material-icons-outlined search__description-icon\">local_offer</mat-icon>\n </span>\n {{ getItemId(option) }}\n </div>\n </qms-list-item>\n </mat-option>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </mat-autocomplete>\n\n <div class=\"row\">\n <div class=\"qms-scrollbar qmslib_related_popup_content\" [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length,\n panel__content_height_with_upload: canUploadImage && !checkedNodeList.length,\n panel__content_item_height_with_upload: canUploadImage && checkedNodeList.length,\n 'col-6': splitView,\n 'col-12': !splitView\n }\">\n <ng-container *ngIf=\"treeData1.length > 0\">\n <mat-expansion-panel hideToggle id=\"qmslib_related_popup_common_001\" [expanded]=\"isCommonExpanded\"\n (opened)=\"isCommonExpanded = true\" (closed)=\"isCommonExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\n {{ LANG.PROCESSES | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.deviation\">\n {{ LANG.DEVIATION | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.checklist\">\n {{ LANG.CHECKLIST | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.risk\">\n {{ LANG.ASSESSMENT | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_common_002\">\n <qms-tree [treeData]=\"treeData1\" [treeConfig]=\"treeConfig1\" [selectedData]=\"selectedData\"\n [selectedRiskData]=\"selectedRiskData\" [disabledList]=\"disabledList\"\n (checkBoxEvent)=\"getCommonCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeProcess($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n\n <ng-container *ngIf=\"treeData2.length > 0\">\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\n\n <mat-expansion-panel hideToggle *ngIf=\"moduleId === module.documentProcess\"\n id=\"qmslib_related_popup_document_001\" [expanded]=\"isDocumentExpanded\" (opened)=\"isDocumentExpanded = true\"\n (closed)=\"isDocumentExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title>\n {{ LANG.DOCUMENTS | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isDocumentExpanded\n ? \"keyboard_arrow_up\"\n : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_document_002\">\n <qms-tree [treeData]=\"treeData2\" [treeConfig]=\"treeConfig2\" [selectedData]=\"selectedData2\"\n [disabledList]=\"disabledList2\" (checkBoxEvent)=\"getDocumentCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\n (selectNodeEvent)=\"selectNodeTree2Event($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeDocument($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </div>\n <div *ngIf=\"splitView\" class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\n [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length\n }\">\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\n {{ splitViewTitle }}\n </div>\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\n <mat-checkbox qms-group-options [disabled]=\"node.disabled\" color=\"default\" [checked]=\"isNodeSelected(node)\"\n (change)=\"toggleSelectItem(node)\"></mat-checkbox>\n <mat-icon class=\"mat-icon-rtl-mirror material-icons-outlined\" [svgIcon]=\"getNodeIcon(node)\"></mat-icon>\n <span class=\"text-node\">{{ node.itemName }}</span>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\n\n <div class=\"row\">\n <div class=\"col-12 pr-0 pe-0\">\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\n <button *ngIf=\"item.itemName\" mat-button class=\"related__item__content\" qms-tool-tip=\"{{\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\n }}\" mode=\"dark\">\n <span class=\"related__item__content_name\" #itemName>{{\n getItemChipName(item)\n }}</span>\n <mat-icon *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\"\n (click)=\"removeCheckedNodeList(item)\">cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n</mat-dialog-content>\n<mat-dialog-actions align=\"end\">\n <mat-divider class=\"w-100 mb-3\"></mat-divider>\n <button class=\"me-2\" qms-btn-text [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\"\n (click)=\"onCloseClick()\">\n {{ LANG.CANCEL }}\n </button>\n <button *ngIf=\"!checkedNodeList.length\" qms-btn style=\"margin-top: 7px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }}\n </button>\n <button *ngIf=\"checkedNodeList.length\" qms-btn style=\"margin-top: 0px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\n </button>\n</mat-dialog-actions>\n\n<!-- \n<div id=\"qmslib_related_popup\" class=\"qmslib__related__popup__container\">\n <div id=\"qmslib_related_popup_header\">\n <span mat-icon-button class=\"button__close\" (click)=\"onCloseClick()\">\n <mat-icon mat-icon>close</mat-icon>\n </span>\n <div *ngIf=\"canUploadImage || canUploadVideo || canUpdateVideoProperties\" id=\"qmslib_related_popup_header_001\"\n [ngClass]=\"{\n panel_header_height_with_video_upload: canUploadVideo,\n panel_header_height_without_video_upload: !canUploadVideo && canUploadImage && canUpdateVideoProperties\n }\" mat-dialog-content class=\"row\">\n <div *ngIf=\"canUploadImage\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadImageName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputImageType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputImageFile? qmsInputImageFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingImageFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputImageFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensions\"\n accept=\".pjp, .jpg, .pjpeg, .jpeg, .jfif, .png, .gif, .bmp, .webp, .tif, .tiff\"\n [maxSize]=\"maxVideoThumbnailSizeKB\" (change)=\"onChangeImage($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingImageFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputImageFile && qmsInputImageFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputImageFile()\" [disabled]=\"isLoadingImageFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputImageFile && qmsInputImageFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.EXTENSION_IS_NOT_SUPPORTED }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_IMAGE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.poster\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div class=\"selected-image col-12\">\n <div *ngIf=\"canUploadVideo\" class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">{{ moduleUploadFileName | uppercase }}</div>\n <div class=\"col-md-8\">\n <form>\n <mat-form-field qms-form qms-file-upload appearance=\"fill\" class=\"example-width input-upload\">\n <mat-icon matPrefix svgIcon=\"upload\"></mat-icon>\n <input matInput placeholder=\"Upload file\" [formControl]=\"qmsInputVideoType\" qms-file-upload-display\n #fileDisplay value=\"{{qmsInputVideoFile? qmsInputVideoFile.fileName : ''}}\"\n [attr.disabled]=\"isLoadingVideoFile ? 'disabled' : null\" readonly>\n <input hidden type=\"file\" [(inputFile)]=\"qmsInputVideoFile\" qms-file-upload-selector #fileSelector\n [acceptExtensions]=\"acceptExtensionsForVideo\" accept=\".mp4\" (change)=\"onChangeFile($event)\">\n\n <mat-progress-spinner matSuffix mode=\"indeterminate\" diameter='20'\n *ngIf=\"isLoadingVideoFile\"></mat-progress-spinner>\n <div matSuffix qms-input-clear *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.fileName\">\n <button qms-btn-icon color=\"light\" (click)=\"clearQMSInputVideoFile()\" [disabled]=\"isLoadingVideoFile\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <mat-error *ngIf=\"qmsInputVideoFile && qmsInputVideoFile.typeError == 1\">\n {{ LANG.QMSCKEDITOR.ACCEPT_MP4_ONLY }}\n </mat-error>\n </mat-form-field>\n </form>\n </div>\n </div>\n <div class=\"row d-flex align-items-center\" *ngIf=\"canUpdateVideoProperties\">\n <div class=\"col-md-4\">{{ LANG.QMSCKEDITOR.VIDEO_SOURCE | uppercase}}:</div>\n <div class=\"col-md-8\">\n <mat-form-field class=\"example-width input-upload\">\n <input matInput [(ngModel)]=\"videoData.src\">\n </mat-form-field>\n </div>\n </div>\n </div>\n <div *ngIf=\"canUpdateVideoProperties\" class=\"selected-image col-12\">\n <div class=\"row d-flex align-items-center\">\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.WIDTH }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.width\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>{{ LANG.HEIGHT }}</mat-label>\n <input type=\"number\" matInput [(ngModel)]=\"videoData.height\">\n </mat-form-field>\n </div>\n <div class=\"col-md-4\">\n <mat-form-field class=\"example-width input-upload\">\n <mat-label>Id</mat-label>\n <input matInput [(ngModel)]=\"videoData.id\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n <div class=\"row\">\n <span class=\"module-name\">{{ moduleName | uppercase }}</span>\n </div>\n </div>\n\n <div id=\"qmslib_related_popup_search\" class=\"input__field\">\n <input type=\"text\" placeholder=\"{{ LANG.SEARCH }}\" matInput [formControl]=\"myControl\" [matAutocomplete]=\"auto\" />\n <mat-icon>search</mat-icon>\n </div>\n\n <div class=\"line__divider\"></div>\n\n <mat-autocomplete #auto=\"matAutocomplete\" class=\"mat-autocomplete_related-viewport\"\n (optionSelected)=\"selectRelated($event.option.value)\" [displayWith]=\"displayWhenSelectRelatedOption\">\n <cdk-virtual-scroll-viewport qms-scrollbar itemSize=\"10\" [class.related-viewport]=\"isInputValue\"\n *ngIf=\"filteredOptions.length\">\n <ng-container *ngFor=\"let type of searchOrder\">\n <div class=\"search__module-result\" *ngIf=\"canShowSearchOption(type.value)\">\n <span class=\"search__module-title\">{{ getTitle(type.value) }}</span>\n <mat-option class=\"search__option\" *ngFor=\"let option of getModuleFilteredOptions(type.value)\"\n [value]=\"option\" [disabled]=\"option.disabled\">\n <qms-list-item type=\"image-square\">\n <mat-icon leading-icon type=\"image-square\" [svgIcon]=\"getNodeIcon(option)\"></mat-icon>\n <div qms-list-header>\n <div qms-line type=\"caption\" qms-tool-tip=\"{{\n isEllipsisActive(searchItemResult) ? option.parentName : ''\n }}\" mode=\"dark\" *ngIf=\"getParentName(option)\">\n <span #searchItemResult class=\"search__result__parent-name\">\n {{ option.parentName }}\n </span>\n </div>\n <div qms-line type=\"subtitle\" class=\"search__option-name\">\n {{ option.itemName }}\n </div>\n <div class=\"caption\" *ngIf=\"option.breadcumbs && option.breadcumbs.length\">\n <qms-breadcrumb class=\"breadcrumb-container\" type=\"table\" numDisplayItem=\"1\"\n [nodes]=\"option.breadcumbs\">\n </qms-breadcrumb>\n </div>\n </div>\n <div qms-line color=\"default-subtitle\" *ngIf=\"getItemId(option)\">\n <span>\n <mat-icon class=\"material-icons-outlined search__description-icon\">local_offer</mat-icon>\n </span>\n {{ getItemId(option) }}\n </div>\n </qms-list-item>\n </mat-option>\n </div>\n </ng-container>\n </cdk-virtual-scroll-viewport>\n </mat-autocomplete>\n\n <div class=\"row\">\n <div class=\"qms-scrollbar qmslib_related_popup_content\" [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length,\n panel__content_height_with_upload: canUploadImage && !checkedNodeList.length,\n panel__content_item_height_with_upload: canUploadImage && checkedNodeList.length,\n 'col-6': splitView,\n 'col-12': !splitView\n }\">\n <ng-container *ngIf=\"treeData1.length > 0\">\n <mat-expansion-panel hideToggle id=\"qmslib_related_popup_common_001\" [expanded]=\"isCommonExpanded\"\n (opened)=\"isCommonExpanded = true\" (closed)=\"isCommonExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title *ngIf=\"moduleId === module.documentProcess\">\n {{ LANG.PROCESSES | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.deviation\">\n {{ LANG.DEVIATION | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.checklist\">\n {{ LANG.CHECKLIST | uppercase }}\n </mat-panel-title>\n <mat-panel-title *ngIf=\"moduleId === module.risk\">\n {{ LANG.ASSESSMENT | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isCommonExpanded ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_common_002\">\n <qms-tree [treeData]=\"treeData1\" [treeConfig]=\"treeConfig1\" [selectedData]=\"selectedData\"\n [selectedRiskData]=\"selectedRiskData\" [disabledList]=\"disabledList\"\n (checkBoxEvent)=\"getCommonCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.area)\"\n (selectNodeEvent)=\"selectNodeTreeEvent($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeProcess($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n\n <ng-container *ngIf=\"treeData2.length > 0\">\n <div *ngIf=\"moduleId === module.documentProcess\" class=\"line__divider\"></div>\n\n <mat-expansion-panel hideToggle *ngIf=\"moduleId === module.documentProcess\"\n id=\"qmslib_related_popup_document_001\" [expanded]=\"isDocumentExpanded\" (opened)=\"isDocumentExpanded = true\"\n (closed)=\"isDocumentExpanded = false\" class=\"panel-tree\">\n <mat-expansion-panel-header class=\"padding-5\">\n <mat-panel-title>\n {{ LANG.DOCUMENTS | uppercase }}\n </mat-panel-title>\n <button qms-btn-icon class=\"related_popup_toggle-btn\">\n <mat-icon>\n {{\n isDocumentExpanded\n ? \"keyboard_arrow_up\"\n : \"keyboard_arrow_down\"\n }}\n </mat-icon>\n </button>\n </mat-expansion-panel-header>\n <div id=\"qmslib_related_popup_document_002\">\n <qms-tree [treeData]=\"treeData2\" [treeConfig]=\"treeConfig2\" [selectedData]=\"selectedData2\"\n [disabledList]=\"disabledList2\" (checkBoxEvent)=\"getDocumentCheckedNode($event)\"\n (nodeExpandEvent)=\"getChildrenOfFolder($event, dataType.folder)\"\n (selectNodeEvent)=\"selectNodeTree2Event($event)\" (getChildNodeSelectOne)=\"getChildNodeSelectOne($event)\"\n [expandOnTitleClick]=\"!splitView\" [parentNodeOnClick]=\"parentNodeSelected\"\n (treeControlNodes)=\"selectTreeControlNodeDocument($event)\"></qms-tree>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </div>\n <div *ngIf=\"splitView\" class=\"qms-scrollbar qmslib-related-popup-splitview qmslib_related_popup_content col-6\"\n [ngClass]=\"{\n panel__content_item: checkedNodeList.length,\n panel__content: !checkedNodeList.length\n }\">\n <div class=\"splitview-header\" *ngIf=\"selectedFolder\">\n {{ splitViewTitle }}\n </div>\n <div class=\"expand-node\" *ngFor=\"let node of itemInSplitview\">\n <mat-checkbox qms-group-options [disabled]=\"node.disabled\" color=\"default\" [checked]=\"isNodeSelected(node)\"\n (change)=\"toggleSelectItem(node)\"></mat-checkbox>\n <mat-icon class=\"mat-icon-rtl-mirror material-icons-outlined\" [svgIcon]=\"getNodeIcon(node)\"></mat-icon>\n <span class=\"text-node\">{{ node.itemName }}</span>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"checkedNodeList.length\" class=\"line__divider\"></div>\n\n <div class=\"row\">\n <div class=\"col-12 pr-0 pe-0\">\n <div *ngIf=\"checkedNodeList.length\" class=\"panel__item qms-scrollbar\">\n <div class=\"related__item__inline\" *ngFor=\"let item of checkedNodeList\">\n <button *ngIf=\"item.itemName\" mat-button class=\"related__item__content\" qms-tool-tip=\"{{\n isEllipsisActive(itemName) ? getItemChipName(item) : ''\n }}\" mode=\"dark\">\n <span class=\"related__item__content_name\" #itemName>{{\n getItemChipName(item)\n }}</span>\n <mat-icon *ngIf=\"!(treeConfig1?.selectOne || treeConfig2?.selectOne)\"\n (click)=\"removeCheckedNodeList(item)\">cancel</mat-icon>\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"line__divider\"></div>\n\n <div class=\"confirm__button__groups\">\n <button *ngIf=\"!checkedNodeList.length\" qms-btn style=\"margin-top: 7px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }}\n </button>\n <button *ngIf=\"checkedNodeList.length\" qms-btn style=\"margin-top: 0px\"\n [disabled]=\"isLoadingVideoFile || isLoadingImageFile\" (click)=\"onAddClick()\">\n {{ LANG.ADD }} ({{ checkedNodeList.length }})\n </button>\n <button qms-btn-text [ngStyle]=\"{ 'margin-top': checkedNodeList.length ? '0px' : '7px' }\" (click)=\"onCloseClick()\">\n {{ LANG.CANCEL }}\n </button>\n </div>\n</div> -->", styles: ["::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{background:#0000001f;background-clip:content-box}::-webkit-scrollbar-thumb{background:#00000061;border-radius:20px;width:4px;border:4px solid transparent;background-clip:content-box}::-webkit-scrollbar-thumb:hover{background:#00000080;background-clip:content-box;border:4px solid transparent}.qms__popup .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qms__danger button{border:none;color:var(--text-white);padding:0;text-align:center;text-decoration:none;display:inline-block;cursor:pointer;height:20px;width:20px;font-family:Open Sans;font-size:12px;font-weight:600;font-style:normal;line-height:16px}.qms__danger .red{background-color:var(--button-red-background);margin-left:10px}.qms__danger .yellow{background-color:var(--button-yellow-background);margin-left:10px;color:var(--popup-title-color)}.qms__danger .green{background-color:var(--button-green-background);margin-left:10px}.confirm__button__groups{margin-top:11px}.confirm__button__groups button{min-height:36px;width:auto;font-family:Open Sans;font-weight:500;font-size:14px;letter-spacing:1px;line-height:16px;padding-left:15px;padding-right:15px;margin-right:5px;float:right}.confirm__button__groups .confirm{background:var(--button-background)}.confirm__button__groups .confirm:hover{background:var(--primary-button-background-color);color:var(--primary-button-text-color)}.confirm__button__groups .confirm:disabled{cursor:not-allowed}.confirm__button__groups .cancel{background:var(--button-background)}.confirm__button__groups .cancel:hover{background:var(--primary-button-background-color);color:var(--primary-button-text-color)}.sticky-block{position:sticky;top:-1px;left:0;right:0;background:#fdfbff}.qmslib__related__popup__container .input__field{display:flex;align-items:center}.qmslib__related__popup__container .input__field input{width:100%;padding:10px;outline:none;border:none;background:var(--background-input-text)}.qmslib__related__popup__container .input__field .mat-icon{margin-left:-30px;cursor:pointer;vertical-align:middle}.qmslib__related__popup__container .line__divider{border-bottom:1px solid #ccc;height:1px;margin-top:10px;min-width:300px;max-width:100%}.qmslib__related__popup__container .button__close{float:right;top:-24px;right:-24px;cursor:pointer}.qmslib__related__popup__container .panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_height_with_upload{height:380px}.qmslib__related__popup__container .panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .panel__content_item_height_with_upload{height:257px}.qmslib__related__popup__container .panel-tree .mat-expansion-panel-body{padding:0 12px 12px}.qmslib__related__popup__container .mat-expansion-panel-header{height:30px;font-size:12px;letter-spacing:1px;font-family:Raleway;font-weight:600;padding:0}.qmslib__related__popup__container .mat-expansion-panel-header .mat-expansion-panel-header-title{align-items:center;margin-left:12px}.qmslib__related__popup__container .mat-expansion-panel-header .related_popup_toggle-btn{width:1.5rem;height:1.5rem;line-height:1.5rem}.qmslib__related__popup__container .mat-expansion-panel:not([class*=mat-elevation-z]){box-shadow:none}.qmslib__related__popup__container .panel__item{height:100px;margin-top:12px;overflow-x:hidden;overflow-y:auto;padding-right:5px;width:100%;max-width:100%;display:flex;flex-wrap:wrap;align-content:flex-start}.qmslib__related__popup__container .panel__item .related__item__inline{max-width:100%}.qmslib__related__popup__container .panel__item .related__item__content{height:32px;line-height:32px;background-color:var(--related-item-background);max-width:100%;margin-bottom:5px;margin-left:2.5px;margin-right:2.5px}.qmslib__related__popup__container .panel__item .related__item__content .mat-icon{color:var(--related-mat-icon-color);font-size:24px}.qmslib__related__popup__container .panel__item .related__item__content span.related__item__content_name{display:inline-block;min-width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:278px}.qmslib__related__popup__container .qmslib-related-popup-splitview{background-color:#fff;border-left:1px solid #ccc;height:450px;overflow-y:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content{height:450px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview.panel__content_item{height:350px;overflow:auto;margin-top:12px}.qmslib__related__popup__container .qmslib-related-popup-splitview .splitview-header{font-size:12px;letter-spacing:1px;font-family:RALEWAY;font-weight:600;display:flex;align-items:center}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-mdc-checkbox.qms-group-options{padding:0}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-mdc-checkbox.qms-group-options .mat-checkbox-inner-container{margin-right:11px}.qmslib__related__popup__container .qmslib-related-popup-splitview .mat-mdc-checkbox.qms-group-options.mat-checkbox-checked{background:transparent!important}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node{margin-left:8px;display:flex;align-items:center;min-height:40px}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon{color:#0009;margin-right:17px;min-width:fit-content}.qmslib__related__popup__container .qmslib-related-popup-splitview .expand-node .mat-icon svg{display:block;min-width:fit-content}.qmslib__related__popup__container .module-name{margin-top:10px;display:block;font-weight:600;font-family:Raleway}.qmslib__related__popup__container input::-webkit-outer-spin-button,.qmslib__related__popup__container input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.qmslib__related__popup__container input[type=number]{-moz-appearance:textfield}.qmslib__related__popup__container .panel_header_height_with_video_upload{height:350px}.qmslib__related__popup__container .panel_header_height_without_video_upload{height:300px}cdk-virtual-scroll-viewport{overflow-x:hidden}cdk-virtual-scroll-viewport .search__module-result{margin:1.5rem;padding:0 0 .5rem 0px}cdk-virtual-scroll-viewport .search__module-result .search__module-title{font-size:14px;font-weight:600}cdk-virtual-scroll-viewport .search__module-result .search__option{height:auto;line-height:normal;padding:8px 0;border-bottom:1px solid #e0e0e0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item.mat-2-line.image-item{height:auto}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content{margin:0;border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square{width:2.5rem;height:100%;background:transparent;align-self:center;margin-right:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .wrap-image.image-square img{width:24px;height:24px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .material-icons-outlined.leading-icon,cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content mat-icon.leading-icon{padding:4px 0 4px 4px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .subtitle{font-weight:400}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption{overflow:hidden;line-height:normal;white-space:normal;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;padding:0;margin:0}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .caption span.search__result__parent-name{display:inline-block;width:auto;width:calc(100% - 13px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .default-subtitle{color:#00000061}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .search__description-icon{margin-right:0;width:12px;height:12px;font-size:12px}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .qms-list-text{border-bottom:none}cdk-virtual-scroll-viewport .search__module-result .search__option .qms-list-item-content .breadcrumb-container .qms-breadcrumb-item .mat-icon{font-size:16px!important;padding-bottom:1px}cdk-virtual-scroll-viewport .search__module-result .mat-mdc-option[aria-disabled=true] .subtitle{color:#00000061}cdk-virtual-scroll-viewport .search__module-result .mat-mdc-option[aria-disabled=true] .breadcrumb-container .qms-breadcrumb-item .mat-icon{color:#00000061}cdk-virtual-scroll-viewport .search__module-result .mat-mdc-option[aria-disabled=true] .breadcrumb-container .qms-breadcrumb-item-text{color:#00000061}cdk-virtual-scroll-viewport .search__module-result svg{display:block}#qmslib_related_popup_header_001{width:100%;padding:0;font-weight:600;font-family:Raleway;margin:0}#qmslib_related_popup_header_001 .selected-image{padding-bottom:10px;width:100%}#qmslib_related_popup_header_001 .selected-image .input-upload,#qmslib_related_popup_header_001 .selected-image .module-name{width:100%;height:60px}.padding-5{padding:5px}.mat-mdc-autocomplete_related-viewport{height:100%;max-height:100%!important}.mat-mdc-autocomplete_related-viewport .cdk-virtual-scroll-content-wrapper{width:100%}.mat-mdc-autocomplete_related-viewport .related-viewport{min-height:300px}\n"] }]
|
1240
1240
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.TranslateLibraryService }, { type: i2.MatDialogRef }, { type: i3.QMSRelatedGlobalService }, { type: i4.MatIconRegistry }, { type: i5.DomSanitizer }, { type: i6.QMSIconRegistryService }, { type: i0.ElementRef }, { type: i7.QMSCKEditorUploadService }, { type: i2.MatDialog }, { type: i31.PopupData, decorators: [{
|
1241
1241
|
type: Inject,
|
1242
1242
|
args: [MAT_DIALOG_DATA]
|
@@ -1250,4 +1250,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
1250
1250
|
type: HostListener,
|
1251
1251
|
args: ['window:message', ['$event']]
|
1252
1252
|
}] } });
|
1253
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRlZC1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvcmVsYXRlZC9wb3B1cC9yZWxhdGVkLXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9yZWxhdGVkL3BvcHVwL3JlbGF0ZWQtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QyxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDek0sT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEUsT0FBTyxFQUFnQixlQUFlLEVBQWEsTUFBTSwwQkFBMEIsQ0FBQztBQUdwRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDbEcsT0FBTyxFQUFxQixhQUFhLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQU1wSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMs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QUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzlFLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQzsrR0E3eUNVLHFCQUFxQix5VkEyRnRCLGVBQWU7bUdBM0ZkLHFCQUFxQiw2TkE2RWMsc0JBQXNCLDBEQUZ0RCxhQUFhLGdEQ2pIN0IsdzA3QkFxa0JVOzs0RkQvaEJHLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDRSxtQkFBbUIsaUJBR2QsaUJBQWlCLENBQUMsSUFBSTs7MEJBNkZsQyxNQUFNOzJCQUFDLGVBQWU7eUNBaEJRLFNBQVM7c0JBQXpDLFlBQVk7dUJBQUMsYUFBYSxFQUFFLEVBQUU7Z0JBRy9CLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXlEcEYsU0FBUztzQkFEUixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgcmVxdWlyZWRGaWxlVHlwZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQtc2VsZWN0b3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IFFNU0ZpbGVBdHRhY2htZW50LCBGaWxlRXJyb3JUeXBlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9maWxlLXVwbG9hZC9xbXMtZmlsZS11cGxvYWQtYXR0YWNobWVudC5tb2RlbCc7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJy4uLy4uLy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXRyZWUtbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItdXBsb2FkLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJlZUNvbmZpZyB9IGZyb20gJy4uLy4uL3RyZWUvbW9kZWwvdHJlZS1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgVHJlZUZsYXROb2RlIH0gZnJvbSAnLi4vLi4vdHJlZS9tb2RlbC90cmVlLWZsYXQtbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBUcmVlTW9kZWwgfSBmcm9tICcuLi8uLi90cmVlL21vZGVsL3RyZWUubW9kZWwnO1xuaW1wb3J0IHsgVHJlZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RyZWUvdHJlZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRG9jdW1lbnROb2RlVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9kb2N1bWVudC1mb2xkZXItdHlwZS5lbnVtJztcbmltcG9ydCB7IE1vZHVsZVR5cGUgfSBmcm9tICcuLi9jb21tb24vbW9kdWxlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBSZWxhdGVkQ29uc3QgfSBmcm9tICcuLi9jb21tb24vcmVsYXRlZC5jb25zdCc7XG5pbXBvcnQgeyBQb3B1cERhdGEgfSBmcm9tICcuLi9tb2RlbC9wb3B1cC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IElSZWxhdGVkLCBSZWxhdGVkT3B0aW9uIH0gZnJvbSAnLi4vbW9kZWwvcmVsYXRlZC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IFNlbGVjdGVkTm9kZSB9IGZyb20gJy4uL21vZGVsL3NlbGVjdGVkLW5vZGUubW9kZWwnO1xuaW1wb3J0IHsgUU1TUmVsYXRlZEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3JlbGF0ZWQtZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWNvblN2ZyB9IGZyb20gJy4uLy4uLy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9jb25zdGFudHMvaWNvblN2Zy5jb25zdGFudHMnO1xuaW1wb3J0IHsgVmlkZW9Db25zdCB9IGZyb20gJy4uL2NvbW1vbi92aWRlby5jb25zdCc7XG5pbXBvcnQgeyBRTVNVcGxvYWRGaWxlRXJyb3JEaWFsb2cgfSBmcm9tICcuLi8uLi91cGxvYWQtZmlsZS1lcnJvci1kaWFsb2cvdXBsb2FkLWZpbGUtZXJyb3ItZGlhbG9nJztcbmltcG9ydCB7IFFNU0NLRWRpdG9yVmlkZW8gfSBmcm9tICcuLi8uLi8uLi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9tb2RlbHMvcW1zLWNrZWRpdG9yLXZpZGVvLm1vZGVsJztcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VudW0vZGF0YS10eXBlLmVudW0nO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Ftcy1yZWxhdGVkLXBvcHVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlbGF0ZWQtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWxhdGVkLXBvcHVwLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgUmVsYXRlZFBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xuICBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBMQU5HOiBhbnk7XG4gIG1vZHVsZUlkID0gMDtcbiAgbW9kdWxlTmFtZSA9ICcnO1xuICBtb2R1bGVVcGxvYWRJbWFnZU5hbWUgPSAnJztcbiAgbW9kdWxlVXBsb2FkRmlsZU5hbWUgPSAnJztcbiAgdHJlZURhdGExOiBBcnJheTxUcmVlTW9kZWw+ID0gW107XG4gIHRyZWVEYXRhMjogQXJyYXk8VHJlZU1vZGVsPiA9IFtdO1xuICB0cmVlQ29uZmlnMTogVHJlZUNvbmZpZztcbiAgdHJlZUNvbmZpZzI6IFRyZWVDb25maWc7XG5cbiAgY2hlY2tlZE5vZGVMaXN0OiBBcnJheTxTZWxlY3RlZE5vZGU+ID0gW107XG4gIHNlbGVjdGVkTm9kZTogQXJyYXk8U2VsZWN0ZWROb2RlPiA9IFtdO1xuICBzZWxlY3RlZERhdGE6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcbiAgc2VsZWN0ZWREYXRhMjogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xuXG4gIGNvbW1vbkNoZWNrZWRMaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XG4gIGRvY3VtZW50Q2hlY2tlZExpc3Q6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcbiAgc2luZ2xlUHJvY2Vzc0xpc3Q6IEFycmF5PFNlbGVjdGVkTm9kZT4gPSBbXTtcbiAgc2luZ2xlRG9jdW1lbnRMaXN0OiBBcnJheTxTZWxlY3RlZE5vZGU+ID0gW107XG4gIHNwbGl0VmlldzogYm9vbGVhbjtcblxuICBtb2R1bGUgPSBNb2R1bGVUeXBlO1xuICBkYXRhVHlwZSA9IERhdGFUeXBlO1xuICBpdGVtVHlwZSA9IDA7XG4gIHNlbGVjdGVkUmlza0RhdGE6IGFueSA9IFtdO1xuICBkaXNhYmxlZExpc3Q6IGFueSA9IFtdO1xuICBkaXNhYmxlZExpc3QyOiBhbnkgPSBbXTtcbiAgbWF4U2VsZWN0SXRlbUNvdW50OiBudW1iZXI7XG4gIGNhbk9ubHlTZWxlY3RJdGVtOiBib29sZWFuO1xuICBjYW5VcGxvYWRJbWFnZTogYm9vbGVhbjtcbiAgY2FuVXBsb2FkVmlkZW86IGJvb2xlYW47XG5cbiAgaXNEb2N1bWVudEV4cGFuZGVkID0gdHJ1ZTtcbiAgaXNDb21tb25FeHBhbmRlZCA9IHRydWU7XG4gIHNpbmdsZVNlbGVjdGVkTm9kZSA9IGZhbHNlO1xuICBzZWFyY2hPcmRlciA9IFtdO1xuXG4gIG15Q29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgZmlsdGVyZWRPcHRpb25zOiBSZWxhdGVkT3B0aW9uW10gPSBbXTtcbiAgaXNJbnB1dFZhbHVlID0gZmFsc2U7XG5cbiAgaXRlbUluU3BsaXR2aWV3OiBJUmVsYXRlZFtdID0gW107XG4gIHNlbGVjdGVkRm9sZGVyOiBUcmVlRmxhdE5vZGUgPSBudWxsO1xuICBzcGxpdFZpZXdUaXRsZTogc3RyaW5nID0gbnVsbDtcbiAgbGlzdENoaWxkcmVuU2VsZWN0T25lOiBhbnkgPSBbXTtcblxuICBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgb25FeHBhbmRGb2xkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElSZWxhdGVkPigpO1xuICBwYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XG4gIHRyZWVDb250cm9sTm9kZVByb2Nlc3M6IGFueTtcbiAgdHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQ6IGFueTtcblxuICBhY2NlcHRFeHRlbnNpb25zID0gWydwanAnLCAnanBnJywgJ3BqcGVnJywgJ2pwZWcnLCAnamZpZicsICdwbmcnLCAnZ2lmJywgJ2JtcCcsICd3ZWJwJywgJ3RpZicsICd0aWZmJ107XG4gIGFjY2VwdEV4dGVuc2lvbnNGb3JWaWRlbyA9IFsnbXA0J107XG4gIHFtc0lucHV0SW1hZ2VUeXBlID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgW1xuICAgIHJlcXVpcmVkRmlsZVR5cGUodGhpcy5hY2NlcHRFeHRlbnNpb25zKVxuICBdKTtcbiAgcW1zSW5wdXRWaWRlb1R5cGUgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBbXG4gICAgcmVxdWlyZWRGaWxlVHlwZSh0aGlzLmFjY2VwdEV4dGVuc2lvbnNGb3JWaWRlbylcbiAgXSk7XG4gIHFtc0lucHV0SW1hZ2VGaWxlOiBRTVNGaWxlQXR0YWNobWVudCA9IG51bGw7XG4gIHFtc0lucHV0VmlkZW9GaWxlOiBRTVNGaWxlQXR0YWNobWVudCA9IG51bGw7XG4gIGlzTG9hZGluZ0ltYWdlRmlsZSA9IGZhbHNlO1xuICBpc0xvYWRpbmdWaWRlb0ZpbGUgPSBmYWxzZTtcbiAgaW1hZ2VVcGxvYWQgPSBuZXcgSW1hZ2UoKTtcbiAgbWF4VmlkZW9UaHVtYm5haWxTaXplS0I/OiBudW1iZXI7XG5cbiAgZW50aXR5SWQ6IHN0cmluZztcblxuICB2aWRlb0RhdGE6IFFNU0NLRWRpdG9yVmlkZW87XG4gIG9yaWdpblZpZGVvRGF0YVNyYzogc3RyaW5nID0gJyc7XG4gIGNhblVwZGF0ZVZpZGVvUHJvcGVydGllczogYm9vbGVhbiA9IGZhbHNlO1xuICBAVmlld0NoaWxkcmVuKFRyZWVDb21wb25lbnQsIHt9KSBkYXRhVHJlZXM6IFF1ZXJ5TGlzdDxUcmVlQ29tcG9uZW50PjtcblxuICBAVmlld0NoaWxkKCdhdXRvQ29tcGxldGVJbnB1dFNlYXJjaCcsIHsgcmVhZDogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciwgc3RhdGljOiB0cnVlIH0pXG4gIGF1dG9Db21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UmVsYXRlZFBvcHVwQ29tcG9uZW50PixcbiAgICBwdWJsaWMgZ2xvYmFsU2VydmljZTogUU1TUmVsYXRlZEdsb2JhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogUU1TQ0tFZGl0b3JVcGxvYWRTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IFBvcHVwRGF0YVxuICApIHtcbiAgICB0aGlzLm1vZHVsZUlkID0gZGF0YS5tb2R1bGVJZDtcbiAgICB0aGlzLm1vZHVsZU5hbWUgPSBkYXRhLm1vZHVsZU5hbWU7XG4gICAgdGhpcy5tb2R1bGVVcGxvYWRJbWFnZU5hbWUgPSBkYXRhLm1vZHVsZVVwbG9hZEltYWdlTmFtZTtcbiAgICB0aGlzLm1vZHVsZVVwbG9hZEZpbGVOYW1lID0gZGF0YS5tb2R1bGVVcGxvYWRGaWxlTmFtZTtcbiAgICB0aGlzLnRyZWVEYXRhMSA9IGRhdGEudHJlZURhdGExO1xuICAgIHRoaXMudHJlZURhdGEyID0gZGF0YS50cmVlRGF0YTI7XG4gICAgdGhpcy50cmVlQ29uZmlnMSA9IGRhdGEudHJlZUNvbmZpZzE7XG4gICAgdGhpcy50cmVlQ29uZmlnMiA9IGRhdGEudHJlZUNvbmZpZzI7XG4gICAgdGhpcy5zZWxlY3RlZFJpc2tEYXRhID0gZGF0YT8uc2VsZWN0ZWROb2RlIHx8IFtdO1xuICAgIHRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlID0gZGF0YS50cmVlQ29uZmlnMS5zaW5nbGVTZWxlY3RlZE5vZGU7XG4gICAgdGhpcy5kaXNhYmxlZExpc3QgPSBkYXRhLmRpc2FibGVkTGlzdCB8fCBbXTtcbiAgICB0aGlzLmRpc2FibGVkTGlzdDIgPSBkYXRhLmRpc2FibGVkTGlzdDIgfHwgW107XG4gICAgdGhpcy5zcGxpdFZpZXcgPSBkYXRhLnNwbGl0VmlldztcbiAgICB0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCA9IGRhdGEubWF4U2VsZWN0SXRlbUNvdW50O1xuICAgIHRoaXMuY2FuT25seVNlbGVjdEl0ZW0gPSBkYXRhLmNhbk9ubHlTZWxlY3RJdGVtO1xuICAgIHRoaXMuY2FuVXBsb2FkSW1hZ2UgPSBkYXRhLmNhblVwbG9hZEltYWdlO1xuICAgIHRoaXMuY2FuVXBsb2FkVmlkZW8gPSBkYXRhLmNhblVwbG9hZFZpZGVvO1xuICAgIHRoaXMubWF4VmlkZW9UaHVtYm5haWxTaXplS0IgPSAoZGF0YS5tYXhWaWRlb1RodW1ibmFpbFNpemVLQiB8fCBWaWRlb0NvbnN0LkRFRkFVTF9NQVhfVklERU9fVEhVTUJOQUlMX1NJWkVfS0IpICogMTAyNDtcbiAgICB0aGlzLmVudGl0eUlkID0gZGF0YS5lbnRpdHlJZDtcbiAgICB0aGlzLnZpZGVvRGF0YSA9IGRhdGEudmlkZW9EYXRhO1xuICAgIHRoaXMub3JpZ2luVmlkZW9EYXRhU3JjID0gZGF0YS52aWRlb0RhdGE/LnNyYyB8fCAnJztcbiAgICB0aGlzLmNhblVwZGF0ZVZpZGVvUHJvcGVydGllcyA9IGRhdGEuY2FuVXBkYXRlVmlkZW9Qcm9wZXJ0aWVzO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0ljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0FyZWFJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJGb2xkZXJJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRldmlhdGlvbkljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJSaXNrSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgaWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25MaXRlcmFsKCd1cGxvYWQnLCBzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoSWNvblN2Zy5VUExPQURfSUNPTikpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChbXSk7XG4gICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XG4gICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldFNwbGl0dmlld1ZhbHVlKFtdKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptZXNzYWdlJywgWyckZXZlbnQnXSlcbiAgb25NZXNzYWdlKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmRhdGEgPT09IFJlbGF0ZWRDb25zdC5ISURFX1NFQVJDSF9SRVNVTFQpIHtcbiAgICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLmNsb3NlUGFuZWwoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zbGF0ZS5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZWFyY2hSZWxhdGVkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnRvUmVsYXRlZE9wdGlvbnMocmVzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zcGxpdFZpZXdWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXG4gICAgICB0aGlzLml0ZW1JblNwbGl0dmlldyA9IHJlcztcbiAgICAgIGlmIChyZXMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBsaXN0Tm9kZVByb2Nlc3M6IFRyZWVNb2RlbFtdID0gW107XG4gICAgICAgIGxldCBsaXN0Tm9kZURvY3M6IFRyZWVNb2RlbFtdID0gW107XG5cbiAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MpIHtcbiAgICAgICAgICAgIGxldCBuZXdOb2RlUHJvY2VzcyA9IG5ldyBUcmVlTW9kZWwoKTtcbiAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLmNoaWxkSWQgPSBpdGVtLmlkO1xuICAgICAgICAgICAgbmV3Tm9kZVByb2Nlc3MuY2hpbGROYW1lID0gaXRlbS5pdGVtTmFtZTtcbiAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLmRpc3BsYXlJZCA9ICtpdGVtLml0ZW1OdW1iZXJJZDtcbiAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLnBhcmVudElkID0gXCJcIjtcbiAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLnJvb3RJZCA9IGl0ZW0ucGFyZW50SWQ7XG4gICAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5yb290TmFtZSA9IGl0ZW0/LnBhcmVudE5hbWU7XG4gICAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5zdWJOYW1lID0gbnVsbDtcbiAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLnN0YXR1c0lkID0gaXRlbS5zdGF0dXM7XG4gICAgICAgICAgICBsaXN0Tm9kZVByb2Nlc3MucHVzaChuZXdOb2RlUHJvY2Vzcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBuZXdOb2RlRG9jcyA9IG5ldyBUcmVlTW9kZWwoKTtcbiAgICAgICAgICAgIG5ld05vZGVEb2NzLmNoaWxkSWQgPSBpdGVtLmlkO1xuICAgICAgICAgICAgbmV3Tm9kZURvY3MuY2hpbGROYW1lID0gaXRlbS5pdGVtTmFtZTtcbiAgICAgICAgICAgIG5ld05vZGVEb2NzLmRpc3BsYXlJZCA9ICtpdGVtLml0ZW1OdW1iZXJJZDtcbiAgICAgICAgICAgIG5ld05vZGVEb2NzLnBhcmVudElkID0gXCJcIjtcbiAgICAgICAgICAgIG5ld05vZGVEb2NzLnJvb3RJZCA9IGl0ZW0ucGFyZW50SWQ7XG4gICAgICAgICAgICBuZXdOb2RlRG9jcy5yb290TmFtZSA9IGl0ZW0/LnBhcmVudE5hbWU7XG4gICAgICAgICAgICBuZXdOb2RlRG9jcy5zdWJOYW1lID0gbnVsbDtcbiAgICAgICAgICAgIG5ld05vZGVEb2NzLnN0YXR1c0lkID0gaXRlbS5zdGF0dXM7XG4gICAgICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbS5zdGF0dXNOYW1lO1xuICAgICAgICAgICAgbGlzdE5vZGVEb2NzLnB1c2gobmV3Tm9kZURvY3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgaWRzUHJvY2VzcyA9IG5ldyBTZXQodGhpcy50cmVlRGF0YTEubWFwKGQgPT4gZC5jaGlsZElkKSk7XG4gICAgICAgIHRoaXMudHJlZURhdGExID0gWy4uLnRoaXMudHJlZURhdGExLCAuLi5saXN0Tm9kZVByb2Nlc3MuZmlsdGVyKGQgPT4gIWlkc1Byb2Nlc3MuaGFzKGQuY2hpbGRJZCkpXTtcblxuICAgICAgICBsZXQgaWRzRG9jcyA9IG5ldyBTZXQodGhpcy50cmVlRGF0YTIubWFwKGQgPT4gZC5jaGlsZElkKSk7XG4gICAgICAgIHRoaXMudHJlZURhdGEyID0gWy4uLnRoaXMudHJlZURhdGEyLCAuLi5saXN0Tm9kZURvY3MuZmlsdGVyKGQgPT4gIWlkc0RvY3MuaGFzKGQuY2hpbGRJZCkpXTtcblxuXG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFtdO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFtdO1xuICAgICAgICAgIGxldCBzZWxlY3RQcm9jZXNzOiBUcmVlRmxhdE5vZGVbXSA9IFtdO1xuICAgICAgICAgIGxldCBzZWxlY3REb2N1bWVudDogVHJlZUZsYXROb2RlW10gPSBbXTtcblxuICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICBpZiAoeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzKSB7XG4gICAgICAgICAgICAgIHRoaXMudHJlZURhdGExLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRJZCAmJiB4LmlkID09PSBpdGVtLmNoaWxkSWQgfHwgIWl0ZW0uY2hpbGRJZCAmJiAoeC5pZCA9PT0gaXRlbS5yb290SWQpKSB7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RQcm9jZXNzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHgucGFyZW50SWRcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMudHJlZURhdGEyLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRJZCAmJiB4LmlkID09PSBpdGVtLmNoaWxkSWQgfHwgIWl0ZW0uY2hpbGRJZCAmJiAoeC5pZCA9PT0gaXRlbS5yb290SWQpKSB7XG4gICAgICAgICAgICAgICAgICBzZWxlY3REb2N1bWVudC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiB4Lml0ZW1OYW1lLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5wYXJlbnRJZFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEsIC4uLnNlbGVjdFByb2Nlc3NdO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YTIsIC4uLnNlbGVjdERvY3VtZW50XTtcbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICB9KTtcblxuICAgIHRoaXMubXlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxMDAwKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodmFsKSA9PiB7XG4gICAgICB0aGlzLmlzSW5wdXRWYWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLm9uU2VhcmNoUmVsYXRlZCh2YWwpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5pdGVtVHlwZSA9IHRoaXMuZ2V0RGF0YVR5cGVJZCh0aGlzLm1vZHVsZUlkKTtcbiAgICB0aGlzLnNlYXJjaE9yZGVyID0gdGhpcy5nZXRTZWFyY2hPcmRlcigpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucyAmJiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xuICAgICAgdGhpcy5zZXRSZXN1bHRIZWlnaHQoKTtcbiAgICB9XG4gICAgLy8gZWxzZSBpZiAodGhpcy5hdXRvQ29tcGxldGUpIHtcbiAgICAvLyAgIHRoaXMuYXV0b0NvbXBsZXRlLmNsb3NlUGFuZWwoKTtcbiAgICAvLyB9XG4gIH1cblxuICBnZXREYXRhVHlwZUlkKG1vZHVsZUlkOiBudW1iZXIpIHtcbiAgICBsZXQgaXRlbVR5cGU7XG4gICAgc3dpdGNoIChtb2R1bGVJZCkge1xuICAgICAgY2FzZSBNb2R1bGVUeXBlLmRvY3VtZW50UHJvY2VzczpcbiAgICAgICAgaXRlbVR5cGUgPSB0aGlzLmRhdGFUeXBlLnByb2Nlc3M7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBNb2R1bGVUeXBlLmRldmlhdGlvbjpcbiAgICAgICAgaXRlbVR5cGUgPSB0aGlzLmRhdGFUeXBlLmRldmlhdGlvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE1vZHVsZVR5cGUuY2hlY2tsaXN0OlxuICAgICAgICBpdGVtVHlwZSA9IHRoaXMuZGF0YVR5cGUuY2hlY2tsaXN0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTW9kdWxlVHlwZS5yaXNrOlxuICAgICAgICBpdGVtVHlwZSA9IHRoaXMuZGF0YVR5cGUucmlzaztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpdGVtVHlwZSA9IHRoaXMuZGF0YVR5cGUuZG9jdW1lbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbVR5cGU7XG4gIH1cblxuICByZW1vdmVDaGVja2VkTm9kZUxpc3QoaXRlbTogVHJlZUZsYXROb2RlKSB7XG4gICAgaWYgKHRoaXMudmlkZW9EYXRhKSB7XG4gICAgICB0aGlzLnZpZGVvRGF0YS5zcmMgPSB0aGlzLm9yaWdpblZpZGVvRGF0YVNyYztcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbXTtcblxuICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmlsdGVyKHggPT4gKHguaWQudG9Mb3dlckNhc2UoKSAhPT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgIT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpKTtcblxuICAgIGNvbnN0IG5ld1NlbGVjdFByb2Nlc3NMaXN0ID0gW107XG4gICAgY29uc3QgbmV3U2VsZWN0RG9jdW1lbnRMaXN0ID0gW107XG5cblxuICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QgPSB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgIT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpICE9PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICB0aGlzLnNpbmdsZVByb2Nlc3NMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5pZC50b0xvd2VyQ2FzZSgpID09PSB4LmlkLnRvTG93ZXJDYXNlKCkgJiYgZWxlbWVudC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIG5ld1NlbGVjdFByb2Nlc3NMaXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zaW5nbGVQcm9jZXNzTGlzdCA9IG5ld1NlbGVjdFByb2Nlc3NMaXN0O1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gdGhpcy5jb21tb25DaGVja2VkTGlzdDtcblxuICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdCA9IHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5maWx0ZXIoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpICE9PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSAhPT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgdGhpcy5zaW5nbGVEb2N1bWVudExpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LmlkLnRvTG93ZXJDYXNlKCkgPT09IHguaWQudG9Mb3dlckNhc2UoKSAmJiBlbGVtZW50LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgbmV3U2VsZWN0RG9jdW1lbnRMaXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc2luZ2xlRG9jdW1lbnRMaXN0ID0gbmV3U2VsZWN0RG9jdW1lbnRMaXN0O1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IHRoaXMuY29tbW9uQ2hlY2tlZExpc3Q7XG5cbiAgICAvLyB3aGVuIHJlbW92ZSBjaGVjayBub2RlIGxpc3QsIHJlbGF0ZWQgb3B0aW9ucyBuZWVkIHJlZnJlc2ggZGlzYWJsZWQgb3B0aW9uc1xuICAgIHRoaXMucmVmcmVzaFJlbGF0ZWRPcHRpb25zKCk7XG4gIH1cblxuICBpc01hdGNoVHJ1ZShhcnI6IGFueVtdLCBhcnIyOiBhbnlbXSkge1xuICAgIHJldHVybiBhcnIuZXZlcnkoKGkpID0+IHtcbiAgICAgIHJldHVybiBhcnIyLmluY2x1ZGVzKGkpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0UmVzdWx0SGVpZ2h0KGFycj86IElSZWxhdGVkW10pIHtcbiAgICBsZXQgbWF4SGVpZ2h0ID0gNDg0O1xuICAgIGNvbnN0IHBvcHVwX2NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxbXNsaWJfcmVsYXRlZF9wb3B1cF9jb250ZW50JylbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgbGluZV9fZGl2aWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVfX2RpdmlkZXInKVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAocG9wdXBfY29udGVudCAmJiBsaW5lX19kaXZpZGVyKSB7XG4gICAgICBtYXhIZWlnaHQgPSB0aGlzLmdldE9mZnNldEhlaWdodChwb3B1cF9jb250ZW50LCB0cnVlKSArIHRoaXMuZ2V0T2Zmc2V0SGVpZ2h0KGxpbmVfX2RpdmlkZXIsIHRydWUpICogMjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcicpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHZpZXdyZXBvcnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmVsYXRlZC12aWV3cG9ydCcpWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKHZpZXdyZXBvcnRzKSB7XG4gICAgICBpZiAoY29udGVudFJlc3VsdC5vZmZzZXRIZWlnaHQgPD0gbWF4SGVpZ2h0KSB7XG4gICAgICAgIHZpZXdyZXBvcnRzLnN0eWxlLmhlaWdodCA9IGAke2NvbnRlbnRSZXN1bHQub2Zmc2V0SGVpZ2h0fXB4YDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB2aWV3cmVwb3J0cy5zdHlsZS5oZWlnaHQgPSBgJHttYXhIZWlnaHR9cHhgO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoUmVsYXRlZChfdmFsOiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFtdO1xuICAgIGlmICh0eXBlb2YgKF92YWwpID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5teUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgICAgdGhpcy5pc0lucHV0VmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghIV92YWwpIHtcbiAgICAgICAgdGhpcy5vblNlYXJjaC5lbWl0KF92YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldE1vZHVsZUZpbHRlcmVkT3B0aW9ucyhtb2R1bGVJZDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBmaXJzdEVsID0gdGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmVbaW5kZXhdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3Qgc2Vjb25kRWwgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1tqXTtcbiAgICAgICAgICBpZiAoZmlyc3RFbC5pZCA9PT0gc2Vjb25kRWwuaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zLnNwbGljZShqLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZE9wdGlvbnMuZmlsdGVyKHggPT4geC5pdGVtVHlwZSA9PT0gbW9kdWxlSWQpO1xuICB9XG5cbiAgc2hvd1NlYXJjaFJlc3VsdCgpIHtcbiAgICAvLyB0aGlzLmF1dG9Db21wbGV0ZS5vcGVuUGFuZWwoKTtcbiAgfVxuXG4gIGRpc3BsYXlSZWxhdGVkKHJlbGF0ZWQ/OiBJUmVsYXRlZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHJlbGF0ZWQgPyByZWxhdGVkLml0ZW1OYW1lIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgc2VsZWN0UmVsYXRlZChpdGVtOiBJUmVsYXRlZCkge1xuICAgIGlmICh0aGlzLnRyZWVDb25maWcxPy5zZWxlY3RPbmUgfHwgdGhpcy50cmVlQ29uZmlnMj8uc2VsZWN0T25lKSB7XG4gICAgICB0aGlzLmRpc2FibGVkTGlzdCA9IFtdO1xuICAgICAgdGhpcy5kaXNhYmxlZExpc3QyID0gW107XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBbXTtcbiAgICBpZiAodGhpcy50cmVlQ29uZmlnMS5zaG93Q2hlY2tCb3gpIHtcbiAgICAgIGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4ge1xuICAgICAgICByZXR1cm4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIGxldCBwb3NpdGlvbiA9IC0xO1xuICAgICAgbGV0IG5vZGU6IGFueTtcbiAgICAgIGxldCB0eXBlSWQ6IG51bWJlcjtcblxuICAgICAgc3dpdGNoIChpdGVtLml0ZW1UeXBlKSB7XG4gICAgICAgIGNhc2UgdGhpcy5kYXRhVHlwZS5kb2N1bWVudDpcbiAgICAgICAgICAvLyBkb2N1bWVudCAgXG4gICAgICAgICAgY29uc3QgaXNFeGlzdEluRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkTGlzdDIuZmluZEluZGV4KHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHguaWQgJiYgeC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpc0V4aXN0SW5EaXNhYmxlZCA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy50cmVlRGF0YTIuZmluZEluZGV4KHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHguY2hpbGRJZCA9PT0gaXRlbS5pZCAmJiB4LnJvb3RJZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHBvc2l0aW9uID49IDApIHtcbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLnRyZWVEYXRhMltwb3NpdGlvbl07XG4gICAgICAgICAgICB0eXBlSWQgPSB0aGlzLmRhdGFUeXBlLmRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB7XG4gICAgICAgICAgICAgIGlkOiBub2RlLmNoaWxkSWQsXG4gICAgICAgICAgICAgIG5hbWU6IG5vZGUuY2hpbGROYW1lLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLnJvb3RJZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVsxXS50b2RvSXRlbVNlbGVjdGlvblByb2Nlc3NEb2N1bWVudChbdHJlZU5vZGVdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5ld05vZGVEb2NzOiBUcmVlTW9kZWwgPSB7XG4gICAgICAgICAgICAgIHJvb3RJZDogaXRlbS5icmVhZGN1bWJzW2l0ZW0uYnJlYWRjdW1icy5sZW5ndGggLSAxXT8uWydpZCddLFxuICAgICAgICAgICAgICByb290TmFtZTogaXRlbS5icmVhZGN1bWJzW2l0ZW0uYnJlYWRjdW1icy5sZW5ndGggLSAxXT8uWyduYW1lJ10sXG4gICAgICAgICAgICAgIHBhcmVudElkOiAnJyxcbiAgICAgICAgICAgICAgc3ViTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgY2hpbGRJZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgY2hpbGROYW1lOiBpdGVtLml0ZW1OYW1lLFxuICAgICAgICAgICAgICBzdGF0dXNJZDogaXRlbT8uWydpdGVtU3RhdHVzJ10sXG4gICAgICAgICAgICAgIHN0YXR1c05hbWU6IGl0ZW0/Llsnc3RhdHVzTmFtZSddLFxuICAgICAgICAgICAgICBkaXNwbGF5SWQ6ICtpdGVtLml0ZW1OdW1iZXJJZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHJlZURhdGEyID0gWy4uLnRoaXMudHJlZURhdGEyLCBuZXdOb2RlRG9jc107XG4gICAgICAgICAgICBsZXQgbmV3U2VsZWN0ZWREb2NzOiBUcmVlRmxhdE5vZGUgPSB7XG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIGhhc0NoaWxkOiBmYWxzZSxcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbmFtZTogaXRlbS5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0uYnJlYWRjdW1ic1tpdGVtLmJyZWFkY3VtYnMubGVuZ3RoIC0gMV0/LlsnaWQnXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFtdO1xuICAgICAgICAgICAgbGV0IHNlbGVjdFByb2Nlc3M6IFRyZWVGbGF0Tm9kZVtdID0gW107XG4gICAgICAgICAgICBsZXQgc2VsZWN0RG9jdW1lbnQ6IFRyZWVGbGF0Tm9kZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZG9jdW1lbnQgfHwgeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMi5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jaGlsZElkICYmIHguaWQgPT09IGl0ZW0uY2hpbGRJZCB8fCAhaXRlbS5jaGlsZElkICYmICh4LmlkID09PSBpdGVtLnJvb3RJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3REb2N1bWVudC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5zZWxlY3RQcm9jZXNzXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YTIsIC4uLnNlbGVjdERvY3VtZW50LCBuZXdTZWxlY3RlZERvY3NdO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xuICAgICAgICAgICAgICAgIGlkOiBuZXdOb2RlRG9jcy5jaGlsZElkLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5ld05vZGVEb2NzLmNoaWxkTmFtZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVEb2NzLnJvb3RJZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMV0udG9kb0l0ZW1TZWxlY3Rpb25Qcm9jZXNzRG9jdW1lbnQoW3RyZWVOb2RlXSk7XG4gICAgICAgICAgICB9LCA1MDApXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUuZm9sZGVyOlxuICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy50cmVlRGF0YTIuZmluZEluZGV4KHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHgucm9vdElkID09PSBpdGVtLmlkICYmIHgucGFyZW50SWQgPT09IGl0ZW0ucGFyZW50SWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdHlwZUlkID0gaXRlbS5pdGVtVHlwZTtcbiAgICAgICAgICBpZiAocG9zaXRpb24gPj0gMCkge1xuICAgICAgICAgICAgbm9kZSA9IHRoaXMudHJlZURhdGEyW3Bvc2l0aW9uXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVDb25maWcyLnNob3dDaGVja0JveCkge1xuICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBtb2R1bGVJZDogdGhpcy5tb2R1bGVJZCxcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogaXRlbS5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICBpdGVtVHlwZTogdHlwZUlkLFxuICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogaXRlbS5pdGVtTnVtYmVySWQsXG4gICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBpdGVtLmxldmVsVHlwZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiBpdGVtLnBhcmVudE5hbWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUucHVzaCh7XG4gICAgICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6IGl0ZW0uaXRlbU5hbWUsXG4gICAgICAgICAgICAgICAgaXRlbVR5cGU6IHR5cGVJZCxcbiAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uaXRlbU51bWJlcklkLFxuICAgICAgICAgICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0cmVlTm9kZSA9IHtcbiAgICAgICAgICAgICAgaWQ6IG5vZGUucm9vdElkLFxuICAgICAgICAgICAgICBuYW1lOiAhIW5vZGUucm9vdElkID8gbm9kZS5zdWJOYW1lIDogbm9kZS5yb290TmFtZSxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVsxXS50b2RvRm9sZGVyU2VsZWN0aW9uKFt0cmVlTm9kZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSB0aGlzLmRhdGFUeXBlLmFyZWE6XG4gICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnRyZWVEYXRhMS5maW5kSW5kZXgoeCA9PiB7XG4gICAgICAgICAgICByZXR1cm4geC5yb290SWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdHlwZUlkID0gaXRlbS5pdGVtVHlwZTtcblxuICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XG4gICAgICAgICAgICBub2RlID0gdGhpcy50cmVlRGF0YTFbcG9zaXRpb25dO1xuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUNvbmZpZzEuc2hvd0NoZWNrQm94KSB7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxuICAgICAgICAgICAgICAgIGlkOiBub2RlLnJvb3RJZCxcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5yb290TmFtZSxcbiAgICAgICAgICAgICAgICBpdGVtVHlwZTogdHlwZUlkLFxuICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogaXRlbS5pdGVtTnVtYmVySWQsXG4gICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBpdGVtLmxldmVsVHlwZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiBpdGVtLnBhcmVudE5hbWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUucHVzaCh7XG4gICAgICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgICAgICAgICAgaWQ6IG5vZGUucm9vdElkLFxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLnJvb3ROYW1lLFxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiB0eXBlSWQsXG4gICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBpdGVtLml0ZW1OdW1iZXJJZCxcbiAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IGl0ZW0ubGV2ZWxUeXBlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0cmVlTm9kZSA9IHtcbiAgICAgICAgICAgIGlkOiBub2RlLnJvb3RJZCxcbiAgICAgICAgICAgIG5hbWU6ICEhbm9kZS5yb290SWQgPyBub2RlLnN1Yk5hbWUgOiBub2RlLnJvb3ROYW1lLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWRcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVswXS50b2RvRm9sZGVyU2VsZWN0aW9uKFt0cmVlTm9kZV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUucHJvY2VzczpcbiAgICAgICAgICBjb25zdCBpc0V4aXN0SW5Qcm9jZXNzRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkTGlzdC5maW5kSW5kZXgoeCA9PiB7XG4gICAgICAgICAgICByZXR1cm4geC5pZCAmJiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChpc0V4aXN0SW5Qcm9jZXNzRGlzYWJsZWQgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGExLmZpbmRJbmRleCh4ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4LmNoaWxkSWQgJiYgeC5jaGlsZElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiB4LnJvb3RJZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XG4gICAgICAgICAgICBub2RlID0gdGhpcy50cmVlRGF0YTFbcG9zaXRpb25dO1xuICAgICAgICAgICAgdHlwZUlkID0gdGhpcy5pdGVtVHlwZTtcbiAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xuICAgICAgICAgICAgICBpZDogbm9kZS5jaGlsZElkLFxuICAgICAgICAgICAgICBuYW1lOiBub2RlLmNoaWxkTmFtZSxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5yb290SWRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0udG9kb0l0ZW1TZWxlY3Rpb25Qcm9jZXNzRG9jdW1lbnQoW3RyZWVOb2RlXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBuZXdOb2RlUHJvY2VzczogVHJlZU1vZGVsID0ge1xuICAgICAgICAgICAgICByb290SWQ6IGl0ZW0uYnJlYWRjdW1ic1tpdGVtLmJyZWFkY3VtYnMubGVuZ3RoIC0gMV0/LlsnaWQnXSxcbiAgICAgICAgICAgICAgcm9vdE5hbWU6IGl0ZW0uYnJlYWRjdW1ic1tpdGVtLmJyZWFkY3VtYnMubGVuZ3RoIC0gMV0/LlsnbmFtZSddLFxuICAgICAgICAgICAgICBwYXJlbnRJZDogJycsXG4gICAgICAgICAgICAgIHN1Yk5hbWU6IG51bGwsXG4gICAgICAgICAgICAgIGNoaWxkSWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgIGNoaWxkTmFtZTogaXRlbS5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgc3RhdHVzSWQ6IGl0ZW0/LlsnaXRlbVN0YXR1cyddLFxuICAgICAgICAgICAgICBzdGF0dXNOYW1lOiBpdGVtPy5bJ3N0YXR1c05hbWUnXSxcbiAgICAgICAgICAgICAgZGlzcGxheUlkOiAraXRlbS5pdGVtTnVtYmVySWQsXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudHJlZURhdGExID0gWy4uLnRoaXMudHJlZURhdGExLCBuZXdOb2RlUHJvY2Vzc107XG4gICAgICAgICAgICBsZXQgbmV3U2VsZWN0ZWRQcm9jZXNzOiBUcmVlRmxhdE5vZGUgPSB7XG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIGhhc0NoaWxkOiBmYWxzZSxcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbmFtZTogaXRlbS5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0uYnJlYWRjdW1ic1tpdGVtLmJyZWFkY3VtYnMubGVuZ3RoIC0gMV0/LlsnaWQnXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFtdO1xuICAgICAgICAgICAgbGV0IHNlbGVjdFByb2Nlc3M6IFRyZWVGbGF0Tm9kZVtdID0gW107XG4gICAgICAgICAgICBsZXQgc2VsZWN0RG9jdW1lbnQ6IFRyZWVGbGF0Tm9kZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jaGlsZElkICYmIHguaWQgPT09IGl0ZW0uY2hpbGRJZCB8fCAhaXRlbS5jaGlsZElkICYmICh4LmlkID09PSBpdGVtLnJvb3RJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RQcm9jZXNzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHguaXRlbU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5wYXJlbnRJZFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMi5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jaGlsZElkICYmIHguaWQgPT09IGl0ZW0uY2hpbGRJZCB8fCAhaXRlbS5jaGlsZElkICYmICh4LmlkID09PSBpdGVtLnJvb3RJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3REb2N1bWVudC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgLi4uc2VsZWN0UHJvY2VzcywgbmV3U2VsZWN0ZWRQcm9jZXNzXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YTIsIC4uLnNlbGVjdERvY3VtZW50XTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xuICAgICAgICAgICAgICAgIGlkOiBuZXdOb2RlUHJvY2Vzcy5jaGlsZElkLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5ld05vZGVQcm9jZXNzLmNoaWxkTmFtZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVQcm9jZXNzLnJvb3RJZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0udG9kb0l0ZW1TZWxlY3Rpb25Qcm9jZXNzRG9jdW1lbnQoW3RyZWVOb2RlXSk7XG5cbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUuZGV2aWF0aW9uVHlwZTpcbiAgICAgICAgY2FzZSB0aGlzLmRhdGFUeXBlLmNoZWNrbGlzdENhdGVnb3J5OlxuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUucmlza0ZvbGRlcjpcbiAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGExLmZpbmRJbmRleCh4ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4LnJvb3RJZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gKGl0ZW0ucGFyZW50SWQgPyBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpIDogJycpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc2VsZWN0Tm9kZVJlY3Vyc2l2ZSh0aGlzLnRyZWVEYXRhMVtwb3NpdGlvbl0sIGl0ZW0uaXRlbVR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUuZGV2aWF0aW9uOlxuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUuY2hlY2tsaXN0OlxuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUucmlzazpcbiAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGExLmZpbmRJbmRleCh4ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4LmNoaWxkSWQgJiYgeC5jaGlsZElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiB4LnJvb3RJZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XG4gICAgICAgICAgICBub2RlID0gdGhpcy50cmVlRGF0YTFbcG9zaXRpb25dO1xuICAgICAgICAgICAgdHlwZUlkID0gdGhpcy5pdGVtVHlwZTtcbiAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xuICAgICAgICAgICAgICBpZDogbm9kZS5jaGlsZElkLFxuICAgICAgICAgICAgICBuYW1lOiBub2RlLmNoaWxkTmFtZSxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5yb290SWRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0udG9kb0l0ZW1TZWxlY3Rpb24oW3RyZWVOb2RlXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3ROb2RlUmVjdXJzaXZlKGl0ZW06IFRyZWVNb2RlbCwgaXRlbVR5cGU6IERhdGFUeXBlKSB7XG4gICAgbGV0IHBvc2l0aW9uID0gdGhpcy50cmVlRGF0YTEuZmluZEluZGV4KHggPT4ge1xuICAgICAgcmV0dXJuIHgucm9vdElkID09PSBpdGVtLnJvb3RJZDtcbiAgICB9KTtcblxuICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XG5cbiAgICAgIGNvbnN0IG5vZGU6IFRyZWVOb2RlID0ge1xuICAgICAgICBpZDogaXRlbS5yb290SWQsXG4gICAgICAgIG5hbWU6IGl0ZW0ucm9vdE5hbWUsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWRcbiAgICAgIH07XG5cbiAgICAgIGxldCBub2RlQ2hpbGRyZW46IFRyZWVOb2RlW10gPSB0aGlzLnRyZWVEYXRhMS5cbiAgICAgICAgZmlsdGVyKHggPT4geC5yb290SWQgPT09IGl0ZW0ucm9vdElkICYmIHguY2hpbGRJZCkuXG4gICAgICAgIG1hcCh4ID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHguY2hpbGRJZCxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0uY2hpbGROYW1lLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucm9vdElkXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICBsZXQgbm9kZVN1YmZvbGRlcnM6IFRyZWVNb2RlbFtdID0gdGhpcy50cmVlRGF0YTEuXG4gICAgICAgIGZpbHRlcih4ID0+IHgucGFyZW50SWQgPT09IGl0ZW0ucm9vdElkKTtcblxuICAgICAgaWYgKHRoaXMudHJlZUNvbmZpZzEuc2hvd0NoZWNrQm94KSB7XG4gICAgICAgIG5vZGVDaGlsZHJlbi5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LnB1c2goe1xuICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICAgIGl0ZW1OYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbVR5cGUsXG4gICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uZGlzcGxheUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5yb290SWQsXG4gICAgICAgICAgICBwYXJlbnROYW1lOiBpdGVtLnJvb3ROYW1lXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG5vZGVDaGlsZHJlbi5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLnB1c2goe1xuICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICAgIGl0ZW1OYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbVR5cGUsXG4gICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uZGlzcGxheUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5yb290SWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVswXS50b2RvSXRlbVNlbGVjdGlvbihbbm9kZV0uY29uY2F0KG5vZGVDaGlsZHJlbikpO1xuICAgICAgaWYgKG5vZGVTdWJmb2xkZXJzKSB7XG4gICAgICAgIG5vZGVTdWJmb2xkZXJzLmZvckVhY2goZm9sZGVyID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdE5vZGVSZWN1cnNpdmUoZm9sZGVyLCBpdGVtVHlwZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBzZXRUeXBlUHJvY2VzcyhleHBhbmQpIHtcbiAgICByZXR1cm4gZXhwYW5kID8gdGhpcy5kYXRhVHlwZS5hcmVhIDogdGhpcy5kYXRhVHlwZS5wcm9jZXNzO1xuICB9XG5cbiAgZ2V0Q29tbW9uQ2hlY2tlZE5vZGUobGlzdDogQXJyYXk8VHJlZUZsYXROb2RlPikge1xuICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gW107XG4gICAgdGhpcy5zaW5nbGVQcm9jZXNzTGlzdCA9IFtdO1xuICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QgPSBbXTtcbiAgICB0aGlzLmNoZWNrZWROb2RlTGlzdCA9IFsuLi50aGlzLnNpbmdsZURvY3VtZW50TGlzdF07XG4gICAgaWYgKGxpc3QubGVuZ3RoKSB7XG4gICAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCAmJiB4LnBhcmVudElkID09PSBpdGVtLnBhcmVudElkKTtcblxuICAgICAgICBpZiAoaXRlbS5pZCAmJiBpbmRleCA8IDApIHtcbiAgICAgICAgICB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaW5nbGVTZWxlY3RlZE5vZGUpIHtcbiAgICAgICAgICBsZXQgcG9zaXRpb246IG51bWJlcjtcbiAgICAgICAgICBpZiAoaXRlbS5leHBhbmRhYmxlKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGExLmZpbmRJbmRleChwID0+IHAucm9vdElkID09PSBpdGVtLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGExLmZpbmRJbmRleChwID0+IHAuY2hpbGRJZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwb3NpdGlvbiA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnNpbmdsZVByb2Nlc3NMaXN0LnB1c2goe1xuICAgICAgICAgICAgICBtb2R1bGVJZDogdGhpcy5tb2R1bGVJZCxcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgIGl0ZW1OYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgIGl0ZW1UeXBlOiAodGhpcy5pdGVtVHlwZSA9PT0gMikgPyB0aGlzLnNldFR5cGVQcm9jZXNzKGl0ZW0uZXhwYW5kYWJsZSkgOiB0aGlzLml0ZW1UeXBlLFxuICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IHRoaXMudHJlZURhdGExW3Bvc2l0aW9uXS5kaXNwbGF5SWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXG4gICAgICAgICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLmlkICYmIGluZGV4IDwgMCAmJiAhaXRlbS5leHBhbmRhYmxlICYmICF0aGlzLnNpbmdsZVNlbGVjdGVkTm9kZSkge1xuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy50cmVlRGF0YTEuZmluZEluZGV4KHAgPT4gcC5jaGlsZElkID09PSBpdGVtLmlkICYmIHAucm9vdElkID09PSBpdGVtLnBhcmVudElkKTtcblxuICAgICAgICAgIGlmIChwb3NpdGlvbiA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICBpdGVtTmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICBpdGVtVHlwZTogdGhpcy5pdGVtVHlwZSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWU6IHRoaXMudHJlZURhdGExW3Bvc2l0aW9uXS5wYXJlbnRJZCA/IHRoaXMudHJlZURhdGExW3Bvc2l0aW9uXS5zdWJOYW1lIDogdGhpcy50cmVlRGF0YTFbcG9zaXRpb25dLnJvb3ROYW1lLFxuICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IHRoaXMudHJlZURhdGExW3Bvc2l0aW9uXS5kaXNwbGF5SWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBpdGVtLmxldmVsVHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gWy4uLnRoaXMuY2hlY2tlZE5vZGVMaXN0LCAuLi50aGlzLnNpbmdsZVByb2Nlc3NMaXN0XTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWF4U2VsZWN0SXRlbUNvdW50ICYmIHRoaXMubWF4U2VsZWN0SXRlbUNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCByZW1vdmVMaXN0ID0gdGhpcy5jaGVja2VkTm9kZUxpc3Quc2xpY2UoMCwgdGhpcy5tYXhTZWxlY3RJdGVtQ291bnQgKiAtMSk7XG4gICAgICAgIGlmIChyZW1vdmVMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgIHJlbW92ZUxpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KHtcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgIG5hbWU6IGl0ZW0uaXRlbU5hbWUsXG4gICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5zbGljZSh0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCAqIC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0O1xuICB9XG5cbiAgZ2V0RG9jdW1lbnRDaGVja2VkTm9kZShsaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+KSB7XG4gICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSBbXTtcbiAgICB0aGlzLnNpbmdsZURvY3VtZW50TGlzdCA9IFtdO1xuICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdCA9IFtdO1xuICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gWy4uLnRoaXMuc2luZ2xlUHJvY2Vzc0xpc3RdO1xuICAgIGlmIChsaXN0Lmxlbmd0aCkge1xuICAgICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuXG4gICAgICAgIGlmIChpdGVtLmlkICYmIGluZGV4IDwgMCkge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlKSB7XG4gICAgICAgICAgbGV0IHBvc2l0aW9uOiBudW1iZXI7XG4gICAgICAgICAgaWYgKGl0ZW0uZXhwYW5kYWJsZSkge1xuICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnRyZWVEYXRhMi5maW5kSW5kZXgocCA9PiBwLnJvb3RJZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnRyZWVEYXRhMi5maW5kSW5kZXgocCA9PiBwLmNoaWxkSWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocG9zaXRpb24gPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVEb2N1bWVudExpc3QucHVzaCh7XG4gICAgICAgICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxuICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgaXRlbU5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0uZXhwYW5kYWJsZSA/IHRoaXMuZGF0YVR5cGUuZm9sZGVyIDogdGhpcy5kYXRhVHlwZS5kb2N1bWVudCxcbiAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiB0aGlzLnRyZWVEYXRhMltwb3NpdGlvbl0uZGlzcGxheUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgICAgICBsZXZlbFR5cGU6IGl0ZW0ubGV2ZWxUeXBlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCAwICYmICFpdGVtLmV4cGFuZGFibGUgJiYgIXRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlKSB7XG4gICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnRyZWVEYXRhMi5maW5kSW5kZXgocCA9PiBwLmNoaWxkSWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgIGlmIChwb3NpdGlvbiA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICBpdGVtTmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICBpdGVtVHlwZTogdGhpcy5kYXRhVHlwZS5kb2N1bWVudCxcbiAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiB0aGlzLnRyZWVEYXRhMltwb3NpdGlvbl0uZGlzcGxheUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgICAgICBwYXJlbnROYW1lOiB0aGlzLnRyZWVEYXRhMltwb3NpdGlvbl0ucm9vdE5hbWUsXG4gICAgICAgICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnNpbmdsZVNlbGVjdGVkTm9kZSkge1xuICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdCA9IFsuLi50aGlzLmNoZWNrZWROb2RlTGlzdCwgLi4udGhpcy5zaW5nbGVEb2N1bWVudExpc3RdO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tYXhTZWxlY3RJdGVtQ291bnQgJiYgdGhpcy5tYXhTZWxlY3RJdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZUxpc3QgPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5zbGljZSgwLCB0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCAqIC0xKTtcbiAgICAgICAgaWYgKHJlbW92ZUxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgcmVtb3ZlTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGVja2VkTm9kZUxpc3Qoe1xuICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgbmFtZTogaXRlbS5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXG4gICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBoYXNDaGlsZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LnNsaWNlKHRoaXMubWF4U2VsZWN0SXRlbUNvdW50ICogLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSB0aGlzLmRvY3VtZW50Q2hlY2tlZExpc3Q7XG4gIH1cblxuICBvbkNsb3NlQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XG4gICAgdGhpcy5pdGVtSW5TcGxpdHZpZXcgPSBbXTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9O1xuXG4gIGFzeW5jIG9uQWRkQ2xpY2soKSB7XG4gICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XG4gICAgdGhpcy5pdGVtSW5TcGxpdHZpZXcgPSBbXTtcbiAgICBsZXQgaW1hZ2VSZWxhdGl2ZVVybCA9IFwiXCI7XG4gICAgbGV0IHJlcXVlc3RVcGxvYWRWaWRlb1VybCA9IFwiXCI7XG5cbiAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuaXRlbVR5cGUgPT09IERhdGFUeXBlLmRvY3VtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc3RhdHVzID0gdGhpcy5nZXRTdGF0dXNEb2NzKGVsZW1lbnQuaWQpO1xuICAgICAgICBlbGVtZW50LmJyZWFkY3VtYnMgPSB0aGlzLmdldEJyZWFkY3VtYkFsbFBhcmVudERvY3MoZWxlbWVudC5pZCkuc2xpY2UoMSkucmV2ZXJzZSgpO1xuICAgICAgICBlbGVtZW50LnN0YXR1c05hbWUgPSB0aGlzLmdldFN0YXR1c05hbWUoZWxlbWVudC5pZCk7XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2Vzcykge1xuICAgICAgICBlbGVtZW50LnN0YXR1cyA9IHRoaXMuZ2V0U3RhdHVzUHJvY2VzcyhlbGVtZW50LmlkKTtcbiAgICAgICAgZWxlbWVudC5icmVhZGN1bWJzID0gdGhpcy5nZXRCcmVhZGN1bWJBbGxQYXJlbnRQcm9jZXNzKGVsZW1lbnQuaWQpLnNsaWNlKDEpLnJldmVyc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5jYW5VcGxvYWRJbWFnZSAmJiAhdGhpcy5jYW5VcGxvYWRWaWRlbylcbiAgICAgIHJldHVybiB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLmNoZWNrZWROb2RlTGlzdCk7XG5cbiAgICBpZiAodGhpcy5vcmlnaW5WaWRlb0RhdGFTcmMgJiYgdGhpcy52aWRlb0RhdGEgJiYgIXRoaXMudmlkZW9EYXRhLnNyYykge1xuICAgICAgdGhpcy52aWRlb0RhdGEuc3JjID0gdGhpcy5vcmlnaW5WaWRlb0RhdGFTcmM7XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMudmlkZW9EYXRhKTtcbiAgfVxuXG4gIGdldFN0YXR1c05hbWUoaWQpIHtcbiAgICBsZXQgc3RhdHVzTmFtZSA9ICcnXG4gICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaCh4ID0+IHtcbiAgICAgIGlmIChpZC50b1N0cmluZygpID09PSB4LmNoaWxkSWQpIHtcbiAgICAgICAgc3RhdHVzTmFtZSA9IHguc3RhdHVzTmFtZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdGF0dXNOYW1lO1xuICB9XG5cbiAgZ2V0QnJlYWRjdW1iQWxsUGFyZW50UHJvY2VzcyhpZCkge1xuICAgIGxldCB0ZW1wUGFyZW50ID0gW107XG4gICAgdGhpcy5jaGVja0JyZWFkY3VtYlByb2Nlc3MoaWQsIHRlbXBQYXJlbnQsIGZ1bmN0aW9uIChhcnIpIHtcbiAgICAgIHRlbXBQYXJlbnQgPSBbLi4uYXJyXTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZW1wUGFyZW50O1xuICB9XG5cbiAgZ2V0QnJlYWRjdW1iQWxsUGFyZW50RG9jcyhpZCkge1xuICAgIGxldCB0ZW1wUGFyZW50ID0gW107XG4gICAgdGhpcy5jaGVja0JyZWFkY3VtYkRvY3VtZW50KGlkLCB0ZW1wUGFyZW50LCBmdW5jdGlvbiAoYXJyKSB7XG4gICAgICB0ZW1wUGFyZW50ID0gWy4uLmFycl07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGVtcFBhcmVudDtcbiAgfVxuXG4gIGNoZWNrQnJlYWRjdW1iUHJvY2VzcyhpZCwgYnJlYWRjdW1icywgY2FsbGJhY2spIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2Vzcy5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLnRyZWVDb250cm9sTm9kZVByb2Nlc3MuZGF0YU5vZGVzW2ldO1xuICAgICAgaWYgKGlkID09IHRyZWUuaWQpIHtcbiAgICAgICAgYnJlYWRjdW1icyA9IFsuLi5icmVhZGN1bWJzLCB0cmVlXTtcbiAgICAgICAgaWYgKHRyZWUucGFyZW50SWQpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQnJlYWRjdW1iUHJvY2Vzcyh0cmVlLnBhcmVudElkLCBicmVhZGN1bWJzLCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2soYnJlYWRjdW1icyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGVja0JyZWFkY3VtYkRvY3VtZW50KGlkLCBicmVhZGN1bWJzLCBjYWxsYmFjaykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbE5vZGVEb2N1bWVudC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50LmRhdGFOb2Rlc1tpXTtcbiAgICAgIGlmIChpZCA9PSB0cmVlLmlkKSB7XG4gICAgICAgIGJyZWFkY3VtYnMgPSBbLi4uYnJlYWRjdW1icywgdHJlZV07XG4gICAgICAgIGlmICh0cmVlLnBhcmVudElkKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0JyZWFkY3VtYkRvY3VtZW50KHRyZWUucGFyZW50SWQsIGJyZWFkY3VtYnMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhicmVhZGN1bWJzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFRyZWVDb250cm9sTm9kZURvY3VtZW50KHRyZWVOb2Rlcykge1xuICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQgPSBudWxsO1xuICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQgPSB0cmVlTm9kZXM7XG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVEb2N1bWVudC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50LmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiB4Lm5hbWUgIT09IG51bGwgJiYgeC5uYW1lICE9PSAnJyk7XG5cbiAgfVxuXG4gIHNlbGVjdFRyZWVDb250cm9sTm9kZVByb2Nlc3ModHJlZU5vZGVzKSB7XG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzID0gbnVsbDtcbiAgICB0aGlzLnRyZWVDb250cm9sTm9kZVByb2Nlc3MgPSB0cmVlTm9kZXM7XG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzLmRhdGFOb2RlcyA9IHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2Vzcy5kYXRhTm9kZXMuZmlsdGVyKHggPT4geC5uYW1lICE9PSBudWxsICYmIHgubmFtZSAhPT0gJycpO1xuICB9XG5cbiAgZ2V0U3RhdHVzRG9jcyhpZCkge1xuICAgIHJldHVybiB0aGlzLnRyZWVEYXRhMi5maWx0ZXIoeCA9PiB4LmNoaWxkSWQgPT09IGlkKVswXS5zdGF0dXNJZDtcbiAgfVxuXG4gIGdldFN0YXR1c1Byb2Nlc3MoaWQpIHtcbiAgICByZXR1cm4gdGhpcy50cmVlRGF0YTEuZmlsdGVyKHggPT4geC5jaGlsZElkID09PSBpZClbMF0uc3RhdHVzSWQ7XG4gIH1cblxuICBnZXRPZmZzZXRIZWlnaHQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluY2x1ZGVNYXJnaW46IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGxldCBlbG1IZWlnaHQgPSAwLCBlbG1NYXJnaW4gPSAwO1xuXG4gICAgZWxtSGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgaWYgKGluY2x1ZGVNYXJnaW4pIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgICBlbG1NYXJnaW4gPSBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpblRvcC5yZXBsYWNlKCdweCcsICcnKSkgKyBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkJvdHRvbS5yZXBsYWNlKCdweCcsICcnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChlbG1IZWlnaHQgKyBlbG1NYXJnaW4pO1xuICB9XG5cbiAgZ2V0SXRlbUNoaXBOYW1lKGl0ZW06IFNlbGVjdGVkTm9kZSkge1xuICAgIGlmIChpdGVtLml0ZW1UeXBlID09PSBEYXRhVHlwZS5jaGVja2xpc3QgfHwgaXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZGV2aWF0aW9uKSB7XG4gICAgICByZXR1cm4gKGl0ZW0ucGFyZW50TmFtZSAmJiBpdGVtLml0ZW1OYW1lICE9PSBpdGVtLnBhcmVudE5hbWUpID8gYCR7aXRlbS5wYXJlbnROYW1lfS8ke2l0ZW0uaXRlbU5hbWV9YCA6IGl0ZW0uaXRlbU5hbWU7XG4gICAgfVxuICAgIHJldHVybiBpdGVtLml0ZW1OYW1lO1xuICB9XG5cbiAgaXNFbGxpcHNpc0FjdGl2ZShlOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBlID8gKGUuY2xpZW50V2lkdGggPCBlLnNjcm9sbFdpZHRoKSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0Tm9kZUljb24oaXRlbTogSVJlbGF0ZWQpIHtcbiAgICBzd2l0Y2ggKGl0ZW0uaXRlbVR5cGUpIHtcbiAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOiB7XG4gICAgICAgIHN3aXRjaCAoaXRlbS5sZXZlbFR5cGUpIHtcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRGVwYXJ0bWVudEZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnZGVwYXJ0bWVudF9mb2xkZXJfb3V0bGluZWQnO1xuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAncmVnaW9uYWxfZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuVG9wRm9sZGVyOlxuICAgICAgICAgICAgcmV0dXJuICdlbnRlcnByaXNlX2ZvbGRlcl9vdXRsaW5lZCc7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnbG9jYWxfZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlIERhdGFUeXBlLmRvY3VtZW50OiB7XG4gICAgICAgIHN3aXRjaCAoaXRlbS5sZXZlbFR5cGUpIHtcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRGVwYXJ0bWVudEZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfZGVwYXJ0bWVudCc7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLlJlZ2lvbmFsRm9sZGVyOlxuICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9yZWdpb25hbCc7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLlRvcEZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfZW50ZXJwcmlzZSc7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfbG9jYWwnO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxuICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfYXJlYV9vdXRsaW5lZCc7XG4gICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgIHJldHVybiAncHJvY2Vzcyc7XG4gICAgICBjYXNlIERhdGFUeXBlLmRldmlhdGlvbjpcbiAgICAgICAgcmV0dXJuICdkZXZpYXRpb24nO1xuICAgICAgY2FzZSBEYXRhVHlwZS5jaGVja2xpc3Q6XG4gICAgICAgIHJldHVybiAnY2hlY2tsaXN0JztcbiAgICAgIGNhc2UgRGF0YVR5cGUucmlzazpcbiAgICAgICAgcmV0dXJuICdyaXNrJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcbiAgICB9XG4gIH1cblxuICBnZXRTZWFyY2hPcmRlcigpIHtcbiAgICBsZXQgc2VhcmNoVHlwZXMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGFUeXBlKVxuICAgICAgLm1hcChrZXkgPT4gKHsgdmFsdWU6IHRoaXMuZGF0YVR5cGVba2V5XSwga2V5OiBrZXkgfSkpO1xuICAgIHNlYXJjaFR5cGVzID0gc2VhcmNoVHlwZXMuc2xpY2Uoc2VhcmNoVHlwZXMubGVuZ3RoIC8gMik7XG4gICAgcmV0dXJuIHNlYXJjaFR5cGVzO1xuICB9XG5cbiAgZ2V0VGl0bGUodHlwZTogbnVtYmVyKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuUFJPQ0VTU0VTO1xuICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxuICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlBST0NFU1NfQVJFQTtcbiAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuRE9DVU1FTlRTO1xuICAgICAgY2FzZSBEYXRhVHlwZS5mb2xkZXI6XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuRk9MREVSO1xuICAgICAgY2FzZSBEYXRhVHlwZS5kZXZpYXRpb246XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuREVWSUFUSU9OO1xuICAgICAgY2FzZSBEYXRhVHlwZS5kZXZpYXRpb25UeXBlOlxuICAgICAgICByZXR1cm4gdGhpcy5MQU5HLkRFVklBVElPTl9UWVBFO1xuICAgICAgY2FzZSBEYXRhVHlwZS5jaGVja2xpc3Q6XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuQ0hFQ0tMSVNUO1xuICAgICAgY2FzZSBEYXRhVHlwZS5jaGVja2xpc3RDYXRlZ29yeTpcbiAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5DSEVDS0xJU1RfQ0FURUdPUlk7XG4gICAgICBjYXNlIERhdGFUeXBlLnJpc2s6XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuQVNTRVNTTUVOVDtcbiAgICAgIGNhc2UgRGF0YVR5cGUucmlza0ZvbGRlcjpcbiAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5GT0xERVI7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGFyZW50TmFtZShpdGVtOiBJUmVsYXRlZCkge1xuICAgIGlmIChpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmNoZWNrbGlzdCB8fCBpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmRldmlhdGlvbikge1xuICAgICAgcmV0dXJuIGl0ZW0ucGFyZW50TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRJdGVtSWQoaXRlbTogSVJlbGF0ZWQpIHtcbiAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5MQU5HLlBST0NFU1NfSUR9OiAke2l0ZW0uaXRlbU51bWJlcklkfTsgJHtpdGVtLnN0YXR1c05hbWV9YDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuTEFORy5ET0NVTUVOVF9JRH06ICR7aXRlbS5pdGVtTnVtYmVySWR9OyAke2l0ZW0uc3RhdHVzTmFtZX1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEl0ZW0obm9kZTogSVJlbGF0ZWQpIHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kKHggPT4gKHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpKTtcblxuICAgIGlmIChzZWxlY3RlZE5vZGUpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KHtcbiAgICAgICAgaWQ6IHNlbGVjdGVkTm9kZS5pZCxcbiAgICAgICAgbmFtZTogbm9kZS5pdGVtTmFtZSxcbiAgICAgICAgcGFyZW50SWQ6IHNlbGVjdGVkTm9kZS5wYXJlbnRJZCxcbiAgICAgICAgaGFzQ2hpbGQ6IGZhbHNlLFxuICAgICAgICBleHBhbmRhYmxlOiBmYWxzZSxcbiAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0UmVsYXRlZChub2RlKTtcbiAgICB9XG4gIH1cblxuICBpc05vZGVTZWxlY3RlZChub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldENoaWxkcmVuT2ZGb2xkZXIobm9kZTogVHJlZUZsYXROb2RlLCB0eXBlOiBEYXRhVHlwZSkge1xuICAgIGlmICh0aGlzLnNwbGl0Vmlldykge1xuICAgICAgY29uc3QgcGFyZW50VGV4dHMgPSB0aGlzLmVsZW0ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGV4dC1ub2RlLXBhcmVudCcpO1xuICAgICAgW10uZm9yRWFjaC5jYWxsKHBhcmVudFRleHRzLCAoZWwpID0+IHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlLWl0ZW0nKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXRlbUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjXyR7bm9kZS5wYXJlbnRJZCA/IG5vZGUucGFyZW50SWQgOiAnJ31fJHtub2RlLmlkfV8ke25vZGUubGV2ZWx9YCk7XG4gICAgICBbXS5mb3JFYWNoLmNhbGwoaXRlbUVsZW1lbnQsIChlbCkgPT4ge1xuICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUtaXRlbScpO1xuICAgICAgfSk7XG4gICAgICBpZiAodHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5mb2xkZXIpIHtcbiAgICAgICAgdGhpcy5zcGxpdFZpZXdUaXRsZSA9IGAke3RoaXMuTEFORy5NRVNTQUdFLkRPQ1VNRU5UU19JTi50b1VwcGVyQ2FzZSgpfSBcIiR7bm9kZS5uYW1lfVwiYDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHR5cGUgPT09IHRoaXMuZGF0YVR5cGUuYXJlYSkge1xuICAgICAgICB0aGlzLnNwbGl0Vmlld1RpdGxlID0gYCR7dGhpcy5MQU5HLk1FU1NBR0UuUFJPQ0VTU0VTX0lOLnRvVXBwZXJDYXNlKCl9IFwiJHtub2RlLm5hbWV9XCJgO1xuICAgICAgfVxuICAgICAgbGV0IGl0ZW0gPSBuZXcgSVJlbGF0ZWQoKTtcbiAgICAgIGl0ZW0uaWQgPSBub2RlLmlkO1xuICAgICAgaXRlbS5pdGVtVHlwZSA9IHR5cGU7XG4gICAgICBpdGVtLml0ZW1OYW1lID0gbm9kZS5uYW1lO1xuICAgICAgaXRlbS5sZXZlbFR5cGUgPSBub2RlLmxldmVsVHlwZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBub2RlO1xuICAgICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XG4gICAgICB0aGlzLnBhcmVudE5vZGVTZWxlY3RlZCA9IHsgLi4ubm9kZSB9O1xuICAgICAgdGhpcy5vbkV4cGFuZEZvbGRlci5lbWl0KGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGNhblNob3dTZWFyY2hPcHRpb24obW9kdWxlSWQ6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmNhbk9ubHlTZWxlY3RJdGVtICYmXG4gICAgICAobW9kdWxlSWQgPT09IERhdGFUeXBlLmNoZWNrbGlzdENhdGVnb3J5XG4gICAgICAgIHx8IG1vZHVsZUlkID09PSBEYXRhVHlwZS5yaXNrRm9sZGVyXG4gICAgICAgIHx8IG1vZHVsZUlkID09PSBEYXRhVHlwZS5kZXZpYXRpb25UeXBlXG4gICAgICAgIHx8IChtb2R1bGVJZCA9PT0gRGF0YVR5cGUuYXJlYSAmJiB0aGlzLnRyZWVDb25maWcxICYmICF0aGlzLnRyZWVDb25maWcxLnNpbmdsZVNlbGVjdGVkTm9kZSlcbiAgICAgICAgfHwgKG1vZHVsZUlkID09PSBEYXRhVHlwZS5mb2xkZXIgJiYgdGhpcy50cmVlQ29uZmlnMiAmJiAhdGhpcy50cmVlQ29uZmlnMi5zaW5nbGVTZWxlY3RlZE5vZGUpXG4gICAgICApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldE1vZHVsZUZpbHRlcmVkT3B0aW9ucyhtb2R1bGVJZCkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHNlbGVjdE5vZGVUcmVlRXZlbnQobm9kZTogVHJlZUZsYXROb2RlKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5pZC50b0xvd2VyQ2FzZSgpXG4gICAgICAmJiAoIW5vZGUucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09PSBub2RlLmV4cGFuZGFibGUpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0ID0gdGhpcy5jb21tb25DaGVja2VkTGlzdC5maWx0ZXIoKF8sIGluZCkgPT4gaW5kICE9PSBpbmRleCk7XG4gICAgICBpZiAodGhpcy52aWRlb0RhdGEpIHtcbiAgICAgICAgdGhpcy52aWRlb0RhdGEuc3JjID0gdGhpcy5vcmlnaW5WaWRlb0RhdGFTcmM7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMudmlkZW9EYXRhKSB7XG4gICAgICAgIHRoaXMudmlkZW9EYXRhLnNyYyA9IGAvdmlkZW8/aWQ9JHtub2RlLmlkfWA7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0ID0gWy4uLnRoaXMuY29tbW9uQ2hlY2tlZExpc3QsIG5vZGVdO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHRoaXMuY29tbW9uQ2hlY2tlZExpc3Q7XG4gIH1cblxuICBzZWxlY3ROb2RlVHJlZTJFdmVudChub2RlOiBUcmVlRmxhdE5vZGUpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKVxuICAgICAgJiYgKCFub2RlLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbm9kZS5leHBhbmRhYmxlKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0ID0gdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0LmZpbHRlcigoXywgaW5kKSA9PiBpbmQgIT09IGluZGV4KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmRvY3VtZW50Q2hlY2tlZExpc3QgPSBbLi4udGhpcy5kb2N1bWVudENoZWNrZWRMaXN0LCBub2RlXTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZERhdGEyID0gdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0O1xuICB9XG5cbiAgZ2V0Q2hpbGROb2RlU2VsZWN0T25lKGxpc3RDaGlsZHJlbikge1xuICAgIHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lID0gW107XG4gICAgdGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmUgPSBsaXN0Q2hpbGRyZW47XG4gIH1cblxuICBoYXNTZWxlY3RlZChyZWxhdGVkOiBJUmVsYXRlZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFyckRpc2FibGVkTGlzdCA9IHRoaXMuZGlzYWJsZWRMaXN0LmNvbmNhdCh0aGlzLmRpc2FibGVkTGlzdDIpO1xuICAgIHJldHVybiBhcnJEaXNhYmxlZExpc3Quc29tZShub2RlID0+IG5vZGUuaWQudG9VcHBlckNhc2UoKSA9PT0gcmVsYXRlZC5pZC50b1VwcGVyQ2FzZSgpICYmICghcmVsYXRlZC5wYXJlbnRJZCB8fCByZWxhdGVkLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSk7XG4gIH1cblxuICB0b1JlbGF0ZWRPcHRpb25zKHJlbGF0ZWRzOiBJUmVsYXRlZFtdKTogUmVsYXRlZE9wdGlvbltdIHtcbiAgICBjb25zdCByZXN1bHRzOiBSZWxhdGVkT3B0aW9uW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJlbGF0ZWQgb2YgcmVsYXRlZHMpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7IC4uLnJlbGF0ZWQsIGRpc2FibGVkOiB0aGlzLmhhc1NlbGVjdGVkKHJlbGF0ZWQpIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgZGlzcGxheVdoZW5TZWxlY3RSZWxhdGVkT3B0aW9uKCRldmVudDogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmVmcmVzaFJlbGF0ZWRPcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy50b1JlbGF0ZWRPcHRpb25zKHRoaXMuZmlsdGVyZWRPcHRpb25zKTtcbiAgfVxuXG4gIGNsZWFyUU1TSW5wdXRJbWFnZUZpbGUoKSB7XG4gICAgdGhpcy5xbXNJbnB1dEltYWdlRmlsZSA9IG51bGw7XG4gIH1cblxuICBjbGVhclFNU0lucHV0VmlkZW9GaWxlKCkge1xuICAgIHRoaXMucW1zSW5wdXRWaWRlb0ZpbGUgPSBudWxsO1xuICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVswXS50cmVlQ29udHJvbC5kYXRhTm9kZXMubWFwKHggPT4geC5kaXNhYmxlZCA9IGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIG9uQ2hhbmdlSW1hZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaXNMb2FkaW5nSW1hZ2VGaWxlID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5xbXNJbnB1dEltYWdlRmlsZT8uaXNTdWNjZXNzZnVsICYmIHRoaXMubWF4VmlkZW9UaHVtYm5haWxTaXplS0IpIHtcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TVXBsb2FkRmlsZUVycm9yRGlhbG9nLCB7XG4gICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZmlsZU5hbWVzOiB0aGlzLnFtc0lucHV0SW1hZ2VGaWxlLnR5cGVFcnJvciA9PSBGaWxlRXJyb3JUeXBlLm5vdFN1cHBvcnRlZEV4dGVuc2lvbiA/IFt0aGlzLnFtc0lucHV0SW1hZ2VGaWxlLmZpbGVOYW1lXSA6IFtdLFxuICAgICAgICAgIGFjY2VwdGVkRXh0ZW5zaW9uOiB0aGlzLmFjY2VwdEV4dGVuc2lvbnMsXG4gICAgICAgICAgb3ZlckxpbWl0RmlsZXM6IHRoaXMucW1zSW5wdXRJbWFnZUZpbGUudHlwZUVycm9yID09IEZpbGVFcnJvclR5cGUuZXhjZWVkTWF4U2l6ZSA/IFt0aGlzLnFtc0lucHV0SW1hZ2VGaWxlLmZpbGVOYW1lXSA6IFtdLFxuICAgICAgICAgIGZpbGVTaXplTGltaXQ6IHRoaXMubWF4VmlkZW9UaHVtYm5haWxTaXplS0IgLyAxMDI0LFxuICAgICAgICAgIGZpbGVTaXplTGltaXRVbml0OiAnS0InXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5xbXNJbnB1dEltYWdlRmlsZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy52aWRlb0RhdGEpIHtcbiAgICAgICAgdGhpcy52aWRlb0RhdGEucG9zdGVyID0gYXdhaXQgdGhpcy51cGxvYWRTZXJ2aWNlLnVwbG9hZEltYWdlKHRoaXMucW1zSW5wdXRJbWFnZUZpbGUuZmlsZSwgdGhpcy5pbWFnZVVwbG9hZC5oZWlnaHQsIHRoaXMuaW1hZ2VVcGxvYWQud2lkdGgpLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlYWRlckltYWdlID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXJJbWFnZS5yZWFkQXNEYXRhVVJMKHRoaXMucW1zSW5wdXRJbWFnZUZpbGUuZmlsZSk7XG4gICAgcmVhZGVySW1hZ2Uub25sb2FkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmltYWdlVXBsb2FkLnNyYyA9IGV2ZW50LnRhcmdldC5yZXN1bHQudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgdGhpcy5pc0xvYWRpbmdJbWFnZUZpbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIG9uQ2hhbmdlRmlsZShldmVudDogYW55KSB7XG4gICAgdGhpcy5pc0xvYWRpbmdWaWRlb0ZpbGUgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gW107XG4gICAgdGhpcy5kYXRhVHJlZXMudG9BcnJheSgpWzBdLmNoZWNrbGlzdFNlbGVjdGlvbi5jbGVhcigpO1xuICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVswXS50cmVlQ29udHJvbC5kYXRhTm9kZXMubWFwKHggPT4geC5kaXNhYmxlZCA9IHRydWUpO1xuICAgIGNvbnN0IHJlc1VwbG9hZFZpZGVvID0gYXdhaXQgdGhpcy51cGxvYWRTZXJ2aWNlLnVwbG9hZFNpbmdsZUZpbGUodGhpcy5xbXNJbnB1dFZpZGVvRmlsZS5maWxlLCAnJywgJzEnLCB0aGlzLmVudGl0eUlkKS50b1Byb21pc2UoKTtcbiAgICBpZiAodGhpcy52aWRlb0RhdGEpIHtcbiAgICAgIHRoaXMudmlkZW9EYXRhLnNyYyA9IHJlc1VwbG9hZFZpZGVvLnVybDtcbiAgICB9XG4gICAgdGhpcy5pc0xvYWRpbmdWaWRlb0ZpbGUgPSBmYWxzZTtcbiAgfVxufVxuIiwiPGgzIG1hdC1kaWFsb2ctdGl0bGUgY2xhc3M9XCJtb3JlLWFjdGlvblwiPlxuICA8c3BhbiBjbGFzcz1cIm1vZHVsZS1uYW1lXCI+e3sgbW9kdWxlTmFtZSB8IHVwcGVyY2FzZSB9fTwvc3Bhbj5cbiAgPGJ1dHRvbiBtYXREaWFsb2dDbG9zZSBjbGFzcz1cImJ0bi1jbG9zZS1kaWFsb2dcIiBjb2xvcj1cImxpZ2h0XCIgcW1zLWJ0bi1pY29uIChjbGljayk9XCJvbkNsb3NlQ2xpY2soKVwiPlxuICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9oMz5cbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gIDwhLS0gQ2tlZGl0b3IgVXNpbmcgLS0+XG4gIDxkaXYgKm5nSWY9XCJjYW5VcGxvYWRJbWFnZSB8fCBjYW5VcGxvYWRWaWRlbyB8fCBjYW5VcGRhdGVWaWRlb1Byb3BlcnRpZXNcIiBpZD1cInFtc2xpYl9yZWxhdGVkX3BvcHVwX2hlYWRlcl8wMDFcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICBwYW5lbF9oZWFkZXJfaGVpZ2h0X3dpdGhfdmlkZW9fdXBsb2FkOiBjYW5VcGxvYWRWaWRlbyxcbiAgICAgICAgICBwYW5lbF9oZWFkZXJfaGVpZ2h0X3dpdGhvdXRfdmlkZW9fdXBsb2FkOiAhY2FuVXBsb2FkVmlkZW8gJiYgY2FuVXBsb2FkSW1hZ2UgJiYgY2FuVXBkYXRlVmlkZW9Qcm9wZXJ0aWVzXG4gICAgICAgIH1cIiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiY2FuVXBsb2FkSW1hZ2VcIiBjbGFzcz1cInNlbGVjdGVkLWltYWdlIGNvbC0xMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPnt7IG1vZHVsZVVwbG9hZEltYWdlTmFtZSB8IHVwcGVyY2FzZSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cbiAgICAgICAgICA8Zm9ybT5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBxbXMtZm9ybSBxbXMtZmlsZS11cGxvYWQgYXBwZWFyYW5jZT1cImZpbGxcIiBjbGFzcz1cImV4YW1wbGUtd2lkdGggaW5wdXQtdXBsb2FkXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXggc3ZnSWNvbj1cInVwbG9hZFwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlVwbG9hZCBmaWxlXCIgW2Zvcm1Db250cm9sXT1cInFtc0lucHV0SW1hZ2VUeXBlXCIgcW1zLWZpbGUtdXBsb2FkLWRpc3BsYXlcbiAgICAgICAgICAgICAgICAjZmlsZURpc3BsYXkgdmFsdWU9XCJ7e3Ftc0lucHV0SW1hZ2VGaWxlPyBxbXNJbnB1dEltYWdlRmlsZS5maWxlTmFtZSA6ICcnfX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImlzTG9hZGluZ0ltYWdlRmlsZSA/ICdkaXNhYmxlZCcgOiBudWxsXCIgcmVhZG9ubHk+XG4gICAgICAgICAgICAgIDxpbnB1dCBoaWRkZW4gdHlwZT1cImZpbGVcIiBbKGlucHV0RmlsZSldPVwicW1zSW5wdXRJbWFnZUZpbGVcIiBxbXMtZmlsZS11cGxvYWQtc2VsZWN0b3IgI2ZpbGVTZWxlY3RvclxuICAgICAgICAgICAgICAgIFthY2NlcHRFeHRlbnNpb25zXT1cImFjY2VwdEV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wanAsIC5qcGcsIC5wanBlZywgLmpwZWcsIC5qZmlmLCAucG5nLCAuZ2lmLCAuYm1wLCAud2VicCwgLnRpZiwgLnRpZmZcIlxuICAgICAgICAgICAgICAgIFttYXhTaXplXT1cIm1heFZpZGVvVGh1bWJuYWlsU2l6ZUtCXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUltYWdlKCRldmVudClcIj5cblxuICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgbWF0U3VmZml4IG1vZGU9XCJpbmRldGVybWluYXRlXCIgZGlhbWV0ZXI9JzIwJ1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMb2FkaW5nSW1hZ2VGaWxlXCI+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXggcW1zLWlucHV0LWNsZWFyICpuZ0lmPVwicW1zSW5wdXRJbWFnZUZpbGUgJiYgcW1zSW5wdXRJbWFnZUZpbGUuZmlsZU5hbWVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCIgKGNsaWNrKT1cImNsZWFyUU1TSW5wdXRJbWFnZUZpbGUoKVwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdJbWFnZUZpbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJxbXNJbnB1dEltYWdlRmlsZSAmJiBxbXNJbnB1dEltYWdlRmlsZS50eXBlRXJyb3IgPT0gMVwiPlxuICAgICAgICAgICAgICAgIHt7IExBTkcuUU1TQ0tFRElUT1IuRVhURU5TSU9OX0lTX05PVF9TVVBQT1JURUQgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj57eyBMQU5HLlFNU0NLRURJVE9SLlZJREVPX0lNQUdFIHwgdXBwZXJjYXNlfX06PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImV4YW1wbGUtd2lkdGggaW5wdXQtdXBsb2FkXCI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJ2aWRlb0RhdGEucG9zdGVyXCI+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtaW1hZ2UgY29sLTEyXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY2FuVXBsb2FkVmlkZW9cIiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPnt7IG1vZHVsZVVwbG9hZEZpbGVOYW1lIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxuICAgICAgICAgIDxmb3JtPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHFtcy1mb3JtIHFtcy1maWxlLXVwbG9hZCBhcHBlYXJhbmNlPVwiZmlsbFwiIGNsYXNzPVwiZXhhbXBsZS13aWR0aCBpbnB1dC11cGxvYWRcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeCBzdmdJY29uPVwidXBsb2FkXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiVXBsb2FkIGZpbGVcIiBbZm9ybUNvbnRyb2xdPVwicW1zSW5wdXRWaWRlb1R5cGVcIiBxbXMtZmlsZS11cGxvYWQtZGlzcGxheVxuICAgICAgICAgICAgICAgICNmaWxlRGlzcGxheSB2YWx1ZT1cInt7cW1zSW5wdXRWaWRlb0ZpbGU/IHFtc0lucHV0VmlkZW9GaWxlLmZpbGVOYW1lIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXNMb2FkaW5nVmlkZW9GaWxlID8gJ2Rpc2FibGVkJyA6IG51bGxcIiByZWFkb25seT5cbiAgICAgICAgICAgICAgPGlucHV0IGhpZGRlbiB0eXBlPVwiZmlsZVwiIFsoaW5wdXRGaWxlKV09XCJxbXNJbnB1dFZpZGVvRmlsZVwiIHFtcy1maWxlLXVwbG9hZC1zZWxlY3RvciAjZmlsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgW2FjY2VwdEV4dGVuc2lvbnNdPVwiYWNjZXB0RXh0ZW5zaW9uc0ZvclZpZGVvXCIgYWNjZXB0PVwiLm1wNFwiIChjaGFuZ2UpPVwib25DaGFuZ2VGaWxlKCRldmVudClcIj5cblxuICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgbWF0U3VmZml4IG1vZGU9XCJpbmRldGVybWluYXRlXCIgZGlhbWV0ZXI9JzIwJ1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMb2FkaW5nVmlkZW9GaWxlXCI+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXggcW1zLWlucHV0LWNsZWFyICpuZ0lmPVwicW1zSW5wdXRWaWRlb0ZpbGUgJiYgcW1zSW5wdXRWaWRlb0ZpbGUuZmlsZU5hbWVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCIgKGNsaWNrKT1cImNsZWFyUU1TSW5wdXRWaWRlb0ZpbGUoKVwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdWaWRlb0ZpbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJxbXNJbnB1dFZpZGVvRmlsZSAmJiBxbXNJbnB1dFZpZGVvRmlsZS50eXBlRXJyb3IgPT0gMVwiPlxuICAgICAgICAgICAgICAgIHt7IExBTkcuUU1TQ0tFRElUT1IuQUNDRVBUX01QNF9PTkxZIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImNhblVwZGF0ZVZpZGVvUHJvcGVydGllc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj57eyBMQU5HLlFNU0NLRURJVE9SLlZJREVPX1NPVVJDRSB8IHVwcGVyY2FzZX19OjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJleGFtcGxlLXdpZHRoIGlucHV0LXVwbG9hZFwiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwidmlkZW9EYXRhLnNyY1wiPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImNhblVwZGF0ZVZpZGVvUHJvcGVydGllc1wiIGNsYXNzPVwic2VsZWN0ZWQtaW1hZ2UgY29sLTEyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZXhhbXBsZS13aWR0aCBpbnB1dC11cGxvYWRcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgTEFORy5XSURUSCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInZpZGVvRGF0YS53aWR0aFwiPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJleGFtcGxlLXdpZHRoIGlucHV0LXVwbG9hZFwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBMQU5HLkhFSUdIVCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInZpZGVvRGF0YS5oZWlnaHRcIj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZXhhbXBsZS13aWR0aCBpbnB1dC11cGxvYWRcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+SWQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInZpZGVvRGF0YS5pZFwiPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIFJlbGF0ZWQgbW9kdWxlIC0tPlxuICA8ZGl2IGNsYXNzPVwic3RpY2t5LWJsb2NrXCI+XG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJ7eyBMQU5HLlNFQVJDSCB9fVwiIG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJteUNvbnRyb2xcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIiAvPlxuICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImxpbmVfX2RpdmlkZXJcIj48L2Rpdj5cblxuICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIGNsYXNzPVwibWF0LWF1dG9jb21wbGV0ZV9yZWxhdGVkLXZpZXdwb3J0XCJcbiAgICAob3B0aW9uU2VsZWN0ZWQpPVwic2VsZWN0UmVsYXRlZCgkZXZlbnQub3B0aW9uLnZhbHVlKVwiIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5V2hlblNlbGVjdFJlbGF0ZWRPcHRpb25cIj5cbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IHFtcy1zY3JvbGxiYXIgaXRlbVNpemU9XCIxMFwiIFtjbGFzcy5yZWxhdGVkLXZpZXdwb3J0XT1cImlzSW5wdXRWYWx1ZVwiXG4gICAgICAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucy5sZW5ndGhcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHR5cGUgb2Ygc2VhcmNoT3JkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaF9fbW9kdWxlLXJlc3VsdFwiICpuZ0lmPVwiY2FuU2hvd1NlYXJjaE9wdGlvbih0eXBlLnZhbHVlKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VhcmNoX19tb2R1bGUtdGl0bGVcIj57eyBnZXRUaXRsZSh0eXBlLnZhbHVlKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cInNlYXJjaF9fb3B0aW9uXCIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBnZXRNb2R1bGVGaWx0ZXJlZE9wdGlvbnModHlwZS52YWx1ZSlcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvblwiIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIj5cbiAgICAgICAgICAgIDxxbXMtbGlzdC1pdGVtIHR5cGU9XCJpbWFnZS1zcXVhcmVcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGxlYWRpbmctaWNvbiB0eXBlPVwiaW1hZ2Utc3F1YXJlXCIgW3N2Z0ljb25dPVwiZ2V0Tm9kZUljb24ob3B0aW9uKVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxkaXYgcW1zLWxpc3QtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxkaXYgcW1zLWxpbmUgdHlwZT1cImNhcHRpb25cIiBxbXMtdG9vbC10aXA9XCJ7e1xuICAgICAgICAgICAgICAgICAgICBpc0VsbGlwc2lzQWN0aXZlKHNlYXJjaEl0ZW1SZXN1bHQpID8gb3B0aW9uLnBhcmVudE5hbWUgOiAnJ1xuICAgICAgICAgICAgICAgICAgfX1cIiBtb2RlPVwiZGFya1wiICpuZ0lmPVwiZ2V0UGFyZW50TmFtZShvcHRpb24pXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAjc2VhcmNoSXRlbVJlc3VsdCBjbGFzcz1cInNlYXJjaF9fcmVzdWx0X19wYXJlbnQtbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ucGFyZW50TmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcW1zLWxpbmUgdHlwZT1cInN1YnRpdGxlXCIgY2xhc3M9XCJzZWFyY2hfX29wdGlvbi1uYW1lXCI+XG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24uaXRlbU5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwdGlvblwiICpuZ0lmPVwib3B0aW9uLmJyZWFkY3VtYnMgJiYgb3B0aW9uLmJyZWFkY3VtYnMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICA8cW1zLWJyZWFkY3J1bWIgY2xhc3M9XCJicmVhZGNydW1iLWNvbnRhaW5lclwiIHR5cGU9XCJ0YWJsZVwiIG51bURpc3BsYXlJdGVtPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgIFtub2Rlc109XCJvcHRpb24uYnJlYWRjdW1ic1wiPlxuICAgICAgICAgICAgICAgICAgPC9xbXMtYnJlYWRjcnVtYj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgcW1zLWxpbmUgY29sb3I9XCJkZWZhdWx0LXN1YnRpdGxlXCIgKm5nSWY9XCJnZXRJdGVtSWQob3B0aW9uKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgc2VhcmNoX19kZXNjcmlwdGlvbi1pY29uXCI+bG9jYWxfb2ZmZXI8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB7eyBnZXRJdGVtSWQob3B0aW9uKSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvcW1zLWxpc3QtaXRlbT5cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gIDwvbWF0LWF1dG9jb21wbGV0ZT5cblxuICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPGRpdiBjbGFzcz1cInFtcy1zY3JvbGxiYXIgcW1zbGliX3JlbGF0ZWRfcG9wdXBfY29udGVudFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgcGFuZWxfX2NvbnRlbnRfaXRlbTogY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCxcbiAgICAgICAgcGFuZWxfX2NvbnRlbnQ6ICFjaGVja2VkTm9kZUxpc3QubGVuZ3RoLFxuICAgICAgICBwYW5lbF9fY29udGVudF9oZWlnaHRfd2l0aF91cGxvYWQ6IGNhblVwbG9hZEltYWdlICYmICFjaGVja2VkTm9kZUxpc3QubGVuZ3RoLFxuICAgICAgICBwYW5lbF9fY29udGVudF9pdGVtX2hlaWdodF93aXRoX3VwbG9hZDogY2FuVXBsb2FkSW1hZ2UgJiYgY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCxcbiAgICAgICAgJ2NvbC02Jzogc3BsaXRWaWV3LFxuICAgICAgICAnY29sLTEyJzogIXNwbGl0Vmlld1xuICAgICAgfVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyZWVEYXRhMS5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGhpZGVUb2dnbGUgaWQ9XCJxbXNsaWJfcmVsYXRlZF9wb3B1cF9jb21tb25fMDAxXCIgW2V4cGFuZGVkXT1cImlzQ29tbW9uRXhwYW5kZWRcIlxuICAgICAgICAgIChvcGVuZWQpPVwiaXNDb21tb25FeHBhbmRlZCA9IHRydWVcIiAoY2xvc2VkKT1cImlzQ29tbW9uRXhwYW5kZWQgPSBmYWxzZVwiIGNsYXNzPVwicGFuZWwtdHJlZVwiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cInBhZGRpbmctNVwiPlxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cIm1vZHVsZUlkID09PSBtb2R1bGUuZG9jdW1lbnRQcm9jZXNzXCI+XG4gICAgICAgICAgICAgIHt7IExBTkcuUFJPQ0VTU0VTIHwgdXBwZXJjYXNlIH19XG4gICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCJtb2R1bGVJZCA9PT0gbW9kdWxlLmRldmlhdGlvblwiPlxuICAgICAgICAgICAgICB7eyBMQU5HLkRFVklBVElPTiB8IHVwcGVyY2FzZSB9fVxuICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlICpuZ0lmPVwibW9kdWxlSWQgPT09IG1vZHVsZS5jaGVja2xpc3RcIj5cbiAgICAgICAgICAgICAge3sgTEFORy5DSEVDS0xJU1QgfCB1cHBlcmNhc2UgfX1cbiAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cIm1vZHVsZUlkID09PSBtb2R1bGUucmlza1wiPlxuICAgICAgICAgICAgICB7eyBMQU5HLkFTU0VTU01FTlQgfCB1cHBlcmNhc2UgfX1cbiAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPGJ1dHRvbiBxbXMtYnRuLWljb24gY2xhc3M9XCJyZWxhdGVkX3BvcHVwX3RvZ2dsZS1idG5cIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgaXNDb21tb25FeHBhbmRlZCA/IFwia2V5Ym9hcmRfYXJyb3dfdXBcIiA6IFwia2V5Ym9hcmRfYXJyb3dfZG93blwiXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgPGRpdiBpZD1cInFtc2xpYl9yZWxhdGVkX3BvcHVwX2NvbW1vbl8wMDJcIj5cbiAgICAgICAgICAgIDxxbXMtdHJlZSBbdHJlZURhdGFdPVwidHJlZURhdGExXCIgW3RyZWVDb25maWddPVwidHJlZUNvbmZpZzFcIiBbc2VsZWN0ZWREYXRhXT1cInNlbGVjdGVkRGF0YVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZFJpc2tEYXRhXT1cInNlbGVjdGVkUmlza0RhdGFcIiBbZGlzYWJsZWRMaXN0XT1cImRpc2FibGVkTGlzdFwiXG4gICAgICAgICAgICAgIChjaGVja0JveEV2ZW50KT1cImdldENvbW1vbkNoZWNrZWROb2RlKCRldmVudClcIlxuICAgICAgICAgICAgICAobm9kZUV4cGFuZEV2ZW50KT1cImdldENoaWxkcmVuT2ZGb2xkZXIoJGV2ZW50LCBkYXRhVHlwZS5hcmVhKVwiXG4gICAgICAgICAgICAgIChzZWxlY3ROb2RlRXZlbnQpPVwic2VsZWN0Tm9kZVRyZWVFdmVudCgkZXZlbnQpXCIgKGdldENoaWxkTm9kZVNlbGVjdE9uZSk9XCJnZXRDaGlsZE5vZGVTZWxlY3RPbmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtleHBhbmRPblRpdGxlQ2xpY2tdPVwiIXNwbGl0Vmlld1wiIFtwYXJlbnROb2RlT25DbGlja109XCJwYXJlbnROb2RlU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAodHJlZUNvbnRyb2xOb2Rlcyk9XCJzZWxlY3RUcmVlQ29udHJvbE5vZGVQcm9jZXNzKCRldmVudClcIj48L3Ftcy10cmVlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyZWVEYXRhMi5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJtb2R1bGVJZCA9PT0gbW9kdWxlLmRvY3VtZW50UHJvY2Vzc1wiIGNsYXNzPVwibGluZV9fZGl2aWRlclwiPjwvZGl2PlxuXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGhpZGVUb2dnbGUgKm5nSWY9XCJtb2R1bGVJZCA9PT0gbW9kdWxlLmRvY3VtZW50UHJvY2Vzc1wiXG4gICAgICAgICAgaWQ9XCJxbXNsaWJfcmVsYXRlZF9wb3B1cF9kb2N1bWVudF8wMDFcIiBbZXhwYW5kZWRdPVwiaXNEb2N1bWVudEV4cGFuZGVkXCIgKG9wZW5lZCk9XCJpc0RvY3VtZW50RXhwYW5kZWQgPSB0cnVlXCJcbiAgICAgICAgICAoY2xvc2VkKT1cImlzRG9jdW1lbnRFeHBhbmRlZCA9IGZhbHNlXCIgY2xhc3M9XCJwYW5lbC10cmVlXCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwicGFkZGluZy01XCI+XG4gICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICB7eyBMQU5HLkRPQ1VNRU5UUyB8IHVwcGVyY2FzZSB9fVxuICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8YnV0dG9uIHFtcy1idG4taWNvbiBjbGFzcz1cInJlbGF0ZWRfcG9wdXBfdG9nZ2xlLWJ0blwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICBpc0RvY3VtZW50RXhwYW5kZWRcbiAgICAgICAgICAgICAgICA/IFwia2V5Ym9hcmRfYXJyb3dfdXBcIlxuICAgICAgICAgICAgICAgIDogXCJrZXlib2FyZF9hcnJvd19kb3duXCJcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICA8ZGl2IGlkPVwicW1zbGliX3JlbGF0ZWRfcG9wdXBfZG9jdW1lbnRfMDAyXCI+XG4gICAgICAgICAgICA8cW1zLXRyZWUgW3RyZWVEYXRhXT1cInRyZWVEYXRhMlwiIFt0cmVlQ29uZmlnXT1cInRyZWVDb25maWcyXCIgW3NlbGVjdGVkRGF0YV09XCJzZWxlY3RlZERhdGEyXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkTGlzdF09XCJkaXNhYmxlZExpc3QyXCIgKGNoZWNrQm94RXZlbnQpPVwiZ2V0RG9jdW1lbnRDaGVja2VkTm9kZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG5vZGVFeHBhbmRFdmVudCk9XCJnZXRDaGlsZHJlbk9mRm9sZGVyKCRldmVudCwgZGF0YVR5cGUuZm9sZGVyKVwiXG4gICAgICAgICAgICAgIChzZWxlY3ROb2RlRXZlbnQpPVwic2VsZWN0Tm9kZVRyZWUyRXZlbnQoJGV2ZW50KVwiIChnZXRDaGlsZE5vZGVTZWxlY3RPbmUpPVwiZ2V0Q2hpbGROb2RlU2VsZWN0T25lKCRldmVudClcIlxuICAgICAgICAgICAgICBbZXhwYW5kT25UaXRsZUNsaWNrXT1cIiFzcGxpdFZpZXdcIiBbcGFyZW50Tm9kZU9uQ2xpY2tdPVwicGFyZW50Tm9kZVNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgKHRyZWVDb250cm9sTm9kZXMpPVwic2VsZWN0VHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQoJGV2ZW50KVwiPjwvcW1zLXRyZWU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzcGxpdFZpZXdcIiBjbGFzcz1cInFtcy1zY3JvbGxiYXIgcW1zbGliLXJlbGF0ZWQtcG9wdXAtc3BsaXR2aWV3IHFtc2xpYl9yZWxhdGVkX3BvcHVwX2NvbnRlbnQgY29sLTZcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICBwYW5lbF9fY29udGVudF9pdGVtOiBjaGVja2VkTm9kZUxpc3QubGVuZ3RoLFxuICAgICAgICBwYW5lbF9fY29udGVudDogIWNoZWNrZWROb2RlTGlzdC5sZW5ndGhcbiAgICAgIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzcGxpdHZpZXctaGVhZGVyXCIgKm5nSWY9XCJzZWxlY3RlZEZvbGRlclwiPlxuICAgICAgICB7eyBzcGxpdFZpZXdUaXRsZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZXhwYW5kLW5vZGVcIiAqbmdGb3I9XCJsZXQgbm9kZSBvZiBpdGVtSW5TcGxpdHZpZXdcIj5cbiAgICAgICAgPG1hdC1jaGVja2JveCBxbXMtZ3JvdXAtb3B0aW9ucyBbZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZFwiIGNvbG9yPVwiZGVmYXVsdFwiIFtjaGVja2VkXT1cImlzTm9kZVNlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEl0ZW0obm9kZSlcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvciBtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiIFtzdmdJY29uXT1cImdldE5vZGVJY29uKG5vZGUpXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW5vZGVcIj57eyBub2RlLml0ZW1OYW1lIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJjaGVja2VkTm9kZUxpc3QubGVuZ3RoXCIgY2xhc3M9XCJsaW5lX19kaXZpZGVyXCI+PC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHItMCBwZS0wXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aFwiIGNsYXNzPVwicGFuZWxfX2l0ZW0gcW1zLXNjcm9sbGJhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRlZF9faXRlbV9faW5saW5lXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hlY2tlZE5vZGVMaXN0XCI+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIml0ZW0uaXRlbU5hbWVcIiBtYXQtYnV0dG9uIGNsYXNzPVwicmVsYXRlZF9faXRlbV9fY29udGVudFwiIHFtcy10b29sLXRpcD1cInt7XG4gICAgICAgICAgICAgIGlzRWxsaXBzaXNBY3RpdmUoaXRlbU5hbWUpID8gZ2V0SXRlbUNoaXBOYW1lKGl0ZW0pIDogJydcbiAgICAgICAgICAgIH19XCIgbW9kZT1cImRhcmtcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVsYXRlZF9faXRlbV9fY29udGVudF9uYW1lXCIgI2l0ZW1OYW1lPnt7XG4gICAgICAgICAgICAgIGdldEl0ZW1DaGlwTmFtZShpdGVtKVxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiEodHJlZUNvbmZpZzE/LnNlbGVjdE9uZSB8fCB0cmVlQ29uZmlnMj8uc2VsZWN0T25lKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVDaGVja2VkTm9kZUxpc3QoaXRlbSlcIj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG48bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XG4gIDxtYXQtZGl2aWRlciBjbGFzcz1cInctMTAwIG1iLTNcIj48L21hdC1kaXZpZGVyPlxuICA8YnV0dG9uIGNsYXNzPVwibWUtMlwiIHFtcy1idG4tdGV4dCBbbmdTdHlsZV09XCJ7ICdtYXJnaW4tdG9wJzogY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCA/ICcwcHgnIDogJzdweCcgfVwiXG4gICAgKGNsaWNrKT1cIm9uQ2xvc2VDbGljaygpXCI+XG4gICAge3sgTEFORy5DQU5DRUwgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gKm5nSWY9XCIhY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aFwiIHFtcy1idG4gc3R5bGU9XCJtYXJnaW4tdG9wOiA3cHhcIlxuICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdWaWRlb0ZpbGUgfHwgaXNMb2FkaW5nSW1hZ2VGaWxlXCIgKGNsaWNrKT1cIm9uQWRkQ2xpY2soKVwiPlxuICAgIHt7IExBTkcuQUREIH19XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uICpuZ0lmPVwiY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aFwiIHFtcy1idG4gc3R5bGU9XCJtYXJnaW4tdG9wOiAwcHhcIlxuICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdWaWRlb0ZpbGUgfHwgaXNMb2FkaW5nSW1hZ2VGaWxlXCIgKGNsaWNrKT1cIm9uQWRkQ2xpY2soKVwiPlxuICAgIHt7IExBTkcuQUREIH19ICh7eyBjaGVja2VkTm9kZUxpc3QubGVuZ3RoIH19KVxuICA8L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuXG48IS0tIFxuPGRpdiBpZD1cInFtc2xpYl9yZWxhdGVkX3BvcHVwXCIgY2xhc3M9XCJxbXNsaWJfX3JlbGF0ZWRfX3BvcHVwX19jb250YWluZXJcIj5cbiAgPGRpdiBpZD1cInFtc2xpYl9yZWxhdGVkX3BvcHVwX2hlYWRlclwiPlxuICAgIDxzcGFuIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImJ1dHRvbl9fY2xvc2VcIiAoY2xpY2spPVwib25DbG9zZUNsaWNrKClcIj5cbiAgICAgIDxtYXQtaWNvbiBtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9zcGFuPlxuICAgIDxkaXYgKm5nSWY9XCJjYW5VcGxvYWRJbWFnZSB8fCBjYW5VcGxvYWRWaWRlbyB8fCBjYW5VcGRhdGVWaWRlb1Byb3BlcnRpZXNcIiBpZD1cInFtc2xpYl9yZWxhdGVkX3BvcHVwX2hlYWRlcl8wMDFcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgcGFuZWxfaGVhZGVyX2hlaWdodF93aXRoX3ZpZGVvX3VwbG9hZDogY2FuVXBsb2FkVmlkZW8sXG4gICAgICBwYW5lbF9oZWFkZXJfaGVpZ2h0X3dpdGhvdXRfdmlkZW9fdXBsb2FkOiAhY2FuVXBsb2FkVmlkZW8gJiYgY2FuVXBsb2FkSW1hZ2UgJiYgY2FuVXBkYXRlVmlkZW9Qcm9wZXJ0aWVzXG4gICAgfVwiIG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiAqbmdJZj1cImNhblVwbG9hZEltYWdlXCIgY2xhc3M9XCJzZWxlY3RlZC1pbWFnZSBjb2wtMTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+e3sgbW9kdWxlVXBsb2FkSW1hZ2VOYW1lIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XG4gICAgICAgICAgICA8Zm9ybT5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHFtcy1mb3JtIHFtcy1maWxlLXVwbG9hZCBhcHBlYXJhbmNlPVwiZmlsbFwiIGNsYXNzPVwiZXhhbXBsZS13aWR0aCBpbnB1dC11cGxvYWRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4IHN2Z0ljb249XCJ1cGxvYWRcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlVwbG9hZCBmaWxlXCIgW2Zvcm1Db250cm9sXT1cInFtc0lucHV0SW1hZ2VUeXBlXCIgcW1zLWZpbGUtdXBsb2FkLWRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICNmaWxlRGlzcGxheSB2YWx1ZT1cInt7cW1zSW5wdXRJbWFnZUZpbGU/IHFtc0lucHV0SW1hZ2VGaWxlLmZpbGVOYW1lIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJpc0xvYWRpbmdJbWFnZUZpbGUgPyAnZGlzYWJsZWQnIDogbnVsbFwiIHJlYWRvbmx5PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBoaWRkZW4gdHlwZT1cImZpbGVcIiBbKGlucHV0RmlsZSldPVwicW1zSW5wdXRJbWFnZUZpbGVcIiBxbXMtZmlsZS11cGxvYWQtc2VsZWN0b3IgI2ZpbGVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgW2FjY2VwdEV4dGVuc2lvbnNdPVwiYWNjZXB0RXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIucGpwLCAuanBnLCAucGpwZWcsIC5qcGVnLCAuamZpZiwgLnBuZywgLmdpZiwgLmJtcCwgLndlYnAsIC50aWYsIC50aWZmXCJcbiAgICAgICAgICAgICAgICAgIFttYXhTaXplXT1cIm1heFZpZGVvVGh1bWJuYWlsU2l6ZUtCXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUltYWdlKCRldmVudClcIj5cblxuICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBtYXRTdWZmaXggbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBkaWFtZXRlcj0nMjAnXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTG9hZGluZ0ltYWdlRmlsZVwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXggcW1zLWlucHV0LWNsZWFyICpuZ0lmPVwicW1zSW5wdXRJbWFnZUZpbGUgJiYgcW1zSW5wdXRJbWFnZUZpbGUuZmlsZU5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gcW1zLWJ0bi1pY29uIGNvbG9yPVwibGlnaHRcIiAoY2xpY2spPVwiY2xlYXJRTVNJbnB1dEltYWdlRmlsZSgpXCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZ0ltYWdlRmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicW1zSW5wdXRJbWFnZUZpbGUgJiYgcW1zSW5wdXRJbWFnZUZpbGUudHlwZUVycm9yID09IDFcIj5cbiAgICAgICAgICAgICAgICAgIHt7IExBTkcuUU1TQ0tFRElUT1IuRVhURU5TSU9OX0lTX05PVF9TVVBQT1JURUQgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPnt7IExBTkcuUU1TQ0tFRElUT1IuVklERU9fSU1BR0UgfCB1cHBlcmNhc2V9fTo8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImV4YW1wbGUtd2lkdGggaW5wdXQtdXBsb2FkXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInZpZGVvRGF0YS5wb3N0ZXJcIj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtaW1hZ2UgY29sLTEyXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjYW5VcGxvYWRWaWRlb1wiIGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj57eyBtb2R1bGVVcGxvYWRGaWxlTmFtZSB8IHVwcGVyY2FzZSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxuICAgICAgICAgICAgPGZvcm0+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBxbXMtZm9ybSBxbXMtZmlsZS11cGxvYWQgYXBwZWFyYW5jZT1cImZpbGxcIiBjbGFzcz1cImV4YW1wbGUtd2lkdGggaW5wdXQtdXBsb2FkXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeCBzdmdJY29uPVwidXBsb2FkXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJVcGxvYWQgZmlsZVwiIFtmb3JtQ29udHJvbF09XCJxbXNJbnB1dFZpZGVvVHlwZVwiIHFtcy1maWxlLXVwbG9hZC1kaXNwbGF5XG4gICAgICAgICAgICAgICAgICAjZmlsZURpc3BsYXkgdmFsdWU9XCJ7e3Ftc0lucHV0VmlkZW9GaWxlPyBxbXNJbnB1dFZpZGVvRmlsZS5maWxlTmFtZSA6ICcnfX1cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXNMb2FkaW5nVmlkZW9GaWxlID8gJ2Rpc2FibGVkJyA6IG51bGxcIiByZWFkb25seT5cbiAgICAgICAgICAgICAgICA8aW5wdXQgaGlkZGVuIHR5cGU9XCJmaWxlXCIgWyhpbnB1dEZpbGUpXT1cInFtc0lucHV0VmlkZW9GaWxlXCIgcW1zLWZpbGUtdXBsb2FkLXNlbGVjdG9yICNmaWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIFthY2NlcHRFeHRlbnNpb25zXT1cImFjY2VwdEV4dGVuc2lvbnNGb3JWaWRlb1wiIGFjY2VwdD1cIi5tcDRcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRmlsZSgkZXZlbnQpXCI+XG5cbiAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgbWF0U3VmZml4IG1vZGU9XCJpbmRldGVybWluYXRlXCIgZGlhbWV0ZXI9JzIwJ1xuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0xvYWRpbmdWaWRlb0ZpbGVcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4IHFtcy1pbnB1dC1jbGVhciAqbmdJZj1cInFtc0lucHV0VmlkZW9GaWxlICYmIHFtc0lucHV0VmlkZW9GaWxlLmZpbGVOYW1lXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCIgKGNsaWNrKT1cImNsZWFyUU1TSW5wdXRWaWRlb0ZpbGUoKVwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdWaWRlb0ZpbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInFtc0lucHV0VmlkZW9GaWxlICYmIHFtc0lucHV0VmlkZW9GaWxlLnR5cGVFcnJvciA9PSAxXCI+XG4gICAgICAgICAgICAgICAgICB7eyBMQU5HLlFNU0NLRURJVE9SLkFDQ0VQVF9NUDRfT05MWSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgKm5nSWY9XCJjYW5VcGRhdGVWaWRlb1Byb3BlcnRpZXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj57eyBMQU5HLlFNU0NLRURJVE9SLlZJREVPX1NPVVJDRSB8IHVwcGVyY2FzZX19OjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZXhhbXBsZS13aWR0aCBpbnB1dC11cGxvYWRcIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwidmlkZW9EYXRhLnNyY1wiPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJjYW5VcGRhdGVWaWRlb1Byb3BlcnRpZXNcIiBjbGFzcz1cInNlbGVjdGVkLWltYWdlIGNvbC0xMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImV4YW1wbGUtd2lkdGggaW5wdXQtdXBsb2FkXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgTEFORy5XSURUSCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1hdElucHV0IFsobmdNb2RlbCldPVwidmlkZW9EYXRhLndpZHRoXCI+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZXhhbXBsZS13aWR0aCBpbnB1dC11cGxvYWRcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBMQU5HLkhFSUdIVCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1hdElucHV0IFsobmdNb2RlbCldPVwidmlkZW9EYXRhLmhlaWdodFwiPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImV4YW1wbGUtd2lkdGggaW5wdXQtdXBsb2FkXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+SWQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwidmlkZW9EYXRhLmlkXCI+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibW9kdWxlLW5hbWVcIj57eyBtb2R1bGVOYW1lIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGlkPVwicW1zbGliX3JlbGF0ZWRfcG9wdXBfc2VhcmNoXCIgY2xhc3M9XCJpbnB1dF9fZmllbGRcIj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cInt7IExBTkcuU0VBUkNIIH19XCIgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cIm15Q29udHJvbFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiIC8+XG4gICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJsaW5lX19kaXZpZGVyXCI+PC9kaXY+XG5cbiAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBjbGFzcz1cIm1hdC1hdXRvY29tcGxldGVfcmVsYXRlZC12aWV3cG9ydFwiXG4gICAgKG9wdGlvblNlbGVjdGVkKT1cInNlbGVjdFJlbGF0ZWQoJGV2ZW50Lm9wdGlvbi52YWx1ZSlcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVdoZW5TZWxlY3RSZWxhdGVkT3B0aW9uXCI+XG4gICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBxbXMtc2Nyb2xsYmFyIGl0ZW1TaXplPVwiMTBcIiBbY2xhc3MucmVsYXRlZC12aWV3cG9ydF09XCJpc0lucHV0VmFsdWVcIlxuICAgICAgKm5nSWY9XCJmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0eXBlIG9mIHNlYXJjaE9yZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hfX21vZHVsZS1yZXN1bHRcIiAqbmdJZj1cImNhblNob3dTZWFyY2hPcHRpb24odHlwZS52YWx1ZSlcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlYXJjaF9fbW9kdWxlLXRpdGxlXCI+e3sgZ2V0VGl0bGUodHlwZS52YWx1ZSkgfX08L3NwYW4+XG4gICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJzZWFyY2hfX29wdGlvblwiICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ2V0TW9kdWxlRmlsdGVyZWRPcHRpb25zKHR5cGUudmFsdWUpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIiBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCI+XG4gICAgICAgICAgICA8cW1zLWxpc3QtaXRlbSB0eXBlPVwiaW1hZ2Utc3F1YXJlXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBsZWFkaW5nLWljb24gdHlwZT1cImltYWdlLXNxdWFyZVwiIFtzdmdJY29uXT1cImdldE5vZGVJY29uKG9wdGlvbilcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICA8ZGl2IHFtcy1saXN0LWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8ZGl2IHFtcy1saW5lIHR5cGU9XCJjYXB0aW9uXCIgcW1zLXRvb2wtdGlwPVwie3tcbiAgICAgICAgICAgICAgICAgICAgaXNFbGxpcHNpc0FjdGl2ZShzZWFyY2hJdGVtUmVzdWx0KSA/IG9wdGlvbi5wYXJlbnROYW1lIDogJydcbiAgICAgICAgICAgICAgICAgIH19XCIgbW9kZT1cImRhcmtcIiAqbmdJZj1cImdldFBhcmVudE5hbWUob3B0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gI3NlYXJjaEl0ZW1SZXN1bHQgY2xhc3M9XCJzZWFyY2hfX3Jlc3VsdF9fcGFyZW50LW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnBhcmVudE5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHFtcy1saW5lIHR5cGU9XCJzdWJ0aXRsZVwiIGNsYXNzPVwic2VhcmNoX19vcHRpb24tbmFtZVwiPlxuICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLml0ZW1OYW1lIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcHRpb25cIiAqbmdJZj1cIm9wdGlvbi5icmVhZGN1bWJzICYmIG9wdGlvbi5icmVhZGN1bWJzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgPHFtcy1icmVhZGNydW1iIGNsYXNzPVwiYnJlYWRjcnVtYi1jb250YWluZXJcIiB0eXBlPVwidGFibGVcIiBudW1EaXNwbGF5SXRlbT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBbbm9kZXNdPVwib3B0aW9uLmJyZWFkY3VtYnNcIj5cbiAgICAgICAgICAgICAgICAgIDwvcW1zLWJyZWFkY3J1bWI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHFtcy1saW5lIGNvbG9yPVwiZGVmYXVsdC1zdWJ0aXRsZVwiICpuZ0lmPVwiZ2V0SXRlbUlkKG9wdGlvbilcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHNlYXJjaF9fZGVzY3JpcHRpb24taWNvblwiPmxvY2FsX29mZmVyPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAge3sgZ2V0SXRlbUlkKG9wdGlvbikgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3Ftcy1saXN0LWl0ZW0+XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICA8L21hdC1hdXRvY29tcGxldGU+XG5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJxbXMtc2Nyb2xsYmFyIHFtc2xpYl9yZWxhdGVkX3BvcHVwX2NvbnRlbnRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgIHBhbmVsX19jb250ZW50X2l0ZW06IGNoZWNrZWROb2RlTGlzdC5sZW5ndGgsXG4gICAgICAgIHBhbmVsX19jb250ZW50OiAhY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCxcbiAgICAgICAgcGFuZWxfX2NvbnRlbnRfaGVpZ2h0X3dpdGhfdXBsb2FkOiBjYW5VcGxvYWRJbWFnZSAmJiAhY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCxcbiAgICAgICAgcGFuZWxfX2NvbnRlbnRfaXRlbV9oZWlnaHRfd2l0aF91cGxvYWQ6IGNhblVwbG9hZEltYWdlICYmIGNoZWNrZWROb2RlTGlzdC5sZW5ndGgsXG4gICAgICAgICdjb2wtNic6IHNwbGl0VmlldyxcbiAgICAgICAgJ2NvbC0xMic6ICFzcGxpdFZpZXdcbiAgICAgIH1cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmVlRGF0YTEubGVuZ3RoID4gMFwiPlxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBoaWRlVG9nZ2xlIGlkPVwicW1zbGliX3JlbGF0ZWRfcG9wdXBfY29tbW9uXzAwMVwiIFtleHBhbmRlZF09XCJpc0NvbW1vbkV4cGFuZGVkXCJcbiAgICAgICAgICAob3BlbmVkKT1cImlzQ29tbW9uRXhwYW5kZWQgPSB0cnVlXCIgKGNsb3NlZCk9XCJpc0NvbW1vbkV4cGFuZGVkID0gZmFsc2VcIiBjbGFzcz1cInBhbmVsLXRyZWVcIj5cbiAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJwYWRkaW5nLTVcIj5cbiAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCJtb2R1bGVJZCA9PT0gbW9kdWxlLmRvY3VtZW50UHJvY2Vzc1wiPlxuICAgICAgICAgICAgICB7eyBMQU5HLlBST0NFU1NFUyB8IHVwcGVyY2FzZSB9fVxuICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlICpuZ0lmPVwibW9kdWxlSWQgPT09IG1vZHVsZS5kZXZpYXRpb25cIj5cbiAgICAgICAgICAgICAge3sgTEFORy5ERVZJQVRJT04gfCB1cHBlcmNhc2UgfX1cbiAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cIm1vZHVsZUlkID09PSBtb2R1bGUuY2hlY2tsaXN0XCI+XG4gICAgICAgICAgICAgIHt7IExBTkcuQ0hFQ0tMSVNUIHwgdXBwZXJjYXNlIH19XG4gICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCJtb2R1bGVJZCA9PT0gbW9kdWxlLnJpc2tcIj5cbiAgICAgICAgICAgICAge3sgTEFORy5BU1NFU1NNRU5UIHwgdXBwZXJjYXNlIH19XG4gICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDxidXR0b24gcW1zLWJ0bi1pY29uIGNsYXNzPVwicmVsYXRlZF9wb3B1cF90b2dnbGUtYnRuXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIGlzQ29tbW9uRXhwYW5kZWQgPyBcImtleWJvYXJkX2Fycm93X3VwXCIgOiBcImtleWJvYXJkX2Fycm93X2Rvd25cIlxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxkaXYgaWQ9XCJxbXNsaWJfcmVsYXRlZF9wb3B1cF9jb21tb25fMDAyXCI+XG4gICAgICAgICAgICA8cW1zLXRyZWUgW3RyZWVEYXRhXT1cInRyZWVEYXRhMVwiIFt0cmVlQ29uZmlnXT1cInRyZWVDb25maWcxXCIgW3NlbGVjdGVkRGF0YV09XCJzZWxlY3RlZERhdGFcIlxuICAgICAgICAgICAgICBbc2VsZWN0ZWRSaXNrRGF0YV09XCJzZWxlY3RlZFJpc2tEYXRhXCIgW2Rpc2FibGVkTGlzdF09XCJkaXNhYmxlZExpc3RcIlxuICAgICAgICAgICAgICAoY2hlY2tCb3hFdmVudCk9XCJnZXRDb21tb25DaGVja2VkTm9kZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG5vZGVFeHBhbmRFdmVudCk9XCJnZXRDaGlsZHJlbk9mRm9sZGVyKCRldmVudCwgZGF0YVR5cGUuYXJlYSlcIlxuICAgICAgICAgICAgICAoc2VsZWN0Tm9kZUV2ZW50KT1cInNlbGVjdE5vZGVUcmVlRXZlbnQoJGV2ZW50KVwiIChnZXRDaGlsZE5vZGVTZWxlY3RPbmUpPVwiZ2V0Q2hpbGROb2RlU2VsZWN0T25lKCRldmVudClcIlxuICAgICAgICAgICAgICBbZXhwYW5kT25UaXRsZUNsaWNrXT1cIiFzcGxpdFZpZXdcIiBbcGFyZW50Tm9kZU9uQ2xpY2tdPVwicGFyZW50Tm9kZVNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgKHRyZWVDb250cm9sTm9kZXMpPVwic2VsZWN0VHJlZUNvbnRyb2xOb2RlUHJvY2VzcygkZXZlbnQpXCI+PC9xbXMtdHJlZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmVlRGF0YTIubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibW9kdWxlSWQgPT09IG1vZHVsZS5kb2N1bWVudFByb2Nlc3NcIiBjbGFzcz1cImxpbmVfX2RpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBoaWRlVG9nZ2xlICpuZ0lmPVwibW9kdWxlSWQgPT09IG1vZHVsZS5kb2N1bWVudFByb2Nlc3NcIlxuICAgICAgICAgIGlkPVwicW1zbGliX3JlbGF0ZWRfcG9wdXBfZG9jdW1lbnRfMDAxXCIgW2V4cGFuZGVkXT1cImlzRG9jdW1lbnRFeHBhbmRlZFwiIChvcGVuZWQpPVwiaXNEb2N1bWVudEV4cGFuZGVkID0gdHJ1ZVwiXG4gICAgICAgICAgKGNsb3NlZCk9XCJpc0RvY3VtZW50RXhwYW5kZWQgPSBmYWxzZVwiIGNsYXNzPVwicGFuZWwtdHJlZVwiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cInBhZGRpbmctNVwiPlxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAge3sgTEFORy5ET0NVTUVOVFMgfCB1cHBlcmNhc2UgfX1cbiAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPGJ1dHRvbiBxbXMtYnRuLWljb24gY2xhc3M9XCJyZWxhdGVkX3BvcHVwX3RvZ2dsZS1idG5cIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgaXNEb2N1bWVudEV4cGFuZGVkXG4gICAgICAgICAgICAgICAgPyBcImtleWJvYXJkX2Fycm93X3VwXCJcbiAgICAgICAgICAgICAgICA6IFwia2V5Ym9hcmRfYXJyb3dfZG93blwiXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgPGRpdiBpZD1cInFtc2xpYl9yZWxhdGVkX3BvcHVwX2RvY3VtZW50XzAwMlwiPlxuICAgICAgICAgICAgPHFtcy10cmVlIFt0cmVlRGF0YV09XCJ0cmVlRGF0YTJcIiBbdHJlZUNvbmZpZ109XCJ0cmVlQ29uZmlnMlwiIFtzZWxlY3RlZERhdGFdPVwic2VsZWN0ZWREYXRhMlwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZExpc3RdPVwiZGlzYWJsZWRMaXN0MlwiIChjaGVja0JveEV2ZW50KT1cImdldERvY3VtZW50Q2hlY2tlZE5vZGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChub2RlRXhwYW5kRXZlbnQpPVwiZ2V0Q2hpbGRyZW5PZkZvbGRlcigkZXZlbnQsIGRhdGFUeXBlLmZvbGRlcilcIlxuICAgICAgICAgICAgICAoc2VsZWN0Tm9kZUV2ZW50KT1cInNlbGVjdE5vZGVUcmVlMkV2ZW50KCRldmVudClcIiAoZ2V0Q2hpbGROb2RlU2VsZWN0T25lKT1cImdldENoaWxkTm9kZVNlbGVjdE9uZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2V4cGFuZE9uVGl0bGVDbGlja109XCIhc3BsaXRWaWV3XCIgW3BhcmVudE5vZGVPbkNsaWNrXT1cInBhcmVudE5vZGVTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICh0cmVlQ29udHJvbE5vZGVzKT1cInNlbGVjdFRyZWVDb250cm9sTm9kZURvY3VtZW50KCRldmVudClcIj48L3Ftcy10cmVlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwic3BsaXRWaWV3XCIgY2xhc3M9XCJxbXMtc2Nyb2xsYmFyIHFtc2xpYi1yZWxhdGVkLXBvcHVwLXNwbGl0dmlldyBxbXNsaWJfcmVsYXRlZF9wb3B1cF9jb250ZW50IGNvbC02XCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgcGFuZWxfX2NvbnRlbnRfaXRlbTogY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCxcbiAgICAgICAgcGFuZWxfX2NvbnRlbnQ6ICFjaGVja2VkTm9kZUxpc3QubGVuZ3RoXG4gICAgICB9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3BsaXR2aWV3LWhlYWRlclwiICpuZ0lmPVwic2VsZWN0ZWRGb2xkZXJcIj5cbiAgICAgICAge3sgc3BsaXRWaWV3VGl0bGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImV4cGFuZC1ub2RlXCIgKm5nRm9yPVwibGV0IG5vZGUgb2YgaXRlbUluU3BsaXR2aWV3XCI+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggcW1zLWdyb3VwLW9wdGlvbnMgW2Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIiBjb2xvcj1cImRlZmF1bHRcIiBbY2hlY2tlZF09XCJpc05vZGVTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RJdGVtKG5vZGUpXCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3IgbWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiBbc3ZnSWNvbl09XCJnZXROb2RlSWNvbihub2RlKVwiPjwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ub2RlXCI+e3sgbm9kZS5pdGVtTmFtZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aFwiIGNsYXNzPVwibGluZV9fZGl2aWRlclwiPjwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHByLTAgcGUtMFwiPlxuICAgICAgPGRpdiAqbmdJZj1cImNoZWNrZWROb2RlTGlzdC5sZW5ndGhcIiBjbGFzcz1cInBhbmVsX19pdGVtIHFtcy1zY3JvbGxiYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0ZWRfX2l0ZW1fX2lubGluZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoZWNrZWROb2RlTGlzdFwiPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpdGVtLml0ZW1OYW1lXCIgbWF0LWJ1dHRvbiBjbGFzcz1cInJlbGF0ZWRfX2l0ZW1fX2NvbnRlbnRcIiBxbXMtdG9vbC10aXA9XCJ7e1xuICAgICAgICAgICAgICBpc0VsbGlwc2lzQWN0aXZlKGl0ZW1OYW1lKSA/IGdldEl0ZW1DaGlwTmFtZShpdGVtKSA6ICcnXG4gICAgICAgICAgICB9fVwiIG1vZGU9XCJkYXJrXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlbGF0ZWRfX2l0ZW1fX2NvbnRlbnRfbmFtZVwiICNpdGVtTmFtZT57e1xuICAgICAgICAgICAgICBnZXRJdGVtQ2hpcE5hbWUoaXRlbSlcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhKHRyZWVDb25maWcxPy5zZWxlY3RPbmUgfHwgdHJlZUNvbmZpZzI/LnNlbGVjdE9uZSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KGl0ZW0pXCI+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImxpbmVfX2RpdmlkZXJcIj48L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY29uZmlybV9fYnV0dG9uX19ncm91cHNcIj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiIWNoZWNrZWROb2RlTGlzdC5sZW5ndGhcIiBxbXMtYnRuIHN0eWxlPVwibWFyZ2luLXRvcDogN3B4XCJcbiAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdWaWRlb0ZpbGUgfHwgaXNMb2FkaW5nSW1hZ2VGaWxlXCIgKGNsaWNrKT1cIm9uQWRkQ2xpY2soKVwiPlxuICAgICAge3sgTEFORy5BREQgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aFwiIHFtcy1idG4gc3R5bGU9XCJtYXJnaW4tdG9wOiAwcHhcIlxuICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1ZpZGVvRmlsZSB8fCBpc0xvYWRpbmdJbWFnZUZpbGVcIiAoY2xpY2spPVwib25BZGRDbGljaygpXCI+XG4gICAgICB7eyBMQU5HLkFERCB9fSAoe3sgY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCB9fSlcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHFtcy1idG4tdGV4dCBbbmdTdHlsZV09XCJ7ICdtYXJnaW4tdG9wJzogY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCA/ICcwcHgnIDogJzdweCcgfVwiIChjbGljayk9XCJvbkNsb3NlQ2xpY2soKVwiPlxuICAgICAge3sgTEFORy5DQU5DRUwgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj4gLS0+Il19
|
1253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsYXRlZC1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xbXMtYW5ndWxhci9zcmMvbGliL2NvbXBvbmVudHMvcmVsYXRlZC9wb3B1cC9yZWxhdGVkLXBvcHVwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Ftcy1hbmd1bGFyL3NyYy9saWIvY29tcG9uZW50cy9yZWxhdGVkL3BvcHVwL3JlbGF0ZWQtcG9wdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF1QyxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQWdDLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDek0sT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEUsT0FBTyxFQUFnQixlQUFlLEVBQWEsTUFBTSwwQkFBMEIsQ0FBQztBQUdwRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0VBQWdFLENBQUM7QUFDbEcsT0FBTyxFQUFxQixhQUFhLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQU1wSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDckUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXZELE9BQU8sRUFBRSxRQUFRLEVBQWlCLE1BQU0sNkJBQTZCLENBQUM7QUFHdEUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFFQUFxRSxDQUFDO0FBQzlGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUVuRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVMvRCxNQUFNLE9BQU8scUJBQXFCO0lBZ0ZoQyxZQUNVLEtBQXdCLEVBQ3pCLFNBQWtDLEVBQ2xDLFNBQThDLEVBQzlDLGFBQXNDLEVBQ3JDLFlBQTZCLEVBQzdCLFNBQXVCLEVBQ3ZCLGNBQXNDLEVBQ3RDLElBQWdCLEVBQ2hCLGFBQXVDLEVBQ3hDLE1BQWlCLEVBQ1EsSUFBZTtRQVZ2QyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQUN6QixjQUFTLEdBQVQsU0FBUyxDQUF5QjtRQUNsQyxjQUFTLEdBQVQsU0FBUyxDQUFxQztRQUM5QyxrQkFBYSxHQUFiLGFBQWEsQ0FBeUI7UUFDckMsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBQzdCLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsbUJBQWMsR0FBZCxjQUFjLENBQXdCO1FBQ3RDLFNBQUksR0FBSixJQUFJLENBQVk7UUFDaEIsa0JBQWEsR0FBYixhQUFhLENBQTBCO1FBQ3hDLFdBQU0sR0FBTixNQUFNLENBQVc7UUFDUSxTQUFJLEdBQUosSUFBSSxDQUFXO1FBMUZqRCxrQkFBYSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFHcEMsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsMEJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLHlCQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMxQixjQUFTLEdBQXFCLEVBQUUsQ0FBQztRQUNqQyxjQUFTLEdBQXFCLEVBQUUsQ0FBQztRQUlqQyxvQkFBZSxHQUF3QixFQUFFLENBQUM7UUFDMUMsaUJBQVksR0FBd0IsRUFBRSxDQUFDO1FBQ3ZDLGlCQUFZLEdBQXdCLEVBQUUsQ0FBQztRQUN2QyxrQkFBYSxHQUF3QixFQUFFLENBQUM7UUFFeEMsc0JBQWlCLEdBQXdCLEVBQUUsQ0FBQztRQUM1Qyx3QkFBbUIsR0FBd0IsRUFBRSxDQUFDO1FBQzlDLHNCQUFpQixHQUF3QixFQUFFLENBQUM7UUFDNUMsdUJBQWtCLEdBQXdCLEVBQUUsQ0FBQztRQUc3QyxXQUFNLEdBQUcsVUFBVSxDQUFDO1FBQ3BCLGFBQVEsR0FBRyxRQUFRLENBQUM7UUFDcEIsYUFBUSxHQUFHLENBQUMsQ0FBQztRQUNiLHFCQUFnQixHQUFRLEVBQUUsQ0FBQztRQUMzQixpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQUN2QixrQkFBYSxHQUFRLEVBQUUsQ0FBQztRQU14Qix1QkFBa0IsR0FBRyxJQUFJLENBQUM7UUFDMUIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUMzQixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUVqQixjQUFTLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3JDLG9CQUFlLEdBQW9CLEVBQUUsQ0FBQztRQUN0QyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQUVyQixvQkFBZSxHQUFlLEVBQUUsQ0FBQztRQUNqQyxtQkFBYyxHQUFpQixJQUFJLENBQUM7UUFDcEMsbUJBQWMsR0FBVyxJQUFJLENBQUM7UUFDOUIsMEJBQXFCLEdBQVEsRUFBRSxDQUFDO1FBRWhDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUM5Qyx1QkFBa0IsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBSXhDLHFCQUFnQixHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZHLDZCQUF3QixHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbkMsc0JBQWlCLEdBQUcsSUFBSSxrQkFBa0IsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO1NBQ3hDLENBQUMsQ0FBQztRQUNILHNCQUFpQixHQUFHLElBQUksa0JBQWtCLENBQUMsRUFBRSxFQUFFO1lBQzdDLGdCQUFnQixDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQztTQUNoRCxDQUFDLENBQUM7UUFDSCxzQkFBaUIsR0FBc0IsSUFBSSxDQUFDO1FBQzVDLHNCQUFpQixHQUFzQixJQUFJLENBQUM7UUFDNUMsdUJBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQzNCLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUMzQixnQkFBVyxHQUFHLElBQUksS0FBSyxFQUFFLENBQUM7UUFNMUIsdUJBQWtCLEdBQVcsRUFBRSxDQUFDO1FBQ2hDLDZCQUF3QixHQUFZLEtBQUssQ0FBQztRQW1CeEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNsQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1FBQ3hELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUM7UUFDdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDcEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEVBQUUsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUNqRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQztRQUM5RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDbEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztRQUNoRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7UUFDMUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzFDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxVQUFVLENBQUMsa0NBQWtDLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDdEgsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQzlCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUM7UUFDOUQsY0FBYyxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1RCxjQUFjLENBQUMsdUJBQXVCLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDN0QsY0FBYyxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUMzRCxjQUFjLENBQUMscUJBQXFCLENBQUMsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlELGNBQWMsQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUQsY0FBYyxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN6RCxZQUFZLENBQUMsaUJBQWlCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUdELFNBQVMsQ0FBQyxLQUFLO1FBQ2IsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ25ELGtDQUFrQztRQUNwQyxDQUFDO0lBQ0gsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdkYsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDUixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hELENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDckYsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNwRCxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBRXRGLElBQUksQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO1lBQzNCLElBQUksR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNmLElBQUksZUFBZSxHQUFnQixFQUFFLENBQUM7Z0JBQ3RDLElBQUksWUFBWSxHQUFnQixFQUFFLENBQUM7Z0JBRW5DLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2pCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7d0JBQ3ZDLElBQUksY0FBYyxHQUFHLElBQUksU0FBUyxFQUFFLENBQUM7d0JBQ3JDLGNBQWMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDakMsY0FBYyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUN6QyxjQUFjLENBQUMsU0FBUyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQzt3QkFDOUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7d0JBQzdCLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQzt3QkFDdEMsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLEVBQUUsVUFBVSxDQUFDO3dCQUMzQyxjQUFjLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzt3QkFDOUIsY0FBYyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO3dCQUN0QyxlQUFlLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO29CQUN2QyxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxXQUFXLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQzt3QkFDbEMsV0FBVyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUM5QixXQUFXLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7d0JBQ3RDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO3dCQUMzQyxXQUFXLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQzt3QkFDMUIsV0FBVyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUNuQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksRUFBRSxVQUFVLENBQUM7d0JBQ3hDLFdBQVcsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO3dCQUMzQixXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7d0JBQ25DLFdBQVcsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzt3QkFDekMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztvQkFDakMsQ0FBQztnQkFFSCxDQUFDLENBQUMsQ0FBQztnQkFFSCxJQUFJLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUVqRyxJQUFJLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUMxRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUczRixJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxhQUFhLEdBQW1CLEVBQUUsQ0FBQztvQkFDdkMsSUFBSSxjQUFjLEdBQW1CLEVBQUUsQ0FBQztvQkFFeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQy9CLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDOzRCQUNwRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQ0FDNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO29DQUNyRixhQUFhLENBQUMsSUFBSSxDQUFDO3dDQUNqQixRQUFRLEVBQUUsS0FBSzt3Q0FDZixVQUFVLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7d0NBQ3RELFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSzt3Q0FDcEQsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFO3dDQUNSLEtBQUssRUFBRSxDQUFDO3dDQUNSLFNBQVMsRUFBRSxTQUFTO3dDQUNwQixJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVE7d0NBQ2hCLFFBQVEsRUFBRSxDQUFDLENBQUMsUUFBUTtxQ0FDckIsQ0FBQyxDQUFBO2dDQUNKLENBQUM7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQzs2QkFBTSxDQUFDOzRCQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dDQUM1QixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0NBQ3JGLGNBQWMsQ0FBQyxJQUFJLENBQUM7d0NBQ2xCLFFBQVEsRUFBRSxLQUFLO3dDQUNmLFVBQVUsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSzt3Q0FDeEQsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO3dDQUN0RCxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7d0NBQ1IsS0FBSyxFQUFFLENBQUM7d0NBQ1IsU0FBUyxFQUFFLFNBQVM7d0NBQ3BCLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUTt3Q0FDaEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRO3FDQUNyQixDQUFDLENBQUE7Z0NBQ0osQ0FBQzs0QkFDSCxDQUFDLENBQUMsQ0FBQzt3QkFDTCxDQUFDO29CQUVILENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztvQkFDN0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO2dCQUNsRSxDQUFDO1lBRUgsQ0FBQztRQUVILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDcEcsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELGtCQUFrQjtRQUNoQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLElBQUksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hELGlDQUFpQztZQUNqQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDekIsQ0FBQztRQUNELGdDQUFnQztRQUNoQyxvQ0FBb0M7UUFDcEMsSUFBSTtJQUNOLENBQUM7SUFFRCxhQUFhLENBQUMsUUFBZ0I7UUFDNUIsSUFBSSxRQUFRLENBQUM7UUFDYixRQUFRLFFBQVEsRUFBRSxDQUFDO1lBQ2pCLEtBQUssVUFBVSxDQUFDLGVBQWU7Z0JBQzdCLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztnQkFDakMsTUFBTTtZQUNSLEtBQUssVUFBVSxDQUFDLFNBQVM7Z0JBQ3ZCLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDbkMsTUFBTTtZQUNSLEtBQUssVUFBVSxDQUFDLFNBQVM7Z0JBQ3ZCLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDbkMsTUFBTTtZQUNSLEtBQUssVUFBVSxDQUFDLElBQUk7Z0JBQ2xCLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDOUIsTUFBTTtZQUNSO2dCQUNFLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztnQkFDbEMsTUFBTTtRQUNWLENBQUM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQscUJBQXFCLENBQUMsSUFBa0I7UUFDdEMsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO1FBQy9DLENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUV4QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV0SyxNQUFNLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUNoQyxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztRQUdqQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFMUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxFQUFFLENBQUM7b0JBQ3JILG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDckMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsb0JBQW9CLENBQUM7UUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFFM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRTlLLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDeEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQy9CLElBQUksT0FBTyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsRUFBRSxDQUFDO29CQUNySCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDO1FBQ2hELElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1FBRTVDLDZFQUE2RTtRQUM3RSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsV0FBVyxDQUFDLEdBQVUsRUFBRSxJQUFXO1FBQ2pDLE9BQU8sR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxlQUFlLENBQUMsR0FBZ0I7UUFDOUIsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ3BCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztRQUN4RyxNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFnQixDQUFDO1FBQ3pGLElBQUksYUFBYSxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ25DLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEcsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUMsQ0FBZ0IsQ0FBQztRQUM5RyxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLENBQWdCLENBQUM7UUFFMUYsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixJQUFJLGFBQWEsQ0FBQyxZQUFZLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQzVDLFdBQVcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLFlBQVksSUFBSSxDQUFDO1lBQy9ELENBQUM7aUJBQ0ksQ0FBQztnQkFDSixXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLFNBQVMsSUFBSSxDQUFDO1lBQzlDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFTO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQzVCLENBQUM7YUFDSSxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxRQUFnQjtRQUN2QyxJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QyxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUN2RSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNyRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN6QyxJQUFJLE9BQU8sQ0FBQyxFQUFFLEtBQUssUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO3dCQUMvQixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7UUFFSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELGdCQUFnQjtRQUNkLGlDQUFpQztJQUNuQyxDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQWtCO1FBQy9CLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDaEQsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFjO1FBQzFCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQztZQUMvRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUN6QyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDcEgsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDZCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNsQixJQUFJLElBQVMsQ0FBQztZQUNkLElBQUksTUFBYyxDQUFDO1lBRW5CLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN0QixLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUTtvQkFDekIsYUFBYTtvQkFDYixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUN6RCxPQUFPLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQztvQkFDNUgsQ0FBQyxDQUFDLENBQUM7b0JBRUgsSUFBSSxpQkFBaUIsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDM0IsT0FBTztvQkFDVCxDQUFDO29CQUNELFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDdEMsT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO29CQUMxRixDQUFDLENBQUMsQ0FBQztvQkFFSCxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ2hDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQzt3QkFDaEMsTUFBTSxRQUFRLEdBQUc7NEJBQ2YsRUFBRSxFQUFFLElBQUksQ0FBQyxPQUFPOzRCQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVM7NEJBQ3BCLFFBQVEsRUFBRSxFQUFFOzRCQUNaLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTTt5QkFDdEIsQ0FBQzt3QkFDRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDM0UsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLElBQUksV0FBVyxHQUFjOzRCQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQzs0QkFDM0QsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7NEJBQy9ELFFBQVEsRUFBRSxFQUFFOzRCQUNaLE9BQU8sRUFBRSxJQUFJOzRCQUNiLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBRTs0QkFDaEIsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFROzRCQUN4QixRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDOzRCQUM5QixVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsWUFBWSxDQUFDOzRCQUNoQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWTt5QkFDOUIsQ0FBQTt3QkFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO3dCQUNsRCxJQUFJLGVBQWUsR0FBaUI7NEJBQ2xDLFFBQVEsRUFBRSxLQUFLOzRCQUNmLFVBQVUsRUFBRSxLQUFLOzRCQUNqQixRQUFRLEVBQUUsS0FBSzs0QkFDZixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7NEJBQ1gsS0FBSyxFQUFFLENBQUM7NEJBQ1IsU0FBUyxFQUFFLFNBQVM7NEJBQ3BCLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTs0QkFDbkIsUUFBUSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUM7eUJBQzlELENBQUE7d0JBQ0QsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7d0JBQ3hCLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO3dCQUN2QixJQUFJLGFBQWEsR0FBbUIsRUFBRSxDQUFDO3dCQUN2QyxJQUFJLGNBQWMsR0FBbUIsRUFBRSxDQUFDO3dCQUV4QyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUM7NEJBQ2hDLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUMvQixJQUFJLENBQUMsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQ0FDdkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0NBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQzs0Q0FDckYsY0FBYyxDQUFDLElBQUksQ0FBQztnREFDbEIsUUFBUSxFQUFFLEtBQUs7Z0RBQ2YsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO2dEQUN4RCxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0RBQ3RELEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtnREFDUixLQUFLLEVBQUUsQ0FBQztnREFDUixTQUFTLEVBQUUsU0FBUztnREFDcEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRO2dEQUNoQixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7NkNBQ3JCLENBQUMsQ0FBQTt3Q0FDSixDQUFDO29DQUNILENBQUMsQ0FBQyxDQUFDO2dDQUNMLENBQUM7NEJBQ0gsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQzt3QkFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUM7d0JBQzdELElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxjQUFjLEVBQUUsZUFBZSxDQUFDLENBQUM7d0JBQ2pGLFVBQVUsQ0FBQyxHQUFHLEVBQUU7NEJBQ2QsTUFBTSxRQUFRLEdBQUc7Z0NBQ2YsRUFBRSxFQUFFLFdBQVcsQ0FBQyxPQUFPO2dDQUN2QixJQUFJLEVBQUUsV0FBVyxDQUFDLFNBQVM7Z0NBQzNCLFFBQVEsRUFBRSxFQUFFO2dDQUNaLFFBQVEsRUFBRSxXQUFXLENBQUMsTUFBTTs2QkFDN0IsQ0FBQzs0QkFDRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQzt3QkFDM0UsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFBO29CQUNULENBQUM7b0JBQ0QsTUFBTTtnQkFDUixLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTTtvQkFDdkIsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUN0QyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUM7b0JBQzlELENBQUMsQ0FBQyxDQUFDO29CQUNILE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUN2QixJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzs0QkFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0NBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQ0FDdkIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dDQUNYLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQ0FDdkIsUUFBUSxFQUFFLE1BQU07Z0NBQ2hCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQ0FDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dDQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0NBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTs2QkFDNUIsQ0FBQyxDQUFDO3dCQUNMLENBQUM7NkJBQ0ksQ0FBQzs0QkFDSixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQ0FDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dDQUN2QixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0NBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dDQUN2QixRQUFRLEVBQUUsTUFBTTtnQ0FDaEIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2dDQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7NkJBQzFCLENBQUMsQ0FBQzt3QkFDTCxDQUFDO3dCQUNELE1BQU0sUUFBUSxHQUFHOzRCQUNmLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTTs0QkFDZixJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFROzRCQUNsRCxRQUFRLEVBQUUsRUFBRTs0QkFDWixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7eUJBQ3hCLENBQUM7d0JBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQzlELENBQUM7b0JBQ0QsTUFBTTtnQkFDUixLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtvQkFDckIsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUN0QyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7b0JBQ3hILENBQUMsQ0FBQyxDQUFDO29CQUNILE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO29CQUV2QixJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ2hDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQzs0QkFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0NBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQ0FDdkIsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNO2dDQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtnQ0FDdkIsUUFBUSxFQUFFLE1BQU07Z0NBQ2hCLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWTtnQ0FDL0IsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO2dDQUN6QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0NBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTs2QkFDNUIsQ0FBQyxDQUFDO3dCQUNMLENBQUM7NkJBQ0ksQ0FBQzs0QkFDSixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQ0FDckIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dDQUN2QixFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0NBQ2YsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dDQUN2QixRQUFRLEVBQUUsTUFBTTtnQ0FDaEIsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO2dDQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7NkJBQzFCLENBQUMsQ0FBQzt3QkFDTCxDQUFDO29CQUNILENBQUM7b0JBQ0QsTUFBTSxRQUFRLEdBQUc7d0JBQ2YsRUFBRSxFQUFFLElBQUksQ0FBQyxNQUFNO3dCQUNmLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVE7d0JBQ2xELFFBQVEsRUFBRSxFQUFFO3dCQUNaLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtxQkFDeEIsQ0FBQztvQkFDRixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztvQkFDNUQsTUFBTTtnQkFDUixLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTztvQkFDeEIsTUFBTSx3QkFBd0IsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDL0QsT0FBTyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7b0JBQzVILENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksd0JBQXdCLElBQUksQ0FBQyxFQUFFLENBQUM7d0JBQ2xDLE9BQU87b0JBQ1QsQ0FBQztvQkFDRCxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ3RDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDO29CQUNuSSxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ2hDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO3dCQUN2QixNQUFNLFFBQVEsR0FBRzs0QkFDZixFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU87NEJBQ2hCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUzs0QkFDcEIsUUFBUSxFQUFFLEVBQUU7NEJBQ1osUUFBUSxFQUFFLElBQUksQ0FBQyxNQUFNO3lCQUN0QixDQUFDO3dCQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO29CQUMzRSxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxjQUFjLEdBQWM7NEJBQzlCLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDOzRCQUMzRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQzs0QkFDL0QsUUFBUSxFQUFFLEVBQUU7NEJBQ1osT0FBTyxFQUFFLElBQUk7NEJBQ2IsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFOzRCQUNoQixTQUFTLEVBQUUsSUFBSSxDQUFDLFFBQVE7NEJBQ3hCLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUM7NEJBQzlCLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUM7NEJBQ2hDLFNBQVMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZO3lCQUM5QixDQUFBO3dCQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7d0JBQ3JELElBQUksa0JBQWtCLEdBQWlCOzRCQUNyQyxRQUFRLEVBQUUsS0FBSzs0QkFDZixVQUFVLEVBQUUsS0FBSzs0QkFDakIsUUFBUSxFQUFFLEtBQUs7NEJBQ2YsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFOzRCQUNYLEtBQUssRUFBRSxDQUFDOzRCQUNSLFNBQVMsRUFBRSxTQUFTOzRCQUNwQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7NEJBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO3lCQUM5RCxDQUFBO3dCQUNELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO3dCQUN2QixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQzt3QkFDeEIsSUFBSSxhQUFhLEdBQW1CLEVBQUUsQ0FBQzt3QkFDdkMsSUFBSSxjQUFjLEdBQW1CLEVBQUUsQ0FBQzt3QkFFeEMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDOzRCQUNoQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtnQ0FDL0IsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7b0NBQ3BFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO3dDQUM1QixJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7NENBQ3JGLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0RBQ2pCLFFBQVEsRUFBRSxLQUFLO2dEQUNmLFVBQVUsRUFBRSxDQUFDLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSztnREFDdEQsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO2dEQUNwRCxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0RBQ1IsS0FBSyxFQUFFLENBQUM7Z0RBQ1IsU0FBUyxFQUFFLFNBQVM7Z0RBQ3BCLElBQUksRUFBRSxDQUFDLENBQUMsUUFBUTtnREFDaEIsUUFBUSxFQUFFLENBQUMsQ0FBQyxRQUFROzZDQUNyQixDQUFDLENBQUE7d0NBQ0osQ0FBQztvQ0FDSCxDQUFDLENBQUMsQ0FBQztnQ0FDTCxDQUFDO3FDQUFNLENBQUM7b0NBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0NBQzVCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQzs0Q0FDckYsY0FBYyxDQUFDLElBQUksQ0FBQztnREFDbEIsUUFBUSxFQUFFLEtBQUs7Z0RBQ2YsVUFBVSxFQUFFLENBQUMsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO2dEQUN4RCxRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUs7Z0RBQ3RELEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTtnREFDUixLQUFLLEVBQUUsQ0FBQztnREFDUixTQUFTLEVBQUUsU0FBUztnREFDcEIsSUFBSSxFQUFFLENBQUMsQ0FBQyxRQUFRO2dEQUNoQixRQUFRLEVBQUUsQ0FBQyxDQUFDLFFBQVE7NkNBQ3JCLENBQUMsQ0FBQTt3Q0FDSixDQUFDO29DQUNILENBQUMsQ0FBQyxDQUFDO2dDQUNMLENBQUM7NEJBRUgsQ0FBQyxDQUFDLENBQUM7d0JBQ0wsQ0FBQzt3QkFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsYUFBYSxFQUFFLGtCQUFrQixDQUFDLENBQUM7d0JBQ2pGLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQzt3QkFFaEUsVUFBVSxDQUFDLEdBQUcsRUFBRTs0QkFDZCxNQUFNLFFBQVEsR0FBRztnQ0FDZixFQUFFLEVBQUUsY0FBYyxDQUFDLE9BQU87Z0NBQzFCLElBQUksRUFBRSxjQUFjLENBQUMsU0FBUztnQ0FDOUIsUUFBUSxFQUFFLEVBQUU7Z0NBQ1osUUFBUSxFQUFFLGNBQWMsQ0FBQyxNQUFNOzZCQUNoQyxDQUFDOzRCQUNGLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO3dCQUUzRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7b0JBQ1YsQ0FBQztvQkFDRCxNQUFNO2dCQUNSLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7Z0JBQ2pDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDckMsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7b0JBQzNCLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDdEMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUMvSSxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2xFLE1BQU07Z0JBQ1IsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDN0IsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQkFDN0IsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7b0JBQ3JCLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDdEMsT0FBTyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7b0JBQ25JLENBQUMsQ0FBQyxDQUFDO29CQUNILElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO3dCQUNsQixJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDaEMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7d0JBQ3ZCLE1BQU0sUUFBUSxHQUFHOzRCQUNmLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTzs0QkFDaEIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTOzRCQUNwQixRQUFRLEVBQUUsRUFBRTs0QkFDWixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU07eUJBQ3RCLENBQUM7d0JBQ0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7b0JBQzVELENBQUM7b0JBQ0QsTUFBTTtnQkFDUjtvQkFDRSxPQUFPO1lBQ1gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBZSxFQUFFLFFBQWtCO1FBQ3JELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxRQUFRLElBQUksQ0FBQyxFQUFFLENBQUM7WUFFbEIsTUFBTSxJQUFJLEdBQWE7Z0JBQ3JCLEVBQUUsRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ25CLFFBQVEsRUFBRSxFQUFFO2dCQUNaLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTthQUN4QixDQUFDO1lBRUYsSUFBSSxZQUFZLEdBQWUsSUFBSSxDQUFDLFNBQVM7Z0JBQzNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDO2dCQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ04sT0FBTztvQkFDTCxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU87b0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTO29CQUNwQixRQUFRLEVBQUUsRUFBRTtvQkFDWixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU07aUJBQ3RCLENBQUM7WUFDSixDQUFDLENBQUMsQ0FBQztZQUNMLElBQUksY0FBYyxHQUFnQixJQUFJLENBQUMsU0FBUztnQkFDOUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFFMUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNsQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQzt3QkFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO3dCQUN2QixFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7d0JBQ1IsUUFBUSxFQUFFLENBQUMsQ0FBQyxJQUFJO3dCQUNoQixRQUFRLEVBQUUsUUFBUTt3QkFDbEIsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFO3dCQUN2QyxRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU07d0JBQ3JCLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUTtxQkFDMUIsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFDSSxDQUFDO2dCQUNKLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO3dCQUNyQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7d0JBQ3ZCLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRTt3QkFDUixRQUFRLEVBQUUsQ0FBQyxDQUFDLElBQUk7d0JBQ2hCLFFBQVEsRUFBRSxRQUFRO3dCQUNsQixZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7d0JBQ3ZDLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTTtxQkFDdEIsQ0FBQyxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztZQUMzRSxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNuQixjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO29CQUM5QixJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUM3QyxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFFRCxjQUFjLENBQUMsTUFBTTtRQUNuQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO0lBQzdELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUF5QjtRQUM1QyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEQsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDbEIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRXBHLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7Z0JBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDNUIsSUFBSSxRQUFnQixDQUFDO29CQUNyQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzt3QkFDcEIsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2pFLENBQUM7eUJBQ0ksQ0FBQzt3QkFDSixRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDbEUsQ0FBQztvQkFDRCxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNsQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDOzRCQUMxQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7NEJBQ3ZCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTs0QkFDWCxRQUFRLEVBQUUsSUFBSSxDQUFDLElBQUk7NEJBQ25CLFFBQVEsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUTs0QkFDdEYsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTs0QkFDM0QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFROzRCQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7eUJBQzFCLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQ3pFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUVwRyxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNsQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQzs0QkFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFROzRCQUN2QixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7NEJBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJOzRCQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7NEJBQ3ZCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTs0QkFDdkIsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFROzRCQUNwSCxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFOzRCQUMzRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7eUJBQzFCLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUM5RSxDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMzRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9FLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUN0QixVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO3dCQUN4QixJQUFJLENBQUMscUJBQXFCLENBQUM7NEJBQ3pCLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTs0QkFDWCxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7NEJBQ25CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTs0QkFDdkIsS0FBSyxFQUFFLENBQUM7NEJBQ1IsVUFBVSxFQUFFLElBQUk7NEJBQ2hCLFFBQVEsRUFBRSxJQUFJOzRCQUNkLFFBQVEsRUFBRSxLQUFLO3lCQUNoQixDQUFDLENBQUM7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0wsQ0FBQztnQkFDRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xGLENBQUM7UUFDSCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDN0MsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQXlCO1FBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNuRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUVwRSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN6QixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO2dCQUVELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7b0JBQzVCLElBQUksUUFBZ0IsQ0FBQztvQkFDckIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7d0JBQ3BCLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUNqRSxDQUFDO3lCQUNJLENBQUM7d0JBQ0osUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2xFLENBQUM7b0JBQ0QsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFDbEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQzs0QkFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFROzRCQUN2QixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7NEJBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJOzRCQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUTs0QkFDekUsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRTs0QkFDM0QsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFROzRCQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7eUJBQzFCLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUM5RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN0RSxJQUFJLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUNsQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQzs0QkFDeEIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFROzRCQUN2QixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7NEJBQ1gsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJOzRCQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFROzRCQUNoQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFOzRCQUMzRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7NEJBQ3ZCLFVBQVUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVE7NEJBQzdDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUzt5QkFDMUIsQ0FBQyxDQUFDO29CQUNMLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztnQkFDNUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQy9FLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0UsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7b0JBQ3RCLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ3hCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQzs0QkFDekIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFOzRCQUNYLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTs0QkFDbkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFROzRCQUN2QixLQUFLLEVBQUUsQ0FBQzs0QkFDUixVQUFVLEVBQUUsSUFBSTs0QkFDaEIsUUFBUSxFQUFFLElBQUk7NEJBQ2QsUUFBUSxFQUFFLEtBQUs7eUJBQ2hCLENBQUMsQ0FBQztvQkFDTCxDQUFDLENBQUMsQ0FBQztnQkFDTCxDQUFDO2dCQUNELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEYsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNoRCxDQUFDO0lBRUQsWUFBWTtRQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUFBLENBQUM7SUFFRixLQUFLLENBQUMsVUFBVTtRQUNkLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUkscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBRS9CLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3JDLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ25GLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDdEQsQ0FBQztZQUNELElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDbkQsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4RixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjO1lBQzlDLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXBELElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3JFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUMvQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxhQUFhLENBQUMsRUFBRTtRQUNkLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQTtRQUNuQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN6QixJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2hDLFVBQVUsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQzVCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxFQUFFO1FBQzdCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUc7WUFDdEQsVUFBVSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxFQUFFO1FBQzFCLElBQUksVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsc0JBQXNCLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEdBQUc7WUFDdkQsVUFBVSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLFFBQVE7UUFDNUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDdEUsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RCxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2xCLFVBQVUsR0FBRyxDQUFDLEdBQUcsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDbEIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO2dCQUNsRSxDQUFDO3FCQUFNLENBQUM7b0JBQ04sUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN2QixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsRUFBRSxFQUFFLFVBQVUsRUFBRSxRQUFRO1FBQzdDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3ZFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkQsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNsQixVQUFVLEdBQUcsQ0FBQyxHQUFHLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2xCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDdkIsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELDZCQUE2QixDQUFDLFNBQVM7UUFDckMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsU0FBUyxDQUFDO1FBQ3pDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBRWhJLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxTQUFTO1FBQ3BDLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLHNCQUFzQixHQUFHLFNBQVMsQ0FBQztRQUN4QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM5SCxDQUFDO0lBRUQsYUFBYSxDQUFDLEVBQUU7UUFDZCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDbEUsQ0FBQztJQUVELGdCQUFnQixDQUFDLEVBQUU7UUFDakIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ2xFLENBQUM7SUFFRCxlQUFlLENBQUMsT0FBb0IsRUFBRSxhQUFzQjtRQUMxRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUVqQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztRQUNqQyxJQUFJLGFBQWEsRUFBRSxDQUFDO1lBQ2xCLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQyxTQUFTLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRyxDQUFDO1FBRUQsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsZUFBZSxDQUFDLElBQWtCO1FBQ2hDLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pGLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3hILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELGdCQUFnQixDQUFDLENBQWM7UUFDN0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUNyRCxDQUFDO0lBRUQsV0FBVyxDQUFDLElBQWM7UUFDeEIsUUFBUSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsS0FBSyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDckIsUUFBUSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ3ZCLEtBQUssZ0JBQWdCLENBQUMsZ0JBQWdCO3dCQUNwQyxPQUFPLDRCQUE0QixDQUFDO29CQUN0QyxLQUFLLGdCQUFnQixDQUFDLGNBQWM7d0JBQ2xDLE9BQU8sMEJBQTBCLENBQUM7b0JBQ3BDLEtBQUssZ0JBQWdCLENBQUMsU0FBUzt3QkFDN0IsT0FBTyw0QkFBNEIsQ0FBQztvQkFDdEMsS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNO3dCQUMxQixPQUFPLHVCQUF1QixDQUFDO29CQUNqQzt3QkFDRSxPQUFPLGlCQUFpQixDQUFDO2dCQUM3QixDQUFDO1lBQ0gsQ0FBQztZQUNELEtBQUssUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLFFBQVEsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUN2QixLQUFLLGdCQUFnQixDQUFDLGdCQUFnQjt3QkFDcEMsT0FBTyxxQkFBcUIsQ0FBQztvQkFDL0IsS0FBSyxnQkFBZ0IsQ0FBQyxjQUFjO3dCQUNsQyxPQUFPLG1CQUFtQixDQUFDO29CQUM3QixLQUFLLGdCQUFnQixDQUFDLFNBQVM7d0JBQzdCLE9BQU8scUJBQXFCLENBQUM7b0JBQy9CLEtBQUssZ0JBQWdCLENBQUMsTUFBTTt3QkFDMUIsT0FBTyxnQkFBZ0IsQ0FBQztvQkFDMUI7d0JBQ0UsT0FBTyxVQUFVLENBQUM7Z0JBQ3RCLENBQUM7WUFDSCxDQUFDO1lBQ0QsS0FBSyxRQUFRLENBQUMsSUFBSTtnQkFDaEIsT0FBTyx1QkFBdUIsQ0FBQztZQUNqQyxLQUFLLFFBQVEsQ0FBQyxPQUFPO2dCQUNuQixPQUFPLFNBQVMsQ0FBQztZQUNuQixLQUFLLFFBQVEsQ0FBQyxTQUFTO2dCQUNyQixPQUFPLFdBQVcsQ0FBQztZQUNyQixLQUFLLFFBQVEsQ0FBQyxTQUFTO2dCQUNyQixPQUFPLFdBQVcsQ0FBQztZQUNyQixLQUFLLFFBQVEsQ0FBQyxJQUFJO2dCQUNoQixPQUFPLE1BQU0sQ0FBQztZQUNoQjtnQkFDRSxPQUFPLGlCQUFpQixDQUFDO1FBQzdCLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYztRQUNaLElBQUksV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUN6QyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6RCxXQUFXLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBWTtRQUNuQixRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2IsS0FBSyxRQUFRLENBQUMsT0FBTztnQkFDbkIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM3QixLQUFLLFFBQVEsQ0FBQyxJQUFJO2dCQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1lBQ2hDLEtBQUssUUFBUSxDQUFDLFFBQVE7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7WUFDN0IsS0FBSyxRQUFRLENBQUMsTUFBTTtnQkFDbEIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMxQixLQUFLLFFBQVEsQ0FBQyxTQUFTO2dCQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQzdCLEtBQUssUUFBUSxDQUFDLGFBQWE7Z0JBQ3pCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDbEMsS0FBSyxRQUFRLENBQUMsU0FBUztnQkFDckIsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUM3QixLQUFLLFFBQVEsQ0FBQyxpQkFBaUI7Z0JBQzdCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUN0QyxLQUFLLFFBQVEsQ0FBQyxJQUFJO2dCQUNoQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQzlCLEtBQUssUUFBUSxDQUFDLFVBQVU7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsSUFBYztRQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzNGLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN6QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsU0FBUyxDQUFDLElBQWM7UUFDdEIsSUFBSSxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDNUMsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQyxZQUFZLEtBQUssSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQzdFLENBQUM7YUFDSSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsRCxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELGdCQUFnQixDQUFDLElBQWM7UUFDN0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRWxLLElBQUksWUFBWSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLHFCQUFxQixDQUFDO2dCQUN6QixFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUU7Z0JBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtnQkFDbkIsUUFBUSxFQUFFLFlBQVksQ0FBQyxRQUFRO2dCQUMvQixRQUFRLEVBQUUsS0FBSztnQkFDZixVQUFVLEVBQUUsS0FBSztnQkFDakIsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsUUFBUSxFQUFFLEtBQUs7YUFDaEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQUk7UUFDakIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNuSyxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBa0IsRUFBRSxJQUFjO1FBQ3BELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDbEYsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQ2xDLEVBQUUsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDbEgsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUU7Z0JBQ2xDLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUM7WUFDekYsQ0FBQztpQkFDSSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsY0FBYyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztZQUN6RixDQUFDO1lBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQzFCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUMzQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsUUFBZ0I7UUFDbEMsSUFBSSxJQUFJLENBQUMsaUJBQWlCO1lBQ3hCLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxpQkFBaUI7bUJBQ25DLFFBQVEsS0FBSyxRQUFRLENBQUMsVUFBVTttQkFDaEMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxhQUFhO21CQUNuQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDO21CQUN4RixDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQzlGLEVBQUUsQ0FBQztZQUNKLE9BQU8sS0FBSyxDQUFDO1FBQ2YsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELG1CQUFtQixDQUFDLElBQWtCO1FBQ3BDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFO2VBQzNGLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3pILElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssS0FBSyxDQUFDLENBQUM7WUFDbEYsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUMvQyxDQUFDO1FBQ0gsQ0FBQzthQUNJLENBQUM7WUFDSixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsYUFBYSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUMsQ0FBQztZQUNELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzdELENBQUM7UUFDRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztJQUM3QyxDQUFDO0lBRUQsb0JBQW9CLENBQUMsSUFBa0I7UUFDckMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUU7ZUFDN0YsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsS0FBSyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekgsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsQ0FBQztRQUN4RixDQUFDO2FBQ0ksQ0FBQztZQUNKLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNoRCxDQUFDO0lBRUQscUJBQXFCLENBQUMsWUFBWTtRQUNoQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxZQUFZLENBQUM7SUFDNUMsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFpQjtRQUMzQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckUsT0FBTyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckwsQ0FBQztJQUVELGdCQUFnQixDQUFDLFFBQW9CO1FBQ25DLE1BQU0sT0FBTyxHQUFvQixFQUFFLENBQUM7UUFDcEMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUMvQixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLENBQUM7UUFFRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsOEJBQThCLENBQUMsTUFBVztRQUN4QyxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JFLENBQUM7SUFFRCxzQkFBc0I7UUFDcEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztJQUNoQyxDQUFDO0lBRUQsc0JBQXNCO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsS0FBVTtRQUM1QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO1FBRS9CLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1lBQzFFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHdCQUF3QixFQUFFO2dCQUMzRCxLQUFLLEVBQUUsT0FBTztnQkFDZCxJQUFJLEVBQUU7b0JBQ0osU0FBUyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLElBQUksYUFBYSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtvQkFDM0gsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtvQkFDeEMsY0FBYyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLElBQUksYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7b0JBQ3hILGFBQWEsRUFBRSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSTtvQkFDbEQsaUJBQWlCLEVBQUUsSUFBSTtpQkFDeEI7YUFDRixDQUFDLENBQUM7WUFDSCxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDckMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7YUFDSSxDQUFDO1lBQ0osSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7Z0JBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3pKLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUNyQyxXQUFXLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RCxXQUFXLENBQUMsTUFBTSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN4RCxDQUFDLENBQUE7UUFDRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQVU7UUFDM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzlFLE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUM7UUFDMUMsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQzsrR0E3eUNVLHFCQUFxQix5VkEyRnRCLGVBQWU7bUdBM0ZkLHFCQUFxQiw2TkE2RWMsc0JBQXNCLDBEQUZ0RCxhQUFhLGdEQ2pIN0IsOHg3QkFxa0JVOzs0RkQvaEJHLHFCQUFxQjtrQkFOakMsU0FBUzsrQkFDRSxtQkFBbUIsaUJBR2QsaUJBQWlCLENBQUMsSUFBSTs7MEJBNkZsQyxNQUFNOzJCQUFDLGVBQWU7eUNBaEJRLFNBQVM7c0JBQXpDLFlBQVk7dUJBQUMsYUFBYSxFQUFFLEVBQUU7Z0JBRy9CLFlBQVk7c0JBRFgsU0FBUzt1QkFBQyx5QkFBeUIsRUFBRSxFQUFFLElBQUksRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXlEcEYsU0FBUztzQkFEUixZQUFZO3VCQUFDLGdCQUFnQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3Q2hlY2tlZCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIEluamVjdCwgT25EZXN0cm95LCBPbkluaXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuaW1wb3J0IHsgTWF0SWNvblJlZ2lzdHJ5IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgcmVxdWlyZWRGaWxlVHlwZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMvZmlsZS11cGxvYWQvZmlsZS11cGxvYWQtc2VsZWN0b3IuZGlyZWN0aXZlJztcbmltcG9ydCB7IFFNU0ZpbGVBdHRhY2htZW50LCBGaWxlRXJyb3JUeXBlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcy9maWxlLXVwbG9hZC9xbXMtZmlsZS11cGxvYWQtYXR0YWNobWVudC5tb2RlbCc7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJy4uLy4uLy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9tb2RlbHMvcW1zLWNrZWRpdG9yLXRyZWUtbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBRTVNDS0VkaXRvclVwbG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9zZXJ2aWNlcy9xbXMtY2tlZGl0b3ItdXBsb2FkLnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTGlicmFyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi1yZWdpc3RyeS5zZXJ2aWNlJztcbmltcG9ydCB7IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtaWNvbi9pY29uLXJlZ2lzdHJ5LnNlcnZpY2UnO1xuaW1wb3J0IHsgVHJlZUNvbmZpZyB9IGZyb20gJy4uLy4uL3RyZWUvbW9kZWwvdHJlZS1jb25maWcubW9kZWwnO1xuaW1wb3J0IHsgVHJlZUZsYXROb2RlIH0gZnJvbSAnLi4vLi4vdHJlZS9tb2RlbC90cmVlLWZsYXQtbm9kZS5tb2RlbCc7XG5pbXBvcnQgeyBUcmVlTW9kZWwgfSBmcm9tICcuLi8uLi90cmVlL21vZGVsL3RyZWUubW9kZWwnO1xuaW1wb3J0IHsgVHJlZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3RyZWUvdHJlZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRG9jdW1lbnROb2RlVHlwZSB9IGZyb20gJy4uL2NvbW1vbi9kb2N1bWVudC1mb2xkZXItdHlwZS5lbnVtJztcbmltcG9ydCB7IE1vZHVsZVR5cGUgfSBmcm9tICcuLi9jb21tb24vbW9kdWxlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBSZWxhdGVkQ29uc3QgfSBmcm9tICcuLi9jb21tb24vcmVsYXRlZC5jb25zdCc7XG5pbXBvcnQgeyBQb3B1cERhdGEgfSBmcm9tICcuLi9tb2RlbC9wb3B1cC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IElSZWxhdGVkLCBSZWxhdGVkT3B0aW9uIH0gZnJvbSAnLi4vbW9kZWwvcmVsYXRlZC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IFNlbGVjdGVkTm9kZSB9IGZyb20gJy4uL21vZGVsL3NlbGVjdGVkLW5vZGUubW9kZWwnO1xuaW1wb3J0IHsgUU1TUmVsYXRlZEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3JlbGF0ZWQtZ2xvYmFsLnNlcnZpY2UnO1xuaW1wb3J0IHsgSWNvblN2ZyB9IGZyb20gJy4uLy4uLy4uL3Ftcy1ja2VkaXRvci1jb21wb25lbnRzL2NvbW1vbi9jb25zdGFudHMvaWNvblN2Zy5jb25zdGFudHMnO1xuaW1wb3J0IHsgVmlkZW9Db25zdCB9IGZyb20gJy4uL2NvbW1vbi92aWRlby5jb25zdCc7XG5pbXBvcnQgeyBRTVNVcGxvYWRGaWxlRXJyb3JEaWFsb2cgfSBmcm9tICcuLi8uLi91cGxvYWQtZmlsZS1lcnJvci1kaWFsb2cvdXBsb2FkLWZpbGUtZXJyb3ItZGlhbG9nJztcbmltcG9ydCB7IFFNU0NLRWRpdG9yVmlkZW8gfSBmcm9tICcuLi8uLi8uLi9xbXMtY2tlZGl0b3ItY29tcG9uZW50cy9tb2RlbHMvcW1zLWNrZWRpdG9yLXZpZGVvLm1vZGVsJztcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL2VudW0vZGF0YS10eXBlLmVudW0nO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3Ftcy1yZWxhdGVkLXBvcHVwJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3JlbGF0ZWQtcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9yZWxhdGVkLXBvcHVwLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgUmVsYXRlZFBvcHVwQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0NoZWNrZWQge1xuICBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBMQU5HOiBhbnk7XG4gIG1vZHVsZUlkID0gMDtcbiAgbW9kdWxlTmFtZSA9ICcnO1xuICBtb2R1bGVVcGxvYWRJbWFnZU5hbWUgPSAnJztcbiAgbW9kdWxlVXBsb2FkRmlsZU5hbWUgPSAnJztcbiAgdHJlZURhdGExOiBBcnJheTxUcmVlTW9kZWw+ID0gW107XG4gIHRyZWVEYXRhMjogQXJyYXk8VHJlZU1vZGVsPiA9IFtdO1xuICB0cmVlQ29uZmlnMTogVHJlZUNvbmZpZztcbiAgdHJlZUNvbmZpZzI6IFRyZWVDb25maWc7XG5cbiAgY2hlY2tlZE5vZGVMaXN0OiBBcnJheTxTZWxlY3RlZE5vZGU+ID0gW107XG4gIHNlbGVjdGVkTm9kZTogQXJyYXk8U2VsZWN0ZWROb2RlPiA9IFtdO1xuICBzZWxlY3RlZERhdGE6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcbiAgc2VsZWN0ZWREYXRhMjogQXJyYXk8VHJlZUZsYXROb2RlPiA9IFtdO1xuXG4gIGNvbW1vbkNoZWNrZWRMaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+ID0gW107XG4gIGRvY3VtZW50Q2hlY2tlZExpc3Q6IEFycmF5PFRyZWVGbGF0Tm9kZT4gPSBbXTtcbiAgc2luZ2xlUHJvY2Vzc0xpc3Q6IEFycmF5PFNlbGVjdGVkTm9kZT4gPSBbXTtcbiAgc2luZ2xlRG9jdW1lbnRMaXN0OiBBcnJheTxTZWxlY3RlZE5vZGU+ID0gW107XG4gIHNwbGl0VmlldzogYm9vbGVhbjtcblxuICBtb2R1bGUgPSBNb2R1bGVUeXBlO1xuICBkYXRhVHlwZSA9IERhdGFUeXBlO1xuICBpdGVtVHlwZSA9IDA7XG4gIHNlbGVjdGVkUmlza0RhdGE6IGFueSA9IFtdO1xuICBkaXNhYmxlZExpc3Q6IGFueSA9IFtdO1xuICBkaXNhYmxlZExpc3QyOiBhbnkgPSBbXTtcbiAgbWF4U2VsZWN0SXRlbUNvdW50OiBudW1iZXI7XG4gIGNhbk9ubHlTZWxlY3RJdGVtOiBib29sZWFuO1xuICBjYW5VcGxvYWRJbWFnZTogYm9vbGVhbjtcbiAgY2FuVXBsb2FkVmlkZW86IGJvb2xlYW47XG5cbiAgaXNEb2N1bWVudEV4cGFuZGVkID0gdHJ1ZTtcbiAgaXNDb21tb25FeHBhbmRlZCA9IHRydWU7XG4gIHNpbmdsZVNlbGVjdGVkTm9kZSA9IGZhbHNlO1xuICBzZWFyY2hPcmRlciA9IFtdO1xuXG4gIG15Q29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woKTtcbiAgZmlsdGVyZWRPcHRpb25zOiBSZWxhdGVkT3B0aW9uW10gPSBbXTtcbiAgaXNJbnB1dFZhbHVlID0gZmFsc2U7XG5cbiAgaXRlbUluU3BsaXR2aWV3OiBJUmVsYXRlZFtdID0gW107XG4gIHNlbGVjdGVkRm9sZGVyOiBUcmVlRmxhdE5vZGUgPSBudWxsO1xuICBzcGxpdFZpZXdUaXRsZTogc3RyaW5nID0gbnVsbDtcbiAgbGlzdENoaWxkcmVuU2VsZWN0T25lOiBhbnkgPSBbXTtcblxuICBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgb25FeHBhbmRGb2xkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPElSZWxhdGVkPigpO1xuICBwYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XG4gIHRyZWVDb250cm9sTm9kZVByb2Nlc3M6IGFueTtcbiAgdHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQ6IGFueTtcblxuICBhY2NlcHRFeHRlbnNpb25zID0gWydwanAnLCAnanBnJywgJ3BqcGVnJywgJ2pwZWcnLCAnamZpZicsICdwbmcnLCAnZ2lmJywgJ2JtcCcsICd3ZWJwJywgJ3RpZicsICd0aWZmJ107XG4gIGFjY2VwdEV4dGVuc2lvbnNGb3JWaWRlbyA9IFsnbXA0J107XG4gIHFtc0lucHV0SW1hZ2VUeXBlID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgnJywgW1xuICAgIHJlcXVpcmVkRmlsZVR5cGUodGhpcy5hY2NlcHRFeHRlbnNpb25zKVxuICBdKTtcbiAgcW1zSW5wdXRWaWRlb1R5cGUgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCcnLCBbXG4gICAgcmVxdWlyZWRGaWxlVHlwZSh0aGlzLmFjY2VwdEV4dGVuc2lvbnNGb3JWaWRlbylcbiAgXSk7XG4gIHFtc0lucHV0SW1hZ2VGaWxlOiBRTVNGaWxlQXR0YWNobWVudCA9IG51bGw7XG4gIHFtc0lucHV0VmlkZW9GaWxlOiBRTVNGaWxlQXR0YWNobWVudCA9IG51bGw7XG4gIGlzTG9hZGluZ0ltYWdlRmlsZSA9IGZhbHNlO1xuICBpc0xvYWRpbmdWaWRlb0ZpbGUgPSBmYWxzZTtcbiAgaW1hZ2VVcGxvYWQgPSBuZXcgSW1hZ2UoKTtcbiAgbWF4VmlkZW9UaHVtYm5haWxTaXplS0I/OiBudW1iZXI7XG5cbiAgZW50aXR5SWQ6IHN0cmluZztcblxuICB2aWRlb0RhdGE6IFFNU0NLRWRpdG9yVmlkZW87XG4gIG9yaWdpblZpZGVvRGF0YVNyYzogc3RyaW5nID0gJyc7XG4gIGNhblVwZGF0ZVZpZGVvUHJvcGVydGllczogYm9vbGVhbiA9IGZhbHNlO1xuICBAVmlld0NoaWxkcmVuKFRyZWVDb21wb25lbnQsIHt9KSBkYXRhVHJlZXM6IFF1ZXJ5TGlzdDxUcmVlQ29tcG9uZW50PjtcblxuICBAVmlld0NoaWxkKCdhdXRvQ29tcGxldGVJbnB1dFNlYXJjaCcsIHsgcmVhZDogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlciwgc3RhdGljOiB0cnVlIH0pXG4gIGF1dG9Db21wbGV0ZTogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVMaWJyYXJ5U2VydmljZSxcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8UmVsYXRlZFBvcHVwQ29tcG9uZW50PixcbiAgICBwdWJsaWMgZ2xvYmFsU2VydmljZTogUU1TUmVsYXRlZEdsb2JhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpY29uUmVnaXN0cnk6IE1hdEljb25SZWdpc3RyeSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgYXBwSWNvblNlcnZpY2U6IFFNU0ljb25SZWdpc3RyeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBlbGVtOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogUU1TQ0tFZGl0b3JVcGxvYWRTZXJ2aWNlLFxuICAgIHB1YmxpYyBkaWFsb2c6IE1hdERpYWxvZyxcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IFBvcHVwRGF0YVxuICApIHtcbiAgICB0aGlzLm1vZHVsZUlkID0gZGF0YS5tb2R1bGVJZDtcbiAgICB0aGlzLm1vZHVsZU5hbWUgPSBkYXRhLm1vZHVsZU5hbWU7XG4gICAgdGhpcy5tb2R1bGVVcGxvYWRJbWFnZU5hbWUgPSBkYXRhLm1vZHVsZVVwbG9hZEltYWdlTmFtZTtcbiAgICB0aGlzLm1vZHVsZVVwbG9hZEZpbGVOYW1lID0gZGF0YS5tb2R1bGVVcGxvYWRGaWxlTmFtZTtcbiAgICB0aGlzLnRyZWVEYXRhMSA9IGRhdGEudHJlZURhdGExO1xuICAgIHRoaXMudHJlZURhdGEyID0gZGF0YS50cmVlRGF0YTI7XG4gICAgdGhpcy50cmVlQ29uZmlnMSA9IGRhdGEudHJlZUNvbmZpZzE7XG4gICAgdGhpcy50cmVlQ29uZmlnMiA9IGRhdGEudHJlZUNvbmZpZzI7XG4gICAgdGhpcy5zZWxlY3RlZFJpc2tEYXRhID0gZGF0YT8uc2VsZWN0ZWROb2RlIHx8IFtdO1xuICAgIHRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlID0gZGF0YS50cmVlQ29uZmlnMS5zaW5nbGVTZWxlY3RlZE5vZGU7XG4gICAgdGhpcy5kaXNhYmxlZExpc3QgPSBkYXRhLmRpc2FibGVkTGlzdCB8fCBbXTtcbiAgICB0aGlzLmRpc2FibGVkTGlzdDIgPSBkYXRhLmRpc2FibGVkTGlzdDIgfHwgW107XG4gICAgdGhpcy5zcGxpdFZpZXcgPSBkYXRhLnNwbGl0VmlldztcbiAgICB0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCA9IGRhdGEubWF4U2VsZWN0SXRlbUNvdW50O1xuICAgIHRoaXMuY2FuT25seVNlbGVjdEl0ZW0gPSBkYXRhLmNhbk9ubHlTZWxlY3RJdGVtO1xuICAgIHRoaXMuY2FuVXBsb2FkSW1hZ2UgPSBkYXRhLmNhblVwbG9hZEltYWdlO1xuICAgIHRoaXMuY2FuVXBsb2FkVmlkZW8gPSBkYXRhLmNhblVwbG9hZFZpZGVvO1xuICAgIHRoaXMubWF4VmlkZW9UaHVtYm5haWxTaXplS0IgPSAoZGF0YS5tYXhWaWRlb1RodW1ibmFpbFNpemVLQiB8fCBWaWRlb0NvbnN0LkRFRkFVTF9NQVhfVklERU9fVEhVTUJOQUlMX1NJWkVfS0IpICogMTAyNDtcbiAgICB0aGlzLmVudGl0eUlkID0gZGF0YS5lbnRpdHlJZDtcbiAgICB0aGlzLnZpZGVvRGF0YSA9IGRhdGEudmlkZW9EYXRhO1xuICAgIHRoaXMub3JpZ2luVmlkZW9EYXRhU3JjID0gZGF0YS52aWRlb0RhdGE/LnNyYyB8fCAnJztcbiAgICB0aGlzLmNhblVwZGF0ZVZpZGVvUHJvcGVydGllcyA9IGRhdGEuY2FuVXBkYXRlVmlkZW9Qcm9wZXJ0aWVzO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0ljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyUHJvY2Vzc0FyZWFJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRvY3VtZW50SWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJGb2xkZXJJY29uKGljb25SZWdpc3RyeSwgc2FuaXRpemVyKTtcbiAgICBhcHBJY29uU2VydmljZS5yZWdpc3RlckRldmlhdGlvbkljb24oaWNvblJlZ2lzdHJ5LCBzYW5pdGl6ZXIpO1xuICAgIGFwcEljb25TZXJ2aWNlLnJlZ2lzdGVyQ2hlY2tsaXN0SWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgYXBwSWNvblNlcnZpY2UucmVnaXN0ZXJSaXNrSWNvbihpY29uUmVnaXN0cnksIHNhbml0aXplcik7XG4gICAgaWNvblJlZ2lzdHJ5LmFkZFN2Z0ljb25MaXRlcmFsKCd1cGxvYWQnLCBzYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoSWNvblN2Zy5VUExPQURfSUNPTikpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLmdsb2JhbFNlcnZpY2Uuc2V0U2VhcmNoUmVsYXRlZChbXSk7XG4gICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XG4gICAgdGhpcy5nbG9iYWxTZXJ2aWNlLnNldFNwbGl0dmlld1ZhbHVlKFtdKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptZXNzYWdlJywgWyckZXZlbnQnXSlcbiAgb25NZXNzYWdlKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmRhdGEgPT09IFJlbGF0ZWRDb25zdC5ISURFX1NFQVJDSF9SRVNVTFQpIHtcbiAgICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLmNsb3NlUGFuZWwoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRyYW5zbGF0ZS5nZXRMYW5ndWFnZVN1YmplY3QkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzKSB7XG4gICAgICAgIHRoaXMuTEFORyA9IHRoaXMudHJhbnNsYXRlLmdldE9iamVjdExhbmcocmVzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zZWFyY2hSZWxhdGVkLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgocmVzKSA9PiB7XG4gICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLnRvUmVsYXRlZE9wdGlvbnMocmVzKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZ2xvYmFsU2VydmljZS5zcGxpdFZpZXdWYWx1ZS5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKHJlcykgPT4ge1xuXG4gICAgICB0aGlzLml0ZW1JblNwbGl0dmlldyA9IHJlcztcbiAgICAgIGlmIChyZXMubGVuZ3RoKSB7XG4gICAgICAgIGxldCBsaXN0Tm9kZVByb2Nlc3M6IFRyZWVNb2RlbFtdID0gW107XG4gICAgICAgIGxldCBsaXN0Tm9kZURvY3M6IFRyZWVNb2RlbFtdID0gW107XG5cbiAgICAgICAgcmVzLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgaWYgKGl0ZW0uaXRlbVR5cGUgPT09IERhdGFUeXBlLnByb2Nlc3MpIHtcbiAgICAgICAgICAgIGxldCBuZXdOb2RlUHJvY2VzcyA9IG5ldyBUcmVlTW9kZWwoKTtcbiAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLmNoaWxkSWQgPSBpdGVtLmlkO1xuICAgICAgICAgICAgbmV3Tm9kZVByb2Nlc3MuY2hpbGROYW1lID0gaXRlbS5pdGVtTmFtZTtcbiAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLmRpc3BsYXlJZCA9ICtpdGVtLml0ZW1OdW1iZXJJZDtcbiAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLnBhcmVudElkID0gXCJcIjtcbiAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLnJvb3RJZCA9IGl0ZW0ucGFyZW50SWQ7XG4gICAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5yb290TmFtZSA9IGl0ZW0/LnBhcmVudE5hbWU7XG4gICAgICAgICAgICBuZXdOb2RlUHJvY2Vzcy5zdWJOYW1lID0gbnVsbDtcbiAgICAgICAgICAgIG5ld05vZGVQcm9jZXNzLnN0YXR1c0lkID0gaXRlbS5zdGF0dXM7XG4gICAgICAgICAgICBsaXN0Tm9kZVByb2Nlc3MucHVzaChuZXdOb2RlUHJvY2Vzcyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBuZXdOb2RlRG9jcyA9IG5ldyBUcmVlTW9kZWwoKTtcbiAgICAgICAgICAgIG5ld05vZGVEb2NzLmNoaWxkSWQgPSBpdGVtLmlkO1xuICAgICAgICAgICAgbmV3Tm9kZURvY3MuY2hpbGROYW1lID0gaXRlbS5pdGVtTmFtZTtcbiAgICAgICAgICAgIG5ld05vZGVEb2NzLmRpc3BsYXlJZCA9ICtpdGVtLml0ZW1OdW1iZXJJZDtcbiAgICAgICAgICAgIG5ld05vZGVEb2NzLnBhcmVudElkID0gXCJcIjtcbiAgICAgICAgICAgIG5ld05vZGVEb2NzLnJvb3RJZCA9IGl0ZW0ucGFyZW50SWQ7XG4gICAgICAgICAgICBuZXdOb2RlRG9jcy5yb290TmFtZSA9IGl0ZW0/LnBhcmVudE5hbWU7XG4gICAgICAgICAgICBuZXdOb2RlRG9jcy5zdWJOYW1lID0gbnVsbDtcbiAgICAgICAgICAgIG5ld05vZGVEb2NzLnN0YXR1c0lkID0gaXRlbS5zdGF0dXM7XG4gICAgICAgICAgICBuZXdOb2RlRG9jcy5zdGF0dXNOYW1lID0gaXRlbS5zdGF0dXNOYW1lO1xuICAgICAgICAgICAgbGlzdE5vZGVEb2NzLnB1c2gobmV3Tm9kZURvY3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgaWRzUHJvY2VzcyA9IG5ldyBTZXQodGhpcy50cmVlRGF0YTEubWFwKGQgPT4gZC5jaGlsZElkKSk7XG4gICAgICAgIHRoaXMudHJlZURhdGExID0gWy4uLnRoaXMudHJlZURhdGExLCAuLi5saXN0Tm9kZVByb2Nlc3MuZmlsdGVyKGQgPT4gIWlkc1Byb2Nlc3MuaGFzKGQuY2hpbGRJZCkpXTtcblxuICAgICAgICBsZXQgaWRzRG9jcyA9IG5ldyBTZXQodGhpcy50cmVlRGF0YTIubWFwKGQgPT4gZC5jaGlsZElkKSk7XG4gICAgICAgIHRoaXMudHJlZURhdGEyID0gWy4uLnRoaXMudHJlZURhdGEyLCAuLi5saXN0Tm9kZURvY3MuZmlsdGVyKGQgPT4gIWlkc0RvY3MuaGFzKGQuY2hpbGRJZCkpXTtcblxuXG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFtdO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFtdO1xuICAgICAgICAgIGxldCBzZWxlY3RQcm9jZXNzOiBUcmVlRmxhdE5vZGVbXSA9IFtdO1xuICAgICAgICAgIGxldCBzZWxlY3REb2N1bWVudDogVHJlZUZsYXROb2RlW10gPSBbXTtcblxuICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICBpZiAoeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzKSB7XG4gICAgICAgICAgICAgIHRoaXMudHJlZURhdGExLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRJZCAmJiB4LmlkID09PSBpdGVtLmNoaWxkSWQgfHwgIWl0ZW0uY2hpbGRJZCAmJiAoeC5pZCA9PT0gaXRlbS5yb290SWQpKSB7XG4gICAgICAgICAgICAgICAgICBzZWxlY3RQcm9jZXNzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHgucGFyZW50SWRcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMudHJlZURhdGEyLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRJZCAmJiB4LmlkID09PSBpdGVtLmNoaWxkSWQgfHwgIWl0ZW0uY2hpbGRJZCAmJiAoeC5pZCA9PT0gaXRlbS5yb290SWQpKSB7XG4gICAgICAgICAgICAgICAgICBzZWxlY3REb2N1bWVudC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBleHBhbmRhYmxlOiB4Lml0ZW1UeXBlID09IERhdGFUeXBlLmZvbGRlciA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiB4Lml0ZW1OYW1lLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5wYXJlbnRJZFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbLi4udGhpcy5zZWxlY3RlZERhdGEsIC4uLnNlbGVjdFByb2Nlc3NdO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YTIsIC4uLnNlbGVjdERvY3VtZW50XTtcbiAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICB9KTtcblxuICAgIHRoaXMubXlDb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKGRlYm91bmNlVGltZSgxMDAwKSwgdGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgodmFsKSA9PiB7XG4gICAgICB0aGlzLmlzSW5wdXRWYWx1ZSA9IHRydWU7XG4gICAgICB0aGlzLm9uU2VhcmNoUmVsYXRlZCh2YWwpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5pdGVtVHlwZSA9IHRoaXMuZ2V0RGF0YVR5cGVJZCh0aGlzLm1vZHVsZUlkKTtcbiAgICB0aGlzLnNlYXJjaE9yZGVyID0gdGhpcy5nZXRTZWFyY2hPcmRlcigpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9ucyAmJiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIC8vIHRoaXMuYXV0b0NvbXBsZXRlLm9wZW5QYW5lbCgpO1xuICAgICAgdGhpcy5zZXRSZXN1bHRIZWlnaHQoKTtcbiAgICB9XG4gICAgLy8gZWxzZSBpZiAodGhpcy5hdXRvQ29tcGxldGUpIHtcbiAgICAvLyAgIHRoaXMuYXV0b0NvbXBsZXRlLmNsb3NlUGFuZWwoKTtcbiAgICAvLyB9XG4gIH1cblxuICBnZXREYXRhVHlwZUlkKG1vZHVsZUlkOiBudW1iZXIpIHtcbiAgICBsZXQgaXRlbVR5cGU7XG4gICAgc3dpdGNoIChtb2R1bGVJZCkge1xuICAgICAgY2FzZSBNb2R1bGVUeXBlLmRvY3VtZW50UHJvY2VzczpcbiAgICAgICAgaXRlbVR5cGUgPSB0aGlzLmRhdGFUeXBlLnByb2Nlc3M7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBNb2R1bGVUeXBlLmRldmlhdGlvbjpcbiAgICAgICAgaXRlbVR5cGUgPSB0aGlzLmRhdGFUeXBlLmRldmlhdGlvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE1vZHVsZVR5cGUuY2hlY2tsaXN0OlxuICAgICAgICBpdGVtVHlwZSA9IHRoaXMuZGF0YVR5cGUuY2hlY2tsaXN0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTW9kdWxlVHlwZS5yaXNrOlxuICAgICAgICBpdGVtVHlwZSA9IHRoaXMuZGF0YVR5cGUucmlzaztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpdGVtVHlwZSA9IHRoaXMuZGF0YVR5cGUuZG9jdW1lbnQ7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbVR5cGU7XG4gIH1cblxuICByZW1vdmVDaGVja2VkTm9kZUxpc3QoaXRlbTogVHJlZUZsYXROb2RlKSB7XG4gICAgaWYgKHRoaXMudmlkZW9EYXRhKSB7XG4gICAgICB0aGlzLnZpZGVvRGF0YS5zcmMgPSB0aGlzLm9yaWdpblZpZGVvRGF0YVNyYztcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSBbXTtcblxuICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmlsdGVyKHggPT4gKHguaWQudG9Mb3dlckNhc2UoKSAhPT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgIT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpKTtcblxuICAgIGNvbnN0IG5ld1NlbGVjdFByb2Nlc3NMaXN0ID0gW107XG4gICAgY29uc3QgbmV3U2VsZWN0RG9jdW1lbnRMaXN0ID0gW107XG5cblxuICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QgPSB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgIT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSB8fCB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpICE9PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSk7XG5cbiAgICB0aGlzLnNpbmdsZVByb2Nlc3NMaXN0LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKHggPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5pZC50b0xvd2VyQ2FzZSgpID09PSB4LmlkLnRvTG93ZXJDYXNlKCkgJiYgZWxlbWVudC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0geC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgIG5ld1NlbGVjdFByb2Nlc3NMaXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy5zaW5nbGVQcm9jZXNzTGlzdCA9IG5ld1NlbGVjdFByb2Nlc3NMaXN0O1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gdGhpcy5jb21tb25DaGVja2VkTGlzdDtcblxuICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdCA9IHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5maWx0ZXIoeCA9PiAoeC5pZC50b0xvd2VyQ2FzZSgpICE9PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSAhPT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgdGhpcy5zaW5nbGVEb2N1bWVudExpc3QuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZvckVhY2goeCA9PiB7XG4gICAgICAgIGlmIChlbGVtZW50LmlkLnRvTG93ZXJDYXNlKCkgPT09IHguaWQudG9Mb3dlckNhc2UoKSAmJiBlbGVtZW50LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgbmV3U2VsZWN0RG9jdW1lbnRMaXN0LnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc2luZ2xlRG9jdW1lbnRMaXN0ID0gbmV3U2VsZWN0RG9jdW1lbnRMaXN0O1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IHRoaXMuY29tbW9uQ2hlY2tlZExpc3Q7XG5cbiAgICAvLyB3aGVuIHJlbW92ZSBjaGVjayBub2RlIGxpc3QsIHJlbGF0ZWQgb3B0aW9ucyBuZWVkIHJlZnJlc2ggZGlzYWJsZWQgb3B0aW9uc1xuICAgIHRoaXMucmVmcmVzaFJlbGF0ZWRPcHRpb25zKCk7XG4gIH1cblxuICBpc01hdGNoVHJ1ZShhcnI6IGFueVtdLCBhcnIyOiBhbnlbXSkge1xuICAgIHJldHVybiBhcnIuZXZlcnkoKGkpID0+IHtcbiAgICAgIHJldHVybiBhcnIyLmluY2x1ZGVzKGkpO1xuICAgIH0pO1xuICB9XG5cbiAgc2V0UmVzdWx0SGVpZ2h0KGFycj86IElSZWxhdGVkW10pIHtcbiAgICBsZXQgbWF4SGVpZ2h0ID0gNDg0O1xuICAgIGNvbnN0IHBvcHVwX2NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdxbXNsaWJfcmVsYXRlZF9wb3B1cF9jb250ZW50JylbMF0gYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgbGluZV9fZGl2aWRlciA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xpbmVfX2RpdmlkZXInKVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAocG9wdXBfY29udGVudCAmJiBsaW5lX19kaXZpZGVyKSB7XG4gICAgICBtYXhIZWlnaHQgPSB0aGlzLmdldE9mZnNldEhlaWdodChwb3B1cF9jb250ZW50LCB0cnVlKSArIHRoaXMuZ2V0T2Zmc2V0SGVpZ2h0KGxpbmVfX2RpdmlkZXIsIHRydWUpICogMjtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50UmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2RrLXZpcnR1YWwtc2Nyb2xsLWNvbnRlbnQtd3JhcHBlcicpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IHZpZXdyZXBvcnRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgncmVsYXRlZC12aWV3cG9ydCcpWzBdIGFzIEhUTUxFbGVtZW50O1xuXG4gICAgaWYgKHZpZXdyZXBvcnRzKSB7XG4gICAgICBpZiAoY29udGVudFJlc3VsdC5vZmZzZXRIZWlnaHQgPD0gbWF4SGVpZ2h0KSB7XG4gICAgICAgIHZpZXdyZXBvcnRzLnN0eWxlLmhlaWdodCA9IGAke2NvbnRlbnRSZXN1bHQub2Zmc2V0SGVpZ2h0fXB4YDtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB2aWV3cmVwb3J0cy5zdHlsZS5oZWlnaHQgPSBgJHttYXhIZWlnaHR9cHhgO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uU2VhcmNoUmVsYXRlZChfdmFsOiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IFtdO1xuICAgIGlmICh0eXBlb2YgKF92YWwpID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5teUNvbnRyb2wuc2V0VmFsdWUoJycpO1xuICAgICAgdGhpcy5pc0lucHV0VmFsdWUgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIChfdmFsKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICghIV92YWwpIHtcbiAgICAgICAgdGhpcy5vblNlYXJjaC5lbWl0KF92YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldE1vZHVsZUZpbHRlcmVkT3B0aW9ucyhtb2R1bGVJZDogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb25zdCBmaXJzdEVsID0gdGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmVbaW5kZXhdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMuZmlsdGVyZWRPcHRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgY29uc3Qgc2Vjb25kRWwgPSB0aGlzLmZpbHRlcmVkT3B0aW9uc1tqXTtcbiAgICAgICAgICBpZiAoZmlyc3RFbC5pZCA9PT0gc2Vjb25kRWwuaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zLnNwbGljZShqLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5maWx0ZXJlZE9wdGlvbnMuZmlsdGVyKHggPT4geC5pdGVtVHlwZSA9PT0gbW9kdWxlSWQpO1xuICB9XG5cbiAgc2hvd1NlYXJjaFJlc3VsdCgpIHtcbiAgICAvLyB0aGlzLmF1dG9Db21wbGV0ZS5vcGVuUGFuZWwoKTtcbiAgfVxuXG4gIGRpc3BsYXlSZWxhdGVkKHJlbGF0ZWQ/OiBJUmVsYXRlZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHJlbGF0ZWQgPyByZWxhdGVkLml0ZW1OYW1lIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgc2VsZWN0UmVsYXRlZChpdGVtOiBJUmVsYXRlZCkge1xuICAgIGlmICh0aGlzLnRyZWVDb25maWcxPy5zZWxlY3RPbmUgfHwgdGhpcy50cmVlQ29uZmlnMj8uc2VsZWN0T25lKSB7XG4gICAgICB0aGlzLmRpc2FibGVkTGlzdCA9IFtdO1xuICAgICAgdGhpcy5kaXNhYmxlZExpc3QyID0gW107XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBbXTtcbiAgICBpZiAodGhpcy50cmVlQ29uZmlnMS5zaG93Q2hlY2tCb3gpIHtcbiAgICAgIGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4ge1xuICAgICAgICByZXR1cm4geC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpbmRleCA8IDApIHtcbiAgICAgIGxldCBwb3NpdGlvbiA9IC0xO1xuICAgICAgbGV0IG5vZGU6IGFueTtcbiAgICAgIGxldCB0eXBlSWQ6IG51bWJlcjtcblxuICAgICAgc3dpdGNoIChpdGVtLml0ZW1UeXBlKSB7XG4gICAgICAgIGNhc2UgdGhpcy5kYXRhVHlwZS5kb2N1bWVudDpcbiAgICAgICAgICAvLyBkb2N1bWVudCAgXG4gICAgICAgICAgY29uc3QgaXNFeGlzdEluRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkTGlzdDIuZmluZEluZGV4KHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHguaWQgJiYgeC5pZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChpc0V4aXN0SW5EaXNhYmxlZCA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy50cmVlRGF0YTIuZmluZEluZGV4KHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHguY2hpbGRJZCA9PT0gaXRlbS5pZCAmJiB4LnJvb3RJZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHBvc2l0aW9uID49IDApIHtcbiAgICAgICAgICAgIG5vZGUgPSB0aGlzLnRyZWVEYXRhMltwb3NpdGlvbl07XG4gICAgICAgICAgICB0eXBlSWQgPSB0aGlzLmRhdGFUeXBlLmRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgdHJlZU5vZGUgPSB7XG4gICAgICAgICAgICAgIGlkOiBub2RlLmNoaWxkSWQsXG4gICAgICAgICAgICAgIG5hbWU6IG5vZGUuY2hpbGROYW1lLFxuICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgIHBhcmVudElkOiBub2RlLnJvb3RJZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVsxXS50b2RvSXRlbVNlbGVjdGlvblByb2Nlc3NEb2N1bWVudChbdHJlZU5vZGVdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5ld05vZGVEb2NzOiBUcmVlTW9kZWwgPSB7XG4gICAgICAgICAgICAgIHJvb3RJZDogaXRlbS5icmVhZGN1bWJzW2l0ZW0uYnJlYWRjdW1icy5sZW5ndGggLSAxXT8uWydpZCddLFxuICAgICAgICAgICAgICByb290TmFtZTogaXRlbS5icmVhZGN1bWJzW2l0ZW0uYnJlYWRjdW1icy5sZW5ndGggLSAxXT8uWyduYW1lJ10sXG4gICAgICAgICAgICAgIHBhcmVudElkOiAnJyxcbiAgICAgICAgICAgICAgc3ViTmFtZTogbnVsbCxcbiAgICAgICAgICAgICAgY2hpbGRJZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgY2hpbGROYW1lOiBpdGVtLml0ZW1OYW1lLFxuICAgICAgICAgICAgICBzdGF0dXNJZDogaXRlbT8uWydpdGVtU3RhdHVzJ10sXG4gICAgICAgICAgICAgIHN0YXR1c05hbWU6IGl0ZW0/Llsnc3RhdHVzTmFtZSddLFxuICAgICAgICAgICAgICBkaXNwbGF5SWQ6ICtpdGVtLml0ZW1OdW1iZXJJZCxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudHJlZURhdGEyID0gWy4uLnRoaXMudHJlZURhdGEyLCBuZXdOb2RlRG9jc107XG4gICAgICAgICAgICBsZXQgbmV3U2VsZWN0ZWREb2NzOiBUcmVlRmxhdE5vZGUgPSB7XG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIGhhc0NoaWxkOiBmYWxzZSxcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbmFtZTogaXRlbS5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0uYnJlYWRjdW1ic1tpdGVtLmJyZWFkY3VtYnMubGVuZ3RoIC0gMV0/LlsnaWQnXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEyID0gW107XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFtdO1xuICAgICAgICAgICAgbGV0IHNlbGVjdFByb2Nlc3M6IFRyZWVGbGF0Tm9kZVtdID0gW107XG4gICAgICAgICAgICBsZXQgc2VsZWN0RG9jdW1lbnQ6IFRyZWVGbGF0Tm9kZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZG9jdW1lbnQgfHwgeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMi5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jaGlsZElkICYmIHguaWQgPT09IGl0ZW0uY2hpbGRJZCB8fCAhaXRlbS5jaGlsZElkICYmICh4LmlkID09PSBpdGVtLnJvb3RJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3REb2N1bWVudC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhID0gWy4uLnRoaXMuc2VsZWN0ZWREYXRhLCAuLi5zZWxlY3RQcm9jZXNzXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YTIsIC4uLnNlbGVjdERvY3VtZW50LCBuZXdTZWxlY3RlZERvY3NdO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xuICAgICAgICAgICAgICAgIGlkOiBuZXdOb2RlRG9jcy5jaGlsZElkLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5ld05vZGVEb2NzLmNoaWxkTmFtZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVEb2NzLnJvb3RJZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMV0udG9kb0l0ZW1TZWxlY3Rpb25Qcm9jZXNzRG9jdW1lbnQoW3RyZWVOb2RlXSk7XG4gICAgICAgICAgICB9LCA1MDApXG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUuZm9sZGVyOlxuICAgICAgICAgIHBvc2l0aW9uID0gdGhpcy50cmVlRGF0YTIuZmluZEluZGV4KHggPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHgucm9vdElkID09PSBpdGVtLmlkICYmIHgucGFyZW50SWQgPT09IGl0ZW0ucGFyZW50SWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdHlwZUlkID0gaXRlbS5pdGVtVHlwZTtcbiAgICAgICAgICBpZiAocG9zaXRpb24gPj0gMCkge1xuICAgICAgICAgICAgbm9kZSA9IHRoaXMudHJlZURhdGEyW3Bvc2l0aW9uXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVDb25maWcyLnNob3dDaGVja0JveCkge1xuICAgICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICBtb2R1bGVJZDogdGhpcy5tb2R1bGVJZCxcbiAgICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogaXRlbS5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICBpdGVtVHlwZTogdHlwZUlkLFxuICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogaXRlbS5pdGVtTnVtYmVySWQsXG4gICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBpdGVtLmxldmVsVHlwZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiBpdGVtLnBhcmVudE5hbWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUucHVzaCh7XG4gICAgICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgICAgaXRlbU5hbWU6IGl0ZW0uaXRlbU5hbWUsXG4gICAgICAgICAgICAgICAgaXRlbVR5cGU6IHR5cGVJZCxcbiAgICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uaXRlbU51bWJlcklkLFxuICAgICAgICAgICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0cmVlTm9kZSA9IHtcbiAgICAgICAgICAgICAgaWQ6IG5vZGUucm9vdElkLFxuICAgICAgICAgICAgICBuYW1lOiAhIW5vZGUucm9vdElkID8gbm9kZS5zdWJOYW1lIDogbm9kZS5yb290TmFtZSxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5wYXJlbnRJZFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVsxXS50b2RvRm9sZGVyU2VsZWN0aW9uKFt0cmVlTm9kZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSB0aGlzLmRhdGFUeXBlLmFyZWE6XG4gICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnRyZWVEYXRhMS5maW5kSW5kZXgoeCA9PiB7XG4gICAgICAgICAgICByZXR1cm4geC5yb290SWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbS5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0ucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdHlwZUlkID0gaXRlbS5pdGVtVHlwZTtcblxuICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XG4gICAgICAgICAgICBub2RlID0gdGhpcy50cmVlRGF0YTFbcG9zaXRpb25dO1xuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUNvbmZpZzEuc2hvd0NoZWNrQm94KSB7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LnB1c2goe1xuICAgICAgICAgICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxuICAgICAgICAgICAgICAgIGlkOiBub2RlLnJvb3RJZCxcbiAgICAgICAgICAgICAgICBpdGVtTmFtZTogbm9kZS5yb290TmFtZSxcbiAgICAgICAgICAgICAgICBpdGVtVHlwZTogdHlwZUlkLFxuICAgICAgICAgICAgICAgIGl0ZW1OdW1iZXJJZDogaXRlbS5pdGVtTnVtYmVySWQsXG4gICAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBpdGVtLmxldmVsVHlwZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICBwYXJlbnROYW1lOiBpdGVtLnBhcmVudE5hbWVcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGUucHVzaCh7XG4gICAgICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgICAgICAgICAgaWQ6IG5vZGUucm9vdElkLFxuICAgICAgICAgICAgICAgIGl0ZW1OYW1lOiBub2RlLnJvb3ROYW1lLFxuICAgICAgICAgICAgICAgIGl0ZW1UeXBlOiB0eXBlSWQsXG4gICAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiBpdGVtLml0ZW1OdW1iZXJJZCxcbiAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IGl0ZW0ubGV2ZWxUeXBlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0cmVlTm9kZSA9IHtcbiAgICAgICAgICAgIGlkOiBub2RlLnJvb3RJZCxcbiAgICAgICAgICAgIG5hbWU6ICEhbm9kZS5yb290SWQgPyBub2RlLnN1Yk5hbWUgOiBub2RlLnJvb3ROYW1lLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgcGFyZW50SWQ6IG5vZGUucGFyZW50SWRcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVswXS50b2RvRm9sZGVyU2VsZWN0aW9uKFt0cmVlTm9kZV0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUucHJvY2VzczpcbiAgICAgICAgICBjb25zdCBpc0V4aXN0SW5Qcm9jZXNzRGlzYWJsZWQgPSB0aGlzLmRpc2FibGVkTGlzdC5maW5kSW5kZXgoeCA9PiB7XG4gICAgICAgICAgICByZXR1cm4geC5pZCAmJiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChpc0V4aXN0SW5Qcm9jZXNzRGlzYWJsZWQgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGExLmZpbmRJbmRleCh4ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4LmNoaWxkSWQgJiYgeC5jaGlsZElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiB4LnJvb3RJZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XG4gICAgICAgICAgICBub2RlID0gdGhpcy50cmVlRGF0YTFbcG9zaXRpb25dO1xuICAgICAgICAgICAgdHlwZUlkID0gdGhpcy5pdGVtVHlwZTtcbiAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xuICAgICAgICAgICAgICBpZDogbm9kZS5jaGlsZElkLFxuICAgICAgICAgICAgICBuYW1lOiBub2RlLmNoaWxkTmFtZSxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5yb290SWRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0udG9kb0l0ZW1TZWxlY3Rpb25Qcm9jZXNzRG9jdW1lbnQoW3RyZWVOb2RlXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBuZXdOb2RlUHJvY2VzczogVHJlZU1vZGVsID0ge1xuICAgICAgICAgICAgICByb290SWQ6IGl0ZW0uYnJlYWRjdW1ic1tpdGVtLmJyZWFkY3VtYnMubGVuZ3RoIC0gMV0/LlsnaWQnXSxcbiAgICAgICAgICAgICAgcm9vdE5hbWU6IGl0ZW0uYnJlYWRjdW1ic1tpdGVtLmJyZWFkY3VtYnMubGVuZ3RoIC0gMV0/LlsnbmFtZSddLFxuICAgICAgICAgICAgICBwYXJlbnRJZDogJycsXG4gICAgICAgICAgICAgIHN1Yk5hbWU6IG51bGwsXG4gICAgICAgICAgICAgIGNoaWxkSWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgIGNoaWxkTmFtZTogaXRlbS5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgc3RhdHVzSWQ6IGl0ZW0/LlsnaXRlbVN0YXR1cyddLFxuICAgICAgICAgICAgICBzdGF0dXNOYW1lOiBpdGVtPy5bJ3N0YXR1c05hbWUnXSxcbiAgICAgICAgICAgICAgZGlzcGxheUlkOiAraXRlbS5pdGVtTnVtYmVySWQsXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudHJlZURhdGExID0gWy4uLnRoaXMudHJlZURhdGExLCBuZXdOb2RlUHJvY2Vzc107XG4gICAgICAgICAgICBsZXQgbmV3U2VsZWN0ZWRQcm9jZXNzOiBUcmVlRmxhdE5vZGUgPSB7XG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIGhhc0NoaWxkOiBmYWxzZSxcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgbmFtZTogaXRlbS5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0uYnJlYWRjdW1ic1tpdGVtLmJyZWFkY3VtYnMubGVuZ3RoIC0gMV0/LlsnaWQnXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFtdO1xuICAgICAgICAgICAgbGV0IHNlbGVjdFByb2Nlc3M6IFRyZWVGbGF0Tm9kZVtdID0gW107XG4gICAgICAgICAgICBsZXQgc2VsZWN0RG9jdW1lbnQ6IFRyZWVGbGF0Tm9kZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrZWROb2RlTGlzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoeC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuYXJlYSB8fCB4Lml0ZW1UeXBlID09PSBEYXRhVHlwZS5wcm9jZXNzKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jaGlsZElkICYmIHguaWQgPT09IGl0ZW0uY2hpbGRJZCB8fCAhaXRlbS5jaGlsZElkICYmICh4LmlkID09PSBpdGVtLnJvb3RJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RQcm9jZXNzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwYW5kYWJsZTogeC5pdGVtVHlwZSA9PSBEYXRhVHlwZS5hcmVhID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuYXJlYSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB4LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbFR5cGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHguaXRlbU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJZDogeC5wYXJlbnRJZFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRyZWVEYXRhMi5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jaGlsZElkICYmIHguaWQgPT09IGl0ZW0uY2hpbGRJZCB8fCAhaXRlbS5jaGlsZElkICYmICh4LmlkID09PSBpdGVtLnJvb3RJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBzZWxlY3REb2N1bWVudC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZGFibGU6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHguaXRlbVR5cGUgPT0gRGF0YVR5cGUuZm9sZGVyID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHguaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsVHlwZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeC5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB4LnBhcmVudElkXG4gICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YSwgLi4uc2VsZWN0UHJvY2VzcywgbmV3U2VsZWN0ZWRQcm9jZXNzXTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhMiA9IFsuLi50aGlzLnNlbGVjdGVkRGF0YTIsIC4uLnNlbGVjdERvY3VtZW50XTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xuICAgICAgICAgICAgICAgIGlkOiBuZXdOb2RlUHJvY2Vzcy5jaGlsZElkLFxuICAgICAgICAgICAgICAgIG5hbWU6IG5ld05vZGVQcm9jZXNzLmNoaWxkTmFtZSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgcGFyZW50SWQ6IG5ld05vZGVQcm9jZXNzLnJvb3RJZFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0udG9kb0l0ZW1TZWxlY3Rpb25Qcm9jZXNzRG9jdW1lbnQoW3RyZWVOb2RlXSk7XG5cbiAgICAgICAgICAgIH0sIDUwMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUuZGV2aWF0aW9uVHlwZTpcbiAgICAgICAgY2FzZSB0aGlzLmRhdGFUeXBlLmNoZWNrbGlzdENhdGVnb3J5OlxuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUucmlza0ZvbGRlcjpcbiAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGExLmZpbmRJbmRleCh4ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4LnJvb3RJZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLmlkLnRvTG93ZXJDYXNlKCkgJiYgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gKGl0ZW0ucGFyZW50SWQgPyBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpIDogJycpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuc2VsZWN0Tm9kZVJlY3Vyc2l2ZSh0aGlzLnRyZWVEYXRhMVtwb3NpdGlvbl0sIGl0ZW0uaXRlbVR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUuZGV2aWF0aW9uOlxuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUuY2hlY2tsaXN0OlxuICAgICAgICBjYXNlIHRoaXMuZGF0YVR5cGUucmlzazpcbiAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGExLmZpbmRJbmRleCh4ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB4LmNoaWxkSWQgJiYgeC5jaGlsZElkLnRvTG93ZXJDYXNlKCkgPT09IGl0ZW0uaWQudG9Mb3dlckNhc2UoKSAmJiB4LnJvb3RJZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XG4gICAgICAgICAgICBub2RlID0gdGhpcy50cmVlRGF0YTFbcG9zaXRpb25dO1xuICAgICAgICAgICAgdHlwZUlkID0gdGhpcy5pdGVtVHlwZTtcbiAgICAgICAgICAgIGNvbnN0IHRyZWVOb2RlID0ge1xuICAgICAgICAgICAgICBpZDogbm9kZS5jaGlsZElkLFxuICAgICAgICAgICAgICBuYW1lOiBub2RlLmNoaWxkTmFtZSxcbiAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICBwYXJlbnRJZDogbm9kZS5yb290SWRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmRhdGFUcmVlcy50b0FycmF5KClbMF0udG9kb0l0ZW1TZWxlY3Rpb24oW3RyZWVOb2RlXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZWxlY3ROb2RlUmVjdXJzaXZlKGl0ZW06IFRyZWVNb2RlbCwgaXRlbVR5cGU6IERhdGFUeXBlKSB7XG4gICAgbGV0IHBvc2l0aW9uID0gdGhpcy50cmVlRGF0YTEuZmluZEluZGV4KHggPT4ge1xuICAgICAgcmV0dXJuIHgucm9vdElkID09PSBpdGVtLnJvb3RJZDtcbiAgICB9KTtcblxuICAgIGlmIChwb3NpdGlvbiA+PSAwKSB7XG5cbiAgICAgIGNvbnN0IG5vZGU6IFRyZWVOb2RlID0ge1xuICAgICAgICBpZDogaXRlbS5yb290SWQsXG4gICAgICAgIG5hbWU6IGl0ZW0ucm9vdE5hbWUsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWRcbiAgICAgIH07XG5cbiAgICAgIGxldCBub2RlQ2hpbGRyZW46IFRyZWVOb2RlW10gPSB0aGlzLnRyZWVEYXRhMS5cbiAgICAgICAgZmlsdGVyKHggPT4geC5yb290SWQgPT09IGl0ZW0ucm9vdElkICYmIHguY2hpbGRJZCkuXG4gICAgICAgIG1hcCh4ID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6IHguY2hpbGRJZCxcbiAgICAgICAgICAgIG5hbWU6IGl0ZW0uY2hpbGROYW1lLFxuICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucm9vdElkXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICBsZXQgbm9kZVN1YmZvbGRlcnM6IFRyZWVNb2RlbFtdID0gdGhpcy50cmVlRGF0YTEuXG4gICAgICAgIGZpbHRlcih4ID0+IHgucGFyZW50SWQgPT09IGl0ZW0ucm9vdElkKTtcblxuICAgICAgaWYgKHRoaXMudHJlZUNvbmZpZzEuc2hvd0NoZWNrQm94KSB7XG4gICAgICAgIG5vZGVDaGlsZHJlbi5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0LnB1c2goe1xuICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICAgIGl0ZW1OYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbVR5cGUsXG4gICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uZGlzcGxheUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5yb290SWQsXG4gICAgICAgICAgICBwYXJlbnROYW1lOiBpdGVtLnJvb3ROYW1lXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIG5vZGVDaGlsZHJlbi5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlLnB1c2goe1xuICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgICAgICBpZDogeC5pZCxcbiAgICAgICAgICAgIGl0ZW1OYW1lOiB4Lm5hbWUsXG4gICAgICAgICAgICBpdGVtVHlwZTogaXRlbVR5cGUsXG4gICAgICAgICAgICBpdGVtTnVtYmVySWQ6IGl0ZW0uZGlzcGxheUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBwYXJlbnRJZDogaXRlbS5yb290SWRcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVswXS50b2RvSXRlbVNlbGVjdGlvbihbbm9kZV0uY29uY2F0KG5vZGVDaGlsZHJlbikpO1xuICAgICAgaWYgKG5vZGVTdWJmb2xkZXJzKSB7XG4gICAgICAgIG5vZGVTdWJmb2xkZXJzLmZvckVhY2goZm9sZGVyID0+IHtcbiAgICAgICAgICB0aGlzLnNlbGVjdE5vZGVSZWN1cnNpdmUoZm9sZGVyLCBpdGVtVHlwZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBzZXRUeXBlUHJvY2VzcyhleHBhbmQpIHtcbiAgICByZXR1cm4gZXhwYW5kID8gdGhpcy5kYXRhVHlwZS5hcmVhIDogdGhpcy5kYXRhVHlwZS5wcm9jZXNzO1xuICB9XG5cbiAgZ2V0Q29tbW9uQ2hlY2tlZE5vZGUobGlzdDogQXJyYXk8VHJlZUZsYXROb2RlPikge1xuICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gW107XG4gICAgdGhpcy5zaW5nbGVQcm9jZXNzTGlzdCA9IFtdO1xuICAgIHRoaXMuY29tbW9uQ2hlY2tlZExpc3QgPSBbXTtcbiAgICB0aGlzLmNoZWNrZWROb2RlTGlzdCA9IFsuLi50aGlzLnNpbmdsZURvY3VtZW50TGlzdF07XG4gICAgaWYgKGxpc3QubGVuZ3RoKSB7XG4gICAgICBsaXN0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jaGVja2VkTm9kZUxpc3QuZmluZEluZGV4KHggPT4geC5pZCA9PT0gaXRlbS5pZCAmJiB4LnBhcmVudElkID09PSBpdGVtLnBhcmVudElkKTtcblxuICAgICAgICBpZiAoaXRlbS5pZCAmJiBpbmRleCA8IDApIHtcbiAgICAgICAgICB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zaW5nbGVTZWxlY3RlZE5vZGUpIHtcbiAgICAgICAgICBsZXQgcG9zaXRpb246IG51bWJlcjtcbiAgICAgICAgICBpZiAoaXRlbS5leHBhbmRhYmxlKSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGExLmZpbmRJbmRleChwID0+IHAucm9vdElkID09PSBpdGVtLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwb3NpdGlvbiA9IHRoaXMudHJlZURhdGExLmZpbmRJbmRleChwID0+IHAuY2hpbGRJZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwb3NpdGlvbiA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLnNpbmdsZVByb2Nlc3NMaXN0LnB1c2goe1xuICAgICAgICAgICAgICBtb2R1bGVJZDogdGhpcy5tb2R1bGVJZCxcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgIGl0ZW1OYW1lOiBpdGVtLm5hbWUsXG4gICAgICAgICAgICAgIGl0ZW1UeXBlOiAodGhpcy5pdGVtVHlwZSA9PT0gMikgPyB0aGlzLnNldFR5cGVQcm9jZXNzKGl0ZW0uZXhwYW5kYWJsZSkgOiB0aGlzLml0ZW1UeXBlLFxuICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IHRoaXMudHJlZURhdGExW3Bvc2l0aW9uXS5kaXNwbGF5SWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXG4gICAgICAgICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpdGVtLmlkICYmIGluZGV4IDwgMCAmJiAhaXRlbS5leHBhbmRhYmxlICYmICF0aGlzLnNpbmdsZVNlbGVjdGVkTm9kZSkge1xuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy50cmVlRGF0YTEuZmluZEluZGV4KHAgPT4gcC5jaGlsZElkID09PSBpdGVtLmlkICYmIHAucm9vdElkID09PSBpdGVtLnBhcmVudElkKTtcblxuICAgICAgICAgIGlmIChwb3NpdGlvbiA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICBpdGVtTmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICBpdGVtVHlwZTogdGhpcy5pdGVtVHlwZSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXG4gICAgICAgICAgICAgIHBhcmVudE5hbWU6IHRoaXMudHJlZURhdGExW3Bvc2l0aW9uXS5wYXJlbnRJZCA/IHRoaXMudHJlZURhdGExW3Bvc2l0aW9uXS5zdWJOYW1lIDogdGhpcy50cmVlRGF0YTFbcG9zaXRpb25dLnJvb3ROYW1lLFxuICAgICAgICAgICAgICBpdGVtTnVtYmVySWQ6IHRoaXMudHJlZURhdGExW3Bvc2l0aW9uXS5kaXNwbGF5SWQudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgbGV2ZWxUeXBlOiBpdGVtLmxldmVsVHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlKSB7XG4gICAgICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gWy4uLnRoaXMuY2hlY2tlZE5vZGVMaXN0LCAuLi50aGlzLnNpbmdsZVByb2Nlc3NMaXN0XTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMubWF4U2VsZWN0SXRlbUNvdW50ICYmIHRoaXMubWF4U2VsZWN0SXRlbUNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCByZW1vdmVMaXN0ID0gdGhpcy5jaGVja2VkTm9kZUxpc3Quc2xpY2UoMCwgdGhpcy5tYXhTZWxlY3RJdGVtQ291bnQgKiAtMSk7XG4gICAgICAgIGlmIChyZW1vdmVMaXN0Lmxlbmd0aCkge1xuICAgICAgICAgIHJlbW92ZUxpc3QuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KHtcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICAgICAgICAgIG5hbWU6IGl0ZW0uaXRlbU5hbWUsXG4gICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgICAgICBsZXZlbDogMCxcbiAgICAgICAgICAgICAgZXhwYW5kYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgaGFzQ2hpbGQ6IHRydWUsXG4gICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5zbGljZSh0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCAqIC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0O1xuICB9XG5cbiAgZ2V0RG9jdW1lbnRDaGVja2VkTm9kZShsaXN0OiBBcnJheTxUcmVlRmxhdE5vZGU+KSB7XG4gICAgdGhpcy5jaGVja2VkTm9kZUxpc3QgPSBbXTtcbiAgICB0aGlzLnNpbmdsZURvY3VtZW50TGlzdCA9IFtdO1xuICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdCA9IFtdO1xuICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gWy4uLnRoaXMuc2luZ2xlUHJvY2Vzc0xpc3RdO1xuICAgIGlmIChsaXN0Lmxlbmd0aCkge1xuICAgICAgbGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQgPT09IGl0ZW0uaWQpO1xuXG4gICAgICAgIGlmIChpdGVtLmlkICYmIGluZGV4IDwgMCkge1xuICAgICAgICAgIHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlKSB7XG4gICAgICAgICAgbGV0IHBvc2l0aW9uOiBudW1iZXI7XG4gICAgICAgICAgaWYgKGl0ZW0uZXhwYW5kYWJsZSkge1xuICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnRyZWVEYXRhMi5maW5kSW5kZXgocCA9PiBwLnJvb3RJZCA9PT0gaXRlbS5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcG9zaXRpb24gPSB0aGlzLnRyZWVEYXRhMi5maW5kSW5kZXgocCA9PiBwLmNoaWxkSWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocG9zaXRpb24gPiAtMSkge1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVEb2N1bWVudExpc3QucHVzaCh7XG4gICAgICAgICAgICAgIG1vZHVsZUlkOiB0aGlzLm1vZHVsZUlkLFxuICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgaXRlbU5hbWU6IGl0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgaXRlbVR5cGU6IGl0ZW0uZXhwYW5kYWJsZSA/IHRoaXMuZGF0YVR5cGUuZm9sZGVyIDogdGhpcy5kYXRhVHlwZS5kb2N1bWVudCxcbiAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiB0aGlzLnRyZWVEYXRhMltwb3NpdGlvbl0uZGlzcGxheUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgICAgICBsZXZlbFR5cGU6IGl0ZW0ubGV2ZWxUeXBlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaW5kZXggPCAwICYmICFpdGVtLmV4cGFuZGFibGUgJiYgIXRoaXMuc2luZ2xlU2VsZWN0ZWROb2RlKSB7XG4gICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnRyZWVEYXRhMi5maW5kSW5kZXgocCA9PiBwLmNoaWxkSWQgPT09IGl0ZW0uaWQpO1xuICAgICAgICAgIGlmIChwb3NpdGlvbiA+IC0xKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgbW9kdWxlSWQ6IHRoaXMubW9kdWxlSWQsXG4gICAgICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgICAgICBpdGVtTmFtZTogaXRlbS5uYW1lLFxuICAgICAgICAgICAgICBpdGVtVHlwZTogdGhpcy5kYXRhVHlwZS5kb2N1bWVudCxcbiAgICAgICAgICAgICAgaXRlbU51bWJlcklkOiB0aGlzLnRyZWVEYXRhMltwb3NpdGlvbl0uZGlzcGxheUlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgIHBhcmVudElkOiBpdGVtLnBhcmVudElkLFxuICAgICAgICAgICAgICBwYXJlbnROYW1lOiB0aGlzLnRyZWVEYXRhMltwb3NpdGlvbl0ucm9vdE5hbWUsXG4gICAgICAgICAgICAgIGxldmVsVHlwZTogaXRlbS5sZXZlbFR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLnNpbmdsZVNlbGVjdGVkTm9kZSkge1xuICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdCA9IFsuLi50aGlzLmNoZWNrZWROb2RlTGlzdCwgLi4udGhpcy5zaW5nbGVEb2N1bWVudExpc3RdO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5tYXhTZWxlY3RJdGVtQ291bnQgJiYgdGhpcy5tYXhTZWxlY3RJdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHJlbW92ZUxpc3QgPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5zbGljZSgwLCB0aGlzLm1heFNlbGVjdEl0ZW1Db3VudCAqIC0xKTtcbiAgICAgICAgaWYgKHJlbW92ZUxpc3QubGVuZ3RoKSB7XG4gICAgICAgICAgcmVtb3ZlTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGVja2VkTm9kZUxpc3Qoe1xuICAgICAgICAgICAgICBpZDogaXRlbS5pZCxcbiAgICAgICAgICAgICAgbmFtZTogaXRlbS5pdGVtTmFtZSxcbiAgICAgICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50SWQsXG4gICAgICAgICAgICAgIGxldmVsOiAwLFxuICAgICAgICAgICAgICBleHBhbmRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBoYXNDaGlsZDogdHJ1ZSxcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrZWROb2RlTGlzdCA9IHRoaXMuY2hlY2tlZE5vZGVMaXN0LnNsaWNlKHRoaXMubWF4U2VsZWN0SXRlbUNvdW50ICogLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkRGF0YTIgPSB0aGlzLmRvY3VtZW50Q2hlY2tlZExpc3Q7XG4gIH1cblxuICBvbkNsb3NlQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XG4gICAgdGhpcy5pdGVtSW5TcGxpdHZpZXcgPSBbXTtcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9O1xuXG4gIGFzeW5jIG9uQWRkQ2xpY2soKSB7XG4gICAgdGhpcy5zZWxlY3RlZEZvbGRlciA9IG51bGw7XG4gICAgdGhpcy5pdGVtSW5TcGxpdHZpZXcgPSBbXTtcbiAgICBsZXQgaW1hZ2VSZWxhdGl2ZVVybCA9IFwiXCI7XG4gICAgbGV0IHJlcXVlc3RVcGxvYWRWaWRlb1VybCA9IFwiXCI7XG5cbiAgICB0aGlzLmNoZWNrZWROb2RlTGlzdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuaXRlbVR5cGUgPT09IERhdGFUeXBlLmRvY3VtZW50KSB7XG4gICAgICAgIGVsZW1lbnQuc3RhdHVzID0gdGhpcy5nZXRTdGF0dXNEb2NzKGVsZW1lbnQuaWQpO1xuICAgICAgICBlbGVtZW50LmJyZWFkY3VtYnMgPSB0aGlzLmdldEJyZWFkY3VtYkFsbFBhcmVudERvY3MoZWxlbWVudC5pZCkuc2xpY2UoMSkucmV2ZXJzZSgpO1xuICAgICAgICBlbGVtZW50LnN0YXR1c05hbWUgPSB0aGlzLmdldFN0YXR1c05hbWUoZWxlbWVudC5pZCk7XG4gICAgICB9XG4gICAgICBpZiAoZWxlbWVudC5pdGVtVHlwZSA9PT0gRGF0YVR5cGUucHJvY2Vzcykge1xuICAgICAgICBlbGVtZW50LnN0YXR1cyA9IHRoaXMuZ2V0U3RhdHVzUHJvY2VzcyhlbGVtZW50LmlkKTtcbiAgICAgICAgZWxlbWVudC5icmVhZGN1bWJzID0gdGhpcy5nZXRCcmVhZGN1bWJBbGxQYXJlbnRQcm9jZXNzKGVsZW1lbnQuaWQpLnNsaWNlKDEpLnJldmVyc2UoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmICghdGhpcy5jYW5VcGxvYWRJbWFnZSAmJiAhdGhpcy5jYW5VcGxvYWRWaWRlbylcbiAgICAgIHJldHVybiB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh0aGlzLmNoZWNrZWROb2RlTGlzdCk7XG5cbiAgICBpZiAodGhpcy5vcmlnaW5WaWRlb0RhdGFTcmMgJiYgdGhpcy52aWRlb0RhdGEgJiYgIXRoaXMudmlkZW9EYXRhLnNyYykge1xuICAgICAgdGhpcy52aWRlb0RhdGEuc3JjID0gdGhpcy5vcmlnaW5WaWRlb0RhdGFTcmM7XG4gICAgfVxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRoaXMudmlkZW9EYXRhKTtcbiAgfVxuXG4gIGdldFN0YXR1c05hbWUoaWQpIHtcbiAgICBsZXQgc3RhdHVzTmFtZSA9ICcnXG4gICAgdGhpcy50cmVlRGF0YTIuZm9yRWFjaCh4ID0+IHtcbiAgICAgIGlmIChpZC50b1N0cmluZygpID09PSB4LmNoaWxkSWQpIHtcbiAgICAgICAgc3RhdHVzTmFtZSA9IHguc3RhdHVzTmFtZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBzdGF0dXNOYW1lO1xuICB9XG5cbiAgZ2V0QnJlYWRjdW1iQWxsUGFyZW50UHJvY2VzcyhpZCkge1xuICAgIGxldCB0ZW1wUGFyZW50ID0gW107XG4gICAgdGhpcy5jaGVja0JyZWFkY3VtYlByb2Nlc3MoaWQsIHRlbXBQYXJlbnQsIGZ1bmN0aW9uIChhcnIpIHtcbiAgICAgIHRlbXBQYXJlbnQgPSBbLi4uYXJyXTtcbiAgICB9KTtcblxuICAgIHJldHVybiB0ZW1wUGFyZW50O1xuICB9XG5cbiAgZ2V0QnJlYWRjdW1iQWxsUGFyZW50RG9jcyhpZCkge1xuICAgIGxldCB0ZW1wUGFyZW50ID0gW107XG4gICAgdGhpcy5jaGVja0JyZWFkY3VtYkRvY3VtZW50KGlkLCB0ZW1wUGFyZW50LCBmdW5jdGlvbiAoYXJyKSB7XG4gICAgICB0ZW1wUGFyZW50ID0gWy4uLmFycl07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGVtcFBhcmVudDtcbiAgfVxuXG4gIGNoZWNrQnJlYWRjdW1iUHJvY2VzcyhpZCwgYnJlYWRjdW1icywgY2FsbGJhY2spIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2Vzcy5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLnRyZWVDb250cm9sTm9kZVByb2Nlc3MuZGF0YU5vZGVzW2ldO1xuICAgICAgaWYgKGlkID09IHRyZWUuaWQpIHtcbiAgICAgICAgYnJlYWRjdW1icyA9IFsuLi5icmVhZGN1bWJzLCB0cmVlXTtcbiAgICAgICAgaWYgKHRyZWUucGFyZW50SWQpIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQnJlYWRjdW1iUHJvY2Vzcyh0cmVlLnBhcmVudElkLCBicmVhZGN1bWJzLCBjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2FsbGJhY2soYnJlYWRjdW1icyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjaGVja0JyZWFkY3VtYkRvY3VtZW50KGlkLCBicmVhZGN1bWJzLCBjYWxsYmFjaykge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50cmVlQ29udHJvbE5vZGVEb2N1bWVudC5kYXRhTm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50LmRhdGFOb2Rlc1tpXTtcbiAgICAgIGlmIChpZCA9PSB0cmVlLmlkKSB7XG4gICAgICAgIGJyZWFkY3VtYnMgPSBbLi4uYnJlYWRjdW1icywgdHJlZV07XG4gICAgICAgIGlmICh0cmVlLnBhcmVudElkKSB7XG4gICAgICAgICAgdGhpcy5jaGVja0JyZWFkY3VtYkRvY3VtZW50KHRyZWUucGFyZW50SWQsIGJyZWFkY3VtYnMsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhicmVhZGN1bWJzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFRyZWVDb250cm9sTm9kZURvY3VtZW50KHRyZWVOb2Rlcykge1xuICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQgPSBudWxsO1xuICAgIHRoaXMudHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQgPSB0cmVlTm9kZXM7XG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVEb2N1bWVudC5kYXRhTm9kZXMgPSB0aGlzLnRyZWVDb250cm9sTm9kZURvY3VtZW50LmRhdGFOb2Rlcy5maWx0ZXIoeCA9PiB4Lm5hbWUgIT09IG51bGwgJiYgeC5uYW1lICE9PSAnJyk7XG5cbiAgfVxuXG4gIHNlbGVjdFRyZWVDb250cm9sTm9kZVByb2Nlc3ModHJlZU5vZGVzKSB7XG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzID0gbnVsbDtcbiAgICB0aGlzLnRyZWVDb250cm9sTm9kZVByb2Nlc3MgPSB0cmVlTm9kZXM7XG4gICAgdGhpcy50cmVlQ29udHJvbE5vZGVQcm9jZXNzLmRhdGFOb2RlcyA9IHRoaXMudHJlZUNvbnRyb2xOb2RlUHJvY2Vzcy5kYXRhTm9kZXMuZmlsdGVyKHggPT4geC5uYW1lICE9PSBudWxsICYmIHgubmFtZSAhPT0gJycpO1xuICB9XG5cbiAgZ2V0U3RhdHVzRG9jcyhpZCkge1xuICAgIHJldHVybiB0aGlzLnRyZWVEYXRhMi5maWx0ZXIoeCA9PiB4LmNoaWxkSWQgPT09IGlkKVswXS5zdGF0dXNJZDtcbiAgfVxuXG4gIGdldFN0YXR1c1Byb2Nlc3MoaWQpIHtcbiAgICByZXR1cm4gdGhpcy50cmVlRGF0YTEuZmlsdGVyKHggPT4geC5jaGlsZElkID09PSBpZClbMF0uc3RhdHVzSWQ7XG4gIH1cblxuICBnZXRPZmZzZXRIZWlnaHQoZWxlbWVudDogSFRNTEVsZW1lbnQsIGluY2x1ZGVNYXJnaW46IGJvb2xlYW4pOiBudW1iZXIge1xuICAgIGxldCBlbG1IZWlnaHQgPSAwLCBlbG1NYXJnaW4gPSAwO1xuXG4gICAgZWxtSGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgaWYgKGluY2x1ZGVNYXJnaW4pIHtcbiAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgICBlbG1NYXJnaW4gPSBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpblRvcC5yZXBsYWNlKCdweCcsICcnKSkgKyBwYXJzZUZsb2F0KHN0eWxlLm1hcmdpbkJvdHRvbS5yZXBsYWNlKCdweCcsICcnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIChlbG1IZWlnaHQgKyBlbG1NYXJnaW4pO1xuICB9XG5cbiAgZ2V0SXRlbUNoaXBOYW1lKGl0ZW06IFNlbGVjdGVkTm9kZSkge1xuICAgIGlmIChpdGVtLml0ZW1UeXBlID09PSBEYXRhVHlwZS5jaGVja2xpc3QgfHwgaXRlbS5pdGVtVHlwZSA9PT0gRGF0YVR5cGUuZGV2aWF0aW9uKSB7XG4gICAgICByZXR1cm4gKGl0ZW0ucGFyZW50TmFtZSAmJiBpdGVtLml0ZW1OYW1lICE9PSBpdGVtLnBhcmVudE5hbWUpID8gYCR7aXRlbS5wYXJlbnROYW1lfS8ke2l0ZW0uaXRlbU5hbWV9YCA6IGl0ZW0uaXRlbU5hbWU7XG4gICAgfVxuICAgIHJldHVybiBpdGVtLml0ZW1OYW1lO1xuICB9XG5cbiAgaXNFbGxpcHNpc0FjdGl2ZShlOiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBlID8gKGUuY2xpZW50V2lkdGggPCBlLnNjcm9sbFdpZHRoKSA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0Tm9kZUljb24oaXRlbTogSVJlbGF0ZWQpIHtcbiAgICBzd2l0Y2ggKGl0ZW0uaXRlbVR5cGUpIHtcbiAgICAgIGNhc2UgRGF0YVR5cGUuZm9sZGVyOiB7XG4gICAgICAgIHN3aXRjaCAoaXRlbS5sZXZlbFR5cGUpIHtcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRGVwYXJ0bWVudEZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnZGVwYXJ0bWVudF9mb2xkZXJfb3V0bGluZWQnO1xuICAgICAgICAgIGNhc2UgRG9jdW1lbnROb2RlVHlwZS5SZWdpb25hbEZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAncmVnaW9uYWxfZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuVG9wRm9sZGVyOlxuICAgICAgICAgICAgcmV0dXJuICdlbnRlcnByaXNlX2ZvbGRlcl9vdXRsaW5lZCc7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnbG9jYWxfZm9sZGVyX291dGxpbmVkJztcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICdmb2xkZXJfb3V0bGluZWQnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlIERhdGFUeXBlLmRvY3VtZW50OiB7XG4gICAgICAgIHN3aXRjaCAoaXRlbS5sZXZlbFR5cGUpIHtcbiAgICAgICAgICBjYXNlIERvY3VtZW50Tm9kZVR5cGUuRGVwYXJ0bWVudEZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfZGVwYXJ0bWVudCc7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLlJlZ2lvbmFsRm9sZGVyOlxuICAgICAgICAgICAgcmV0dXJuICdkb2N1bWVudF9yZWdpb25hbCc7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLlRvcEZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfZW50ZXJwcmlzZSc7XG4gICAgICAgICAgY2FzZSBEb2N1bWVudE5vZGVUeXBlLkZvbGRlcjpcbiAgICAgICAgICAgIHJldHVybiAnZG9jdW1lbnRfbG9jYWwnO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gJ2RvY3VtZW50JztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxuICAgICAgICByZXR1cm4gJ3Byb2Nlc3NfYXJlYV9vdXRsaW5lZCc7XG4gICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgIHJldHVybiAncHJvY2Vzcyc7XG4gICAgICBjYXNlIERhdGFUeXBlLmRldmlhdGlvbjpcbiAgICAgICAgcmV0dXJuICdkZXZpYXRpb24nO1xuICAgICAgY2FzZSBEYXRhVHlwZS5jaGVja2xpc3Q6XG4gICAgICAgIHJldHVybiAnY2hlY2tsaXN0JztcbiAgICAgIGNhc2UgRGF0YVR5cGUucmlzazpcbiAgICAgICAgcmV0dXJuICdyaXNrJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZm9sZGVyX291dGxpbmVkJztcbiAgICB9XG4gIH1cblxuICBnZXRTZWFyY2hPcmRlcigpIHtcbiAgICBsZXQgc2VhcmNoVHlwZXMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGFUeXBlKVxuICAgICAgLm1hcChrZXkgPT4gKHsgdmFsdWU6IHRoaXMuZGF0YVR5cGVba2V5XSwga2V5OiBrZXkgfSkpO1xuICAgIHNlYXJjaFR5cGVzID0gc2VhcmNoVHlwZXMuc2xpY2Uoc2VhcmNoVHlwZXMubGVuZ3RoIC8gMik7XG4gICAgcmV0dXJuIHNlYXJjaFR5cGVzO1xuICB9XG5cbiAgZ2V0VGl0bGUodHlwZTogbnVtYmVyKSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIERhdGFUeXBlLnByb2Nlc3M6XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuUFJPQ0VTU0VTO1xuICAgICAgY2FzZSBEYXRhVHlwZS5hcmVhOlxuICAgICAgICByZXR1cm4gdGhpcy5MQU5HLlBST0NFU1NfQVJFQTtcbiAgICAgIGNhc2UgRGF0YVR5cGUuZG9jdW1lbnQ6XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuRE9DVU1FTlRTO1xuICAgICAgY2FzZSBEYXRhVHlwZS5mb2xkZXI6XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuRk9MREVSO1xuICAgICAgY2FzZSBEYXRhVHlwZS5kZXZpYXRpb246XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuREVWSUFUSU9OO1xuICAgICAgY2FzZSBEYXRhVHlwZS5kZXZpYXRpb25UeXBlOlxuICAgICAgICByZXR1cm4gdGhpcy5MQU5HLkRFVklBVElPTl9UWVBFO1xuICAgICAgY2FzZSBEYXRhVHlwZS5jaGVja2xpc3Q6XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuQ0hFQ0tMSVNUO1xuICAgICAgY2FzZSBEYXRhVHlwZS5jaGVja2xpc3RDYXRlZ29yeTpcbiAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5DSEVDS0xJU1RfQ0FURUdPUlk7XG4gICAgICBjYXNlIERhdGFUeXBlLnJpc2s6XG4gICAgICAgIHJldHVybiB0aGlzLkxBTkcuQVNTRVNTTUVOVDtcbiAgICAgIGNhc2UgRGF0YVR5cGUucmlza0ZvbGRlcjpcbiAgICAgICAgcmV0dXJuIHRoaXMuTEFORy5GT0xERVI7XG4gICAgfVxuICB9XG5cbiAgZ2V0UGFyZW50TmFtZShpdGVtOiBJUmVsYXRlZCkge1xuICAgIGlmIChpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmNoZWNrbGlzdCB8fCBpdGVtLml0ZW1UeXBlID09PSB0aGlzLmRhdGFUeXBlLmRldmlhdGlvbikge1xuICAgICAgcmV0dXJuIGl0ZW0ucGFyZW50TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBnZXRJdGVtSWQoaXRlbTogSVJlbGF0ZWQpIHtcbiAgICBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5wcm9jZXNzKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5MQU5HLlBST0NFU1NfSUR9OiAke2l0ZW0uaXRlbU51bWJlcklkfTsgJHtpdGVtLnN0YXR1c05hbWV9YDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXRlbS5pdGVtVHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMuTEFORy5ET0NVTUVOVF9JRH06ICR7aXRlbS5pdGVtTnVtYmVySWR9OyAke2l0ZW0uc3RhdHVzTmFtZX1gO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdEl0ZW0obm9kZTogSVJlbGF0ZWQpIHtcbiAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0aGlzLmNoZWNrZWROb2RlTGlzdC5maW5kKHggPT4gKHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5pZC50b0xvd2VyQ2FzZSgpICYmIHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpKTtcblxuICAgIGlmIChzZWxlY3RlZE5vZGUpIHtcbiAgICAgIHRoaXMucmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KHtcbiAgICAgICAgaWQ6IHNlbGVjdGVkTm9kZS5pZCxcbiAgICAgICAgbmFtZTogbm9kZS5pdGVtTmFtZSxcbiAgICAgICAgcGFyZW50SWQ6IHNlbGVjdGVkTm9kZS5wYXJlbnRJZCxcbiAgICAgICAgaGFzQ2hpbGQ6IGZhbHNlLFxuICAgICAgICBleHBhbmRhYmxlOiBmYWxzZSxcbiAgICAgICAgbGV2ZWw6IDAsXG4gICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHRoaXMuc2VsZWN0UmVsYXRlZChub2RlKTtcbiAgICB9XG4gIH1cblxuICBpc05vZGVTZWxlY3RlZChub2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hlY2tlZE5vZGVMaXN0LmZpbHRlcih4ID0+ICh4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKSAmJiB4LnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGdldENoaWxkcmVuT2ZGb2xkZXIobm9kZTogVHJlZUZsYXROb2RlLCB0eXBlOiBEYXRhVHlwZSkge1xuICAgIGlmICh0aGlzLnNwbGl0Vmlldykge1xuICAgICAgY29uc3QgcGFyZW50VGV4dHMgPSB0aGlzLmVsZW0ubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcudGV4dC1ub2RlLXBhcmVudCcpO1xuICAgICAgW10uZm9yRWFjaC5jYWxsKHBhcmVudFRleHRzLCAoZWwpID0+IHtcbiAgICAgICAgZWwuY2xhc3NMaXN0LnJlbW92ZSgnYWN0aXZlLWl0ZW0nKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaXRlbUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAjXyR7bm9kZS5wYXJlbnRJZCA/IG5vZGUucGFyZW50SWQgOiAnJ31fJHtub2RlLmlkfV8ke25vZGUubGV2ZWx9YCk7XG4gICAgICBbXS5mb3JFYWNoLmNhbGwoaXRlbUVsZW1lbnQsIChlbCkgPT4ge1xuICAgICAgICBlbC5jbGFzc0xpc3QuYWRkKCdhY3RpdmUtaXRlbScpO1xuICAgICAgfSk7XG4gICAgICBpZiAodHlwZSA9PT0gdGhpcy5kYXRhVHlwZS5mb2xkZXIpIHtcbiAgICAgICAgdGhpcy5zcGxpdFZpZXdUaXRsZSA9IGAke3RoaXMuTEFORy5NRVNTQUdFLkRPQ1VNRU5UU19JTi50b1VwcGVyQ2FzZSgpfSBcIiR7bm9kZS5uYW1lfVwiYDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHR5cGUgPT09IHRoaXMuZGF0YVR5cGUuYXJlYSkge1xuICAgICAgICB0aGlzLnNwbGl0Vmlld1RpdGxlID0gYCR7dGhpcy5MQU5HLk1FU1NBR0UuUFJPQ0VTU0VTX0lOLnRvVXBwZXJDYXNlKCl9IFwiJHtub2RlLm5hbWV9XCJgO1xuICAgICAgfVxuICAgICAgbGV0IGl0ZW0gPSBuZXcgSVJlbGF0ZWQoKTtcbiAgICAgIGl0ZW0uaWQgPSBub2RlLmlkO1xuICAgICAgaXRlbS5pdGVtVHlwZSA9IHR5cGU7XG4gICAgICBpdGVtLml0ZW1OYW1lID0gbm9kZS5uYW1lO1xuICAgICAgaXRlbS5sZXZlbFR5cGUgPSBub2RlLmxldmVsVHlwZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBub2RlO1xuICAgICAgdGhpcy5wYXJlbnROb2RlU2VsZWN0ZWQgPSBuZXcgVHJlZUZsYXROb2RlKCk7XG4gICAgICB0aGlzLnBhcmVudE5vZGVTZWxlY3RlZCA9IHsgLi4ubm9kZSB9O1xuICAgICAgdGhpcy5vbkV4cGFuZEZvbGRlci5lbWl0KGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGNhblNob3dTZWFyY2hPcHRpb24obW9kdWxlSWQ6IG51bWJlcikge1xuICAgIGlmICh0aGlzLmNhbk9ubHlTZWxlY3RJdGVtICYmXG4gICAgICAobW9kdWxlSWQgPT09IERhdGFUeXBlLmNoZWNrbGlzdENhdGVnb3J5XG4gICAgICAgIHx8IG1vZHVsZUlkID09PSBEYXRhVHlwZS5yaXNrRm9sZGVyXG4gICAgICAgIHx8IG1vZHVsZUlkID09PSBEYXRhVHlwZS5kZXZpYXRpb25UeXBlXG4gICAgICAgIHx8IChtb2R1bGVJZCA9PT0gRGF0YVR5cGUuYXJlYSAmJiB0aGlzLnRyZWVDb25maWcxICYmICF0aGlzLnRyZWVDb25maWcxLnNpbmdsZVNlbGVjdGVkTm9kZSlcbiAgICAgICAgfHwgKG1vZHVsZUlkID09PSBEYXRhVHlwZS5mb2xkZXIgJiYgdGhpcy50cmVlQ29uZmlnMiAmJiAhdGhpcy50cmVlQ29uZmlnMi5zaW5nbGVTZWxlY3RlZE5vZGUpXG4gICAgICApKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdldE1vZHVsZUZpbHRlcmVkT3B0aW9ucyhtb2R1bGVJZCkubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHNlbGVjdE5vZGVUcmVlRXZlbnQobm9kZTogVHJlZUZsYXROb2RlKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0LmZpbmRJbmRleCh4ID0+IHguaWQudG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5pZC50b0xvd2VyQ2FzZSgpXG4gICAgICAmJiAoIW5vZGUucGFyZW50SWQgfHwgeC5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSA9PT0gbm9kZS5wYXJlbnRJZD8udG9Mb3dlckNhc2UoKSkgJiYgeC5leHBhbmRhYmxlID09PSBub2RlLmV4cGFuZGFibGUpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0ID0gdGhpcy5jb21tb25DaGVja2VkTGlzdC5maWx0ZXIoKF8sIGluZCkgPT4gaW5kICE9PSBpbmRleCk7XG4gICAgICBpZiAodGhpcy52aWRlb0RhdGEpIHtcbiAgICAgICAgdGhpcy52aWRlb0RhdGEuc3JjID0gdGhpcy5vcmlnaW5WaWRlb0RhdGFTcmM7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHRoaXMudmlkZW9EYXRhKSB7XG4gICAgICAgIHRoaXMudmlkZW9EYXRhLnNyYyA9IGAvdmlkZW8/aWQ9JHtub2RlLmlkfWA7XG4gICAgICB9XG4gICAgICB0aGlzLmNvbW1vbkNoZWNrZWRMaXN0ID0gWy4uLnRoaXMuY29tbW9uQ2hlY2tlZExpc3QsIG5vZGVdO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IHRoaXMuY29tbW9uQ2hlY2tlZExpc3Q7XG4gIH1cblxuICBzZWxlY3ROb2RlVHJlZTJFdmVudChub2RlOiBUcmVlRmxhdE5vZGUpIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZG9jdW1lbnRDaGVja2VkTGlzdC5maW5kSW5kZXgoeCA9PiB4LmlkLnRvTG93ZXJDYXNlKCkgPT09IG5vZGUuaWQudG9Mb3dlckNhc2UoKVxuICAgICAgJiYgKCFub2RlLnBhcmVudElkIHx8IHgucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkgPT09IG5vZGUucGFyZW50SWQ/LnRvTG93ZXJDYXNlKCkpICYmIHguZXhwYW5kYWJsZSA9PT0gbm9kZS5leHBhbmRhYmxlKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0ID0gdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0LmZpbHRlcigoXywgaW5kKSA9PiBpbmQgIT09IGluZGV4KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLmRvY3VtZW50Q2hlY2tlZExpc3QgPSBbLi4udGhpcy5kb2N1bWVudENoZWNrZWRMaXN0LCBub2RlXTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZERhdGEyID0gdGhpcy5kb2N1bWVudENoZWNrZWRMaXN0O1xuICB9XG5cbiAgZ2V0Q2hpbGROb2RlU2VsZWN0T25lKGxpc3RDaGlsZHJlbikge1xuICAgIHRoaXMubGlzdENoaWxkcmVuU2VsZWN0T25lID0gW107XG4gICAgdGhpcy5saXN0Q2hpbGRyZW5TZWxlY3RPbmUgPSBsaXN0Q2hpbGRyZW47XG4gIH1cblxuICBoYXNTZWxlY3RlZChyZWxhdGVkOiBJUmVsYXRlZCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGFyckRpc2FibGVkTGlzdCA9IHRoaXMuZGlzYWJsZWRMaXN0LmNvbmNhdCh0aGlzLmRpc2FibGVkTGlzdDIpO1xuICAgIHJldHVybiBhcnJEaXNhYmxlZExpc3Quc29tZShub2RlID0+IG5vZGUuaWQudG9VcHBlckNhc2UoKSA9PT0gcmVsYXRlZC5pZC50b1VwcGVyQ2FzZSgpICYmICghcmVsYXRlZC5wYXJlbnRJZCB8fCByZWxhdGVkLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpID09PSBub2RlLnBhcmVudElkPy50b0xvd2VyQ2FzZSgpKSk7XG4gIH1cblxuICB0b1JlbGF0ZWRPcHRpb25zKHJlbGF0ZWRzOiBJUmVsYXRlZFtdKTogUmVsYXRlZE9wdGlvbltdIHtcbiAgICBjb25zdCByZXN1bHRzOiBSZWxhdGVkT3B0aW9uW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJlbGF0ZWQgb2YgcmVsYXRlZHMpIHtcbiAgICAgIHJlc3VsdHMucHVzaCh7IC4uLnJlbGF0ZWQsIGRpc2FibGVkOiB0aGlzLmhhc1NlbGVjdGVkKHJlbGF0ZWQpIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgZGlzcGxheVdoZW5TZWxlY3RSZWxhdGVkT3B0aW9uKCRldmVudDogYW55KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgcmVmcmVzaFJlbGF0ZWRPcHRpb25zKCk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy50b1JlbGF0ZWRPcHRpb25zKHRoaXMuZmlsdGVyZWRPcHRpb25zKTtcbiAgfVxuXG4gIGNsZWFyUU1TSW5wdXRJbWFnZUZpbGUoKSB7XG4gICAgdGhpcy5xbXNJbnB1dEltYWdlRmlsZSA9IG51bGw7XG4gIH1cblxuICBjbGVhclFNU0lucHV0VmlkZW9GaWxlKCkge1xuICAgIHRoaXMucW1zSW5wdXRWaWRlb0ZpbGUgPSBudWxsO1xuICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVswXS50cmVlQ29udHJvbC5kYXRhTm9kZXMubWFwKHggPT4geC5kaXNhYmxlZCA9IGZhbHNlKTtcbiAgfVxuXG4gIGFzeW5jIG9uQ2hhbmdlSW1hZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuaXNMb2FkaW5nSW1hZ2VGaWxlID0gdHJ1ZTtcblxuICAgIGlmICghdGhpcy5xbXNJbnB1dEltYWdlRmlsZT8uaXNTdWNjZXNzZnVsICYmIHRoaXMubWF4VmlkZW9UaHVtYm5haWxTaXplS0IpIHtcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oUU1TVXBsb2FkRmlsZUVycm9yRGlhbG9nLCB7XG4gICAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgZmlsZU5hbWVzOiB0aGlzLnFtc0lucHV0SW1hZ2VGaWxlLnR5cGVFcnJvciA9PSBGaWxlRXJyb3JUeXBlLm5vdFN1cHBvcnRlZEV4dGVuc2lvbiA/IFt0aGlzLnFtc0lucHV0SW1hZ2VGaWxlLmZpbGVOYW1lXSA6IFtdLFxuICAgICAgICAgIGFjY2VwdGVkRXh0ZW5zaW9uOiB0aGlzLmFjY2VwdEV4dGVuc2lvbnMsXG4gICAgICAgICAgb3ZlckxpbWl0RmlsZXM6IHRoaXMucW1zSW5wdXRJbWFnZUZpbGUudHlwZUVycm9yID09IEZpbGVFcnJvclR5cGUuZXhjZWVkTWF4U2l6ZSA/IFt0aGlzLnFtc0lucHV0SW1hZ2VGaWxlLmZpbGVOYW1lXSA6IFtdLFxuICAgICAgICAgIGZpbGVTaXplTGltaXQ6IHRoaXMubWF4VmlkZW9UaHVtYm5haWxTaXplS0IgLyAxMDI0LFxuICAgICAgICAgIGZpbGVTaXplTGltaXRVbml0OiAnS0InXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5xbXNJbnB1dEltYWdlRmlsZSA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBpZiAodGhpcy52aWRlb0RhdGEpIHtcbiAgICAgICAgdGhpcy52aWRlb0RhdGEucG9zdGVyID0gYXdhaXQgdGhpcy51cGxvYWRTZXJ2aWNlLnVwbG9hZEltYWdlKHRoaXMucW1zSW5wdXRJbWFnZUZpbGUuZmlsZSwgdGhpcy5pbWFnZVVwbG9hZC5oZWlnaHQsIHRoaXMuaW1hZ2VVcGxvYWQud2lkdGgpLnRvUHJvbWlzZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJlYWRlckltYWdlID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXJJbWFnZS5yZWFkQXNEYXRhVVJMKHRoaXMucW1zSW5wdXRJbWFnZUZpbGUuZmlsZSk7XG4gICAgcmVhZGVySW1hZ2Uub25sb2FkID0gYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICB0aGlzLmltYWdlVXBsb2FkLnNyYyA9IGV2ZW50LnRhcmdldC5yZXN1bHQudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgdGhpcy5pc0xvYWRpbmdJbWFnZUZpbGUgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIG9uQ2hhbmdlRmlsZShldmVudDogYW55KSB7XG4gICAgdGhpcy5pc0xvYWRpbmdWaWRlb0ZpbGUgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tlZE5vZGVMaXN0ID0gW107XG4gICAgdGhpcy5kYXRhVHJlZXMudG9BcnJheSgpWzBdLmNoZWNrbGlzdFNlbGVjdGlvbi5jbGVhcigpO1xuICAgIHRoaXMuZGF0YVRyZWVzLnRvQXJyYXkoKVswXS50cmVlQ29udHJvbC5kYXRhTm9kZXMubWFwKHggPT4geC5kaXNhYmxlZCA9IHRydWUpO1xuICAgIGNvbnN0IHJlc1VwbG9hZFZpZGVvID0gYXdhaXQgdGhpcy51cGxvYWRTZXJ2aWNlLnVwbG9hZFNpbmdsZUZpbGUodGhpcy5xbXNJbnB1dFZpZGVvRmlsZS5maWxlLCAnJywgJzEnLCB0aGlzLmVudGl0eUlkKS50b1Byb21pc2UoKTtcbiAgICBpZiAodGhpcy52aWRlb0RhdGEpIHtcbiAgICAgIHRoaXMudmlkZW9EYXRhLnNyYyA9IHJlc1VwbG9hZFZpZGVvLnVybDtcbiAgICB9XG4gICAgdGhpcy5pc0xvYWRpbmdWaWRlb0ZpbGUgPSBmYWxzZTtcbiAgfVxufVxuIiwiPGgzIG1hdC1kaWFsb2ctdGl0bGUgY2xhc3M9XCJtb3JlLWFjdGlvblwiPlxuICB7eyBtb2R1bGVOYW1lIHwgdXBwZXJjYXNlIH19XG4gIDxidXR0b24gbWF0RGlhbG9nQ2xvc2UgY2xhc3M9XCJjbG9zZS1idG5cIiBjb2xvcj1cImxpZ2h0XCIgcW1zLWJ0bi1pY29uIChjbGljayk9XCJvbkNsb3NlQ2xpY2soKVwiPlxuICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gIDwvYnV0dG9uPlxuPC9oMz5cbjxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gIDwhLS0gQ2tlZGl0b3IgVXNpbmcgLS0+XG4gIDxkaXYgKm5nSWY9XCJjYW5VcGxvYWRJbWFnZSB8fCBjYW5VcGxvYWRWaWRlbyB8fCBjYW5VcGRhdGVWaWRlb1Byb3BlcnRpZXNcIiBpZD1cInFtc2xpYl9yZWxhdGVkX3BvcHVwX2hlYWRlcl8wMDFcIlxuICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICBwYW5lbF9oZWFkZXJfaGVpZ2h0X3dpdGhfdmlkZW9fdXBsb2FkOiBjYW5VcGxvYWRWaWRlbyxcbiAgICAgICAgICBwYW5lbF9oZWFkZXJfaGVpZ2h0X3dpdGhvdXRfdmlkZW9fdXBsb2FkOiAhY2FuVXBsb2FkVmlkZW8gJiYgY2FuVXBsb2FkSW1hZ2UgJiYgY2FuVXBkYXRlVmlkZW9Qcm9wZXJ0aWVzXG4gICAgICAgIH1cIiBtYXQtZGlhbG9nLWNvbnRlbnQgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiY2FuVXBsb2FkSW1hZ2VcIiBjbGFzcz1cInNlbGVjdGVkLWltYWdlIGNvbC0xMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPnt7IG1vZHVsZVVwbG9hZEltYWdlTmFtZSB8IHVwcGVyY2FzZSB9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cbiAgICAgICAgICA8Zm9ybT5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBxbXMtZm9ybSBxbXMtZmlsZS11cGxvYWQgYXBwZWFyYW5jZT1cImZpbGxcIiBjbGFzcz1cImV4YW1wbGUtd2lkdGggaW5wdXQtdXBsb2FkXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBtYXRQcmVmaXggc3ZnSWNvbj1cInVwbG9hZFwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlVwbG9hZCBmaWxlXCIgW2Zvcm1Db250cm9sXT1cInFtc0lucHV0SW1hZ2VUeXBlXCIgcW1zLWZpbGUtdXBsb2FkLWRpc3BsYXlcbiAgICAgICAgICAgICAgICAjZmlsZURpc3BsYXkgdmFsdWU9XCJ7e3Ftc0lucHV0SW1hZ2VGaWxlPyBxbXNJbnB1dEltYWdlRmlsZS5maWxlTmFtZSA6ICcnfX1cIlxuICAgICAgICAgICAgICAgIFthdHRyLmRpc2FibGVkXT1cImlzTG9hZGluZ0ltYWdlRmlsZSA/ICdkaXNhYmxlZCcgOiBudWxsXCIgcmVhZG9ubHk+XG4gICAgICAgICAgICAgIDxpbnB1dCBoaWRkZW4gdHlwZT1cImZpbGVcIiBbKGlucHV0RmlsZSldPVwicW1zSW5wdXRJbWFnZUZpbGVcIiBxbXMtZmlsZS11cGxvYWQtc2VsZWN0b3IgI2ZpbGVTZWxlY3RvclxuICAgICAgICAgICAgICAgIFthY2NlcHRFeHRlbnNpb25zXT1cImFjY2VwdEV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgIGFjY2VwdD1cIi5wanAsIC5qcGcsIC5wanBlZywgLmpwZWcsIC5qZmlmLCAucG5nLCAuZ2lmLCAuYm1wLCAud2VicCwgLnRpZiwgLnRpZmZcIlxuICAgICAgICAgICAgICAgIFttYXhTaXplXT1cIm1heFZpZGVvVGh1bWJuYWlsU2l6ZUtCXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUltYWdlKCRldmVudClcIj5cblxuICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgbWF0U3VmZml4IG1vZGU9XCJpbmRldGVybWluYXRlXCIgZGlhbWV0ZXI9JzIwJ1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMb2FkaW5nSW1hZ2VGaWxlXCI+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXggcW1zLWlucHV0LWNsZWFyICpuZ0lmPVwicW1zSW5wdXRJbWFnZUZpbGUgJiYgcW1zSW5wdXRJbWFnZUZpbGUuZmlsZU5hbWVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCIgKGNsaWNrKT1cImNsZWFyUU1TSW5wdXRJbWFnZUZpbGUoKVwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdJbWFnZUZpbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJxbXNJbnB1dEltYWdlRmlsZSAmJiBxbXNJbnB1dEltYWdlRmlsZS50eXBlRXJyb3IgPT0gMVwiPlxuICAgICAgICAgICAgICAgIHt7IExBTkcuUU1TQ0tFRElUT1IuRVhURU5TSU9OX0lTX05PVF9TVVBQT1JURUQgfX1cbiAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj57eyBMQU5HLlFNU0NLRURJVE9SLlZJREVPX0lNQUdFIHwgdXBwZXJjYXNlfX06PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxuICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImV4YW1wbGUtd2lkdGggaW5wdXQtdXBsb2FkXCI+XG4gICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgWyhuZ01vZGVsKV09XCJ2aWRlb0RhdGEucG9zdGVyXCI+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtaW1hZ2UgY29sLTEyXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY2FuVXBsb2FkVmlkZW9cIiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPnt7IG1vZHVsZVVwbG9hZEZpbGVOYW1lIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxuICAgICAgICAgIDxmb3JtPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHFtcy1mb3JtIHFtcy1maWxlLXVwbG9hZCBhcHBlYXJhbmNlPVwiZmlsbFwiIGNsYXNzPVwiZXhhbXBsZS13aWR0aCBpbnB1dC11cGxvYWRcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeCBzdmdJY29uPVwidXBsb2FkXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHBsYWNlaG9sZGVyPVwiVXBsb2FkIGZpbGVcIiBbZm9ybUNvbnRyb2xdPVwicW1zSW5wdXRWaWRlb1R5cGVcIiBxbXMtZmlsZS11cGxvYWQtZGlzcGxheVxuICAgICAgICAgICAgICAgICNmaWxlRGlzcGxheSB2YWx1ZT1cInt7cW1zSW5wdXRWaWRlb0ZpbGU/IHFtc0lucHV0VmlkZW9GaWxlLmZpbGVOYW1lIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXNMb2FkaW5nVmlkZW9GaWxlID8gJ2Rpc2FibGVkJyA6IG51bGxcIiByZWFkb25seT5cbiAgICAgICAgICAgICAgPGlucHV0IGhpZGRlbiB0eXBlPVwiZmlsZVwiIFsoaW5wdXRGaWxlKV09XCJxbXNJbnB1dFZpZGVvRmlsZVwiIHFtcy1maWxlLXVwbG9hZC1zZWxlY3RvciAjZmlsZVNlbGVjdG9yXG4gICAgICAgICAgICAgICAgW2FjY2VwdEV4dGVuc2lvbnNdPVwiYWNjZXB0RXh0ZW5zaW9uc0ZvclZpZGVvXCIgYWNjZXB0PVwiLm1wNFwiIChjaGFuZ2UpPVwib25DaGFuZ2VGaWxlKCRldmVudClcIj5cblxuICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgbWF0U3VmZml4IG1vZGU9XCJpbmRldGVybWluYXRlXCIgZGlhbWV0ZXI9JzIwJ1xuICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNMb2FkaW5nVmlkZW9GaWxlXCI+PC9tYXQtcHJvZ3Jlc3Mtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXggcW1zLWlucHV0LWNsZWFyICpuZ0lmPVwicW1zSW5wdXRWaWRlb0ZpbGUgJiYgcW1zSW5wdXRWaWRlb0ZpbGUuZmlsZU5hbWVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCIgKGNsaWNrKT1cImNsZWFyUU1TSW5wdXRWaWRlb0ZpbGUoKVwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdWaWRlb0ZpbGVcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJxbXNJbnB1dFZpZGVvRmlsZSAmJiBxbXNJbnB1dFZpZGVvRmlsZS50eXBlRXJyb3IgPT0gMVwiPlxuICAgICAgICAgICAgICAgIHt7IExBTkcuUU1TQ0tFRElUT1IuQUNDRVBUX01QNF9PTkxZIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImNhblVwZGF0ZVZpZGVvUHJvcGVydGllc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj57eyBMQU5HLlFNU0NLRURJVE9SLlZJREVPX1NPVVJDRSB8IHVwcGVyY2FzZX19OjwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJleGFtcGxlLXdpZHRoIGlucHV0LXVwbG9hZFwiPlxuICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwidmlkZW9EYXRhLnNyY1wiPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImNhblVwZGF0ZVZpZGVvUHJvcGVydGllc1wiIGNsYXNzPVwic2VsZWN0ZWQtaW1hZ2UgY29sLTEyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZXhhbXBsZS13aWR0aCBpbnB1dC11cGxvYWRcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgTEFORy5XSURUSCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInZpZGVvRGF0YS53aWR0aFwiPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJleGFtcGxlLXdpZHRoIGlucHV0LXVwbG9hZFwiPlxuICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBMQU5HLkhFSUdIVCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInZpZGVvRGF0YS5oZWlnaHRcIj5cbiAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+XG4gICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZXhhbXBsZS13aWR0aCBpbnB1dC11cGxvYWRcIj5cbiAgICAgICAgICAgIDxtYXQtbGFiZWw+SWQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInZpZGVvRGF0YS5pZFwiPlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIFJlbGF0ZWQgbW9kdWxlIC0tPlxuICA8ZGl2IGNsYXNzPVwic3RpY2t5LWJsb2NrXCI+XG4gICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJ7eyBMQU5HLlNFQVJDSCB9fVwiIG1hdElucHV0IFtmb3JtQ29udHJvbF09XCJteUNvbnRyb2xcIiBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIiAvPlxuICAgIDxtYXQtaWNvbj5zZWFyY2g8L21hdC1pY29uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImxpbmVfX2RpdmlkZXJcIj48L2Rpdj5cblxuICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIGNsYXNzPVwibWF0LWF1dG9jb21wbGV0ZV9yZWxhdGVkLXZpZXdwb3J0XCJcbiAgICAob3B0aW9uU2VsZWN0ZWQpPVwic2VsZWN0UmVsYXRlZCgkZXZlbnQub3B0aW9uLnZhbHVlKVwiIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5V2hlblNlbGVjdFJlbGF0ZWRPcHRpb25cIj5cbiAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IHFtcy1zY3JvbGxiYXIgaXRlbVNpemU9XCIxMFwiIFtjbGFzcy5yZWxhdGVkLXZpZXdwb3J0XT1cImlzSW5wdXRWYWx1ZVwiXG4gICAgICAqbmdJZj1cImZpbHRlcmVkT3B0aW9ucy5sZW5ndGhcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHR5cGUgb2Ygc2VhcmNoT3JkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaF9fbW9kdWxlLXJlc3VsdFwiICpuZ0lmPVwiY2FuU2hvd1NlYXJjaE9wdGlvbih0eXBlLnZhbHVlKVwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VhcmNoX19tb2R1bGUtdGl0bGVcIj57eyBnZXRUaXRsZSh0eXBlLnZhbHVlKSB9fTwvc3Bhbj5cbiAgICAgICAgICA8bWF0LW9wdGlvbiBjbGFzcz1cInNlYXJjaF9fb3B0aW9uXCIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBnZXRNb2R1bGVGaWx0ZXJlZE9wdGlvbnModHlwZS52YWx1ZSlcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cIm9wdGlvblwiIFtkaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIj5cbiAgICAgICAgICAgIDxxbXMtbGlzdC1pdGVtIHR5cGU9XCJpbWFnZS1zcXVhcmVcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGxlYWRpbmctaWNvbiB0eXBlPVwiaW1hZ2Utc3F1YXJlXCIgW3N2Z0ljb25dPVwiZ2V0Tm9kZUljb24ob3B0aW9uKVwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDxkaXYgcW1zLWxpc3QtaGVhZGVyPlxuICAgICAgICAgICAgICAgIDxkaXYgcW1zLWxpbmUgdHlwZT1cImNhcHRpb25cIiBxbXMtdG9vbC10aXA9XCJ7e1xuICAgICAgICAgICAgICAgICAgICBpc0VsbGlwc2lzQWN0aXZlKHNlYXJjaEl0ZW1SZXN1bHQpID8gb3B0aW9uLnBhcmVudE5hbWUgOiAnJ1xuICAgICAgICAgICAgICAgICAgfX1cIiBtb2RlPVwiZGFya1wiICpuZ0lmPVwiZ2V0UGFyZW50TmFtZShvcHRpb24pXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAjc2VhcmNoSXRlbVJlc3VsdCBjbGFzcz1cInNlYXJjaF9fcmVzdWx0X19wYXJlbnQtbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ucGFyZW50TmFtZSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgcW1zLWxpbmUgdHlwZT1cInN1YnRpdGxlXCIgY2xhc3M9XCJzZWFyY2hfX29wdGlvbi1uYW1lXCI+XG4gICAgICAgICAgICAgICAgICB7eyBvcHRpb24uaXRlbU5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FwdGlvblwiICpuZ0lmPVwib3B0aW9uLmJyZWFkY3VtYnMgJiYgb3B0aW9uLmJyZWFkY3VtYnMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgICA8cW1zLWJyZWFkY3J1bWIgY2xhc3M9XCJicmVhZGNydW1iLWNvbnRhaW5lclwiIHR5cGU9XCJ0YWJsZVwiIG51bURpc3BsYXlJdGVtPVwiMVwiXG4gICAgICAgICAgICAgICAgICAgIFtub2Rlc109XCJvcHRpb24uYnJlYWRjdW1ic1wiPlxuICAgICAgICAgICAgICAgICAgPC9xbXMtYnJlYWRjcnVtYj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgcW1zLWxpbmUgY29sb3I9XCJkZWZhdWx0LXN1YnRpdGxlXCIgKm5nSWY9XCJnZXRJdGVtSWQob3B0aW9uKVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQgc2VhcmNoX19kZXNjcmlwdGlvbi1pY29uXCI+bG9jYWxfb2ZmZXI8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICB7eyBnZXRJdGVtSWQob3B0aW9uKSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvcW1zLWxpc3QtaXRlbT5cbiAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9jZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQ+XG4gIDwvbWF0LWF1dG9jb21wbGV0ZT5cblxuICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgPGRpdiBjbGFzcz1cInFtcy1zY3JvbGxiYXIgcW1zbGliX3JlbGF0ZWRfcG9wdXBfY29udGVudFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgcGFuZWxfX2NvbnRlbnRfaXRlbTogY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCxcbiAgICAgICAgcGFuZWxfX2NvbnRlbnQ6ICFjaGVja2VkTm9kZUxpc3QubGVuZ3RoLFxuICAgICAgICBwYW5lbF9fY29udGVudF9oZWlnaHRfd2l0aF91cGxvYWQ6IGNhblVwbG9hZEltYWdlICYmICFjaGVja2VkTm9kZUxpc3QubGVuZ3RoLFxuICAgICAgICBwYW5lbF9fY29udGVudF9pdGVtX2hlaWdodF93aXRoX3VwbG9hZDogY2FuVXBsb2FkSW1hZ2UgJiYgY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCxcbiAgICAgICAgJ2NvbC02Jzogc3BsaXRWaWV3LFxuICAgICAgICAnY29sLTEyJzogIXNwbGl0Vmlld1xuICAgICAgfVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyZWVEYXRhMS5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGhpZGVUb2dnbGUgaWQ9XCJxbXNsaWJfcmVsYXRlZF9wb3B1cF9jb21tb25fMDAxXCIgW2V4cGFuZGVkXT1cImlzQ29tbW9uRXhwYW5kZWRcIlxuICAgICAgICAgIChvcGVuZWQpPVwiaXNDb21tb25FeHBhbmRlZCA9IHRydWVcIiAoY2xvc2VkKT1cImlzQ29tbW9uRXhwYW5kZWQgPSBmYWxzZVwiIGNsYXNzPVwicGFuZWwtdHJlZVwiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cInBhZGRpbmctNVwiPlxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cIm1vZHVsZUlkID09PSBtb2R1bGUuZG9jdW1lbnRQcm9jZXNzXCI+XG4gICAgICAgICAgICAgIHt7IExBTkcuUFJPQ0VTU0VTIHwgdXBwZXJjYXNlIH19XG4gICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCJtb2R1bGVJZCA9PT0gbW9kdWxlLmRldmlhdGlvblwiPlxuICAgICAgICAgICAgICB7eyBMQU5HLkRFVklBVElPTiB8IHVwcGVyY2FzZSB9fVxuICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlICpuZ0lmPVwibW9kdWxlSWQgPT09IG1vZHVsZS5jaGVja2xpc3RcIj5cbiAgICAgICAgICAgICAge3sgTEFORy5DSEVDS0xJU1QgfCB1cHBlcmNhc2UgfX1cbiAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cIm1vZHVsZUlkID09PSBtb2R1bGUucmlza1wiPlxuICAgICAgICAgICAgICB7eyBMQU5HLkFTU0VTU01FTlQgfCB1cHBlcmNhc2UgfX1cbiAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPGJ1dHRvbiBxbXMtYnRuLWljb24gY2xhc3M9XCJyZWxhdGVkX3BvcHVwX3RvZ2dsZS1idG5cIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgaXNDb21tb25FeHBhbmRlZCA/IFwia2V5Ym9hcmRfYXJyb3dfdXBcIiA6IFwia2V5Ym9hcmRfYXJyb3dfZG93blwiXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgPGRpdiBpZD1cInFtc2xpYl9yZWxhdGVkX3BvcHVwX2NvbW1vbl8wMDJcIj5cbiAgICAgICAgICAgIDxxbXMtdHJlZSBbdHJlZURhdGFdPVwidHJlZURhdGExXCIgW3RyZWVDb25maWddPVwidHJlZUNvbmZpZzFcIiBbc2VsZWN0ZWREYXRhXT1cInNlbGVjdGVkRGF0YVwiXG4gICAgICAgICAgICAgIFtzZWxlY3RlZFJpc2tEYXRhXT1cInNlbGVjdGVkUmlza0RhdGFcIiBbZGlzYWJsZWRMaXN0XT1cImRpc2FibGVkTGlzdFwiXG4gICAgICAgICAgICAgIChjaGVja0JveEV2ZW50KT1cImdldENvbW1vbkNoZWNrZWROb2RlKCRldmVudClcIlxuICAgICAgICAgICAgICAobm9kZUV4cGFuZEV2ZW50KT1cImdldENoaWxkcmVuT2ZGb2xkZXIoJGV2ZW50LCBkYXRhVHlwZS5hcmVhKVwiXG4gICAgICAgICAgICAgIChzZWxlY3ROb2RlRXZlbnQpPVwic2VsZWN0Tm9kZVRyZWVFdmVudCgkZXZlbnQpXCIgKGdldENoaWxkTm9kZVNlbGVjdE9uZSk9XCJnZXRDaGlsZE5vZGVTZWxlY3RPbmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIFtleHBhbmRPblRpdGxlQ2xpY2tdPVwiIXNwbGl0Vmlld1wiIFtwYXJlbnROb2RlT25DbGlja109XCJwYXJlbnROb2RlU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAodHJlZUNvbnRyb2xOb2Rlcyk9XCJzZWxlY3RUcmVlQ29udHJvbE5vZGVQcm9jZXNzKCRldmVudClcIj48L3Ftcy10cmVlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRyZWVEYXRhMi5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJtb2R1bGVJZCA9PT0gbW9kdWxlLmRvY3VtZW50UHJvY2Vzc1wiIGNsYXNzPVwibGluZV9fZGl2aWRlclwiPjwvZGl2PlxuXG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsIGhpZGVUb2dnbGUgKm5nSWY9XCJtb2R1bGVJZCA9PT0gbW9kdWxlLmRvY3VtZW50UHJvY2Vzc1wiXG4gICAgICAgICAgaWQ9XCJxbXNsaWJfcmVsYXRlZF9wb3B1cF9kb2N1bWVudF8wMDFcIiBbZXhwYW5kZWRdPVwiaXNEb2N1bWVudEV4cGFuZGVkXCIgKG9wZW5lZCk9XCJpc0RvY3VtZW50RXhwYW5kZWQgPSB0cnVlXCJcbiAgICAgICAgICAoY2xvc2VkKT1cImlzRG9jdW1lbnRFeHBhbmRlZCA9IGZhbHNlXCIgY2xhc3M9XCJwYW5lbC10cmVlXCI+XG4gICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwicGFkZGluZy01XCI+XG4gICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgICB7eyBMQU5HLkRPQ1VNRU5UUyB8IHVwcGVyY2FzZSB9fVxuICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8YnV0dG9uIHFtcy1idG4taWNvbiBjbGFzcz1cInJlbGF0ZWRfcG9wdXBfdG9nZ2xlLWJ0blwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24+XG4gICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICBpc0RvY3VtZW50RXhwYW5kZWRcbiAgICAgICAgICAgICAgICA/IFwia2V5Ym9hcmRfYXJyb3dfdXBcIlxuICAgICAgICAgICAgICAgIDogXCJrZXlib2FyZF9hcnJvd19kb3duXCJcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICA8ZGl2IGlkPVwicW1zbGliX3JlbGF0ZWRfcG9wdXBfZG9jdW1lbnRfMDAyXCI+XG4gICAgICAgICAgICA8cW1zLXRyZWUgW3RyZWVEYXRhXT1cInRyZWVEYXRhMlwiIFt0cmVlQ29uZmlnXT1cInRyZWVDb25maWcyXCIgW3NlbGVjdGVkRGF0YV09XCJzZWxlY3RlZERhdGEyXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkTGlzdF09XCJkaXNhYmxlZExpc3QyXCIgKGNoZWNrQm94RXZlbnQpPVwiZ2V0RG9jdW1lbnRDaGVja2VkTm9kZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG5vZGVFeHBhbmRFdmVudCk9XCJnZXRDaGlsZHJlbk9mRm9sZGVyKCRldmVudCwgZGF0YVR5cGUuZm9sZGVyKVwiXG4gICAgICAgICAgICAgIChzZWxlY3ROb2RlRXZlbnQpPVwic2VsZWN0Tm9kZVRyZWUyRXZlbnQoJGV2ZW50KVwiIChnZXRDaGlsZE5vZGVTZWxlY3RPbmUpPVwiZ2V0Q2hpbGROb2RlU2VsZWN0T25lKCRldmVudClcIlxuICAgICAgICAgICAgICBbZXhwYW5kT25UaXRsZUNsaWNrXT1cIiFzcGxpdFZpZXdcIiBbcGFyZW50Tm9kZU9uQ2xpY2tdPVwicGFyZW50Tm9kZVNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgKHRyZWVDb250cm9sTm9kZXMpPVwic2VsZWN0VHJlZUNvbnRyb2xOb2RlRG9jdW1lbnQoJGV2ZW50KVwiPjwvcW1zLXRyZWU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzcGxpdFZpZXdcIiBjbGFzcz1cInFtcy1zY3JvbGxiYXIgcW1zbGliLXJlbGF0ZWQtcG9wdXAtc3BsaXR2aWV3IHFtc2xpYl9yZWxhdGVkX3BvcHVwX2NvbnRlbnQgY29sLTZcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICBwYW5lbF9fY29udGVudF9pdGVtOiBjaGVja2VkTm9kZUxpc3QubGVuZ3RoLFxuICAgICAgICBwYW5lbF9fY29udGVudDogIWNoZWNrZWROb2RlTGlzdC5sZW5ndGhcbiAgICAgIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzcGxpdHZpZXctaGVhZGVyXCIgKm5nSWY9XCJzZWxlY3RlZEZvbGRlclwiPlxuICAgICAgICB7eyBzcGxpdFZpZXdUaXRsZSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiZXhwYW5kLW5vZGVcIiAqbmdGb3I9XCJsZXQgbm9kZSBvZiBpdGVtSW5TcGxpdHZpZXdcIj5cbiAgICAgICAgPG1hdC1jaGVja2JveCBxbXMtZ3JvdXAtb3B0aW9ucyBbZGlzYWJsZWRdPVwibm9kZS5kaXNhYmxlZFwiIGNvbG9yPVwiZGVmYXVsdFwiIFtjaGVja2VkXT1cImlzTm9kZVNlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVNlbGVjdEl0ZW0obm9kZSlcIj48L21hdC1jaGVja2JveD5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24tcnRsLW1pcnJvciBtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiIFtzdmdJY29uXT1cImdldE5vZGVJY29uKG5vZGUpXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LW5vZGVcIj57eyBub2RlLml0ZW1OYW1lIH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJjaGVja2VkTm9kZUxpc3QubGVuZ3RoXCIgY2xhc3M9XCJsaW5lX19kaXZpZGVyXCI+PC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgcHItMCBwZS0wXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwiY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aFwiIGNsYXNzPVwicGFuZWxfX2l0ZW0gcW1zLXNjcm9sbGJhclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRlZF9faXRlbV9faW5saW5lXCIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hlY2tlZE5vZGVMaXN0XCI+XG4gICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIml0ZW0uaXRlbU5hbWVcIiBtYXQtYnV0dG9uIGNsYXNzPVwicmVsYXRlZF9faXRlbV9fY29udGVudFwiIHFtcy10b29sLXRpcD1cInt7XG4gICAgICAgICAgICAgIGlzRWxsaXBzaXNBY3RpdmUoaXRlbU5hbWUpID8gZ2V0SXRlbUNoaXBOYW1lKGl0ZW0pIDogJydcbiAgICAgICAgICAgIH19XCIgbW9kZT1cImRhcmtcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVsYXRlZF9faXRlbV9fY29udGVudF9uYW1lXCIgI2l0ZW1OYW1lPnt7XG4gICAgICAgICAgICAgIGdldEl0ZW1DaGlwTmFtZShpdGVtKVxuICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiEodHJlZUNvbmZpZzE/LnNlbGVjdE9uZSB8fCB0cmVlQ29uZmlnMj8uc2VsZWN0T25lKVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVDaGVja2VkTm9kZUxpc3QoaXRlbSlcIj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG48bWF0LWRpYWxvZy1hY3Rpb25zIGFsaWduPVwiZW5kXCI+XG4gIDxtYXQtZGl2aWRlciBjbGFzcz1cInctMTAwIG1iLTNcIj48L21hdC1kaXZpZGVyPlxuICA8YnV0dG9uIGNsYXNzPVwibWUtMlwiIHFtcy1idG4tdGV4dCBbbmdTdHlsZV09XCJ7ICdtYXJnaW4tdG9wJzogY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCA/ICcwcHgnIDogJzdweCcgfVwiXG4gICAgKGNsaWNrKT1cIm9uQ2xvc2VDbGljaygpXCI+XG4gICAge3sgTEFORy5DQU5DRUwgfX1cbiAgPC9idXR0b24+XG4gIDxidXR0b24gKm5nSWY9XCIhY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aFwiIHFtcy1idG4gc3R5bGU9XCJtYXJnaW4tdG9wOiA3cHhcIlxuICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdWaWRlb0ZpbGUgfHwgaXNMb2FkaW5nSW1hZ2VGaWxlXCIgKGNsaWNrKT1cIm9uQWRkQ2xpY2soKVwiPlxuICAgIHt7IExBTkcuQUREIH19XG4gIDwvYnV0dG9uPlxuICA8YnV0dG9uICpuZ0lmPVwiY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aFwiIHFtcy1idG4gc3R5bGU9XCJtYXJnaW4tdG9wOiAwcHhcIlxuICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdWaWRlb0ZpbGUgfHwgaXNMb2FkaW5nSW1hZ2VGaWxlXCIgKGNsaWNrKT1cIm9uQWRkQ2xpY2soKVwiPlxuICAgIHt7IExBTkcuQUREIH19ICh7eyBjaGVja2VkTm9kZUxpc3QubGVuZ3RoIH19KVxuICA8L2J1dHRvbj5cbjwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuXG48IS0tIFxuPGRpdiBpZD1cInFtc2xpYl9yZWxhdGVkX3BvcHVwXCIgY2xhc3M9XCJxbXNsaWJfX3JlbGF0ZWRfX3BvcHVwX19jb250YWluZXJcIj5cbiAgPGRpdiBpZD1cInFtc2xpYl9yZWxhdGVkX3BvcHVwX2hlYWRlclwiPlxuICAgIDxzcGFuIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cImJ1dHRvbl9fY2xvc2VcIiAoY2xpY2spPVwib25DbG9zZUNsaWNrKClcIj5cbiAgICAgIDxtYXQtaWNvbiBtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XG4gICAgPC9zcGFuPlxuICAgIDxkaXYgKm5nSWY9XCJjYW5VcGxvYWRJbWFnZSB8fCBjYW5VcGxvYWRWaWRlbyB8fCBjYW5VcGRhdGVWaWRlb1Byb3BlcnRpZXNcIiBpZD1cInFtc2xpYl9yZWxhdGVkX3BvcHVwX2hlYWRlcl8wMDFcIlxuICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgcGFuZWxfaGVhZGVyX2hlaWdodF93aXRoX3ZpZGVvX3VwbG9hZDogY2FuVXBsb2FkVmlkZW8sXG4gICAgICBwYW5lbF9oZWFkZXJfaGVpZ2h0X3dpdGhvdXRfdmlkZW9fdXBsb2FkOiAhY2FuVXBsb2FkVmlkZW8gJiYgY2FuVXBsb2FkSW1hZ2UgJiYgY2FuVXBkYXRlVmlkZW9Qcm9wZXJ0aWVzXG4gICAgfVwiIG1hdC1kaWFsb2ctY29udGVudCBjbGFzcz1cInJvd1wiPlxuICAgICAgPGRpdiAqbmdJZj1cImNhblVwbG9hZEltYWdlXCIgY2xhc3M9XCJzZWxlY3RlZC1pbWFnZSBjb2wtMTJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00XCI+e3sgbW9kdWxlVXBsb2FkSW1hZ2VOYW1lIHwgdXBwZXJjYXNlIH19PC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC04XCI+XG4gICAgICAgICAgICA8Zm9ybT5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIHFtcy1mb3JtIHFtcy1maWxlLXVwbG9hZCBhcHBlYXJhbmNlPVwiZmlsbFwiIGNsYXNzPVwiZXhhbXBsZS13aWR0aCBpbnB1dC11cGxvYWRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gbWF0UHJlZml4IHN2Z0ljb249XCJ1cGxvYWRcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIlVwbG9hZCBmaWxlXCIgW2Zvcm1Db250cm9sXT1cInFtc0lucHV0SW1hZ2VUeXBlXCIgcW1zLWZpbGUtdXBsb2FkLWRpc3BsYXlcbiAgICAgICAgICAgICAgICAgICNmaWxlRGlzcGxheSB2YWx1ZT1cInt7cW1zSW5wdXRJbWFnZUZpbGU/IHFtc0lucHV0SW1hZ2VGaWxlLmZpbGVOYW1lIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJpc0xvYWRpbmdJbWFnZUZpbGUgPyAnZGlzYWJsZWQnIDogbnVsbFwiIHJlYWRvbmx5PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBoaWRkZW4gdHlwZT1cImZpbGVcIiBbKGlucHV0RmlsZSldPVwicW1zSW5wdXRJbWFnZUZpbGVcIiBxbXMtZmlsZS11cGxvYWQtc2VsZWN0b3IgI2ZpbGVTZWxlY3RvclxuICAgICAgICAgICAgICAgICAgW2FjY2VwdEV4dGVuc2lvbnNdPVwiYWNjZXB0RXh0ZW5zaW9uc1wiXG4gICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIucGpwLCAuanBnLCAucGpwZWcsIC5qcGVnLCAuamZpZiwgLnBuZywgLmdpZiwgLmJtcCwgLndlYnAsIC50aWYsIC50aWZmXCJcbiAgICAgICAgICAgICAgICAgIFttYXhTaXplXT1cIm1heFZpZGVvVGh1bWJuYWlsU2l6ZUtCXCIgKGNoYW5nZSk9XCJvbkNoYW5nZUltYWdlKCRldmVudClcIj5cblxuICAgICAgICAgICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBtYXRTdWZmaXggbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBkaWFtZXRlcj0nMjAnXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cImlzTG9hZGluZ0ltYWdlRmlsZVwiPjwvbWF0LXByb2dyZXNzLXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgPGRpdiBtYXRTdWZmaXggcW1zLWlucHV0LWNsZWFyICpuZ0lmPVwicW1zSW5wdXRJbWFnZUZpbGUgJiYgcW1zSW5wdXRJbWFnZUZpbGUuZmlsZU5hbWVcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gcW1zLWJ0bi1pY29uIGNvbG9yPVwibGlnaHRcIiAoY2xpY2spPVwiY2xlYXJRTVNJbnB1dEltYWdlRmlsZSgpXCIgW2Rpc2FibGVkXT1cImlzTG9hZGluZ0ltYWdlRmlsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwicW1zSW5wdXRJbWFnZUZpbGUgJiYgcW1zSW5wdXRJbWFnZUZpbGUudHlwZUVycm9yID09IDFcIj5cbiAgICAgICAgICAgICAgICAgIHt7IExBTkcuUU1TQ0tFRElUT1IuRVhURU5TSU9OX0lTX05PVF9TVVBQT1JURUQgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPnt7IExBTkcuUU1TQ0tFRElUT1IuVklERU9fSU1BR0UgfCB1cHBlcmNhc2V9fTo8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLThcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImV4YW1wbGUtd2lkdGggaW5wdXQtdXBsb2FkXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBbKG5nTW9kZWwpXT1cInZpZGVvRGF0YS5wb3N0ZXJcIj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0ZWQtaW1hZ2UgY29sLTEyXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJjYW5VcGxvYWRWaWRlb1wiIGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj57eyBtb2R1bGVVcGxvYWRGaWxlTmFtZSB8IHVwcGVyY2FzZSB9fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxuICAgICAgICAgICAgPGZvcm0+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBxbXMtZm9ybSBxbXMtZmlsZS11cGxvYWQgYXBwZWFyYW5jZT1cImZpbGxcIiBjbGFzcz1cImV4YW1wbGUtd2lkdGggaW5wdXQtdXBsb2FkXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uIG1hdFByZWZpeCBzdmdJY29uPVwidXBsb2FkXCI+PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgcGxhY2Vob2xkZXI9XCJVcGxvYWQgZmlsZVwiIFtmb3JtQ29udHJvbF09XCJxbXNJbnB1dFZpZGVvVHlwZVwiIHFtcy1maWxlLXVwbG9hZC1kaXNwbGF5XG4gICAgICAgICAgICAgICAgICAjZmlsZURpc3BsYXkgdmFsdWU9XCJ7e3Ftc0lucHV0VmlkZW9GaWxlPyBxbXNJbnB1dFZpZGVvRmlsZS5maWxlTmFtZSA6ICcnfX1cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXNMb2FkaW5nVmlkZW9GaWxlID8gJ2Rpc2FibGVkJyA6IG51bGxcIiByZWFkb25seT5cbiAgICAgICAgICAgICAgICA8aW5wdXQgaGlkZGVuIHR5cGU9XCJmaWxlXCIgWyhpbnB1dEZpbGUpXT1cInFtc0lucHV0VmlkZW9GaWxlXCIgcW1zLWZpbGUtdXBsb2FkLXNlbGVjdG9yICNmaWxlU2VsZWN0b3JcbiAgICAgICAgICAgICAgICAgIFthY2NlcHRFeHRlbnNpb25zXT1cImFjY2VwdEV4dGVuc2lvbnNGb3JWaWRlb1wiIGFjY2VwdD1cIi5tcDRcIiAoY2hhbmdlKT1cIm9uQ2hhbmdlRmlsZSgkZXZlbnQpXCI+XG5cbiAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgbWF0U3VmZml4IG1vZGU9XCJpbmRldGVybWluYXRlXCIgZGlhbWV0ZXI9JzIwJ1xuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0xvYWRpbmdWaWRlb0ZpbGVcIj48L21hdC1wcm9ncmVzcy1zcGlubmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgbWF0U3VmZml4IHFtcy1pbnB1dC1jbGVhciAqbmdJZj1cInFtc0lucHV0VmlkZW9GaWxlICYmIHFtc0lucHV0VmlkZW9GaWxlLmZpbGVOYW1lXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIHFtcy1idG4taWNvbiBjb2xvcj1cImxpZ2h0XCIgKGNsaWNrKT1cImNsZWFyUU1TSW5wdXRWaWRlb0ZpbGUoKVwiIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdWaWRlb0ZpbGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInFtc0lucHV0VmlkZW9GaWxlICYmIHFtc0lucHV0VmlkZW9GaWxlLnR5cGVFcnJvciA9PSAxXCI+XG4gICAgICAgICAgICAgICAgICB7eyBMQU5HLlFNU0NLRURJVE9SLkFDQ0VQVF9NUDRfT05MWSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgKm5nSWY9XCJjYW5VcGRhdGVWaWRlb1Byb3BlcnRpZXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj57eyBMQU5HLlFNU0NLRURJVE9SLlZJREVPX1NPVVJDRSB8IHVwcGVyY2FzZX19OjwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOFwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZXhhbXBsZS13aWR0aCBpbnB1dC11cGxvYWRcIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwidmlkZW9EYXRhLnNyY1wiPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJjYW5VcGRhdGVWaWRlb1Byb3BlcnRpZXNcIiBjbGFzcz1cInNlbGVjdGVkLWltYWdlIGNvbC0xMlwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImV4YW1wbGUtd2lkdGggaW5wdXQtdXBsb2FkXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3sgTEFORy5XSURUSCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1hdElucHV0IFsobmdNb2RlbCldPVwidmlkZW9EYXRhLndpZHRoXCI+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZXhhbXBsZS13aWR0aCBpbnB1dC11cGxvYWRcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD57eyBMQU5HLkhFSUdIVCB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIG1hdElucHV0IFsobmdNb2RlbCldPVwidmlkZW9EYXRhLmhlaWdodFwiPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImV4YW1wbGUtd2lkdGggaW5wdXQtdXBsb2FkXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+SWQ8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IFsobmdNb2RlbCldPVwidmlkZW9EYXRhLmlkXCI+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwibW9kdWxlLW5hbWVcIj57eyBtb2R1bGVOYW1lIHwgdXBwZXJjYXNlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2IGlkPVwicW1zbGliX3JlbGF0ZWRfcG9wdXBfc2VhcmNoXCIgY2xhc3M9XCJpbnB1dF9fZmllbGRcIj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cInt7IExBTkcuU0VBUkNIIH19XCIgbWF0SW5wdXQgW2Zvcm1Db250cm9sXT1cIm15Q29udHJvbFwiIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiIC8+XG4gICAgPG1hdC1pY29uPnNlYXJjaDwvbWF0LWljb24+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJsaW5lX19kaXZpZGVyXCI+PC9kaXY+XG5cbiAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiBjbGFzcz1cIm1hdC1hdXRvY29tcGxldGVfcmVsYXRlZC12aWV3cG9ydFwiXG4gICAgKG9wdGlvblNlbGVjdGVkKT1cInNlbGVjdFJlbGF0ZWQoJGV2ZW50Lm9wdGlvbi52YWx1ZSlcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheVdoZW5TZWxlY3RSZWxhdGVkT3B0aW9uXCI+XG4gICAgPGNkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydCBxbXMtc2Nyb2xsYmFyIGl0ZW1TaXplPVwiMTBcIiBbY2xhc3MucmVsYXRlZC12aWV3cG9ydF09XCJpc0lucHV0VmFsdWVcIlxuICAgICAgKm5nSWY9XCJmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB0eXBlIG9mIHNlYXJjaE9yZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2hfX21vZHVsZS1yZXN1bHRcIiAqbmdJZj1cImNhblNob3dTZWFyY2hPcHRpb24odHlwZS52YWx1ZSlcIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlYXJjaF9fbW9kdWxlLXRpdGxlXCI+e3sgZ2V0VGl0bGUodHlwZS52YWx1ZSkgfX08L3NwYW4+XG4gICAgICAgICAgPG1hdC1vcHRpb24gY2xhc3M9XCJzZWFyY2hfX29wdGlvblwiICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZ2V0TW9kdWxlRmlsdGVyZWRPcHRpb25zKHR5cGUudmFsdWUpXCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJvcHRpb25cIiBbZGlzYWJsZWRdPVwib3B0aW9uLmRpc2FibGVkXCI+XG4gICAgICAgICAgICA8cW1zLWxpc3QtaXRlbSB0eXBlPVwiaW1hZ2Utc3F1YXJlXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBsZWFkaW5nLWljb24gdHlwZT1cImltYWdlLXNxdWFyZVwiIFtzdmdJY29uXT1cImdldE5vZGVJY29uKG9wdGlvbilcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICA8ZGl2IHFtcy1saXN0LWhlYWRlcj5cbiAgICAgICAgICAgICAgICA8ZGl2IHFtcy1saW5lIHR5cGU9XCJjYXB0aW9uXCIgcW1zLXRvb2wtdGlwPVwie3tcbiAgICAgICAgICAgICAgICAgICAgaXNFbGxpcHNpc0FjdGl2ZShzZWFyY2hJdGVtUmVzdWx0KSA/IG9wdGlvbi5wYXJlbnROYW1lIDogJydcbiAgICAgICAgICAgICAgICAgIH19XCIgbW9kZT1cImRhcmtcIiAqbmdJZj1cImdldFBhcmVudE5hbWUob3B0aW9uKVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gI3NlYXJjaEl0ZW1SZXN1bHQgY2xhc3M9XCJzZWFyY2hfX3Jlc3VsdF9fcGFyZW50LW5hbWVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLnBhcmVudE5hbWUgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHFtcy1saW5lIHR5cGU9XCJzdWJ0aXRsZVwiIGNsYXNzPVwic2VhcmNoX19vcHRpb24tbmFtZVwiPlxuICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLml0ZW1OYW1lIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcHRpb25cIiAqbmdJZj1cIm9wdGlvbi5icmVhZGN1bWJzICYmIG9wdGlvbi5icmVhZGN1bWJzLmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgPHFtcy1icmVhZGNydW1iIGNsYXNzPVwiYnJlYWRjcnVtYi1jb250YWluZXJcIiB0eXBlPVwidGFibGVcIiBudW1EaXNwbGF5SXRlbT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICBbbm9kZXNdPVwib3B0aW9uLmJyZWFkY3VtYnNcIj5cbiAgICAgICAgICAgICAgICAgIDwvcW1zLWJyZWFkY3J1bWI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IHFtcy1saW5lIGNvbG9yPVwiZGVmYXVsdC1zdWJ0aXRsZVwiICpuZ0lmPVwiZ2V0SXRlbUlkKG9wdGlvbilcIj5cbiAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkIHNlYXJjaF9fZGVzY3JpcHRpb24taWNvblwiPmxvY2FsX29mZmVyPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAge3sgZ2V0SXRlbUlkKG9wdGlvbikgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L3Ftcy1saXN0LWl0ZW0+XG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICA8L21hdC1hdXRvY29tcGxldGU+XG5cbiAgPGRpdiBjbGFzcz1cInJvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJxbXMtc2Nyb2xsYmFyIHFtc2xpYl9yZWxhdGVkX3BvcHVwX2NvbnRlbnRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgIHBhbmVsX19jb250ZW50X2l0ZW06IGNoZWNrZWROb2RlTGlzdC5sZW5ndGgsXG4gICAgICAgIHBhbmVsX19jb250ZW50OiAhY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCxcbiAgICAgICAgcGFuZWxfX2NvbnRlbnRfaGVpZ2h0X3dpdGhfdXBsb2FkOiBjYW5VcGxvYWRJbWFnZSAmJiAhY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCxcbiAgICAgICAgcGFuZWxfX2NvbnRlbnRfaXRlbV9oZWlnaHRfd2l0aF91cGxvYWQ6IGNhblVwbG9hZEltYWdlICYmIGNoZWNrZWROb2RlTGlzdC5sZW5ndGgsXG4gICAgICAgICdjb2wtNic6IHNwbGl0VmlldyxcbiAgICAgICAgJ2NvbC0xMic6ICFzcGxpdFZpZXdcbiAgICAgIH1cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmVlRGF0YTEubGVuZ3RoID4gMFwiPlxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBoaWRlVG9nZ2xlIGlkPVwicW1zbGliX3JlbGF0ZWRfcG9wdXBfY29tbW9uXzAwMVwiIFtleHBhbmRlZF09XCJpc0NvbW1vbkV4cGFuZGVkXCJcbiAgICAgICAgICAob3BlbmVkKT1cImlzQ29tbW9uRXhwYW5kZWQgPSB0cnVlXCIgKGNsb3NlZCk9XCJpc0NvbW1vbkV4cGFuZGVkID0gZmFsc2VcIiBjbGFzcz1cInBhbmVsLXRyZWVcIj5cbiAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJwYWRkaW5nLTVcIj5cbiAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCJtb2R1bGVJZCA9PT0gbW9kdWxlLmRvY3VtZW50UHJvY2Vzc1wiPlxuICAgICAgICAgICAgICB7eyBMQU5HLlBST0NFU1NFUyB8IHVwcGVyY2FzZSB9fVxuICAgICAgICAgICAgPC9tYXQtcGFuZWwtdGl0bGU+XG4gICAgICAgICAgICA8bWF0LXBhbmVsLXRpdGxlICpuZ0lmPVwibW9kdWxlSWQgPT09IG1vZHVsZS5kZXZpYXRpb25cIj5cbiAgICAgICAgICAgICAge3sgTEFORy5ERVZJQVRJT04gfCB1cHBlcmNhc2UgfX1cbiAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZSAqbmdJZj1cIm1vZHVsZUlkID09PSBtb2R1bGUuY2hlY2tsaXN0XCI+XG4gICAgICAgICAgICAgIHt7IExBTkcuQ0hFQ0tMSVNUIHwgdXBwZXJjYXNlIH19XG4gICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDxtYXQtcGFuZWwtdGl0bGUgKm5nSWY9XCJtb2R1bGVJZCA9PT0gbW9kdWxlLnJpc2tcIj5cbiAgICAgICAgICAgICAge3sgTEFORy5BU1NFU1NNRU5UIHwgdXBwZXJjYXNlIH19XG4gICAgICAgICAgICA8L21hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgIDxidXR0b24gcW1zLWJ0bi1pY29uIGNsYXNzPVwicmVsYXRlZF9wb3B1cF90b2dnbGUtYnRuXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbj5cbiAgICAgICAgICAgICAgICB7e1xuICAgICAgICAgICAgICAgIGlzQ29tbW9uRXhwYW5kZWQgPyBcImtleWJvYXJkX2Fycm93X3VwXCIgOiBcImtleWJvYXJkX2Fycm93X2Rvd25cIlxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxuICAgICAgICAgIDxkaXYgaWQ9XCJxbXNsaWJfcmVsYXRlZF9wb3B1cF9jb21tb25fMDAyXCI+XG4gICAgICAgICAgICA8cW1zLXRyZWUgW3RyZWVEYXRhXT1cInRyZWVEYXRhMVwiIFt0cmVlQ29uZmlnXT1cInRyZWVDb25maWcxXCIgW3NlbGVjdGVkRGF0YV09XCJzZWxlY3RlZERhdGFcIlxuICAgICAgICAgICAgICBbc2VsZWN0ZWRSaXNrRGF0YV09XCJzZWxlY3RlZFJpc2tEYXRhXCIgW2Rpc2FibGVkTGlzdF09XCJkaXNhYmxlZExpc3RcIlxuICAgICAgICAgICAgICAoY2hlY2tCb3hFdmVudCk9XCJnZXRDb21tb25DaGVja2VkTm9kZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKG5vZGVFeHBhbmRFdmVudCk9XCJnZXRDaGlsZHJlbk9mRm9sZGVyKCRldmVudCwgZGF0YVR5cGUuYXJlYSlcIlxuICAgICAgICAgICAgICAoc2VsZWN0Tm9kZUV2ZW50KT1cInNlbGVjdE5vZGVUcmVlRXZlbnQoJGV2ZW50KVwiIChnZXRDaGlsZE5vZGVTZWxlY3RPbmUpPVwiZ2V0Q2hpbGROb2RlU2VsZWN0T25lKCRldmVudClcIlxuICAgICAgICAgICAgICBbZXhwYW5kT25UaXRsZUNsaWNrXT1cIiFzcGxpdFZpZXdcIiBbcGFyZW50Tm9kZU9uQ2xpY2tdPVwicGFyZW50Tm9kZVNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgKHRyZWVDb250cm9sTm9kZXMpPVwic2VsZWN0VHJlZUNvbnRyb2xOb2RlUHJvY2VzcygkZXZlbnQpXCI+PC9xbXMtdHJlZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0cmVlRGF0YTIubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibW9kdWxlSWQgPT09IG1vZHVsZS5kb2N1bWVudFByb2Nlc3NcIiBjbGFzcz1cImxpbmVfX2RpdmlkZXJcIj48L2Rpdj5cblxuICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBoaWRlVG9nZ2xlICpuZ0lmPVwibW9kdWxlSWQgPT09IG1vZHVsZS5kb2N1bWVudFByb2Nlc3NcIlxuICAgICAgICAgIGlkPVwicW1zbGliX3JlbGF0ZWRfcG9wdXBfZG9jdW1lbnRfMDAxXCIgW2V4cGFuZGVkXT1cImlzRG9jdW1lbnRFeHBhbmRlZFwiIChvcGVuZWQpPVwiaXNEb2N1bWVudEV4cGFuZGVkID0gdHJ1ZVwiXG4gICAgICAgICAgKGNsb3NlZCk9XCJpc0RvY3VtZW50RXhwYW5kZWQgPSBmYWxzZVwiIGNsYXNzPVwicGFuZWwtdHJlZVwiPlxuICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlciBjbGFzcz1cInBhZGRpbmctNVwiPlxuICAgICAgICAgICAgPG1hdC1wYW5lbC10aXRsZT5cbiAgICAgICAgICAgICAge3sgTEFORy5ET0NVTUVOVFMgfCB1cHBlcmNhc2UgfX1cbiAgICAgICAgICAgIDwvbWF0LXBhbmVsLXRpdGxlPlxuICAgICAgICAgICAgPGJ1dHRvbiBxbXMtYnRuLWljb24gY2xhc3M9XCJyZWxhdGVkX3BvcHVwX3RvZ2dsZS1idG5cIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uPlxuICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgaXNEb2N1bWVudEV4cGFuZGVkXG4gICAgICAgICAgICAgICAgPyBcImtleWJvYXJkX2Fycm93X3VwXCJcbiAgICAgICAgICAgICAgICA6IFwia2V5Ym9hcmRfYXJyb3dfZG93blwiXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG4gICAgICAgICAgPGRpdiBpZD1cInFtc2xpYl9yZWxhdGVkX3BvcHVwX2RvY3VtZW50XzAwMlwiPlxuICAgICAgICAgICAgPHFtcy10cmVlIFt0cmVlRGF0YV09XCJ0cmVlRGF0YTJcIiBbdHJlZUNvbmZpZ109XCJ0cmVlQ29uZmlnMlwiIFtzZWxlY3RlZERhdGFdPVwic2VsZWN0ZWREYXRhMlwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZExpc3RdPVwiZGlzYWJsZWRMaXN0MlwiIChjaGVja0JveEV2ZW50KT1cImdldERvY3VtZW50Q2hlY2tlZE5vZGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChub2RlRXhwYW5kRXZlbnQpPVwiZ2V0Q2hpbGRyZW5PZkZvbGRlcigkZXZlbnQsIGRhdGFUeXBlLmZvbGRlcilcIlxuICAgICAgICAgICAgICAoc2VsZWN0Tm9kZUV2ZW50KT1cInNlbGVjdE5vZGVUcmVlMkV2ZW50KCRldmVudClcIiAoZ2V0Q2hpbGROb2RlU2VsZWN0T25lKT1cImdldENoaWxkTm9kZVNlbGVjdE9uZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgW2V4cGFuZE9uVGl0bGVDbGlja109XCIhc3BsaXRWaWV3XCIgW3BhcmVudE5vZGVPbkNsaWNrXT1cInBhcmVudE5vZGVTZWxlY3RlZFwiXG4gICAgICAgICAgICAgICh0cmVlQ29udHJvbE5vZGVzKT1cInNlbGVjdFRyZWVDb250cm9sTm9kZURvY3VtZW50KCRldmVudClcIj48L3Ftcy10cmVlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwic3BsaXRWaWV3XCIgY2xhc3M9XCJxbXMtc2Nyb2xsYmFyIHFtc2xpYi1yZWxhdGVkLXBvcHVwLXNwbGl0dmlldyBxbXNsaWJfcmVsYXRlZF9wb3B1cF9jb250ZW50IGNvbC02XCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgcGFuZWxfX2NvbnRlbnRfaXRlbTogY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCxcbiAgICAgICAgcGFuZWxfX2NvbnRlbnQ6ICFjaGVja2VkTm9kZUxpc3QubGVuZ3RoXG4gICAgICB9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic3BsaXR2aWV3LWhlYWRlclwiICpuZ0lmPVwic2VsZWN0ZWRGb2xkZXJcIj5cbiAgICAgICAge3sgc3BsaXRWaWV3VGl0bGUgfX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImV4cGFuZC1ub2RlXCIgKm5nRm9yPVwibGV0IG5vZGUgb2YgaXRlbUluU3BsaXR2aWV3XCI+XG4gICAgICAgIDxtYXQtY2hlY2tib3ggcW1zLWdyb3VwLW9wdGlvbnMgW2Rpc2FibGVkXT1cIm5vZGUuZGlzYWJsZWRcIiBjb2xvcj1cImRlZmF1bHRcIiBbY2hlY2tlZF09XCJpc05vZGVTZWxlY3RlZChub2RlKVwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RJdGVtKG5vZGUpXCI+PC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1hdC1pY29uLXJ0bC1taXJyb3IgbWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiBbc3ZnSWNvbl09XCJnZXROb2RlSWNvbihub2RlKVwiPjwvbWF0LWljb24+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ub2RlXCI+e3sgbm9kZS5pdGVtTmFtZSB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8ZGl2ICpuZ0lmPVwiY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aFwiIGNsYXNzPVwibGluZV9fZGl2aWRlclwiPjwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHByLTAgcGUtMFwiPlxuICAgICAgPGRpdiAqbmdJZj1cImNoZWNrZWROb2RlTGlzdC5sZW5ndGhcIiBjbGFzcz1cInBhbmVsX19pdGVtIHFtcy1zY3JvbGxiYXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJlbGF0ZWRfX2l0ZW1fX2lubGluZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoZWNrZWROb2RlTGlzdFwiPlxuICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpdGVtLml0ZW1OYW1lXCIgbWF0LWJ1dHRvbiBjbGFzcz1cInJlbGF0ZWRfX2l0ZW1fX2NvbnRlbnRcIiBxbXMtdG9vbC10aXA9XCJ7e1xuICAgICAgICAgICAgICBpc0VsbGlwc2lzQWN0aXZlKGl0ZW1OYW1lKSA/IGdldEl0ZW1DaGlwTmFtZShpdGVtKSA6ICcnXG4gICAgICAgICAgICB9fVwiIG1vZGU9XCJkYXJrXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlbGF0ZWRfX2l0ZW1fX2NvbnRlbnRfbmFtZVwiICNpdGVtTmFtZT57e1xuICAgICAgICAgICAgICBnZXRJdGVtQ2hpcE5hbWUoaXRlbSlcbiAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCIhKHRyZWVDb25maWcxPy5zZWxlY3RPbmUgfHwgdHJlZUNvbmZpZzI/LnNlbGVjdE9uZSlcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlQ2hlY2tlZE5vZGVMaXN0KGl0ZW0pXCI+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImxpbmVfX2RpdmlkZXJcIj48L2Rpdj5cblxuICA8ZGl2IGNsYXNzPVwiY29uZmlybV9fYnV0dG9uX19ncm91cHNcIj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiIWNoZWNrZWROb2RlTGlzdC5sZW5ndGhcIiBxbXMtYnRuIHN0eWxlPVwibWFyZ2luLXRvcDogN3B4XCJcbiAgICAgIFtkaXNhYmxlZF09XCJpc0xvYWRpbmdWaWRlb0ZpbGUgfHwgaXNMb2FkaW5nSW1hZ2VGaWxlXCIgKGNsaWNrKT1cIm9uQWRkQ2xpY2soKVwiPlxuICAgICAge3sgTEFORy5BREQgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aFwiIHFtcy1idG4gc3R5bGU9XCJtYXJnaW4tdG9wOiAwcHhcIlxuICAgICAgW2Rpc2FibGVkXT1cImlzTG9hZGluZ1ZpZGVvRmlsZSB8fCBpc0xvYWRpbmdJbWFnZUZpbGVcIiAoY2xpY2spPVwib25BZGRDbGljaygpXCI+XG4gICAgICB7eyBMQU5HLkFERCB9fSAoe3sgY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCB9fSlcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIHFtcy1idG4tdGV4dCBbbmdTdHlsZV09XCJ7ICdtYXJnaW4tdG9wJzogY2hlY2tlZE5vZGVMaXN0Lmxlbmd0aCA/ICcwcHgnIDogJzdweCcgfVwiIChjbGljayk9XCJvbkNsb3NlQ2xpY2soKVwiPlxuICAgICAge3sgTEFORy5DQU5DRUwgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Rpdj4gLS0+Il19
|