verben-ng-ui 0.9.3 → 0.9.5

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.
@@ -135,10 +135,10 @@ export class DataImportComponent {
135
135
  }
136
136
  }
137
137
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataImportComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
138
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.10", type: DataImportComponent, selector: "lib-data-import", inputs: { previewColumns: { classPropertyName: "previewColumns", publicName: "previewColumns", isSignal: true, isRequired: true, transformFunction: null }, formGroupConfig: { classPropertyName: "formGroupConfig", publicName: "formGroupConfig", isSignal: true, isRequired: false, transformFunction: null }, fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, columnTemplates: { classPropertyName: "columnTemplates", publicName: "columnTemplates", isSignal: true, isRequired: false, transformFunction: null }, previewData: { classPropertyName: "previewData", publicName: "previewData", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { exportTemplateEvent: "exportTemplateEvent", importEvent: "importEvent", importEventData: "importEventData", rowSave: "rowSave" }, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label for=\"fileInput\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label for=\"fileInput\">click to browse</label>\n </p>\n <input\n type=\"file\"\n id=\"fileInput\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"save()\">Import</button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: { first_name: 'verben-ng', last_name: 'verbena' } }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ previewData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ 0 }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"fields()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <lib-data-table\n [data]=\"previewData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n (rowSave)=\"rowSave.emit($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button class=\"btn btn-secondary\" (click)=\"showPreview = false\">\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n", styles: [".drop-area{border:2px dashed #ccc;padding:20px;text-align:center;cursor:pointer}.drop-area.drag-active{background-color:#eee}.export-card{font-size:.75rem;z-index:10}.card-header,.card-footer{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body{display:flex;flex-direction:column;gap:.5rem;padding-top:-8px!important}.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.footer-buttons{display:flex;gap:.5rem;align-items:center;justify-content:space-between}.cancel-button,.export-button{outline:none;border:none;padding:.2rem 1.6rem;font-size:.75rem;font-weight:600;cursor:pointer}.cancel-button{background-color:#404040;color:#fff}.export-button{background-color:#ffe681;color:#404040}.value-range{display:flex;gap:.5rem;align-items:center}.action-buttons{display:flex;align-items:center;gap:2rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i3.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "component", type: i4.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowDelete", "selectionChange"] }, { kind: "directive", type: i5.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }] });
138
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.10", type: DataImportComponent, selector: "lib-data-import", inputs: { previewColumns: { classPropertyName: "previewColumns", publicName: "previewColumns", isSignal: true, isRequired: true, transformFunction: null }, formGroupConfig: { classPropertyName: "formGroupConfig", publicName: "formGroupConfig", isSignal: true, isRequired: false, transformFunction: null }, fields: { classPropertyName: "fields", publicName: "fields", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, columnTemplates: { classPropertyName: "columnTemplates", publicName: "columnTemplates", isSignal: true, isRequired: false, transformFunction: null }, previewData: { classPropertyName: "previewData", publicName: "previewData", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { exportTemplateEvent: "exportTemplateEvent", importEvent: "importEvent", importEventData: "importEventData", rowSave: "rowSave" }, ngImport: i0, template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label for=\"fileInput\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label for=\"fileInput\">click to browse</label>\n </p>\n <input\n type=\"file\"\n id=\"fileInput\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"save()\">Import</button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: { first_name: 'verben-ng', last_name: 'verbena' } }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n dialogueWidth=\"85%\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ previewData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ 0 }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"fields()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <lib-data-table\n [data]=\"previewData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n (rowSave)=\"rowSave.emit($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button\n class=\"btn btn-secondary cancel-button\"\n (click)=\"showPreview = false\"\n >\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n", styles: [".drop-area{border:2px dashed #ccc;padding:20px;text-align:center;cursor:pointer}.drop-area.drag-active{background-color:#eee}.export-card{font-size:.75rem;z-index:10}.card-header,.card-footer{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body{display:flex;flex-direction:column;gap:.5rem;padding-top:-8px!important}.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.footer-buttons{display:flex;gap:.5rem;align-items:center;justify-content:space-between;width:100%}.cancel-button,.export-button{outline:none;border:none;padding:.2rem 1.6rem;font-size:.75rem;font-weight:600;cursor:pointer}.cancel-button{background-color:#404040;color:#fff}.export-button{background-color:#ffe681;color:#404040}.value-range{display:flex;gap:.5rem;align-items:center}.action-buttons{display:flex;align-items:center;gap:2rem}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CardComponent, selector: "verben-card", inputs: ["pd", "mg", "height", "width", "textColor", "bgColor", "border", "borderRadius", "disabled", "aspectRatio"] }, { kind: "component", type: i3.VerbenDialogueComponent, selector: "verben-dialogue", inputs: ["dialogueWidth", "headerTemplate", "bodyTemplate", "footerTemplate", "showCloseIcon", "dismissOutsideClick", "closeOnEscape", "isVisible", "size", "backdropColor", "customClass", "disableFooter", "margin", "padding", "borderRadius", "dialogueBgColor", "width", "closeIconClass", "boxShadow", "enableTransition", "modalData", "mode", "position", "drawerWidth"], outputs: ["openModal", "closeModal"] }, { kind: "component", type: i4.DataTableComponent, selector: "lib-data-table", inputs: ["data", "columns", "dataKey", "formGroupConfig", "groupBy", "styleConfig"], outputs: ["rowEdit", "rowSave", "rowRevert", "rowDelete", "selectionChange"] }, { kind: "directive", type: i5.ColumnDirective, selector: "[libColumn]", inputs: ["libColumn"] }, { kind: "component", type: i6.DropDownComponent, selector: "verben-drop-down", inputs: ["options", "width", "showHorizontalLine", "horizontalLineColor", "optionLabel", "optionSubLabel", "optionValue", "placeholder", "invalidMessage", "errorPosition", "loadMoreCaption", "display", "showClear", "lazyLoad", "selectKey", "styleClass", "group", "multiselect", "filter", "avoidDuplication", "filterBy", "debounceTime", "minChar", "disabled", "required", "load", "asyncLabel", "search"], outputs: ["optionsChange", "onChange", "onClick", "onClear"] }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i8.SvgComponent, selector: "verben-svg", inputs: ["icon", "width", "height", "fill", "stroke", "type", "size"] }] });
139
139
  }
140
140
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: DataImportComponent, decorators: [{
141
141
  type: Component,
142
- args: [{ selector: 'lib-data-import', template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label for=\"fileInput\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label for=\"fileInput\">click to browse</label>\n </p>\n <input\n type=\"file\"\n id=\"fileInput\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"save()\">Import</button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: { first_name: 'verben-ng', last_name: 'verbena' } }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ previewData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ 0 }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"fields()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <lib-data-table\n [data]=\"previewData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n (rowSave)=\"rowSave.emit($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button class=\"btn btn-secondary\" (click)=\"showPreview = false\">\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n", styles: [".drop-area{border:2px dashed #ccc;padding:20px;text-align:center;cursor:pointer}.drop-area.drag-active{background-color:#eee}.export-card{font-size:.75rem;z-index:10}.card-header,.card-footer{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body{display:flex;flex-direction:column;gap:.5rem;padding-top:-8px!important}.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.footer-buttons{display:flex;gap:.5rem;align-items:center;justify-content:space-between}.cancel-button,.export-button{outline:none;border:none;padding:.2rem 1.6rem;font-size:.75rem;font-weight:600;cursor:pointer}.cancel-button{background-color:#404040;color:#fff}.export-button{background-color:#ffe681;color:#404040}.value-range{display:flex;gap:.5rem;align-items:center}.action-buttons{display:flex;align-items:center;gap:2rem}\n"] }]
142
+ args: [{ selector: 'lib-data-import', template: "<verben-card\n width=\"24rem\"\n borderRadius=\"1rem\"\n [border]=\"'1px solid #D4A007'\"\n bgColor=\"#FFFFFF\"\n class=\"export-card\"\n>\n <div card-header class=\"card-header\">\n <h4 class=\"header-title\">Import</h4>\n <button\n class=\"reset-button\"\n [style.color]=\"'#3479E9'\"\n [style.background-color]=\"'transparent'\"\n [style.border]=\"'none'\"\n [style.cursor]=\"'pointer'\"\n [style.font-size]=\"'12px'\"\n (click)=\"reset()\"\n >\n Reset\n </button>\n </div>\n <div card-body class=\"card-body\">\n <div class=\"flex gap-4 justify-between\">\n <button class=\"export-button\" (click)=\"handleTemplateExport()\">\n Download Template\n </button>\n <label for=\"fileInput\" class=\"export-button\">Upload File</label>\n </div>\n <hr class=\"divider\" />\n <section class=\"section\">\n <div\n class=\"drop-area\"\n (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\"\n (drop)=\"onDrop($event)\"\n >\n <p>\n Drag and drop files here or\n <label for=\"fileInput\">click to browse</label>\n </p>\n <input\n type=\"file\"\n id=\"fileInput\"\n (change)=\"onFileSelected($event)\"\n style=\"display: none\"\n accept=\".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel\"\n multiple\n />\n </div>\n <div *ngIf=\"files.length > 0\">\n <h3>Uploaded Files:</h3>\n <ul>\n <li *ngFor=\"let file of files\">{{ file.name }}</li>\n </ul>\n </div>\n </section>\n </div>\n <div card-footer class=\"card-footer\">\n <button class=\"export-button\" (click)=\"save()\">Import</button>\n </div>\n</verben-card>\n\n<!-- Modal Component -->\n<verben-dialogue\n [showCloseIcon]=\"true\"\n [dismissOutsideClick]=\"true\"\n [closeOnEscape]=\"true\"\n [size]=\"'large'\"\n [mode]=\"'dialogue'\"\n [customClass]=\"'my-modal-custom-class'\"\n [disableFooter]=\"false\"\n [modalData]=\"[{ data: { first_name: 'verben-ng', last_name: 'verbena' } }]\"\n [isVisible]=\"showPreview\"\n [headerTemplate]=\"headerTemplate\"\n [bodyTemplate]=\"bodyTemplate\"\n [footerTemplate]=\"footerTemplate\"\n dialogueWidth=\"85%\"\n>\n <a download=\"\"></a>\n</verben-dialogue>\n\n<!-- Define templates -->\n<ng-template #headerTemplate>\n <h2>Upload Preview</h2>\n</ng-template>\n\n<ng-template #bodyTemplate>\n <div class=\"flex gap-4 items-center justify-between my-4\">\n <p class=\"\">Total Items: {{ previewData().length }}</p>\n\n <p class=\"\">Duplicates: {{ duplicateIndexSet.size }}</p>\n\n <p class=\"\">Invalid Items: {{ 0 }}</p>\n\n <verben-drop-down\n [multiselect]=\"true\"\n placeholder=\"Find duplicates by\"\n [options]=\"fields()\"\n [ngModel]=\"uniqueIdentifiers()\"\n (ngModelChange)=\"uniqueIdentifiers.set($event)\"\n ></verben-drop-down>\n </div>\n <lib-data-table\n [data]=\"previewData()\"\n [columns]=\"previewColumnsList()\"\n [formGroupConfig]=\"formGroupConfig()\"\n (rowSave)=\"rowSave.emit($event)\"\n >\n <ng-container libColumn=\"actions\">\n <ng-template\n #cell\n let-value\n let-deleteRow=\"deleteRow\"\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"edit\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n\n <ng-template\n #cellEdit\n let-value\n let-deleteRow\n let-isEditing=\"isEditing\"\n let-toggleRowEdit=\"toggleRowEdit\"\n let-row=\"row\"\n let-rowIndex=\"rowIndex\"\n >\n <div class=\"flex action-buttons\">\n <verben-svg\n (click)=\"toggleRowEdit()\"\n icon=\"tick\"\n [width]=\"15\"\n [height]=\"15\"\n class=\"cursor-pointer\"\n ></verben-svg>\n\n <verben-svg\n icon=\"delete\"\n [width]=\"15\"\n [height]=\"15\"\n (click)=\"deleteRow()\"\n class=\"cursor-pointer\"\n ></verben-svg>\n </div>\n </ng-template>\n </ng-container>\n </lib-data-table>\n</ng-template>\n\n<ng-template #footerTemplate>\n <div class=\"footer-buttons flex gap-4 items-center justify-between my-4\">\n <button\n class=\"btn btn-secondary cancel-button\"\n (click)=\"showPreview = false\"\n >\n Cancel\n </button>\n <button class=\"btn btn-primary export-button\" (click)=\"save()\">\n Complete\n </button>\n </div>\n</ng-template>\n", styles: [".drop-area{border:2px dashed #ccc;padding:20px;text-align:center;cursor:pointer}.drop-area.drag-active{background-color:#eee}.export-card{font-size:.75rem;z-index:10}.card-header,.card-footer{display:flex;justify-content:space-between;align-items:center;background-color:transparent;padding:4px!important}.header-title{font-weight:600;font-size:.8125rem}.card-body{display:flex;flex-direction:column;gap:.5rem;padding-top:-8px!important}.section{display:flex;flex-direction:column;gap:.5rem}.section-header{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:.8125rem}.item{display:flex;justify-content:space-between;align-items:center}.item-label{display:flex;align-items:center;gap:.5rem}.checkbox-label{line-height:1}.item-actions{display:flex;gap:.5rem}.show-more{display:flex;gap:.5em;align-items:center;color:#6b7280;cursor:pointer}.divider{border:none;border-top:1px solid #e8eaf1}.operation-grid{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.add-button{margin-top:.5rem;margin-left:auto;outline:none;border:none;background-color:transparent;color:#3479e9;font-size:.75rem;font-weight:500;cursor:pointer}.footer-buttons{display:flex;gap:.5rem;align-items:center;justify-content:space-between;width:100%}.cancel-button,.export-button{outline:none;border:none;padding:.2rem 1.6rem;font-size:.75rem;font-weight:600;cursor:pointer}.cancel-button{background-color:#404040;color:#fff}.export-button{background-color:#ffe681;color:#404040}.value-range{display:flex;gap:.5rem;align-items:center}.action-buttons{display:flex;align-items:center;gap:2rem}\n"] }]
143
143
  }], ctorParameters: () => [] });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWltcG9ydC9kYXRhLWltcG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtaW1wb3J0L2RhdGEtaW1wb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBRUwsU0FBUyxHQUdWLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFReEIsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixjQUFjLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBeUIsQ0FBQztJQUN6RCxlQUFlLEdBQUcsS0FBSyxFQUlwQixDQUFDO0lBQ0osTUFBTSxHQUFHLEtBQUssQ0FBVyxFQUFFLENBQUMsQ0FBQztJQUM3QixLQUFLLEdBQUcsS0FBSyxDQUFTLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLGVBQWUsR0FBRyxLQUFLLENBQTZCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFPLENBQUM7SUFDcEMsbUJBQW1CLEdBQUcsTUFBTSxFQUFZLENBQUM7SUFDekMsV0FBVyxHQUFHLE1BQU0sRUFBUSxDQUFDO0lBQzdCLGVBQWUsR0FBRyxNQUFNLEVBQU8sQ0FBQztJQUNoQyxPQUFPLEdBQUcsTUFBTSxFQUlaLENBQUM7SUFFTCxrREFBa0Q7SUFDbEQsa0JBQWtCLENBQWdDO0lBQ2xELEtBQUssR0FBRyxJQUFJLFNBQVMsQ0FBWSxFQUFFLENBQUMsQ0FB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QUFJO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQztRQUNsRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQztRQUM1QyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO3dHQTlKVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiwwZ0NDM0JoQyxxaEtBaUxBOzs0RkR0SmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgU2lnbmFsLFxuICBzaWduYWwsXG4gIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbHVtbkRlZmluaXRpb24sXG4gIEZvcm1Hcm91cENvbmZpZyxcbn0gZnJvbSAnLi4vZGF0YS10YWJsZS9kYXRhLXRhYmxlLnR5cGVzJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUFycmF5LFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRhLXRhYmxlL2NvbHVtbi5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGF0YS1pbXBvcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1pbXBvcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGF0YS1pbXBvcnQuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIERhdGFJbXBvcnRDb21wb25lbnQ8VD4ge1xuICBwcmV2aWV3Q29sdW1ucyA9IGlucHV0LnJlcXVpcmVkPENvbHVtbkRlZmluaXRpb248VD5bXT4oKTtcbiAgZm9ybUdyb3VwQ29uZmlnID0gaW5wdXQ8XG4gICAgRm9ybUdyb3VwQ29uZmlnPHtcbiAgICAgIFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w7XG4gICAgfT5cbiAgPigpO1xuICBmaWVsZHMgPSBpbnB1dDxzdHJpbmdbXT4oW10pO1xuICB0aXRsZSA9IGlucHV0PHN0cmluZz4oJ3RpdGxlJyk7XG4gIGNvbHVtblRlbXBsYXRlcyA9IGlucHV0PHJlYWRvbmx5IENvbHVtbkRpcmVjdGl2ZVtdPihbXSk7XG4gIHByZXZpZXdEYXRhID0gaW5wdXQucmVxdWlyZWQ8VFtdPigpO1xuICBleHBvcnRUZW1wbGF0ZUV2ZW50ID0gb3V0cHV0PHN0cmluZ1tdPigpO1xuICBpbXBvcnRFdmVudCA9IG91dHB1dDxGaWxlPigpO1xuICBpbXBvcnRFdmVudERhdGEgPSBvdXRwdXQ8VFtdPigpO1xuICByb3dTYXZlID0gb3V0cHV0PHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGtleTogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGRhdGE6IFBhcnRpYWw8VD47XG4gIH0+KCk7XG5cbiAgLy8gZGF0YTogU2lnbmFsPChUICYgeyBpc0R1cGxpY2F0ZTogYm9vbGVhbiB9KVtdPjtcbiAgcHJldmlld0NvbHVtbnNMaXN0OiBTaWduYWw8Q29sdW1uRGVmaW5pdGlvbjxUPltdPjtcbiAgZm9ybXMgPSBuZXcgRm9ybUFycmF5PEZvcm1Hcm91cD4oW10pO1xuICB1bmlxdWVJZGVudGlmaWVyczogV3JpdGFibGVTaWduYWw8c3RyaW5nW10+ID0gc2lnbmFsKFtdKTtcbiAgLy8gZHVwbGljYXRlRGF0YU1hcDogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgZHVwbGljYXRlSW5kZXhTZXQgPSBuZXcgU2V0PG51bWJlcj4oKTtcblxuICBwcml2YXRlIF9leHQ6ICd4bHN4JyB8ICd4bHMnIHwgJ2NzdicgPSAneGxzeCc7XG5cbiAgZmlsZXM6IEZpbGVbXSA9IFtdO1xuICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gIHNob3dQcmV2aWV3ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMucHJldmlld0RhdGEoKT8uZm9yRWFjaCgoZGF0dW0pID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZGF0dW0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gKGRhdHVtOiBULCBhcnJheTogVFtdKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkZW50aWZpZXJzID0gdGhpcy51bmlxdWVJZGVudGlmaWVycygpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgYXJyYXkuZmlsdGVyKFxuICAgICAgICAgICAgKGRhdCkgPT5cbiAgICAgICAgICAgICAgaWRlbnRpZmllcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICBpZGVudGlmaWVycy5ldmVyeShcbiAgICAgICAgICAgICAgICAoaWRlbnRpZmllcikgPT5cbiAgICAgICAgICAgICAgICAgIGRhdHVtW2lkZW50aWZpZXIgYXMga2V5b2YgVF0gJiZcbiAgICAgICAgICAgICAgICAgIGRhdHVtW2lkZW50aWZpZXIgYXMga2V5b2YgVF0gPT09IGRhdFtpZGVudGlmaWVyIGFzIGtleW9mIFRdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApLmxlbmd0aCA+IDFcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucHJldmlld0RhdGEoKT8uZm9yRWFjaCgoZCwgaSwgYXJyKSA9PiB7XG4gICAgICAgIGlmIChpc0R1cGxpY2F0ZShkLCBhcnIpKSB7XG4gICAgICAgICAgdGhpcy5kdXBsaWNhdGVJbmRleFNldC5hZGQoaSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gdGhpcy5pbXBvcnRUYWJsZUNvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgLy8gICByZXR1cm4gdGhpcy5wcmV2aWV3Q29sdW1ucygpLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgLy8gICAgIGNvbnN0IG1hdGNoaW5nVGVtcGxhdGUgPSB0aGlzLmNvbHVtblRlbXBsYXRlcygpLmZpbmQoXG4gICAgLy8gICAgICAgKHQpID0+IHQuY29sdW1uSWQgPT09IGNvbHVtbi5pZFxuICAgIC8vICAgICApO1xuICAgIC8vICAgICBjb25zb2xlLmxvZyhtYXRjaGluZ1RlbXBsYXRlKTtcbiAgICAvLyAgICAgaWYgKG1hdGNoaW5nVGVtcGxhdGUpIHtcbiAgICAvLyAgICAgICByZXR1cm4ge1xuICAgIC8vICAgICAgICAgLi4uY29sdW1uLFxuICAgIC8vICAgICAgICAgY2VsbFRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmNlbGxUZW1wbGF0ZSxcbiAgICAvLyAgICAgICAgIGNlbGxFZGl0VGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuY2VsbEVkaXRUZW1wbGF0ZSxcbiAgICAvLyAgICAgICAgIGhlYWRlclRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmhlYWRlclRlbXBsYXRlLFxuICAgIC8vICAgICAgICAgZm9vdGVyVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuZm9vdGVyVGVtcGxhdGUsXG4gICAgLy8gICAgICAgfTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICByZXR1cm4gY29sdW1uO1xuICAgIC8vICAgfSk7XG4gICAgLy8gfSk7XG5cbiAgICB0aGlzLnByZXZpZXdDb2x1bW5zTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZpZXdDb2x1bW5zKClcbiAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuYWNjZXNzb3JLZXkgfHwgY29sLmZvcm1Db250cm9sTmFtZSlcbiAgICAgICAgLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdUZW1wbGF0ZSA9IHRoaXMuY29sdW1uVGVtcGxhdGVzKCkuZmluZChcbiAgICAgICAgICAgICh0KSA9PiB0LmNvbHVtbklkID09PSBjb2x1bW4uaWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKG1hdGNoaW5nVGVtcGxhdGUpO1xuICAgICAgICAgIGlmIChtYXRjaGluZ1RlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5jZWxsVGVtcGxhdGUsXG4gICAgICAgICAgICAgIGNlbGxFZGl0VGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuY2VsbEVkaXRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuaGVhZGVyVGVtcGxhdGUsXG4gICAgICAgICAgICAgIGZvb3RlclRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmZvb3RlclRlbXBsYXRlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSlcbiAgICAgICAgLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdhY3Rpb25zJyxcbiAgICAgICAgICAgIGhlYWRlcjogJ0FjdGlvbnMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgIH0pO1xuICB9XG5cbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICB9XG5cbiAgb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maWxlcyA9IEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyIS5maWxlcyk7XG4gICAgdGhpcy5pbXBvcnRFdmVudC5lbWl0KHRoaXMuZmlsZXNbMF0pO1xuICAgIHRoaXMuc2hvd1ByZXZpZXcgPSB0cnVlO1xuICB9XG5cbiAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsZXMgPSBBcnJheS5mcm9tKGV2ZW50LnRhcmdldC5maWxlcyk7XG4gICAgdGhpcy5pbXBvcnRFdmVudC5lbWl0KHRoaXMuZmlsZXNbMF0pO1xuICAgIHRoaXMuc2hvd1ByZXZpZXcgPSB0cnVlO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5maWxlcyA9IFtdO1xuICB9XG5cbiAgc2F2ZSgpIHtcbiAgICBjb25zb2xlLmxvZygnUFJFVkRBVEEnLCB0aGlzLnByZXZpZXdEYXRhKCkpO1xuICAgIHRoaXMuc2hvd1ByZXZpZXcgPSBmYWxzZTtcbiAgICB0aGlzLmltcG9ydEV2ZW50RGF0YS5lbWl0KHRoaXMucHJldmlld0RhdGEoKSB8fCBbXSk7XG4gIH1cblxuICBnZXRDb250cm9sTmFtZXMoKSB7XG4gICAgY29uc3QgY29udHJvbHMgPSB0aGlzLmZvcm1Hcm91cENvbmZpZygpPy5jb250cm9scztcbiAgICBpZiAoY29udHJvbHMpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjb250cm9scyk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGhhbmRsZVRlbXBsYXRlRXhwb3J0KCkge1xuICAgIGNvbnN0IGZnID0gdGhpcy5mb3JtR3JvdXBDb25maWcoKT8uY29udHJvbHM7XG4gICAgaWYgKGZnKSB7XG4gICAgICB0aGlzLmV4cG9ydFRlbXBsYXRlRXZlbnQuZW1pdChPYmplY3Qua2V5cyhmZykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cG9ydFRlbXBsYXRlRXZlbnQuZW1pdCh0aGlzLmZpZWxkcygpKTtcbiAgICB9XG4gIH1cblxuICAvLyBnZXRGb3JtQ29udHJvbChpbmRleDogbnVtYmVyLCBmaWVsZDogc3RyaW5nKSB7XG4gIC8vICAgY29uc3QgY29udHJvbCA9IHRoaXMuLmdldChpbmRleCk/LmdldChmaWVsZCkgYXMgRm9ybUNvbnRyb2w8YW55PjtcbiAgLy8gICBjb25zb2xlLmxvZyhjb250cm9sKTtcbiAgLy8gICByZXR1cm4gY29udHJvbDtcbiAgLy8gfVxufVxuIiwiPHZlcmJlbi1jYXJkXG4gIHdpZHRoPVwiMjRyZW1cIlxuICBib3JkZXJSYWRpdXM9XCIxcmVtXCJcbiAgW2JvcmRlcl09XCInMXB4IHNvbGlkICNENEEwMDcnXCJcbiAgYmdDb2xvcj1cIiNGRkZGRkZcIlxuICBjbGFzcz1cImV4cG9ydC1jYXJkXCJcbj5cbiAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+SW1wb3J0PC9oND5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiJyMzNDc5RTknXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgW3N0eWxlLmJvcmRlcl09XCInbm9uZSdcIlxuICAgICAgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIlxuICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTJweCdcIlxuICAgICAgKGNsaWNrKT1cInJlc2V0KClcIlxuICAgID5cbiAgICAgIFJlc2V0XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNhcmQtYm9keSBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImV4cG9ydC1idXR0b25cIiAoY2xpY2spPVwiaGFuZGxlVGVtcGxhdGVFeHBvcnQoKVwiPlxuICAgICAgICBEb3dubG9hZCBUZW1wbGF0ZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8bGFiZWwgZm9yPVwiZmlsZUlucHV0XCIgY2xhc3M9XCJleHBvcnQtYnV0dG9uXCI+VXBsb2FkIEZpbGU8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyb3AtYXJlYVwiXG4gICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxuICAgICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxwPlxuICAgICAgICAgIERyYWcgYW5kIGRyb3AgZmlsZXMgaGVyZSBvclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmaWxlSW5wdXRcIj5jbGljayB0byBicm93c2U8L2xhYmVsPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBpZD1cImZpbGVJbnB1dFwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgICAgICAgIGFjY2VwdD1cIi5jc3YsIGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LCBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIlxuICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJmaWxlcy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxoMz5VcGxvYWRlZCBGaWxlczo8L2gzPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzXCI+e3sgZmlsZS5uYW1lIH19PC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2FyZC1mb290ZXIgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtYnV0dG9uXCIgKGNsaWNrKT1cInNhdmUoKVwiPkltcG9ydDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvdmVyYmVuLWNhcmQ+XG5cbjwhLS0gTW9kYWwgQ29tcG9uZW50IC0tPlxuPHZlcmJlbi1kaWFsb2d1ZVxuICBbc2hvd0Nsb3NlSWNvbl09XCJ0cnVlXCJcbiAgW2Rpc21pc3NPdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gIFtjbG9zZU9uRXNjYXBlXT1cInRydWVcIlxuICBbc2l6ZV09XCInbGFyZ2UnXCJcbiAgW21vZGVdPVwiJ2RpYWxvZ3VlJ1wiXG4gIFtjdXN0b21DbGFzc109XCInbXktbW9kYWwtY3VzdG9tLWNsYXNzJ1wiXG4gIFtkaXNhYmxlRm9vdGVyXT1cImZhbHNlXCJcbiAgW21vZGFsRGF0YV09XCJbeyBkYXRhOiB7IGZpcnN0X25hbWU6ICd2ZXJiZW4tbmcnLCBsYXN0X25hbWU6ICd2ZXJiZW5hJyB9IH1dXCJcbiAgW2lzVmlzaWJsZV09XCJzaG93UHJldmlld1wiXG4gIFtoZWFkZXJUZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiXG4gIFtib2R5VGVtcGxhdGVdPVwiYm9keVRlbXBsYXRlXCJcbiAgW2Zvb3RlclRlbXBsYXRlXT1cImZvb3RlclRlbXBsYXRlXCJcbj5cbiAgPGEgZG93bmxvYWQ9XCJcIj48L2E+XG48L3ZlcmJlbi1kaWFsb2d1ZT5cblxuPCEtLSBEZWZpbmUgdGVtcGxhdGVzIC0tPlxuPG5nLXRlbXBsYXRlICNoZWFkZXJUZW1wbGF0ZT5cbiAgPGgyPlVwbG9hZCBQcmV2aWV3PC9oMj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjYm9keVRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtNCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG15LTRcIj5cbiAgICA8cCBjbGFzcz1cIlwiPlRvdGFsIEl0ZW1zOiB7eyBwcmV2aWV3RGF0YSgpLmxlbmd0aCB9fTwvcD5cblxuICAgIDxwIGNsYXNzPVwiXCI+RHVwbGljYXRlczoge3sgZHVwbGljYXRlSW5kZXhTZXQuc2l6ZSB9fTwvcD5cblxuICAgIDxwIGNsYXNzPVwiXCI+SW52YWxpZCBJdGVtczoge3sgMCB9fTwvcD5cblxuICAgIDx2ZXJiZW4tZHJvcC1kb3duXG4gICAgICBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiXG4gICAgICBwbGFjZWhvbGRlcj1cIkZpbmQgZHVwbGljYXRlcyBieVwiXG4gICAgICBbb3B0aW9uc109XCJmaWVsZHMoKVwiXG4gICAgICBbbmdNb2RlbF09XCJ1bmlxdWVJZGVudGlmaWVycygpXCJcbiAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVuaXF1ZUlkZW50aWZpZXJzLnNldCgkZXZlbnQpXCJcbiAgICA+PC92ZXJiZW4tZHJvcC1kb3duPlxuICA8L2Rpdj5cbiAgPGxpYi1kYXRhLXRhYmxlXG4gICAgW2RhdGFdPVwicHJldmlld0RhdGEoKVwiXG4gICAgW2NvbHVtbnNdPVwicHJldmlld0NvbHVtbnNMaXN0KClcIlxuICAgIFtmb3JtR3JvdXBDb25maWddPVwiZm9ybUdyb3VwQ29uZmlnKClcIlxuICAgIChyb3dTYXZlKT1cInJvd1NhdmUuZW1pdCgkZXZlbnQpXCJcbiAgPlxuICAgIDxuZy1jb250YWluZXIgbGliQ29sdW1uPVwiYWN0aW9uc1wiPlxuICAgICAgPG5nLXRlbXBsYXRlXG4gICAgICAgICNjZWxsXG4gICAgICAgIGxldC12YWx1ZVxuICAgICAgICBsZXQtZGVsZXRlUm93PVwiZGVsZXRlUm93XCJcbiAgICAgICAgbGV0LWlzRWRpdGluZz1cImlzRWRpdGluZ1wiXG4gICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b25zXCI+XG4gICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIlxuICAgICAgICAgICAgaWNvbj1cImVkaXRcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cblxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiZGVsZXRlXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSb3coKVwiXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAjY2VsbEVkaXRcbiAgICAgICAgbGV0LXZhbHVlXG4gICAgICAgIGxldC1kZWxldGVSb3dcbiAgICAgICAgbGV0LWlzRWRpdGluZz1cImlzRWRpdGluZ1wiXG4gICAgICAgIGxldC10b2dnbGVSb3dFZGl0PVwidG9nZ2xlUm93RWRpdFwiXG4gICAgICAgIGxldC1yb3c9XCJyb3dcIlxuICAgICAgICBsZXQtcm93SW5kZXg9XCJyb3dJbmRleFwiXG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGFjdGlvbi1idXR0b25zXCI+XG4gICAgICAgICAgPHZlcmJlbi1zdmdcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVSb3dFZGl0KClcIlxuICAgICAgICAgICAgaWNvbj1cInRpY2tcIlxuICAgICAgICAgICAgW3dpZHRoXT1cIjE1XCJcbiAgICAgICAgICAgIFtoZWlnaHRdPVwiMTVcIlxuICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cblxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICBpY29uPVwiZGVsZXRlXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVSb3coKVwiXG4gICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICA+PC92ZXJiZW4tc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbGliLWRhdGEtdGFibGU+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2Zvb3RlclRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZm9vdGVyLWJ1dHRvbnMgZmxleCBnYXAtNCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG15LTRcIj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1zZWNvbmRhcnlcIiAoY2xpY2spPVwic2hvd1ByZXZpZXcgPSBmYWxzZVwiPlxuICAgICAgQ2FuY2VsXG4gICAgPC9idXR0b24+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBleHBvcnQtYnV0dG9uXCIgKGNsaWNrKT1cInNhdmUoKVwiPlxuICAgICAgQ29tcGxldGVcbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1pbXBvcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWltcG9ydC9kYXRhLWltcG9ydC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtaW1wb3J0L2RhdGEtaW1wb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsUUFBUSxFQUNSLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUt2QixPQUFPLEVBRUwsU0FBUyxHQUdWLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7QUFReEIsTUFBTSxPQUFPLG1CQUFtQjtJQUM5QixjQUFjLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBeUIsQ0FBQztJQUN6RCxlQUFlLEdBQUcsS0FBSyxFQUlwQixDQUFDO0lBQ0osTUFBTSxHQUFHLEtBQUssQ0FBVyxFQUFFLENBQUMsQ0FBQztJQUM3QixLQUFLLEdBQUcsS0FBSyxDQUFTLE9BQU8sQ0FBQyxDQUFDO0lBQy9CLGVBQWUsR0FBRyxLQUFLLENBQTZCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELFdBQVcsR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFPLENBQUM7SUFDcEMsbUJBQW1CLEdBQUcsTUFBTSxFQUFZLENBQUM7SUFDekMsV0FBVyxHQUFHLE1BQU0sRUFBUSxDQUFDO0lBQzdCLGVBQWUsR0FBRyxNQUFNLEVBQU8sQ0FBQztJQUNoQyxPQUFPLEdBQUcsTUFBTSxFQUlaLENBQUM7SUFFTCxrREFBa0Q7SUFDbEQsa0JBQWtCLENBQWdDO0lBQ2xELEtBQUssR0FBRyxJQUFJLFNBQVMsQ0FBWSxFQUFFLENBQUMsQ0FB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QUFJO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDekIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQztRQUNsRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLFFBQVEsQ0FBQztRQUM1QyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ1AsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7SUFDSCxDQUFDO3dHQTlKVSxtQkFBbUI7NEZBQW5CLG1CQUFtQiwwZ0NDM0JoQyxnbEtBcUxBOzs0RkQxSmEsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgY29tcHV0ZWQsXG4gIGVmZmVjdCxcbiAgaW5wdXQsXG4gIG91dHB1dCxcbiAgU2lnbmFsLFxuICBzaWduYWwsXG4gIFdyaXRhYmxlU2lnbmFsLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIENvbHVtbkRlZmluaXRpb24sXG4gIEZvcm1Hcm91cENvbmZpZyxcbn0gZnJvbSAnLi4vZGF0YS10YWJsZS9kYXRhLXRhYmxlLnR5cGVzJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgRm9ybUFycmF5LFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBDb2x1bW5EaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRhLXRhYmxlL2NvbHVtbi5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGF0YS1pbXBvcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0YS1pbXBvcnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGF0YS1pbXBvcnQuY29tcG9uZW50LmNzcycsXG59KVxuZXhwb3J0IGNsYXNzIERhdGFJbXBvcnRDb21wb25lbnQ8VD4ge1xuICBwcmV2aWV3Q29sdW1ucyA9IGlucHV0LnJlcXVpcmVkPENvbHVtbkRlZmluaXRpb248VD5bXT4oKTtcbiAgZm9ybUdyb3VwQ29uZmlnID0gaW5wdXQ8XG4gICAgRm9ybUdyb3VwQ29uZmlnPHtcbiAgICAgIFtLIGluIGtleW9mIFRdOiBBYnN0cmFjdENvbnRyb2w7XG4gICAgfT5cbiAgPigpO1xuICBmaWVsZHMgPSBpbnB1dDxzdHJpbmdbXT4oW10pO1xuICB0aXRsZSA9IGlucHV0PHN0cmluZz4oJ3RpdGxlJyk7XG4gIGNvbHVtblRlbXBsYXRlcyA9IGlucHV0PHJlYWRvbmx5IENvbHVtbkRpcmVjdGl2ZVtdPihbXSk7XG4gIHByZXZpZXdEYXRhID0gaW5wdXQucmVxdWlyZWQ8VFtdPigpO1xuICBleHBvcnRUZW1wbGF0ZUV2ZW50ID0gb3V0cHV0PHN0cmluZ1tdPigpO1xuICBpbXBvcnRFdmVudCA9IG91dHB1dDxGaWxlPigpO1xuICBpbXBvcnRFdmVudERhdGEgPSBvdXRwdXQ8VFtdPigpO1xuICByb3dTYXZlID0gb3V0cHV0PHtcbiAgICBpbmRleDogbnVtYmVyO1xuICAgIGtleTogbnVtYmVyIHwgc3RyaW5nO1xuICAgIGRhdGE6IFBhcnRpYWw8VD47XG4gIH0+KCk7XG5cbiAgLy8gZGF0YTogU2lnbmFsPChUICYgeyBpc0R1cGxpY2F0ZTogYm9vbGVhbiB9KVtdPjtcbiAgcHJldmlld0NvbHVtbnNMaXN0OiBTaWduYWw8Q29sdW1uRGVmaW5pdGlvbjxUPltdPjtcbiAgZm9ybXMgPSBuZXcgRm9ybUFycmF5PEZvcm1Hcm91cD4oW10pO1xuICB1bmlxdWVJZGVudGlmaWVyczogV3JpdGFibGVTaWduYWw8c3RyaW5nW10+ID0gc2lnbmFsKFtdKTtcbiAgLy8gZHVwbGljYXRlRGF0YU1hcDogTWFwPHN0cmluZywgbnVtYmVyPiA9IG5ldyBNYXAoKTtcbiAgZHVwbGljYXRlSW5kZXhTZXQgPSBuZXcgU2V0PG51bWJlcj4oKTtcblxuICBwcml2YXRlIF9leHQ6ICd4bHN4JyB8ICd4bHMnIHwgJ2NzdicgPSAneGxzeCc7XG5cbiAgZmlsZXM6IEZpbGVbXSA9IFtdO1xuICBpc0RyYWdnaW5nID0gZmFsc2U7XG4gIHNob3dQcmV2aWV3ID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIHRoaXMucHJldmlld0RhdGEoKT8uZm9yRWFjaCgoZGF0dW0pID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coZGF0dW0pO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gKGRhdHVtOiBULCBhcnJheTogVFtdKSA9PiB7XG4gICAgICAgIGNvbnN0IGlkZW50aWZpZXJzID0gdGhpcy51bmlxdWVJZGVudGlmaWVycygpO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgYXJyYXkuZmlsdGVyKFxuICAgICAgICAgICAgKGRhdCkgPT5cbiAgICAgICAgICAgICAgaWRlbnRpZmllcnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICBpZGVudGlmaWVycy5ldmVyeShcbiAgICAgICAgICAgICAgICAoaWRlbnRpZmllcikgPT5cbiAgICAgICAgICAgICAgICAgIGRhdHVtW2lkZW50aWZpZXIgYXMga2V5b2YgVF0gJiZcbiAgICAgICAgICAgICAgICAgIGRhdHVtW2lkZW50aWZpZXIgYXMga2V5b2YgVF0gPT09IGRhdFtpZGVudGlmaWVyIGFzIGtleW9mIFRdXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICApLmxlbmd0aCA+IDFcbiAgICAgICAgKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMucHJldmlld0RhdGEoKT8uZm9yRWFjaCgoZCwgaSwgYXJyKSA9PiB7XG4gICAgICAgIGlmIChpc0R1cGxpY2F0ZShkLCBhcnIpKSB7XG4gICAgICAgICAgdGhpcy5kdXBsaWNhdGVJbmRleFNldC5hZGQoaSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gdGhpcy5pbXBvcnRUYWJsZUNvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgLy8gICByZXR1cm4gdGhpcy5wcmV2aWV3Q29sdW1ucygpLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgLy8gICAgIGNvbnN0IG1hdGNoaW5nVGVtcGxhdGUgPSB0aGlzLmNvbHVtblRlbXBsYXRlcygpLmZpbmQoXG4gICAgLy8gICAgICAgKHQpID0+IHQuY29sdW1uSWQgPT09IGNvbHVtbi5pZFxuICAgIC8vICAgICApO1xuICAgIC8vICAgICBjb25zb2xlLmxvZyhtYXRjaGluZ1RlbXBsYXRlKTtcbiAgICAvLyAgICAgaWYgKG1hdGNoaW5nVGVtcGxhdGUpIHtcbiAgICAvLyAgICAgICByZXR1cm4ge1xuICAgIC8vICAgICAgICAgLi4uY29sdW1uLFxuICAgIC8vICAgICAgICAgY2VsbFRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmNlbGxUZW1wbGF0ZSxcbiAgICAvLyAgICAgICAgIGNlbGxFZGl0VGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuY2VsbEVkaXRUZW1wbGF0ZSxcbiAgICAvLyAgICAgICAgIGhlYWRlclRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmhlYWRlclRlbXBsYXRlLFxuICAgIC8vICAgICAgICAgZm9vdGVyVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuZm9vdGVyVGVtcGxhdGUsXG4gICAgLy8gICAgICAgfTtcbiAgICAvLyAgICAgfVxuICAgIC8vICAgICByZXR1cm4gY29sdW1uO1xuICAgIC8vICAgfSk7XG4gICAgLy8gfSk7XG5cbiAgICB0aGlzLnByZXZpZXdDb2x1bW5zTGlzdCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnByZXZpZXdDb2x1bW5zKClcbiAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wuYWNjZXNzb3JLZXkgfHwgY29sLmZvcm1Db250cm9sTmFtZSlcbiAgICAgICAgLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdUZW1wbGF0ZSA9IHRoaXMuY29sdW1uVGVtcGxhdGVzKCkuZmluZChcbiAgICAgICAgICAgICh0KSA9PiB0LmNvbHVtbklkID09PSBjb2x1bW4uaWRcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKG1hdGNoaW5nVGVtcGxhdGUpO1xuICAgICAgICAgIGlmIChtYXRjaGluZ1RlbXBsYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5jb2x1bW4sXG4gICAgICAgICAgICAgIGNlbGxUZW1wbGF0ZTogbWF0Y2hpbmdUZW1wbGF0ZS5jZWxsVGVtcGxhdGUsXG4gICAgICAgICAgICAgIGNlbGxFZGl0VGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuY2VsbEVkaXRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgaGVhZGVyVGVtcGxhdGU6IG1hdGNoaW5nVGVtcGxhdGUuaGVhZGVyVGVtcGxhdGUsXG4gICAgICAgICAgICAgIGZvb3RlclRlbXBsYXRlOiBtYXRjaGluZ1RlbXBsYXRlLmZvb3RlclRlbXBsYXRlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICAgICAgfSlcbiAgICAgICAgLmNvbmNhdChbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICdhY3Rpb25zJyxcbiAgICAgICAgICAgIGhlYWRlcjogJ0FjdGlvbnMnLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pO1xuICAgIH0pO1xuICB9XG5cbiAgb25EcmFnT3ZlcihldmVudDogRHJhZ0V2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlO1xuICB9XG5cbiAgb25EcmFnTGVhdmUoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkRyb3AoZXZlbnQ6IERyYWdFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgdGhpcy5maWxlcyA9IEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyIS5maWxlcyk7XG4gICAgdGhpcy5pbXBvcnRFdmVudC5lbWl0KHRoaXMuZmlsZXNbMF0pO1xuICAgIHRoaXMuc2hvd1ByZXZpZXcgPSB0cnVlO1xuICB9XG5cbiAgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZmlsZXMgPSBBcnJheS5mcm9tKGV2ZW50LnRhcmdldC5maWxlcyk7XG4gICAgdGhpcy5pbXBvcnRFdmVudC5lbWl0KHRoaXMuZmlsZXNbMF0pO1xuICAgIHRoaXMuc2hvd1ByZXZpZXcgPSB0cnVlO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5maWxlcyA9IFtdO1xuICB9XG5cbiAgc2F2ZSgpIHtcbiAgICBjb25zb2xlLmxvZygnUFJFVkRBVEEnLCB0aGlzLnByZXZpZXdEYXRhKCkpO1xuICAgIHRoaXMuc2hvd1ByZXZpZXcgPSBmYWxzZTtcbiAgICB0aGlzLmltcG9ydEV2ZW50RGF0YS5lbWl0KHRoaXMucHJldmlld0RhdGEoKSB8fCBbXSk7XG4gIH1cblxuICBnZXRDb250cm9sTmFtZXMoKSB7XG4gICAgY29uc3QgY29udHJvbHMgPSB0aGlzLmZvcm1Hcm91cENvbmZpZygpPy5jb250cm9scztcbiAgICBpZiAoY29udHJvbHMpIHtcbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhjb250cm9scyk7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGhhbmRsZVRlbXBsYXRlRXhwb3J0KCkge1xuICAgIGNvbnN0IGZnID0gdGhpcy5mb3JtR3JvdXBDb25maWcoKT8uY29udHJvbHM7XG4gICAgaWYgKGZnKSB7XG4gICAgICB0aGlzLmV4cG9ydFRlbXBsYXRlRXZlbnQuZW1pdChPYmplY3Qua2V5cyhmZykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmV4cG9ydFRlbXBsYXRlRXZlbnQuZW1pdCh0aGlzLmZpZWxkcygpKTtcbiAgICB9XG4gIH1cblxuICAvLyBnZXRGb3JtQ29udHJvbChpbmRleDogbnVtYmVyLCBmaWVsZDogc3RyaW5nKSB7XG4gIC8vICAgY29uc3QgY29udHJvbCA9IHRoaXMuLmdldChpbmRleCk/LmdldChmaWVsZCkgYXMgRm9ybUNvbnRyb2w8YW55PjtcbiAgLy8gICBjb25zb2xlLmxvZyhjb250cm9sKTtcbiAgLy8gICByZXR1cm4gY29udHJvbDtcbiAgLy8gfVxufVxuIiwiPHZlcmJlbi1jYXJkXG4gIHdpZHRoPVwiMjRyZW1cIlxuICBib3JkZXJSYWRpdXM9XCIxcmVtXCJcbiAgW2JvcmRlcl09XCInMXB4IHNvbGlkICNENEEwMDcnXCJcbiAgYmdDb2xvcj1cIiNGRkZGRkZcIlxuICBjbGFzcz1cImV4cG9ydC1jYXJkXCJcbj5cbiAgPGRpdiBjYXJkLWhlYWRlciBjbGFzcz1cImNhcmQtaGVhZGVyXCI+XG4gICAgPGg0IGNsYXNzPVwiaGVhZGVyLXRpdGxlXCI+SW1wb3J0PC9oND5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInJlc2V0LWJ1dHRvblwiXG4gICAgICBbc3R5bGUuY29sb3JdPVwiJyMzNDc5RTknXCJcbiAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgW3N0eWxlLmJvcmRlcl09XCInbm9uZSdcIlxuICAgICAgW3N0eWxlLmN1cnNvcl09XCIncG9pbnRlcidcIlxuICAgICAgW3N0eWxlLmZvbnQtc2l6ZV09XCInMTJweCdcIlxuICAgICAgKGNsaWNrKT1cInJlc2V0KClcIlxuICAgID5cbiAgICAgIFJlc2V0XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuICA8ZGl2IGNhcmQtYm9keSBjbGFzcz1cImNhcmQtYm9keVwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC00IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImV4cG9ydC1idXR0b25cIiAoY2xpY2spPVwiaGFuZGxlVGVtcGxhdGVFeHBvcnQoKVwiPlxuICAgICAgICBEb3dubG9hZCBUZW1wbGF0ZVxuICAgICAgPC9idXR0b24+XG4gICAgICA8bGFiZWwgZm9yPVwiZmlsZUlucHV0XCIgY2xhc3M9XCJleHBvcnQtYnV0dG9uXCI+VXBsb2FkIEZpbGU8L2xhYmVsPlxuICAgIDwvZGl2PlxuICAgIDxociBjbGFzcz1cImRpdmlkZXJcIiAvPlxuICAgIDxzZWN0aW9uIGNsYXNzPVwic2VjdGlvblwiPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImRyb3AtYXJlYVwiXG4gICAgICAgIChkcmFnb3Zlcik9XCJvbkRyYWdPdmVyKCRldmVudClcIlxuICAgICAgICAoZHJhZ2xlYXZlKT1cIm9uRHJhZ0xlYXZlKCRldmVudClcIlxuICAgICAgICAoZHJvcCk9XCJvbkRyb3AoJGV2ZW50KVwiXG4gICAgICA+XG4gICAgICAgIDxwPlxuICAgICAgICAgIERyYWcgYW5kIGRyb3AgZmlsZXMgaGVyZSBvclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJmaWxlSW5wdXRcIj5jbGljayB0byBicm93c2U8L2xhYmVsPlxuICAgICAgICA8L3A+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgICBpZD1cImZpbGVJbnB1dFwiXG4gICAgICAgICAgKGNoYW5nZSk9XCJvbkZpbGVTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgICAgICBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIlxuICAgICAgICAgIGFjY2VwdD1cIi5jc3YsIGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LCBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIlxuICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJmaWxlcy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxoMz5VcGxvYWRlZCBGaWxlczo8L2gzPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBmaWxlIG9mIGZpbGVzXCI+e3sgZmlsZS5uYW1lIH19PC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvc2VjdGlvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2FyZC1mb290ZXIgY2xhc3M9XCJjYXJkLWZvb3RlclwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJleHBvcnQtYnV0dG9uXCIgKGNsaWNrKT1cInNhdmUoKVwiPkltcG9ydDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvdmVyYmVuLWNhcmQ+XG5cbjwhLS0gTW9kYWwgQ29tcG9uZW50IC0tPlxuPHZlcmJlbi1kaWFsb2d1ZVxuICBbc2hvd0Nsb3NlSWNvbl09XCJ0cnVlXCJcbiAgW2Rpc21pc3NPdXRzaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gIFtjbG9zZU9uRXNjYXBlXT1cInRydWVcIlxuICBbc2l6ZV09XCInbGFyZ2UnXCJcbiAgW21vZGVdPVwiJ2RpYWxvZ3VlJ1wiXG4gIFtjdXN0b21DbGFzc109XCInbXktbW9kYWwtY3VzdG9tLWNsYXNzJ1wiXG4gIFtkaXNhYmxlRm9vdGVyXT1cImZhbHNlXCJcbiAgW21vZGFsRGF0YV09XCJbeyBkYXRhOiB7IGZpcnN0X25hbWU6ICd2ZXJiZW4tbmcnLCBsYXN0X25hbWU6ICd2ZXJiZW5hJyB9IH1dXCJcbiAgW2lzVmlzaWJsZV09XCJzaG93UHJldmlld1wiXG4gIFtoZWFkZXJUZW1wbGF0ZV09XCJoZWFkZXJUZW1wbGF0ZVwiXG4gIFtib2R5VGVtcGxhdGVdPVwiYm9keVRlbXBsYXRlXCJcbiAgW2Zvb3RlclRlbXBsYXRlXT1cImZvb3RlclRlbXBsYXRlXCJcbiAgZGlhbG9ndWVXaWR0aD1cIjg1JVwiXG4+XG4gIDxhIGRvd25sb2FkPVwiXCI+PC9hPlxuPC92ZXJiZW4tZGlhbG9ndWU+XG5cbjwhLS0gRGVmaW5lIHRlbXBsYXRlcyAtLT5cbjxuZy10ZW1wbGF0ZSAjaGVhZGVyVGVtcGxhdGU+XG4gIDxoMj5VcGxvYWQgUHJldmlldzwvaDI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2JvZHlUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZsZXggZ2FwLTQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBteS00XCI+XG4gICAgPHAgY2xhc3M9XCJcIj5Ub3RhbCBJdGVtczoge3sgcHJldmlld0RhdGEoKS5sZW5ndGggfX08L3A+XG5cbiAgICA8cCBjbGFzcz1cIlwiPkR1cGxpY2F0ZXM6IHt7IGR1cGxpY2F0ZUluZGV4U2V0LnNpemUgfX08L3A+XG5cbiAgICA8cCBjbGFzcz1cIlwiPkludmFsaWQgSXRlbXM6IHt7IDAgfX08L3A+XG5cbiAgICA8dmVyYmVuLWRyb3AtZG93blxuICAgICAgW211bHRpc2VsZWN0XT1cInRydWVcIlxuICAgICAgcGxhY2Vob2xkZXI9XCJGaW5kIGR1cGxpY2F0ZXMgYnlcIlxuICAgICAgW29wdGlvbnNdPVwiZmllbGRzKClcIlxuICAgICAgW25nTW9kZWxdPVwidW5pcXVlSWRlbnRpZmllcnMoKVwiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJ1bmlxdWVJZGVudGlmaWVycy5zZXQoJGV2ZW50KVwiXG4gICAgPjwvdmVyYmVuLWRyb3AtZG93bj5cbiAgPC9kaXY+XG4gIDxsaWItZGF0YS10YWJsZVxuICAgIFtkYXRhXT1cInByZXZpZXdEYXRhKClcIlxuICAgIFtjb2x1bW5zXT1cInByZXZpZXdDb2x1bW5zTGlzdCgpXCJcbiAgICBbZm9ybUdyb3VwQ29uZmlnXT1cImZvcm1Hcm91cENvbmZpZygpXCJcbiAgICAocm93U2F2ZSk9XCJyb3dTYXZlLmVtaXQoJGV2ZW50KVwiXG4gID5cbiAgICA8bmctY29udGFpbmVyIGxpYkNvbHVtbj1cImFjdGlvbnNcIj5cbiAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAjY2VsbFxuICAgICAgICBsZXQtdmFsdWVcbiAgICAgICAgbGV0LWRlbGV0ZVJvdz1cImRlbGV0ZVJvd1wiXG4gICAgICAgIGxldC1pc0VkaXRpbmc9XCJpc0VkaXRpbmdcIlxuICAgICAgICBsZXQtdG9nZ2xlUm93RWRpdD1cInRvZ2dsZVJvd0VkaXRcIlxuICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uc1wiPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUm93RWRpdCgpXCJcbiAgICAgICAgICAgIGljb249XCJlZGl0XCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG5cbiAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgaWNvbj1cImRlbGV0ZVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUm93KClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgI2NlbGxFZGl0XG4gICAgICAgIGxldC12YWx1ZVxuICAgICAgICBsZXQtZGVsZXRlUm93XG4gICAgICAgIGxldC1pc0VkaXRpbmc9XCJpc0VkaXRpbmdcIlxuICAgICAgICBsZXQtdG9nZ2xlUm93RWRpdD1cInRvZ2dsZVJvd0VkaXRcIlxuICAgICAgICBsZXQtcm93PVwicm93XCJcbiAgICAgICAgbGV0LXJvd0luZGV4PVwicm93SW5kZXhcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBhY3Rpb24tYnV0dG9uc1wiPlxuICAgICAgICAgIDx2ZXJiZW4tc3ZnXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlUm93RWRpdCgpXCJcbiAgICAgICAgICAgIGljb249XCJ0aWNrXCJcbiAgICAgICAgICAgIFt3aWR0aF09XCIxNVwiXG4gICAgICAgICAgICBbaGVpZ2h0XT1cIjE1XCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgID48L3ZlcmJlbi1zdmc+XG5cbiAgICAgICAgICA8dmVyYmVuLXN2Z1xuICAgICAgICAgICAgaWNvbj1cImRlbGV0ZVwiXG4gICAgICAgICAgICBbd2lkdGhdPVwiMTVcIlxuICAgICAgICAgICAgW2hlaWdodF09XCIxNVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlUm93KClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgPjwvdmVyYmVuLXN2Zz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2xpYi1kYXRhLXRhYmxlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmb290ZXJUZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZvb3Rlci1idXR0b25zIGZsZXggZ2FwLTQgaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBteS00XCI+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4gYnRuLXNlY29uZGFyeSBjYW5jZWwtYnV0dG9uXCJcbiAgICAgIChjbGljayk9XCJzaG93UHJldmlldyA9IGZhbHNlXCJcbiAgICA+XG4gICAgICBDYW5jZWxcbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGV4cG9ydC1idXR0b25cIiAoY2xpY2spPVwic2F2ZSgpXCI+XG4gICAgICBDb21wbGV0ZVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=