@arsedizioni/ars-utils 18.4.33 → 18.4.35

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.
@@ -671,7 +671,7 @@ export class ClipperDocumentComponent extends ClipperDocumentManager {
671
671
  }
672
672
  }
673
673
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClipperDocumentComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
674
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ClipperDocumentComponent, isStandalone: true, selector: "ng-component", outputs: { closing: "closing", opening: "opening" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, viewQueries: [{ propertyName: "relevantsPane", first: true, predicate: ["relevantsPane"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"clipper-document-fixed\">\r\n <div style=\"height:6px\">\r\n @if (busy()) {\r\n <mat-progress-bar style=\"z-index:11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start start\" fxFill>\r\n <div fxFlex=\"*\" class=\"title-container\">\r\n <div class=\"title bold\">{{title()}}</div>\r\n @if (lastDocument && lastDocument?.lastUpdate) {\r\n <div style=\"padding-top: 5px;\">\r\n <div class=\"x-small accent bold uppercase\">\r\n AGGIORNATO A:\r\n {{lastDocument?.lastUpdate}}\r\n </div>\r\n </div>\r\n }\r\n @if (lastDocument && (lastDocument?.expiringDescription || lastDocument?.validityInfo)) {\r\n <div style=\"padding-top: 5px;\">\r\n @if (lastDocument?.expiringDescription) {\r\n <div class=\"x-small accent-low bold uppercase\">\r\n {{lastDocument?.expiringDescription}}</div>\r\n }\r\n @if (lastDocument?.validityInfo) {\r\n <div class=\"x-small error bold uppercase\"><b>Attenzione!</b>\r\n {{lastDocument?.validityInfo}}</div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if (canSelect()) {\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\" style=\"margin-top: 8px;\">\r\n <span class=\"small uppercase\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-icon-button (click)=\"select()\"\r\n class=\"clipper-selection-icon-button\" matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\"\r\n style=\"margin-top: 4px;\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"164px\" fxFlex.lt-md=\"48px\" fxLayoutAlign=\"end\">\r\n <div class=\"dialog-close\">\r\n <button fxHide.lt-md fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\"\r\n aria-label=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n <button fxHide.lt-md fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Avanti\" aria-label=\"Avanti\"\r\n (click)=\"forward()\">\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row wrap \" fxFill fxLayoutAlign=\"space-between center\" style=\"padding: 10px 10px 10px 15px;\">\r\n <div fxFlex.xs=\"100\">\r\n @if (lastDocument?.model === 9) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"index(lastDocument?.documentId)\">\r\n Indice\r\n </button>\r\n }\r\n @if (lastDocument?.bag && (lastDocument?.bag[1] ==='T' || lastDocument?.bag[3] ==='T')) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button matTooltip=\"Collegamenti\"\r\n [attr.aria-label]=\"'Collegamenti al documento'\" [matMenuTriggerFor]=\"menuLinks\">\r\n Collegamenti\r\n </button>\r\n }\r\n <mat-menu #menuLinks=\"matMenu\">\r\n @if (lastDocument?.bag && lastDocument?.bag[1] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti richiamati'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[3] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti che richiamano'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[2] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra juris'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche subite'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] !=='T' && lastDocument?.bag[6] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche apportate'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n </mat-menu>\r\n @if (lastDocument?.hasPrimary) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button\r\n [attr.aria-label]=\"'Mostra documento primario'\" (click)=\"navigate(lastDocument?.primaryId)\">\r\n {{lastDocument?.primaryDescription}}\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[2] ==='T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra juris'\" (click)=\"openReferences(lastDocument?.documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] === 'T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra modifiche subite'\" (click)=\"openReferences(lastDocument?.documentId, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] !== 'T' && lastDocument?.bag[6] === 'T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra modifiche apportate'\" (click)=\"openReferences(lastDocument?.documentId, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n @if (lastDocument?.secondaryId) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button\r\n [attr.aria-label]=\"'Mostra documento secondario'\" (click)=\"navigate(lastDocument?.secondaryId)\">\r\n Testo storico\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[7] === 'T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra commento'\"\r\n (click)=\"showComment()\">\r\n Commento\r\n </button>\r\n }\r\n </div>\r\n <div fxFlex.xs=\"100\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (hasRelevants() && relevants.hits) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n <div fxFlexAlign=\"center\" class=\"small item-greyed\" style=\"margin-left:20px; margin-right: 5px\"\r\n matTooltip=\"Parole evidenziate\">{{relevants.hit}}\r\n di {{relevants.hits}}</div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla parola precedente'\"\r\n (click)=\"previousRelevant()\" matTooltip=\"Parola precedente\" [disabled]=\"relevants.hit <= 1\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla prossima parola'\"\r\n (click)=\"nextRelevant()\" matTooltip=\"Prossima parola\" [disabled]=\"relevants.hit >= relevants.hits\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azioni sul documento\"\r\n [attr.aria-label]=\"'Azioni da eseguire sul documento'\" [matMenuTriggerFor]=\"menuActions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menuActions=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"lastDocument\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"lastDocument\" [canPrint]=\"true\" [canFind]=\"true\" [isReadable]=\"false\"\r\n [isLawInForce]=\"lastDocument?.model === 9\" selectionSource=\"none\">\r\n </clipper-document-menu>\r\n </ng-template> \r\n </mat-menu>\r\n @if (hasRelevants() && relevants.items && relevantsPane && (!relevantsPane.opened || relevantsPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Rilevanza\" aria-label=\"'Rilevanza'\"\r\n (click)=\"toggleRelevantsPane()\">\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</div>\r\n<mat-dialog-content id=\"clipper-document-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"[relevantsPaneHasBackdrop]\">\r\n <mat-drawer #relevantsPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (relevantsBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (relevantsBusy()) {\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\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"title\">Rilevanza</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-icon-button (click)=\"toggleRelevantsPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"relevants-container scroll-auto\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div>\r\n <p>Parti del documento pi\u00F9 significative per la ricerca di <span class='word-hit'>{{lastQuery}}</span>\r\n </p>\r\n </div>\r\n <div fxFlex=\"*\">\r\n <nav class=\"relevants-items\">\r\n <ul>\r\n @for (item of relevants.items; track $index) {\r\n <li class=\"small\" (click)=\"gotoRelevant(item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\">\r\n {{item.title}}\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (item.score > 1.2) {\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div class=\"fill scroll-hidden\">\r\n <iframe id=\"clipper-document-iframe\" class=\"iframe\" [src]=\"url() | safeUrl\"></iframe>\r\n </div>\r\n </mat-drawer-container>\r\n</mat-dialog-content>", 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-header{padding-bottom:20px}.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;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important;line-height:16px}.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;line-height:14px}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-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 .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width: 0px) and (max-width: 430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width: 431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.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}}.clipper-logo{background-size:110px 48px;width:110px;height:48px}.clipper-selection-button{width:150px;font-size:small;font-weight:600;text-transform:uppercase}.clipper-selection-icon-button{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.clipper-selection-icon-button:hover{background-color:var(--ars-color-primary-hi, #12c0ae)}.unread{color:var(--ars-color-error, #ff5449)!important}.expired{color:var(--ars-color-error-low, #a80710)!important}.expiring{color:var(--ars-color-warning, #FFC107)!important}.closed{color:var(--ars-color-ok, #388E3C)!important}.unread-bg{background-color:var(--ars-color-error, #ff5449)}.error-bg,.expired-bg{background-color:var(--ars-color-error-low, #a80710)}.expiring-bg{background-color:var(--ars-color-warning, #FFC107)}.popular-bg,.closed-bg{background-color:var(--ars-color-ok, #388E3C)!important}.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-color-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 6px 10px 0;min-height:68px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item:hover .item-content{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.item-content .info-1{font-size:x-small!important;font-weight:700!important;line-height:15px;text-transform:uppercase!important;color:var(--ars-color-accent, #7894ae)}.item-content .info-2{font-size:x-small!important;font-weight:700!important;line-height:15px;text-transform:uppercase!important;color:var(--ars-color-accent-low, #456179)}.item-content .title{font-size:small!important;line-height:18px;text-decoration:none!important;font-weight:400;min-height:unset;min-width:unset;white-space:initial!important}@supports (-webkit-line-clamp: 3){.item-content .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.item-content .details{margin-top:4px;font-size:x-small!important;font-weight:700;line-height:15px;color:var(--ars-color-accent-low, #456179);text-transform:uppercase!important;border-left:4px solid var(--ars-color-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!important;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-color-link, #03A9F4);font-weight:600!important}.item-content a.link{color:var(--ars-color-link, #03A9F4);cursor:pointer!important;text-decoration:none!important}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer!important;padding:10px 13px!important;margin-bottom:5px!important}.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-color-error, #ff5449);margin:0 8px}.tile .image{height:150px;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!important;font-weight:700!important;text-transform:uppercase!important}.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-color-accent, #7894ae);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .image .buttons{position:absolute;left:0;top:0;height:42px}.tile .image .buttons .check,.tile .image .buttons .read{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .buttons .check-selected{background-color:var(--ars-color-primary-hi, #12c0ae)}.tile .date{padding:8px 0 6px!important;font-weight:700!important;text-transform:uppercase!important}.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-color-divider, #757d87)}.tile .time{font-size:small!important;font-weight:700!important}.tile .title{text-decoration:none!important;font-size:15px!important;font-weight:600;min-height:50px!important;max-height:70px!important;min-width:100%;white-space:initial!important;overflow:hidden!important}@supports (-webkit-line-clamp: 3){.tile .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:#427505;text-transform:uppercase;white-space:nowrap;color:#e0e2e5}.badge-red{background-color:#a80710}.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 .legend:not(:first-of-type){margin-left:10px}.special-date,.special-date-expired,.special-date-expiring{border:2px var(--ars-color-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-color-error, #ff5449) solid!important}.special-date-expiring{border:2px var(--ars-color-warning, #FFC107) solid!important}::ng-deep .mat-mdc-menu-panel{min-width:320px!important;max-width:320px!important}.title-container{padding-left:20px;padding-top:14px}.title-container .title{font-size:large}@supports (-webkit-line-clamp: 2){.title-container .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.dialog-close{margin-right:10px;margin-top:4px}.word-hit{font-size:inherit;background-color:var(--ars-word-hit-background-color, #FFEB3B);color:var(--ars-word-hit-color, #191c1b);padding:0 4px}.iframe{width:100%;height:100%;border:0}.relevants-container{padding:0 20px 10px}.relevants-items{padding:0;margin:0}.relevants-items ul{list-style-type:none;padding:0;margin:0}.relevants-items ul li{font-size:small;padding:6px 12px;display:block;color:var(--ars-color-text, #191c1b)}.relevants-items ul li a{color:inherit;text-decoration:none;display:block}.relevants-items ul li:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:6px;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: FlexLayoutModule }, { 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: i2.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i6.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: MatDividerModule }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i8.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i8.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "pipe", type: SafeUrlPipe, name: "safeUrl" }, { kind: "component", type: ClipperDocumentMenuComponent, selector: "clipper-document-menu", inputs: ["useSelections", "selectionSource", "parent", "item", "isReference", "isReadable", "isLawInForce", "canPrint", "canFind", "canUseCalendar", "canUseArchive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
674
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ClipperDocumentComponent, isStandalone: true, selector: "ng-component", outputs: { closing: "closing", opening: "opening" }, host: { attributes: { "Bind": SystemUtils.generateUUID() } }, viewQueries: [{ propertyName: "relevantsPane", first: true, predicate: ["relevantsPane"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"clipper-document-fixed\">\r\n <div style=\"height:6px\">\r\n @if (busy()) {\r\n <mat-progress-bar style=\"z-index:11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start start\" fxFill>\r\n <div fxFlex=\"*\" class=\"title-container\">\r\n <div class=\"title bold\">{{title()}}</div>\r\n @if (lastDocument && lastDocument?.lastUpdate) {\r\n <div style=\"padding-top: 5px;\">\r\n <div class=\"x-small accent bold uppercase\">\r\n AGGIORNATO A:\r\n {{lastDocument?.lastUpdate}}\r\n </div>\r\n </div>\r\n }\r\n @if (lastDocument && (lastDocument?.expiringDescription || lastDocument?.validityInfo)) {\r\n <div style=\"padding-top: 5px;\">\r\n @if (lastDocument?.expiringDescription) {\r\n <div class=\"x-small accent-low bold uppercase\">\r\n {{lastDocument?.expiringDescription}}</div>\r\n }\r\n @if (lastDocument?.validityInfo) {\r\n <div class=\"x-small error bold uppercase\"><b>Attenzione!</b>\r\n {{lastDocument?.validityInfo}}</div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n @if (canSelect()) {\r\n <div fxFlex=\"170px\" fxFlex.lt-md=\"58px\">\r\n <button fxHide.lt-md fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-flat-button (click)=\"select()\"\r\n class=\"clipper-selection-button\" style=\"margin-top: 8px;\">\r\n <span class=\"small uppercase\">Usa selezione</span>\r\n </button>\r\n <button fxHide.gt-sm fxFlexAlign=\"center\" type=\"button\" color=\"primary\" mat-icon-button (click)=\"select()\"\r\n class=\"clipper-selection-icon-button\" matTooltip=\"Usa selezione\" aria-label=\"'Usa la selezione'\"\r\n style=\"margin-top: 4px;\">\r\n <mat-icon>check</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"164px\" fxFlex.lt-md=\"48px\" fxLayoutAlign=\"end\">\r\n <div class=\"dialog-close\">\r\n <button fxHide.lt-md fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\"\r\n aria-label=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n <button fxHide.lt-md fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Avanti\" aria-label=\"Avanti\"\r\n (click)=\"forward()\">\r\n <mat-icon>arrow_forward</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" aria-label=\"Chiudi\"\r\n (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n <div fxLayout=\"row wrap \" fxFill fxLayoutAlign=\"space-between center\" style=\"padding: 10px 10px 10px 15px;\">\r\n <div fxFlex.xs=\"100\">\r\n @if (lastDocument?.model === 9) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"index(lastDocument?.documentId)\">\r\n Indice\r\n </button>\r\n }\r\n @if (lastDocument?.bag && (lastDocument?.bag[1] ==='T' || lastDocument?.bag[3] ==='T')) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button matTooltip=\"Collegamenti\"\r\n [attr.aria-label]=\"'Collegamenti al documento'\" [matMenuTriggerFor]=\"menuLinks\">\r\n Collegamenti\r\n </button>\r\n }\r\n <mat-menu #menuLinks=\"matMenu\">\r\n @if (lastDocument?.bag && lastDocument?.bag[1] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti richiamati'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[3] ==='T') {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra documenti che richiamano'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[2] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra juris'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche subite'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] !=='T' && lastDocument?.bag[6] ==='T') {\r\n <button fxHide fxShow.lt-md mat-menu-item [attr.aria-label]=\"'Mostra modifiche apportate'\"\r\n (click)=\"openReferences(lastDocument?.documentId, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n </mat-menu>\r\n @if (lastDocument?.hasPrimary) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button\r\n [attr.aria-label]=\"'Mostra documento primario'\" (click)=\"navigate(lastDocument?.primaryId)\">\r\n {{lastDocument?.primaryDescription}}\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[2] ==='T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra juris'\" (click)=\"openReferences(lastDocument?.documentId, 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] === 'T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra modifiche subite'\" (click)=\"openReferences(lastDocument?.documentId, 3)\">\r\n Modifiche subite\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[4] !== 'T' && lastDocument?.bag[6] === 'T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" fxHide.lt-md mat-button\r\n [attr.aria-label]=\"'Mostra modifiche apportate'\" (click)=\"openReferences(lastDocument?.documentId, 5)\">\r\n Modifiche apportate\r\n </button>\r\n }\r\n @if (lastDocument?.secondaryId) {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button\r\n [attr.aria-label]=\"'Mostra documento secondario'\" (click)=\"navigate(lastDocument?.secondaryId)\">\r\n Testo storico\r\n </button>\r\n }\r\n @if (lastDocument?.bag && lastDocument?.bag[7] === 'T') {\r\n <button fxFlexAlign=\"center\" color=\"primary\" type=\"button\" mat-button [attr.aria-label]=\"'Mostra commento'\"\r\n (click)=\"showComment()\">\r\n Commento\r\n </button>\r\n }\r\n </div>\r\n <div fxFlex.xs=\"100\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\">\r\n @if (hasRelevants() && relevants.hits) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n <div fxFlexAlign=\"center\" class=\"small item-greyed\" style=\"margin-left:20px; margin-right: 5px\"\r\n matTooltip=\"Parole evidenziate\">{{relevants.hit}}\r\n di {{relevants.hits}}</div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla parola precedente'\"\r\n (click)=\"previousRelevant()\" matTooltip=\"Parola precedente\" [disabled]=\"relevants.hit <= 1\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button [attr.aria-label]=\"'Vai alla prossima parola'\"\r\n (click)=\"nextRelevant()\" matTooltip=\"Prossima parola\" [disabled]=\"relevants.hit >= relevants.hits\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azioni sul documento\"\r\n [attr.aria-label]=\"'Azioni da eseguire sul documento'\" [matMenuTriggerFor]=\"menuActions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menuActions=\"matMenu\">\r\n <ng-template matMenuContent let-item=\"lastDocument\">\r\n <clipper-document-menu [parent]=\"this\" [item]=\"lastDocument\" [canPrint]=\"true\" [canFind]=\"true\" [isReadable]=\"false\"\r\n [isLawInForce]=\"lastDocument?.model === 9\" selectionSource=\"none\">\r\n </clipper-document-menu>\r\n </ng-template> \r\n </mat-menu>\r\n @if (hasRelevants() && relevants.items && relevantsPane && (!relevantsPane.opened || relevantsPaneClosed)) {\r\n <div fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Rilevanza\" aria-label=\"'Rilevanza'\"\r\n (click)=\"toggleRelevantsPane()\">\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</div>\r\n<mat-dialog-content id=\"clipper-document-scrollable\">\r\n <mat-drawer-container class=\"fill\" [hasBackdrop]=\"[relevantsPaneHasBackdrop]\">\r\n <mat-drawer #relevantsPane position=\"end\" class=\"drawer-small drawer-with-loader\" opened=\"false\">\r\n @if (relevantsBusy()) {\r\n <div class=\"overlay\"></div>\r\n }\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"6px\">\r\n @if (relevantsBusy()) {\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\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"title\">Rilevanza</div>\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-icon-button (click)=\"toggleRelevantsPane()\"\r\n matTooltip=\"Nascondi\"><mat-icon>close</mat-icon></button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" class=\"relevants-container scroll-auto\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div>\r\n <p>Parti del documento pi\u00F9 significative per la ricerca di <span class='word-hit'>{{lastQuery}}</span>\r\n </p>\r\n </div>\r\n <div fxFlex=\"*\">\r\n <nav class=\"relevants-items\">\r\n <ul>\r\n @for (item of relevants.items; track $index) {\r\n <li class=\"small\" (click)=\"gotoRelevant(item)\" [attr.aria-label]=\"item.title\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start start\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"*\">\r\n {{item.title}}\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (item.score > 1.2) {\r\n <mat-icon style='font-size:x-small; height: 10px; width:10px' color=\"primary\"\r\n matTooltip=\"Molto rilevante\">thumb_up_alt</mat-icon>\r\n }\r\n </div>\r\n </div>\r\n </li>\r\n }\r\n </ul>\r\n </nav>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <div class=\"fill scroll-hidden\">\r\n <iframe id=\"clipper-document-iframe\" class=\"iframe\" [src]=\"url() | safeUrl\"></iframe>\r\n </div>\r\n </mat-drawer-container>\r\n</mat-dialog-content>", 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-header{padding-bottom:20px}.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;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller}.small{font-size:small!important;line-height:16px}.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;line-height:14px}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-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 .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em;font-weight:600;padding-left:10px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width: 0px) and (max-width: 430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width: 431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.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}}.clipper-logo{background-size:110px 48px;width:110px;height:48px}.clipper-selection-button{width:150px;font-size:small;font-weight:600;text-transform:uppercase}.clipper-selection-icon-button{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.clipper-selection-icon-button:hover{background-color:var(--ars-color-primary-hi, #12c0ae)}.unread{color:var(--ars-color-error, #ff5449)!important}.expired{color:var(--ars-color-error-low, #a80710)!important}.expiring{color:var(--ars-color-warning, #FFC107)!important}.closed{color:var(--ars-color-ok, #388E3C)!important}.unread-bg{background-color:var(--ars-color-error, #ff5449)}.error-bg,.expired-bg{background-color:var(--ars-color-error-low, #a80710)}.expiring-bg{background-color:var(--ars-color-warning, #FFC107)}.popular-bg,.closed-bg{background-color:var(--ars-color-ok, #388E3C)!important}.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-color-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 6px 10px 0;min-height:68px!important;margin-bottom:2px}.item:hover{background-color:var(--ars-item-hover-background-color, #eaecef)}.item:hover .item-content{-webkit-mask-image:linear-gradient(to right,black 85%,transparent 100%);mask-image:linear-gradient(to right,black 85%,transparent 100%)}.item-content .info-1{font-size:x-small!important;font-weight:700!important;line-height:15px;text-transform:uppercase!important;color:var(--ars-color-accent, #7894ae)}.item-content .info-2{font-size:x-small!important;font-weight:700!important;line-height:15px;text-transform:uppercase!important;color:var(--ars-color-accent-low, #456179)}.item-content .title{font-size:small!important;line-height:18px;text-decoration:none!important;font-weight:400;min-height:unset;min-width:unset;white-space:initial!important}@supports (-webkit-line-clamp: 3){.item-content .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.item-content .details{margin-top:4px;font-size:x-small!important;font-weight:700;line-height:15px;color:var(--ars-color-accent-low, #456179);text-transform:uppercase!important;border-left:4px solid var(--ars-color-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!important;color:var(--ars-color-text, #191c1b)}.item-content .details .links a{cursor:pointer!important;color:var(--ars-color-link, #03A9F4);font-weight:600!important}.item-content a.link{color:var(--ars-color-link, #03A9F4);cursor:pointer!important;text-decoration:none!important}.tile:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:12px}.tile{cursor:pointer!important;padding:10px 13px!important;margin-bottom:5px!important}.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-color-error, #ff5449);margin:0 8px}.tile .image{height:150px;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!important;font-weight:700!important;text-transform:uppercase!important}.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-color-accent, #7894ae);font-size:small!important;font-weight:700!important;text-transform:uppercase!important}.tile .image .buttons{position:absolute;left:0;top:0;height:42px}.tile .image .buttons .check,.tile .image .buttons .read{background-color:var(--ars-color-primary, #00a293);color:var(--ars-color-text-low, #e0e2e5)}.tile .image .buttons .check-selected{background-color:var(--ars-color-primary-hi, #12c0ae)}.tile .date{padding:8px 0 6px!important;font-weight:700!important;text-transform:uppercase!important}.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-color-divider, #757d87)}.tile .time{font-size:small!important;font-weight:700!important}.tile .title{text-decoration:none!important;font-size:15px!important;font-weight:600;min-height:50px!important;max-height:70px!important;min-width:100%;white-space:initial!important;overflow:hidden!important}@supports (-webkit-line-clamp: 3){.tile .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical}}.badge,.badge-red{margin-left:10px;padding:1px 4px;border-radius:3px;font-size:x-small;font-weight:600;text-align:center;background-color:#427505;text-transform:uppercase;white-space:nowrap;color:#e0e2e5}.badge-red{background-color:#a80710}.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 .legend:not(:first-of-type){margin-left:10px}.special-date,.special-date-expired,.special-date-expiring{border:2px var(--ars-color-accent, #7894ae) solid!important;border-radius:100%!important}.special-date-expired{border:2px var(--ars-color-error, #ff5449) solid!important}.special-date-expiring{border:2px var(--ars-color-warning, #FFC107) solid!important}::ng-deep .mat-mdc-menu-panel{min-width:320px!important;max-width:320px!important}.title-container{padding-left:20px;padding-top:14px}.title-container .title{font-size:large}@supports (-webkit-line-clamp: 2){.title-container .title{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.dialog-close{margin-right:10px;margin-top:4px}.word-hit{font-size:inherit;background-color:var(--ars-word-hit-background-color, #FFEB3B);color:var(--ars-word-hit-color, #191c1b);padding:0 4px}.iframe{width:100%;height:100%;border:0}.relevants-container{padding:0 20px 10px}.relevants-items{padding:0;margin:0}.relevants-items ul{list-style-type:none;padding:0;margin:0}.relevants-items ul li{font-size:small;padding:6px 12px;display:block;color:var(--ars-color-text, #191c1b)}.relevants-items ul li a{color:inherit;text-decoration:none;display:block}.relevants-items ul li:hover{background-color:var(--ars-item-hover-background-color, #eaecef);border-radius:6px;cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: FlexLayoutModule }, { 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: i2.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i6.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i6.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i6.MatMenuContent, selector: "ng-template[matMenuContent]" }, { kind: "directive", type: i6.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: MatDividerModule }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i8.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i8.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "pipe", type: SafeUrlPipe, name: "safeUrl" }, { kind: "component", type: ClipperDocumentMenuComponent, selector: "clipper-document-menu", inputs: ["useSelections", "selectionSource", "parent", "item", "isReference", "isReadable", "isReadableModel", "isLawInForce", "canPrint", "canFind", "canUseCalendar", "canUseArchive"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
675
675
  }
676
676
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClipperDocumentComponent, decorators: [{
677
677
  type: Component,
@@ -41,6 +41,7 @@ export class ClipperDocumentMenuComponent {
41
41
  this.item = input();
42
42
  this.isReference = input(false);
43
43
  this.isReadable = input(true);
44
+ this.isReadableModel = input(ClipperModel.Unknown);
44
45
  this.isLawInForce = input(false);
45
46
  this.canPrint = input(false);
46
47
  this.canFind = input(false);
@@ -79,12 +80,12 @@ export class ClipperDocumentMenuComponent {
79
80
  this.canSetAsRead = () => {
80
81
  const items = this.getMultipleSelection();
81
82
  return this.isReadable() && (items.length > 1 || (items.length === 1 && items[0].isRead !== true &&
82
- ClipperUtils.isClipperModelReadable(items[0].model)));
83
+ ClipperUtils.isClipperModelReadable(this.isReadableModel() ?? items[0].model)));
83
84
  };
84
85
  this.canSetAsUnread = () => {
85
86
  const items = this.getMultipleSelection();
86
87
  return this.isReadable() && (items.length > 1 || (items.length === 1 && items[0].isRead === true &&
87
- ClipperUtils.isClipperModelReadable(items[0].model)));
88
+ ClipperUtils.isClipperModelReadable(this.isReadableModel() ?? items[0].model)));
88
89
  };
89
90
  this.canAccessRS = () => {
90
91
  const items = this.getMultipleSelection();
@@ -199,10 +200,10 @@ export class ClipperDocumentMenuComponent {
199
200
  }
200
201
  }
201
202
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClipperDocumentMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
202
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ClipperDocumentMenuComponent, isStandalone: true, selector: "clipper-document-menu", inputs: { useSelections: { classPropertyName: "useSelections", publicName: "useSelections", isSignal: true, isRequired: false, transformFunction: null }, selectionSource: { classPropertyName: "selectionSource", publicName: "selectionSource", isSignal: true, isRequired: false, transformFunction: null }, parent: { classPropertyName: "parent", publicName: "parent", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, isReference: { classPropertyName: "isReference", publicName: "isReference", isSignal: true, isRequired: false, transformFunction: null }, isReadable: { classPropertyName: "isReadable", publicName: "isReadable", isSignal: true, isRequired: false, transformFunction: null }, isLawInForce: { classPropertyName: "isLawInForce", publicName: "isLawInForce", isSignal: true, isRequired: false, transformFunction: null }, canPrint: { classPropertyName: "canPrint", publicName: "canPrint", isSignal: true, isRequired: false, transformFunction: null }, canFind: { classPropertyName: "canFind", publicName: "canFind", isSignal: true, isRequired: false, transformFunction: null }, canUseCalendar: { classPropertyName: "canUseCalendar", publicName: "canUseCalendar", isSignal: true, isRequired: false, transformFunction: null }, canUseArchive: { classPropertyName: "canUseArchive", publicName: "canUseArchive", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "rsMenuTrigger", first: true, predicate: ["rsMenuTrigger"], descendants: true, isSignal: true }, { propertyName: "linksMenuTrigger", first: true, predicate: ["linksMenuTrigger"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (canDeselectAll()) {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (canManageBag()) {\r\n<button mat-menu-item (click)=\"parent().openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\" (mouseenter)=\"showSubMenu()\"\r\n (click)=\"open(getSingleSelection())\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (canAddToWorkingDocuments()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(getMultipleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"parent().print()\" [attr.aria-label]=\"'Stampa documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <div>Stampa</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+P</div>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"parent().find()\" [attr.aria-label]=\"'Trova nel documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <div>Trova nel documento</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+F</div>\r\n </div>\r\n</button>\r\n}\r\n@if (canSendByEmail()) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(getMultipleSelection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (canAddToArchive()) {\r\n<button mat-menu-item (click)=\"parent().addToArchive(getMultipleSelection())\" [attr.aria-label]=\"'Archivia'\">\r\n <mat-icon>account_tree</mat-icon>Archivia\r\n</button>\r\n}\r\n@if (canSaveAsPdf()) {\r\n<button mat-menu-item (click)=\"parent().exportPdf(getSingleSelection())\" (mouseenter)=\"showSubMenu()\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Copia metadati negli appunti'\"\r\n (click)=\"parent().copyMetadataToClipboard(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>content_copy</mat-icon>Copia metadati\r\n</button>\r\n}\r\n@if (!isReference() && canOpen()) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\" #linksMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(linksMenuTrigger)\" (mouseleave)=\"resetSubMenu(linksMenuTrigger)\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"openReferences(getSingleSelection(), 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"openReferences(getSingleSelection(), 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n}\r\n@if (canAddToCalendar()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi al calendario'\"\r\n (click)=\"parent().addToCalendar(getSingleSelection())\">\r\n <mat-icon>alarm</mat-icon> Crea scadenza\r\n</button>\r\n}\r\n@if (canExportCalendar()) {\r\n@if(useSelections()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportResults(2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n} @else if (item()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportItems([item().documentId], null, 2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n}\r\n}\r\n@if (canSetAsUnread()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (canSetAsRead()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"setRead(true)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n</button>\r\n}\r\n\r\n\r\n@if (isLawInForce() && canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report'\" (click)=\"parent().report(getSingleSelection())\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n\r\n@if (canAccessRS()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"rsMenu\" #rsMenuTrigger=\"matMenuTrigger\" (mouseenter)=\"showSubMenu(rsMenuTrigger)\"\r\n (mouseleave)=\"resetSubMenu(rsMenuTrigger)\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n<mat-menu #rsMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw(getMultipleSelection())\">\r\n Nuova legge\r\n </button>\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"parent().RS_newActivity(getSingleSelection())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n }\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\"\r\n (click)=\"parent().RS_usageReport(getSingleSelection())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>\r\n}", styles: [""], 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.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: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2.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: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
203
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.7", type: ClipperDocumentMenuComponent, isStandalone: true, selector: "clipper-document-menu", inputs: { useSelections: { classPropertyName: "useSelections", publicName: "useSelections", isSignal: true, isRequired: false, transformFunction: null }, selectionSource: { classPropertyName: "selectionSource", publicName: "selectionSource", isSignal: true, isRequired: false, transformFunction: null }, parent: { classPropertyName: "parent", publicName: "parent", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, isReference: { classPropertyName: "isReference", publicName: "isReference", isSignal: true, isRequired: false, transformFunction: null }, isReadable: { classPropertyName: "isReadable", publicName: "isReadable", isSignal: true, isRequired: false, transformFunction: null }, isReadableModel: { classPropertyName: "isReadableModel", publicName: "isReadableModel", isSignal: true, isRequired: false, transformFunction: null }, isLawInForce: { classPropertyName: "isLawInForce", publicName: "isLawInForce", isSignal: true, isRequired: false, transformFunction: null }, canPrint: { classPropertyName: "canPrint", publicName: "canPrint", isSignal: true, isRequired: false, transformFunction: null }, canFind: { classPropertyName: "canFind", publicName: "canFind", isSignal: true, isRequired: false, transformFunction: null }, canUseCalendar: { classPropertyName: "canUseCalendar", publicName: "canUseCalendar", isSignal: true, isRequired: false, transformFunction: null }, canUseArchive: { classPropertyName: "canUseArchive", publicName: "canUseArchive", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "rsMenuTrigger", first: true, predicate: ["rsMenuTrigger"], descendants: true, isSignal: true }, { propertyName: "linksMenuTrigger", first: true, predicate: ["linksMenuTrigger"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (canDeselectAll()) {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (canManageBag()) {\r\n<button mat-menu-item (click)=\"parent().openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\" (mouseenter)=\"showSubMenu()\"\r\n (click)=\"open(getSingleSelection())\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (canAddToWorkingDocuments()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(getMultipleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"parent().print()\" [attr.aria-label]=\"'Stampa documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <div>Stampa</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+P</div>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"parent().find()\" [attr.aria-label]=\"'Trova nel documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <div>Trova nel documento</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+F</div>\r\n </div>\r\n</button>\r\n}\r\n@if (canSendByEmail()) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(getMultipleSelection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (canAddToArchive()) {\r\n<button mat-menu-item (click)=\"parent().addToArchive(getMultipleSelection())\" [attr.aria-label]=\"'Archivia'\">\r\n <mat-icon>account_tree</mat-icon>Archivia\r\n</button>\r\n}\r\n@if (canSaveAsPdf()) {\r\n<button mat-menu-item (click)=\"parent().exportPdf(getSingleSelection())\" (mouseenter)=\"showSubMenu()\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Copia metadati negli appunti'\"\r\n (click)=\"parent().copyMetadataToClipboard(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>content_copy</mat-icon>Copia metadati\r\n</button>\r\n}\r\n@if (!isReference() && canOpen()) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\" #linksMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(linksMenuTrigger)\" (mouseleave)=\"resetSubMenu(linksMenuTrigger)\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"openReferences(getSingleSelection(), 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"openReferences(getSingleSelection(), 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n}\r\n@if (canAddToCalendar()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi al calendario'\"\r\n (click)=\"parent().addToCalendar(getSingleSelection())\">\r\n <mat-icon>alarm</mat-icon> Crea scadenza\r\n</button>\r\n}\r\n@if (canExportCalendar()) {\r\n@if(useSelections()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportResults(2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n} @else if (item()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportItems([item().documentId], null, 2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n}\r\n}\r\n@if (canSetAsUnread()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (canSetAsRead()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"setRead(true)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n</button>\r\n}\r\n\r\n\r\n@if (isLawInForce() && canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report'\" (click)=\"parent().report(getSingleSelection())\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n\r\n@if (canAccessRS()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"rsMenu\" #rsMenuTrigger=\"matMenuTrigger\" (mouseenter)=\"showSubMenu(rsMenuTrigger)\"\r\n (mouseleave)=\"resetSubMenu(rsMenuTrigger)\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n<mat-menu #rsMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw(getMultipleSelection())\">\r\n Nuova legge\r\n </button>\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"parent().RS_newActivity(getSingleSelection())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n }\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\"\r\n (click)=\"parent().RS_usageReport(getSingleSelection())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>\r\n}", styles: [""], 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.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: "ngmodule", type: MatMenuModule }, { kind: "component", type: i2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i2.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: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i4.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
203
204
  }
204
205
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ClipperDocumentMenuComponent, decorators: [{
205
206
  type: Component,
206
207
  args: [{ selector: 'clipper-document-menu', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [FlexModule, MatMenuModule, MatIconModule, MatDividerModule, MatTooltipModule], template: "@if (canDeselectAll()) {\r\n<button mat-menu-item (click)=\"parent().selection?.clear()\" [attr.aria-label]=\"'Deseleziona tutti'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>clear</mat-icon>Deseleziona tutti\r\n</button>\r\n} @else if (canManageBag()) {\r\n<button mat-menu-item (click)=\"parent().openBag()\" [attr.aria-label]=\"'Gestisci documenti di lavoro'\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Gestisci documenti di lavoro\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Apri documento'\" (mouseenter)=\"showSubMenu()\"\r\n (click)=\"open(getSingleSelection())\">\r\n <mat-icon></mat-icon>Apri\r\n</button>\r\n}\r\n@if (canAddToWorkingDocuments()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi ai documenti di lavoro'\"\r\n (click)=\"parent().addItemsToBag(getMultipleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>work_outline</mat-icon>Aggiungi ai documenti di lavoro\r\n</button>\r\n}\r\n@if(canPrint()) {\r\n<button mat-menu-item (click)=\"parent().print()\" [attr.aria-label]=\"'Stampa documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>print</mat-icon>\r\n <div>Stampa</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+P</div>\r\n </div>\r\n</button>\r\n}\r\n@if(canFind()) {\r\n<button mat-menu-item (click)=\"parent().find()\" [attr.aria-label]=\"'Trova nel documento'\" (mouseenter)=\"showSubMenu()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row\" fxFill fxLayoutAlign=\"start center\">\r\n <mat-icon>find_in_page</mat-icon>\r\n <div>Trova nel documento</div>\r\n </div>\r\n <div class=\"accent small bold\">CTRL+F</div>\r\n </div>\r\n</button>\r\n}\r\n@if (canSendByEmail()) {\r\n<button mat-menu-item (click)=\"parent().sendItemsTo(getMultipleSelection())\"\r\n [attr.aria-label]=\"'Invia documento per email'\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>send</mat-icon>Invia per email\r\n</button>\r\n}\r\n@if (canAddToArchive()) {\r\n<button mat-menu-item (click)=\"parent().addToArchive(getMultipleSelection())\" [attr.aria-label]=\"'Archivia'\">\r\n <mat-icon>account_tree</mat-icon>Archivia\r\n</button>\r\n}\r\n@if (canSaveAsPdf()) {\r\n<button mat-menu-item (click)=\"parent().exportPdf(getSingleSelection())\" (mouseenter)=\"showSubMenu()\"\r\n [attr.aria-label]=\"'Salva documento in pdf'\">\r\n <mat-icon>save_alt</mat-icon>Salva in pdf\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Genera un link permanente da utilizzare esternamente'\"\r\n (click)=\"parent().showLink(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>link</mat-icon>Link\r\n</button>\r\n}\r\n@if (canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Copia metadati negli appunti'\"\r\n (click)=\"parent().copyMetadataToClipboard(getSingleSelection())\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>content_copy</mat-icon>Copia metadati\r\n</button>\r\n}\r\n@if (!isReference() && canOpen()) {\r\n<button mat-menu-item [matMenuTriggerFor]=\"linksMenu\" #linksMenuTrigger=\"matMenuTrigger\"\r\n (mouseenter)=\"showSubMenu(linksMenuTrigger)\" (mouseleave)=\"resetSubMenu(linksMenuTrigger)\">\r\n <mat-icon>compare_arrows</mat-icon>Collegamenti\r\n</button>\r\n<mat-menu #linksMenu=\"matMenu\">\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti richiamati da questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 1)\">\r\n Documenti richiamati\r\n </button>\r\n }\r\n @if (!isReference() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra i documenti che richiamano questo'\"\r\n (click)=\"openReferences(getSingleSelection(), 2)\">\r\n Documenti che richiamano\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra giurisprudenza'\" (click)=\"openReferences(getSingleSelection(), 4)\">\r\n Juris\r\n </button>\r\n }\r\n @if (!isReference() && isLawInForce() && canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Mostra modifiche normative'\"\r\n (click)=\"openReferences(getSingleSelection(), 3)\">\r\n Modifiche\r\n </button>\r\n }\r\n</mat-menu>\r\n}\r\n@if (canAddToCalendar()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Aggiungi al calendario'\"\r\n (click)=\"parent().addToCalendar(getSingleSelection())\">\r\n <mat-icon>alarm</mat-icon> Crea scadenza\r\n</button>\r\n}\r\n@if (canExportCalendar()) {\r\n@if(useSelections()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportResults(2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n} @else if (item()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Importa in Oultook (iCalandar)'\" (click)=\"parent().exportItems([item().documentId], null, 2)\">\r\n <mat-icon>mail_outline</mat-icon>Importa in Outlook (iCalendar)\r\n</button>\r\n}\r\n}\r\n@if (canSetAsUnread()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come da leggere'\" (click)=\"setRead(false)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>outlined_flag</mat-icon>Segna come da leggere\r\n</button>\r\n}\r\n@if (canSetAsRead()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Segna come gi\u00E0 letto'\" (click)=\"setRead(true)\" (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>flag</mat-icon>Segna come gi\u00E0 letto\r\n</button>\r\n}\r\n\r\n\r\n@if (isLawInForce() && canOpen()) {\r\n<button mat-menu-item [attr.aria-label]=\"'Mostra report'\" (click)=\"parent().report(getSingleSelection())\"\r\n (mouseenter)=\"showSubMenu()\">\r\n <mat-icon>assignment</mat-icon>Report\r\n</button>\r\n}\r\n\r\n@if (canAccessRS()) {\r\n<mat-divider></mat-divider>\r\n<button mat-menu-item matTooltip=\"Registro & Scadenzario\" [attr.aria-label]=\"'Opzioni di Registro & Scadenzario'\"\r\n [matMenuTriggerFor]=\"rsMenu\" #rsMenuTrigger=\"matMenuTrigger\" (mouseenter)=\"showSubMenu(rsMenuTrigger)\"\r\n (mouseleave)=\"resetSubMenu(rsMenuTrigger)\">\r\n <mat-icon>alarm_on</mat-icon>\r\n Registro e scadenzario\r\n</button>\r\n<mat-menu #rsMenu=\"matMenu\">\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova legge'\" (click)=\"parent().RS_newLaw(getMultipleSelection())\">\r\n Nuova legge\r\n </button>\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Nuova attivit\u00E0'\" (click)=\"parent().RS_newActivity(getSingleSelection())\">\r\n Nuova attivit\u00E0\r\n </button>\r\n }\r\n @if (canOpen()) {\r\n <button mat-menu-item [attr.aria-label]=\"'Report utilizzo norma'\"\r\n (click)=\"parent().RS_usageReport(getSingleSelection())\">\r\n Report utilizzo norma\r\n </button>\r\n }\r\n</mat-menu>\r\n}" }]
207
208
  }] });
208
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBa0IsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUF1QixZQUFZLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7O0FBWXhILE1BQU0sT0FBTyw0QkFBNEI7SUFUekM7UUFXVSxrQkFBYSxHQUF1QyxTQUFTLENBQWlCLGVBQWUsQ0FBQyxDQUFDO1FBQy9GLHFCQUFnQixHQUF1QyxTQUFTLENBQWlCLGtCQUFrQixDQUFDLENBQUM7UUFDckcsb0JBQWUsR0FBeUM7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQjtZQUNy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QU0sRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFRDs7OztLQUlDO0lBQ1MsY0FBYyxDQUFDLElBQXlCLEVBQUUsSUFBWTtRQUM5RCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7OEdBaE1VLDRCQUE0QjtrR0FBNUIsNEJBQTRCLHl5RENuQnpDLCs1TkFxS0MseUREckpXLFVBQVUsdTZFQUFFLGFBQWEsNnZCQUFFLGFBQWEsbUxBQUUsZ0JBQWdCLGtJQUFFLGdCQUFnQjs7MkZBRzNFLDRCQUE0QjtrQkFUeEMsU0FBUzsrQkFDRSx1QkFBdUIsY0FHckIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgU2lnbmFsLCBpbmplY3QsIGlucHV0LCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSwgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRJbmZvLCBDbGlwcGVyTW9kZWwsIENsaXBwZXJTZXJ2aWNlLCBDbGlwcGVyVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXIgfSBmcm9tICcuLi9zZWFyY2gtcmVzdWx0LW1hbmFnZXIvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2xpcHBlci1kb2N1bWVudC1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnQtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnQtbWVudS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW0ZsZXhNb2R1bGUsIE1hdE1lbnVNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdERpdmlkZXJNb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGVdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckRvY3VtZW50TWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSByc01lbnVUcmlnZ2VyOiBTaWduYWw8TWF0TWVudVRyaWdnZXIgfCB1bmRlZmluZWQ+ID0gdmlld0NoaWxkPE1hdE1lbnVUcmlnZ2VyPigncnNNZW51VHJpZ2dlcicpO1xyXG4gIHByaXZhdGUgbGlua3NNZW51VHJpZ2dlcjogU2lnbmFsPE1hdE1lbnVUcmlnZ2VyIHwgdW5kZWZpbmVkPiA9IHZpZXdDaGlsZDxNYXRNZW51VHJpZ2dlcj4oJ2xpbmtzTWVudVRyaWdnZXInKTtcclxuICBwcml2YXRlIGFsbE1lbnVUcmlnZ2VyczogU2lnbmFsPE1hdE1lbnVUcmlnZ2VyIHwgdW5kZWZpbmVkPltdID0gW1xyXG4gICAgdGhpcy5saW5rc01lbnVUcmlnZ2VyLFxyXG4gICAgdGhpcy5yc01lbnVUcmlnZ2VyXHJcbiAgXVxyXG4gIHByaXZhdGUgcmVuZGVyZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJpdmF0ZSBjbGlwcGVyU2VydmljZSA9IGluamVjdChDbGlwcGVyU2VydmljZSk7XHJcbiAgdXNlU2VsZWN0aW9ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBzZWxlY3Rpb25Tb3VyY2UgPSBpbnB1dDwnYmFnJyB8ICdzZWxlY3Rpb24nIHwgJ25vbmUnIHwgbnVsbD4oJ3NlbGVjdGlvbicpO1xyXG4gIHByb3RlY3RlZCBzZWxlY3Rpb24gPSAoKTogQ2xpcHBlckRvY3VtZW50SW5mb1tdID0+IHtcclxuICAgIGlmICh0aGlzLnVzZVNlbGVjdGlvbnMoKSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0aW9uU291cmNlKCkpIHtcclxuICAgICAgICBjYXNlICdiYWcnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50KCk/LmNsaXBwZXJTZXJ2aWNlLmJhZygpID8/IFtdO1xyXG4gICAgICAgIGNhc2UgJ3NlbGVjdGlvbic6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGwgPz8gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9O1xyXG4gIHBhcmVudCA9IGlucHV0LnJlcXVpcmVkPENsaXBwZXJTZWFyY2hSZXN1bHRNYW5hZ2VyPigpO1xyXG4gIGl0ZW0gPSBpbnB1dDxDbGlwcGVyRG9jdW1lbnRJbmZvPigpO1xyXG4gIGlzUmVmZXJlbmNlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzUmVhZGFibGUgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuICBpc0xhd0luRm9yY2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuUHJpbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuRmluZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjYW5Vc2VDYWxlbmRhciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjYW5Vc2VBcmNoaXZlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByb3RlY3RlZCBjYW5EZXNlbGVjdEFsbCA9ICgpOiBib29sZWFuID0+IHRoaXMuc2VsZWN0aW9uU291cmNlKCkgPT09ICdzZWxlY3Rpb24nICYmIHRoaXMuc2VsZWN0aW9uKCkubGVuZ3RoID4gMDtcclxuICBwcm90ZWN0ZWQgY2FuTWFuYWdlQmFnID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5zZWxlY3Rpb25Tb3VyY2UoKSA9PT0gJ2JhZyc7XHJcbiAgcHJvdGVjdGVkIGNhbk9wZW4gPSAoKTogYm9vbGVhbiA9PiAodGhpcy5nZXRTaW5nbGVTZWxlY3Rpb24oKT8uZG9jdW1lbnRJZD8ubGVuZ3RoID8/IDApID4gMDtcclxuICBwcm90ZWN0ZWQgY2FuQWRkVG9Xb3JraW5nRG9jdW1lbnRzID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5zZWxlY3Rpb25Tb3VyY2UoKSAhPT0gJ2JhZycgJiYgdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpLmxlbmd0aCA+IDA7XHJcbiAgcHJvdGVjdGVkIGNhblNlbmRCeUVtYWlsID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpLmxlbmd0aCA+IDA7XHJcbiAgcHJvdGVjdGVkIGNhbkFkZFRvQXJjaGl2ZSA9ICgpOiBib29sZWFuID0+IHRoaXMuY2FuVXNlQXJjaGl2ZSgpICYmIHRoaXMuY2FuU2VuZEJ5RW1haWwoKTtcclxuICBwcm90ZWN0ZWQgY2FuQWRkVG9DYWxlbmRhciA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGxldCBjYW5BZGQgPSB0cnVlO1xyXG4gICAgdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpPy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICBpZiAobi5tb2RlbCAhPT0gMTAgJiYgbi5tb2RlbCAhPT0gMjApIHtcclxuICAgICAgICBjYW5BZGQgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNhbkFkZCAmJiB0aGlzLmNhblVzZUNhbGVuZGFyKCkgJiYgIXRoaXMuaXNSZWZlcmVuY2UoKTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGNhbkV4cG9ydENhbGVuZGFyID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgbGV0IGNhbkV4cG9ydCA9IHRydWU7XHJcbiAgICB0aGlzLmdldE11bHRpcGxlU2VsZWN0aW9uKCk/LmZvckVhY2gobiA9PiB7XHJcbiAgICAgIGlmIChuLm1vZGVsICE9PSAxMCAmJiBuLm1vZGVsICE9PSAyMCkge1xyXG4gICAgICAgIGNhbkV4cG9ydCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY2FuRXhwb3J0ICYmIHRoaXMuY2FuVXNlQ2FsZW5kYXIoKSAmJiAhdGhpcy5pc1JlZmVyZW5jZSgpO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgY2FuU2F2ZUFzUGRmID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0U2luZ2xlU2VsZWN0aW9uKCk7XHJcbiAgICByZXR1cm4gaXRlbSAhPT0gbnVsbCAmJiBpdGVtPy5tb2RlbCAhPT0gQ2xpcHBlck1vZGVsLkNvb3JkaW5hbWVudG87XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBjYW5TZXRBc1JlYWQgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3Rpb24oKTtcclxuICAgIHJldHVybiB0aGlzLmlzUmVhZGFibGUoKSAmJiAoaXRlbXMubGVuZ3RoID4gMSB8fCAoaXRlbXMubGVuZ3RoID09PSAxICYmIGl0ZW1zWzBdLmlzUmVhZCAhPT0gdHJ1ZSAmJlxyXG4gICAgICBDbGlwcGVyVXRpbHMuaXNDbGlwcGVyTW9kZWxSZWFkYWJsZShpdGVtc1swXS5tb2RlbCkpKTtcclxuICB9O1xyXG4gIHByb3RlY3RlZCBjYW5TZXRBc1VucmVhZCA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpO1xyXG4gICAgcmV0dXJuIHRoaXMuaXNSZWFkYWJsZSgpICYmIChpdGVtcy5sZW5ndGggPiAxIHx8IChpdGVtcy5sZW5ndGggPT09IDEgJiYgaXRlbXNbMF0uaXNSZWFkID09PSB0cnVlICYmXHJcbiAgICAgIENsaXBwZXJVdGlscy5pc0NsaXBwZXJNb2RlbFJlYWRhYmxlKGl0ZW1zWzBdLm1vZGVsKSkpO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIGNhbkFjY2Vzc1JTID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldE11bHRpcGxlU2VsZWN0aW9uKCk7XHJcbiAgICByZXR1cm4gdGhpcy5jbGlwcGVyU2VydmljZS5zdXBwb3J0c1JTKCkgJiYgdGhpcy5wYXJlbnQoKT8uUlNfZW5hYmxlZChpdGVtcykgPT09IHRydWU7XHJcbiAgfTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Tb3VyY2UoKSA9PT0gXCJzZWxlY3Rpb25cIikge1xyXG4gICAgICB0aGlzLnBhcmVudCgpPy5zZWxlY3Rpb24/LmNoYW5nZWRcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGEgc2luZ2xlIHNlbGVjdGlvblxyXG4gICAqIEByZXR1cm5zIHRoZSBzaW5nbGUgc2VsZWN0aW9uIG9yIG51bGxcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0U2luZ2xlU2VsZWN0aW9uKCk6IENsaXBwZXJEb2N1bWVudEluZm8gfCBudWxsIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICh0aGlzLml0ZW0oKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pdGVtKCk7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uKCkubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbigpWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgbXVsdGlwbGUgc2VsZWN0aW9uXHJcbiAgICogQHJldHVybnMgOiB0aGUgbXVsdGlwbGUgc2VsZWN0aW9uIG9yIGFycmF5IGVtcHR5XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGdldE11bHRpcGxlU2VsZWN0aW9uKCk6IENsaXBwZXJEb2N1bWVudEluZm9bXSB7XHJcbiAgICBpZiAodGhpcy5pdGVtKCkpIHtcclxuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbSgpO1xyXG4gICAgICBpZiAoaXRlbSkge1xyXG4gICAgICAgIHJldHVybiBbaXRlbV07XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3Rpb24oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbigpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtdO1xyXG4gIH1cclxuXHJcbiAgLyoqIFxyXG4gICAqIFNob3cgYW5kIGhpZGUgc3ViIG1lbnVzXHJcbiAgICogQHBhcmFtIHRyaWdnZXI6IHRoZSB0cmlnZ2VyIHRvIHVzZSBvciBudWxsIHRvIGRlc2VsZWN0XHJcbiAgKi9cclxuICBwcm90ZWN0ZWQgc2hvd1N1Yk1lbnUodHJpZ2dlcjogTWF0TWVudVRyaWdnZXIgfCBudWxsID0gbnVsbCkge1xyXG4gICAgdGhpcy5hbGxNZW51VHJpZ2dlcnMuZm9yRWFjaChtZW51VHJpZ2dlciA9PiB7XHJcbiAgICAgIGNvbnN0IG1lbnUgPSBtZW51VHJpZ2dlcigpO1xyXG4gICAgICBpZiAobWVudSkge1xyXG4gICAgICAgIGlmIChtZW51Lm1lbnVPcGVuKSB7XHJcbiAgICAgICAgICBtZW51LmNsb3NlTWVudSgpO1xyXG4gICAgICAgICAgdGhpcy5yZXNldFN1Yk1lbnUobWVudSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRyaWdnZXI/Lm9wZW5NZW51KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXNldCBzdWIgbWVudVxyXG4gICAqIEBwYXJhbSB0cmlnZ2VyOiB0aGUgdHJpZ2dlciB0byB1c2VcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVzZXRTdWJNZW51KHRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyKSB7XHJcbiAgICB0aGlzLnJlbmRlcmVyMi5yZW1vdmVDbGFzcyh0cmlnZ2VyWydfZWxlbWVudCddLm5hdGl2ZUVsZW1lbnQsICdjZGstZm9jdXNlZCcpO1xyXG4gICAgdGhpcy5yZW5kZXJlcjIucmVtb3ZlQ2xhc3ModHJpZ2dlclsnX2VsZW1lbnQnXS5uYXRpdmVFbGVtZW50LCAnY2RrLXByb2dyYW0tZm9jdXNlZCcpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hlY2sgaWYgY3VycmVudCBpdGVtIG9yIHNlbGVjdGlvbiBpcyByZWFkXHJcbiAgICogQHJldHVybnMgMCBpZiBub3QgcmVhZCwgMSBpZiByZWFkLCAyIGlmIHVua25vd25cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgaXNSZWFkKCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5pdGVtKCkpIHJldHVybiB0aGlzLml0ZW0oKT8uaXNSZWFkID09PSB0cnVlID8gMSA6IDA7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQoKT8uaGFzQW55U2VsZWN0aW9uKCkpIHJldHVybiAyO1xyXG4gICAgY29uc3QgZmlyc3RTZWxlY3Rpb24gPSB0aGlzLnBhcmVudCgpPy5nZXRTaW5nbGVTZWxlY3Rpb24oKTtcclxuICAgIGlmIChmaXJzdFNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4gZmlyc3RTZWxlY3Rpb24uaXNSZWFkID09PSB0cnVlID8gMSA6IDA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCB0aGUgaXMgcmVhZCBmbGFnIHZhbHVlXHJcbiAgICogQHBhcmFtIHZhbHVlOiB0cnVlIG9yIGZhbHNlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHNldFJlYWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucGFyZW50KCk/LnNldFJlYWQodmFsdWUsIHRoaXMuaXRlbSgpKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gYSBkb2N1bWVudFxyXG4gICAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIG9wZW4oaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbykge1xyXG4gICAgaWYgKGl0ZW0uZG9jdW1lbnRJZCkge1xyXG4gICAgICB0aGlzLnBhcmVudCgpPy5vcGVuKGl0ZW0uZG9jdW1lbnRJZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICogT3BlbiBkb2N1bWVudCByZWZlcmVuY2VzXHJcbiAqIEBwYXJhbSBpdGVtIDogdGhlIGl0ZW0gXHJcbiAqIEBwYXJhbSBtb2RlOiB0aGUgbW9kZVxyXG4gKi9cclxuICBwcm90ZWN0ZWQgb3BlblJlZmVyZW5jZXMoaXRlbTogQ2xpcHBlckRvY3VtZW50SW5mbywgbW9kZTogbnVtYmVyKSB7XHJcbiAgICBpZiAoaXRlbS5kb2N1bWVudElkKSB7XHJcbiAgICAgIHRoaXMucGFyZW50KCk/Lm9wZW5SZWZlcmVuY2VzKGl0ZW0uZG9jdW1lbnRJZCwgbW9kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCJAaWYgKGNhbkRlc2VsZWN0QWxsKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKS5zZWxlY3Rpb24/LmNsZWFyKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidEZXNlbGV6aW9uYSB0dXR0aSdcIlxyXG4gIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIj5cclxuICA8bWF0LWljb24+Y2xlYXI8L21hdC1pY29uPkRlc2VsZXppb25hIHR1dHRpXHJcbjwvYnV0dG9uPlxyXG59IEBlbHNlIGlmIChjYW5NYW5hZ2VCYWcoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpLm9wZW5CYWcoKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0dlc3Rpc2NpIGRvY3VtZW50aSBkaSBsYXZvcm8nXCJcclxuICAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPG1hdC1pY29uPndvcmtfb3V0bGluZTwvbWF0LWljb24+R2VzdGlzY2kgZG9jdW1lbnRpIGRpIGxhdm9yb1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKGNhbk9wZW4oKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInQXByaSBkb2N1bWVudG8nXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiXHJcbiAgKGNsaWNrKT1cIm9wZW4oZ2V0U2luZ2xlU2VsZWN0aW9uKCkpXCI+XHJcbiAgPG1hdC1pY29uPjwvbWF0LWljb24+QXByaVxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKGNhbkFkZFRvV29ya2luZ0RvY3VtZW50cygpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidBZ2dpdW5naSBhaSBkb2N1bWVudGkgZGkgbGF2b3JvJ1wiXHJcbiAgKGNsaWNrKT1cInBhcmVudCgpLmFkZEl0ZW1zVG9CYWcoZ2V0TXVsdGlwbGVTZWxlY3Rpb24oKSlcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPG1hdC1pY29uPndvcmtfb3V0bGluZTwvbWF0LWljb24+QWdnaXVuZ2kgYWkgZG9jdW1lbnRpIGRpIGxhdm9yb1xyXG48L2J1dHRvbj5cclxufVxyXG5AaWYoY2FuUHJpbnQoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpLnByaW50KClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidTdGFtcGEgZG9jdW1lbnRvJ1wiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIj5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIyMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbD5cclxuICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4TGF5b3V0PVwicm93XCIgZnhGaWxsIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgPG1hdC1pY29uPnByaW50PC9tYXQtaWNvbj5cclxuICAgICAgPGRpdj5TdGFtcGE8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImFjY2VudCBzbWFsbCBib2xkXCI+Q1RSTCtQPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZihjYW5GaW5kKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKS5maW5kKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidUcm92YSBuZWwgZG9jdW1lbnRvJ1wiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIj5cclxuICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIyMHB4XCIgZnhMYXlvdXRBbGlnbj1cInN0YXJ0IGNlbnRlclwiIGZ4RmlsbD5cclxuICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4TGF5b3V0PVwicm93XCIgZnhGaWxsIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIj5cclxuICAgICAgPG1hdC1pY29uPmZpbmRfaW5fcGFnZTwvbWF0LWljb24+XHJcbiAgICAgIDxkaXY+VHJvdmEgbmVsIGRvY3VtZW50bzwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWNjZW50IHNtYWxsIGJvbGRcIj5DVFJMK0Y8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9idXR0b24+XHJcbn1cclxuQGlmIChjYW5TZW5kQnlFbWFpbCgpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCkuc2VuZEl0ZW1zVG8oZ2V0TXVsdGlwbGVTZWxlY3Rpb24oKSlcIlxyXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0ludmlhIGRvY3VtZW50byBwZXIgZW1haWwnXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gIDxtYXQtaWNvbj5zZW5kPC9tYXQtaWNvbj5JbnZpYSBwZXIgZW1haWxcclxuPC9idXR0b24+XHJcbn1cclxuQGlmIChjYW5BZGRUb0FyY2hpdmUoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpLmFkZFRvQXJjaGl2ZShnZXRNdWx0aXBsZVNlbGVjdGlvbigpKVwiIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FyY2hpdmlhJ1wiPlxyXG4gIDxtYXQtaWNvbj5hY2NvdW50X3RyZWU8L21hdC1pY29uPkFyY2hpdmlhXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoY2FuU2F2ZUFzUGRmKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKS5leHBvcnRQZGYoZ2V0U2luZ2xlU2VsZWN0aW9uKCkpXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiXHJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCInU2FsdmEgZG9jdW1lbnRvIGluIHBkZidcIj5cclxuICA8bWF0LWljb24+c2F2ZV9hbHQ8L21hdC1pY29uPlNhbHZhIGluIHBkZlxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKGNhbk9wZW4oKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInR2VuZXJhIHVuIGxpbmsgcGVybWFuZW50ZSBkYSB1dGlsaXp6YXJlIGVzdGVybmFtZW50ZSdcIlxyXG4gIChjbGljayk9XCJwYXJlbnQoKS5zaG93TGluayhnZXRTaW5nbGVTZWxlY3Rpb24oKSlcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPG1hdC1pY29uPmxpbms8L21hdC1pY29uPkxpbmtcclxuPC9idXR0b24+XHJcbn1cclxuQGlmIChjYW5PcGVuKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0NvcGlhIG1ldGFkYXRpIG5lZ2xpIGFwcHVudGknXCJcclxuICAoY2xpY2spPVwicGFyZW50KCkuY29weU1ldGFkYXRhVG9DbGlwYm9hcmQoZ2V0U2luZ2xlU2VsZWN0aW9uKCkpXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gIDxtYXQtaWNvbj5jb250ZW50X2NvcHk8L21hdC1pY29uPkNvcGlhIG1ldGFkYXRpXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgY2FuT3BlbigpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbbWF0TWVudVRyaWdnZXJGb3JdPVwibGlua3NNZW51XCIgI2xpbmtzTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiXHJcbiAgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUobGlua3NNZW51VHJpZ2dlcilcIiAobW91c2VsZWF2ZSk9XCJyZXNldFN1Yk1lbnUobGlua3NNZW51VHJpZ2dlcilcIj5cclxuICA8bWF0LWljb24+Y29tcGFyZV9hcnJvd3M8L21hdC1pY29uPkNvbGxlZ2FtZW50aVxyXG48L2J1dHRvbj5cclxuPG1hdC1tZW51ICNsaW5rc01lbnU9XCJtYXRNZW51XCI+XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBjYW5PcGVuKCkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIGkgZG9jdW1lbnRpIHJpY2hpYW1hdGkgZGEgcXVlc3RvJ1wiXHJcbiAgICAoY2xpY2spPVwib3BlblJlZmVyZW5jZXMoZ2V0U2luZ2xlU2VsZWN0aW9uKCksIDEpXCI+XHJcbiAgICBEb2N1bWVudGkgcmljaGlhbWF0aVxyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKCFpc1JlZmVyZW5jZSgpICYmIGNhbk9wZW4oKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgaSBkb2N1bWVudGkgY2hlIHJpY2hpYW1hbm8gcXVlc3RvJ1wiXHJcbiAgICAoY2xpY2spPVwib3BlblJlZmVyZW5jZXMoZ2V0U2luZ2xlU2VsZWN0aW9uKCksIDIpXCI+XHJcbiAgICBEb2N1bWVudGkgY2hlIHJpY2hpYW1hbm9cclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBpc0xhd0luRm9yY2UoKSAmJiBjYW5PcGVuKCkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIGdpdXJpc3BydWRlbnphJ1wiIChjbGljayk9XCJvcGVuUmVmZXJlbmNlcyhnZXRTaW5nbGVTZWxlY3Rpb24oKSwgNClcIj5cclxuICAgIEp1cmlzXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgaXNMYXdJbkZvcmNlKCkgJiYgY2FuT3BlbigpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBtb2RpZmljaGUgbm9ybWF0aXZlJ1wiXHJcbiAgICAoY2xpY2spPVwib3BlblJlZmVyZW5jZXMoZ2V0U2luZ2xlU2VsZWN0aW9uKCksIDMpXCI+XHJcbiAgICBNb2RpZmljaGVcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbjwvbWF0LW1lbnU+XHJcbn1cclxuQGlmIChjYW5BZGRUb0NhbGVuZGFyKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FnZ2l1bmdpIGFsIGNhbGVuZGFyaW8nXCJcclxuICAoY2xpY2spPVwicGFyZW50KCkuYWRkVG9DYWxlbmRhcihnZXRTaW5nbGVTZWxlY3Rpb24oKSlcIj5cclxuICA8bWF0LWljb24+YWxhcm08L21hdC1pY29uPiBDcmVhIHNjYWRlbnphXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoY2FuRXhwb3J0Q2FsZW5kYXIoKSkge1xyXG5AaWYodXNlU2VsZWN0aW9ucygpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidJbXBvcnRhIGluIE91bHRvb2sgKGlDYWxhbmRhciknXCIgKGNsaWNrKT1cInBhcmVudCgpLmV4cG9ydFJlc3VsdHMoMilcIj5cclxuICA8bWF0LWljb24+bWFpbF9vdXRsaW5lPC9tYXQtaWNvbj5JbXBvcnRhIGluIE91dGxvb2sgKGlDYWxlbmRhcilcclxuPC9idXR0b24+XHJcbn0gQGVsc2UgaWYgKGl0ZW0oKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInSW1wb3J0YSBpbiBPdWx0b29rIChpQ2FsYW5kYXIpJ1wiIChjbGljayk9XCJwYXJlbnQoKS5leHBvcnRJdGVtcyhbaXRlbSgpLmRvY3VtZW50SWRdLCBudWxsLCAgMilcIj5cclxuICA8bWF0LWljb24+bWFpbF9vdXRsaW5lPC9tYXQtaWNvbj5JbXBvcnRhIGluIE91dGxvb2sgKGlDYWxlbmRhcilcclxuPC9idXR0b24+XHJcbn1cclxufVxyXG5AaWYgKGNhblNldEFzVW5yZWFkKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NlZ25hIGNvbWUgZGEgbGVnZ2VyZSdcIiAoY2xpY2spPVwic2V0UmVhZChmYWxzZSlcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPG1hdC1pY29uPm91dGxpbmVkX2ZsYWc8L21hdC1pY29uPlNlZ25hIGNvbWUgZGEgbGVnZ2VyZVxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKGNhblNldEFzUmVhZCgpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWduYSBjb21lIGdpw6AgbGV0dG8nXCIgKGNsaWNrKT1cInNldFJlYWQodHJ1ZSlcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPG1hdC1pY29uPmZsYWc8L21hdC1pY29uPlNlZ25hIGNvbWUgZ2nDoCBsZXR0b1xyXG48L2J1dHRvbj5cclxufVxyXG5cclxuXHJcbkBpZiAoaXNMYXdJbkZvcmNlKCkgJiYgY2FuT3BlbigpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgcmVwb3J0J1wiIChjbGljayk9XCJwYXJlbnQoKS5yZXBvcnQoZ2V0U2luZ2xlU2VsZWN0aW9uKCkpXCJcclxuICAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPG1hdC1pY29uPmFzc2lnbm1lbnQ8L21hdC1pY29uPlJlcG9ydFxyXG48L2J1dHRvbj5cclxufVxyXG5cclxuQGlmIChjYW5BY2Nlc3NSUygpKSB7XHJcbjxtYXQtZGl2aWRlcj48L21hdC1kaXZpZGVyPlxyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gbWF0VG9vbHRpcD1cIlJlZ2lzdHJvICYgU2NhZGVuemFyaW9cIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidPcHppb25pIGRpIFJlZ2lzdHJvICYgU2NhZGVuemFyaW8nXCJcclxuICBbbWF0TWVudVRyaWdnZXJGb3JdPVwicnNNZW51XCIgI3JzTWVudVRyaWdnZXI9XCJtYXRNZW51VHJpZ2dlclwiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KHJzTWVudVRyaWdnZXIpXCJcclxuICAobW91c2VsZWF2ZSk9XCJyZXNldFN1Yk1lbnUocnNNZW51VHJpZ2dlcilcIj5cclxuICA8bWF0LWljb24+YWxhcm1fb248L21hdC1pY29uPlxyXG4gIFJlZ2lzdHJvIGUgc2NhZGVuemFyaW9cclxuPC9idXR0b24+XHJcbjxtYXQtbWVudSAjcnNNZW51PVwibWF0TWVudVwiPlxyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidOdW92YSBsZWdnZSdcIiAoY2xpY2spPVwicGFyZW50KCkuUlNfbmV3TGF3KGdldE11bHRpcGxlU2VsZWN0aW9uKCkpXCI+XHJcbiAgICBOdW92YSBsZWdnZVxyXG4gIDwvYnV0dG9uPlxyXG4gIEBpZiAoY2FuT3BlbigpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ051b3ZhIGF0dGl2aXTDoCdcIiAoY2xpY2spPVwicGFyZW50KCkuUlNfbmV3QWN0aXZpdHkoZ2V0U2luZ2xlU2VsZWN0aW9uKCkpXCI+XHJcbiAgICBOdW92YSBhdHRpdml0w6BcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmIChjYW5PcGVuKCkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInUmVwb3J0IHV0aWxpenpvIG5vcm1hJ1wiXHJcbiAgICAoY2xpY2spPVwicGFyZW50KCkuUlNfdXNhZ2VSZXBvcnQoZ2V0U2luZ2xlU2VsZWN0aW9uKCkpXCI+XHJcbiAgICBSZXBvcnQgdXRpbGl6em8gbm9ybWFcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbjwvbWF0LW1lbnU+XHJcbn0iXX0=
209
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9jdW1lbnQtbWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvY2xpcHBlci51aS91aS9kb2N1bWVudC1tZW51L2RvY3VtZW50LW1lbnUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2NsaXBwZXIudWkvdWkvZG9jdW1lbnQtbWVudS9kb2N1bWVudC1tZW51LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQXFCLFNBQVMsRUFBVSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGFBQWEsRUFBa0IsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUF1QixZQUFZLEVBQUUsY0FBYyxFQUFFLFlBQVksRUFBRSxNQUFNLHVDQUF1QyxDQUFDOzs7Ozs7O0FBWXhILE1BQU0sT0FBTyw0QkFBNEI7SUFUekM7UUFXVSxrQkFBYSxHQUF1QyxTQUFTLENBQWlCLGVBQWUsQ0FBQyxDQUFDO1FBQy9GLHFCQUFnQixHQUF1QyxTQUFTLENBQWlCLGtCQUFrQixDQUFDLENBQUM7UUFDckcsb0JBQWUsR0FBeUM7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQjtZQUNy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QUFDO0lBQzdDLENBQUM7SUFFRDs7O09BR0c7SUFDTyxJQUFJLENBQUMsSUFBeUI7UUFDdEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFRDs7OztLQUlDO0lBQ1MsY0FBYyxDQUFDLElBQXlCLEVBQUUsSUFBWTtRQUM5RCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7OEdBak1VLDRCQUE0QjtrR0FBNUIsNEJBQTRCLCs3RENuQnpDLCs1TkFxS0MseUREckpXLFVBQVUsdTZFQUFFLGFBQWEsNnZCQUFFLGFBQWEsbUxBQUUsZ0JBQWdCLGtJQUFFLGdCQUFnQjs7MkZBRzNFLDRCQUE0QjtrQkFUeEMsU0FBUzsrQkFDRSx1QkFBdUIsY0FHckIsSUFBSSxtQkFDQyx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsVUFBVSxFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFJlbmRlcmVyMiwgU2lnbmFsLCBpbmplY3QsIGlucHV0LCB2aWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXREaXZpZGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGl2aWRlcic7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSwgTWF0TWVudVRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgRmxleE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDbGlwcGVyRG9jdW1lbnRJbmZvLCBDbGlwcGVyTW9kZWwsIENsaXBwZXJTZXJ2aWNlLCBDbGlwcGVyVXRpbHMgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL2NsaXBwZXIuY29tbW9uJztcclxuaW1wb3J0IHsgQ2xpcHBlclNlYXJjaFJlc3VsdE1hbmFnZXIgfSBmcm9tICcuLi9zZWFyY2gtcmVzdWx0LW1hbmFnZXIvc2VhcmNoLXJlc3VsdC1tYW5hZ2VyJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2xpcHBlci1kb2N1bWVudC1tZW51JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZG9jdW1lbnQtbWVudS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZG9jdW1lbnQtbWVudS5jb21wb25lbnQuc2NzcyddLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW0ZsZXhNb2R1bGUsIE1hdE1lbnVNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdERpdmlkZXJNb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGVdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2xpcHBlckRvY3VtZW50TWVudUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSByc01lbnVUcmlnZ2VyOiBTaWduYWw8TWF0TWVudVRyaWdnZXIgfCB1bmRlZmluZWQ+ID0gdmlld0NoaWxkPE1hdE1lbnVUcmlnZ2VyPigncnNNZW51VHJpZ2dlcicpO1xyXG4gIHByaXZhdGUgbGlua3NNZW51VHJpZ2dlcjogU2lnbmFsPE1hdE1lbnVUcmlnZ2VyIHwgdW5kZWZpbmVkPiA9IHZpZXdDaGlsZDxNYXRNZW51VHJpZ2dlcj4oJ2xpbmtzTWVudVRyaWdnZXInKTtcclxuICBwcml2YXRlIGFsbE1lbnVUcmlnZ2VyczogU2lnbmFsPE1hdE1lbnVUcmlnZ2VyIHwgdW5kZWZpbmVkPltdID0gW1xyXG4gICAgdGhpcy5saW5rc01lbnVUcmlnZ2VyLFxyXG4gICAgdGhpcy5yc01lbnVUcmlnZ2VyXHJcbiAgXVxyXG4gIHByaXZhdGUgcmVuZGVyZXIyID0gaW5qZWN0KFJlbmRlcmVyMik7XHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJpdmF0ZSBjbGlwcGVyU2VydmljZSA9IGluamVjdChDbGlwcGVyU2VydmljZSk7XHJcbiAgdXNlU2VsZWN0aW9ucyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBzZWxlY3Rpb25Tb3VyY2UgPSBpbnB1dDwnYmFnJyB8ICdzZWxlY3Rpb24nIHwgJ25vbmUnIHwgbnVsbD4oJ3NlbGVjdGlvbicpO1xyXG4gIHByb3RlY3RlZCBzZWxlY3Rpb24gPSAoKTogQ2xpcHBlckRvY3VtZW50SW5mb1tdID0+IHtcclxuICAgIGlmICh0aGlzLnVzZVNlbGVjdGlvbnMoKSkge1xyXG4gICAgICBzd2l0Y2ggKHRoaXMuc2VsZWN0aW9uU291cmNlKCkpIHtcclxuICAgICAgICBjYXNlICdiYWcnOlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50KCk/LmNsaXBwZXJTZXJ2aWNlLmJhZygpID8/IFtdO1xyXG4gICAgICAgIGNhc2UgJ3NlbGVjdGlvbic6XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQoKT8uc2VsZWN0aW9uPy5hbGwgPz8gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9O1xyXG4gIHBhcmVudCA9IGlucHV0LnJlcXVpcmVkPENsaXBwZXJTZWFyY2hSZXN1bHRNYW5hZ2VyPigpO1xyXG4gIGl0ZW0gPSBpbnB1dDxDbGlwcGVyRG9jdW1lbnRJbmZvPigpO1xyXG4gIGlzUmVmZXJlbmNlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIGlzUmVhZGFibGUgPSBpbnB1dDxib29sZWFuPih0cnVlKTtcclxuICBpc1JlYWRhYmxlTW9kZWwgPSBpbnB1dDxDbGlwcGVyTW9kZWw+KENsaXBwZXJNb2RlbC5Vbmtub3duKTtcclxuICBpc0xhd0luRm9yY2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuUHJpbnQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XHJcbiAgY2FuRmluZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjYW5Vc2VDYWxlbmRhciA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcclxuICBjYW5Vc2VBcmNoaXZlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByb3RlY3RlZCBjYW5EZXNlbGVjdEFsbCA9ICgpOiBib29sZWFuID0+IHRoaXMuc2VsZWN0aW9uU291cmNlKCkgPT09ICdzZWxlY3Rpb24nICYmIHRoaXMuc2VsZWN0aW9uKCkubGVuZ3RoID4gMDtcclxuICBwcm90ZWN0ZWQgY2FuTWFuYWdlQmFnID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5zZWxlY3Rpb25Tb3VyY2UoKSA9PT0gJ2JhZyc7XHJcbiAgcHJvdGVjdGVkIGNhbk9wZW4gPSAoKTogYm9vbGVhbiA9PiAodGhpcy5nZXRTaW5nbGVTZWxlY3Rpb24oKT8uZG9jdW1lbnRJZD8ubGVuZ3RoID8/IDApID4gMDtcclxuICBwcm90ZWN0ZWQgY2FuQWRkVG9Xb3JraW5nRG9jdW1lbnRzID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5zZWxlY3Rpb25Tb3VyY2UoKSAhPT0gJ2JhZycgJiYgdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpLmxlbmd0aCA+IDA7XHJcbiAgcHJvdGVjdGVkIGNhblNlbmRCeUVtYWlsID0gKCk6IGJvb2xlYW4gPT4gdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpLmxlbmd0aCA+IDA7XHJcbiAgcHJvdGVjdGVkIGNhbkFkZFRvQXJjaGl2ZSA9ICgpOiBib29sZWFuID0+IHRoaXMuY2FuVXNlQXJjaGl2ZSgpICYmIHRoaXMuY2FuU2VuZEJ5RW1haWwoKTtcclxuICBwcm90ZWN0ZWQgY2FuQWRkVG9DYWxlbmRhciA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGxldCBjYW5BZGQgPSB0cnVlO1xyXG4gICAgdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpPy5mb3JFYWNoKG4gPT4ge1xyXG4gICAgICBpZiAobi5tb2RlbCAhPT0gMTAgJiYgbi5tb2RlbCAhPT0gMjApIHtcclxuICAgICAgICBjYW5BZGQgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIGNhbkFkZCAmJiB0aGlzLmNhblVzZUNhbGVuZGFyKCkgJiYgIXRoaXMuaXNSZWZlcmVuY2UoKTtcclxuICB9XHJcbiAgcHJvdGVjdGVkIGNhbkV4cG9ydENhbGVuZGFyID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgbGV0IGNhbkV4cG9ydCA9IHRydWU7XHJcbiAgICB0aGlzLmdldE11bHRpcGxlU2VsZWN0aW9uKCk/LmZvckVhY2gobiA9PiB7XHJcbiAgICAgIGlmIChuLm1vZGVsICE9PSAxMCAmJiBuLm1vZGVsICE9PSAyMCkge1xyXG4gICAgICAgIGNhbkV4cG9ydCA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY2FuRXhwb3J0ICYmIHRoaXMuY2FuVXNlQ2FsZW5kYXIoKSAmJiAhdGhpcy5pc1JlZmVyZW5jZSgpO1xyXG4gIH1cclxuICBwcm90ZWN0ZWQgY2FuU2F2ZUFzUGRmID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0U2luZ2xlU2VsZWN0aW9uKCk7XHJcbiAgICByZXR1cm4gaXRlbSAhPT0gbnVsbCAmJiBpdGVtPy5tb2RlbCAhPT0gQ2xpcHBlck1vZGVsLkNvb3JkaW5hbWVudG87XHJcbiAgfVxyXG4gIHByb3RlY3RlZCBjYW5TZXRBc1JlYWQgPSAoKTogYm9vbGVhbiA9PiB7XHJcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0TXVsdGlwbGVTZWxlY3Rpb24oKTtcclxuICAgIHJldHVybiB0aGlzLmlzUmVhZGFibGUoKSAmJiAoaXRlbXMubGVuZ3RoID4gMSB8fCAoaXRlbXMubGVuZ3RoID09PSAxICYmIGl0ZW1zWzBdLmlzUmVhZCAhPT0gdHJ1ZSAmJlxyXG4gICAgICBDbGlwcGVyVXRpbHMuaXNDbGlwcGVyTW9kZWxSZWFkYWJsZSh0aGlzLmlzUmVhZGFibGVNb2RlbCgpID8/IGl0ZW1zWzBdLm1vZGVsKSkpO1xyXG4gIH07XHJcbiAgcHJvdGVjdGVkIGNhblNldEFzVW5yZWFkID0gKCk6IGJvb2xlYW4gPT4ge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldE11bHRpcGxlU2VsZWN0aW9uKCk7XHJcbiAgICByZXR1cm4gdGhpcy5pc1JlYWRhYmxlKCkgJiYgKGl0ZW1zLmxlbmd0aCA+IDEgfHwgKGl0ZW1zLmxlbmd0aCA9PT0gMSAmJiBpdGVtc1swXS5pc1JlYWQgPT09IHRydWUgJiZcclxuICAgICAgQ2xpcHBlclV0aWxzLmlzQ2xpcHBlck1vZGVsUmVhZGFibGUodGhpcy5pc1JlYWRhYmxlTW9kZWwoKSA/PyBpdGVtc1swXS5tb2RlbCkpKTtcclxuICB9O1xyXG4gIHByb3RlY3RlZCBjYW5BY2Nlc3NSUyA9ICgpOiBib29sZWFuID0+IHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRNdWx0aXBsZVNlbGVjdGlvbigpO1xyXG4gICAgcmV0dXJuIHRoaXMuY2xpcHBlclNlcnZpY2Uuc3VwcG9ydHNSUygpICYmIHRoaXMucGFyZW50KCk/LlJTX2VuYWJsZWQoaXRlbXMpID09PSB0cnVlO1xyXG4gIH07XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uU291cmNlKCkgPT09IFwic2VsZWN0aW9uXCIpIHtcclxuICAgICAgdGhpcy5wYXJlbnQoKT8uc2VsZWN0aW9uPy5jaGFuZ2VkXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMudW5zdWJzY3JpYmUubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5jb21wbGV0ZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIEdldCBhIHNpbmdsZSBzZWxlY3Rpb25cclxuICAgKiBAcmV0dXJucyB0aGUgc2luZ2xlIHNlbGVjdGlvbiBvciBudWxsXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGdldFNpbmdsZVNlbGVjdGlvbigpOiBDbGlwcGVyRG9jdW1lbnRJbmZvIHwgbnVsbCB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAodGhpcy5pdGVtKCkpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXRlbSgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbigpLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24oKVswXTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IG11bHRpcGxlIHNlbGVjdGlvblxyXG4gICAqIEByZXR1cm5zIDogdGhlIG11bHRpcGxlIHNlbGVjdGlvbiBvciBhcnJheSBlbXB0eVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBnZXRNdWx0aXBsZVNlbGVjdGlvbigpOiBDbGlwcGVyRG9jdW1lbnRJbmZvW10ge1xyXG4gICAgaWYgKHRoaXMuaXRlbSgpKSB7XHJcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW0oKTtcclxuICAgICAgaWYgKGl0ZW0pIHtcclxuICAgICAgICByZXR1cm4gW2l0ZW1dO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24oKTtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIC8qKiBcclxuICAgKiBTaG93IGFuZCBoaWRlIHN1YiBtZW51c1xyXG4gICAqIEBwYXJhbSB0cmlnZ2VyOiB0aGUgdHJpZ2dlciB0byB1c2Ugb3IgbnVsbCB0byBkZXNlbGVjdFxyXG4gICovXHJcbiAgcHJvdGVjdGVkIHNob3dTdWJNZW51KHRyaWdnZXI6IE1hdE1lbnVUcmlnZ2VyIHwgbnVsbCA9IG51bGwpIHtcclxuICAgIHRoaXMuYWxsTWVudVRyaWdnZXJzLmZvckVhY2gobWVudVRyaWdnZXIgPT4ge1xyXG4gICAgICBjb25zdCBtZW51ID0gbWVudVRyaWdnZXIoKTtcclxuICAgICAgaWYgKG1lbnUpIHtcclxuICAgICAgICBpZiAobWVudS5tZW51T3Blbikge1xyXG4gICAgICAgICAgbWVudS5jbG9zZU1lbnUoKTtcclxuICAgICAgICAgIHRoaXMucmVzZXRTdWJNZW51KG1lbnUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0cmlnZ2VyPy5vcGVuTWVudSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVzZXQgc3ViIG1lbnVcclxuICAgKiBAcGFyYW0gdHJpZ2dlcjogdGhlIHRyaWdnZXIgdG8gdXNlXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHJlc2V0U3ViTWVudSh0cmlnZ2VyOiBNYXRNZW51VHJpZ2dlcikge1xyXG4gICAgdGhpcy5yZW5kZXJlcjIucmVtb3ZlQ2xhc3ModHJpZ2dlclsnX2VsZW1lbnQnXS5uYXRpdmVFbGVtZW50LCAnY2RrLWZvY3VzZWQnKTtcclxuICAgIHRoaXMucmVuZGVyZXIyLnJlbW92ZUNsYXNzKHRyaWdnZXJbJ19lbGVtZW50J10ubmF0aXZlRWxlbWVudCwgJ2Nkay1wcm9ncmFtLWZvY3VzZWQnKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENoZWNrIGlmIGN1cnJlbnQgaXRlbSBvciBzZWxlY3Rpb24gaXMgcmVhZFxyXG4gICAqIEByZXR1cm5zIDAgaWYgbm90IHJlYWQsIDEgaWYgcmVhZCwgMiBpZiB1bmtub3duXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGlzUmVhZCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuaXRlbSgpKSByZXR1cm4gdGhpcy5pdGVtKCk/LmlzUmVhZCA9PT0gdHJ1ZSA/IDEgOiAwO1xyXG4gICAgaWYgKHRoaXMucGFyZW50KCk/Lmhhc0FueVNlbGVjdGlvbigpKSByZXR1cm4gMjtcclxuICAgIGNvbnN0IGZpcnN0U2VsZWN0aW9uID0gdGhpcy5wYXJlbnQoKT8uZ2V0U2luZ2xlU2VsZWN0aW9uKCk7XHJcbiAgICBpZiAoZmlyc3RTZWxlY3Rpb24pIHtcclxuICAgICAgcmV0dXJuIGZpcnN0U2VsZWN0aW9uLmlzUmVhZCA9PT0gdHJ1ZSA/IDEgOiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgdGhlIGlzIHJlYWQgZmxhZyB2YWx1ZVxyXG4gICAqIEBwYXJhbSB2YWx1ZTogdHJ1ZSBvciBmYWxzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzZXRSZWFkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLnBhcmVudCgpPy5zZXRSZWFkKHZhbHVlLCB0aGlzLml0ZW0oKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBPcGVuIGEgZG9jdW1lbnRcclxuICAgKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIFxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBvcGVuKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8pIHtcclxuICAgIGlmIChpdGVtLmRvY3VtZW50SWQpIHtcclxuICAgICAgdGhpcy5wYXJlbnQoKT8ub3BlbihpdGVtLmRvY3VtZW50SWQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAqIE9wZW4gZG9jdW1lbnQgcmVmZXJlbmNlc1xyXG4gKiBAcGFyYW0gaXRlbSA6IHRoZSBpdGVtIFxyXG4gKiBAcGFyYW0gbW9kZTogdGhlIG1vZGVcclxuICovXHJcbiAgcHJvdGVjdGVkIG9wZW5SZWZlcmVuY2VzKGl0ZW06IENsaXBwZXJEb2N1bWVudEluZm8sIG1vZGU6IG51bWJlcikge1xyXG4gICAgaWYgKGl0ZW0uZG9jdW1lbnRJZCkge1xyXG4gICAgICB0aGlzLnBhcmVudCgpPy5vcGVuUmVmZXJlbmNlcyhpdGVtLmRvY3VtZW50SWQsIG1vZGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbn1cclxuIiwiQGlmIChjYW5EZXNlbGVjdEFsbCgpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCkuc2VsZWN0aW9uPy5jbGVhcigpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInRGVzZWxlemlvbmEgdHV0dGknXCJcclxuICAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPG1hdC1pY29uPmNsZWFyPC9tYXQtaWNvbj5EZXNlbGV6aW9uYSB0dXR0aVxyXG48L2J1dHRvbj5cclxufSBAZWxzZSBpZiAoY2FuTWFuYWdlQmFnKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKS5vcGVuQmFnKClcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidHZXN0aXNjaSBkb2N1bWVudGkgZGkgbGF2b3JvJ1wiXHJcbiAgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gIDxtYXQtaWNvbj53b3JrX291dGxpbmU8L21hdC1pY29uPkdlc3Rpc2NpIGRvY3VtZW50aSBkaSBsYXZvcm9cclxuPC9idXR0b24+XHJcbn1cclxuQGlmIChjYW5PcGVuKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0FwcmkgZG9jdW1lbnRvJ1wiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIlxyXG4gIChjbGljayk9XCJvcGVuKGdldFNpbmdsZVNlbGVjdGlvbigpKVwiPlxyXG4gIDxtYXQtaWNvbj48L21hdC1pY29uPkFwcmlcclxuPC9idXR0b24+XHJcbn1cclxuQGlmIChjYW5BZGRUb1dvcmtpbmdEb2N1bWVudHMoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInQWdnaXVuZ2kgYWkgZG9jdW1lbnRpIGRpIGxhdm9ybydcIlxyXG4gIChjbGljayk9XCJwYXJlbnQoKS5hZGRJdGVtc1RvQmFnKGdldE11bHRpcGxlU2VsZWN0aW9uKCkpXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gIDxtYXQtaWNvbj53b3JrX291dGxpbmU8L21hdC1pY29uPkFnZ2l1bmdpIGFpIGRvY3VtZW50aSBkaSBsYXZvcm9cclxuPC9idXR0b24+XHJcbn1cclxuQGlmKGNhblByaW50KCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKS5wcmludCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInU3RhbXBhIGRvY3VtZW50bydcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMjBweFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeExheW91dD1cInJvd1wiIGZ4RmlsbCBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5wcmludDwvbWF0LWljb24+XHJcbiAgICAgIDxkaXY+U3RhbXBhPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJhY2NlbnQgc21hbGwgYm9sZFwiPkNUUkwrUDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYoY2FuRmluZCgpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCkuZmluZCgpXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInVHJvdmEgbmVsIGRvY3VtZW50bydcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudSgpXCI+XHJcbiAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0R2FwPVwiMjBweFwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeEZpbGw+XHJcbiAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeExheW91dD1cInJvd1wiIGZ4RmlsbCBmeExheW91dEFsaWduPVwic3RhcnQgY2VudGVyXCI+XHJcbiAgICAgIDxtYXQtaWNvbj5maW5kX2luX3BhZ2U8L21hdC1pY29uPlxyXG4gICAgICA8ZGl2PlRyb3ZhIG5lbCBkb2N1bWVudG88L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImFjY2VudCBzbWFsbCBib2xkXCI+Q1RSTCtGPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoY2FuU2VuZEJ5RW1haWwoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gKGNsaWNrKT1cInBhcmVudCgpLnNlbmRJdGVtc1RvKGdldE11bHRpcGxlU2VsZWN0aW9uKCkpXCJcclxuICBbYXR0ci5hcmlhLWxhYmVsXT1cIidJbnZpYSBkb2N1bWVudG8gcGVyIGVtYWlsJ1wiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIj5cclxuICA8bWF0LWljb24+c2VuZDwvbWF0LWljb24+SW52aWEgcGVyIGVtYWlsXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoY2FuQWRkVG9BcmNoaXZlKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIChjbGljayk9XCJwYXJlbnQoKS5hZGRUb0FyY2hpdmUoZ2V0TXVsdGlwbGVTZWxlY3Rpb24oKSlcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidBcmNoaXZpYSdcIj5cclxuICA8bWF0LWljb24+YWNjb3VudF90cmVlPC9tYXQtaWNvbj5BcmNoaXZpYVxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKGNhblNhdmVBc1BkZigpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSAoY2xpY2spPVwicGFyZW50KCkuZXhwb3J0UGRmKGdldFNpbmdsZVNlbGVjdGlvbigpKVwiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIlxyXG4gIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1NhbHZhIGRvY3VtZW50byBpbiBwZGYnXCI+XHJcbiAgPG1hdC1pY29uPnNhdmVfYWx0PC9tYXQtaWNvbj5TYWx2YSBpbiBwZGZcclxuPC9idXR0b24+XHJcbn1cclxuQGlmIChjYW5PcGVuKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0dlbmVyYSB1biBsaW5rIHBlcm1hbmVudGUgZGEgdXRpbGl6emFyZSBlc3Rlcm5hbWVudGUnXCJcclxuICAoY2xpY2spPVwicGFyZW50KCkuc2hvd0xpbmsoZ2V0U2luZ2xlU2VsZWN0aW9uKCkpXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gIDxtYXQtaWNvbj5saW5rPC9tYXQtaWNvbj5MaW5rXHJcbjwvYnV0dG9uPlxyXG59XHJcbkBpZiAoY2FuT3BlbigpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidDb3BpYSBtZXRhZGF0aSBuZWdsaSBhcHB1bnRpJ1wiXHJcbiAgKGNsaWNrKT1cInBhcmVudCgpLmNvcHlNZXRhZGF0YVRvQ2xpcGJvYXJkKGdldFNpbmdsZVNlbGVjdGlvbigpKVwiIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KClcIj5cclxuICA8bWF0LWljb24+Y29udGVudF9jb3B5PC9tYXQtaWNvbj5Db3BpYSBtZXRhZGF0aVxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKCFpc1JlZmVyZW5jZSgpICYmIGNhbk9wZW4oKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW21hdE1lbnVUcmlnZ2VyRm9yXT1cImxpbmtzTWVudVwiICNsaW5rc01lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIlxyXG4gIChtb3VzZWVudGVyKT1cInNob3dTdWJNZW51KGxpbmtzTWVudVRyaWdnZXIpXCIgKG1vdXNlbGVhdmUpPVwicmVzZXRTdWJNZW51KGxpbmtzTWVudVRyaWdnZXIpXCI+XHJcbiAgPG1hdC1pY29uPmNvbXBhcmVfYXJyb3dzPC9tYXQtaWNvbj5Db2xsZWdhbWVudGlcclxuPC9idXR0b24+XHJcbjxtYXQtbWVudSAjbGlua3NNZW51PVwibWF0TWVudVwiPlxyXG4gIEBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgY2FuT3BlbigpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBpIGRvY3VtZW50aSByaWNoaWFtYXRpIGRhIHF1ZXN0bydcIlxyXG4gICAgKGNsaWNrKT1cIm9wZW5SZWZlcmVuY2VzKGdldFNpbmdsZVNlbGVjdGlvbigpLCAxKVwiPlxyXG4gICAgRG9jdW1lbnRpIHJpY2hpYW1hdGlcclxuICA8L2J1dHRvbj5cclxuICB9XHJcbiAgQGlmICghaXNSZWZlcmVuY2UoKSAmJiBjYW5PcGVuKCkpIHtcclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIGkgZG9jdW1lbnRpIGNoZSByaWNoaWFtYW5vIHF1ZXN0bydcIlxyXG4gICAgKGNsaWNrKT1cIm9wZW5SZWZlcmVuY2VzKGdldFNpbmdsZVNlbGVjdGlvbigpLCAyKVwiPlxyXG4gICAgRG9jdW1lbnRpIGNoZSByaWNoaWFtYW5vXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoIWlzUmVmZXJlbmNlKCkgJiYgaXNMYXdJbkZvcmNlKCkgJiYgY2FuT3BlbigpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ01vc3RyYSBnaXVyaXNwcnVkZW56YSdcIiAoY2xpY2spPVwib3BlblJlZmVyZW5jZXMoZ2V0U2luZ2xlU2VsZWN0aW9uKCksIDQpXCI+XHJcbiAgICBKdXJpc1xyXG4gIDwvYnV0dG9uPlxyXG4gIH1cclxuICBAaWYgKCFpc1JlZmVyZW5jZSgpICYmIGlzTGF3SW5Gb3JjZSgpICYmIGNhbk9wZW4oKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgbW9kaWZpY2hlIG5vcm1hdGl2ZSdcIlxyXG4gICAgKGNsaWNrKT1cIm9wZW5SZWZlcmVuY2VzKGdldFNpbmdsZVNlbGVjdGlvbigpLCAzKVwiPlxyXG4gICAgTW9kaWZpY2hlXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG48L21hdC1tZW51PlxyXG59XHJcbkBpZiAoY2FuQWRkVG9DYWxlbmRhcigpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidBZ2dpdW5naSBhbCBjYWxlbmRhcmlvJ1wiXHJcbiAgKGNsaWNrKT1cInBhcmVudCgpLmFkZFRvQ2FsZW5kYXIoZ2V0U2luZ2xlU2VsZWN0aW9uKCkpXCI+XHJcbiAgPG1hdC1pY29uPmFsYXJtPC9tYXQtaWNvbj4gQ3JlYSBzY2FkZW56YVxyXG48L2J1dHRvbj5cclxufVxyXG5AaWYgKGNhbkV4cG9ydENhbGVuZGFyKCkpIHtcclxuQGlmKHVzZVNlbGVjdGlvbnMoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInSW1wb3J0YSBpbiBPdWx0b29rIChpQ2FsYW5kYXIpJ1wiIChjbGljayk9XCJwYXJlbnQoKS5leHBvcnRSZXN1bHRzKDIpXCI+XHJcbiAgPG1hdC1pY29uPm1haWxfb3V0bGluZTwvbWF0LWljb24+SW1wb3J0YSBpbiBPdXRsb29rIChpQ2FsZW5kYXIpXHJcbjwvYnV0dG9uPlxyXG59IEBlbHNlIGlmIChpdGVtKCkpIHtcclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ0ltcG9ydGEgaW4gT3VsdG9vayAoaUNhbGFuZGFyKSdcIiAoY2xpY2spPVwicGFyZW50KCkuZXhwb3J0SXRlbXMoW2l0ZW0oKS5kb2N1bWVudElkXSwgbnVsbCwgIDIpXCI+XHJcbiAgPG1hdC1pY29uPm1haWxfb3V0bGluZTwvbWF0LWljb24+SW1wb3J0YSBpbiBPdXRsb29rIChpQ2FsZW5kYXIpXHJcbjwvYnV0dG9uPlxyXG59XHJcbn1cclxuQGlmIChjYW5TZXRBc1VucmVhZCgpKSB7XHJcbjxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidTZWduYSBjb21lIGRhIGxlZ2dlcmUnXCIgKGNsaWNrKT1cInNldFJlYWQoZmFsc2UpXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gIDxtYXQtaWNvbj5vdXRsaW5lZF9mbGFnPC9tYXQtaWNvbj5TZWduYSBjb21lIGRhIGxlZ2dlcmVcclxuPC9idXR0b24+XHJcbn1cclxuQGlmIChjYW5TZXRBc1JlYWQoKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInU2VnbmEgY29tZSBnacOgIGxldHRvJ1wiIChjbGljayk9XCJzZXRSZWFkKHRydWUpXCIgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gIDxtYXQtaWNvbj5mbGFnPC9tYXQtaWNvbj5TZWduYSBjb21lIGdpw6AgbGV0dG9cclxuPC9idXR0b24+XHJcbn1cclxuXHJcblxyXG5AaWYgKGlzTGF3SW5Gb3JjZSgpICYmIGNhbk9wZW4oKSkge1xyXG48YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTW9zdHJhIHJlcG9ydCdcIiAoY2xpY2spPVwicGFyZW50KCkucmVwb3J0KGdldFNpbmdsZVNlbGVjdGlvbigpKVwiXHJcbiAgKG1vdXNlZW50ZXIpPVwic2hvd1N1Yk1lbnUoKVwiPlxyXG4gIDxtYXQtaWNvbj5hc3NpZ25tZW50PC9tYXQtaWNvbj5SZXBvcnRcclxuPC9idXR0b24+XHJcbn1cclxuXHJcbkBpZiAoY2FuQWNjZXNzUlMoKSkge1xyXG48bWF0LWRpdmlkZXI+PC9tYXQtZGl2aWRlcj5cclxuPGJ1dHRvbiBtYXQtbWVudS1pdGVtIG1hdFRvb2x0aXA9XCJSZWdpc3RybyAmIFNjYWRlbnphcmlvXCIgW2F0dHIuYXJpYS1sYWJlbF09XCInT3B6aW9uaSBkaSBSZWdpc3RybyAmIFNjYWRlbnphcmlvJ1wiXHJcbiAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInJzTWVudVwiICNyc01lbnVUcmlnZ2VyPVwibWF0TWVudVRyaWdnZXJcIiAobW91c2VlbnRlcik9XCJzaG93U3ViTWVudShyc01lbnVUcmlnZ2VyKVwiXHJcbiAgKG1vdXNlbGVhdmUpPVwicmVzZXRTdWJNZW51KHJzTWVudVRyaWdnZXIpXCI+XHJcbiAgPG1hdC1pY29uPmFsYXJtX29uPC9tYXQtaWNvbj5cclxuICBSZWdpc3RybyBlIHNjYWRlbnphcmlvXHJcbjwvYnV0dG9uPlxyXG48bWF0LW1lbnUgI3JzTWVudT1cIm1hdE1lbnVcIj5cclxuICA8YnV0dG9uIG1hdC1tZW51LWl0ZW0gW2F0dHIuYXJpYS1sYWJlbF09XCInTnVvdmEgbGVnZ2UnXCIgKGNsaWNrKT1cInBhcmVudCgpLlJTX25ld0xhdyhnZXRNdWx0aXBsZVNlbGVjdGlvbigpKVwiPlxyXG4gICAgTnVvdmEgbGVnZ2VcclxuICA8L2J1dHRvbj5cclxuICBAaWYgKGNhbk9wZW4oKSkge1xyXG4gIDxidXR0b24gbWF0LW1lbnUtaXRlbSBbYXR0ci5hcmlhLWxhYmVsXT1cIidOdW92YSBhdHRpdml0w6AnXCIgKGNsaWNrKT1cInBhcmVudCgpLlJTX25ld0FjdGl2aXR5KGdldFNpbmdsZVNlbGVjdGlvbigpKVwiPlxyXG4gICAgTnVvdmEgYXR0aXZpdMOgXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG4gIEBpZiAoY2FuT3BlbigpKSB7XHJcbiAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1JlcG9ydCB1dGlsaXp6byBub3JtYSdcIlxyXG4gICAgKGNsaWNrKT1cInBhcmVudCgpLlJTX3VzYWdlUmVwb3J0KGdldFNpbmdsZVNlbGVjdGlvbigpKVwiPlxyXG4gICAgUmVwb3J0IHV0aWxpenpvIG5vcm1hXHJcbiAgPC9idXR0b24+XHJcbiAgfVxyXG48L21hdC1tZW51PlxyXG59Il19