@sunbird-cb/cbp-ai 0.1.77 → 0.1.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/add-designation/add-designation.component.mjs +3 -3
- package/esm2022/lib/components/reject-request-form/reject-request-form.component.mjs +2 -2
- package/esm2022/lib/components/role-mapping-generation/role-mapping-generation.component.mjs +8 -4
- package/fesm2022/sunbird-cb-cbp-ai.mjs +11 -7
- package/fesm2022/sunbird-cb-cbp-ai.mjs.map +1 -1
- package/lib/components/role-mapping-generation/role-mapping-generation.component.d.ts.map +1 -1
- package/package.json +1 -1
- package/sunbird-cb-cbp-ai-0.1.79.tgz +0 -0
- package/sunbird-cb-cbp-ai-0.1.77.tgz +0 -0
|
@@ -626,11 +626,11 @@ export class AddDesignationComponent {
|
|
|
626
626
|
this.getDesignationSafe();
|
|
627
627
|
}
|
|
628
628
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AddDesignationComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2.FormBuilder }, { token: i0.ChangeDetectorRef }, { token: i3.SharedService }, { token: i4.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
629
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AddDesignationComponent, selector: "app-add-designation", viewQueries: [{ propertyName: "designationRef", first: true, predicate: ["designation"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"view-cbp-plan\">\n <div [formGroup]=\"designationForm\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Add New Designation</div>\n\n </div>\n <div class=\"right-container\">\n <button mat-stroked-button class=\"add-btn\" (click)=\"addDesignationBlock()\"\n [disabled]=\"designationArray?.length >= MAX_DESIGNATIONS\">\n\n\n <span style=\"font-size: 32px;\">+</span> Add More\n </button>\n\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <div class=\"popup-header seperator\">\n <div class=\"info-row\">\n <mat-icon class=\"vertical-middle\">info</mat-icon>\n <span>\n Maximum 10 designations can be selected for CBP generation at one time.\n </span>\n </div>\n <div class=\"header-actions\">\n\n <span class=\"counter\">\n {{ designationArray?.length }}/{{ MAX_DESIGNATIONS }}\n </span>\n\n \n\n </div>\n\n </div>\n </div>\n <div class=\"section-container\"> \n <div formArrayName=\"designations\">\n\n <div *ngFor=\"let designationGroup of designationArray.controls; let i=index\" [formGroupName]=\"i\"\n class=\"designation-wrapper\">\n\n <!-- EDIT MODE -->\n <ng-container *ngIf=\"designationGroup.value.isEdit\">\n\n <mat-card class=\"mt-1 designation-block\">\n\n <div class=\"designation-header\">\n <span class=\"designation-title\">\n Designation {{ i + 1 }}\n </span>\n </div>\n\n <!-- Designation Dropdown -->\n <div class=\"mt-2 section\">\n\n <div class=\"sub-heading\">\n <p>Designation Name</p>\n </div>\n\n <div class=\"section-header mt-4\">\n\n <mat-form-field appearance=\"outline\" class=\"margin-top-s w-full required-select\">\n\n <mat-select placeholder=\"Select designation\" formControlName=\"designation_name\"\n (closed)=\"onDesignationDropdownClosed(i)\" panelClass=\"search-panel\"\n (openedChange)=\"setupScrollListener($event)\">\n\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n\n <div class=\"search-input-wrapper\">\n\n <input type=\"text\" placeholder=\"Search designation\"\n style=\"width:100%\" formControlName=\"searchDesignation\"\n class=\"search-input\" (keydown)=\"$event.stopPropagation()\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation()\"\n autocomplete=\"off\">\n\n <div *ngIf=\"searchDesignationControl?.value\" class=\"clear-icon\"\n (click)=\"clearDesignationSearch(i,$event)\">\n\n <mat-icon>close</mat-icon>\n\n </div>\n\n </div>\n\n </div>\n\n <mat-option *ngFor=\"let designation of getFilteredDesignations(i)\"\n [value]=\"designation?.name\">\n\n {{ designation?.name }}\n\n </mat-option>\n\n <div *ngIf=\"isLoadingMoreDesignations\" class=\"loading-indicator\">\n\n Load More...\n\n </div>\n\n <mat-option\n *ngIf=\"(masterData?.designation)?.length === 0 || noMoreLegacyDesignations\"\n disabled>\n\n Designation Not Found.\n\n </mat-option>\n\n </mat-select>\n\n </mat-form-field>\n\n </div>\n\n </div>\n\n <!-- Instruction -->\n <div class=\"mt-2 section\">\n\n <div class=\"sub-heading\">\n <p>Role & Responsibilities / Additional Details</p>\n </div>\n\n <div class=\"mt-4 additional-details\">\n\n <textarea class=\"custom-textarea\" formControlName=\"instruction\" rows=\"5\"\n placeholder=\"Add Instructions\">\n </textarea>\n\n </div>\n\n </div>\n\n <!-- Actions -->\n\n <div class=\"designation-actions\">\n <button mat-stroked-button color=\"warn\" type=\"button\"\n (click)=\"deleteDesignationBlock(i)\">\n\n <mat-icon>delete</mat-icon>\n\n </button>\n\n <button class=\"save-flat-button\" mat-flat-button color=\"primary\" type=\"button\" (click)=\"saveDesignationBlock(i)\">\n\n <mat-icon>check</mat-icon>\n Save\n\n </button>\n\n </div>\n\n </mat-card>\n\n </ng-container>\n\n <!-- VIEW MODE -->\n <ng-container *ngIf=\"!designationGroup.value.isEdit\">\n\n <mat-card class=\"saved-designation-card\">\n\n <div class=\"saved-content\">\n\n <div class=\"saved-content-desc\">\n\n <div class=\"saved-designation-name\" style=\"font-size: 16px ;font-weight: 600;\">\n {{ designationGroup.get('designation_name')?.value }} \n </div>\n\n <div class=\"saved-instruction\">\n {{ designationGroup.get('instruction')?.value }}\n </div>\n\n </div>\n\n <div class=\"saved-actions\">\n\n <button class=\"add-btn\" mat-stroked-button type=\"button\" (click)=\"editDesignationBlock(i)\">\n\n Edit\n\n </button>\n\n <button mat-stroked-button color=\"warn\" type=\"button\"\n (click)=\"deleteDesignationBlock(i)\">\n\n <mat-icon>delete</mat-icon>\n\n </button>\n\n </div>\n\n </div>\n\n </mat-card>\n\n </ng-container>\n\n </div>\n\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n <input [disabled]=\"!canGenerateCBP\" [ngClass]=\"!canGenerateCBP ? 'btn-disable':'btn-active'\"\n type=\"button\" value=\"Generate CBP\" (click)=\"saveDesignation()\" />\n </div>\n </div>\n </div>\n </div>\n <div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </div>", styles: [".container{margin:10px auto}.sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:150%}:host ::ng-deep mat-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}:host ::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}:host ::ng-deep .mat-select-panel{background-color:#fff!important}:host ::ng-deep .mat-select-panel .mat-option{border-radius:0!important}:host ::ng-deep mat-form-field .mat-form-field-underline{display:none!important}:host ::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}:host ::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}:host ::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.btn-group{display:flex;flex-direction:row;justify-content:space-between}.pl-2{padding-left:5px}.search-filter-section{display:flex;flex-direction:row;justify-content:space-between}.search .rsearch{position:relative}.search .search-icon{position:absolute;top:10px;font-size:20px;left:10px}.search .sinput{border-radius:4px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato}.select-map-route-container{display:flex;flex-direction:row}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.search-container{display:flex;flex-direction:row}.course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.ai-recommened-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #1B4CA1;background:#1b4ca129}.igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:30px}.course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.relevancy,.competencies-matched{color:var(--accessbility-shades-with-opacity-kb-greys-black-60, rgba(0, 0, 0, .6));font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;align-items:center}.percentage{color:#1d8923;font-family:Lato;font-size:14px;font-style:normal;font-weight:800;line-height:normal}.relevancy-container,.competencies-matched-container{display:flex;flex-direction:row;align-items:center}.dash{padding:0 5px}:host ::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.course-list-container{display:flex;flex-wrap:wrap;gap:16px}.course-list-item{flex:0 0 48%;box-sizing:border-box;border:1px solid #ccc;padding:16px;background-color:#fff;border-radius:8px}.checked-course-container{display:flex}.ml-2{margin-left:8px}:host ::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.ai-recommened-pill-text,.igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.ai-loader-icon img,.igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.competency-container{display:flex;justify-content:space-between;flex-direction:row}.outside-layer-total{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #1B4CA1;border-right:2px solid #1B4CA1;background:#edf1f8;margin:0 10px}.outside-layer-functional{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #E24577;border-right:2px solid #E24577;background:#f8d2de;margin:0 10px}.outside-layer-domain{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #7B47A4;border-right:2px solid #7B47A4;background:#dfd3e9;margin:0 10px}.outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #F8B861;border-right:2px solid #F8B861;background:#fde8cc;margin:0 10px}.inside-layer{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.count{color:#1b4ca1;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.suggest-course-control{display:flex;flex-direction:row}.course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.heading{color:#000;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.behavioural-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:32px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:5px 0}.functional-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:32px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:5px 0}.domain-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:32px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:5px 0}.popup-header{display:flex;flex-direction:row;justify-content:space-between}.popup-footer{display:flex;flex-direction:row;justify-content:end}.view-cbp-plan{margin:10px;padding:10px}.view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.section{border-radius:8px;background:#1b4ca114;padding:16px}.popup-header{display:flex;justify-content:space-between;align-items:center;font-weight:700;flex-shrink:0}.seperator{border-bottom:1px solid #ddd;padding:4px}.popup-footer{display:flex;justify-content:flex-end;gap:16px;padding:16px 0;border-top:1px solid #ddd;background-color:#fff;flex-shrink:0;position:sticky;bottom:0}.section-container{overflow-y:auto;flex:1 1 auto}.competency-list{display:flex;flex-direction:row;gap:6px}.competency-text{color:#000;font-family:Lato;font-size:10px;font-style:normal;font-weight:400;line-height:normal;padding:5px}.competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:12px;font-style:normal;font-weight:600;line-height:normal}.cursor-pointer{cursor:pointer}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.close .mat-icon{height:18px!important;width:18px!important}:host ::ng-deep .mat-select-arrow-wrapper{height:6px!important}.file-upload-wrapper{position:relative;margin:16px 0}.file-upload-label{display:inline-flex;align-items:center;padding:10px 16px;background-color:#1b4ca1;color:#fff;font-weight:500;cursor:pointer;transition:background-color .3s;-webkit-user-select:none;user-select:none;border-radius:8px}.file-upload-label:hover{background-color:#1b4ca1}.file-upload-icon{margin-right:8px;font-size:18px}.file-upload-input{display:none}.error{color:red;margin-top:6px;font-size:.875rem}.file-upload-hint{display:block;font-size:1rem;color:#000;font-family:Lato;font-size:14px;margin-top:4px;margin-bottom:8px}:host ::ng-deep .mat-select-panel.search-panel .search-input{flex:1 1 auto;width:100%;padding:8px 10px;border:1px solid rgba(0,0,0,.12);border-radius:4px;font-size:14px;color:#333;outline:none;box-sizing:border-box}:host ::ng-deep .mat-select-panel.search-panel .search-input:focus{border-color:#0074b6;box-shadow:0 0 0 3px #0074b60f}:host ::ng-deep .mat-select-panel.search-panel .clear-button{background:transparent;border:none;cursor:pointer;font-size:16px;color:#666;padding:6px;line-height:1}:host ::ng-deep .mat-select-panel.search-panel .loading-indicator{padding:10px 12px;text-align:center;color:#666;font-size:14px}:host ::ng-deep .mat-select-panel.search-panel .mat-option{padding-top:10px;padding-left:16px}:host ::ng-deep .mat-select-panel.search-panel mat-option[disabled]{padding:8px 16px!important}:host ::ng-deep .mat-select-panel.align-panel{padding:0!important;box-sizing:border-box;margin-left:0!important;min-width:340px!important;max-width:340px!important}:host ::ng-deep .mat-select-panel.align-panel .mat-option{padding-left:16px}:host ::ng-deep .mat-select-panel.search-panel mat-option[disabled] .mat-error,:host ::ng-deep .mat-select-panel.search-panel .mat-error{margin:0!important;padding:0!important;font-size:14px!important;line-height:1.4!important;color:#f44336}:host ::ng-deep .mat-form-field{width:100%}:host ::ng-deep .mat-text-field-wrapper{background:#fff;border-radius:25px!important;height:42px}:host ::ng-deep .mat-notched-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start,:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-width:1px!important;min-width:0!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-flex{border-radius:25px;height:42px;align-items:center;padding:0 16px;background:#fff}:host ::ng-deep .mat-select-panel{border:1px solid rgba(0,0,0,.16);border-radius:8px;box-shadow:0 6px 18px #0000001f}:host ::ng-deep .mat-select-panel.search-panel{max-height:300px!important;overflow-y:auto!important;box-sizing:border-box}::ng-deep .search-panel .sticky-search-container{position:sticky;top:0;z-index:100;background:#fff;padding:8px;border-bottom:1px solid #eee}:host ::ng-deep .search-panel .search-input-wrapper{display:flex;gap:8px;align-items:center}:host ::ng-deep .search-panel .search-input{width:100%;height:32px;padding:6px 10px}:host ::ng-deep .search-panel .mat-option{padding:8px 16px!important}:host ::ng-deep .search-panel .mat-pseudo-checkbox{margin-right:8px}:host ::ng-deep .search-panel .no-data-option{padding:10px 16px;font-size:14px;color:#f44336}::ng-deep .search-panel .no-data-option .mat-pseudo-checkbox{display:none!important}.search-input-wrapper{position:relative;width:100%;display:flex;align-items:center}.search-input{width:100%;padding-right:40px;height:40px;line-height:40px;box-sizing:border-box}.clear-icon{position:absolute;right:10px;cursor:pointer;font-size:20px;color:#666;display:flex;align-items:center;height:100%}.clear-icon:hover{color:#000}:host ::ng-deep .search-panel .mat-option:first-child{margin-top:0}.add-more-btn{border-radius:8px;font-weight:600}.designation-limit-info{display:flex;align-items:center;gap:8px;margin-top:12px;font-size:13px;color:#6b7280}.designation-count{margin-left:auto;font-weight:600}.designation-card{border:1px solid #e5e7eb;border-radius:12px;padding:20px;background:#fff}.designation-title{font-size:16px;font-weight:600;color:#1f4ea3;margin-bottom:20px}.designation-save-section{display:flex;justify-content:flex-end;margin-top:16px}.save-btn{min-width:100px}.info-row{font-size:14px;font-weight:400}.vertical-middle{vertical-align:middle}.saved-content{border:1px solid #ccc;border-radius:8px;display:flex;flex-direction:row;justify-content:space-between;padding:10px;background-color:#fff;width:100%}.saved-content-desc{width:75%;word-break:break-word}.info-row{display:flex;align-items:center;gap:6px;color:#667085;font-size:13px;margin-top:8px}.header-actions{display:flex;align-items:center;gap:12px}.counter{font-size:16px;font-weight:600;color:#475467}.designation-card{border:1px solid #e4e7ec;border-radius:12px;padding:16px;margin-bottom:16px;background:#fff}.card-header{font-size:14px;font-weight:600;color:#175cd3;margin-bottom:16px}.field{margin-bottom:16px}.field label{display:block;margin-bottom:6px;font-weight:600}.field mat-form-field{width:100%}.summary-view{display:flex;justify-content:space-between;align-items:flex-start}.summary-content h4{margin:0;font-size:16px;font-weight:600}.summary-content p{margin-top:8px;color:#667085;white-space:pre-line}.action-buttons{display:flex;gap:4px}.card-footer{display:flex;justify-content:flex-end}:host ::ng-deep .mat-mdc-button:hover,:host ::ng-deep .mat-mdc-outlined-button:hover,:host ::ng-deep .mat-mdc-raised-button:hover,:host ::ng-deep .mat-mdc-unelevated-button:hover{--mat-text-button-state-layer-color: transparent !important;--mat-outlined-button-state-layer-color: transparent !important;--mat-filled-button-state-layer-color: transparent !important;--mat-protected-button-state-layer-color: transparent !important}:host .mat-stroked-button{border:none!important;padding:0 10px;line-height:34px;background-color:transparent}.add-btn{background-color:#efefef!important}.saved-designation-card{padding:16px 0}.designation-actions{display:flex;flex-direction:row;justify-content:end;align-items:center;margin-top:10px}:host .mat-icon{overflow:visible!important}.save-flat-button{background-color:#1b4ca1;color:#fff}.right-container{display:flex;flex-direction:row;justify-content:space-between;gap:16px}.designation-block{padding:16px 0!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatLegacyCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i7.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i8.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i12.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
629
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: AddDesignationComponent, selector: "app-add-designation", viewQueries: [{ propertyName: "designationRef", first: true, predicate: ["designation"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"view-cbp-plan\">\n <div [formGroup]=\"designationForm\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Add New Designation</div>\n\n </div>\n <div class=\"right-container\">\n <button mat-stroked-button class=\"add-btn\" (click)=\"addDesignationBlock()\"\n [disabled]=\"designationArray?.length >= MAX_DESIGNATIONS\">\n\n\n <span style=\"font-size: 32px;\">+</span> Add More\n </button>\n\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <div class=\"popup-header seperator\">\n <div class=\"info-row\">\n <mat-icon class=\"vertical-middle\">info</mat-icon>\n <span>\n Maximum 10 designations can be selected for CBP generation at one time.\n </span>\n </div>\n <div class=\"header-actions\">\n\n <span class=\"counter\">\n {{ designationArray?.length }}/{{ MAX_DESIGNATIONS }}\n </span>\n\n \n\n </div>\n\n </div>\n </div>\n <div class=\"section-container\"> \n <div formArrayName=\"designations\">\n\n <div *ngFor=\"let designationGroup of designationArray.controls; let i=index\" [formGroupName]=\"i\"\n class=\"designation-wrapper\">\n\n <!-- EDIT MODE -->\n <ng-container *ngIf=\"designationGroup.value.isEdit\">\n\n <mat-card class=\"mt-1 designation-block\">\n\n <div class=\"designation-header\">\n <span class=\"designation-title\">\n Designation {{ i + 1 }}\n </span>\n </div>\n\n <!-- Designation Dropdown -->\n <div class=\"mt-2 section\">\n\n <div class=\"sub-heading\">\n <p>Designation Name</p>\n </div>\n\n <div class=\"section-header mt-4\">\n\n <mat-form-field appearance=\"outline\" class=\"margin-top-s w-full required-select\">\n\n <mat-select placeholder=\"Select designation\" formControlName=\"designation_name\"\n (closed)=\"onDesignationDropdownClosed(i)\" panelClass=\"search-panel\"\n (openedChange)=\"setupScrollListener($event)\">\n\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n\n <div class=\"search-input-wrapper\">\n\n <input type=\"text\" placeholder=\"Search designation\"\n style=\"width:100%\" formControlName=\"searchDesignation\"\n class=\"search-input\" (keydown)=\"$event.stopPropagation()\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation()\"\n autocomplete=\"off\">\n\n <div *ngIf=\"searchDesignationControl?.value\" class=\"clear-icon\"\n (click)=\"clearDesignationSearch(i,$event)\">\n\n <mat-icon>close</mat-icon>\n\n </div>\n\n </div>\n\n </div>\n\n <mat-option *ngFor=\"let designation of getFilteredDesignations(i)\"\n [value]=\"designation?.name\">\n\n {{ designation?.name }}\n\n </mat-option>\n\n <div *ngIf=\"isLoadingMoreDesignations\" class=\"loading-indicator\">\n\n Load More...\n\n </div>\n\n <mat-option\n *ngIf=\"(masterData?.designation)?.length === 0 || noMoreLegacyDesignations\"\n disabled>\n\n Designation Not Found.\n\n </mat-option>\n\n </mat-select>\n\n </mat-form-field>\n\n </div>\n\n </div>\n\n <!-- Instruction -->\n <div class=\"mt-2 section\">\n\n <div class=\"sub-heading\">\n <p>Role & Responsibilities / Additional Details</p>\n </div>\n\n <div class=\"mt-4 additional-details\">\n\n <textarea class=\"custom-textarea\" formControlName=\"instruction\" rows=\"5\"\n placeholder=\"Add Instructions\">\n </textarea>\n\n </div>\n\n </div>\n\n <!-- Actions -->\n\n <div class=\"designation-actions\">\n <button mat-stroked-button color=\"warn\" type=\"button\"\n (click)=\"deleteDesignationBlock(i)\">\n\n <mat-icon>delete</mat-icon>\n\n </button>\n\n <button class=\"save-flat-button\" mat-flat-button color=\"primary\" type=\"button\" (click)=\"saveDesignationBlock(i)\">\n\n <mat-icon>check</mat-icon>\n Save\n\n </button>\n\n </div>\n\n </mat-card>\n\n </ng-container>\n\n <!-- VIEW MODE -->\n <ng-container *ngIf=\"!designationGroup.value.isEdit\">\n\n <mat-card class=\"saved-designation-card\">\n\n <div class=\"saved-content\">\n\n <div class=\"saved-content-desc\">\n\n <div class=\"saved-designation-name\" style=\"font-size: 16px ;font-weight: 600;\">\n {{i+1}}. {{ designationGroup.get('designation_name')?.value }} \n </div>\n\n <div class=\"saved-instruction\">\n {{ designationGroup.get('instruction')?.value }}\n </div>\n\n </div>\n\n <div class=\"saved-actions\">\n\n <button class=\"add-btn\" mat-stroked-button type=\"button\" (click)=\"editDesignationBlock(i)\">\n\n Edit\n\n </button>\n\n <button mat-stroked-button color=\"warn\" type=\"button\"\n (click)=\"deleteDesignationBlock(i)\">\n\n <mat-icon>delete</mat-icon>\n\n </button>\n\n </div>\n\n </div>\n\n </mat-card>\n\n </ng-container>\n\n </div>\n\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n <input [disabled]=\"!canGenerateCBP\" [ngClass]=\"!canGenerateCBP ? 'btn-disable':'btn-active'\"\n type=\"button\" value=\"Generate CBP\" (click)=\"saveDesignation()\" />\n </div>\n </div>\n </div>\n </div>\n <div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </div>", styles: [".container{margin:10px auto}.sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:150%}:host ::ng-deep mat-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}:host ::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}:host ::ng-deep .mat-select-panel{background-color:#fff!important}:host ::ng-deep .mat-select-panel .mat-option{border-radius:0!important}:host ::ng-deep mat-form-field .mat-form-field-underline{display:none!important}:host ::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}:host ::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}:host ::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.btn-group{display:flex;flex-direction:row;justify-content:space-between}.pl-2{padding-left:5px}.search-filter-section{display:flex;flex-direction:row;justify-content:space-between}.search .rsearch{position:relative}.search .search-icon{position:absolute;top:10px;font-size:20px;left:10px}.search .sinput{border-radius:4px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato}.select-map-route-container{display:flex;flex-direction:row}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.search-container{display:flex;flex-direction:row}.course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.ai-recommened-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #1B4CA1;background:#1b4ca129}.igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:30px}.course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.relevancy,.competencies-matched{color:var(--accessbility-shades-with-opacity-kb-greys-black-60, rgba(0, 0, 0, .6));font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;align-items:center}.percentage{color:#1d8923;font-family:Lato;font-size:14px;font-style:normal;font-weight:800;line-height:normal}.relevancy-container,.competencies-matched-container{display:flex;flex-direction:row;align-items:center}.dash{padding:0 5px}:host ::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.course-list-container{display:flex;flex-wrap:wrap;gap:16px}.course-list-item{flex:0 0 48%;box-sizing:border-box;border:1px solid #ccc;padding:16px;background-color:#fff;border-radius:8px}.checked-course-container{display:flex}.ml-2{margin-left:8px}:host ::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.ai-recommened-pill-text,.igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.ai-loader-icon img,.igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.competency-container{display:flex;justify-content:space-between;flex-direction:row}.outside-layer-total{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #1B4CA1;border-right:2px solid #1B4CA1;background:#edf1f8;margin:0 10px}.outside-layer-functional{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #E24577;border-right:2px solid #E24577;background:#f8d2de;margin:0 10px}.outside-layer-domain{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #7B47A4;border-right:2px solid #7B47A4;background:#dfd3e9;margin:0 10px}.outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #F8B861;border-right:2px solid #F8B861;background:#fde8cc;margin:0 10px}.inside-layer{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.count{color:#1b4ca1;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.suggest-course-control{display:flex;flex-direction:row}.course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.heading{color:#000;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.behavioural-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:32px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:5px 0}.functional-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:32px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:5px 0}.domain-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:32px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:5px 0}.popup-header{display:flex;flex-direction:row;justify-content:space-between}.popup-footer{display:flex;flex-direction:row;justify-content:end}.view-cbp-plan{margin:10px;padding:10px}.view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.section{border-radius:8px;background:#1b4ca114;padding:16px}.popup-header{display:flex;justify-content:space-between;align-items:center;font-weight:700;flex-shrink:0}.seperator{border-bottom:1px solid #ddd;padding:4px}.popup-footer{display:flex;justify-content:flex-end;gap:16px;padding:16px 0;border-top:1px solid #ddd;background-color:#fff;flex-shrink:0;position:sticky;bottom:0}.section-container{overflow-y:auto;flex:1 1 auto}.competency-list{display:flex;flex-direction:row;gap:6px}.competency-text{color:#000;font-family:Lato;font-size:10px;font-style:normal;font-weight:400;line-height:normal;padding:5px}.competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:12px;font-style:normal;font-weight:600;line-height:normal}.cursor-pointer{cursor:pointer}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.close .mat-icon{height:18px!important;width:18px!important}:host ::ng-deep .mat-select-arrow-wrapper{height:6px!important}.file-upload-wrapper{position:relative;margin:16px 0}.file-upload-label{display:inline-flex;align-items:center;padding:10px 16px;background-color:#1b4ca1;color:#fff;font-weight:500;cursor:pointer;transition:background-color .3s;-webkit-user-select:none;user-select:none;border-radius:8px}.file-upload-label:hover{background-color:#1b4ca1}.file-upload-icon{margin-right:8px;font-size:18px}.file-upload-input{display:none}.error{color:red;margin-top:6px;font-size:.875rem}.file-upload-hint{display:block;font-size:1rem;color:#000;font-family:Lato;font-size:14px;margin-top:4px;margin-bottom:8px}:host ::ng-deep .mat-select-panel.search-panel .search-input{flex:1 1 auto;width:100%;padding:8px 10px;border:1px solid rgba(0,0,0,.12);border-radius:4px;font-size:14px;color:#333;outline:none;box-sizing:border-box}:host ::ng-deep .mat-select-panel.search-panel .search-input:focus{border-color:#0074b6;box-shadow:0 0 0 3px #0074b60f}:host ::ng-deep .mat-select-panel.search-panel .clear-button{background:transparent;border:none;cursor:pointer;font-size:16px;color:#666;padding:6px;line-height:1}:host ::ng-deep .mat-select-panel.search-panel .loading-indicator{padding:10px 12px;text-align:center;color:#666;font-size:14px}:host ::ng-deep .mat-select-panel.search-panel .mat-option{padding-top:10px;padding-left:16px}:host ::ng-deep .mat-select-panel.search-panel mat-option[disabled]{padding:8px 16px!important}:host ::ng-deep .mat-select-panel.align-panel{padding:0!important;box-sizing:border-box;margin-left:0!important;min-width:340px!important;max-width:340px!important}:host ::ng-deep .mat-select-panel.align-panel .mat-option{padding-left:16px}:host ::ng-deep .mat-select-panel.search-panel mat-option[disabled] .mat-error,:host ::ng-deep .mat-select-panel.search-panel .mat-error{margin:0!important;padding:0!important;font-size:14px!important;line-height:1.4!important;color:#f44336}:host ::ng-deep .mat-form-field{width:100%}:host ::ng-deep .mat-text-field-wrapper{background:#fff;border-radius:25px!important;height:42px}:host ::ng-deep .mat-notched-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start,:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-width:1px!important;min-width:0!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-flex{border-radius:25px;height:42px;align-items:center;padding:0 16px;background:#fff}:host ::ng-deep .mat-select-panel{border:1px solid rgba(0,0,0,.16);border-radius:8px;box-shadow:0 6px 18px #0000001f}:host ::ng-deep .mat-select-panel.search-panel{max-height:300px!important;overflow-y:auto!important;box-sizing:border-box}::ng-deep .search-panel .sticky-search-container{position:sticky;top:0;z-index:100;background:#fff;padding:8px;border-bottom:1px solid #eee}:host ::ng-deep .search-panel .search-input-wrapper{display:flex;gap:8px;align-items:center}:host ::ng-deep .search-panel .search-input{width:100%;height:32px;padding:6px 10px}:host ::ng-deep .search-panel .mat-option{padding:8px 16px!important}:host ::ng-deep .search-panel .mat-pseudo-checkbox{margin-right:8px}:host ::ng-deep .search-panel .no-data-option{padding:10px 16px;font-size:14px;color:#f44336}::ng-deep .search-panel .no-data-option .mat-pseudo-checkbox{display:none!important}.search-input-wrapper{position:relative;width:100%;display:flex;align-items:center}.search-input{width:100%;padding-right:40px;height:40px;line-height:40px;box-sizing:border-box}.clear-icon{position:absolute;right:10px;cursor:pointer;font-size:20px;color:#666;display:flex;align-items:center;height:100%}.clear-icon:hover{color:#000}:host ::ng-deep .search-panel .mat-option:first-child{margin-top:0}.add-more-btn{border-radius:8px;font-weight:600}.designation-limit-info{display:flex;align-items:center;gap:8px;margin-top:12px;font-size:13px;color:#6b7280}.designation-count{margin-left:auto;font-weight:600}.designation-card{border:1px solid #e5e7eb;border-radius:12px;padding:20px;background:#fff}.designation-title{font-size:16px;font-weight:600;color:#1f4ea3;margin-bottom:20px}.designation-save-section{display:flex;justify-content:flex-end;margin-top:16px}.save-btn{min-width:100px}.info-row{font-size:14px;font-weight:400}.vertical-middle{vertical-align:middle}.saved-content{border:1px solid #ccc;border-radius:8px;display:flex;flex-direction:row;justify-content:space-between;padding:10px;background-color:#fff;width:100%}.saved-content-desc{width:75%;word-break:break-word}.info-row{display:flex;align-items:center;gap:6px;color:#667085;font-size:13px;margin-top:8px}.header-actions{display:flex;align-items:center;gap:12px}.counter{font-size:16px;font-weight:600;color:#475467}.designation-card{border:1px solid #e4e7ec;border-radius:12px;padding:16px;margin-bottom:16px;background:#fff}.card-header{font-size:14px;font-weight:600;color:#175cd3;margin-bottom:16px}.field{margin-bottom:16px}.field label{display:block;margin-bottom:6px;font-weight:600}.field mat-form-field{width:100%}.summary-view{display:flex;justify-content:space-between;align-items:flex-start}.summary-content h4{margin:0;font-size:16px;font-weight:600}.summary-content p{margin-top:8px;color:#667085;white-space:pre-line}.action-buttons{display:flex;gap:4px}.card-footer{display:flex;justify-content:flex-end}:host ::ng-deep .mat-mdc-button:hover,:host ::ng-deep .mat-mdc-outlined-button:hover,:host ::ng-deep .mat-mdc-raised-button:hover,:host ::ng-deep .mat-mdc-unelevated-button:hover{--mat-text-button-state-layer-color: transparent !important;--mat-outlined-button-state-layer-color: transparent !important;--mat-filled-button-state-layer-color: transparent !important;--mat-protected-button-state-layer-color: transparent !important}:host .mat-stroked-button{border:none!important;padding:0 10px;line-height:34px;background-color:transparent}.add-btn{background-color:#efefef!important}.saved-designation-card{padding:16px 0}.designation-actions{display:flex;flex-direction:row;justify-content:end;align-items:center;margin-top:10px}:host .mat-icon{overflow:visible!important}.save-flat-button{background-color:#1b4ca1;color:#fff}.right-container{display:flex;flex-direction:row;justify-content:space-between;gap:16px}.designation-block{padding:16px 0!important}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6.MatLegacyCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i2.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: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "component", type: i7.MatLegacyFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i8.MatLegacyButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i10.MatLegacySelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i11.MatLegacyOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i12.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }] }); }
|
|
630
630
|
}
|
|
631
631
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AddDesignationComponent, decorators: [{
|
|
632
632
|
type: Component,
|
|
633
|
-
args: [{ selector: 'app-add-designation', template: "<div class=\"view-cbp-plan\">\n <div [formGroup]=\"designationForm\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Add New Designation</div>\n\n </div>\n <div class=\"right-container\">\n <button mat-stroked-button class=\"add-btn\" (click)=\"addDesignationBlock()\"\n [disabled]=\"designationArray?.length >= MAX_DESIGNATIONS\">\n\n\n <span style=\"font-size: 32px;\">+</span> Add More\n </button>\n\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <div class=\"popup-header seperator\">\n <div class=\"info-row\">\n <mat-icon class=\"vertical-middle\">info</mat-icon>\n <span>\n Maximum 10 designations can be selected for CBP generation at one time.\n </span>\n </div>\n <div class=\"header-actions\">\n\n <span class=\"counter\">\n {{ designationArray?.length }}/{{ MAX_DESIGNATIONS }}\n </span>\n\n \n\n </div>\n\n </div>\n </div>\n <div class=\"section-container\"> \n <div formArrayName=\"designations\">\n\n <div *ngFor=\"let designationGroup of designationArray.controls; let i=index\" [formGroupName]=\"i\"\n class=\"designation-wrapper\">\n\n <!-- EDIT MODE -->\n <ng-container *ngIf=\"designationGroup.value.isEdit\">\n\n <mat-card class=\"mt-1 designation-block\">\n\n <div class=\"designation-header\">\n <span class=\"designation-title\">\n Designation {{ i + 1 }}\n </span>\n </div>\n\n <!-- Designation Dropdown -->\n <div class=\"mt-2 section\">\n\n <div class=\"sub-heading\">\n <p>Designation Name</p>\n </div>\n\n <div class=\"section-header mt-4\">\n\n <mat-form-field appearance=\"outline\" class=\"margin-top-s w-full required-select\">\n\n <mat-select placeholder=\"Select designation\" formControlName=\"designation_name\"\n (closed)=\"onDesignationDropdownClosed(i)\" panelClass=\"search-panel\"\n (openedChange)=\"setupScrollListener($event)\">\n\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n\n <div class=\"search-input-wrapper\">\n\n <input type=\"text\" placeholder=\"Search designation\"\n style=\"width:100%\" formControlName=\"searchDesignation\"\n class=\"search-input\" (keydown)=\"$event.stopPropagation()\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation()\"\n autocomplete=\"off\">\n\n <div *ngIf=\"searchDesignationControl?.value\" class=\"clear-icon\"\n (click)=\"clearDesignationSearch(i,$event)\">\n\n <mat-icon>close</mat-icon>\n\n </div>\n\n </div>\n\n </div>\n\n <mat-option *ngFor=\"let designation of getFilteredDesignations(i)\"\n [value]=\"designation?.name\">\n\n {{ designation?.name }}\n\n </mat-option>\n\n <div *ngIf=\"isLoadingMoreDesignations\" class=\"loading-indicator\">\n\n Load More...\n\n </div>\n\n <mat-option\n *ngIf=\"(masterData?.designation)?.length === 0 || noMoreLegacyDesignations\"\n disabled>\n\n Designation Not Found.\n\n </mat-option>\n\n </mat-select>\n\n </mat-form-field>\n\n </div>\n\n </div>\n\n <!-- Instruction -->\n <div class=\"mt-2 section\">\n\n <div class=\"sub-heading\">\n <p>Role & Responsibilities / Additional Details</p>\n </div>\n\n <div class=\"mt-4 additional-details\">\n\n <textarea class=\"custom-textarea\" formControlName=\"instruction\" rows=\"5\"\n placeholder=\"Add Instructions\">\n </textarea>\n\n </div>\n\n </div>\n\n <!-- Actions -->\n\n <div class=\"designation-actions\">\n <button mat-stroked-button color=\"warn\" type=\"button\"\n (click)=\"deleteDesignationBlock(i)\">\n\n <mat-icon>delete</mat-icon>\n\n </button>\n\n <button class=\"save-flat-button\" mat-flat-button color=\"primary\" type=\"button\" (click)=\"saveDesignationBlock(i)\">\n\n <mat-icon>check</mat-icon>\n Save\n\n </button>\n\n </div>\n\n </mat-card>\n\n </ng-container>\n\n <!-- VIEW MODE -->\n <ng-container *ngIf=\"!designationGroup.value.isEdit\">\n\n <mat-card class=\"saved-designation-card\">\n\n <div class=\"saved-content\">\n\n <div class=\"saved-content-desc\">\n\n <div class=\"saved-designation-name\" style=\"font-size: 16px ;font-weight: 600;\">\n {{ designationGroup.get('designation_name')?.value }} \n </div>\n\n <div class=\"saved-instruction\">\n {{ designationGroup.get('instruction')?.value }}\n </div>\n\n </div>\n\n <div class=\"saved-actions\">\n\n <button class=\"add-btn\" mat-stroked-button type=\"button\" (click)=\"editDesignationBlock(i)\">\n\n Edit\n\n </button>\n\n <button mat-stroked-button color=\"warn\" type=\"button\"\n (click)=\"deleteDesignationBlock(i)\">\n\n <mat-icon>delete</mat-icon>\n\n </button>\n\n </div>\n\n </div>\n\n </mat-card>\n\n </ng-container>\n\n </div>\n\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n <input [disabled]=\"!canGenerateCBP\" [ngClass]=\"!canGenerateCBP ? 'btn-disable':'btn-active'\"\n type=\"button\" value=\"Generate CBP\" (click)=\"saveDesignation()\" />\n </div>\n </div>\n </div>\n </div>\n <div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </div>", styles: [".container{margin:10px auto}.sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:150%}:host ::ng-deep mat-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}:host ::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}:host ::ng-deep .mat-select-panel{background-color:#fff!important}:host ::ng-deep .mat-select-panel .mat-option{border-radius:0!important}:host ::ng-deep mat-form-field .mat-form-field-underline{display:none!important}:host ::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}:host ::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}:host ::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.btn-group{display:flex;flex-direction:row;justify-content:space-between}.pl-2{padding-left:5px}.search-filter-section{display:flex;flex-direction:row;justify-content:space-between}.search .rsearch{position:relative}.search .search-icon{position:absolute;top:10px;font-size:20px;left:10px}.search .sinput{border-radius:4px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato}.select-map-route-container{display:flex;flex-direction:row}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.search-container{display:flex;flex-direction:row}.course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.ai-recommened-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #1B4CA1;background:#1b4ca129}.igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:30px}.course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.relevancy,.competencies-matched{color:var(--accessbility-shades-with-opacity-kb-greys-black-60, rgba(0, 0, 0, .6));font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;align-items:center}.percentage{color:#1d8923;font-family:Lato;font-size:14px;font-style:normal;font-weight:800;line-height:normal}.relevancy-container,.competencies-matched-container{display:flex;flex-direction:row;align-items:center}.dash{padding:0 5px}:host ::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.course-list-container{display:flex;flex-wrap:wrap;gap:16px}.course-list-item{flex:0 0 48%;box-sizing:border-box;border:1px solid #ccc;padding:16px;background-color:#fff;border-radius:8px}.checked-course-container{display:flex}.ml-2{margin-left:8px}:host ::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.ai-recommened-pill-text,.igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.ai-loader-icon img,.igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.competency-container{display:flex;justify-content:space-between;flex-direction:row}.outside-layer-total{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #1B4CA1;border-right:2px solid #1B4CA1;background:#edf1f8;margin:0 10px}.outside-layer-functional{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #E24577;border-right:2px solid #E24577;background:#f8d2de;margin:0 10px}.outside-layer-domain{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #7B47A4;border-right:2px solid #7B47A4;background:#dfd3e9;margin:0 10px}.outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #F8B861;border-right:2px solid #F8B861;background:#fde8cc;margin:0 10px}.inside-layer{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.count{color:#1b4ca1;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.suggest-course-control{display:flex;flex-direction:row}.course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.heading{color:#000;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.behavioural-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:32px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:5px 0}.functional-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:32px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:5px 0}.domain-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:32px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:5px 0}.popup-header{display:flex;flex-direction:row;justify-content:space-between}.popup-footer{display:flex;flex-direction:row;justify-content:end}.view-cbp-plan{margin:10px;padding:10px}.view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.section{border-radius:8px;background:#1b4ca114;padding:16px}.popup-header{display:flex;justify-content:space-between;align-items:center;font-weight:700;flex-shrink:0}.seperator{border-bottom:1px solid #ddd;padding:4px}.popup-footer{display:flex;justify-content:flex-end;gap:16px;padding:16px 0;border-top:1px solid #ddd;background-color:#fff;flex-shrink:0;position:sticky;bottom:0}.section-container{overflow-y:auto;flex:1 1 auto}.competency-list{display:flex;flex-direction:row;gap:6px}.competency-text{color:#000;font-family:Lato;font-size:10px;font-style:normal;font-weight:400;line-height:normal;padding:5px}.competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:12px;font-style:normal;font-weight:600;line-height:normal}.cursor-pointer{cursor:pointer}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.close .mat-icon{height:18px!important;width:18px!important}:host ::ng-deep .mat-select-arrow-wrapper{height:6px!important}.file-upload-wrapper{position:relative;margin:16px 0}.file-upload-label{display:inline-flex;align-items:center;padding:10px 16px;background-color:#1b4ca1;color:#fff;font-weight:500;cursor:pointer;transition:background-color .3s;-webkit-user-select:none;user-select:none;border-radius:8px}.file-upload-label:hover{background-color:#1b4ca1}.file-upload-icon{margin-right:8px;font-size:18px}.file-upload-input{display:none}.error{color:red;margin-top:6px;font-size:.875rem}.file-upload-hint{display:block;font-size:1rem;color:#000;font-family:Lato;font-size:14px;margin-top:4px;margin-bottom:8px}:host ::ng-deep .mat-select-panel.search-panel .search-input{flex:1 1 auto;width:100%;padding:8px 10px;border:1px solid rgba(0,0,0,.12);border-radius:4px;font-size:14px;color:#333;outline:none;box-sizing:border-box}:host ::ng-deep .mat-select-panel.search-panel .search-input:focus{border-color:#0074b6;box-shadow:0 0 0 3px #0074b60f}:host ::ng-deep .mat-select-panel.search-panel .clear-button{background:transparent;border:none;cursor:pointer;font-size:16px;color:#666;padding:6px;line-height:1}:host ::ng-deep .mat-select-panel.search-panel .loading-indicator{padding:10px 12px;text-align:center;color:#666;font-size:14px}:host ::ng-deep .mat-select-panel.search-panel .mat-option{padding-top:10px;padding-left:16px}:host ::ng-deep .mat-select-panel.search-panel mat-option[disabled]{padding:8px 16px!important}:host ::ng-deep .mat-select-panel.align-panel{padding:0!important;box-sizing:border-box;margin-left:0!important;min-width:340px!important;max-width:340px!important}:host ::ng-deep .mat-select-panel.align-panel .mat-option{padding-left:16px}:host ::ng-deep .mat-select-panel.search-panel mat-option[disabled] .mat-error,:host ::ng-deep .mat-select-panel.search-panel .mat-error{margin:0!important;padding:0!important;font-size:14px!important;line-height:1.4!important;color:#f44336}:host ::ng-deep .mat-form-field{width:100%}:host ::ng-deep .mat-text-field-wrapper{background:#fff;border-radius:25px!important;height:42px}:host ::ng-deep .mat-notched-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start,:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-width:1px!important;min-width:0!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-flex{border-radius:25px;height:42px;align-items:center;padding:0 16px;background:#fff}:host ::ng-deep .mat-select-panel{border:1px solid rgba(0,0,0,.16);border-radius:8px;box-shadow:0 6px 18px #0000001f}:host ::ng-deep .mat-select-panel.search-panel{max-height:300px!important;overflow-y:auto!important;box-sizing:border-box}::ng-deep .search-panel .sticky-search-container{position:sticky;top:0;z-index:100;background:#fff;padding:8px;border-bottom:1px solid #eee}:host ::ng-deep .search-panel .search-input-wrapper{display:flex;gap:8px;align-items:center}:host ::ng-deep .search-panel .search-input{width:100%;height:32px;padding:6px 10px}:host ::ng-deep .search-panel .mat-option{padding:8px 16px!important}:host ::ng-deep .search-panel .mat-pseudo-checkbox{margin-right:8px}:host ::ng-deep .search-panel .no-data-option{padding:10px 16px;font-size:14px;color:#f44336}::ng-deep .search-panel .no-data-option .mat-pseudo-checkbox{display:none!important}.search-input-wrapper{position:relative;width:100%;display:flex;align-items:center}.search-input{width:100%;padding-right:40px;height:40px;line-height:40px;box-sizing:border-box}.clear-icon{position:absolute;right:10px;cursor:pointer;font-size:20px;color:#666;display:flex;align-items:center;height:100%}.clear-icon:hover{color:#000}:host ::ng-deep .search-panel .mat-option:first-child{margin-top:0}.add-more-btn{border-radius:8px;font-weight:600}.designation-limit-info{display:flex;align-items:center;gap:8px;margin-top:12px;font-size:13px;color:#6b7280}.designation-count{margin-left:auto;font-weight:600}.designation-card{border:1px solid #e5e7eb;border-radius:12px;padding:20px;background:#fff}.designation-title{font-size:16px;font-weight:600;color:#1f4ea3;margin-bottom:20px}.designation-save-section{display:flex;justify-content:flex-end;margin-top:16px}.save-btn{min-width:100px}.info-row{font-size:14px;font-weight:400}.vertical-middle{vertical-align:middle}.saved-content{border:1px solid #ccc;border-radius:8px;display:flex;flex-direction:row;justify-content:space-between;padding:10px;background-color:#fff;width:100%}.saved-content-desc{width:75%;word-break:break-word}.info-row{display:flex;align-items:center;gap:6px;color:#667085;font-size:13px;margin-top:8px}.header-actions{display:flex;align-items:center;gap:12px}.counter{font-size:16px;font-weight:600;color:#475467}.designation-card{border:1px solid #e4e7ec;border-radius:12px;padding:16px;margin-bottom:16px;background:#fff}.card-header{font-size:14px;font-weight:600;color:#175cd3;margin-bottom:16px}.field{margin-bottom:16px}.field label{display:block;margin-bottom:6px;font-weight:600}.field mat-form-field{width:100%}.summary-view{display:flex;justify-content:space-between;align-items:flex-start}.summary-content h4{margin:0;font-size:16px;font-weight:600}.summary-content p{margin-top:8px;color:#667085;white-space:pre-line}.action-buttons{display:flex;gap:4px}.card-footer{display:flex;justify-content:flex-end}:host ::ng-deep .mat-mdc-button:hover,:host ::ng-deep .mat-mdc-outlined-button:hover,:host ::ng-deep .mat-mdc-raised-button:hover,:host ::ng-deep .mat-mdc-unelevated-button:hover{--mat-text-button-state-layer-color: transparent !important;--mat-outlined-button-state-layer-color: transparent !important;--mat-filled-button-state-layer-color: transparent !important;--mat-protected-button-state-layer-color: transparent !important}:host .mat-stroked-button{border:none!important;padding:0 10px;line-height:34px;background-color:transparent}.add-btn{background-color:#efefef!important}.saved-designation-card{padding:16px 0}.designation-actions{display:flex;flex-direction:row;justify-content:end;align-items:center;margin-top:10px}:host .mat-icon{overflow:visible!important}.save-flat-button{background-color:#1b4ca1;color:#fff}.right-container{display:flex;flex-direction:row;justify-content:space-between;gap:16px}.designation-block{padding:16px 0!important}\n"] }]
|
|
633
|
+
args: [{ selector: 'app-add-designation', template: "<div class=\"view-cbp-plan\">\n <div [formGroup]=\"designationForm\">\n <div class=\"popup-container\">\n <div class=\"popup-header\">\n <div>\n <div class=\"heading\">Add New Designation</div>\n\n </div>\n <div class=\"right-container\">\n <button mat-stroked-button class=\"add-btn\" (click)=\"addDesignationBlock()\"\n [disabled]=\"designationArray?.length >= MAX_DESIGNATIONS\">\n\n\n <span style=\"font-size: 32px;\">+</span> Add More\n </button>\n\n <div class=\"cursor-pointer\" (click)=\"closeDialog()\">\n <mat-icon>close</mat-icon>\n </div>\n </div>\n </div>\n <div class=\"popup-header seperator\">\n <div class=\"info-row\">\n <mat-icon class=\"vertical-middle\">info</mat-icon>\n <span>\n Maximum 10 designations can be selected for CBP generation at one time.\n </span>\n </div>\n <div class=\"header-actions\">\n\n <span class=\"counter\">\n {{ designationArray?.length }}/{{ MAX_DESIGNATIONS }}\n </span>\n\n \n\n </div>\n\n </div>\n </div>\n <div class=\"section-container\"> \n <div formArrayName=\"designations\">\n\n <div *ngFor=\"let designationGroup of designationArray.controls; let i=index\" [formGroupName]=\"i\"\n class=\"designation-wrapper\">\n\n <!-- EDIT MODE -->\n <ng-container *ngIf=\"designationGroup.value.isEdit\">\n\n <mat-card class=\"mt-1 designation-block\">\n\n <div class=\"designation-header\">\n <span class=\"designation-title\">\n Designation {{ i + 1 }}\n </span>\n </div>\n\n <!-- Designation Dropdown -->\n <div class=\"mt-2 section\">\n\n <div class=\"sub-heading\">\n <p>Designation Name</p>\n </div>\n\n <div class=\"section-header mt-4\">\n\n <mat-form-field appearance=\"outline\" class=\"margin-top-s w-full required-select\">\n\n <mat-select placeholder=\"Select designation\" formControlName=\"designation_name\"\n (closed)=\"onDesignationDropdownClosed(i)\" panelClass=\"search-panel\"\n (openedChange)=\"setupScrollListener($event)\">\n\n <div class=\"sticky-search-container\" (click)=\"$event.stopPropagation()\">\n\n <div class=\"search-input-wrapper\">\n\n <input type=\"text\" placeholder=\"Search designation\"\n style=\"width:100%\" formControlName=\"searchDesignation\"\n class=\"search-input\" (keydown)=\"$event.stopPropagation()\"\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation()\"\n autocomplete=\"off\">\n\n <div *ngIf=\"searchDesignationControl?.value\" class=\"clear-icon\"\n (click)=\"clearDesignationSearch(i,$event)\">\n\n <mat-icon>close</mat-icon>\n\n </div>\n\n </div>\n\n </div>\n\n <mat-option *ngFor=\"let designation of getFilteredDesignations(i)\"\n [value]=\"designation?.name\">\n\n {{ designation?.name }}\n\n </mat-option>\n\n <div *ngIf=\"isLoadingMoreDesignations\" class=\"loading-indicator\">\n\n Load More...\n\n </div>\n\n <mat-option\n *ngIf=\"(masterData?.designation)?.length === 0 || noMoreLegacyDesignations\"\n disabled>\n\n Designation Not Found.\n\n </mat-option>\n\n </mat-select>\n\n </mat-form-field>\n\n </div>\n\n </div>\n\n <!-- Instruction -->\n <div class=\"mt-2 section\">\n\n <div class=\"sub-heading\">\n <p>Role & Responsibilities / Additional Details</p>\n </div>\n\n <div class=\"mt-4 additional-details\">\n\n <textarea class=\"custom-textarea\" formControlName=\"instruction\" rows=\"5\"\n placeholder=\"Add Instructions\">\n </textarea>\n\n </div>\n\n </div>\n\n <!-- Actions -->\n\n <div class=\"designation-actions\">\n <button mat-stroked-button color=\"warn\" type=\"button\"\n (click)=\"deleteDesignationBlock(i)\">\n\n <mat-icon>delete</mat-icon>\n\n </button>\n\n <button class=\"save-flat-button\" mat-flat-button color=\"primary\" type=\"button\" (click)=\"saveDesignationBlock(i)\">\n\n <mat-icon>check</mat-icon>\n Save\n\n </button>\n\n </div>\n\n </mat-card>\n\n </ng-container>\n\n <!-- VIEW MODE -->\n <ng-container *ngIf=\"!designationGroup.value.isEdit\">\n\n <mat-card class=\"saved-designation-card\">\n\n <div class=\"saved-content\">\n\n <div class=\"saved-content-desc\">\n\n <div class=\"saved-designation-name\" style=\"font-size: 16px ;font-weight: 600;\">\n {{i+1}}. {{ designationGroup.get('designation_name')?.value }} \n </div>\n\n <div class=\"saved-instruction\">\n {{ designationGroup.get('instruction')?.value }}\n </div>\n\n </div>\n\n <div class=\"saved-actions\">\n\n <button class=\"add-btn\" mat-stroked-button type=\"button\" (click)=\"editDesignationBlock(i)\">\n\n Edit\n\n </button>\n\n <button mat-stroked-button color=\"warn\" type=\"button\"\n (click)=\"deleteDesignationBlock(i)\">\n\n <mat-icon>delete</mat-icon>\n\n </button>\n\n </div>\n\n </div>\n\n </mat-card>\n\n </ng-container>\n\n </div>\n\n </div>\n <div class=\"popup-footer\">\n <div>\n <input class=\"btn-active\" type=\"button\" value=\"Cancel\" (click)=\"cancelForm()\" />\n </div>\n <div>\n <input [disabled]=\"!canGenerateCBP\" [ngClass]=\"!canGenerateCBP ? 'btn-disable':'btn-active'\"\n type=\"button\" value=\"Generate CBP\" (click)=\"saveDesignation()\" />\n </div>\n </div>\n </div>\n </div>\n <div class=\"overlay-loader\" *ngIf=\"loading\">\n <mat-spinner diameter=\"50\"></mat-spinner>\n </div>", styles: [".container{margin:10px auto}.sub-heading p{color:#000;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.radio-label{color:#000;font-family:Lato;font-size:16px;font-style:normal;font-weight:400;line-height:normal}.radio-btn-group{display:flex;width:32px;height:32px;padding:2px;gap:10px}.label{color:var(--Body-Text-Body-Color, #212529);font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:150%}:host ::ng-deep mat-form-field{background-color:#fff!important;border-radius:25px!important;padding-left:12px;padding-right:12px;height:42px;width:100%}:host ::ng-deep mat-select{border-radius:25px!important;background-color:#fff!important}:host ::ng-deep .mat-select-panel{background-color:#fff!important}:host ::ng-deep .mat-select-panel .mat-option{border-radius:0!important}:host ::ng-deep mat-form-field .mat-form-field-underline{display:none!important}:host ::ng-deep mat-select .mat-select-placeholder{color:#0006;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}:host ::ng-deep mat-select .mat-select-value-text{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;line-height:normal!important;padding-top:0!important;padding-bottom:0!important}:host ::ng-deep mat-select .mat-select-value{display:flex!important;align-items:center!important;height:100%!important}.additional-details textarea{display:flex;padding:16px 16px 0;flex-direction:column;align-items:flex-start;gap:10px;flex:1 0 0;align-self:stretch;width:100%;color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;resize:none}.section-header{display:flex;flex-direction:row;align-items:center;justify-content:space-between}.btn-disable{border-radius:var(--Radius-Full-Round, 9999999px);opacity:.4;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.btn-group{display:flex;flex-direction:row;justify-content:space-between}.pl-2{padding-left:5px}.search-filter-section{display:flex;flex-direction:row;justify-content:space-between}.search .rsearch{position:relative}.search .search-icon{position:absolute;top:10px;font-size:20px;left:10px}.search .sinput{border-radius:4px;border:1px solid #d5d0d0;padding:15px 36px;font:400 14px Lato}.select-map-route-container{display:flex;flex-direction:row}.selected-mapping-route p{color:#1b4ca1;font-family:Lato;font-size:20px;font-style:normal;font-weight:400;line-height:normal;text-decoration-line:underline;text-decoration-style:solid;-webkit-text-decoration-skip:ink;text-decoration-skip-ink:auto;text-decoration-thickness:auto;text-underline-offset:auto;text-underline-position:from-font}.edit-plan{display:flex;padding:4px;justify-content:center;align-items:center;gap:8px;border-radius:4px;background:#1b4ca129;color:#1b4ca1;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;margin-left:10px}.search-container{display:flex;flex-direction:row}.course-container{display:flex;width:100%;padding:16px;flex-direction:column;align-items:flex-start;gap:24px;grid-row:2/span 1;grid-column:1/span 1;border-radius:12px;border:1px solid var(--borders-black-border-16-black, rgba(0, 0, 0, .16));background:#fff}.course-header{display:flex;flex-direction:row;justify-content:space-between;width:100%}.course-pill{display:flex;height:24px;padding:8px;align-items:center;gap:4px;border-radius:16px;border:1px solid var(--borders-border-fill-focussed-4-light-100, #EF951E);background:#fefaf4}.ai-recommened-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #1B4CA1;background:#1b4ca129}.igot-platform-pill{display:flex;padding:4px 8px;align-items:center;gap:8px;border-radius:var(--Radius-4, 4px);border:1px solid #EF951E;background:#ef951e29}.course-title{color:var(--Primary-KB-Primary-Light, #1B4CA1);font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:30px}.course-desc{color:#0009;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.relevancy,.competencies-matched{color:var(--accessbility-shades-with-opacity-kb-greys-black-60, rgba(0, 0, 0, .6));font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal;align-items:center}.percentage{color:#1d8923;font-family:Lato;font-size:14px;font-style:normal;font-weight:800;line-height:normal}.relevancy-container,.competencies-matched-container{display:flex;flex-direction:row;align-items:center}.dash{padding:0 5px}:host ::ng-deep .mat-radio-checked .mat-radio-inner-circle{background:#1b4ca1!important}.course-list-container{display:flex;flex-wrap:wrap;gap:16px}.course-list-item{flex:0 0 48%;box-sizing:border-box;border:1px solid #ccc;padding:16px;background-color:#fff;border-radius:8px}.checked-course-container{display:flex}.ml-2{margin-left:8px}:host ::ng-deep .mat-checkbox-checked .mat-checkbox-background{background:#1b4ca1!important}.ai-recommened-pill-text,.igot-platform-pill-text{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:700;line-height:normal}.course-pill-text{color:var(--accessbility-shades-without-opacity-kb-greys-black-87, #212121);text-align:center;font-family:Poppins;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.ai-loader-icon img,.igot-platform-icon img{width:15.714px;height:15.714px;flex-shrink:0}.competency-container{display:flex;justify-content:space-between;flex-direction:row}.outside-layer-total{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #1B4CA1;border-right:2px solid #1B4CA1;background:#edf1f8;margin:0 10px}.outside-layer-functional{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #E24577;border-right:2px solid #E24577;background:#f8d2de;margin:0 10px}.outside-layer-domain{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #7B47A4;border-right:2px solid #7B47A4;background:#dfd3e9;margin:0 10px}.outside-layer-behavioral{display:flex;padding:4px 12px;justify-content:center;align-items:center;gap:16px;border-radius:12px;border-left:2px solid #F8B861;border-right:2px solid #F8B861;background:#fde8cc;margin:0 10px}.inside-layer{color:#1b4ca1;font-family:Lato;font-size:12px;font-style:normal;font-weight:400;line-height:normal}.count{color:#1b4ca1;font-family:Montserrat;font-size:16px;font-style:normal;font-weight:600;line-height:normal}.suggest-courses-header{display:flex;flex-direction:row;justify-content:space-between}.suggest-course-control{display:flex;flex-direction:row}.course-card-container{width:172px;border-radius:3.307px;border:.827px solid var(--borders-border-8-black, rgba(0, 0, 0, .08));background-color:#fff}.highlight-ai{font-family:Montserrat;font-size:24px;font-style:normal;font-weight:600;line-height:normal;background:linear-gradient(90deg,#3b27ff,#2de3d6);background-clip:text;-webkit-background-clip:text;color:transparent;-webkit-text-fill-color:transparent;display:inline-block}.ai-loader-icon-medium img{width:40px;height:40px;flex-shrink:0}.heading{color:#000;font-family:Montserrat;font-size:20px;font-style:normal;font-weight:600;line-height:normal;margin:10px 0}.progress-popup{display:flex;flex-direction:column;justify-content:center;align-items:center}.progress-popup .desc{color:#000000de;text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.behavioural-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:32px;border:1px solid #F8B861;background:linear-gradient(0deg,#f8b86152 0% 100%),#fff;margin:5px 0}.functional-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:32px;border:1px solid #E24577;background:linear-gradient(0deg,#e245773d 0% 100%),#fff;margin:5px 0}.domain-pill{display:flex;padding:0 8px;justify-content:center;align-items:center;gap:10px;border-radius:32px;border:1px solid #7B47A4;background:linear-gradient(0deg,#7b47a43d 0% 100%),#fff;margin:5px 0}.popup-header{display:flex;flex-direction:row;justify-content:space-between}.popup-footer{display:flex;flex-direction:row;justify-content:end}.view-cbp-plan{margin:10px;padding:10px}.view-cbp-plan-popup{padding:24px;max-height:70vh;overflow-y:auto}.section{border-radius:8px;background:#1b4ca114;padding:16px}.popup-header{display:flex;justify-content:space-between;align-items:center;font-weight:700;flex-shrink:0}.seperator{border-bottom:1px solid #ddd;padding:4px}.popup-footer{display:flex;justify-content:flex-end;gap:16px;padding:16px 0;border-top:1px solid #ddd;background-color:#fff;flex-shrink:0;position:sticky;bottom:0}.section-container{overflow-y:auto;flex:1 1 auto}.competency-list{display:flex;flex-direction:row;gap:6px}.competency-text{color:#000;font-family:Lato;font-size:10px;font-style:normal;font-weight:400;line-height:normal;padding:5px}.competency-sub-heading{color:#1b4ca1;font-family:Montserrat;font-size:12px;font-style:normal;font-weight:600;line-height:normal}.cursor-pointer{cursor:pointer}.btn-active{border-radius:var(--Radius-Full-Round, 9999999px);opacity:1;background:var(--Primary-KB-Primary-Light, #1B4CA1);color:var(--white-kb-white-100, #FFF);text-align:center;font-family:Lato;font-size:14px;font-style:normal;font-weight:700;line-height:normal;display:flex;height:32px;padding:0 16px;justify-content:center;align-items:center;gap:8px;border:none}.custom-textarea{color:#000;font-family:Lato;font-size:14px;font-style:normal;font-weight:400;line-height:normal}.overlay-loader{position:fixed;top:0;left:0;width:100vw;height:100vh;background:#ffffffbf;z-index:9999;display:flex;justify-content:center;align-items:center}.close .mat-icon{height:18px!important;width:18px!important}:host ::ng-deep .mat-select-arrow-wrapper{height:6px!important}.file-upload-wrapper{position:relative;margin:16px 0}.file-upload-label{display:inline-flex;align-items:center;padding:10px 16px;background-color:#1b4ca1;color:#fff;font-weight:500;cursor:pointer;transition:background-color .3s;-webkit-user-select:none;user-select:none;border-radius:8px}.file-upload-label:hover{background-color:#1b4ca1}.file-upload-icon{margin-right:8px;font-size:18px}.file-upload-input{display:none}.error{color:red;margin-top:6px;font-size:.875rem}.file-upload-hint{display:block;font-size:1rem;color:#000;font-family:Lato;font-size:14px;margin-top:4px;margin-bottom:8px}:host ::ng-deep .mat-select-panel.search-panel .search-input{flex:1 1 auto;width:100%;padding:8px 10px;border:1px solid rgba(0,0,0,.12);border-radius:4px;font-size:14px;color:#333;outline:none;box-sizing:border-box}:host ::ng-deep .mat-select-panel.search-panel .search-input:focus{border-color:#0074b6;box-shadow:0 0 0 3px #0074b60f}:host ::ng-deep .mat-select-panel.search-panel .clear-button{background:transparent;border:none;cursor:pointer;font-size:16px;color:#666;padding:6px;line-height:1}:host ::ng-deep .mat-select-panel.search-panel .loading-indicator{padding:10px 12px;text-align:center;color:#666;font-size:14px}:host ::ng-deep .mat-select-panel.search-panel .mat-option{padding-top:10px;padding-left:16px}:host ::ng-deep .mat-select-panel.search-panel mat-option[disabled]{padding:8px 16px!important}:host ::ng-deep .mat-select-panel.align-panel{padding:0!important;box-sizing:border-box;margin-left:0!important;min-width:340px!important;max-width:340px!important}:host ::ng-deep .mat-select-panel.align-panel .mat-option{padding-left:16px}:host ::ng-deep .mat-select-panel.search-panel mat-option[disabled] .mat-error,:host ::ng-deep .mat-select-panel.search-panel .mat-error{margin:0!important;padding:0!important;font-size:14px!important;line-height:1.4!important;color:#f44336}:host ::ng-deep .mat-form-field{width:100%}:host ::ng-deep .mat-text-field-wrapper{background:#fff;border-radius:25px!important;height:42px}:host ::ng-deep .mat-notched-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{border-radius:25px!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-start,:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline-end{border-width:1px!important;min-width:0!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline.mat-focused .mat-form-field-outline-thick{color:transparent!important}:host ::ng-deep .mat-form-field-appearance-outline .mat-form-field-flex{border-radius:25px;height:42px;align-items:center;padding:0 16px;background:#fff}:host ::ng-deep .mat-select-panel{border:1px solid rgba(0,0,0,.16);border-radius:8px;box-shadow:0 6px 18px #0000001f}:host ::ng-deep .mat-select-panel.search-panel{max-height:300px!important;overflow-y:auto!important;box-sizing:border-box}::ng-deep .search-panel .sticky-search-container{position:sticky;top:0;z-index:100;background:#fff;padding:8px;border-bottom:1px solid #eee}:host ::ng-deep .search-panel .search-input-wrapper{display:flex;gap:8px;align-items:center}:host ::ng-deep .search-panel .search-input{width:100%;height:32px;padding:6px 10px}:host ::ng-deep .search-panel .mat-option{padding:8px 16px!important}:host ::ng-deep .search-panel .mat-pseudo-checkbox{margin-right:8px}:host ::ng-deep .search-panel .no-data-option{padding:10px 16px;font-size:14px;color:#f44336}::ng-deep .search-panel .no-data-option .mat-pseudo-checkbox{display:none!important}.search-input-wrapper{position:relative;width:100%;display:flex;align-items:center}.search-input{width:100%;padding-right:40px;height:40px;line-height:40px;box-sizing:border-box}.clear-icon{position:absolute;right:10px;cursor:pointer;font-size:20px;color:#666;display:flex;align-items:center;height:100%}.clear-icon:hover{color:#000}:host ::ng-deep .search-panel .mat-option:first-child{margin-top:0}.add-more-btn{border-radius:8px;font-weight:600}.designation-limit-info{display:flex;align-items:center;gap:8px;margin-top:12px;font-size:13px;color:#6b7280}.designation-count{margin-left:auto;font-weight:600}.designation-card{border:1px solid #e5e7eb;border-radius:12px;padding:20px;background:#fff}.designation-title{font-size:16px;font-weight:600;color:#1f4ea3;margin-bottom:20px}.designation-save-section{display:flex;justify-content:flex-end;margin-top:16px}.save-btn{min-width:100px}.info-row{font-size:14px;font-weight:400}.vertical-middle{vertical-align:middle}.saved-content{border:1px solid #ccc;border-radius:8px;display:flex;flex-direction:row;justify-content:space-between;padding:10px;background-color:#fff;width:100%}.saved-content-desc{width:75%;word-break:break-word}.info-row{display:flex;align-items:center;gap:6px;color:#667085;font-size:13px;margin-top:8px}.header-actions{display:flex;align-items:center;gap:12px}.counter{font-size:16px;font-weight:600;color:#475467}.designation-card{border:1px solid #e4e7ec;border-radius:12px;padding:16px;margin-bottom:16px;background:#fff}.card-header{font-size:14px;font-weight:600;color:#175cd3;margin-bottom:16px}.field{margin-bottom:16px}.field label{display:block;margin-bottom:6px;font-weight:600}.field mat-form-field{width:100%}.summary-view{display:flex;justify-content:space-between;align-items:flex-start}.summary-content h4{margin:0;font-size:16px;font-weight:600}.summary-content p{margin-top:8px;color:#667085;white-space:pre-line}.action-buttons{display:flex;gap:4px}.card-footer{display:flex;justify-content:flex-end}:host ::ng-deep .mat-mdc-button:hover,:host ::ng-deep .mat-mdc-outlined-button:hover,:host ::ng-deep .mat-mdc-raised-button:hover,:host ::ng-deep .mat-mdc-unelevated-button:hover{--mat-text-button-state-layer-color: transparent !important;--mat-outlined-button-state-layer-color: transparent !important;--mat-filled-button-state-layer-color: transparent !important;--mat-protected-button-state-layer-color: transparent !important}:host .mat-stroked-button{border:none!important;padding:0 10px;line-height:34px;background-color:transparent}.add-btn{background-color:#efefef!important}.saved-designation-card{padding:16px 0}.designation-actions{display:flex;flex-direction:row;justify-content:end;align-items:center;margin-top:10px}:host .mat-icon{overflow:visible!important}.save-flat-button{background-color:#1b4ca1;color:#fff}.right-container{display:flex;flex-direction:row;justify-content:space-between;gap:16px}.designation-block{padding:16px 0!important}\n"] }]
|
|
634
634
|
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
635
635
|
type: Inject,
|
|
636
636
|
args: [MAT_DIALOG_DATA]
|
|
@@ -638,4 +638,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
638
638
|
type: ViewChild,
|
|
639
639
|
args: ['designation', { read: ElementRef }]
|
|
640
640
|
}] } });
|
|
641
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWRlc2lnbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9jYnAtYWkvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1kZXNpZ25hdGlvbi9hZGQtZGVzaWduYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWRlc2lnbmF0aW9uL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBcUMsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBT3BDLE1BQU0sT0FBTyx1QkFBdUI7SUFpQ2xDLFlBQW1CLFNBQWdELEVBQ2pDLElBQVMsRUFDakMsRUFBZSxFQUNmLEtBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLFFBQXFCO1FBTFosY0FBUyxHQUFULFNBQVMsQ0FBdUM7UUFDakMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIs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Ryx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCOzswQkFzQzVCLE1BQU07MkJBQUMsZUFBZTs0SkFuQnVCLGNBQWM7c0JBQTdELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaW5hbGl6ZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYWRkLWRlc2lnbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEFkZERlc2lnbmF0aW9uQ29tcG9uZW50IHtcbiAgZGVzaWduYXRpb25Gb3JtOiBGb3JtR3JvdXA7XG4gIG1heEZpbGVTaXplTUIgPSAyNTtcbiAgYWxsb3dlZFR5cGVzID0gW1xuICAgICdhcHBsaWNhdGlvbi9wZGYnLFxuICAgICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcbiAgICAndGV4dC9wbGFpbidcbiAgXTtcbiAgdXBsb2FkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICB1cGxvYWRlZEZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcbiAgY2JwUGxhbkZpbmFsT2JqOiBhbnlcbiAgbG9hZGluZyA9IGZhbHNlXG4gIEBWaWV3Q2hpbGQoJ2Rlc2lnbmF0aW9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGRlc2lnbmF0aW9uUmVmPzogRWxlbWVudFJlZlxuICBkZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gIGlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgZGVzaWduYXRpb25PZmZzZXQgPSAwXG4gIG9kY3NEZXNpZ25hdGlvbkNvdW50ID0gMFxuICBkZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCA9IDBcbiAgZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gNTBcbiAgZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50ID0gNTBcbiAgbm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gJydcbiAgZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IGZhbHNlXG4gIHNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZVxuICBtYXN0ZXJEYXRhOiBhbnkgPSB7fVxuICBzZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwXG4gIG1hdGNoZWREZXNpZ25hdGlvbklkcyA9IFtdXG4gIHJlYWRvbmx5IE1BWF9ERVNJR05BVElPTlMgPSAxMDtcbiAgbWF4RGVzaWduYXRpb25Db3VudCA9IDEwO1xuICBwcml2YXRlIGRlc2lnbmF0aW9uU2Nyb2xsSGFuZGxlciA9IHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbC5iaW5kKHRoaXMpO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QWRkRGVzaWduYXRpb25Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0Jhcikge1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhID0ge1xuICAgICAgZGVzaWduYXRpb25CYWNrdXA6IFtdLFxuICAgICAgZGVzaWduYXRpb25GaWx0ZXJlZDogW10sIC8vIGZpbHRlcmVkIHNlYXJjaCByZXN1bHRzXG4gICAgfTtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc29sZS5sb2coJ3RoaXMubWF0Y2hlZF9yb2xlX21hcHBpbmdzJywgdGhpcy5kYXRhPy5tYXRjaGVkX3JvbGVfbWFwcGluZ3MpXG4gICAgdGhpcy5tYXRjaGVkRGVzaWduYXRpb25JZHMgPSB0aGlzLmRhdGE/Lm1hdGNoZWRfcm9sZV9tYXBwaW5ncz8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/Lmlnb3RfZGVzaWduYXRpb25faWQpIHx8IFtdXG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuXG4gICAgLy8gY29uc3Qgc2VhcmNoQ29udHJvbCA9IHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKTtcblxuICAgIC8vIGlmIChzZWFyY2hDb250cm9sKSB7XG4gICAgLy8gICBzZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgIC8vICAgICAucGlwZShcbiAgICAvLyAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAvLyAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgLy8gICAgIClcbiAgICAvLyAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgIC8vICAgICAgIGNvbnN0IHR4dCA9IHJlcz8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnO1xuXG4gICAgLy8gICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHQ7XG5cbiAgICAvLyAgICAgICAvLyBSRVNFVCBTRUFSQ0ggUEFHSU5BVElPTlxuICAgIC8vICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MDtcblxuICAgIC8vICAgICAgIGlmICh0eHQ/Lmxlbmd0aCkge1xuXG4gICAgLy8gICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gdHJ1ZTtcblxuICAgIC8vICAgICAgICAgLy8gQVBJIFNFQVJDSCBPTkxZXG4gICAgLy8gICAgICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMCk7XG5cbiAgICAvLyAgICAgICB9IGVsc2Uge1xuXG4gICAgLy8gICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICAvLyAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgLy8gICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgIC8vICAgICAgICAgICAgIDAsXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnRcbiAgICAvLyAgICAgICAgICAgKTtcblxuICAgIC8vICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPVxuICAgIC8vICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgIC8vICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG5cbiAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG5cblxuICAgIGlmIChcbiAgICAgICF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHxcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb25TYWZlKCk7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGdldERlc2lnbmF0aW9uU2FmZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzIHx8IHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IHRydWVcbiAgICB0aGlzLmdldERlc2lnbmF0aW9uKClcbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCkge1xuICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkZXNpZ25hdGlvbnM6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZERlc2lnbmF0aW9uQmxvY2soKTtcbiAgfVxuXG4gIGdldCBkZXNpZ25hdGlvbkFycmF5KCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnZGVzaWduYXRpb25zJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgYWRkRGVzaWduYXRpb25CbG9jaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkFycmF5Lmxlbmd0aCA+PSB0aGlzLm1heERlc2lnbmF0aW9uQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBncm91cCA9IHRoaXMuY3JlYXRlRGVzaWduYXRpb25Gb3JtKCk7XG5cbiAgICBncm91cC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgIH0pO1xuXG4gICAgZ3JvdXAuZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpPy52YWx1ZUNoYW5nZXNcbiAgICAucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgIClcbiAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG5cbiAgICAgIGNvbnN0IHR4dCA9IHZhbHVlPy50cmltKCkgfHwgJyc7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gdHh0O1xuICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwO1xuXG4gICAgICBpZiAodHh0KSB7XG5cbiAgICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih0eHQsIDApO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kZXNpZ25hdGlvbkFycmF5LnB1c2goZ3JvdXApO1xuICB9XG5cbiAgc2F2ZURlc2lnbmF0aW9uQmxvY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcblxuICAgIGdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgIGlmIChncm91cC5pbnZhbGlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZ3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICBpc0VkaXQ6IGZhbHNlXG4gICAgfSk7XG5cbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBlZGl0RGVzaWduYXRpb25CbG9jayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5kZXNpZ25hdGlvbkFycmF5LmF0KGluZGV4KS5nZXQoJ2lzRWRpdCcpPy5zZXRWYWx1ZSh0cnVlKTtcbiAgfVxuXG4gIGRlbGV0ZURlc2lnbmF0aW9uQmxvY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGVzaWduYXRpb25BcnJheS5yZW1vdmVBdChpbmRleCk7XG5cbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hZGREZXNpZ25hdGlvbkJsb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlRGVzaWduYXRpb25Gb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZGVzaWduYXRpb25fbmFtZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgaW5zdHJ1Y3Rpb246IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICB1cGxvYWREb2M6IFtudWxsLCBbXV0sXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogWycnXSxcbiAgICAgIGlzRWRpdDogW3RydWVdXG4gICAgfSk7XG4gIH1cblxuICBvbkZpbGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG5cbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBmaWxlIHNpemVcbiAgICBjb25zdCBtYXhCeXRlcyA9IHRoaXMubWF4RmlsZVNpemVNQiAqIDEwMjQgKiAxMDI0O1xuICAgIGlmIChmaWxlLnNpemUgPiBtYXhCeXRlcykge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBGaWxlIGV4Y2VlZHMgbWF4aW11bSBzaXplIG9mICR7dGhpcy5tYXhGaWxlU2l6ZU1CfU1CYDtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgndXBsb2FkRG9jJyk/LnNldEVycm9ycyh7IG1heFNpemU6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZmlsZSB0eXBlXG4gICAgaWYgKCF0aGlzLmFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XG4gICAgICB0aGlzLnVwbG9hZEVycm9yID0gYEludmFsaWQgZmlsZSB0eXBlLiBBbGxvd2VkOiBQREYsIFdvcmQsIEV4Y2VsLCBUWFRgO1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCd1cGxvYWREb2MnKT8uc2V0RXJyb3JzKHsgZmlsZVR5cGU6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51cGxvYWRlZEZpbGUgPSBmaWxlO1xuICAgIHRoaXMudXBsb2FkRXJyb3IgPSBudWxsO1xuICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLnBhdGNoVmFsdWUoeyB1cGxvYWREb2M6IGZpbGUgfSk7XG4gICAgdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCd1cGxvYWREb2MnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgY2FuY2VsRm9ybSgpIHtcbiAgICAgdGhpcy5yZXNldFBvcHVwKCk7XG4gIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICAvLyBzYXZlRGVzaWduYXRpb24oKSB7XG4gIC8vICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAvLyAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gIC8vICAgZm9ybURhdGEuYXBwZW5kKCdkZXNpZ25hdGlvbk5hbWUnLCB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uTmFtZScpPy52YWx1ZSk7XG4gIC8vICAgZm9ybURhdGEuYXBwZW5kKCdyb2xlRGV0YWlscycsIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgncm9sZURldGFpbHMnKT8udmFsdWUpO1xuICAvLyAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZSkge1xuICAvLyAgICAgZm9ybURhdGEuYXBwZW5kKCd1cGxvYWREb2MnLCB0aGlzLnVwbG9hZGVkRmlsZSk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMuY2JwUGxhbkZpbmFsT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENCUFBsYW5Mb2NhbFN0b3JhZ2UoKVxuICAvLyAgIGNvbnNvbGUubG9nKCd0aGlzLmRlc2lnbmF0aW9uRm9ybScsIHRoaXMuZGVzaWduYXRpb25Gb3JtKVxuICAvLyAgIGxldCByZXE6IGFueSA9IHtcbiAgLy8gICAgIFwic3RhdGVfY2VudGVyX2lkXCI6IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcixcbiAgLy8gICAgIFwic3RhdGVfY2VudGVyX25hbWVcIjogdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5vcmdOYW1lLFxuICAvLyAgICAgLy8gXCJkZXBhcnRtZW50X2lkXCI6IFwiXCIsXG4gIC8vICAgICBcImRlc2lnbmF0aW9uX25hbWVcIjogdGhpcy5kZXNpZ25hdGlvbkZvcm0udmFsdWUuZGVzaWduYXRpb25fbmFtZSxcbiAgLy8gICAgIFwiaW5zdHJ1Y3Rpb25cIjogdGhpcy5kZXNpZ25hdGlvbkZvcm0udmFsdWUuaW5zdHJ1Y3Rpb24sXG4gIC8vICAgfVxuICAvLyAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlID09PSAnc3RhdGUnICYmIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lKSB7XG4gIC8vICAgICByZXFbJ2RlcGFydG1lbnRfaWQnXSA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudHNcbiAgLy8gICAgIHJlcVsnZGVwYXJ0bWVudF9uYW1lJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZVxuICAvLyAgIH1cbiAgLy8gICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5JyAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZSkge1xuICAvLyAgICAgcmVxWydkZXBhcnRtZW50X2lkJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzXG4gIC8vICAgICByZXFbJ2RlcGFydG1lbnRfbmFtZSddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWVcbiAgLy8gICB9XG5cbiAgLy8gICBjb25zb2xlLmxvZygncmVxJywgcmVxKVxuICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5hZGREZXNpZ25hdGlvbihyZXEpLnN1YnNjcmliZSh7XG4gIC8vICAgICBuZXh0OiAoX3JlcykgPT4ge1xuICAvLyAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAvLyAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0Rlc2lnbmF0aW9uIEFkZGVkIFN1Y2Nlc3NmdWxseScsICdYJywge1xuICAvLyAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAvLyAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gIC8vICAgICAgIH0pO1xuICAvLyAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAvLyAgICAgfSxcbiAgLy8gICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgLy8gICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgLy8gICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdGYWlsZWQgdG8gYWRkIGRlc2lnbmF0aW9uLiBQbGVhc2UgdHJ5IGFnYWluLicsICdYJywge1xuICAvLyAgICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAvLyAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAvLyAgICAgICB9KTtcbiAgLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRkaW5nIGRlc2lnbmF0aW9uOicsIGVycm9yKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9KVxuICAvLyB9XG5cblxuXG5zYXZlRGVzaWduYXRpb24oKTogdm9pZCB7XG5cbiAgaWYgKCF0aGlzLmNhbkdlbmVyYXRlQ0JQKSB7XG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgJ1BsZWFzZSBzYXZlIGFsbCBkZXNpZ25hdGlvbiBzZWN0aW9ucyBiZWZvcmUgZ2VuZXJhdGluZyBDQlAuJyxcbiAgICAgICdYJyxcbiAgICAgIHsgZHVyYXRpb246IDMwMDAgfVxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZGVzaWduYXRpb25Sb3dzID0gdGhpcy5kZXNpZ25hdGlvbkFycmF5LmNvbnRyb2xzXG4gICAgLm1hcChjb250cm9sID0+ICh7XG4gICAgICBkZXNpZ25hdGlvbl9uYW1lOiBjb250cm9sLmdldCgnZGVzaWduYXRpb25fbmFtZScpPy52YWx1ZSxcbiAgICAgIGluc3RydWN0aW9uOiBjb250cm9sLmdldCgnaW5zdHJ1Y3Rpb24nKT8udmFsdWVcbiAgICB9KSlcbiAgICAuZmlsdGVyKHJvdyA9PiByb3cuZGVzaWduYXRpb25fbmFtZSk7XG5cbiAgaWYgKCFkZXNpZ25hdGlvblJvd3MubGVuZ3RoKSB7XG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGRlc2lnbmF0aW9uLicsXG4gICAgICAnWCcsXG4gICAgICB7IGR1cmF0aW9uOiAzMDAwIH1cbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgY29uc3QgYmFzZU9iajogYW55ID0ge1xuICAgIHN0YXRlX2NlbnRlcl9pZDpcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcixcblxuICAgIHN0YXRlX2NlbnRlcl9uYW1lOlxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5vcmdOYW1lXG4gIH07XG5cbiAgaWYgKFxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdzdGF0ZScgJiZcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZVxuICApIHtcbiAgICBiYXNlT2JqLmRlcGFydG1lbnRfaWQgPVxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcblxuICAgIGJhc2VPYmouZGVwYXJ0bWVudF9uYW1lID1cbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lO1xuICB9XG5cbiAgaWYgKFxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdtaW5pc3RyeScgJiZcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZVxuICApIHtcbiAgICBiYXNlT2JqLmRlcGFydG1lbnRfaWQgPVxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcblxuICAgIGJhc2VPYmouZGVwYXJ0bWVudF9uYW1lID1cbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lO1xuICB9XG5cbiAgY29uc3QgYXBpQ2FsbHMgPSBkZXNpZ25hdGlvblJvd3MubWFwKHJvdyA9PiB7XG5cbiAgICBjb25zdCByZXEgPSB7XG4gICAgICAuLi5iYXNlT2JqLFxuICAgICAgZGVzaWduYXRpb25fbmFtZTogcm93LmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICBpbnN0cnVjdGlvbjogcm93Lmluc3RydWN0aW9uXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnNoYXJlZFNlcnZpY2UuYWRkRGVzaWduYXRpb24ocmVxKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG5cbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIGFkZCBkZXNpZ25hdGlvbjogJHtyb3cuZGVzaWduYXRpb25fbmFtZX1gLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgICAgICBkZXNpZ25hdGlvbjogcm93LmRlc2lnbmF0aW9uX25hbWVcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIGZvcmtKb2luKGFwaUNhbGxzKS5zdWJzY3JpYmUoe1xuICAgIG5leHQ6IChyZXN1bHRzOiBhbnlbXSkgPT4ge1xuXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIocmVzID0+IHJlcz8uZXJyb3IpO1xuXG4gICAgICBpZiAoZmFpbGVkLmxlbmd0aCkge1xuXG4gICAgICAgIGNvbnN0IGZhaWxlZE5hbWVzID0gZmFpbGVkXG4gICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW0uZGVzaWduYXRpb24pXG4gICAgICAgICAgLmpvaW4oJywgJyk7XG5cbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgIGBGYWlsZWQgdG8gYWRkIGRlc2lnbmF0aW9uczogJHtmYWlsZWROYW1lc31gLFxuICAgICAgICAgICdYJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgJ0FsbCBkZXNpZ25hdGlvbnMgYWRkZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgICAgJ1gnLFxuICAgICAgICB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJyk7XG4gICAgfSxcblxuICAgIGVycm9yOiAoKSA9PiB7XG5cbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXG4gICAgICAgICdTb21ldGhpbmcgd2VudCB3cm9uZy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLFxuICAgICAgICAnWCcsXG4gICAgICAgIHtcbiAgICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMucmVzZXRQb3B1cCgpO1xuICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgZ2V0RGVzaWduYXRpb24oc2VhcmNoVGV4dD86IHN0cmluZywgb2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG5cbiAgICAvLyBjbGVhciBhbnkgcHJldmlvdXMgZGVidWcgaG9va3NcbiAgICBpZiAoIXNlYXJjaFRleHQgfHwgc2VhcmNoVGV4dD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBub29wXG4gICAgfVxuXG4gICAgY29uc3QgcmVxT2Zmc2V0ID0gKHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInKSA/IG9mZnNldCA6IHRoaXMuZGVzaWduYXRpb25PZmZzZXRcbiAgICBsZXQgcmVxTGltaXQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgIGNvbnN0IHBhZ2VJbmRleCA9IHJlcUxpbWl0ID4gMCA/IE1hdGguZmxvb3IocmVxT2Zmc2V0IC8gcmVxTGltaXQpIDogMFxuICAgIC8vIGlmIHdlJ3JlIHJlcXVlc3RpbmcgZnJvbSBmaXJzdCBwYWdlLCBjbGVhciB0aGUgbm8tbW9yZS1kYXRhIGd1YXJkXG4gICAgaWYgKHBhZ2VJbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgICAgcmVxTGltaXQgPSA1MFxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgZmlsdGVyQ3JpdGVyaWFNYXA6IHtcbiAgICAgICAgc3RhdHVzOiAnQWN0aXZlJ1xuICAgICAgfSxcbiAgICAgIHJlcXVlc3RlZEZpZWxkczogW10sXG4gICAgICBwYWdlTnVtYmVyOiBwYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogcmVxTGltaXQsXG4gICAgfVxuICAgIGlmIChzZWFyY2hUZXh0Py5sZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RCb2R5WydzZWFyY2hTdHJpbmcnXSA9IHNlYXJjaFRleHRcbiAgICAgIC8vIHdoZW4gc2VhcmNoaW5nLCBzdGFydCBmcm9tIGZpcnN0IHBhZ2VcbiAgICAgIHJlcXVlc3RCb2R5LnBhZ2VOdW1iZXIgPSAwXG4gICAgICAvLyBhbGxvdyBsYXJnZXIgcGFnZSBmb3Igc2VhcmNoIGlmIG5lZWRlZFxuICAgICAgcmVxdWVzdEJvZHkucGFnZVNpemUgPSBwYWdlSW5kZXggPT09IDAgPyA1MCA6IHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAvLyByZXNldCBndWFyZCB3aGVuIHBlcmZvcm1pbmcgYSBmcmVzaCBzZWFyY2hcbiAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBpbmRpY2F0ZSBsb2FkaW5nIHN0YXRlIHNvIHNjcm9sbCBoYW5kbGVycyBkb24ndCB0cmlnZ2VyIHBhcmFsbGVsIGNhbGxzXG4gICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZVxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlYXJjaFB1YmxpY0Rlc2lnbmF0aW9uKHJlcXVlc3RCb2R5KS5waXBlKGZpbmFsaXplKCgpID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgPSBmYWxzZVxuICAgIH0pKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuXG5cbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhJywgW10pO1xuXG4gICAgICAgICAgaWYgKGNvbnRlbnQ/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoZWRJZHMgPSBuZXcgU2V0KHRoaXMubWF0Y2hlZERlc2lnbmF0aW9uSWRzKTtcblxuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbnRlbnRcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gIW1hdGNoZWRJZHMuaGFzKGl0ZW0/LmlkKSlcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0/LmlkLFxuICAgICAgICAgICAgICBuYW1lOiBpdGVtPy5kZXNpZ25hdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgc3RhdHVzOiBpdGVtPy5zdGF0dXMgfHwgJ0FjdGl2ZScsXG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBjb25zdCB0b3RhbCA9IF8uZ2V0KFxuICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgJ3Jlc3VsdC5yZXN1bHQudG90YWxjb3VudCcsXG4gICAgICAgICAgICBfLmdldChcbiAgICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgICAncmVzdWx0LnJlc3VsdC5kYXRhLnRvdGFsQ291bnQnLFxuICAgICAgICAgICAgICBfLmdldChyZXMsICdyZXN1bHQucmVzdWx0LnRvdGFsQ291bnQnLCAwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ID0gdG90YWw7XG5cbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgLy8gU0VBUkNIIE1PREVcbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAgICAgICBpZiAoc2VhcmNoVGV4dD8ubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkZpbHRlcmVkID0gbWFwcGVkO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZC5zbGljZShcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnRcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAvLyBOT1JNQUwgTU9ERVxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgICAgICAgIGlmICghdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IHJlcU9mZnNldCA9PT0gMCkge1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBtYXBwZWQ7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBjb25zdCBjb21iaW5lZCA9XG4gICAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pLmNvbmNhdChtYXBwZWQpO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBfLnVuaXFCeShcbiAgICAgICAgICAgICAgY29tYmluZWQsXG4gICAgICAgICAgICAgIChpdDogYW55KSA9PiAoaXQ/Lm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIHNlbGVjdGVkIHZhbHVlIHByZXNlcnZlXG4gICAgICAgICAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID1cbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpO1xuXG4gICAgICAgICAgaWYgKGRlc2lnbmF0aW9uQ29udHJvbCkge1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID1cbiAgICAgICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnZhbHVlIHx8IFtdO1xuXG4gICAgICAgICAgICBjb25zdCB2YWxpZFZhbHVlcyA9IGN1cnJlbnRWYWx1ZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAuc29tZShcbiAgICAgICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWUgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHZhbGlkVmFsdWVzLmxlbmd0aCAhPT0gY3VycmVudFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKHZhbGlkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBubyBtb3JlIGRhdGFcbiAgICAgICAgICBpZiAoIW1hcHBlZCB8fCBtYXBwZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCAmJlxuICAgICAgICAgICAgKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSkubGVuZ3RoID49XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAvLyBTdG9wIGZ1cnRoZXIgYXV0b21hdGljIGNhbGxzIG9uIHJlcGVhdGVkIGVycm9ycyB0byBhdm9pZCB0aWdodCBsb29wc1xuICAgICAgICAgIC8vIGxvYWRpbmcgZmxhZyBjbGVhcmVkIGluIGZpbmFsaXplKClcbiAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWVcbiAgICAgICAgICAvLyB0aGlzLm1hdFNuYWNrQmFyLm9wZW4oJ1VuYWJsZSB0byBmZXRjaCBkZXNpZ25hdGlvbiBkZXRhaWxzLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cbiAgLy8gRklYIDI6IEFsc28gaW5qZWN0IHNlbGVjdGVkIGl0ZW1zIGludG8gZGVzaWduYXRpb25CYWNrdXBcbiAgY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCkge1xuXG4gICAgY29uc3Qgc2VsZWN0ZWREZXNpZ25hdGlvbnM6IHN0cmluZ1tdID1cbiAgICAgIHRoaXMuZGVzaWduYXRpb25BcnJheS5jb250cm9sc1xuICAgICAgICAubWFwKGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWUpXG4gICAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSk7XG5cbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgc2VsZWN0ZWQgZW50cmllc1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZERlc2lnbmF0aW9ucy5tYXAoKG5hbWU6IHN0cmluZykgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICBzdGF0dXM6ICdBY3RpdmUnXG4gICAgfSkpO1xuXG4gICAgLy8gUmVtb3ZlIHNlbGVjdGVkIGl0ZW1zIGZyb20gY3VycmVudCBsaXN0c1xuICAgIGNvbnN0IHJlbWFpbmluZ1Zpc2libGUgPSAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uIHx8IFtdKS5maWx0ZXIoXG4gICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAhc2VsZWN0ZWREZXNpZ25hdGlvbnMuc29tZShcbiAgICAgICAgICBzZWxlY3RlZCA9PiBzZWxlY3RlZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtPy5uYW1lPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgcmVtYWluaW5nQmFja3VwID0gKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkuZmlsdGVyKFxuICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgIXNlbGVjdGVkRGVzaWduYXRpb25zLnNvbWUoXG4gICAgICAgICAgc2VsZWN0ZWQgPT4gc2VsZWN0ZWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbT8ubmFtZT8udG9Mb3dlckNhc2UoKVxuICAgICAgICApXG4gICAgKTtcblxuICAgIC8vIFB1dCBzZWxlY3RlZCBpdGVtcyBvbiB0b3BcbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSBfLnVuaXFCeShcbiAgICAgIFsuLi5zZWxlY3RlZEl0ZW1zLCAuLi5yZW1haW5pbmdWaXNpYmxlXSxcbiAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwID0gXy51bmlxQnkoXG4gICAgICBbLi4uc2VsZWN0ZWRJdGVtcywgLi4ucmVtYWluaW5nQmFja3VwXSxcbiAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG4gIG9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuYXQoaW5kZXgpO1xuXG4gIGNvbnN0IGN1cnJlbnREZXNpZ25hdGlvbiA9XG4gICAgZ3JvdXAuZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnZhbHVlO1xuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgZ3JvdXAuZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpPy5zZXRWYWx1ZShcbiAgICAgICcnLFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgaWYgKGN1cnJlbnREZXNpZ25hdGlvbikge1xuICAgICAgZ3JvdXAuZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJylcbiAgICAgICAgPy5zZXRWYWx1ZShjdXJyZW50RGVzaWduYXRpb24sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgfSwgMTAwKTtcbiAgfVxuXG4gIC8vIGRlc2lnbmF0aW9uU2VhcmNoKGV2dDogYW55KSB7XG4gIC8vICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2dD8udGFyZ2V0Py52YWx1ZVxuICAvLyAgIGNvbnN0IHR4dCA9IChzZWFyY2hUZXh0IHx8ICcnKS50b1N0cmluZygpLnRyaW0oKVxuICAvLyAgIGlmICh0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHJldHVyblxuXG4gIC8vICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHRcbiAgLy8gICBpZiAodHh0Py5sZW5ndGgpIHtcbiAgLy8gICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSB0cnVlXG4gIC8vICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlXG4gIC8vICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMClcbiAgLy8gICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGF0YSAmJiB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSB7XG4gIC8vICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKDAsIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50KVxuICAvLyAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gIC8vICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gIC8vICAgfVxuICAvLyB9XG4gIHNldHVwU2Nyb2xsTGlzdGVuZXIob3BlbmVkOiBib29sZWFuKTogdm9pZCB7XG5cbiAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCkgcmV0dXJuO1xuICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IHRydWU7XG4gICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgLy8g4pyFIE9ubHkgcmVzZXQgcGFnaW5hdGlvbiBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0XG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih1bmRlZmluZWQsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDinIUgUmVzdG9yZSBmcm9tIGJhY2t1cCB3aXRob3V0IHJlc2V0dGluZyBvZmZzZXRcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9IHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgICAgMCwgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgICk7XG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgIH1cblxuICAgIC8vIGZvY3VzIHNlYXJjaCBpbnB1dFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICBjb25zdCBzZWFyY2hJbnB1dCA9XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWFyY2gtaW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgICBpZiAoc2VhcmNoSW5wdXQpIHtcbiAgICAgICAgc2VhcmNoSW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgIH0sIDIwMCk7XG5cbiAgICAvLyBhdHRhY2ggc2Nyb2xsXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5tYXQtc2VsZWN0LXBhbmVsLnNlYXJjaC1wYW5lbCdcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICBpZiAoIXBhbmVsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcGFuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgJ3Njcm9sbCcsXG4gIHRoaXMuZGVzaWduYXRpb25TY3JvbGxIYW5kbGVyXG4pO1xuXG5wYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAnc2Nyb2xsJyxcbiAgdGhpcy5kZXNpZ25hdGlvblNjcm9sbEhhbmRsZXIsXG4gIHsgcGFzc2l2ZTogdHJ1ZSB9XG4pO1xuXG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIG9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50Py50YXJnZXQ7XG5cbiAgICBjb25zdCByZWFjaGVkQm90dG9tID1cbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQgPj1cbiAgICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gNTtcblxuICAgIGlmICghcmVhY2hlZEJvdHRvbSB8fCB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gU0VBUkNIIE1PREVcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgaWYgKHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUpIHtcblxuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcblxuICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCArPSA1MDtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZC5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50XG4gICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuXG4gICAgICB9LCAzMDApO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE5PUk1BTCBNT0RFXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgLy8gbG9jYWwgcGFnaW5hdGlvblxuICAgIGlmIChcbiAgICAgIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCA+XG4gICAgICB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uPy5sZW5ndGhcbiAgICApIHtcblxuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgKz1cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuXG4gICAgICB9LCAzMDApO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc2VydmVyIHBhZ2luYXRpb25cbiAgICBjb25zdCBsb2FkZWRMZWdhY3kgPVxuICAgICAgKHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLmxlbmd0aDtcblxuICAgIGlmIChcbiAgICAgICF0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyAmJlxuICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCAmJlxuICAgICAgbG9hZGVkTGVnYWN5IDwgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudFxuICAgICkge1xuXG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlO1xuXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0ID1cbiAgICAgICAgKHRoaXMuZGVzaWduYXRpb25PZmZzZXQgfHwgMCkgK1xuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgKz1cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb24odW5kZWZpbmVkLCB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0KTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2VhcmNoRGVzaWduYXRpb25Db250cm9sKCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgY2xlYXJEZXNpZ25hdGlvblNlYXJjaChpbmRleDpudW1iZXIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgY29uc3QgY29udHJvbCA9IHRoaXMuZGVzaWduYXRpb25BcnJheVxuICAgIC5hdChpbmRleClcbiAgICAuZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpO1xuXG4gIGNvbnRyb2w/LnNldFZhbHVlKCcnKTtcblxuICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5zbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgICk7XG5cbiAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgfVxuXG4gIGdldCBjYW5HZW5lcmF0ZUNCUCgpOiBib29sZWFuIHtcblxuICAgIGlmICh0aGlzLmRlc2lnbmF0aW9uQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVzaWduYXRpb25BcnJheS5jb250cm9scy5ldmVyeShcbiAgICAgIGNvbnRyb2wgPT5cbiAgICAgICAgIWNvbnRyb2wuZ2V0KCdpc0VkaXQnKT8udmFsdWUgJiZcbiAgICAgICAgY29udHJvbC52YWxpZFxuICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZERlc2lnbmF0aW9ucyhjdXJyZW50SW5kZXg6IG51bWJlcik6IGFueVtdIHtcblxuICAgIC8vIEdldCBhbGwgc2VsZWN0ZWQgZGVzaWduYXRpb25zIGV4Y2VwdCBjdXJyZW50IHJvd1xuICAgIGNvbnN0IHNlbGVjdGVkRGVzaWduYXRpb25zID0gdGhpcy5kZXNpZ25hdGlvbkFycmF5LmNvbnRyb2xzXG4gICAgICAubWFwKChjb250cm9sLCBpbmRleCkgPT5cbiAgICAgICAgaW5kZXggIT09IGN1cnJlbnRJbmRleFxuICAgICAgICAgID8gY29udHJvbC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWVcbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSk7XG5cbiAgICByZXR1cm4gKHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24gfHwgW10pLmZpbHRlcihcbiAgICAgIChkZXNpZ25hdGlvbjogYW55KSA9PiB7XG5cbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID1cbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuYXQoY3VycmVudEluZGV4KVxuICAgICAgICAgICAgLmdldCgnZGVzaWduYXRpb25fbmFtZScpPy52YWx1ZTtcblxuICAgICAgICAvLyBLZWVwIGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWUgdmlzaWJsZVxuICAgICAgICBpZiAoZGVzaWduYXRpb24ubmFtZSA9PT0gY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gIXNlbGVjdGVkRGVzaWduYXRpb25zLmluY2x1ZGVzKGRlc2lnbmF0aW9uLm5hbWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UG9wdXAoKTogdm9pZCB7XG5cbiAgdGhpcy5kZXNpZ25hdGlvbkZvcm0ucmVzZXQoKTtcblxuICB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuY2xlYXIoKTtcblxuICB0aGlzLmRlc2lnbmF0aW9uQXJyYXkucHVzaChcbiAgICB0aGlzLmNyZWF0ZURlc2lnbmF0aW9uRm9ybSgpXG4gICk7XG5cbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID0gW107XG4gIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCA9IFtdO1xuICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZCA9IFtdO1xuXG4gIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gJyc7XG4gIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50ID0gNTA7XG4gIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gNTA7XG5cbiAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gIHRoaXMudXBsb2FkZWRGaWxlID0gbnVsbDtcbiAgdGhpcy51cGxvYWRFcnJvciA9IG51bGw7XG5cbiAgICB0aGlzLm1hc3RlckRhdGEgPSB7XG4gICAgZGVzaWduYXRpb246IFtdLFxuICAgIGRlc2lnbmF0aW9uQmFja3VwOiBbXSxcbiAgICBkZXNpZ25hdGlvbkZpbHRlcmVkOiBbXVxuICB9O1xuICB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuY2xlYXIoKTtcblxuICB0aGlzLmFkZERlc2lnbmF0aW9uQmxvY2soKTtcbiAgdGhpcy5nZXREZXNpZ25hdGlvblNhZmUoKTtcblxufVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwidmlldy1jYnAtcGxhblwiPlxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJkZXNpZ25hdGlvbkZvcm1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+QWRkIE5ldyBEZXNpZ25hdGlvbjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiAoY2xpY2spPVwiYWRkRGVzaWduYXRpb25CbG9jaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkZXNpZ25hdGlvbkFycmF5Py5sZW5ndGggPj0gTUFYX0RFU0lHTkFUSU9OU1wiPlxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAzMnB4O1wiPis8L3NwYW4+IEFkZCBNb3JlXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlciBzZXBlcmF0b3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidmVydGljYWwtbWlkZGxlXCI+aW5mbzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSAxMCBkZXNpZ25hdGlvbnMgY2FuIGJlIHNlbGVjdGVkIGZvciBDQlAgZ2VuZXJhdGlvbiBhdCBvbmUgdGltZS5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYWN0aW9uc1wiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY291bnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb25BcnJheT8ubGVuZ3RoIH19L3t7IE1BWF9ERVNJR05BVElPTlMgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jb250YWluZXJcIj4gXG4gICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJkZXNpZ25hdGlvbnNcIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRlc2lnbmF0aW9uR3JvdXAgb2YgZGVzaWduYXRpb25BcnJheS5jb250cm9sczsgbGV0IGk9aW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZXNpZ25hdGlvbi13cmFwcGVyXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBFRElUIE1PREUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXNpZ25hdGlvbkdyb3VwLnZhbHVlLmlzRWRpdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJtdC0xIGRlc2lnbmF0aW9uLWJsb2NrXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduYXRpb24taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGVzaWduYXRpb24tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2lnbmF0aW9uIHt7IGkgKyAxIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGVzaWduYXRpb24gRHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RGVzaWduYXRpb24gTmFtZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyIG10LTRcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJtYXJnaW4tdG9wLXMgdy1mdWxsIHJlcXVpcmVkLXNlbGVjdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZGVzaWduYXRpb25cIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNpZ25hdGlvbl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlZCk9XCJvbkRlc2lnbmF0aW9uRHJvcGRvd25DbG9zZWQoaSlcIiBwYW5lbENsYXNzPVwic2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW5lZENoYW5nZSk9XCJzZXR1cFNjcm9sbExpc3RlbmVyKCRldmVudClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXNlYXJjaC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtd3JhcHBlclwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZGVzaWduYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCVcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hEZXNpZ25hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaERlc2lnbmF0aW9uQ29udHJvbD8udmFsdWVcIiBjbGFzcz1cImNsZWFyLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEZXNpZ25hdGlvblNlYXJjaChpLCRldmVudClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkZXNpZ25hdGlvbiBvZiBnZXRGaWx0ZXJlZERlc2lnbmF0aW9ucyhpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGVzaWduYXRpb24/Lm5hbWVcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb24/Lm5hbWUgfX1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnNcIiBjbGFzcz1cImxvYWRpbmctaW5kaWNhdG9yXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvYWQgTW9yZS4uLlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbik/Lmxlbmd0aCA9PT0gMCB8fCBub01vcmVMZWdhY3lEZXNpZ25hdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2lnbmF0aW9uIE5vdCBGb3VuZC5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW5zdHJ1Y3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+Um9sZSAmIFJlc3BvbnNpYmlsaXRpZXMgLyBBZGRpdGlvbmFsIERldGFpbHM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IGFkZGl0aW9uYWwtZGV0YWlsc1wiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJjdXN0b20tdGV4dGFyZWFcIiBmb3JtQ29udHJvbE5hbWU9XCJpbnN0cnVjdGlvblwiIHJvd3M9XCI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFkZCBJbnN0cnVjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGlvbnMgLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduYXRpb24tYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cIndhcm5cIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVEZXNpZ25hdGlvbkJsb2NrKGkpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gIGNsYXNzPVwic2F2ZS1mbGF0LWJ1dHRvblwiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNhdmVEZXNpZ25hdGlvbkJsb2NrKGkpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jaGVjazwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2FyZD5cblxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIFZJRVcgTU9ERSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkZXNpZ25hdGlvbkdyb3VwLnZhbHVlLmlzRWRpdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJzYXZlZC1kZXNpZ25hdGlvbi1jYXJkXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlZC1jb250ZW50LWRlc2NcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhdmVkLWRlc2lnbmF0aW9uLW5hbWVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweCA7Zm9udC13ZWlnaHQ6IDYwMDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRlc2lnbmF0aW9uR3JvdXAuZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnZhbHVlIH19IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlZC1pbnN0cnVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRlc2lnbmF0aW9uR3JvdXAuZ2V0KCdpbnN0cnVjdGlvbicpPy52YWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhdmVkLWFjdGlvbnNcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiBtYXQtc3Ryb2tlZC1idXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJlZGl0RGVzaWduYXRpb25CbG9jayhpKVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFZGl0XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cIndhcm5cIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRGVzaWduYXRpb25CbG9jayhpKVwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmRlbGV0ZTwvbWF0LWljb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWNhcmQ+XG5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9wdXAtZm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYnRuLWFjdGl2ZVwiIHR5cGU9XCJidXR0b25cIiB2YWx1ZT1cIkNhbmNlbFwiIChjbGljayk9XCJjYW5jZWxGb3JtKClcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBbZGlzYWJsZWRdPVwiIWNhbkdlbmVyYXRlQ0JQXCIgW25nQ2xhc3NdPVwiIWNhbkdlbmVyYXRlQ0JQID8gJ2J0bi1kaXNhYmxlJzonYnRuLWFjdGl2ZSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiR2VuZXJhdGUgQ0JQXCIgKGNsaWNrKT1cInNhdmVEZXNpZ25hdGlvbigpXCIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS1sb2FkZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cbiAgICAgICAgPG1hdC1zcGlubmVyIGRpYW1ldGVyPVwiNTBcIj48L21hdC1zcGlubmVyPlxuICAgIDwvZGl2PiJdfQ==
|
|
641
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWRlc2lnbmF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnJhcnkvc3VuYmlyZC1jYi9jYnAtYWkvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1kZXNpZ25hdGlvbi9hZGQtZGVzaWduYXRpb24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NicC1haS9zcmMvbGliL2NvbXBvbmVudHMvYWRkLWRlc2lnbmF0aW9uL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBQ3pFLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BHLE9BQU8sRUFBcUMsVUFBVSxFQUFlLE1BQU0sZ0JBQWdCLENBQUM7QUFFNUYsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsUUFBUSxFQUFhLE1BQU0sZ0JBQWdCLENBQUM7QUFDckcsT0FBTyxLQUFLLENBQUMsTUFBTSxXQUFXLENBQUE7QUFDOUIsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBT3BDLE1BQU0sT0FBTyx1QkFBdUI7SUFpQ2xDLFlBQW1CLFNBQWdELEVBQ2pDLElBQVMsRUFDakMsRUFBZSxFQUNmLEtBQXdCLEVBQ3hCLGFBQTRCLEVBQzVCLFFBQXFCO1FBTFosY0FBUyxHQUFULFNBQVMsQ0FBdUM7UUFDakMsU0FBSSxHQUFKLElBQUksQ0FBSztRQUNqQyxPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsVUFBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIs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Ryx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0UscUJBQXFCOzswQkFzQzVCLE1BQU07MkJBQUMsZUFBZTs0SkFuQnVCLGNBQWM7c0JBQTdELFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSwgTWF0RGlhbG9nUmVmIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEluamVjdCwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaW5hbGl6ZSwgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gtZXMnXG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9tb2R1bGVzL3NoYXJlZC9zZXJ2aWNlcy9zaGFyZWQuc2VydmljZSc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtYWRkLWRlc2lnbmF0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FkZC1kZXNpZ25hdGlvbi5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIEFkZERlc2lnbmF0aW9uQ29tcG9uZW50IHtcbiAgZGVzaWduYXRpb25Gb3JtOiBGb3JtR3JvdXA7XG4gIG1heEZpbGVTaXplTUIgPSAyNTtcbiAgYWxsb3dlZFR5cGVzID0gW1xuICAgICdhcHBsaWNhdGlvbi9wZGYnLFxuICAgICdhcHBsaWNhdGlvbi9tc3dvcmQnLFxuICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsXG4gICAgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0JyxcbiAgICAndGV4dC9wbGFpbidcbiAgXTtcbiAgdXBsb2FkRXJyb3I6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICB1cGxvYWRlZEZpbGU6IEZpbGUgfCBudWxsID0gbnVsbDtcbiAgY2JwUGxhbkZpbmFsT2JqOiBhbnlcbiAgbG9hZGluZyA9IGZhbHNlXG4gIEBWaWV3Q2hpbGQoJ2Rlc2lnbmF0aW9uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGRlc2lnbmF0aW9uUmVmPzogRWxlbWVudFJlZlxuICBkZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gIGlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgZGVzaWduYXRpb25PZmZzZXQgPSAwXG4gIG9kY3NEZXNpZ25hdGlvbkNvdW50ID0gMFxuICBkZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCA9IDBcbiAgZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gNTBcbiAgZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50ID0gNTBcbiAgbm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gJydcbiAgZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IGZhbHNlXG4gIHNjcm9sbExpc3RlbmVyQXR0YWNoZWQgPSBmYWxzZVxuICBtYXN0ZXJEYXRhOiBhbnkgPSB7fVxuICBzZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwXG4gIG1hdGNoZWREZXNpZ25hdGlvbklkcyA9IFtdXG4gIHJlYWRvbmx5IE1BWF9ERVNJR05BVElPTlMgPSAxMDtcbiAgbWF4RGVzaWduYXRpb25Db3VudCA9IDEwO1xuICBwcml2YXRlIGRlc2lnbmF0aW9uU2Nyb2xsSGFuZGxlciA9IHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbC5iaW5kKHRoaXMpO1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8QWRkRGVzaWduYXRpb25Db21wb25lbnQ+LFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogYW55LFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0Jhcikge1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhID0ge1xuICAgICAgZGVzaWduYXRpb25CYWNrdXA6IFtdLFxuICAgICAgZGVzaWduYXRpb25GaWx0ZXJlZDogW10sIC8vIGZpbHRlcmVkIHNlYXJjaCByZXN1bHRzXG4gICAgfTtcblxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc29sZS5sb2coJ3RoaXMubWF0Y2hlZF9yb2xlX21hcHBpbmdzJywgdGhpcy5kYXRhPy5tYXRjaGVkX3JvbGVfbWFwcGluZ3MpXG4gICAgdGhpcy5tYXRjaGVkRGVzaWduYXRpb25JZHMgPSB0aGlzLmRhdGE/Lm1hdGNoZWRfcm9sZV9tYXBwaW5ncz8ubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0/Lmlnb3RfZGVzaWduYXRpb25faWQpIHx8IFtdXG4gICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xuXG4gICAgLy8gY29uc3Qgc2VhcmNoQ29udHJvbCA9IHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKTtcblxuICAgIC8vIGlmIChzZWFyY2hDb250cm9sKSB7XG4gICAgLy8gICBzZWFyY2hDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgIC8vICAgICAucGlwZShcbiAgICAvLyAgICAgICBkZWJvdW5jZVRpbWUoMzAwKSxcbiAgICAvLyAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgLy8gICAgIClcbiAgICAvLyAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgIC8vICAgICAgIGNvbnN0IHR4dCA9IHJlcz8udG9TdHJpbmcoKT8udHJpbSgpID8/ICcnO1xuXG4gICAgLy8gICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHQ7XG5cbiAgICAvLyAgICAgICAvLyBSRVNFVCBTRUFSQ0ggUEFHSU5BVElPTlxuICAgIC8vICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnQgPSA1MDtcblxuICAgIC8vICAgICAgIGlmICh0eHQ/Lmxlbmd0aCkge1xuXG4gICAgLy8gICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gdHJ1ZTtcblxuICAgIC8vICAgICAgICAgLy8gQVBJIFNFQVJDSCBPTkxZXG4gICAgLy8gICAgICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMCk7XG5cbiAgICAvLyAgICAgICB9IGVsc2Uge1xuXG4gICAgLy8gICAgICAgICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgICAvLyAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgLy8gICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgIC8vICAgICAgICAgICAgIDAsXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnRcbiAgICAvLyAgICAgICAgICAgKTtcblxuICAgIC8vICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPVxuICAgIC8vICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgIC8vICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbk9mZnNldCA9IDA7XG5cbiAgICAvLyAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgLy8gICAgICAgfVxuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG5cblxuICAgIGlmIChcbiAgICAgICF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHxcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5sZW5ndGggPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb25TYWZlKCk7XG4gICAgfVxuXG4gIH1cblxuICBwcml2YXRlIGdldERlc2lnbmF0aW9uU2FmZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkluaXRJblByb2dyZXNzIHx8IHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXMuZGVzaWduYXRpb25Jbml0SW5Qcm9ncmVzcyA9IHRydWVcbiAgICB0aGlzLmdldERlc2lnbmF0aW9uKClcbiAgfVxuXG4gIGluaXRpYWxpemVGb3JtKCkge1xuICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgICBkZXNpZ25hdGlvbnM6IHRoaXMuZmIuYXJyYXkoW10pXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZERlc2lnbmF0aW9uQmxvY2soKTtcbiAgfVxuXG4gIGdldCBkZXNpZ25hdGlvbkFycmF5KCk6IEZvcm1BcnJheSB7XG4gICAgcmV0dXJuIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnZGVzaWduYXRpb25zJykgYXMgRm9ybUFycmF5O1xuICB9XG5cbiAgYWRkRGVzaWduYXRpb25CbG9jaygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkFycmF5Lmxlbmd0aCA+PSB0aGlzLm1heERlc2lnbmF0aW9uQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBncm91cCA9IHRoaXMuY3JlYXRlRGVzaWduYXRpb25Gb3JtKCk7XG5cbiAgICBncm91cC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgIH0pO1xuXG4gICAgZ3JvdXAuZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpPy52YWx1ZUNoYW5nZXNcbiAgICAucGlwZShcbiAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKVxuICAgIClcbiAgICAuc3Vic2NyaWJlKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG5cbiAgICAgIGNvbnN0IHR4dCA9IHZhbHVlPy50cmltKCkgfHwgJyc7XG5cbiAgICAgIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gdHh0O1xuICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCA9IDUwO1xuXG4gICAgICBpZiAodHh0KSB7XG5cbiAgICAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih0eHQsIDApO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50XG4gICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5kZXNpZ25hdGlvbkFycmF5LnB1c2goZ3JvdXApO1xuICB9XG5cbiAgc2F2ZURlc2lnbmF0aW9uQmxvY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuXG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cDtcblxuICAgIGdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcblxuICAgIGlmIChncm91cC5pbnZhbGlkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZ3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICBpc0VkaXQ6IGZhbHNlXG4gICAgfSk7XG5cbiAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuICBlZGl0RGVzaWduYXRpb25CbG9jayhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5kZXNpZ25hdGlvbkFycmF5LmF0KGluZGV4KS5nZXQoJ2lzRWRpdCcpPy5zZXRWYWx1ZSh0cnVlKTtcbiAgfVxuXG4gIGRlbGV0ZURlc2lnbmF0aW9uQmxvY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZGVzaWduYXRpb25BcnJheS5yZW1vdmVBdChpbmRleCk7XG5cbiAgICBpZiAodGhpcy5kZXNpZ25hdGlvbkFycmF5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5hZGREZXNpZ25hdGlvbkJsb2NrKCk7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlRGVzaWduYXRpb25Gb3JtKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgZGVzaWduYXRpb25fbmFtZTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxuICAgICAgaW5zdHJ1Y3Rpb246IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXG4gICAgICB1cGxvYWREb2M6IFtudWxsLCBbXV0sXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogWycnXSxcbiAgICAgIGlzRWRpdDogW3RydWVdXG4gICAgfSk7XG4gIH1cblxuICBvbkZpbGVDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGZpbGU6IEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG5cbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBmaWxlIHNpemVcbiAgICBjb25zdCBtYXhCeXRlcyA9IHRoaXMubWF4RmlsZVNpemVNQiAqIDEwMjQgKiAxMDI0O1xuICAgIGlmIChmaWxlLnNpemUgPiBtYXhCeXRlcykge1xuICAgICAgdGhpcy51cGxvYWRFcnJvciA9IGBGaWxlIGV4Y2VlZHMgbWF4aW11bSBzaXplIG9mICR7dGhpcy5tYXhGaWxlU2l6ZU1CfU1CYDtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgndXBsb2FkRG9jJyk/LnNldEVycm9ycyh7IG1heFNpemU6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgZmlsZSB0eXBlXG4gICAgaWYgKCF0aGlzLmFsbG93ZWRUeXBlcy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7XG4gICAgICB0aGlzLnVwbG9hZEVycm9yID0gYEludmFsaWQgZmlsZSB0eXBlLiBBbGxvd2VkOiBQREYsIFdvcmQsIEV4Y2VsLCBUWFRgO1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCd1cGxvYWREb2MnKT8uc2V0RXJyb3JzKHsgZmlsZVR5cGU6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy51cGxvYWRlZEZpbGUgPSBmaWxlO1xuICAgIHRoaXMudXBsb2FkRXJyb3IgPSBudWxsO1xuICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLnBhdGNoVmFsdWUoeyB1cGxvYWREb2M6IGZpbGUgfSk7XG4gICAgdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCd1cGxvYWREb2MnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICB9XG5cbiAgY2FuY2VsRm9ybSgpIHtcbiAgICAgdGhpcy5yZXNldFBvcHVwKCk7XG4gIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XG4gIH1cblxuICAvLyBzYXZlRGVzaWduYXRpb24oKSB7XG4gIC8vICAgdGhpcy5sb2FkaW5nID0gdHJ1ZVxuICAvLyAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gIC8vICAgZm9ybURhdGEuYXBwZW5kKCdkZXNpZ25hdGlvbk5hbWUnLCB0aGlzLmRlc2lnbmF0aW9uRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uTmFtZScpPy52YWx1ZSk7XG4gIC8vICAgZm9ybURhdGEuYXBwZW5kKCdyb2xlRGV0YWlscycsIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgncm9sZURldGFpbHMnKT8udmFsdWUpO1xuICAvLyAgIGlmICh0aGlzLnVwbG9hZGVkRmlsZSkge1xuICAvLyAgICAgZm9ybURhdGEuYXBwZW5kKCd1cGxvYWREb2MnLCB0aGlzLnVwbG9hZGVkRmlsZSk7XG4gIC8vICAgfVxuICAvLyAgIHRoaXMuY2JwUGxhbkZpbmFsT2JqID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmdldENCUFBsYW5Mb2NhbFN0b3JhZ2UoKVxuICAvLyAgIGNvbnNvbGUubG9nKCd0aGlzLmRlc2lnbmF0aW9uRm9ybScsIHRoaXMuZGVzaWduYXRpb25Gb3JtKVxuICAvLyAgIGxldCByZXE6IGFueSA9IHtcbiAgLy8gICAgIFwic3RhdGVfY2VudGVyX2lkXCI6IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcixcbiAgLy8gICAgIFwic3RhdGVfY2VudGVyX25hbWVcIjogdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5vcmdOYW1lLFxuICAvLyAgICAgLy8gXCJkZXBhcnRtZW50X2lkXCI6IFwiXCIsXG4gIC8vICAgICBcImRlc2lnbmF0aW9uX25hbWVcIjogdGhpcy5kZXNpZ25hdGlvbkZvcm0udmFsdWUuZGVzaWduYXRpb25fbmFtZSxcbiAgLy8gICAgIFwiaW5zdHJ1Y3Rpb25cIjogdGhpcy5kZXNpZ25hdGlvbkZvcm0udmFsdWUuaW5zdHJ1Y3Rpb24sXG4gIC8vICAgfVxuICAvLyAgIGlmICh0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqPy5taW5pc3RyeT8uc2JPcmdUeXBlID09PSAnc3RhdGUnICYmIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lKSB7XG4gIC8vICAgICByZXFbJ2RlcGFydG1lbnRfaWQnXSA9IHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudHNcbiAgLy8gICAgIHJlcVsnZGVwYXJ0bWVudF9uYW1lJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZVxuICAvLyAgIH1cbiAgLy8gICBpZiAodGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iaj8ubWluaXN0cnk/LnNiT3JnVHlwZSA9PT0gJ21pbmlzdHJ5JyAmJiB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZSkge1xuICAvLyAgICAgcmVxWydkZXBhcnRtZW50X2lkJ10gPSB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRzXG4gIC8vICAgICByZXFbJ2RlcGFydG1lbnRfbmFtZSddID0gdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50X25hbWVcbiAgLy8gICB9XG5cbiAgLy8gICBjb25zb2xlLmxvZygncmVxJywgcmVxKVxuICAvLyAgIHRoaXMuc2hhcmVkU2VydmljZS5hZGREZXNpZ25hdGlvbihyZXEpLnN1YnNjcmliZSh7XG4gIC8vICAgICBuZXh0OiAoX3JlcykgPT4ge1xuICAvLyAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZVxuICAvLyAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oJ0Rlc2lnbmF0aW9uIEFkZGVkIFN1Y2Nlc3NmdWxseScsICdYJywge1xuICAvLyAgICAgICAgIGR1cmF0aW9uOiAzMDAwLFxuICAvLyAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItc3VjY2VzcyddXG4gIC8vICAgICAgIH0pO1xuICAvLyAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgnc2F2ZWQnKVxuICAvLyAgICAgfSxcbiAgLy8gICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgLy8gICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2VcbiAgLy8gICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKCdGYWlsZWQgdG8gYWRkIGRlc2lnbmF0aW9uLiBQbGVhc2UgdHJ5IGFnYWluLicsICdYJywge1xuICAvLyAgICAgICAgIGR1cmF0aW9uOiA1MDAwLFxuICAvLyAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAvLyAgICAgICB9KTtcbiAgLy8gICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgYWRkaW5nIGRlc2lnbmF0aW9uOicsIGVycm9yKTtcbiAgLy8gICAgIH1cbiAgLy8gICB9KVxuICAvLyB9XG5cblxuXG5zYXZlRGVzaWduYXRpb24oKTogdm9pZCB7XG5cbiAgaWYgKCF0aGlzLmNhbkdlbmVyYXRlQ0JQKSB7XG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgJ1BsZWFzZSBzYXZlIGFsbCBkZXNpZ25hdGlvbiBzZWN0aW9ucyBiZWZvcmUgZ2VuZXJhdGluZyBDQlAuJyxcbiAgICAgICdYJyxcbiAgICAgIHsgZHVyYXRpb246IDMwMDAgfVxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZGVzaWduYXRpb25Sb3dzID0gdGhpcy5kZXNpZ25hdGlvbkFycmF5LmNvbnRyb2xzXG4gICAgLm1hcChjb250cm9sID0+ICh7XG4gICAgICBkZXNpZ25hdGlvbl9uYW1lOiBjb250cm9sLmdldCgnZGVzaWduYXRpb25fbmFtZScpPy52YWx1ZSxcbiAgICAgIGluc3RydWN0aW9uOiBjb250cm9sLmdldCgnaW5zdHJ1Y3Rpb24nKT8udmFsdWVcbiAgICB9KSlcbiAgICAuZmlsdGVyKHJvdyA9PiByb3cuZGVzaWduYXRpb25fbmFtZSk7XG5cbiAgaWYgKCFkZXNpZ25hdGlvblJvd3MubGVuZ3RoKSB7XG4gICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgJ1BsZWFzZSBzZWxlY3QgYXQgbGVhc3Qgb25lIGRlc2lnbmF0aW9uLicsXG4gICAgICAnWCcsXG4gICAgICB7IGR1cmF0aW9uOiAzMDAwIH1cbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMubG9hZGluZyA9IHRydWU7XG5cbiAgY29uc3QgYmFzZU9iajogYW55ID0ge1xuICAgIHN0YXRlX2NlbnRlcl9pZDpcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmoubWluaXN0cnkuaWRlbnRpZmllcixcblxuICAgIHN0YXRlX2NlbnRlcl9uYW1lOlxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5taW5pc3RyeS5vcmdOYW1lXG4gIH07XG5cbiAgaWYgKFxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdzdGF0ZScgJiZcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZVxuICApIHtcbiAgICBiYXNlT2JqLmRlcGFydG1lbnRfaWQgPVxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcblxuICAgIGJhc2VPYmouZGVwYXJ0bWVudF9uYW1lID1cbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lO1xuICB9XG5cbiAgaWYgKFxuICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmo/Lm1pbmlzdHJ5Py5zYk9yZ1R5cGUgPT09ICdtaW5pc3RyeScgJiZcbiAgICB0aGlzLnNoYXJlZFNlcnZpY2UuY2JwUGxhbkZpbmFsT2JqLmRlcGFydG1lbnRfbmFtZVxuICApIHtcbiAgICBiYXNlT2JqLmRlcGFydG1lbnRfaWQgPVxuICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmNicFBsYW5GaW5hbE9iai5kZXBhcnRtZW50cztcblxuICAgIGJhc2VPYmouZGVwYXJ0bWVudF9uYW1lID1cbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5jYnBQbGFuRmluYWxPYmouZGVwYXJ0bWVudF9uYW1lO1xuICB9XG5cbiAgY29uc3QgYXBpQ2FsbHMgPSBkZXNpZ25hdGlvblJvd3MubWFwKHJvdyA9PiB7XG5cbiAgICBjb25zdCByZXEgPSB7XG4gICAgICAuLi5iYXNlT2JqLFxuICAgICAgZGVzaWduYXRpb25fbmFtZTogcm93LmRlc2lnbmF0aW9uX25hbWUsXG4gICAgICBpbnN0cnVjdGlvbjogcm93Lmluc3RydWN0aW9uXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnNoYXJlZFNlcnZpY2UuYWRkRGVzaWduYXRpb24ocmVxKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG5cbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICBgRmFpbGVkIHRvIGFkZCBkZXNpZ25hdGlvbjogJHtyb3cuZGVzaWduYXRpb25fbmFtZX1gLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHtcbiAgICAgICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgICAgICBkZXNpZ25hdGlvbjogcm93LmRlc2lnbmF0aW9uX25hbWVcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIGZvcmtKb2luKGFwaUNhbGxzKS5zdWJzY3JpYmUoe1xuICAgIG5leHQ6IChyZXN1bHRzOiBhbnlbXSkgPT4ge1xuXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIocmVzID0+IHJlcz8uZXJyb3IpO1xuXG4gICAgICBpZiAoZmFpbGVkLmxlbmd0aCkge1xuXG4gICAgICAgIGNvbnN0IGZhaWxlZE5hbWVzID0gZmFpbGVkXG4gICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW0uZGVzaWduYXRpb24pXG4gICAgICAgICAgLmpvaW4oJywgJyk7XG5cbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFxuICAgICAgICAgIGBGYWlsZWQgdG8gYWRkIGRlc2lnbmF0aW9uczogJHtmYWlsZWROYW1lc31gLFxuICAgICAgICAgICdYJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnc25hY2tiYXItZXJyb3InXVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcbiAgICAgICAgJ0FsbCBkZXNpZ25hdGlvbnMgYWRkZWQgc3VjY2Vzc2Z1bGx5JyxcbiAgICAgICAgJ1gnLFxuICAgICAgICB7XG4gICAgICAgICAgZHVyYXRpb246IDMwMDAsXG4gICAgICAgICAgcGFuZWxDbGFzczogWydzbmFja2Jhci1zdWNjZXNzJ11cbiAgICAgICAgfVxuICAgICAgKTtcblxuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoJ3NhdmVkJyk7XG4gICAgfSxcblxuICAgIGVycm9yOiAoKSA9PiB7XG5cbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuXG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXG4gICAgICAgICdTb21ldGhpbmcgd2VudCB3cm9uZy4gUGxlYXNlIHRyeSBhZ2Fpbi4nLFxuICAgICAgICAnWCcsXG4gICAgICAgIHtcbiAgICAgICAgICBkdXJhdGlvbjogNTAwMCxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ3NuYWNrYmFyLWVycm9yJ11cbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xufVxuXG4gIGNsb3NlRGlhbG9nKCkge1xuICAgIHRoaXMucmVzZXRQb3B1cCgpO1xuICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xuICB9XG5cbiAgZ2V0RGVzaWduYXRpb24oc2VhcmNoVGV4dD86IHN0cmluZywgb2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG5cbiAgICAvLyBjbGVhciBhbnkgcHJldmlvdXMgZGVidWcgaG9va3NcbiAgICBpZiAoIXNlYXJjaFRleHQgfHwgc2VhcmNoVGV4dD8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBub29wXG4gICAgfVxuXG4gICAgY29uc3QgcmVxT2Zmc2V0ID0gKHR5cGVvZiBvZmZzZXQgPT09ICdudW1iZXInKSA/IG9mZnNldCA6IHRoaXMuZGVzaWduYXRpb25PZmZzZXRcbiAgICBsZXQgcmVxTGltaXQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgIGNvbnN0IHBhZ2VJbmRleCA9IHJlcUxpbWl0ID4gMCA/IE1hdGguZmxvb3IocmVxT2Zmc2V0IC8gcmVxTGltaXQpIDogMFxuICAgIC8vIGlmIHdlJ3JlIHJlcXVlc3RpbmcgZnJvbSBmaXJzdCBwYWdlLCBjbGVhciB0aGUgbm8tbW9yZS1kYXRhIGd1YXJkXG4gICAgaWYgKHBhZ2VJbmRleCA9PT0gMCkge1xuICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZVxuICAgICAgcmVxTGltaXQgPSA1MFxuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgZmlsdGVyQ3JpdGVyaWFNYXA6IHtcbiAgICAgICAgc3RhdHVzOiAnQWN0aXZlJ1xuICAgICAgfSxcbiAgICAgIHJlcXVlc3RlZEZpZWxkczogW10sXG4gICAgICBwYWdlTnVtYmVyOiBwYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogcmVxTGltaXQsXG4gICAgfVxuICAgIGlmIChzZWFyY2hUZXh0Py5sZW5ndGgpIHtcbiAgICAgIHJlcXVlc3RCb2R5WydzZWFyY2hTdHJpbmcnXSA9IHNlYXJjaFRleHRcbiAgICAgIC8vIHdoZW4gc2VhcmNoaW5nLCBzdGFydCBmcm9tIGZpcnN0IHBhZ2VcbiAgICAgIHJlcXVlc3RCb2R5LnBhZ2VOdW1iZXIgPSAwXG4gICAgICAvLyBhbGxvdyBsYXJnZXIgcGFnZSBmb3Igc2VhcmNoIGlmIG5lZWRlZFxuICAgICAgcmVxdWVzdEJvZHkucGFnZVNpemUgPSBwYWdlSW5kZXggPT09IDAgPyA1MCA6IHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAvLyByZXNldCBndWFyZCB3aGVuIHBlcmZvcm1pbmcgYSBmcmVzaCBzZWFyY2hcbiAgICAgIHRoaXMubm9Nb3JlTGVnYWN5RGVzaWduYXRpb25zID0gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBpbmRpY2F0ZSBsb2FkaW5nIHN0YXRlIHNvIHNjcm9sbCBoYW5kbGVycyBkb24ndCB0cmlnZ2VyIHBhcmFsbGVsIGNhbGxzXG4gICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZVxuXG4gICAgdGhpcy5zaGFyZWRTZXJ2aWNlLnNlYXJjaFB1YmxpY0Rlc2lnbmF0aW9uKHJlcXVlc3RCb2R5KS5waXBlKGZpbmFsaXplKCgpID0+IHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uSW5pdEluUHJvZ3Jlc3MgPSBmYWxzZVxuICAgIH0pKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuXG5cbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gXy5nZXQocmVzLCAncmVzdWx0LnJlc3VsdC5kYXRhJywgW10pO1xuXG4gICAgICAgICAgaWYgKGNvbnRlbnQ/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1hdGNoZWRJZHMgPSBuZXcgU2V0KHRoaXMubWF0Y2hlZERlc2lnbmF0aW9uSWRzKTtcblxuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbnRlbnRcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW06IGFueSkgPT4gIW1hdGNoZWRJZHMuaGFzKGl0ZW0/LmlkKSlcbiAgICAgICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4gKHtcbiAgICAgICAgICAgICAgaWQ6IGl0ZW0/LmlkLFxuICAgICAgICAgICAgICBuYW1lOiBpdGVtPy5kZXNpZ25hdGlvbiB8fCAnJyxcbiAgICAgICAgICAgICAgc3RhdHVzOiBpdGVtPy5zdGF0dXMgfHwgJ0FjdGl2ZScsXG4gICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgICBjb25zdCB0b3RhbCA9IF8uZ2V0KFxuICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgJ3Jlc3VsdC5yZXN1bHQudG90YWxjb3VudCcsXG4gICAgICAgICAgICBfLmdldChcbiAgICAgICAgICAgICAgcmVzLFxuICAgICAgICAgICAgICAncmVzdWx0LnJlc3VsdC5kYXRhLnRvdGFsQ291bnQnLFxuICAgICAgICAgICAgICBfLmdldChyZXMsICdyZXN1bHQucmVzdWx0LnRvdGFsQ291bnQnLCAwKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50ID0gdG90YWw7XG5cbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgLy8gU0VBUkNIIE1PREVcbiAgICAgICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgICAgICAgICBpZiAoc2VhcmNoVGV4dD8ubGVuZ3RoKSB7XG5cbiAgICAgICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkZpbHRlcmVkID0gbWFwcGVkO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPVxuICAgICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZC5zbGljZShcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoRGVzaWduYXRpb25Mb2FkQ291bnRcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAvLyBOT1JNQUwgTU9ERVxuICAgICAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgICAgICAgIGlmICghdGhpcy5tYXN0ZXJEYXRhWydkZXNpZ25hdGlvbkJhY2t1cCddIHx8IHJlcU9mZnNldCA9PT0gMCkge1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBtYXBwZWQ7XG5cbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICBjb25zdCBjb21iaW5lZCA9XG4gICAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gfHwgW10pLmNvbmNhdChtYXBwZWQpO1xuXG4gICAgICAgICAgICB0aGlzLm1hc3RlckRhdGFbJ2Rlc2lnbmF0aW9uQmFja3VwJ10gPSBfLnVuaXFCeShcbiAgICAgICAgICAgICAgY29tYmluZWQsXG4gICAgICAgICAgICAgIChpdDogYW55KSA9PiAoaXQ/Lm5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICAgICh0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLnNsaWNlKFxuICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIHNlbGVjdGVkIHZhbHVlIHByZXNlcnZlXG4gICAgICAgICAgY29uc3QgZGVzaWduYXRpb25Db250cm9sID1cbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25Gb3JtLmdldCgnZGVzaWduYXRpb25fbmFtZScpO1xuXG4gICAgICAgICAgaWYgKGRlc2lnbmF0aW9uQ29udHJvbCkge1xuXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWVzID1cbiAgICAgICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnZhbHVlIHx8IFtdO1xuXG4gICAgICAgICAgICBjb25zdCB2YWxpZFZhbHVlcyA9IGN1cnJlbnRWYWx1ZXMuZmlsdGVyKFxuICAgICAgICAgICAgICAodmFsdWU6IHN0cmluZykgPT5cbiAgICAgICAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXAuc29tZShcbiAgICAgICAgICAgICAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWUgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKHZhbGlkVmFsdWVzLmxlbmd0aCAhPT0gY3VycmVudFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgZGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKHZhbGlkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBubyBtb3JlIGRhdGFcbiAgICAgICAgICBpZiAoIW1hcHBlZCB8fCBtYXBwZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCAmJlxuICAgICAgICAgICAgKHRoaXMubWFzdGVyRGF0YVsnZGVzaWduYXRpb25CYWNrdXAnXSB8fCBbXSkubGVuZ3RoID49XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRTZWFyY2hEZXNpZ25hdGlvbkNvdW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAvLyBTdG9wIGZ1cnRoZXIgYXV0b21hdGljIGNhbGxzIG9uIHJlcGVhdGVkIGVycm9ycyB0byBhdm9pZCB0aWdodCBsb29wc1xuICAgICAgICAgIC8vIGxvYWRpbmcgZmxhZyBjbGVhcmVkIGluIGZpbmFsaXplKClcbiAgICAgICAgICB0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyA9IHRydWVcbiAgICAgICAgICAvLyB0aGlzLm1hdFNuYWNrQmFyLm9wZW4oJ1VuYWJsZSB0byBmZXRjaCBkZXNpZ25hdGlvbiBkZXRhaWxzLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cbiAgLy8gRklYIDI6IEFsc28gaW5qZWN0IHNlbGVjdGVkIGl0ZW1zIGludG8gZGVzaWduYXRpb25CYWNrdXBcbiAgY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCkge1xuXG4gICAgY29uc3Qgc2VsZWN0ZWREZXNpZ25hdGlvbnM6IHN0cmluZ1tdID1cbiAgICAgIHRoaXMuZGVzaWduYXRpb25BcnJheS5jb250cm9sc1xuICAgICAgICAubWFwKGNvbnRyb2wgPT4gY29udHJvbC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWUpXG4gICAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSk7XG5cbiAgICBpZiAoIXRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgc2VsZWN0ZWQgZW50cmllc1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBzZWxlY3RlZERlc2lnbmF0aW9ucy5tYXAoKG5hbWU6IHN0cmluZykgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICBzdGF0dXM6ICdBY3RpdmUnXG4gICAgfSkpO1xuXG4gICAgLy8gUmVtb3ZlIHNlbGVjdGVkIGl0ZW1zIGZyb20gY3VycmVudCBsaXN0c1xuICAgIGNvbnN0IHJlbWFpbmluZ1Zpc2libGUgPSAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uIHx8IFtdKS5maWx0ZXIoXG4gICAgICAoaXRlbTogYW55KSA9PlxuICAgICAgICAhc2VsZWN0ZWREZXNpZ25hdGlvbnMuc29tZShcbiAgICAgICAgICBzZWxlY3RlZCA9PiBzZWxlY3RlZC50b0xvd2VyQ2FzZSgpID09PSBpdGVtPy5uYW1lPy50b0xvd2VyQ2FzZSgpXG4gICAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgcmVtYWluaW5nQmFja3VwID0gKHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCB8fCBbXSkuZmlsdGVyKFxuICAgICAgKGl0ZW06IGFueSkgPT5cbiAgICAgICAgIXNlbGVjdGVkRGVzaWduYXRpb25zLnNvbWUoXG4gICAgICAgICAgc2VsZWN0ZWQgPT4gc2VsZWN0ZWQudG9Mb3dlckNhc2UoKSA9PT0gaXRlbT8ubmFtZT8udG9Mb3dlckNhc2UoKVxuICAgICAgICApXG4gICAgKTtcblxuICAgIC8vIFB1dCBzZWxlY3RlZCBpdGVtcyBvbiB0b3BcbiAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSBfLnVuaXFCeShcbiAgICAgIFsuLi5zZWxlY3RlZEl0ZW1zLCAuLi5yZW1haW5pbmdWaXNpYmxlXSxcbiAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuXG4gICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwID0gXy51bmlxQnkoXG4gICAgICBbLi4uc2VsZWN0ZWRJdGVtcywgLi4ucmVtYWluaW5nQmFja3VwXSxcbiAgICAgIChpdGVtOiBhbnkpID0+IGl0ZW0/Lm5hbWU/LnRvTG93ZXJDYXNlKClcbiAgICApO1xuICB9XG4gIG9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuYXQoaW5kZXgpO1xuXG4gIGNvbnN0IGN1cnJlbnREZXNpZ25hdGlvbiA9XG4gICAgZ3JvdXAuZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJyk/LnZhbHVlO1xuXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgZ3JvdXAuZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpPy5zZXRWYWx1ZShcbiAgICAgICcnLFxuICAgICAgeyBlbWl0RXZlbnQ6IGZhbHNlIH1cbiAgICApO1xuXG4gICAgaWYgKGN1cnJlbnREZXNpZ25hdGlvbikge1xuICAgICAgZ3JvdXAuZ2V0KCdkZXNpZ25hdGlvbl9uYW1lJylcbiAgICAgICAgPy5zZXRWYWx1ZShjdXJyZW50RGVzaWduYXRpb24sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgfSwgMTAwKTtcbiAgfVxuXG4gIC8vIGRlc2lnbmF0aW9uU2VhcmNoKGV2dDogYW55KSB7XG4gIC8vICAgY29uc3Qgc2VhcmNoVGV4dCA9IGV2dD8udGFyZ2V0Py52YWx1ZVxuICAvLyAgIGNvbnN0IHR4dCA9IChzZWFyY2hUZXh0IHx8ICcnKS50b1N0cmluZygpLnRyaW0oKVxuICAvLyAgIGlmICh0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHJldHVyblxuXG4gIC8vICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSB0eHRcbiAgLy8gICBpZiAodHh0Py5sZW5ndGgpIHtcbiAgLy8gICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSB0cnVlXG4gIC8vICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlXG4gIC8vICAgICB0aGlzLmdldERlc2lnbmF0aW9uKHR4dCwgMClcbiAgLy8gICB9IGVsc2UgaWYgKHRoaXMubWFzdGVyRGF0YSAmJiB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwKSB7XG4gIC8vICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb24gPSB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKDAsIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50KVxuICAvLyAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlXG4gIC8vICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gIC8vICAgfVxuICAvLyB9XG4gIHNldHVwU2Nyb2xsTGlzdGVuZXIob3BlbmVkOiBib29sZWFuKTogdm9pZCB7XG5cbiAgICBpZiAoIW9wZW5lZCkge1xuICAgICAgdGhpcy5zY3JvbGxMaXN0ZW5lckF0dGFjaGVkID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCkgcmV0dXJuO1xuICAgIHRoaXMuc2Nyb2xsTGlzdGVuZXJBdHRhY2hlZCA9IHRydWU7XG4gICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gICAgLy8g4pyFIE9ubHkgcmVzZXQgcGFnaW5hdGlvbiBpZiB3ZSBoYXZlIG5vIGRhdGEgeWV0XG4gICAgaWYgKCF0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCkge1xuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcbiAgICAgIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuICAgICAgdGhpcy5nZXREZXNpZ25hdGlvbih1bmRlZmluZWQsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDinIUgUmVzdG9yZSBmcm9tIGJhY2t1cCB3aXRob3V0IHJlc2V0dGluZyBvZmZzZXRcbiAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9IHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cC5zbGljZShcbiAgICAgICAgMCwgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnRcbiAgICAgICk7XG4gICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgIH1cblxuICAgIC8vIGZvY3VzIHNlYXJjaCBpbnB1dFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICBjb25zdCBzZWFyY2hJbnB1dCA9XG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5zZWFyY2gtaW5wdXQnKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xuXG4gICAgICBpZiAoc2VhcmNoSW5wdXQpIHtcbiAgICAgICAgc2VhcmNoSW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cblxuICAgIH0sIDIwMCk7XG5cbiAgICAvLyBhdHRhY2ggc2Nyb2xsXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgJy5tYXQtc2VsZWN0LXBhbmVsLnNlYXJjaC1wYW5lbCdcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuXG4gICAgICBpZiAoIXBhbmVsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcGFuZWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcbiAgJ3Njcm9sbCcsXG4gIHRoaXMuZGVzaWduYXRpb25TY3JvbGxIYW5kbGVyXG4pO1xuXG5wYW5lbC5hZGRFdmVudExpc3RlbmVyKFxuICAnc2Nyb2xsJyxcbiAgdGhpcy5kZXNpZ25hdGlvblNjcm9sbEhhbmRsZXIsXG4gIHsgcGFzc2l2ZTogdHJ1ZSB9XG4pO1xuXG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIG9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xuXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50Py50YXJnZXQ7XG5cbiAgICBjb25zdCByZWFjaGVkQm90dG9tID1cbiAgICAgIGVsZW1lbnQuc2Nyb2xsVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQgPj1cbiAgICAgIGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gNTtcblxuICAgIGlmICghcmVhY2hlZEJvdHRvbSB8fCB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gU0VBUkNIIE1PREVcbiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgaWYgKHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUpIHtcblxuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcblxuICAgICAgdGhpcy5zZWFyY2hEZXNpZ25hdGlvbkxvYWRDb3VudCArPSA1MDtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG5cbiAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAgICAgICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZC5zbGljZShcbiAgICAgICAgICAgIDAsXG4gICAgICAgICAgICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50XG4gICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuXG4gICAgICB9LCAzMDApO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIE5PUk1BTCBNT0RFXG4gICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgLy8gbG9jYWwgcGFnaW5hdGlvblxuICAgIGlmIChcbiAgICAgIHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXA/Lmxlbmd0aCA+XG4gICAgICB0aGlzLm1hc3RlckRhdGE/LmRlc2lnbmF0aW9uPy5sZW5ndGhcbiAgICApIHtcblxuICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgKz1cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXG4gICAgICAgIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbiA9XG4gICAgICAgICAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwLnNsaWNlKFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50XG4gICAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuXG4gICAgICB9LCAzMDApO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gc2VydmVyIHBhZ2luYXRpb25cbiAgICBjb25zdCBsb2FkZWRMZWdhY3kgPVxuICAgICAgKHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb25CYWNrdXAgfHwgW10pLmxlbmd0aDtcblxuICAgIGlmIChcbiAgICAgICF0aGlzLm5vTW9yZUxlZ2FjeURlc2lnbmF0aW9ucyAmJlxuICAgICAgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudCAmJlxuICAgICAgbG9hZGVkTGVnYWN5IDwgdGhpcy5kZWZhdWx0U2VhcmNoRGVzaWduYXRpb25Db3VudFxuICAgICkge1xuXG4gICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlO1xuXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0ID1cbiAgICAgICAgKHRoaXMuZGVzaWduYXRpb25PZmZzZXQgfHwgMCkgK1xuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcblxuICAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgKz1cbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG5cbiAgICAgIHRoaXMuZ2V0RGVzaWduYXRpb24odW5kZWZpbmVkLCB0aGlzLmRlc2lnbmF0aW9uT2Zmc2V0KTtcbiAgICB9XG4gIH1cblxuICBnZXQgc2VhcmNoRGVzaWduYXRpb25Db250cm9sKCk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5kZXNpZ25hdGlvbkZvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgY2xlYXJEZXNpZ25hdGlvblNlYXJjaChpbmRleDpudW1iZXIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgY29uc3QgY29udHJvbCA9IHRoaXMuZGVzaWduYXRpb25BcnJheVxuICAgIC5hdChpbmRleClcbiAgICAuZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpO1xuXG4gIGNvbnRyb2w/LnNldFZhbHVlKCcnKTtcblxuICB0aGlzLmRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2U7XG5cbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID1cbiAgICAodGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uQmFja3VwIHx8IFtdKS5zbGljZShcbiAgICAgIDAsXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudFxuICAgICk7XG5cbiAgdGhpcy5jaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKTtcbiAgfVxuXG4gIGdldCBjYW5HZW5lcmF0ZUNCUCgpOiBib29sZWFuIHtcblxuICAgIGlmICh0aGlzLmRlc2lnbmF0aW9uQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVzaWduYXRpb25BcnJheS5jb250cm9scy5ldmVyeShcbiAgICAgIGNvbnRyb2wgPT5cbiAgICAgICAgIWNvbnRyb2wuZ2V0KCdpc0VkaXQnKT8udmFsdWUgJiZcbiAgICAgICAgY29udHJvbC52YWxpZFxuICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZERlc2lnbmF0aW9ucyhjdXJyZW50SW5kZXg6IG51bWJlcik6IGFueVtdIHtcblxuICAgIC8vIEdldCBhbGwgc2VsZWN0ZWQgZGVzaWduYXRpb25zIGV4Y2VwdCBjdXJyZW50IHJvd1xuICAgIGNvbnN0IHNlbGVjdGVkRGVzaWduYXRpb25zID0gdGhpcy5kZXNpZ25hdGlvbkFycmF5LmNvbnRyb2xzXG4gICAgICAubWFwKChjb250cm9sLCBpbmRleCkgPT5cbiAgICAgICAgaW5kZXggIT09IGN1cnJlbnRJbmRleFxuICAgICAgICAgID8gY29udHJvbC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWVcbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICAgIC5maWx0ZXIodmFsdWUgPT4gISF2YWx1ZSk7XG5cbiAgICByZXR1cm4gKHRoaXMubWFzdGVyRGF0YT8uZGVzaWduYXRpb24gfHwgW10pLmZpbHRlcihcbiAgICAgIChkZXNpZ25hdGlvbjogYW55KSA9PiB7XG5cbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID1cbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuYXQoY3VycmVudEluZGV4KVxuICAgICAgICAgICAgLmdldCgnZGVzaWduYXRpb25fbmFtZScpPy52YWx1ZTtcblxuICAgICAgICAvLyBLZWVwIGN1cnJlbnQgc2VsZWN0ZWQgdmFsdWUgdmlzaWJsZVxuICAgICAgICBpZiAoZGVzaWduYXRpb24ubmFtZSA9PT0gY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gIXNlbGVjdGVkRGVzaWduYXRpb25zLmluY2x1ZGVzKGRlc2lnbmF0aW9uLm5hbWUpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlc2V0UG9wdXAoKTogdm9pZCB7XG5cbiAgdGhpcy5kZXNpZ25hdGlvbkZvcm0ucmVzZXQoKTtcblxuICB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuY2xlYXIoKTtcblxuICB0aGlzLmRlc2lnbmF0aW9uQXJyYXkucHVzaChcbiAgICB0aGlzLmNyZWF0ZURlc2lnbmF0aW9uRm9ybSgpXG4gICk7XG5cbiAgdGhpcy5tYXN0ZXJEYXRhLmRlc2lnbmF0aW9uID0gW107XG4gIHRoaXMubWFzdGVyRGF0YS5kZXNpZ25hdGlvbkJhY2t1cCA9IFtdO1xuICB0aGlzLm1hc3RlckRhdGEuZGVzaWduYXRpb25GaWx0ZXJlZCA9IFtdO1xuXG4gIHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0ID0gJyc7XG4gIHRoaXMuZGVzaWduYXRpb25PZmZzZXQgPSAwO1xuICB0aGlzLnNlYXJjaERlc2lnbmF0aW9uTG9hZENvdW50ID0gNTA7XG4gIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gNTA7XG5cbiAgdGhpcy5ub01vcmVMZWdhY3lEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9IGZhbHNlO1xuXG4gIHRoaXMudXBsb2FkZWRGaWxlID0gbnVsbDtcbiAgdGhpcy51cGxvYWRFcnJvciA9IG51bGw7XG5cbiAgICB0aGlzLm1hc3RlckRhdGEgPSB7XG4gICAgZGVzaWduYXRpb246IFtdLFxuICAgIGRlc2lnbmF0aW9uQmFja3VwOiBbXSxcbiAgICBkZXNpZ25hdGlvbkZpbHRlcmVkOiBbXVxuICB9O1xuICB0aGlzLmRlc2lnbmF0aW9uQXJyYXkuY2xlYXIoKTtcblxuICB0aGlzLmFkZERlc2lnbmF0aW9uQmxvY2soKTtcbiAgdGhpcy5nZXREZXNpZ25hdGlvblNhZmUoKTtcblxufVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwidmlldy1jYnAtcGxhblwiPlxuICAgIDxkaXYgW2Zvcm1Hcm91cF09XCJkZXNpZ25hdGlvbkZvcm1cIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkaW5nXCI+QWRkIE5ldyBEZXNpZ25hdGlvbjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjbGFzcz1cImFkZC1idG5cIiAoY2xpY2spPVwiYWRkRGVzaWduYXRpb25CbG9jaygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkZXNpZ25hdGlvbkFycmF5Py5sZW5ndGggPj0gTUFYX0RFU0lHTkFUSU9OU1wiPlxuXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiZm9udC1zaXplOiAzMnB4O1wiPis8L3NwYW4+IEFkZCBNb3JlXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cImNsb3NlRGlhbG9nKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvcHVwLWhlYWRlciBzZXBlcmF0b3JcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5mby1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidmVydGljYWwtbWlkZGxlXCI+aW5mbzwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgTWF4aW11bSAxMCBkZXNpZ25hdGlvbnMgY2FuIGJlIHNlbGVjdGVkIGZvciBDQlAgZ2VuZXJhdGlvbiBhdCBvbmUgdGltZS5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXItYWN0aW9uc1wiPlxuXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY291bnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb25BcnJheT8ubGVuZ3RoIH19L3t7IE1BWF9ERVNJR05BVElPTlMgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbi1jb250YWluZXJcIj4gXG4gICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJkZXNpZ25hdGlvbnNcIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGRlc2lnbmF0aW9uR3JvdXAgb2YgZGVzaWduYXRpb25BcnJheS5jb250cm9sczsgbGV0IGk9aW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkZXNpZ25hdGlvbi13cmFwcGVyXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBFRElUIE1PREUgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXNpZ25hdGlvbkdyb3VwLnZhbHVlLmlzRWRpdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJtdC0xIGRlc2lnbmF0aW9uLWJsb2NrXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduYXRpb24taGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGVzaWduYXRpb24tdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2lnbmF0aW9uIHt7IGkgKyAxIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRGVzaWduYXRpb24gRHJvcGRvd24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+RGVzaWduYXRpb24gTmFtZTwvcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24taGVhZGVyIG10LTRcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJtYXJnaW4tdG9wLXMgdy1mdWxsIHJlcXVpcmVkLXNlbGVjdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZGVzaWduYXRpb25cIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNpZ25hdGlvbl9uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlZCk9XCJvbkRlc2lnbmF0aW9uRHJvcGRvd25DbG9zZWQoaSlcIiBwYW5lbENsYXNzPVwic2VhcmNoLXBhbmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW5lZENoYW5nZSk9XCJzZXR1cFNjcm9sbExpc3RlbmVyKCRldmVudClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXNlYXJjaC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtaW5wdXQtd3JhcHBlclwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZGVzaWduYXRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOjEwMCVcIiBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hEZXNpZ25hdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0XCIgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNlYXJjaERlc2lnbmF0aW9uQ29udHJvbD8udmFsdWVcIiBjbGFzcz1cImNsZWFyLWljb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEZXNpZ25hdGlvblNlYXJjaChpLCRldmVudClcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBkZXNpZ25hdGlvbiBvZiBnZXRGaWx0ZXJlZERlc2lnbmF0aW9ucyhpKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGVzaWduYXRpb24/Lm5hbWVcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb24/Lm5hbWUgfX1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnNcIiBjbGFzcz1cImxvYWRpbmctaW5kaWNhdG9yXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvYWQgTW9yZS4uLlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihtYXN0ZXJEYXRhPy5kZXNpZ25hdGlvbik/Lmxlbmd0aCA9PT0gMCB8fCBub01vcmVMZWdhY3lEZXNpZ25hdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2lnbmF0aW9uIE5vdCBGb3VuZC5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gSW5zdHJ1Y3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTIgc2VjdGlvblwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWItaGVhZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+Um9sZSAmIFJlc3BvbnNpYmlsaXRpZXMgLyBBZGRpdGlvbmFsIERldGFpbHM8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00IGFkZGl0aW9uYWwtZGV0YWlsc1wiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XCJjdXN0b20tdGV4dGFyZWFcIiBmb3JtQ29udHJvbE5hbWU9XCJpbnN0cnVjdGlvblwiIHJvd3M9XCI1XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkFkZCBJbnN0cnVjdGlvbnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RleHRhcmVhPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEFjdGlvbnMgLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGVzaWduYXRpb24tYWN0aW9uc1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cIndhcm5cIiB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVEZXNpZ25hdGlvbkJsb2NrKGkpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5kZWxldGU8L21hdC1pY29uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gIGNsYXNzPVwic2F2ZS1mbGF0LWJ1dHRvblwiIG1hdC1mbGF0LWJ1dHRvbiBjb2xvcj1cInByaW1hcnlcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInNhdmVEZXNpZ25hdGlvbkJsb2NrKGkpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbj5jaGVjazwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTYXZlXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2FyZD5cblxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIFZJRVcgTU9ERSAtLT5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkZXNpZ25hdGlvbkdyb3VwLnZhbHVlLmlzRWRpdFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJzYXZlZC1kZXNpZ25hdGlvbi1jYXJkXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtY29udGVudFwiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlZC1jb250ZW50LWRlc2NcIj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhdmVkLWRlc2lnbmF0aW9uLW5hbWVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTZweCA7Zm9udC13ZWlnaHQ6IDYwMDtcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpKzF9fS4ge3sgZGVzaWduYXRpb25Hcm91cC5nZXQoJ2Rlc2lnbmF0aW9uX25hbWUnKT8udmFsdWUgfX0gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhdmVkLWluc3RydWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZGVzaWduYXRpb25Hcm91cC5nZXQoJ2luc3RydWN0aW9uJyk/LnZhbHVlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2F2ZWQtYWN0aW9uc1wiPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ0blwiIG1hdC1zdHJva2VkLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImVkaXREZXNpZ25hdGlvbkJsb2NrKGkpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwid2FyblwiIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVEZXNpZ25hdGlvbkJsb2NrKGkpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZGVsZXRlPC9tYXQtaWNvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2FyZD5cblxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3B1cC1mb290ZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJidG4tYWN0aXZlXCIgdHlwZT1cImJ1dHRvblwiIHZhbHVlPVwiQ2FuY2VsXCIgKGNsaWNrKT1cImNhbmNlbEZvcm0oKVwiIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCIhY2FuR2VuZXJhdGVDQlBcIiBbbmdDbGFzc109XCIhY2FuR2VuZXJhdGVDQlAgPyAnYnRuLWRpc2FibGUnOididG4tYWN0aXZlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCIgdmFsdWU9XCJHZW5lcmF0ZSBDQlBcIiAoY2xpY2spPVwic2F2ZURlc2lnbmF0aW9uKClcIiAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LWxvYWRlclwiICpuZ0lmPVwibG9hZGluZ1wiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI1MFwiPjwvbWF0LXNwaW5uZXI+XG4gICAgPC9kaXY+Il19
|