@sunbird-cb/tree-hierarchy 0.0.1-cbrelease-4.8.26

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.
Files changed (118) hide show
  1. package/README.md +24 -0
  2. package/esm2022/lib/components/action-bar/action-bar.component.mjs +41 -0
  3. package/esm2022/lib/components/approval/approval.component.mjs +19 -0
  4. package/esm2022/lib/components/approve-view/approve-view.component.mjs +64 -0
  5. package/esm2022/lib/components/categories-preview/categories-preview.component.mjs +44 -0
  6. package/esm2022/lib/components/conforamtion-popup/conforamtion-popup.component.mjs +74 -0
  7. package/esm2022/lib/components/connector/connector.component.mjs +59 -0
  8. package/esm2022/lib/components/create-categories/create-categories.component.mjs +83 -0
  9. package/esm2022/lib/components/create-term/create-term.component.mjs +847 -0
  10. package/esm2022/lib/components/create-term-from-framework/create-term-from-framework.component.mjs +823 -0
  11. package/esm2022/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.mjs +149 -0
  12. package/esm2022/lib/components/pending-approval/pending-approval.component.mjs +64 -0
  13. package/esm2022/lib/components/term-card/term-card.component.mjs +311 -0
  14. package/esm2022/lib/components/tree-column-view/tree-column-view.component.mjs +322 -0
  15. package/esm2022/lib/components/tree-view/tree-view.component.mjs +497 -0
  16. package/esm2022/lib/constants/app-constant.mjs +40 -0
  17. package/esm2022/lib/constants/data.mjs +6972 -0
  18. package/esm2022/lib/containers/config-framework/config-framework.component.mjs +92 -0
  19. package/esm2022/lib/containers/dashboard/dashboard.component.mjs +14 -0
  20. package/esm2022/lib/labels/strings.mjs +40 -0
  21. package/esm2022/lib/models/approval.model.mjs +2 -0
  22. package/esm2022/lib/models/connection-type.model.mjs +2 -0
  23. package/esm2022/lib/models/connection.model.mjs +2 -0
  24. package/esm2022/lib/models/framework.model.mjs +2 -0
  25. package/esm2022/lib/models/variable-type.model.mjs +2 -0
  26. package/esm2022/lib/pipes/order-by.pipe.mjs +35 -0
  27. package/esm2022/lib/services/approval.service.mjs +47 -0
  28. package/esm2022/lib/services/connection.service.mjs +3 -0
  29. package/esm2022/lib/services/connector.service.mjs +240 -0
  30. package/esm2022/lib/services/framework.service.mjs +387 -0
  31. package/esm2022/lib/services/local-connection.service.mjs +75 -0
  32. package/esm2022/lib/services/odcs.service.mjs +23 -0
  33. package/esm2022/lib/tree-hierarchy-routing.module.mjs +43 -0
  34. package/esm2022/lib/tree-hierarchy.component.mjs +24 -0
  35. package/esm2022/lib/tree-hierarchy.module.mjs +138 -0
  36. package/esm2022/lib/tree-hierarchy.service.mjs +41 -0
  37. package/esm2022/material.module.mjs +199 -0
  38. package/esm2022/public-api.mjs +9 -0
  39. package/esm2022/sunbird-cb-tree-hierarchy.mjs +2 -0
  40. package/fesm2022/sunbird-cb-tree-hierarchy.mjs +11577 -0
  41. package/fesm2022/sunbird-cb-tree-hierarchy.mjs.map +1 -0
  42. package/index.d.ts +3 -0
  43. package/lib/components/action-bar/action-bar.component.d.ts +17 -0
  44. package/lib/components/action-bar/action-bar.component.d.ts.map +1 -0
  45. package/lib/components/approval/approval.component.d.ts +10 -0
  46. package/lib/components/approval/approval.component.d.ts.map +1 -0
  47. package/lib/components/approve-view/approve-view.component.d.ts +27 -0
  48. package/lib/components/approve-view/approve-view.component.d.ts.map +1 -0
  49. package/lib/components/categories-preview/categories-preview.component.d.ts +14 -0
  50. package/lib/components/categories-preview/categories-preview.component.d.ts.map +1 -0
  51. package/lib/components/conforamtion-popup/conforamtion-popup.component.d.ts +20 -0
  52. package/lib/components/conforamtion-popup/conforamtion-popup.component.d.ts.map +1 -0
  53. package/lib/components/connector/connector.component.d.ts +23 -0
  54. package/lib/components/connector/connector.component.d.ts.map +1 -0
  55. package/lib/components/create-categories/create-categories.component.d.ts +26 -0
  56. package/lib/components/create-categories/create-categories.component.d.ts.map +1 -0
  57. package/lib/components/create-term/create-term.component.d.ts +148 -0
  58. package/lib/components/create-term/create-term.component.d.ts.map +1 -0
  59. package/lib/components/create-term-from-framework/create-term-from-framework.component.d.ts +105 -0
  60. package/lib/components/create-term-from-framework/create-term-from-framework.component.d.ts.map +1 -0
  61. package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts +31 -0
  62. package/lib/components/org-hierarchy-add-modal/org-hierarchy-add-modal.component.d.ts.map +1 -0
  63. package/lib/components/pending-approval/pending-approval.component.d.ts +21 -0
  64. package/lib/components/pending-approval/pending-approval.component.d.ts.map +1 -0
  65. package/lib/components/term-card/term-card.component.d.ts +43 -0
  66. package/lib/components/term-card/term-card.component.d.ts.map +1 -0
  67. package/lib/components/tree-column-view/tree-column-view.component.d.ts +52 -0
  68. package/lib/components/tree-column-view/tree-column-view.component.d.ts.map +1 -0
  69. package/lib/components/tree-view/tree-view.component.d.ts +91 -0
  70. package/lib/components/tree-view/tree-view.component.d.ts.map +1 -0
  71. package/lib/constants/app-constant.d.ts +44 -0
  72. package/lib/constants/app-constant.d.ts.map +1 -0
  73. package/lib/constants/data.d.ts +117 -0
  74. package/lib/constants/data.d.ts.map +1 -0
  75. package/lib/containers/config-framework/config-framework.component.d.ts +32 -0
  76. package/lib/containers/config-framework/config-framework.component.d.ts.map +1 -0
  77. package/lib/containers/dashboard/dashboard.component.d.ts +9 -0
  78. package/lib/containers/dashboard/dashboard.component.d.ts.map +1 -0
  79. package/lib/labels/strings.d.ts +40 -0
  80. package/lib/labels/strings.d.ts.map +1 -0
  81. package/lib/models/approval.model.d.ts +11 -0
  82. package/lib/models/approval.model.d.ts.map +1 -0
  83. package/lib/models/connection-type.model.d.ts +6 -0
  84. package/lib/models/connection-type.model.d.ts.map +1 -0
  85. package/lib/models/connection.model.d.ts +7 -0
  86. package/lib/models/connection.model.d.ts.map +1 -0
  87. package/lib/models/framework.model.d.ts +88 -0
  88. package/lib/models/framework.model.d.ts.map +1 -0
  89. package/lib/models/variable-type.model.d.ts +46 -0
  90. package/lib/models/variable-type.model.d.ts.map +1 -0
  91. package/lib/pipes/order-by.pipe.d.ts +10 -0
  92. package/lib/pipes/order-by.pipe.d.ts.map +1 -0
  93. package/lib/services/approval.service.d.ts +21 -0
  94. package/lib/services/approval.service.d.ts.map +1 -0
  95. package/lib/services/connection.service.d.ts +4 -0
  96. package/lib/services/connection.service.d.ts.map +1 -0
  97. package/lib/services/connector.service.d.ts +17 -0
  98. package/lib/services/connector.service.d.ts.map +1 -0
  99. package/lib/services/framework.service.d.ts +82 -0
  100. package/lib/services/framework.service.d.ts.map +1 -0
  101. package/lib/services/local-connection.service.d.ts +18 -0
  102. package/lib/services/local-connection.service.d.ts.map +1 -0
  103. package/lib/services/odcs.service.d.ts +11 -0
  104. package/lib/services/odcs.service.d.ts.map +1 -0
  105. package/lib/tree-hierarchy-routing.module.d.ts +8 -0
  106. package/lib/tree-hierarchy-routing.module.d.ts.map +1 -0
  107. package/lib/tree-hierarchy.component.d.ts +13 -0
  108. package/lib/tree-hierarchy.component.d.ts.map +1 -0
  109. package/lib/tree-hierarchy.module.d.ts +31 -0
  110. package/lib/tree-hierarchy.module.d.ts.map +1 -0
  111. package/lib/tree-hierarchy.service.d.ts +17 -0
  112. package/lib/tree-hierarchy.service.d.ts.map +1 -0
  113. package/material.module.d.ts +52 -0
  114. package/material.module.d.ts.map +1 -0
  115. package/package.json +43 -0
  116. package/public-api.d.ts +9 -0
  117. package/public-api.d.ts.map +1 -0
  118. package/sunbird-cb-tree-hierarchy.d.ts.map +1 -0
@@ -0,0 +1,83 @@
1
+ import { moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
2
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
3
+ import { labels } from '../../labels/strings';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/forms";
6
+ import * as i2 from "@angular/common";
7
+ import * as i3 from "@angular/cdk/drag-drop";
8
+ import * as i4 from "@angular/material/button";
9
+ import * as i5 from "@angular/material/icon";
10
+ import * as i6 from "@angular/material/input";
11
+ import * as i7 from "@angular/material/form-field";
12
+ export class CreateCategoriesComponent {
13
+ constructor(fb) {
14
+ this.fb = fb;
15
+ this.updateCategory = new EventEmitter();
16
+ this.removeCategories = new EventEmitter();
17
+ this.changePosition = new EventEmitter();
18
+ this.app_strings = labels;
19
+ }
20
+ ngOnInit() {
21
+ this.createCategoriesForm = this.fb.group({
22
+ categories: this.fb.array([])
23
+ });
24
+ if (this.taxonomyInfo) {
25
+ this.initCategoryForm();
26
+ }
27
+ else {
28
+ this.addCategory();
29
+ }
30
+ }
31
+ categories() {
32
+ return this.createCategoriesForm.get('categories');
33
+ }
34
+ newCategories() {
35
+ return this.fb.group({
36
+ name: '',
37
+ });
38
+ }
39
+ addCategory() {
40
+ this.categories().push(this.newCategories());
41
+ }
42
+ removeCategory(i) {
43
+ this.categories().removeAt(i);
44
+ this.removeCategories.emit(i);
45
+ }
46
+ initCategoryForm() {
47
+ for (var cat of this.taxonomyInfo) {
48
+ this.categories().push(this.fb.group({
49
+ name: cat.name
50
+ }));
51
+ }
52
+ }
53
+ saveForm() {
54
+ this.updateCategory.emit(this.createCategoriesForm.value.categories);
55
+ }
56
+ emitCategory(event) {
57
+ this.updateCategory.emit(event.target.value);
58
+ }
59
+ drop(event) {
60
+ if (event.previousContainer === event.container) {
61
+ moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
62
+ this.changePosition.emit({ cur: event.currentIndex, prev: event.previousIndex });
63
+ }
64
+ else {
65
+ transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);
66
+ }
67
+ }
68
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateCategoriesComponent, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
69
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CreateCategoriesComponent, selector: "lib-create-categories", inputs: { taxonomyInfo: "taxonomyInfo" }, outputs: { updateCategory: "updateCategory", removeCategories: "removeCategories", changePosition: "changePosition" }, ngImport: i0, template: "\n<div class=\"form-wrap\">\n <h1>{{app_strings.createCategories}}</h1>\n <form [formGroup]=\"createCategoriesForm\" (ngSubmit)=\"saveForm()\" novalidate>\n <div class=\"form-field\">\n <div class=\"form-field__wrap\" formArrayName=\"categories\" cdkDropListGroup>\n <div cdkDropList [cdkDropListData]=\"categories().controls\" (cdkDropListDropped)=\"drop($event)\">\n <div class=\"form__category\" *ngFor=\"let cat of categories().controls; let i = index\" >\n <mat-form-field appearance=\"outline\" [formGroupName]=\"i\" cdkDrag>\n <mat-label>{{app_strings.category}} {{i}}</mat-label>\n <input matInput placeholder=\"{{app_strings.categoryName}}\" formControlName=\"name\" (blur)=\"emitCategory($event)\"> \n <div class=\"drag-Handle\" cdkDragHandle>\n <svg width=\"24px\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z\"></path>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n </svg>\n </div>\n </mat-form-field>\n <mat-icon (click)=\"removeCategory(i)\">{{app_strings.removeCircleOutline}}</mat-icon>\n \n </div>\n </div>\n </div>\n </div>\n <footer>\n <button type=\"button\" mat-raised-button (click)=\"addCategory()\" color=\"primary\">\n {{app_strings.add | titlecase}}\n </button>\n </footer>\n </form>\n</div>\n", styles: [".form-wrap{display:flex;flex-direction:column;justify-content:center;padding:15px}.form-wrap h1{font-size:24px;color:#666;font-weight:500}.form-field{display:flex;flex-direction:row;justify-content:start}.form-field__wrap{display:flex;flex-direction:column}.form-field__wrap .mat-form-field{width:350px}.form__btns{display:flex;flex-direction:column;justify-content:end;padding-bottom:15px;margin-left:15px}.form__category{display:flex;flex-direction:row;justify-content:center;align-items:center}.form__category .mat-form-field .mat-form-field-appearance-outline{margin-bottom:0}.form__category .mat-icon{margin-left:20px;height:20px;padding:5px 5px 25px;color:#b60909;cursor:pointer}.drag-Handle{position:absolute;top:8px;right:0;color:#9b9b9b;cursor:grabbing}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}footer{display:flex;flex-direction:row;justify-content:start}footer .mat-raised-button{padding:0 40px}@media only screen and (max-width: 1024px){.form-wrap h1{font-size:20px}.form-wrap-field__wrap .mat-form-field{width:250px}.form-wrap ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{top:10px;bottom:4px}.form-wrap ::ng-deep .mat-form-field-wrapper{padding-bottom:.3em}.form-wrap ::ng-deep .mat-input-element{font-size:10px}.form-wrap ::ng-deep .mat-raised-button{min-width:auto;padding:0 .5em;line-height:2em}}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i3.CdkDropListGroup, selector: "[cdkDropListGroup]", inputs: ["cdkDropListGroupDisabled"], exportAs: ["cdkDropListGroup"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i3.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.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: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "pipe", type: i2.TitleCasePipe, name: "titlecase" }] }); }
70
+ }
71
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CreateCategoriesComponent, decorators: [{
72
+ type: Component,
73
+ args: [{ selector: 'lib-create-categories', template: "\n<div class=\"form-wrap\">\n <h1>{{app_strings.createCategories}}</h1>\n <form [formGroup]=\"createCategoriesForm\" (ngSubmit)=\"saveForm()\" novalidate>\n <div class=\"form-field\">\n <div class=\"form-field__wrap\" formArrayName=\"categories\" cdkDropListGroup>\n <div cdkDropList [cdkDropListData]=\"categories().controls\" (cdkDropListDropped)=\"drop($event)\">\n <div class=\"form__category\" *ngFor=\"let cat of categories().controls; let i = index\" >\n <mat-form-field appearance=\"outline\" [formGroupName]=\"i\" cdkDrag>\n <mat-label>{{app_strings.category}} {{i}}</mat-label>\n <input matInput placeholder=\"{{app_strings.categoryName}}\" formControlName=\"name\" (blur)=\"emitCategory($event)\"> \n <div class=\"drag-Handle\" cdkDragHandle>\n <svg width=\"24px\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\n <path d=\"M10 9h4V6h3l-5-5-5 5h3v3zm-1 1H6V7l-5 5 5 5v-3h3v-4zm14 2l-5-5v3h-3v4h3v3l5-5zm-9 3h-4v3H7l5 5 5-5h-3v-3z\"></path>\n <path d=\"M0 0h24v24H0z\" fill=\"none\"></path>\n </svg>\n </div>\n </mat-form-field>\n <mat-icon (click)=\"removeCategory(i)\">{{app_strings.removeCircleOutline}}</mat-icon>\n \n </div>\n </div>\n </div>\n </div>\n <footer>\n <button type=\"button\" mat-raised-button (click)=\"addCategory()\" color=\"primary\">\n {{app_strings.add | titlecase}}\n </button>\n </footer>\n </form>\n</div>\n", styles: [".form-wrap{display:flex;flex-direction:column;justify-content:center;padding:15px}.form-wrap h1{font-size:24px;color:#666;font-weight:500}.form-field{display:flex;flex-direction:row;justify-content:start}.form-field__wrap{display:flex;flex-direction:column}.form-field__wrap .mat-form-field{width:350px}.form__btns{display:flex;flex-direction:column;justify-content:end;padding-bottom:15px;margin-left:15px}.form__category{display:flex;flex-direction:row;justify-content:center;align-items:center}.form__category .mat-form-field .mat-form-field-appearance-outline{margin-bottom:0}.form__category .mat-icon{margin-left:20px;height:20px;padding:5px 5px 25px;color:#b60909;cursor:pointer}.drag-Handle{position:absolute;top:8px;right:0;color:#9b9b9b;cursor:grabbing}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}.cdk-drop-list-dragging .example-box:not(.cdk-drag-placeholder){transition:transform .25s cubic-bezier(0,0,.2,1)}footer{display:flex;flex-direction:row;justify-content:start}footer .mat-raised-button{padding:0 40px}@media only screen and (max-width: 1024px){.form-wrap h1{font-size:20px}.form-wrap-field__wrap .mat-form-field{width:250px}.form-wrap ::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{top:10px;bottom:4px}.form-wrap ::ng-deep .mat-form-field-wrapper{padding-bottom:.3em}.form-wrap ::ng-deep .mat-input-element{font-size:10px}.form-wrap ::ng-deep .mat-raised-button{min-width:auto;padding:0 .5em;line-height:2em}}\n"] }]
74
+ }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }]; }, propDecorators: { taxonomyInfo: [{
75
+ type: Input
76
+ }], updateCategory: [{
77
+ type: Output
78
+ }], removeCategories: [{
79
+ type: Output
80
+ }], changePosition: [{
81
+ type: Output
82
+ }] } });
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNhdGVnb3JpZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RyZWUtaGllcmFyY2h5L3NyYy9saWIvY29tcG9uZW50cy9jcmVhdGUtY2F0ZWdvcmllcy9jcmVhdGUtY2F0ZWdvcmllcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdHJlZS1oaWVyYXJjaHkvc3JjL2xpYi9jb21wb25lbnRzL2NyZWF0ZS1jYXRlZ29yaWVzL2NyZWF0ZS1jYXRlZ29yaWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RixPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLEVBQUcsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRS9FLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTs7Ozs7Ozs7O0FBUTdDLE1BQU0sT0FBTyx5QkFBeUI7SUFVcEMsWUFBb0IsRUFBc0I7UUFBdEIsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFSaEMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO1FBQ25DLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFFLENBQUE7UUFDckMsbUJBQWMsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFBO1FBSTdDLGdCQUFXLEdBQVEsTUFBTSxDQUFDO0lBRW9CLENBQUM7SUFFL0MsUUFBUTtRQUNQLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUN2QyxVQUFVLEVBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1NBQzdCLENBQUMsQ0FBQTtRQUNGLElBQUcsSUFBSSxDQUFDLFlBQVksRUFBQztZQUNuQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtTQUN0QjthQUFNO1lBQ1AsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFBO1NBQ25CO0lBQ0gsQ0FBQztJQUNELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFxQixDQUFBO0lBQ3hFLENBQUM7SUFFRCxhQUFhO1FBQ1gsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNuQixJQUFJLEVBQUMsRUFBRTtTQUNSLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsY0FBYyxDQUFDLENBQVE7UUFDckIsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxLQUFJLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUM7WUFDL0IsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLElBQUksQ0FDdEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUM7Z0JBQ1YsSUFBSSxFQUFDLEdBQUcsQ0FBQyxJQUFJO2FBQ2QsQ0FBQyxDQUNILENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN0RSxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQVM7UUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM5QyxDQUFDO0lBQ0QsSUFBSSxDQUFDLEtBQTRCO1FBQy9CLElBQUksS0FBSyxDQUFDLGlCQUFpQixLQUFLLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDL0MsZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQy9FLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUMsQ0FBQyxDQUFBO1NBQzdFO2FBQU07WUFDTCxpQkFBaUIsQ0FDZixLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUM1QixLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksRUFDcEIsS0FBSyxDQUFDLGFBQWEsRUFDbkIsS0FBSyxDQUFDLFlBQVksQ0FDbkIsQ0FBQztTQUNIO0lBQ0gsQ0FBQzsrR0F0RVUseUJBQXlCO21HQUF6Qix5QkFBeUIsOE5DWHRDLGl6REErQkE7OzRGRHBCYSx5QkFBeUI7a0JBTHJDLFNBQVM7K0JBQ0UsdUJBQXVCO3lHQUt4QixZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5LCB0cmFuc2ZlckFycmF5SXRlbSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQgLCBFdmVudEVtaXR0ZXJ9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbGFiZWxzIH0gZnJvbSAnLi4vLi4vbGFiZWxzL3N0cmluZ3MnXG5cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWNyZWF0ZS1jYXRlZ29yaWVzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1jYXRlZ29yaWVzLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3JlYXRlLWNhdGVnb3JpZXMuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBDcmVhdGVDYXRlZ29yaWVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgdGF4b25vbXlJbmZvOmFueVxuICBAT3V0cHV0KCkgdXBkYXRlQ2F0ZWdvcnkgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIHJlbW92ZUNhdGVnb3JpZXMgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgQE91dHB1dCgpIGNoYW5nZVBvc2l0aW9uID0gbmV3IEV2ZW50RW1pdHRlcigpXG5cbiAgY3JlYXRlQ2F0ZWdvcmllc0Zvcm0hOiBVbnR5cGVkRm9ybUdyb3VwXG5cbiAgYXBwX3N0cmluZ3M6IGFueSA9IGxhYmVscztcbiAgXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcikgeyB9XG5cbiAgbmdPbkluaXQoKSB7IFxuICAgdGhpcy5jcmVhdGVDYXRlZ29yaWVzRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xuICAgICAgY2F0ZWdvcmllczp0aGlzLmZiLmFycmF5KFtdKVxuICAgIH0pXG4gICAgaWYodGhpcy50YXhvbm9teUluZm8pe1xuICAgICAgdGhpcy5pbml0Q2F0ZWdvcnlGb3JtKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZENhdGVnb3J5KClcbiAgICB9XG4gIH1cbiAgY2F0ZWdvcmllcygpOiBVbnR5cGVkRm9ybUFycmF5IHtcbiAgICByZXR1cm4gdGhpcy5jcmVhdGVDYXRlZ29yaWVzRm9ybS5nZXQoJ2NhdGVnb3JpZXMnKSBhcyBVbnR5cGVkRm9ybUFycmF5XG4gIH1cblxuICBuZXdDYXRlZ29yaWVzKCk6IFVudHlwZWRGb3JtR3JvdXAgeyAgXG4gICAgcmV0dXJuIHRoaXMuZmIuZ3JvdXAoeyAgXG4gICAgICBuYW1lOicnLCAgXG4gICAgfSkgIFxuICB9ICBcblxuICBhZGRDYXRlZ29yeSgpIHsgIFxuICAgIHRoaXMuY2F0ZWdvcmllcygpLnB1c2godGhpcy5uZXdDYXRlZ29yaWVzKCkpOyAgXG4gIH0gIFxuICAgICBcbiAgcmVtb3ZlQ2F0ZWdvcnkoaTpudW1iZXIpIHsgIFxuICAgIHRoaXMuY2F0ZWdvcmllcygpLnJlbW92ZUF0KGkpOyAgXG4gICAgdGhpcy5yZW1vdmVDYXRlZ29yaWVzLmVtaXQoaSlcbiAgfSAgXG5cbiAgaW5pdENhdGVnb3J5Rm9ybSgpe1xuICAgIGZvcih2YXIgY2F0IG9mIHRoaXMudGF4b25vbXlJbmZvKXtcbiAgICAgIHRoaXMuY2F0ZWdvcmllcygpLnB1c2goXG4gICAgICB0aGlzLmZiLmdyb3VwKHtcbiAgICAgICAgICBuYW1lOmNhdC5uYW1lXG4gICAgICAgIH0pXG4gICAgICApOyAgXG4gICAgfVxuICB9XG5cbiAgc2F2ZUZvcm0oKSB7XG4gICAgdGhpcy51cGRhdGVDYXRlZ29yeS5lbWl0KHRoaXMuY3JlYXRlQ2F0ZWdvcmllc0Zvcm0udmFsdWUuY2F0ZWdvcmllcylcbiAgfVxuXG4gIGVtaXRDYXRlZ29yeShldmVudDphbnkpe1xuICAgIHRoaXMudXBkYXRlQ2F0ZWdvcnkuZW1pdChldmVudC50YXJnZXQudmFsdWUpXG4gIH1cbiAgZHJvcChldmVudDogQ2RrRHJhZ0Ryb3A8c3RyaW5nW10+KSB7XG4gICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcbiAgICAgIG1vdmVJdGVtSW5BcnJheShldmVudC5jb250YWluZXIuZGF0YSwgZXZlbnQucHJldmlvdXNJbmRleCwgZXZlbnQuY3VycmVudEluZGV4KTtcbiAgICAgIHRoaXMuY2hhbmdlUG9zaXRpb24uZW1pdCh7Y3VyOmV2ZW50LmN1cnJlbnRJbmRleCwgcHJldjpldmVudC5wcmV2aW91c0luZGV4fSlcbiAgICB9IGVsc2Uge1xuICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oXG4gICAgICAgIGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGEsXG4gICAgICAgIGV2ZW50LmNvbnRhaW5lci5kYXRhLFxuICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxuICAgICAgICBldmVudC5jdXJyZW50SW5kZXgsXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIiwiXG48ZGl2IGNsYXNzPVwiZm9ybS13cmFwXCI+XG4gICAgPGgxPnt7YXBwX3N0cmluZ3MuY3JlYXRlQ2F0ZWdvcmllc319PC9oMT5cbiAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImNyZWF0ZUNhdGVnb3JpZXNGb3JtXCIgKG5nU3VibWl0KT1cInNhdmVGb3JtKClcIiBub3ZhbGlkYXRlPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRfX3dyYXBcIiBmb3JtQXJyYXlOYW1lPVwiY2F0ZWdvcmllc1wiIGNka0Ryb3BMaXN0R3JvdXA+XG4gICAgICAgICAgICAgICAgPGRpdiBjZGtEcm9wTGlzdCBbY2RrRHJvcExpc3REYXRhXT1cImNhdGVnb3JpZXMoKS5jb250cm9sc1wiIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm1fX2NhdGVnb3J5XCIgKm5nRm9yPVwibGV0IGNhdCBvZiBjYXRlZ29yaWVzKCkuY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCIgY2RrRHJhZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7YXBwX3N0cmluZ3MuY2F0ZWdvcnl9fSB7e2l9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cInt7YXBwX3N0cmluZ3MuY2F0ZWdvcnlOYW1lfX1cIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgKGJsdXIpPVwiZW1pdENhdGVnb3J5KCRldmVudClcIj4gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyYWctSGFuZGxlXCIgY2RrRHJhZ0hhbmRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjI0cHhcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAgOWg0VjZoM2wtNS01LTUgNWgzdjN6bS0xIDFINlY3bC01IDUgNSA1di0zaDN2LTR6bTE0IDJsLTUtNXYzaC0zdjRoM3YzbDUtNXptLTkgM2gtNHYzSDdsNSA1IDUtNWgtM3YtM3pcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wIDBoMjR2MjRIMHpcIiBmaWxsPVwibm9uZVwiPjwvcGF0aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAoY2xpY2spPVwicmVtb3ZlQ2F0ZWdvcnkoaSlcIj57e2FwcF9zdHJpbmdzLnJlbW92ZUNpcmNsZU91dGxpbmV9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxmb290ZXI+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAgbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cImFkZENhdGVnb3J5KClcIiBjb2xvcj1cInByaW1hcnlcIj5cbiAgICAgICAgICAgICAgICB7e2FwcF9zdHJpbmdzLmFkZCB8IHRpdGxlY2FzZX19XG4gICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZm9vdGVyPlxuICAgIDwvZm9ybT5cbjwvZGl2PlxuIl19