@tilde-nlp/ngx-common 6.0.22 → 6.0.24

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.
@@ -3,101 +3,70 @@ import { FormControl, FormGroup } from '@angular/forms';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "@ngx-translate/core";
5
5
  import * as i2 from "@angular/common";
6
- import * as i3 from "@angular/material/input";
7
- import * as i4 from "@angular/material/form-field";
8
- import * as i5 from "@ngbracket/ngx-layout/flex";
9
- import * as i6 from "@angular/material/select";
10
- import * as i7 from "@angular/material/core";
11
- import * as i8 from "@angular/forms";
12
- import * as i9 from "@angular/material/tooltip";
13
- import * as i10 from "@angular/material/button";
14
- import * as i11 from "@angular/material/chips";
15
- import * as i12 from "@angular/material/icon";
16
- import * as i13 from "../pipes/sort-translations-by-property/sort-translations-by-property.pipe";
17
- import * as i14 from "../pipes/sort-alphabetically/sort-alphabetically.pipe";
6
+ import * as i3 from "@ngbracket/ngx-layout/flex";
7
+ import * as i4 from "@angular/material/select";
8
+ import * as i5 from "@angular/material/core";
9
+ import * as i6 from "@angular/forms";
10
+ import * as i7 from "@angular/material/button";
11
+ import * as i8 from "@angular/material/chips";
12
+ import * as i9 from "@angular/material/icon";
13
+ import * as i10 from "../pipes/sort-translations-by-property/sort-translations-by-property.pipe";
14
+ import * as i11 from "../pipes/sort-alphabetically/sort-alphabetically.pipe";
18
15
  const _c0 = ["filterWrapper"];
19
16
  const _c1 = ["optionSearchInput"];
20
17
  const _c2 = a0 => ({ default: a0 });
21
- function FilterBarComponent_div_0_mat_form_field_3_span_3_Template(rf, ctx) { if (rf & 1) {
22
- i0.ɵɵelementStart(0, "span", 16);
23
- i0.ɵɵpipe(1, "translate");
24
- i0.ɵɵtext(2);
25
- i0.ɵɵelementEnd();
26
- } if (rf & 2) {
27
- const ctx_r0 = i0.ɵɵnextContext(3);
28
- i0.ɵɵproperty("matTooltip", i0.ɵɵpipeBind1(1, 2, ctx_r0.searchTooltip));
29
- i0.ɵɵadvance(2);
30
- i0.ɵɵtextInterpolate1(" ", ctx_r0.suffixIcon, " ");
31
- } }
32
- function FilterBarComponent_div_0_mat_form_field_3_Template(rf, ctx) { if (rf & 1) {
33
- i0.ɵɵelementStart(0, "mat-form-field", 12)(1, "span", 13);
34
- i0.ɵɵtext(2);
35
- i0.ɵɵelementEnd();
36
- i0.ɵɵtemplate(3, FilterBarComponent_div_0_mat_form_field_3_span_3_Template, 3, 4, "span", 14);
37
- i0.ɵɵelement(4, "input", 15);
38
- i0.ɵɵpipe(5, "translate");
39
- i0.ɵɵelementEnd();
40
- } if (rf & 2) {
41
- const ctx_r0 = i0.ɵɵnextContext(2);
42
- i0.ɵɵadvance(2);
43
- i0.ɵɵtextInterpolate1(" ", ctx_r0.prefixIcon, " ");
44
- i0.ɵɵadvance();
45
- i0.ɵɵproperty("ngIf", ctx_r0.showSuffixIcon);
46
- i0.ɵɵadvance();
47
- i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(5, 4, ctx_r0.searchTitle))("formControlName", ctx_r0.inputFormControlName);
48
- } }
49
- function FilterBarComponent_div_0_ng_container_5_span_6_Template(rf, ctx) { if (rf & 1) {
50
- i0.ɵɵelementStart(0, "span", 21);
18
+ function FilterBarComponent_div_0_ng_container_4_span_6_Template(rf, ctx) { if (rf & 1) {
19
+ i0.ɵɵelementStart(0, "span", 15);
51
20
  i0.ɵɵtext(1);
52
21
  i0.ɵɵelementEnd();
53
22
  } if (rf & 2) {
54
- const filter_r4 = i0.ɵɵnextContext().$implicit;
23
+ const filter_r3 = i0.ɵɵnextContext().$implicit;
55
24
  i0.ɵɵadvance();
56
- i0.ɵɵtextInterpolate1("(", filter_r4.selectedValues == null ? null : filter_r4.selectedValues.length, ")");
25
+ i0.ɵɵtextInterpolate1("(", filter_r3.selectedValues == null ? null : filter_r3.selectedValues.length, ")");
57
26
  } }
58
- function FilterBarComponent_div_0_ng_container_5_ng_container_11_Template(rf, ctx) { if (rf & 1) {
27
+ function FilterBarComponent_div_0_ng_container_4_ng_container_11_Template(rf, ctx) { if (rf & 1) {
59
28
  const _r7 = i0.ɵɵgetCurrentView();
60
29
  i0.ɵɵelementContainerStart(0);
61
- i0.ɵɵelementStart(1, "input", 22, 2);
30
+ i0.ɵɵelementStart(1, "input", 16, 2);
62
31
  i0.ɵɵpipe(3, "translate");
63
- i0.ɵɵlistener("keyup", function FilterBarComponent_div_0_ng_container_5_ng_container_11_Template_input_keyup_1_listener($event) { i0.ɵɵrestoreView(_r7); const filter_r4 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.filterOptions($event, filter_r4)); })("keydown", function FilterBarComponent_div_0_ng_container_5_ng_container_11_Template_input_keydown_1_listener($event) { i0.ɵɵrestoreView(_r7); return i0.ɵɵresetView($event.stopPropagation()); });
32
+ i0.ɵɵlistener("keyup", function FilterBarComponent_div_0_ng_container_4_ng_container_11_Template_input_keyup_1_listener($event) { i0.ɵɵrestoreView(_r7); const filter_r3 = i0.ɵɵnextContext().$implicit; const ctx_r5 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r5.filterOptions($event, filter_r3)); })("keydown", function FilterBarComponent_div_0_ng_container_4_ng_container_11_Template_input_keydown_1_listener($event) { i0.ɵɵrestoreView(_r7); return i0.ɵɵresetView($event.stopPropagation()); });
64
33
  i0.ɵɵelementEnd();
65
34
  i0.ɵɵelementContainerEnd();
66
35
  } if (rf & 2) {
67
36
  let tmp_9_0;
68
- const filter_r4 = i0.ɵɵnextContext().$implicit;
37
+ const filter_r3 = i0.ɵɵnextContext().$implicit;
69
38
  i0.ɵɵadvance();
70
- i0.ɵɵclassProp("hidden", filter_r4.values.length < 10);
71
- i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(3, 3, (tmp_9_0 = filter_r4.search == null ? null : filter_r4.search.placeholder) !== null && tmp_9_0 !== undefined ? tmp_9_0 : ""));
39
+ i0.ɵɵclassProp("hidden", filter_r3.values.length < 10);
40
+ i0.ɵɵproperty("placeholder", i0.ɵɵpipeBind1(3, 3, (tmp_9_0 = filter_r3.search == null ? null : filter_r3.search.placeholder) !== null && tmp_9_0 !== undefined ? tmp_9_0 : ""));
72
41
  } }
73
- function FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
42
+ function FilterBarComponent_div_0_ng_container_4_ng_container_12_ng_container_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
74
43
  i0.ɵɵelementContainerStart(0);
75
- i0.ɵɵelementStart(1, "mat-option", 24);
44
+ i0.ɵɵelementStart(1, "mat-option", 18);
76
45
  i0.ɵɵtext(2);
77
46
  i0.ɵɵpipe(3, "titlecase");
78
47
  i0.ɵɵelementEnd();
79
48
  i0.ɵɵelementContainerEnd();
80
49
  } if (rf & 2) {
81
50
  const value_r8 = ctx.$implicit;
82
- const filter_r4 = i0.ɵɵnextContext(3).$implicit;
51
+ const filter_r3 = i0.ɵɵnextContext(3).$implicit;
83
52
  i0.ɵɵadvance();
84
- i0.ɵɵclassProp("hidden", (filter_r4.search == null ? null : filter_r4.search.searchCriteria) && value_r8.isSelected && !value_r8.matchesSearchCriteria);
85
- i0.ɵɵproperty("disabled", (filter_r4.singleSelection == null ? null : filter_r4.singleSelection.selected) && (filter_r4.singleSelection == null ? null : filter_r4.singleSelection.value) !== value_r8.value)("value", value_r8);
53
+ i0.ɵɵclassProp("hidden", (filter_r3.search == null ? null : filter_r3.search.searchCriteria) && value_r8.isSelected && !value_r8.matchesSearchCriteria);
54
+ i0.ɵɵproperty("disabled", (filter_r3.singleSelection == null ? null : filter_r3.singleSelection.selected) && (filter_r3.singleSelection == null ? null : filter_r3.singleSelection.value) !== value_r8.value)("value", value_r8);
86
55
  i0.ɵɵadvance();
87
- i0.ɵɵtextInterpolate1(" ", filter_r4.disableTitleCase ? value_r8.key : i0.ɵɵpipeBind1(3, 5, value_r8.key), " ");
56
+ i0.ɵɵtextInterpolate1(" ", filter_r3.disableTitleCase ? value_r8.key : i0.ɵɵpipeBind1(3, 5, value_r8.key), " ");
88
57
  } }
89
- function FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_container_1_Template(rf, ctx) { if (rf & 1) {
58
+ function FilterBarComponent_div_0_ng_container_4_ng_container_12_ng_container_1_Template(rf, ctx) { if (rf & 1) {
90
59
  i0.ɵɵelementContainerStart(0);
91
- i0.ɵɵtemplate(1, FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_container_1_ng_container_1_Template, 4, 7, "ng-container", 6);
60
+ i0.ɵɵtemplate(1, FilterBarComponent_div_0_ng_container_4_ng_container_12_ng_container_1_ng_container_1_Template, 4, 7, "ng-container", 6);
92
61
  i0.ɵɵpipe(2, "sortAlphabetically");
93
62
  i0.ɵɵelementContainerEnd();
94
63
  } if (rf & 2) {
95
64
  let tmp_9_0;
96
- const filter_r4 = i0.ɵɵnextContext(2).$implicit;
65
+ const filter_r3 = i0.ɵɵnextContext(2).$implicit;
97
66
  i0.ɵɵadvance();
98
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(2, 1, (tmp_9_0 = filter_r4.search == null ? null : filter_r4.search.filteredValues) !== null && tmp_9_0 !== undefined ? tmp_9_0 : filter_r4.values, "key"));
67
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind2(2, 1, (tmp_9_0 = filter_r3.search == null ? null : filter_r3.search.filteredValues) !== null && tmp_9_0 !== undefined ? tmp_9_0 : filter_r3.values, "key"));
99
68
  } }
100
- function FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_template_2_ng_container_0_ng_container_2_Template(rf, ctx) { if (rf & 1) {
69
+ function FilterBarComponent_div_0_ng_container_4_ng_container_12_ng_template_2_ng_container_0_ng_container_2_Template(rf, ctx) { if (rf & 1) {
101
70
  i0.ɵɵelementContainerStart(0);
102
71
  i0.ɵɵtext(1);
103
72
  i0.ɵɵpipe(2, "titlecase");
@@ -108,127 +77,126 @@ function FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_template_2_n
108
77
  i0.ɵɵadvance();
109
78
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(3, 3, value_r9.key, i0.ɵɵpureFunction1(6, _c2, i0.ɵɵpipeBind1(2, 1, value_r9.value))), " ");
110
79
  } }
111
- function FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_template_2_ng_container_0_ng_template_3_Template(rf, ctx) { if (rf & 1) {
80
+ function FilterBarComponent_div_0_ng_container_4_ng_container_12_ng_template_2_ng_container_0_ng_template_3_Template(rf, ctx) { if (rf & 1) {
112
81
  i0.ɵɵtext(0);
113
82
  i0.ɵɵpipe(1, "translate");
114
83
  } if (rf & 2) {
115
84
  const value_r9 = i0.ɵɵnextContext().$implicit;
116
85
  i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind2(1, 1, value_r9.key, i0.ɵɵpureFunction1(4, _c2, value_r9.value)), " ");
117
86
  } }
118
- function FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
87
+ function FilterBarComponent_div_0_ng_container_4_ng_container_12_ng_template_2_ng_container_0_Template(rf, ctx) { if (rf & 1) {
119
88
  i0.ɵɵelementContainerStart(0);
120
- i0.ɵɵelementStart(1, "mat-option", 24);
121
- i0.ɵɵtemplate(2, FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_template_2_ng_container_0_ng_container_2_Template, 4, 8, "ng-container", 23)(3, FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_template_2_ng_container_0_ng_template_3_Template, 2, 6, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
89
+ i0.ɵɵelementStart(1, "mat-option", 18);
90
+ i0.ɵɵtemplate(2, FilterBarComponent_div_0_ng_container_4_ng_container_12_ng_template_2_ng_container_0_ng_container_2_Template, 4, 8, "ng-container", 17)(3, FilterBarComponent_div_0_ng_container_4_ng_container_12_ng_template_2_ng_container_0_ng_template_3_Template, 2, 6, "ng-template", null, 4, i0.ɵɵtemplateRefExtractor);
122
91
  i0.ɵɵelementEnd();
123
92
  i0.ɵɵelementContainerEnd();
124
93
  } if (rf & 2) {
125
94
  const value_r9 = ctx.$implicit;
126
95
  const defaultCase_r10 = i0.ɵɵreference(4);
127
- const filter_r4 = i0.ɵɵnextContext(3).$implicit;
96
+ const filter_r3 = i0.ɵɵnextContext(3).$implicit;
128
97
  i0.ɵɵadvance();
129
- i0.ɵɵclassProp("hidden", (filter_r4.search == null ? null : filter_r4.search.searchCriteria) && value_r9.isSelected && !value_r9.matchesSearchCriteria);
130
- i0.ɵɵproperty("disabled", (filter_r4.singleSelection == null ? null : filter_r4.singleSelection.selected) && (filter_r4.singleSelection == null ? null : filter_r4.singleSelection.value) !== value_r9.value)("value", value_r9);
98
+ i0.ɵɵclassProp("hidden", (filter_r3.search == null ? null : filter_r3.search.searchCriteria) && value_r9.isSelected && !value_r9.matchesSearchCriteria);
99
+ i0.ɵɵproperty("disabled", (filter_r3.singleSelection == null ? null : filter_r3.singleSelection.selected) && (filter_r3.singleSelection == null ? null : filter_r3.singleSelection.value) !== value_r9.value)("value", value_r9);
131
100
  i0.ɵɵadvance();
132
- i0.ɵɵproperty("ngIf", !filter_r4.disableTitleCase)("ngIfElse", defaultCase_r10);
101
+ i0.ɵɵproperty("ngIf", !filter_r3.disableTitleCase)("ngIfElse", defaultCase_r10);
133
102
  } }
134
- function FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_template_2_Template(rf, ctx) { if (rf & 1) {
135
- i0.ɵɵtemplate(0, FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_template_2_ng_container_0_Template, 5, 6, "ng-container", 6);
103
+ function FilterBarComponent_div_0_ng_container_4_ng_container_12_ng_template_2_Template(rf, ctx) { if (rf & 1) {
104
+ i0.ɵɵtemplate(0, FilterBarComponent_div_0_ng_container_4_ng_container_12_ng_template_2_ng_container_0_Template, 5, 6, "ng-container", 6);
136
105
  i0.ɵɵpipe(1, "sortTranslationsByProperty");
137
106
  } if (rf & 2) {
138
107
  let tmp_9_0;
139
- const filter_r4 = i0.ɵɵnextContext(2).$implicit;
140
- i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind3(1, 1, (tmp_9_0 = filter_r4.search == null ? null : filter_r4.search.filteredValues) !== null && tmp_9_0 !== undefined ? tmp_9_0 : filter_r4.values, "key", "value"));
108
+ const filter_r3 = i0.ɵɵnextContext(2).$implicit;
109
+ i0.ɵɵproperty("ngForOf", i0.ɵɵpipeBind3(1, 1, (tmp_9_0 = filter_r3.search == null ? null : filter_r3.search.filteredValues) !== null && tmp_9_0 !== undefined ? tmp_9_0 : filter_r3.values, "key", "value"));
141
110
  } }
142
- function FilterBarComponent_div_0_ng_container_5_ng_container_12_Template(rf, ctx) { if (rf & 1) {
111
+ function FilterBarComponent_div_0_ng_container_4_ng_container_12_Template(rf, ctx) { if (rf & 1) {
143
112
  i0.ɵɵelementContainerStart(0);
144
- i0.ɵɵtemplate(1, FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_container_1_Template, 3, 4, "ng-container", 23)(2, FilterBarComponent_div_0_ng_container_5_ng_container_12_ng_template_2_Template, 2, 5, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
113
+ i0.ɵɵtemplate(1, FilterBarComponent_div_0_ng_container_4_ng_container_12_ng_container_1_Template, 3, 4, "ng-container", 17)(2, FilterBarComponent_div_0_ng_container_4_ng_container_12_ng_template_2_Template, 2, 5, "ng-template", null, 3, i0.ɵɵtemplateRefExtractor);
145
114
  i0.ɵɵelementContainerEnd();
146
115
  } if (rf & 2) {
147
116
  const sortedValuesByProperty_r11 = i0.ɵɵreference(3);
148
- const filter_r4 = i0.ɵɵnextContext().$implicit;
117
+ const filter_r3 = i0.ɵɵnextContext().$implicit;
149
118
  i0.ɵɵadvance();
150
- i0.ɵɵproperty("ngIf", filter_r4.translated)("ngIfElse", sortedValuesByProperty_r11);
119
+ i0.ɵɵproperty("ngIf", filter_r3.translated)("ngIfElse", sortedValuesByProperty_r11);
151
120
  } }
152
- function FilterBarComponent_div_0_ng_container_5_Template(rf, ctx) { if (rf & 1) {
153
- const _r2 = i0.ɵɵgetCurrentView();
121
+ function FilterBarComponent_div_0_ng_container_4_Template(rf, ctx) { if (rf & 1) {
122
+ const _r1 = i0.ɵɵgetCurrentView();
154
123
  i0.ɵɵelementContainerStart(0);
155
- i0.ɵɵelementStart(1, "button", 17);
156
- i0.ɵɵlistener("click", function FilterBarComponent_div_0_ng_container_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r2); const select_r3 = i0.ɵɵreference(10); return i0.ɵɵresetView(select_r3.open()); });
157
- i0.ɵɵelementStart(2, "div", 18)(3, "span");
124
+ i0.ɵɵelementStart(1, "button", 11);
125
+ i0.ɵɵlistener("click", function FilterBarComponent_div_0_ng_container_4_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r1); const select_r2 = i0.ɵɵreference(10); return i0.ɵɵresetView(select_r2.open()); });
126
+ i0.ɵɵelementStart(2, "div", 12)(3, "span");
158
127
  i0.ɵɵtext(4);
159
128
  i0.ɵɵpipe(5, "translate");
160
129
  i0.ɵɵelementEnd();
161
- i0.ɵɵtemplate(6, FilterBarComponent_div_0_ng_container_5_span_6_Template, 2, 1, "span", 19);
130
+ i0.ɵɵtemplate(6, FilterBarComponent_div_0_ng_container_4_span_6_Template, 2, 1, "span", 13);
162
131
  i0.ɵɵelementStart(7, "mat-icon");
163
132
  i0.ɵɵtext(8);
164
133
  i0.ɵɵelementEnd()();
165
- i0.ɵɵelementStart(9, "mat-select", 20, 1);
166
- i0.ɵɵlistener("openedChange", function FilterBarComponent_div_0_ng_container_5_Template_mat_select_openedChange_9_listener($event) { const ctx_r4 = i0.ɵɵrestoreView(_r2); const filter_r4 = ctx_r4.$implicit; const i_r6 = ctx_r4.index; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView($event === true ? ctx_r0.focusOptionSearchInput(filter_r4, i_r6) : ctx_r0.clearOptionSearchInput(filter_r4, i_r6)); })("selectionChange", function FilterBarComponent_div_0_ng_container_5_Template_mat_select_selectionChange_9_listener($event) { const filter_r4 = i0.ɵɵrestoreView(_r2).$implicit; const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.selectEvent($event, filter_r4)); });
167
- i0.ɵɵtemplate(11, FilterBarComponent_div_0_ng_container_5_ng_container_11_Template, 4, 5, "ng-container", 11)(12, FilterBarComponent_div_0_ng_container_5_ng_container_12_Template, 4, 2, "ng-container", 11);
134
+ i0.ɵɵelementStart(9, "mat-select", 14, 1);
135
+ i0.ɵɵlistener("openedChange", function FilterBarComponent_div_0_ng_container_4_Template_mat_select_openedChange_9_listener($event) { const ctx_r3 = i0.ɵɵrestoreView(_r1); const filter_r3 = ctx_r3.$implicit; const i_r5 = ctx_r3.index; const ctx_r5 = i0.ɵɵnextContext(2); return i0.ɵɵresetView($event === true ? ctx_r5.focusOptionSearchInput(filter_r3, i_r5) : ctx_r5.clearOptionSearchInput(filter_r3, i_r5)); })("selectionChange", function FilterBarComponent_div_0_ng_container_4_Template_mat_select_selectionChange_9_listener($event) { const filter_r3 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r5 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r5.selectEvent($event, filter_r3)); });
136
+ i0.ɵɵtemplate(11, FilterBarComponent_div_0_ng_container_4_ng_container_11_Template, 4, 5, "ng-container", 10)(12, FilterBarComponent_div_0_ng_container_4_ng_container_12_Template, 4, 2, "ng-container", 10);
168
137
  i0.ɵɵelementEnd()();
169
138
  i0.ɵɵelementContainerEnd();
170
139
  } if (rf & 2) {
171
- let tmp_10_0;
172
- const filter_r4 = ctx.$implicit;
173
- const select_r3 = i0.ɵɵreference(10);
174
- i0.ɵɵadvance(4);
175
- i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 8, filter_r4.title));
140
+ let tmp_11_0;
141
+ const filter_r3 = ctx.$implicit;
142
+ const select_r2 = i0.ɵɵreference(10);
143
+ i0.ɵɵadvance();
144
+ i0.ɵɵclassProp("select-trigger-btn-active", filter_r3.selectedValues == null ? null : filter_r3.selectedValues.length);
145
+ i0.ɵɵadvance(3);
146
+ i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(5, 10, filter_r3.title));
176
147
  i0.ɵɵadvance(2);
177
- i0.ɵɵproperty("ngIf", filter_r4.selectedValues == null ? null : filter_r4.selectedValues.length);
148
+ i0.ɵɵproperty("ngIf", filter_r3.selectedValues == null ? null : filter_r3.selectedValues.length);
178
149
  i0.ɵɵadvance(2);
179
- i0.ɵɵtextInterpolate(select_r3.panelOpen ? "keyboard_arrow_up" : "keyboard_arrow_down");
150
+ i0.ɵɵtextInterpolate(select_r2.panelOpen ? "keyboard_arrow_up" : "keyboard_arrow_down");
180
151
  i0.ɵɵadvance();
181
- i0.ɵɵproperty("panelClass", "filter-panel")("panelWidth", (tmp_10_0 = filter_r4 == null ? null : filter_r4.maxPanelWidth) !== null && tmp_10_0 !== undefined ? tmp_10_0 : "auto")("formControlName", filter_r4.fieldName);
152
+ i0.ɵɵproperty("panelClass", "filter-panel")("panelWidth", (tmp_11_0 = filter_r3 == null ? null : filter_r3.maxPanelWidth) !== null && tmp_11_0 !== undefined ? tmp_11_0 : "auto")("formControlName", filter_r3.fieldName);
182
153
  i0.ɵɵadvance(2);
183
- i0.ɵɵproperty("ngIf", filter_r4 == null ? null : filter_r4.search == null ? null : filter_r4.search.placeholder);
154
+ i0.ɵɵproperty("ngIf", filter_r3 == null ? null : filter_r3.search == null ? null : filter_r3.search.placeholder);
184
155
  i0.ɵɵadvance();
185
- i0.ɵɵproperty("ngIf", filter_r4.values.length);
156
+ i0.ɵɵproperty("ngIf", filter_r3.values.length);
186
157
  } }
187
- function FilterBarComponent_div_0_ng_container_6_Template(rf, ctx) { if (rf & 1) {
158
+ function FilterBarComponent_div_0_ng_container_5_Template(rf, ctx) { if (rf & 1) {
188
159
  const _r12 = i0.ɵɵgetCurrentView();
189
160
  i0.ɵɵelementContainerStart(0);
190
- i0.ɵɵelementStart(1, "div", 25)(2, "button", 26);
191
- i0.ɵɵlistener("click", function FilterBarComponent_div_0_ng_container_6_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.switchLeft()); });
192
- i0.ɵɵelementStart(3, "span", 27);
161
+ i0.ɵɵelementStart(1, "div", 19)(2, "button", 20);
162
+ i0.ɵɵlistener("click", function FilterBarComponent_div_0_ng_container_5_Template_button_click_2_listener() { i0.ɵɵrestoreView(_r12); const ctx_r5 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r5.switchLeft()); });
163
+ i0.ɵɵelementStart(3, "span", 21);
193
164
  i0.ɵɵtext(4, " chevron_left ");
194
165
  i0.ɵɵelementEnd()();
195
- i0.ɵɵelementStart(5, "button", 26);
196
- i0.ɵɵlistener("click", function FilterBarComponent_div_0_ng_container_6_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r12); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.switchRight()); });
197
- i0.ɵɵelementStart(6, "span", 27);
166
+ i0.ɵɵelementStart(5, "button", 20);
167
+ i0.ɵɵlistener("click", function FilterBarComponent_div_0_ng_container_5_Template_button_click_5_listener() { i0.ɵɵrestoreView(_r12); const ctx_r5 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r5.switchRight()); });
168
+ i0.ɵɵelementStart(6, "span", 21);
198
169
  i0.ɵɵtext(7, " chevron_right ");
199
170
  i0.ɵɵelementEnd()()();
200
171
  i0.ɵɵelementContainerEnd();
201
172
  } }
202
173
  function FilterBarComponent_div_0_Template(rf, ctx) { if (rf & 1) {
203
174
  i0.ɵɵelementStart(0, "div", 7)(1, "div", 8, 0);
204
- i0.ɵɵtemplate(3, FilterBarComponent_div_0_mat_form_field_3_Template, 6, 6, "mat-form-field", 9);
205
- i0.ɵɵelementContainerStart(4, 10);
206
- i0.ɵɵtemplate(5, FilterBarComponent_div_0_ng_container_5_Template, 13, 10, "ng-container", 6);
175
+ i0.ɵɵelementContainerStart(3, 9);
176
+ i0.ɵɵtemplate(4, FilterBarComponent_div_0_ng_container_4_Template, 13, 12, "ng-container", 6);
207
177
  i0.ɵɵelementContainerEnd();
208
178
  i0.ɵɵelementEnd();
209
- i0.ɵɵtemplate(6, FilterBarComponent_div_0_ng_container_6_Template, 8, 0, "ng-container", 11);
179
+ i0.ɵɵtemplate(5, FilterBarComponent_div_0_ng_container_5_Template, 8, 0, "ng-container", 10);
210
180
  i0.ɵɵelementEnd();
211
181
  } if (rf & 2) {
212
- const ctx_r0 = i0.ɵɵnextContext();
182
+ const ctx_r5 = i0.ɵɵnextContext();
213
183
  i0.ɵɵadvance();
214
- i0.ɵɵproperty("formGroup", ctx_r0.form);
184
+ i0.ɵɵproperty("formGroup", ctx_r5.form);
215
185
  i0.ɵɵadvance(2);
216
- i0.ɵɵproperty("ngIf", ctx_r0.showSearch && !ctx_r0.filterOverflow || ctx_r0.activeFilterIndex === ctx_r0.searchIndex);
217
- i0.ɵɵadvance();
218
- i0.ɵɵproperty("formGroup", ctx_r0.filterFormGroup);
186
+ i0.ɵɵproperty("formGroup", ctx_r5.filterFormGroup);
219
187
  i0.ɵɵadvance();
220
- i0.ɵɵproperty("ngForOf", ctx_r0.currentFilters);
188
+ i0.ɵɵproperty("ngForOf", ctx_r5.currentFilters);
221
189
  i0.ɵɵadvance();
222
- i0.ɵɵproperty("ngIf", ctx_r0.filterOverflow);
190
+ i0.ɵɵproperty("ngIf", ctx_r5.filterOverflow);
223
191
  } }
224
192
  function FilterBarComponent_div_2_mat_chip_option_1_Template(rf, ctx) { if (rf & 1) {
225
193
  const _r13 = i0.ɵɵgetCurrentView();
226
- i0.ɵɵelementStart(0, "mat-chip-option", 29);
227
- i0.ɵɵlistener("removed", function FilterBarComponent_div_2_mat_chip_option_1_Template_mat_chip_option_removed_0_listener() { const ix_r14 = i0.ɵɵrestoreView(_r13).index; const filter_r15 = i0.ɵɵnextContext().$implicit; const ctx_r0 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r0.removeFilter(filter_r15.fieldName, ix_r14)); });
228
- i0.ɵɵelementStart(1, "button", 30)(2, "mat-icon");
194
+ i0.ɵɵelementStart(0, "mat-chip-option", 23);
195
+ i0.ɵɵlistener("removed", function FilterBarComponent_div_2_mat_chip_option_1_Template_mat_chip_option_removed_0_listener() { const ix_r14 = i0.ɵɵrestoreView(_r13).index; const filter_r15 = i0.ɵɵnextContext().$implicit; const ctx_r5 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r5.removeFilter(filter_r15.fieldName, ix_r14)); });
196
+ i0.ɵɵelementStart(1, "button", 24)(2, "mat-icon");
229
197
  i0.ɵɵtext(3, "close");
230
198
  i0.ɵɵelementEnd()();
231
- i0.ɵɵelementStart(4, "span", 31);
199
+ i0.ɵɵelementStart(4, "span", 25);
232
200
  i0.ɵɵtext(5);
233
201
  i0.ɵɵpipe(6, "translate");
234
202
  i0.ɵɵpipe(7, "titlecase");
@@ -241,13 +209,13 @@ function FilterBarComponent_div_2_mat_chip_option_1_Template(rf, ctx) { if (rf &
241
209
  } }
242
210
  function FilterBarComponent_div_2_Template(rf, ctx) { if (rf & 1) {
243
211
  i0.ɵɵelementStart(0, "div");
244
- i0.ɵɵtemplate(1, FilterBarComponent_div_2_mat_chip_option_1_Template, 8, 8, "mat-chip-option", 28);
212
+ i0.ɵɵtemplate(1, FilterBarComponent_div_2_mat_chip_option_1_Template, 8, 8, "mat-chip-option", 22);
245
213
  i0.ɵɵelementEnd();
246
214
  } if (rf & 2) {
247
215
  const filter_r15 = ctx.$implicit;
248
- const ctx_r0 = i0.ɵɵnextContext();
216
+ const ctx_r5 = i0.ɵɵnextContext();
249
217
  i0.ɵɵadvance();
250
- i0.ɵɵproperty("ngForOf", ctx_r0.filterFormGroupValue[filter_r15.fieldName]);
218
+ i0.ɵɵproperty("ngForOf", ctx_r5.filterFormGroupValue[filter_r15.fieldName]);
251
219
  } }
252
220
  export class FilterBarComponent {
253
221
  onResize() {
@@ -267,9 +235,6 @@ export class FilterBarComponent {
267
235
  get inputText() {
268
236
  return this._inputText;
269
237
  }
270
- get showSearch() {
271
- return !this.settings?.hideSearch;
272
- }
273
238
  get outputFilterKeyAndValue() {
274
239
  return this.settings?.outputFilterKeyAndValue;
275
240
  }
@@ -287,33 +252,23 @@ export class FilterBarComponent {
287
252
  this.translate = translate;
288
253
  this.filterBarChange = new EventEmitter();
289
254
  this._inputText = "";
290
- /** To hide filters, but leave chips visible */
291
- this.inputFormControlName = "input";
292
255
  this.filterFormGroup = new FormGroup({});
293
256
  this.form = new FormGroup({
294
- [this.inputFormControlName]: new FormControl(""),
295
257
  filters: this.filterFormGroup
296
258
  });
297
259
  this.filters = {
260
+ input: '',
298
261
  filters: {},
299
- input: ""
300
262
  };
301
263
  this.filterOverflow = false;
302
264
  this.activeFilterIndex = 0;
303
- // when to show filter by name or id on mobile
304
- this.searchIndex = -1;
305
265
  }
306
266
  ngOnInit() {
307
267
  this.settings.filters?.forEach((field) => {
308
268
  this.filterFormGroup.addControl(field.fieldName, new FormControl([]));
309
269
  });
310
270
  this.subscribeToFormValueChanges();
311
- this.searchTooltip = this.settings?.searchTooltip ?? 'FILTER_BAR.SEARCH_TOOLTIP';
312
- this.searchTitle = this.settings?.searchTitle ?? 'FILTER_BAR.SEARCH';
313
- this.prefixIcon = this.settings?.prefixIcon ?? "filter_alt";
314
- this.suffixIcon = this.settings?.suffixIcon ?? "question_mark";
315
- this.showSuffixIcon = this.settings?.showSuffixIcon ?? true;
316
- this.activeFilterIndex = this.showSearch ? this.searchIndex : 0;
271
+ this.activeFilterIndex = 0;
317
272
  }
318
273
  ngAfterViewInit() {
319
274
  this.checkOverflow();
@@ -380,7 +335,7 @@ export class FilterBarComponent {
380
335
  this.activeFilterIndex += 1;
381
336
  }
382
337
  switchLeft() {
383
- if (this.activeFilterIndex === this.searchIndex || !this.showSearch && this.activeFilterIndex === 0) {
338
+ if (this.activeFilterIndex === 0) {
384
339
  return;
385
340
  }
386
341
  this.activeFilterIndex -= 1;
@@ -405,14 +360,13 @@ export class FilterBarComponent {
405
360
  checkOverflow() {
406
361
  if (this.filterWrapper?.nativeElement) {
407
362
  const minFilterWidth = 100;
408
- const searchFilterWidth = 150;
409
363
  if (this.settings?.filters?.length) {
410
364
  const containerWidth = this.filterWrapper.nativeElement.clientWidth;
411
365
  // Calculate the total width needed for all filters
412
- const totalWidthNeeded = this.settings.filters.length * minFilterWidth + (this.showSearch ? searchFilterWidth : 0);
366
+ const totalWidthNeeded = this.settings.filters.length * minFilterWidth;
413
367
  // If all filters can fit within the container, no need to split
414
368
  if (totalWidthNeeded <= containerWidth) {
415
- this.activeFilterIndex = this.showSearch ? this.searchIndex : 0;
369
+ this.activeFilterIndex = 0;
416
370
  this.settings.splittedFilters = [];
417
371
  this.filterOverflow = false;
418
372
  return;
@@ -421,8 +375,8 @@ export class FilterBarComponent {
421
375
  const filtersPerRow = Math.floor(containerWidth / minFilterWidth);
422
376
  // Determine how many groups are needed
423
377
  const groupCount = Math.ceil(this.settings.filters.length / filtersPerRow);
424
- if ((groupCount + (this.showSearch ? 1 : 0)) < this.activeFilterIndex + 1) {
425
- this.activeFilterIndex = this.showSearch ? this.searchIndex : 0;
378
+ if (groupCount < this.activeFilterIndex + 1) {
379
+ this.activeFilterIndex = 0;
426
380
  }
427
381
  // Calculate group size based on the number of groups
428
382
  const groupSize = Math.ceil(this.settings.filters.length / groupCount);
@@ -439,7 +393,7 @@ export class FilterBarComponent {
439
393
  subscribeToFormValueChanges() {
440
394
  this.formChangesSubscription = this.form.valueChanges.subscribe(() => {
441
395
  this.filters = {
442
- input: this.form.value.input ?? "",
396
+ input: '',
443
397
  filters: {}
444
398
  };
445
399
  for (const filterKey in this.form.value.filters) {
@@ -460,8 +414,8 @@ export class FilterBarComponent {
460
414
  i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.optionSearchInputs = _t);
461
415
  } }, hostBindings: function FilterBarComponent_HostBindings(rf, ctx) { if (rf & 1) {
462
416
  i0.ɵɵlistener("resize", function FilterBarComponent_resize_HostBindingHandler() { return ctx.onResize(); }, false, i0.ɵɵresolveWindow);
463
- } }, inputs: { settings: "settings", filterRowVisible: "filterRowVisible" }, outputs: { filterBarChange: "filterBarChange" }, decls: 3, vars: 2, consts: [["filterWrapper", ""], ["select", ""], ["optionSearchInput", ""], ["sortedValuesByProperty", ""], ["defaultCase", ""], ["class", "filter-row", 4, "ngIf"], [4, "ngFor", "ngForOf"], [1, "filter-row"], ["fxLayout", "row", 1, "filter-wrapper", 3, "formGroup"], ["fxFlex", "", "class", "filter-bar-search-input", 4, "ngIf"], [3, "formGroup"], [4, "ngIf"], ["fxFlex", "", 1, "filter-bar-search-input"], ["matPrefix", "", 1, "material-icons-outlined"], ["matSuffix", "", "class", "material-icons-outlined", 3, "matTooltip", 4, "ngIf"], ["matInput", "", 1, "search-input", 3, "placeholder", "formControlName"], ["matSuffix", "", 1, "material-icons-outlined", 3, "matTooltip"], ["mat-stroked-button", "", "color", "primary-accent-darker", 1, "select-trigger-btn", 3, "click"], [1, "select-trigger-btn-label"], ["class", "selected-count", 4, "ngIf"], ["multiple", "", 3, "openedChange", "selectionChange", "panelClass", "panelWidth", "formControlName"], [1, "selected-count"], ["type", "text", 1, "option-search-input", 3, "keyup", "keydown", "placeholder"], [4, "ngIf", "ngIfElse"], [1, "filter-option", 3, "disabled", "value"], [1, "filter-arrows"], ["mat-icon-button", "", 3, "click"], [1, "material-icons-outlined"], ["color", "primary-accent-darker", "class", "text-s", 3, "removed", 4, "ngFor", "ngForOf"], ["color", "primary-accent-darker", 1, "text-s", 3, "removed"], ["matChipRemove", ""], [1, "chip-value"]], template: function FilterBarComponent_Template(rf, ctx) { if (rf & 1) {
464
- i0.ɵɵtemplate(0, FilterBarComponent_div_0_Template, 7, 5, "div", 5);
417
+ } }, inputs: { settings: "settings", filterRowVisible: "filterRowVisible" }, outputs: { filterBarChange: "filterBarChange" }, decls: 3, vars: 2, consts: [["filterWrapper", ""], ["select", ""], ["optionSearchInput", ""], ["sortedValuesByProperty", ""], ["defaultCase", ""], ["class", "filter-row", 4, "ngIf"], [4, "ngFor", "ngForOf"], [1, "filter-row"], ["fxLayout", "row", 1, "filter-wrapper", 3, "formGroup"], [3, "formGroup"], [4, "ngIf"], ["mat-stroked-button", "", "color", "primary-accent-darker", 1, "select-trigger-btn", 3, "click"], [1, "select-trigger-btn-label"], ["class", "selected-count", 4, "ngIf"], ["multiple", "", 3, "openedChange", "selectionChange", "panelClass", "panelWidth", "formControlName"], [1, "selected-count"], ["type", "text", 1, "option-search-input", 3, "keyup", "keydown", "placeholder"], [4, "ngIf", "ngIfElse"], [1, "filter-option", 3, "disabled", "value"], [1, "filter-arrows"], ["mat-icon-button", "", 3, "click"], [1, "material-icons-outlined"], ["color", "primary-accent-darker", "class", "text-s", 3, "removed", 4, "ngFor", "ngForOf"], ["color", "primary-accent-darker", 1, "text-s", 3, "removed"], ["matChipRemove", ""], [1, "chip-value"]], template: function FilterBarComponent_Template(rf, ctx) { if (rf & 1) {
418
+ i0.ɵɵtemplate(0, FilterBarComponent_div_0_Template, 6, 4, "div", 5);
465
419
  i0.ɵɵelementStart(1, "mat-chip-listbox");
466
420
  i0.ɵɵtemplate(2, FilterBarComponent_div_2_Template, 2, 1, "div", 6);
467
421
  i0.ɵɵelementEnd();
@@ -469,11 +423,11 @@ export class FilterBarComponent {
469
423
  i0.ɵɵproperty("ngIf", ctx.filterRowVisible);
470
424
  i0.ɵɵadvance(2);
471
425
  i0.ɵɵproperty("ngForOf", ctx.settings == null ? null : ctx.settings.filters);
472
- } }, dependencies: [i2.NgForOf, i2.NgIf, i3.MatInput, i4.MatFormField, i4.MatPrefix, i4.MatSuffix, i5.DefaultLayoutDirective, i5.DefaultFlexDirective, i6.MatSelect, i7.MatOption, i8.DefaultValueAccessor, i8.NgControlStatus, i8.NgControlStatusGroup, i9.MatTooltip, i10.MatButton, i10.MatIconButton, i11.MatChipListbox, i11.MatChipOption, i11.MatChipRemove, i12.MatIcon, i8.FormGroupDirective, i8.FormControlName, i2.TitleCasePipe, i1.TranslatePipe, i13.SortTranslationsByPropertyPipe, i14.SortAlphabeticallyPipe], styles: ["[_nghost-%COMP%]{display:inline-block}.select-trigger-btn[_ngcontent-%COMP%]{position:relative}.select-trigger-btn[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%]{width:100%;height:100%;opacity:0;position:absolute;top:0;left:0}.select-trigger-btn-label[_ngcontent-%COMP%]{display:flex;align-items:center;white-space:nowrap}.selected-count[_ngcontent-%COMP%]{margin-left:3px}.filter-row[_ngcontent-%COMP%]{display:flex;min-height:40px;min-width:100%;border-radius:.5rem;padding:.5rem .75rem;max-width:100%;align-items:center;margin-bottom:.5rem}.option-search-input[_ngcontent-%COMP%]{font-size:14px;width:100%;padding:.5rem 1rem;margin-bottom:.5rem}.search-input[_ngcontent-%COMP%]{background-color:unset;border:none}.filter-bar-search-input[_ngcontent-%COMP%]{max-height:36px;background-color:var(--base-100);width:100%;margin-right:5px;min-width:150px;border-bottom:1px solid var(--primary-accent-darker)}.filter-bar-search-input[_ngcontent-%COMP%] .material-icons-outlined{vertical-align:bottom;padding:0 5px}.material-icons-outlined[_ngcontent-%COMP%]{color:var(--base-40)}.filter-wrapper[_ngcontent-%COMP%]{max-width:100%;overflow-x:hidden;overflow-y:hidden;display:flex;gap:8px;flex:1}.mat-mdc-chip.mat-mdc-standard-chip[_ngcontent-%COMP%]{background-color:var(--base-100);padding-left:.5em;padding-right:.75em;border:.5px solid var(--primary-accent-darker)}.mat-mdc-chip.mat-mdc-standard-chip[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:inline-block}.hidden[_ngcontent-%COMP%]{display:none}.chip-value[_ngcontent-%COMP%]{margin-left:12px;color:var(--primary-accent-darker)!important} .cdk-overlay-pane:has(.filter-panel){margin:15px 0 0 -15px} .filter-panel{border-radius:4px!important}[_nghost-%COMP%] .mat-mdc-form-field-flex{background-color:var(--base-100);max-height:36px}[_nghost-%COMP%] .mat-mdc-form-field-infix{padding-top:6px!important}[_nghost-%COMP%] .mat-mdc-form-field-focus-overlay, [_nghost-%COMP%] .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--base-95)}[_nghost-%COMP%] .mdc-text-field--focused{background-color:var(--base-70)!important}[_nghost-%COMP%] .mat-mdc-chip-graphic{display:none}[_nghost-%COMP%] .mat-mdc-chip-remove{color:var(--primary-accent-darker)!important}[_nghost-%COMP%] .mat-mdc-chip-remove mat-icon{color:var(--primary-accent-darker)!important}[_nghost-%COMP%] mat-chip-listbox{margin-left:12px}[_nghost-%COMP%] .search-input, [_nghost-%COMP%] .mat-mdc-select-placeholder, [_nghost-%COMP%] .mat-mdc-select-value-text, [_nghost-%COMP%] .mdc-floating-label{font-size:14px!important}[_nghost-%COMP%] .mdc-text-field--filled{--mdc-filled-text-field-active-indicator-height: 0;--mdc-filled-text-field-focus-active-indicator-height: 0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}[_nghost-%COMP%] .mat-mdc-text-field-wrapper:hover{background-color:var(--base-70)!important;transition:.1s}[_nghost-%COMP%] .mat-mdc-form-field-subscript-wrapper{display:none}[_nghost-%COMP%] .mdc-floating-label--float-above{margin-top:3px}"] }); }
426
+ } }, dependencies: [i2.NgForOf, i2.NgIf, i3.DefaultLayoutDirective, i4.MatSelect, i5.MatOption, i6.NgControlStatus, i6.NgControlStatusGroup, i7.MatButton, i7.MatIconButton, i8.MatChipListbox, i8.MatChipOption, i8.MatChipRemove, i9.MatIcon, i6.FormGroupDirective, i6.FormControlName, i2.TitleCasePipe, i1.TranslatePipe, i10.SortTranslationsByPropertyPipe, i11.SortAlphabeticallyPipe], styles: ["[_nghost-%COMP%]{display:inline-block}.select-trigger-btn[_ngcontent-%COMP%]{position:relative}.select-trigger-btn-active[_ngcontent-%COMP%]{background-color:#8e49551f}.select-trigger-btn[_ngcontent-%COMP%] mat-select[_ngcontent-%COMP%]{width:100%;height:100%;opacity:0;position:absolute;top:0;left:0}.select-trigger-btn-label[_ngcontent-%COMP%]{display:flex;align-items:center;white-space:nowrap}.selected-count[_ngcontent-%COMP%]{margin-left:3px}.filter-row[_ngcontent-%COMP%]{display:flex;min-height:40px;min-width:100%;border-radius:.5rem;padding:.5rem .75rem;max-width:100%;align-items:center;margin-bottom:.5rem}.option-search-input[_ngcontent-%COMP%]{font-size:14px;width:100%;padding:.5rem 1rem;margin-bottom:.5rem}.material-icons-outlined[_ngcontent-%COMP%]{color:var(--base-40)}.filter-wrapper[_ngcontent-%COMP%]{max-width:100%;overflow-x:hidden;overflow-y:hidden;display:flex;gap:8px;flex:1}.mat-mdc-chip.mat-mdc-standard-chip[_ngcontent-%COMP%]{background-color:var(--base-100);padding-left:.5em;padding-right:.75em;border:.5px solid var(--primary-accent-darker)}.mat-mdc-chip.mat-mdc-standard-chip[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:inline-block}.hidden[_ngcontent-%COMP%]{display:none}.chip-value[_ngcontent-%COMP%]{margin-left:12px;color:var(--primary-accent-darker)!important} .cdk-overlay-pane:has(.filter-panel){margin:15px 0 0 -15px} .filter-panel{border-radius:4px!important}[_nghost-%COMP%] .mat-mdc-form-field-flex{background-color:var(--base-100);max-height:36px}[_nghost-%COMP%] .mat-mdc-form-field-infix{padding-top:6px!important}[_nghost-%COMP%] .mat-mdc-form-field-focus-overlay, [_nghost-%COMP%] .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--base-95)}[_nghost-%COMP%] .mdc-text-field--focused{background-color:var(--base-70)!important}[_nghost-%COMP%] .mat-mdc-chip-graphic{display:none}[_nghost-%COMP%] .mat-mdc-chip-remove{color:var(--primary-accent-darker)!important}[_nghost-%COMP%] .mat-mdc-chip-remove mat-icon{color:var(--primary-accent-darker)!important}[_nghost-%COMP%] mat-chip-listbox{margin-left:12px}[_nghost-%COMP%] .mat-mdc-select-placeholder, [_nghost-%COMP%] .mat-mdc-select-value-text, [_nghost-%COMP%] .mdc-floating-label{font-size:14px!important}[_nghost-%COMP%] .mdc-text-field--filled{--mdc-filled-text-field-active-indicator-height: 0;--mdc-filled-text-field-focus-active-indicator-height: 0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}[_nghost-%COMP%] .mat-mdc-text-field-wrapper:hover{background-color:var(--base-70)!important;transition:.1s}[_nghost-%COMP%] .mat-mdc-form-field-subscript-wrapper{display:none}[_nghost-%COMP%] .mdc-floating-label--float-above{margin-top:3px}"] }); }
473
427
  }
474
428
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FilterBarComponent, [{
475
429
  type: Component,
476
- args: [{ selector: 'tld-filter-bar', template: "<div class=\"filter-row\" *ngIf=\"filterRowVisible\">\r\n <div fxLayout=\"row\" class=\"filter-wrapper\" #filterWrapper [formGroup]=\"form\">\r\n <mat-form-field fxFlex *ngIf=\"showSearch && !filterOverflow || activeFilterIndex === searchIndex\" class=\"filter-bar-search-input\">\r\n <span matPrefix class=\"material-icons-outlined\">\r\n {{prefixIcon}}\r\n </span>\r\n <span matSuffix class=\"material-icons-outlined\" *ngIf=\"showSuffixIcon\" [matTooltip]=\"searchTooltip | translate\">\r\n {{suffixIcon}}\r\n </span>\r\n <input class=\"search-input\" matInput [placeholder]=\"searchTitle | translate\"\r\n [formControlName]=\"inputFormControlName\">\r\n </mat-form-field>\r\n <ng-container [formGroup]=\"filterFormGroup\">\r\n <ng-container *ngFor=\"let filter of currentFilters; let i = index\">\r\n <button class=\"select-trigger-btn\" mat-stroked-button color=\"primary-accent-darker\" (click)=\"select.open()\">\r\n <div class=\"select-trigger-btn-label\">\r\n <span>{{filter.title | translate}}</span>\r\n <span *ngIf=\"filter.selectedValues?.length\" class=\"selected-count\">({{filter.selectedValues?.length}})</span>\r\n <mat-icon>{{ select.panelOpen ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\" }}</mat-icon>\r\n </div>\r\n\r\n <mat-select\r\n multiple \r\n #select\r\n [panelClass]=\"'filter-panel'\"\r\n [panelWidth]=\"filter?.maxPanelWidth ?? 'auto'\" \r\n [formControlName]=\"filter.fieldName\" \r\n (openedChange)=\"$event === true ? focusOptionSearchInput(filter, i) : clearOptionSearchInput(filter, i)\"\r\n (selectionChange)=\"selectEvent($event, filter)\" \r\n >\r\n <ng-container *ngIf=\"filter?.search?.placeholder\">\r\n <input #optionSearchInput class=\"option-search-input\" [class.hidden]=\"filter.values!.length < 10\" type=\"text\" [placeholder]=\"filter.search?.placeholder ?? '' | translate\" (keyup)=\"filterOptions($event, filter)\" (keydown)=\"$event.stopPropagation()\">\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"filter.values.length\">\r\n <ng-container *ngIf=\"filter.translated; else sortedValuesByProperty\">\r\n <ng-container *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortAlphabetically:'key'\">\r\n <mat-option [class.hidden]=\"filter.search?.searchCriteria && value.isSelected && !value.matchesSearchCriteria\" class=\"filter-option\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n {{ filter.disableTitleCase ? value.key : (value.key | titlecase) }}\r\n </mat-option>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-template #sortedValuesByProperty>\r\n <ng-container *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortTranslationsByProperty:'key':'value'\">\r\n <mat-option [class.hidden]=\"filter.search?.searchCriteria && value.isSelected && !value.matchesSearchCriteria\" class=\"filter-option\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n <ng-container *ngIf=\"!filter.disableTitleCase; else defaultCase\">\r\n {{ value.key | translate : { default: value.value | titlecase } }}\r\n </ng-container>\r\n \r\n <ng-template #defaultCase>\r\n {{ value.key | translate : { default: value.value } }} \r\n </ng-template>\r\n </mat-option>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </mat-select>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"filterOverflow\">\r\n <div class=\"filter-arrows\">\r\n <button mat-icon-button (click)=\"switchLeft()\">\r\n <span class=\"material-icons-outlined\">\r\n chevron_left\r\n </span>\r\n </button>\r\n <button mat-icon-button (click)=\"switchRight()\">\r\n <span class=\"material-icons-outlined\">\r\n chevron_right\r\n </span>\r\n </button>\r\n </div>\r\n </ng-container>\r\n</div>\r\n<mat-chip-listbox>\r\n <div *ngFor=\"let filter of settings?.filters\">\r\n <mat-chip-option color=\"primary-accent-darker\" *ngFor=\"let filterValue of filterFormGroupValue[filter.fieldName]; let ix=index\"\r\n (removed)=\"removeFilter(filter.fieldName, ix)\" class=\"text-s\">\r\n <button matChipRemove>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <span class=\"chip-value\"> {{(filter.translated ? filterValue.key : filterValue.key | translate : {default: filterValue.value}) | titlecase\r\n }}</span>\r\n </mat-chip-option>\r\n </div>\r\n</mat-chip-listbox>\r\n", styles: [":host{display:inline-block}.select-trigger-btn{position:relative}.select-trigger-btn mat-select{width:100%;height:100%;opacity:0;position:absolute;top:0;left:0}.select-trigger-btn-label{display:flex;align-items:center;white-space:nowrap}.selected-count{margin-left:3px}.filter-row{display:flex;min-height:40px;min-width:100%;border-radius:.5rem;padding:.5rem .75rem;max-width:100%;align-items:center;margin-bottom:.5rem}.option-search-input{font-size:14px;width:100%;padding:.5rem 1rem;margin-bottom:.5rem}.search-input{background-color:unset;border:none}.filter-bar-search-input{max-height:36px;background-color:var(--base-100);width:100%;margin-right:5px;min-width:150px;border-bottom:1px solid var(--primary-accent-darker)}.filter-bar-search-input::ng-deep .material-icons-outlined{vertical-align:bottom;padding:0 5px}.material-icons-outlined{color:var(--base-40)}.filter-wrapper{max-width:100%;overflow-x:hidden;overflow-y:hidden;display:flex;gap:8px;flex:1}.mat-mdc-chip.mat-mdc-standard-chip{background-color:var(--base-100);padding-left:.5em;padding-right:.75em;border:.5px solid var(--primary-accent-darker)}.mat-mdc-chip.mat-mdc-standard-chip span{display:inline-block}.hidden{display:none}.chip-value{margin-left:12px;color:var(--primary-accent-darker)!important}::ng-deep .cdk-overlay-pane:has(.filter-panel){margin:15px 0 0 -15px}::ng-deep .filter-panel{border-radius:4px!important}:host ::ng-deep .mat-mdc-form-field-flex{background-color:var(--base-100);max-height:36px}:host ::ng-deep .mat-mdc-form-field-infix{padding-top:6px!important}:host ::ng-deep .mat-mdc-form-field-focus-overlay,:host ::ng-deep .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--base-95)}:host ::ng-deep .mdc-text-field--focused{background-color:var(--base-70)!important}:host ::ng-deep .mat-mdc-chip-graphic{display:none}:host ::ng-deep .mat-mdc-chip-remove{color:var(--primary-accent-darker)!important}:host ::ng-deep .mat-mdc-chip-remove mat-icon{color:var(--primary-accent-darker)!important}:host ::ng-deep mat-chip-listbox{margin-left:12px}:host ::ng-deep .search-input,:host ::ng-deep .mat-mdc-select-placeholder,:host ::ng-deep .mat-mdc-select-value-text,:host ::ng-deep .mdc-floating-label{font-size:14px!important}:host ::ng-deep .mdc-text-field--filled{--mdc-filled-text-field-active-indicator-height: 0;--mdc-filled-text-field-focus-active-indicator-height: 0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}:host ::ng-deep .mat-mdc-text-field-wrapper:hover{background-color:var(--base-70)!important;transition:.1s}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .mdc-floating-label--float-above{margin-top:3px}\n"] }]
430
+ args: [{ selector: 'tld-filter-bar', template: "<div class=\"filter-row\" *ngIf=\"filterRowVisible\">\r\n <div fxLayout=\"row\" class=\"filter-wrapper\" #filterWrapper [formGroup]=\"form\">\r\n <ng-container [formGroup]=\"filterFormGroup\">\r\n <ng-container *ngFor=\"let filter of currentFilters; let i = index\">\r\n <button [class.select-trigger-btn-active]=\"filter.selectedValues?.length\" class=\"select-trigger-btn\" mat-stroked-button color=\"primary-accent-darker\" (click)=\"select.open()\">\r\n <div class=\"select-trigger-btn-label\">\r\n <span>{{filter.title | translate}}</span>\r\n <span *ngIf=\"filter.selectedValues?.length\" class=\"selected-count\">({{filter.selectedValues?.length}})</span>\r\n <mat-icon>{{ select.panelOpen ? \"keyboard_arrow_up\" : \"keyboard_arrow_down\" }}</mat-icon>\r\n </div>\r\n\r\n <mat-select\r\n multiple \r\n #select\r\n [panelClass]=\"'filter-panel'\"\r\n [panelWidth]=\"filter?.maxPanelWidth ?? 'auto'\" \r\n [formControlName]=\"filter.fieldName\" \r\n (openedChange)=\"$event === true ? focusOptionSearchInput(filter, i) : clearOptionSearchInput(filter, i)\"\r\n (selectionChange)=\"selectEvent($event, filter)\" \r\n >\r\n <ng-container *ngIf=\"filter?.search?.placeholder\">\r\n <input #optionSearchInput class=\"option-search-input\" [class.hidden]=\"filter.values!.length < 10\" type=\"text\" [placeholder]=\"filter.search?.placeholder ?? '' | translate\" (keyup)=\"filterOptions($event, filter)\" (keydown)=\"$event.stopPropagation()\">\r\n </ng-container>\r\n \r\n <ng-container *ngIf=\"filter.values.length\">\r\n <ng-container *ngIf=\"filter.translated; else sortedValuesByProperty\">\r\n <ng-container *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortAlphabetically:'key'\">\r\n <mat-option [class.hidden]=\"filter.search?.searchCriteria && value.isSelected && !value.matchesSearchCriteria\" class=\"filter-option\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n {{ filter.disableTitleCase ? value.key : (value.key | titlecase) }}\r\n </mat-option>\r\n </ng-container>\r\n </ng-container>\r\n \r\n <ng-template #sortedValuesByProperty>\r\n <ng-container *ngFor=\"let value of (filter.search?.filteredValues ?? filter.values) | sortTranslationsByProperty:'key':'value'\">\r\n <mat-option [class.hidden]=\"filter.search?.searchCriteria && value.isSelected && !value.matchesSearchCriteria\" class=\"filter-option\" [disabled]=\"filter.singleSelection?.selected && filter.singleSelection?.value !== value.value\" [value]=\"value\">\r\n <ng-container *ngIf=\"!filter.disableTitleCase; else defaultCase\">\r\n {{ value.key | translate : { default: value.value | titlecase } }}\r\n </ng-container>\r\n \r\n <ng-template #defaultCase>\r\n {{ value.key | translate : { default: value.value } }} \r\n </ng-template>\r\n </mat-option>\r\n </ng-container>\r\n </ng-template>\r\n </ng-container>\r\n </mat-select>\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n <ng-container *ngIf=\"filterOverflow\">\r\n <div class=\"filter-arrows\">\r\n <button mat-icon-button (click)=\"switchLeft()\">\r\n <span class=\"material-icons-outlined\">\r\n chevron_left\r\n </span>\r\n </button>\r\n <button mat-icon-button (click)=\"switchRight()\">\r\n <span class=\"material-icons-outlined\">\r\n chevron_right\r\n </span>\r\n </button>\r\n </div>\r\n </ng-container>\r\n</div>\r\n<mat-chip-listbox>\r\n <div *ngFor=\"let filter of settings?.filters\">\r\n <mat-chip-option color=\"primary-accent-darker\" *ngFor=\"let filterValue of filterFormGroupValue[filter.fieldName]; let ix=index\"\r\n (removed)=\"removeFilter(filter.fieldName, ix)\" class=\"text-s\">\r\n <button matChipRemove>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <span class=\"chip-value\"> {{(filter.translated ? filterValue.key : filterValue.key | translate : {default: filterValue.value}) | titlecase\r\n }}</span>\r\n </mat-chip-option>\r\n </div>\r\n</mat-chip-listbox>\r\n", styles: [":host{display:inline-block}.select-trigger-btn{position:relative}.select-trigger-btn-active{background-color:#8e49551f}.select-trigger-btn mat-select{width:100%;height:100%;opacity:0;position:absolute;top:0;left:0}.select-trigger-btn-label{display:flex;align-items:center;white-space:nowrap}.selected-count{margin-left:3px}.filter-row{display:flex;min-height:40px;min-width:100%;border-radius:.5rem;padding:.5rem .75rem;max-width:100%;align-items:center;margin-bottom:.5rem}.option-search-input{font-size:14px;width:100%;padding:.5rem 1rem;margin-bottom:.5rem}.material-icons-outlined{color:var(--base-40)}.filter-wrapper{max-width:100%;overflow-x:hidden;overflow-y:hidden;display:flex;gap:8px;flex:1}.mat-mdc-chip.mat-mdc-standard-chip{background-color:var(--base-100);padding-left:.5em;padding-right:.75em;border:.5px solid var(--primary-accent-darker)}.mat-mdc-chip.mat-mdc-standard-chip span{display:inline-block}.hidden{display:none}.chip-value{margin-left:12px;color:var(--primary-accent-darker)!important}::ng-deep .cdk-overlay-pane:has(.filter-panel){margin:15px 0 0 -15px}::ng-deep .filter-panel{border-radius:4px!important}:host ::ng-deep .mat-mdc-form-field-flex{background-color:var(--base-100);max-height:36px}:host ::ng-deep .mat-mdc-form-field-infix{padding-top:6px!important}:host ::ng-deep .mat-mdc-form-field-focus-overlay,:host ::ng-deep .mdc-text-field--filled:not(.mdc-text-field--disabled){background-color:var(--base-95)}:host ::ng-deep .mdc-text-field--focused{background-color:var(--base-70)!important}:host ::ng-deep .mat-mdc-chip-graphic{display:none}:host ::ng-deep .mat-mdc-chip-remove{color:var(--primary-accent-darker)!important}:host ::ng-deep .mat-mdc-chip-remove mat-icon{color:var(--primary-accent-darker)!important}:host ::ng-deep mat-chip-listbox{margin-left:12px}:host ::ng-deep .mat-mdc-select-placeholder,:host ::ng-deep .mat-mdc-select-value-text,:host ::ng-deep .mdc-floating-label{font-size:14px!important}:host ::ng-deep .mdc-text-field--filled{--mdc-filled-text-field-active-indicator-height: 0;--mdc-filled-text-field-focus-active-indicator-height: 0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}:host ::ng-deep .mat-mdc-text-field-wrapper:hover{background-color:var(--base-70)!important;transition:.1s}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}:host ::ng-deep .mdc-floating-label--float-above{margin-top:3px}\n"] }]
477
431
  }], () => [{ type: i0.ChangeDetectorRef }, { type: i1.TranslateService }], { filterWrapper: [{
478
432
  type: ViewChild,
479
433
  args: ["filterWrapper"]
@@ -491,4 +445,4 @@ export class FilterBarComponent {
491
445
  type: Output
492
446
  }] }); })();
493
447
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(FilterBarComponent, { className: "FilterBarComponent", filePath: "lib\\filter-bar\\filter-bar.component.ts", lineNumber: 16 }); })();
494
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvZmlsdGVyLWJhci9maWx0ZXItYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9maWx0ZXItYmFyL2ZpbHRlci1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9LLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDS2xELGdDQUFnSDs7SUFDOUcsWUFDRjtJQUFBLGlCQUFPOzs7SUFGZ0UsdUVBQXdDO0lBQzdHLGVBQ0Y7SUFERSxrREFDRjs7O0lBTEEsQUFERiwwQ0FBa0ksZUFDaEY7SUFDOUMsWUFDRjtJQUFBLGlCQUFPO0lBQ1AsNkZBQWdIO0lBR2hILDRCQUMyQzs7SUFDN0MsaUJBQWlCOzs7SUFQYixlQUNGO0lBREUsa0RBQ0Y7SUFDaUQsY0FBb0I7SUFBcEIsNENBQW9CO0lBR2hDLGNBQXVDO0lBQzFFLEFBRG1DLHNFQUF1QyxnREFDbEM7OztJQU9wQyxnQ0FBbUU7SUFBQSxZQUFtQztJQUFBLGlCQUFPOzs7SUFBMUMsY0FBbUM7SUFBbkMsMEdBQW1DOzs7O0lBYXRHLDZCQUFrRDtJQUNoRCxvQ0FBd1A7O0lBQXJDLEFBQXhDLG1RQUFTLHVDQUE2QixLQUFDLHNLQUFZLHdCQUF3QixLQUFDO0lBQXZQLGlCQUF3UDs7Ozs7SUFBbE0sY0FBMkM7SUFBM0Msc0RBQTJDO0lBQWEsK0tBQTREOzs7SUFLeEssNkJBQWdIO0lBQzlHLHNDQUFv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a0ZBZkksa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRmlsdGVyQmFyRmlsdGVyLCBGaWx0ZXJCYXJGaWx0ZXJJdGVtIH0gZnJvbSAnLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJDaGFuZ2VFdmVudCB9IGZyb20gJy4vbW9kZWxzL2ZpbHRlci1iYXItY2hhbmdlLWV2ZW50Lm1vZGVsJztcclxuaW1wb3J0IHsgRmlsdGVyQmFyU2V0dGluZ3MgfSBmcm9tICcuL21vZGVscy9maWx0ZXItYmFyLXNldHRpbmdzLm1vZGVsJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3RDaGFuZ2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zZWxlY3QnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtc2VsZWN0b3JcclxuICBzZWxlY3RvcjogJ3RsZC1maWx0ZXItYmFyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZmlsdGVyLWJhci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZmlsdGVyLWJhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJCYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZChcImZpbHRlcldyYXBwZXJcIikgZmlsdGVyV3JhcHBlciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZHJlbignb3B0aW9uU2VhcmNoSW5wdXQnKSBvcHRpb25TZWFyY2hJbnB1dHMhOiBFbGVtZW50UmVmW107XHJcbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFtdKVxyXG4gIG9uUmVzaXplKCkge1xyXG4gICAgdGhpcy5jaGVja092ZXJmbG93KCk7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBzZXR0aW5ncyE6IEZpbHRlckJhclNldHRpbmdzO1xyXG4gIEBJbnB1dCgpIHNldCBmaWx0ZXJSb3dWaXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9maWx0ZXJSb3dWaXNpYmxlID0gdmFsdWU7XHJcbiAgICB0aGlzLmNkcmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpO1xyXG4gIH1cclxuXHJcbiAgQE91dHB1dCgpIGZpbHRlckJhckNoYW5nZTogRXZlbnRFbWl0dGVyPEZpbHRlckJhckNoYW5nZUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8RmlsdGVyQmFyQ2hhbmdlRXZlbnQ+KCk7XHJcblxyXG4gIHByaXZhdGUgX2lucHV0VGV4dCA9IFwiXCI7XHJcbiAgcHJpdmF0ZSBfZmlsdGVyUm93VmlzaWJsZSE6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBmb3JtQ2hhbmdlc1N1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgLyoqIFRvIGhpZGUgZmlsdGVycywgYnV0IGxlYXZlIGNoaXBzIHZpc2libGUgKi9cclxuICByZWFkb25seSBpbnB1dEZvcm1Db250cm9sTmFtZSA9IFwiaW5wdXRcIjtcclxuICByZWFkb25seSBmaWx0ZXJGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICBbdGhpcy5pbnB1dEZvcm1Db250cm9sTmFtZV06IG5ldyBGb3JtQ29udHJvbChcIlwiKSxcclxuICAgIGZpbHRlcnM6IHRoaXMuZmlsdGVyRm9ybUdyb3VwXHJcbiAgfSk7XHJcblxyXG4gIHNlYXJjaFRpdGxlITogc3RyaW5nO1xyXG4gIHNlYXJjaFRvb2x0aXAhOiBzdHJpbmc7XHJcbiAgc3VmZml4SWNvbiE6IHN0cmluZztcclxuICBwcmVmaXhJY29uITogc3RyaW5nO1xyXG4gIHNob3dTdWZmaXhJY29uITogYm9vbGVhbjtcclxuICBmaWx0ZXJzOiBGaWx0ZXJCYXJDaGFuZ2VFdmVudCA9IHtcclxuICAgIGZpbHRlcnM6IHt9LFxyXG4gICAgaW5wdXQ6IFwiXCJcclxuICB9O1xyXG5cclxuICBmaWx0ZXJPdmVyZmxvdyA9IGZhbHNlO1xyXG4gIGFjdGl2ZUZpbHRlckluZGV4ID0gMDtcclxuXHJcbiAgLy8gd2hlbiB0byBzaG93IGZpbHRlciBieSBuYW1lIG9yIGlkIG9uIG1vYmlsZVxyXG4gIHNlYXJjaEluZGV4ID0gLTE7XHJcblxyXG4gIC8vIGdldHRlciBmb3IgY2xlYW5lciB0ZW1wbGF0ZSBodG1sXHJcbiAgZ2V0IGZpbHRlckZvcm1Hcm91cFZhbHVlKCk6IHsgW2tleTogc3RyaW5nXTogRmlsdGVyQmFyRmlsdGVySXRlbVtdIH0ge1xyXG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyRm9ybUdyb3VwLnZhbHVlO1xyXG4gIH1cclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2FkamFjZW50LW92ZXJsb2FkLXNpZ25hdHVyZXNcclxuICBnZXQgZmlsdGVyUm93VmlzaWJsZSgpIHsgcmV0dXJuIHRoaXMuX2ZpbHRlclJvd1Zpc2libGU7IH1cclxuICBnZXQgaW5wdXRUZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lucHV0VGV4dDtcclxuICB9XHJcbiAgZ2V0IHNob3dTZWFyY2goKSB7XHJcbiAgICByZXR1cm4gIXRoaXMuc2V0dGluZ3M/LmhpZGVTZWFyY2g7XHJcbiAgfVxyXG4gIGdldCBvdXRwdXRGaWx0ZXJLZXlBbmRWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNldHRpbmdzPy5vdXRwdXRGaWx0ZXJLZXlBbmRWYWx1ZTtcclxuICB9XHJcbiAgZ2V0IGN1cnJlbnRGaWx0ZXJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3M/LnNwbGl0dGVkRmlsdGVycz8ubGVuZ3RoID8gdGhpcy5zZXR0aW5ncy5zcGxpdHRlZEZpbHRlcnNbdGhpcy5hY3RpdmVGaWx0ZXJJbmRleF0gOiB0aGlzLnNldHRpbmdzPy5maWx0ZXJzO1xyXG4gIH1cclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9hZGphY2VudC1vdmVybG9hZC1zaWduYXR1cmVzXHJcbiAgc2V0IGlucHV0VGV4dCh2YWx1ZSkge1xyXG4gICAgdGhpcy5faW5wdXRUZXh0ID0gdmFsdWU7XHJcbiAgICB0aGlzLmZpbHRlcnMuaW5wdXQgPSB0aGlzLl9pbnB1dFRleHQ7XHJcbiAgICB0aGlzLmVtaXRGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0dGluZ3MuZmlsdGVycz8uZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuYWRkQ29udHJvbChmaWVsZC5maWVsZE5hbWUsIG5ldyBGb3JtQ29udHJvbChbXSkpO1xyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZVRvRm9ybVZhbHVlQ2hhbmdlcygpO1xyXG4gICAgdGhpcy5zZWFyY2hUb29sdGlwID0gdGhpcy5zZXR0aW5ncz8uc2VhcmNoVG9vbHRpcCA/PyAnRklMVEVSX0JBUi5TRUFSQ0hfVE9PTFRJUCc7XHJcbiAgICB0aGlzLnNlYXJjaFRpdGxlID0gdGhpcy5zZXR0aW5ncz8uc2VhcmNoVGl0bGUgPz8gJ0ZJTFRFUl9CQVIuU0VBUkNIJztcclxuICAgIHRoaXMucHJlZml4SWNvbiA9IHRoaXMuc2V0dGluZ3M/LnByZWZpeEljb24gPz8gXCJmaWx0ZXJfYWx0XCI7XHJcbiAgICB0aGlzLnN1ZmZpeEljb24gPSB0aGlzLnNldHRpbmdzPy5zdWZmaXhJY29uID8/IFwicXVlc3Rpb25fbWFya1wiO1xyXG4gICAgdGhpcy5zaG93U3VmZml4SWNvbiA9IHRoaXMuc2V0dGluZ3M/LnNob3dTdWZmaXhJY29uID8/IHRydWU7XHJcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckluZGV4ID0gdGhpcy5zaG93U2VhcmNoID8gdGhpcy5zZWFyY2hJbmRleCA6IDA7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTtcclxuICAgIHRoaXMuY2RyZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1DaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c09wdGlvblNlYXJjaElucHV0KGZpbHRlcjogRmlsdGVyQmFyRmlsdGVyLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIWZpbHRlci5zZWFyY2g/LnBsYWNlaG9sZGVyIHx8IGZpbHRlci5zZWxlY3RlZFZhbHVlcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9wdGlvblNlYXJjaElucHV0cy5maW5kKChfaXRlbSwgaSkgPT4gaSA9PT0gaW5kZXgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcblxyXG4gICAgaWYgKGZpbHRlci5tYXhQYW5lbFdpZHRoID09PSAnJyAmJiBmaWx0ZXIuc2VhcmNoLnBsYWNlaG9sZGVyKSB7XHJcbiAgICAgIHRoaXMuc2V0UGFuZWxXaWR0aChmaWx0ZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJPcHRpb25TZWFyY2hJbnB1dChmaWx0ZXI6IEZpbHRlckJhckZpbHRlciwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCFmaWx0ZXIuc2VhcmNoPy5wbGFjZWhvbGRlcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLm9wdGlvblNlYXJjaElucHV0cy5maW5kKChfaXRlbSwgaSkgPT4gaSA9PT0gaW5kZXgpPy5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGlmIChpbnB1dCkge1xyXG4gICAgICBpbnB1dC52YWx1ZSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlci5zZWFyY2guc2VhcmNoQ3JpdGVyaWEgPSAnJztcclxuICAgIHRoaXMuZmlsdGVyT3B0aW9ucyhudWxsLCBmaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyT3B0aW9ucyhldmVudDogS2V5Ym9hcmRFdmVudCB8IG51bGwsIGZpbHRlcjogRmlsdGVyQmFyRmlsdGVyKSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XHJcbiAgICBmaWx0ZXIuc2VhcmNoIS5zZWFyY2hDcml0ZXJpYSA9IHRhcmdldD8udmFsdWUgPz8gJyc7XHJcbiAgICB0aGlzLnNldHRpbmdzLmZpbHRlcnM/LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0uZmllbGROYW1lID09PSBmaWx0ZXIuZmllbGROYW1lICYmIGl0ZW0uc2VhcmNoKSB7XHJcbiAgICAgICAgaXRlbS5zZWFyY2guZmlsdGVyZWRWYWx1ZXMgPSBmaWx0ZXIudmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gaXRlbS50cmFuc2xhdGVkID8gdmFsdWUua2V5IDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCh2YWx1ZS5rZXkpO1xyXG4gICAgICAgICAgY29uc3QgbWF0Y2hlc1NlYXJjaCA9IHZhbHVlS2V5LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGFyZ2V0Py52YWx1ZT8udG9Mb3dlckNhc2UoKSA/PyAnJyk7XHJcbiAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gZmlsdGVyLnNlbGVjdGVkVmFsdWVzPy5zb21lKChzZWxlY3RlZFZhbHVlKSA9PiBzZWxlY3RlZFZhbHVlLmtleSA9PT0gdmFsdWUua2V5KTtcclxuICAgICAgICAgIHZhbHVlLmlzU2VsZWN0ZWQgPSBpc1NlbGVjdGVkID8/IGZhbHNlO1xyXG4gICAgICAgICAgdmFsdWUubWF0Y2hlc1NlYXJjaENyaXRlcmlhID0gbWF0Y2hlc1NlYXJjaCA/PyBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBtYXRjaGVzU2VhcmNoIHx8IGlzU2VsZWN0ZWQ7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RFdmVudChldmVudDogTWF0U2VsZWN0Q2hhbmdlLCBmaWx0ZXI6IEZpbHRlckJhckZpbHRlcikge1xyXG4gICAgY29uc3Qgc2V0dGluZ0ZpbHRlciA9IHRoaXMuc2V0dGluZ3MuZmlsdGVycz8uZmluZCgoaXRlbSkgPT4gaXRlbS5maWVsZE5hbWUgPT09IGZpbHRlci5maWVsZE5hbWUpIGFzIEZpbHRlckJhckZpbHRlcjtcclxuICAgIHNldHRpbmdGaWx0ZXIuc2VsZWN0ZWRWYWx1ZXMgPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldFBhbmVsV2lkdGgoZmlsdGVyOiBGaWx0ZXJCYXJGaWx0ZXIpOiB2b2lkIHtcclxuICAgIC8vIFdlIG11c3Qgc2F2ZSBwYW5lbCB3aWR0aCwgc28gZmlsdGVyaW5nIGRvZXMgbm90IGFmZmVjdCBpdGBzIHNpemUuXHJcbiAgICBjb25zdCBzZWxlY3RQYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZGstb3ZlcmxheS1wYW5lJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBzZWxlY3RQYW5lbFdpZHRoID0gc2VsZWN0UGFuZWwuY2xpZW50V2lkdGggYXMgbnVtYmVyO1xyXG4gICAgY29uc3QgZmlsdGVyT2JqID0gdGhpcy5zZXR0aW5ncy5maWx0ZXJzPy5maW5kKChpdGVtKSA9PiBpdGVtLmZpZWxkTmFtZSA9PT0gZmlsdGVyLmZpZWxkTmFtZSkgYXMgRmlsdGVyQmFyRmlsdGVyO1xyXG4gICAgZmlsdGVyT2JqLm1heFBhbmVsV2lkdGggPSBzZWxlY3RQYW5lbFdpZHRoO1xyXG4gICAgc2VsZWN0UGFuZWwuc3R5bGUubWluV2lkdGggPSBgJHtzZWxlY3RQYW5lbFdpZHRofXB4YDtcclxuICB9XHJcblxyXG4gIGVtaXRGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5maWx0ZXJCYXJDaGFuZ2UubmV4dCh0aGlzLmZpbHRlcnMpO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoUmlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy5zZXR0aW5ncz8uc3BsaXR0ZWRGaWx0ZXJzPy5sZW5ndGggPT09IHRoaXMuYWN0aXZlRmlsdGVySW5kZXggKyAxKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlRmlsdGVySW5kZXggKz0gMTtcclxuICB9XHJcblxyXG4gIHN3aXRjaExlZnQoKSB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVGaWx0ZXJJbmRleCA9PT0gdGhpcy5zZWFyY2hJbmRleCB8fCAhdGhpcy5zaG93U2VhcmNoICYmIHRoaXMuYWN0aXZlRmlsdGVySW5kZXggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJJbmRleCAtPSAxO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlRmlsdGVyKGtleTogc3RyaW5nLCBpeDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5maWx0ZXJGb3JtR3JvdXAuZ2V0KGtleSk7XHJcblxyXG4gICAgaWYgKCFjb250cm9sKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdBcnJheSA9IGNvbnRyb2wudmFsdWUgYXMgW107XHJcbiAgICBuZXdBcnJheS5zcGxpY2UoaXgsIDEpO1xyXG4gICAgY29udHJvbC5zZXRWYWx1ZShuZXdBcnJheSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVBbGxGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5zZXR0aW5ncy5maWx0ZXJzPy5mb3JFYWNoKChmaWx0ZXIpID0+IHtcclxuICAgICAgY29uc3QgdmFsdWVzQXJyYXkgPSB0aGlzLmZpbHRlckZvcm1Hcm91cFZhbHVlW2ZpbHRlci5maWVsZE5hbWVdO1xyXG4gICAgICB3aGlsZSAodmFsdWVzQXJyYXkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMucmVtb3ZlRmlsdGVyKGZpbHRlci5maWVsZE5hbWUsIDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tPdmVyZmxvdygpIHtcclxuICAgIGlmICh0aGlzLmZpbHRlcldyYXBwZXI/Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgY29uc3QgbWluRmlsdGVyV2lkdGggPSAxMDA7XHJcbiAgICAgIGNvbnN0IHNlYXJjaEZpbHRlcldpZHRoID0gMTUwO1xyXG4gIFxyXG4gICAgICBpZiAodGhpcy5zZXR0aW5ncz8uZmlsdGVycz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSB0aGlzLmZpbHRlcldyYXBwZXIubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcclxuICBcclxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHRvdGFsIHdpZHRoIG5lZWRlZCBmb3IgYWxsIGZpbHRlcnNcclxuICAgICAgICBjb25zdCB0b3RhbFdpZHRoTmVlZGVkID0gdGhpcy5zZXR0aW5ncy5maWx0ZXJzLmxlbmd0aCAqIG1pbkZpbHRlcldpZHRoICsgKHRoaXMuc2hvd1NlYXJjaCA/IHNlYXJjaEZpbHRlcldpZHRoIDogMCk7XHJcbiAgXHJcbiAgICAgICAgLy8gSWYgYWxsIGZpbHRlcnMgY2FuIGZpdCB3aXRoaW4gdGhlIGNvbnRhaW5lciwgbm8gbmVlZCB0byBzcGxpdFxyXG4gICAgICAgIGlmICh0b3RhbFdpZHRoTmVlZGVkIDw9IGNvbnRhaW5lcldpZHRoKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZUZpbHRlckluZGV4ID0gdGhpcy5zaG93U2VhcmNoID8gdGhpcy5zZWFyY2hJbmRleCA6IDA7XHJcbiAgICAgICAgICB0aGlzLnNldHRpbmdzLnNwbGl0dGVkRmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJPdmVyZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICAvLyBDYWxjdWxhdGUgaG93IG1hbnkgZmlsdGVycyBjYW4gZml0IHBlciByb3cgYmFzZWQgb24gdGhlIGNvbnRhaW5lciB3aWR0aFxyXG4gICAgICAgIGNvbnN0IGZpbHRlcnNQZXJSb3cgPSBNYXRoLmZsb29yKGNvbnRhaW5lcldpZHRoIC8gbWluRmlsdGVyV2lkdGgpO1xyXG4gIFxyXG4gICAgICAgIC8vIERldGVybWluZSBob3cgbWFueSBncm91cHMgYXJlIG5lZWRlZFxyXG4gICAgICAgIGNvbnN0IGdyb3VwQ291bnQgPSBNYXRoLmNlaWwodGhpcy5zZXR0aW5ncy5maWx0ZXJzLmxlbmd0aCAvIGZpbHRlcnNQZXJSb3cpO1xyXG5cclxuICAgICAgICBpZiAoKGdyb3VwQ291bnQgKyAodGhpcy5zaG93U2VhcmNoID8gMSA6IDApKSA8IHRoaXMuYWN0aXZlRmlsdGVySW5kZXggKyAxKSB7XHJcbiAgICAgICAgICB0aGlzLmFjdGl2ZUZpbHRlckluZGV4ID0gdGhpcy5zaG93U2VhcmNoID8gdGhpcy5zZWFyY2hJbmRleCA6IDA7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSBncm91cCBzaXplIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgZ3JvdXBzXHJcbiAgICAgICAgY29uc3QgZ3JvdXBTaXplID0gTWF0aC5jZWlsKHRoaXMuc2V0dGluZ3MuZmlsdGVycy5sZW5ndGggLyBncm91cENvdW50KTtcclxuICBcclxuICAgICAgICAvLyBTcGxpdCBmaWx0ZXJzIGludG8gdGhlIGNhbGN1bGF0ZWQgbnVtYmVyIG9mIGdyb3Vwc1xyXG4gICAgICAgIGNvbnN0IG5ld1NwbGl0dGVkRmlsdGVyczogRmlsdGVyQmFyRmlsdGVyW11bXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXR0aW5ncy5maWx0ZXJzLmxlbmd0aDsgaSArPSBncm91cFNpemUpIHtcclxuICAgICAgICAgIG5ld1NwbGl0dGVkRmlsdGVycy5wdXNoKHRoaXMuc2V0dGluZ3MuZmlsdGVycy5zbGljZShpLCBpICsgZ3JvdXBTaXplKSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3Muc3BsaXR0ZWRGaWx0ZXJzID0gbmV3U3BsaXR0ZWRGaWx0ZXJzO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3ZlcmZsb3cgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9Gb3JtVmFsdWVDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5mb3JtQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJzID0ge1xyXG4gICAgICAgIGlucHV0OiB0aGlzLmZvcm0udmFsdWUuaW5wdXQgPz8gXCJcIixcclxuICAgICAgICBmaWx0ZXJzOiB7fVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgZm9yIChjb25zdCBmaWx0ZXJLZXkgaW4gdGhpcy5mb3JtLnZhbHVlLmZpbHRlcnMpIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNvbnN0IGZpbHRlcjogRmlsdGVyQmFyRmlsdGVySXRlbVtdID0gKHRoaXMuZm9ybS52YWx1ZS5maWx0ZXJzIGFzIGFueSlbZmlsdGVyS2V5XSBhcyBGaWx0ZXJCYXJGaWx0ZXJJdGVtW107XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLmZpbHRlcnNbZmlsdGVyS2V5XSA9IGZpbHRlci5tYXAoKGl0ZW0pID0+IHRoaXMub3V0cHV0RmlsdGVyS2V5QW5kVmFsdWUgPyBpdGVtIDogaXRlbS52YWx1ZSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVtaXRGaWx0ZXJzKCk7XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmlsdGVyLXJvd1wiICpuZ0lmPVwiZmlsdGVyUm93VmlzaWJsZVwiPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBjbGFzcz1cImZpbHRlci13cmFwcGVyXCIgI2ZpbHRlcldyYXBwZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICA8bWF0LWZvcm0tZmllbGQgZnhGbGV4ICpuZ0lmPVwic2hvd1NlYXJjaCAmJiAhZmlsdGVyT3ZlcmZsb3cgfHwgYWN0aXZlRmlsdGVySW5kZXggPT09IHNlYXJjaEluZGV4XCIgY2xhc3M9XCJmaWx0ZXItYmFyLXNlYXJjaC1pbnB1dFwiPlxyXG4gICAgICA8c3BhbiBtYXRQcmVmaXggY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPlxyXG4gICAgICAgIHt7cHJlZml4SWNvbn19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPHNwYW4gbWF0U3VmZml4IGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIiAqbmdJZj1cInNob3dTdWZmaXhJY29uXCIgW21hdFRvb2x0aXBdPVwic2VhcmNoVG9vbHRpcCB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIHt7c3VmZml4SWNvbn19XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgICAgPGlucHV0IGNsYXNzPVwic2VhcmNoLWlucHV0XCIgbWF0SW5wdXQgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFRpdGxlIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImlucHV0Rm9ybUNvbnRyb2xOYW1lXCI+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cImZpbHRlckZvcm1Hcm91cFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWx0ZXIgb2YgY3VycmVudEZpbHRlcnM7IGxldCBpID0gaW5kZXhcIj5cclxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2VsZWN0LXRyaWdnZXItYnRuXCIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeS1hY2NlbnQtZGFya2VyXCIgKGNsaWNrKT1cInNlbGVjdC5vcGVuKClcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWxlY3QtdHJpZ2dlci1idG4tbGFiZWxcIj5cclxuICAgICAgICAgICAgPHNwYW4+e3tmaWx0ZXIudGl0bGUgfCB0cmFuc2xhdGV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJmaWx0ZXIuc2VsZWN0ZWRWYWx1ZXM/Lmxlbmd0aFwiIGNsYXNzPVwic2VsZWN0ZWQtY291bnRcIj4oe3tmaWx0ZXIuc2VsZWN0ZWRWYWx1ZXM/Lmxlbmd0aH19KTwvc3Bhbj5cclxuICAgICAgICAgICAgPG1hdC1pY29uPnt7IHNlbGVjdC5wYW5lbE9wZW4gPyBcImtleWJvYXJkX2Fycm93X3VwXCIgOiBcImtleWJvYXJkX2Fycm93X2Rvd25cIiB9fTwvbWF0LWljb24+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8bWF0LXNlbGVjdFxyXG4gICAgICAgICAgICBtdWx0aXBsZSBcclxuICAgICAgICAgICAgI3NlbGVjdFxyXG4gICAgICAgICAgICBbcGFuZWxDbGFzc109XCInZmlsdGVyLXBhbmVsJ1wiXHJcbiAgICAgICAgICAgIFtwYW5lbFdpZHRoXT1cImZpbHRlcj8ubWF4UGFuZWxXaWR0aCA/PyAnYXV0bydcIiBcclxuICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJmaWx0ZXIuZmllbGROYW1lXCIgXHJcbiAgICAgICAgICAgIChvcGVuZWRDaGFuZ2UpPVwiJGV2ZW50ID09PSB0cnVlID8gZm9jdXNPcHRpb25TZWFyY2hJbnB1dChmaWx0ZXIsIGkpIDogY2xlYXJPcHRpb25TZWFyY2hJbnB1dChmaWx0ZXIsIGkpXCJcclxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJzZWxlY3RFdmVudCgkZXZlbnQsIGZpbHRlcilcIiBcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcj8uc2VhcmNoPy5wbGFjZWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCAjb3B0aW9uU2VhcmNoSW5wdXQgY2xhc3M9XCJvcHRpb24tc2VhcmNoLWlucHV0XCIgW2NsYXNzLmhpZGRlbl09XCJmaWx0ZXIudmFsdWVzIS5sZW5ndGggPCAxMFwiIHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cImZpbHRlci5zZWFyY2g/LnBsYWNlaG9sZGVyID8/ICcnIHwgdHJhbnNsYXRlXCIgKGtleXVwKT1cImZpbHRlck9wdGlvbnMoJGV2ZW50LCBmaWx0ZXIpXCIgKGtleWRvd24pPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudmFsdWVzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIudHJhbnNsYXRlZDsgZWxzZSBzb3J0ZWRWYWx1ZXNCeVByb3BlcnR5XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiAoZmlsdGVyLnNlYXJjaD8uZmlsdGVyZWRWYWx1ZXMgPz8gZmlsdGVyLnZhbHVlcykgfCBzb3J0QWxwaGFiZXRpY2FsbHk6J2tleSdcIj5cclxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW2NsYXNzLmhpZGRlbl09XCJmaWx0ZXIuc2VhcmNoPy5zZWFyY2hDcml0ZXJpYSAmJiB2YWx1ZS5pc1NlbGVjdGVkICYmICF2YWx1ZS5tYXRjaGVzU2VhcmNoQ3JpdGVyaWFcIiBjbGFzcz1cImZpbHRlci1vcHRpb25cIiBbZGlzYWJsZWRdPVwiZmlsdGVyLnNpbmdsZVNlbGVjdGlvbj8uc2VsZWN0ZWQgJiYgZmlsdGVyLnNpbmdsZVNlbGVjdGlvbj8udmFsdWUgIT09IHZhbHVlLnZhbHVlXCIgW3ZhbHVlXT1cInZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZmlsdGVyLmRpc2FibGVUaXRsZUNhc2UgPyB2YWx1ZS5rZXkgOiAodmFsdWUua2V5IHwgdGl0bGVjYXNlKSB9fVxyXG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NvcnRlZFZhbHVlc0J5UHJvcGVydHk+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB2YWx1ZSBvZiAoZmlsdGVyLnNlYXJjaD8uZmlsdGVyZWRWYWx1ZXMgPz8gZmlsdGVyLnZhbHVlcykgfCBzb3J0VHJhbnNsYXRpb25zQnlQcm9wZXJ0eTona2V5JzondmFsdWUnXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFtjbGFzcy5oaWRkZW5dPVwiZmlsdGVyLnNlYXJjaD8uc2VhcmNoQ3JpdGVyaWEgJiYgdmFsdWUuaXNTZWxlY3RlZCAmJiAhdmFsdWUubWF0Y2hlc1NlYXJjaENyaXRlcmlhXCIgY2xhc3M9XCJmaWx0ZXItb3B0aW9uXCIgW2Rpc2FibGVkXT1cImZpbHRlci5zaW5nbGVTZWxlY3Rpb24/LnNlbGVjdGVkICYmIGZpbHRlci5zaW5nbGVTZWxlY3Rpb24/LnZhbHVlICE9PSB2YWx1ZS52YWx1ZVwiIFt2YWx1ZV09XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZmlsdGVyLmRpc2FibGVUaXRsZUNhc2U7IGVsc2UgZGVmYXVsdENhc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZS5rZXkgfCB0cmFuc2xhdGUgOiB7IGRlZmF1bHQ6IHZhbHVlLnZhbHVlIHwgdGl0bGVjYXNlIH0gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdENhc2U+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyB2YWx1ZS5rZXkgfCB0cmFuc2xhdGUgOiB7IGRlZmF1bHQ6IHZhbHVlLnZhbHVlIH0gfX0gXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgPC9kaXY+XHJcbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlck92ZXJmbG93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWFycm93c1wiPlxyXG4gICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic3dpdGNoTGVmdCgpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgY2hldnJvbl9sZWZ0XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInN3aXRjaFJpZ2h0KClcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cIm1hdGVyaWFsLWljb25zLW91dGxpbmVkXCI+XHJcbiAgICAgICAgICBjaGV2cm9uX3JpZ2h0XHJcbiAgICAgICAgPC9zcGFuPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L2Rpdj5cclxuPG1hdC1jaGlwLWxpc3Rib3g+XHJcbiAgPGRpdiAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIHNldHRpbmdzPy5maWx0ZXJzXCI+XHJcbiAgICA8bWF0LWNoaXAtb3B0aW9uIGNvbG9yPVwicHJpbWFyeS1hY2NlbnQtZGFya2VyXCIgKm5nRm9yPVwibGV0IGZpbHRlclZhbHVlIG9mIGZpbHRlckZvcm1Hcm91cFZhbHVlW2ZpbHRlci5maWVsZE5hbWVdOyBsZXQgaXg9aW5kZXhcIlxyXG4gICAgICAocmVtb3ZlZCk9XCJyZW1vdmVGaWx0ZXIoZmlsdGVyLmZpZWxkTmFtZSwgaXgpXCIgY2xhc3M9XCJ0ZXh0LXNcIj5cclxuICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlPlxyXG4gICAgICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImNoaXAtdmFsdWVcIj4ge3soZmlsdGVyLnRyYW5zbGF0ZWQgPyBmaWx0ZXJWYWx1ZS5rZXkgOiBmaWx0ZXJWYWx1ZS5rZXkgfCB0cmFuc2xhdGUgOiB7ZGVmYXVsdDogZmlsdGVyVmFsdWUudmFsdWV9KSB8IHRpdGxlY2FzZVxyXG4gICAgICAgIH19PC9zcGFuPlxyXG4gICAgPC9tYXQtY2hpcC1vcHRpb24+XHJcbiAgPC9kaXY+XHJcbjwvbWF0LWNoaXAtbGlzdGJveD5cclxuIl19
448
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtY29tbW9uL3NyYy9saWIvZmlsdGVyLWJhci9maWx0ZXItYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1jb21tb24vc3JjL2xpYi9maWx0ZXItYmFyL2ZpbHRlci1iYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9LLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDTTVDLGdDQUFtRTtJQUFBLFlBQW1DO0lBQUEsaUJBQU87OztJQUExQyxjQUFtQztJQUFuQywwR0FBbUM7Ozs7SUFhdEcsNkJBQWtEO0lBQ2hELG9DQUF3UDs7SUFBckMsQUFBeEMsbVFBQVMsdUNBQTZCLEtBQUMsc0tBQVksd0JBQXdCLEtBQUM7SUFBdlAsaUJBQXdQOzs7OztJQUFsTSxjQUEyQztJQUEzQyxzREFBMkM7SUFBYSwrS0FBNEQ7OztJQUt4Syw2QkFBZ0g7SUFDOUcsc0NBQW9QO0lBQ2xQLFlBQ0Y7O0lBQUEsaUJBQWE7Ozs7O0lBRkQsY0FBa0c7SUFBbEcsdUpBQWtHO0lBQXNILEFBQS9GLDZNQUE4RixtQkFBZ0I7SUFDalAsY0FDRjtJQURFLCtHQUNGOzs7SUFKSiw2QkFBcUU7SUFDbkUseUlBQWdIOzs7Ozs7SUFBaEYsY0FBOEU7SUFBOUUsbU1BQThFOzs7SUFVMUcsNkJBQWlFO0lBQ2pFLFlBQ0E7Ozs7OztJQURBLGNBQ0E7SUFEQSxxSUFDQTs7O0lBR0UsWUFDRjs7OztJQURFLCtHQUNGOzs7SUFSSiw2QkFBZ0k7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Q0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDMUcsQ0FBQztZQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyQixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7bUhBeE9VLGtCQUFrQjtvRUFBbEIsa0JBQWtCOzs7Ozs7OztZQUFsQix5RkFBQSxjQUFVLCtCQUFROztZQ2YvQixtRUFBaUQ7WUFtRWpELHdDQUFrQjtZQUNoQixtRUFBOEM7WUFVaEQsaUJBQW1COztZQTlFTSwyQ0FBc0I7WUFvRXJCLGVBQW9CO1lBQXBCLDRFQUFvQjs7O2lGRHJEakMsa0JBQWtCO2NBTjlCLFNBQVM7MkJBRUUsZ0JBQWdCO2lGQUtFLGFBQWE7a0JBQXhDLFNBQVM7bUJBQUMsZUFBZTtZQUNTLGtCQUFrQjtrQkFBcEQsWUFBWTttQkFBQyxtQkFBbUI7WUFFakMsUUFBUTtrQkFEUCxZQUFZO21CQUFDLGVBQWUsRUFBRSxFQUFFO1lBS3hCLFFBQVE7a0JBQWhCLEtBQUs7WUFDTyxnQkFBZ0I7a0JBQTVCLEtBQUs7WUFNSSxlQUFlO2tCQUF4QixNQUFNOztrRkFmSSxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJGaWx0ZXIsIEZpbHRlckJhckZpbHRlckl0ZW0gfSBmcm9tICcuL21vZGVscyc7XHJcbmltcG9ydCB7IEZpbHRlckJhckNoYW5nZUV2ZW50IH0gZnJvbSAnLi9tb2RlbHMvZmlsdGVyLWJhci1jaGFuZ2UtZXZlbnQubW9kZWwnO1xyXG5pbXBvcnQgeyBGaWx0ZXJCYXJTZXR0aW5ncyB9IGZyb20gJy4vbW9kZWxzL2ZpbHRlci1iYXItc2V0dGluZ3MubW9kZWwnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAndGxkLWZpbHRlci1iYXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXItYmFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXItYmFyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEZpbHRlckJhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcclxuICBAVmlld0NoaWxkKFwiZmlsdGVyV3JhcHBlclwiKSBmaWx0ZXJXcmFwcGVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkcmVuKCdvcHRpb25TZWFyY2hJbnB1dCcpIG9wdGlvblNlYXJjaElucHV0cyE6IEVsZW1lbnRSZWZbXTtcclxuICBASG9zdExpc3RlbmVyKCd3aW5kb3c6cmVzaXplJywgW10pXHJcbiAgb25SZXNpemUoKSB7XHJcbiAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldHRpbmdzITogRmlsdGVyQmFyU2V0dGluZ3M7XHJcbiAgQElucHV0KCkgc2V0IGZpbHRlclJvd1Zpc2libGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2ZpbHRlclJvd1Zpc2libGUgPSB2YWx1ZTtcclxuICAgIHRoaXMuY2RyZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgdGhpcy5jaGVja092ZXJmbG93KCk7XHJcbiAgfVxyXG5cclxuICBAT3V0cHV0KCkgZmlsdGVyQmFyQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RmlsdGVyQmFyQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxGaWx0ZXJCYXJDaGFuZ2VFdmVudD4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfaW5wdXRUZXh0ID0gXCJcIjtcclxuICBwcml2YXRlIF9maWx0ZXJSb3dWaXNpYmxlITogYm9vbGVhbjtcclxuICBwcml2YXRlIGZvcm1DaGFuZ2VzU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG5cclxuICByZWFkb25seSBmaWx0ZXJGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICByZWFkb25seSBmb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlckZvcm1Hcm91cFxyXG4gIH0pO1xyXG5cclxuICBmaWx0ZXJzOiBGaWx0ZXJCYXJDaGFuZ2VFdmVudCA9IHtcclxuICAgIGlucHV0OiAnJyxcclxuICAgIGZpbHRlcnM6IHt9LFxyXG4gIH07XHJcblxyXG4gIGZpbHRlck92ZXJmbG93ID0gZmFsc2U7XHJcbiAgYWN0aXZlRmlsdGVySW5kZXggPSAwO1xyXG5cclxuICAvLyBnZXR0ZXIgZm9yIGNsZWFuZXIgdGVtcGxhdGUgaHRtbFxyXG4gIGdldCBmaWx0ZXJGb3JtR3JvdXBWYWx1ZSgpOiB7IFtrZXk6IHN0cmluZ106IEZpbHRlckJhckZpbHRlckl0ZW1bXSB9IHtcclxuICAgIHJldHVybiB0aGlzLmZpbHRlckZvcm1Hcm91cC52YWx1ZTtcclxuICB9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9hZGphY2VudC1vdmVybG9hZC1zaWduYXR1cmVzXHJcbiAgZ2V0IGZpbHRlclJvd1Zpc2libGUoKSB7IHJldHVybiB0aGlzLl9maWx0ZXJSb3dWaXNpYmxlOyB9XHJcbiAgZ2V0IGlucHV0VGV4dCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnB1dFRleHQ7XHJcbiAgfVxyXG4gIGdldCBvdXRwdXRGaWx0ZXJLZXlBbmRWYWx1ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNldHRpbmdzPy5vdXRwdXRGaWx0ZXJLZXlBbmRWYWx1ZTtcclxuICB9XHJcbiAgZ2V0IGN1cnJlbnRGaWx0ZXJzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc2V0dGluZ3M/LnNwbGl0dGVkRmlsdGVycz8ubGVuZ3RoID8gdGhpcy5zZXR0aW5ncy5zcGxpdHRlZEZpbHRlcnNbdGhpcy5hY3RpdmVGaWx0ZXJJbmRleF0gOiB0aGlzLnNldHRpbmdzPy5maWx0ZXJzO1xyXG4gIH1cclxuXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9hZGphY2VudC1vdmVybG9hZC1zaWduYXR1cmVzXHJcbiAgc2V0IGlucHV0VGV4dCh2YWx1ZSkge1xyXG4gICAgdGhpcy5faW5wdXRUZXh0ID0gdmFsdWU7XHJcbiAgICB0aGlzLmZpbHRlcnMuaW5wdXQgPSB0aGlzLl9pbnB1dFRleHQ7XHJcbiAgICB0aGlzLmVtaXRGaWx0ZXJzKCk7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcmVmOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuc2V0dGluZ3MuZmlsdGVycz8uZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJGb3JtR3JvdXAuYWRkQ29udHJvbChmaWVsZC5maWVsZE5hbWUsIG5ldyBGb3JtQ29udHJvbChbXSkpO1xyXG4gICAgfSlcclxuXHJcbiAgICB0aGlzLnN1YnNjcmliZVRvRm9ybVZhbHVlQ2hhbmdlcygpO1xyXG4gIFxyXG4gICAgdGhpcy5hY3RpdmVGaWx0ZXJJbmRleCA9IDA7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTtcclxuICAgIHRoaXMuY2RyZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1DaGFuZ2VzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBmb2N1c09wdGlvblNlYXJjaElucHV0KGZpbHRlcjogRmlsdGVyQmFyRmlsdGVyLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBpZiAoIWZpbHRlci5zZWFyY2g/LnBsYWNlaG9sZGVyIHx8IGZpbHRlci5zZWxlY3RlZFZhbHVlcz8ubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLm9wdGlvblNlYXJjaElucHV0cy5maW5kKChfaXRlbSwgaSkgPT4gaSA9PT0gaW5kZXgpPy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcblxyXG4gICAgaWYgKGZpbHRlci5tYXhQYW5lbFdpZHRoID09PSAnJyAmJiBmaWx0ZXIuc2VhcmNoLnBsYWNlaG9sZGVyKSB7XHJcbiAgICAgIHRoaXMuc2V0UGFuZWxXaWR0aChmaWx0ZXIpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJPcHRpb25TZWFyY2hJbnB1dChmaWx0ZXI6IEZpbHRlckJhckZpbHRlciwgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKCFmaWx0ZXIuc2VhcmNoPy5wbGFjZWhvbGRlcikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLm9wdGlvblNlYXJjaElucHV0cy5maW5kKChfaXRlbSwgaSkgPT4gaSA9PT0gaW5kZXgpPy5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgIGlmIChpbnB1dCkge1xyXG4gICAgICBpbnB1dC52YWx1ZSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlci5zZWFyY2guc2VhcmNoQ3JpdGVyaWEgPSAnJztcclxuICAgIHRoaXMuZmlsdGVyT3B0aW9ucyhudWxsLCBmaWx0ZXIpO1xyXG4gIH1cclxuXHJcbiAgZmlsdGVyT3B0aW9ucyhldmVudDogS2V5Ym9hcmRFdmVudCB8IG51bGwsIGZpbHRlcjogRmlsdGVyQmFyRmlsdGVyKSB7XHJcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxUZXh0QXJlYUVsZW1lbnQ7XHJcbiAgICBmaWx0ZXIuc2VhcmNoIS5zZWFyY2hDcml0ZXJpYSA9IHRhcmdldD8udmFsdWUgPz8gJyc7XHJcbiAgICB0aGlzLnNldHRpbmdzLmZpbHRlcnM/LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0uZmllbGROYW1lID09PSBmaWx0ZXIuZmllbGROYW1lICYmIGl0ZW0uc2VhcmNoKSB7XHJcbiAgICAgICAgaXRlbS5zZWFyY2guZmlsdGVyZWRWYWx1ZXMgPSBmaWx0ZXIudmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHZhbHVlS2V5ID0gaXRlbS50cmFuc2xhdGVkID8gdmFsdWUua2V5IDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCh2YWx1ZS5rZXkpO1xyXG4gICAgICAgICAgY29uc3QgbWF0Y2hlc1NlYXJjaCA9IHZhbHVlS2V5LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGFyZ2V0Py52YWx1ZT8udG9Mb3dlckNhc2UoKSA/PyAnJyk7XHJcbiAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkID0gZmlsdGVyLnNlbGVjdGVkVmFsdWVzPy5zb21lKChzZWxlY3RlZFZhbHVlKSA9PiBzZWxlY3RlZFZhbHVlLmtleSA9PT0gdmFsdWUua2V5KTtcclxuICAgICAgICAgIHZhbHVlLmlzU2VsZWN0ZWQgPSBpc1NlbGVjdGVkID8/IGZhbHNlO1xyXG4gICAgICAgICAgdmFsdWUubWF0Y2hlc1NlYXJjaENyaXRlcmlhID0gbWF0Y2hlc1NlYXJjaCA/PyBmYWxzZTtcclxuICAgICAgICAgIHJldHVybiBtYXRjaGVzU2VhcmNoIHx8IGlzU2VsZWN0ZWQ7XHJcbiAgICAgICAgfSlcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RFdmVudChldmVudDogTWF0U2VsZWN0Q2hhbmdlLCBmaWx0ZXI6IEZpbHRlckJhckZpbHRlcikge1xyXG4gICAgY29uc3Qgc2V0dGluZ0ZpbHRlciA9IHRoaXMuc2V0dGluZ3MuZmlsdGVycz8uZmluZCgoaXRlbSkgPT4gaXRlbS5maWVsZE5hbWUgPT09IGZpbHRlci5maWVsZE5hbWUpIGFzIEZpbHRlckJhckZpbHRlcjtcclxuICAgIHNldHRpbmdGaWx0ZXIuc2VsZWN0ZWRWYWx1ZXMgPSBldmVudC52YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldFBhbmVsV2lkdGgoZmlsdGVyOiBGaWx0ZXJCYXJGaWx0ZXIpOiB2b2lkIHtcclxuICAgIC8vIFdlIG11c3Qgc2F2ZSBwYW5lbCB3aWR0aCwgc28gZmlsdGVyaW5nIGRvZXMgbm90IGFmZmVjdCBpdGBzIHNpemUuXHJcbiAgICBjb25zdCBzZWxlY3RQYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jZGstb3ZlcmxheS1wYW5lJykgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zdCBzZWxlY3RQYW5lbFdpZHRoID0gc2VsZWN0UGFuZWwuY2xpZW50V2lkdGggYXMgbnVtYmVyO1xyXG4gICAgY29uc3QgZmlsdGVyT2JqID0gdGhpcy5zZXR0aW5ncy5maWx0ZXJzPy5maW5kKChpdGVtKSA9PiBpdGVtLmZpZWxkTmFtZSA9PT0gZmlsdGVyLmZpZWxkTmFtZSkgYXMgRmlsdGVyQmFyRmlsdGVyO1xyXG4gICAgZmlsdGVyT2JqLm1heFBhbmVsV2lkdGggPSBzZWxlY3RQYW5lbFdpZHRoO1xyXG4gICAgc2VsZWN0UGFuZWwuc3R5bGUubWluV2lkdGggPSBgJHtzZWxlY3RQYW5lbFdpZHRofXB4YDtcclxuICB9XHJcblxyXG4gIGVtaXRGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5maWx0ZXJCYXJDaGFuZ2UubmV4dCh0aGlzLmZpbHRlcnMpO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoUmlnaHQoKSB7XHJcbiAgICBpZiAodGhpcy5zZXR0aW5ncz8uc3BsaXR0ZWRGaWx0ZXJzPy5sZW5ndGggPT09IHRoaXMuYWN0aXZlRmlsdGVySW5kZXggKyAxKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZlRmlsdGVySW5kZXggKz0gMTtcclxuICB9XHJcblxyXG4gIHN3aXRjaExlZnQoKSB7XHJcbiAgICBpZiAodGhpcy5hY3RpdmVGaWx0ZXJJbmRleCA9PT0gMCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZUZpbHRlckluZGV4IC09IDE7XHJcbiAgfVxyXG5cclxuICByZW1vdmVGaWx0ZXIoa2V5OiBzdHJpbmcsIGl4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmZpbHRlckZvcm1Hcm91cC5nZXQoa2V5KTtcclxuXHJcbiAgICBpZiAoIWNvbnRyb2wpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG5ld0FycmF5ID0gY29udHJvbC52YWx1ZSBhcyBbXTtcclxuICAgIG5ld0FycmF5LnNwbGljZShpeCwgMSk7XHJcbiAgICBjb250cm9sLnNldFZhbHVlKG5ld0FycmF5KTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUFsbEZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLnNldHRpbmdzLmZpbHRlcnM/LmZvckVhY2goKGZpbHRlcikgPT4ge1xyXG4gICAgICBjb25zdCB2YWx1ZXNBcnJheSA9IHRoaXMuZmlsdGVyRm9ybUdyb3VwVmFsdWVbZmlsdGVyLmZpZWxkTmFtZV07XHJcbiAgICAgIHdoaWxlICh2YWx1ZXNBcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5yZW1vdmVGaWx0ZXIoZmlsdGVyLmZpZWxkTmFtZSwgMCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjaGVja092ZXJmbG93KCkge1xyXG4gICAgaWYgKHRoaXMuZmlsdGVyV3JhcHBlcj8ubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICBjb25zdCBtaW5GaWx0ZXJXaWR0aCA9IDEwMDtcclxuICBcclxuICAgICAgaWYgKHRoaXMuc2V0dGluZ3M/LmZpbHRlcnM/Lmxlbmd0aCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5maWx0ZXJXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGg7XHJcbiAgXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSB0b3RhbCB3aWR0aCBuZWVkZWQgZm9yIGFsbCBmaWx0ZXJzXHJcbiAgICAgICAgY29uc3QgdG90YWxXaWR0aE5lZWRlZCA9IHRoaXMuc2V0dGluZ3MuZmlsdGVycy5sZW5ndGggKiBtaW5GaWx0ZXJXaWR0aDtcclxuICBcclxuICAgICAgICAvLyBJZiBhbGwgZmlsdGVycyBjYW4gZml0IHdpdGhpbiB0aGUgY29udGFpbmVyLCBubyBuZWVkIHRvIHNwbGl0XHJcbiAgICAgICAgaWYgKHRvdGFsV2lkdGhOZWVkZWQgPD0gY29udGFpbmVyV2lkdGgpIHtcclxuICAgICAgICAgIHRoaXMuYWN0aXZlRmlsdGVySW5kZXggPSAwO1xyXG4gICAgICAgICAgdGhpcy5zZXR0aW5ncy5zcGxpdHRlZEZpbHRlcnMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuZmlsdGVyT3ZlcmZsb3cgPSBmYWxzZTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGhvdyBtYW55IGZpbHRlcnMgY2FuIGZpdCBwZXIgcm93IGJhc2VkIG9uIHRoZSBjb250YWluZXIgd2lkdGhcclxuICAgICAgICBjb25zdCBmaWx0ZXJzUGVyUm93ID0gTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAvIG1pbkZpbHRlcldpZHRoKTtcclxuICBcclxuICAgICAgICAvLyBEZXRlcm1pbmUgaG93IG1hbnkgZ3JvdXBzIGFyZSBuZWVkZWRcclxuICAgICAgICBjb25zdCBncm91cENvdW50ID0gTWF0aC5jZWlsKHRoaXMuc2V0dGluZ3MuZmlsdGVycy5sZW5ndGggLyBmaWx0ZXJzUGVyUm93KTtcclxuXHJcbiAgICAgICAgaWYgKGdyb3VwQ291bnQgPCB0aGlzLmFjdGl2ZUZpbHRlckluZGV4ICsgMSkge1xyXG4gICAgICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJJbmRleCA9IDA7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIC8vIENhbGN1bGF0ZSBncm91cCBzaXplIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgZ3JvdXBzXHJcbiAgICAgICAgY29uc3QgZ3JvdXBTaXplID0gTWF0aC5jZWlsKHRoaXMuc2V0dGluZ3MuZmlsdGVycy5sZW5ndGggLyBncm91cENvdW50KTtcclxuICBcclxuICAgICAgICAvLyBTcGxpdCBmaWx0ZXJzIGludG8gdGhlIGNhbGN1bGF0ZWQgbnVtYmVyIG9mIGdyb3Vwc1xyXG4gICAgICAgIGNvbnN0IG5ld1NwbGl0dGVkRmlsdGVyczogRmlsdGVyQmFyRmlsdGVyW11bXSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZXR0aW5ncy5maWx0ZXJzLmxlbmd0aDsgaSArPSBncm91cFNpemUpIHtcclxuICAgICAgICAgIG5ld1NwbGl0dGVkRmlsdGVycy5wdXNoKHRoaXMuc2V0dGluZ3MuZmlsdGVycy5zbGljZShpLCBpICsgZ3JvdXBTaXplKSk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIHRoaXMuc2V0dGluZ3Muc3BsaXR0ZWRGaWx0ZXJzID0gbmV3U3BsaXR0ZWRGaWx0ZXJzO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyT3ZlcmZsb3cgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9Gb3JtVmFsdWVDaGFuZ2VzKCkge1xyXG4gICAgdGhpcy5mb3JtQ2hhbmdlc1N1YnNjcmlwdGlvbiA9IHRoaXMuZm9ybS52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5maWx0ZXJzID0ge1xyXG4gICAgICAgIGlucHV0OiAnJyxcclxuICAgICAgICBmaWx0ZXJzOiB7fVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgZm9yIChjb25zdCBmaWx0ZXJLZXkgaW4gdGhpcy5mb3JtLnZhbHVlLmZpbHRlcnMpIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGNvbnN0IGZpbHRlcjogRmlsdGVyQmFyRmlsdGVySXRlbVtdID0gKHRoaXMuZm9ybS52YWx1ZS5maWx0ZXJzIGFzIGFueSlbZmlsdGVyS2V5XSBhcyBGaWx0ZXJCYXJGaWx0ZXJJdGVtW107XHJcbiAgICAgICAgdGhpcy5maWx0ZXJzLmZpbHRlcnNbZmlsdGVyS2V5XSA9IGZpbHRlci5tYXAoKGl0ZW0pID0+IHRoaXMub3V0cHV0RmlsdGVyS2V5QW5kVmFsdWUgPyBpdGVtIDogaXRlbS52YWx1ZSlcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVtaXRGaWx0ZXJzKCk7XHJcbiAgICB9KVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiZmlsdGVyLXJvd1wiICpuZ0lmPVwiZmlsdGVyUm93VmlzaWJsZVwiPlxyXG4gIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIiBjbGFzcz1cImZpbHRlci13cmFwcGVyXCIgI2ZpbHRlcldyYXBwZXIgW2Zvcm1Hcm91cF09XCJmb3JtXCI+XHJcbiAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiZmlsdGVyRm9ybUdyb3VwXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBjdXJyZW50RmlsdGVyczsgbGV0IGkgPSBpbmRleFwiPlxyXG4gICAgICAgIDxidXR0b24gW2NsYXNzLnNlbGVjdC10cmlnZ2VyLWJ0bi1hY3RpdmVdPVwiZmlsdGVyLnNlbGVjdGVkVmFsdWVzPy5sZW5ndGhcIiBjbGFzcz1cInNlbGVjdC10cmlnZ2VyLWJ0blwiIG1hdC1zdHJva2VkLWJ1dHRvbiBjb2xvcj1cInByaW1hcnktYWNjZW50LWRhcmtlclwiIChjbGljayk9XCJzZWxlY3Qub3BlbigpXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LXRyaWdnZXItYnRuLWxhYmVsXCI+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7ZmlsdGVyLnRpdGxlIHwgdHJhbnNsYXRlfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZmlsdGVyLnNlbGVjdGVkVmFsdWVzPy5sZW5ndGhcIiBjbGFzcz1cInNlbGVjdGVkLWNvdW50XCI+KHt7ZmlsdGVyLnNlbGVjdGVkVmFsdWVzPy5sZW5ndGh9fSk8L3NwYW4+XHJcbiAgICAgICAgICAgIDxtYXQtaWNvbj57eyBzZWxlY3QucGFuZWxPcGVuID8gXCJrZXlib2FyZF9hcnJvd191cFwiIDogXCJrZXlib2FyZF9hcnJvd19kb3duXCIgfX08L21hdC1pY29uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPG1hdC1zZWxlY3RcclxuICAgICAgICAgICAgbXVsdGlwbGUgXHJcbiAgICAgICAgICAgICNzZWxlY3RcclxuICAgICAgICAgICAgW3BhbmVsQ2xhc3NdPVwiJ2ZpbHRlci1wYW5lbCdcIlxyXG4gICAgICAgICAgICBbcGFuZWxXaWR0aF09XCJmaWx0ZXI/Lm1heFBhbmVsV2lkdGggPz8gJ2F1dG8nXCIgXHJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZmlsdGVyLmZpZWxkTmFtZVwiIFxyXG4gICAgICAgICAgICAob3BlbmVkQ2hhbmdlKT1cIiRldmVudCA9PT0gdHJ1ZSA/IGZvY3VzT3B0aW9uU2VhcmNoSW5wdXQoZmlsdGVyLCBpKSA6IGNsZWFyT3B0aW9uU2VhcmNoSW5wdXQoZmlsdGVyLCBpKVwiXHJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VsZWN0RXZlbnQoJGV2ZW50LCBmaWx0ZXIpXCIgXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXI/LnNlYXJjaD8ucGxhY2Vob2xkZXJcIj5cclxuICAgICAgICAgICAgICA8aW5wdXQgI29wdGlvblNlYXJjaElucHV0IGNsYXNzPVwib3B0aW9uLXNlYXJjaC1pbnB1dFwiIFtjbGFzcy5oaWRkZW5dPVwiZmlsdGVyLnZhbHVlcyEubGVuZ3RoIDwgMTBcIiB0eXBlPVwidGV4dFwiIFtwbGFjZWhvbGRlcl09XCJmaWx0ZXIuc2VhcmNoPy5wbGFjZWhvbGRlciA/PyAnJyB8IHRyYW5zbGF0ZVwiIChrZXl1cCk9XCJmaWx0ZXJPcHRpb25zKCRldmVudCwgZmlsdGVyKVwiIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnZhbHVlcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLnRyYW5zbGF0ZWQ7IGVsc2Ugc29ydGVkVmFsdWVzQnlQcm9wZXJ0eVwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgKGZpbHRlci5zZWFyY2g/LmZpbHRlcmVkVmFsdWVzID8/IGZpbHRlci52YWx1ZXMpIHwgc29ydEFscGhhYmV0aWNhbGx5OidrZXknXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFtjbGFzcy5oaWRkZW5dPVwiZmlsdGVyLnNlYXJjaD8uc2VhcmNoQ3JpdGVyaWEgJiYgdmFsdWUuaXNTZWxlY3RlZCAmJiAhdmFsdWUubWF0Y2hlc1NlYXJjaENyaXRlcmlhXCIgY2xhc3M9XCJmaWx0ZXItb3B0aW9uXCIgW2Rpc2FibGVkXT1cImZpbHRlci5zaW5nbGVTZWxlY3Rpb24/LnNlbGVjdGVkICYmIGZpbHRlci5zaW5nbGVTZWxlY3Rpb24/LnZhbHVlICE9PSB2YWx1ZS52YWx1ZVwiIFt2YWx1ZV09XCJ2YWx1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7IGZpbHRlci5kaXNhYmxlVGl0bGVDYXNlID8gdmFsdWUua2V5IDogKHZhbHVlLmtleSB8IHRpdGxlY2FzZSkgfX1cclxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzb3J0ZWRWYWx1ZXNCeVByb3BlcnR5PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgKGZpbHRlci5zZWFyY2g/LmZpbHRlcmVkVmFsdWVzID8/IGZpbHRlci52YWx1ZXMpIHwgc29ydFRyYW5zbGF0aW9uc0J5UHJvcGVydHk6J2tleSc6J3ZhbHVlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbY2xhc3MuaGlkZGVuXT1cImZpbHRlci5zZWFyY2g/LnNlYXJjaENyaXRlcmlhICYmIHZhbHVlLmlzU2VsZWN0ZWQgJiYgIXZhbHVlLm1hdGNoZXNTZWFyY2hDcml0ZXJpYVwiIGNsYXNzPVwiZmlsdGVyLW9wdGlvblwiIFtkaXNhYmxlZF09XCJmaWx0ZXIuc2luZ2xlU2VsZWN0aW9uPy5zZWxlY3RlZCAmJiBmaWx0ZXIuc2luZ2xlU2VsZWN0aW9uPy52YWx1ZSAhPT0gdmFsdWUudmFsdWVcIiBbdmFsdWVdPVwidmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWZpbHRlci5kaXNhYmxlVGl0bGVDYXNlOyBlbHNlIGRlZmF1bHRDYXNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgdmFsdWUua2V5IHwgdHJhbnNsYXRlIDogeyBkZWZhdWx0OiB2YWx1ZS52YWx1ZSB8IHRpdGxlY2FzZSB9IH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDYXNlPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3sgdmFsdWUua2V5IHwgdHJhbnNsYXRlIDogeyBkZWZhdWx0OiB2YWx1ZS52YWx1ZSB9IH19IFxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC9tYXQtc2VsZWN0PlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIDwvZGl2PlxyXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXJPdmVyZmxvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImZpbHRlci1hcnJvd3NcIj5cclxuICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInN3aXRjaExlZnQoKVwiPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMtb3V0bGluZWRcIj5cclxuICAgICAgICAgIGNoZXZyb25fbGVmdFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICAgIDxidXR0b24gbWF0LWljb24tYnV0dG9uIChjbGljayk9XCJzd2l0Y2hSaWdodCgpXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJtYXRlcmlhbC1pY29ucy1vdXRsaW5lZFwiPlxyXG4gICAgICAgICAgY2hldnJvbl9yaWdodFxyXG4gICAgICAgIDwvc3Bhbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICA8L25nLWNvbnRhaW5lcj5cclxuPC9kaXY+XHJcbjxtYXQtY2hpcC1saXN0Ym94PlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBzZXR0aW5ncz8uZmlsdGVyc1wiPlxyXG4gICAgPG1hdC1jaGlwLW9wdGlvbiBjb2xvcj1cInByaW1hcnktYWNjZW50LWRhcmtlclwiICpuZ0Zvcj1cImxldCBmaWx0ZXJWYWx1ZSBvZiBmaWx0ZXJGb3JtR3JvdXBWYWx1ZVtmaWx0ZXIuZmllbGROYW1lXTsgbGV0IGl4PWluZGV4XCJcclxuICAgICAgKHJlbW92ZWQpPVwicmVtb3ZlRmlsdGVyKGZpbHRlci5maWVsZE5hbWUsIGl4KVwiIGNsYXNzPVwidGV4dC1zXCI+XHJcbiAgICAgIDxidXR0b24gbWF0Q2hpcFJlbW92ZT5cclxuICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjaGlwLXZhbHVlXCI+IHt7KGZpbHRlci50cmFuc2xhdGVkID8gZmlsdGVyVmFsdWUua2V5IDogZmlsdGVyVmFsdWUua2V5IHwgdHJhbnNsYXRlIDoge2RlZmF1bHQ6IGZpbHRlclZhbHVlLnZhbHVlfSkgfCB0aXRsZWNhc2VcclxuICAgICAgICB9fTwvc3Bhbj5cclxuICAgIDwvbWF0LWNoaXAtb3B0aW9uPlxyXG4gIDwvZGl2PlxyXG48L21hdC1jaGlwLWxpc3Rib3g+XHJcbiJdfQ==