chrv-components 0.0.1

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 (39) hide show
  1. package/README.md +25 -0
  2. package/chrv-components-0.0.1.tgz +0 -0
  3. package/esm2020/chrv-components.mjs +5 -0
  4. package/esm2020/lib/chr-breadcrumb/breadcrumb.component.mjs +22 -0
  5. package/esm2020/lib/chr-button/chr-button.component.mjs +46 -0
  6. package/esm2020/lib/chr-checkbox/chr-checkbox.component.mjs +37 -0
  7. package/esm2020/lib/chr-components.module.mjs +117 -0
  8. package/esm2020/lib/chr-delete-modal/chr-delete-modal.component.mjs +22 -0
  9. package/esm2020/lib/chr-form/chr-form.component.mjs +132 -0
  10. package/esm2020/lib/chr-form/chr-validators/decimal-validator.mjs +58 -0
  11. package/esm2020/lib/chr-form/chr-validators/max-date-validator.mjs +54 -0
  12. package/esm2020/lib/chr-form/chr-validators/type-validator.mjs +52 -0
  13. package/esm2020/lib/chr-search-select/chr-search-select.component.mjs +136 -0
  14. package/esm2020/lib/chr-searchbar/chr-searchbar.component.mjs +29 -0
  15. package/esm2020/lib/chr-separator/chr-separator.component.mjs +11 -0
  16. package/esm2020/lib/chr-table/chr-table.component.mjs +58 -0
  17. package/esm2020/lib/chr-table-header-cell/chr-table-header-cell.component.mjs +49 -0
  18. package/esm2020/public-api.mjs +18 -0
  19. package/fesm2015/chrv-components.mjs +774 -0
  20. package/fesm2015/chrv-components.mjs.map +1 -0
  21. package/fesm2020/chrv-components.mjs +768 -0
  22. package/fesm2020/chrv-components.mjs.map +1 -0
  23. package/index.d.ts +5 -0
  24. package/lib/chr-breadcrumb/breadcrumb.component.d.ts +15 -0
  25. package/lib/chr-button/chr-button.component.d.ts +17 -0
  26. package/lib/chr-checkbox/chr-checkbox.component.d.ts +13 -0
  27. package/lib/chr-components.module.d.ts +28 -0
  28. package/lib/chr-delete-modal/chr-delete-modal.component.d.ts +11 -0
  29. package/lib/chr-form/chr-form.component.d.ts +57 -0
  30. package/lib/chr-form/chr-validators/decimal-validator.d.ts +10 -0
  31. package/lib/chr-form/chr-validators/max-date-validator.d.ts +10 -0
  32. package/lib/chr-form/chr-validators/type-validator.d.ts +10 -0
  33. package/lib/chr-search-select/chr-search-select.component.d.ts +44 -0
  34. package/lib/chr-searchbar/chr-searchbar.component.d.ts +14 -0
  35. package/lib/chr-separator/chr-separator.component.d.ts +5 -0
  36. package/lib/chr-table/chr-table.component.d.ts +38 -0
  37. package/lib/chr-table-header-cell/chr-table-header-cell.component.d.ts +16 -0
  38. package/package.json +31 -0
  39. package/public-api.d.ts +14 -0
package/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # ChrComponents
2
+
3
+ This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 15.1.0.
4
+
5
+ ## Code scaffolding
6
+
7
+ Run `ng generate component component-name --project chrv-components` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project chrv-components`.
8
+
9
+ > Note: Don't forget to add `--project chrv-components` or else it will be added to the default project in your `angular.json` file.
10
+
11
+ ## Build
12
+
13
+ Run `ng build chrv-components` to build the project. The build artifacts will be stored in the `dist/` directory.
14
+
15
+ ## Publishing
16
+
17
+ After building your library with `ng build chrv-components`, go to the dist folder `cd dist/chrv-components` and run `npm publish`.
18
+
19
+ ## Running unit tests
20
+
21
+ Run `ng test chrv-components` to execute the unit tests via [Karma](https://karma-runner.github.io).
22
+
23
+ ## Further help
24
+
25
+ To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
Binary file
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hydi1jb21wb25lbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9jaHJ2LWNvbXBvbmVudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,22 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/router";
4
+ import * as i2 from "@angular/common";
5
+ import * as i3 from "@angular/material/button";
6
+ export class BreadcrumbComponent {
7
+ constructor(router) {
8
+ this.router = router;
9
+ this.navigateTo = (uri, data) => {
10
+ this.router.navigate([uri], { state: data });
11
+ };
12
+ }
13
+ }
14
+ BreadcrumbComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BreadcrumbComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component });
15
+ BreadcrumbComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: BreadcrumbComponent, selector: "app-chr-breadcrumb", inputs: { crumbs: "crumbs" }, ngImport: i0, template: "<div class=\"w-full flex flex-row flex-wrap dark:!text-gray-400\">\n <div *ngFor=\"let crumb of crumbs\" class=\"w-fit min-w-fit\">\n <button class=\"dark:!text-gray-400\" [disabled]=\"!crumb.link && !crumb.callback\" mat-button\n (click)=\"crumb.callback?.() || crumb.link && navigateTo(crumb.link)\">\n {{ crumb.display }}\n </button>\n {{ (crumb.link || crumb.callback) && \">\" }}\n </div>\n</div>", styles: [""], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: BreadcrumbComponent, decorators: [{
17
+ type: Component,
18
+ args: [{ selector: 'app-chr-breadcrumb', template: "<div class=\"w-full flex flex-row flex-wrap dark:!text-gray-400\">\n <div *ngFor=\"let crumb of crumbs\" class=\"w-fit min-w-fit\">\n <button class=\"dark:!text-gray-400\" [disabled]=\"!crumb.link && !crumb.callback\" mat-button\n (click)=\"crumb.callback?.() || crumb.link && navigateTo(crumb.link)\">\n {{ crumb.display }}\n </button>\n {{ (crumb.link || crumb.callback) && \">\" }}\n </div>\n</div>" }]
19
+ }], ctorParameters: function () { return [{ type: i1.Router }]; }, propDecorators: { crumbs: [{
20
+ type: Input
21
+ }] } });
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJlYWRjcnVtYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaHJ2LWNvbXBvbmVudHMvc3JjL2xpYi9jaHItYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NocnYtY29tcG9uZW50cy9zcmMvbGliL2Noci1icmVhZGNydW1iL2JyZWFkY3J1bWIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7O0FBY2pELE1BQU0sT0FBTyxtQkFBbUI7SUFHOUIsWUFBbUIsTUFBYztRQUFkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFFakMsZUFBVSxHQUFHLENBQUMsR0FBVyxFQUFFLElBQVUsRUFBRSxFQUFFO1lBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDLENBQUM7SUFKa0MsQ0FBQzs7aUhBSDFCLG1CQUFtQjtxR0FBbkIsbUJBQW1CLHdGQ2RoQyx3YUFRTTs0RkRNTyxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0Usb0JBQW9COzZGQUtyQixNQUFNO3NCQUFkLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJyZWFkY3J1bWIge1xuICBkaXNwbGF5OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIGNhbGxiYWNrPzogRnVuY3Rpb247XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1jaHItYnJlYWRjcnVtYicsXG4gIHRlbXBsYXRlVXJsOiAnLi9icmVhZGNydW1iLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYnJlYWRjcnVtYi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBCcmVhZGNydW1iQ29tcG9uZW50IHtcbiAgQElucHV0KCkgY3J1bWJzOiBCcmVhZGNydW1iW107XG5cbiAgY29uc3RydWN0b3IocHVibGljIHJvdXRlcjogUm91dGVyKSB7fVxuXG4gIG5hdmlnYXRlVG8gPSAodXJpOiBzdHJpbmcsIGRhdGE/OiBhbnkpID0+IHtcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJpXSwgeyBzdGF0ZTogZGF0YSB9KTtcbiAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBmbGV4LXJvdyBmbGV4LXdyYXAgZGFyazohdGV4dC1ncmF5LTQwMFwiPlxuICA8ZGl2ICpuZ0Zvcj1cImxldCBjcnVtYiBvZiBjcnVtYnNcIiBjbGFzcz1cInctZml0IG1pbi13LWZpdFwiPlxuICAgIDxidXR0b24gY2xhc3M9XCJkYXJrOiF0ZXh0LWdyYXktNDAwXCIgW2Rpc2FibGVkXT1cIiFjcnVtYi5saW5rICYmICFjcnVtYi5jYWxsYmFja1wiIG1hdC1idXR0b25cbiAgICAgIChjbGljayk9XCJjcnVtYi5jYWxsYmFjaz8uKCkgfHwgY3J1bWIubGluayAmJiBuYXZpZ2F0ZVRvKGNydW1iLmxpbmspXCI+XG4gICAgICB7eyBjcnVtYi5kaXNwbGF5IH19XG4gICAgPC9idXR0b24+XG4gICAge3sgKGNydW1iLmxpbmsgfHwgY3J1bWIuY2FsbGJhY2spICYmIFwiPlwiIH19XG4gIDwvZGl2PlxuPC9kaXY+Il19
@@ -0,0 +1,46 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@angular/common";
4
+ import * as i2 from "@angular/material/icon";
5
+ import * as i3 from "@angular/material/button";
6
+ export class ChrButtonComponent {
7
+ constructor() {
8
+ this.display = '';
9
+ this.icon = '';
10
+ this.color = 'none';
11
+ this.predicate = true;
12
+ this.type = 'none';
13
+ this.disabled = false;
14
+ this.setDisabled = (is) => {
15
+ this.disabled = is;
16
+ };
17
+ this.doClick = () => {
18
+ this.click?.();
19
+ };
20
+ }
21
+ }
22
+ ChrButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChrButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
23
+ ChrButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ChrButtonComponent, selector: "app-chr-button", inputs: { display: "display", icon: "icon", click: "click", color: "color", predicate: "predicate", type: "type", href: "href", target: "target", disabled: "disabled" }, ngImport: i0, template: "<div class=\"grid\">\n <a\n mat-button\n mat-flat-button\n *ngIf=\"predicate\"\n [disabled]=\"disabled\"\n [ngClass]=\"\n type == 'full'\n ? 'grid grid-cols-1 flex-1 self-end content-end items-center justify-center !w-full'\n : ' '\n \"\n [ngClass]=\"type == 'table' ? 'h-14 grid grid-cols-1' : ''\"\n [ngClass]=\"type == 'fixed' ? 'h-14 grid grid-cols-1 w-36' : ''\"\n color=\"{{ color }}\"\n (click)=\"click?.()\"\n [attr.href]=\"href && href\"\n [attr.target]=\"target && target\"\n >\n {{ display }}\n <mat-icon *ngIf=\"icon\">{{ icon }}</mat-icon>\n </a>\n</div>\n<!--\n IF\n Click\n color\n type: table : full \n icon\n-->\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatAnchor, selector: "a[mat-button], a[mat-raised-button], a[mat-flat-button], a[mat-stroked-button]", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matButton", "matAnchor"] }] });
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChrButtonComponent, decorators: [{
25
+ type: Component,
26
+ args: [{ selector: 'app-chr-button', template: "<div class=\"grid\">\n <a\n mat-button\n mat-flat-button\n *ngIf=\"predicate\"\n [disabled]=\"disabled\"\n [ngClass]=\"\n type == 'full'\n ? 'grid grid-cols-1 flex-1 self-end content-end items-center justify-center !w-full'\n : ' '\n \"\n [ngClass]=\"type == 'table' ? 'h-14 grid grid-cols-1' : ''\"\n [ngClass]=\"type == 'fixed' ? 'h-14 grid grid-cols-1 w-36' : ''\"\n color=\"{{ color }}\"\n (click)=\"click?.()\"\n [attr.href]=\"href && href\"\n [attr.target]=\"target && target\"\n >\n {{ display }}\n <mat-icon *ngIf=\"icon\">{{ icon }}</mat-icon>\n </a>\n</div>\n<!--\n IF\n Click\n color\n type: table : full \n icon\n-->\n" }]
27
+ }], ctorParameters: function () { return []; }, propDecorators: { display: [{
28
+ type: Input
29
+ }], icon: [{
30
+ type: Input
31
+ }], click: [{
32
+ type: Input
33
+ }], color: [{
34
+ type: Input
35
+ }], predicate: [{
36
+ type: Input
37
+ }], type: [{
38
+ type: Input
39
+ }], href: [{
40
+ type: Input
41
+ }], target: [{
42
+ type: Input
43
+ }], disabled: [{
44
+ type: Input
45
+ }] } });
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hyLWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jaHJ2LWNvbXBvbmVudHMvc3JjL2xpYi9jaHItYnV0dG9uL2Noci1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hydi1jb21wb25lbnRzL3NyYy9saWIvY2hyLWJ1dHRvbi9jaHItYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7OztBQU9qRCxNQUFNLE9BQU8sa0JBQWtCO0lBVzdCO1FBVlMsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUNyQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRWxCLFVBQUssR0FBMkMsTUFBTSxDQUFDO1FBQ3ZELGNBQVMsR0FBYSxJQUFJLENBQUM7UUFDM0IsU0FBSSxHQUF3QyxNQUFNLENBQUM7UUFHbkQsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUluQyxnQkFBVyxHQUFHLENBQUMsRUFBVyxFQUFFLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDckIsQ0FBQyxDQUFDO1FBRUYsWUFBTyxHQUFHLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLENBQUMsQ0FBQztJQVJhLENBQUM7O2dIQVhMLGtCQUFrQjtvR0FBbEIsa0JBQWtCLGdPQ1AvQix3c0JBNkJBOzRGRHRCYSxrQkFBa0I7a0JBTDlCLFNBQVM7K0JBQ0UsZ0JBQWdCOzBFQUtqQixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2hyLWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaHItYnV0dG9uLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY2hyLWJ1dHRvbi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDaHJCdXR0b25Db21wb25lbnQge1xuICBASW5wdXQoKSBkaXNwbGF5OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaWNvbjogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGNsaWNrPzogRnVuY3Rpb247XG4gIEBJbnB1dCgpIGNvbG9yOiAncHJpbWFyeScgfCAnYWNjZW50JyB8ICd3YXJuJyB8ICdub25lJyA9ICdub25lJztcbiAgQElucHV0KCkgcHJlZGljYXRlPzogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHR5cGU6ICd0YWJsZScgfCAnZnVsbCcgfCAnZml4ZWQnIHwgJ25vbmUnID0gJ25vbmUnO1xuICBASW5wdXQoKSBocmVmPzogc3RyaW5nO1xuICBASW5wdXQoKSB0YXJnZXQ6ICdfYmxhbmsnIHwgJ19wYXJlbnQnIHwgJ19zZWxmJyB8ICdfdG9wJztcbiAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc2V0RGlzYWJsZWQgPSAoaXM6IGJvb2xlYW4pID0+IHtcbiAgICB0aGlzLmRpc2FibGVkID0gaXM7XG4gIH07XG5cbiAgZG9DbGljayA9ICgpID0+IHtcbiAgICB0aGlzLmNsaWNrPy4oKTtcbiAgfTtcbn1cbiIsIjxkaXYgY2xhc3M9XCJncmlkXCI+XG4gIDxhXG4gICAgbWF0LWJ1dHRvblxuICAgIG1hdC1mbGF0LWJ1dHRvblxuICAgICpuZ0lmPVwicHJlZGljYXRlXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgdHlwZSA9PSAnZnVsbCdcbiAgICAgICAgPyAnZ3JpZCBncmlkLWNvbHMtMSBmbGV4LTEgc2VsZi1lbmQgY29udGVudC1lbmQgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyICF3LWZ1bGwnXG4gICAgICAgIDogJyAnXG4gICAgXCJcbiAgICBbbmdDbGFzc109XCJ0eXBlID09ICd0YWJsZScgPyAnaC0xNCBncmlkIGdyaWQtY29scy0xJyA6ICcnXCJcbiAgICBbbmdDbGFzc109XCJ0eXBlID09ICdmaXhlZCcgPyAnaC0xNCBncmlkIGdyaWQtY29scy0xIHctMzYnIDogJydcIlxuICAgIGNvbG9yPVwie3sgY29sb3IgfX1cIlxuICAgIChjbGljayk9XCJjbGljaz8uKClcIlxuICAgIFthdHRyLmhyZWZdPVwiaHJlZiAmJiBocmVmXCJcbiAgICBbYXR0ci50YXJnZXRdPVwidGFyZ2V0ICYmIHRhcmdldFwiXG4gID5cbiAgICB7eyBkaXNwbGF5IH19XG4gICAgPG1hdC1pY29uICpuZ0lmPVwiaWNvblwiPnt7IGljb24gfX08L21hdC1pY29uPlxuICA8L2E+XG48L2Rpdj5cbjwhLS1cbiAgICBJRlxuICAgIENsaWNrXG4gICAgY29sb3JcbiAgICB0eXBlOiB0YWJsZSA6IGZ1bGwgIFxuICAgIGljb25cbi0tPlxuIl19