mis-crystal-design-system 18.0.19 → 18.0.20
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/esm2022/table/actions-cell/actions-cell.component.mjs +186 -121
- package/esm2022/table/table.module.mjs +6 -4
- package/fesm2022/mis-crystal-design-system-table.mjs +198 -133
- package/fesm2022/mis-crystal-design-system-table.mjs.map +1 -1
- package/package.json +13 -13
- package/table/actions-cell/actions-cell.component.d.ts +13 -2
- package/table/filter/filter.component.d.ts +1 -1
- package/table/table.module.d.ts +3 -1
|
@@ -1,178 +1,166 @@
|
|
|
1
|
-
import { Component, EventEmitter, Input, Output, HostListener } from "@angular/core";
|
|
1
|
+
import { Component, EventEmitter, Input, Output, HostListener, ViewChild } from "@angular/core";
|
|
2
|
+
import { ConnectionPositionPair, OverlayConfig } from "@angular/cdk/overlay";
|
|
3
|
+
import { TemplatePortal } from "@angular/cdk/portal";
|
|
2
4
|
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/
|
|
4
|
-
import * as i2 from "
|
|
5
|
-
|
|
5
|
+
import * as i1 from "@angular/cdk/overlay";
|
|
6
|
+
import * as i2 from "@angular/common";
|
|
7
|
+
import * as i3 from "mis-crystal-design-system/checkbox";
|
|
8
|
+
const _c0 = ["dropdownMenu"];
|
|
9
|
+
const _c1 = ["dropdownTrigger"];
|
|
10
|
+
const _c2 = a0 => ({ disabled: a0 });
|
|
6
11
|
function ActionsCellComponent_div_1_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
7
12
|
const _r1 = i0.ɵɵgetCurrentView();
|
|
8
|
-
i0.ɵɵelementStart(0, "div",
|
|
13
|
+
i0.ɵɵelementStart(0, "div", 9);
|
|
9
14
|
i0.ɵɵlistener("click", function ActionsCellComponent_div_1_div_1_Template_div_click_0_listener($event) { const item_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onActionClick(item_r2, $event)); });
|
|
10
|
-
i0.ɵɵelement(1, "img",
|
|
15
|
+
i0.ɵɵelement(1, "img", 10);
|
|
11
16
|
i0.ɵɵelementEnd();
|
|
12
17
|
} if (rf & 2) {
|
|
13
18
|
const item_r2 = ctx.$implicit;
|
|
14
19
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
15
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3,
|
|
20
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c2, ctx_r2.isDisabled(item_r2)));
|
|
16
21
|
i0.ɵɵadvance();
|
|
17
22
|
i0.ɵɵproperty("src", item_r2.icon, i0.ɵɵsanitizeUrl)("alt", item_r2.label);
|
|
18
23
|
} }
|
|
19
24
|
function ActionsCellComponent_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
20
|
-
i0.ɵɵelementStart(0, "div",
|
|
21
|
-
i0.ɵɵtemplate(1, ActionsCellComponent_div_1_div_1_Template, 2, 5, "div",
|
|
25
|
+
i0.ɵɵelementStart(0, "div", 7);
|
|
26
|
+
i0.ɵɵtemplate(1, ActionsCellComponent_div_1_div_1_Template, 2, 5, "div", 8);
|
|
22
27
|
i0.ɵɵelementEnd();
|
|
23
28
|
} if (rf & 2) {
|
|
24
29
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
25
30
|
i0.ɵɵadvance();
|
|
26
31
|
i0.ɵɵproperty("ngForOf", ctx_r2.actionItems)("ngForTrackBy", ctx_r2.trackByAction);
|
|
27
32
|
} }
|
|
28
|
-
function
|
|
29
|
-
i0.ɵɵ
|
|
30
|
-
i0.ɵɵ
|
|
33
|
+
function ActionsCellComponent_div_2_Template(rf, ctx) { if (rf & 1) {
|
|
34
|
+
const _r4 = i0.ɵɵgetCurrentView();
|
|
35
|
+
i0.ɵɵelementStart(0, "div", 11)(1, "div", 12, 1);
|
|
36
|
+
i0.ɵɵlistener("click", function ActionsCellComponent_div_2_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleDropdown($event)); });
|
|
37
|
+
i0.ɵɵnamespaceSVG();
|
|
38
|
+
i0.ɵɵelementStart(3, "svg", 13);
|
|
39
|
+
i0.ɵɵelement(4, "circle", 14)(5, "circle", 15)(6, "circle", 16);
|
|
40
|
+
i0.ɵɵelementEnd()()();
|
|
41
|
+
} }
|
|
42
|
+
function ActionsCellComponent_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
43
|
+
const _r5 = i0.ɵɵgetCurrentView();
|
|
44
|
+
i0.ɵɵelementStart(0, "div", 17)(1, "mis-checkbox", 18);
|
|
45
|
+
i0.ɵɵlistener("valueChange", function ActionsCellComponent_div_3_Template_mis_checkbox_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onCheckboxChange($event)); });
|
|
46
|
+
i0.ɵɵelementEnd()();
|
|
47
|
+
} if (rf & 2) {
|
|
48
|
+
const ctx_r2 = i0.ɵɵnextContext();
|
|
49
|
+
i0.ɵɵadvance();
|
|
50
|
+
i0.ɵɵproperty("checked", ctx_r2.isChecked)("disabled", ctx_r2.disable ? ctx_r2.disable(ctx_r2.data) : false);
|
|
51
|
+
} }
|
|
52
|
+
function ActionsCellComponent_ng_template_4_div_1_ng_container_1_span_1_Template(rf, ctx) { if (rf & 1) {
|
|
53
|
+
i0.ɵɵelementStart(0, "span", 29);
|
|
54
|
+
i0.ɵɵelement(1, "img", 30);
|
|
31
55
|
i0.ɵɵelementEnd();
|
|
32
56
|
} if (rf & 2) {
|
|
33
|
-
const
|
|
57
|
+
const item_r7 = i0.ɵɵnextContext(2).$implicit;
|
|
34
58
|
i0.ɵɵadvance();
|
|
35
|
-
i0.ɵɵproperty("src",
|
|
59
|
+
i0.ɵɵproperty("src", item_r7.icon, i0.ɵɵsanitizeUrl);
|
|
36
60
|
} }
|
|
37
|
-
function
|
|
38
|
-
i0.ɵɵelementStart(0, "span",
|
|
39
|
-
i0.ɵɵelement(1, "img",
|
|
61
|
+
function ActionsCellComponent_ng_template_4_div_1_ng_container_1_div_7_div_1_span_1_Template(rf, ctx) { if (rf & 1) {
|
|
62
|
+
i0.ɵɵelementStart(0, "span", 29);
|
|
63
|
+
i0.ɵɵelement(1, "img", 30);
|
|
40
64
|
i0.ɵɵelementEnd();
|
|
41
65
|
} if (rf & 2) {
|
|
42
|
-
const
|
|
66
|
+
const child_r9 = i0.ɵɵnextContext().$implicit;
|
|
43
67
|
i0.ɵɵadvance();
|
|
44
|
-
i0.ɵɵproperty("src",
|
|
68
|
+
i0.ɵɵproperty("src", child_r9.icon, i0.ɵɵsanitizeUrl);
|
|
45
69
|
} }
|
|
46
|
-
function
|
|
47
|
-
const
|
|
48
|
-
i0.ɵɵelementStart(0, "div",
|
|
49
|
-
i0.ɵɵlistener("click", function
|
|
50
|
-
i0.ɵɵtemplate(1,
|
|
51
|
-
i0.ɵɵelementStart(2, "span",
|
|
70
|
+
function ActionsCellComponent_ng_template_4_div_1_ng_container_1_div_7_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
71
|
+
const _r8 = i0.ɵɵgetCurrentView();
|
|
72
|
+
i0.ɵɵelementStart(0, "div", 21);
|
|
73
|
+
i0.ɵɵlistener("click", function ActionsCellComponent_ng_template_4_div_1_ng_container_1_div_7_div_1_Template_div_click_0_listener($event) { const child_r9 = i0.ɵɵrestoreView(_r8).$implicit; const ctx_r2 = i0.ɵɵnextContext(5); return i0.ɵɵresetView(ctx_r2.onDropdownItemClick(child_r9, $event)); });
|
|
74
|
+
i0.ɵɵtemplate(1, ActionsCellComponent_ng_template_4_div_1_ng_container_1_div_7_div_1_span_1_Template, 2, 1, "span", 23);
|
|
75
|
+
i0.ɵɵelementStart(2, "span", 24);
|
|
52
76
|
i0.ɵɵtext(3);
|
|
53
77
|
i0.ɵɵelementEnd()();
|
|
54
78
|
} if (rf & 2) {
|
|
55
|
-
const
|
|
56
|
-
const ctx_r2 = i0.ɵɵnextContext(
|
|
57
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3,
|
|
79
|
+
const child_r9 = ctx.$implicit;
|
|
80
|
+
const ctx_r2 = i0.ɵɵnextContext(5);
|
|
81
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c2, ctx_r2.isDisabled(child_r9)));
|
|
58
82
|
i0.ɵɵadvance();
|
|
59
|
-
i0.ɵɵproperty("ngIf",
|
|
83
|
+
i0.ɵɵproperty("ngIf", child_r9.icon);
|
|
60
84
|
i0.ɵɵadvance(2);
|
|
61
|
-
i0.ɵɵtextInterpolate(
|
|
85
|
+
i0.ɵɵtextInterpolate(child_r9.label);
|
|
62
86
|
} }
|
|
63
|
-
function
|
|
64
|
-
i0.ɵɵelementStart(0, "div",
|
|
65
|
-
i0.ɵɵtemplate(1,
|
|
87
|
+
function ActionsCellComponent_ng_template_4_div_1_ng_container_1_div_7_Template(rf, ctx) { if (rf & 1) {
|
|
88
|
+
i0.ɵɵelementStart(0, "div", 31);
|
|
89
|
+
i0.ɵɵtemplate(1, ActionsCellComponent_ng_template_4_div_1_ng_container_1_div_7_div_1_Template, 4, 5, "div", 20);
|
|
66
90
|
i0.ɵɵelementEnd();
|
|
67
91
|
} if (rf & 2) {
|
|
68
|
-
const
|
|
69
|
-
i0.ɵɵproperty("ngClass",
|
|
92
|
+
const item_r7 = i0.ɵɵnextContext(2).$implicit;
|
|
93
|
+
i0.ɵɵproperty("ngClass", item_r7.submenuAlign);
|
|
70
94
|
i0.ɵɵadvance();
|
|
71
|
-
i0.ɵɵproperty("ngForOf",
|
|
95
|
+
i0.ɵɵproperty("ngForOf", item_r7.children);
|
|
72
96
|
} }
|
|
73
|
-
function
|
|
97
|
+
function ActionsCellComponent_ng_template_4_div_1_ng_container_1_Template(rf, ctx) { if (rf & 1) {
|
|
74
98
|
i0.ɵɵelementContainerStart(0);
|
|
75
|
-
i0.ɵɵtemplate(1,
|
|
76
|
-
i0.ɵɵelementStart(2, "span",
|
|
99
|
+
i0.ɵɵtemplate(1, ActionsCellComponent_ng_template_4_div_1_ng_container_1_span_1_Template, 2, 1, "span", 23);
|
|
100
|
+
i0.ɵɵelementStart(2, "span", 24);
|
|
77
101
|
i0.ɵɵtext(3);
|
|
78
102
|
i0.ɵɵelementEnd();
|
|
79
|
-
i0.ɵɵelementStart(4, "span",
|
|
103
|
+
i0.ɵɵelementStart(4, "span", 25);
|
|
80
104
|
i0.ɵɵnamespaceSVG();
|
|
81
|
-
i0.ɵɵelementStart(5, "svg",
|
|
82
|
-
i0.ɵɵelement(6, "path",
|
|
105
|
+
i0.ɵɵelementStart(5, "svg", 26);
|
|
106
|
+
i0.ɵɵelement(6, "path", 27);
|
|
83
107
|
i0.ɵɵelementEnd()();
|
|
84
|
-
i0.ɵɵtemplate(7,
|
|
108
|
+
i0.ɵɵtemplate(7, ActionsCellComponent_ng_template_4_div_1_ng_container_1_div_7_Template, 2, 2, "div", 28);
|
|
85
109
|
i0.ɵɵelementContainerEnd();
|
|
86
110
|
} if (rf & 2) {
|
|
87
|
-
const
|
|
111
|
+
const item_r7 = i0.ɵɵnextContext().$implicit;
|
|
88
112
|
i0.ɵɵadvance();
|
|
89
|
-
i0.ɵɵproperty("ngIf",
|
|
113
|
+
i0.ɵɵproperty("ngIf", item_r7.icon);
|
|
90
114
|
i0.ɵɵadvance(2);
|
|
91
|
-
i0.ɵɵtextInterpolate(
|
|
115
|
+
i0.ɵɵtextInterpolate(item_r7.label);
|
|
92
116
|
i0.ɵɵadvance(4);
|
|
93
|
-
i0.ɵɵproperty("ngIf",
|
|
117
|
+
i0.ɵɵproperty("ngIf", item_r7.showSubmenu);
|
|
94
118
|
} }
|
|
95
|
-
function
|
|
96
|
-
i0.ɵɵelementStart(0, "span",
|
|
97
|
-
i0.ɵɵelement(1, "img",
|
|
119
|
+
function ActionsCellComponent_ng_template_4_div_1_ng_template_2_span_0_Template(rf, ctx) { if (rf & 1) {
|
|
120
|
+
i0.ɵɵelementStart(0, "span", 29);
|
|
121
|
+
i0.ɵɵelement(1, "img", 30);
|
|
98
122
|
i0.ɵɵelementEnd();
|
|
99
123
|
} if (rf & 2) {
|
|
100
|
-
const
|
|
124
|
+
const item_r7 = i0.ɵɵnextContext(2).$implicit;
|
|
101
125
|
i0.ɵɵadvance();
|
|
102
|
-
i0.ɵɵproperty("src",
|
|
126
|
+
i0.ɵɵproperty("src", item_r7.icon, i0.ɵɵsanitizeUrl);
|
|
103
127
|
} }
|
|
104
|
-
function
|
|
105
|
-
i0.ɵɵtemplate(0,
|
|
106
|
-
i0.ɵɵelementStart(1, "span",
|
|
128
|
+
function ActionsCellComponent_ng_template_4_div_1_ng_template_2_Template(rf, ctx) { if (rf & 1) {
|
|
129
|
+
i0.ɵɵtemplate(0, ActionsCellComponent_ng_template_4_div_1_ng_template_2_span_0_Template, 2, 1, "span", 23);
|
|
130
|
+
i0.ɵɵelementStart(1, "span", 24);
|
|
107
131
|
i0.ɵɵtext(2);
|
|
108
132
|
i0.ɵɵelementEnd();
|
|
109
133
|
} if (rf & 2) {
|
|
110
|
-
const
|
|
111
|
-
i0.ɵɵproperty("ngIf",
|
|
134
|
+
const item_r7 = i0.ɵɵnextContext().$implicit;
|
|
135
|
+
i0.ɵɵproperty("ngIf", item_r7.icon);
|
|
112
136
|
i0.ɵɵadvance(2);
|
|
113
|
-
i0.ɵɵtextInterpolate(
|
|
114
|
-
} }
|
|
115
|
-
function ActionsCellComponent_div_2_div_6_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
116
|
-
const _r5 = i0.ɵɵgetCurrentView();
|
|
117
|
-
i0.ɵɵelementStart(0, "div", 18);
|
|
118
|
-
i0.ɵɵlistener("click", function ActionsCellComponent_div_2_div_6_div_1_Template_div_click_0_listener($event) { const item_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onDropdownItemClick(item_r6, $event)); });
|
|
119
|
-
i0.ɵɵtemplate(1, ActionsCellComponent_div_2_div_6_div_1_ng_container_1_Template, 8, 3, "ng-container", 19)(2, ActionsCellComponent_div_2_div_6_div_1_ng_template_2_Template, 3, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
120
|
-
i0.ɵɵelementEnd();
|
|
121
|
-
} if (rf & 2) {
|
|
122
|
-
const item_r6 = ctx.$implicit;
|
|
123
|
-
const noChildren_r9 = i0.ɵɵreference(3);
|
|
124
|
-
const ctx_r2 = i0.ɵɵnextContext(3);
|
|
125
|
-
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c0, ctx_r2.isDisabled(item_r6)));
|
|
126
|
-
i0.ɵɵadvance();
|
|
127
|
-
i0.ɵɵproperty("ngIf", item_r6.children == null ? null : item_r6.children.length)("ngIfElse", noChildren_r9);
|
|
137
|
+
i0.ɵɵtextInterpolate(item_r7.label);
|
|
128
138
|
} }
|
|
129
|
-
function
|
|
130
|
-
i0.ɵɵ
|
|
131
|
-
i0.ɵɵ
|
|
139
|
+
function ActionsCellComponent_ng_template_4_div_1_Template(rf, ctx) { if (rf & 1) {
|
|
140
|
+
const _r6 = i0.ɵɵgetCurrentView();
|
|
141
|
+
i0.ɵɵelementStart(0, "div", 21);
|
|
142
|
+
i0.ɵɵlistener("click", function ActionsCellComponent_ng_template_4_div_1_Template_div_click_0_listener($event) { const item_r7 = i0.ɵɵrestoreView(_r6).$implicit; const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.onDropdownItemClick(item_r7, $event)); });
|
|
143
|
+
i0.ɵɵtemplate(1, ActionsCellComponent_ng_template_4_div_1_ng_container_1_Template, 8, 3, "ng-container", 22)(2, ActionsCellComponent_ng_template_4_div_1_ng_template_2_Template, 3, 2, "ng-template", null, 2, i0.ɵɵtemplateRefExtractor);
|
|
132
144
|
i0.ɵɵelementEnd();
|
|
133
145
|
} if (rf & 2) {
|
|
146
|
+
const item_r7 = ctx.$implicit;
|
|
147
|
+
const noChildren_r10 = i0.ɵɵreference(3);
|
|
134
148
|
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
135
|
-
i0.ɵɵproperty("ngClass", ctx_r2.
|
|
149
|
+
i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(3, _c2, ctx_r2.isDisabled(item_r7)));
|
|
136
150
|
i0.ɵɵadvance();
|
|
137
|
-
i0.ɵɵproperty("
|
|
151
|
+
i0.ɵɵproperty("ngIf", item_r7.children == null ? null : item_r7.children.length)("ngIfElse", noChildren_r10);
|
|
138
152
|
} }
|
|
139
|
-
function
|
|
140
|
-
|
|
141
|
-
i0.ɵɵ
|
|
142
|
-
i0.ɵɵlistener("click", function ActionsCellComponent_div_2_Template_div_click_1_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.toggleDropdown($event)); });
|
|
143
|
-
i0.ɵɵnamespaceSVG();
|
|
144
|
-
i0.ɵɵelementStart(2, "svg", 11);
|
|
145
|
-
i0.ɵɵelement(3, "circle", 12)(4, "circle", 13)(5, "circle", 14);
|
|
146
|
-
i0.ɵɵelementEnd()();
|
|
147
|
-
i0.ɵɵtemplate(6, ActionsCellComponent_div_2_div_6_Template, 2, 2, "div", 15);
|
|
153
|
+
function ActionsCellComponent_ng_template_4_Template(rf, ctx) { if (rf & 1) {
|
|
154
|
+
i0.ɵɵelementStart(0, "div", 19);
|
|
155
|
+
i0.ɵɵtemplate(1, ActionsCellComponent_ng_template_4_div_1_Template, 4, 5, "div", 20);
|
|
148
156
|
i0.ɵɵelementEnd();
|
|
149
157
|
} if (rf & 2) {
|
|
150
158
|
const ctx_r2 = i0.ɵɵnextContext();
|
|
151
|
-
i0.ɵɵ
|
|
152
|
-
i0.ɵɵproperty("ngIf", ctx_r2.isDropdownOpen);
|
|
153
|
-
} }
|
|
154
|
-
function ActionsCellComponent_div_3_Template(rf, ctx) { if (rf & 1) {
|
|
155
|
-
const _r10 = i0.ɵɵgetCurrentView();
|
|
156
|
-
i0.ɵɵelementStart(0, "div", 29)(1, "mis-checkbox", 30);
|
|
157
|
-
i0.ɵɵlistener("valueChange", function ActionsCellComponent_div_3_Template_mis_checkbox_valueChange_1_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onCheckboxChange($event)); });
|
|
158
|
-
i0.ɵɵelementEnd()();
|
|
159
|
-
} if (rf & 2) {
|
|
160
|
-
const ctx_r2 = i0.ɵɵnextContext();
|
|
159
|
+
i0.ɵɵproperty("ngClass", ctx_r2.menuAlign);
|
|
161
160
|
i0.ɵɵadvance();
|
|
162
|
-
i0.ɵɵproperty("
|
|
161
|
+
i0.ɵɵproperty("ngForOf", ctx_r2.actionItems);
|
|
163
162
|
} }
|
|
164
163
|
export class ActionsCellComponent {
|
|
165
|
-
constructor() {
|
|
166
|
-
this.isChecked = false;
|
|
167
|
-
this.actionClick = new EventEmitter();
|
|
168
|
-
this.isDropdownOpen = false;
|
|
169
|
-
this.actionItems = [];
|
|
170
|
-
this.actionType = "inline";
|
|
171
|
-
this.submenuAlign = "right";
|
|
172
|
-
this.menuAlign = "left";
|
|
173
|
-
this._style = {};
|
|
174
|
-
this.containerStyle = {};
|
|
175
|
-
}
|
|
176
164
|
set rowData(value) {
|
|
177
165
|
if (this.actionType === 'checkbox') {
|
|
178
166
|
// For checkbox, keep the rowData structure
|
|
@@ -195,7 +183,24 @@ export class ActionsCellComponent {
|
|
|
195
183
|
this.disable = config.disable;
|
|
196
184
|
this.processStyle();
|
|
197
185
|
}
|
|
186
|
+
constructor(overlay, viewContainerRef) {
|
|
187
|
+
this.overlay = overlay;
|
|
188
|
+
this.viewContainerRef = viewContainerRef;
|
|
189
|
+
this.isChecked = false;
|
|
190
|
+
this.actionClick = new EventEmitter();
|
|
191
|
+
this.isDropdownOpen = false;
|
|
192
|
+
this.actionItems = [];
|
|
193
|
+
this.actionType = "inline";
|
|
194
|
+
this.submenuAlign = "right";
|
|
195
|
+
this.menuAlign = "left";
|
|
196
|
+
this._style = {};
|
|
197
|
+
this.containerStyle = {};
|
|
198
|
+
this.overlayRef = null;
|
|
199
|
+
}
|
|
198
200
|
ngOnInit() { }
|
|
201
|
+
ngOnDestroy() {
|
|
202
|
+
this.closeDropdown();
|
|
203
|
+
}
|
|
199
204
|
processStyle() {
|
|
200
205
|
// Remove width from style to avoid conflicts with table column width
|
|
201
206
|
const { width, ...restStyle } = this._style;
|
|
@@ -222,14 +227,60 @@ export class ActionsCellComponent {
|
|
|
222
227
|
}
|
|
223
228
|
onDocumentClick() {
|
|
224
229
|
if (this.isDropdownOpen) {
|
|
225
|
-
this.
|
|
230
|
+
this.closeDropdown();
|
|
226
231
|
}
|
|
227
232
|
}
|
|
228
233
|
toggleDropdown(event) {
|
|
229
234
|
event.stopPropagation();
|
|
230
|
-
this.isDropdownOpen
|
|
231
|
-
|
|
235
|
+
if (this.isDropdownOpen) {
|
|
236
|
+
this.closeDropdown();
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
this.openDropdown();
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
openDropdown() {
|
|
243
|
+
if (!this.dropdownTrigger || !this.dropdownMenu)
|
|
244
|
+
return;
|
|
245
|
+
// Close all submenus when opening main menu
|
|
232
246
|
this.actionItems.forEach((item) => (item.showSubmenu = false));
|
|
247
|
+
const positions = this.getDropdownPositions();
|
|
248
|
+
const overlayConfig = new OverlayConfig({
|
|
249
|
+
hasBackdrop: true,
|
|
250
|
+
backdropClass: 'cdk-overlay-transparent-backdrop',
|
|
251
|
+
positionStrategy: this.overlay
|
|
252
|
+
.position()
|
|
253
|
+
.flexibleConnectedTo(this.dropdownTrigger)
|
|
254
|
+
.withPositions(positions)
|
|
255
|
+
.withPush(true),
|
|
256
|
+
scrollStrategy: this.overlay.scrollStrategies.reposition()
|
|
257
|
+
});
|
|
258
|
+
this.overlayRef = this.overlay.create(overlayConfig);
|
|
259
|
+
const portal = new TemplatePortal(this.dropdownMenu, this.viewContainerRef);
|
|
260
|
+
this.overlayRef.attach(portal);
|
|
261
|
+
this.overlayRef.backdropClick().subscribe(() => {
|
|
262
|
+
this.closeDropdown();
|
|
263
|
+
});
|
|
264
|
+
this.isDropdownOpen = true;
|
|
265
|
+
}
|
|
266
|
+
closeDropdown() {
|
|
267
|
+
if (this.overlayRef) {
|
|
268
|
+
this.overlayRef.dispose();
|
|
269
|
+
this.overlayRef = null;
|
|
270
|
+
}
|
|
271
|
+
this.isDropdownOpen = false;
|
|
272
|
+
}
|
|
273
|
+
getDropdownPositions() {
|
|
274
|
+
const positions = [];
|
|
275
|
+
if (this.menuAlign === 'left') {
|
|
276
|
+
// Menu opens to the left of trigger
|
|
277
|
+
positions.push(new ConnectionPositionPair({ originX: 'start', originY: 'bottom' }, { overlayX: 'start', overlayY: 'top' }, 0, 4), new ConnectionPositionPair({ originX: 'start', originY: 'top' }, { overlayX: 'start', overlayY: 'bottom' }, 0, -4));
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
// Menu opens to the right of trigger
|
|
281
|
+
positions.push(new ConnectionPositionPair({ originX: 'end', originY: 'bottom' }, { overlayX: 'end', overlayY: 'top' }, 0, 4), new ConnectionPositionPair({ originX: 'end', originY: 'top' }, { overlayX: 'end', overlayY: 'bottom' }, 0, -4));
|
|
282
|
+
}
|
|
283
|
+
return positions;
|
|
233
284
|
}
|
|
234
285
|
onDropdownItemClick(item, event) {
|
|
235
286
|
event.stopPropagation();
|
|
@@ -249,7 +300,7 @@ export class ActionsCellComponent {
|
|
|
249
300
|
if (item.action)
|
|
250
301
|
item.action(this.data);
|
|
251
302
|
this.actionClick.emit({ item, data: this.data });
|
|
252
|
-
this.
|
|
303
|
+
this.closeDropdown(); // Only close if action was executed
|
|
253
304
|
}
|
|
254
305
|
}
|
|
255
306
|
onCheckboxChange(event) {
|
|
@@ -265,13 +316,21 @@ export class ActionsCellComponent {
|
|
|
265
316
|
}
|
|
266
317
|
return false;
|
|
267
318
|
}
|
|
268
|
-
static { this.ɵfac = function ActionsCellComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionsCellComponent)(); }; }
|
|
269
|
-
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionsCellComponent, selectors: [["mis-actions-cell"]],
|
|
319
|
+
static { this.ɵfac = function ActionsCellComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || ActionsCellComponent)(i0.ɵɵdirectiveInject(i1.Overlay), i0.ɵɵdirectiveInject(i0.ViewContainerRef)); }; }
|
|
320
|
+
static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: ActionsCellComponent, selectors: [["mis-actions-cell"]], viewQuery: function ActionsCellComponent_Query(rf, ctx) { if (rf & 1) {
|
|
321
|
+
i0.ɵɵviewQuery(_c0, 5);
|
|
322
|
+
i0.ɵɵviewQuery(_c1, 5);
|
|
323
|
+
} if (rf & 2) {
|
|
324
|
+
let _t;
|
|
325
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropdownMenu = _t.first);
|
|
326
|
+
i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.dropdownTrigger = _t.first);
|
|
327
|
+
} }, hostBindings: function ActionsCellComponent_HostBindings(rf, ctx) { if (rf & 1) {
|
|
270
328
|
i0.ɵɵlistener("click", function ActionsCellComponent_click_HostBindingHandler() { return ctx.onDocumentClick(); }, false, i0.ɵɵresolveDocument);
|
|
271
|
-
} }, inputs: { rowData: "rowData", isChecked: "isChecked", config: "config" }, outputs: { actionClick: "actionClick" }, decls:
|
|
272
|
-
i0.ɵɵelementStart(0, "div",
|
|
273
|
-
i0.ɵɵtemplate(1, ActionsCellComponent_div_1_Template, 2, 2, "div",
|
|
329
|
+
} }, inputs: { rowData: "rowData", isChecked: "isChecked", config: "config" }, outputs: { actionClick: "actionClick" }, decls: 6, vars: 4, consts: [["dropdownMenu", ""], ["dropdownTrigger", ""], ["noChildren", ""], [1, "actions-cell-container", 3, "ngStyle"], ["class", "inline-actions", 4, "ngIf"], ["class", "dropdown-actions", 4, "ngIf"], ["class", "checkbox-actions", 4, "ngIf"], [1, "inline-actions"], ["class", "action-item", 3, "ngClass", "click", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "action-item", 3, "click", "ngClass"], [1, "action-icon-svg", 3, "src", "alt"], [1, "dropdown-actions"], ["title", "More actions", 1, "dropdown-trigger", 3, "click"], ["width", "20", "height", "20", "viewBox", "0 0 20 20", "fill", "none"], ["cx", "10", "cy", "4", "r", "2", "fill", "#333"], ["cx", "10", "cy", "10", "r", "2", "fill", "#333"], ["cx", "10", "cy", "16", "r", "2", "fill", "#333"], [1, "checkbox-actions"], [3, "valueChange", "checked", "disabled"], [1, "dropdown-menu-overlay", 3, "ngClass"], ["class", "dropdown-menu-item", 3, "ngClass", "click", 4, "ngFor", "ngForOf"], [1, "dropdown-menu-item", 3, "click", "ngClass"], [4, "ngIf", "ngIfElse"], ["class", "dropdown-icon", 4, "ngIf"], [1, "dropdown-label"], [1, "submenu-arrow"], ["width", "20", "height", "20", "viewBox", "0 0 24 24", "fill", "none"], ["d", "M9 6L15 12L9 18", "stroke", "#0D1321", "stroke-width", "2", "stroke-linecap", "round", "stroke-linejoin", "round"], ["class", "dropdown-submenu", 3, "ngClass", 4, "ngIf"], [1, "dropdown-icon"], [3, "src"], [1, "dropdown-submenu", 3, "ngClass"]], template: function ActionsCellComponent_Template(rf, ctx) { if (rf & 1) {
|
|
330
|
+
i0.ɵɵelementStart(0, "div", 3);
|
|
331
|
+
i0.ɵɵtemplate(1, ActionsCellComponent_div_1_Template, 2, 2, "div", 4)(2, ActionsCellComponent_div_2_Template, 7, 0, "div", 5)(3, ActionsCellComponent_div_3_Template, 2, 2, "div", 6);
|
|
274
332
|
i0.ɵɵelementEnd();
|
|
333
|
+
i0.ɵɵtemplate(4, ActionsCellComponent_ng_template_4_Template, 2, 2, "ng-template", null, 0, i0.ɵɵtemplateRefExtractor);
|
|
275
334
|
} if (rf & 2) {
|
|
276
335
|
i0.ɵɵproperty("ngStyle", ctx.containerStyle);
|
|
277
336
|
i0.ɵɵadvance();
|
|
@@ -280,12 +339,12 @@ export class ActionsCellComponent {
|
|
|
280
339
|
i0.ɵɵproperty("ngIf", ctx.actionType === "dropdown");
|
|
281
340
|
i0.ɵɵadvance();
|
|
282
341
|
i0.ɵɵproperty("ngIf", ctx.actionType === "checkbox");
|
|
283
|
-
} }, dependencies: [
|
|
342
|
+
} }, dependencies: [i2.NgClass, i2.NgForOf, i2.NgIf, i2.NgStyle, i3.CheckboxComponent], styles: [".actions-cell-container[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:100%;height:100%;position:relative;box-sizing:border-box}.inline-actions[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:12px;width:100%;height:100%;flex-wrap:nowrap;padding:4px 0;flex-direction:row}.action-item[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;height:20px;border-radius:4px;cursor:pointer;transition:all .2s ease;background-color:transparent;border:none;outline:none;flex-shrink:0;min-height:20px}.action-item[_ngcontent-%COMP%]:hover:not(.disabled){background-color:#0000000a;transform:scale(1.05)}.action-item[_ngcontent-%COMP%]:active:not(.disabled){transform:scale(.95)}.action-item.disabled[_ngcontent-%COMP%]{opacity:.5;cursor:not-allowed}.action-item.disabled[_ngcontent-%COMP%]:hover{background-color:transparent;transform:none}.action-icon[_ngcontent-%COMP%]{font-size:16px;color:#666;display:flex;align-items:center;justify-content:center;width:100%;height:100%}.action-icon-svg[_ngcontent-%COMP%]{width:18px;height:18px;object-fit:contain;filter:brightness(0) saturate(100%) invert(40%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(.6) contrast(1);flex-shrink:0}.action-icon-svg[_ngcontent-%COMP%]:hover{filter:brightness(0) saturate(100%) invert(0%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(0) contrast(1)}.dropdown-trigger[_ngcontent-%COMP%]{cursor:pointer;display:flex;align-items:center;justify-content:center}.dropdown-actions[_ngcontent-%COMP%]{position:relative}.dropdown-menu-overlay[_ngcontent-%COMP%]{width:232px;background:#fff;border-radius:12px;box-shadow:0 4px 24px #0000001f;padding:8px 0;z-index:1000}.dropdown-menu-item.disabled[_ngcontent-%COMP%]{color:#aaa;cursor:not-allowed}.dropdown-menu-item[_ngcontent-%COMP%]:hover:not(.disabled), .dropdown-menu-item.has-submenu[_ngcontent-%COMP%]:hover{background:#f5f5f5}.dropdown-menu-item[_ngcontent-%COMP%]{display:flex;align-items:center;padding:10px 18px;cursor:pointer;font-size:14px;position:relative}.dropdown-menu-item[_ngcontent-%COMP%] .dropdown-label[_ngcontent-%COMP%]{flex:1;margin-left:8px}.dropdown-menu-item[_ngcontent-%COMP%] .submenu-arrow[_ngcontent-%COMP%]{margin-left:auto;width:16px;height:16px}.dropdown-submenu[_ngcontent-%COMP%]{position:absolute;top:0;min-width:132px;background:#fff;border-radius:12px;box-shadow:0 4px 24px #0000001f;padding:8px 0;z-index:1001}.dropdown-submenu.right[_ngcontent-%COMP%]{left:100%;margin-left:4px}.dropdown-submenu.left[_ngcontent-%COMP%]{left:auto;right:100%;background-color:#fff;border:1px solid #ddd;z-index:9999;position:absolute;margin-right:4px}.submenu-arrow[_ngcontent-%COMP%]{display:flex;align-items:center;margin-left:auto;z-index:9999}.dropdown-icon[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center}.dropdown-menu-item.disabled[_ngcontent-%COMP%]{color:#181f33;filter:grayscale(100%) opacity(.3);cursor:not-allowed}.checkbox-actions[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:100%;height:100%}"] }); }
|
|
284
343
|
}
|
|
285
344
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(ActionsCellComponent, [{
|
|
286
345
|
type: Component,
|
|
287
|
-
args: [{ selector: "mis-actions-cell", template: "<div class=\"actions-cell-container\" [ngStyle]=\"containerStyle\">\n <!-- Inline Actions -->\n <div *ngIf=\"actionType === 'inline'\" class=\"inline-actions\">\n <div\n *ngFor=\"let item of actionItems; trackBy: trackByAction\"\n class=\"action-item\"\n [ngClass]=\"{ disabled: isDisabled(item) }\"\n (click)=\"onActionClick(item, $event)\"\n >\n <img [src]=\"item.icon\" [alt]=\"item.label\" class=\"action-icon-svg\" />\n </div>\n </div>\n\n <!-- Dropdown Actions -->\n <div *ngIf=\"actionType === 'dropdown'\" class=\"dropdown-actions\">\n <div class=\"dropdown-trigger\" (click)=\"toggleDropdown($event)\" title=\"More actions\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"4\" r=\"2\" fill=\"#333\" />\n <circle cx=\"10\" cy=\"10\" r=\"2\" fill=\"#333\" />\n <circle cx=\"10\" cy=\"16\" r=\"2\" fill=\"#333\" />\n </svg>\n </div>\n\n
|
|
288
|
-
}],
|
|
346
|
+
args: [{ selector: "mis-actions-cell", template: "<div class=\"actions-cell-container\" [ngStyle]=\"containerStyle\">\n <!-- Inline Actions -->\n <div *ngIf=\"actionType === 'inline'\" class=\"inline-actions\">\n <div\n *ngFor=\"let item of actionItems; trackBy: trackByAction\"\n class=\"action-item\"\n [ngClass]=\"{ disabled: isDisabled(item) }\"\n (click)=\"onActionClick(item, $event)\"\n >\n <img [src]=\"item.icon\" [alt]=\"item.label\" class=\"action-icon-svg\" />\n </div>\n </div>\n\n <!-- Dropdown Actions -->\n <div *ngIf=\"actionType === 'dropdown'\" class=\"dropdown-actions\">\n <div #dropdownTrigger class=\"dropdown-trigger\" (click)=\"toggleDropdown($event)\" title=\"More actions\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"4\" r=\"2\" fill=\"#333\" />\n <circle cx=\"10\" cy=\"10\" r=\"2\" fill=\"#333\" />\n <circle cx=\"10\" cy=\"16\" r=\"2\" fill=\"#333\" />\n </svg>\n </div>\n </div>\n\n <!-- Checkbox Actions -->\n <div *ngIf=\"actionType === 'checkbox'\" class=\"checkbox-actions\">\n <mis-checkbox [checked]=\"isChecked\" (valueChange)=\"onCheckboxChange($event)\" [disabled]=\"disable ? disable(data) : false\"\n > </mis-checkbox>\n </div>\n</div>\n\n<!-- CDK Overlay Template for Dropdown Menu -->\n<ng-template #dropdownMenu>\n <div class=\"dropdown-menu-overlay\" [ngClass]=\"menuAlign\">\n <div\n class=\"dropdown-menu-item\"\n *ngFor=\"let item of actionItems\"\n (click)=\"onDropdownItemClick(item, $event)\"\n [ngClass]=\"{ disabled: isDisabled(item) }\"\n >\n <ng-container *ngIf=\"item.children?.length; else noChildren\">\n <span class=\"dropdown-icon\" *ngIf=\"item.icon\">\n <img [src]=\"item.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ item.label }}</span>\n <span class=\"submenu-arrow\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\">\n <path d=\"M9 6L15 12L9 18\" stroke=\"#0D1321\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\n </svg>\n </span>\n\n <!-- DYNAMIC SUBMENU -->\n <div class=\"dropdown-submenu\" [ngClass]=\"item.submenuAlign\" *ngIf=\"item.showSubmenu\">\n <div\n class=\"dropdown-menu-item\"\n *ngFor=\"let child of item.children\"\n [ngClass]=\"{ disabled: isDisabled(child) }\"\n (click)=\"onDropdownItemClick(child, $event)\"\n >\n <span class=\"dropdown-icon\" *ngIf=\"child.icon\">\n <img [src]=\"child.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ child.label }}</span>\n </div>\n </div>\n </ng-container>\n\n <ng-template #noChildren>\n <span class=\"dropdown-icon\" *ngIf=\"item.icon\">\n <img [src]=\"item.icon\" />\n </span>\n <span class=\"dropdown-label\">{{ item.label }}</span>\n </ng-template>\n </div>\n </div>\n</ng-template>\n", styles: [".actions-cell-container{display:flex;align-items:center;justify-content:center;width:100%;height:100%;position:relative;box-sizing:border-box}.inline-actions{display:flex;align-items:center;justify-content:center;gap:12px;width:100%;height:100%;flex-wrap:nowrap;padding:4px 0;flex-direction:row}.action-item{display:flex;align-items:center;justify-content:center;height:20px;border-radius:4px;cursor:pointer;transition:all .2s ease;background-color:transparent;border:none;outline:none;flex-shrink:0;min-height:20px}.action-item:hover:not(.disabled){background-color:#0000000a;transform:scale(1.05)}.action-item:active:not(.disabled){transform:scale(.95)}.action-item.disabled{opacity:.5;cursor:not-allowed}.action-item.disabled:hover{background-color:transparent;transform:none}.action-icon{font-size:16px;color:#666;display:flex;align-items:center;justify-content:center;width:100%;height:100%}.action-icon-svg{width:18px;height:18px;object-fit:contain;filter:brightness(0) saturate(100%) invert(40%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(.6) contrast(1);flex-shrink:0}.action-icon-svg:hover{filter:brightness(0) saturate(100%) invert(0%) sepia(0%) saturate(0%) hue-rotate(0deg) brightness(0) contrast(1)}.dropdown-trigger{cursor:pointer;display:flex;align-items:center;justify-content:center}.dropdown-actions{position:relative}.dropdown-menu-overlay{width:232px;background:#fff;border-radius:12px;box-shadow:0 4px 24px #0000001f;padding:8px 0;z-index:1000}.dropdown-menu-item.disabled{color:#aaa;cursor:not-allowed}.dropdown-menu-item:hover:not(.disabled),.dropdown-menu-item.has-submenu:hover{background:#f5f5f5}.dropdown-menu-item{display:flex;align-items:center;padding:10px 18px;cursor:pointer;font-size:14px;position:relative}.dropdown-menu-item .dropdown-label{flex:1;margin-left:8px}.dropdown-menu-item .submenu-arrow{margin-left:auto;width:16px;height:16px}.dropdown-submenu{position:absolute;top:0;min-width:132px;background:#fff;border-radius:12px;box-shadow:0 4px 24px #0000001f;padding:8px 0;z-index:1001}.dropdown-submenu.right{left:100%;margin-left:4px}.dropdown-submenu.left{left:auto;right:100%;background-color:#fff;border:1px solid #ddd;z-index:9999;position:absolute;margin-right:4px}.submenu-arrow{display:flex;align-items:center;margin-left:auto;z-index:9999}.dropdown-icon{display:flex;justify-content:center;align-items:center}.dropdown-menu-item.disabled{color:#181f33;filter:grayscale(100%) opacity(.3);cursor:not-allowed}.checkbox-actions{display:flex;align-items:center;justify-content:center;width:100%;height:100%}\n"] }]
|
|
347
|
+
}], () => [{ type: i1.Overlay }, { type: i0.ViewContainerRef }], { rowData: [{
|
|
289
348
|
type: Input
|
|
290
349
|
}], isChecked: [{
|
|
291
350
|
type: Input
|
|
@@ -293,9 +352,15 @@ export class ActionsCellComponent {
|
|
|
293
352
|
type: Input
|
|
294
353
|
}], actionClick: [{
|
|
295
354
|
type: Output
|
|
355
|
+
}], dropdownMenu: [{
|
|
356
|
+
type: ViewChild,
|
|
357
|
+
args: ['dropdownMenu', { static: false }]
|
|
358
|
+
}], dropdownTrigger: [{
|
|
359
|
+
type: ViewChild,
|
|
360
|
+
args: ['dropdownTrigger', { static: false }]
|
|
296
361
|
}], onDocumentClick: [{
|
|
297
362
|
type: HostListener,
|
|
298
363
|
args: ["document:click"]
|
|
299
364
|
}] }); })();
|
|
300
365
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(ActionsCellComponent, { className: "ActionsCellComponent" }); })();
|
|
301
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL3RhYmxlL2FjdGlvbnMtY2VsbC9hY3Rpb25zLWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvYWN0aW9ucy1jZWxsL2FjdGlvbnMtY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztJQ0d6Riw4QkFLQztJQURDLG9OQUFTLHFDQUEyQixLQUFDO0lBRXJDLHlCQUFvRTtJQUN0RSxpQkFBTTs7OztJQUpKLGdGQUEwQztJQUdyQyxjQUFpQjtJQUFDLEFBQWxCLG9EQUFpQixzQkFBbUI7OztJQVA3Qyw4QkFBNEQ7SUFDMUQsMkVBS0M7SUFHSCxpQkFBTTs7O0lBUGUsY0FBZ0I7SUFBQSxBQUFoQiw0Q0FBZ0Isc0NBQXNCOzs7SUEyQm5ELGdDQUE4QztJQUM1QywwQkFBeUI7SUFDM0IsaUJBQU87OztJQURBLGNBQWlCO0lBQWpCLG9EQUFpQjs7O0lBaUJwQixnQ0FBK0M7SUFDN0MsMEJBQTBCO0lBQzVCLGlCQUFPOzs7SUFEQSxjQUFrQjtJQUFsQixxREFBa0I7Ozs7SUFQM0IsK0JBS0M7SUFEQyxzUEFBUyw0Q0FBa0MsS0FBQztJQUU1QyxxSEFBK0M7SUFHL0MsZ0NBQTZCO0lBQUEsWUFBaUI7SUFDaEQsQUFEZ0QsaUJBQU8sRUFDakQ7Ozs7SUFQSixpRkFBMkM7SUFHZCxjQUFnQjtJQUFoQixvQ0FBZ0I7SUFHaEIsZUFBaUI7SUFBakIsb0NBQWlCOzs7SUFWbEQsK0JBQXFGO0lBQ25GLDZHQUtDO0lBTUgsaUJBQU07OztJQVp3Qiw4Q0FBNkI7SUFH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SCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsS0FBVTtRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssRUFBRSxLQUFLLElBQUksS0FBSyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ3BCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDaEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELFVBQVUsQ0FBQyxJQUFnQjtRQUN6QixJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN2QyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7cUhBckhVLG9CQUFvQjtvRUFBcEIsb0JBQW9CO1lBQXBCLHlGQUFBLHFCQUFpQixpQ0FBRzs7WUNSakMsOEJBQStEO1lBb0U3RCxBQXREQSxBQVpBLHFFQUE0RCx3REFZSSx3REFzREE7WUFJbEUsaUJBQU07O1lBeEU4Qiw0Q0FBMEI7WUFFdEQsY0FBNkI7WUFBN0Isa0RBQTZCO1lBWTdCLGNBQStCO1lBQS9CLG9EQUErQjtZQXNEL0IsY0FBK0I7WUFBL0Isb0RBQStCOzs7aUZENUQxQixvQkFBb0I7Y0FMaEMsU0FBUzsyQkFDRSxrQkFBa0I7Z0JBS2YsT0FBTztrQkFBbkIsS0FBSztZQVdHLFNBQVM7a0JBQWpCLEtBQUs7WUFDTyxNQUFNO2tCQUFsQixLQUFLO1lBV0ksV0FBVztrQkFBcEIsTUFBTTtZQThDUCxlQUFlO2tCQURkLFlBQVk7bUJBQUMsZ0JBQWdCOztrRkFyRW5CLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIEhvc3RMaXN0ZW5lciB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5pbXBvcnQgeyBBY3Rpb25JdGVtIH0gZnJvbSBcIi4uL3RhYmxlLmNvbXBvbmVudFwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibWlzLWFjdGlvbnMtY2VsbFwiLFxuICB0ZW1wbGF0ZVVybDogXCIuL2FjdGlvbnMtY2VsbC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybDogXCIuL2FjdGlvbnMtY2VsbC5jb21wb25lbnQuY3NzXCJcbn0pXG5leHBvcnQgY2xhc3MgQWN0aW9uc0NlbGxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBzZXQgcm93RGF0YSh2YWx1ZTogYW55KXtcbiAgICBpZiAodGhpcy5hY3Rpb25UeXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAvLyBGb3IgY2hlY2tib3gsIGtlZXAgdGhlIHJvd0RhdGEgc3RydWN0dXJlXG4gICAgICB0aGlzLmRhdGEgPSB2YWx1ZT8ucm93RGF0YSA/PyB7fTtcbiAgICAgIHRoaXMuaXNDaGVja2VkID0gdmFsdWU/LmlzQ2hlY2tlZCA/PyBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIG90aGVyIGFjdGlvbnMgKGRyb3Bkb3duLCBpbmxpbmUpLCB1c2UgdGhlIHZhbHVlIGRpcmVjdGx5XG4gICAgICB0aGlzLmRhdGEgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaXNDaGVja2VkID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIGlzQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgY29uZmlnKGNvbmZpZzogYW55KXtcbiAgICB0aGlzLmFjdGlvbkl0ZW1zID0gY29uZmlnPy5hY3Rpb25JdGVtcyxcbiAgICB0aGlzLmFjdGlvblR5cGUgPSBjb25maWcuYWN0aW9uVHlwZSxcbiAgICB0aGlzLnN1Ym1lbnVBbGlnbiA9IGNvbmZpZy5zdWJtZW51QWxpZ24sXG4gICAgdGhpcy5tZW51QWxpZ24gPSBjb25maWcubWVudUFsaWduXG4gICAgdGhpcy5fc3R5bGUgPSBjb25maWcuc3R5bGU7XG4gICAgdGhpcy5hY3Rpb24gPSBjb25maWcuYWN0aW9uO1xuICAgIHRoaXMuZGlzYWJsZSA9IGNvbmZpZy5kaXNhYmxlO1xuICAgIHRoaXMucHJvY2Vzc1N0eWxlKCk7XG4gIH1cblxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaXRlbT86IEFjdGlvbkl0ZW07IGRhdGE6IGFueTsgaXNDaGVja2VkPzogYW55IH0+KCk7XG5cblxuICBpc0Ryb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBhY3Rpb25JdGVtczogQWN0aW9uSXRlbVtdID0gW107XG4gIGFjdGlvblR5cGU6IFwiaW5saW5lXCIgfCBcImRyb3Bkb3duXCIgfCBcImNoZWNrYm94XCIgPSBcImlubGluZVwiO1xuICBzdWJtZW51QWxpZ246IFwibGVmdFwiIHwgXCJyaWdodFwiID0gXCJyaWdodFwiO1xuICBtZW51QWxpZ246IFwibGVmdFwiIHwgXCJyaWdodFwiID0gXCJsZWZ0XCI7XG4gIGFjdGlvbj86IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIGRhdGE6IGFueTtcbiAgZGlzYWJsZTogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc3R5bGU6IGFueSA9IHt9O1xuICBjb250YWluZXJTdHlsZTogYW55ID0ge307XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7fVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0eWxlKCk6IHZvaWQge1xuICAgIC8vIFJlbW92ZSB3aWR0aCBmcm9tIHN0eWxlIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHRhYmxlIGNvbHVtbiB3aWR0aFxuICAgIGNvbnN0IHsgd2lkdGgsIC4uLnJlc3RTdHlsZSB9ID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250YWluZXJTdHlsZSA9IHJlc3RTdHlsZTtcbiAgfVxuXG4gIG9uQWN0aW9uQ2xpY2soaXRlbTogQWN0aW9uSXRlbSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBDaGVjayBwZXJtaXNzaW9ucyBiZWZvcmUgZXhlY3V0aW5nIGFjdGlvblxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoaXRlbSkpIHJldHVybjtcblxuICAgIC8vIEV4ZWN1dGUgYWN0aW9uIG9ubHkgaWYgcGVybWl0dGVkXG4gICAgaWYgKGl0ZW0uYWN0aW9uKSB7XG4gICAgICBpdGVtLmFjdGlvbih0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh7IGl0ZW0sIGRhdGE6IHRoaXMuZGF0YSB9KTtcbiAgfVxuXG4gIHRyYWNrQnlBY3Rpb24oaW5kZXg6IG51bWJlciwgaXRlbTogQWN0aW9uSXRlbSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gIH1cblxuICBpc1N2Z0ZpbGUoaWNvblBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghaWNvblBhdGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gaWNvblBhdGgudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIi5zdmdcIikgfHwgaWNvblBhdGgudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImFzc2V0cy9pY29ucy9cIik7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6Y2xpY2tcIilcbiAgb25Eb2N1bWVudENsaWNrKCkge1xuICAgIGlmICh0aGlzLmlzRHJvcGRvd25PcGVuKSB7XG4gICAgICB0aGlzLmlzRHJvcGRvd25PcGVuID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRHJvcGRvd24oZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9ICF0aGlzLmlzRHJvcGRvd25PcGVuO1xuICAgIC8vIENsb3NlIGFsbCBzdWJtZW51cyB3aGVuIG9wZW5pbmcvY2xvc2luZyBtYWluIG1lbnVcbiAgICB0aGlzLmFjdGlvbkl0ZW1zLmZvckVhY2goKGl0ZW06IGFueSkgPT4gKGl0ZW0uc2hvd1N1Ym1lbnUgPSBmYWxzZSkpO1xuICB9XG5cbiAgb25Ecm9wZG93bkl0ZW1DbGljayhpdGVtOiBhbnksIGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZChpdGVtKSkgcmV0dXJuO1xuXG4gICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIC8vIFRvZ2dsZSBzdWJtZW51XG4gICAgICBpdGVtLnNob3dTdWJtZW51ID0gIWl0ZW0uc2hvd1N1Ym1lbnU7XG4gICAgICAvLyBPcHRpb25hbGx5IGNsb3NlIG90aGVyIHN1Ym1lbnVzXG4gICAgICB0aGlzLmFjdGlvbkl0ZW1zLmZvckVhY2goKGk6IGFueSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gaXRlbSkgaS5zaG93U3VibWVudSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSBhY3Rpb25cbiAgICAgIGlmIChpdGVtLmFjdGlvbikgaXRlbS5hY3Rpb24odGhpcy5kYXRhKTtcbiAgICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh7IGl0ZW0sIGRhdGE6IHRoaXMuZGF0YSB9KTtcbiAgICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSBmYWxzZTsgLy8gT25seSBjbG9zZSBpZiBhY3Rpb24gd2FzIGV4ZWN1dGVkXG4gICAgfVxuICB9XG5cbiAgb25DaGVja2JveENoYW5nZShldmVudDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5pc0NoZWNrZWQgPSBldmVudD8udmFsdWUgPz8gZmFsc2U7XG4gICAgdGhpcy5hY3Rpb25DbGljay5lbWl0KHsgXG4gICAgICBpc0NoZWNrZWQ6IHRoaXMuaXNDaGVja2VkLCBcbiAgICAgIGRhdGE6IHRoaXMuZGF0YSBcbiAgICB9KTtcbiAgfVxuXG5cbiAgaXNEaXNhYmxlZChpdGVtOiBBY3Rpb25JdGVtKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBpdGVtLmRpc2FibGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGl0ZW0uZGlzYWJsZSh0aGlzLmRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhY3Rpb25zLWNlbGwtY29udGFpbmVyXCIgW25nU3R5bGVdPVwiY29udGFpbmVyU3R5bGVcIj5cbiAgPCEtLSBJbmxpbmUgQWN0aW9ucyAtLT5cbiAgPGRpdiAqbmdJZj1cImFjdGlvblR5cGUgPT09ICdpbmxpbmUnXCIgY2xhc3M9XCJpbmxpbmUtYWN0aW9uc1wiPlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFjdGlvbkl0ZW1zOyB0cmFja0J5OiB0cmFja0J5QWN0aW9uXCJcbiAgICAgIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIlxuICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogaXNEaXNhYmxlZChpdGVtKSB9XCJcbiAgICAgIChjbGljayk9XCJvbkFjdGlvbkNsaWNrKGl0ZW0sICRldmVudClcIlxuICAgID5cbiAgICAgIDxpbWcgW3NyY109XCJpdGVtLmljb25cIiBbYWx0XT1cIml0ZW0ubGFiZWxcIiBjbGFzcz1cImFjdGlvbi1pY29uLXN2Z1wiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRHJvcGRvd24gQWN0aW9ucyAtLT5cbiAgPGRpdiAqbmdJZj1cImFjdGlvblR5cGUgPT09ICdkcm9wZG93bidcIiBjbGFzcz1cImRyb3Bkb3duLWFjdGlvbnNcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tdHJpZ2dlclwiIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigkZXZlbnQpXCIgdGl0bGU9XCJNb3JlIGFjdGlvbnNcIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiNFwiIHI9XCIyXCIgZmlsbD1cIiMzMzNcIiAvPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiMTBcIiBjeT1cIjEwXCIgcj1cIjJcIiBmaWxsPVwiIzMzM1wiIC8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMTZcIiByPVwiMlwiIGZpbGw9XCIjMzMzXCIgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIiAqbmdJZj1cImlzRHJvcGRvd25PcGVuXCIgW25nQ2xhc3NdPVwibWVudUFsaWduXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudS1pdGVtXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYWN0aW9uSXRlbXNcIlxuICAgICAgICAoY2xpY2spPVwib25Ecm9wZG93bkl0ZW1DbGljayhpdGVtLCAkZXZlbnQpXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogaXNEaXNhYmxlZChpdGVtKSB9XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uY2hpbGRyZW4/Lmxlbmd0aDsgZWxzZSBub0NoaWxkcmVuXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wZG93bi1pY29uXCIgKm5nSWY9XCJpdGVtLmljb25cIj5cbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJpdGVtLmljb25cIiAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3Bkb3duLWxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1Ym1lbnUtYXJyb3dcIj5cbiAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSA2TDE1IDEyTDkgMThcIiBzdHJva2U9XCIjMEQxMzIxXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICA8IS0tIERZTkFNSUMgU1VCTUVOVSAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tc3VibWVudVwiIFtuZ0NsYXNzXT1cIml0ZW0uc3VibWVudUFsaWduXCIgKm5nSWY9XCJpdGVtLnNob3dTdWJtZW51XCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudS1pdGVtXCJcbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNoaWxkIG9mIGl0ZW0uY2hpbGRyZW5cIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7IGRpc2FibGVkOiBpc0Rpc2FibGVkKGNoaWxkKSB9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRHJvcGRvd25JdGVtQ2xpY2soY2hpbGQsICRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3Bkb3duLWljb25cIiAqbmdJZj1cImNoaWxkLmljb25cIj5cbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiY2hpbGQuaWNvblwiIC8+XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wZG93bi1sYWJlbFwiPnt7IGNoaWxkLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9DaGlsZHJlbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3Bkb3duLWljb25cIiAqbmdJZj1cIml0ZW0uaWNvblwiPlxuICAgICAgICAgICAgPGltZyBbc3JjXT1cIml0ZW0uaWNvblwiIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcGRvd24tbGFiZWxcIj57eyBpdGVtLmxhYmVsIH19PC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ2hlY2tib3ggQWN0aW9ucyAtLT5cbiAgPGRpdiAqbmdJZj1cImFjdGlvblR5cGUgPT09ICdjaGVja2JveCdcIiBjbGFzcz1cImNoZWNrYm94LWFjdGlvbnNcIj5cbiAgICA8bWlzLWNoZWNrYm94IFtjaGVja2VkXT1cImlzQ2hlY2tlZFwiICh2YWx1ZUNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKCRldmVudClcIiAgW2Rpc2FibGVkXT1cImRpc2FibGUgPyBkaXNhYmxlKGRhdGEpIDogZmFsc2VcIlxuICAgID4gPC9taXMtY2hlY2tib3g+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
366
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL3RhYmxlL2FjdGlvbnMtY2VsbC9hY3Rpb25zLWNlbGwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvdGFibGUvYWN0aW9ucy1jZWxsL2FjdGlvbnMtY2VsbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFlBQVksRUFBYyxTQUFTLEVBQTRDLE1BQU0sZUFBZSxDQUFDO0FBQzlKLE9BQU8sRUFBRSxzQkFBc0IsRUFBVyxhQUFhLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7SUNDakQsOEJBS0M7SUFEQyxvTkFBUyxxQ0FBMkIsS0FBQztJQUVyQywwQkFBb0U7SUFDdEUsaUJBQU07Ozs7SUFKSixnRkFBMEM7SUFHckMsY0FBaUI7SUFBQyxBQUFsQixvREFBaUIsc0JBQW1COzs7SUFQN0MsOEJBQTREO0lBQzFELDJFQUtDO0lBR0gsaUJBQU07OztJQVBlLGNBQWdCO0lBQUEsQUFBaEIsNENBQWdCLHNDQUFzQjs7OztJQVd6RCxBQURGLCtCQUFnRSxpQkFDdUM7SUFBdEQsbUxBQVMsNkJBQXNCLEtBQUM7O0lBQzdFLCtCQUE0RDtJQUcxRCxBQURBLEFBREEsNkJBQTJDLGlCQUNDLGlCQUNBO0lBR2xELEFBREUsQUFERSxpQkFBTSxFQUNGLEVBQ0Y7Ozs7SUFJSixBQURGLCtCQUFnRSx1QkFFN0Q7SUFEbUMsd01BQWUsK0JBQXdCLEtBQUM7SUFFOUUsQUFESSxpQkFBZSxFQUNiOzs7SUFGVSxjQUFxQjtJQUEyQyxBQUFoRSwwQ0FBcUIsa0VBQXVGOzs7SUFldEgsZ0NBQThDO0lBQzVDLDBCQUF5QjtJQUMzQixpQkFBTzs7O0lBREEsY0FBaUI7SUFBakIsb0RBQWlCOzs7SUFpQnBCLGdDQUErQztJQUM3QywwQkFBMEI7SUFDNUIsaUJBQU87OztJQURBLGNBQWtCO0lBQWxCLHFEQUFrQjs7OztJQVAzQiwrQkFLQztJQURDLHdQQUFTLDRDQUFrQyxLQUFDO0lBRTVDLHVIQUErQztJQUcvQyxnQ0FBNkI7SUFBQSxZQUFpQjtJQUNoRCxBQURnRCxpQkFBTyxFQUNqRDs7OztJQVBKLGlGQUEyQztJQUdkLGNBQWdCO0lBQWhCLG9DQUFnQjtJQUdoQixlQUFpQjtJQUFqQixvQ0FBaUI7OztJQVZsRCwrQkFBcUY7SUFDbkYsK0dBS0M7SUFNSCxpQkFBTTs7O0lBWndCLDhDQUE2QjtJQUdyQyxjQUFnQjtJQUFoQiwwQ0FBZ0I7OztJQWZ4Qyw2QkFBNkQ7SUFDM0QsMkdBQThDO0lBRzlDLGdDQUE2QjtJQUFBLFlBQWdCO0lBQUEsaUJBQU87SUFDcEQsZ0NBQTRCOztJQUMxQiwrQkFBNEQ7SUFDMUQsMkJBQTZHO0lBRWpILEFBREUsaUJBQU0sRUFDRDtJQUdQLHlHQUFxRjs7OztJQVh4RCxjQUFlO0lBQWYsbUNBQWU7SUFHZixlQUFnQjtJQUFoQixtQ0FBZ0I7SUFRZ0IsZUFBc0I7SUFBdEIsMENBQXNCOzs7SUFnQm5GLGdDQUE4QztJQUM1QywwQkFBeUI7SUFDM0IsaUJBQU87OztJQURBLGNBQWlCO0lBQWpCLG9EQUFpQjs7O0lBRHhCLDBHQUE4QztJQUc5QyxnQ0FBNkI7SUFBQSxZQUFnQjtJQUFBLGlCQUFPOzs7SUFIdkIsbUNBQWU7SUFHZixlQUFnQjtJQUFoQixtQ0FBZ0I7Ozs7SUFyQ2pELCtCQUtDO0lBRkMsNE5BQVMsMkNBQWlDLEtBQUM7SUE4QjNDLEFBM0JBLDRHQUE2RCw2SEEyQnBDO0lBTTNCLGlCQUFNOzs7OztJQW5DSixnRkFBMEM7SUFFM0IsY0FBNkI7SUFBQSxBQUE3QixnRkFBNkIsNEJBQWU7OztJQVAvRCwrQkFBeUQ7SUFDdkQsb0ZBS0M7SUFtQ0gsaUJBQU07OztJQXpDNkIsMENBQXFCO0lBR25DLGNBQWM7SUFBZCw0Q0FBYzs7QUQxQnJDLE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsSUFBYSxPQUFPLENBQUMsS0FBVTtRQUM3QixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDbkMsMkNBQTJDO1lBQzNDLElBQUksQ0FBQyxJQUFJLEdBQUcsS0FBSyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUM3QyxDQUFDO2FBQU0sQ0FBQztZQUNOLCtEQUErRDtZQUMvRCxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQztZQUNsQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN6QixDQUFDO0lBQ0gsQ0FBQztJQUVELElBQWEsTUFBTSxDQUFDLE1BQVc7UUFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLEVBQUUsV0FBVztZQUN0QyxJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVO1lBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVk7WUFDdkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFBO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBbUJELFlBQ1UsT0FBZ0IsRUFDaEIsZ0JBQWtDO1FBRGxDLFlBQU8sR0FBUCxPQUFPLENBQVM7UUFDaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQS9CbkMsY0FBUyxHQUFZLEtBQUssQ0FBQztRQVkxQixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFxRCxDQUFDO1FBSzlGLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBQ2hDLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUMvQixlQUFVLEdBQXVDLFFBQVEsQ0FBQztRQUMxRCxpQkFBWSxHQUFxQixPQUFPLENBQUM7UUFDekMsY0FBUyxHQUFxQixNQUFNLENBQUM7UUFJN0IsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUN6QixtQkFBYyxHQUFRLEVBQUUsQ0FBQztRQUNqQixlQUFVLEdBQXNCLElBQUksQ0FBQztJQUsxQyxDQUFDO0lBRUosUUFBUSxLQUFVLENBQUM7SUFFbkIsV0FBVztRQUNULElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sWUFBWTtRQUNsQixxRUFBcUU7UUFDckUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxTQUFTLENBQUM7SUFDbEMsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFnQixFQUFFLEtBQVk7UUFDMUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLDRDQUE0QztRQUM1QyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTztRQUVsQyxtQ0FBbUM7UUFDbkMsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWEsRUFBRSxJQUFnQjtRQUMzQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELFNBQVMsQ0FBQyxRQUFnQjtRQUN4QixJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQzVCLE9BQU8sUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFHRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLEtBQVk7UUFDekIsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN2QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTtZQUFFLE9BQU87UUFFeEQsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUVwRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUU5QyxNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUN0QyxXQUFXLEVBQUUsSUFBSTtZQUNqQixhQUFhLEVBQUUsa0NBQWtDO1lBQ2pELGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPO2lCQUMzQixRQUFRLEVBQUU7aUJBQ1YsbUJBQW1CLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQztpQkFDekMsYUFBYSxDQUFDLFNBQVMsQ0FBQztpQkFDeEIsUUFBUSxDQUFDLElBQUksQ0FBQztZQUNqQixjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU7U0FDM0QsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzVFLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRS9CLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRU8sYUFBYTtRQUNuQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUM5QixDQUFDO0lBRU8sb0JBQW9CO1FBQzFCLE1BQU0sU0FBUyxHQUE2QixFQUFFLENBQUM7UUFFL0MsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzlCLG9DQUFvQztZQUNwQyxTQUFTLENBQUMsSUFBSSxDQUNaLElBQUksc0JBQXNCLENBQ3hCLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQ3ZDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQ3RDLENBQUMsRUFBRSxDQUFDLENBQ0wsRUFDRCxJQUFJLHNCQUFzQixDQUN4QixFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUNwQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxFQUN6QyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ04sQ0FDRixDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixxQ0FBcUM7WUFDckMsU0FBUyxDQUFDLElBQUksQ0FDWixJQUFJLHNCQUFzQixDQUN4QixFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUNyQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUNwQyxDQUFDLEVBQUUsQ0FBQyxDQUNMLEVBQ0QsSUFBSSxzQkFBc0IsQ0FDeEIsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFDbEMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsRUFDdkMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNOLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBUyxFQUFFLEtBQVk7UUFDekMsS0FBSyxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBRXhCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPO1FBRWxDLElBQUksSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUMzQixpQkFBaUI7WUFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDckMsa0NBQWtDO1lBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQ2xDLElBQUksQ0FBQyxLQUFLLElBQUk7b0JBQUUsQ0FBQyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDeEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO2FBQU0sQ0FBQztZQUNOLGdCQUFnQjtZQUNoQixJQUFJLElBQUksQ0FBQyxNQUFNO2dCQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxvQ0FBb0M7UUFDNUQsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxFQUFFLEtBQUssSUFBSSxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtTQUNoQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQWdCO1FBQ3pCLElBQUksT0FBTyxJQUFJLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztxSEE1TVUsb0JBQW9CO29FQUFwQixvQkFBb0I7Ozs7Ozs7O1lBQXBCLHlGQUFBLHFCQUFpQixpQ0FBRzs7WUNWakMsOEJBQStEO1lBeUI3RCxBQVhBLEFBWkEscUVBQTRELHdEQVlJLHdEQVdBO1lBSWxFLGlCQUFNO1lBR04sc0hBQTJCOztZQWhDUyw0Q0FBMEI7WUFFdEQsY0FBNkI7WUFBN0Isa0RBQTZCO1lBWTdCLGNBQStCO1lBQS9CLG9EQUErQjtZQVcvQixjQUErQjtZQUEvQixvREFBK0I7OztpRkRmMUIsb0JBQW9CO2NBTGhDLFNBQVM7MkJBQ0Usa0JBQWtCO3VFQUtmLE9BQU87a0JBQW5CLEtBQUs7WUFXRyxTQUFTO2tCQUFqQixLQUFLO1lBQ08sTUFBTTtrQkFBbEIsS0FBSztZQVdJLFdBQVc7a0JBQXBCLE1BQU07WUFFdUMsWUFBWTtrQkFBekQsU0FBUzttQkFBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQ0ssZUFBZTtrQkFBL0QsU0FBUzttQkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7WUF1RC9DLGVBQWU7a0JBRGQsWUFBWTttQkFBQyxnQkFBZ0I7O2tGQWpGbkIsb0JBQW9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgSG9zdExpc3RlbmVyLCBFbGVtZW50UmVmLCBWaWV3Q2hpbGQsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmLCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQ29ubmVjdGlvblBvc2l0aW9uUGFpciwgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gXCJAYW5ndWxhci9jZGsvb3ZlcmxheVwiO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL3BvcnRhbFwiO1xuaW1wb3J0IHsgQWN0aW9uSXRlbSB9IGZyb20gXCIuLi90YWJsZS5jb21wb25lbnRcIjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiBcIm1pcy1hY3Rpb25zLWNlbGxcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9hY3Rpb25zLWNlbGwuY29tcG9uZW50Lmh0bWxcIixcbiAgc3R5bGVVcmw6IFwiLi9hY3Rpb25zLWNlbGwuY29tcG9uZW50LmNzc1wiXG59KVxuZXhwb3J0IGNsYXNzIEFjdGlvbnNDZWxsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSBzZXQgcm93RGF0YSh2YWx1ZTogYW55KXtcbiAgICBpZiAodGhpcy5hY3Rpb25UeXBlID09PSAnY2hlY2tib3gnKSB7XG4gICAgICAvLyBGb3IgY2hlY2tib3gsIGtlZXAgdGhlIHJvd0RhdGEgc3RydWN0dXJlXG4gICAgICB0aGlzLmRhdGEgPSB2YWx1ZT8ucm93RGF0YSA/PyB7fTtcbiAgICAgIHRoaXMuaXNDaGVja2VkID0gdmFsdWU/LmlzQ2hlY2tlZCA/PyBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIG90aGVyIGFjdGlvbnMgKGRyb3Bkb3duLCBpbmxpbmUpLCB1c2UgdGhlIHZhbHVlIGRpcmVjdGx5XG4gICAgICB0aGlzLmRhdGEgPSB2YWx1ZTtcbiAgICAgIHRoaXMuaXNDaGVja2VkID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIGlzQ2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZXQgY29uZmlnKGNvbmZpZzogYW55KXtcbiAgICB0aGlzLmFjdGlvbkl0ZW1zID0gY29uZmlnPy5hY3Rpb25JdGVtcyxcbiAgICB0aGlzLmFjdGlvblR5cGUgPSBjb25maWcuYWN0aW9uVHlwZSxcbiAgICB0aGlzLnN1Ym1lbnVBbGlnbiA9IGNvbmZpZy5zdWJtZW51QWxpZ24sXG4gICAgdGhpcy5tZW51QWxpZ24gPSBjb25maWcubWVudUFsaWduXG4gICAgdGhpcy5fc3R5bGUgPSBjb25maWcuc3R5bGU7XG4gICAgdGhpcy5hY3Rpb24gPSBjb25maWcuYWN0aW9uO1xuICAgIHRoaXMuZGlzYWJsZSA9IGNvbmZpZy5kaXNhYmxlO1xuICAgIHRoaXMucHJvY2Vzc1N0eWxlKCk7XG4gIH1cblxuICBAT3V0cHV0KCkgYWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaXRlbT86IEFjdGlvbkl0ZW07IGRhdGE6IGFueTsgaXNDaGVja2VkPzogYW55IH0+KCk7XG5cbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25NZW51JywgeyBzdGF0aWM6IGZhbHNlIH0pIGRyb3Bkb3duTWVudTogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25UcmlnZ2VyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRyb3Bkb3duVHJpZ2dlcjogRWxlbWVudFJlZjtcblxuICBpc0Ryb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBhY3Rpb25JdGVtczogQWN0aW9uSXRlbVtdID0gW107XG4gIGFjdGlvblR5cGU6IFwiaW5saW5lXCIgfCBcImRyb3Bkb3duXCIgfCBcImNoZWNrYm94XCIgPSBcImlubGluZVwiO1xuICBzdWJtZW51QWxpZ246IFwibGVmdFwiIHwgXCJyaWdodFwiID0gXCJyaWdodFwiO1xuICBtZW51QWxpZ246IFwibGVmdFwiIHwgXCJyaWdodFwiID0gXCJsZWZ0XCI7XG4gIGFjdGlvbj86IChkYXRhOiBhbnkpID0+IHZvaWQ7XG4gIGRhdGE6IGFueTtcbiAgZGlzYWJsZTogKGRhdGE6IGFueSkgPT4gYm9vbGVhbjtcbiAgcHJpdmF0ZSBfc3R5bGU6IGFueSA9IHt9O1xuICBjb250YWluZXJTdHlsZTogYW55ID0ge307XG4gIHByaXZhdGUgb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge31cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgfVxuXG4gIHByaXZhdGUgcHJvY2Vzc1N0eWxlKCk6IHZvaWQge1xuICAgIC8vIFJlbW92ZSB3aWR0aCBmcm9tIHN0eWxlIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIHRhYmxlIGNvbHVtbiB3aWR0aFxuICAgIGNvbnN0IHsgd2lkdGgsIC4uLnJlc3RTdHlsZSB9ID0gdGhpcy5fc3R5bGU7XG4gICAgdGhpcy5jb250YWluZXJTdHlsZSA9IHJlc3RTdHlsZTtcbiAgfVxuXG4gIG9uQWN0aW9uQ2xpY2soaXRlbTogQWN0aW9uSXRlbSwgZXZlbnQ6IEV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAvLyBDaGVjayBwZXJtaXNzaW9ucyBiZWZvcmUgZXhlY3V0aW5nIGFjdGlvblxuICAgIGlmICh0aGlzLmlzRGlzYWJsZWQoaXRlbSkpIHJldHVybjtcblxuICAgIC8vIEV4ZWN1dGUgYWN0aW9uIG9ubHkgaWYgcGVybWl0dGVkXG4gICAgaWYgKGl0ZW0uYWN0aW9uKSB7XG4gICAgICBpdGVtLmFjdGlvbih0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh7IGl0ZW0sIGRhdGE6IHRoaXMuZGF0YSB9KTtcbiAgfVxuXG4gIHRyYWNrQnlBY3Rpb24oaW5kZXg6IG51bWJlciwgaXRlbTogQWN0aW9uSXRlbSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGl0ZW0udmFsdWU7XG4gIH1cblxuICBpc1N2Z0ZpbGUoaWNvblBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmICghaWNvblBhdGgpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gaWNvblBhdGgudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcIi5zdmdcIikgfHwgaWNvblBhdGgudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImFzc2V0cy9pY29ucy9cIik7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKFwiZG9jdW1lbnQ6Y2xpY2tcIilcbiAgb25Eb2N1bWVudENsaWNrKCkge1xuICAgIGlmICh0aGlzLmlzRHJvcGRvd25PcGVuKSB7XG4gICAgICB0aGlzLmNsb3NlRHJvcGRvd24oKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVEcm9wZG93bihldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBcbiAgICBpZiAodGhpcy5pc0Ryb3Bkb3duT3Blbikge1xuICAgICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3BlbkRyb3Bkb3duKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBvcGVuRHJvcGRvd24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRyb3Bkb3duVHJpZ2dlciB8fCAhdGhpcy5kcm9wZG93bk1lbnUpIHJldHVybjtcblxuICAgIC8vIENsb3NlIGFsbCBzdWJtZW51cyB3aGVuIG9wZW5pbmcgbWFpbiBtZW51XG4gICAgdGhpcy5hY3Rpb25JdGVtcy5mb3JFYWNoKChpdGVtOiBhbnkpID0+IChpdGVtLnNob3dTdWJtZW51ID0gZmFsc2UpKTtcblxuICAgIGNvbnN0IHBvc2l0aW9ucyA9IHRoaXMuZ2V0RHJvcGRvd25Qb3NpdGlvbnMoKTtcbiAgICBcbiAgICBjb25zdCBvdmVybGF5Q29uZmlnID0gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnY2RrLW92ZXJsYXktdHJhbnNwYXJlbnQtYmFja2Ryb3AnLFxuICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5XG4gICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuZHJvcGRvd25UcmlnZ2VyKVxuICAgICAgICAud2l0aFBvc2l0aW9ucyhwb3NpdGlvbnMpXG4gICAgICAgIC53aXRoUHVzaCh0cnVlKSxcbiAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5yZXBvc2l0aW9uKClcbiAgICB9KTtcblxuICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGUob3ZlcmxheUNvbmZpZyk7XG4gICAgY29uc3QgcG9ydGFsID0gbmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMuZHJvcGRvd25NZW51LCB0aGlzLnZpZXdDb250YWluZXJSZWYpO1xuICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2gocG9ydGFsKTtcblxuICAgIHRoaXMub3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5pc0Ryb3Bkb3duT3BlbiA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlRHJvcGRvd24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuaXNEcm9wZG93bk9wZW4gPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RHJvcGRvd25Qb3NpdGlvbnMoKTogQ29ubmVjdGlvblBvc2l0aW9uUGFpcltdIHtcbiAgICBjb25zdCBwb3NpdGlvbnM6IENvbm5lY3Rpb25Qb3NpdGlvblBhaXJbXSA9IFtdO1xuXG4gICAgaWYgKHRoaXMubWVudUFsaWduID09PSAnbGVmdCcpIHtcbiAgICAgIC8vIE1lbnUgb3BlbnMgdG8gdGhlIGxlZnQgb2YgdHJpZ2dlclxuICAgICAgcG9zaXRpb25zLnB1c2goXG4gICAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKFxuICAgICAgICAgIHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2JvdHRvbScgfSxcbiAgICAgICAgICB7IG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ3RvcCcgfSxcbiAgICAgICAgICAwLCA0XG4gICAgICAgICksXG4gICAgICAgIG5ldyBDb25uZWN0aW9uUG9zaXRpb25QYWlyKFxuICAgICAgICAgIHsgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ3RvcCcgfSxcbiAgICAgICAgICB7IG92ZXJsYXlYOiAnc3RhcnQnLCBvdmVybGF5WTogJ2JvdHRvbScgfSxcbiAgICAgICAgICAwLCAtNFxuICAgICAgICApXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNZW51IG9wZW5zIHRvIHRoZSByaWdodCBvZiB0cmlnZ2VyXG4gICAgICBwb3NpdGlvbnMucHVzaChcbiAgICAgICAgbmV3IENvbm5lY3Rpb25Qb3NpdGlvblBhaXIoXG4gICAgICAgICAgeyBvcmlnaW5YOiAnZW5kJywgb3JpZ2luWTogJ2JvdHRvbScgfSxcbiAgICAgICAgICB7IG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6ICd0b3AnIH0sXG4gICAgICAgICAgMCwgNFxuICAgICAgICApLFxuICAgICAgICBuZXcgQ29ubmVjdGlvblBvc2l0aW9uUGFpcihcbiAgICAgICAgICB7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiAndG9wJyB9LFxuICAgICAgICAgIHsgb3ZlcmxheVg6ICdlbmQnLCBvdmVybGF5WTogJ2JvdHRvbScgfSxcbiAgICAgICAgICAwLCAtNFxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcG9zaXRpb25zO1xuICB9XG5cbiAgb25Ecm9wZG93bkl0ZW1DbGljayhpdGVtOiBhbnksIGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMuaXNEaXNhYmxlZChpdGVtKSkgcmV0dXJuO1xuXG4gICAgaWYgKGl0ZW0/LmNoaWxkcmVuPy5sZW5ndGgpIHtcbiAgICAgIC8vIFRvZ2dsZSBzdWJtZW51XG4gICAgICBpdGVtLnNob3dTdWJtZW51ID0gIWl0ZW0uc2hvd1N1Ym1lbnU7XG4gICAgICAvLyBPcHRpb25hbGx5IGNsb3NlIG90aGVyIHN1Ym1lbnVzXG4gICAgICB0aGlzLmFjdGlvbkl0ZW1zLmZvckVhY2goKGk6IGFueSkgPT4ge1xuICAgICAgICBpZiAoaSAhPT0gaXRlbSkgaS5zaG93U3VibWVudSA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEhhbmRsZSBhY3Rpb25cbiAgICAgIGlmIChpdGVtLmFjdGlvbikgaXRlbS5hY3Rpb24odGhpcy5kYXRhKTtcbiAgICAgIHRoaXMuYWN0aW9uQ2xpY2suZW1pdCh7IGl0ZW0sIGRhdGE6IHRoaXMuZGF0YSB9KTtcbiAgICAgIHRoaXMuY2xvc2VEcm9wZG93bigpOyAvLyBPbmx5IGNsb3NlIGlmIGFjdGlvbiB3YXMgZXhlY3V0ZWRcbiAgICB9XG4gIH1cblxuICBvbkNoZWNrYm94Q2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmlzQ2hlY2tlZCA9IGV2ZW50Py52YWx1ZSA/PyBmYWxzZTtcbiAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoeyBcbiAgICAgIGlzQ2hlY2tlZDogdGhpcy5pc0NoZWNrZWQsIFxuICAgICAgZGF0YTogdGhpcy5kYXRhIFxuICAgIH0pO1xuICB9XG5cbiAgaXNEaXNhYmxlZChpdGVtOiBBY3Rpb25JdGVtKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBpdGVtLmRpc2FibGUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGl0ZW0uZGlzYWJsZSh0aGlzLmRhdGEpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhY3Rpb25zLWNlbGwtY29udGFpbmVyXCIgW25nU3R5bGVdPVwiY29udGFpbmVyU3R5bGVcIj5cbiAgPCEtLSBJbmxpbmUgQWN0aW9ucyAtLT5cbiAgPGRpdiAqbmdJZj1cImFjdGlvblR5cGUgPT09ICdpbmxpbmUnXCIgY2xhc3M9XCJpbmxpbmUtYWN0aW9uc1wiPlxuICAgIDxkaXZcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFjdGlvbkl0ZW1zOyB0cmFja0J5OiB0cmFja0J5QWN0aW9uXCJcbiAgICAgIGNsYXNzPVwiYWN0aW9uLWl0ZW1cIlxuICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogaXNEaXNhYmxlZChpdGVtKSB9XCJcbiAgICAgIChjbGljayk9XCJvbkFjdGlvbkNsaWNrKGl0ZW0sICRldmVudClcIlxuICAgID5cbiAgICAgIDxpbWcgW3NyY109XCJpdGVtLmljb25cIiBbYWx0XT1cIml0ZW0ubGFiZWxcIiBjbGFzcz1cImFjdGlvbi1pY29uLXN2Z1wiIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRHJvcGRvd24gQWN0aW9ucyAtLT5cbiAgPGRpdiAqbmdJZj1cImFjdGlvblR5cGUgPT09ICdkcm9wZG93bidcIiBjbGFzcz1cImRyb3Bkb3duLWFjdGlvbnNcIj5cbiAgICA8ZGl2ICNkcm9wZG93blRyaWdnZXIgY2xhc3M9XCJkcm9wZG93bi10cmlnZ2VyXCIgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKCRldmVudClcIiB0aXRsZT1cIk1vcmUgYWN0aW9uc1wiPlxuICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCI0XCIgcj1cIjJcIiBmaWxsPVwiIzMzM1wiIC8+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxMFwiIGN5PVwiMTBcIiByPVwiMlwiIGZpbGw9XCIjMzMzXCIgLz5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjEwXCIgY3k9XCIxNlwiIHI9XCIyXCIgZmlsbD1cIiMzMzNcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQ2hlY2tib3ggQWN0aW9ucyAtLT5cbiAgPGRpdiAqbmdJZj1cImFjdGlvblR5cGUgPT09ICdjaGVja2JveCdcIiBjbGFzcz1cImNoZWNrYm94LWFjdGlvbnNcIj5cbiAgICA8bWlzLWNoZWNrYm94IFtjaGVja2VkXT1cImlzQ2hlY2tlZFwiICh2YWx1ZUNoYW5nZSk9XCJvbkNoZWNrYm94Q2hhbmdlKCRldmVudClcIiAgW2Rpc2FibGVkXT1cImRpc2FibGUgPyBkaXNhYmxlKGRhdGEpIDogZmFsc2VcIlxuICAgID4gPC9taXMtY2hlY2tib3g+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gQ0RLIE92ZXJsYXkgVGVtcGxhdGUgZm9yIERyb3Bkb3duIE1lbnUgLS0+XG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duTWVudT5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUtb3ZlcmxheVwiIFtuZ0NsYXNzXT1cIm1lbnVBbGlnblwiPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudS1pdGVtXCJcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFjdGlvbkl0ZW1zXCJcbiAgICAgIChjbGljayk9XCJvbkRyb3Bkb3duSXRlbUNsaWNrKGl0ZW0sICRldmVudClcIlxuICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogaXNEaXNhYmxlZChpdGVtKSB9XCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbS5jaGlsZHJlbj8ubGVuZ3RoOyBlbHNlIG5vQ2hpbGRyZW5cIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wZG93bi1pY29uXCIgKm5nSWY9XCJpdGVtLmljb25cIj5cbiAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS5pY29uXCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3Bkb3duLWxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWJtZW51LWFycm93XCI+XG4gICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSA2TDE1IDEyTDkgMThcIiBzdHJva2U9XCIjMEQxMzIxXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvc3Bhbj5cblxuICAgICAgICA8IS0tIERZTkFNSUMgU1VCTUVOVSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLXN1Ym1lbnVcIiBbbmdDbGFzc109XCJpdGVtLnN1Ym1lbnVBbGlnblwiICpuZ0lmPVwiaXRlbS5zaG93U3VibWVudVwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudS1pdGVtXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlsZCBvZiBpdGVtLmNoaWxkcmVuXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgZGlzYWJsZWQ6IGlzRGlzYWJsZWQoY2hpbGQpIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRHJvcGRvd25JdGVtQ2xpY2soY2hpbGQsICRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZHJvcGRvd24taWNvblwiICpuZ0lmPVwiY2hpbGQuaWNvblwiPlxuICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiY2hpbGQuaWNvblwiIC8+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3Bkb3duLWxhYmVsXCI+e3sgY2hpbGQubGFiZWwgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9DaGlsZHJlbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkcm9wZG93bi1pY29uXCIgKm5nSWY9XCJpdGVtLmljb25cIj5cbiAgICAgICAgICA8aW1nIFtzcmNdPVwiaXRlbS5pY29uXCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRyb3Bkb3duLWxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|