ngx-histaff-alpha 3.6.6 → 3.6.7
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.
|
@@ -439,7 +439,7 @@ export class CoreOrgTreeComponent extends CoreFormControlBaseComponent {
|
|
|
439
439
|
multi: true,
|
|
440
440
|
useExisting: CoreOrgTreeComponent,
|
|
441
441
|
},
|
|
442
|
-
], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "displayContent", first: true, predicate: ["displayContent"], descendants: true }, { propertyName: "reducedIconWrapper", first: true, predicate: ["reducedIconWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track root) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\r\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler custom-icon-parent-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"selectedKey===id.toString()\" [class.highlighted]=\"highlighted\"\r\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;border-radius:5px;--item-height: 35px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 9px;--line-color: \"transparent\";--active-item-color: #F37540;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);transform:translate(14px,8px)}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{background:#e7e7e7}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow-y:auto;overflow-x:hidden;position:relative;width:100%;border-radius:5px}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;top:12px;left:-5px;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
|
|
442
|
+
], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "displayContent", first: true, predicate: ["displayContent"], descendants: true }, { propertyName: "reducedIconWrapper", first: true, predicate: ["reducedIconWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track root) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\r\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler custom-icon-parent-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"selectedKey===id.toString()\" [class.highlighted]=\"highlighted\"\r\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;--item-height: 35px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 9px;--line-color: \"transparent\";--active-item-color: #F37540;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);transform:translate(14px,8px)}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{background:#e7e7e7}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow:auto;position:relative;width:100%}.core-org-tree-container .scroll-container::-webkit-scrollbar-corner{background-color:transparent}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;top:12px;left:-5px;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i8.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
|
|
443
443
|
}
|
|
444
444
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreOrgTreeComponent, decorators: [{
|
|
445
445
|
type: Component,
|
|
@@ -457,7 +457,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
457
457
|
multi: true,
|
|
458
458
|
useExisting: CoreOrgTreeComponent,
|
|
459
459
|
},
|
|
460
|
-
], template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track root) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\r\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler custom-icon-parent-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"selectedKey===id.toString()\" [class.highlighted]=\"highlighted\"\r\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;border-radius:5px;--item-height: 35px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 9px;--line-color: \"transparent\";--active-item-color: #F37540;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);transform:translate(14px,8px)}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{background:#e7e7e7}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow-y:auto;overflow-x:hidden;position:relative;width:100%;border-radius:5px}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;top:12px;left:-5px;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"] }]
|
|
460
|
+
], template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track root) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\r\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler custom-icon-parent-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"selectedKey===id.toString()\" [class.highlighted]=\"highlighted\"\r\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;--item-height: 35px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 9px;--line-color: \"transparent\";--active-item-color: #F37540;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);transform:translate(14px,8px)}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{background:#e7e7e7}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow:auto;position:relative;width:100%}.core-org-tree-container .scroll-container::-webkit-scrollbar-corner{background-color:transparent}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;top:12px;left:-5px;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"] }]
|
|
461
461
|
}], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.RecursiveService }, { type: i3.MultiLanguageService }, { type: i4.LayoutService }, { type: i5.CoreOrgTreeService }, { type: i6.AlertService }, { type: i7.OrganizationService }], propDecorators: { lineColor: [{
|
|
462
462
|
type: Input
|
|
463
463
|
}], fullWidthMode: [{
|
|
@@ -493,4 +493,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
493
493
|
type: ViewChild,
|
|
494
494
|
args: ['reducedIconWrapper']
|
|
495
495
|
}] } });
|
|
496
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1vcmctdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtb3JnLXRyZWUvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9DLEtBQUssRUFBYyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBOEMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZMLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUM7QUFRMUgsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUM3RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUsxRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSwyQkFB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QUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsc0JBQXNCO3lCQUNsQztxQkFDRjs0UUFHUSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDUSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDQyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDTSxrQkFBa0I7c0JBQWxELFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSW5wdXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG9mLCBzd2l0Y2hNYXAsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBSZWN1cnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVjdXJzaXZlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlT3JnVHJlZVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLW9yZy10cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IElPcmdUcmVlSXRlbSwgSU9yZ1RyZWVMaW5lckl0ZW0gfSBmcm9tICcuL0lPcmdUcmVlSXRlbSc7XHJcblxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlT3JnVHJlZUluc3RhbmNlLCBPcmdhbml6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnYW5pemF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0IH0gZnJvbSAnLi4vLi4vLi4vLi4vYXNzZXRzL2pzL3Jlc2N1c2l2ZV93aydcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29yZUNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1jaGVja2JveC9jb3JlLWNoZWNrYm94L2NvcmUtY2hlY2tib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVSZWR1Y2VySWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtcmVkdWNlci1pY29uL2NvcmUtcmVkdWNlci1pY29uL2NvcmUtcmVkdWNlci1pY29uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcclxuXHJcbmV4cG9ydCBlbnVtIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUge1xyXG4gIEFDVElWQVRFRF9TSU5HTEUgPSAnQUNUSVZBVEVEX1NJTkdMRScsXHJcbiAgQUNUSVZBVEVEX0lOSEVSSVRBTkNFID0gJ0FDVElWQVRFRF9JTkhFUklUQU5DRScsXHJcbiAgQ0hFQ0tFRCA9ICdDSEVDS0VEJyxcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRW51bUNvcmVPcmdUcmVlYVNlYXJjaE1vZGUge1xyXG4gIEhJR0hMSUdIVCA9ICdISUdITElHSFQnLFxyXG4gIFJFRFVDRSA9ICdSRURVQ0UnXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1vcmctdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCxcclxuICAgIENvcmVDaGVja2JveENvbXBvbmVudCxcclxuICAgIENvcmVSZWR1Y2VySWNvbkNvbXBvbmVudCxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBUb29sdGlwRGlyZWN0aXZlLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29yZU9yZ1RyZWVDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlT3JnVHJlZUNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQElucHV0KCkgbGluZUNvbG9yOiBzdHJpbmcgPSAndHJhbnNwYXJlbnQnO1xyXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aE1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFjY2Vzc29yTW9kZTogRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZSA9IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRDtcclxuXHJcbiAgLy9UTyBCRSBORVdcclxuICBASW5wdXQoKSBzZWFyY2hNb2RlOiBFbnVtQ29yZU9yZ1RyZWVhU2VhcmNoTW9kZSA9IEVudW1Db3JlT3JnVHJlZWFTZWFyY2hNb2RlLlJFRFVDRTtcclxuXHJcbiAgQElucHV0KCkgZnVsbFJlbmRlcmluZyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyOyAvLyBDaGnhu4F1IGNhbyBj4bunYSBDb3JlT3JnVHJlZSBj4bqnbiDEkcaw4bujYyB0cnV54buBbiB2w6BvIVxyXG4gIEBJbnB1dCgpIGRpc2FibGVkTG9vcEV4cGFuZCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd0NoZWNrSW5oZXJpdGFuY2UhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVkSWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTsgLy8gMjAyNC0wNS0xMDogdG8gYmUgaW1wbGVtZW50ZWRcclxuXHJcbiAgQE91dHB1dCgpIGl0ZW1Eb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRhaW5lcicpIHNjcm9sbENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZGlzcGxheUNvbnRlbnQnKSBkaXNwbGF5Q29udGVudCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgncmVkdWNlZEljb25XcmFwcGVyJykgcmVkdWNlZEljb25XcmFwcGVyITogRWxlbWVudFJlZjtcclxuXHJcbiAgb3ZlcnJpZGUgdmFsdWUhOiBudW1iZXJbXTtcclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShvYmo6IG51bWJlcltdKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5hY2Nlc3Nvck1vZGUpIHtcclxuICAgICAgY2FzZSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQ6XHJcbiAgICAgICAgaWYgKCEhb2JqKSB7XHJcbiAgICAgICAgICBjb25zdCBjaGVja2VkS2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgIHRoaXMuY2hlY2tlZElkcyA9IG9iajsgLy8gPD09PSAyNC8xMC8yMDIzXHJcbiAgICAgICAgICBvYmoubWFwKHggPT4gY2hlY2tlZEtleXMucHVzaCh4LnRvU3RyaW5nKCkpKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2Uud3JpdGVWYWx1ZUNoZWNrZWQoY2hlY2tlZEtleXMsIHRoaXMuZGF0YSwgdGhpcy5kaXNhYmxlZExvb3BFeHBhbmQpLnN1YnNjcmliZShfID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YT8ubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfU0lOR0xFOlxyXG4gICAgICBjYXNlIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFOlxyXG4gICAgICAgIGlmICghIW9iaikge1xyXG4gICAgICAgICAgY29uc3QgYWN0aXZhdGVkS2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgIG9iai5tYXAoeCA9PiBhY3RpdmF0ZWRLZXlzLnB1c2goeC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlLndyaXRlVmFsdWVBY3RpdmF0ZWQoYWN0aXZhdGVkS2V5cywgdGhpcy5kYXRhLCB0aGlzLmRpc2FibGVkTG9vcEV4cGFuZCkuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhPy5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlID09PSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHtcclxuXHJcbiAgICB9IGVsc2UgLyogRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfU0lOR0xFIG9yIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFICovIHtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBhY3RpdmVJZHM6IG51bWJlcltdID0gW107XHJcblxyXG4gIGNoZWNrZWRJZHM6IG51bWJlcltdID0gW107XHJcblxyXG4gIC8vIGZvciBkZWJ1Z2dpbmdcclxuICAvLyBhY3RpdmVJZHNTdHJpbmchOiBzdHJpbmc7ICBcclxuICBkYXRhITogSU9yZ1RyZWVJdGVtW107XHJcbiAgLy9kYXRhRmlsdGVyZWQhOiBJT3JnVHJlZUl0ZW1bXTtcclxuICBsb2FkaW5nITogYm9vbGVhbjtcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIGxpbm5lck9yZ0FycmF5ITogSU9yZ1RyZWVMaW5lckl0ZW1bXTtcclxuICBzZWFyY2ghOiBzdHJpbmc7XHJcbiAgc2VhcmNoJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICByZWR1Y2VkITogYm9vbGVhbjtcclxuICBzZWFyY2hQbGFjZWhvbGRlciA9IEVudW1UcmFuc2xhdGVLZXkuVUlfQ09NTU9OX1BMQUNFX0hPTERFUl9TRUFSQ0hfT1JHO1xyXG5cclxuICBpbml0aWFsaXppbmchOiBib29sZWFuO1xyXG4gIGNoZWNrSW5oZXJpdGFuY2U6IGJvb2xlYW4gPSB0cnVlOyAvLyBkZWZhdWx0IHZhbHVlIGlzIHRydWVcclxuICBzaG93RGlzc29sdmVkOiBib29sZWFuID0gZmFsc2U7IC8vIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2VcclxuICBzZWxlY3RlZEtleSE6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBzZWxlY3RlZEl0ZW0hOiBJT3JnVHJlZUxpbmVySXRlbTtcclxuICBsYW5nITogc3RyaW5nO1xyXG4gIC8vcmVkdWNlZCQhOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XHJcblxyXG4gIGluc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG4gIHNjcm9sbENvbnRhaW5lckhlaWdodCE6IG51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvL3B1YmxpYyBvdmVycmlkZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVjdXJzaXZlU2VydmljZTogUmVjdXJzaXZlU2VydmljZSxcclxuICAgIHByaXZhdGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSxcclxuICAgIHB1YmxpYyBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlT3JnVHJlZVNlcnZpY2U6IENvcmVPcmdUcmVlU2VydmljZSxcclxuICAgIC8vIHByaXZhdGUgY29yZU9yZ1RyZWVTdGF0ZTogQ29yZU9yZ1RyZWVTdGF0ZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3JnYW5pemF0aW9uU2VydmljZTogT3JnYW5pemF0aW9uU2VydmljZSxcclxuICApIHtcclxuICAgIHN1cGVyKC8qaW5qZWN0b3IqLyk7XHJcbiAgICB0aGlzLmluaXRpYWxpemluZyA9IHRydWU7XHJcblxyXG4gICAgLy8gdGhpcy5yZWR1Y2VkJCA9IHRoaXMuY29yZU9yZ1RyZWVTdGF0ZS5jb3JlT3JnVHJlZVJlZHVjZWQkO1xyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6aW5nID0gZmFsc2U7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2hlaWdodCddKSB7XHJcbiAgICAgIHRoaXMucmVzaXplSGVpZ2h0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvL3RoaXMubGF5b3V0U2VydmljZS5sZWZ0YmFyT3BlbiQubmV4dChmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5pbnN0YW5jZU51bWJlciA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgY29uc3QgbmV3SW5zdGFuY2U6IElDb3JlT3JnVHJlZUluc3RhbmNlID0ge1xyXG4gICAgICBpbnN0YW5jZU51bWJlcjogdGhpcy5pbnN0YW5jZU51bWJlcixcclxuICAgICAgc2VsZWN0ZWRLZXkkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKSxcclxuICAgICAgYWN0aXZlS2V5cyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKSxcclxuICAgICAgY2hlY2tlZEtleXMkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSksXHJcbiAgICAgIGV4cGFuZGVkS2V5cyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKSxcclxuICAgICAgY2hlY2tJbmhlcml0YW5jZSQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSlcclxuICAgIH1cclxuICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5pbnN0YW5jZXMucHVzaChuZXdJbnN0YW5jZSlcclxuXHJcbiAgICAvLyBDaGVjayB4ZW0gY2hp4buBdSBjYW8gaGVpZ2h0IGPDsyDEkcaw4bujYyB0cnV54buBbiB2w6BvIGhheSBraMO0bmdcclxuICAgIGlmICh0aGlzLmhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIC8vdGhpcy5hbGVydFNlcnZpY2Uud2FybihcIkNvcmVPcmdUcmVlIGtow7RuZyBuaOG6rW4gxJHGsOG7o2MgY2hp4buBdSBjYW8gKGhlaWdodCkgdHJ1eeG7gW4gdsOgbyB04burIGzhu5twIG5nb8OgaS4gQ2hp4buBdSBjYW8gbeG6t2MgxJHhu4tuaCBz4bq9IMSRxrDhu6NjIHTDrW5oIHRvw6FuIGThu7FhIHbDoG8gYuG7kSBj4bulYyBjaMOtbmguXCIsIGFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbnRlbnRDb250YWluZXJIZWlnaHQkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIC8vIGJhc2ljU3BhY2luZyBsw6AgcGFkZGluZ0JvdHRvbSBj4bunYSBs4bubcCBjb250ZW50LWNvbnRhaW5lclxyXG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSB4IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZztcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5saW5lckRhdGEkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMubGlubmVyT3JnQXJyYXkgPSB4O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQgY2hhbmdlc1wiLCB4KVxyXG5cclxuICAgICAgICBjb25zdCBuZXdBY3RpdmVJZHM6IG51bWJlcltdID0gW107XHJcbiAgICAgICAgeC5hY3RpdmVLZXlzLm1hcCgoaykgPT4ge1xyXG4gICAgICAgICAgbmV3QWN0aXZlSWRzLnB1c2goTnVtYmVyKGspKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFjdGl2ZUlkcyA9IG5ld0FjdGl2ZUlkcztcclxuICAgICAgICBpZiAodGhpcy5hY2Nlc3Nvck1vZGUgIT09IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRCkge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuYWN0aXZlSWRzO1xyXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmFjdGl2ZUlkcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSB4LnNlbGVjdGVkS2V5O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5zZWFyY2gkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIoKHgpID0+IHggIT09IG51bGwpLFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKCh0ZXh0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzd2l0Y2hNYXAgd29ya3MnKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFVRyAyMDI0IE5FVyA6IE1VU1QgQkUgVEVTVEVEXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaE1vZGUgPT09IEVudW1Db3JlT3JnVHJlZWFTZWFyY2hNb2RlLkhJR0hMSUdIVCkge1xyXG4gICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWN1cnNpdmVTZXJ2aWNlLmZpbmRJdGVtKHRleHQsIHRoaXMuZGF0YSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgIHJldHVybiBvZih0aGlzLnJlY3Vyc2l2ZVNlcnZpY2UucmVkdWNpbmdGaWx0ZXIodGhpcy5zY3JvbGxDb250YWluZXIsIHRleHQpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIGlmICh0aGlzLnNlYXJjaE1vZGUgPT09IEVudW1Db3JlT3JnVHJlZWFTZWFyY2hNb2RlLlJFRFVDRSkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLmRhdGFGaWx0ZXJlZCA9IHggYXMgSU9yZ1RyZWVJdGVtW107XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyRcclxuICAgICAgICAucGlwZShmaWx0ZXIoKHZhbHVlKSA9PiAhISF0aGlzLmluaXRpYWxpemluZyAmJiAhIXZhbHVlKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICBpZiAoISFsb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NvcmVPcmdUcmVlU3RhdHVzJywgSlNPTi5zdHJpbmdpZnkoeCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKCh4KSA9PiAodGhpcy5sYW5nID0geCkpKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUhlaWdodCgpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBoZWlnaHQgaXMgbm90IGdpdmVuIGFuZCB0aGUgdHJlZSByZXNpemUgYXMgc3RhbmRhcmRcclxuICAgIGlmICghISF0aGlzLmhlaWdodCkge1xyXG4gICAgICBjb25zdCBzaXplSGVhZGVySGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1oZWFkZXItaGVpZ2h0JylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBzaXplQ29yZVBhZ2VIZWFkZXJIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnZS1oZWFkZXItaGVpZ2h0JylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gc2l6ZUhlYWRlckhlaWdodCAtIHNpemVDb3JlUGFnZUhlYWRlckhlaWdodDtcclxuXHJcbiAgICAgIGNvbnN0IHBhZ2VIZWFkZXJIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnZS1oZWFkZXItaGVpZ2h0JylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgcGFnaW5hdGlvbkhlaWdodCA9IE51bWJlcihcclxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdpbmF0aW9uLWhlaWdodCcpXHJcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgc2l6ZU1hcmdpbkNvcmVQYWdpbmF0aW9uRnVsbCA9IE51bWJlcihcclxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtbWFyZ2luLWNvcmUtcGFnaW5hdGlvbicpXHJcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgKTtcclxuXHJcblxyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjb250YWluZXJIZWlnaHQgLSBwYWdlSGVhZGVySGVpZ2h0IC0gcGFnaW5hdGlvbkhlaWdodCArIHNpemVNYXJnaW5Db3JlUGFnaW5hdGlvbkZ1bGw7XHJcbiAgICAgIGNvbnNvbGUubG9nKGhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAnLS1oZWlnaHQnLCBoZWlnaHQgKyAncHgnXHJcbiAgICAgICk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgJy0taGVpZ2h0JywgdGhpcy5oZWlnaHQgKyAncHgnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLm9yZ1RyZWVEYXRhJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YSA9IHg7XHJcbiAgICAgICAgICAvL3RoaXMuZGF0YUZpbHRlcmVkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh4KSk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm5ldyBEYXRhIGNvbWluZ1wiLCB0aGlzLmRhdGEsIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxyXG4gICAgICAgICAgaWYgKCEhdGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YS5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG9uSXRlbUNsaWNrTG9jYWwoZTogSU9yZ1RyZWVJdGVtKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpbm5lck9yZ0FycmF5Lm1hcCgoeCkgPT4gKHguYWN0aXZlID0gZmFsc2UpKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5idWlsZFRyZWVEYXRhKCkpO1xyXG4gIH1cclxuXHJcbiAgb25Ub2dnbGVJdGVtKGU6IElPcmdUcmVlSXRlbSkge1xyXG4gICAgY29uc3QgY2xvbmVDb3B5OiBJT3JnVHJlZUxpbmVySXRlbVtdID0gSlNPTi5wYXJzZShcclxuICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5saW5uZXJPcmdBcnJheSlcclxuICAgICk7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBjbG9uZUNvcHkuZmlsdGVyKCh4KSA9PiB4LmlkID09PSBlLmlkKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBmaWx0ZXJbMF0uZXhwYW5kID0gISEhZS5leHBhbmQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxpbm5lck9yZ0FycmF5ID0gY2xvbmVDb3B5O1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmJ1aWxkVHJlZURhdGEoKSk7XHJcbiAgfVxyXG5cclxuICBidWlsZFRyZWVEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBjbG9uZUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMubGlubmVyT3JnQXJyYXkpKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgLy8gQ3JlYXRlIGEgbmV3XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhcIvCfn6Lwn5+iIFdvcmtlciB3b3Jrc1wiKTtcclxuXHJcbiAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobGluZXJfdG9fbmVzdGVkX2FycmF5X3NjcmlwdCk7XHJcbiAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKHsgZGF0YSB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5saXN0O1xyXG4gICAgICAgIC8vdGhpcy5kYXRhRmlsdGVyZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEubGlzdCkpO1xyXG4gICAgICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YT8ubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICBsaXN0OiBjbG9uZUNvcHksXHJcbiAgICAgICAga2V5RmllbGQ6ICdpZCcsXHJcbiAgICAgICAgdGl0bGVGaWVsZDogJ25hbWUnLFxyXG4gICAgICAgIHBhcmVudEZpZWxkOiAncGFyZW50SWQnLFxyXG4gICAgICAgIGFjdGl2ZUZpZWxkOiAnYWN0aXZlJyxcclxuICAgICAgICAvL2luaGVyaXRhbnRBY3RpdmVGaWVsZDogJ2luaGVyaXRhbnRBY3RpdmUnLFxyXG4gICAgICAgIGNoZWNrZWRGaWVsZDogJ2NoZWNrZWQnLFxyXG4gICAgICAgIGV4cGFuZGVkRmllbGQ6ICdleHBhbmQnLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFdlYiB3b3JrZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuXHJcbiAgICAgIC8vIFlvdSBzaG91bGQgYWRkIGEgZmFsbGJhY2sgc28gdGhhdCB5b3VyIHByb2dyYW0gc3RpbGwgZXhlY3V0ZXMgY29ycmVjdGx5LlxyXG4gICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXHJcbiAgICAgICAgICAubGluZXJBcnJheVRvTmVzdGVkQXJyYXkoXHJcbiAgICAgICAgICAgIGNsb25lQ29weSxcclxuICAgICAgICAgICAgJ2lkJyxcclxuICAgICAgICAgICAgJ25hbWUnLFxyXG4gICAgICAgICAgICAncGFyZW50SWQnLFxyXG4gICAgICAgICAgICAnYWN0aXZlJyxcclxuICAgICAgICAgICAgJ2NoZWNrZWQnLFxyXG4gICAgICAgICAgICAnZXhwYW5kJyxcclxuICAgICAgICAgICAgLy9zdGF0dXNcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKG9iaikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvYmoubGlzdDtcclxuICAgICAgICAgICAgLy90aGlzLmRhdGFGaWx0ZXJlZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLmxpc3QpKTtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhPy5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25FeHBhbmRUb2dnbGVyQ2xpY2soZTogSU9yZ1RyZWVJdGVtLCBldmVudDogYW55KTogdm9pZCB7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgbmV3VmFsdWUgPSAhZS50cmVlJEV4cGFuZGVkO1xyXG4gICAgZS50cmVlJEV4cGFuZGVkID0gbmV3VmFsdWU7XHJcblxyXG4gICAgLy8gdXBkYXRpbmcgc3RhdHVzIHdpdGggbmV3VmFsdWVcclxuICAgIGNvbnN0IGN1cnJlbnRFeHBhbmRlZElkcyA9XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlPy5leHBhbmRlZEtleXM7XHJcbiAgICBsZXQgbmV3RXhwYW5kZWRJZHMgPSBjdXJyZW50RXhwYW5kZWRJZHM/LmZpbHRlcihcclxuICAgICAgKF8pID0+ICEhIWN1cnJlbnRFeHBhbmRlZElkcy5pbmNsdWRlcyhlLmlkLnRvU3RyaW5nKCkpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChuZXdWYWx1ZSkge1xyXG4gICAgICBuZXdFeHBhbmRlZElkcz8ucHVzaChlLmlkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0V4cGFuZGVkSWRzPy5zb3J0KCk7XHJcblxyXG4gICAgY29uc3QgbmV3RXhwYW5kZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgbmV3RXhwYW5kZWRJZHMubWFwKCh4KSA9PiBuZXdFeHBhbmRlZEtleXMucHVzaCh4LnRvU3RyaW5nKCkpKTtcclxuXHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUhLFxyXG4gICAgICBleHBhbmRlZEtleXM6IG5ld0V4cGFuZGVkS2V5cyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25JdGVtQ2hlY2soZTogSU9yZ1RyZWVJdGVtLCBuZXdWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pdGVtQ2xpY2s/LmVtaXQoZSk7XHJcbiAgICBpZiAodGhpcy5hY2Nlc3Nvck1vZGUgIT09IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIFdlIGhhdmUgdGhpcyB2YXIgdG8gaG9sZCBub2RlcyB0aGF0IGFyZSBiZWluZyBjaGFuZ2VkXHJcbiAgICBsZXQgdG9nZ2xlZElkczogbnVtYmVyW107XHJcbiAgICAvLyBXZSBzaG91bGQgY2FsY3VsYXRlIGEgbmV3IHN0YXRlIGludG8gdGhpcyB2YXI6IFxyXG4gICAgY29uc3QgbmV3Q2hlY2tlZElkczogbnVtYmVyW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2hlY2tlZElkcykpO1xyXG5cclxuICAgIC8vIFdlIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIHRvZ2dsZWRJZHMgY2hhbmdlZFxyXG4gICAgY29uc3QgY2hhbmdlVmFsdWUgPSAoKSA9PiB7XHJcblxyXG4gICAgICAvLyBJZiBuZXdWYWx1ZSA9PT0gdHJ1ZSwgd2Ugd2lsbCBkaXNjdGludGx5IHB1c2ggY2hhbmdlZCBpZHMgdG8gdGhlIHN0YXRlXHJcbiAgICAgIC8vIE90aGVyd2lzZSB3ZSB3aWxsIHJlbW92ZSB0aGVtIGZyb20gdGhlIHN0YXRlXHJcbiAgICAgIGlmICghIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgdG9nZ2xlZElkcy5tYXAoeCA9PiB7XHJcbiAgICAgICAgICBpZiAoISEhbmV3Q2hlY2tlZElkcy5pbmNsdWRlcyh4KSkge1xyXG4gICAgICAgICAgICBuZXdDaGVja2VkSWRzLnB1c2goeCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyBUaGVuIGFzaWduIHRoZSBzdGF0ZSB0byB0aGUgbmV3Q2hlY2tlZElkc1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZElkcyA9IG5ld0NoZWNrZWRJZHM7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ld0NoZWNrZWRJZHMuZmlsdGVyKHggPT4gISEhdG9nZ2xlZElkcy5pbmNsdWRlcyh4KSlcclxuICAgICAgICAvLyBUaGVuIGFzaWduIHRoZSBzdGF0ZSB0byB0aGUgZmlsdGVyXHJcbiAgICAgICAgdGhpcy5jaGVja2VkSWRzID0gZmlsdGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBZnRlciB0aGUgY2FzZXMgb2YgaWYvZWxzZSwgbWFrZSB0aGUgY29udHJvbCBjaGFuZ2Ugd2l0aCBvbkNoYW5nZVxyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5jaGVja2VkSWRzO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuY2hlY2tlZElkcyk7XHJcbiAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIHN0YXJ0OiBUSElTIENPREUgU0NPUEUgY2FsY3VsYXRlcyB0b2dnbGVkSWRzICovXHJcbiAgICBpZiAodGhpcy5jaGVja0luaGVyaXRhbmNlKSB7XHJcbiAgICAgIC8vIElmIHRydWUsIGFsbCB0aGUgbmVzdGVkIGl0ZW1zIHdpbGwgYmUgY2hlY2tlZC91bmNoZWNrZWRcclxuICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXHJcbiAgICAgICAgLm5lc3RlZFRvZ2dsZUNoZWNrKGUsIG5ld1ZhbHVlKVxyXG4gICAgICAgIC50aGVuKCh4KSA9PiB7XHJcblxyXG4gICAgICAgICAgbGV0IGN1cnJlbnRDaGVja2VkS2V5cyA9IHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlLmNoZWNrZWRLZXlzIHx8IFtdO1xyXG5cclxuICAgICAgICAgIGlmICghIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHgubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50Q2hlY2tlZEtleXMuZmlsdGVyKGkgPT4gaSA9PT0gaXRlbS50b1N0cmluZygpKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cy5wdXNoKGl0ZW0udG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50Q2hlY2tlZEtleXMgPSBjdXJyZW50Q2hlY2tlZEtleXMuZmlsdGVyKGkgPT4gIXguaW5jbHVkZXMoTnVtYmVyKGkpKSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUsXHJcbiAgICAgICAgICAgIGNoZWNrZWRLZXlzOiBjdXJyZW50Q2hlY2tlZEtleXMvL3gubWFwKGl0ZW0gPT4gaXRlbS50b1N0cmluZygpKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC8vIFRoZSBpZHMgaGF2ZSBiZWVuIGNoYW5nZWRcclxuICAgICAgICAgIHRvZ2dsZWRJZHMgPSB4O1xyXG5cclxuICAgICAgICAgIC8vIE5vdyB0b2dnbGVkSWRzIHdlcmUgc2V0LiBXZSBjYWxsIHRoZSBmdW5jdGlvbiB3ZSBkZWNsYXJlZFxyXG4gICAgICAgICAgY2hhbmdlVmFsdWUoKTtcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcih4KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE90aGVyd2lzZSB3ZSBzaW1wbHkgdG9nZ2xlIGNoZWNrIGZvciBjdXJyZW50IGl0ZW0gb25seVxyXG4gICAgICB0b2dnbGVkSWRzID0gW2UuaWRdO1xyXG5cclxuICAgICAgLy8gTm93IHRvZ2dsZWRJZHMgd2VyZSBzZXQuIFdlIGNhbGwgdGhlIGZ1bmN0aW9uIHdlIGRlY2xhcmVkXHJcbiAgICAgIGNoYW5nZVZhbHVlKCk7XHJcblxyXG4gICAgfVxyXG4gICAgLyogZW5kOiBUSElTIENPREUgU0NPUEUgY2FsY3VsYXRlcyB0b2dnbGVkSWRzICovXHJcblxyXG4gICAgLy8gVGhhdCBpcy4gSGFwcHkgZGVidWdnaW5nIVxyXG5cclxuICB9XHJcblxyXG4gIG9uQ2hlY2tJbmNsdWRlRGlzc29sdmVkQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uQ2hlY2tJbmNsdWRlRGlzc29sdmVkQ2hhbmdlXCIsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9uQ2hlY2tJbmhlcml0YW5jZUNoYW5nZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQubmV4dCh7XHJcbiAgICAgIC4uLnRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlISxcclxuICAgICAgY2hlY2tJbmhlcml0YW5jZTogdmFsdWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uT2JqZWN0Q2xpY2soZTogSU9yZ1RyZWVJdGVtLCBldmVudDogYW55KTogdm9pZCB7XHJcblxyXG4gICAgLy8gcmVtb3ZlIGhpZ2hsaWdodCBjbGFzc1xyXG4gICAgLy8gVE8gRE9cclxuXHJcbiAgICBpZiAoISFlLnByb3RlY3RlZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXRlbUNsaWNrPy5lbWl0KGUpO1xyXG5cclxuICAgIGlmICh0aGlzLmFjY2Vzc29yTW9kZSA9PT0gRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5DSEVDS0VEKSByZXR1cm47XHJcbiAgICBsZXQgYWN0aXZlSWRzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgdGhpcy5kYXRhLm1hcCgoaXRlbSkgPT4gKGl0ZW0uYWN0aXZlID0gZmFsc2UpKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5hY2Nlc3Nvck1vZGUgPT09XHJcbiAgICAgIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFIHx8XHJcbiAgICAgICEhIXRoaXMuYWNjZXNzb3JNb2RlXHJcbiAgICApIHtcclxuICAgICAgLy8gSWYgdHJ1ZSwgYWxsIHRoZSBuZXN0ZWQgaXRlbXMgd2lsbCBiZSBhY3RpdmUsIHRoZSBvdGhlcnMgYXJlIGluYWN0aXZlXHJcbiAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZVxyXG4gICAgICAgIC5uZXN0ZWRSZXNldEFjdGl2ZShlLCB0cnVlKVxyXG4gICAgICAgIC50aGVuKCh4KSA9PiB7XHJcbiAgICAgICAgICBhY3RpdmVJZHMgPSB4O1xyXG4gICAgICAgICAgYWN0aXZlSWRzLnNvcnQoKTtcclxuICAgICAgICAgIGNvbnN0IG5ld0FjdGl2ZUtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICBhY3RpdmVJZHMubWFwKCh4KSA9PiBuZXdBY3RpdmVLZXlzLnB1c2goeC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUhLFxyXG4gICAgICAgICAgICBhY3RpdmVLZXlzOiBuZXdBY3RpdmVLZXlzLFxyXG4gICAgICAgICAgICBzZWxlY3RlZEtleTogZS5pZC50b1N0cmluZygpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlSWRzID0gYWN0aXZlSWRzO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy5hY3RpdmVJZHMpO1xyXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShhY3RpdmVJZHMpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBBQ1RJVkFURURfU0lOR0xFXHJcbiAgICAgIC8vIE90aGVyd2lzZSB3ZSBzaW1wbHkgc2V0IGN1cnJlbnQgaXRlbSB0byBiZSBhY3RpdmUgb25seVxyXG4gICAgICBhY3RpdmVJZHMgPSBbZS5pZF07XHJcbiAgICAgIHRoaXMuYWN0aXZlSWRzID0gYWN0aXZlSWRzO1xyXG5cclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQubmV4dCh7XHJcbiAgICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUhLFxyXG4gICAgICAgIGFjdGl2ZUtleXM6IFtlLmlkLnRvU3RyaW5nKCldLFxyXG4gICAgICAgIHNlbGVjdGVkS2V5OiBlLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5vbkNoYW5nZShhY3RpdmVJZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldmVudDtcclxuXHJcbiAgICBpZiAoZGV0YWlsID09PSAyKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUaGlzIHdhcyBhIGRibGNsaWNrJyk7XHJcbiAgICAgIHRoaXMuaXRlbURvdWJsZUNsaWNrLmVtaXQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBlO1xyXG5cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoQ2hhbmdlKHRleHQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2gkLm5leHQodGV4dCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm5nQWZ0ZXJDb250ZW50SW5pdFwiKVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKCh4KSA9PiB4Py51bnN1YnNjcmliZSgpKTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmluc3RhbmNlTnVtYmVyKSB7XHJcbiAgICAgIGNvbnN0IHRyeVRvRmluZCA9IHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKFxyXG4gICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmluc3RhbmNlTnVtYmVyXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoISF0cnlUb0ZpbmQubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3SW5zdGFuY2VzID0gdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT4geC5pbnN0YW5jZU51bWJlciAhPT0gdGhpcy5pbnN0YW5jZU51bWJlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLmluc3RhbmNlcyA9IG5ld0luc3RhbmNlcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLW9yZy10cmVlLWNvbnRhaW5lclwiIFtjbGFzcy5mdWxsLXdpZHRoXT1cIiEhZnVsbFdpZHRoTW9kZVwiICpuZ0lmPVwiISFkYXRhXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgIHBvc2l0aW9uIDogJ3JlbGF0aXZlJyxcclxuICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgIGhlaWdodDogaGVpZ2h0ICsgJ3B4J1xyXG4gICAgfVwiPlxyXG4gICAgPGRpdiAjZGlzcGxheUNvbnRlbnQgY2xhc3M9XCJjdXN0b20tb3JnLXRyZWVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29yZS1vcmctdHJlZS1oZWFkZXIgZC1mbGV4LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm01XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwic2VhcmNoXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlOiBsYW5nXCIgW2NsYXNzLmZ1bGwtd2lkdGhdPVwiISFmdWxsV2lkdGhNb2RlXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAjc2Nyb2xsQ29udGFpbmVyIGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC0gbGF5b3V0U2VydmljZS5jb3JlT3JnVHJlZVRvcEhlaWdodCAtIGxheW91dFNlcnZpY2UuY29yZU9yZ1RyZWVCb3R0b21IZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdzY3JvbGwnXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICA8Y29yZS1sb2FkaW5nLXN1cmZhY2UgW2xvYWRpbmddPVwibG9hZGluZ1wiIFtoZWlnaHRdPVwic2Nyb2xsQ29udGFpbmVySGVpZ2h0XCI+PC9jb3JlLWxvYWRpbmctc3VyZmFjZT5cclxuICAgICAgICAgICAgICAgIDwhLS0gQGZvciAocm9vdCBvZiBkYXRhRmlsdGVyZWQ7IHRyYWNrIHJvb3QpIHsgLS0+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChyb290IG9mIGRhdGE7IHRyYWNrIHJvb3QpIHtcclxuICAgICAgICAgICAgICAgIEBkZWZlcihvbiB2aWV3cG9ydChzY3JvbGxDb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJyb290XCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhISFyb290LnRyZWUkRXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbTsgY29udGV4dDogeyBjb250ZXh0OiByb290IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICB9IEBwbGFjZWhvbGRlcigpIHtcclxuICAgICAgICAgICAgICAgIFBsYWNlaG9sZGVyLi4uXHJcbiAgICAgICAgICAgICAgICB9IEBsb2FkaW5nKCkge1xyXG4gICAgICAgICAgICAgICAgTG9hZGluZy4uLlxyXG4gICAgICAgICAgICAgICAgfSBAZXJyb3IoKSB7XHJcbiAgICAgICAgICAgICAgICBFcnJvci4uLlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiAnMHB4JyxcclxuICAgICAgICAgICAgICAgIGxlZnQ6ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgcmlnaHQ6ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBsYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBsYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZyArICdweCcsXHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IGxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IGxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbidcclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29yZS1jaGVja2JveCBbKG5nTW9kZWwpXT1cInNob3dEaXNzb2x2ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja0luY2x1ZGVEaXNzb2x2ZWRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVUkuQ09SRV9PUkdfVFJFRS5TSE9XX09VVERBVEVEX1VOSVRTX0FCQlJFVklBVEVEJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInVUkuQ09SRV9PUkdfVFJFRS5TSE9XX09VVERBVEVEX1VOSVRTJ1wiIHRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+PC9jb3JlLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1pbmhlcml0YW5jZS13cmFwcGVyXCIgKm5nSWY9XCJhY2Nlc3Nvck1vZGUgPT09ICdDSEVDS0VEJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29yZS1jaGVja2JveCAqbmdJZj1cInNob3dDaGVja0luaGVyaXRhbmNlXCIgWyhuZ01vZGVsKV09XCJjaGVja0luaGVyaXRhbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tJbmhlcml0YW5jZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidVSS5DT1JFX09SR19UUkVFLkNIRUNLX0lOSEVSSVRBTkNFJ1wiPjwvY29yZS1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbSBsZXQtY29udGV4dD1cImNvbnRleHRcIiBsZXQtaWQ9XCJjb250ZXh0LmlkXCIgbGV0LXRpdGxlPVwiY29udGV4dC50cmVlJFRpdGxlXCJcclxuICAgICAgICAgICAgICAgIGxldC1oaWdobGlnaHRlZD1cImNvbnRleHQudHJlZSRIaWdobGlnaHRlZFwiIGxldC1oYXNDaGlsZHJlbj1cImNvbnRleHQudHJlZSRIYXNDaGlsZHJlblwiXHJcbiAgICAgICAgICAgICAgICBsZXQtaGFzQWN0aXZlQ2hpbGRyZW49XCJjb250ZXh0LnRyZWUkSGFzQWN0aXZlQ2hpbGRyZW5cIiBsZXQtY2hpbGRyZW49XCJjb250ZXh0LnRyZWUkQ2hpbGRyZW5cIlxyXG4gICAgICAgICAgICAgICAgbGV0LWV4cGFuZGVkPVwiY29udGV4dC50cmVlJEV4cGFuZGVkXCIgbGV0LWlzQWN0aXZlPVwiY29udGV4dC5pc0FjdGl2ZVwiIGxldC1hY3RpdmU9XCJjb250ZXh0LnRyZWUkQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgIGxldC1jaGVja2VkPVwiY29udGV4dC50cmVlJENoZWNrZWRcIiBsZXQtcHJvdGVjdGVkPVwiY29udGV4dC5wcm90ZWN0ZWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICBAaWYgKCghc2hvd0Rpc3NvbHZlZCAmJiAhIWlzQWN0aXZlKSB8fCAoISFzaG93RGlzc29sdmVkKSkge1xyXG4gICAgICAgICAgICAgICAgPGxpIFtjbGFzcy5oYXMtY2hpbGRyZW5dPVwiISFoYXNDaGlsZHJlblwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiISFoYXNDaGlsZHJlbiAmJiAhISFleHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gKGNsaWNrKT1cImFjY2Vzc29yTW9kZSAhPT0gJ0NIRUNLRUQnID8gb25PYmplY3RDbGljayhjb250ZXh0LCAkZXZlbnQpIDogJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25PYmplY3RDbGljayhjb250ZXh0LCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoKCEhc2hvd0Rpc3NvbHZlZCAmJiAhIWhhc0NoaWxkcmVuKSB8fCAoIXNob3dEaXNzb2x2ZWQgJiYgISFoYXNBY3RpdmVDaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJleHBhbmQtdG9nZ2xlciBjdXN0b20taWNvbi1wYXJlbnQtZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dCwgJGV2ZW50KVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjY2Vzc29yTW9kZSA9PT0gJ0NIRUNLRUQnICYmICFwcm90ZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtY2hlY2tib3ggKG9uQ2xpY2spPVwib25JdGVtQ2hlY2soY29udGV4dCwgJGV2ZW50KVwiIFtpbnB1dFZhbHVlXT1cImNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+PC9jb3JlLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvYmplY3QgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZEtleT09PWlkLnRvU3RyaW5nKClcIiBbY2xhc3MuaGlnaGxpZ2h0ZWRdPVwiaGlnaGxpZ2h0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc3NvbHZlZF09XCIhaXNBY3RpdmVcIiBbY2xhc3MucHJvdGVjdGVkXT1cInByb3RlY3RlZFwiIFthcHBUb29sdGlwXT1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L29iamVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICghIWNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBbY2xhc3MuY29sbGFwc2VkXT1cIiAhISFleHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjaGlsZCBvZiBjaGlsZHJlbjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFleHBhbmRlZCB8fCAhIWZ1bGxSZW5kZXJpbmcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IGNoaWxkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
496
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1vcmctdHJlZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtaGlzdGFmZi1hbHBoYS9zcmMvbGliL2FwcC9saWJyYXJpZXMvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtb3JnLXRyZWUvY29yZS1vcmctdHJlZS9jb3JlLW9yZy10cmVlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQW9DLEtBQUssRUFBYyxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBOEMsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZMLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFnQixZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxTQUFTLEdBQUcsTUFBTSxNQUFNLENBQUM7QUFRMUgsT0FBTyxFQUF3QixXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSwrREFBK0QsQ0FBQztBQUM3RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUsxRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUNqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbEcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSwyQkFB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QUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsc0JBQXNCO3lCQUNsQztxQkFDRjs0UUFHUSxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFSSxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDUSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDQyxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFDTSxrQkFBa0I7c0JBQWxELFNBQVM7dUJBQUMsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgSW5wdXQsIEVsZW1lbnRSZWYsIFZpZXdDaGlsZCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQsIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9uLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG9mLCBzd2l0Y2hNYXAsIH0gZnJvbSAncnhqcyc7XHJcblxyXG5pbXBvcnQgeyBSZWN1cnNpdmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVjdXJzaXZlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlT3JnVHJlZVNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLW9yZy10cmVlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcclxuXHJcbmltcG9ydCB7IElPcmdUcmVlSXRlbSwgSU9yZ1RyZWVMaW5lckl0ZW0gfSBmcm9tICcuL0lPcmdUcmVlSXRlbSc7XHJcblxyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybXNNb2R1bGUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb3JlRm9ybUNvbnRyb2xCYXNlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1mb3JtLWNvbnRyb2wtYmFzZS9jb3JlLWZvcm0tY29udHJvbC1iYXNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IE11bHRpTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbXVsdGktbGFuZ3VhZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7IExheW91dFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9sYXlvdXQuc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlT3JnVHJlZUluc3RhbmNlLCBPcmdhbml6YXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvb3JnYW5pemF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBsaW5lcl90b19uZXN0ZWRfYXJyYXlfc2NyaXB0IH0gZnJvbSAnLi4vLi4vLi4vLi4vYXNzZXRzL2pzL3Jlc2N1c2l2ZV93aydcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29yZUNoZWNrYm94Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29yZS1jaGVja2JveC9jb3JlLWNoZWNrYm94L2NvcmUtY2hlY2tib3guY29tcG9uZW50JztcclxuaW1wb3J0IHsgVHJhbnNsYXRlUGlwZSB9IGZyb20gJy4uLy4uLy4uL2FwcC1waXBlcy90cmFuc2xhdGUucGlwZSc7XHJcbmltcG9ydCB7IENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlL2NvcmUtbG9hZGluZy1zdXJmYWNlLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVSZWR1Y2VySWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvcmUtcmVkdWNlci1pY29uL2NvcmUtcmVkdWNlci1pY29uL2NvcmUtcmVkdWNlci1pY29uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFRvb2x0aXBEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi90b29sdGlwL3Rvb2x0aXAuZGlyZWN0aXZlJztcclxuXHJcbmV4cG9ydCBlbnVtIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUge1xyXG4gIEFDVElWQVRFRF9TSU5HTEUgPSAnQUNUSVZBVEVEX1NJTkdMRScsXHJcbiAgQUNUSVZBVEVEX0lOSEVSSVRBTkNFID0gJ0FDVElWQVRFRF9JTkhFUklUQU5DRScsXHJcbiAgQ0hFQ0tFRCA9ICdDSEVDS0VEJyxcclxufVxyXG5cclxuZXhwb3J0IGVudW0gRW51bUNvcmVPcmdUcmVlYVNlYXJjaE1vZGUge1xyXG4gIEhJR0hMSUdIVCA9ICdISUdITElHSFQnLFxyXG4gIFJFRFVDRSA9ICdSRURVQ0UnXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY29yZS1vcmctdHJlZScsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBDb21tb25Nb2R1bGUsXHJcbiAgICBGb3Jtc01vZHVsZSxcclxuICAgIENvcmVMb2FkaW5nU3VyZmFjZUNvbXBvbmVudCxcclxuICAgIENvcmVDaGVja2JveENvbXBvbmVudCxcclxuICAgIENvcmVSZWR1Y2VySWNvbkNvbXBvbmVudCxcclxuICAgIFRyYW5zbGF0ZVBpcGUsXHJcbiAgICBUb29sdGlwRGlyZWN0aXZlLFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvcmUtb3JnLXRyZWUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIG11bHRpOiB0cnVlLFxyXG4gICAgICB1c2VFeGlzdGluZzogQ29yZU9yZ1RyZWVDb21wb25lbnQsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb3JlT3JnVHJlZUNvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgQElucHV0KCkgbGluZUNvbG9yOiBzdHJpbmcgPSAndHJhbnNwYXJlbnQnO1xyXG4gIEBJbnB1dCgpIGZ1bGxXaWR0aE1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGFjY2Vzc29yTW9kZTogRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZSA9IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRDtcclxuXHJcbiAgLy9UTyBCRSBORVdcclxuICBASW5wdXQoKSBzZWFyY2hNb2RlOiBFbnVtQ29yZU9yZ1RyZWVhU2VhcmNoTW9kZSA9IEVudW1Db3JlT3JnVHJlZWFTZWFyY2hNb2RlLlJFRFVDRTtcclxuXHJcbiAgQElucHV0KCkgZnVsbFJlbmRlcmluZyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVpZ2h0ITogbnVtYmVyOyAvLyBDaGnhu4F1IGNhbyBj4bunYSBDb3JlT3JnVHJlZSBj4bqnbiDEkcaw4bujYyB0cnV54buBbiB2w6BvIVxyXG4gIEBJbnB1dCgpIGRpc2FibGVkTG9vcEV4cGFuZCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd0NoZWNrSW5oZXJpdGFuY2UhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGV4Y2x1ZGVkSWRzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyW10+KFtdKTsgLy8gMjAyNC0wNS0xMDogdG8gYmUgaW1wbGVtZW50ZWRcclxuXHJcbiAgQE91dHB1dCgpIGl0ZW1Eb3VibGVDbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgaXRlbUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjb250YWluZXInKSBjb250YWluZXIhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRhaW5lcicpIHNjcm9sbENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZGlzcGxheUNvbnRlbnQnKSBkaXNwbGF5Q29udGVudCE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgncmVkdWNlZEljb25XcmFwcGVyJykgcmVkdWNlZEljb25XcmFwcGVyITogRWxlbWVudFJlZjtcclxuXHJcbiAgb3ZlcnJpZGUgdmFsdWUhOiBudW1iZXJbXTtcclxuXHJcbiAgb3ZlcnJpZGUgd3JpdGVWYWx1ZShvYmo6IG51bWJlcltdKTogdm9pZCB7XHJcbiAgICB0aGlzLnZhbHVlID0gb2JqO1xyXG5cclxuICAgIHN3aXRjaCAodGhpcy5hY2Nlc3Nvck1vZGUpIHtcclxuICAgICAgY2FzZSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQ6XHJcbiAgICAgICAgaWYgKCEhb2JqKSB7XHJcbiAgICAgICAgICBjb25zdCBjaGVja2VkS2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgIHRoaXMuY2hlY2tlZElkcyA9IG9iajsgLy8gPD09PSAyNC8xMC8yMDIzXHJcbiAgICAgICAgICBvYmoubWFwKHggPT4gY2hlY2tlZEtleXMucHVzaCh4LnRvU3RyaW5nKCkpKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnJlY3Vyc2l2ZVNlcnZpY2Uud3JpdGVWYWx1ZUNoZWNrZWQoY2hlY2tlZEtleXMsIHRoaXMuZGF0YSwgdGhpcy5kaXNhYmxlZExvb3BFeHBhbmQpLnN1YnNjcmliZShfID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YT8ubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfU0lOR0xFOlxyXG4gICAgICBjYXNlIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFOlxyXG4gICAgICAgIGlmICghIW9iaikge1xyXG4gICAgICAgICAgY29uc3QgYWN0aXZhdGVkS2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgIG9iai5tYXAoeCA9PiBhY3RpdmF0ZWRLZXlzLnB1c2goeC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlLndyaXRlVmFsdWVBY3RpdmF0ZWQoYWN0aXZhdGVkS2V5cywgdGhpcy5kYXRhLCB0aGlzLmRpc2FibGVkTG9vcEV4cGFuZCkuc3Vic2NyaWJlKF8gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhPy5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMuYWNjZXNzb3JNb2RlID09PSBFbnVtQ29yZU9yZ1RyZWVhQWNjZXNzb3JNb2RlLkNIRUNLRUQpIHtcclxuXHJcbiAgICB9IGVsc2UgLyogRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5BQ1RJVkFURURfU0lOR0xFIG9yIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFICovIHtcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvdmVycmlkZSBzZXREaXNhYmxlZFN0YXRlKGRpc2FibGVkOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmRpc2FibGVkID0gZGlzYWJsZWQ7XHJcbiAgfVxyXG5cclxuICBhY3RpdmVJZHM6IG51bWJlcltdID0gW107XHJcblxyXG4gIGNoZWNrZWRJZHM6IG51bWJlcltdID0gW107XHJcblxyXG4gIC8vIGZvciBkZWJ1Z2dpbmdcclxuICAvLyBhY3RpdmVJZHNTdHJpbmchOiBzdHJpbmc7ICBcclxuICBkYXRhITogSU9yZ1RyZWVJdGVtW107XHJcbiAgLy9kYXRhRmlsdGVyZWQhOiBJT3JnVHJlZUl0ZW1bXTtcclxuICBsb2FkaW5nITogYm9vbGVhbjtcclxuICBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gIGxpbm5lck9yZ0FycmF5ITogSU9yZ1RyZWVMaW5lckl0ZW1bXTtcclxuICBzZWFyY2ghOiBzdHJpbmc7XHJcbiAgc2VhcmNoJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuICByZWR1Y2VkITogYm9vbGVhbjtcclxuICBzZWFyY2hQbGFjZWhvbGRlciA9IEVudW1UcmFuc2xhdGVLZXkuVUlfQ09NTU9OX1BMQUNFX0hPTERFUl9TRUFSQ0hfT1JHO1xyXG5cclxuICBpbml0aWFsaXppbmchOiBib29sZWFuO1xyXG4gIGNoZWNrSW5oZXJpdGFuY2U6IGJvb2xlYW4gPSB0cnVlOyAvLyBkZWZhdWx0IHZhbHVlIGlzIHRydWVcclxuICBzaG93RGlzc29sdmVkOiBib29sZWFuID0gZmFsc2U7IC8vIGRlZmF1bHQgdmFsdWUgaXMgZmFsc2VcclxuICBzZWxlY3RlZEtleSE6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBzZWxlY3RlZEl0ZW0hOiBJT3JnVHJlZUxpbmVySXRlbTtcclxuICBsYW5nITogc3RyaW5nO1xyXG4gIC8vcmVkdWNlZCQhOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XHJcblxyXG4gIGluc3RhbmNlTnVtYmVyITogbnVtYmVyO1xyXG4gIHNjcm9sbENvbnRhaW5lckhlaWdodCE6IG51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvL3B1YmxpYyBvdmVycmlkZSBpbmplY3RvcjogSW5qZWN0b3IsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVjdXJzaXZlU2VydmljZTogUmVjdXJzaXZlU2VydmljZSxcclxuICAgIHByaXZhdGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSxcclxuICAgIHB1YmxpYyBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlT3JnVHJlZVNlcnZpY2U6IENvcmVPcmdUcmVlU2VydmljZSxcclxuICAgIC8vIHByaXZhdGUgY29yZU9yZ1RyZWVTdGF0ZTogQ29yZU9yZ1RyZWVTdGF0ZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgb3JnYW5pemF0aW9uU2VydmljZTogT3JnYW5pemF0aW9uU2VydmljZSxcclxuICApIHtcclxuICAgIHN1cGVyKC8qaW5qZWN0b3IqLyk7XHJcbiAgICB0aGlzLmluaXRpYWxpemluZyA9IHRydWU7XHJcblxyXG4gICAgLy8gdGhpcy5yZWR1Y2VkJCA9IHRoaXMuY29yZU9yZ1RyZWVTdGF0ZS5jb3JlT3JnVHJlZVJlZHVjZWQkO1xyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6aW5nID0gZmFsc2U7XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgaWYgKGNoYW5nZXNbJ2hlaWdodCddKSB7XHJcbiAgICAgIHRoaXMucmVzaXplSGVpZ2h0KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICAvL3RoaXMubGF5b3V0U2VydmljZS5sZWZ0YmFyT3BlbiQubmV4dChmYWxzZSk7XHJcblxyXG4gICAgdGhpcy5pbnN0YW5jZU51bWJlciA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgY29uc3QgbmV3SW5zdGFuY2U6IElDb3JlT3JnVHJlZUluc3RhbmNlID0ge1xyXG4gICAgICBpbnN0YW5jZU51bWJlcjogdGhpcy5pbnN0YW5jZU51bWJlcixcclxuICAgICAgc2VsZWN0ZWRLZXkkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKSxcclxuICAgICAgYWN0aXZlS2V5cyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKSxcclxuICAgICAgY2hlY2tlZEtleXMkOiBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSksXHJcbiAgICAgIGV4cGFuZGVkS2V5cyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKSxcclxuICAgICAgY2hlY2tJbmhlcml0YW5jZSQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSlcclxuICAgIH1cclxuICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5pbnN0YW5jZXMucHVzaChuZXdJbnN0YW5jZSlcclxuXHJcbiAgICAvLyBDaGVjayB4ZW0gY2hp4buBdSBjYW8gaGVpZ2h0IGPDsyDEkcaw4bujYyB0cnV54buBbiB2w6BvIGhheSBraMO0bmdcclxuICAgIGlmICh0aGlzLmhlaWdodCA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgIC8vdGhpcy5hbGVydFNlcnZpY2Uud2FybihcIkNvcmVPcmdUcmVlIGtow7RuZyBuaOG6rW4gxJHGsOG7o2MgY2hp4buBdSBjYW8gKGhlaWdodCkgdHJ1eeG7gW4gdsOgbyB04burIGzhu5twIG5nb8OgaS4gQ2hp4buBdSBjYW8gbeG6t2MgxJHhu4tuaCBz4bq9IMSRxrDhu6NjIHTDrW5oIHRvw6FuIGThu7FhIHbDoG8gYuG7kSBj4bulYyBjaMOtbmguXCIsIGFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbnRlbnRDb250YWluZXJIZWlnaHQkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIC8vIGJhc2ljU3BhY2luZyBsw6AgcGFkZGluZ0JvdHRvbSBj4bunYSBs4bubcCBjb250ZW50LWNvbnRhaW5lclxyXG4gICAgICAgICAgdGhpcy5oZWlnaHQgPSB4IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdlSGVhZGVySGVpZ2h0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZztcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5saW5lckRhdGEkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMubGlubmVyT3JnQXJyYXkgPSB4O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQgY2hhbmdlc1wiLCB4KVxyXG5cclxuICAgICAgICBjb25zdCBuZXdBY3RpdmVJZHM6IG51bWJlcltdID0gW107XHJcbiAgICAgICAgeC5hY3RpdmVLZXlzLm1hcCgoaykgPT4ge1xyXG4gICAgICAgICAgbmV3QWN0aXZlSWRzLnB1c2goTnVtYmVyKGspKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmFjdGl2ZUlkcyA9IG5ld0FjdGl2ZUlkcztcclxuICAgICAgICBpZiAodGhpcy5hY2Nlc3Nvck1vZGUgIT09IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRCkge1xyXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuYWN0aXZlSWRzO1xyXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmFjdGl2ZUlkcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSB4LnNlbGVjdGVkS2V5O1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5zZWFyY2gkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIoKHgpID0+IHggIT09IG51bGwpLFxyXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDUwMCksXHJcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKCh0ZXh0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdzd2l0Y2hNYXAgd29ya3MnKTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIC8vIEFVRyAyMDI0IE5FVyA6IE1VU1QgQkUgVEVTVEVEXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaE1vZGUgPT09IEVudW1Db3JlT3JnVHJlZWFTZWFyY2hNb2RlLkhJR0hMSUdIVCkge1xyXG4gICAgICAgICAgICAgICByZXR1cm4gdGhpcy5yZWN1cnNpdmVTZXJ2aWNlLmZpbmRJdGVtKHRleHQsIHRoaXMuZGF0YSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgIHJldHVybiBvZih0aGlzLnJlY3Vyc2l2ZVNlcnZpY2UucmVkdWNpbmdGaWx0ZXIodGhpcy5zY3JvbGxDb250YWluZXIsIHRleHQpKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIGlmICh0aGlzLnNlYXJjaE1vZGUgPT09IEVudW1Db3JlT3JnVHJlZWFTZWFyY2hNb2RlLlJFRFVDRSkge1xyXG4gICAgICAgICAgLy8gICB0aGlzLmRhdGFGaWx0ZXJlZCA9IHggYXMgSU9yZ1RyZWVJdGVtW107XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyRcclxuICAgICAgICAucGlwZShmaWx0ZXIoKHZhbHVlKSA9PiAhISF0aGlzLmluaXRpYWxpemluZyAmJiAhIXZhbHVlKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICBpZiAoISFsb2NhbFN0b3JhZ2UpIHtcclxuICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ2NvcmVPcmdUcmVlU3RhdHVzJywgSlNPTi5zdHJpbmdpZnkoeCkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5tbHMubGFuZyQuc3Vic2NyaWJlKCh4KSA9PiAodGhpcy5sYW5nID0geCkpKTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUhlaWdodCgpOiB2b2lkIHtcclxuXHJcbiAgICAvLyBoZWlnaHQgaXMgbm90IGdpdmVuIGFuZCB0aGUgdHJlZSByZXNpemUgYXMgc3RhbmRhcmRcclxuICAgIGlmICghISF0aGlzLmhlaWdodCkge1xyXG4gICAgICBjb25zdCBzaXplSGVhZGVySGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0tc2l6ZS1oZWFkZXItaGVpZ2h0JylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG4gICAgICBjb25zdCBzaXplQ29yZVBhZ2VIZWFkZXJIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnZS1oZWFkZXItaGVpZ2h0JylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IC0gc2l6ZUhlYWRlckhlaWdodCAtIHNpemVDb3JlUGFnZUhlYWRlckhlaWdodDtcclxuXHJcbiAgICAgIGNvbnN0IHBhZ2VIZWFkZXJIZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpXHJcbiAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnZS1oZWFkZXItaGVpZ2h0JylcclxuICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICApO1xyXG5cclxuICAgICAgY29uc3QgcGFnaW5hdGlvbkhlaWdodCA9IE51bWJlcihcclxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdpbmF0aW9uLWhlaWdodCcpXHJcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgKTtcclxuICAgICAgY29uc3Qgc2l6ZU1hcmdpbkNvcmVQYWdpbmF0aW9uRnVsbCA9IE51bWJlcihcclxuICAgICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtbWFyZ2luLWNvcmUtcGFnaW5hdGlvbicpXHJcbiAgICAgICAgICAucmVwbGFjZSgncHgnLCAnJylcclxuICAgICAgKTtcclxuXHJcblxyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjb250YWluZXJIZWlnaHQgLSBwYWdlSGVhZGVySGVpZ2h0IC0gcGFnaW5hdGlvbkhlaWdodCArIHNpemVNYXJnaW5Db3JlUGFnaW5hdGlvbkZ1bGw7XHJcbiAgICAgIGNvbnNvbGUubG9nKGhlaWdodCk7XHJcblxyXG4gICAgICB0aGlzLmNvbnRhaW5lcj8ubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgICAnLS1oZWlnaHQnLCBoZWlnaHQgKyAncHgnXHJcbiAgICAgICk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jb250YWluZXI/Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgJy0taGVpZ2h0JywgdGhpcy5oZWlnaHQgKyAncHgnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLm9yZ1RyZWVEYXRhJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMuZGF0YSA9IHg7XHJcbiAgICAgICAgICAvL3RoaXMuZGF0YUZpbHRlcmVkID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh4KSk7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIm5ldyBEYXRhIGNvbWluZ1wiLCB0aGlzLmRhdGEsIG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxyXG4gICAgICAgICAgaWYgKCEhdGhpcy5kYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICghIXRoaXMuZGF0YS5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIG9uSXRlbUNsaWNrTG9jYWwoZTogSU9yZ1RyZWVJdGVtKTogdm9pZCB7XHJcbiAgICB0aGlzLmxpbm5lck9yZ0FycmF5Lm1hcCgoeCkgPT4gKHguYWN0aXZlID0gZmFsc2UpKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5idWlsZFRyZWVEYXRhKCkpO1xyXG4gIH1cclxuXHJcbiAgb25Ub2dnbGVJdGVtKGU6IElPcmdUcmVlSXRlbSkge1xyXG4gICAgY29uc3QgY2xvbmVDb3B5OiBJT3JnVHJlZUxpbmVySXRlbVtdID0gSlNPTi5wYXJzZShcclxuICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5saW5uZXJPcmdBcnJheSlcclxuICAgICk7XHJcbiAgICBjb25zdCBmaWx0ZXIgPSBjbG9uZUNvcHkuZmlsdGVyKCh4KSA9PiB4LmlkID09PSBlLmlkKTtcclxuXHJcbiAgICBpZiAoZmlsdGVyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICBmaWx0ZXJbMF0uZXhwYW5kID0gISEhZS5leHBhbmQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxpbm5lck9yZ0FycmF5ID0gY2xvbmVDb3B5O1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmJ1aWxkVHJlZURhdGEoKSk7XHJcbiAgfVxyXG5cclxuICBidWlsZFRyZWVEYXRhKCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgICBjb25zdCBjbG9uZUNvcHkgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMubGlubmVyT3JnQXJyYXkpKTtcclxuXHJcbiAgICBpZiAodHlwZW9mIFdvcmtlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgLy8gQ3JlYXRlIGEgbmV3XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhcIvCfn6Lwn5+iIFdvcmtlciB3b3Jrc1wiKTtcclxuXHJcbiAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobGluZXJfdG9fbmVzdGVkX2FycmF5X3NjcmlwdCk7XHJcbiAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgKHsgZGF0YSB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YS5saXN0O1xyXG4gICAgICAgIC8vdGhpcy5kYXRhRmlsdGVyZWQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEubGlzdCkpO1xyXG4gICAgICAgIGlmICghIXRoaXMuZGF0YSAmJiAhIXRoaXMuZGF0YT8ubGVuZ3RoKSB0aGlzLmRhdGFbMF0udHJlZSRFeHBhbmRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcclxuICAgICAgICBsaXN0OiBjbG9uZUNvcHksXHJcbiAgICAgICAga2V5RmllbGQ6ICdpZCcsXHJcbiAgICAgICAgdGl0bGVGaWVsZDogJ25hbWUnLFxyXG4gICAgICAgIHBhcmVudEZpZWxkOiAncGFyZW50SWQnLFxyXG4gICAgICAgIGFjdGl2ZUZpZWxkOiAnYWN0aXZlJyxcclxuICAgICAgICAvL2luaGVyaXRhbnRBY3RpdmVGaWVsZDogJ2luaGVyaXRhbnRBY3RpdmUnLFxyXG4gICAgICAgIGNoZWNrZWRGaWVsZDogJ2NoZWNrZWQnLFxyXG4gICAgICAgIGV4cGFuZGVkRmllbGQ6ICdleHBhbmQnLFxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFdlYiB3b3JrZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgZW52aXJvbm1lbnQuXHJcbiAgICAgIC8vIFlvdSBzaG91bGQgYWRkIGEgZmFsbGJhY2sgc28gdGhhdCB5b3VyIHByb2dyYW0gc3RpbGwgZXhlY3V0ZXMgY29ycmVjdGx5LlxyXG4gICAgICBjb25zdCBzdGF0dXMgPSB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC52YWx1ZTtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXHJcbiAgICAgICAgICAubGluZXJBcnJheVRvTmVzdGVkQXJyYXkoXHJcbiAgICAgICAgICAgIGNsb25lQ29weSxcclxuICAgICAgICAgICAgJ2lkJyxcclxuICAgICAgICAgICAgJ25hbWUnLFxyXG4gICAgICAgICAgICAncGFyZW50SWQnLFxyXG4gICAgICAgICAgICAnYWN0aXZlJyxcclxuICAgICAgICAgICAgJ2NoZWNrZWQnLFxyXG4gICAgICAgICAgICAnZXhwYW5kJyxcclxuICAgICAgICAgICAgLy9zdGF0dXNcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKG9iaikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBvYmoubGlzdDtcclxuICAgICAgICAgICAgLy90aGlzLmRhdGFGaWx0ZXJlZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLmxpc3QpKTtcclxuICAgICAgICAgICAgaWYgKCEhdGhpcy5kYXRhICYmICEhdGhpcy5kYXRhPy5sZW5ndGgpIHRoaXMuZGF0YVswXS50cmVlJEV4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25FeHBhbmRUb2dnbGVyQ2xpY2soZTogSU9yZ1RyZWVJdGVtLCBldmVudDogYW55KTogdm9pZCB7XHJcblxyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgbmV3VmFsdWUgPSAhZS50cmVlJEV4cGFuZGVkO1xyXG4gICAgZS50cmVlJEV4cGFuZGVkID0gbmV3VmFsdWU7XHJcblxyXG4gICAgLy8gdXBkYXRpbmcgc3RhdHVzIHdpdGggbmV3VmFsdWVcclxuICAgIGNvbnN0IGN1cnJlbnRFeHBhbmRlZElkcyA9XHJcbiAgICAgIHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlPy5leHBhbmRlZEtleXM7XHJcbiAgICBsZXQgbmV3RXhwYW5kZWRJZHMgPSBjdXJyZW50RXhwYW5kZWRJZHM/LmZpbHRlcihcclxuICAgICAgKF8pID0+ICEhIWN1cnJlbnRFeHBhbmRlZElkcy5pbmNsdWRlcyhlLmlkLnRvU3RyaW5nKCkpXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChuZXdWYWx1ZSkge1xyXG4gICAgICBuZXdFeHBhbmRlZElkcz8ucHVzaChlLmlkLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIG5ld0V4cGFuZGVkSWRzPy5zb3J0KCk7XHJcblxyXG4gICAgY29uc3QgbmV3RXhwYW5kZWRLZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgbmV3RXhwYW5kZWRJZHMubWFwKCh4KSA9PiBuZXdFeHBhbmRlZEtleXMucHVzaCh4LnRvU3RyaW5nKCkpKTtcclxuXHJcbiAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUhLFxyXG4gICAgICBleHBhbmRlZEtleXM6IG5ld0V4cGFuZGVkS2V5cyxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgb25JdGVtQ2hlY2soZTogSU9yZ1RyZWVJdGVtLCBuZXdWYWx1ZTogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5pdGVtQ2xpY2s/LmVtaXQoZSk7XHJcbiAgICBpZiAodGhpcy5hY2Nlc3Nvck1vZGUgIT09IEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQ0hFQ0tFRCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIFdlIGhhdmUgdGhpcyB2YXIgdG8gaG9sZCBub2RlcyB0aGF0IGFyZSBiZWluZyBjaGFuZ2VkXHJcbiAgICBsZXQgdG9nZ2xlZElkczogbnVtYmVyW107XHJcbiAgICAvLyBXZSBzaG91bGQgY2FsY3VsYXRlIGEgbmV3IHN0YXRlIGludG8gdGhpcyB2YXI6IFxyXG4gICAgY29uc3QgbmV3Q2hlY2tlZElkczogbnVtYmVyW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY2hlY2tlZElkcykpO1xyXG5cclxuICAgIC8vIFdlIHdpbGwgY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIHRvZ2dsZWRJZHMgY2hhbmdlZFxyXG4gICAgY29uc3QgY2hhbmdlVmFsdWUgPSAoKSA9PiB7XHJcblxyXG4gICAgICAvLyBJZiBuZXdWYWx1ZSA9PT0gdHJ1ZSwgd2Ugd2lsbCBkaXNjdGludGx5IHB1c2ggY2hhbmdlZCBpZHMgdG8gdGhlIHN0YXRlXHJcbiAgICAgIC8vIE90aGVyd2lzZSB3ZSB3aWxsIHJlbW92ZSB0aGVtIGZyb20gdGhlIHN0YXRlXHJcbiAgICAgIGlmICghIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgdG9nZ2xlZElkcy5tYXAoeCA9PiB7XHJcbiAgICAgICAgICBpZiAoISEhbmV3Q2hlY2tlZElkcy5pbmNsdWRlcyh4KSkge1xyXG4gICAgICAgICAgICBuZXdDaGVja2VkSWRzLnB1c2goeCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvLyBUaGVuIGFzaWduIHRoZSBzdGF0ZSB0byB0aGUgbmV3Q2hlY2tlZElkc1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZElkcyA9IG5ld0NoZWNrZWRJZHM7XHJcblxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGZpbHRlciA9IG5ld0NoZWNrZWRJZHMuZmlsdGVyKHggPT4gISEhdG9nZ2xlZElkcy5pbmNsdWRlcyh4KSlcclxuICAgICAgICAvLyBUaGVuIGFzaWduIHRoZSBzdGF0ZSB0byB0aGUgZmlsdGVyXHJcbiAgICAgICAgdGhpcy5jaGVja2VkSWRzID0gZmlsdGVyO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBZnRlciB0aGUgY2FzZXMgb2YgaWYvZWxzZSwgbWFrZSB0aGUgY29udHJvbCBjaGFuZ2Ugd2l0aCBvbkNoYW5nZVxyXG4gICAgICB0aGlzLnZhbHVlID0gdGhpcy5jaGVja2VkSWRzO1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuY2hlY2tlZElkcyk7XHJcbiAgICAgIHRoaXMubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIHN0YXJ0OiBUSElTIENPREUgU0NPUEUgY2FsY3VsYXRlcyB0b2dnbGVkSWRzICovXHJcbiAgICBpZiAodGhpcy5jaGVja0luaGVyaXRhbmNlKSB7XHJcbiAgICAgIC8vIElmIHRydWUsIGFsbCB0aGUgbmVzdGVkIGl0ZW1zIHdpbGwgYmUgY2hlY2tlZC91bmNoZWNrZWRcclxuICAgICAgdGhpcy5yZWN1cnNpdmVTZXJ2aWNlXHJcbiAgICAgICAgLm5lc3RlZFRvZ2dsZUNoZWNrKGUsIG5ld1ZhbHVlKVxyXG4gICAgICAgIC50aGVuKCh4KSA9PiB7XHJcblxyXG4gICAgICAgICAgbGV0IGN1cnJlbnRDaGVja2VkS2V5cyA9IHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlLmNoZWNrZWRLZXlzIHx8IFtdO1xyXG5cclxuICAgICAgICAgIGlmICghIW5ld1ZhbHVlKSB7XHJcbiAgICAgICAgICAgIHgubWFwKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50Q2hlY2tlZEtleXMuZmlsdGVyKGkgPT4gaSA9PT0gaXRlbS50b1N0cmluZygpKS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRDaGVja2VkS2V5cy5wdXNoKGl0ZW0udG9TdHJpbmcoKSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50Q2hlY2tlZEtleXMgPSBjdXJyZW50Q2hlY2tlZEtleXMuZmlsdGVyKGkgPT4gIXguaW5jbHVkZXMoTnVtYmVyKGkpKSlcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUsXHJcbiAgICAgICAgICAgIGNoZWNrZWRLZXlzOiBjdXJyZW50Q2hlY2tlZEtleXMvL3gubWFwKGl0ZW0gPT4gaXRlbS50b1N0cmluZygpKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC8vIFRoZSBpZHMgaGF2ZSBiZWVuIGNoYW5nZWRcclxuICAgICAgICAgIHRvZ2dsZWRJZHMgPSB4O1xyXG5cclxuICAgICAgICAgIC8vIE5vdyB0b2dnbGVkSWRzIHdlcmUgc2V0LiBXZSBjYWxsIHRoZSBmdW5jdGlvbiB3ZSBkZWNsYXJlZFxyXG4gICAgICAgICAgY2hhbmdlVmFsdWUoKTtcclxuXHJcbiAgICAgICAgfSlcclxuICAgICAgICAuY2F0Y2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcih4KTtcclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIE90aGVyd2lzZSB3ZSBzaW1wbHkgdG9nZ2xlIGNoZWNrIGZvciBjdXJyZW50IGl0ZW0gb25seVxyXG4gICAgICB0b2dnbGVkSWRzID0gW2UuaWRdO1xyXG5cclxuICAgICAgLy8gTm93IHRvZ2dsZWRJZHMgd2VyZSBzZXQuIFdlIGNhbGwgdGhlIGZ1bmN0aW9uIHdlIGRlY2xhcmVkXHJcbiAgICAgIGNoYW5nZVZhbHVlKCk7XHJcblxyXG4gICAgfVxyXG4gICAgLyogZW5kOiBUSElTIENPREUgU0NPUEUgY2FsY3VsYXRlcyB0b2dnbGVkSWRzICovXHJcblxyXG4gICAgLy8gVGhhdCBpcy4gSGFwcHkgZGVidWdnaW5nIVxyXG5cclxuICB9XHJcblxyXG4gIG9uQ2hlY2tJbmNsdWRlRGlzc29sdmVkQ2hhbmdlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm9uQ2hlY2tJbmNsdWRlRGlzc29sdmVkQ2hhbmdlXCIsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIG9uQ2hlY2tJbmhlcml0YW5jZUNoYW5nZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQubmV4dCh7XHJcbiAgICAgIC4uLnRoaXMub3JnYW5pemF0aW9uU2VydmljZS5zdGF0dXMkLnZhbHVlISxcclxuICAgICAgY2hlY2tJbmhlcml0YW5jZTogdmFsdWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG9uT2JqZWN0Q2xpY2soZTogSU9yZ1RyZWVJdGVtLCBldmVudDogYW55KTogdm9pZCB7XHJcblxyXG4gICAgLy8gcmVtb3ZlIGhpZ2hsaWdodCBjbGFzc1xyXG4gICAgLy8gVE8gRE9cclxuXHJcbiAgICBpZiAoISFlLnByb3RlY3RlZCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuaXRlbUNsaWNrPy5lbWl0KGUpO1xyXG5cclxuICAgIGlmICh0aGlzLmFjY2Vzc29yTW9kZSA9PT0gRW51bUNvcmVPcmdUcmVlYUFjY2Vzc29yTW9kZS5DSEVDS0VEKSByZXR1cm47XHJcbiAgICBsZXQgYWN0aXZlSWRzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgdGhpcy5kYXRhLm1hcCgoaXRlbSkgPT4gKGl0ZW0uYWN0aXZlID0gZmFsc2UpKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5hY2Nlc3Nvck1vZGUgPT09XHJcbiAgICAgIEVudW1Db3JlT3JnVHJlZWFBY2Nlc3Nvck1vZGUuQUNUSVZBVEVEX0lOSEVSSVRBTkNFIHx8XHJcbiAgICAgICEhIXRoaXMuYWNjZXNzb3JNb2RlXHJcbiAgICApIHtcclxuICAgICAgLy8gSWYgdHJ1ZSwgYWxsIHRoZSBuZXN0ZWQgaXRlbXMgd2lsbCBiZSBhY3RpdmUsIHRoZSBvdGhlcnMgYXJlIGluYWN0aXZlXHJcbiAgICAgIHRoaXMucmVjdXJzaXZlU2VydmljZVxyXG4gICAgICAgIC5uZXN0ZWRSZXNldEFjdGl2ZShlLCB0cnVlKVxyXG4gICAgICAgIC50aGVuKCh4KSA9PiB7XHJcbiAgICAgICAgICBhY3RpdmVJZHMgPSB4O1xyXG4gICAgICAgICAgYWN0aXZlSWRzLnNvcnQoKTtcclxuICAgICAgICAgIGNvbnN0IG5ld0FjdGl2ZUtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICBhY3RpdmVJZHMubWFwKCh4KSA9PiBuZXdBY3RpdmVLZXlzLnB1c2goeC50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvblNlcnZpY2Uuc3RhdHVzJC5uZXh0KHtcclxuICAgICAgICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUhLFxyXG4gICAgICAgICAgICBhY3RpdmVLZXlzOiBuZXdBY3RpdmVLZXlzLFxyXG4gICAgICAgICAgICBzZWxlY3RlZEtleTogZS5pZC50b1N0cmluZygpXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlSWRzID0gYWN0aXZlSWRzO1xyXG4gICAgICAgICAgY29uc29sZS5sb2codGhpcy5hY3RpdmVJZHMpO1xyXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZShhY3RpdmVJZHMpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKCh4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoeCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBBQ1RJVkFURURfU0lOR0xFXHJcbiAgICAgIC8vIE90aGVyd2lzZSB3ZSBzaW1wbHkgc2V0IGN1cnJlbnQgaXRlbSB0byBiZSBhY3RpdmUgb25seVxyXG4gICAgICBhY3RpdmVJZHMgPSBbZS5pZF07XHJcbiAgICAgIHRoaXMuYWN0aXZlSWRzID0gYWN0aXZlSWRzO1xyXG5cclxuICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQubmV4dCh7XHJcbiAgICAgICAgLi4udGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLnN0YXR1cyQudmFsdWUhLFxyXG4gICAgICAgIGFjdGl2ZUtleXM6IFtlLmlkLnRvU3RyaW5nKCldLFxyXG4gICAgICAgIHNlbGVjdGVkS2V5OiBlLmlkLnRvU3RyaW5nKCksXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5vbkNoYW5nZShhY3RpdmVJZHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldmVudDtcclxuXHJcbiAgICBpZiAoZGV0YWlsID09PSAyKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdUaGlzIHdhcyBhIGRibGNsaWNrJyk7XHJcbiAgICAgIHRoaXMuaXRlbURvdWJsZUNsaWNrLmVtaXQoZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWxlY3RlZEl0ZW0gPSBlO1xyXG5cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoQ2hhbmdlKHRleHQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWFyY2gkLm5leHQodGV4dCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zb2xlLmxvZyhcIm5nQWZ0ZXJDb250ZW50SW5pdFwiKVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKCh4KSA9PiB4Py51bnN1YnNjcmliZSgpKTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmluc3RhbmNlTnVtYmVyKSB7XHJcbiAgICAgIGNvbnN0IHRyeVRvRmluZCA9IHRoaXMub3JnYW5pemF0aW9uU2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKFxyXG4gICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmluc3RhbmNlTnVtYmVyXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoISF0cnlUb0ZpbmQubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3SW5zdGFuY2VzID0gdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT4geC5pbnN0YW5jZU51bWJlciAhPT0gdGhpcy5pbnN0YW5jZU51bWJlclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5vcmdhbml6YXRpb25TZXJ2aWNlLmluc3RhbmNlcyA9IG5ld0luc3RhbmNlcztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLW9yZy10cmVlLWNvbnRhaW5lclwiIFtjbGFzcy5mdWxsLXdpZHRoXT1cIiEhZnVsbFdpZHRoTW9kZVwiICpuZ0lmPVwiISFkYXRhXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgIHBvc2l0aW9uIDogJ3JlbGF0aXZlJyxcclxuICAgICAgICB3aWR0aDogJzEwMCUnLFxyXG4gICAgICAgIGhlaWdodDogaGVpZ2h0ICsgJ3B4J1xyXG4gICAgfVwiPlxyXG4gICAgPGRpdiAjZGlzcGxheUNvbnRlbnQgY2xhc3M9XCJjdXN0b20tb3JnLXRyZWVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29yZS1vcmctdHJlZS1oZWFkZXIgZC1mbGV4LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm01XCI+XHJcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIFsobmdNb2RlbCldPVwic2VhcmNoXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlOiBsYW5nXCIgW2NsYXNzLmZ1bGwtd2lkdGhdPVwiISFmdWxsV2lkdGhNb2RlXCI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8bmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPGRpdiAjc2Nyb2xsQ29udGFpbmVyIGNsYXNzPVwic2Nyb2xsLWNvbnRhaW5lclwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC0gbGF5b3V0U2VydmljZS5jb3JlT3JnVHJlZVRvcEhlaWdodCAtIGxheW91dFNlcnZpY2UuY29yZU9yZ1RyZWVCb3R0b21IZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdzY3JvbGwnXHJcbiAgICAgICAgICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgICAgICA8Y29yZS1sb2FkaW5nLXN1cmZhY2UgW2xvYWRpbmddPVwibG9hZGluZ1wiIFtoZWlnaHRdPVwic2Nyb2xsQ29udGFpbmVySGVpZ2h0XCI+PC9jb3JlLWxvYWRpbmctc3VyZmFjZT5cclxuICAgICAgICAgICAgICAgIDwhLS0gQGZvciAocm9vdCBvZiBkYXRhRmlsdGVyZWQ7IHRyYWNrIHJvb3QpIHsgLS0+XHJcbiAgICAgICAgICAgICAgICBAZm9yIChyb290IG9mIGRhdGE7IHRyYWNrIHJvb3QpIHtcclxuICAgICAgICAgICAgICAgIEBkZWZlcihvbiB2aWV3cG9ydChzY3JvbGxDb250YWluZXIpKSB7XHJcbiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJyb290XCIgW2NsYXNzLmNvbGxhcHNlZF09XCIhISFyb290LnRyZWUkRXhwYW5kZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbTsgY29udGV4dDogeyBjb250ZXh0OiByb290IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICB9IEBwbGFjZWhvbGRlcigpIHtcclxuICAgICAgICAgICAgICAgIFBsYWNlaG9sZGVyLi4uXHJcbiAgICAgICAgICAgICAgICB9IEBsb2FkaW5nKCkge1xyXG4gICAgICAgICAgICAgICAgTG9hZGluZy4uLlxyXG4gICAgICAgICAgICAgICAgfSBAZXJyb3IoKSB7XHJcbiAgICAgICAgICAgICAgICBFcnJvci4uLlxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgZGlzcGxheTogJ2Jsb2NrJyxcclxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxyXG4gICAgICAgICAgICAgICAgYm90dG9tOiAnMHB4JyxcclxuICAgICAgICAgICAgICAgIGxlZnQ6ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgcmlnaHQ6ICcwcHgnLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiBsYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgIHBhZGRpbmdMZWZ0OiBsYXlvdXRTZXJ2aWNlLmJhc2ljU3BhY2luZyArICdweCcsXHJcbiAgICAgICAgICAgICAgICBwYWRkaW5nUmlnaHQ6IGxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6IGxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgKyAncHgnLFxyXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nXHJcbiAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogbGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodCArICdweCcsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxyXG4gICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbidcclxuICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29yZS1jaGVja2JveCBbKG5nTW9kZWwpXT1cInNob3dEaXNzb2x2ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25DaGVja0luY2x1ZGVEaXNzb2x2ZWRDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCInVUkuQ09SRV9PUkdfVFJFRS5TSE9XX09VVERBVEVEX1VOSVRTX0FCQlJFVklBVEVEJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG9vbHRpcF09XCInVUkuQ09SRV9PUkdfVFJFRS5TSE9XX09VVERBVEVEX1VOSVRTJ1wiIHRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCI+PC9jb3JlLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVjay1pbmhlcml0YW5jZS13cmFwcGVyXCIgKm5nSWY9XCJhY2Nlc3Nvck1vZGUgPT09ICdDSEVDS0VEJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y29yZS1jaGVja2JveCAqbmdJZj1cInNob3dDaGVja0luaGVyaXRhbmNlXCIgWyhuZ01vZGVsKV09XCJjaGVja0luaGVyaXRhbmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uQ2hlY2tJbmhlcml0YW5jZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cIidVSS5DT1JFX09SR19UUkVFLkNIRUNLX0lOSEVSSVRBTkNFJ1wiPjwvY29yZS1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaXRlbSBsZXQtY29udGV4dD1cImNvbnRleHRcIiBsZXQtaWQ9XCJjb250ZXh0LmlkXCIgbGV0LXRpdGxlPVwiY29udGV4dC50cmVlJFRpdGxlXCJcclxuICAgICAgICAgICAgICAgIGxldC1oaWdobGlnaHRlZD1cImNvbnRleHQudHJlZSRIaWdobGlnaHRlZFwiIGxldC1oYXNDaGlsZHJlbj1cImNvbnRleHQudHJlZSRIYXNDaGlsZHJlblwiXHJcbiAgICAgICAgICAgICAgICBsZXQtaGFzQWN0aXZlQ2hpbGRyZW49XCJjb250ZXh0LnRyZWUkSGFzQWN0aXZlQ2hpbGRyZW5cIiBsZXQtY2hpbGRyZW49XCJjb250ZXh0LnRyZWUkQ2hpbGRyZW5cIlxyXG4gICAgICAgICAgICAgICAgbGV0LWV4cGFuZGVkPVwiY29udGV4dC50cmVlJEV4cGFuZGVkXCIgbGV0LWlzQWN0aXZlPVwiY29udGV4dC5pc0FjdGl2ZVwiIGxldC1hY3RpdmU9XCJjb250ZXh0LnRyZWUkQWN0aXZlXCJcclxuICAgICAgICAgICAgICAgIGxldC1jaGVja2VkPVwiY29udGV4dC50cmVlJENoZWNrZWRcIiBsZXQtcHJvdGVjdGVkPVwiY29udGV4dC5wcm90ZWN0ZWRcIj5cclxuXHJcbiAgICAgICAgICAgICAgICBAaWYgKCghc2hvd0Rpc3NvbHZlZCAmJiAhIWlzQWN0aXZlKSB8fCAoISFzaG93RGlzc29sdmVkKSkge1xyXG4gICAgICAgICAgICAgICAgPGxpIFtjbGFzcy5oYXMtY2hpbGRyZW5dPVwiISFoYXNDaGlsZHJlblwiIFtjbGFzcy5jb2xsYXBzZWRdPVwiISFoYXNDaGlsZHJlbiAmJiAhISFleHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gKGNsaWNrKT1cImFjY2Vzc29yTW9kZSAhPT0gJ0NIRUNLRUQnID8gb25PYmplY3RDbGljayhjb250ZXh0LCAkZXZlbnQpIDogJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwib25PYmplY3RDbGljayhjb250ZXh0LCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoKCEhc2hvd0Rpc3NvbHZlZCAmJiAhIWhhc0NoaWxkcmVuKSB8fCAoIXNob3dEaXNzb2x2ZWQgJiYgISFoYXNBY3RpdmVDaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJleHBhbmQtdG9nZ2xlciBjdXN0b20taWNvbi1wYXJlbnQtZG93blwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25FeHBhbmRUb2dnbGVyQ2xpY2soY29udGV4dCwgJGV2ZW50KVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjY2Vzc29yTW9kZSA9PT0gJ0NIRUNLRUQnICYmICFwcm90ZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNvcmUtY2hlY2tib3ggKG9uQ2xpY2spPVwib25JdGVtQ2hlY2soY29udGV4dCwgJGV2ZW50KVwiIFtpbnB1dFZhbHVlXT1cImNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+PC9jb3JlLWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxvYmplY3QgW2NsYXNzLmFjdGl2ZV09XCJzZWxlY3RlZEtleT09PWlkLnRvU3RyaW5nKClcIiBbY2xhc3MuaGlnaGxpZ2h0ZWRdPVwiaGlnaGxpZ2h0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc3NvbHZlZF09XCIhaXNBY3RpdmVcIiBbY2xhc3MucHJvdGVjdGVkXT1cInByb3RlY3RlZFwiIFthcHBUb29sdGlwXT1cInRpdGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyB0aXRsZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L29iamVjdD5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgQGlmICghIWNoaWxkcmVuLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIDx1bCBbY2xhc3MuY29sbGFwc2VkXT1cIiAhISFleHBhbmRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChjaGlsZCBvZiBjaGlsZHJlbjsgdHJhY2sgJGluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFleHBhbmRlZCB8fCAhIWZ1bGxSZW5kZXJpbmcpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtOyBjb250ZXh0OiB7IGNvbnRleHQ6IGNoaWxkIH1cIj48L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
@@ -8400,7 +8400,7 @@ class CoreOrgTreeComponent extends CoreFormControlBaseComponent {
|
|
|
8400
8400
|
multi: true,
|
|
8401
8401
|
useExisting: CoreOrgTreeComponent,
|
|
8402
8402
|
},
|
|
8403
|
-
], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "displayContent", first: true, predicate: ["displayContent"], descendants: true }, { propertyName: "reducedIconWrapper", first: true, predicate: ["reducedIconWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track root) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\r\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler custom-icon-parent-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"selectedKey===id.toString()\" [class.highlighted]=\"highlighted\"\r\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;border-radius:5px;--item-height: 35px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 9px;--line-color: \"transparent\";--active-item-color: #F37540;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);transform:translate(14px,8px)}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{background:#e7e7e7}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow-y:auto;overflow-x:hidden;position:relative;width:100%;border-radius:5px}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;top:12px;left:-5px;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
|
|
8403
|
+
], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }, { propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "displayContent", first: true, predicate: ["displayContent"], descendants: true }, { propertyName: "reducedIconWrapper", first: true, predicate: ["reducedIconWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track root) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\r\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler custom-icon-parent-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"selectedKey===id.toString()\" [class.highlighted]=\"highlighted\"\r\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;--item-height: 35px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 9px;--line-color: \"transparent\";--active-item-color: #F37540;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);transform:translate(14px,8px)}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{background:#e7e7e7}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow:auto;position:relative;width:100%}.core-org-tree-container .scroll-container::-webkit-scrollbar-corner{background-color:transparent}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;top:12px;left:-5px;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: CoreLoadingSurfaceComponent, selector: "core-loading-surface", inputs: ["loading", "height"] }, { kind: "component", type: CoreCheckboxComponent, selector: "core-checkbox", inputs: ["text", "tooltipPosition", "tooltip", "inputValue", "disabled"], outputs: ["onClick"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TooltipDirective, selector: "[appTooltip]", inputs: ["appTooltip", "showAnyway", "position"] }] }); }
|
|
8404
8404
|
}
|
|
8405
8405
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImport: i0, type: CoreOrgTreeComponent, decorators: [{
|
|
8406
8406
|
type: Component,
|
|
@@ -8418,7 +8418,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.3", ngImpor
|
|
|
8418
8418
|
multi: true,
|
|
8419
8419
|
useExisting: CoreOrgTreeComponent,
|
|
8420
8420
|
},
|
|
8421
|
-
], template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track root) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\r\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler custom-icon-parent-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"selectedKey===id.toString()\" [class.highlighted]=\"highlighted\"\r\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;border-radius:5px;--item-height: 35px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 9px;--line-color: \"transparent\";--active-item-color: #F37540;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);transform:translate(14px,8px)}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{background:#e7e7e7}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow-y:auto;overflow-x:hidden;position:relative;width:100%;border-radius:5px}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;top:12px;left:-5px;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"] }]
|
|
8421
|
+
], template: "<div #container class=\"core-org-tree-container\" [class.full-width]=\"!!fullWidthMode\" *ngIf=\"!!data\" [ngStyle]=\"{\r\n position : 'relative',\r\n width: '100%',\r\n height: height + 'px'\r\n }\">\r\n <div #displayContent class=\"custom-org-tree\">\r\n <div class=\"core-org-tree-header d-flex-between\">\r\n <div class=\"m5\">\r\n <input type=\"text\" class=\"form-control\" [(ngModel)]=\"search\" (ngModelChange)=\"onSearchChange($event)\"\r\n [placeholder]=\"searchPlaceholder | translate: lang\" [class.full-width]=\"!!fullWidthMode\">\r\n </div>\r\n </div>\r\n\r\n <ng-container>\r\n\r\n <div #scrollContainer class=\"scroll-container\" [ngStyle]=\"{\r\n height: height - layoutService.coreOrgTreeTopHeight - layoutService.coreOrgTreeBottomHeight + 'px',\r\n overflow: 'scroll'\r\n }\">\r\n <core-loading-surface [loading]=\"loading\" [height]=\"scrollContainerHeight\"></core-loading-surface>\r\n <!-- @for (root of dataFiltered; track root) { -->\r\n @for (root of data; track root) {\r\n @defer(on viewport(scrollContainer)) {\r\n <ul class=\"root\" [class.collapsed]=\"!!!root.tree$Expanded\">\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: root }\"></ng-container>\r\n </ul>\r\n } @placeholder() {\r\n Placeholder...\r\n } @loading() {\r\n Loading...\r\n } @error() {\r\n Error...\r\n }\r\n\r\n }\r\n </div>\r\n <div [ngStyle]=\"{\r\n display: 'block',\r\n position: 'absolute',\r\n bottom: '0px',\r\n left: '0px',\r\n right: '0px',\r\n height: layoutService.corePaginationHeight + 'px',\r\n paddingLeft: layoutService.basicSpacing + 'px',\r\n paddingRight: layoutService.basicSpacing + 'px',\r\n lineHeight: layoutService.corePaginationHeight + 'px',\r\n overflow: 'hidden'\r\n }\">\r\n <div [ngStyle]=\"{\r\n height: layoutService.corePaginationHeight + 'px',\r\n position: 'relative',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between'\r\n }\">\r\n <div>\r\n <core-checkbox [(ngModel)]=\"showDissolved\"\r\n (ngModelChange)=\"onCheckIncludeDissolvedChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS_ABBREVIATED'\"\r\n [tooltip]=\"'UI.CORE_ORG_TREE.SHOW_OUTDATED_UNITS'\" tooltipPosition=\"above\"></core-checkbox>\r\n </div>\r\n <div class=\"check-inheritance-wrapper\" *ngIf=\"accessorMode === 'CHECKED'\">\r\n <core-checkbox *ngIf=\"showCheckInheritance\" [(ngModel)]=\"checkInheritance\"\r\n (ngModelChange)=\"onCheckInheritanceChange($event)\"\r\n [text]=\"'UI.CORE_ORG_TREE.CHECK_INHERITANCE'\"></core-checkbox>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #item let-context=\"context\" let-id=\"context.id\" let-title=\"context.tree$Title\"\r\n let-highlighted=\"context.tree$Highlighted\" let-hasChildren=\"context.tree$HasChildren\"\r\n let-hasActiveChildren=\"context.tree$HasActiveChildren\" let-children=\"context.tree$Children\"\r\n let-expanded=\"context.tree$Expanded\" let-isActive=\"context.isActive\" let-active=\"context.tree$Active\"\r\n let-checked=\"context.tree$Checked\" let-protected=\"context.protected\">\r\n\r\n @if ((!showDissolved && !!isActive) || (!!showDissolved)) {\r\n <li [class.has-children]=\"!!hasChildren\" [class.collapsed]=\"!!hasChildren && !!!expanded\">\r\n <!-- (click)=\"accessorMode !== 'CHECKED' ? onObjectClick(context, $event) : $event.preventDefault()\" -->\r\n <span (click)=\"onObjectClick(context, $event)\">\r\n @if ((!!showDissolved && !!hasChildren) || (!showDissolved && !!hasActiveChildren)) {\r\n <i class=\"expand-toggler custom-icon-parent-down\"\r\n (click)=\"onExpandTogglerClick(context, $event)\"></i>\r\n }\r\n @if (accessorMode === 'CHECKED' && !protected) {\r\n <core-checkbox (onClick)=\"onItemCheck(context, $event)\" [inputValue]=\"checked\"\r\n [disabled]=\"disabled\"></core-checkbox>\r\n }\r\n <object [class.active]=\"selectedKey===id.toString()\" [class.highlighted]=\"highlighted\"\r\n [class.dissolved]=\"!isActive\" [class.protected]=\"protected\" [appTooltip]=\"title\">\r\n {{ title }}\r\n </object>\r\n </span>\r\n @if (!!children.length) {\r\n <ul [class.collapsed]=\" !!!expanded\">\r\n @for (child of children; track $index) {\r\n @if (!!expanded || !!fullRendering) {\r\n\r\n <ng-container *ngTemplateOutlet=\"item; context: { context: child }\"></ng-container>\r\n\r\n }\r\n }\r\n </ul>\r\n }\r\n </li>\r\n }\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</div>", styles: [".core-org-tree-container{--background: var(--color-bg-core-org-tree);--height: 545px;--item-height: 35px;--ul-padding: 20px;--display: \"block\";--square-color: darkgray;--square-size: 9px;--line-color: \"transparent\";--active-item-color: #F37540;--line-size: 1px;--reduced-icon-wrapper-height: 50px;--reduced-panel-height: calc(var(--height) - var(--reduced-icon-wrapper-height));--scroll-container-height: calc(var(--height) - var(--size-core-reducer-icon-wrapper-height) - var(--size-pagination-height));color:#000;background-color:var(--color-bg-core-org-tree)!important;height:var(--height);background:var(--background);width:var(--size-core-org-tree-width);transition:width .5s ease-out}@keyframes reducedPanelOn{0%{opacity:0;transform:rotate(-90deg)}to{opacity:1;transform:rotate(0)}}.core-org-tree-container .custom-org-tree{display:var(--display)}.core-org-tree-container .core-org-tree-header{height:var(--size-core-org-tree-header-height)}.core-org-tree-container .core-org-tree-header input{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2 - var(--size-scrollbar-width) + 6px);transform:translate(14px,8px)}.core-org-tree-container .core-org-tree-header input.full-width{width:calc(var(--size-core-org-tree-width) - var(--size-layout-block-cell-spacing) * 2)}.core-org-tree-container .check-inheritance-wrapper{padding:15px}.core-org-tree-container .m5>input{background:#e7e7e7}.core-org-tree-container .form-control{border:none}.core-org-tree-container .core-reducer-icon-wrapper{height:var(--size-core-reducer-icon-wrapper-height);padding:var(--size-layout-block-cell-spacing)}.core-org-tree-container .scroll-container{background:var(--background);height:var(--scroll-container-height);overflow:auto;position:relative;width:100%}.core-org-tree-container .scroll-container::-webkit-scrollbar-corner{background-color:transparent}.core-org-tree-container .scroll-container *{box-sizing:border-box;padding:0;margin:0}.core-org-tree-container .scroll-container ul{display:table;vertical-align:top;padding-left:var(--ul-padding);transition:all .5s ease-out;width:100%}.core-org-tree-container .scroll-container ul>li>span:hover{height:35px;background-color:#fff;border-top-left-radius:20px;border-bottom-left-radius:20px;width:100%}.core-org-tree-container .scroll-container ul>li>span:active{background-color:#f1f1f1;height:35px;border-radius:20px}.core-org-tree-container .scroll-container ul>li>span>object{user-select:none;-webkit-user-select:none}.core-org-tree-container .scroll-container ul>li>span>object.active{color:var(--active-item-color)}.core-org-tree-container .scroll-container ul .highlighted{color:var(--color-core-org-tree-highlighted);font-weight:700}.core-org-tree-container .scroll-container ul .dissolved{color:#848484;text-decoration:line-through dashed}.core-org-tree-container .scroll-container ul .dissolved.active{color:#c9252b!important}.core-org-tree-container .scroll-container ul>li{display:block;position:relative}.core-org-tree-container .scroll-container ul>li:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -1);top:calc(var(--item-height) / 2);height:calc(var(--item-height) / 2);border-top:solid var(--line-size) var(--line-color);border-right:none;border-bottom:none;border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li>span{display:flex;align-items:center;height:var(--item-height);white-space:nowrap;font-size:13px;padding-left:8px;transform:translate(10px);cursor:pointer}.core-org-tree-container .scroll-container ul>li>span>i{color:var(--square-color);cursor:pointer;font-size:var(--square-size);width:var(--square-size);height:var(--square-size)}.core-org-tree-container .scroll-container ul>li>span>.expand-toggler{position:absolute;top:12px;left:-5px;z-index:1;transform:translate(-100%) rotate(0);transition:.5s ease-out;display:flex;align-items:center;justify-content:center}.core-org-tree-container .scroll-container ul>li>span>.check-toggler{margin-left:5px;margin-right:5px}.core-org-tree-container .scroll-container ul>li>ul>li>span:before{content:\"\";display:block;position:absolute;width:var(--ul-padding);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);height:var(--line-size);border-top:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul>li.collapsed>span>.expand-toggler{transform:translate(-100%) rotate(-90deg);transition:.5s ease-out}.core-org-tree-container .scroll-container ul>li.collapsed:before{border-left:none}.core-org-tree-container .scroll-container ul>li:not(.collapsed):not(.has-children):before{border-left:none}.core-org-tree-container .scroll-container ul:not(.root):before{content:\"\";display:block;position:absolute;width:var(--line-size);left:calc(var(--ul-padding) * -1);height:calc(100% - var(--item-height) * 1.5);border-left:solid var(--line-size) var(--line-color);z-index:0}.core-org-tree-container .scroll-container ul:not(.root)>li:last-child:not(.collapsed).has-children:after{content:\"\";display:block;position:absolute;height:calc(100% - var(--item-height));width:calc(var(--ul-padding) / 2);left:calc(var(--ul-padding) * -2);top:calc(var(--item-height) / 2);border-left:solid var(--line-size) var(--background);z-index:0}.core-org-tree-container .scroll-container ul.collapsed:not(.root){display:none}.core-org-tree-container .collapsed>li:before{display:none!important}.core-org-tree-container.full-width .scroll-container{width:auto}.core-org-tree-container.reduced{width:50px;padding:0;transition:width .5s ease-out}.core-org-tree-container.reduced .scroll-container{overflow:hidden}.core-org-tree-container.reduced .scroll-container>ul.root{display:none}.core-org-tree-container.reduced .scroll-container>.reduced-panel{color:var(--active-item-color);width:50px;height:var(--reduced-panel-height);writing-mode:vertical-rl;text-orientation:mixed;display:flex;align-items:center;justify-content:center;font-weight:700;animation:reducedPanelOn .5s ease-out}\n"] }]
|
|
8422
8422
|
}], ctorParameters: () => [{ type: AuthService }, { type: RecursiveService }, { type: MultiLanguageService }, { type: LayoutService }, { type: CoreOrgTreeService }, { type: AlertService }, { type: OrganizationService }], propDecorators: { lineColor: [{
|
|
8423
8423
|
type: Input
|
|
8424
8424
|
}], fullWidthMode: [{
|