@arsedizioni/ars-utils 18.1.195 → 18.1.197

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.
@@ -304,7 +304,7 @@ export class ClipperReferencesComponent extends ClipperSearchResultManager {
304
304
  this.dialogRef.close({ id: documentId });
305
305
  }
306
306
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperReferencesComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
307
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ClipperReferencesComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, viewQueries: [{ propertyName: "filterPane", first: true, predicate: ["filterPane"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\r\n (!filterPane.opened || filterPaneClosed))) {\r\n <div style=\"padding: 0 10px 0 24px; height: 48px; min-height: 48px;\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData.mode === 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"filterParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (dialogData.mode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"filterParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\"\r\n [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection?.isSelected(item.documentId) }\">\r\n <div fxFlex=\"54px\" fxLayoutAlign=\"center\" style=\"padding-left: 6px;\">\r\n @if (screenService.isTouchable || item.isOver || selection?.isSelected(item.documentId)) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection?.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection?.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"item-content\">\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\"></clipper-search-result-item>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection?.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.accent{color:var(--ars-accent, #7894ae)!important}.primary{color:var(--ars-primary, #00a293)!important}.secondary{color:var(--ars-secondary, #4a635f)!important}.error{color:var(--ars-error, #ff5449)!important}.warning{color:var(--ars-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 0 0}.drawer .title-container,.drawer-small .title-container{padding:20px 10px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 20px}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .content,.drawer-small .content{padding:10px 0!important}.drawer .fixed,.drawer-small .fixed{padding:0 4px!important}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px}.drawer-small .content{padding:20px 0 10px}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.expired,.unread{color:var(--ars-error, #ff5449)!important}.expiring{color:var(--ars-warning, #FFC107)!important}.error-bg,.expired-bg,.unread-bg{background-color:var(--ars-error, #ff5449)}.expiring-bg{background-color:var(--ars-warning, #FFC107)}.popular-bg{background-color:#388e3c}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .spaced{padding-top:10px!important}.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 0;min-height:60px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item-content .info-1{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent, #7894ae)}.item-content .info-2{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent-low, #456179)}.item-content .title{font-size:small;line-height:18px}.item-content .details{margin-top:4px;font-size:x-small;font-weight:700;line-height:15px;color:var(--ars-accent-low, #456179);text-transform:uppercase;border-left:4px solid var(--ars-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:600;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-link, #03A9F4);font-weight:600}.item-content a.link{color:var(--ars-link, #03A9F4);cursor:pointer!important}.item-content:hover{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer;padding:10px 13px;margin-bottom:2px}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-error, #ff5449);margin:0 8px}.tile .image{height:180px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image .img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-accent, #7894ae);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .check{position:absolute;left:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .check-selected{background-color:var(--ars-primary-hi, #12c0ae)}.tile .image .read{position:absolute;right:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .date{padding:8px 0 6px;font-weight:700;text-transform:uppercase}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.tile .time{font-size:small;font-weight:700}.tile .title{text-decoration:none;font-size:small;min-height:72px;overflow:hidden}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:var(--ars-accent, #7894ae);text-transform:uppercase;white-space:nowrap;color:var(--ars-color-text, #191c1b)}.badge-red{background-color:var(--ars-error, #ff5449);color:var(--ars-color-text, #191c1b)}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .next{margin-left:8px}.special-date,.special-date-expired{border:2px var(--ars-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-error, #ff5449) solid!important}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.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: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i8.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i9.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i10.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i11.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i12.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i12.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i13.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: ClipperDocumentMenuComponent, selector: "clipper-document-menu", inputs: ["parent", "selectionSource", "useSelections", "item", "isReference", "isReadable", "isDeadline", "isLawInForce", "isLaw"] }, { kind: "component", type: ClipperSearchFacetsComponent, selector: "clipper-search-facets", outputs: ["changed"] }, { kind: "component", type: ClipperSearchResultItemComponent, selector: "clipper-search-result-item", inputs: ["parent", "item", "displayModelName"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
307
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: ClipperReferencesComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, viewQueries: [{ propertyName: "filterPane", first: true, predicate: ["filterPane"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\r\n (!filterPane.opened || filterPaneClosed))) {\r\n <div style=\"padding: 0 10px 0 24px; height: 48px; min-height: 48px;\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData.mode === 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"filterParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (dialogData.mode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"filterParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\"\r\n [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'group-spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection?.isSelected(item.documentId) }\">\r\n <div fxFlex=\"54px\" fxLayoutAlign=\"center\" style=\"padding-left: 6px;\">\r\n @if (screenService.isTouchable || item.isOver || selection?.isSelected(item.documentId)) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection?.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection?.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"item-content\">\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\"></clipper-search-result-item>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection?.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.accent{color:var(--ars-accent, #7894ae)!important}.primary{color:var(--ars-primary, #00a293)!important}.secondary{color:var(--ars-secondary, #4a635f)!important}.error{color:var(--ars-error, #ff5449)!important}.warning{color:var(--ars-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 0 0}.drawer .title-container,.drawer-small .title-container{padding:20px 10px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 20px}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .content,.drawer-small .content{padding:10px 0!important}.drawer .fixed,.drawer-small .fixed{padding:0 4px!important}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px}.drawer-small .content{padding:20px 0 10px}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.expired,.unread{color:var(--ars-error, #ff5449)!important}.expiring{color:var(--ars-warning, #FFC107)!important}.error-bg,.expired-bg,.unread-bg{background-color:var(--ars-error, #ff5449)}.expiring-bg{background-color:var(--ars-warning, #FFC107)}.popular-bg{background-color:#388e3c}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .group-spaced{padding:10px 0 0!important}.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 0;min-height:60px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item-content .info-1{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent, #7894ae)}.item-content .info-2{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent-low, #456179)}.item-content .title{font-size:small;line-height:18px}.item-content .details{margin-top:4px;font-size:x-small;font-weight:700;line-height:15px;color:var(--ars-accent-low, #456179);text-transform:uppercase;border-left:4px solid var(--ars-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:600;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-link, #03A9F4);font-weight:600}.item-content a.link{color:var(--ars-link, #03A9F4);cursor:pointer!important}.item-content:hover{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer;padding:10px 13px;margin-bottom:2px}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-error, #ff5449);margin:0 8px}.tile .image{height:180px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image .img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-accent, #7894ae);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .check{position:absolute;left:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .check-selected{background-color:var(--ars-primary-hi, #12c0ae)}.tile .image .read{position:absolute;right:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .date{padding:8px 0 6px;font-weight:700;text-transform:uppercase}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.tile .time{font-size:small;font-weight:700}.tile .title{text-decoration:none;font-size:small;min-height:72px;overflow:hidden}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:var(--ars-accent, #7894ae);text-transform:uppercase;white-space:nowrap;color:var(--ars-color-text, #191c1b)}.badge-red{background-color:var(--ars-error, #ff5449);color:var(--ars-color-text, #191c1b)}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .next{margin-left:8px}.special-date,.special-date-expired{border:2px var(--ars-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-error, #ff5449) solid!important}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: FlexModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i5.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: "ngmodule", type: MatSlideToggleModule }, { kind: "component", type: i6.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["name", "id", "labelPosition", "aria-label", "aria-labelledby", "aria-describedby", "required", "color", "disabled", "disableRipple", "tabIndex", "checked", "hideIcon"], outputs: ["change", "toggleChange"], exportAs: ["matSlideToggle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i8.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i8.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i8.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatBadgeModule }, { kind: "directive", type: i9.MatBadge, selector: "[matBadge]", inputs: ["matBadgeColor", "matBadgeOverlap", "matBadgeDisabled", "matBadgePosition", "matBadge", "matBadgeDescription", "matBadgeSize", "matBadgeHidden"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i10.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: ExtendedModule }, { kind: "directive", type: i11.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i12.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i12.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i13.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: ClipperDocumentMenuComponent, selector: "clipper-document-menu", inputs: ["parent", "selectionSource", "useSelections", "item", "isReference", "isReadable", "isDeadline", "isLawInForce", "isLaw"] }, { kind: "component", type: ClipperSearchFacetsComponent, selector: "clipper-search-facets", outputs: ["changed"] }, { kind: "component", type: ClipperSearchResultItemComponent, selector: "clipper-search-result-item", inputs: ["parent", "item", "displayModelName"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
308
308
  }
309
309
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: ClipperReferencesComponent, decorators: [{
310
310
  type: Component,
@@ -327,9 +327,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImpor
327
327
  ClipperDocumentMenuComponent,
328
328
  ClipperSearchFacetsComponent,
329
329
  ClipperSearchResultItemComponent
330
- ], template: "<div class=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\r\n (!filterPane.opened || filterPaneClosed))) {\r\n <div style=\"padding: 0 10px 0 24px; height: 48px; min-height: 48px;\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData.mode === 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"filterParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (dialogData.mode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"filterParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\"\r\n [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection?.isSelected(item.documentId) }\">\r\n <div fxFlex=\"54px\" fxLayoutAlign=\"center\" style=\"padding-left: 6px;\">\r\n @if (screenService.isTouchable || item.isOver || selection?.isSelected(item.documentId)) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection?.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection?.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"item-content\">\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\"></clipper-search-result-item>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection?.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.accent{color:var(--ars-accent, #7894ae)!important}.primary{color:var(--ars-primary, #00a293)!important}.secondary{color:var(--ars-secondary, #4a635f)!important}.error{color:var(--ars-error, #ff5449)!important}.warning{color:var(--ars-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 0 0}.drawer .title-container,.drawer-small .title-container{padding:20px 10px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 20px}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .content,.drawer-small .content{padding:10px 0!important}.drawer .fixed,.drawer-small .fixed{padding:0 4px!important}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px}.drawer-small .content{padding:20px 0 10px}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.expired,.unread{color:var(--ars-error, #ff5449)!important}.expiring{color:var(--ars-warning, #FFC107)!important}.error-bg,.expired-bg,.unread-bg{background-color:var(--ars-error, #ff5449)}.expiring-bg{background-color:var(--ars-warning, #FFC107)}.popular-bg{background-color:#388e3c}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .spaced{padding-top:10px!important}.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 0;min-height:60px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item-content .info-1{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent, #7894ae)}.item-content .info-2{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent-low, #456179)}.item-content .title{font-size:small;line-height:18px}.item-content .details{margin-top:4px;font-size:x-small;font-weight:700;line-height:15px;color:var(--ars-accent-low, #456179);text-transform:uppercase;border-left:4px solid var(--ars-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:600;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-link, #03A9F4);font-weight:600}.item-content a.link{color:var(--ars-link, #03A9F4);cursor:pointer!important}.item-content:hover{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer;padding:10px 13px;margin-bottom:2px}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-error, #ff5449);margin:0 8px}.tile .image{height:180px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image .img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-accent, #7894ae);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .check{position:absolute;left:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .check-selected{background-color:var(--ars-primary-hi, #12c0ae)}.tile .image .read{position:absolute;right:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .date{padding:8px 0 6px;font-weight:700;text-transform:uppercase}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.tile .time{font-size:small;font-weight:700}.tile .title{text-decoration:none;font-size:small;min-height:72px;overflow:hidden}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:var(--ars-accent, #7894ae);text-transform:uppercase;white-space:nowrap;color:var(--ars-color-text, #191c1b)}.badge-red{background-color:var(--ars-error, #ff5449);color:var(--ars-color-text, #191c1b)}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .next{margin-left:8px}.special-date,.special-date-expired{border:2px var(--ars-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-error, #ff5449) solid!important}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}\n"] }]
330
+ ], template: "<div class=\"clipper-references-fixed\">\r\n <div id=\"clipper-references-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap='10px' fxFill>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>{{title}} </h2>\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\" class=\"dialog-close\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n @if (dialogData.mode > 0 || selection?.hasValue() || (snapshot && snapshot.facets?.hasFacets && filterPane &&\r\n (!filterPane.opened || filterPaneClosed))) {\r\n <div style=\"padding: 0 10px 0 24px; height: 48px; min-height: 48px;\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData.mode === 1) {\r\n <mat-slide-toggle name=\"excludeTextReferences\" [(ngModel)]=\"filterParams.excludeTextReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citati nelle note\r\n </mat-slide-toggle>\r\n } @else if (dialogData.mode == 2) {\r\n <mat-slide-toggle name=\"excludeNotesReferences\" [(ngModel)]=\"filterParams.excludeNotesReferences\"\r\n (change)=\"fetch(true)\">\r\n Mostra solo se citano nel testo il documento\r\n </mat-slide-toggle>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (selection?.hasValue()) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button\r\n matTooltip=\"Azioni da eseguire sugli elementi selezionati\"\r\n [attr.aria-label]=\"'Menu opzioni per elementi selezionati'\" [matMenuTriggerFor]=\"menuSelections\"\r\n [disabled]=\"!snapshot.total\">\r\n <mat-icon aria-hidden=\"false\" [matBadge]=\"selection?.all.length\"\r\n matBadgeColor=\"accent\">playlist_add_check</mat-icon>\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n </button>\r\n }\r\n <mat-menu #menuSelections=\"matMenu\">\r\n <clipper-document-menu [parent]=\"this\" [selectionSource]=\"selection\" [isReadable]=\"false\"\r\n [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </mat-menu>\r\n @if (snapshot && snapshot.facets?.hasFacets && filterPane && (!filterPane.opened || filterPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Affina ricerca\" aria-label=\"'Affina ricerca'\"\r\n (click)=\"toggleFilterPane()\">\r\n <mat-icon>menu_open</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n<div mat-dialog-content id=\"clipper-references-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"filterPaneHasBackdrop\">\r\n <mat-drawer #filterPane position=\"end\" class=\"drawer-small drawer-with-loader\">\r\n @if (filterBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (filterBusy()) {\r\n <mat-progress-bar style=\"z-index: 11;\" mode=\"indeterminate\">\r\n </mat-progress-bar>\r\n }\r\n </div>\r\n <div fxFlex=\"56px\" class=\"title-container-with-loader\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlexAlign=\"center\" class=\"title\">Affina ricerca</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button fxFlexAlign=\"center\" mat-icon-button (click)=\"toggleFilterPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"scroll-hidden\">\r\n <clipper-search-facets #facets></clipper-search-facets>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\" [id]=\"scrollerId\" class=\"scroll-auto\" style=\"padding: 0 5px;\">\r\n @if (!snapshot.total) {\r\n <div>\r\n <p class=\"message\"><i>Nessun elemento da visualizzare.</i></p>\r\n </div>\r\n } @else {\r\n <div>\r\n @for (item of snapshot.items; track $index; let i = $index) {\r\n @if (item.group) {\r\n <div class=\"items-group-title\">\r\n <div [ngClass]=\"{'group-spaced': i > 0}\">{{item.group}}</div>\r\n </div>\r\n }\r\n <div (contextmenu)=\"onContextMenu($event, item)\" (mouseenter)=\"item.isOver = true\"\r\n (mouseleave)=\"item.isOver = false\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"6px\" fxLayoutAlign=\"start center\" fxFill class=\"item\"\r\n [ngClass]=\"{'item-selected': selection?.isSelected(item.documentId) }\">\r\n <div fxFlex=\"54px\" fxLayoutAlign=\"center\" style=\"padding-left: 6px;\">\r\n @if (screenService.isTouchable || item.isOver || selection?.isSelected(item.documentId)) {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection?.toggle(item, item.documentId) : null\"\r\n [checked]=\"selection?.isSelected(item.documentId)\">\r\n </mat-checkbox>\r\n }\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"item-content\">\r\n <clipper-search-result-item [item]=\"item\" [parent]=\"this\"></clipper-search-result-item>\r\n </div>\r\n <div fxFlex=\"48px\" fxLayoutAlign=\"end\">\r\n @if (item.isOver || item.isMenuOpen || selection?.isSelected(item.documentId)) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Menu\"\r\n [attr.aria-label]=\"'Menu opzioni'\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\" (click)=\"item.isMenuOpen = true\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div #contextMenuTrigger=\"matMenuTrigger\" style=\"position: fixed\" [style.left]=\"contextMenuPosition.x\"\r\n [style.top]=\"contextMenuPosition.y\" [matMenuTriggerFor]=\"contextMenu\"\r\n [matMenuTriggerData]=\"{item: item}\">\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n <mat-menu #contextMenu=\"matMenu\" (closed)=\"updateMenuButtonsVisibility()\">\r\n <ng-template matMenuContent let-item=\"item\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"item\" [isReadable]=\"false\" [isReference]=\"true\">\r\n </clipper-document-menu>\r\n </ng-template>\r\n </mat-menu>\r\n </div>\r\n }\r\n </div>\r\n <!-- footer -->\r\n @if ((snapshot?.total ?? 0) > 0) {\r\n <div class=\"items-footer\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <mat-paginator #paginator class=\"paginator\" [hidePageSize]=\"true\" [length]=\"snapshot?.total ?? 0\"\r\n [pageSize]=\"filterParams.count ?? 15\" [showFirstLastButtons]=\"true\" (page)=\"fetchMore($event)\">\r\n </mat-paginator>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </mat-drawer-container>\r\n</div>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-close{margin-right:10px;margin-top:10px}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto}.scroll-hidden{overflow:hidden}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.accent{color:var(--ars-accent, #7894ae)!important}.primary{color:var(--ars-primary, #00a293)!important}.secondary{color:var(--ars-secondary, #4a635f)!important}.error{color:var(--ars-error, #ff5449)!important}.warning{color:var(--ars-warning, #FFC107)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer,.drawer-small{min-width:420px!important;max-width:420px!important;padding:20px 0 0}.drawer .title-container,.drawer-small .title-container{padding:20px 10px}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 10px 20px}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .content,.drawer-small .content{padding:10px 0!important}.drawer .fixed,.drawer-small .fixed{padding:0 4px!important}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:15px;padding-right:20px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-bottom:20px!important}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.drawer-small{min-width:360px!important;max-width:360px!important}.drawer-small .title{min-width:150px}.drawer-small .content{padding:20px 0 10px}@media screen and (min-width: 0px) and (max-width: 359px){.drawer{min-width:360px!important;max-width:360px!important}.drawer .title{min-width:150px}}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media (prefers-color-scheme: dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.expired,.unread{color:var(--ars-error, #ff5449)!important}.expiring{color:var(--ars-warning, #FFC107)!important}.error-bg,.expired-bg,.unread-bg{background-color:var(--ars-error, #ff5449)}.expiring-bg{background-color:var(--ars-warning, #FFC107)}.popular-bg{background-color:#388e3c}.very-popular-bg{background-color:#4caf50}.item-selected{background-color:var(--ars-item-selected-background-color, #ced1d2);border-radius:0!important}.item-unread{font-weight:bolder}.items-group-title{color:var(--ars-accent, #7894ae);font-size:large;font-weight:700;padding-left:25px;padding-bottom:10px;padding-top:10px}.items-group-title .group-spaced{padding:10px 0 0!important}.items-footer{padding-top:10px}.item{border-radius:12px;padding:10px 0;min-height:60px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item-content .info-1{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent, #7894ae)}.item-content .info-2{font-size:x-small;font-weight:700;line-height:15px;text-transform:uppercase;color:var(--ars-accent-low, #456179)}.item-content .title{font-size:small;line-height:18px}.item-content .details{margin-top:4px;font-size:x-small;font-weight:700;line-height:15px;color:var(--ars-accent-low, #456179);text-transform:uppercase;border-left:4px solid var(--ars-accent-low, #456179);padding-left:10px}.item-content .details .links{text-transform:none;text-decoration:none}.item-content .details .links a,.item-content .details .links span,.item-content .details .links div{margin-right:8px;font-weight:600;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-link, #03A9F4);font-weight:600}.item-content a.link{color:var(--ars-link, #03A9F4);cursor:pointer!important}.item-content:hover{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer;padding:10px 13px;margin-bottom:2px}.tile .body{padding:4px 6px}.tile .image-mark{border-top:6px solid transparent;margin:0 8px}.tile .image-mark-unread{border-top-color:var(--ars-error, #ff5449);margin:0 8px}.tile .image{height:180px;position:relative;background-color:transparent;overflow:hidden;display:flex;justify-content:center;align-items:center;border-radius:8px}.tile .image .img{object-fit:cover;width:100%;height:100%}.tile .image .info-1{position:absolute;left:0;bottom:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-color-text, #191c1b);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .info-2{position:absolute;right:0;top:0;padding:4px 8px;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75));color:var(--ars-accent, #7894ae);font-size:small;font-weight:700;text-transform:uppercase}.tile .image .check{position:absolute;left:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .check-selected{background-color:var(--ars-primary-hi, #12c0ae)}.tile .image .read{position:absolute;right:0;top:0;height:42px;width:42px;background-color:var(--ars-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .date{padding:8px 0 6px;font-weight:700;text-transform:uppercase}.tile .date .date-day{color:var(--ars-accent, #7894ae)}.tile .date .date-divider{width:1px;margin:0 8px;border-left:1px solid var(--ars-color-divider, #757d87)}.tile .time{font-size:small;font-weight:700}.tile .title{text-decoration:none;font-size:small;min-height:72px;overflow:hidden}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:var(--ars-accent, #7894ae);text-transform:uppercase;white-space:nowrap;color:var(--ars-color-text, #191c1b)}.badge-red{background-color:var(--ars-error, #ff5449);color:var(--ars-color-text, #191c1b)}.busy-backdrop{background-color:#00000052!important}.legend-container{display:flex;flex-direction:row;align-items:center;font-size:x-small;text-transform:uppercase;font-weight:500;margin-left:10px}.legend-container .legend{display:inline-block;height:8px;width:8px;margin-right:4px}.legend-container .next{margin-left:8px}.special-date,.special-date-expired{border:2px var(--ars-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-error, #ff5449) solid!important}.message{color:var(--ars-color-secondary, #4a635f);padding:20px;text-align:center}\n"] }]
331
331
  }], propDecorators: { filterPane: [{
332
332
  type: ViewChild,
333
333
  args: ['filterPane']
334
334
  }] } });
335
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvcmVmZXJlbmNlcy9yZWZlcmVuY2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBYSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFn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YSxtTEFDYixpQkFBaUIsNldBQ2pCLG9CQUFvQixrV0FDcEIsV0FBVyw4VkFDWCxhQUFhLGtzQkFDYixjQUFjLDJQQUNkLGtCQUFrQixxU0FDbEIsZ0JBQWdCLHdHQUNoQixjQUFjLGtpQkFDZCxnQkFBZ0IsMGRBQ2hCLG9CQUFvQiwwTkFDcEIsNEJBQTRCLHNNQUM1Qiw0QkFBNEIsd0ZBQzVCLGdDQUFnQzs7MkZBSXZCLDBCQUEwQjtrQkE1QnRDLFNBQVM7MkJBQ0YsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLGNBR2hDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxVQUFVO3dCQUNWLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixvQkFBb0I7d0JBQ3BCLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQiw0QkFBNEI7d0JBQzVCLDRCQUE0Qjt3QkFDNUIsZ0NBQWdDO3FCQUVqQzs4QkFJd0IsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCYWRnZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JhZGdlJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nUmVmLCBNYXREaWFsb2dUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IE1hdERyYXdlciwgTWF0U2lkZW5hdk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xyXG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHtcclxuICBDbGlwcGVyRG9jdW1lbnRJbmZvLFxyXG4gIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLCBDbGlwcGVyU2VhcmNoRmFjZXRzU25hcHNob3QsXHJcbiAgQ2xpcHBlclNlYXJjaFBhcmFtc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBTZWxlY3RhYmxlTW9kZWwsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRXh0ZW5kZWRNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQvZXh0ZW5kZWQnO1xyXG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXgnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mYWNldHMvc2VhcmNoLWZhY2V0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlciB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtbWFuYWdlci9zZWFyY2gtcmVzdWx0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtaXRlbS9zZWFyY2gtcmVzdWx0LWl0ZW0uY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcHBlclJlZmVyZW5jZXNEaWFsb2dEYXRhIHtcclxuICBtb2RlPzogQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUgfCBudWxsO1xyXG4gIGFuY2hvcj86IHN0cmluZyB8IG51bGw7XHJcbiAgYW5jaG9yVGl0bGU/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbW9kZWw6IG51bWJlcjtcclxuXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIGhvc3Q6IHsgJ0JpbmQnOiBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKSB9LFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWZlcmVuY2VzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZWZlcmVuY2VzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGbGV4TW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nVGl0bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBNYXRCYWRnZU1vZHVsZSxcclxuICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcclxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXHJcbiAgICBFeHRlbmRlZE1vZHVsZSxcclxuICAgIE1hdFNpZGVuYXZNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcclxuICAgIENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQsXHJcbiAgICBDbGlwcGVyU2VhcmNoRmFjZXRzQ29tcG9uZW50LFxyXG4gICAgQ2xpcHBlclNlYXJjaFJlc3VsdEl0ZW1Db21wb25lbnRcclxuXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50IGV4dGVuZHMgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXJcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdmaWx0ZXJQYW5lJykgZmlsdGVyUGFuZSE6IE1hdERyYXdlcjtcclxuXHJcbiAgcHJpdmF0ZSBoZWlnaHQ6IG51bWJlciA9IC0xO1xyXG4gIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZjxDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudD4pO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBDbGlwcGVyUmVmZXJlbmNlc0RpYWxvZ0RhdGEgPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKSA/PyB7IG1vZGU6IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbiB9O1xyXG4gIHByb3RlY3RlZCB0aXRsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZGlhbG9nRGF0YS5tb2RlKSB7XHJcbiAgICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW46XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gXCJEb2N1bWVudGkgcmljaGlhbWF0aSBuZWxsZSBub3RlIG8gbmVsIHRlc3RvXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNPdXQ6XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gXCJEb2N1bWVudGkgY2hlIHJpY2hpYW1hbm8gcXVlbGxvIGluIHZpc2lvbmVcIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc0luOlxyXG4gICAgICAgICAgdGhpcy50aXRsZSA9IFwiTW9kaWZpY2hlIHN1Yml0ZVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0OlxyXG4gICAgICAgICAgdGhpcy50aXRsZSA9IFwiTW9kaWZpY2hlIGFwcG9ydGF0ZVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5KdXJpczpcclxuICAgICAgICAgIHRoaXMudGl0bGUgPSBcIkdpdXJpc3BydWRlbnphIGFzc29jaWF0YVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5hbmNob3JUaXRsZSkge1xyXG4gICAgICAgIHRoaXMudGl0bGUgKz0gXCIgLSBcIiArIHRoaXMuZGlhbG9nRGF0YS5hbmNob3JUaXRsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXNlIHNlcnZpY2Ugc25hcHNob3RcclxuICAgICAgdGhpcy5zbmFwc2hvdCA9IHRoaXMuY2xpcHBlclNlcnZpY2UucmVmZXJlbmNlc1NuYXBzaG90ID8/IHsgc2VhcmNoUGFyYW1zOiBuZXcgQ2xpcHBlclNlYXJjaFBhcmFtcygpLCBpbnRlcnZhbDogXCItMVwiIH07XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlICE9PSB0aGlzLmRpYWxvZ0RhdGEubW9kZSB8fFxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmlkICE9PSB0aGlzLmRpYWxvZ0RhdGEuaWQgfHxcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5hbmNob3IgIT09IHRoaXMuZGlhbG9nRGF0YS5hbmNob3JcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMgPSBuZXcgQ2xpcHBlclNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGUgPSB0aGlzLmRpYWxvZ0RhdGEubW9kZTtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbCA9IHRoaXMuZGlhbG9nRGF0YS5tb2RlbDtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5hbmNob3IgPSB0aGlzLmRpYWxvZ0RhdGEuYW5jaG9yO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmlkID0gdGhpcy5kaWFsb2dEYXRhLmlkO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnVzZU1vZGlmaWVySW5mbz0gIHRoaXMuZGlhbG9nRGF0YS5tb2RlID09PSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0O1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnJldHVybk1vZGlmaWVySW5mbyA9IHRoaXMuZGlhbG9nRGF0YS5tb2RlICE9PSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0O1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UucmVmZXJlbmNlc1NuYXBzaG90ID0gdGhpcy5zbmFwc2hvdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0aW9uXHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3RhYmxlTW9kZWw8YW55LCBzdHJpbmc+KHRydWUsICdkb2N1bWVudElkJyk7XHJcblxyXG4gICAgLy8gT2JzZXJ2ZSBsYXlvdXQgY2hhbmdlc1xyXG4gICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXJcclxuICAgICAgLm9ic2VydmUoW1xyXG4gICAgICAgIEJyZWFrcG9pbnRzLlhTbWFsbCxcclxuICAgICAgICBCcmVha3BvaW50cy5TbWFsbCxcclxuICAgICAgICBCcmVha3BvaW50cy5NZWRpdW0sXHJcbiAgICAgICAgQnJlYWtwb2ludHMuTGFyZ2UsXHJcbiAgICAgICAgQnJlYWtwb2ludHMuWExhcmdlLFxyXG4gICAgICBdKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICBmb3IgKGNvbnN0IHF1ZXJ5IG9mIE9iamVjdC5rZXlzKHJlc3VsdC5icmVha3BvaW50cykpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQuYnJlYWtwb2ludHNbcXVlcnldKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAvLyBSZWFjdCB0byB3aW5kb3cgc2l6ZSBjaGFuZ2VcclxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSg1MDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gSGFuZGxlIGZpbHRlciBwYW5lIFxyXG4gICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgIC8vIEhhbmRsZSBmYWNldHNcclxuICAgICAgaWYgKHRoaXMuZmFjZXRzKSB7XHJcbiAgICAgICAgdGhpcy5mYWNldHMuY2hhbmdlZFxyXG4gICAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMuZnJvbURhdGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuc25hcHNob3QuZmFjZXRzLmZyb21EYXRlO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZSA9IHRoaXMuc25hcHNob3QuZmFjZXRzLnRvRGF0ZTtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy55ZWFyID0gdGhpcy5zbmFwc2hvdC5mYWNldHMuZnJvbURhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cy5jaGFuZ2VkSW50ZXJ2YWwpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy55ZWFyID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMuc2VjdG9yIHx8IHRoaXMuc25hcHNob3QuZmFjZXRzLmNoYW5nZWRTZWN0b3IpXHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID0gdGhpcy5zbmFwc2hvdC5mYWNldHMuc2VjdG9yO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMudHlwZSB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cy5jaGFuZ2VkVHlwZSlcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50eXBlID0gdGhpcy5zbmFwc2hvdC5mYWNldHMudHlwZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzLmF1dGhvciB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cy5jaGFuZ2VkQXV0aG9yKVxyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmF1dGhvciA9IHRoaXMuc25hcHNob3QuZmFjZXRzLmF1dGhvcjtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaCh0cnVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcbiAgICB0aGlzLnJlc3RvcmVGYWNldHMoKTtcclxuICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2l6ZSBcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGlwcGVyLXJlZmVyZW5jZXMtc2Nyb2xsYWJsZScpO1xyXG4gICAgICBpZiAoZWxlbSkge1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXRDdXJyZW50RGlhbG9nU2Nyb2xsYWJsZUhlaWdodChcclxuICAgICAgICAgIFsnY2xpcHBlci1yZWZlcmVuY2VzLWZpeGVkJ10sXHJcbiAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoZWlnaHQgIT0gdGhpcy5oZWlnaHQpIHtcclxuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdzdHlsZScsICdwYWRkaW5nOiAyMHB4IDAgMCAwOycgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudDttYXgtaGVpZ2h0OicgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudCcpO1xyXG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFNob3cgaGlkZSBmaWx0ZXIgcGFuZSBtYW51YWxseVxyXG4gKi9cclxuICBwcm90ZWN0ZWQgdG9nZ2xlRmlsdGVyUGFuZSgpIHtcclxuICAgIHRoaXMuZmlsdGVyUGFuZUNsb3NlZCA9ICF0aGlzLmZpbHRlclBhbmVDbG9zZWQ7XHJcbiAgICB0aGlzLmZpbHRlclBhbmU/LnRvZ2dsZSgpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgZmlsdGVyIHBhbmUgdmlzaWJpbGl0eVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKSB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYW5lKSB7XHJcbiAgICAgIGlmICh0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuWFNtYWxsKSB8fFxyXG4gICAgICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChCcmVha3BvaW50cy5TbWFsbCkgfHxcclxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuTWVkaXVtKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclBhbmUub3BlbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm1vZGUgPSAnb3Zlcic7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmRpc2FibGVDbG9zZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZUhhc0JhY2tkcm9wID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyUGFuZS5vcGVuZWQgJiYgIXRoaXMuZmlsdGVyUGFuZUNsb3NlZCAmJiB0aGlzLmhhc0ZhY2V0cygpKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUub3BlbigpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJQYW5lLm9wZW5lZCAmJiB0aGlzLmZpbHRlclBhbmVDbG9zZWQpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFuZS5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUubW9kZSA9ICdzaWRlJztcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmVIYXNCYWNrZHJvcCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2UgZGlhbG9nXHJcbiAgICovXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipcclxuICAgKiBTZW5kIGRvY3VtZW50IGxpbmtzIGJ5IGVtYWlsXHJcbiAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBhZGRcclxuICAgKi9cclxuICBzZW5kVG8oaXRlbTogYW55ID0gbnVsbCkge1xyXG4gICAgdGhpcy5zZW5kSXRlbXNUbyhpdGVtID8gW2l0ZW1dIDogdGhpcy5zZWxlY3Rpb24/LmFsbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtIGEgc2VhcmNoXHJcbiAgICogQHBhcmFtIG5ld1NlYXJjaDogdHJ1ZSBpZiBpcyBhIG5ldyBzZWFyY2hcclxuICAgKi9cclxuICBmZXRjaChuZXdTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKSByZXR1cm47XHJcbiAgICBpZiAobmV3U2VhcmNoKSB0aGlzLmZpbHRlclBhcmFtcy5maXJzdCA9IDA7XHJcbiAgICB0aGlzLmZpbHRlclBhcmFtcy51c2VNb2RpZmllckluZm8gPVxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlID09PSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0O1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMucmV0dXJuTW9kaWZpZXJJbmZvID1cclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZSAhPT0gQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc091dDtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5KCdSaWNlcmNhIGluIGNvcnNvLi4uJyk7XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnJlZmVyZW5jZXModGhpcy5maWx0ZXJQYXJhbXMudG9SZWZlcmVuY2VzU2VhcmNoUGFyYW1zKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXIuc3VjY2VzcykgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUmVzdWx0cyhyLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEhhbmRsZSBmYWNldHNcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QudG90YWwgPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5ld1NlYXJjaClcclxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBmYWNldHNcclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hGYWNldHMoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZhY2V0cz8ucmVzZXQoKTtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5ld1NlYXJjaCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRvcikgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwoMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGEgbmV3IHBhZ2UgcmVzdWx0XHJcbiAgICogQHBhcmFtIGUgOiB0aGUgTWF0UGFnaW5hdG9yIFBhZ2VFdmVudCBkYXRhXHJcbiAgICovXHJcbiAgZmV0Y2hNb3JlKGU6IGFueSkge1xyXG4gICAgbGV0IGZpcnN0ID0gZS5wYWdlSW5kZXggKiB0aGlzLmZpbHRlclBhcmFtcy5jb3VudDtcclxuICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZpcnN0ID0gZmlyc3Q7XHJcbiAgICB0aGlzLmZldGNoKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZmFjZXRzXHJcbiAgICovXHJcbiAgZmV0Y2hGYWNldHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4pIHJldHVybjtcclxuICAgIGlmICghdGhpcy5zbmFwc2hvdC5mYWNldHMgfHwgdGhpcy5zbmFwc2hvdC5mYWNldHM/Lmhhc01vcmVGYWNldHMpIHtcclxuICAgIHRoaXMuZmlsdGVyQnVzeS5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnJlZmVyZW5jZXNGYWNldHModGhpcy5maWx0ZXJQYXJhbXMudG9SZWZlcmVuY2VzU2VhcmNoUGFyYW1zKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyKSA9PiB7XHJcbiAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVJlc3VsdHMobnVsbCwgci52YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlckJ1c3kuc2V0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFRyeSB0byByZXN0b3JlIHN0b3JlZCBmYWNldHNcclxuICovXHJcbiAgcmVzdG9yZUZhY2V0cygpIHtcclxuICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cykge1xyXG4gICAgICB0aGlzLmZhY2V0cy5yZXN0b3JlKHRoaXMuc25hcHNob3QuZmFjZXRzKTtcclxuICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJQYW5lVmlzaWJpbGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2UgY3VycmVudCBkaWFsb2cgYW5kIHJldHVybiB0aGUgaWQgdG8gbmF2aWdhdGUgdG9cclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAqL1xyXG4gIG9wZW4oZG9jdW1lbnRJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7IGlkOiBkb2N1bWVudElkIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2xpcHBlci1yZWZlcmVuY2VzLWZpeGVkXCI+XHJcbiAgPGRpdiBpZD1cImNsaXBwZXItcmVmZXJlbmNlcy1oZWFkZXJcIj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhMYXlvdXRHYXA9JzEwcHgnIGZ4RmlsbD5cclxuICAgICAgPGRpdiBmeEZsZXg9XCIqXCI+XHJcbiAgICAgICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+e3t0aXRsZX19IDwvaDI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cclxuICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwic3RhcnRcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJDaGl1ZGlcIiBhcmlhLWxhYmVsPVwiQ2hpdWRpXCJcclxuICAgICAgICAgIChjbGljayk9XCJjbG9zZSgpXCIgY2xhc3M9XCJkaWFsb2ctY2xvc2VcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKGRpYWxvZ0RhdGEubW9kZSA+IDAgfHwgc2VsZWN0aW9uPy5oYXNWYWx1ZSgpIHx8IChzbmFwc2hvdCAmJiBzbmFwc2hvdC5mYWNldHM/Lmhhc0ZhY2V0cyAmJiBmaWx0ZXJQYW5lICYmXHJcbiAgICAoIWZpbHRlclBhbmUub3BlbmVkIHx8IGZpbHRlclBhbmVDbG9zZWQpKSkge1xyXG4gICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDAgMTBweCAwIDI0cHg7IGhlaWdodDogNDhweDsgbWluLWhlaWdodDogNDhweDtcIj5cclxuICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCI+XHJcbiAgICAgICAgICBAaWYgKGRpYWxvZ0RhdGEubW9kZSA9PT0gMSkge1xyXG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgbmFtZT1cImV4Y2x1ZGVUZXh0UmVmZXJlbmNlc1wiIFsobmdNb2RlbCldPVwiZmlsdGVyUGFyYW1zLmV4Y2x1ZGVUZXh0UmVmZXJlbmNlc1wiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZmV0Y2godHJ1ZSlcIj5cclxuICAgICAgICAgICAgTW9zdHJhIHNvbG8gc2UgY2l0YXRpIG5lbGxlIG5vdGVcclxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgIH0gQGVsc2UgaWYgKGRpYWxvZ0RhdGEubW9kZSA9PSAyKSB7XHJcbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBuYW1lPVwiZXhjbHVkZU5vdGVzUmVmZXJlbmNlc1wiIFsobmdNb2RlbCldPVwiZmlsdGVyUGFyYW1zLmV4Y2x1ZGVOb3Rlc1JlZmVyZW5jZXNcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cImZldGNoKHRydWUpXCI+XHJcbiAgICAgICAgICAgIE1vc3RyYSBzb2xvIHNlIGNpdGFubyBuZWwgdGVzdG8gaWwgZG9jdW1lbnRvXHJcbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgICBAaWYgKHNlbGVjdGlvbj8uaGFzVmFsdWUoKSkge1xyXG4gICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBemlvbmkgZGEgZXNlZ3VpcmUgc3VnbGkgZWxlbWVudGkgc2VsZXppb25hdGlcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51IG9wemlvbmkgcGVyIGVsZW1lbnRpIHNlbGV6aW9uYXRpJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51U2VsZWN0aW9uc1wiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc25hcHNob3QudG90YWxcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbbWF0QmFkZ2VdPVwic2VsZWN0aW9uPy5hbGwubGVuZ3RoXCJcclxuICAgICAgICAgICAgICBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+cGxheWxpc3RfYWRkX2NoZWNrPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1tZW51LWRyb3AtZG93blwiPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG1hdC1tZW51ICNtZW51U2VsZWN0aW9ucz1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgPGNsaXBwZXItZG9jdW1lbnQtbWVudSBbcGFyZW50XT1cInRoaXNcIiBbc2VsZWN0aW9uU291cmNlXT1cInNlbGVjdGlvblwiIFtpc1JlYWRhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICBbaXNSZWZlcmVuY2VdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8L2NsaXBwZXItZG9jdW1lbnQtbWVudT5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICBAaWYgKHNuYXBzaG90ICYmIHNuYXBzaG90LmZhY2V0cz8uaGFzRmFjZXRzICYmIGZpbHRlclBhbmUgJiYgKCFmaWx0ZXJQYW5lLm9wZW5lZCB8fCBmaWx0ZXJQYW5lQ2xvc2VkKSkge1xyXG4gICAgICAgICAgPGRpdiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkFmZmluYSByaWNlcmNhXCIgYXJpYS1sYWJlbD1cIidBZmZpbmEgcmljZXJjYSdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJQYW5lKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+bWVudV9vcGVuPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGlkPVwiY2xpcHBlci1yZWZlcmVuY2VzLXNjcm9sbGFibGVcIj5cclxuICA8bWF0LWRyYXdlci1jb250YWluZXIgY2xhc3M9XCJmaWxsXCIgW2hhc0JhY2tkcm9wXT1cImZpbHRlclBhbmVIYXNCYWNrZHJvcFwiPlxyXG4gICAgPG1hdC1kcmF3ZXIgI2ZpbHRlclBhbmUgcG9zaXRpb249XCJlbmRcIiBjbGFzcz1cImRyYXdlci1zbWFsbCBkcmF3ZXItd2l0aC1sb2FkZXJcIj5cclxuICAgICAgQGlmIChmaWx0ZXJCdXN5KCkpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj48L2Rpdj5cclxuICAgICAgfVxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiNnB4XCI+XHJcbiAgICAgICAgICBAaWYgKGZpbHRlckJ1c3koKSkge1xyXG4gICAgICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgc3R5bGU9XCJ6LWluZGV4OiAxMTtcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPlxyXG4gICAgICAgICAgPC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiNTZweFwiIGNsYXNzPVwidGl0bGUtY29udGFpbmVyLXdpdGgtbG9hZGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleEFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aXRsZVwiPkFmZmluYSByaWNlcmNhPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJQYW5lKClcIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIk5hc2NvbmRpXCI+PG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBjbGFzcz1cInNjcm9sbC1oaWRkZW5cIj5cclxuICAgICAgICAgIDxjbGlwcGVyLXNlYXJjaC1mYWNldHMgI2ZhY2V0cz48L2NsaXBwZXItc2VhcmNoLWZhY2V0cz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1kcmF3ZXI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIipcIiBbaWRdPVwic2Nyb2xsZXJJZFwiIGNsYXNzPVwic2Nyb2xsLWF1dG9cIiBzdHlsZT1cInBhZGRpbmc6IDAgNXB4O1wiPlxyXG4gICAgICAgIEBpZiAoIXNuYXBzaG90LnRvdGFsKSB7XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibWVzc2FnZVwiPjxpPk5lc3N1biBlbGVtZW50byBkYSB2aXN1YWxpenphcmUuPC9pPjwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBzbmFwc2hvdC5pdGVtczsgdHJhY2sgJGluZGV4OyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgQGlmIChpdGVtLmdyb3VwKSB7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtZ3JvdXAtdGl0bGVcIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J3NwYWNlZCc6IGkgPiAwfVwiPnt7aXRlbS5ncm91cH19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxkaXYgKGNvbnRleHRtZW51KT1cIm9uQ29udGV4dE1lbnUoJGV2ZW50LCBpdGVtKVwiIChtb3VzZWVudGVyKT1cIml0ZW0uaXNPdmVyID0gdHJ1ZVwiXHJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIml0ZW0uaXNPdmVyID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiNnB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbCBjbGFzcz1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXRlbS1zZWxlY3RlZCc6IHNlbGVjdGlvbj8uaXNTZWxlY3RlZChpdGVtLmRvY3VtZW50SWQpIH1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjU0cHhcIiBmeExheW91dEFsaWduPVwiY2VudGVyXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDZweDtcIj5cclxuICAgICAgICAgICAgICAgIEBpZiAoc2NyZWVuU2VydmljZS5pc1RvdWNoYWJsZSB8fCBpdGVtLmlzT3ZlciB8fCBzZWxlY3Rpb24/LmlzU2VsZWN0ZWQoaXRlbS5kb2N1bWVudElkKSkge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24/LnRvZ2dsZShpdGVtLCBpdGVtLmRvY3VtZW50SWQpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbj8uaXNTZWxlY3RlZChpdGVtLmRvY3VtZW50SWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIGNsYXNzPVwiaXRlbS1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8Y2xpcHBlci1zZWFyY2gtcmVzdWx0LWl0ZW0gW2l0ZW1dPVwiaXRlbVwiIFtwYXJlbnRdPVwidGhpc1wiPjwvY2xpcHBlci1zZWFyY2gtcmVzdWx0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCI0OHB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICAgICAgQGlmIChpdGVtLmlzT3ZlciB8fCBpdGVtLmlzTWVudU9wZW4gfHwgc2VsZWN0aW9uPy5pc1NlbGVjdGVkKGl0ZW0uZG9jdW1lbnRJZCkpIHtcclxuICAgICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJNZW51XCJcclxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcHppb25pJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb250ZXh0TWVudVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCIgKGNsaWNrKT1cIml0ZW0uaXNNZW51T3BlbiA9IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICNjb250ZXh0TWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiIHN0eWxlPVwicG9zaXRpb246IGZpeGVkXCIgW3N0eWxlLmxlZnRdPVwiY29udGV4dE1lbnVQb3NpdGlvbi54XCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS50b3BdPVwiY29udGV4dE1lbnVQb3NpdGlvbi55XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LW1lbnUgI2NvbnRleHRNZW51PVwibWF0TWVudVwiIChjbG9zZWQpPVwidXBkYXRlTWVudUJ1dHRvbnNWaXNpYmlsaXR5KClcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgW2l0ZW1dPVwiaXRlbVwiIFtpc1JlYWRhYmxlXT1cImZhbHNlXCIgW2lzUmVmZXJlbmNlXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICA8L2NsaXBwZXItZG9jdW1lbnQtbWVudT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBmb290ZXIgLS0+XHJcbiAgICAgIEBpZiAoKHNuYXBzaG90Py50b3RhbCA/PyAwKSA+IDApIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWZvb3RlclwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxtYXQtcGFnaW5hdG9yICNwYWdpbmF0b3IgY2xhc3M9XCJwYWdpbmF0b3JcIiBbaGlkZVBhZ2VTaXplXT1cInRydWVcIiBbbGVuZ3RoXT1cInNuYXBzaG90Py50b3RhbCA/PyAwXCJcclxuICAgICAgICAgICAgW3BhZ2VTaXplXT1cImZpbHRlclBhcmFtcy5jb3VudCA/PyAxNVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCIgKHBhZ2UpPVwiZmV0Y2hNb3JlKCRldmVudClcIj5cclxuICAgICAgICAgIDwvbWF0LXBhZ2luYXRvcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LWRyYXdlci1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJlbmNlcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9yZWZlcmVuY2VzL3JlZmVyZW5jZXMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvcmVmZXJlbmNlcy9yZWZlcmVuY2VzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBcUIsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN4SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsZUFBZSxFQUFFLGdCQUFnQixFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBYSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFn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YSxtTEFDYixpQkFBaUIsNldBQ2pCLG9CQUFvQixrV0FDcEIsV0FBVyw4VkFDWCxhQUFhLGtzQkFDYixjQUFjLDJQQUNkLGtCQUFrQixxU0FDbEIsZ0JBQWdCLHdHQUNoQixjQUFjLGtpQkFDZCxnQkFBZ0IsMGRBQ2hCLG9CQUFvQiwwTkFDcEIsNEJBQTRCLHNNQUM1Qiw0QkFBNEIsd0ZBQzVCLGdDQUFnQzs7MkZBSXZCLDBCQUEwQjtrQkE1QnRDLFNBQVM7MkJBQ0YsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLFlBQVksRUFBRSxFQUFFLGNBR2hDLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxXQUN0Qzt3QkFDUCxVQUFVO3dCQUNWLGNBQWM7d0JBQ2QsZUFBZTt3QkFDZixnQkFBZ0I7d0JBQ2hCLGFBQWE7d0JBQ2IsaUJBQWlCO3dCQUNqQixvQkFBb0I7d0JBQ3BCLFdBQVc7d0JBQ1gsYUFBYTt3QkFDYixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGdCQUFnQjt3QkFDaEIsb0JBQW9CO3dCQUNwQiw0QkFBNEI7d0JBQzVCLDRCQUE0Qjt3QkFDNUIsZ0NBQWdDO3FCQUVqQzs4QkFJd0IsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludHMgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcclxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCYWRnZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2JhZGdlJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTWF0Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XHJcbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nQ29udGVudCwgTWF0RGlhbG9nUmVmLCBNYXREaWFsb2dUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xyXG5pbXBvcnQgeyBNYXRQYWdpbmF0b3JNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IE1hdERyYXdlciwgTWF0U2lkZW5hdk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NpZGVuYXYnO1xyXG5pbXBvcnQgeyBNYXRTbGlkZVRvZ2dsZU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NsaWRlLXRvZ2dsZSc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXBNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHtcclxuICBDbGlwcGVyRG9jdW1lbnRJbmZvLFxyXG4gIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLCBDbGlwcGVyU2VhcmNoRmFjZXRzU25hcHNob3QsXHJcbiAgQ2xpcHBlclNlYXJjaFBhcmFtc1xyXG59IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY2xpcHBlci5jb21tb24nO1xyXG5pbXBvcnQgeyBTZWxlY3RhYmxlTW9kZWwsIFN5c3RlbVV0aWxzIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuaW1wb3J0IHsgRXh0ZW5kZWRNb2R1bGUgfSBmcm9tICdAbmdicmFja2V0L25neC1sYXlvdXQvZXh0ZW5kZWQnO1xyXG5pbXBvcnQgeyBGbGV4TW9kdWxlIH0gZnJvbSAnQG5nYnJhY2tldC9uZ3gtbGF5b3V0L2ZsZXgnO1xyXG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaEZhY2V0c0NvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1mYWNldHMvc2VhcmNoLWZhY2V0cy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0TWFuYWdlciB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtbWFuYWdlci9zZWFyY2gtcmVzdWx0LW1hbmFnZXInO1xyXG5pbXBvcnQgeyBDbGlwcGVyU2VhcmNoUmVzdWx0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL3NlYXJjaC1yZXN1bHQtaXRlbS9zZWFyY2gtcmVzdWx0LWl0ZW0uY29tcG9uZW50JztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2xpcHBlclJlZmVyZW5jZXNEaWFsb2dEYXRhIHtcclxuICBtb2RlPzogQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUgfCBudWxsO1xyXG4gIGFuY2hvcj86IHN0cmluZyB8IG51bGw7XHJcbiAgYW5jaG9yVGl0bGU/OiBzdHJpbmcgfCBudWxsO1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbW9kZWw6IG51bWJlcjtcclxuXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIGhvc3Q6IHsgJ0JpbmQnOiBTeXN0ZW1VdGlscy5nZW5lcmF0ZVVVSUQoKSB9LFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9yZWZlcmVuY2VzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZWZlcmVuY2VzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBGbGV4TW9kdWxlLFxyXG4gICAgTWF0RGlhbG9nVGl0bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRUb29sdGlwTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgTWF0U2xpZGVUb2dnbGVNb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBNYXRCYWRnZU1vZHVsZSxcclxuICAgIE1hdFBhZ2luYXRvck1vZHVsZSxcclxuICAgIE1hdERpYWxvZ0NvbnRlbnQsXHJcbiAgICBFeHRlbmRlZE1vZHVsZSxcclxuICAgIE1hdFNpZGVuYXZNb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc0Jhck1vZHVsZSxcclxuICAgIENsaXBwZXJEb2N1bWVudE1lbnVDb21wb25lbnQsXHJcbiAgICBDbGlwcGVyU2VhcmNoRmFjZXRzQ29tcG9uZW50LFxyXG4gICAgQ2xpcHBlclNlYXJjaFJlc3VsdEl0ZW1Db21wb25lbnRcclxuXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENsaXBwZXJSZWZlcmVuY2VzQ29tcG9uZW50IGV4dGVuZHMgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXJcclxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCdmaWx0ZXJQYW5lJykgZmlsdGVyUGFuZSE6IE1hdERyYXdlcjtcclxuXHJcbiAgcHJpdmF0ZSBoZWlnaHQ6IG51bWJlciA9IC0xO1xyXG4gIHByaXZhdGUgZGlhbG9nUmVmID0gaW5qZWN0KE1hdERpYWxvZ1JlZjxDbGlwcGVyUmVmZXJlbmNlc0NvbXBvbmVudD4pO1xyXG4gIHByb3RlY3RlZCBkaWFsb2dEYXRhOiBDbGlwcGVyUmVmZXJlbmNlc0RpYWxvZ0RhdGEgPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKSA/PyB7IG1vZGU6IENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNJbiB9O1xyXG4gIHByb3RlY3RlZCB0aXRsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJvdGVjdGVkIGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcblxyXG4gICAgaWYgKHRoaXMuZGlhbG9nRGF0YSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuZGlhbG9nRGF0YS5tb2RlKSB7XHJcbiAgICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5SZWZlcmVuY2VzSW46XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gXCJEb2N1bWVudGkgcmljaGlhbWF0aSBuZWxsZSBub3RlIG8gbmVsIHRlc3RvXCI7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIENsaXBwZXJRdWVyeVJlZmVyZW5jZXNNb2RlLlJlZmVyZW5jZXNPdXQ6XHJcbiAgICAgICAgICB0aGlzLnRpdGxlID0gXCJEb2N1bWVudGkgY2hlIHJpY2hpYW1hbm8gcXVlbGxvIGluIHZpc2lvbmVcIjtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc0luOlxyXG4gICAgICAgICAgdGhpcy50aXRsZSA9IFwiTW9kaWZpY2hlIHN1Yml0ZVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0OlxyXG4gICAgICAgICAgdGhpcy50aXRsZSA9IFwiTW9kaWZpY2hlIGFwcG9ydGF0ZVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5KdXJpczpcclxuICAgICAgICAgIHRoaXMudGl0bGUgPSBcIkdpdXJpc3BydWRlbnphIGFzc29jaWF0YVwiO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZGlhbG9nRGF0YS5hbmNob3JUaXRsZSkge1xyXG4gICAgICAgIHRoaXMudGl0bGUgKz0gXCIgLSBcIiArIHRoaXMuZGlhbG9nRGF0YS5hbmNob3JUaXRsZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXNlIHNlcnZpY2Ugc25hcHNob3RcclxuICAgICAgdGhpcy5zbmFwc2hvdCA9IHRoaXMuY2xpcHBlclNlcnZpY2UucmVmZXJlbmNlc1NuYXBzaG90ID8/IHsgc2VhcmNoUGFyYW1zOiBuZXcgQ2xpcHBlclNlYXJjaFBhcmFtcygpLCBpbnRlcnZhbDogXCItMVwiIH07XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlICE9PSB0aGlzLmRpYWxvZ0RhdGEubW9kZSB8fFxyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmlkICE9PSB0aGlzLmRpYWxvZ0RhdGEuaWQgfHxcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5hbmNob3IgIT09IHRoaXMuZGlhbG9nRGF0YS5hbmNob3JcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMgPSBuZXcgQ2xpcHBlclNlYXJjaFBhcmFtcygpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLm1vZGUgPSB0aGlzLmRpYWxvZ0RhdGEubW9kZTtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlbCA9IHRoaXMuZGlhbG9nRGF0YS5tb2RlbDtcclxuICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5hbmNob3IgPSB0aGlzLmRpYWxvZ0RhdGEuYW5jaG9yO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmlkID0gdGhpcy5kaWFsb2dEYXRhLmlkO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnVzZU1vZGlmaWVySW5mbz0gIHRoaXMuZGlhbG9nRGF0YS5tb2RlID09PSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0O1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnJldHVybk1vZGlmaWVySW5mbyA9IHRoaXMuZGlhbG9nRGF0YS5tb2RlICE9PSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0O1xyXG4gICAgICAgIHRoaXMuY2xpcHBlclNlcnZpY2UucmVmZXJlbmNlc1NuYXBzaG90ID0gdGhpcy5zbmFwc2hvdDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpemUgc2VsZWN0aW9uXHJcbiAgICB0aGlzLnNlbGVjdGlvbiA9IG5ldyBTZWxlY3RhYmxlTW9kZWw8YW55LCBzdHJpbmc+KHRydWUsICdkb2N1bWVudElkJyk7XHJcblxyXG4gICAgLy8gT2JzZXJ2ZSBsYXlvdXQgY2hhbmdlc1xyXG4gICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXJcclxuICAgICAgLm9ic2VydmUoW1xyXG4gICAgICAgIEJyZWFrcG9pbnRzLlhTbWFsbCxcclxuICAgICAgICBCcmVha3BvaW50cy5TbWFsbCxcclxuICAgICAgICBCcmVha3BvaW50cy5NZWRpdW0sXHJcbiAgICAgICAgQnJlYWtwb2ludHMuTGFyZ2UsXHJcbiAgICAgICAgQnJlYWtwb2ludHMuWExhcmdlLFxyXG4gICAgICBdKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICBmb3IgKGNvbnN0IHF1ZXJ5IG9mIE9iamVjdC5rZXlzKHJlc3VsdC5icmVha3BvaW50cykpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQuYnJlYWtwb2ludHNbcXVlcnldKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAvLyBSZWFjdCB0byB3aW5kb3cgc2l6ZSBjaGFuZ2VcclxuICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSksIGRlYm91bmNlVGltZSg1MDApKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLy8gSGFuZGxlIGZpbHRlciBwYW5lIFxyXG4gICAgICB0aGlzLmhhbmRsZUZpbHRlclBhbmVWaXNpYmlsaXR5KCk7XHJcbiAgICAgIC8vIEhhbmRsZSBmYWNldHNcclxuICAgICAgaWYgKHRoaXMuZmFjZXRzKSB7XHJcbiAgICAgICAgdGhpcy5mYWNldHMuY2hhbmdlZFxyXG4gICAgICAgICAgLnN1YnNjcmliZSgodmFsdWU6IENsaXBwZXJTZWFyY2hGYWNldHNTbmFwc2hvdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNuYXBzaG90LmZhY2V0cyA9IHZhbHVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMuZnJvbURhdGUpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSA9IHRoaXMuc25hcHNob3QuZmFjZXRzLmZyb21EYXRlO1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLnRvRGF0ZSA9IHRoaXMuc25hcHNob3QuZmFjZXRzLnRvRGF0ZTtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy55ZWFyID0gdGhpcy5zbmFwc2hvdC5mYWNldHMuZnJvbURhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cy5jaGFuZ2VkSW50ZXJ2YWwpIHtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy55ZWFyID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy5mcm9tRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMudG9EYXRlID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMuc2VjdG9yIHx8IHRoaXMuc25hcHNob3QuZmFjZXRzLmNoYW5nZWRTZWN0b3IpXHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJQYXJhbXMuc2VjdG9yID0gdGhpcy5zbmFwc2hvdC5mYWNldHMuc2VjdG9yO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zbmFwc2hvdC5mYWNldHMudHlwZSB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cy5jaGFuZ2VkVHlwZSlcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhcmFtcy50eXBlID0gdGhpcy5zbmFwc2hvdC5mYWNldHMudHlwZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QuZmFjZXRzLmF1dGhvciB8fCB0aGlzLnNuYXBzaG90LmZhY2V0cy5jaGFuZ2VkQXV0aG9yKVxyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyUGFyYW1zLmF1dGhvciA9IHRoaXMuc25hcHNob3QuZmFjZXRzLmF1dGhvcjtcclxuICAgICAgICAgICAgdGhpcy5mZXRjaCh0cnVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LCAwKTtcclxuICAgIHRoaXMuZmV0Y2godHJ1ZSk7XHJcbiAgICB0aGlzLnJlc3RvcmVGYWNldHMoKTtcclxuICAgIHRoaXMucmVzaXplKCk7XHJcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2l6ZSBcclxuICAgKi9cclxuICBwcml2YXRlIHJlc2l6ZSgpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjbGlwcGVyLXJlZmVyZW5jZXMtc2Nyb2xsYWJsZScpO1xyXG4gICAgICBpZiAoZWxlbSkge1xyXG4gICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuZGlhbG9nU2VydmljZS5nZXRDdXJyZW50RGlhbG9nU2Nyb2xsYWJsZUhlaWdodChcclxuICAgICAgICAgIFsnY2xpcHBlci1yZWZlcmVuY2VzLWZpeGVkJ10sXHJcbiAgICAgICAgICB3aW5kb3cuaW5uZXJIZWlnaHRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChoZWlnaHQgIT0gdGhpcy5oZWlnaHQpIHtcclxuICAgICAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdzdHlsZScsICdwYWRkaW5nOiAyMHB4IDAgMCAwOycgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudDttYXgtaGVpZ2h0OicgKyBoZWlnaHQgKyAncHggIWltcG9ydGFudCcpO1xyXG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcbiAgICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFNob3cgaGlkZSBmaWx0ZXIgcGFuZSBtYW51YWxseVxyXG4gKi9cclxuICBwcm90ZWN0ZWQgdG9nZ2xlRmlsdGVyUGFuZSgpIHtcclxuICAgIHRoaXMuZmlsdGVyUGFuZUNsb3NlZCA9ICF0aGlzLmZpbHRlclBhbmVDbG9zZWQ7XHJcbiAgICB0aGlzLmZpbHRlclBhbmU/LnRvZ2dsZSgpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGUgZmlsdGVyIHBhbmUgdmlzaWJpbGl0eVxyXG4gICAqL1xyXG4gIHByaXZhdGUgaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKSB7XHJcbiAgICBpZiAodGhpcy5maWx0ZXJQYW5lKSB7XHJcbiAgICAgIGlmICh0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuWFNtYWxsKSB8fFxyXG4gICAgICAgIHRoaXMuYnJlYWtwb2ludE9ic2VydmVyLmlzTWF0Y2hlZChCcmVha3BvaW50cy5TbWFsbCkgfHxcclxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuTWVkaXVtKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclBhbmUub3BlbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLm1vZGUgPSAnb3Zlcic7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJQYW5lLmRpc2FibGVDbG9zZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyUGFuZUhhc0JhY2tkcm9wID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmlsdGVyUGFuZS5vcGVuZWQgJiYgIXRoaXMuZmlsdGVyUGFuZUNsb3NlZCAmJiB0aGlzLmhhc0ZhY2V0cygpKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlclBhbmUub3BlbigpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5maWx0ZXJQYW5lLm9wZW5lZCAmJiB0aGlzLmZpbHRlclBhbmVDbG9zZWQpIHtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyUGFuZS5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUubW9kZSA9ICdzaWRlJztcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmUuZGlzYWJsZUNsb3NlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZpbHRlclBhbmVIYXNCYWNrZHJvcCA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2UgZGlhbG9nXHJcbiAgICovXHJcbiAgY2xvc2UoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICAvKipcclxuICAgKiBTZW5kIGRvY3VtZW50IGxpbmtzIGJ5IGVtYWlsXHJcbiAgICogQHBhcmFtIGl0ZW0gOiB0aGUgaXRlbSB0byBhZGRcclxuICAgKi9cclxuICBzZW5kVG8oaXRlbTogYW55ID0gbnVsbCkge1xyXG4gICAgdGhpcy5zZW5kSXRlbXNUbyhpdGVtID8gW2l0ZW1dIDogdGhpcy5zZWxlY3Rpb24/LmFsbCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQZXJmb3JtIGEgc2VhcmNoXHJcbiAgICogQHBhcmFtIG5ld1NlYXJjaDogdHJ1ZSBpZiBpcyBhIG5ldyBzZWFyY2hcclxuICAgKi9cclxuICBmZXRjaChuZXdTZWFyY2g6IGJvb2xlYW4gPSBmYWxzZSkge1xyXG4gICAgaWYgKCF0aGlzLmNsaXBwZXJTZXJ2aWNlLmxvZ2dlZEluKSByZXR1cm47XHJcbiAgICBpZiAobmV3U2VhcmNoKSB0aGlzLmZpbHRlclBhcmFtcy5maXJzdCA9IDA7XHJcbiAgICB0aGlzLmZpbHRlclBhcmFtcy51c2VNb2RpZmllckluZm8gPVxyXG4gICAgICB0aGlzLmZpbHRlclBhcmFtcy5tb2RlID09PSBDbGlwcGVyUXVlcnlSZWZlcmVuY2VzTW9kZS5DaGFuZ2VzT3V0O1xyXG4gICAgdGhpcy5maWx0ZXJQYXJhbXMucmV0dXJuTW9kaWZpZXJJbmZvID1cclxuICAgICAgdGhpcy5maWx0ZXJQYXJhbXMubW9kZSAhPT0gQ2xpcHBlclF1ZXJ5UmVmZXJlbmNlc01vZGUuQ2hhbmdlc091dDtcclxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5KCdSaWNlcmNhIGluIGNvcnNvLi4uJyk7XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnJlZmVyZW5jZXModGhpcy5maWx0ZXJQYXJhbXMudG9SZWZlcmVuY2VzU2VhcmNoUGFyYW1zKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXIuc3VjY2VzcykgdGhpcy5kaWFsb2dTZXJ2aWNlLmVycm9yKHIubWVzc2FnZSk7XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlUmVzdWx0cyhyLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICAgIC8vIEhhbmRsZSBmYWNldHNcclxuICAgICAgICAgICAgaWYgKHRoaXMuc25hcHNob3QudG90YWwgPiAwKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG5ld1NlYXJjaClcclxuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBmYWNldHNcclxuICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hGYWNldHMoKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmZhY2V0cz8ucmVzZXQoKTtcclxuICAgICAgICAgICAgICB0aGlzLmZpbHRlclBhbmUuY2xvc2UoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKG5ld1NlYXJjaCkge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRvcikgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zY3JvbGwoMCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNsZWFyQnVzeSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTaG93IGEgbmV3IHBhZ2UgcmVzdWx0XHJcbiAgICogQHBhcmFtIGUgOiB0aGUgTWF0UGFnaW5hdG9yIFBhZ2VFdmVudCBkYXRhXHJcbiAgICovXHJcbiAgZmV0Y2hNb3JlKGU6IGFueSkge1xyXG4gICAgbGV0IGZpcnN0ID0gZS5wYWdlSW5kZXggKiB0aGlzLmZpbHRlclBhcmFtcy5jb3VudDtcclxuICAgIHRoaXMuZmlsdGVyUGFyYW1zLmZpcnN0ID0gZmlyc3Q7XHJcbiAgICB0aGlzLmZldGNoKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgZmFjZXRzXHJcbiAgICovXHJcbiAgZmV0Y2hGYWNldHMoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2xpcHBlclNlcnZpY2UubG9nZ2VkSW4pIHJldHVybjtcclxuICAgIGlmICghdGhpcy5zbmFwc2hvdC5mYWNldHMgfHwgdGhpcy5zbmFwc2hvdC5mYWNldHM/Lmhhc01vcmVGYWNldHMpIHtcclxuICAgIHRoaXMuZmlsdGVyQnVzeS5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLmNsaXBwZXJTZXJ2aWNlLnJlZmVyZW5jZXNGYWNldHModGhpcy5maWx0ZXJQYXJhbXMudG9SZWZlcmVuY2VzU2VhcmNoUGFyYW1zKCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyKSA9PiB7XHJcbiAgICAgICAgICBpZiAoci5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMucHJlcGFyZVJlc3VsdHMobnVsbCwgci52YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlckJ1c3kuc2V0KGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIFRyeSB0byByZXN0b3JlIHN0b3JlZCBmYWNldHNcclxuICovXHJcbiAgcmVzdG9yZUZhY2V0cygpIHtcclxuICAgIGlmICh0aGlzLnNuYXBzaG90LmZhY2V0cykge1xyXG4gICAgICB0aGlzLmZhY2V0cy5yZXN0b3JlKHRoaXMuc25hcHNob3QuZmFjZXRzKTtcclxuICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJQYW5lVmlzaWJpbGl0eSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xvc2UgY3VycmVudCBkaWFsb2cgYW5kIHJldHVybiB0aGUgaWQgdG8gbmF2aWdhdGUgdG9cclxuICAgKiBAcGFyYW0gZG9jdW1lbnRJZCA6IHRoZSBkb2N1bWVudCBpZFxyXG4gICAqL1xyXG4gIG9wZW4oZG9jdW1lbnRJZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7IGlkOiBkb2N1bWVudElkIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2xpcHBlci1yZWZlcmVuY2VzLWZpeGVkXCI+XHJcbiAgPGRpdiBpZD1cImNsaXBwZXItcmVmZXJlbmNlcy1oZWFkZXJcIj5cclxuICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCIgZnhMYXlvdXRHYXA9JzEwcHgnIGZ4RmlsbD5cclxuICAgICAgPGRpdiBmeEZsZXg9XCIqXCI+XHJcbiAgICAgICAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+e3t0aXRsZX19IDwvaDI+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cclxuICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwic3RhcnRcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJDaGl1ZGlcIiBhcmlhLWxhYmVsPVwiQ2hpdWRpXCJcclxuICAgICAgICAgIChjbGljayk9XCJjbG9zZSgpXCIgY2xhc3M9XCJkaWFsb2ctY2xvc2VcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICBAaWYgKGRpYWxvZ0RhdGEubW9kZSA+IDAgfHwgc2VsZWN0aW9uPy5oYXNWYWx1ZSgpIHx8IChzbmFwc2hvdCAmJiBzbmFwc2hvdC5mYWNldHM/Lmhhc0ZhY2V0cyAmJiBmaWx0ZXJQYW5lICYmXHJcbiAgICAoIWZpbHRlclBhbmUub3BlbmVkIHx8IGZpbHRlclBhbmVDbG9zZWQpKSkge1xyXG4gICAgPGRpdiBzdHlsZT1cInBhZGRpbmc6IDAgMTBweCAwIDI0cHg7IGhlaWdodDogNDhweDsgbWluLWhlaWdodDogNDhweDtcIj5cclxuICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICAgICAgPGRpdiBmeEZsZXg9XCIqXCI+XHJcbiAgICAgICAgICBAaWYgKGRpYWxvZ0RhdGEubW9kZSA9PT0gMSkge1xyXG4gICAgICAgICAgPG1hdC1zbGlkZS10b2dnbGUgbmFtZT1cImV4Y2x1ZGVUZXh0UmVmZXJlbmNlc1wiIFsobmdNb2RlbCldPVwiZmlsdGVyUGFyYW1zLmV4Y2x1ZGVUZXh0UmVmZXJlbmNlc1wiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwiZmV0Y2godHJ1ZSlcIj5cclxuICAgICAgICAgICAgTW9zdHJhIHNvbG8gc2UgY2l0YXRpIG5lbGxlIG5vdGVcclxuICAgICAgICAgIDwvbWF0LXNsaWRlLXRvZ2dsZT5cclxuICAgICAgICAgIH0gQGVsc2UgaWYgKGRpYWxvZ0RhdGEubW9kZSA9PSAyKSB7XHJcbiAgICAgICAgICA8bWF0LXNsaWRlLXRvZ2dsZSBuYW1lPVwiZXhjbHVkZU5vdGVzUmVmZXJlbmNlc1wiIFsobmdNb2RlbCldPVwiZmlsdGVyUGFyYW1zLmV4Y2x1ZGVOb3Rlc1JlZmVyZW5jZXNcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cImZldGNoKHRydWUpXCI+XHJcbiAgICAgICAgICAgIE1vc3RyYSBzb2xvIHNlIGNpdGFubyBuZWwgdGVzdG8gaWwgZG9jdW1lbnRvXHJcbiAgICAgICAgICA8L21hdC1zbGlkZS10b2dnbGU+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiZW5kXCI+XHJcbiAgICAgICAgICBAaWYgKHNlbGVjdGlvbj8uaGFzVmFsdWUoKSkge1xyXG4gICAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIHR5cGU9XCJidXR0b25cIiBtYXQtYnV0dG9uXHJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBemlvbmkgZGEgZXNlZ3VpcmUgc3VnbGkgZWxlbWVudGkgc2VsZXppb25hdGlcIlxyXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidNZW51IG9wemlvbmkgcGVyIGVsZW1lbnRpIHNlbGV6aW9uYXRpJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJtZW51U2VsZWN0aW9uc1wiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc25hcHNob3QudG90YWxcIj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGFyaWEtaGlkZGVuPVwiZmFsc2VcIiBbbWF0QmFkZ2VdPVwic2VsZWN0aW9uPy5hbGwubGVuZ3RoXCJcclxuICAgICAgICAgICAgICBtYXRCYWRnZUNvbG9yPVwiYWNjZW50XCI+cGxheWxpc3RfYWRkX2NoZWNrPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiaWNvbi1tZW51LWRyb3AtZG93blwiPmV4cGFuZF9tb3JlPC9tYXQtaWNvbj5cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgPG1hdC1tZW51ICNtZW51U2VsZWN0aW9ucz1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgPGNsaXBwZXItZG9jdW1lbnQtbWVudSBbcGFyZW50XT1cInRoaXNcIiBbc2VsZWN0aW9uU291cmNlXT1cInNlbGVjdGlvblwiIFtpc1JlYWRhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICBbaXNSZWZlcmVuY2VdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICA8L2NsaXBwZXItZG9jdW1lbnQtbWVudT5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgICBAaWYgKHNuYXBzaG90ICYmIHNuYXBzaG90LmZhY2V0cz8uaGFzRmFjZXRzICYmIGZpbHRlclBhbmUgJiYgKCFmaWx0ZXJQYW5lLm9wZW5lZCB8fCBmaWx0ZXJQYW5lQ2xvc2VkKSkge1xyXG4gICAgICAgICAgPGRpdiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkFmZmluYSByaWNlcmNhXCIgYXJpYS1sYWJlbD1cIidBZmZpbmEgcmljZXJjYSdcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJQYW5lKClcIj5cclxuICAgICAgICAgICAgICA8bWF0LWljb24+bWVudV9vcGVuPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgbWF0LWRpYWxvZy1jb250ZW50IGlkPVwiY2xpcHBlci1yZWZlcmVuY2VzLXNjcm9sbGFibGVcIj5cclxuICA8bWF0LWRyYXdlci1jb250YWluZXIgY2xhc3M9XCJmaWxsXCIgW2hhc0JhY2tkcm9wXT1cImZpbHRlclBhbmVIYXNCYWNrZHJvcFwiPlxyXG4gICAgPG1hdC1kcmF3ZXIgI2ZpbHRlclBhbmUgcG9zaXRpb249XCJlbmRcIiBjbGFzcz1cImRyYXdlci1zbWFsbCBkcmF3ZXItd2l0aC1sb2FkZXJcIj5cclxuICAgICAgQGlmIChmaWx0ZXJCdXN5KCkpIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj48L2Rpdj5cclxuICAgICAgfVxyXG4gICAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiNnB4XCI+XHJcbiAgICAgICAgICBAaWYgKGZpbHRlckJ1c3koKSkge1xyXG4gICAgICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgc3R5bGU9XCJ6LWluZGV4OiAxMTtcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPlxyXG4gICAgICAgICAgPC9tYXQtcHJvZ3Jlc3MtYmFyPlxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgZnhGbGV4PVwiNTZweFwiIGNsYXNzPVwidGl0bGUtY29udGFpbmVyLXdpdGgtbG9hZGVyXCI+XHJcbiAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsPlxyXG4gICAgICAgICAgICA8ZGl2IGZ4RmxleEFsaWduPVwiY2VudGVyXCIgY2xhc3M9XCJ0aXRsZVwiPkFmZmluYSByaWNlcmNhPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4TGF5b3V0QWxpZ249XCJlbmRcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uIGZ4RmxleEFsaWduPVwiY2VudGVyXCIgbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJ0b2dnbGVGaWx0ZXJQYW5lKClcIlxyXG4gICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIk5hc2NvbmRpXCI+PG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBjbGFzcz1cInNjcm9sbC1oaWRkZW5cIj5cclxuICAgICAgICAgIDxjbGlwcGVyLXNlYXJjaC1mYWNldHMgI2ZhY2V0cz48L2NsaXBwZXItc2VhcmNoLWZhY2V0cz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L21hdC1kcmF3ZXI+XHJcbiAgICA8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhGaWxsPlxyXG4gICAgICA8ZGl2IGZ4RmxleD1cIipcIiBbaWRdPVwic2Nyb2xsZXJJZFwiIGNsYXNzPVwic2Nyb2xsLWF1dG9cIiBzdHlsZT1cInBhZGRpbmc6IDAgNXB4O1wiPlxyXG4gICAgICAgIEBpZiAoIXNuYXBzaG90LnRvdGFsKSB7XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxwIGNsYXNzPVwibWVzc2FnZVwiPjxpPk5lc3N1biBlbGVtZW50byBkYSB2aXN1YWxpenphcmUuPC9pPjwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgQGZvciAoaXRlbSBvZiBzbmFwc2hvdC5pdGVtczsgdHJhY2sgJGluZGV4OyBsZXQgaSA9ICRpbmRleCkge1xyXG4gICAgICAgICAgQGlmIChpdGVtLmdyb3VwKSB7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXMtZ3JvdXAtdGl0bGVcIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2dyb3VwLXNwYWNlZCc6IGkgPiAwfVwiPnt7aXRlbS5ncm91cH19PC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIDxkaXYgKGNvbnRleHRtZW51KT1cIm9uQ29udGV4dE1lbnUoJGV2ZW50LCBpdGVtKVwiIChtb3VzZWVudGVyKT1cIml0ZW0uaXNPdmVyID0gdHJ1ZVwiXHJcbiAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIml0ZW0uaXNPdmVyID0gZmFsc2VcIj5cclxuICAgICAgICAgICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiNnB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbCBjbGFzcz1cIml0ZW1cIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaXRlbS1zZWxlY3RlZCc6IHNlbGVjdGlvbj8uaXNTZWxlY3RlZChpdGVtLmRvY3VtZW50SWQpIH1cIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIjU0cHhcIiBmeExheW91dEFsaWduPVwiY2VudGVyXCIgc3R5bGU9XCJwYWRkaW5nLWxlZnQ6IDZweDtcIj5cclxuICAgICAgICAgICAgICAgIEBpZiAoc2NyZWVuU2VydmljZS5pc1RvdWNoYWJsZSB8fCBpdGVtLmlzT3ZlciB8fCBzZWxlY3Rpb24/LmlzU2VsZWN0ZWQoaXRlbS5kb2N1bWVudElkKSkge1xyXG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveCAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCIkZXZlbnQgPyBzZWxlY3Rpb24/LnRvZ2dsZShpdGVtLCBpdGVtLmRvY3VtZW50SWQpIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cInNlbGVjdGlvbj8uaXNTZWxlY3RlZChpdGVtLmRvY3VtZW50SWQpXCI+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIGNsYXNzPVwiaXRlbS1jb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8Y2xpcHBlci1zZWFyY2gtcmVzdWx0LWl0ZW0gW2l0ZW1dPVwiaXRlbVwiIFtwYXJlbnRdPVwidGhpc1wiPjwvY2xpcHBlci1zZWFyY2gtcmVzdWx0LWl0ZW0+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPGRpdiBmeEZsZXg9XCI0OHB4XCIgZnhMYXlvdXRBbGlnbj1cImVuZFwiPlxyXG4gICAgICAgICAgICAgICAgQGlmIChpdGVtLmlzT3ZlciB8fCBpdGVtLmlzTWVudU9wZW4gfHwgc2VsZWN0aW9uPy5pc1NlbGVjdGVkKGl0ZW0uZG9jdW1lbnRJZCkpIHtcclxuICAgICAgICAgICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJjZW50ZXJcIiB0eXBlPVwiYnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJNZW51XCJcclxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInTWVudSBvcHppb25pJ1wiIFttYXRNZW51VHJpZ2dlckZvcl09XCJjb250ZXh0TWVudVwiXHJcbiAgICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCIgKGNsaWNrKT1cIml0ZW0uaXNNZW51T3BlbiA9IHRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPm1vcmVfdmVydDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8ZGl2ICNjb250ZXh0TWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiIHN0eWxlPVwicG9zaXRpb246IGZpeGVkXCIgW3N0eWxlLmxlZnRdPVwiY29udGV4dE1lbnVQb3NpdGlvbi54XCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS50b3BdPVwiY29udGV4dE1lbnVQb3NpdGlvbi55XCIgW21hdE1lbnVUcmlnZ2VyRm9yXT1cImNvbnRleHRNZW51XCJcclxuICAgICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckRhdGFdPVwie2l0ZW06IGl0ZW19XCI+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICA8bWF0LW1lbnUgI2NvbnRleHRNZW51PVwibWF0TWVudVwiIChjbG9zZWQpPVwidXBkYXRlTWVudUJ1dHRvbnNWaXNpYmlsaXR5KClcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdE1lbnVDb250ZW50IGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgIDxjbGlwcGVyLWRvY3VtZW50LW1lbnUgW3BhcmVudF09XCJ0aGlzXCIgW2l0ZW1dPVwiaXRlbVwiIFtpc1JlYWRhYmxlXT1cImZhbHNlXCIgW2lzUmVmZXJlbmNlXT1cInRydWVcIj5cclxuICAgICAgICAgICAgICA8L2NsaXBwZXItZG9jdW1lbnQtbWVudT5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBmb290ZXIgLS0+XHJcbiAgICAgIEBpZiAoKHNuYXBzaG90Py50b3RhbCA/PyAwKSA+IDApIHtcclxuICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zLWZvb3RlclwiPlxyXG4gICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeExheW91dEFsaWduPVwiZW5kIGNlbnRlclwiIGZ4RmlsbD5cclxuICAgICAgICAgIDxtYXQtcGFnaW5hdG9yICNwYWdpbmF0b3IgY2xhc3M9XCJwYWdpbmF0b3JcIiBbaGlkZVBhZ2VTaXplXT1cInRydWVcIiBbbGVuZ3RoXT1cInNuYXBzaG90Py50b3RhbCA/PyAwXCJcclxuICAgICAgICAgICAgW3BhZ2VTaXplXT1cImZpbHRlclBhcmFtcy5jb3VudCA/PyAxNVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJ0cnVlXCIgKHBhZ2UpPVwiZmV0Y2hNb3JlKCRldmVudClcIj5cclxuICAgICAgICAgIDwvbWF0LXBhZ2luYXRvcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gIDwvbWF0LWRyYXdlci1jb250YWluZXI+XHJcbjwvZGl2PiJdfQ==