ng-firebase-table-kxp 1.2.5 → 1.2.6
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.
- package/esm2020/lib/components/table/table.component.mjs +365 -379
- package/fesm2015/ng-firebase-table-kxp.mjs +364 -381
- package/fesm2015/ng-firebase-table-kxp.mjs.map +1 -1
- package/fesm2020/ng-firebase-table-kxp.mjs +364 -378
- package/fesm2020/ng-firebase-table-kxp.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -30,234 +30,234 @@ import * as i20 from "../table-tooltip/table-tooltip.component";
|
|
|
30
30
|
function TableComponent_div_0_div_2_button_7_i_1_Template(rf, ctx) { if (rf & 1) {
|
|
31
31
|
i0.ɵɵelement(0, "i");
|
|
32
32
|
} if (rf & 2) {
|
|
33
|
-
const
|
|
34
|
-
i0.ɵɵclassMap(
|
|
33
|
+
const ctx_r16 = i0.ɵɵnextContext(4);
|
|
34
|
+
i0.ɵɵclassMap(ctx_r16.data.actionButton.icon);
|
|
35
35
|
} }
|
|
36
36
|
function TableComponent_div_0_div_2_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
37
|
-
const
|
|
38
|
-
i0.ɵɵelementStart(0, "button",
|
|
39
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_button_7_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(
|
|
40
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_button_7_i_1_Template, 1, 2, "i",
|
|
37
|
+
const _r18 = i0.ɵɵgetCurrentView();
|
|
38
|
+
i0.ɵɵelementStart(0, "button", 30);
|
|
39
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_button_7_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r18); const ctx_r17 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r17.data.actionButton.method ? ctx_r17.data.actionButton.method($event) : null); });
|
|
40
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_button_7_i_1_Template, 1, 2, "i", 31);
|
|
41
41
|
i0.ɵɵtext(2);
|
|
42
42
|
i0.ɵɵelementEnd();
|
|
43
43
|
} if (rf & 2) {
|
|
44
|
-
const
|
|
45
|
-
i0.ɵɵproperty("ngClass",
|
|
44
|
+
const ctx_r11 = i0.ɵɵnextContext(3);
|
|
45
|
+
i0.ɵɵproperty("ngClass", ctx_r11.getActionButtonClass())("routerLink", ctx_r11.data.actionButton.routerLink);
|
|
46
46
|
i0.ɵɵadvance(1);
|
|
47
|
-
i0.ɵɵproperty("ngIf",
|
|
47
|
+
i0.ɵɵproperty("ngIf", ctx_r11.data.actionButton.icon);
|
|
48
48
|
i0.ɵɵadvance(1);
|
|
49
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
49
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r11.data.actionButton.label, " ");
|
|
50
50
|
} }
|
|
51
51
|
function TableComponent_div_0_div_2_div_8_mat_option_9_Template(rf, ctx) { if (rf & 1) {
|
|
52
|
-
i0.ɵɵelementStart(0, "mat-option",
|
|
53
|
-
i0.ɵɵelement(2, "i",
|
|
52
|
+
i0.ɵɵelementStart(0, "mat-option", 39)(1, "div", 21);
|
|
53
|
+
i0.ɵɵelement(2, "i", 36);
|
|
54
54
|
i0.ɵɵelementStart(3, "span");
|
|
55
55
|
i0.ɵɵtext(4);
|
|
56
56
|
i0.ɵɵelementEnd()()();
|
|
57
57
|
} if (rf & 2) {
|
|
58
|
-
const
|
|
59
|
-
i0.ɵɵproperty("value",
|
|
58
|
+
const item_r20 = ctx.$implicit;
|
|
59
|
+
i0.ɵɵproperty("value", item_r20);
|
|
60
60
|
i0.ɵɵadvance(4);
|
|
61
|
-
i0.ɵɵtextInterpolate(
|
|
61
|
+
i0.ɵɵtextInterpolate(item_r20.title);
|
|
62
62
|
} }
|
|
63
63
|
function TableComponent_div_0_div_2_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
64
|
-
i0.ɵɵelementStart(0, "div",
|
|
65
|
-
i0.ɵɵelement(5, "i",
|
|
64
|
+
i0.ɵɵelementStart(0, "div", 32)(1, "div", 33)(2, "div", 34)(3, "mat-form-field", 35)(4, "mat-label", 21);
|
|
65
|
+
i0.ɵɵelement(5, "i", 36);
|
|
66
66
|
i0.ɵɵelementStart(6, "span");
|
|
67
67
|
i0.ɵɵtext(7, "Ordenar por");
|
|
68
68
|
i0.ɵɵelementEnd()();
|
|
69
|
-
i0.ɵɵelementStart(8, "mat-select",
|
|
70
|
-
i0.ɵɵtemplate(9, TableComponent_div_0_div_2_div_8_mat_option_9_Template, 5, 2, "mat-option",
|
|
69
|
+
i0.ɵɵelementStart(8, "mat-select", 37);
|
|
70
|
+
i0.ɵɵtemplate(9, TableComponent_div_0_div_2_div_8_mat_option_9_Template, 5, 2, "mat-option", 38);
|
|
71
71
|
i0.ɵɵelementEnd()()()()();
|
|
72
72
|
} if (rf & 2) {
|
|
73
|
-
const
|
|
73
|
+
const ctx_r12 = i0.ɵɵnextContext(3);
|
|
74
74
|
i0.ɵɵadvance(8);
|
|
75
|
-
i0.ɵɵproperty("formControl",
|
|
75
|
+
i0.ɵɵproperty("formControl", ctx_r12.selectSort);
|
|
76
76
|
i0.ɵɵadvance(1);
|
|
77
|
-
i0.ɵɵproperty("ngForOf",
|
|
77
|
+
i0.ɵɵproperty("ngForOf", ctx_r12.sortableDropdownItems);
|
|
78
78
|
} }
|
|
79
79
|
function TableComponent_div_0_div_2_div_9_div_1_div_1_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
80
|
-
i0.ɵɵelementStart(0, "mat-option",
|
|
81
|
-
i0.ɵɵelement(2, "i",
|
|
80
|
+
i0.ɵɵelementStart(0, "mat-option", 39)(1, "div", 21);
|
|
81
|
+
i0.ɵɵelement(2, "i", 47);
|
|
82
82
|
i0.ɵɵelementStart(3, "span");
|
|
83
83
|
i0.ɵɵtext(4);
|
|
84
84
|
i0.ɵɵelementEnd()()();
|
|
85
85
|
} if (rf & 2) {
|
|
86
|
-
const
|
|
87
|
-
i0.ɵɵproperty("value",
|
|
86
|
+
const item_r30 = ctx.$implicit;
|
|
87
|
+
i0.ɵɵproperty("value", item_r30);
|
|
88
88
|
i0.ɵɵadvance(2);
|
|
89
|
-
i0.ɵɵclassMap(
|
|
89
|
+
i0.ɵɵclassMap(item_r30.icon || "fa fa-filter");
|
|
90
90
|
i0.ɵɵadvance(2);
|
|
91
|
-
i0.ɵɵtextInterpolate(
|
|
91
|
+
i0.ɵɵtextInterpolate(item_r30.title);
|
|
92
92
|
} }
|
|
93
93
|
function TableComponent_div_0_div_2_div_9_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
94
|
-
const
|
|
95
|
-
i0.ɵɵelementStart(0, "div",
|
|
94
|
+
const _r32 = i0.ɵɵgetCurrentView();
|
|
95
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label");
|
|
96
96
|
i0.ɵɵtext(3, "Tipo de filtro");
|
|
97
97
|
i0.ɵɵelementEnd();
|
|
98
|
-
i0.ɵɵelementStart(4, "mat-select",
|
|
99
|
-
i0.ɵɵlistener("selectionChange", function TableComponent_div_0_div_2_div_9_div_1_div_1_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(
|
|
100
|
-
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_1_mat_option_5_Template, 5, 4, "mat-option",
|
|
98
|
+
i0.ɵɵelementStart(4, "mat-select", 46);
|
|
99
|
+
i0.ɵɵlistener("selectionChange", function TableComponent_div_0_div_2_div_9_div_1_div_1_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r32); const ctx_r31 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r31.onSelectFilterChange()); });
|
|
100
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_1_mat_option_5_Template, 5, 4, "mat-option", 38);
|
|
101
101
|
i0.ɵɵelementEnd()()();
|
|
102
102
|
} if (rf & 2) {
|
|
103
|
-
const
|
|
103
|
+
const ctx_r24 = i0.ɵɵnextContext(5);
|
|
104
104
|
i0.ɵɵadvance(5);
|
|
105
|
-
i0.ɵɵproperty("ngForOf",
|
|
105
|
+
i0.ɵɵproperty("ngForOf", ctx_r24.getAvailableFilterOptions());
|
|
106
106
|
} }
|
|
107
107
|
function TableComponent_div_0_div_2_div_9_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
108
|
-
const
|
|
109
|
-
i0.ɵɵelementStart(0, "div",
|
|
110
|
-
i0.ɵɵelement(3, "i",
|
|
108
|
+
const _r35 = i0.ɵɵgetCurrentView();
|
|
109
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label", 21);
|
|
110
|
+
i0.ɵɵelement(3, "i", 48);
|
|
111
111
|
i0.ɵɵelementStart(4, "span");
|
|
112
112
|
i0.ɵɵtext(5);
|
|
113
113
|
i0.ɵɵelementEnd()();
|
|
114
|
-
i0.ɵɵelementStart(6, "input",
|
|
115
|
-
i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_2_div_9_div_1_div_2_Template_input_keyup_enter_6_listener($event) { i0.ɵɵrestoreView(
|
|
114
|
+
i0.ɵɵelementStart(6, "input", 49, 50);
|
|
115
|
+
i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_2_div_9_div_1_div_2_Template_input_keyup_enter_6_listener($event) { i0.ɵɵrestoreView(_r35); const ctx_r34 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r34.search($event)); });
|
|
116
116
|
i0.ɵɵelementEnd()()();
|
|
117
117
|
} if (rf & 2) {
|
|
118
|
-
const
|
|
118
|
+
const filterGroup_r22 = i0.ɵɵnextContext().$implicit;
|
|
119
119
|
let tmp_0_0;
|
|
120
120
|
i0.ɵɵadvance(5);
|
|
121
|
-
i0.ɵɵtextInterpolate(((tmp_0_0 =
|
|
121
|
+
i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Filtrar");
|
|
122
122
|
} }
|
|
123
123
|
function TableComponent_div_0_div_2_div_9_div_1_div_3_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
124
|
-
i0.ɵɵelementStart(0, "mat-option",
|
|
124
|
+
i0.ɵɵelementStart(0, "mat-option", 39);
|
|
125
125
|
i0.ɵɵtext(1);
|
|
126
126
|
i0.ɵɵelementEnd();
|
|
127
127
|
} if (rf & 2) {
|
|
128
|
-
const
|
|
129
|
-
i0.ɵɵproperty("value",
|
|
128
|
+
const item_r38 = ctx.$implicit;
|
|
129
|
+
i0.ɵɵproperty("value", item_r38);
|
|
130
130
|
i0.ɵɵadvance(1);
|
|
131
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
131
|
+
i0.ɵɵtextInterpolate1(" ", item_r38.label, " ");
|
|
132
132
|
} }
|
|
133
133
|
function TableComponent_div_0_div_2_div_9_div_1_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
134
|
-
i0.ɵɵelementStart(0, "div",
|
|
134
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label");
|
|
135
135
|
i0.ɵɵtext(3);
|
|
136
136
|
i0.ɵɵelementEnd();
|
|
137
|
-
i0.ɵɵelementStart(4, "mat-select",
|
|
138
|
-
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_3_mat_option_5_Template, 2, 2, "mat-option",
|
|
137
|
+
i0.ɵɵelementStart(4, "mat-select", 51);
|
|
138
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_3_mat_option_5_Template, 2, 2, "mat-option", 38);
|
|
139
139
|
i0.ɵɵelementEnd()()();
|
|
140
140
|
} if (rf & 2) {
|
|
141
|
-
const
|
|
141
|
+
const filterGroup_r22 = i0.ɵɵnextContext().$implicit;
|
|
142
142
|
let tmp_0_0;
|
|
143
143
|
let tmp_1_0;
|
|
144
144
|
i0.ɵɵadvance(3);
|
|
145
|
-
i0.ɵɵtextInterpolate(((tmp_0_0 =
|
|
145
|
+
i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Selecione");
|
|
146
146
|
i0.ɵɵadvance(2);
|
|
147
|
-
i0.ɵɵproperty("ngForOf", (tmp_1_0 =
|
|
147
|
+
i0.ɵɵproperty("ngForOf", (tmp_1_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_1_0.value.items);
|
|
148
148
|
} }
|
|
149
149
|
function TableComponent_div_0_div_2_div_9_div_1_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
150
|
-
const
|
|
151
|
-
i0.ɵɵelementStart(0, "div",
|
|
152
|
-
i0.ɵɵelement(4, "i",
|
|
150
|
+
const _r41 = i0.ɵɵgetCurrentView();
|
|
151
|
+
i0.ɵɵelementStart(0, "div", 52)(1, "div", 53)(2, "mat-form-field", 54)(3, "mat-label", 21);
|
|
152
|
+
i0.ɵɵelement(4, "i", 55);
|
|
153
153
|
i0.ɵɵelementStart(5, "span");
|
|
154
154
|
i0.ɵɵtext(6, "Data Inicial");
|
|
155
155
|
i0.ɵɵelementEnd()();
|
|
156
|
-
i0.ɵɵelementStart(7, "input",
|
|
157
|
-
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_keydown_enter_7_listener($event) { i0.ɵɵrestoreView(
|
|
156
|
+
i0.ɵɵelementStart(7, "input", 56);
|
|
157
|
+
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_keydown_enter_7_listener($event) { i0.ɵɵrestoreView(_r41); const ctx_r40 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r40.search($event)); })("input", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r41); const i_r23 = i0.ɵɵnextContext().index; const ctx_r42 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r42.onDateInput($event, "initialDate", i_r23)); });
|
|
158
158
|
i0.ɵɵelementEnd()();
|
|
159
|
-
i0.ɵɵelementStart(8, "mat-form-field",
|
|
160
|
-
i0.ɵɵelement(10, "i",
|
|
159
|
+
i0.ɵɵelementStart(8, "mat-form-field", 54)(9, "mat-label", 21);
|
|
160
|
+
i0.ɵɵelement(10, "i", 55);
|
|
161
161
|
i0.ɵɵelementStart(11, "span");
|
|
162
162
|
i0.ɵɵtext(12, "Data Final");
|
|
163
163
|
i0.ɵɵelementEnd()();
|
|
164
|
-
i0.ɵɵelementStart(13, "input",
|
|
165
|
-
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_keydown_enter_13_listener($event) { i0.ɵɵrestoreView(
|
|
164
|
+
i0.ɵɵelementStart(13, "input", 57);
|
|
165
|
+
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_keydown_enter_13_listener($event) { i0.ɵɵrestoreView(_r41); const ctx_r44 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r44.search($event)); })("input", function TableComponent_div_0_div_2_div_9_div_1_div_4_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r41); const i_r23 = i0.ɵɵnextContext().index; const ctx_r45 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r45.onDateInput($event, "finalDate", i_r23)); });
|
|
166
166
|
i0.ɵɵelementEnd()()()();
|
|
167
167
|
} }
|
|
168
168
|
function TableComponent_div_0_div_2_div_9_div_1_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
169
|
-
const
|
|
170
|
-
i0.ɵɵelementStart(0, "div",
|
|
171
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_9_div_1_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(
|
|
172
|
-
i0.ɵɵelement(2, "i",
|
|
169
|
+
const _r49 = i0.ɵɵgetCurrentView();
|
|
170
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "button", 59);
|
|
171
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_9_div_1_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r49); const i_r23 = i0.ɵɵnextContext().index; const ctx_r47 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r47.removeFilter(i_r23)); });
|
|
172
|
+
i0.ɵɵelement(2, "i", 60);
|
|
173
173
|
i0.ɵɵelementEnd()();
|
|
174
174
|
} }
|
|
175
175
|
function TableComponent_div_0_div_2_div_9_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
176
|
-
i0.ɵɵelementStart(0, "div",
|
|
177
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_div_9_div_1_div_1_Template, 6, 1, "div",
|
|
178
|
-
i0.ɵɵtemplate(2, TableComponent_div_0_div_2_div_9_div_1_div_2_Template, 8, 1, "div",
|
|
179
|
-
i0.ɵɵtemplate(3, TableComponent_div_0_div_2_div_9_div_1_div_3_Template, 6, 2, "div",
|
|
180
|
-
i0.ɵɵtemplate(4, TableComponent_div_0_div_2_div_9_div_1_div_4_Template, 14, 0, "div",
|
|
181
|
-
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_5_Template, 3, 0, "div",
|
|
176
|
+
i0.ɵɵelementStart(0, "div", 42);
|
|
177
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_div_9_div_1_div_1_Template, 6, 1, "div", 43);
|
|
178
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_div_2_div_9_div_1_div_2_Template, 8, 1, "div", 43);
|
|
179
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_div_2_div_9_div_1_div_3_Template, 6, 2, "div", 43);
|
|
180
|
+
i0.ɵɵtemplate(4, TableComponent_div_0_div_2_div_9_div_1_div_4_Template, 14, 0, "div", 44);
|
|
181
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_2_div_9_div_1_div_5_Template, 3, 0, "div", 45);
|
|
182
182
|
i0.ɵɵelementEnd();
|
|
183
183
|
} if (rf & 2) {
|
|
184
|
-
const
|
|
185
|
-
const
|
|
184
|
+
const filterGroup_r22 = ctx.$implicit;
|
|
185
|
+
const ctx_r21 = i0.ɵɵnextContext(4);
|
|
186
186
|
let tmp_2_0;
|
|
187
187
|
let tmp_3_0;
|
|
188
188
|
let tmp_4_0;
|
|
189
|
-
i0.ɵɵproperty("formGroup",
|
|
189
|
+
i0.ɵɵproperty("formGroup", filterGroup_r22);
|
|
190
190
|
i0.ɵɵadvance(1);
|
|
191
|
-
i0.ɵɵproperty("ngIf",
|
|
191
|
+
i0.ɵɵproperty("ngIf", ctx_r21.dropdownItems.length > 0);
|
|
192
192
|
i0.ɵɵadvance(1);
|
|
193
|
-
i0.ɵɵproperty("ngIf", ((tmp_2_0 =
|
|
193
|
+
i0.ɵɵproperty("ngIf", ((tmp_2_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_2_0.value == null ? null : tmp_2_0.value.arrange) === "filter");
|
|
194
194
|
i0.ɵɵadvance(1);
|
|
195
|
-
i0.ɵɵproperty("ngIf", ((tmp_3_0 =
|
|
195
|
+
i0.ɵɵproperty("ngIf", ((tmp_3_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_3_0.value) && ((tmp_3_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_3_0.value.hasOwnProperty("items")));
|
|
196
196
|
i0.ɵɵadvance(1);
|
|
197
|
-
i0.ɵɵproperty("ngIf", ((tmp_4_0 =
|
|
197
|
+
i0.ɵɵproperty("ngIf", ((tmp_4_0 = filterGroup_r22.get("selectFilter")) == null ? null : tmp_4_0.value == null ? null : tmp_4_0.value.arrange) === "filterByDate");
|
|
198
198
|
i0.ɵɵadvance(1);
|
|
199
|
-
i0.ɵɵproperty("ngIf",
|
|
199
|
+
i0.ɵɵproperty("ngIf", ctx_r21.filtersForm.length > 1);
|
|
200
200
|
} }
|
|
201
201
|
function TableComponent_div_0_div_2_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
202
|
-
i0.ɵɵelementStart(0, "div",
|
|
203
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_div_9_div_1_Template, 6, 6, "div",
|
|
202
|
+
i0.ɵɵelementStart(0, "div", 40);
|
|
203
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_2_div_9_div_1_Template, 6, 6, "div", 41);
|
|
204
204
|
i0.ɵɵelementEnd();
|
|
205
205
|
} if (rf & 2) {
|
|
206
|
-
const
|
|
206
|
+
const ctx_r13 = i0.ɵɵnextContext(3);
|
|
207
207
|
i0.ɵɵadvance(1);
|
|
208
|
-
i0.ɵɵproperty("ngForOf",
|
|
208
|
+
i0.ɵɵproperty("ngForOf", ctx_r13.filtersForm.controls);
|
|
209
209
|
} }
|
|
210
210
|
function TableComponent_div_0_div_2_div_11_Template(rf, ctx) { if (rf & 1) {
|
|
211
|
-
const
|
|
212
|
-
i0.ɵɵelementStart(0, "div")(1, "button",
|
|
213
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_11_Template_button_click_1_listener() { i0.ɵɵrestoreView(
|
|
214
|
-
i0.ɵɵelement(2, "i",
|
|
211
|
+
const _r51 = i0.ɵɵgetCurrentView();
|
|
212
|
+
i0.ɵɵelementStart(0, "div")(1, "button", 61);
|
|
213
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_11_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r51); const ctx_r50 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r50.addFilter()); });
|
|
214
|
+
i0.ɵɵelement(2, "i", 62);
|
|
215
215
|
i0.ɵɵtext(3, " Adicionar Filtro ");
|
|
216
216
|
i0.ɵɵelementEnd()();
|
|
217
217
|
} }
|
|
218
218
|
function TableComponent_div_0_div_2_div_12_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
219
|
-
const
|
|
220
|
-
i0.ɵɵelementStart(0, "button",
|
|
221
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(
|
|
222
|
-
i0.ɵɵelement(1, "i",
|
|
219
|
+
const _r54 = i0.ɵɵgetCurrentView();
|
|
220
|
+
i0.ɵɵelementStart(0, "button", 69);
|
|
221
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r54); const ctx_r53 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r53.arrange && ctx_r53.downloadTable !== undefined ? ctx_r53.downloadTable(ctx_r53.arrange, ctx_r53.data.conditions || []) : null); });
|
|
222
|
+
i0.ɵɵelement(1, "i", 70);
|
|
223
223
|
i0.ɵɵtext(2, " Exportar ");
|
|
224
224
|
i0.ɵɵelementEnd();
|
|
225
225
|
} if (rf & 2) {
|
|
226
|
-
const
|
|
227
|
-
i0.ɵɵproperty("disabled",
|
|
226
|
+
const ctx_r52 = i0.ɵɵnextContext(4);
|
|
227
|
+
i0.ɵɵproperty("disabled", ctx_r52.dataSource && ctx_r52.dataSource.filteredData.length <= 0);
|
|
228
228
|
} }
|
|
229
229
|
function TableComponent_div_0_div_2_div_12_Template(rf, ctx) { if (rf & 1) {
|
|
230
|
-
const
|
|
231
|
-
i0.ɵɵelementStart(0, "div",
|
|
232
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_Template_button_click_1_listener() { i0.ɵɵrestoreView(
|
|
233
|
-
i0.ɵɵelement(2, "i",
|
|
230
|
+
const _r56 = i0.ɵɵgetCurrentView();
|
|
231
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "button", 64);
|
|
232
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r56); const ctx_r55 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r55.search()); });
|
|
233
|
+
i0.ɵɵelement(2, "i", 65);
|
|
234
234
|
i0.ɵɵtext(3, " Pesquisar ");
|
|
235
235
|
i0.ɵɵelementEnd();
|
|
236
|
-
i0.ɵɵelementStart(4, "button",
|
|
237
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_Template_button_click_4_listener() { i0.ɵɵrestoreView(
|
|
238
|
-
i0.ɵɵelement(5, "i",
|
|
236
|
+
i0.ɵɵelementStart(4, "button", 66);
|
|
237
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_2_div_12_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r56); const ctx_r57 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r57.resetFilter()); });
|
|
238
|
+
i0.ɵɵelement(5, "i", 67);
|
|
239
239
|
i0.ɵɵtext(6, " Resetar ");
|
|
240
240
|
i0.ɵɵelementEnd();
|
|
241
|
-
i0.ɵɵtemplate(7, TableComponent_div_0_div_2_div_12_button_7_Template, 3, 1, "button",
|
|
241
|
+
i0.ɵɵtemplate(7, TableComponent_div_0_div_2_div_12_button_7_Template, 3, 1, "button", 68);
|
|
242
242
|
i0.ɵɵelementEnd();
|
|
243
243
|
} if (rf & 2) {
|
|
244
|
-
const
|
|
244
|
+
const ctx_r15 = i0.ɵɵnextContext(3);
|
|
245
245
|
i0.ɵɵadvance(7);
|
|
246
|
-
i0.ɵɵproperty("ngIf",
|
|
246
|
+
i0.ɵɵproperty("ngIf", ctx_r15.data.download !== false && ctx_r15.downloadTable);
|
|
247
247
|
} }
|
|
248
248
|
function TableComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
249
|
-
i0.ɵɵelementStart(0, "div",
|
|
250
|
-
i0.ɵɵelement(4, "i",
|
|
251
|
-
i0.ɵɵelementStart(5, "span",
|
|
249
|
+
i0.ɵɵelementStart(0, "div", 18)(1, "div", 19)(2, "div", 20)(3, "div", 21);
|
|
250
|
+
i0.ɵɵelement(4, "i", 22);
|
|
251
|
+
i0.ɵɵelementStart(5, "span", 23);
|
|
252
252
|
i0.ɵɵtext(6, "Filtros e A\u00E7\u00F5es");
|
|
253
253
|
i0.ɵɵelementEnd()();
|
|
254
|
-
i0.ɵɵtemplate(7, TableComponent_div_0_div_2_button_7_Template, 3, 4, "button",
|
|
254
|
+
i0.ɵɵtemplate(7, TableComponent_div_0_div_2_button_7_Template, 3, 4, "button", 24);
|
|
255
255
|
i0.ɵɵelementEnd()();
|
|
256
|
-
i0.ɵɵtemplate(8, TableComponent_div_0_div_2_div_8_Template, 10, 2, "div",
|
|
257
|
-
i0.ɵɵtemplate(9, TableComponent_div_0_div_2_div_9_Template, 2, 1, "div",
|
|
258
|
-
i0.ɵɵelementStart(10, "div",
|
|
259
|
-
i0.ɵɵtemplate(11, TableComponent_div_0_div_2_div_11_Template, 4, 0, "div",
|
|
260
|
-
i0.ɵɵtemplate(12, TableComponent_div_0_div_2_div_12_Template, 8, 1, "div",
|
|
256
|
+
i0.ɵɵtemplate(8, TableComponent_div_0_div_2_div_8_Template, 10, 2, "div", 25);
|
|
257
|
+
i0.ɵɵtemplate(9, TableComponent_div_0_div_2_div_9_Template, 2, 1, "div", 26);
|
|
258
|
+
i0.ɵɵelementStart(10, "div", 27);
|
|
259
|
+
i0.ɵɵtemplate(11, TableComponent_div_0_div_2_div_11_Template, 4, 0, "div", 28);
|
|
260
|
+
i0.ɵɵtemplate(12, TableComponent_div_0_div_2_div_12_Template, 8, 1, "div", 29);
|
|
261
261
|
i0.ɵɵelementEnd()();
|
|
262
262
|
} if (rf & 2) {
|
|
263
263
|
const ctx_r1 = i0.ɵɵnextContext(2);
|
|
@@ -275,232 +275,232 @@ function TableComponent_div_0_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
|
275
275
|
function TableComponent_div_0_div_3_button_7_i_1_Template(rf, ctx) { if (rf & 1) {
|
|
276
276
|
i0.ɵɵelement(0, "i");
|
|
277
277
|
} if (rf & 2) {
|
|
278
|
-
const
|
|
279
|
-
i0.ɵɵclassMap(
|
|
278
|
+
const ctx_r61 = i0.ɵɵnextContext(4);
|
|
279
|
+
i0.ɵɵclassMap(ctx_r61.data.actionButton.icon);
|
|
280
280
|
} }
|
|
281
281
|
function TableComponent_div_0_div_3_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
282
|
-
const
|
|
283
|
-
i0.ɵɵelementStart(0, "button",
|
|
284
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_button_7_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(
|
|
285
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_button_7_i_1_Template, 1, 2, "i",
|
|
282
|
+
const _r63 = i0.ɵɵgetCurrentView();
|
|
283
|
+
i0.ɵɵelementStart(0, "button", 30);
|
|
284
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_button_7_Template_button_click_0_listener($event) { i0.ɵɵrestoreView(_r63); const ctx_r62 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r62.data.actionButton.method ? ctx_r62.data.actionButton.method($event) : null); });
|
|
285
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_button_7_i_1_Template, 1, 2, "i", 31);
|
|
286
286
|
i0.ɵɵtext(2);
|
|
287
287
|
i0.ɵɵelementEnd();
|
|
288
288
|
} if (rf & 2) {
|
|
289
|
-
const
|
|
290
|
-
i0.ɵɵproperty("ngClass",
|
|
289
|
+
const ctx_r58 = i0.ɵɵnextContext(3);
|
|
290
|
+
i0.ɵɵproperty("ngClass", ctx_r58.getActionButtonClass())("routerLink", ctx_r58.data.actionButton.routerLink);
|
|
291
291
|
i0.ɵɵadvance(1);
|
|
292
|
-
i0.ɵɵproperty("ngIf",
|
|
292
|
+
i0.ɵɵproperty("ngIf", ctx_r58.data.actionButton.icon);
|
|
293
293
|
i0.ɵɵadvance(1);
|
|
294
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
294
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r58.data.actionButton.label, " ");
|
|
295
295
|
} }
|
|
296
296
|
function TableComponent_div_0_div_3_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
297
|
-
const
|
|
298
|
-
i0.ɵɵelementStart(0, "div",
|
|
299
|
-
i0.ɵɵelement(3, "i",
|
|
297
|
+
const _r66 = i0.ɵɵgetCurrentView();
|
|
298
|
+
i0.ɵɵelementStart(0, "div", 32)(1, "mat-form-field", 35)(2, "mat-label", 21);
|
|
299
|
+
i0.ɵɵelement(3, "i", 71);
|
|
300
300
|
i0.ɵɵtext(4, " Buscar ");
|
|
301
301
|
i0.ɵɵelementEnd();
|
|
302
|
-
i0.ɵɵelementStart(5, "input",
|
|
303
|
-
i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_3_div_8_Template_input_keyup_enter_5_listener($event) { i0.ɵɵrestoreView(
|
|
302
|
+
i0.ɵɵelementStart(5, "input", 72, 73);
|
|
303
|
+
i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_3_div_8_Template_input_keyup_enter_5_listener($event) { i0.ɵɵrestoreView(_r66); const ctx_r65 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r65.search($event)); })("keyup", function TableComponent_div_0_div_3_div_8_Template_input_keyup_5_listener() { i0.ɵɵrestoreView(_r66); const _r64 = i0.ɵɵreference(6); const ctx_r67 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r67.applyFilter(_r64.value)); });
|
|
304
304
|
i0.ɵɵelementEnd();
|
|
305
|
-
i0.ɵɵelementStart(7, "mat-icon",
|
|
305
|
+
i0.ɵɵelementStart(7, "mat-icon", 74);
|
|
306
306
|
i0.ɵɵtext(8, "search");
|
|
307
307
|
i0.ɵɵelementEnd()()();
|
|
308
308
|
} }
|
|
309
309
|
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
310
|
-
i0.ɵɵelementStart(0, "mat-option",
|
|
311
|
-
i0.ɵɵelement(2, "i",
|
|
310
|
+
i0.ɵɵelementStart(0, "mat-option", 39)(1, "div", 21);
|
|
311
|
+
i0.ɵɵelement(2, "i", 47);
|
|
312
312
|
i0.ɵɵelementStart(3, "span");
|
|
313
313
|
i0.ɵɵtext(4);
|
|
314
314
|
i0.ɵɵelementEnd()()();
|
|
315
315
|
} if (rf & 2) {
|
|
316
|
-
const
|
|
317
|
-
i0.ɵɵproperty("value",
|
|
316
|
+
const item_r80 = ctx.$implicit;
|
|
317
|
+
i0.ɵɵproperty("value", item_r80);
|
|
318
318
|
i0.ɵɵadvance(2);
|
|
319
|
-
i0.ɵɵclassMap(
|
|
319
|
+
i0.ɵɵclassMap(item_r80.icon || "fa fa-filter");
|
|
320
320
|
i0.ɵɵadvance(2);
|
|
321
|
-
i0.ɵɵtextInterpolate(
|
|
321
|
+
i0.ɵɵtextInterpolate(item_r80.title);
|
|
322
322
|
} }
|
|
323
323
|
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
324
|
-
const
|
|
325
|
-
i0.ɵɵelementStart(0, "div",
|
|
324
|
+
const _r82 = i0.ɵɵgetCurrentView();
|
|
325
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label");
|
|
326
326
|
i0.ɵɵtext(3, "Tipo de filtro");
|
|
327
327
|
i0.ɵɵelementEnd();
|
|
328
|
-
i0.ɵɵelementStart(4, "mat-select",
|
|
329
|
-
i0.ɵɵlistener("selectionChange", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(
|
|
330
|
-
i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_mat_option_5_Template, 5, 4, "mat-option",
|
|
328
|
+
i0.ɵɵelementStart(4, "mat-select", 46);
|
|
329
|
+
i0.ɵɵlistener("selectionChange", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template_mat_select_selectionChange_4_listener() { i0.ɵɵrestoreView(_r82); const ctx_r81 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r81.onSelectFilterChange()); });
|
|
330
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_mat_option_5_Template, 5, 4, "mat-option", 38);
|
|
331
331
|
i0.ɵɵelementEnd()()();
|
|
332
332
|
} if (rf & 2) {
|
|
333
|
-
const
|
|
333
|
+
const ctx_r74 = i0.ɵɵnextContext(6);
|
|
334
334
|
i0.ɵɵadvance(5);
|
|
335
|
-
i0.ɵɵproperty("ngForOf",
|
|
335
|
+
i0.ɵɵproperty("ngForOf", ctx_r74.getAvailableFilterOptions());
|
|
336
336
|
} }
|
|
337
337
|
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
338
|
-
const
|
|
339
|
-
i0.ɵɵelementStart(0, "div",
|
|
340
|
-
i0.ɵɵelement(3, "i",
|
|
338
|
+
const _r85 = i0.ɵɵgetCurrentView();
|
|
339
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label", 21);
|
|
340
|
+
i0.ɵɵelement(3, "i", 48);
|
|
341
341
|
i0.ɵɵelementStart(4, "span");
|
|
342
342
|
i0.ɵɵtext(5);
|
|
343
343
|
i0.ɵɵelementEnd()();
|
|
344
|
-
i0.ɵɵelementStart(6, "input",
|
|
345
|
-
i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template_input_keyup_enter_6_listener($event) { i0.ɵɵrestoreView(
|
|
344
|
+
i0.ɵɵelementStart(6, "input", 49, 50);
|
|
345
|
+
i0.ɵɵlistener("keyup.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template_input_keyup_enter_6_listener($event) { i0.ɵɵrestoreView(_r85); const ctx_r84 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r84.search($event)); });
|
|
346
346
|
i0.ɵɵelementEnd()()();
|
|
347
347
|
} if (rf & 2) {
|
|
348
|
-
const
|
|
348
|
+
const filterGroup_r72 = i0.ɵɵnextContext().$implicit;
|
|
349
349
|
let tmp_0_0;
|
|
350
350
|
i0.ɵɵadvance(5);
|
|
351
|
-
i0.ɵɵtextInterpolate(((tmp_0_0 =
|
|
351
|
+
i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Filtrar");
|
|
352
352
|
} }
|
|
353
353
|
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_mat_option_5_Template(rf, ctx) { if (rf & 1) {
|
|
354
|
-
i0.ɵɵelementStart(0, "mat-option",
|
|
354
|
+
i0.ɵɵelementStart(0, "mat-option", 39);
|
|
355
355
|
i0.ɵɵtext(1);
|
|
356
356
|
i0.ɵɵelementEnd();
|
|
357
357
|
} if (rf & 2) {
|
|
358
|
-
const
|
|
359
|
-
i0.ɵɵproperty("value",
|
|
358
|
+
const item_r88 = ctx.$implicit;
|
|
359
|
+
i0.ɵɵproperty("value", item_r88);
|
|
360
360
|
i0.ɵɵadvance(1);
|
|
361
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
361
|
+
i0.ɵɵtextInterpolate1(" ", item_r88.label, " ");
|
|
362
362
|
} }
|
|
363
363
|
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
364
|
-
i0.ɵɵelementStart(0, "div",
|
|
364
|
+
i0.ɵɵelementStart(0, "div", 34)(1, "mat-form-field", 35)(2, "mat-label");
|
|
365
365
|
i0.ɵɵtext(3);
|
|
366
366
|
i0.ɵɵelementEnd();
|
|
367
|
-
i0.ɵɵelementStart(4, "mat-select",
|
|
368
|
-
i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_mat_option_5_Template, 2, 2, "mat-option",
|
|
367
|
+
i0.ɵɵelementStart(4, "mat-select", 51);
|
|
368
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_mat_option_5_Template, 2, 2, "mat-option", 38);
|
|
369
369
|
i0.ɵɵelementEnd()()();
|
|
370
370
|
} if (rf & 2) {
|
|
371
|
-
const
|
|
371
|
+
const filterGroup_r72 = i0.ɵɵnextContext().$implicit;
|
|
372
372
|
let tmp_0_0;
|
|
373
373
|
let tmp_1_0;
|
|
374
374
|
i0.ɵɵadvance(3);
|
|
375
|
-
i0.ɵɵtextInterpolate(((tmp_0_0 =
|
|
375
|
+
i0.ɵɵtextInterpolate(((tmp_0_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_0_0.value == null ? null : tmp_0_0.value.title) || "Selecione");
|
|
376
376
|
i0.ɵɵadvance(2);
|
|
377
|
-
i0.ɵɵproperty("ngForOf", (tmp_1_0 =
|
|
377
|
+
i0.ɵɵproperty("ngForOf", (tmp_1_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_1_0.value.items);
|
|
378
378
|
} }
|
|
379
379
|
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
380
|
-
const
|
|
381
|
-
i0.ɵɵelementStart(0, "div",
|
|
382
|
-
i0.ɵɵelement(4, "i",
|
|
380
|
+
const _r91 = i0.ɵɵgetCurrentView();
|
|
381
|
+
i0.ɵɵelementStart(0, "div", 52)(1, "div", 53)(2, "mat-form-field", 54)(3, "mat-label", 21);
|
|
382
|
+
i0.ɵɵelement(4, "i", 55);
|
|
383
383
|
i0.ɵɵelementStart(5, "span");
|
|
384
384
|
i0.ɵɵtext(6, "Data Inicial");
|
|
385
385
|
i0.ɵɵelementEnd()();
|
|
386
|
-
i0.ɵɵelementStart(7, "input",
|
|
387
|
-
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_keydown_enter_7_listener($event) { i0.ɵɵrestoreView(
|
|
386
|
+
i0.ɵɵelementStart(7, "input", 77);
|
|
387
|
+
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_keydown_enter_7_listener($event) { i0.ɵɵrestoreView(_r91); const ctx_r90 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r90.search($event)); })("input", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_input_7_listener($event) { i0.ɵɵrestoreView(_r91); const i_r73 = i0.ɵɵnextContext().index; const ctx_r92 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r92.onDateInput($event, "initialDate", i_r73)); })("blur", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_blur_7_listener() { i0.ɵɵrestoreView(_r91); const ctx_r94 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r94.onDateFilterChange()); });
|
|
388
388
|
i0.ɵɵelementEnd()();
|
|
389
|
-
i0.ɵɵelementStart(8, "mat-form-field",
|
|
390
|
-
i0.ɵɵelement(10, "i",
|
|
389
|
+
i0.ɵɵelementStart(8, "mat-form-field", 54)(9, "mat-label", 21);
|
|
390
|
+
i0.ɵɵelement(10, "i", 55);
|
|
391
391
|
i0.ɵɵelementStart(11, "span");
|
|
392
392
|
i0.ɵɵtext(12, "Data Final");
|
|
393
393
|
i0.ɵɵelementEnd()();
|
|
394
|
-
i0.ɵɵelementStart(13, "input",
|
|
395
|
-
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_keydown_enter_13_listener($event) { i0.ɵɵrestoreView(
|
|
394
|
+
i0.ɵɵelementStart(13, "input", 78);
|
|
395
|
+
i0.ɵɵlistener("keydown.enter", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_keydown_enter_13_listener($event) { i0.ɵɵrestoreView(_r91); const ctx_r95 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r95.search($event)); })("input", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_input_13_listener($event) { i0.ɵɵrestoreView(_r91); const i_r73 = i0.ɵɵnextContext().index; const ctx_r96 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r96.onDateInput($event, "finalDate", i_r73)); })("blur", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template_input_blur_13_listener() { i0.ɵɵrestoreView(_r91); const ctx_r98 = i0.ɵɵnextContext(6); return i0.ɵɵresetView(ctx_r98.onDateFilterChange()); });
|
|
396
396
|
i0.ɵɵelementEnd()()()();
|
|
397
397
|
} }
|
|
398
398
|
function TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template(rf, ctx) { if (rf & 1) {
|
|
399
|
-
const
|
|
400
|
-
i0.ɵɵelementStart(0, "div",
|
|
401
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(
|
|
402
|
-
i0.ɵɵelement(2, "i",
|
|
399
|
+
const _r101 = i0.ɵɵgetCurrentView();
|
|
400
|
+
i0.ɵɵelementStart(0, "div", 58)(1, "button", 59);
|
|
401
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r101); const i_r73 = i0.ɵɵnextContext().index; const ctx_r99 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r99.removeFilter(i_r73)); });
|
|
402
|
+
i0.ɵɵelement(2, "i", 60);
|
|
403
403
|
i0.ɵɵelementEnd()();
|
|
404
404
|
} }
|
|
405
405
|
function TableComponent_div_0_div_3_div_9_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
406
|
-
i0.ɵɵelementStart(0, "div",
|
|
407
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template, 6, 1, "div",
|
|
408
|
-
i0.ɵɵtemplate(2, TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template, 8, 1, "div",
|
|
409
|
-
i0.ɵɵtemplate(3, TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_Template, 6, 2, "div",
|
|
410
|
-
i0.ɵɵtemplate(4, TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template, 14, 0, "div",
|
|
411
|
-
i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template, 3, 0, "div",
|
|
406
|
+
i0.ɵɵelementStart(0, "div", 76);
|
|
407
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_div_1_div_1_Template, 6, 1, "div", 43);
|
|
408
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_div_3_div_9_div_1_div_1_div_2_Template, 8, 1, "div", 43);
|
|
409
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_div_3_div_9_div_1_div_1_div_3_Template, 6, 2, "div", 43);
|
|
410
|
+
i0.ɵɵtemplate(4, TableComponent_div_0_div_3_div_9_div_1_div_1_div_4_Template, 14, 0, "div", 44);
|
|
411
|
+
i0.ɵɵtemplate(5, TableComponent_div_0_div_3_div_9_div_1_div_1_div_5_Template, 3, 0, "div", 45);
|
|
412
412
|
i0.ɵɵelementEnd();
|
|
413
413
|
} if (rf & 2) {
|
|
414
|
-
const
|
|
415
|
-
const
|
|
414
|
+
const filterGroup_r72 = ctx.$implicit;
|
|
415
|
+
const ctx_r71 = i0.ɵɵnextContext(5);
|
|
416
416
|
let tmp_2_0;
|
|
417
417
|
let tmp_3_0;
|
|
418
418
|
let tmp_4_0;
|
|
419
|
-
i0.ɵɵproperty("formGroup",
|
|
419
|
+
i0.ɵɵproperty("formGroup", filterGroup_r72);
|
|
420
420
|
i0.ɵɵadvance(1);
|
|
421
|
-
i0.ɵɵproperty("ngIf",
|
|
421
|
+
i0.ɵɵproperty("ngIf", ctx_r71.dropdownItems.length > 0);
|
|
422
422
|
i0.ɵɵadvance(1);
|
|
423
|
-
i0.ɵɵproperty("ngIf", ((tmp_2_0 =
|
|
423
|
+
i0.ɵɵproperty("ngIf", ((tmp_2_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_2_0.value == null ? null : tmp_2_0.value.arrange) === "filter");
|
|
424
424
|
i0.ɵɵadvance(1);
|
|
425
|
-
i0.ɵɵproperty("ngIf", ((tmp_3_0 =
|
|
425
|
+
i0.ɵɵproperty("ngIf", ((tmp_3_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_3_0.value) && ((tmp_3_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_3_0.value.hasOwnProperty("items")));
|
|
426
426
|
i0.ɵɵadvance(1);
|
|
427
|
-
i0.ɵɵproperty("ngIf", ((tmp_4_0 =
|
|
427
|
+
i0.ɵɵproperty("ngIf", ((tmp_4_0 = filterGroup_r72.get("selectFilter")) == null ? null : tmp_4_0.value == null ? null : tmp_4_0.value.arrange) === "filterByDate");
|
|
428
428
|
i0.ɵɵadvance(1);
|
|
429
|
-
i0.ɵɵproperty("ngIf",
|
|
429
|
+
i0.ɵɵproperty("ngIf", ctx_r71.filtersForm.length > 1);
|
|
430
430
|
} }
|
|
431
431
|
function TableComponent_div_0_div_3_div_9_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
432
|
-
i0.ɵɵelementStart(0, "div",
|
|
433
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_div_1_Template, 6, 6, "div",
|
|
432
|
+
i0.ɵɵelementStart(0, "div", 40);
|
|
433
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_div_1_Template, 6, 6, "div", 75);
|
|
434
434
|
i0.ɵɵelementEnd();
|
|
435
435
|
} if (rf & 2) {
|
|
436
|
-
const
|
|
436
|
+
const ctx_r68 = i0.ɵɵnextContext(4);
|
|
437
437
|
i0.ɵɵadvance(1);
|
|
438
|
-
i0.ɵɵproperty("ngForOf",
|
|
438
|
+
i0.ɵɵproperty("ngForOf", ctx_r68.filtersForm.controls);
|
|
439
439
|
} }
|
|
440
440
|
function TableComponent_div_0_div_3_div_9_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
441
|
-
const
|
|
442
|
-
i0.ɵɵelementStart(0, "div")(1, "button",
|
|
443
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(
|
|
444
|
-
i0.ɵɵelement(2, "i",
|
|
441
|
+
const _r103 = i0.ɵɵgetCurrentView();
|
|
442
|
+
i0.ɵɵelementStart(0, "div")(1, "button", 61);
|
|
443
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_3_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r103); const ctx_r102 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r102.addFilter()); });
|
|
444
|
+
i0.ɵɵelement(2, "i", 62);
|
|
445
445
|
i0.ɵɵtext(3, " Adicionar Filtro ");
|
|
446
446
|
i0.ɵɵelementEnd()();
|
|
447
447
|
} }
|
|
448
448
|
function TableComponent_div_0_div_3_div_9_div_4_button_7_Template(rf, ctx) { if (rf & 1) {
|
|
449
|
-
const
|
|
450
|
-
i0.ɵɵelementStart(0, "button",
|
|
451
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(
|
|
452
|
-
i0.ɵɵelement(1, "i",
|
|
449
|
+
const _r106 = i0.ɵɵgetCurrentView();
|
|
450
|
+
i0.ɵɵelementStart(0, "button", 69);
|
|
451
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_button_7_Template_button_click_0_listener() { i0.ɵɵrestoreView(_r106); const ctx_r105 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r105.handleDownload()); });
|
|
452
|
+
i0.ɵɵelement(1, "i", 70);
|
|
453
453
|
i0.ɵɵtext(2, " Exportar ");
|
|
454
454
|
i0.ɵɵelementEnd();
|
|
455
455
|
} if (rf & 2) {
|
|
456
|
-
const
|
|
457
|
-
i0.ɵɵproperty("disabled",
|
|
456
|
+
const ctx_r104 = i0.ɵɵnextContext(5);
|
|
457
|
+
i0.ɵɵproperty("disabled", ctx_r104.dataSource && ctx_r104.dataSource.filteredData.length <= 0);
|
|
458
458
|
} }
|
|
459
459
|
function TableComponent_div_0_div_3_div_9_div_4_Template(rf, ctx) { if (rf & 1) {
|
|
460
|
-
const
|
|
461
|
-
i0.ɵɵelementStart(0, "div",
|
|
462
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_Template_button_click_1_listener() { i0.ɵɵrestoreView(
|
|
463
|
-
i0.ɵɵelement(2, "i",
|
|
460
|
+
const _r108 = i0.ɵɵgetCurrentView();
|
|
461
|
+
i0.ɵɵelementStart(0, "div", 63)(1, "button", 64);
|
|
462
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r108); const ctx_r107 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r107.search()); });
|
|
463
|
+
i0.ɵɵelement(2, "i", 65);
|
|
464
464
|
i0.ɵɵtext(3, " Pesquisar ");
|
|
465
465
|
i0.ɵɵelementEnd();
|
|
466
|
-
i0.ɵɵelementStart(4, "button",
|
|
467
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(
|
|
468
|
-
i0.ɵɵelement(5, "i",
|
|
466
|
+
i0.ɵɵelementStart(4, "button", 66);
|
|
467
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_div_3_div_9_div_4_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r108); const ctx_r109 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r109.resetFilter()); });
|
|
468
|
+
i0.ɵɵelement(5, "i", 67);
|
|
469
469
|
i0.ɵɵtext(6, " Resetar ");
|
|
470
470
|
i0.ɵɵelementEnd();
|
|
471
|
-
i0.ɵɵtemplate(7, TableComponent_div_0_div_3_div_9_div_4_button_7_Template, 3, 1, "button",
|
|
471
|
+
i0.ɵɵtemplate(7, TableComponent_div_0_div_3_div_9_div_4_button_7_Template, 3, 1, "button", 68);
|
|
472
472
|
i0.ɵɵelementEnd();
|
|
473
473
|
} if (rf & 2) {
|
|
474
|
-
const
|
|
474
|
+
const ctx_r70 = i0.ɵɵnextContext(4);
|
|
475
475
|
i0.ɵɵadvance(7);
|
|
476
|
-
i0.ɵɵproperty("ngIf",
|
|
476
|
+
i0.ɵɵproperty("ngIf", ctx_r70.data.download !== false && ctx_r70.downloadTable);
|
|
477
477
|
} }
|
|
478
478
|
function TableComponent_div_0_div_3_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
479
479
|
i0.ɵɵelementStart(0, "div");
|
|
480
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_Template, 2, 1, "div",
|
|
481
|
-
i0.ɵɵelementStart(2, "div",
|
|
482
|
-
i0.ɵɵtemplate(3, TableComponent_div_0_div_3_div_9_div_3_Template, 4, 0, "div",
|
|
483
|
-
i0.ɵɵtemplate(4, TableComponent_div_0_div_3_div_9_div_4_Template, 8, 1, "div",
|
|
480
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_div_3_div_9_div_1_Template, 2, 1, "div", 26);
|
|
481
|
+
i0.ɵɵelementStart(2, "div", 27);
|
|
482
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_div_3_div_9_div_3_Template, 4, 0, "div", 28);
|
|
483
|
+
i0.ɵɵtemplate(4, TableComponent_div_0_div_3_div_9_div_4_Template, 8, 1, "div", 29);
|
|
484
484
|
i0.ɵɵelementEnd()();
|
|
485
485
|
} if (rf & 2) {
|
|
486
|
-
const
|
|
486
|
+
const ctx_r60 = i0.ɵɵnextContext(3);
|
|
487
487
|
i0.ɵɵadvance(1);
|
|
488
|
-
i0.ɵɵproperty("ngIf",
|
|
488
|
+
i0.ɵɵproperty("ngIf", ctx_r60.filtersForm.controls.length > 0);
|
|
489
489
|
i0.ɵɵadvance(2);
|
|
490
|
-
i0.ɵɵproperty("ngIf",
|
|
490
|
+
i0.ɵɵproperty("ngIf", ctx_r60.dropdownItems.length > 0);
|
|
491
491
|
i0.ɵɵadvance(1);
|
|
492
|
-
i0.ɵɵproperty("ngIf",
|
|
492
|
+
i0.ɵɵproperty("ngIf", ctx_r60.hasFilterableColumn === true || ctx_r60.hasSortableColumn === true);
|
|
493
493
|
} }
|
|
494
494
|
function TableComponent_div_0_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
495
|
-
i0.ɵɵelementStart(0, "div",
|
|
496
|
-
i0.ɵɵelement(4, "i",
|
|
497
|
-
i0.ɵɵelementStart(5, "span",
|
|
495
|
+
i0.ɵɵelementStart(0, "div", 18)(1, "div", 19)(2, "div", 20)(3, "div", 21);
|
|
496
|
+
i0.ɵɵelement(4, "i", 22);
|
|
497
|
+
i0.ɵɵelementStart(5, "span", 23);
|
|
498
498
|
i0.ɵɵtext(6, "Filtros e A\u00E7\u00F5es");
|
|
499
499
|
i0.ɵɵelementEnd()();
|
|
500
|
-
i0.ɵɵtemplate(7, TableComponent_div_0_div_3_button_7_Template, 3, 4, "button",
|
|
500
|
+
i0.ɵɵtemplate(7, TableComponent_div_0_div_3_button_7_Template, 3, 4, "button", 24);
|
|
501
501
|
i0.ɵɵelementEnd()();
|
|
502
|
-
i0.ɵɵtemplate(8, TableComponent_div_0_div_3_div_8_Template, 9, 0, "div",
|
|
503
|
-
i0.ɵɵtemplate(9, TableComponent_div_0_div_3_div_9_Template, 5, 3, "div",
|
|
502
|
+
i0.ɵɵtemplate(8, TableComponent_div_0_div_3_div_8_Template, 9, 0, "div", 25);
|
|
503
|
+
i0.ɵɵtemplate(9, TableComponent_div_0_div_3_div_9_Template, 5, 3, "div", 28);
|
|
504
504
|
i0.ɵɵelementEnd();
|
|
505
505
|
} if (rf & 2) {
|
|
506
506
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
@@ -512,282 +512,282 @@ function TableComponent_div_0_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
|
512
512
|
i0.ɵɵproperty("ngIf", ctx_r2.dropdownItems.length > 0);
|
|
513
513
|
} }
|
|
514
514
|
function TableComponent_div_0_lib_table_tabs_5_Template(rf, ctx) { if (rf & 1) {
|
|
515
|
-
const
|
|
516
|
-
i0.ɵɵelementStart(0, "lib-table-tabs",
|
|
517
|
-
i0.ɵɵlistener("tabSelected", function TableComponent_div_0_lib_table_tabs_5_Template_lib_table_tabs_tabSelected_0_listener($event) { i0.ɵɵrestoreView(
|
|
515
|
+
const _r111 = i0.ɵɵgetCurrentView();
|
|
516
|
+
i0.ɵɵelementStart(0, "lib-table-tabs", 79);
|
|
517
|
+
i0.ɵɵlistener("tabSelected", function TableComponent_div_0_lib_table_tabs_5_Template_lib_table_tabs_tabSelected_0_listener($event) { i0.ɵɵrestoreView(_r111); const ctx_r110 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r110.onTabSelected($event)); });
|
|
518
518
|
i0.ɵɵelementEnd();
|
|
519
519
|
} if (rf & 2) {
|
|
520
520
|
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
521
521
|
i0.ɵɵproperty("tabsData", ctx_r3.data.tabs.tabsData)("selectedTab", ctx_r3.selectedTab);
|
|
522
522
|
} }
|
|
523
523
|
function TableComponent_div_0_ng_container_9_ng_container_1_th_1_Template(rf, ctx) { if (rf & 1) {
|
|
524
|
-
i0.ɵɵelementStart(0, "th",
|
|
524
|
+
i0.ɵɵelementStart(0, "th", 85);
|
|
525
525
|
i0.ɵɵtext(1);
|
|
526
526
|
i0.ɵɵelementEnd();
|
|
527
527
|
} if (rf & 2) {
|
|
528
|
-
const
|
|
528
|
+
const col_r112 = i0.ɵɵnextContext(2).$implicit;
|
|
529
529
|
i0.ɵɵadvance(1);
|
|
530
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
530
|
+
i0.ɵɵtextInterpolate1(" ", col_r112.title, " ");
|
|
531
531
|
} }
|
|
532
532
|
function TableComponent_div_0_ng_container_9_ng_container_1_th_2_Template(rf, ctx) { if (rf & 1) {
|
|
533
|
-
i0.ɵɵelementStart(0, "th",
|
|
533
|
+
i0.ɵɵelementStart(0, "th", 86);
|
|
534
534
|
i0.ɵɵtext(1);
|
|
535
535
|
i0.ɵɵelementEnd();
|
|
536
536
|
} if (rf & 2) {
|
|
537
|
-
const
|
|
537
|
+
const col_r112 = i0.ɵɵnextContext(2).$implicit;
|
|
538
538
|
i0.ɵɵadvance(1);
|
|
539
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
539
|
+
i0.ɵɵtextInterpolate1(" ", col_r112.title, " ");
|
|
540
540
|
} }
|
|
541
541
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_1_Template(rf, ctx) { if (rf & 1) {
|
|
542
|
-
i0.ɵɵelementStart(0, "a",
|
|
542
|
+
i0.ɵɵelementStart(0, "a", 92);
|
|
543
543
|
i0.ɵɵtext(1);
|
|
544
544
|
i0.ɵɵelementEnd();
|
|
545
545
|
} if (rf & 2) {
|
|
546
|
-
const
|
|
547
|
-
const
|
|
548
|
-
const
|
|
549
|
-
i0.ɵɵproperty("href",
|
|
546
|
+
const row_r119 = i0.ɵɵnextContext(3).$implicit;
|
|
547
|
+
const col_r112 = i0.ɵɵnextContext(2).$implicit;
|
|
548
|
+
const ctx_r127 = i0.ɵɵnextContext(2);
|
|
549
|
+
i0.ɵɵproperty("href", row_r119[col_r112.property], i0.ɵɵsanitizeUrl);
|
|
550
550
|
i0.ɵɵadvance(1);
|
|
551
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
551
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r127.getDisplayValue(col_r112, row_r119), " ");
|
|
552
552
|
} }
|
|
553
553
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_2_Template(rf, ctx) { if (rf & 1) {
|
|
554
|
-
i0.ɵɵelementStart(0, "a",
|
|
554
|
+
i0.ɵɵelementStart(0, "a", 92);
|
|
555
555
|
i0.ɵɵtext(1);
|
|
556
556
|
i0.ɵɵelementEnd();
|
|
557
557
|
} if (rf & 2) {
|
|
558
|
-
const
|
|
559
|
-
const
|
|
560
|
-
const
|
|
561
|
-
i0.ɵɵproperty("href",
|
|
558
|
+
const row_r119 = i0.ɵɵnextContext(3).$implicit;
|
|
559
|
+
const col_r112 = i0.ɵɵnextContext(2).$implicit;
|
|
560
|
+
const ctx_r128 = i0.ɵɵnextContext(2);
|
|
561
|
+
i0.ɵɵproperty("href", col_r112.hasLink, i0.ɵɵsanitizeUrl);
|
|
562
562
|
i0.ɵɵadvance(1);
|
|
563
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
563
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r128.getDisplayValue(col_r112, row_r119), " ");
|
|
564
564
|
} }
|
|
565
565
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_span_3_Template(rf, ctx) { if (rf & 1) {
|
|
566
566
|
i0.ɵɵelementStart(0, "span");
|
|
567
567
|
i0.ɵɵtext(1);
|
|
568
568
|
i0.ɵɵelementEnd();
|
|
569
569
|
} if (rf & 2) {
|
|
570
|
-
const
|
|
571
|
-
const
|
|
572
|
-
const
|
|
570
|
+
const row_r119 = i0.ɵɵnextContext(3).$implicit;
|
|
571
|
+
const col_r112 = i0.ɵɵnextContext(2).$implicit;
|
|
572
|
+
const ctx_r129 = i0.ɵɵnextContext(2);
|
|
573
573
|
i0.ɵɵadvance(1);
|
|
574
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
574
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r129.getDisplayValue(col_r112, row_r119), " ");
|
|
575
575
|
} }
|
|
576
576
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_Template(rf, ctx) { if (rf & 1) {
|
|
577
577
|
i0.ɵɵelementStart(0, "span");
|
|
578
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_1_Template, 2, 2, "a",
|
|
579
|
-
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_2_Template, 2, 2, "a",
|
|
580
|
-
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_span_3_Template, 2, 1, "span",
|
|
578
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_1_Template, 2, 2, "a", 91);
|
|
579
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_a_2_Template, 2, 2, "a", 91);
|
|
580
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_span_3_Template, 2, 1, "span", 28);
|
|
581
581
|
i0.ɵɵelementEnd();
|
|
582
582
|
} if (rf & 2) {
|
|
583
|
-
const
|
|
584
|
-
const
|
|
583
|
+
const col_r112 = i0.ɵɵnextContext(4).$implicit;
|
|
584
|
+
const ctx_r124 = i0.ɵɵnextContext(2);
|
|
585
585
|
i0.ɵɵadvance(1);
|
|
586
|
-
i0.ɵɵproperty("ngIf",
|
|
586
|
+
i0.ɵɵproperty("ngIf", col_r112.hasLink === true);
|
|
587
587
|
i0.ɵɵadvance(1);
|
|
588
|
-
i0.ɵɵproperty("ngIf",
|
|
588
|
+
i0.ɵɵproperty("ngIf", col_r112.hasLink && ctx_r124.isString(col_r112.hasLink));
|
|
589
589
|
i0.ɵɵadvance(1);
|
|
590
|
-
i0.ɵɵproperty("ngIf",
|
|
590
|
+
i0.ɵɵproperty("ngIf", col_r112.hasLink !== true && !ctx_r124.isString(col_r112.hasLink));
|
|
591
591
|
} }
|
|
592
592
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_0_Template(rf, ctx) { if (rf & 1) {
|
|
593
|
-
i0.ɵɵelementStart(0, "a",
|
|
593
|
+
i0.ɵɵelementStart(0, "a", 92);
|
|
594
594
|
i0.ɵɵtext(1);
|
|
595
595
|
i0.ɵɵelementEnd();
|
|
596
596
|
} if (rf & 2) {
|
|
597
|
-
const
|
|
598
|
-
const
|
|
599
|
-
const
|
|
600
|
-
i0.ɵɵproperty("href",
|
|
597
|
+
const row_r119 = i0.ɵɵnextContext(3).$implicit;
|
|
598
|
+
const col_r112 = i0.ɵɵnextContext(2).$implicit;
|
|
599
|
+
const ctx_r137 = i0.ɵɵnextContext(2);
|
|
600
|
+
i0.ɵɵproperty("href", row_r119[col_r112.property], i0.ɵɵsanitizeUrl);
|
|
601
601
|
i0.ɵɵadvance(1);
|
|
602
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
602
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r137.getDisplayValue(col_r112, row_r119, true), " ");
|
|
603
603
|
} }
|
|
604
604
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_1_Template(rf, ctx) { if (rf & 1) {
|
|
605
|
-
i0.ɵɵelementStart(0, "a",
|
|
605
|
+
i0.ɵɵelementStart(0, "a", 92);
|
|
606
606
|
i0.ɵɵtext(1);
|
|
607
607
|
i0.ɵɵelementEnd();
|
|
608
608
|
} if (rf & 2) {
|
|
609
|
-
const
|
|
610
|
-
const
|
|
611
|
-
const
|
|
612
|
-
i0.ɵɵproperty("href",
|
|
609
|
+
const row_r119 = i0.ɵɵnextContext(3).$implicit;
|
|
610
|
+
const col_r112 = i0.ɵɵnextContext(2).$implicit;
|
|
611
|
+
const ctx_r138 = i0.ɵɵnextContext(2);
|
|
612
|
+
i0.ɵɵproperty("href", col_r112.hasLink, i0.ɵɵsanitizeUrl);
|
|
613
613
|
i0.ɵɵadvance(1);
|
|
614
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
614
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r138.getDisplayValue(col_r112, row_r119, true), " ");
|
|
615
615
|
} }
|
|
616
616
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_span_2_Template(rf, ctx) { if (rf & 1) {
|
|
617
617
|
i0.ɵɵelementStart(0, "span");
|
|
618
618
|
i0.ɵɵtext(1);
|
|
619
619
|
i0.ɵɵelementEnd();
|
|
620
620
|
} if (rf & 2) {
|
|
621
|
-
const
|
|
622
|
-
const
|
|
623
|
-
const
|
|
621
|
+
const row_r119 = i0.ɵɵnextContext(3).$implicit;
|
|
622
|
+
const col_r112 = i0.ɵɵnextContext(2).$implicit;
|
|
623
|
+
const ctx_r139 = i0.ɵɵnextContext(2);
|
|
624
624
|
i0.ɵɵadvance(1);
|
|
625
|
-
i0.ɵɵtextInterpolate1(" ",
|
|
625
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r139.getDisplayValue(col_r112, row_r119, true), " ");
|
|
626
626
|
} }
|
|
627
627
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_Template(rf, ctx) { if (rf & 1) {
|
|
628
|
-
i0.ɵɵtemplate(0, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_0_Template, 2, 2, "a",
|
|
629
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_1_Template, 2, 2, "a",
|
|
630
|
-
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_span_2_Template, 2, 1, "span",
|
|
628
|
+
i0.ɵɵtemplate(0, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_0_Template, 2, 2, "a", 91);
|
|
629
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_a_1_Template, 2, 2, "a", 91);
|
|
630
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_span_2_Template, 2, 1, "span", 28);
|
|
631
631
|
} if (rf & 2) {
|
|
632
|
-
const
|
|
633
|
-
const
|
|
634
|
-
i0.ɵɵproperty("ngIf",
|
|
632
|
+
const col_r112 = i0.ɵɵnextContext(4).$implicit;
|
|
633
|
+
const ctx_r126 = i0.ɵɵnextContext(2);
|
|
634
|
+
i0.ɵɵproperty("ngIf", col_r112.hasLink === true);
|
|
635
635
|
i0.ɵɵadvance(1);
|
|
636
|
-
i0.ɵɵproperty("ngIf",
|
|
636
|
+
i0.ɵɵproperty("ngIf", col_r112.hasLink && ctx_r126.isString(col_r112.hasLink));
|
|
637
637
|
i0.ɵɵadvance(1);
|
|
638
|
-
i0.ɵɵproperty("ngIf",
|
|
638
|
+
i0.ɵɵproperty("ngIf", col_r112.hasLink !== true && !ctx_r126.isString(col_r112.hasLink));
|
|
639
639
|
} }
|
|
640
640
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_Template(rf, ctx) { if (rf & 1) {
|
|
641
641
|
i0.ɵɵelementStart(0, "span");
|
|
642
642
|
i0.ɵɵelementContainerStart(1);
|
|
643
|
-
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_Template, 4, 3, "span",
|
|
643
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_span_2_Template, 4, 3, "span", 89);
|
|
644
644
|
i0.ɵɵelementContainerEnd();
|
|
645
|
-
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_Template, 3, 3, "ng-template", null,
|
|
645
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_ng_template_3_Template, 3, 3, "ng-template", null, 90, i0.ɵɵtemplateRefExtractor);
|
|
646
646
|
i0.ɵɵelementEnd();
|
|
647
647
|
} if (rf & 2) {
|
|
648
|
-
const
|
|
649
|
-
const
|
|
650
|
-
const
|
|
648
|
+
const _r125 = i0.ɵɵreference(4);
|
|
649
|
+
const row_r119 = i0.ɵɵnextContext().$implicit;
|
|
650
|
+
const col_r112 = i0.ɵɵnextContext(2).$implicit;
|
|
651
651
|
i0.ɵɵadvance(2);
|
|
652
|
-
i0.ɵɵproperty("ngIf",
|
|
652
|
+
i0.ɵɵproperty("ngIf", col_r112.charLimit && row_r119[col_r112.property] && row_r119[col_r112.property].length > col_r112.charLimit)("ngIfElse", _r125);
|
|
653
653
|
} }
|
|
654
654
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_mat_spinner_1_Template(rf, ctx) { if (rf & 1) {
|
|
655
|
-
i0.ɵɵelement(0, "mat-spinner",
|
|
655
|
+
i0.ɵɵelement(0, "mat-spinner", 96);
|
|
656
656
|
} if (rf & 2) {
|
|
657
657
|
i0.ɵɵproperty("diameter", 32);
|
|
658
658
|
} }
|
|
659
659
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
660
|
-
const
|
|
661
|
-
i0.ɵɵelementStart(0, "div",
|
|
662
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_mat_spinner_1_Template, 1, 1, "mat-spinner",
|
|
663
|
-
i0.ɵɵelementStart(2, "img",
|
|
664
|
-
i0.ɵɵlistener("load", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template_img_load_2_listener() { i0.ɵɵrestoreView(
|
|
660
|
+
const _r152 = i0.ɵɵgetCurrentView();
|
|
661
|
+
i0.ɵɵelementStart(0, "div", 93);
|
|
662
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_mat_spinner_1_Template, 1, 1, "mat-spinner", 94);
|
|
663
|
+
i0.ɵɵelementStart(2, "img", 95);
|
|
664
|
+
i0.ɵɵlistener("load", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template_img_load_2_listener() { i0.ɵɵrestoreView(_r152); const row_r119 = i0.ɵɵnextContext().$implicit; const col_r112 = i0.ɵɵnextContext(2).$implicit; const ctx_r150 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r150.onImageLoad(row_r119, col_r112)); })("error", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template_img_error_2_listener($event) { i0.ɵɵrestoreView(_r152); const row_r119 = i0.ɵɵnextContext().$implicit; const col_r112 = i0.ɵɵnextContext(2).$implicit; const ctx_r154 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r154.onImageError($event, row_r119, col_r112, col_r112.image.default)); });
|
|
665
665
|
i0.ɵɵelementEnd()();
|
|
666
666
|
} if (rf & 2) {
|
|
667
|
-
const
|
|
668
|
-
const
|
|
669
|
-
const
|
|
667
|
+
const row_r119 = i0.ɵɵnextContext().$implicit;
|
|
668
|
+
const col_r112 = i0.ɵɵnextContext(2).$implicit;
|
|
669
|
+
const ctx_r121 = i0.ɵɵnextContext(2);
|
|
670
670
|
i0.ɵɵadvance(1);
|
|
671
|
-
i0.ɵɵproperty("ngIf",
|
|
671
|
+
i0.ɵɵproperty("ngIf", ctx_r121.isImageLoading(row_r119, col_r112));
|
|
672
672
|
i0.ɵɵadvance(1);
|
|
673
|
-
i0.ɵɵclassProp("opacity-0",
|
|
674
|
-
i0.ɵɵproperty("src",
|
|
673
|
+
i0.ɵɵclassProp("opacity-0", ctx_r121.isImageLoading(row_r119, col_r112));
|
|
674
|
+
i0.ɵɵproperty("src", col_r112.image.path + "/" + row_r119[col_r112.property], i0.ɵɵsanitizeUrl)("ngClass", col_r112.image.class);
|
|
675
675
|
} }
|
|
676
676
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_mat_spinner_1_Template(rf, ctx) { if (rf & 1) {
|
|
677
|
-
i0.ɵɵelement(0, "mat-spinner",
|
|
677
|
+
i0.ɵɵelement(0, "mat-spinner", 96);
|
|
678
678
|
} if (rf & 2) {
|
|
679
679
|
i0.ɵɵproperty("diameter", 32);
|
|
680
680
|
} }
|
|
681
681
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
682
|
-
const
|
|
683
|
-
i0.ɵɵelementStart(0, "div",
|
|
684
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_mat_spinner_1_Template, 1, 1, "mat-spinner",
|
|
685
|
-
i0.ɵɵelementStart(2, "img",
|
|
686
|
-
i0.ɵɵlistener("load", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template_img_load_2_listener() { i0.ɵɵrestoreView(
|
|
682
|
+
const _r162 = i0.ɵɵgetCurrentView();
|
|
683
|
+
i0.ɵɵelementStart(0, "div", 93);
|
|
684
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_mat_spinner_1_Template, 1, 1, "mat-spinner", 94);
|
|
685
|
+
i0.ɵɵelementStart(2, "img", 95);
|
|
686
|
+
i0.ɵɵlistener("load", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template_img_load_2_listener() { i0.ɵɵrestoreView(_r162); const row_r119 = i0.ɵɵnextContext().$implicit; const col_r112 = i0.ɵɵnextContext(2).$implicit; const ctx_r160 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r160.onImageLoad(row_r119, col_r112)); })("error", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template_img_error_2_listener($event) { i0.ɵɵrestoreView(_r162); const row_r119 = i0.ɵɵnextContext().$implicit; const col_r112 = i0.ɵɵnextContext(2).$implicit; const ctx_r164 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r164.onImageError($event, row_r119, col_r112, col_r112.image.default)); });
|
|
687
687
|
i0.ɵɵelementEnd()();
|
|
688
688
|
} if (rf & 2) {
|
|
689
|
-
const
|
|
690
|
-
const
|
|
691
|
-
const
|
|
689
|
+
const row_r119 = i0.ɵɵnextContext().$implicit;
|
|
690
|
+
const col_r112 = i0.ɵɵnextContext(2).$implicit;
|
|
691
|
+
const ctx_r122 = i0.ɵɵnextContext(2);
|
|
692
692
|
i0.ɵɵadvance(1);
|
|
693
|
-
i0.ɵɵproperty("ngIf",
|
|
693
|
+
i0.ɵɵproperty("ngIf", ctx_r122.isImageLoading(row_r119, col_r112));
|
|
694
694
|
i0.ɵɵadvance(1);
|
|
695
|
-
i0.ɵɵclassProp("opacity-0",
|
|
696
|
-
i0.ɵɵproperty("src",
|
|
695
|
+
i0.ɵɵclassProp("opacity-0", ctx_r122.isImageLoading(row_r119, col_r112));
|
|
696
|
+
i0.ɵɵproperty("src", row_r119[col_r112.property], i0.ɵɵsanitizeUrl)("ngClass", col_r112.image.class);
|
|
697
697
|
} }
|
|
698
698
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_span_1_Template(rf, ctx) { if (rf & 1) {
|
|
699
|
-
i0.ɵɵelementStart(0, "span",
|
|
699
|
+
i0.ɵɵelementStart(0, "span", 100);
|
|
700
700
|
i0.ɵɵtext(1);
|
|
701
701
|
i0.ɵɵelementEnd();
|
|
702
702
|
} if (rf & 2) {
|
|
703
|
-
const
|
|
704
|
-
i0.ɵɵproperty("ngClass",
|
|
703
|
+
const iconClass_r170 = i0.ɵɵnextContext().$implicit;
|
|
704
|
+
i0.ɵɵproperty("ngClass", iconClass_r170.class);
|
|
705
705
|
i0.ɵɵadvance(1);
|
|
706
|
-
i0.ɵɵtextInterpolate(
|
|
706
|
+
i0.ɵɵtextInterpolate(iconClass_r170.text);
|
|
707
707
|
} }
|
|
708
708
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template(rf, ctx) { if (rf & 1) {
|
|
709
|
-
const
|
|
710
|
-
i0.ɵɵelementStart(0, "button",
|
|
711
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template_button_click_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(
|
|
712
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_span_1_Template, 2, 2, "span",
|
|
709
|
+
const _r174 = i0.ɵɵgetCurrentView();
|
|
710
|
+
i0.ɵɵelementStart(0, "button", 98);
|
|
711
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template_button_click_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r174); const iconClass_r170 = restoredCtx.$implicit; const row_r119 = i0.ɵɵnextContext(2).$implicit; return i0.ɵɵresetView(iconClass_r170.buttonMethod ? iconClass_r170.buttonMethod(row_r119, $event) : $event.stopPropagation()); });
|
|
712
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_span_1_Template, 2, 2, "span", 99);
|
|
713
713
|
i0.ɵɵelementEnd();
|
|
714
714
|
} if (rf & 2) {
|
|
715
|
-
const
|
|
716
|
-
const
|
|
715
|
+
const iconClass_r170 = ctx.$implicit;
|
|
716
|
+
const row_r119 = i0.ɵɵnextContext(2).$implicit;
|
|
717
717
|
i0.ɵɵadvance(1);
|
|
718
|
-
i0.ɵɵproperty("ngIf",
|
|
718
|
+
i0.ɵɵproperty("ngIf", iconClass_r170.condition === undefined || iconClass_r170.condition !== undefined && iconClass_r170.condition(row_r119));
|
|
719
719
|
} }
|
|
720
720
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_Template(rf, ctx) { if (rf & 1) {
|
|
721
721
|
i0.ɵɵelementContainerStart(0);
|
|
722
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template, 2, 1, "button",
|
|
722
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_button_1_Template, 2, 1, "button", 97);
|
|
723
723
|
i0.ɵɵelementContainerEnd();
|
|
724
724
|
} if (rf & 2) {
|
|
725
|
-
const
|
|
725
|
+
const col_r112 = i0.ɵɵnextContext(3).$implicit;
|
|
726
726
|
i0.ɵɵadvance(1);
|
|
727
|
-
i0.ɵɵproperty("ngForOf",
|
|
727
|
+
i0.ɵɵproperty("ngForOf", col_r112.iconClass);
|
|
728
728
|
} }
|
|
729
729
|
function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template(rf, ctx) { if (rf & 1) {
|
|
730
|
-
const
|
|
731
|
-
i0.ɵɵelementStart(0, "td",
|
|
732
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(
|
|
733
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_Template, 5, 2, "span",
|
|
734
|
-
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template, 3, 5, "div",
|
|
735
|
-
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template, 3, 5, "div",
|
|
736
|
-
i0.ɵɵtemplate(4, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_Template, 2, 1, "ng-container",
|
|
730
|
+
const _r180 = i0.ɵɵgetCurrentView();
|
|
731
|
+
i0.ɵɵelementStart(0, "td", 87);
|
|
732
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r180); const row_r119 = restoredCtx.$implicit; const col_r112 = i0.ɵɵnextContext(2).$implicit; return i0.ɵɵresetView(col_r112.method ? col_r112.method(row_r119) : null); })("mouseenter", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mouseenter_0_listener($event) { const restoredCtx = i0.ɵɵrestoreView(_r180); const row_r119 = restoredCtx.$implicit; const col_r112 = i0.ɵɵnextContext(2).$implicit; const ctx_r181 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r181.onCellMouseEnter($event, row_r119, col_r112)); })("mouseleave", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mouseleave_0_listener() { i0.ɵɵrestoreView(_r180); const ctx_r183 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r183.onCellMouseLeave()); })("mousemove", function TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template_td_mousemove_0_listener($event) { i0.ɵɵrestoreView(_r180); const ctx_r184 = i0.ɵɵnextContext(4); return i0.ɵɵresetView(ctx_r184.onCellMouseMove($event)); });
|
|
733
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_td_3_span_1_Template, 5, 2, "span", 28);
|
|
734
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_2_Template, 3, 5, "div", 88);
|
|
735
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_div_3_Template, 3, 5, "div", 88);
|
|
736
|
+
i0.ɵɵtemplate(4, TableComponent_div_0_ng_container_9_ng_container_1_td_3_ng_container_4_Template, 2, 1, "ng-container", 28);
|
|
737
737
|
i0.ɵɵelementEnd();
|
|
738
738
|
} if (rf & 2) {
|
|
739
|
-
const
|
|
739
|
+
const col_r112 = i0.ɵɵnextContext(2).$implicit;
|
|
740
740
|
i0.ɵɵadvance(1);
|
|
741
|
-
i0.ɵɵproperty("ngIf", !
|
|
741
|
+
i0.ɵɵproperty("ngIf", !col_r112.image && !col_r112.iconClass && !col_r112.method);
|
|
742
742
|
i0.ɵɵadvance(1);
|
|
743
|
-
i0.ɵɵproperty("ngIf",
|
|
743
|
+
i0.ɵɵproperty("ngIf", col_r112.image && col_r112.image.path && !col_r112.iconClass && !col_r112.method);
|
|
744
744
|
i0.ɵɵadvance(1);
|
|
745
|
-
i0.ɵɵproperty("ngIf",
|
|
745
|
+
i0.ɵɵproperty("ngIf", col_r112.image && col_r112.image.url && !col_r112.iconClass && !col_r112.method);
|
|
746
746
|
i0.ɵɵadvance(1);
|
|
747
|
-
i0.ɵɵproperty("ngIf",
|
|
747
|
+
i0.ɵɵproperty("ngIf", col_r112.iconClass);
|
|
748
748
|
} }
|
|
749
749
|
function TableComponent_div_0_ng_container_9_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
750
750
|
i0.ɵɵelementContainerStart(0);
|
|
751
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_th_1_Template, 2, 1, "th",
|
|
752
|
-
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_th_2_Template, 2, 1, "th",
|
|
753
|
-
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template, 5, 4, "td",
|
|
751
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_th_1_Template, 2, 1, "th", 82);
|
|
752
|
+
i0.ɵɵtemplate(2, TableComponent_div_0_ng_container_9_ng_container_1_th_2_Template, 2, 1, "th", 83);
|
|
753
|
+
i0.ɵɵtemplate(3, TableComponent_div_0_ng_container_9_ng_container_1_td_3_Template, 5, 4, "td", 84);
|
|
754
754
|
i0.ɵɵelementContainerEnd();
|
|
755
755
|
} if (rf & 2) {
|
|
756
|
-
const
|
|
757
|
-
const
|
|
756
|
+
const col_r112 = i0.ɵɵnextContext().$implicit;
|
|
757
|
+
const ctx_r113 = i0.ɵɵnextContext(2);
|
|
758
758
|
i0.ɵɵadvance(1);
|
|
759
|
-
i0.ɵɵproperty("ngIf", !
|
|
759
|
+
i0.ɵɵproperty("ngIf", !col_r112.isSortable || ctx_r113.data.pagination === true);
|
|
760
760
|
i0.ɵɵadvance(1);
|
|
761
|
-
i0.ɵɵproperty("ngIf",
|
|
761
|
+
i0.ɵɵproperty("ngIf", col_r112.isSortable && ctx_r113.data.pagination === false);
|
|
762
762
|
} }
|
|
763
763
|
function TableComponent_div_0_ng_container_9_Template(rf, ctx) { if (rf & 1) {
|
|
764
|
-
i0.ɵɵelementContainerStart(0,
|
|
765
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_Template, 4, 2, "ng-container",
|
|
764
|
+
i0.ɵɵelementContainerStart(0, 80);
|
|
765
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_ng_container_9_ng_container_1_Template, 4, 2, "ng-container", 81);
|
|
766
766
|
i0.ɵɵelementContainerEnd();
|
|
767
767
|
} if (rf & 2) {
|
|
768
|
-
const
|
|
769
|
-
i0.ɵɵpropertyInterpolate("matColumnDef",
|
|
768
|
+
const col_r112 = ctx.$implicit;
|
|
769
|
+
i0.ɵɵpropertyInterpolate("matColumnDef", col_r112.property);
|
|
770
770
|
} }
|
|
771
771
|
function TableComponent_div_0_tr_10_Template(rf, ctx) { if (rf & 1) {
|
|
772
|
-
i0.ɵɵelement(0, "tr",
|
|
772
|
+
i0.ɵɵelement(0, "tr", 101);
|
|
773
773
|
} }
|
|
774
774
|
function TableComponent_div_0_tr_11_Template(rf, ctx) { if (rf & 1) {
|
|
775
|
-
const
|
|
776
|
-
i0.ɵɵelementStart(0, "tr",
|
|
777
|
-
i0.ɵɵlistener("click", function TableComponent_div_0_tr_11_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(
|
|
775
|
+
const _r189 = i0.ɵɵgetCurrentView();
|
|
776
|
+
i0.ɵɵelementStart(0, "tr", 102);
|
|
777
|
+
i0.ɵɵlistener("click", function TableComponent_div_0_tr_11_Template_tr_click_0_listener() { const restoredCtx = i0.ɵɵrestoreView(_r189); const row_r187 = restoredCtx.$implicit; const ctx_r188 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r188.goToDetails(row_r187)); });
|
|
778
778
|
i0.ɵɵelementEnd();
|
|
779
779
|
} if (rf & 2) {
|
|
780
780
|
const ctx_r7 = i0.ɵɵnextContext(2);
|
|
781
781
|
i0.ɵɵproperty("ngClass", ctx_r7.getTableRowNgClass());
|
|
782
782
|
} }
|
|
783
783
|
function TableComponent_div_0_tr_12_td_1_Template(rf, ctx) { if (rf & 1) {
|
|
784
|
-
i0.ɵɵelementStart(0, "td",
|
|
784
|
+
i0.ɵɵelementStart(0, "td", 105);
|
|
785
785
|
i0.ɵɵtext(1, " Nenhum resultado encontrado para a busca ");
|
|
786
786
|
i0.ɵɵelementEnd();
|
|
787
787
|
} }
|
|
788
788
|
function TableComponent_div_0_tr_12_Template(rf, ctx) { if (rf & 1) {
|
|
789
|
-
i0.ɵɵelementStart(0, "tr",
|
|
790
|
-
i0.ɵɵtemplate(1, TableComponent_div_0_tr_12_td_1_Template, 2, 0, "td",
|
|
789
|
+
i0.ɵɵelementStart(0, "tr", 103);
|
|
790
|
+
i0.ɵɵtemplate(1, TableComponent_div_0_tr_12_td_1_Template, 2, 0, "td", 104);
|
|
791
791
|
i0.ɵɵpipe(2, "async");
|
|
792
792
|
i0.ɵɵelementEnd();
|
|
793
793
|
} if (rf & 2) {
|
|
@@ -796,22 +796,13 @@ function TableComponent_div_0_tr_12_Template(rf, ctx) { if (rf & 1) {
|
|
|
796
796
|
i0.ɵɵproperty("ngIf", !i0.ɵɵpipeBind1(2, 1, ctx_r8.isLoading$));
|
|
797
797
|
} }
|
|
798
798
|
function TableComponent_div_0_div_13_Template(rf, ctx) { if (rf & 1) {
|
|
799
|
-
i0.ɵɵelementStart(0, "div",
|
|
799
|
+
i0.ɵɵelementStart(0, "div", 106);
|
|
800
800
|
i0.ɵɵelement(1, "mat-spinner");
|
|
801
801
|
i0.ɵɵelementEnd();
|
|
802
802
|
} }
|
|
803
|
-
function TableComponent_div_0_div_18_Template(rf, ctx) { if (rf & 1) {
|
|
804
|
-
i0.ɵɵelementStart(0, "div", 108);
|
|
805
|
-
i0.ɵɵtext(1);
|
|
806
|
-
i0.ɵɵelementEnd();
|
|
807
|
-
} if (rf & 2) {
|
|
808
|
-
const ctx_r11 = i0.ɵɵnextContext(2);
|
|
809
|
-
i0.ɵɵadvance(1);
|
|
810
|
-
i0.ɵɵtextInterpolate1(" ", ctx_r11.currentPageNumber, " ");
|
|
811
|
-
} }
|
|
812
803
|
const _c0 = function () { return [25, 50, 100]; };
|
|
813
804
|
function TableComponent_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
814
|
-
const
|
|
805
|
+
const _r192 = i0.ɵɵgetCurrentView();
|
|
815
806
|
i0.ɵɵelementStart(0, "div", 1)(1, "div", 2);
|
|
816
807
|
i0.ɵɵtemplate(2, TableComponent_div_0_div_2_Template, 13, 5, "div", 3);
|
|
817
808
|
i0.ɵɵtemplate(3, TableComponent_div_0_div_3_Template, 10, 3, "div", 3);
|
|
@@ -826,12 +817,9 @@ function TableComponent_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
|
826
817
|
i0.ɵɵtemplate(13, TableComponent_div_0_div_13_Template, 2, 0, "div", 13);
|
|
827
818
|
i0.ɵɵpipe(14, "async");
|
|
828
819
|
i0.ɵɵelementStart(15, "div", 14)(16, "mat-paginator", 15, 16);
|
|
829
|
-
i0.ɵɵlistener("page", function TableComponent_div_0_Template_mat_paginator_page_16_listener($event) { i0.ɵɵrestoreView(
|
|
830
|
-
i0.ɵɵelementEnd();
|
|
831
|
-
i0.ɵɵ
|
|
832
|
-
i0.ɵɵpipe(19, "async");
|
|
833
|
-
i0.ɵɵelementEnd()()()();
|
|
834
|
-
i0.ɵɵelement(20, "lib-table-tooltip", 18);
|
|
820
|
+
i0.ɵɵlistener("page", function TableComponent_div_0_Template_mat_paginator_page_16_listener($event) { i0.ɵɵrestoreView(_r192); const ctx_r191 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r191.onPageChange($event)); });
|
|
821
|
+
i0.ɵɵelementEnd()()()()();
|
|
822
|
+
i0.ɵɵelement(18, "lib-table-tooltip", 17);
|
|
835
823
|
i0.ɵɵelementEnd();
|
|
836
824
|
} if (rf & 2) {
|
|
837
825
|
const ctx_r0 = i0.ɵɵnextContext();
|
|
@@ -850,11 +838,9 @@ function TableComponent_div_0_Template(rf, ctx) { if (rf & 1) {
|
|
|
850
838
|
i0.ɵɵadvance(1);
|
|
851
839
|
i0.ɵɵproperty("matRowDefColumns", ctx_r0.columnProperties);
|
|
852
840
|
i0.ɵɵadvance(2);
|
|
853
|
-
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(14,
|
|
841
|
+
i0.ɵɵproperty("ngIf", i0.ɵɵpipeBind1(14, 15, ctx_r0.isLoading$));
|
|
854
842
|
i0.ɵɵadvance(3);
|
|
855
|
-
i0.ɵɵproperty("pageSizeOptions", i0.ɵɵpureFunction0(
|
|
856
|
-
i0.ɵɵadvance(2);
|
|
857
|
-
i0.ɵɵproperty("ngIf", !i0.ɵɵpipeBind1(19, 18, ctx_r0.isLoading$) && (ctx_r0.dataSource == null ? null : ctx_r0.dataSource.data) && ctx_r0.dataSource.data.length > 0 && (ctx_r0.data == null ? null : ctx_r0.data.filterFn));
|
|
843
|
+
i0.ɵɵproperty("pageSizeOptions", i0.ɵɵpureFunction0(17, _c0))("pageSize", ctx_r0.pageSize)("length", ctx_r0.totalItems)("ngClass", ctx_r0.getPaginatorNgClass());
|
|
858
844
|
i0.ɵɵadvance(2);
|
|
859
845
|
i0.ɵɵproperty("state", ctx_r0.tooltipState)("styles", ctx_r0.getTooltipStyles());
|
|
860
846
|
} }
|
|
@@ -1549,14 +1535,14 @@ TableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TableCompone
|
|
|
1549
1535
|
let _t;
|
|
1550
1536
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.paginator = _t.first);
|
|
1551
1537
|
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.sort = _t.first);
|
|
1552
|
-
} }, inputs: { data: "data", downloadTable: "downloadTable" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["class", "card-body", 4, "ngIf"], [1, "card-body"], [1, "flex", "flex-col", "justify-between", "gap-6"], ["class", "rounded-xl border border-gray-200 bg-white p-4 shadow-lg", 4, "ngIf"], [1, "flex", "flex-col"], [3, "tabsData", "selectedTab", "tabSelected", 4, "ngIf"], [1, "mat-elevation-z8", "w-full", "overflow-x-auto", "rounded-xl", "table-container"], ["mat-table", "", "matSort", "", "matSortActive", "createdAt", "matSortDirection", "desc", 3, "dataSource"], ["sort", "matSort"], [3, "matColumnDef", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["mat-header-row", "", 4, "matHeaderRowDef"], ["mat-row", "", 3, "ngClass", "click", 4, "matRowDef", "matRowDefColumns"], ["class", "mat-row", 4, "matNoDataRow"], ["class", "flex justify-center", 4, "ngIf"], [1, "paginator-container"], ["showFirstLastButtons", "", "aria-label", "Select page of periodic elements", 3, "pageSizeOptions", "pageSize", "length", "ngClass", "page"], ["paginator", ""], [
|
|
1553
|
-
i0.ɵɵtemplate(0, TableComponent_div_0_Template,
|
|
1538
|
+
} }, inputs: { data: "data", downloadTable: "downloadTable" }, features: [i0.ɵɵNgOnChangesFeature], decls: 1, vars: 1, consts: [["class", "card-body", 4, "ngIf"], [1, "card-body"], [1, "flex", "flex-col", "justify-between", "gap-6"], ["class", "rounded-xl border border-gray-200 bg-white p-4 shadow-lg", 4, "ngIf"], [1, "flex", "flex-col"], [3, "tabsData", "selectedTab", "tabSelected", 4, "ngIf"], [1, "mat-elevation-z8", "w-full", "overflow-x-auto", "rounded-xl", "table-container"], ["mat-table", "", "matSort", "", "matSortActive", "createdAt", "matSortDirection", "desc", 3, "dataSource"], ["sort", "matSort"], [3, "matColumnDef", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["mat-header-row", "", 4, "matHeaderRowDef"], ["mat-row", "", 3, "ngClass", "click", 4, "matRowDef", "matRowDefColumns"], ["class", "mat-row", 4, "matNoDataRow"], ["class", "flex justify-center", 4, "ngIf"], [1, "paginator-container"], ["showFirstLastButtons", "", "aria-label", "Select page of periodic elements", 3, "pageSizeOptions", "pageSize", "length", "ngClass", "page"], ["paginator", ""], [3, "state", "styles"], [1, "rounded-xl", "border", "border-gray-200", "bg-white", "p-4", "shadow-lg"], [1, "mb-4", "flex", "flex-col", "items-start", "justify-between", "gap-4", "border-b-2", "border-gray-200", "pb-4", "md:flex-row", "md:items-center"], [1, "flex", "flex-wrap", "items-center", "gap-4"], [1, "flex", "items-center", "gap-2"], [1, "fa", "fa-filter", "text-xl", "text-blue-500"], [1, "text-lg", "font-semibold", "text-gray-700"], [3, "ngClass", "routerLink", "click", 4, "ngIf"], ["class", "mb-4", 4, "ngIf"], ["class", "mb-4 space-y-3", 4, "ngIf"], [1, "-mb-2", "flex", "items-start", "justify-between", "gap-4", "border-t", "border-gray-200", "pt-4"], [4, "ngIf"], ["class", "flex flex-wrap gap-3 self-start sm:self-auto", 4, "ngIf"], [3, "ngClass", "routerLink", "click"], [3, "class", 4, "ngIf"], [1, "mb-4"], [1, "flex", "flex-wrap", "items-center", "gap-3", "p-2"], [1, "min-w-[200px]", "flex-1"], ["appearance", "outline", 1, "w-full"], [1, "fa", "fa-sort-alpha-down", "text-cyan-600"], ["placeholder", "Selecione...", 3, "formControl"], [3, "value", 4, "ngFor", "ngForOf"], [3, "value"], [1, "mb-4", "space-y-3"], ["class", "flex flex-wrap items-center gap-3 p-2", 3, "formGroup", 4, "ngFor", "ngForOf"], [1, "flex", "flex-wrap", "items-center", "gap-3", "p-2", 3, "formGroup"], ["class", "min-w-[200px] flex-1", 4, "ngIf"], ["class", "min-w-[340px] flex-auto", 4, "ngIf"], ["class", "ml-auto flex-shrink-0", 4, "ngIf"], ["placeholder", "Selecione o tipo...", "formControlName", "selectFilter", 3, "selectionChange"], [1, "text-sm", "text-blue-500"], [1, "fa", "fa-search", "text-gray-400"], ["formControlName", "typeFilter", "matInput", "", "placeholder", "Digite para filtrar...", 3, "keyup.enter"], ["input", ""], ["placeholder", "Selecione...", "formControlName", "selectItem", "multiple", ""], [1, "min-w-[340px]", "flex-auto"], [1, "flex", "flex-col", "items-stretch", "gap-3", "sm:flex-row", "sm:items-center"], ["appearance", "outline", 1, "flex-1"], [1, "fa", "fa-calendar", "text-gray-400"], ["type", "text", "matInput", "", "formControlName", "initialDate", "placeholder", "DD/MM/AAAA", "maxlength", "10", 3, "keydown.enter", "input"], ["type", "text", "matInput", "", "formControlName", "finalDate", "placeholder", "DD/MM/AAAA", "maxlength", "10", 3, "keydown.enter", "input"], [1, "ml-auto", "flex-shrink-0"], ["matTooltip", "Remover filtro", 1, "flex", "h-10", "w-10", "items-center", "justify-center", "rounded-full", "transition-colors", "duration-300", "hover:bg-red-100", 3, "click"], [1, "fa", "fa-trash", "text-red-500", "hover:text-red-600"], ["matTooltip", "Adicionar novo filtro", 1, "transform", "rounded-full", "border-2", "border-blue-300", "bg-blue-50", "px-6", "py-2", "text-sm", "font-medium", "text-blue-600", "transition-all", "duration-300", "hover:-translate-y-0.5", "hover:border-blue-400", "hover:bg-blue-100", "hover:shadow-md", 3, "click"], [1, "fa", "fa-plus", "mr-2"], [1, "flex", "flex-wrap", "gap-3", "self-start", "sm:self-auto"], ["type", "button", "matTooltip", "Aplicar filtros", 1, "flex", "items-center", "gap-2", "rounded-lg", "bg-green-600", "px-5", "py-2", "text-sm", "font-medium", "text-white", "transition-colors", "hover:bg-green-700", 3, "click"], [1, "fa", "fa-search"], ["matTooltip", "Limpar filtros", 1, "flex", "items-center", "gap-2", "rounded-lg", "bg-red-500", "px-5", "py-2", "text-sm", "font-medium", "text-white", "transition-colors", "hover:bg-red-600", 3, "click"], [1, "fas", "fa-redo-alt"], ["class", "flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600", "matTooltipPosition", "above", "matTooltip", "Exportar Tabela", 3, "disabled", "click", 4, "ngIf"], ["matTooltipPosition", "above", "matTooltip", "Exportar Tabela", 1, "flex", "items-center", "gap-2", "rounded-lg", "bg-orange-500", "px-5", "py-2", "text-sm", "font-medium", "text-white", "transition-colors", "hover:bg-orange-600", 3, "disabled", "click"], [1, "fa", "fa-download"], [1, "fa", "fa-search", "text-blue-500"], ["matInput", "", "placeholder", "Digite para filtrar...", 3, "keyup.enter", "keyup"], ["filterInput", ""], ["matSuffix", "", 1, "text-gray-500"], ["class", "flex flex-wrap items-center gap-3", 3, "formGroup", 4, "ngFor", "ngForOf"], [1, "flex", "flex-wrap", "items-center", "gap-3", 3, "formGroup"], ["type", "text", "matInput", "", "formControlName", "initialDate", "placeholder", "DD/MM/AAAA", "maxlength", "10", 3, "keydown.enter", "input", "blur"], ["type", "text", "matInput", "", "formControlName", "finalDate", "placeholder", "DD/MM/AAAA", "maxlength", "10", 3, "keydown.enter", "input", "blur"], [3, "tabsData", "selectedTab", "tabSelected"], [3, "matColumnDef"], [4, "matHeaderCellDef"], ["mat-header-cell", "", 4, "ngIf"], ["mat-header-cell", "", "mat-sort-header", "", 4, "ngIf"], ["mat-cell", "", 3, "click", "mouseenter", "mouseleave", "mousemove", 4, "matCellDef"], ["mat-header-cell", ""], ["mat-header-cell", "", "mat-sort-header", ""], ["mat-cell", "", 3, "click", "mouseenter", "mouseleave", "mousemove"], ["class", "relative inline-block", 4, "ngIf"], [4, "ngIf", "ngIfElse"], ["withinLimit", ""], ["target", "_blank", 3, "href", 4, "ngIf"], ["target", "_blank", 3, "href"], [1, "relative", "inline-block"], ["class", "absolute inset-0 m-auto", 3, "diameter", 4, "ngIf"], ["alt", "", 3, "src", "ngClass", "load", "error"], [1, "absolute", "inset-0", "m-auto", 3, "diameter"], [3, "click", 4, "ngFor", "ngForOf"], [3, "click"], [3, "ngClass", 4, "ngIf"], [3, "ngClass"], ["mat-header-row", ""], ["mat-row", "", 3, "ngClass", "click"], [1, "mat-row"], ["class", "mat-cell p-4", "colspan", "4", 4, "ngIf"], ["colspan", "4", 1, "mat-cell", "p-4"], [1, "flex", "justify-center"]], template: function TableComponent_Template(rf, ctx) { if (rf & 1) {
|
|
1539
|
+
i0.ɵɵtemplate(0, TableComponent_div_0_Template, 19, 18, "div", 0);
|
|
1554
1540
|
} if (rf & 2) {
|
|
1555
1541
|
i0.ɵɵproperty("ngIf", ctx.data);
|
|
1556
1542
|
} }, dependencies: [i7.NgClass, i7.NgForOf, i7.NgIf, i8.DefaultValueAccessor, i8.NgControlStatus, i8.NgControlStatusGroup, i8.MaxLengthValidator, i8.FormControlDirective, i8.FormGroupDirective, i8.FormControlName, i1.RouterLink, i9.MatTable, i9.MatHeaderCellDef, i9.MatHeaderRowDef, i9.MatColumnDef, i9.MatCellDef, i9.MatRowDef, i9.MatHeaderCell, i9.MatCell, i9.MatHeaderRow, i9.MatRow, i9.MatNoDataRow, i10.MatPaginator, i11.MatSort, i11.MatSortHeader, i12.MatFormField, i12.MatLabel, i12.MatSuffix, i13.MatInput, i14.MatOption, i15.MatSelect, i16.MatTooltip, i17.MatProgressSpinner, i18.MatIcon, i19.TableTabsComponent, i20.TableTooltipComponent, i7.AsyncPipe], styles: ["@charset \"UTF-8\";[_nghost-%COMP%]{--table-color: #1976d2;--table-text-color: white;--table-header-bg: #1976d2;--table-header-text: white;--table-scrollbar-bg: #f5f5f5;--table-scrollbar-thumb: var(--table-color)}.table-container[_ngcontent-%COMP%]::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.table-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.table-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}.overflow-x-auto[_ngcontent-%COMP%]::-webkit-scrollbar, .overflow-y-auto[_ngcontent-%COMP%]::-webkit-scrollbar, .overflow-auto[_ngcontent-%COMP%]::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.overflow-x-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, .overflow-y-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, .overflow-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.overflow-x-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, .overflow-y-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, .overflow-auto[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}[_nghost-%COMP%] .mat-table .mat-header-cell, [_nghost-%COMP%] .mat-header-cell, [_nghost-%COMP%] th.mat-header-cell, [_nghost-%COMP%] .mat-mdc-table .mat-mdc-header-cell, [_nghost-%COMP%] .mat-mdc-header-cell, [_nghost-%COMP%] th.mat-mdc-header-cell{background-color:var(--table-header-bg, #1976d2)!important;color:var(--table-header-text, white)!important;font-weight:600} .fa-filter, i.fa-filter{color:var(--table-color, #1976d2)!important} .rounded-xl.border{border-color:var(--table-color, #1976d2)!important} .border-gray-200.rounded-xl{border-color:var(--table-color, #1976d2)!important} .mdc-notched-outline__notch{border-right:none!important}.mat-mdc-text-field-wrapper.mdc-text-field--outlined[_ngcontent-%COMP%] .mat-mdc-form-field-infix[_ngcontent-%COMP%]{padding-bottom:0} .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}.mat-mdc-text-field-wrapper.mdc-text-field--outlined.mdc-text-field--disabled[_ngcontent-%COMP%]{background:rgba(0,0,0,.15);background-size:1px 100%!important;background-repeat:repeat-x!important}.mdc-text-field--disabled[_ngcontent-%COMP%] .mdc-text-field__input[_ngcontent-%COMP%]{color:#525252}button[_ngcontent-%COMP%]:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)){transition:all .2s ease;cursor:pointer}button[_ngcontent-%COMP%]:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):hover:not(:disabled){opacity:.9;transform:scale(1.02)}button[_ngcontent-%COMP%]:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):disabled{opacity:.5;cursor:not-allowed;transform:none} .hide-length .mat-mdc-paginator-range-label{display:none} .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-next.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base{visibility:hidden} .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-last.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base.ng-star-inserted{visibility:hidden} .mat-mdc-text-field-wrapper.mdc-text-field.ng-tns-c162-1.mdc-text-field--filled{width:25dvw} .custom-filter .mat-mdc-text-field-wrapper{width:20dvw;max-width:300px}button[matTooltip=\"Adicionar novo filtro\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fa-plus){display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border:2px solid #93c5fd;background-color:#dbeafe;padding:.5rem 1.5rem;font-size:.875rem;font-weight:500;color:#2563eb;transition:all .3s;cursor:pointer;transform:translateY(0)}button[matTooltip=\"Adicionar novo filtro\"][_ngcontent-%COMP%]:hover, button[_ngcontent-%COMP%]:has(i.fa-plus):hover{transform:translateY(-2px);border-color:#60a5fa;background-color:#bfdbfe;box-shadow:0 4px 6px #0000001a}button[matTooltip=\"Aplicar filtros\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fa-search){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#16a34a;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Aplicar filtros\"][_ngcontent-%COMP%]:hover, button[_ngcontent-%COMP%]:has(i.fa-search):hover{background-color:#15803d}button[matTooltip=\"Aplicar filtros\"][_ngcontent-%COMP%]:disabled, button[_ngcontent-%COMP%]:has(i.fa-search):disabled{opacity:.5;cursor:not-allowed}button[matTooltip=\"Limpar filtros\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fas.fa-redo-alt){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#ef4444;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Limpar filtros\"][_ngcontent-%COMP%]:hover, button[_ngcontent-%COMP%]:has(i.fas.fa-redo-alt):hover{background-color:#dc2626}button[matTooltip=\"Exportar Tabela\"][_ngcontent-%COMP%], button[_ngcontent-%COMP%]:has(i.fa-download){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#f97316;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Exportar Tabela\"][_ngcontent-%COMP%]:hover:not(:disabled), button[_ngcontent-%COMP%]:has(i.fa-download):hover:not(:disabled){background-color:#ea580c}button[matTooltip=\"Exportar Tabela\"][_ngcontent-%COMP%]:disabled, button[_ngcontent-%COMP%]:has(i.fa-download):disabled{opacity:.5;cursor:not-allowed}"], changeDetection: 0 });
|
|
1557
1543
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TableComponent, [{
|
|
1558
1544
|
type: Component,
|
|
1559
|
-
args: [{ selector: 'lib-table', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"data\" class=\"card-body\">\n <div class=\"flex flex-col justify-between gap-6\">\n <!-- UNIFIED CONTROL PANEL: FILTERS, SORT & ACTIONS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === true &&\n (dropdownItems.length > 0 ||\n sortableDropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SORT FIELD (Integrated with filters) -->\n <div class=\"mb-4\" *ngIf=\"sortableDropdownItems.length > 0\">\n <div class=\"flex flex-wrap items-center gap-3 p-2\">\n <div class=\"min-w-[200px] flex-1\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>Ordenar por</span>\n </mat-label>\n <mat-select placeholder=\"Selecione...\" [formControl]=\"selectSort\">\n <mat-option\n *ngFor=\"let item of sortableDropdownItems\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <!-- FILTERS CONTENT (WITH REFINEMENTS) -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3 p-2\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions()\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange === 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Action Buttons -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Right Side: Search, Reset, Export -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true || this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"\n $any(arrange) && downloadTable !== undefined\n ? downloadTable($any(arrange), data.conditions || [])\n : null\n \"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n\n <!-- UNIFIED CONTROL PANEL (for non-paginated tables): SEARCH, SORT & FILTERS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === false &&\n (hasFilterableColumn === true ||\n dropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SIMPLE SEARCH -->\n <div\n class=\"mb-4\"\n *ngIf=\"hasFilterableColumn === true && data.showSimpleSearch !== false\"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-blue-500\"></i>\n Buscar\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search($event)\"\n (keyup)=\"applyFilter(filterInput.value)\"\n placeholder=\"Digite para filtrar...\"\n #filterInput\n />\n <mat-icon matSuffix class=\"text-gray-500\">search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- FILTERS PANEL -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <!-- FILTERS CONTENT -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions()\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n (blur)=\"onDateFilterChange()\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n (blur)=\"onDateFilterChange()\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Actions -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Action Buttons -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true ||\n this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"handleDownload()\"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <!-- TABS COMPONENT -->\n <lib-table-tabs\n *ngIf=\"data.tabs && data.tabs.tabsData && data.tabs.tabsData.length > 0\"\n [tabsData]=\"data.tabs.tabsData\"\n [selectedTab]=\"selectedTab\"\n (tabSelected)=\"onTabSelected($event)\"\n ></lib-table-tabs>\n <div\n class=\"mat-elevation-z8 w-full overflow-x-auto rounded-xl table-container\"\n >\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n #sort=\"matSort\"\n matSortActive=\"createdAt\"\n matSortDirection=\"desc\"\n >\n <ng-container\n *ngFor=\"let col of data.displayedColumns; trackBy: trackByProperty\"\n matColumnDef=\"{{ col.property }}\"\n >\n <ng-container *matHeaderCellDef>\n <!-- IF THE COLUMN IS NOT SORTABLE, THEN DON'T SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"!col.isSortable || data.pagination === true\"\n mat-header-cell\n >\n {{ col.title }}\n </th>\n <!-- IF THE COLUMN IS SORTABLE, THEN SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"col.isSortable && data.pagination === false\"\n mat-header-cell\n mat-sort-header\n >\n {{ col.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n (click)=\"col.method ? col.method(row) : null\"\n (mouseenter)=\"onCellMouseEnter($event, row, col)\"\n (mouseleave)=\"onCellMouseLeave()\"\n (mousemove)=\"onCellMouseMove($event)\"\n >\n <!-- CHECK IF THE COLUMN MUST BE DISPLAYED -->\n <span *ngIf=\"!col.image && !col.iconClass && !col.method\">\n <ng-container>\n <span\n *ngIf=\"\n col.charLimit &&\n row[col.property] &&\n row[col.property].length > col.charLimit;\n else withinLimit\n \"\n >\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row) }}\n </span>\n </span>\n </ng-container>\n <ng-template #withinLimit>\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row, true) }}\n </span>\n </ng-template>\n </span>\n <!------------------- IMAGE ------------------>\n <!-- Imagem com loading -->\n <div\n *ngIf=\"\n col.image && col.image.path && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"col.image.path + '/' + row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n\n <!-- Imagem com URL completa e loading -->\n <div\n *ngIf=\"\n col.image && col.image.url && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n <ng-container *ngIf=\"col.iconClass\">\n <button\n *ngFor=\"let iconClass of col.iconClass\"\n (click)=\"\n iconClass.buttonMethod\n ? iconClass.buttonMethod(row, $event)\n : $event.stopPropagation()\n \"\n >\n <span\n [ngClass]=\"iconClass.class\"\n *ngIf=\"\n iconClass.condition === undefined ||\n (iconClass.condition !== undefined &&\n $any(iconClass.condition)(row))\n \"\n >{{ iconClass.text }}</span\n >\n </button>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnProperties\"></tr>\n <tr\n [ngClass]=\"getTableRowNgClass()\"\n mat-row\n *matRowDef=\"let row; columns: columnProperties\"\n (click)=\"goToDetails(row)\"\n ></tr>\n\n <!-- ROW SHOWN WHEN THERE IS NO MATCHING DATA. -->\n <tr class=\"mat-row\" *matNoDataRow>\n <td *ngIf=\"!(isLoading$ | async)\" class=\"mat-cell p-4\" colspan=\"4\">\n Nenhum resultado encontrado para a busca\n </td>\n </tr>\n </table>\n\n <div class=\"flex justify-center\" *ngIf=\"isLoading$ | async\">\n <mat-spinner></mat-spinner>\n </div>\n\n <div class=\"paginator-container\">\n <mat-paginator\n #paginator\n [pageSizeOptions]=\"[25, 50, 100]\"\n [pageSize]=\"pageSize\"\n [length]=\"totalItems\"\n showFirstLastButtons\n aria-label=\"Select page of periodic elements\"\n (page)=\"onPageChange($event)\"\n [ngClass]=\"getPaginatorNgClass()\"\n >\n </mat-paginator>\n <div\n *ngIf=\"\n !(isLoading$ | async) &&\n dataSource?.data &&\n dataSource.data.length > 0 &&\n data?.filterFn\n \"\n class=\"page-number-display\"\n >\n {{ currentPageNumber }}\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- TOOLTIP PERSONALIZADO -->\n <lib-table-tooltip\n [state]=\"tooltipState\"\n [styles]=\"getTooltipStyles()\"\n ></lib-table-tooltip>\n</div>\n", styles: ["@charset \"UTF-8\";:host{--table-color: #1976d2;--table-text-color: white;--table-header-bg: #1976d2;--table-header-text: white;--table-scrollbar-bg: #f5f5f5;--table-scrollbar-thumb: var(--table-color)}.table-container::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.table-container::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.table-container::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}.overflow-x-auto::-webkit-scrollbar,.overflow-y-auto::-webkit-scrollbar,.overflow-auto::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.overflow-x-auto::-webkit-scrollbar-thumb,.overflow-y-auto::-webkit-scrollbar-thumb,.overflow-auto::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.overflow-x-auto::-webkit-scrollbar-thumb:hover,.overflow-y-auto::-webkit-scrollbar-thumb:hover,.overflow-auto::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}:host ::ng-deep .mat-table .mat-header-cell,:host ::ng-deep .mat-header-cell,:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-table .mat-mdc-header-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep th.mat-mdc-header-cell{background-color:var(--table-header-bg, #1976d2)!important;color:var(--table-header-text, white)!important;font-weight:600}::ng-deep .fa-filter,::ng-deep i.fa-filter{color:var(--table-color, #1976d2)!important}::ng-deep .rounded-xl.border{border-color:var(--table-color, #1976d2)!important}::ng-deep .border-gray-200.rounded-xl{border-color:var(--table-color, #1976d2)!important}::ng-deep .mdc-notched-outline__notch{border-right:none!important}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}.mat-mdc-text-field-wrapper.mdc-text-field--outlined.mdc-text-field--disabled{background:rgba(0,0,0,.15);background-size:1px 100%!important;background-repeat:repeat-x!important}.mdc-text-field--disabled .mdc-text-field__input{color:#525252}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)){transition:all .2s ease;cursor:pointer}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):hover:not(:disabled){opacity:.9;transform:scale(1.02)}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):disabled{opacity:.5;cursor:not-allowed;transform:none}::ng-deep .hide-length .mat-mdc-paginator-range-label{display:none}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-next.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base{visibility:hidden}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-last.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base.ng-star-inserted{visibility:hidden}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field.ng-tns-c162-1.mdc-text-field--filled{width:25dvw}::ng-deep .custom-filter .mat-mdc-text-field-wrapper{width:20dvw;max-width:300px}button[matTooltip=\"Adicionar novo filtro\"],button:has(i.fa-plus){display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border:2px solid #93c5fd;background-color:#dbeafe;padding:.5rem 1.5rem;font-size:.875rem;font-weight:500;color:#2563eb;transition:all .3s;cursor:pointer;transform:translateY(0)}button[matTooltip=\"Adicionar novo filtro\"]:hover,button:has(i.fa-plus):hover{transform:translateY(-2px);border-color:#60a5fa;background-color:#bfdbfe;box-shadow:0 4px 6px #0000001a}button[matTooltip=\"Aplicar filtros\"],button:has(i.fa-search){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#16a34a;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Aplicar filtros\"]:hover,button:has(i.fa-search):hover{background-color:#15803d}button[matTooltip=\"Aplicar filtros\"]:disabled,button:has(i.fa-search):disabled{opacity:.5;cursor:not-allowed}button[matTooltip=\"Limpar filtros\"],button:has(i.fas.fa-redo-alt){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#ef4444;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Limpar filtros\"]:hover,button:has(i.fas.fa-redo-alt):hover{background-color:#dc2626}button[matTooltip=\"Exportar Tabela\"],button:has(i.fa-download){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#f97316;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Exportar Tabela\"]:hover:not(:disabled),button:has(i.fa-download):hover:not(:disabled){background-color:#ea580c}button[matTooltip=\"Exportar Tabela\"]:disabled,button:has(i.fa-download):disabled{opacity:.5;cursor:not-allowed}\n"] }]
|
|
1545
|
+
args: [{ selector: 'lib-table', standalone: false, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"data\" class=\"card-body\">\n <div class=\"flex flex-col justify-between gap-6\">\n <!-- UNIFIED CONTROL PANEL: FILTERS, SORT & ACTIONS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === true &&\n (dropdownItems.length > 0 ||\n sortableDropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SORT FIELD (Integrated with filters) -->\n <div class=\"mb-4\" *ngIf=\"sortableDropdownItems.length > 0\">\n <div class=\"flex flex-wrap items-center gap-3 p-2\">\n <div class=\"min-w-[200px] flex-1\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>Ordenar por</span>\n </mat-label>\n <mat-select placeholder=\"Selecione...\" [formControl]=\"selectSort\">\n <mat-option\n *ngFor=\"let item of sortableDropdownItems\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-sort-alpha-down text-cyan-600\"></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n </div>\n </div>\n\n <!-- FILTERS CONTENT (WITH REFINEMENTS) -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3 p-2\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions()\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange === 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Action Buttons -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Right Side: Search, Reset, Export -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true || this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"\n $any(arrange) && downloadTable !== undefined\n ? downloadTable($any(arrange), data.conditions || [])\n : null\n \"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n\n <!-- UNIFIED CONTROL PANEL (for non-paginated tables): SEARCH, SORT & FILTERS -->\n <div\n class=\"rounded-xl border border-gray-200 bg-white p-4 shadow-lg\"\n *ngIf=\"\n data.pagination === false &&\n (hasFilterableColumn === true ||\n dropdownItems.length > 0 ||\n data.actionButton)\n \"\n >\n <!-- PANEL HEADER: Title and Custom Action -->\n <div\n class=\"mb-4 flex flex-col items-start justify-between gap-4 border-b-2 border-gray-200 pb-4 md:flex-row md:items-center\"\n >\n <!-- Left Side: Title & Main Action Button -->\n <div class=\"flex flex-wrap items-center gap-4\">\n <div class=\"flex items-center gap-2\">\n <i class=\"fa fa-filter text-xl text-blue-500\"></i>\n <span class=\"text-lg font-semibold text-gray-700\"\n >Filtros e A\u00E7\u00F5es</span\n >\n </div>\n <button\n *ngIf=\"data.actionButton && data.actionButton.condition\"\n [ngClass]=\"getActionButtonClass()\"\n [routerLink]=\"data.actionButton.routerLink\"\n (click)=\"\n data.actionButton.method ? data.actionButton.method($event) : null\n \"\n >\n <i\n *ngIf=\"data.actionButton.icon\"\n [class]=\"data.actionButton.icon\"\n ></i>\n {{ data.actionButton.label }}\n </button>\n </div>\n </div>\n\n <!-- SIMPLE SEARCH -->\n <div\n class=\"mb-4\"\n *ngIf=\"hasFilterableColumn === true && data.showSimpleSearch !== false\"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-blue-500\"></i>\n Buscar\n </mat-label>\n <input\n matInput\n (keyup.enter)=\"search($event)\"\n (keyup)=\"applyFilter(filterInput.value)\"\n placeholder=\"Digite para filtrar...\"\n #filterInput\n />\n <mat-icon matSuffix class=\"text-gray-500\">search</mat-icon>\n </mat-form-field>\n </div>\n\n <!-- FILTERS PANEL -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <!-- FILTERS CONTENT -->\n <div class=\"mb-4 space-y-3\" *ngIf=\"filtersForm.controls.length > 0\">\n <div\n [formGroup]=\"$any(filterGroup)\"\n *ngFor=\"let filterGroup of filtersForm.controls; let i = index\"\n class=\"flex flex-wrap items-center gap-3\"\n >\n <!-- FILTER TYPE SELECTOR -->\n <div class=\"min-w-[200px] flex-1\" *ngIf=\"dropdownItems.length > 0\">\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>Tipo de filtro</mat-label>\n <mat-select\n placeholder=\"Selecione o tipo...\"\n formControlName=\"selectFilter\"\n (selectionChange)=\"onSelectFilterChange()\"\n >\n <mat-option\n *ngFor=\"let item of getAvailableFilterOptions()\"\n [value]=\"item\"\n >\n <div class=\"flex items-center gap-2\">\n <i\n [class]=\"item.icon || 'fa fa-filter'\"\n class=\"text-sm text-blue-500\"\n ></i>\n <span>{{ item.title }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- TEXT FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filter'\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-search text-gray-400\"></i>\n <span>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Filtrar\"\n }}</span>\n </mat-label>\n <input\n (keyup.enter)=\"search($event)\"\n formControlName=\"typeFilter\"\n matInput\n placeholder=\"Digite para filtrar...\"\n #input\n />\n </mat-form-field>\n </div>\n\n <!-- DROPDOWN FILTER -->\n <div\n class=\"min-w-[200px] flex-1\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value &&\n $any(filterGroup)\n .get('selectFilter')\n ?.value.hasOwnProperty('items')\n \"\n >\n <mat-form-field appearance=\"outline\" class=\"w-full\">\n <mat-label>{{\n $any(filterGroup).get(\"selectFilter\")?.value?.title ||\n \"Selecione\"\n }}</mat-label>\n <mat-select\n placeholder=\"Selecione...\"\n formControlName=\"selectItem\"\n multiple\n >\n <mat-option\n *ngFor=\"\n let item of $any(filterGroup).get('selectFilter')?.value\n .items\n \"\n [value]=\"item\"\n >\n {{ item.label }}\n </mat-option>\n </mat-select>\n </mat-form-field>\n </div>\n\n <!-- DATE FILTER -->\n <div\n class=\"min-w-[340px] flex-auto\"\n *ngIf=\"\n $any(filterGroup).get('selectFilter')?.value?.arrange ===\n 'filterByDate'\n \"\n >\n <div\n class=\"flex flex-col items-stretch gap-3 sm:flex-row sm:items-center\"\n >\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Inicial</span>\n </mat-label>\n <input\n type=\"text\"\n matInput\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'initialDate', i)\"\n (blur)=\"onDateFilterChange()\"\n formControlName=\"initialDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n\n <mat-form-field appearance=\"outline\" class=\"flex-1\">\n <mat-label class=\"flex items-center gap-2\">\n <i class=\"fa fa-calendar text-gray-400\"></i>\n <span>Data Final</span>\n </mat-label>\n <input\n type=\"text\"\n (keydown.enter)=\"search($event)\"\n (input)=\"onDateInput($event, 'finalDate', i)\"\n (blur)=\"onDateFilterChange()\"\n matInput\n formControlName=\"finalDate\"\n placeholder=\"DD/MM/AAAA\"\n maxlength=\"10\"\n />\n </mat-form-field>\n </div>\n </div>\n\n <!-- REMOVE FILTER BUTTON -->\n <div *ngIf=\"filtersForm.length > 1\" class=\"ml-auto flex-shrink-0\">\n <button\n (click)=\"removeFilter(i)\"\n class=\"flex h-10 w-10 items-center justify-center rounded-full transition-colors duration-300 hover:bg-red-100\"\n matTooltip=\"Remover filtro\"\n >\n <i class=\"fa fa-trash text-red-500 hover:text-red-600\"></i>\n </button>\n </div>\n </div>\n </div>\n\n <!-- PANEL FOOTER: Add Filter & Actions -->\n <div\n class=\"-mb-2 flex items-start justify-between gap-4 border-t border-gray-200 pt-4\"\n >\n <!-- Add Filter Button -->\n <div *ngIf=\"dropdownItems.length > 0\">\n <button\n (click)=\"addFilter()\"\n class=\"transform rounded-full border-2 border-blue-300 bg-blue-50 px-6 py-2 text-sm font-medium text-blue-600 transition-all duration-300 hover:-translate-y-0.5 hover:border-blue-400 hover:bg-blue-100 hover:shadow-md\"\n matTooltip=\"Adicionar novo filtro\"\n >\n <i class=\"fa fa-plus mr-2\"></i>\n Adicionar Filtro\n </button>\n </div>\n\n <!-- Action Buttons -->\n <div\n class=\"flex flex-wrap gap-3 self-start sm:self-auto\"\n *ngIf=\"\n this.hasFilterableColumn === true ||\n this.hasSortableColumn === true\n \"\n >\n <button\n (click)=\"search()\"\n type=\"button\"\n class=\"flex items-center gap-2 rounded-lg bg-green-600 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-green-700\"\n matTooltip=\"Aplicar filtros\"\n >\n <i class=\"fa fa-search\"></i>\n Pesquisar\n </button>\n\n <button\n (click)=\"resetFilter()\"\n class=\"flex items-center gap-2 rounded-lg bg-red-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-red-600\"\n matTooltip=\"Limpar filtros\"\n >\n <i class=\"fas fa-redo-alt\"></i>\n Resetar\n </button>\n\n <button\n *ngIf=\"data.download !== false && downloadTable\"\n class=\"flex items-center gap-2 rounded-lg bg-orange-500 px-5 py-2 text-sm font-medium text-white transition-colors hover:bg-orange-600\"\n matTooltipPosition=\"above\"\n matTooltip=\"Exportar Tabela\"\n [disabled]=\"\n this.dataSource && this.dataSource.filteredData.length <= 0\n \"\n (click)=\"handleDownload()\"\n >\n <i class=\"fa fa-download\"></i>\n Exportar\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"flex flex-col\">\n <!-- TABS COMPONENT -->\n <lib-table-tabs\n *ngIf=\"data.tabs && data.tabs.tabsData && data.tabs.tabsData.length > 0\"\n [tabsData]=\"data.tabs.tabsData\"\n [selectedTab]=\"selectedTab\"\n (tabSelected)=\"onTabSelected($event)\"\n ></lib-table-tabs>\n <div\n class=\"mat-elevation-z8 w-full overflow-x-auto rounded-xl table-container\"\n >\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n #sort=\"matSort\"\n matSortActive=\"createdAt\"\n matSortDirection=\"desc\"\n >\n <ng-container\n *ngFor=\"let col of data.displayedColumns; trackBy: trackByProperty\"\n matColumnDef=\"{{ col.property }}\"\n >\n <ng-container *matHeaderCellDef>\n <!-- IF THE COLUMN IS NOT SORTABLE, THEN DON'T SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"!col.isSortable || data.pagination === true\"\n mat-header-cell\n >\n {{ col.title }}\n </th>\n <!-- IF THE COLUMN IS SORTABLE, THEN SHOW THE SORT BUTTONS -->\n <th\n *ngIf=\"col.isSortable && data.pagination === false\"\n mat-header-cell\n mat-sort-header\n >\n {{ col.title }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let row\"\n (click)=\"col.method ? col.method(row) : null\"\n (mouseenter)=\"onCellMouseEnter($event, row, col)\"\n (mouseleave)=\"onCellMouseLeave()\"\n (mousemove)=\"onCellMouseMove($event)\"\n >\n <!-- CHECK IF THE COLUMN MUST BE DISPLAYED -->\n <span *ngIf=\"!col.image && !col.iconClass && !col.method\">\n <ng-container>\n <span\n *ngIf=\"\n col.charLimit &&\n row[col.property] &&\n row[col.property].length > col.charLimit;\n else withinLimit\n \"\n >\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row) }}\n </span>\n </span>\n </ng-container>\n <ng-template #withinLimit>\n <a\n *ngIf=\"col.hasLink === true\"\n [href]=\"row[col.property]\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <a\n *ngIf=\"col.hasLink && isString(col.hasLink)\"\n [href]=\"col.hasLink\"\n target=\"_blank\"\n >\n {{ getDisplayValue(col, row, true) }}\n </a>\n <span\n *ngIf=\"col.hasLink !== true && !isString(col.hasLink)\"\n >\n {{ getDisplayValue(col, row, true) }}\n </span>\n </ng-template>\n </span>\n <!------------------- IMAGE ------------------>\n <!-- Imagem com loading -->\n <div\n *ngIf=\"\n col.image && col.image.path && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"col.image.path + '/' + row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n\n <!-- Imagem com URL completa e loading -->\n <div\n *ngIf=\"\n col.image && col.image.url && !col.iconClass && !col.method\n \"\n class=\"relative inline-block\"\n >\n <mat-spinner\n *ngIf=\"isImageLoading(row, col)\"\n [diameter]=\"32\"\n class=\"absolute inset-0 m-auto\"\n ></mat-spinner>\n <img\n [src]=\"row[col.property]\"\n [ngClass]=\"col.image.class\"\n [class.opacity-0]=\"isImageLoading(row, col)\"\n alt=\"\"\n (load)=\"onImageLoad(row, col)\"\n (error)=\"onImageError($event, row, col, col.image.default)\"\n />\n </div>\n <ng-container *ngIf=\"col.iconClass\">\n <button\n *ngFor=\"let iconClass of col.iconClass\"\n (click)=\"\n iconClass.buttonMethod\n ? iconClass.buttonMethod(row, $event)\n : $event.stopPropagation()\n \"\n >\n <span\n [ngClass]=\"iconClass.class\"\n *ngIf=\"\n iconClass.condition === undefined ||\n (iconClass.condition !== undefined &&\n $any(iconClass.condition)(row))\n \"\n >{{ iconClass.text }}</span\n >\n </button>\n </ng-container>\n </td>\n </ng-container>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"columnProperties\"></tr>\n <tr\n [ngClass]=\"getTableRowNgClass()\"\n mat-row\n *matRowDef=\"let row; columns: columnProperties\"\n (click)=\"goToDetails(row)\"\n ></tr>\n\n <!-- ROW SHOWN WHEN THERE IS NO MATCHING DATA. -->\n <tr class=\"mat-row\" *matNoDataRow>\n <td *ngIf=\"!(isLoading$ | async)\" class=\"mat-cell p-4\" colspan=\"4\">\n Nenhum resultado encontrado para a busca\n </td>\n </tr>\n </table>\n\n <div class=\"flex justify-center\" *ngIf=\"isLoading$ | async\">\n <mat-spinner></mat-spinner>\n </div>\n\n <div class=\"paginator-container\">\n <mat-paginator\n #paginator\n [pageSizeOptions]=\"[25, 50, 100]\"\n [pageSize]=\"pageSize\"\n [length]=\"totalItems\"\n showFirstLastButtons\n aria-label=\"Select page of periodic elements\"\n (page)=\"onPageChange($event)\"\n [ngClass]=\"getPaginatorNgClass()\"\n >\n </mat-paginator>\n <!-- <div\n *ngIf=\"\n !(isLoading$ | async) &&\n dataSource?.data &&\n dataSource.data.length > 0 &&\n data?.filterFn\n \"\n class=\"page-number-display\"\n >\n {{ currentPageNumber }}\n </div> -->\n </div>\n </div>\n </div>\n </div>\n\n <!-- TOOLTIP PERSONALIZADO -->\n <lib-table-tooltip\n [state]=\"tooltipState\"\n [styles]=\"getTooltipStyles()\"\n ></lib-table-tooltip>\n</div>\n", styles: ["@charset \"UTF-8\";:host{--table-color: #1976d2;--table-text-color: white;--table-header-bg: #1976d2;--table-header-text: white;--table-scrollbar-bg: #f5f5f5;--table-scrollbar-thumb: var(--table-color)}.table-container::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.table-container::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.table-container::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}.overflow-x-auto::-webkit-scrollbar,.overflow-y-auto::-webkit-scrollbar,.overflow-auto::-webkit-scrollbar{width:10px;height:10px;background-color:var(--table-scrollbar-bg, #f5f5f5)}.overflow-x-auto::-webkit-scrollbar-thumb,.overflow-y-auto::-webkit-scrollbar-thumb,.overflow-auto::-webkit-scrollbar-thumb{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));border-radius:5px}.overflow-x-auto::-webkit-scrollbar-thumb:hover,.overflow-y-auto::-webkit-scrollbar-thumb:hover,.overflow-auto::-webkit-scrollbar-thumb:hover{background-color:var(--table-scrollbar-thumb, var(--table-color, #1976d2));opacity:.8}:host ::ng-deep .mat-table .mat-header-cell,:host ::ng-deep .mat-header-cell,:host ::ng-deep th.mat-header-cell,:host ::ng-deep .mat-mdc-table .mat-mdc-header-cell,:host ::ng-deep .mat-mdc-header-cell,:host ::ng-deep th.mat-mdc-header-cell{background-color:var(--table-header-bg, #1976d2)!important;color:var(--table-header-text, white)!important;font-weight:600}::ng-deep .fa-filter,::ng-deep i.fa-filter{color:var(--table-color, #1976d2)!important}::ng-deep .rounded-xl.border{border-color:var(--table-color, #1976d2)!important}::ng-deep .border-gray-200.rounded-xl{border-color:var(--table-color, #1976d2)!important}::ng-deep .mdc-notched-outline__notch{border-right:none!important}.mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-bottom:0}.mat-mdc-text-field-wrapper.mdc-text-field--outlined.mdc-text-field--disabled{background:rgba(0,0,0,.15);background-size:1px 100%!important;background-repeat:repeat-x!important}.mdc-text-field--disabled .mdc-text-field__input{color:#525252}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)){transition:all .2s ease;cursor:pointer}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):hover:not(:disabled){opacity:.9;transform:scale(1.02)}button:not([matTooltip=\"Adicionar novo filtro\"]):not([matTooltip=\"Aplicar filtros\"]):not([matTooltip=\"Limpar filtros\"]):not([matTooltip=\"Exportar Tabela\"]):not(:has(i.fa-plus)):not(:has(i.fa-search)):not(:has(i.fas.fa-redo-alt)):not(:has(i.fa-download)):disabled{opacity:.5;cursor:not-allowed;transform:none}::ng-deep .hide-length .mat-mdc-paginator-range-label{display:none}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-next.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base{visibility:hidden}::ng-deep .hide-next-button .mat-mdc-tooltip-trigger.mat-mdc-paginator-navigation-last.mdc-icon-button.mat-mdc-icon-button.mat-unthemed.mat-mdc-button-base.ng-star-inserted{visibility:hidden}::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field.ng-tns-c162-1.mdc-text-field--filled{width:25dvw}::ng-deep .custom-filter .mat-mdc-text-field-wrapper{width:20dvw;max-width:300px}button[matTooltip=\"Adicionar novo filtro\"],button:has(i.fa-plus){display:inline-flex;align-items:center;gap:.5rem;border-radius:9999px;border:2px solid #93c5fd;background-color:#dbeafe;padding:.5rem 1.5rem;font-size:.875rem;font-weight:500;color:#2563eb;transition:all .3s;cursor:pointer;transform:translateY(0)}button[matTooltip=\"Adicionar novo filtro\"]:hover,button:has(i.fa-plus):hover{transform:translateY(-2px);border-color:#60a5fa;background-color:#bfdbfe;box-shadow:0 4px 6px #0000001a}button[matTooltip=\"Aplicar filtros\"],button:has(i.fa-search){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#16a34a;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Aplicar filtros\"]:hover,button:has(i.fa-search):hover{background-color:#15803d}button[matTooltip=\"Aplicar filtros\"]:disabled,button:has(i.fa-search):disabled{opacity:.5;cursor:not-allowed}button[matTooltip=\"Limpar filtros\"],button:has(i.fas.fa-redo-alt){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#ef4444;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Limpar filtros\"]:hover,button:has(i.fas.fa-redo-alt):hover{background-color:#dc2626}button[matTooltip=\"Exportar Tabela\"],button:has(i.fa-download){display:inline-flex;align-items:center;gap:.5rem;border-radius:.5rem;background-color:#f97316;padding:.5rem 1.25rem;font-size:.875rem;font-weight:500;color:#fff;transition:background-color .2s;cursor:pointer;border:none}button[matTooltip=\"Exportar Tabela\"]:hover:not(:disabled),button:has(i.fa-download):hover:not(:disabled){background-color:#ea580c}button[matTooltip=\"Exportar Tabela\"]:disabled,button:has(i.fa-download):disabled{opacity:.5;cursor:not-allowed}\n"] }]
|
|
1560
1546
|
}], function () { return [{ type: i1.Router }, { type: i2.TableService }, { type: i3.FilterService }, { type: i4.TooltipService }, { type: i5.PaginationService }, { type: i6.AngularFirestore }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, { data: [{
|
|
1561
1547
|
type: Input
|
|
1562
1548
|
}], downloadTable: [{
|
|
@@ -1568,4 +1554,4 @@ TableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: TableCompone
|
|
|
1568
1554
|
type: ViewChild,
|
|
1569
1555
|
args: [MatSort]
|
|
1570
1556
|
}] }); })();
|
|
1571
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZmlyZWJhc2UtdGFibGUta3hwL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1maXJlYmFzZS10YWJsZS1reHAvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxjQUFjLEdBSWYsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBS1QsdUJBQXVCLEdBR3hCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNN0QsT0FBTyxFQUNMLGVBQWUsRUFDZixjQUFjLEVBQ2QsUUFBUSxFQUNSLGVBQWUsRUFDZixXQUFXLEdBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxPQUFPLEVBQ1AsU0FBUyxFQUNULGVBQWUsR0FDaEIsTUFBTSxNQUFNLENBQUM7QUFLZCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBYSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ3RCdkQsb0JBR0s7OztJQURILDZDQUFnQzs7OztJQVZwQyxrQ0FPQztJQUhDLG1MQUNpQixrREFBMkIsd0NBQ2pELEdBQUcsSUFDVixDQUFBLElBRGE7SUFFRCxpRkFHSztJQUNMLFlBQ0Y7SUFBQSxpQkFBUzs7O0lBWFAsd0RB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Q0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7YUFDeEQ7WUFFRCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN6RDthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNoQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7YUFDOUQ7U0FDRjtJQUNILENBQUM7OzRFQXI2QlUsY0FBYztpRUFBZCxjQUFjO3VCQTZDZCxZQUFZO3VCQUNaLE9BQU87Ozs7OztRQzdHcEIsaUVBcXdCTTs7UUFyd0JBLCtCQUFVOzt1RkQrREgsY0FBYztjQVAxQixTQUFTOzJCQUNFLFdBQVcsY0FDVCxLQUFLLG1CQUdBLHVCQUF1QixDQUFDLE1BQU07cVFBTXRDLElBQUk7a0JBQVosS0FBSztZQUNHLGFBQWE7a0JBQXJCLEtBQUs7WUF3Q21CLFNBQVM7a0JBQWpDLFNBQVM7bUJBQUMsWUFBWTtZQUNILElBQUk7a0JBQXZCLFNBQVM7bUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFycmFuZ2UsXG4gIENvbmRpdGlvbixcbiAgVGFiRGF0YSxcbiAgVGFibGVEYXRhLFxuICBDb2x1bW4sXG4gIFRBQkxFX0RFRkFVTFRTLFxuICBEcm9wZG93bkl0ZW0sXG4gIEZpbHRlclNlbGVjdEl0ZW0sXG4gIFBhZ2luYXRpb24sXG59IGZyb20gJy4uLy4uL3R5cGVzL1RhYmxlJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVmlld0NoaWxkLFxuICBBZnRlclZpZXdJbml0LFxuICBPbkNoYW5nZXMsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIEVsZW1lbnRSZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgT25EZXN0cm95LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFuZ3VsYXJGaXJlc3RvcmUsXG4gIFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdCxcbn0gZnJvbSAnQGFuZ3VsYXIvZmlyZS9jb21wYXQvZmlyZXN0b3JlJztcbmltcG9ydCB7IE1hdFBhZ2luYXRvciwgUGFnZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcGFnaW5hdG9yJztcbmltcG9ydCB7IE1hdFNvcnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zb3J0JztcbmltcG9ydCB7IE1hdFRhYmxlRGF0YVNvdXJjZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYmxlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUYWJsZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YWJsZS5zZXJ2aWNlJztcbmltcG9ydCB7IEZpbHRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUb29sdGlwU2VydmljZSwgVG9vbHRpcFN0YXRlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9vbHRpcC5zZXJ2aWNlJztcbmltcG9ydCB7IFBhZ2luYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGFnaW5hdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIGdldERpc3BsYXlWYWx1ZSxcbiAgZ2V0TmVzdGVkVmFsdWUsXG4gIGlzU3RyaW5nLFxuICB0cmFja0J5UHJvcGVydHksXG4gIGdldEltYWdlS2V5LFxufSBmcm9tICcuLi8uLi91dGlscy90YWJsZS51dGlscyc7XG5pbXBvcnQge1xuICBkZWJvdW5jZVRpbWUsXG4gIGZpcnN0VmFsdWVGcm9tLFxuICBTdWJqZWN0LFxuICB0YWtlVW50aWwsXG4gIEJlaGF2aW9yU3ViamVjdCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBPcmRlckJ5RGlyZWN0aW9uIH0gZnJvbSAnZmlyZWJhc2UvZmlyZXN0b3JlJztcbmltcG9ydCBmaXJlYmFzZSBmcm9tICdmaXJlYmFzZS9jb21wYXQnO1xuaW1wb3J0IFdoZXJlRmlsdGVyT3AgPSBmaXJlYmFzZS5maXJlc3RvcmUuV2hlcmVGaWx0ZXJPcDtcbmltcG9ydCBmaXJlc3RvcmUgPSBmaXJlYmFzZS5maXJlc3RvcmU7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi10YWJsZScsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQ8VCA9IGFueT5cbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gIC8vIElOUFVUU1xuICBASW5wdXQoKSBkYXRhITogVGFibGVEYXRhO1xuICBASW5wdXQoKSBkb3dubG9hZFRhYmxlPzogKGFycmFuZ2U6IEFycmFuZ2UsIGNvbmRpdGlvbnM6IENvbmRpdGlvbltdKSA9PiB2b2lkO1xuICBhcnJhbmdlOiBBcnJhbmdlIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gVkFSSUFCTEVTXG4gIGRhdGFTb3VyY2UhOiBNYXRUYWJsZURhdGFTb3VyY2U8VD47XG4gIGN1cnJlbnRQYWdlTnVtYmVyID0gMTtcbiAgY3VycmVudENsaWVudFBhZ2VJbmRleCA9IDA7XG5cbiAgcHVibGljIGlzTG9hZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBwdWJsaWMgaXRlbXM6IFRbXSA9IFtdO1xuICBwdWJsaWMgZmlsdGVyZWRJdGVtczogVFtdID0gW107XG4gIHByaXZhdGUgbGFzdERvYzogUXVlcnlEb2N1bWVudFNuYXBzaG90PFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZmlyc3REb2M6IFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDxUPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHNvcnRCeTogeyBmaWVsZDogc3RyaW5nOyBvcmRlcjogT3JkZXJCeURpcmVjdGlvbiB9ID0ge1xuICAgIGZpZWxkOiBUQUJMRV9ERUZBVUxUUy5TT1JUX0ZJRUxELFxuICAgIG9yZGVyOiBUQUJMRV9ERUZBVUxUUy5TT1JUX09SREVSLFxuICB9O1xuICBwdWJsaWMgY29sdW1uUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcblxuICBmaWx0ZXJzRm9ybTogRm9ybUFycmF5O1xuICBzZWxlY3RTb3J0OiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gIGN1cnJlbnRBcnJhbmdlID0gJyc7XG5cbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZHJvcGRvd25JdGVtczogRHJvcGRvd25JdGVtW10gPSBbXTtcbiAgc29ydGFibGVEcm9wZG93bkl0ZW1zOiBEcm9wZG93bkl0ZW1bXSA9IFtdO1xuICBwYWdlU2l6ZSA9IFRBQkxFX0RFRkFVTFRTLlBBR0VfU0laRTtcbiAgdG90YWxJdGVtcyA9IDA7XG4gIHBhZ2VFdmVudD86IFBhZ2VFdmVudDtcbiAgZmlsdGVyVmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIGhhc0ZpbHRlcmFibGVDb2x1bW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgaGFzU29ydGFibGVDb2x1bW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsdGVyUHJlZGljYXRlOiAoKGRhdGE6IFQsIGZpbHRlcjogc3RyaW5nKSA9PiBib29sZWFuKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBmaWx0ZXJTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlVGltZU1zID0gVEFCTEVfREVGQVVMVFMuREVCT1VOQ0VfVElNRV9NUztcblxuICBzZWxlY3RlZFRhYjogbnVtYmVyID0gMDtcblxuICBAVmlld0NoaWxkKE1hdFBhZ2luYXRvcikgcGFnaW5hdG9yITogTWF0UGFnaW5hdG9yO1xuICBAVmlld0NoaWxkKE1hdFNvcnQpIHNvcnQhOiBNYXRTb3J0O1xuXG4gIC8vIFByb3ByaWVkYWRlcyBwYXJhIGNvbnRyb2xlIGRvIHRvb2x0aXBcbiAgdG9vbHRpcFN0YXRlOiBUb29sdGlwU3RhdGU7XG5cbiAgLy8gQ29udHJvbGUgZGUgbG9hZGluZyBkZSBpbWFnZW5zXG4gIGltYWdlTG9hZGluZ1N0YXRlID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gQ09OU1RSVUNUT1JcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHRhYmxlU2VydmljZTogVGFibGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlsdGVyU2VydmljZTogRmlsdGVyU2VydmljZSxcbiAgICBwcml2YXRlIHRvb2x0aXBTZXJ2aWNlOiBUb29sdGlwU2VydmljZSxcbiAgICBwcml2YXRlIHBhZ2luYXRpb25TZXJ2aWNlOiBQYWdpbmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGZpcmVzdG9yZTogQW5ndWxhckZpcmVzdG9yZSxcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgdGhpcy5maWx0ZXJzRm9ybSA9IG5ldyBGb3JtQXJyYXkoW3RoaXMuZmlsdGVyU2VydmljZS5jcmVhdGVGaWx0ZXJHcm91cCgpXSk7XG4gICAgdGhpcy50b29sdGlwU3RhdGUgPSB0aGlzLnRvb2x0aXBTZXJ2aWNlLmNyZWF0ZUluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgZ2V0QWN0aW9uQnV0dG9uQ2xhc3MoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgKHRoaXMuZGF0YT8uYWN0aW9uQnV0dG9uPy5jb2xvckNsYXNzIHx8ICdiZy1ibHVlLTUwMCcpICtcbiAgICAgICcgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBweC00IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIGhvdmVyOm9wYWNpdHktNzAnXG4gICAgKTtcbiAgfVxuXG4gIGdldFRhYmxlUm93TmdDbGFzcygpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdleGFtcGxlLWVsZW1lbnQtcm93JzogdGhpcy5kYXRhPy5pc05vdENsaWNrYWJsZSA9PT0gdHJ1ZSxcbiAgICAgICdleGFtcGxlLWVsZW1lbnQtcm93IGN1cnNvci1wb2ludGVyJzogIXRoaXMuZGF0YT8uaXNOb3RDbGlja2FibGUsXG4gICAgfTtcbiAgfVxuXG4gIGdldFBhZ2luYXRvck5nQ2xhc3MoKTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4ge1xuICAgIHJldHVybiB7XG4gICAgICAnaGlkZS1sZW5ndGgnOlxuICAgICAgICBbJ2ZpbHRlcicsICdmaWx0ZXJCeURhdGUnLCAnZXF1YWxzJ10uaW5jbHVkZXModGhpcy5jdXJyZW50QXJyYW5nZSkgfHxcbiAgICAgICAgISF0aGlzLmRhdGE/LmZpbHRlckZuLFxuICAgICAgJ2hpZGUtbmV4dC1idXR0b24nOlxuICAgICAgICAhdGhpcy5oYXNOZXh0UGFnZSAmJiB0aGlzLmRhdGE/LnBhZ2luYXRpb24gPT09IHRydWUsXG4gICAgICAnaGlkZS1sYXN0LWJ1dHRvbic6XG4gICAgICAgICghdGhpcy5oYXNOZXh0UGFnZSAmJiB0aGlzLmRhdGE/LnBhZ2luYXRpb24gPT09IHRydWUpIHx8XG4gICAgICAgICEhdGhpcy5kYXRhPy5maWx0ZXJGbixcbiAgICB9O1xuICB9XG5cbiAgLy8gRklMVEVSIE1FVEhPRFMgKGRlbGVnYWRvcyBhbyBGaWx0ZXJTZXJ2aWNlKVxuXG4gIGNyZWF0ZUZpbHRlckdyb3VwKCk6IEZvcm1Hcm91cCB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VydmljZS5jcmVhdGVGaWx0ZXJHcm91cCgpO1xuICB9XG5cbiAgYWRkRmlsdGVyKGZpbHRlckRhdGE/OiB7XG4gICAgc2VsZWN0RmlsdGVyOiBEcm9wZG93bkl0ZW0gfCBudWxsO1xuICAgIHR5cGVGaWx0ZXI/OiBzdHJpbmc7XG4gICAgc2VsZWN0SXRlbT86IEZpbHRlclNlbGVjdEl0ZW1bXTtcbiAgICBpbml0aWFsRGF0ZT86IHN0cmluZztcbiAgICBmaW5hbERhdGU/OiBzdHJpbmc7XG4gIH0pOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlclNlcnZpY2UuYWRkRmlsdGVyKFxuICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICAgIHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlLFxuICAgICAgZmlsdGVyRGF0YSxcbiAgICApO1xuICB9XG5cbiAgaGFzQWN0aXZlRGF0ZUZpbHRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZXJ2aWNlLmhhc0FjdGl2ZURhdGVGaWx0ZXIodGhpcy5maWx0ZXJzRm9ybSk7XG4gIH1cblxuICBnZXRBdmFpbGFibGVGaWx0ZXJPcHRpb25zKCk6IERyb3Bkb3duSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZXJ2aWNlLmdldEF2YWlsYWJsZUZpbHRlck9wdGlvbnMoXG4gICAgICB0aGlzLmRyb3Bkb3duSXRlbXMsXG4gICAgICB0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSxcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgKTtcbiAgfVxuXG4gIG9uU2VsZWN0RmlsdGVyQ2hhbmdlKCk6IHZvaWQge1xuICAgIGNvbnN0IGxhc3RJbmRleCA9IHRoaXMuZmlsdGVyc0Zvcm0ubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBsYXN0RmlsdGVyID0gdGhpcy5maWx0ZXJzRm9ybS5hdChsYXN0SW5kZXgpO1xuICAgIGNvbnN0IHNlbGVjdGVkRmlsdGVyID0gbGFzdEZpbHRlci5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZTtcblxuICAgIGlmIChzZWxlY3RlZEZpbHRlcikge1xuICAgICAgaWYgKFxuICAgICAgICBzZWxlY3RlZEZpbHRlci5hcnJhbmdlID09PSAnZmlsdGVyQnlEYXRlJyAmJlxuICAgICAgICB0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWRkRmlsdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVtb3ZlRmlsdGVyKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlclNlcnZpY2UucmVtb3ZlRmlsdGVyKHRoaXMuZmlsdGVyc0Zvcm0sIGluZGV4KTtcbiAgfVxuXG4gIHJlbW92ZUFsbEZpbHRlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJTZXJ2aWNlLnJlbW92ZUFsbEZpbHRlcnModGhpcy5maWx0ZXJzRm9ybSk7XG4gICAgdGhpcy5yZXNldEZpbHRlcigpO1xuICB9XG5cbiAgb25EYXRlSW5wdXQoXG4gICAgZXZlbnQ6IEV2ZW50LFxuICAgIGNvbnRyb2xOYW1lOiAnaW5pdGlhbERhdGUnIHwgJ2ZpbmFsRGF0ZScsXG4gICAgZmlsdGVySW5kZXg6IG51bWJlcixcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyR3JvdXAgPSB0aGlzLmZpbHRlcnNGb3JtLmF0KGZpbHRlckluZGV4KSBhcyBGb3JtR3JvdXA7XG4gICAgdGhpcy5maWx0ZXJTZXJ2aWNlLmFwcGx5RGF0ZU1hc2soZXZlbnQsIGNvbnRyb2xOYW1lLCBmaWx0ZXJHcm91cCk7XG4gIH1cblxuICBvbkRhdGVGaWx0ZXJDaGFuZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5hcnJhbmdlID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmJ1aWxkQXJyYW5nZUZyb21GaWx0ZXJzKFxuICAgICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgICB0aGlzLnNvcnRCeSxcbiAgICAgICk7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyc1RvRGF0YVNvdXJjZSgpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUZpbHRlcnNUb0RhdGFTb3VyY2UoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGFTb3VyY2UpIHJldHVybjtcblxuICAgIGxldCBmaWx0ZXJlZEl0ZW1zID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmFwcGx5Q2xpZW50U2lkZUZpbHRlcnM8VD4oXG4gICAgICBbLi4udGhpcy5pdGVtc10sXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgdGhpcy5zb3J0QnksXG4gICAgKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGZpbHRlcmVkSXRlbXM7XG4gICAgdGhpcy5maWx0ZXJlZEl0ZW1zID0gZmlsdGVyZWRJdGVtcztcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSBmaWx0ZXJlZEl0ZW1zLmxlbmd0aDtcblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUNsaWVudFNpZGVGaWx0ZXJzKGl0ZW1zOiBUW10pOiBUW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuYXBwbHlDbGllbnRTaWRlRmlsdGVyczxUPihcbiAgICAgIGl0ZW1zLFxuICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICAgIHRoaXMuc29ydEJ5LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQXJyYW5nZUZyb21GaWx0ZXJzKCk6IEFycmFuZ2Uge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgdGhpcy5zb3J0QnksXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRPT0xUSVAgTUVUSE9EUyAoZGVsZWdhZG9zIGFvIFRvb2x0aXBTZXJ2aWNlKVxuXG4gIGdldFRvb2x0aXBTdHlsZXMoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMudG9vbHRpcFNlcnZpY2UuZ2V0VG9vbHRpcFN0eWxlcyh0aGlzLnRvb2x0aXBTdGF0ZSk7XG4gIH1cblxuICBvbkNlbGxNb3VzZUVudGVyKGV2ZW50OiBNb3VzZUV2ZW50LCByb3c6IFQsIGNvbDogQ29sdW1uKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwU2VydmljZS5oYW5kbGVNb3VzZUVudGVyKFxuICAgICAgZXZlbnQsXG4gICAgICByb3csXG4gICAgICBjb2wsXG4gICAgICAoYywgciwgdykgPT4gdGhpcy5nZXREaXNwbGF5VmFsdWUoYywgciwgdyksXG4gICAgICAoc3RhdGUpID0+IHtcbiAgICAgICAgdGhpcy50b29sdGlwU3RhdGUgPSB7IC4uLnRoaXMudG9vbHRpcFN0YXRlLCAuLi5zdGF0ZSB9O1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIG9uQ2VsbE1vdXNlTGVhdmUoKTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwU2VydmljZS5oYW5kbGVNb3VzZUxlYXZlKChzdGF0ZSkgPT4ge1xuICAgICAgdGhpcy50b29sdGlwU3RhdGUgPSBzdGF0ZTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgb25DZWxsTW91c2VNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy50b29sdGlwU2VydmljZS5oYW5kbGVNb3VzZU1vdmUoXG4gICAgICBldmVudCxcbiAgICAgIHRoaXMudG9vbHRpcFN0YXRlLnNob3dUb29sdGlwLFxuICAgICAgKHBvc2l0aW9uKSA9PiB7XG4gICAgICAgIHRoaXMudG9vbHRpcFN0YXRlID0geyAuLi50aGlzLnRvb2x0aXBTdGF0ZSwgdG9vbHRpcFBvc2l0aW9uOiBwb3NpdGlvbiB9O1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRBQiBNRVRIT0RTXG5cbiAgb25UYWJTZWxlY3RlZChldmVudDogeyB0YWI6IFRhYkRhdGE7IGluZGV4OiBudW1iZXIgfSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRhLnRhYnM/Lm1ldGhvZCkgcmV0dXJuO1xuICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSBldmVudC5pbmRleDtcbiAgICB0aGlzLmRhdGEudGFicy5tZXRob2QoZXZlbnQudGFiLCBldmVudC5pbmRleCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBVVElMSVRZIE1FVEhPRFMgKGRlbGVnYWRvcyBhb3MgdXRpbHMpXG5cbiAgZ2V0RGlzcGxheVZhbHVlKGNvbDogQ29sdW1uLCByb3c6IFQsIHdpdGhpbkxpbWl0OiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIHJldHVybiBnZXREaXNwbGF5VmFsdWUoY29sLCByb3csIHdpdGhpbkxpbWl0KTtcbiAgfVxuXG4gIGdldE5lc3RlZFZhbHVlKG9iajogdW5rbm93biwgcGF0aDogc3RyaW5nKTogdW5rbm93biB7XG4gICAgcmV0dXJuIGdldE5lc3RlZFZhbHVlKG9iaiwgcGF0aCk7XG4gIH1cblxuICBpc1N0cmluZyh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc1N0cmluZyh2YWx1ZSk7XG4gIH1cblxuICB0cmFja0J5UHJvcGVydHkoX2luZGV4OiBudW1iZXIsIGNvbDogQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHJhY2tCeVByb3BlcnR5KF9pbmRleCwgY29sKTtcbiAgfVxuXG4gIC8vIElNQUdFIExPQURJTkcgTUVUSE9EU1xuXG4gIHByaXZhdGUgZ2V0SW1hZ2VLZXkocm93OiBULCBjb2w6IENvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldEltYWdlS2V5KHJvdywgY29sKTtcbiAgfVxuXG4gIGlzSW1hZ2VMb2FkaW5nKHJvdzogVCwgY29sOiBDb2x1bW4pOiBib29sZWFuIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEltYWdlS2V5KHJvdywgY29sKTtcbiAgICByZXR1cm4gIXRoaXMuaW1hZ2VMb2FkaW5nU3RhdGUuaGFzKGtleSk7XG4gIH1cblxuICBvbkltYWdlTG9hZChyb3c6IFQsIGNvbDogQ29sdW1uKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRJbWFnZUtleShyb3csIGNvbCk7XG4gICAgdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5zZXQoa2V5LCB0cnVlKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uSW1hZ2VFcnJvcihldmVudDogRXZlbnQsIHJvdzogVCwgY29sOiBDb2x1bW4sIGRlZmF1bHRJbWFnZT86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0SW1hZ2VLZXkocm93LCBjb2wpO1xuICAgIHRoaXMuaW1hZ2VMb2FkaW5nU3RhdGUuc2V0KGtleSwgdHJ1ZSk7XG5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEltYWdlRWxlbWVudDtcbiAgICBpZiAodGFyZ2V0KSB7XG4gICAgICBpZiAoZGVmYXVsdEltYWdlKSB7XG4gICAgICAgIHRhcmdldC5zcmMgPSBkZWZhdWx0SW1hZ2U7XG4gICAgICAgIHRhcmdldC5vbmVycm9yID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gTElGRUNZQ0xFIE1FVEhPRFNcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFwcGx5Q3VzdG9tQ29sb3JzKCksIDApO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFwcGx5Q3VzdG9tQ29sb3JzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmRlc3Ryb3koKTtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q3VzdG9tQ29sb3JzKCk6IHZvaWQge1xuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5lbD8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWhvc3RFbGVtZW50IHx8ICF0aGlzLmRhdGEpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmRhdGEuY29sb3I/LmJnKSB7XG4gICAgICBob3N0RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10YWJsZS1jb2xvcicsIHRoaXMuZGF0YS5jb2xvci5iZyk7XG4gICAgICBob3N0RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10YWJsZS1oZWFkZXItYmcnLCB0aGlzLmRhdGEuY29sb3IuYmcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLmNvbG9yPy50ZXh0KSB7XG4gICAgICBob3N0RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS10YWJsZS10ZXh0LWNvbG9yJywgdGhpcy5kYXRhLmNvbG9yLnRleHQpO1xuICAgICAgaG9zdEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAgICctLXRhYmxlLWhlYWRlci10ZXh0JyxcbiAgICAgICAgdGhpcy5kYXRhLmNvbG9yLnRleHQsXG4gICAgICApO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgaGVhZGVyQ2VsbHMgPSBob3N0RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAnLm1hdC1oZWFkZXItY2VsbCwgLm1hdC1tZGMtaGVhZGVyLWNlbGwsIHRoLm1hdC1oZWFkZXItY2VsbCwgdGgubWF0LW1kYy1oZWFkZXItY2VsbCcsXG4gICAgICApO1xuICAgICAgaGVhZGVyQ2VsbHMuZm9yRWFjaCgoY2VsbDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5jb2xvcj8uYmcpIHtcbiAgICAgICAgICBjZWxsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZGF0YS5jb2xvci5iZztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kYXRhLmNvbG9yPy50ZXh0KSB7XG4gICAgICAgICAgY2VsbC5zdHlsZS5jb2xvciA9IHRoaXMuZGF0YS5jb2xvci50ZXh0O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCAxMDApO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghdGhpcy5kYXRhLmNvbG9yKSB7XG4gICAgICB0aGlzLmRhdGEuY29sb3IgPSB7XG4gICAgICAgIGJnOiBUQUJMRV9ERUZBVUxUUy5ERUZBVUxUX0JHX0NPTE9SLFxuICAgICAgICB0ZXh0OiBUQUJMRV9ERUZBVUxUUy5ERUZBVUxUX1RFWFRfQ09MT1IsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLnNob3dTaW1wbGVTZWFyY2ggPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5kYXRhLnNob3dTaW1wbGVTZWFyY2ggPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuY29sdW1uUHJvcGVydGllcyA9IHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLm1hcChcbiAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5wcm9wZXJ0eSxcbiAgICApO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5hY3Rpb25CdXR0b24gJiYgIXRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uKSB7XG4gICAgICB0aGlzLmRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvbiA9IChfcm93PzogVCkgPT4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJbmljaWFsaXphciBkcm9wZG93bkl0ZW1zIHVzYW5kbyBGaWx0ZXJTZXJ2aWNlXG4gICAgY29uc3QgZmlsdGVyQ29uZmlnID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmluaXRpYWxpemVEcm9wZG93bkl0ZW1zKFxuICAgICAgdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMsXG4gICAgKTtcbiAgICB0aGlzLmRyb3Bkb3duSXRlbXMgPSBmaWx0ZXJDb25maWcuZHJvcGRvd25JdGVtcztcbiAgICB0aGlzLnNvcnRhYmxlRHJvcGRvd25JdGVtcyA9IGZpbHRlckNvbmZpZy5zb3J0YWJsZURyb3Bkb3duSXRlbXM7XG4gICAgdGhpcy5oYXNGaWx0ZXJhYmxlQ29sdW1uID0gZmlsdGVyQ29uZmlnLmhhc0ZpbHRlcmFibGVDb2x1bW47XG4gICAgdGhpcy5oYXNTb3J0YWJsZUNvbHVtbiA9IGZpbHRlckNvbmZpZy5oYXNTb3J0YWJsZUNvbHVtbjtcblxuICAgIGlmICh0aGlzLmRhdGEuZmlsdGVyYWJsZU9wdGlvbnMpIHtcbiAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IHRoaXMuZmlsdGVyU2VydmljZS5hZGRGaWx0ZXJhYmxlT3B0aW9ucyhcbiAgICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zLFxuICAgICAgICB0aGlzLmRhdGEuZmlsdGVyYWJsZU9wdGlvbnMsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFNlbSBwYWdpbmHDp8Ojb1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvLyBDb20gcGFnaW5hw6fDo29cbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWUpIHtcbiAgICAgIGlmICh0aGlzLmRhdGEuc29ydEJ5KSB7XG4gICAgICAgIHRoaXMuc29ydEJ5ID0ge1xuICAgICAgICAgIGZpZWxkOiB0aGlzLmRhdGEuc29ydEJ5LmZpZWxkLFxuICAgICAgICAgIG9yZGVyOiB0aGlzLmRhdGEuc29ydEJ5Lm9yZGVyLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0XG4gICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZU1zKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xuXG4gICAgICB0aGlzLnNvcnQuYWN0aXZlID0gJ2NyZWF0ZWRBdCc7XG4gICAgICB0aGlzLnNvcnQuZGlyZWN0aW9uID0gJ2Rlc2MnO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQgPSB0aGlzLnNvcnQ7XG4gICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwO1xuICAgICAgaWYgKHRoaXMuZGF0YS50b3RhbFJlZikge1xuICAgICAgICBmb3IgKGNvbnN0IHRvdGFsUmVmIG9mIHRoaXMuZGF0YS50b3RhbFJlZikge1xuICAgICAgICAgIGNvbnN0IHRvdGFsUmVmRG9jID0gYXdhaXQgdG90YWxSZWYucmVmLmdldCgpO1xuICAgICAgICAgIGNvbnN0IGRvY0RhdGEgPSB0b3RhbFJlZkRvYy5kYXRhKCkgYXNcbiAgICAgICAgICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChkb2NEYXRhICYmIGRvY0RhdGFbdG90YWxSZWYuZmllbGRdKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gZG9jRGF0YVt0b3RhbFJlZi5maWVsZF07XG4gICAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAodGhpcy50b3RhbEl0ZW1zICtcbiAgICAgICAgICAgICAgKHR5cGVvZiBmaWVsZFZhbHVlID09PSAnbnVtYmVyJyA/IGZpZWxkVmFsdWUgOiAwKSkgYXMgbnVtYmVyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gREFUQSBMT0FESU5HIE1FVEhPRFNcblxuICBwcml2YXRlIGFzeW5jIGxvYWRJdGVtcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmltYWdlTG9hZGluZ1N0YXRlLmNsZWFyKCk7XG4gICAgdGhpcy5pdGVtcyA9IChhd2FpdCB0aGlzLnRhYmxlU2VydmljZS5nZXRJdGVtcyhcbiAgICAgIHRoaXMuZGF0YS5jb2xsZWN0aW9uUmVmLFxuICAgICkpIGFzIFRbXTtcbiAgICBpZiAodGhpcy5kYXRhLmNvbmRpdGlvbnMpIHtcbiAgICAgIHRoaXMuZmlsdGVySXRlbXMoKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5sb2FkUmVsYXRpb25zKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkUXVlcnlMZW5ndGhzKCk7XG4gICAgdGhpcy50b3RhbEl0ZW1zID0gdGhpcy5pdGVtcy5sZW5ndGg7XG5cbiAgICB0aGlzLmFycmFuZ2UgPSB7XG4gICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgIHNvcnRCeTogdGhpcy5kYXRhLnNvcnRCeSB8fCB7XG4gICAgICAgIGZpZWxkOiBUQUJMRV9ERUZBVUxUUy5TT1JUX0ZJRUxELFxuICAgICAgICBvcmRlcjogVEFCTEVfREVGQVVMVFMuU09SVF9PUkRFUixcbiAgICAgIH0sXG4gICAgfTtcbiAgICB0aGlzLnNvcnRCeSA9IHRoaXMuZGF0YS5zb3J0QnkgfHwge1xuICAgICAgZmllbGQ6IFRBQkxFX0RFRkFVTFRTLlNPUlRfRklFTEQsXG4gICAgICBvcmRlcjogVEFCTEVfREVGQVVMVFMuU09SVF9PUkRFUixcbiAgICB9O1xuXG4gICAgbGV0IGl0ZW1zVG9EaXNwbGF5ID0gWy4uLnRoaXMuaXRlbXNdO1xuICAgIGl0ZW1zVG9EaXNwbGF5ID0gdGhpcy5hcHBseUNsaWVudFNpZGVGaWx0ZXJzKGl0ZW1zVG9EaXNwbGF5KTtcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBpdGVtc1RvRGlzcGxheTtcblxuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoaXRlbXNUb0Rpc3BsYXkpO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLnBhZ2luYXRvcjtcbiAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICBpZiAodGhpcy5kYXRhLnNvcnRCeSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQuYWN0aXZlID0gdGhpcy5kYXRhLnNvcnRCeS5maWVsZDtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0LmRpcmVjdGlvbiA9IHRoaXMuZGF0YS5zb3J0Qnkub3JkZXI7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydC5zb3J0Q2hhbmdlLmVtaXQoKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gKGRhdGEsIGZpbHRlcjogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBpdGVtID0gZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucy5zb21lKChjb2wpOiBib29sZWFuID0+IHtcbiAgICAgICAgaWYgKGNvbC5maWx0ZXJQcmVkaWNhdGVzKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbC5maWx0ZXJQcmVkaWNhdGVzLnNvbWUoKHByZWRpY2F0ZSk6IGJvb2xlYW4gPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGl0ZW1bY29sLnByb3BlcnR5XTtcbiAgICAgICAgICAgIGlmICghcHJvcGVydHlWYWx1ZSB8fCB0eXBlb2YgcHJvcGVydHlWYWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVJlY29yZCA9IHByb3BlcnR5VmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCBwcmVkaWNhdGVWYWx1ZSA9IHByb3BlcnR5UmVjb3JkW3ByZWRpY2F0ZV07XG4gICAgICAgICAgICBpZiAocHJlZGljYXRlVmFsdWUgPT09IG51bGwgfHwgcHJlZGljYXRlVmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocHJlZGljYXRlVmFsdWUpXG4gICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgLmluY2x1ZGVzKGZpbHRlcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sLnByb3BlcnR5ICYmIGNvbC5pc0ZpbHRlcmFibGUpIHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gaXRlbVtjb2wucHJvcGVydHldO1xuICAgICAgICAgIGlmIChwcm9wZXJ0eVZhbHVlID09PSBudWxsIHx8IHByb3BlcnR5VmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBTdHJpbmcocHJvcGVydHlWYWx1ZSlcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICAuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEl0ZW1zUGFnaW5hdGVkKFxuICAgIG5hdmlnYXRpb246ICdyZWxvYWQnIHwgJ2ZvcndhcmQnIHwgJ2JhY2t3YXJkJyA9ICdyZWxvYWQnLFxuICAgIHJlc2V0OiBib29sZWFuID0gZmFsc2UsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaW1hZ2VMb2FkaW5nU3RhdGUuY2xlYXIoKTtcbiAgICBpZiAocmVzZXQgJiYgWydmb3J3YXJkJywgJ3JlbG9hZCddLmluY2x1ZGVzKG5hdmlnYXRpb24pKSB7XG4gICAgICB0aGlzLmxhc3REb2MgPSBudWxsO1xuICAgICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcbiAgICB9XG4gICAgaWYgKHJlc2V0ICYmIFsnYmFja3dhcmQnLCAncmVsb2FkJ10uaW5jbHVkZXMobmF2aWdhdGlvbikpIHtcbiAgICAgIHRoaXMuZmlyc3REb2MgPSBudWxsO1xuICAgICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmV4dHJhY3RBY3RpdmVGaWx0ZXJzKFxuICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICApO1xuXG4gICAgdGhpcy5hcnJhbmdlID0ge1xuICAgICAgZmlsdGVyczogYWN0aXZlRmlsdGVycyxcbiAgICAgIHNvcnRCeTogdGhpcy5zb3J0QnksXG4gICAgfTtcblxuICAgIGNvbnN0IHBhZ2luYXRlZDogUGFnaW5hdGlvbiA9IHtcbiAgICAgIGJhdGNoU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGNvbGxlY3Rpb246IHRoaXMuZGF0YS5jb2xsZWN0aW9uLFxuICAgICAgZG9jOiB7IGxhc3REb2M6IHRoaXMubGFzdERvYywgZmlyc3REb2M6IHRoaXMuZmlyc3REb2MgfSxcbiAgICAgIG5hdmlnYXRpb24sXG4gICAgICBhcnJhbmdlOiB0aGlzLmFycmFuZ2UhLFxuICAgICAgY29uZGl0aW9uczogdGhpcy5kYXRhLmNvbmRpdGlvbnMsXG4gICAgICBzaXplOiB0aGlzLnRvdGFsSXRlbXMsXG4gICAgICBmaWx0ZXJGbjogdGhpcy5kYXRhLmZpbHRlckZuLFxuICAgICAgY2xpZW50UGFnZUluZGV4OiB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXgsXG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMudGFibGVTZXJ2aWNlLmdldFBhZ2luYXRlZChwYWdpbmF0ZWQpO1xuICAgIHRoaXMuaXRlbXMgPSByZXN1bHQuaXRlbXMgYXMgVFtdO1xuICAgIGF3YWl0IHRoaXMubG9hZFJlbGF0aW9ucygpO1xuICAgIGF3YWl0IHRoaXMubG9hZFF1ZXJ5TGVuZ3RocygpO1xuICAgIHRoaXMubGFzdERvYyA9IHJlc3VsdC5sYXN0RG9jIGFzIFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDxUPiB8IG51bGw7XG4gICAgdGhpcy5maXJzdERvYyA9IHJlc3VsdC5maXJzdERvYyBhcyBRdWVyeURvY3VtZW50U25hcHNob3Q8VD4gfCBudWxsO1xuXG4gICAgaWYgKHJlc3VsdC5jdXJyZW50Q2xpZW50UGFnZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCA9IHJlc3VsdC5jdXJyZW50Q2xpZW50UGFnZUluZGV4O1xuICAgIH1cblxuICAgIGxldCBzdW0gPSAwO1xuICAgIGlmICh0aGlzLmRhdGEudG90YWxSZWYpIHtcbiAgICAgIGZvciAoY29uc3QgdG90YWxSZWYgb2YgdGhpcy5kYXRhLnRvdGFsUmVmKSB7XG4gICAgICAgIGNvbnN0IHRvdGFsUmVmRG9jID0gYXdhaXQgdG90YWxSZWYucmVmLmdldCgpO1xuICAgICAgICBjb25zdCBkb2NEYXRhID0gdG90YWxSZWZEb2MuZGF0YSgpIGFzXG4gICAgICAgICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoZG9jRGF0YSB8fCByZXN1bHQuZmlsdGVyTGVuZ3RoKSB7XG4gICAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IGRvY0RhdGEgPyBkb2NEYXRhW3RvdGFsUmVmLmZpZWxkXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICBjb25zdCBudW1lcmljVmFsdWUgPSB0eXBlb2YgZmllbGRWYWx1ZSA9PT0gJ251bWJlcicgPyBmaWVsZFZhbHVlIDogMDtcbiAgICAgICAgICBzdW0gPSByZXN1bHQuZmlsdGVyTGVuZ3RoID8/ICgoc3VtICsgbnVtZXJpY1ZhbHVlKSBhcyBudW1iZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnRvdGFsSXRlbXMgPSBzdW07XG4gICAgfVxuXG4gICAgdGhpcy5oYXNOZXh0UGFnZSA9IHJlc3VsdC5oYXNOZXh0UGFnZTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKHRoaXMuaXRlbXMpO1xuICAgIHRoaXMuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5kYXRhU291cmNlLmZpbHRlclByZWRpY2F0ZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIFBBR0lOQVRJT04gTUVUSE9EU1xuXG4gIGFzeW5jIG9uUGFnZUNoYW5nZShldmVudD86IFBhZ2VFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiAhPT0gdHJ1ZSB8fCAhZXZlbnQpIHJldHVybjtcblxuICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuXG4gICAgY29uc3QgY3VycmVudFN0YXRlID0ge1xuICAgICAgY3VycmVudFBhZ2VOdW1iZXI6IHRoaXMuY3VycmVudFBhZ2VOdW1iZXIsXG4gICAgICBjdXJyZW50Q2xpZW50UGFnZUluZGV4OiB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIHRvdGFsSXRlbXM6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgIGhhc05leHRQYWdlOiB0aGlzLmhhc05leHRQYWdlLFxuICAgIH07XG5cbiAgICBjb25zdCBuYXZpZ2F0aW9uID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jYWxjdWxhdGVOYXZpZ2F0aW9uKFxuICAgICAgZXZlbnQsXG4gICAgICBjdXJyZW50U3RhdGUsXG4gICAgKTtcblxuICAgIGlmICghbmF2aWdhdGlvbi5zaG91bGROYXZpZ2F0ZSkge1xuICAgICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgICAgdGhpcy5wYWdlRXZlbnQgPSBldmVudDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBdHVhbGl6YXIgZXN0YWRvIGxvY2FsXG4gICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gbmF2aWdhdGlvbi5uZXdDbGllbnRQYWdlSW5kZXg7XG4gICAgdGhpcy5jdXJyZW50UGFnZU51bWJlciA9IG5hdmlnYXRpb24ubmV3UGFnZU51bWJlcjtcblxuICAgIC8vIEF0dWFsaXphciBwYWdlU2l6ZSBzZSBtdWRvdVxuICAgIGlmIChldmVudC5wYWdlU2l6ZSAhPT0gdGhpcy5wYWdlU2l6ZSkge1xuICAgICAgdGhpcy5wYWdlU2l6ZSA9IGV2ZW50LnBhZ2VTaXplO1xuICAgIH1cblxuICAgIC8vIEFqdXN0YXIgcGFnZVNpemUgdGVtcG9yYXJpYW1lbnRlIHBhcmEgw7psdGltYSBww6FnaW5hIHNlIG5lY2Vzc8OhcmlvXG4gICAgY29uc3QgbGFzdFBhZ2VJbmRleCA9IHRoaXMucGFnaW5hdGlvblNlcnZpY2UuY2FsY3VsYXRlTGFzdFBhZ2VJbmRleChcbiAgICAgIHRoaXMudG90YWxJdGVtcyxcbiAgICAgIGV2ZW50LnBhZ2VTaXplLFxuICAgICk7XG4gICAgbGV0IG9yaWdpbmFsUGFnZVNpemU6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKFxuICAgICAgZXZlbnQucGFnZUluZGV4ID09PSBsYXN0UGFnZUluZGV4ICYmXG4gICAgICBuYXZpZ2F0aW9uLmRpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyAmJlxuICAgICAgbmF2aWdhdGlvbi5yZXNldERvY3NcbiAgICApIHtcbiAgICAgIGNvbnN0IGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlID1cbiAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jYWxjdWxhdGVMYXN0UGFnZUl0ZW1Db3VudChcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMsXG4gICAgICAgICAgZXZlbnQucGFnZVNpemUsXG4gICAgICAgICk7XG5cbiAgICAgIGlmIChcbiAgICAgICAgaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2UgPiAwICYmXG4gICAgICAgIGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlIDwgZXZlbnQucGFnZVNpemVcbiAgICAgICkge1xuICAgICAgICBvcmlnaW5hbFBhZ2VTaXplID0gdGhpcy5wYWdlU2l6ZTtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IGl0ZW1zRXhwZWN0ZWRJbkxhc3RQYWdlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZChuYXZpZ2F0aW9uLmRpcmVjdGlvbiwgbmF2aWdhdGlvbi5yZXNldERvY3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvIGFvIGNhcnJlZ2FyIGl0ZW5zIHBhZ2luYWRvczonLCBlcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChvcmlnaW5hbFBhZ2VTaXplICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMucGFnZVNpemUgPSBvcmlnaW5hbFBhZ2VTaXplO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGFnZUV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5pc0xvYWRpbmckLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gRklMVEVSL1NFQVJDSCBNRVRIT0RTXG5cbiAgYXBwbHlGaWx0ZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSBTdHJpbmcodmFsdWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWUpIHtcbiAgICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuZmlsdGVyU3ViamVjdC5uZXh0KHRoaXMuZmlsdGVyVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlYXJjaChldmVudD86IEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VsZWN0U29ydC52YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0U29ydC52YWx1ZS5hcnJhbmdlID09PSAnYXNjZW5kaW5nJykge1xuICAgICAgICB0aGlzLnNvcnRCeSA9IHtcbiAgICAgICAgICBmaWVsZDogdGhpcy5zZWxlY3RTb3J0LnZhbHVlLnByb3BlcnR5LFxuICAgICAgICAgIG9yZGVyOiAnYXNjJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdFNvcnQudmFsdWUuYXJyYW5nZSA9PT0gJ2Rlc2NlbmRpbmcnKSB7XG4gICAgICAgIHRoaXMuc29ydEJ5ID0ge1xuICAgICAgICAgIGZpZWxkOiB0aGlzLnNlbGVjdFNvcnQudmFsdWUucHJvcGVydHksXG4gICAgICAgICAgb3JkZXI6ICdkZXNjJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFycmFuZ2UgPSB0aGlzLmJ1aWxkQXJyYW5nZUZyb21GaWx0ZXJzKCk7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyc1RvRGF0YVNvdXJjZSgpO1xuICAgICAgdGhpcy5jdXJyZW50QXJyYW5nZSA9XG4gICAgICAgIHRoaXMuZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMFxuICAgICAgICAgID8gKHRoaXMuZmlsdGVyc0Zvcm0uYXQoMCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWU/LmFycmFuZ2UgPz8gJycpXG4gICAgICAgICAgOiAnJztcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XG4gICAgICB0aGlzLmN1cnJlbnRBcnJhbmdlID1cbiAgICAgICAgdGhpcy5maWx0ZXJzRm9ybS5sZW5ndGggPiAwXG4gICAgICAgICAgPyAodGhpcy5maWx0ZXJzRm9ybS5hdCgwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA/PyAnJylcbiAgICAgICAgICA6ICcnO1xuICAgICAgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZXNldEZpbHRlcigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyID0gJyc7XG4gICAgaWYgKHRoaXMuZmlsdGVyUHJlZGljYXRlKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlID0gdGhpcy5maWx0ZXJQcmVkaWNhdGU7XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJzRm9ybS5jbGVhcigpO1xuICAgIHRoaXMuYWRkRmlsdGVyKCk7XG4gICAgdGhpcy5zZWxlY3RTb3J0LnBhdGNoVmFsdWUoJycpO1xuICAgIHRoaXMuc29ydEJ5ID0ge1xuICAgICAgb3JkZXI6IHRoaXMuZGF0YS5zb3J0QnkgPyB0aGlzLmRhdGEuc29ydEJ5Lm9yZGVyIDogJ2Rlc2MnLFxuICAgICAgZmllbGQ6IHRoaXMuZGF0YS5zb3J0QnkgPyB0aGlzLmRhdGEuc29ydEJ5LmZpZWxkIDogJ2NyZWF0ZWRBdCcsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYXJyYW5nZSA9IHtcbiAgICAgICAgZmlsdGVyczogW10sXG4gICAgICAgIHNvcnRCeTogdGhpcy5zb3J0QnksXG4gICAgICB9O1xuICAgICAgdGhpcy5kYXRhU291cmNlLmRhdGEgPSBbLi4udGhpcy5pdGVtc107XG4gICAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLml0ZW1zLmxlbmd0aDtcbiAgICAgIHRoaXMuY3VycmVudEFycmFuZ2UgPSAnJztcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XG4gICAgICB0aGlzLmN1cnJlbnRBcnJhbmdlID0gJyc7XG4gICAgICB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE5BVklHQVRJT04gTUVUSE9EU1xuXG4gIGdvVG9EZXRhaWxzKHJvdzogVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEuaXNOb3RDbGlja2FibGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdXJsUGF0aCA9IHRoaXMuZGF0YS51cmwgfHwgdGhpcy5kYXRhLm5hbWU7XG4gICAgY29uc3Qgcm93V2l0aElkID0gcm93IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ICYgeyBpZDogc3RyaW5nIH07XG4gICAgY29uc3QgdXJsID0gdGhpcy5yb3V0ZXIuc2VyaWFsaXplVXJsKFxuICAgICAgdGhpcy5yb3V0ZXIuY3JlYXRlVXJsVHJlZShbYC8ke3VybFBhdGh9YCwgcm93V2l0aElkLmlkXSksXG4gICAgKTtcbiAgICB3aW5kb3cub3Blbih1cmwsICdfYmxhbmsnKTtcbiAgfVxuXG4gIC8vIFJFTEFUSU9OIE1FVEhPRFNcblxuICBhc3luYyBnZXRSZWxhdGlvbihwYXJhbXM6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNvbGxlY3Rpb246IHN0cmluZztcbiAgICBuZXdQcm9wZXJ0eTogc3RyaW5nO1xuICB9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICB0cnkge1xuICAgICAgbGV0IHNuYXBzaG90OiBmaXJlc3RvcmUuRG9jdW1lbnRTbmFwc2hvdDx1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChcbiAgICAgICAgcGFyYW1zLmlkICE9PSAnJyAmJlxuICAgICAgICBwYXJhbXMuaWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICBwYXJhbXMuY29sbGVjdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHBhcmFtcy5jb2xsZWN0aW9uICE9PSAnJ1xuICAgICAgKSB7XG4gICAgICAgIHNuYXBzaG90ID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20oXG4gICAgICAgICAgdGhpcy5maXJlc3RvcmUuY29sbGVjdGlvbihwYXJhbXMuY29sbGVjdGlvbikuZG9jKHBhcmFtcy5pZCkuZ2V0KCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoc25hcHNob3QgJiYgc25hcHNob3QuZXhpc3RzKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBzbmFwc2hvdC5kYXRhKCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZGF0YT8uW3BhcmFtcy5uZXdQcm9wZXJ0eV07XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiAnJztcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbGF0aW9ucygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZWxhdGlvblByb21pc2VzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnJlbGF0aW9uKVxuICAgICAgLmZsYXRNYXAoKGNvbCkgPT5cbiAgICAgICAgdGhpcy5pdGVtcy5tYXAoYXN5bmMgKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoY29sLnJlbGF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtUmVjb3JkID0gaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGl0ZW1SZWNvcmRbY29sLnByb3BlcnR5XSA9IGF3YWl0IHRoaXMuZ2V0UmVsYXRpb24oe1xuICAgICAgICAgICAgICBpZDogU3RyaW5nKGl0ZW1SZWNvcmRbY29sLnJlbGF0aW9uLnNvdXJjZVByb3BlcnR5XSA/PyAnJyksXG4gICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbC5yZWxhdGlvbi50YXJnZXRlZENvbGxlY3Rpb24sXG4gICAgICAgICAgICAgIG5ld1Byb3BlcnR5OiBjb2wucmVsYXRpb24udGFyZ2V0ZWRQcm9wZXJ0eSB8fCBjb2wucHJvcGVydHksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKTtcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKHJlbGF0aW9uUHJvbWlzZXMpO1xuICB9XG5cbiAgYXN5bmMgZ2V0UXVlcnlMZW5ndGgocGFyYW1zOiB7XG4gICAgaXRlbTogVDtcbiAgICByZWxhdGlvbjoge1xuICAgICAgY29sbGVjdGlvbjogc3RyaW5nO1xuICAgICAgcHJvcGVydHk6IHN0cmluZztcbiAgICAgIG9wZXJhdG9yOiBXaGVyZUZpbHRlck9wO1xuICAgICAgdmFsdWU6IHN0cmluZztcbiAgICB9O1xuICB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBpdGVtUmVjb3JkID0gcGFyYW1zLml0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3Qgc25hcHNob3QgPSBhd2FpdCB0aGlzLmZpcmVzdG9yZVxuICAgICAgLmNvbGxlY3Rpb24ocGFyYW1zLnJlbGF0aW9uLmNvbGxlY3Rpb24pXG4gICAgICAucmVmLndoZXJlKFxuICAgICAgICBwYXJhbXMucmVsYXRpb24ucHJvcGVydHksXG4gICAgICAgIHBhcmFtcy5yZWxhdGlvbi5vcGVyYXRvcixcbiAgICAgICAgaXRlbVJlY29yZFtwYXJhbXMucmVsYXRpb24udmFsdWVdLFxuICAgICAgKVxuICAgICAgLmdldCgpO1xuICAgIHJldHVybiBzbmFwc2hvdC5zaXplO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUXVlcnlMZW5ndGhzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxlbmd0aFByb21pc2VzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnNcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnF1ZXJ5TGVuZ3RoKVxuICAgICAgLmZsYXRNYXAoKGNvbCkgPT5cbiAgICAgICAgdGhpcy5pdGVtcy5tYXAoYXN5bmMgKGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoY29sLnF1ZXJ5TGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtUmVjb3JkID0gaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGl0ZW1SZWNvcmRbY29sLnByb3BlcnR5XSA9IGF3YWl0IHRoaXMuZ2V0UXVlcnlMZW5ndGgoe1xuICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICByZWxhdGlvbjogY29sLnF1ZXJ5TGVuZ3RoLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwobGVuZ3RoUHJvbWlzZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJJdGVtcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLmNvbmRpdGlvbnMpIHtcbiAgICAgIHRoaXMuZGF0YS5jb25kaXRpb25zLmZvckVhY2goKGNvbmQpID0+IHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuaXRlbXMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3BlcmF0b3JGdW5jdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnRhYmxlU2VydmljZS5vcGVyYXRvcnNbXG4gICAgICAgICAgICAgIGNvbmQub3BlcmF0b3IgYXMga2V5b2YgdHlwZW9mIHRoaXMudGFibGVTZXJ2aWNlLm9wZXJhdG9yc1xuICAgICAgICAgICAgXTtcbiAgICAgICAgICBpZiAob3BlcmF0b3JGdW5jdGlvbikge1xuICAgICAgICAgICAgY29uc3QgaXRlbVJlY29yZCA9IGl0ZW0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICByZXR1cm4gb3BlcmF0b3JGdW5jdGlvbihcbiAgICAgICAgICAgICAgaXRlbVJlY29yZFtjb25kLmZpcmVzdG9yZVByb3BlcnR5XSxcbiAgICAgICAgICAgICAgY29uZC5kYXNoUHJvcGVydHksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUFVCTElDIE1FVEhPRFNcblxuICBhc3luYyByZWxvYWRUYWJsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24pIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcbiAgICAgIHRoaXMucGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zKCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlRGlzcGxheWVkQ29sdW1ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhU291cmNlKSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlPFQ+KFtdKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbHVtblByb3BlcnRpZXMgPSB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucy5tYXAoXG4gICAgICAoY29sdW1uKSA9PiBjb2x1bW4ucHJvcGVydHksXG4gICAgKTtcblxuICAgIGNvbnN0IGZpbHRlckNvbmZpZyA9IHRoaXMuZmlsdGVyU2VydmljZS5pbml0aWFsaXplRHJvcGRvd25JdGVtcyhcbiAgICAgIHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLFxuICAgICk7XG4gICAgdGhpcy5kcm9wZG93bkl0ZW1zID0gZmlsdGVyQ29uZmlnLmRyb3Bkb3duSXRlbXM7XG4gICAgdGhpcy5zb3J0YWJsZURyb3Bkb3duSXRlbXMgPSBmaWx0ZXJDb25maWcuc29ydGFibGVEcm9wZG93bkl0ZW1zO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucykge1xuICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmFkZEZpbHRlcmFibGVPcHRpb25zKFxuICAgICAgICB0aGlzLmRyb3Bkb3duSXRlbXMsXG4gICAgICAgIHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgc2hvdWxkU2hvd0FjdGlvbkJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZGF0YT8uYWN0aW9uQnV0dG9uKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEuYWN0aW9uQnV0dG9uLmNvbmRpdGlvbihudWxsKSA/PyB0cnVlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlRG93bmxvYWQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRvd25sb2FkVGFibGUpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YSkge1xuICAgICAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBbLi4udGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YV07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFycmFuZ2UgPSB0aGlzLmJ1aWxkQXJyYW5nZUZyb21GaWx0ZXJzKCk7XG4gICAgICB0aGlzLmRvd25sb2FkVGFibGUoYXJyYW5nZSwgdGhpcy5kYXRhLmNvbmRpdGlvbnMgfHwgW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5hcnJhbmdlKSB7XG4gICAgICAgIHRoaXMuZG93bmxvYWRUYWJsZSh0aGlzLmFycmFuZ2UsIHRoaXMuZGF0YS5jb25kaXRpb25zIHx8IFtdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgKm5nSWY9XCJkYXRhXCIgY2xhc3M9XCJjYXJkLWJvZHlcIj5cbiAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wganVzdGlmeS1iZXR3ZWVuIGdhcC02XCI+XG4gICAgPCEtLSBVTklGSUVEIENPTlRST0wgUEFORUw6IEZJTFRFUlMsIFNPUlQgJiBBQ1RJT05TIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGJnLXdoaXRlIHAtNCBzaGFkb3ctbGdcIlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlICYmXG4gICAgICAgIChkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICBzb3J0YWJsZURyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8IS0tIFBBTkVMIEhFQURFUjogVGl0bGUgYW5kIEN1c3RvbSBBY3Rpb24gLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWItNCBmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNCBib3JkZXItYi0yIGJvcmRlci1ncmF5LTIwMCBwYi00IG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlclwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gTGVmdCBTaWRlOiBUaXRsZSAmIE1haW4gQWN0aW9uIEJ1dHRvbiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWx0ZXIgdGV4dC14bCB0ZXh0LWJsdWUtNTAwXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMFwiXG4gICAgICAgICAgICAgID5GaWx0cm9zIGUgQcOnw7Vlczwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24gJiYgZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEFjdGlvbkJ1dHRvbkNsYXNzKClcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZGF0YS5hY3Rpb25CdXR0b24ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCA/IGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCgkZXZlbnQpIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuYWN0aW9uQnV0dG9uLmljb25cIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgZGF0YS5hY3Rpb25CdXR0b24ubGFiZWwgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTT1JUIEZJRUxEIChJbnRlZ3JhdGVkIHdpdGggZmlsdGVycykgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwibWItNFwiICpuZ0lmPVwic29ydGFibGVEcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMyBwLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc29ydC1hbHBoYS1kb3duIHRleHQtY3lhbi02MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4+T3JkZW5hciBwb3I8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBwbGFjZWhvbGRlcj1cIlNlbGVjaW9uZS4uLlwiIFtmb3JtQ29udHJvbF09XCJzZWxlY3RTb3J0XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHNvcnRhYmxlRHJvcGRvd25JdGVtc1wiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc29ydC1hbHBoYS1kb3duIHRleHQtY3lhbi02MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRklMVEVSUyBDT05URU5UIChXSVRIIFJFRklORU1FTlRTKSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi00IHNwYWNlLXktM1wiICpuZ0lmPVwiZmlsdGVyc0Zvcm0uY29udHJvbHMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgW2Zvcm1Hcm91cF09XCIkYW55KGZpbHRlckdyb3VwKVwiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGZpbHRlckdyb3VwIG9mIGZpbHRlcnNGb3JtLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtMyBwLTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBGSUxURVIgVFlQRSBTRUxFQ1RPUiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbD5UaXBvIGRlIGZpbHRybzwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lIG8gdGlwby4uLlwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0RmlsdGVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEF2YWlsYWJsZUZpbHRlck9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIml0ZW0uaWNvbiB8fCAnZmEgZmEtZmlsdGVyJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS01MDBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpdGVtLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBURVhUIEZJTFRFUiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PSAnZmlsdGVyJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoXCJzZWxlY3RGaWx0ZXJcIik/LnZhbHVlPy50aXRsZSB8fFxuICAgICAgICAgICAgICAgICAgICBcIkZpbHRyYXJcIlxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJ0eXBlRmlsdGVyXCJcbiAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGlnaXRlIHBhcmEgZmlsdHJhci4uLlwiXG4gICAgICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEUk9QRE9XTiBGSUxURVIgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtaW4tdy1bMjAwcHhdIGZsZXgtMVwiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZSAmJlxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKVxuICAgICAgICAgICAgICAgIC5nZXQoJ3NlbGVjdEZpbHRlcicpXG4gICAgICAgICAgICAgICAgPy52YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaXRlbXMnKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7XG4gICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgIFwiU2VsZWNpb25lXCJcbiAgICAgICAgICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjaW9uZS4uLlwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VsZWN0SXRlbVwiXG4gICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgJGFueShmaWx0ZXJHcm91cCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAuaXRlbXNcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gREFURSBGSUxURVIgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJtaW4tdy1bMzQwcHhdIGZsZXgtYXV0b1wiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT1cbiAgICAgICAgICAgICAgJ2ZpbHRlckJ5RGF0ZSdcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtc3RyZXRjaCBnYXAtMyBzbTpmbGV4LXJvdyBzbTppdGVtcy1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+RGF0YSBJbmljaWFsPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQsICdpbml0aWFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluaXRpYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQvTU0vQUFBQVwiXG4gICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+RGF0YSBGaW5hbDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQsICdmaW5hbERhdGUnLCBpKVwiXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmluYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQvTU0vQUFBQVwiXG4gICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBSRU1PVkUgRklMVEVSIEJVVFRPTiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMVwiIGNsYXNzPVwibWwtYXV0byBmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVGaWx0ZXIoaSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC0xMCB3LTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGhvdmVyOmJnLXJlZC0xMDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlciBmaWx0cm9cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIHRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDBcIj48L2k+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBQQU5FTCBGT09URVI6IEFkZCBGaWx0ZXIgJiBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCItbWItMiBmbGV4IGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNCBib3JkZXItdCBib3JkZXItZ3JheS0yMDAgcHQtNFwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gQWRkIEZpbHRlciBCdXR0b24gLS0+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiYWRkRmlsdGVyKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJ0cmFuc2Zvcm0gcm91bmRlZC1mdWxsIGJvcmRlci0yIGJvcmRlci1ibHVlLTMwMCBiZy1ibHVlLTUwIHB4LTYgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS02MDAgdHJhbnNpdGlvbi1hbGwgZHVyYXRpb24tMzAwIGhvdmVyOi10cmFuc2xhdGUteS0wLjUgaG92ZXI6Ym9yZGVyLWJsdWUtNDAwIGhvdmVyOmJnLWJsdWUtMTAwIGhvdmVyOnNoYWRvdy1tZFwiXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQWRpY2lvbmFyIG5vdm8gZmlsdHJvXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXBsdXMgbXItMlwiPjwvaT5cbiAgICAgICAgICAgIEFkaWNpb25hciBGaWx0cm9cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBSaWdodCBTaWRlOiBTZWFyY2gsIFJlc2V0LCBFeHBvcnQgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0zIHNlbGYtc3RhcnQgc206c2VsZi1hdXRvXCJcbiAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgdGhpcy5oYXNGaWx0ZXJhYmxlQ29sdW1uID09PSB0cnVlIHx8IHRoaXMuaGFzU29ydGFibGVDb2x1bW4gPT09IHRydWVcbiAgICAgICAgICBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLWdyZWVuLTYwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLWdyZWVuLTcwMFwiXG4gICAgICAgICAgICBtYXRUb29sdGlwPVwiQXBsaWNhciBmaWx0cm9zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaFwiPjwvaT5cbiAgICAgICAgICAgIFBlc3F1aXNhclxuICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLXJlZC01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1yZWQtNjAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJMaW1wYXIgZmlsdHJvc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcmVkby1hbHRcIj48L2k+XG4gICAgICAgICAgICBSZXNldGFyXG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdJZj1cImRhdGEuZG93bmxvYWQgIT09IGZhbHNlICYmIGRvd25sb2FkVGFibGVcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLW9yYW5nZS01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1vcmFuZ2UtNjAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFeHBvcnRhciBUYWJlbGFcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGggPD0gMFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgJGFueShhcnJhbmdlKSAmJiBkb3dubG9hZFRhYmxlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IGRvd25sb2FkVGFibGUoJGFueShhcnJhbmdlKSwgZGF0YS5jb25kaXRpb25zIHx8IFtdKVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWRvd25sb2FkXCI+PC9pPlxuICAgICAgICAgICAgRXhwb3J0YXJcbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gVU5JRklFRCBDT05UUk9MIFBBTkVMIChmb3Igbm9uLXBhZ2luYXRlZCB0YWJsZXMpOiBTRUFSQ0gsIFNPUlQgJiBGSUxURVJTIC0tPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwicm91bmRlZC14bCBib3JkZXIgYm9yZGVyLWdyYXktMjAwIGJnLXdoaXRlIHAtNCBzaGFkb3ctbGdcIlxuICAgICAgKm5nSWY9XCJcbiAgICAgICAgZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSAmJlxuICAgICAgICAoaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSB8fFxuICAgICAgICAgIGRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uKVxuICAgICAgXCJcbiAgICA+XG4gICAgICA8IS0tIFBBTkVMIEhFQURFUjogVGl0bGUgYW5kIEN1c3RvbSBBY3Rpb24gLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWItNCBmbGV4IGZsZXgtY29sIGl0ZW1zLXN0YXJ0IGp1c3RpZnktYmV0d2VlbiBnYXAtNCBib3JkZXItYi0yIGJvcmRlci1ncmF5LTIwMCBwYi00IG1kOmZsZXgtcm93IG1kOml0ZW1zLWNlbnRlclwiXG4gICAgICA+XG4gICAgICAgIDwhLS0gTGVmdCBTaWRlOiBUaXRsZSAmIE1haW4gQWN0aW9uIEJ1dHRvbiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciBnYXAtNFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWx0ZXIgdGV4dC14bCB0ZXh0LWJsdWUtNTAwXCI+PC9pPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgdGV4dC1ncmF5LTcwMFwiXG4gICAgICAgICAgICAgID5GaWx0cm9zIGUgQcOnw7Vlczwvc3BhblxuICAgICAgICAgICAgPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24gJiYgZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldEFjdGlvbkJ1dHRvbkNsYXNzKClcIlxuICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwiZGF0YS5hY3Rpb25CdXR0b24ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgIGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCA/IGRhdGEuYWN0aW9uQnV0dG9uLm1ldGhvZCgkZXZlbnQpIDogbnVsbFxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAqbmdJZj1cImRhdGEuYWN0aW9uQnV0dG9uLmljb25cIlxuICAgICAgICAgICAgICBbY2xhc3NdPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgZGF0YS5hY3Rpb25CdXR0b24ubGFiZWwgfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBTSU1QTEUgU0VBUkNIIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm1iLTRcIlxuICAgICAgICAqbmdJZj1cImhhc0ZpbHRlcmFibGVDb2x1bW4gPT09IHRydWUgJiYgZGF0YS5zaG93U2ltcGxlU2VhcmNoICE9PSBmYWxzZVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWJsdWUtNTAwXCI+PC9pPlxuICAgICAgICAgICAgQnVzY2FyXG4gICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXl1cCk9XCJhcHBseUZpbHRlcihmaWx0ZXJJbnB1dC52YWx1ZSlcIlxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcbiAgICAgICAgICAgICNmaWx0ZXJJbnB1dFxuICAgICAgICAgIC8+XG4gICAgICAgICAgPG1hdC1pY29uIG1hdFN1ZmZpeCBjbGFzcz1cInRleHQtZ3JheS01MDBcIj5zZWFyY2g8L21hdC1pY29uPlxuICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwhLS0gRklMVEVSUyBQQU5FTCAtLT5cbiAgICAgIDxkaXYgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgPCEtLSBGSUxURVJTIENPTlRFTlQgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYi00IHNwYWNlLXktM1wiICpuZ0lmPVwiZmlsdGVyc0Zvcm0uY29udHJvbHMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtmb3JtR3JvdXBdPVwiJGFueShmaWx0ZXJHcm91cClcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpbHRlckdyb3VwIG9mIGZpbHRlcnNGb3JtLmNvbnRyb2xzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8IS0tIEZJTFRFUiBUWVBFIFNFTEVDVE9SIC0tPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCIgKm5nSWY9XCJkcm9wZG93bkl0ZW1zLmxlbmd0aCA+IDBcIj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGUgZmlsdHJvPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lIG8gdGlwby4uLlwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdEZpbHRlckNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRBdmFpbGFibGVGaWx0ZXJPcHRpb25zKClcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiaXRlbS5pY29uIHx8ICdmYSBmYS1maWx0ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWJsdWUtNTAwXCJcbiAgICAgICAgICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFRFWFQgRklMVEVSIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT1cbiAgICAgICAgICAgICAgICAnZmlsdGVyJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2ggdGV4dC1ncmF5LTQwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPnt7XG4gICAgICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldChcInNlbGVjdEZpbHRlclwiKT8udmFsdWU/LnRpdGxlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgXCJGaWx0cmFyXCJcbiAgICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRGlnaXRlIHBhcmEgZmlsdHJhci4uLlwiXG4gICAgICAgICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gRFJPUERPV04gRklMVEVSIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZSAmJlxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApXG4gICAgICAgICAgICAgICAgICAuZ2V0KCdzZWxlY3RGaWx0ZXInKVxuICAgICAgICAgICAgICAgICAgPy52YWx1ZS5oYXNPd25Qcm9wZXJ0eSgnaXRlbXMnKVxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldChcInNlbGVjdEZpbHRlclwiKT8udmFsdWU/LnRpdGxlIHx8XG4gICAgICAgICAgICAgICAgICAgIFwiU2VsZWNpb25lXCJcbiAgICAgICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjaW9uZS4uLlwiXG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW0gb2YgJGFueShmaWx0ZXJHcm91cCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIC5pdGVtc1xuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0ubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBEQVRFIEZJTFRFUiAtLT5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJtaW4tdy1bMzQwcHhdIGZsZXgtYXV0b1wiXG4gICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWU/LmFycmFuZ2UgPT09XG4gICAgICAgICAgICAgICAgJ2ZpbHRlckJ5RGF0ZSdcbiAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1zdHJldGNoIGdhcC0zIHNtOmZsZXgtcm93IHNtOml0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXIgdGV4dC1ncmF5LTQwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+RGF0YSBJbmljaWFsPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQsICdpbml0aWFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25EYXRlRmlsdGVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJpbml0aWFsRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiREQvTU0vQUFBQVwiXG4gICAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cblxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEZpbmFsPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbkRhdGVJbnB1dCgkZXZlbnQsICdmaW5hbERhdGUnLCBpKVwiXG4gICAgICAgICAgICAgICAgICAgIChibHVyKT1cIm9uRGF0ZUZpbHRlckNoYW5nZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZmluYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIFJFTU9WRSBGSUxURVIgQlVUVE9OIC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImZpbHRlcnNGb3JtLmxlbmd0aCA+IDFcIiBjbGFzcz1cIm1sLWF1dG8gZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpbHRlcihpKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGgtMTAgdy0xMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1mdWxsIHRyYW5zaXRpb24tY29sb3JzIGR1cmF0aW9uLTMwMCBob3ZlcjpiZy1yZWQtMTAwXCJcbiAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmVtb3ZlciBmaWx0cm9cIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS10cmFzaCB0ZXh0LXJlZC01MDAgaG92ZXI6dGV4dC1yZWQtNjAwXCI+PC9pPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFBBTkVMIEZPT1RFUjogQWRkIEZpbHRlciAmIEFjdGlvbnMgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cIi1tYi0yIGZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBwdC00XCJcbiAgICAgICAgPlxuICAgICAgICAgIDwhLS0gQWRkIEZpbHRlciBCdXR0b24gLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRmlsdGVyKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cInRyYW5zZm9ybSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLWJsdWUtMzAwIGJnLWJsdWUtNTAgcHgtNiBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ibHVlLTYwMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgaG92ZXI6LXRyYW5zbGF0ZS15LTAuNSBob3Zlcjpib3JkZXItYmx1ZS00MDAgaG92ZXI6YmctYmx1ZS0xMDAgaG92ZXI6c2hhZG93LW1kXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFkaWNpb25hciBub3ZvIGZpbHRyb1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cyBtci0yXCI+PC9pPlxuICAgICAgICAgICAgICBBZGljaW9uYXIgRmlsdHJvXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gQWN0aW9uIEJ1dHRvbnMgLS0+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBnYXAtMyBzZWxmLXN0YXJ0IHNtOnNlbGYtYXV0b1wiXG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICB0aGlzLmhhc0ZpbHRlcmFibGVDb2x1bW4gPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgdGhpcy5oYXNTb3J0YWJsZUNvbHVtbiA9PT0gdHJ1ZVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJzZWFyY2goKVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctZ3JlZW4tNjAwIHB4LTUgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctZ3JlZW4tNzAwXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkFwbGljYXIgZmlsdHJvc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PC9pPlxuICAgICAgICAgICAgICBQZXNxdWlzYXJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZXNldEZpbHRlcigpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLXJlZC01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1yZWQtNjAwXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxpbXBhciBmaWx0cm9zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtcmVkby1hbHRcIj48L2k+XG4gICAgICAgICAgICAgIFJlc2V0YXJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5kb3dubG9hZCAhPT0gZmFsc2UgJiYgZG93bmxvYWRUYWJsZVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBiZy1vcmFuZ2UtNTAwIHB4LTUgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6Ymctb3JhbmdlLTYwMFwiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkV4cG9ydGFyIFRhYmVsYVwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgJiYgdGhpcy5kYXRhU291cmNlLmZpbHRlcmVkRGF0YS5sZW5ndGggPD0gMFxuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlRG93bmxvYWQoKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZG93bmxvYWRcIj48L2k+XG4gICAgICAgICAgICAgIEV4cG9ydGFyXG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICA8IS0tIFRBQlMgQ09NUE9ORU5UIC0tPlxuICAgICAgPGxpYi10YWJsZS10YWJzXG4gICAgICAgICpuZ0lmPVwiZGF0YS50YWJzICYmIGRhdGEudGFicy50YWJzRGF0YSAmJiBkYXRhLnRhYnMudGFic0RhdGEubGVuZ3RoID4gMFwiXG4gICAgICAgIFt0YWJzRGF0YV09XCJkYXRhLnRhYnMudGFic0RhdGFcIlxuICAgICAgICBbc2VsZWN0ZWRUYWJdPVwic2VsZWN0ZWRUYWJcIlxuICAgICAgICAodGFiU2VsZWN0ZWQpPVwib25UYWJTZWxlY3RlZCgkZXZlbnQpXCJcbiAgICAgID48L2xpYi10YWJsZS10YWJzPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIm1hdC1lbGV2YXRpb24tejggdy1mdWxsIG92ZXJmbG93LXgtYXV0byByb3VuZGVkLXhsIHRhYmxlLWNvbnRhaW5lclwiXG4gICAgICA+XG4gICAgICAgIDx0YWJsZVxuICAgICAgICAgIG1hdC10YWJsZVxuICAgICAgICAgIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIlxuICAgICAgICAgIG1hdFNvcnRcbiAgICAgICAgICAjc29ydD1cIm1hdFNvcnRcIlxuICAgICAgICAgIG1hdFNvcnRBY3RpdmU9XCJjcmVhdGVkQXRcIlxuICAgICAgICAgIG1hdFNvcnREaXJlY3Rpb249XCJkZXNjXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2wgb2YgZGF0YS5kaXNwbGF5ZWRDb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5UHJvcGVydHlcIlxuICAgICAgICAgICAgbWF0Q29sdW1uRGVmPVwie3sgY29sLnByb3BlcnR5IH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICAgICAgICA8IS0tIElGIFRIRSBDT0xVTU4gSVMgTk9UIFNPUlRBQkxFLCBUSEVOIERPTidUIFNIT1cgVEhFIFNPUlQgQlVUVE9OUyAtLT5cbiAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sLmlzU29ydGFibGUgfHwgZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLWNlbGxcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHt7IGNvbC50aXRsZSB9fVxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICA8IS0tIElGIFRIRSBDT0xVTU4gSVMgU09SVEFCTEUsIFRIRU4gU0hPVyBUSEUgU09SVCBCVVRUT05TIC0tPlxuICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5pc1NvcnRhYmxlICYmIGRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2VcIlxuICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgICAgIG1hdC1zb3J0LWhlYWRlclxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY29sLnRpdGxlIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgIG1hdC1jZWxsXG4gICAgICAgICAgICAgICAgKm1hdENlbGxEZWY9XCJsZXQgcm93XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sLm1ldGhvZCA/IGNvbC5tZXRob2Qocm93KSA6IG51bGxcIlxuICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cIm9uQ2VsbE1vdXNlRW50ZXIoJGV2ZW50LCByb3csIGNvbClcIlxuICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cIm9uQ2VsbE1vdXNlTGVhdmUoKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbW92ZSk9XCJvbkNlbGxNb3VzZU1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8IS0tIENIRUNLIElGIFRIRSBDT0xVTU4gTVVTVCBCRSBESVNQTEFZRUQgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIhY29sLmltYWdlICYmICFjb2wuaWNvbkNsYXNzICYmICFjb2wubWV0aG9kXCI+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2wuY2hhckxpbWl0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2wucHJvcGVydHldICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvd1tjb2wucHJvcGVydHldLmxlbmd0aCA+IGNvbC5jaGFyTGltaXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHdpdGhpbkxpbWl0XG4gICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInJvd1tjb2wucHJvcGVydHldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93KSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAmJiBpc1N0cmluZyhjb2wuaGFzTGluaylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwiY29sLmhhc0xpbmtcIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3cpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rICE9PSB0cnVlICYmICFpc1N0cmluZyhjb2wuaGFzTGluaylcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdykgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN3aXRoaW5MaW1pdD5cbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rID09PSB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJyb3dbY29sLnByb3BlcnR5XVwiXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgdHJ1ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgJiYgaXNTdHJpbmcoY29sLmhhc0xpbmspXCJcbiAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJjb2wuaGFzTGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgdHJ1ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgIT09IHRydWUgJiYgIWlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3csIHRydWUpIH19XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLSBJTUFHRSAtLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgICAgICAgICAgICAgPCEtLSBJbWFnZW0gY29tIGxvYWRpbmcgLS0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sLmltYWdlICYmIGNvbC5pbWFnZS5wYXRoICYmICFjb2wuaWNvbkNsYXNzICYmICFjb2wubWV0aG9kXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzSW1hZ2VMb2FkaW5nKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIzMlwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBtLWF1dG9cIlxuICAgICAgICAgICAgICAgICAgPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiY29sLmltYWdlLnBhdGggKyAnLycgKyByb3dbY29sLnByb3BlcnR5XVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbC5pbWFnZS5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTBdPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9uSW1hZ2VFcnJvcigkZXZlbnQsIHJvdywgY29sLCBjb2wuaW1hZ2UuZGVmYXVsdClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDwhLS0gSW1hZ2VtIGNvbSBVUkwgY29tcGxldGEgZSBsb2FkaW5nIC0tPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbC5pbWFnZSAmJiBjb2wuaW1hZ2UudXJsICYmICFjb2wuaWNvbkNsYXNzICYmICFjb2wubWV0aG9kXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZWxhdGl2ZSBpbmxpbmUtYmxvY2tcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImlzSW1hZ2VMb2FkaW5nKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIFtkaWFtZXRlcl09XCIzMlwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBtLWF1dG9cIlxuICAgICAgICAgICAgICAgICAgPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgIFtzcmNdPVwicm93W2NvbC5wcm9wZXJ0eV1cIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJjb2wuaW1hZ2UuY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Mub3BhY2l0eS0wXT1cImlzSW1hZ2VMb2FkaW5nKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgICAgIChsb2FkKT1cIm9uSW1hZ2VMb2FkKHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJvbkltYWdlRXJyb3IoJGV2ZW50LCByb3csIGNvbCwgY29sLmltYWdlLmRlZmF1bHQpXCJcbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbC5pY29uQ2xhc3NcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGljb25DbGFzcyBvZiBjb2wuaWNvbkNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAgICAgICAgIGljb25DbGFzcy5idXR0b25NZXRob2RcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaWNvbkNsYXNzLmJ1dHRvbk1ldGhvZChyb3csICRldmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaWNvbkNsYXNzLmNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzLmNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoaWNvbkNsYXNzLmNvbmRpdGlvbiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICRhbnkoaWNvbkNsYXNzLmNvbmRpdGlvbikocm93KSlcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgID57eyBpY29uQ2xhc3MudGV4dCB9fTwvc3BhblxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPHRyIG1hdC1oZWFkZXItcm93ICptYXRIZWFkZXJSb3dEZWY9XCJjb2x1bW5Qcm9wZXJ0aWVzXCI+PC90cj5cbiAgICAgICAgICA8dHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cImdldFRhYmxlUm93TmdDbGFzcygpXCJcbiAgICAgICAgICAgIG1hdC1yb3dcbiAgICAgICAgICAgICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBjb2x1bW5Qcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgIChjbGljayk9XCJnb1RvRGV0YWlscyhyb3cpXCJcbiAgICAgICAgICA+PC90cj5cblxuICAgICAgICAgIDwhLS0gUk9XIFNIT1dOIFdIRU4gVEhFUkUgSVMgTk8gTUFUQ0hJTkcgREFUQS4gLS0+XG4gICAgICAgICAgPHRyIGNsYXNzPVwibWF0LXJvd1wiICptYXROb0RhdGFSb3c+XG4gICAgICAgICAgICA8dGQgKm5nSWY9XCIhKGlzTG9hZGluZyQgfCBhc3luYylcIiBjbGFzcz1cIm1hdC1jZWxsIHAtNFwiIGNvbHNwYW49XCI0XCI+XG4gICAgICAgICAgICAgIE5lbmh1bSByZXN1bHRhZG8gZW5jb250cmFkbyBwYXJhIGEgYnVzY2FcbiAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cbiAgICAgICAgPC90YWJsZT5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlclwiICpuZ0lmPVwiaXNMb2FkaW5nJCB8IGFzeW5jXCI+XG4gICAgICAgICAgPG1hdC1zcGlubmVyPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJwYWdpbmF0b3ItY29udGFpbmVyXCI+XG4gICAgICAgICAgPG1hdC1wYWdpbmF0b3JcbiAgICAgICAgICAgICNwYWdpbmF0b3JcbiAgICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwiWzI1LCA1MCwgMTAwXVwiXG4gICAgICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICAgICAgW2xlbmd0aF09XCJ0b3RhbEl0ZW1zXCJcbiAgICAgICAgICAgIHNob3dGaXJzdExhc3RCdXR0b25zXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiU2VsZWN0IHBhZ2Ugb2YgcGVyaW9kaWMgZWxlbWVudHNcIlxuICAgICAgICAgICAgKHBhZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0UGFnaW5hdG9yTmdDbGFzcygpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9tYXQtcGFnaW5hdG9yPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICEoaXNMb2FkaW5nJCB8IGFzeW5jKSAmJlxuICAgICAgICAgICAgICBkYXRhU291cmNlPy5kYXRhICYmXG4gICAgICAgICAgICAgIGRhdGFTb3VyY2UuZGF0YS5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICAgIGRhdGE/LmZpbHRlckZuXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgY2xhc3M9XCJwYWdlLW51bWJlci1kaXNwbGF5XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBjdXJyZW50UGFnZU51bWJlciB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRPT0xUSVAgUEVSU09OQUxJWkFETyAtLT5cbiAgPGxpYi10YWJsZS10b29sdGlwXG4gICAgW3N0YXRlXT1cInRvb2x0aXBTdGF0ZVwiXG4gICAgW3N0eWxlc109XCJnZXRUb29sdGlwU3R5bGVzKClcIlxuICA+PC9saWItdGFibGUtdG9vbHRpcD5cbjwvZGl2PlxuIl19
|
|
1557
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZmlyZWJhc2UtdGFibGUta3hwL3NyYy9saWIvY29tcG9uZW50cy90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1maXJlYmFzZS10YWJsZS1reHAvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFNTCxjQUFjLEdBSWYsTUFBTSxtQkFBbUIsQ0FBQztBQUMzQixPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFFTCxTQUFTLEVBS1QsdUJBQXVCLEdBR3hCLE1BQU0sZUFBZSxDQUFDO0FBS3ZCLE9BQU8sRUFBRSxZQUFZLEVBQWEsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFNN0QsT0FBTyxFQUNMLGVBQWUsRUFDZixjQUFjLEVBQ2QsUUFBUSxFQUNSLGVBQWUsRUFDZixXQUFXLEdBQ1osTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLGNBQWMsRUFDZCxPQUFPLEVBQ1AsU0FBUyxFQUNULGVBQWUsR0FDaEIsTUFBTSxNQUFNLENBQUM7QUFLZCxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBYSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQ3RCdkQsb0JBR0s7OztJQURILDZDQUFnQzs7OztJQVZwQyxrQ0FPQztJQUhDLG1MQUNpQixrREFBMkIsd0NBQ2pELEdBQUcsSUFDVixDQUFBLElBRGE7SUFFRCxpRkFHSztJQUNMLFlBQ0Y7SUFBQSxpQkFBUzs7O0lBWFAsd0RB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Q0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3pEO2FBQU07WUFDTCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUM5RDtTQUNGO0lBQ0gsQ0FBQzs7NEVBcjZCVSxjQUFjO2lFQUFkLGNBQWM7dUJBNkNkLFlBQVk7dUJBQ1osT0FBTzs7Ozs7O1FDN0dwQixpRUFxd0JNOztRQXJ3QkEsK0JBQVU7O3VGRCtESCxjQUFjO2NBUDFCLFNBQVM7MkJBQ0UsV0FBVyxjQUNULEtBQUssbUJBR0EsdUJBQXVCLENBQUMsTUFBTTtxUUFNdEMsSUFBSTtrQkFBWixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQXdDbUIsU0FBUztrQkFBakMsU0FBUzttQkFBQyxZQUFZO1lBQ0gsSUFBSTtrQkFBdkIsU0FBUzttQkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXJyYW5nZSxcbiAgQ29uZGl0aW9uLFxuICBUYWJEYXRhLFxuICBUYWJsZURhdGEsXG4gIENvbHVtbixcbiAgVEFCTEVfREVGQVVMVFMsXG4gIERyb3Bkb3duSXRlbSxcbiAgRmlsdGVyU2VsZWN0SXRlbSxcbiAgUGFnaW5hdGlvbixcbn0gZnJvbSAnLi4vLi4vdHlwZXMvVGFibGUnO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgRWxlbWVudFJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBPbkRlc3Ryb3ksXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQW5ndWxhckZpcmVzdG9yZSxcbiAgUXVlcnlEb2N1bWVudFNuYXBzaG90LFxufSBmcm9tICdAYW5ndWxhci9maXJlL2NvbXBhdC9maXJlc3RvcmUnO1xuaW1wb3J0IHsgTWF0UGFnaW5hdG9yLCBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0U29ydCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NvcnQnO1xuaW1wb3J0IHsgTWF0VGFibGVEYXRhU291cmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdGFibGUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRhYmxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFRvb2x0aXBTZXJ2aWNlLCBUb29sdGlwU3RhdGUgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90b29sdGlwLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wYWdpbmF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgZ2V0RGlzcGxheVZhbHVlLFxuICBnZXROZXN0ZWRWYWx1ZSxcbiAgaXNTdHJpbmcsXG4gIHRyYWNrQnlQcm9wZXJ0eSxcbiAgZ2V0SW1hZ2VLZXksXG59IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxlLnV0aWxzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZmlyc3RWYWx1ZUZyb20sXG4gIFN1YmplY3QsXG4gIHRha2VVbnRpbCxcbiAgQmVoYXZpb3JTdWJqZWN0LFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE9yZGVyQnlEaXJlY3Rpb24gfSBmcm9tICdmaXJlYmFzZS9maXJlc3RvcmUnO1xuaW1wb3J0IGZpcmViYXNlIGZyb20gJ2ZpcmViYXNlL2NvbXBhdCc7XG5pbXBvcnQgV2hlcmVGaWx0ZXJPcCA9IGZpcmViYXNlLmZpcmVzdG9yZS5XaGVyZUZpbHRlck9wO1xuaW1wb3J0IGZpcmVzdG9yZSA9IGZpcmViYXNlLmZpcmVzdG9yZTtcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLXRhYmxlJyxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUID0gYW55PlxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgLy8gSU5QVVRTXG4gIEBJbnB1dCgpIGRhdGEhOiBUYWJsZURhdGE7XG4gIEBJbnB1dCgpIGRvd25sb2FkVGFibGU/OiAoYXJyYW5nZTogQXJyYW5nZSwgY29uZGl0aW9uczogQ29uZGl0aW9uW10pID0+IHZvaWQ7XG4gIGFycmFuZ2U6IEFycmFuZ2UgfCBudWxsID0gbnVsbDtcblxuICAvLyBWQVJJQUJMRVNcbiAgZGF0YVNvdXJjZSE6IE1hdFRhYmxlRGF0YVNvdXJjZTxUPjtcbiAgY3VycmVudFBhZ2VOdW1iZXIgPSAxO1xuICBjdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gMDtcblxuICBwdWJsaWMgaXNMb2FkaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gIHB1YmxpYyBpdGVtczogVFtdID0gW107XG4gIHB1YmxpYyBmaWx0ZXJlZEl0ZW1zOiBUW10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0RG9jOiBRdWVyeURvY3VtZW50U25hcHNob3Q8VD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBmaXJzdERvYzogUXVlcnlEb2N1bWVudFNuYXBzaG90PFQ+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc29ydEJ5OiB7IGZpZWxkOiBzdHJpbmc7IG9yZGVyOiBPcmRlckJ5RGlyZWN0aW9uIH0gPSB7XG4gICAgZmllbGQ6IFRBQkxFX0RFRkFVTFRTLlNPUlRfRklFTEQsXG4gICAgb3JkZXI6IFRBQkxFX0RFRkFVTFRTLlNPUlRfT1JERVIsXG4gIH07XG4gIHB1YmxpYyBjb2x1bW5Qcm9wZXJ0aWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZpbHRlcnNGb3JtOiBGb3JtQXJyYXk7XG4gIHNlbGVjdFNvcnQ6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcbiAgY3VycmVudEFycmFuZ2UgPSAnJztcblxuICBoYXNOZXh0UGFnZTogYm9vbGVhbiA9IGZhbHNlO1xuICBkcm9wZG93bkl0ZW1zOiBEcm9wZG93bkl0ZW1bXSA9IFtdO1xuICBzb3J0YWJsZURyb3Bkb3duSXRlbXM6IERyb3Bkb3duSXRlbVtdID0gW107XG4gIHBhZ2VTaXplID0gVEFCTEVfREVGQVVMVFMuUEFHRV9TSVpFO1xuICB0b3RhbEl0ZW1zID0gMDtcbiAgcGFnZUV2ZW50PzogUGFnZUV2ZW50O1xuICBmaWx0ZXJWYWx1ZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cbiAgaGFzRmlsdGVyYWJsZUNvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuICBoYXNTb3J0YWJsZUNvbHVtbjogYm9vbGVhbiA9IGZhbHNlO1xuICBmaWx0ZXJQcmVkaWNhdGU6ICgoZGF0YTogVCwgZmlsdGVyOiBzdHJpbmcpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGZpbHRlclN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VUaW1lTXMgPSBUQUJMRV9ERUZBVUxUUy5ERUJPVU5DRV9USU1FX01TO1xuXG4gIHNlbGVjdGVkVGFiOiBudW1iZXIgPSAwO1xuXG4gIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yKSBwYWdpbmF0b3IhOiBNYXRQYWdpbmF0b3I7XG4gIEBWaWV3Q2hpbGQoTWF0U29ydCkgc29ydCE6IE1hdFNvcnQ7XG5cbiAgLy8gUHJvcHJpZWRhZGVzIHBhcmEgY29udHJvbGUgZG8gdG9vbHRpcFxuICB0b29sdGlwU3RhdGU6IFRvb2x0aXBTdGF0ZTtcblxuICAvLyBDb250cm9sZSBkZSBsb2FkaW5nIGRlIGltYWdlbnNcbiAgaW1hZ2VMb2FkaW5nU3RhdGUgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyBDT05TVFJVQ1RPUlxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgdGFibGVTZXJ2aWNlOiBUYWJsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9vbHRpcFNlcnZpY2U6IFRvb2x0aXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZmlyZXN0b3JlOiBBbmd1bGFyRmlyZXN0b3JlLFxuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHtcbiAgICB0aGlzLmZpbHRlcnNGb3JtID0gbmV3IEZvcm1BcnJheShbdGhpcy5maWx0ZXJTZXJ2aWNlLmNyZWF0ZUZpbHRlckdyb3VwKCldKTtcbiAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHRoaXMudG9vbHRpcFNlcnZpY2UuY3JlYXRlSW5pdGlhbFN0YXRlKCk7XG4gIH1cblxuICBnZXRBY3Rpb25CdXR0b25DbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICAodGhpcy5kYXRhPy5hY3Rpb25CdXR0b24/LmNvbG9yQ2xhc3MgfHwgJ2JnLWJsdWUtNTAwJykgK1xuICAgICAgJyBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIHB4LTQgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgaG92ZXI6b3BhY2l0eS03MCdcbiAgICApO1xuICB9XG5cbiAgZ2V0VGFibGVSb3dOZ0NsYXNzKCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ2V4YW1wbGUtZWxlbWVudC1yb3cnOiB0aGlzLmRhdGE/LmlzTm90Q2xpY2thYmxlID09PSB0cnVlLFxuICAgICAgJ2V4YW1wbGUtZWxlbWVudC1yb3cgY3Vyc29yLXBvaW50ZXInOiAhdGhpcy5kYXRhPy5pc05vdENsaWNrYWJsZSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0UGFnaW5hdG9yTmdDbGFzcygpOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdoaWRlLWxlbmd0aCc6XG4gICAgICAgIFsnZmlsdGVyJywgJ2ZpbHRlckJ5RGF0ZScsICdlcXVhbHMnXS5pbmNsdWRlcyh0aGlzLmN1cnJlbnRBcnJhbmdlKSB8fFxuICAgICAgICAhIXRoaXMuZGF0YT8uZmlsdGVyRm4sXG4gICAgICAnaGlkZS1uZXh0LWJ1dHRvbic6XG4gICAgICAgICF0aGlzLmhhc05leHRQYWdlICYmIHRoaXMuZGF0YT8ucGFnaW5hdGlvbiA9PT0gdHJ1ZSxcbiAgICAgICdoaWRlLWxhc3QtYnV0dG9uJzpcbiAgICAgICAgKCF0aGlzLmhhc05leHRQYWdlICYmIHRoaXMuZGF0YT8ucGFnaW5hdGlvbiA9PT0gdHJ1ZSkgfHxcbiAgICAgICAgISF0aGlzLmRhdGE/LmZpbHRlckZuLFxuICAgIH07XG4gIH1cblxuICAvLyBGSUxURVIgTUVUSE9EUyAoZGVsZWdhZG9zIGFvIEZpbHRlclNlcnZpY2UpXG5cbiAgY3JlYXRlRmlsdGVyR3JvdXAoKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5maWx0ZXJTZXJ2aWNlLmNyZWF0ZUZpbHRlckdyb3VwKCk7XG4gIH1cblxuICBhZGRGaWx0ZXIoZmlsdGVyRGF0YT86IHtcbiAgICBzZWxlY3RGaWx0ZXI6IERyb3Bkb3duSXRlbSB8IG51bGw7XG4gICAgdHlwZUZpbHRlcj86IHN0cmluZztcbiAgICBzZWxlY3RJdGVtPzogRmlsdGVyU2VsZWN0SXRlbVtdO1xuICAgIGluaXRpYWxEYXRlPzogc3RyaW5nO1xuICAgIGZpbmFsRGF0ZT86IHN0cmluZztcbiAgfSk6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyU2VydmljZS5hZGRGaWx0ZXIoXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgdGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IHRydWUsXG4gICAgICBmaWx0ZXJEYXRhLFxuICAgICk7XG4gIH1cblxuICBoYXNBY3RpdmVEYXRlRmlsdGVyKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuaGFzQWN0aXZlRGF0ZUZpbHRlcih0aGlzLmZpbHRlcnNGb3JtKTtcbiAgfVxuXG4gIGdldEF2YWlsYWJsZUZpbHRlck9wdGlvbnMoKTogRHJvcGRvd25JdGVtW10ge1xuICAgIHJldHVybiB0aGlzLmZpbHRlclNlcnZpY2UuZ2V0QXZhaWxhYmxlRmlsdGVyT3B0aW9ucyhcbiAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyxcbiAgICAgIHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlLFxuICAgICAgdGhpcy5maWx0ZXJzRm9ybSxcbiAgICApO1xuICB9XG5cbiAgb25TZWxlY3RGaWx0ZXJDaGFuZ2UoKTogdm9pZCB7XG4gICAgY29uc3QgbGFzdEluZGV4ID0gdGhpcy5maWx0ZXJzRm9ybS5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RGaWx0ZXIgPSB0aGlzLmZpbHRlcnNGb3JtLmF0KGxhc3RJbmRleCk7XG4gICAgY29uc3Qgc2VsZWN0ZWRGaWx0ZXIgPSBsYXN0RmlsdGVyLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlO1xuXG4gICAgaWYgKHNlbGVjdGVkRmlsdGVyKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyLmFycmFuZ2UgPT09ICdmaWx0ZXJCeURhdGUnICYmXG4gICAgICAgIHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSB0cnVlXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hZGRGaWx0ZXIoKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVGaWx0ZXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZmlsdGVyU2VydmljZS5yZW1vdmVGaWx0ZXIodGhpcy5maWx0ZXJzRm9ybSwgaW5kZXgpO1xuICB9XG5cbiAgcmVtb3ZlQWxsRmlsdGVycygpOiB2b2lkIHtcbiAgICB0aGlzLmZpbHRlclNlcnZpY2UucmVtb3ZlQWxsRmlsdGVycyh0aGlzLmZpbHRlcnNGb3JtKTtcbiAgICB0aGlzLnJlc2V0RmlsdGVyKCk7XG4gIH1cblxuICBvbkRhdGVJbnB1dChcbiAgICBldmVudDogRXZlbnQsXG4gICAgY29udHJvbE5hbWU6ICdpbml0aWFsRGF0ZScgfCAnZmluYWxEYXRlJyxcbiAgICBmaWx0ZXJJbmRleDogbnVtYmVyLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmaWx0ZXJHcm91cCA9IHRoaXMuZmlsdGVyc0Zvcm0uYXQoZmlsdGVySW5kZXgpIGFzIEZvcm1Hcm91cDtcbiAgICB0aGlzLmZpbHRlclNlcnZpY2UuYXBwbHlEYXRlTWFzayhldmVudCwgY29udHJvbE5hbWUsIGZpbHRlckdyb3VwKTtcbiAgfVxuXG4gIG9uRGF0ZUZpbHRlckNoYW5nZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLmFycmFuZ2UgPSB0aGlzLmZpbHRlclNlcnZpY2UuYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoXG4gICAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICAgIHRoaXMuc29ydEJ5LFxuICAgICAgKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzVG9EYXRhU291cmNlKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5RmlsdGVyc1RvRGF0YVNvdXJjZSgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0YVNvdXJjZSkgcmV0dXJuO1xuXG4gICAgbGV0IGZpbHRlcmVkSXRlbXMgPSB0aGlzLmZpbHRlclNlcnZpY2UuYXBwbHlDbGllbnRTaWRlRmlsdGVyczxUPihcbiAgICAgIFsuLi50aGlzLml0ZW1zXSxcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICB0aGlzLnNvcnRCeSxcbiAgICApO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZmlsdGVyZWRJdGVtcztcbiAgICB0aGlzLmZpbHRlcmVkSXRlbXMgPSBmaWx0ZXJlZEl0ZW1zO1xuICAgIHRoaXMudG90YWxJdGVtcyA9IGZpbHRlcmVkSXRlbXMubGVuZ3RoO1xuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIGFwcGx5Q2xpZW50U2lkZUZpbHRlcnMoaXRlbXM6IFRbXSk6IFRbXSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VydmljZS5hcHBseUNsaWVudFNpZGVGaWx0ZXJzPFQ+KFxuICAgICAgaXRlbXMsXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICAgdGhpcy5zb3J0QnksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoKTogQXJyYW5nZSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyU2VydmljZS5idWlsZEFycmFuZ2VGcm9tRmlsdGVycyhcbiAgICAgIHRoaXMuZmlsdGVyc0Zvcm0sXG4gICAgICB0aGlzLnNvcnRCeSxcbiAgICApO1xuICB9XG5cbiAgLy8gVE9PTFRJUCBNRVRIT0RTIChkZWxlZ2Fkb3MgYW8gVG9vbHRpcFNlcnZpY2UpXG5cbiAgZ2V0VG9vbHRpcFN0eWxlcygpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICByZXR1cm4gdGhpcy50b29sdGlwU2VydmljZS5nZXRUb29sdGlwU3R5bGVzKHRoaXMudG9vbHRpcFN0YXRlKTtcbiAgfVxuXG4gIG9uQ2VsbE1vdXNlRW50ZXIoZXZlbnQ6IE1vdXNlRXZlbnQsIHJvdzogVCwgY29sOiBDb2x1bW4pOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmhhbmRsZU1vdXNlRW50ZXIoXG4gICAgICBldmVudCxcbiAgICAgIHJvdyxcbiAgICAgIGNvbCxcbiAgICAgIChjLCByLCB3KSA9PiB0aGlzLmdldERpc3BsYXlWYWx1ZShjLCByLCB3KSxcbiAgICAgIChzdGF0ZSkgPT4ge1xuICAgICAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHsgLi4udGhpcy50b29sdGlwU3RhdGUsIC4uLnN0YXRlIH07XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgb25DZWxsTW91c2VMZWF2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmhhbmRsZU1vdXNlTGVhdmUoKHN0YXRlKSA9PiB7XG4gICAgICB0aGlzLnRvb2x0aXBTdGF0ZSA9IHN0YXRlO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBvbkNlbGxNb3VzZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRvb2x0aXBTZXJ2aWNlLmhhbmRsZU1vdXNlTW92ZShcbiAgICAgIGV2ZW50LFxuICAgICAgdGhpcy50b29sdGlwU3RhdGUuc2hvd1Rvb2x0aXAsXG4gICAgICAocG9zaXRpb24pID0+IHtcbiAgICAgICAgdGhpcy50b29sdGlwU3RhdGUgPSB7IC4uLnRoaXMudG9vbHRpcFN0YXRlLCB0b29sdGlwUG9zaXRpb246IHBvc2l0aW9uIH07XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgLy8gVEFCIE1FVEhPRFNcblxuICBvblRhYlNlbGVjdGVkKGV2ZW50OiB7IHRhYjogVGFiRGF0YTsgaW5kZXg6IG51bWJlciB9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGEudGFicz8ubWV0aG9kKSByZXR1cm47XG4gICAgdGhpcy5zZWxlY3RlZFRhYiA9IGV2ZW50LmluZGV4O1xuICAgIHRoaXMuZGF0YS50YWJzLm1ldGhvZChldmVudC50YWIsIGV2ZW50LmluZGV4KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8vIFVUSUxJVFkgTUVUSE9EUyAoZGVsZWdhZG9zIGFvcyB1dGlscylcblxuICBnZXREaXNwbGF5VmFsdWUoY29sOiBDb2x1bW4sIHJvdzogVCwgd2l0aGluTGltaXQ6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgd2l0aGluTGltaXQpO1xuICB9XG5cbiAgZ2V0TmVzdGVkVmFsdWUob2JqOiB1bmtub3duLCBwYXRoOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICByZXR1cm4gZ2V0TmVzdGVkVmFsdWUob2JqLCBwYXRoKTtcbiAgfVxuXG4gIGlzU3RyaW5nKHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIHRyYWNrQnlQcm9wZXJ0eShfaW5kZXg6IG51bWJlciwgY29sOiBDb2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiB0cmFja0J5UHJvcGVydHkoX2luZGV4LCBjb2wpO1xuICB9XG5cbiAgLy8gSU1BR0UgTE9BRElORyBNRVRIT0RTXG5cbiAgcHJpdmF0ZSBnZXRJbWFnZUtleShyb3c6IFQsIGNvbDogQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gZ2V0SW1hZ2VLZXkocm93LCBjb2wpO1xuICB9XG5cbiAgaXNJbWFnZUxvYWRpbmcocm93OiBULCBjb2w6IENvbHVtbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0SW1hZ2VLZXkocm93LCBjb2wpO1xuICAgIHJldHVybiAhdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5oYXMoa2V5KTtcbiAgfVxuXG4gIG9uSW1hZ2VMb2FkKHJvdzogVCwgY29sOiBDb2x1bW4pOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEltYWdlS2V5KHJvdywgY29sKTtcbiAgICB0aGlzLmltYWdlTG9hZGluZ1N0YXRlLnNldChrZXksIHRydWUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25JbWFnZUVycm9yKGV2ZW50OiBFdmVudCwgcm93OiBULCBjb2w6IENvbHVtbiwgZGVmYXVsdEltYWdlPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRJbWFnZUtleShyb3csIGNvbCk7XG4gICAgdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5zZXQoa2V5LCB0cnVlKTtcblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW1hZ2VFbGVtZW50O1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGlmIChkZWZhdWx0SW1hZ2UpIHtcbiAgICAgICAgdGFyZ2V0LnNyYyA9IGRlZmF1bHRJbWFnZTtcbiAgICAgICAgdGFyZ2V0Lm9uZXJyb3IgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBMSUZFQ1lDTEUgTUVUSE9EU1xuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuYXBwbHlDdXN0b21Db2xvcnMoKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYXBwbHlDdXN0b21Db2xvcnMoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMudG9vbHRpcFNlcnZpY2UuZGVzdHJveSgpO1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDdXN0b21Db2xvcnMoKTogdm9pZCB7XG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmVsPy5uYXRpdmVFbGVtZW50O1xuICAgIGlmICghaG9zdEVsZW1lbnQgfHwgIXRoaXMuZGF0YSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5jb2xvcj8uYmcpIHtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRhYmxlLWNvbG9yJywgdGhpcy5kYXRhLmNvbG9yLmJnKTtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRhYmxlLWhlYWRlci1iZycsIHRoaXMuZGF0YS5jb2xvci5iZyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEuY29sb3I/LnRleHQpIHtcbiAgICAgIGhvc3RFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLXRhYmxlLXRleHQtY29sb3InLCB0aGlzLmRhdGEuY29sb3IudGV4dCk7XG4gICAgICBob3N0RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICAgJy0tdGFibGUtaGVhZGVyLXRleHQnLFxuICAgICAgICB0aGlzLmRhdGEuY29sb3IudGV4dCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBoZWFkZXJDZWxscyA9IGhvc3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgICcubWF0LWhlYWRlci1jZWxsLCAubWF0LW1kYy1oZWFkZXItY2VsbCwgdGgubWF0LWhlYWRlci1jZWxsLCB0aC5tYXQtbWRjLWhlYWRlci1jZWxsJyxcbiAgICAgICk7XG4gICAgICBoZWFkZXJDZWxscy5mb3JFYWNoKChjZWxsOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5kYXRhLmNvbG9yPy5iZykge1xuICAgICAgICAgIGNlbGwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5kYXRhLmNvbG9yLmJnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRhdGEuY29sb3I/LnRleHQpIHtcbiAgICAgICAgICBjZWxsLnN0eWxlLmNvbG9yID0gdGhpcy5kYXRhLmNvbG9yLnRleHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIDEwMCk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmRhdGEuY29sb3IpIHtcbiAgICAgIHRoaXMuZGF0YS5jb2xvciA9IHtcbiAgICAgICAgYmc6IFRBQkxFX0RFRkFVTFRTLkRFRkFVTFRfQkdfQ09MT1IsXG4gICAgICAgIHRleHQ6IFRBQkxFX0RFRkFVTFRTLkRFRkFVTFRfVEVYVF9DT0xPUixcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEuc2hvd1NpbXBsZVNlYXJjaCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmRhdGEuc2hvd1NpbXBsZVNlYXJjaCA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jb2x1bW5Qcm9wZXJ0aWVzID0gdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMubWFwKFxuICAgICAgKGNvbHVtbikgPT4gY29sdW1uLnByb3BlcnR5LFxuICAgICk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG5cbiAgICBpZiAodGhpcy5kYXRhLmFjdGlvbkJ1dHRvbiAmJiAhdGhpcy5kYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb24pIHtcbiAgICAgIHRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uID0gKF9yb3c/OiBUKSA9PiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEluaWNpYWxpemFyIGRyb3Bkb3duSXRlbXMgdXNhbmRvIEZpbHRlclNlcnZpY2VcbiAgICBjb25zdCBmaWx0ZXJDb25maWcgPSB0aGlzLmZpbHRlclNlcnZpY2UuaW5pdGlhbGl6ZURyb3Bkb3duSXRlbXMoXG4gICAgICB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1ucyxcbiAgICApO1xuICAgIHRoaXMuZHJvcGRvd25JdGVtcyA9IGZpbHRlckNvbmZpZy5kcm9wZG93bkl0ZW1zO1xuICAgIHRoaXMuc29ydGFibGVEcm9wZG93bkl0ZW1zID0gZmlsdGVyQ29uZmlnLnNvcnRhYmxlRHJvcGRvd25JdGVtcztcbiAgICB0aGlzLmhhc0ZpbHRlcmFibGVDb2x1bW4gPSBmaWx0ZXJDb25maWcuaGFzRmlsdGVyYWJsZUNvbHVtbjtcbiAgICB0aGlzLmhhc1NvcnRhYmxlQ29sdW1uID0gZmlsdGVyQ29uZmlnLmhhc1NvcnRhYmxlQ29sdW1uO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucykge1xuICAgICAgdGhpcy5kcm9wZG93bkl0ZW1zID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmFkZEZpbHRlcmFibGVPcHRpb25zKFxuICAgICAgICB0aGlzLmRyb3Bkb3duSXRlbXMsXG4gICAgICAgIHRoaXMuZGF0YS5maWx0ZXJhYmxlT3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gU2VtIHBhZ2luYcOnw6NvXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXMoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8vIENvbSBwYWdpbmHDp8Ojb1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgaWYgKHRoaXMuZGF0YS5zb3J0QnkpIHtcbiAgICAgICAgdGhpcy5zb3J0QnkgPSB7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuZGF0YS5zb3J0QnkuZmllbGQsXG4gICAgICAgICAgb3JkZXI6IHRoaXMuZGF0YS5zb3J0Qnkub3JkZXIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlclN1YmplY3RcbiAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lTXMpLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIHRoaXMuaXNMb2FkaW5nJC5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgICBhd2FpdCB0aGlzLmxvYWRJdGVtc1BhZ2luYXRlZCgncmVsb2FkJywgdHJ1ZSk7XG5cbiAgICAgIHRoaXMuc29ydC5hY3RpdmUgPSAnY3JlYXRlZEF0JztcbiAgICAgIHRoaXMuc29ydC5kaXJlY3Rpb24gPSAnZGVzYyc7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5wYWdpbmF0b3I7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydCA9IHRoaXMuc29ydDtcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XG4gICAgICBpZiAodGhpcy5kYXRhLnRvdGFsUmVmKSB7XG4gICAgICAgIGZvciAoY29uc3QgdG90YWxSZWYgb2YgdGhpcy5kYXRhLnRvdGFsUmVmKSB7XG4gICAgICAgICAgY29uc3QgdG90YWxSZWZEb2MgPSBhd2FpdCB0b3RhbFJlZi5yZWYuZ2V0KCk7XG4gICAgICAgICAgY29uc3QgZG9jRGF0YSA9IHRvdGFsUmVmRG9jLmRhdGEoKSBhc1xuICAgICAgICAgICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKGRvY0RhdGEgJiYgZG9jRGF0YVt0b3RhbFJlZi5maWVsZF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSBkb2NEYXRhW3RvdGFsUmVmLmZpZWxkXTtcbiAgICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9ICh0aGlzLnRvdGFsSXRlbXMgK1xuICAgICAgICAgICAgICAodHlwZW9mIGZpZWxkVmFsdWUgPT09ICdudW1iZXInID8gZmllbGRWYWx1ZSA6IDApKSBhcyBudW1iZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICAvLyBEQVRBIExPQURJTkcgTUVUSE9EU1xuXG4gIHByaXZhdGUgYXN5bmMgbG9hZEl0ZW1zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuaW1hZ2VMb2FkaW5nU3RhdGUuY2xlYXIoKTtcbiAgICB0aGlzLml0ZW1zID0gKGF3YWl0IHRoaXMudGFibGVTZXJ2aWNlLmdldEl0ZW1zKFxuICAgICAgdGhpcy5kYXRhLmNvbGxlY3Rpb25SZWYsXG4gICAgKSkgYXMgVFtdO1xuICAgIGlmICh0aGlzLmRhdGEuY29uZGl0aW9ucykge1xuICAgICAgdGhpcy5maWx0ZXJJdGVtcygpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLmxvYWRSZWxhdGlvbnMoKTtcbiAgICBhd2FpdCB0aGlzLmxvYWRRdWVyeUxlbmd0aHMoKTtcbiAgICB0aGlzLnRvdGFsSXRlbXMgPSB0aGlzLml0ZW1zLmxlbmd0aDtcblxuICAgIHRoaXMuYXJyYW5nZSA9IHtcbiAgICAgIGZpbHRlcnM6IFtdLFxuICAgICAgc29ydEJ5OiB0aGlzLmRhdGEuc29ydEJ5IHx8IHtcbiAgICAgICAgZmllbGQ6IFRBQkxFX0RFRkFVTFRTLlNPUlRfRklFTEQsXG4gICAgICAgIG9yZGVyOiBUQUJMRV9ERUZBVUxUUy5TT1JUX09SREVSLFxuICAgICAgfSxcbiAgICB9O1xuICAgIHRoaXMuc29ydEJ5ID0gdGhpcy5kYXRhLnNvcnRCeSB8fCB7XG4gICAgICBmaWVsZDogVEFCTEVfREVGQVVMVFMuU09SVF9GSUVMRCxcbiAgICAgIG9yZGVyOiBUQUJMRV9ERUZBVUxUUy5TT1JUX09SREVSLFxuICAgIH07XG5cbiAgICBsZXQgaXRlbXNUb0Rpc3BsYXkgPSBbLi4udGhpcy5pdGVtc107XG4gICAgaXRlbXNUb0Rpc3BsYXkgPSB0aGlzLmFwcGx5Q2xpZW50U2lkZUZpbHRlcnMoaXRlbXNUb0Rpc3BsYXkpO1xuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IGl0ZW1zVG9EaXNwbGF5O1xuXG4gICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShpdGVtc1RvRGlzcGxheSk7XG4gICAgdGhpcy5kYXRhU291cmNlLnBhZ2luYXRvciA9IHRoaXMucGFnaW5hdG9yO1xuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5zb3J0O1xuICAgIGlmICh0aGlzLmRhdGEuc29ydEJ5KSB7XG4gICAgICB0aGlzLmRhdGFTb3VyY2Uuc29ydC5hY3RpdmUgPSB0aGlzLmRhdGEuc29ydEJ5LmZpZWxkO1xuICAgICAgdGhpcy5kYXRhU291cmNlLnNvcnQuZGlyZWN0aW9uID0gdGhpcy5kYXRhLnNvcnRCeS5vcmRlcjtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0LnNvcnRDaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSAoZGF0YSwgZmlsdGVyOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLnNvbWUoKGNvbCk6IGJvb2xlYW4gPT4ge1xuICAgICAgICBpZiAoY29sLmZpbHRlclByZWRpY2F0ZXMpIHtcbiAgICAgICAgICByZXR1cm4gY29sLmZpbHRlclByZWRpY2F0ZXMuc29tZSgocHJlZGljYXRlKTogYm9vbGVhbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gaXRlbVtjb2wucHJvcGVydHldO1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVZhbHVlIHx8IHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5UmVjb3JkID0gcHJvcGVydHlWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGNvbnN0IHByZWRpY2F0ZVZhbHVlID0gcHJvcGVydHlSZWNvcmRbcHJlZGljYXRlXTtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGVWYWx1ZSA9PT0gbnVsbCB8fCBwcmVkaWNhdGVWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhwcmVkaWNhdGVWYWx1ZSlcbiAgICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgICAudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgICAuaW5jbHVkZXMoZmlsdGVyKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2wucHJvcGVydHkgJiYgY29sLmlzRmlsdGVyYWJsZSkge1xuICAgICAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBpdGVtW2NvbC5wcm9wZXJ0eV07XG4gICAgICAgICAgaWYgKHByb3BlcnR5VmFsdWUgPT09IG51bGwgfHwgcHJvcGVydHlWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIFN0cmluZyhwcm9wZXJ0eVZhbHVlKVxuICAgICAgICAgICAgLnRyaW0oKVxuICAgICAgICAgICAgLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5pbmNsdWRlcyhmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkSXRlbXNQYWdpbmF0ZWQoXG4gICAgbmF2aWdhdGlvbjogJ3JlbG9hZCcgfCAnZm9yd2FyZCcgfCAnYmFja3dhcmQnID0gJ3JlbG9hZCcsXG4gICAgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5pbWFnZUxvYWRpbmdTdGF0ZS5jbGVhcigpO1xuICAgIGlmIChyZXNldCAmJiBbJ2ZvcndhcmQnLCAncmVsb2FkJ10uaW5jbHVkZXMobmF2aWdhdGlvbikpIHtcbiAgICAgIHRoaXMubGFzdERvYyA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuICAgIH1cbiAgICBpZiAocmVzZXQgJiYgWydiYWNrd2FyZCcsICdyZWxvYWQnXS5pbmNsdWRlcyhuYXZpZ2F0aW9uKSkge1xuICAgICAgdGhpcy5maXJzdERvYyA9IG51bGw7XG4gICAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSAwO1xuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUZpbHRlcnMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZXh0cmFjdEFjdGl2ZUZpbHRlcnMoXG4gICAgICB0aGlzLmZpbHRlcnNGb3JtLFxuICAgICk7XG5cbiAgICB0aGlzLmFycmFuZ2UgPSB7XG4gICAgICBmaWx0ZXJzOiBhY3RpdmVGaWx0ZXJzLFxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcbiAgICB9O1xuXG4gICAgY29uc3QgcGFnaW5hdGVkOiBQYWdpbmF0aW9uID0ge1xuICAgICAgYmF0Y2hTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgY29sbGVjdGlvbjogdGhpcy5kYXRhLmNvbGxlY3Rpb24sXG4gICAgICBkb2M6IHsgbGFzdERvYzogdGhpcy5sYXN0RG9jLCBmaXJzdERvYzogdGhpcy5maXJzdERvYyB9LFxuICAgICAgbmF2aWdhdGlvbixcbiAgICAgIGFycmFuZ2U6IHRoaXMuYXJyYW5nZSEsXG4gICAgICBjb25kaXRpb25zOiB0aGlzLmRhdGEuY29uZGl0aW9ucyxcbiAgICAgIHNpemU6IHRoaXMudG90YWxJdGVtcyxcbiAgICAgIGZpbHRlckZuOiB0aGlzLmRhdGEuZmlsdGVyRm4sXG4gICAgICBjbGllbnRQYWdlSW5kZXg6IHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCxcbiAgICB9O1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy50YWJsZVNlcnZpY2UuZ2V0UGFnaW5hdGVkKHBhZ2luYXRlZCk7XG4gICAgdGhpcy5pdGVtcyA9IHJlc3VsdC5pdGVtcyBhcyBUW107XG4gICAgYXdhaXQgdGhpcy5sb2FkUmVsYXRpb25zKCk7XG4gICAgYXdhaXQgdGhpcy5sb2FkUXVlcnlMZW5ndGhzKCk7XG4gICAgdGhpcy5sYXN0RG9jID0gcmVzdWx0Lmxhc3REb2MgYXMgUXVlcnlEb2N1bWVudFNuYXBzaG90PFQ+IHwgbnVsbDtcbiAgICB0aGlzLmZpcnN0RG9jID0gcmVzdWx0LmZpcnN0RG9jIGFzIFF1ZXJ5RG9jdW1lbnRTbmFwc2hvdDxUPiB8IG51bGw7XG5cbiAgICBpZiAocmVzdWx0LmN1cnJlbnRDbGllbnRQYWdlSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5jdXJyZW50Q2xpZW50UGFnZUluZGV4ID0gcmVzdWx0LmN1cnJlbnRDbGllbnRQYWdlSW5kZXg7XG4gICAgfVxuXG4gICAgbGV0IHN1bSA9IDA7XG4gICAgaWYgKHRoaXMuZGF0YS50b3RhbFJlZikge1xuICAgICAgZm9yIChjb25zdCB0b3RhbFJlZiBvZiB0aGlzLmRhdGEudG90YWxSZWYpIHtcbiAgICAgICAgY29uc3QgdG90YWxSZWZEb2MgPSBhd2FpdCB0b3RhbFJlZi5yZWYuZ2V0KCk7XG4gICAgICAgIGNvbnN0IGRvY0RhdGEgPSB0b3RhbFJlZkRvYy5kYXRhKCkgYXNcbiAgICAgICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChkb2NEYXRhIHx8IHJlc3VsdC5maWx0ZXJMZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gZG9jRGF0YSA/IGRvY0RhdGFbdG90YWxSZWYuZmllbGRdIDogdW5kZWZpbmVkO1xuICAgICAgICAgIGNvbnN0IG51bWVyaWNWYWx1ZSA9IHR5cGVvZiBmaWVsZFZhbHVlID09PSAnbnVtYmVyJyA/IGZpZWxkVmFsdWUgOiAwO1xuICAgICAgICAgIHN1bSA9IHJlc3VsdC5maWx0ZXJMZW5ndGggPz8gKChzdW0gKyBudW1lcmljVmFsdWUpIGFzIG51bWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHN1bTtcbiAgICB9XG5cbiAgICB0aGlzLmhhc05leHRQYWdlID0gcmVzdWx0Lmhhc05leHRQYWdlO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UodGhpcy5pdGVtcyk7XG4gICAgdGhpcy5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyUHJlZGljYXRlO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gUEFHSU5BVElPTiBNRVRIT0RTXG5cbiAgYXN5bmMgb25QYWdlQ2hhbmdlKGV2ZW50PzogUGFnZUV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uICE9PSB0cnVlIHx8ICFldmVudCkgcmV0dXJuO1xuXG4gICAgdGhpcy5pc0xvYWRpbmckLm5leHQodHJ1ZSk7XG5cbiAgICBjb25zdCBjdXJyZW50U3RhdGUgPSB7XG4gICAgICBjdXJyZW50UGFnZU51bWJlcjogdGhpcy5jdXJyZW50UGFnZU51bWJlcixcbiAgICAgIGN1cnJlbnRDbGllbnRQYWdlSW5kZXg6IHRoaXMuY3VycmVudENsaWVudFBhZ2VJbmRleCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgdG90YWxJdGVtczogdGhpcy50b3RhbEl0ZW1zLFxuICAgICAgaGFzTmV4dFBhZ2U6IHRoaXMuaGFzTmV4dFBhZ2UsXG4gICAgfTtcblxuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZU5hdmlnYXRpb24oXG4gICAgICBldmVudCxcbiAgICAgIGN1cnJlbnRTdGF0ZSxcbiAgICApO1xuXG4gICAgaWYgKCFuYXZpZ2F0aW9uLnNob3VsZE5hdmlnYXRlKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgICB0aGlzLnBhZ2VFdmVudCA9IGV2ZW50O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEF0dWFsaXphciBlc3RhZG8gbG9jYWxcbiAgICB0aGlzLmN1cnJlbnRDbGllbnRQYWdlSW5kZXggPSBuYXZpZ2F0aW9uLm5ld0NsaWVudFBhZ2VJbmRleDtcbiAgICB0aGlzLmN1cnJlbnRQYWdlTnVtYmVyID0gbmF2aWdhdGlvbi5uZXdQYWdlTnVtYmVyO1xuXG4gICAgLy8gQXR1YWxpemFyIHBhZ2VTaXplIHNlIG11ZG91XG4gICAgaWYgKGV2ZW50LnBhZ2VTaXplICE9PSB0aGlzLnBhZ2VTaXplKSB7XG4gICAgICB0aGlzLnBhZ2VTaXplID0gZXZlbnQucGFnZVNpemU7XG4gICAgfVxuXG4gICAgLy8gQWp1c3RhciBwYWdlU2l6ZSB0ZW1wb3JhcmlhbWVudGUgcGFyYSDDumx0aW1hIHDDoWdpbmEgc2UgbmVjZXNzw6FyaW9cbiAgICBjb25zdCBsYXN0UGFnZUluZGV4ID0gdGhpcy5wYWdpbmF0aW9uU2VydmljZS5jYWxjdWxhdGVMYXN0UGFnZUluZGV4KFxuICAgICAgdGhpcy50b3RhbEl0ZW1zLFxuICAgICAgZXZlbnQucGFnZVNpemUsXG4gICAgKTtcbiAgICBsZXQgb3JpZ2luYWxQYWdlU2l6ZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICBpZiAoXG4gICAgICBldmVudC5wYWdlSW5kZXggPT09IGxhc3RQYWdlSW5kZXggJiZcbiAgICAgIG5hdmlnYXRpb24uZGlyZWN0aW9uID09PSAnYmFja3dhcmQnICYmXG4gICAgICBuYXZpZ2F0aW9uLnJlc2V0RG9jc1xuICAgICkge1xuICAgICAgY29uc3QgaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2UgPVxuICAgICAgICB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmNhbGN1bGF0ZUxhc3RQYWdlSXRlbUNvdW50KFxuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyxcbiAgICAgICAgICBldmVudC5wYWdlU2l6ZSxcbiAgICAgICAgKTtcblxuICAgICAgaWYgKFxuICAgICAgICBpdGVtc0V4cGVjdGVkSW5MYXN0UGFnZSA+IDAgJiZcbiAgICAgICAgaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2UgPCBldmVudC5wYWdlU2l6ZVxuICAgICAgKSB7XG4gICAgICAgIG9yaWdpbmFsUGFnZVNpemUgPSB0aGlzLnBhZ2VTaXplO1xuICAgICAgICB0aGlzLnBhZ2VTaXplID0gaXRlbXNFeHBlY3RlZEluTGFzdFBhZ2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKG5hdmlnYXRpb24uZGlyZWN0aW9uLCBuYXZpZ2F0aW9uLnJlc2V0RG9jcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm8gYW8gY2FycmVnYXIgaXRlbnMgcGFnaW5hZG9zOicsIGVycm9yKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKG9yaWdpbmFsUGFnZVNpemUgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5wYWdlU2l6ZSA9IG9yaWdpbmFsUGFnZVNpemU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYWdlRXZlbnQgPSBldmVudDtcbiAgICB0aGlzLmlzTG9hZGluZyQubmV4dChmYWxzZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBGSUxURVIvU0VBUkNIIE1FVEhPRFNcblxuICBhcHBseUZpbHRlcih2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmZpbHRlciA9IFN0cmluZyh2YWx1ZSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5maWx0ZXJWYWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0Lm5leHQodGhpcy5maWx0ZXJWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VhcmNoKGV2ZW50PzogRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zZWxlY3RTb3J0LnZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RTb3J0LnZhbHVlLmFycmFuZ2UgPT09ICdhc2NlbmRpbmcnKSB7XG4gICAgICAgIHRoaXMuc29ydEJ5ID0ge1xuICAgICAgICAgIGZpZWxkOiB0aGlzLnNlbGVjdFNvcnQudmFsdWUucHJvcGVydHksXG4gICAgICAgICAgb3JkZXI6ICdhc2MnLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuc2VsZWN0U29ydC52YWx1ZS5hcnJhbmdlID09PSAnZGVzY2VuZGluZycpIHtcbiAgICAgICAgdGhpcy5zb3J0QnkgPSB7XG4gICAgICAgICAgZmllbGQ6IHRoaXMuc2VsZWN0U29ydC52YWx1ZS5wcm9wZXJ0eSxcbiAgICAgICAgICBvcmRlcjogJ2Rlc2MnLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgIHRoaXMuYXJyYW5nZSA9IHRoaXMuYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzVG9EYXRhU291cmNlKCk7XG4gICAgICB0aGlzLmN1cnJlbnRBcnJhbmdlID1cbiAgICAgICAgdGhpcy5maWx0ZXJzRm9ybS5sZW5ndGggPiAwXG4gICAgICAgICAgPyAodGhpcy5maWx0ZXJzRm9ybS5hdCgwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA/PyAnJylcbiAgICAgICAgICA6ICcnO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcbiAgICAgIHRoaXMuY3VycmVudEFycmFuZ2UgPVxuICAgICAgICB0aGlzLmZpbHRlcnNGb3JtLmxlbmd0aCA+IDBcbiAgICAgICAgICA/ICh0aGlzLmZpbHRlcnNGb3JtLmF0KDApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID8/ICcnKVxuICAgICAgICAgIDogJyc7XG4gICAgICB0aGlzLnBhZ2luYXRvci5maXJzdFBhZ2UoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHJlc2V0RmlsdGVyKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIgPSAnJztcbiAgICBpZiAodGhpcy5maWx0ZXJQcmVkaWNhdGUpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXJQcmVkaWNhdGUgPSB0aGlzLmZpbHRlclByZWRpY2F0ZTtcbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlcnNGb3JtLmNsZWFyKCk7XG4gICAgdGhpcy5hZGRGaWx0ZXIoKTtcbiAgICB0aGlzLnNlbGVjdFNvcnQucGF0Y2hWYWx1ZSgnJyk7XG4gICAgdGhpcy5zb3J0QnkgPSB7XG4gICAgICBvcmRlcjogdGhpcy5kYXRhLnNvcnRCeSA/IHRoaXMuZGF0YS5zb3J0Qnkub3JkZXIgOiAnZGVzYycsXG4gICAgICBmaWVsZDogdGhpcy5kYXRhLnNvcnRCeSA/IHRoaXMuZGF0YS5zb3J0QnkuZmllbGQgOiAnY3JlYXRlZEF0JyxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5hcnJhbmdlID0ge1xuICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcbiAgICAgIH07XG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IFsuLi50aGlzLml0ZW1zXTtcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHRoaXMuaXRlbXMubGVuZ3RoO1xuICAgICAgdGhpcy5jdXJyZW50QXJyYW5nZSA9ICcnO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHRoaXMubG9hZEl0ZW1zUGFnaW5hdGVkKCdyZWxvYWQnLCB0cnVlKTtcbiAgICAgIHRoaXMuY3VycmVudEFycmFuZ2UgPSAnJztcbiAgICAgIHRoaXMucGFnaW5hdG9yLmZpcnN0UGFnZSgpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gTkFWSUdBVElPTiBNRVRIT0RTXG5cbiAgZ29Ub0RldGFpbHMocm93OiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGF0YS5pc05vdENsaWNrYWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1cmxQYXRoID0gdGhpcy5kYXRhLnVybCB8fCB0aGlzLmRhdGEubmFtZTtcbiAgICBjb25zdCByb3dXaXRoSWQgPSByb3cgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gJiB7IGlkOiBzdHJpbmcgfTtcbiAgICBjb25zdCB1cmwgPSB0aGlzLnJvdXRlci5zZXJpYWxpemVVcmwoXG4gICAgICB0aGlzLnJvdXRlci5jcmVhdGVVcmxUcmVlKFtgLyR7dXJsUGF0aH1gLCByb3dXaXRoSWQuaWRdKSxcbiAgICApO1xuICAgIHdpbmRvdy5vcGVuKHVybCwgJ19ibGFuaycpO1xuICB9XG5cbiAgLy8gUkVMQVRJT04gTUVUSE9EU1xuXG4gIGFzeW5jIGdldFJlbGF0aW9uKHBhcmFtczoge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29sbGVjdGlvbjogc3RyaW5nO1xuICAgIG5ld1Byb3BlcnR5OiBzdHJpbmc7XG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgc25hcHNob3Q6IGZpcmVzdG9yZS5Eb2N1bWVudFNuYXBzaG90PHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKFxuICAgICAgICBwYXJhbXMuaWQgIT09ICcnICYmXG4gICAgICAgIHBhcmFtcy5pZCAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHBhcmFtcy5jb2xsZWN0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgcGFyYW1zLmNvbGxlY3Rpb24gIT09ICcnXG4gICAgICApIHtcbiAgICAgICAgc25hcHNob3QgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbShcbiAgICAgICAgICB0aGlzLmZpcmVzdG9yZS5jb2xsZWN0aW9uKHBhcmFtcy5jb2xsZWN0aW9uKS5kb2MocGFyYW1zLmlkKS5nZXQoKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzbmFwc2hvdCAmJiBzbmFwc2hvdC5leGlzdHMpIHtcbiAgICAgICAgY29uc3QgZGF0YSA9IHNuYXBzaG90LmRhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhPy5bcGFyYW1zLm5ld1Byb3BlcnR5XTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgPyB2YWx1ZSA6ICcnO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBsb2FkUmVsYXRpb25zKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHJlbGF0aW9uUHJvbWlzZXMgPSB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1uc1xuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVsYXRpb24pXG4gICAgICAuZmxhdE1hcCgoY29sKSA9PlxuICAgICAgICB0aGlzLml0ZW1zLm1hcChhc3luYyAoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChjb2wucmVsYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZWNvcmQgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgaXRlbVJlY29yZFtjb2wucHJvcGVydHldID0gYXdhaXQgdGhpcy5nZXRSZWxhdGlvbih7XG4gICAgICAgICAgICAgIGlkOiBTdHJpbmcoaXRlbVJlY29yZFtjb2wucmVsYXRpb24uc291cmNlUHJvcGVydHldID8/ICcnKSxcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sLnJlbGF0aW9uLnRhcmdldGVkQ29sbGVjdGlvbixcbiAgICAgICAgICAgICAgbmV3UHJvcGVydHk6IGNvbC5yZWxhdGlvbi50YXJnZXRlZFByb3BlcnR5IHx8IGNvbC5wcm9wZXJ0eSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwocmVsYXRpb25Qcm9taXNlcyk7XG4gIH1cblxuICBhc3luYyBnZXRRdWVyeUxlbmd0aChwYXJhbXM6IHtcbiAgICBpdGVtOiBUO1xuICAgIHJlbGF0aW9uOiB7XG4gICAgICBjb2xsZWN0aW9uOiBzdHJpbmc7XG4gICAgICBwcm9wZXJ0eTogc3RyaW5nO1xuICAgICAgb3BlcmF0b3I6IFdoZXJlRmlsdGVyT3A7XG4gICAgICB2YWx1ZTogc3RyaW5nO1xuICAgIH07XG4gIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGl0ZW1SZWNvcmQgPSBwYXJhbXMuaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBzbmFwc2hvdCA9IGF3YWl0IHRoaXMuZmlyZXN0b3JlXG4gICAgICAuY29sbGVjdGlvbihwYXJhbXMucmVsYXRpb24uY29sbGVjdGlvbilcbiAgICAgIC5yZWYud2hlcmUoXG4gICAgICAgIHBhcmFtcy5yZWxhdGlvbi5wcm9wZXJ0eSxcbiAgICAgICAgcGFyYW1zLnJlbGF0aW9uLm9wZXJhdG9yLFxuICAgICAgICBpdGVtUmVjb3JkW3BhcmFtcy5yZWxhdGlvbi52YWx1ZV0sXG4gICAgICApXG4gICAgICAuZ2V0KCk7XG4gICAgcmV0dXJuIHNuYXBzaG90LnNpemU7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGxvYWRRdWVyeUxlbmd0aHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbGVuZ3RoUHJvbWlzZXMgPSB0aGlzLmRhdGEuZGlzcGxheWVkQ29sdW1uc1xuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucXVlcnlMZW5ndGgpXG4gICAgICAuZmxhdE1hcCgoY29sKSA9PlxuICAgICAgICB0aGlzLml0ZW1zLm1hcChhc3luYyAoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChjb2wucXVlcnlMZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1SZWNvcmQgPSBpdGVtIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgICAgICAgaXRlbVJlY29yZFtjb2wucHJvcGVydHldID0gYXdhaXQgdGhpcy5nZXRRdWVyeUxlbmd0aCh7XG4gICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgIHJlbGF0aW9uOiBjb2wucXVlcnlMZW5ndGgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChsZW5ndGhQcm9taXNlcyk7XG4gIH1cblxuICBwcml2YXRlIGZpbHRlckl0ZW1zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGEuY29uZGl0aW9ucykge1xuICAgICAgdGhpcy5kYXRhLmNvbmRpdGlvbnMuZm9yRWFjaCgoY29uZCkgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5pdGVtcy5maWx0ZXIoKGl0ZW0pID0+IHtcbiAgICAgICAgICBjb25zdCBvcGVyYXRvckZ1bmN0aW9uID1cbiAgICAgICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9wZXJhdG9yc1tcbiAgICAgICAgICAgICAgY29uZC5vcGVyYXRvciBhcyBrZXlvZiB0eXBlb2YgdGhpcy50YWJsZVNlcnZpY2Uub3BlcmF0b3JzXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIGlmIChvcGVyYXRvckZ1bmN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtUmVjb3JkID0gaXRlbSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIHJldHVybiBvcGVyYXRvckZ1bmN0aW9uKFxuICAgICAgICAgICAgICBpdGVtUmVjb3JkW2NvbmQuZmlyZXN0b3JlUHJvcGVydHldLFxuICAgICAgICAgICAgICBjb25kLmRhc2hQcm9wZXJ0eSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBQVUJMSUMgTUVUSE9EU1xuXG4gIGFzeW5jIHJlbG9hZFRhYmxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmRhdGEucGFnaW5hdGlvbikge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXNQYWdpbmF0ZWQoJ3JlbG9hZCcsIHRydWUpO1xuICAgICAgdGhpcy5wYWdpbmF0b3IuZmlyc3RQYWdlKCk7XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXdhaXQgdGhpcy5sb2FkSXRlbXMoKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVEaXNwbGF5ZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGFTb3VyY2UpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2U8VD4oW10pO1xuICAgIH1cblxuICAgIHRoaXMuY29sdW1uUHJvcGVydGllcyA9IHRoaXMuZGF0YS5kaXNwbGF5ZWRDb2x1bW5zLm1hcChcbiAgICAgIChjb2x1bW4pID0+IGNvbHVtbi5wcm9wZXJ0eSxcbiAgICApO1xuXG4gICAgY29uc3QgZmlsdGVyQ29uZmlnID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmluaXRpYWxpemVEcm9wZG93bkl0ZW1zKFxuICAgICAgdGhpcy5kYXRhLmRpc3BsYXllZENvbHVtbnMsXG4gICAgKTtcbiAgICB0aGlzLmRyb3Bkb3duSXRlbXMgPSBmaWx0ZXJDb25maWcuZHJvcGRvd25JdGVtcztcbiAgICB0aGlzLnNvcnRhYmxlRHJvcGRvd25JdGVtcyA9IGZpbHRlckNvbmZpZy5zb3J0YWJsZURyb3Bkb3duSXRlbXM7XG5cbiAgICBpZiAodGhpcy5kYXRhLmZpbHRlcmFibGVPcHRpb25zKSB7XG4gICAgICB0aGlzLmRyb3Bkb3duSXRlbXMgPSB0aGlzLmZpbHRlclNlcnZpY2UuYWRkRmlsdGVyYWJsZU9wdGlvbnMoXG4gICAgICAgIHRoaXMuZHJvcGRvd25JdGVtcyxcbiAgICAgICAgdGhpcy5kYXRhLmZpbHRlcmFibGVPcHRpb25zLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBzaG91bGRTaG93QWN0aW9uQnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kYXRhPy5hY3Rpb25CdXR0b24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5hY3Rpb25CdXR0b24uY29uZGl0aW9uKG51bGwpID8/IHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVEb3dubG9hZCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZG93bmxvYWRUYWJsZSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgaWYgKHRoaXMuZGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IFsuLi50aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhXTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJyYW5nZSA9IHRoaXMuYnVpbGRBcnJhbmdlRnJvbUZpbHRlcnMoKTtcbiAgICAgIHRoaXMuZG93bmxvYWRUYWJsZShhcnJhbmdlLCB0aGlzLmRhdGEuY29uZGl0aW9ucyB8fCBbXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmFycmFuZ2UpIHtcbiAgICAgICAgdGhpcy5kb3dubG9hZFRhYmxlKHRoaXMuYXJyYW5nZSwgdGhpcy5kYXRhLmNvbmRpdGlvbnMgfHwgW10pO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiPGRpdiAqbmdJZj1cImRhdGFcIiBjbGFzcz1cImNhcmQtYm9keVwiPlxuICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTZcIj5cbiAgICA8IS0tIFVOSUZJRUQgQ09OVFJPTCBQQU5FTDogRklMVEVSUywgU09SVCAmIEFDVElPTlMgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctd2hpdGUgcC00IHNoYWRvdy1sZ1wiXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBkYXRhLnBhZ2luYXRpb24gPT09IHRydWUgJiZcbiAgICAgICAgKGRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMCB8fFxuICAgICAgICAgIHNvcnRhYmxlRHJvcGRvd25JdGVtcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24pXG4gICAgICBcIlxuICAgID5cbiAgICAgIDwhLS0gUEFORUwgSEVBREVSOiBUaXRsZSBhbmQgQ3VzdG9tIEFjdGlvbiAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtYi00IGZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci1iLTIgYm9yZGVyLWdyYXktMjAwIHBiLTQgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBMZWZ0IFNpZGU6IFRpdGxlICYgTWFpbiBBY3Rpb24gQnV0dG9uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbHRlciB0ZXh0LXhsIHRleHQtYmx1ZS01MDBcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwXCJcbiAgICAgICAgICAgICAgPkZpbHRyb3MgZSBBw6fDtWVzPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmFjdGlvbkJ1dHRvbiAmJiBkYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0QWN0aW9uQnV0dG9uQ2xhc3MoKVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJkYXRhLmFjdGlvbkJ1dHRvbi5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kID8gZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kKCRldmVudCkgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhLmFjdGlvbkJ1dHRvbi5pY29uXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICB7eyBkYXRhLmFjdGlvbkJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNPUlQgRklFTEQgKEludGVncmF0ZWQgd2l0aCBmaWx0ZXJzKSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJtYi00XCIgKm5nSWY9XCJzb3J0YWJsZURyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zIHAtMlwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy1bMjAwcHhdIGZsZXgtMVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zb3J0LWFscGhhLWRvd24gdGV4dC1jeWFuLTYwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICA8c3Bhbj5PcmRlbmFyIHBvcjwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCIgW2Zvcm1Db250cm9sXT1cInNlbGVjdFNvcnRcIj5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygc29ydGFibGVEcm9wZG93bkl0ZW1zXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zb3J0LWFscGhhLWRvd24gdGV4dC1jeWFuLTYwMFwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGSUxURVJTIENPTlRFTlQgKFdJVEggUkVGSU5FTUVOVFMpIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgc3BhY2UteS0zXCIgKm5nSWY9XCJmaWx0ZXJzRm9ybS5jb250cm9scy5sZW5ndGggPiAwXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBbZm9ybUdyb3VwXT1cIiRhbnkoZmlsdGVyR3JvdXApXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyR3JvdXAgb2YgZmlsdGVyc0Zvcm0uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC0zIHAtMlwiXG4gICAgICAgID5cbiAgICAgICAgICA8IS0tIEZJTFRFUiBUWVBFIFNFTEVDVE9SIC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtaW4tdy1bMjAwcHhdIGZsZXgtMVwiICpuZ0lmPVwiZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8bWF0LWxhYmVsPlRpcG8gZGUgZmlsdHJvPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY2lvbmUgbyB0aXBvLi4uXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3RGaWx0ZXJDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0QXZhaWxhYmxlRmlsdGVyT3B0aW9ucygpXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiaXRlbS5pY29uIHx8ICdmYSBmYS1maWx0ZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtc20gdGV4dC1ibHVlLTUwMFwiXG4gICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGl0ZW0udGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFRFWFQgRklMVEVSIC0tPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KCdzZWxlY3RGaWx0ZXInKT8udmFsdWU/LmFycmFuZ2UgPT09ICdmaWx0ZXInXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldChcInNlbGVjdEZpbHRlclwiKT8udmFsdWU/LnRpdGxlIHx8XG4gICAgICAgICAgICAgICAgICAgIFwiRmlsdHJhclwiXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInR5cGVGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcbiAgICAgICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERST1BET1dOIEZJTFRFUiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVsyMDBweF0gZmxleC0xXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlICYmXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApXG4gICAgICAgICAgICAgICAgLmdldCgnc2VsZWN0RmlsdGVyJylcbiAgICAgICAgICAgICAgICA/LnZhbHVlLmhhc093blByb3BlcnR5KCdpdGVtcycpXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoXCJzZWxlY3RGaWx0ZXJcIik/LnZhbHVlPy50aXRsZSB8fFxuICAgICAgICAgICAgICAgICAgXCJTZWxlY2lvbmVcIlxuICAgICAgICAgICAgICB9fTwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCJcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWxlY3RJdGVtXCJcbiAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb25cbiAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgIC5pdGVtc1xuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBpdGVtLmxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBEQVRFIEZJTFRFUiAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cIm1pbi13LVszNDBweF0gZmxleC1hdXRvXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PVxuICAgICAgICAgICAgICAnZmlsdGVyQnlEYXRlJ1xuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1zdHJldGNoIGdhcC0zIHNtOmZsZXgtcm93IHNtOml0ZW1zLWNlbnRlclwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEluaWNpYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2luaXRpYWxEYXRlJywgaSlcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiaW5pdGlhbERhdGVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEZpbmFsPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2ZpbmFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaW5hbERhdGVcIlxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgIG1heGxlbmd0aD1cIjEwXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIFJFTU9WRSBGSUxURVIgQlVUVE9OIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJmaWx0ZXJzRm9ybS5sZW5ndGggPiAxXCIgY2xhc3M9XCJtbC1hdXRvIGZsZXgtc2hyaW5rLTBcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZUZpbHRlcihpKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBoLTEwIHctMTAgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHJvdW5kZWQtZnVsbCB0cmFuc2l0aW9uLWNvbG9ycyBkdXJhdGlvbi0zMDAgaG92ZXI6YmctcmVkLTEwMFwiXG4gICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZW1vdmVyIGZpbHRyb1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtdHJhc2ggdGV4dC1yZWQtNTAwIGhvdmVyOnRleHQtcmVkLTYwMFwiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFBBTkVMIEZPT1RFUjogQWRkIEZpbHRlciAmIEFjdGlvbiBCdXR0b25zIC0tPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cIi1tYi0yIGZsZXggaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci10IGJvcmRlci1ncmF5LTIwMCBwdC00XCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBBZGQgRmlsdGVyIEJ1dHRvbiAtLT5cbiAgICAgICAgPGRpdiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJhZGRGaWx0ZXIoKVwiXG4gICAgICAgICAgICBjbGFzcz1cInRyYW5zZm9ybSByb3VuZGVkLWZ1bGwgYm9yZGVyLTIgYm9yZGVyLWJsdWUtMzAwIGJnLWJsdWUtNTAgcHgtNiBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ibHVlLTYwMCB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0zMDAgaG92ZXI6LXRyYW5zbGF0ZS15LTAuNSBob3Zlcjpib3JkZXItYmx1ZS00MDAgaG92ZXI6YmctYmx1ZS0xMDAgaG92ZXI6c2hhZG93LW1kXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBZGljaW9uYXIgbm92byBmaWx0cm9cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcGx1cyBtci0yXCI+PC9pPlxuICAgICAgICAgICAgQWRpY2lvbmFyIEZpbHRyb1xuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFJpZ2h0IFNpZGU6IFNlYXJjaCwgUmVzZXQsIEV4cG9ydCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgZ2FwLTMgc2VsZi1zdGFydCBzbTpzZWxmLWF1dG9cIlxuICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICB0aGlzLmhhc0ZpbHRlcmFibGVDb2x1bW4gPT09IHRydWUgfHwgdGhpcy5oYXNTb3J0YWJsZUNvbHVtbiA9PT0gdHJ1ZVxuICAgICAgICAgIFwiXG4gICAgICAgID5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwic2VhcmNoKClcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctZ3JlZW4tNjAwIHB4LTUgcHktMiB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtd2hpdGUgdHJhbnNpdGlvbi1jb2xvcnMgaG92ZXI6YmctZ3JlZW4tNzAwXCJcbiAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJBcGxpY2FyIGZpbHRyb3NcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoXCI+PC9pPlxuICAgICAgICAgICAgUGVzcXVpc2FyXG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwicmVzZXRGaWx0ZXIoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctcmVkLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXJlZC02MDBcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkxpbXBhciBmaWx0cm9zXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1yZWRvLWFsdFwiPjwvaT5cbiAgICAgICAgICAgIFJlc2V0YXJcbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5kb3dubG9hZCAhPT0gZmFsc2UgJiYgZG93bmxvYWRUYWJsZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctb3JhbmdlLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLW9yYW5nZS02MDBcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkV4cG9ydGFyIFRhYmVsYVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiXG4gICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCA8PSAwXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIlxuICAgICAgICAgICAgICAkYW55KGFycmFuZ2UpICYmIGRvd25sb2FkVGFibGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8gZG93bmxvYWRUYWJsZSgkYW55KGFycmFuZ2UpLCBkYXRhLmNvbmRpdGlvbnMgfHwgW10pXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZG93bmxvYWRcIj48L2k+XG4gICAgICAgICAgICBFeHBvcnRhclxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBVTklGSUVEIENPTlRST0wgUEFORUwgKGZvciBub24tcGFnaW5hdGVkIHRhYmxlcyk6IFNFQVJDSCwgU09SVCAmIEZJTFRFUlMgLS0+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJyb3VuZGVkLXhsIGJvcmRlciBib3JkZXItZ3JheS0yMDAgYmctd2hpdGUgcC00IHNoYWRvdy1sZ1wiXG4gICAgICAqbmdJZj1cIlxuICAgICAgICBkYXRhLnBhZ2luYXRpb24gPT09IGZhbHNlICYmXG4gICAgICAgIChoYXNGaWx0ZXJhYmxlQ29sdW1uID09PSB0cnVlIHx8XG4gICAgICAgICAgZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24pXG4gICAgICBcIlxuICAgID5cbiAgICAgIDwhLS0gUEFORUwgSEVBREVSOiBUaXRsZSBhbmQgQ3VzdG9tIEFjdGlvbiAtLT5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJtYi00IGZsZXggZmxleC1jb2wgaXRlbXMtc3RhcnQganVzdGlmeS1iZXR3ZWVuIGdhcC00IGJvcmRlci1iLTIgYm9yZGVyLWdyYXktMjAwIHBiLTQgbWQ6ZmxleC1yb3cgbWQ6aXRlbXMtY2VudGVyXCJcbiAgICAgID5cbiAgICAgICAgPCEtLSBMZWZ0IFNpZGU6IFRpdGxlICYgTWFpbiBBY3Rpb24gQnV0dG9uIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtY2VudGVyIGdhcC00XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbHRlciB0ZXh0LXhsIHRleHQtYmx1ZS01MDBcIj48L2k+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbGcgZm9udC1zZW1pYm9sZCB0ZXh0LWdyYXktNzAwXCJcbiAgICAgICAgICAgICAgPkZpbHRyb3MgZSBBw6fDtWVzPC9zcGFuXG4gICAgICAgICAgICA+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmFjdGlvbkJ1dHRvbiAmJiBkYXRhLmFjdGlvbkJ1dHRvbi5jb25kaXRpb25cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0QWN0aW9uQnV0dG9uQ2xhc3MoKVwiXG4gICAgICAgICAgICBbcm91dGVyTGlua109XCJkYXRhLmFjdGlvbkJ1dHRvbi5yb3V0ZXJMaW5rXCJcbiAgICAgICAgICAgIChjbGljayk9XCJcbiAgICAgICAgICAgICAgZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kID8gZGF0YS5hY3Rpb25CdXR0b24ubWV0aG9kKCRldmVudCkgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICpuZ0lmPVwiZGF0YS5hY3Rpb25CdXR0b24uaWNvblwiXG4gICAgICAgICAgICAgIFtjbGFzc109XCJkYXRhLmFjdGlvbkJ1dHRvbi5pY29uXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICB7eyBkYXRhLmFjdGlvbkJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8IS0tIFNJTVBMRSBTRUFSQ0ggLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWItNFwiXG4gICAgICAgICpuZ0lmPVwiaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSAmJiBkYXRhLnNob3dTaW1wbGVTZWFyY2ggIT09IGZhbHNlXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtc2VhcmNoIHRleHQtYmx1ZS01MDBcIj48L2k+XG4gICAgICAgICAgICBCdXNjYXJcbiAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGtleXVwKT1cImFwcGx5RmlsdGVyKGZpbHRlcklucHV0LnZhbHVlKVwiXG4gICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkRpZ2l0ZSBwYXJhIGZpbHRyYXIuLi5cIlxuICAgICAgICAgICAgI2ZpbHRlcklucHV0XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8bWF0LWljb24gbWF0U3VmZml4IGNsYXNzPVwidGV4dC1ncmF5LTUwMFwiPnNlYXJjaDwvbWF0LWljb24+XG4gICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBGSUxURVJTIFBBTkVMIC0tPlxuICAgICAgPGRpdiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICA8IS0tIEZJTFRFUlMgQ09OVEVOVCAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTQgc3BhY2UteS0zXCIgKm5nSWY9XCJmaWx0ZXJzRm9ybS5jb250cm9scy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCIkYW55KGZpbHRlckdyb3VwKVwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyR3JvdXAgb2YgZmlsdGVyc0Zvcm0uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgZ2FwLTNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDwhLS0gRklMVEVSIFRZUEUgU0VMRUNUT1IgLS0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIiAqbmdJZj1cImRyb3Bkb3duSXRlbXMubGVuZ3RoID4gMFwiPlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+VGlwbyBkZSBmaWx0cm88L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY2lvbmUgbyB0aXBvLi4uXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0RmlsdGVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEF2YWlsYWJsZUZpbHRlck9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJpdGVtLmljb24gfHwgJ2ZhIGZhLWZpbHRlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXNtIHRleHQtYmx1ZS01MDBcIlxuICAgICAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaXRlbS50aXRsZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gVEVYVCBGSUxURVIgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlPy5hcnJhbmdlID09PVxuICAgICAgICAgICAgICAgICdmaWx0ZXInXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXNlYXJjaCB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBcIkZpbHRyYXJcIlxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidHlwZUZpbHRlclwiXG4gICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJEaWdpdGUgcGFyYSBmaWx0cmFyLi4uXCJcbiAgICAgICAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPCEtLSBEUk9QRE9XTiBGSUxURVIgLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwibWluLXctWzIwMHB4XSBmbGV4LTFcIlxuICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICRhbnkoZmlsdGVyR3JvdXApLmdldCgnc2VsZWN0RmlsdGVyJyk/LnZhbHVlICYmXG4gICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cClcbiAgICAgICAgICAgICAgICAgIC5nZXQoJ3NlbGVjdEZpbHRlcicpXG4gICAgICAgICAgICAgICAgICA/LnZhbHVlLmhhc093blByb3BlcnR5KCdpdGVtcycpXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1sYWJlbD57e1xuICAgICAgICAgICAgICAgICAgJGFueShmaWx0ZXJHcm91cCkuZ2V0KFwic2VsZWN0RmlsdGVyXCIpPy52YWx1ZT8udGl0bGUgfHxcbiAgICAgICAgICAgICAgICAgICAgXCJTZWxlY2lvbmVcIlxuICAgICAgICAgICAgICAgIH19PC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgPG1hdC1zZWxlY3RcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWNpb25lLi4uXCJcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInNlbGVjdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbSBvZiAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLml0ZW1zXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8IS0tIERBVEUgRklMVEVSIC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cIm1pbi13LVszNDBweF0gZmxleC1hdXRvXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAkYW55KGZpbHRlckdyb3VwKS5nZXQoJ3NlbGVjdEZpbHRlcicpPy52YWx1ZT8uYXJyYW5nZSA9PT1cbiAgICAgICAgICAgICAgICAnZmlsdGVyQnlEYXRlJ1xuICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLXN0cmV0Y2ggZ2FwLTMgc206ZmxleC1yb3cgc206aXRlbXMtY2VudGVyXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhciB0ZXh0LWdyYXktNDAwXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EYXRhIEluaWNpYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIG1hdElucHV0XG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2luaXRpYWxEYXRlJywgaSlcIlxuICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkRhdGVGaWx0ZXJDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImluaXRpYWxEYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJERC9NTS9BQUFBXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4bGVuZ3RoPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJmbGV4LTFcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWwgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyIHRleHQtZ3JheS00MDBcIj48L2k+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPkRhdGEgRmluYWw8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L21hdC1sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cIm9uRGF0ZUlucHV0KCRldmVudCwgJ2ZpbmFsRGF0ZScsIGkpXCJcbiAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25EYXRlRmlsdGVyQ2hhbmdlKClcIlxuICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJmaW5hbERhdGVcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkREL01NL0FBQUFcIlxuICAgICAgICAgICAgICAgICAgICBtYXhsZW5ndGg9XCIxMFwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDwhLS0gUkVNT1ZFIEZJTFRFUiBCVVRUT04gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZmlsdGVyc0Zvcm0ubGVuZ3RoID4gMVwiIGNsYXNzPVwibWwtYXV0byBmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlRmlsdGVyKGkpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaC0xMCB3LTEwIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWZ1bGwgdHJhbnNpdGlvbi1jb2xvcnMgZHVyYXRpb24tMzAwIGhvdmVyOmJnLXJlZC0xMDBcIlxuICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSZW1vdmVyIGZpbHRyb1wiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRyYXNoIHRleHQtcmVkLTUwMCBob3Zlcjp0ZXh0LXJlZC02MDBcIj48L2k+XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gUEFORUwgRk9PVEVSOiBBZGQgRmlsdGVyICYgQWN0aW9ucyAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiLW1iLTIgZmxleCBpdGVtcy1zdGFydCBqdXN0aWZ5LWJldHdlZW4gZ2FwLTQgYm9yZGVyLXQgYm9yZGVyLWdyYXktMjAwIHB0LTRcIlxuICAgICAgICA+XG4gICAgICAgICAgPCEtLSBBZGQgRmlsdGVyIEJ1dHRvbiAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25JdGVtcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIChjbGljayk9XCJhZGRGaWx0ZXIoKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwidHJhbnNmb3JtIHJvdW5kZWQtZnVsbCBib3JkZXItMiBib3JkZXItYmx1ZS0zMDAgYmctYmx1ZS01MCBweC02IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWJsdWUtNjAwIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCBob3ZlcjotdHJhbnNsYXRlLXktMC41IGhvdmVyOmJvcmRlci1ibHVlLTQwMCBob3ZlcjpiZy1ibHVlLTEwMCBob3ZlcjpzaGFkb3ctbWRcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQWRpY2lvbmFyIG5vdm8gZmlsdHJvXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1wbHVzIG1yLTJcIj48L2k+XG4gICAgICAgICAgICAgIEFkaWNpb25hciBGaWx0cm9cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC0zIHNlbGYtc3RhcnQgc206c2VsZi1hdXRvXCJcbiAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgIHRoaXMuaGFzRmlsdGVyYWJsZUNvbHVtbiA9PT0gdHJ1ZSB8fFxuICAgICAgICAgICAgICB0aGlzLmhhc1NvcnRhYmxlQ29sdW1uID09PSB0cnVlXG4gICAgICAgICAgICBcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTIgcm91bmRlZC1sZyBiZy1ncmVlbi02MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1ncmVlbi03MDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiQXBsaWNhciBmaWx0cm9zXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1zZWFyY2hcIj48L2k+XG4gICAgICAgICAgICAgIFBlc3F1aXNhclxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RmlsdGVyKClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHJvdW5kZWQtbGcgYmctcmVkLTUwMCBweC01IHB5LTIgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LXdoaXRlIHRyYW5zaXRpb24tY29sb3JzIGhvdmVyOmJnLXJlZC02MDBcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiTGltcGFyIGZpbHRyb3NcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS1yZWRvLWFsdFwiPjwvaT5cbiAgICAgICAgICAgICAgUmVzZXRhclxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJkYXRhLmRvd25sb2FkICE9PSBmYWxzZSAmJiBkb3dubG9hZFRhYmxlXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiByb3VuZGVkLWxnIGJnLW9yYW5nZS01MDAgcHgtNSBweS0yIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC13aGl0ZSB0cmFuc2l0aW9uLWNvbG9ycyBob3ZlcjpiZy1vcmFuZ2UtNjAwXCJcbiAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxuICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRXhwb3J0YXIgVGFiZWxhXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIlxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSAmJiB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyZWREYXRhLmxlbmd0aCA8PSAwXG4gICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVEb3dubG9hZCgpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1kb3dubG9hZFwiPjwvaT5cbiAgICAgICAgICAgICAgRXhwb3J0YXJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgIDwhLS0gVEFCUyBDT01QT05FTlQgLS0+XG4gICAgICA8bGliLXRhYmxlLXRhYnNcbiAgICAgICAgKm5nSWY9XCJkYXRhLnRhYnMgJiYgZGF0YS50YWJzLnRhYnNEYXRhICYmIGRhdGEudGFicy50YWJzRGF0YS5sZW5ndGggPiAwXCJcbiAgICAgICAgW3RhYnNEYXRhXT1cImRhdGEudGFicy50YWJzRGF0YVwiXG4gICAgICAgIFtzZWxlY3RlZFRhYl09XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgICh0YWJTZWxlY3RlZCk9XCJvblRhYlNlbGVjdGVkKCRldmVudClcIlxuICAgICAgPjwvbGliLXRhYmxlLXRhYnM+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwibWF0LWVsZXZhdGlvbi16OCB3LWZ1bGwgb3ZlcmZsb3cteC1hdXRvIHJvdW5kZWQteGwgdGFibGUtY29udGFpbmVyXCJcbiAgICAgID5cbiAgICAgICAgPHRhYmxlXG4gICAgICAgICAgbWF0LXRhYmxlXG4gICAgICAgICAgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiXG4gICAgICAgICAgbWF0U29ydFxuICAgICAgICAgICNzb3J0PVwibWF0U29ydFwiXG4gICAgICAgICAgbWF0U29ydEFjdGl2ZT1cImNyZWF0ZWRBdFwiXG4gICAgICAgICAgbWF0U29ydERpcmVjdGlvbj1cImRlc2NcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbCBvZiBkYXRhLmRpc3BsYXllZENvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlQcm9wZXJ0eVwiXG4gICAgICAgICAgICBtYXRDb2x1bW5EZWY9XCJ7eyBjb2wucHJvcGVydHkgfX1cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgICAgIDwhLS0gSUYgVEhFIENPTFVNTiBJUyBOT1QgU09SVEFCTEUsIFRIRU4gRE9OJ1QgU0hPVyBUSEUgU09SVCBCVVRUT05TIC0tPlxuICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2wuaXNTb3J0YWJsZSB8fCBkYXRhLnBhZ2luYXRpb24gPT09IHRydWVcIlxuICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItY2VsbFxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3sgY29sLnRpdGxlIH19XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDwhLS0gSUYgVEhFIENPTFVNTiBJUyBTT1JUQUJMRSwgVEhFTiBTSE9XIFRIRSBTT1JUIEJVVFRPTlMgLS0+XG4gICAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmlzU29ydGFibGUgJiYgZGF0YS5wYWdpbmF0aW9uID09PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgbWF0LWhlYWRlci1jZWxsXG4gICAgICAgICAgICAgICAgbWF0LXNvcnQtaGVhZGVyXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7eyBjb2wudGl0bGUgfX1cbiAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgbWF0LWNlbGxcbiAgICAgICAgICAgICAgICAqbWF0Q2VsbERlZj1cImxldCByb3dcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2wubWV0aG9kID8gY29sLm1ldGhvZChyb3cpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwib25DZWxsTW91c2VFbnRlcigkZXZlbnQsIHJvdywgY29sKVwiXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25DZWxsTW91c2VMZWF2ZSgpXCJcbiAgICAgICAgICAgICAgICAobW91c2Vtb3ZlKT1cIm9uQ2VsbE1vdXNlTW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwhLS0gQ0hFQ0sgSUYgVEhFIENPTFVNTiBNVVNUIEJFIERJU1BMQVlFRCAtLT5cbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFjb2wuaW1hZ2UgJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5jaGFyTGltaXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbC5wcm9wZXJ0eV0gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93W2NvbC5wcm9wZXJ0eV0ubGVuZ3RoID4gY29sLmNoYXJMaW1pdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugd2l0aGluTGltaXRcbiAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2hyZWZdPVwicm93W2NvbC5wcm9wZXJ0eV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBnZXREaXNwbGF5VmFsdWUoY29sLCByb3cpIH19XG4gICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbC5oYXNMaW5rICYmIGlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaHJlZl09XCJjb2wuaGFzTGlua1wiXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdykgfX1cbiAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgIT09IHRydWUgJiYgIWlzU3RyaW5nKGNvbC5oYXNMaW5rKVwiXG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93KSB9fVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3dpdGhpbkxpbWl0PlxuICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29sLmhhc0xpbmsgPT09IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cInJvd1tjb2wucHJvcGVydHldXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAmJiBpc1N0cmluZyhjb2wuaGFzTGluaylcIlxuICAgICAgICAgICAgICAgICAgICAgIFtocmVmXT1cImNvbC5oYXNMaW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgZ2V0RGlzcGxheVZhbHVlKGNvbCwgcm93LCB0cnVlKSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb2wuaGFzTGluayAhPT0gdHJ1ZSAmJiAhaXNTdHJpbmcoY29sLmhhc0xpbmspXCJcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGdldERpc3BsYXlWYWx1ZShjb2wsIHJvdywgdHJ1ZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tIElNQUdFIC0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgICAgICAgICA8IS0tIEltYWdlbSBjb20gbG9hZGluZyAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAgICAgICBjb2wuaW1hZ2UgJiYgY29sLmltYWdlLnBhdGggJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjMyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIG0tYXV0b1wiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJjb2wuaW1hZ2UucGF0aCArICcvJyArIHJvd1tjb2wucHJvcGVydHldXCJcbiAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY29sLmltYWdlLmNsYXNzXCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm9wYWNpdHktMF09XCJpc0ltYWdlTG9hZGluZyhyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICBhbHQ9XCJcIlxuICAgICAgICAgICAgICAgICAgICAobG9hZCk9XCJvbkltYWdlTG9hZChyb3csIGNvbClcIlxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwib25JbWFnZUVycm9yKCRldmVudCwgcm93LCBjb2wsIGNvbC5pbWFnZS5kZWZhdWx0KVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgPCEtLSBJbWFnZW0gY29tIFVSTCBjb21wbGV0YSBlIGxvYWRpbmcgLS0+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICAgICAgY29sLmltYWdlICYmIGNvbC5pbWFnZS51cmwgJiYgIWNvbC5pY29uQ2xhc3MgJiYgIWNvbC5tZXRob2RcbiAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlbGF0aXZlIGlubGluZS1ibG9ja1wiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgW2RpYW1ldGVyXT1cIjMyXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIG0tYXV0b1wiXG4gICAgICAgICAgICAgICAgICA+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgICAgICAgW3NyY109XCJyb3dbY29sLnByb3BlcnR5XVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNvbC5pbWFnZS5jbGFzc1wiXG4gICAgICAgICAgICAgICAgICAgIFtjbGFzcy5vcGFjaXR5LTBdPVwiaXNJbWFnZUxvYWRpbmcocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgICAgKGxvYWQpPVwib25JbWFnZUxvYWQocm93LCBjb2wpXCJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cIm9uSW1hZ2VFcnJvcigkZXZlbnQsIHJvdywgY29sLCBjb2wuaW1hZ2UuZGVmYXVsdClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sLmljb25DbGFzc1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaWNvbkNsYXNzIG9mIGNvbC5pY29uQ2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbkNsYXNzLmJ1dHRvbk1ldGhvZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpY29uQ2xhc3MuYnV0dG9uTWV0aG9kKHJvdywgJGV2ZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJpY29uQ2xhc3MuY2xhc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uQ2xhc3MuY29uZGl0aW9uID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIChpY29uQ2xhc3MuY29uZGl0aW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJGFueShpY29uQ2xhc3MuY29uZGl0aW9uKShyb3cpKVxuICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgPnt7IGljb25DbGFzcy50ZXh0IH19PC9zcGFuXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cImNvbHVtblByb3BlcnRpZXNcIj48L3RyPlxuICAgICAgICAgIDx0clxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0VGFibGVSb3dOZ0NsYXNzKClcIlxuICAgICAgICAgICAgbWF0LXJvd1xuICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IGNvbHVtblByb3BlcnRpZXNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9EZXRhaWxzKHJvdylcIlxuICAgICAgICAgID48L3RyPlxuXG4gICAgICAgICAgPCEtLSBST1cgU0hPV04gV0hFTiBUSEVSRSBJUyBOTyBNQVRDSElORyBEQVRBLiAtLT5cbiAgICAgICAgICA8dHIgY2xhc3M9XCJtYXQtcm93XCIgKm1hdE5vRGF0YVJvdz5cbiAgICAgICAgICAgIDx0ZCAqbmdJZj1cIiEoaXNMb2FkaW5nJCB8IGFzeW5jKVwiIGNsYXNzPVwibWF0LWNlbGwgcC00XCIgY29sc3Bhbj1cIjRcIj5cbiAgICAgICAgICAgICAgTmVuaHVtIHJlc3VsdGFkbyBlbmNvbnRyYWRvIHBhcmEgYSBidXNjYVxuICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICA8L3RyPlxuICAgICAgICA8L3RhYmxlPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyXCIgKm5nSWY9XCJpc0xvYWRpbmckIHwgYXN5bmNcIj5cbiAgICAgICAgICA8bWF0LXNwaW5uZXI+PC9tYXQtc3Bpbm5lcj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRvci1jb250YWluZXJcIj5cbiAgICAgICAgICA8bWF0LXBhZ2luYXRvclxuICAgICAgICAgICAgI3BhZ2luYXRvclxuICAgICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJbMjUsIDUwLCAxMDBdXCJcbiAgICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICBbbGVuZ3RoXT1cInRvdGFsSXRlbXNcIlxuICAgICAgICAgICAgc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcbiAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJTZWxlY3QgcGFnZSBvZiBwZXJpb2RpYyBlbGVtZW50c1wiXG4gICAgICAgICAgICAocGFnZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJnZXRQYWdpbmF0b3JOZ0NsYXNzKClcIlxuICAgICAgICAgID5cbiAgICAgICAgICA8L21hdC1wYWdpbmF0b3I+XG4gICAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgICAqbmdJZj1cIlxuICAgICAgICAgICAgICAhKGlzTG9hZGluZyQgfCBhc3luYykgJiZcbiAgICAgICAgICAgICAgZGF0YVNvdXJjZT8uZGF0YSAmJlxuICAgICAgICAgICAgICBkYXRhU291cmNlLmRhdGEubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICBkYXRhPy5maWx0ZXJGblxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgIGNsYXNzPVwicGFnZS1udW1iZXItZGlzcGxheVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgY3VycmVudFBhZ2VOdW1iZXIgfX1cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gVE9PTFRJUCBQRVJTT05BTElaQURPIC0tPlxuICA8bGliLXRhYmxlLXRvb2x0aXBcbiAgICBbc3RhdGVdPVwidG9vbHRpcFN0YXRlXCJcbiAgICBbc3R5bGVzXT1cImdldFRvb2x0aXBTdHlsZXMoKVwiXG4gID48L2xpYi10YWJsZS10b29sdGlwPlxuPC9kaXY+XG4iXX0=
|