@ajsf/material 14.0.0 → 17.0.0

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 (65) hide show
  1. package/esm2022/lib/material-design-framework.component.mjs +102 -0
  2. package/{esm2020 → esm2022}/lib/material-design-framework.module.mjs +21 -21
  3. package/{esm2020 → esm2022}/lib/material-design.framework.mjs +4 -4
  4. package/esm2022/lib/widgets/flex-layout-root.component.mjs +98 -0
  5. package/esm2022/lib/widgets/flex-layout-section.component.mjs +357 -0
  6. package/{esm2020 → esm2022}/lib/widgets/material-add-reference.component.mjs +7 -7
  7. package/{esm2020 → esm2022}/lib/widgets/material-button-group.component.mjs +7 -7
  8. package/esm2022/lib/widgets/material-button.component.mjs +76 -0
  9. package/{esm2020 → esm2022}/lib/widgets/material-checkbox.component.mjs +7 -7
  10. package/esm2022/lib/widgets/material-checkboxes.component.mjs +129 -0
  11. package/{esm2020 → esm2022}/lib/widgets/material-chip-list.component.mjs +5 -5
  12. package/esm2022/lib/widgets/material-datepicker.component.mjs +141 -0
  13. package/{esm2020 → esm2022}/lib/widgets/material-file.component.mjs +5 -5
  14. package/esm2022/lib/widgets/material-input.component.mjs +149 -0
  15. package/esm2022/lib/widgets/material-number.component.mjs +145 -0
  16. package/{esm2020 → esm2022}/lib/widgets/material-one-of.component.mjs +5 -5
  17. package/esm2022/lib/widgets/material-radios.component.mjs +122 -0
  18. package/esm2022/lib/widgets/material-select.component.mjs +186 -0
  19. package/esm2022/lib/widgets/material-slider.component.mjs +77 -0
  20. package/{esm2020 → esm2022}/lib/widgets/material-stepper.component.mjs +5 -5
  21. package/esm2022/lib/widgets/material-tabs.component.mjs +96 -0
  22. package/esm2022/lib/widgets/material-textarea.component.mjs +134 -0
  23. package/{fesm2020 → fesm2022}/ajsf-material.mjs +204 -200
  24. package/fesm2022/ajsf-material.mjs.map +1 -0
  25. package/lib/material-design-framework.component.d.ts +1 -1
  26. package/lib/material-design-framework.module.d.ts +2 -2
  27. package/lib/widgets/flex-layout-root.component.d.ts +1 -1
  28. package/lib/widgets/flex-layout-section.component.d.ts +1 -1
  29. package/lib/widgets/material-add-reference.component.d.ts +1 -1
  30. package/lib/widgets/material-button-group.component.d.ts +1 -1
  31. package/lib/widgets/material-button.component.d.ts +1 -1
  32. package/lib/widgets/material-checkbox.component.d.ts +1 -1
  33. package/lib/widgets/material-checkboxes.component.d.ts +1 -1
  34. package/lib/widgets/material-chip-list.component.d.ts +1 -1
  35. package/lib/widgets/material-datepicker.component.d.ts +1 -1
  36. package/lib/widgets/material-file.component.d.ts +1 -1
  37. package/lib/widgets/material-input.component.d.ts +1 -1
  38. package/lib/widgets/material-number.component.d.ts +1 -1
  39. package/lib/widgets/material-one-of.component.d.ts +1 -1
  40. package/lib/widgets/material-radios.component.d.ts +1 -1
  41. package/lib/widgets/material-select.component.d.ts +1 -1
  42. package/lib/widgets/material-slider.component.d.ts +1 -1
  43. package/lib/widgets/material-stepper.component.d.ts +1 -1
  44. package/lib/widgets/material-tabs.component.d.ts +1 -1
  45. package/lib/widgets/material-textarea.component.d.ts +1 -1
  46. package/package.json +11 -17
  47. package/esm2020/lib/material-design-framework.component.mjs +0 -102
  48. package/esm2020/lib/widgets/flex-layout-root.component.mjs +0 -98
  49. package/esm2020/lib/widgets/flex-layout-section.component.mjs +0 -357
  50. package/esm2020/lib/widgets/material-button.component.mjs +0 -76
  51. package/esm2020/lib/widgets/material-checkboxes.component.mjs +0 -129
  52. package/esm2020/lib/widgets/material-datepicker.component.mjs +0 -141
  53. package/esm2020/lib/widgets/material-input.component.mjs +0 -149
  54. package/esm2020/lib/widgets/material-number.component.mjs +0 -145
  55. package/esm2020/lib/widgets/material-radios.component.mjs +0 -122
  56. package/esm2020/lib/widgets/material-select.component.mjs +0 -186
  57. package/esm2020/lib/widgets/material-slider.component.mjs +0 -83
  58. package/esm2020/lib/widgets/material-tabs.component.mjs +0 -86
  59. package/esm2020/lib/widgets/material-textarea.component.mjs +0 -134
  60. package/fesm2015/ajsf-material.mjs +0 -2332
  61. package/fesm2015/ajsf-material.mjs.map +0 -1
  62. package/fesm2020/ajsf-material.mjs.map +0 -1
  63. /package/{esm2020 → esm2022}/ajsf-material.mjs +0 -0
  64. /package/{esm2020 → esm2022}/lib/widgets/public_api.mjs +0 -0
  65. /package/{esm2020 → esm2022}/public_api.mjs +0 -0
@@ -1,134 +0,0 @@
1
- import { Component, Inject, Input, Optional } from '@angular/core';
2
- import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
3
- import * as i0 from "@angular/core";
4
- import * as i1 from "@ajsf/core";
5
- import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/forms";
7
- import * as i4 from "@angular/material/form-field";
8
- import * as i5 from "@angular/material/input";
9
- export class MaterialTextareaComponent {
10
- constructor(matFormFieldDefaultOptions, jsf) {
11
- this.matFormFieldDefaultOptions = matFormFieldDefaultOptions;
12
- this.jsf = jsf;
13
- this.controlDisabled = false;
14
- this.boundControl = false;
15
- }
16
- ngOnInit() {
17
- this.options = this.layoutNode.options || {};
18
- this.jsf.initializeControl(this);
19
- if (!this.options.notitle && !this.options.description && this.options.placeholder) {
20
- this.options.description = this.options.placeholder;
21
- }
22
- }
23
- updateValue(event) {
24
- this.jsf.updateValue(this, event.target.value);
25
- }
26
- }
27
- MaterialTextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MaterialTextareaComponent, deps: [{ token: MAT_FORM_FIELD_DEFAULT_OPTIONS, optional: true }, { token: i1.JsonSchemaFormService }], target: i0.ɵɵFactoryTarget.Component });
28
- MaterialTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: MaterialTextareaComponent, selector: "material-textarea-widget", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex" }, ngImport: i0, template: `
29
- <mat-form-field [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'standard'"
30
- [class]="options?.htmlClass || ''"
31
- [floatLabel]="options?.floatLabel || matFormFieldDefaultOptions?.floatLabel || (options?.notitle ? 'never' : 'auto')"
32
- [hideRequiredMarker]="options?.hideRequired ? 'true' : 'false'"
33
- [style.width]="'100%'">
34
- <mat-label *ngIf="!options?.notitle">{{options?.title}}</mat-label>
35
- <span matPrefix *ngIf="options?.prefix || options?.fieldAddonLeft"
36
- [innerHTML]="options?.prefix || options?.fieldAddonLeft"></span>
37
- <textarea matInput *ngIf="boundControl"
38
- [formControl]="formControl"
39
- [attr.aria-describedby]="'control' + layoutNode?._id + 'Status'"
40
- [attr.list]="'control' + layoutNode?._id + 'Autocomplete'"
41
- [attr.maxlength]="options?.maxLength"
42
- [attr.minlength]="options?.minLength"
43
- [attr.pattern]="options?.pattern"
44
- [required]="options?.required"
45
- [id]="'control' + layoutNode?._id"
46
- [name]="controlName"
47
- [placeholder]="options?.notitle ? options?.placeholder : options?.title"
48
- [readonly]="options?.readonly ? 'readonly' : null"
49
- [style.width]="'100%'"
50
- (blur)="options.showErrors = true"></textarea>
51
- <textarea matInput *ngIf="!boundControl"
52
- [attr.aria-describedby]="'control' + layoutNode?._id + 'Status'"
53
- [attr.list]="'control' + layoutNode?._id + 'Autocomplete'"
54
- [attr.maxlength]="options?.maxLength"
55
- [attr.minlength]="options?.minLength"
56
- [attr.pattern]="options?.pattern"
57
- [required]="options?.required"
58
- [disabled]="controlDisabled"
59
- [id]="'control' + layoutNode?._id"
60
- [name]="controlName"
61
- [placeholder]="options?.notitle ? options?.placeholder : options?.title"
62
- [readonly]="options?.readonly ? 'readonly' : null"
63
- [style.width]="'100%'"
64
- [value]="controlValue"
65
- (input)="updateValue($event)"
66
- (blur)="options.showErrors = true"></textarea>
67
- <span matSuffix *ngIf="options?.suffix || options?.fieldAddonRight"
68
- [innerHTML]="options?.suffix || options?.fieldAddonRight"></span>
69
- <mat-hint *ngIf="options?.description && (!options?.showErrors || !options?.errorMessage)"
70
- align="end" [innerHTML]="options?.description"></mat-hint>
71
- </mat-form-field>
72
- <mat-error *ngIf="options?.showErrors && options?.errorMessage"
73
- [innerHTML]="options?.errorMessage"></mat-error>`, isInline: true, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}::ng-deep json-schema-form mat-form-field .mat-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{width:auto;width:initial}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.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: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i3.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatHint, selector: "mat-hint", inputs: ["align", "id"] }, { kind: "directive", type: i4.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix]" }, { kind: "directive", type: i4.MatSuffix, selector: "[matSuffix]" }, { kind: "directive", type: i5.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"] }] });
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: MaterialTextareaComponent, decorators: [{
75
- type: Component,
76
- args: [{ selector: 'material-textarea-widget', template: `
77
- <mat-form-field [appearance]="options?.appearance || matFormFieldDefaultOptions?.appearance || 'standard'"
78
- [class]="options?.htmlClass || ''"
79
- [floatLabel]="options?.floatLabel || matFormFieldDefaultOptions?.floatLabel || (options?.notitle ? 'never' : 'auto')"
80
- [hideRequiredMarker]="options?.hideRequired ? 'true' : 'false'"
81
- [style.width]="'100%'">
82
- <mat-label *ngIf="!options?.notitle">{{options?.title}}</mat-label>
83
- <span matPrefix *ngIf="options?.prefix || options?.fieldAddonLeft"
84
- [innerHTML]="options?.prefix || options?.fieldAddonLeft"></span>
85
- <textarea matInput *ngIf="boundControl"
86
- [formControl]="formControl"
87
- [attr.aria-describedby]="'control' + layoutNode?._id + 'Status'"
88
- [attr.list]="'control' + layoutNode?._id + 'Autocomplete'"
89
- [attr.maxlength]="options?.maxLength"
90
- [attr.minlength]="options?.minLength"
91
- [attr.pattern]="options?.pattern"
92
- [required]="options?.required"
93
- [id]="'control' + layoutNode?._id"
94
- [name]="controlName"
95
- [placeholder]="options?.notitle ? options?.placeholder : options?.title"
96
- [readonly]="options?.readonly ? 'readonly' : null"
97
- [style.width]="'100%'"
98
- (blur)="options.showErrors = true"></textarea>
99
- <textarea matInput *ngIf="!boundControl"
100
- [attr.aria-describedby]="'control' + layoutNode?._id + 'Status'"
101
- [attr.list]="'control' + layoutNode?._id + 'Autocomplete'"
102
- [attr.maxlength]="options?.maxLength"
103
- [attr.minlength]="options?.minLength"
104
- [attr.pattern]="options?.pattern"
105
- [required]="options?.required"
106
- [disabled]="controlDisabled"
107
- [id]="'control' + layoutNode?._id"
108
- [name]="controlName"
109
- [placeholder]="options?.notitle ? options?.placeholder : options?.title"
110
- [readonly]="options?.readonly ? 'readonly' : null"
111
- [style.width]="'100%'"
112
- [value]="controlValue"
113
- (input)="updateValue($event)"
114
- (blur)="options.showErrors = true"></textarea>
115
- <span matSuffix *ngIf="options?.suffix || options?.fieldAddonRight"
116
- [innerHTML]="options?.suffix || options?.fieldAddonRight"></span>
117
- <mat-hint *ngIf="options?.description && (!options?.showErrors || !options?.errorMessage)"
118
- align="end" [innerHTML]="options?.description"></mat-hint>
119
- </mat-form-field>
120
- <mat-error *ngIf="options?.showErrors && options?.errorMessage"
121
- [innerHTML]="options?.errorMessage"></mat-error>`, styles: ["mat-error{font-size:75%;margin-top:-1rem;margin-bottom:.5rem}::ng-deep json-schema-form mat-form-field .mat-form-field-wrapper .mat-form-field-flex .mat-form-field-infix{width:auto;width:initial}\n"] }]
122
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
123
- type: Inject,
124
- args: [MAT_FORM_FIELD_DEFAULT_OPTIONS]
125
- }, {
126
- type: Optional
127
- }] }, { type: i1.JsonSchemaFormService }]; }, propDecorators: { layoutNode: [{
128
- type: Input
129
- }], layoutIndex: [{
130
- type: Input
131
- }], dataIndex: [{
132
- type: Input
133
- }] } });
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwtdGV4dGFyZWEuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWpzZi1tYXRlcmlhbC9zcmMvbGliL3dpZGdldHMvbWF0ZXJpYWwtdGV4dGFyZWEuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxRQUFRLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFekUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7QUF5RDlFLE1BQU0sT0FBTyx5QkFBeUI7SUFXcEMsWUFDNkQsMEJBQTBCLEVBQzdFLEdBQTBCO1FBRHlCLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FBQTtRQUM3RSxRQUFHLEdBQUgsR0FBRyxDQUF1QjtRQVRwQyxvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixpQkFBWSxHQUFHLEtBQUssQ0FBQztJQVNqQixDQUFDO0lBRUwsUUFBUTtRQUNOLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO1FBQzdDLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDbEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7U0FDckQ7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQUs7UUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNqRCxDQUFDOztzSEExQlUseUJBQXlCLGtCQVkxQiw4QkFBOEI7MEdBWjdCLHlCQUF5QiwwSkFwRDFCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dURBNkMyQzsyRkFPMUMseUJBQXlCO2tCQXZEckMsU0FBUzsrQkFFRSwwQkFBMEIsWUFDMUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozt1REE2QzJDOzswQkFtQmxELE1BQU07MkJBQUMsOEJBQThCOzswQkFBRyxRQUFRO2dGQUwxQyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Q29tcG9uZW50LCBJbmplY3QsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEpzb25TY2hlbWFGb3JtU2VydmljZSB9IGZyb20gJ0BhanNmL2NvcmUnO1xuaW1wb3J0IHsgTUFUX0ZPUk1fRklFTERfREVGQVVMVF9PUFRJT05TIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5cbkBDb21wb25lbnQoe1xuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6Y29tcG9uZW50LXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnbWF0ZXJpYWwtdGV4dGFyZWEtd2lkZ2V0JyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwib3B0aW9ucz8uYXBwZWFyYW5jZSB8fCBtYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucz8uYXBwZWFyYW5jZSB8fCAnc3RhbmRhcmQnXCJcbiAgICAgIFtjbGFzc109XCJvcHRpb25zPy5odG1sQ2xhc3MgfHwgJydcIlxuICAgICAgW2Zsb2F0TGFiZWxdPVwib3B0aW9ucz8uZmxvYXRMYWJlbCB8fCBtYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucz8uZmxvYXRMYWJlbCB8fCAob3B0aW9ucz8ubm90aXRsZSA/ICduZXZlcicgOiAnYXV0bycpXCJcbiAgICAgIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwib3B0aW9ucz8uaGlkZVJlcXVpcmVkID8gJ3RydWUnIDogJ2ZhbHNlJ1wiXG4gICAgICBbc3R5bGUud2lkdGhdPVwiJzEwMCUnXCI+XG4gICAgICA8bWF0LWxhYmVsICpuZ0lmPVwiIW9wdGlvbnM/Lm5vdGl0bGVcIj57e29wdGlvbnM/LnRpdGxlfX08L21hdC1sYWJlbD5cbiAgICAgIDxzcGFuIG1hdFByZWZpeCAqbmdJZj1cIm9wdGlvbnM/LnByZWZpeCB8fCBvcHRpb25zPy5maWVsZEFkZG9uTGVmdFwiXG4gICAgICAgIFtpbm5lckhUTUxdPVwib3B0aW9ucz8ucHJlZml4IHx8IG9wdGlvbnM/LmZpZWxkQWRkb25MZWZ0XCI+PC9zcGFuPlxuICAgICAgPHRleHRhcmVhIG1hdElucHV0ICpuZ0lmPVwiYm91bmRDb250cm9sXCJcbiAgICAgICAgW2Zvcm1Db250cm9sXT1cImZvcm1Db250cm9sXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCInY29udHJvbCcgKyBsYXlvdXROb2RlPy5faWQgKyAnU3RhdHVzJ1wiXG4gICAgICAgIFthdHRyLmxpc3RdPVwiJ2NvbnRyb2wnICsgbGF5b3V0Tm9kZT8uX2lkICsgJ0F1dG9jb21wbGV0ZSdcIlxuICAgICAgICBbYXR0ci5tYXhsZW5ndGhdPVwib3B0aW9ucz8ubWF4TGVuZ3RoXCJcbiAgICAgICAgW2F0dHIubWlubGVuZ3RoXT1cIm9wdGlvbnM/Lm1pbkxlbmd0aFwiXG4gICAgICAgIFthdHRyLnBhdHRlcm5dPVwib3B0aW9ucz8ucGF0dGVyblwiXG4gICAgICAgIFtyZXF1aXJlZF09XCJvcHRpb25zPy5yZXF1aXJlZFwiXG4gICAgICAgIFtpZF09XCInY29udHJvbCcgKyBsYXlvdXROb2RlPy5faWRcIlxuICAgICAgICBbbmFtZV09XCJjb250cm9sTmFtZVwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJvcHRpb25zPy5ub3RpdGxlID8gb3B0aW9ucz8ucGxhY2Vob2xkZXIgOiBvcHRpb25zPy50aXRsZVwiXG4gICAgICAgIFtyZWFkb25seV09XCJvcHRpb25zPy5yZWFkb25seSA/ICdyZWFkb25seScgOiBudWxsXCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cIicxMDAlJ1wiXG4gICAgICAgIChibHVyKT1cIm9wdGlvbnMuc2hvd0Vycm9ycyA9IHRydWVcIj48L3RleHRhcmVhPlxuICAgICAgPHRleHRhcmVhIG1hdElucHV0ICpuZ0lmPVwiIWJvdW5kQ29udHJvbFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiJ2NvbnRyb2wnICsgbGF5b3V0Tm9kZT8uX2lkICsgJ1N0YXR1cydcIlxuICAgICAgICBbYXR0ci5saXN0XT1cIidjb250cm9sJyArIGxheW91dE5vZGU/Ll9pZCArICdBdXRvY29tcGxldGUnXCJcbiAgICAgICAgW2F0dHIubWF4bGVuZ3RoXT1cIm9wdGlvbnM/Lm1heExlbmd0aFwiXG4gICAgICAgIFthdHRyLm1pbmxlbmd0aF09XCJvcHRpb25zPy5taW5MZW5ndGhcIlxuICAgICAgICBbYXR0ci5wYXR0ZXJuXT1cIm9wdGlvbnM/LnBhdHRlcm5cIlxuICAgICAgICBbcmVxdWlyZWRdPVwib3B0aW9ucz8ucmVxdWlyZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiY29udHJvbERpc2FibGVkXCJcbiAgICAgICAgW2lkXT1cIidjb250cm9sJyArIGxheW91dE5vZGU/Ll9pZFwiXG4gICAgICAgIFtuYW1lXT1cImNvbnRyb2xOYW1lXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm9wdGlvbnM/Lm5vdGl0bGUgPyBvcHRpb25zPy5wbGFjZWhvbGRlciA6IG9wdGlvbnM/LnRpdGxlXCJcbiAgICAgICAgW3JlYWRvbmx5XT1cIm9wdGlvbnM/LnJlYWRvbmx5ID8gJ3JlYWRvbmx5JyA6IG51bGxcIlxuICAgICAgICBbc3R5bGUud2lkdGhdPVwiJzEwMCUnXCJcbiAgICAgICAgW3ZhbHVlXT1cImNvbnRyb2xWYWx1ZVwiXG4gICAgICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZSgkZXZlbnQpXCJcbiAgICAgICAgKGJsdXIpPVwib3B0aW9ucy5zaG93RXJyb3JzID0gdHJ1ZVwiPjwvdGV4dGFyZWE+XG4gICAgICA8c3BhbiBtYXRTdWZmaXggKm5nSWY9XCJvcHRpb25zPy5zdWZmaXggfHwgb3B0aW9ucz8uZmllbGRBZGRvblJpZ2h0XCJcbiAgICAgICAgW2lubmVySFRNTF09XCJvcHRpb25zPy5zdWZmaXggfHwgb3B0aW9ucz8uZmllbGRBZGRvblJpZ2h0XCI+PC9zcGFuPlxuICAgICAgPG1hdC1oaW50ICpuZ0lmPVwib3B0aW9ucz8uZGVzY3JpcHRpb24gJiYgKCFvcHRpb25zPy5zaG93RXJyb3JzIHx8ICFvcHRpb25zPy5lcnJvck1lc3NhZ2UpXCJcbiAgICAgICAgYWxpZ249XCJlbmRcIiBbaW5uZXJIVE1MXT1cIm9wdGlvbnM/LmRlc2NyaXB0aW9uXCI+PC9tYXQtaGludD5cbiAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJvcHRpb25zPy5zaG93RXJyb3JzICYmIG9wdGlvbnM/LmVycm9yTWVzc2FnZVwiXG4gICAgICBbaW5uZXJIVE1MXT1cIm9wdGlvbnM/LmVycm9yTWVzc2FnZVwiPjwvbWF0LWVycm9yPmAsXG4gIHN0eWxlczogW2BcbiAgICBtYXQtZXJyb3IgeyBmb250LXNpemU6IDc1JTsgbWFyZ2luLXRvcDogLTFyZW07IG1hcmdpbi1ib3R0b206IDAuNXJlbTsgfVxuICAgIDo6bmctZGVlcCBqc29uLXNjaGVtYS1mb3JtIG1hdC1mb3JtLWZpZWxkIC5tYXQtZm9ybS1maWVsZC13cmFwcGVyIC5tYXQtZm9ybS1maWVsZC1mbGV4XG4gICAgICAubWF0LWZvcm0tZmllbGQtaW5maXggeyB3aWR0aDogaW5pdGlhbDsgfVxuICBgXSxcbn0pXG5leHBvcnQgY2xhc3MgTWF0ZXJpYWxUZXh0YXJlYUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XG4gIGNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIGNvbnRyb2xWYWx1ZTogYW55O1xuICBjb250cm9sRGlzYWJsZWQgPSBmYWxzZTtcbiAgYm91bmRDb250cm9sID0gZmFsc2U7XG4gIG9wdGlvbnM6IGFueTtcbiAgQElucHV0KCkgbGF5b3V0Tm9kZTogYW55O1xuICBASW5wdXQoKSBsYXlvdXRJbmRleDogbnVtYmVyW107XG4gIEBJbnB1dCgpIGRhdGFJbmRleDogbnVtYmVyW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChNQVRfRk9STV9GSUVMRF9ERUZBVUxUX09QVElPTlMpIEBPcHRpb25hbCgpIHB1YmxpYyBtYXRGb3JtRmllbGREZWZhdWx0T3B0aW9ucyxcbiAgICBwcml2YXRlIGpzZjogSnNvblNjaGVtYUZvcm1TZXJ2aWNlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5sYXlvdXROb2RlLm9wdGlvbnMgfHwge307XG4gICAgdGhpcy5qc2YuaW5pdGlhbGl6ZUNvbnRyb2wodGhpcyk7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMubm90aXRsZSAmJiAhdGhpcy5vcHRpb25zLmRlc2NyaXB0aW9uICYmIHRoaXMub3B0aW9ucy5wbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5vcHRpb25zLmRlc2NyaXB0aW9uID0gdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZVZhbHVlKGV2ZW50KSB7XG4gICAgdGhpcy5qc2YudXBkYXRlVmFsdWUodGhpcywgZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgfVxufVxuIl19