@igo2/geo 1.13.3 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/catalog/catalog-browser/catalog-browser.component.mjs +4 -1
- package/esm2020/lib/catalog/shared/catalog.abstract.mjs +1 -1
- package/esm2020/lib/draw/draw/draw-popup.component.mjs +562 -32
- package/esm2020/lib/draw/draw/draw.component.mjs +358 -130
- package/esm2020/lib/draw/draw/draw.module.mjs +12 -4
- package/esm2020/lib/draw/shared/draw-style.service.mjs +2 -2
- package/esm2020/lib/draw/shared/draw.enum.mjs +14 -1
- package/esm2020/lib/draw/shared/draw.interface.mjs +1 -1
- package/esm2020/lib/draw/shared/draw.utils.mjs +19 -1
- package/esm2020/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.mjs +21 -8
- package/esm2020/lib/geometry/geometry-form-field/geometry-form-field-input.component.mjs +12 -2
- package/esm2020/lib/geometry/shared/controls/draw.mjs +53 -10
- package/esm2020/lib/import-export/shared/export.service.mjs +2 -2
- package/esm2020/lib/import-export/shared/import.interface.mjs +1 -1
- package/esm2020/lib/import-export/shared/import.service.mjs +26 -6
- package/esm2020/lib/layer/shared/layers/layer.interface.mjs +1 -1
- package/esm2020/lib/map/shared/hover-feature.directive.mjs +2 -2
- package/esm2020/lib/map/shared/map.utils.mjs +4 -1
- package/esm2020/lib/offline/geoDB/configFileToGeoDB.service.mjs +33 -4
- package/esm2020/lib/offline/geoDB/geoDB.interface.mjs +1 -1
- package/esm2020/lib/offline/geoDB/geoDB.service.mjs +12 -12
- package/esm2020/lib/print/shared/geopdf.mjs +58 -0
- package/esm2020/lib/print/shared/index.mjs +2 -1
- package/esm2020/lib/print/shared/print.interface.mjs +1 -1
- package/esm2020/lib/print/shared/print.service.mjs +118 -64
- package/esm2020/lib/query/shared/query.service.mjs +3 -3
- package/esm2020/lib/search/shared/sources/index.mjs +1 -3
- package/fesm2015/igo2-geo.mjs +1320 -409
- package/fesm2015/igo2-geo.mjs.map +1 -1
- package/fesm2020/igo2-geo.mjs +1272 -405
- package/fesm2020/igo2-geo.mjs.map +1 -1
- package/lib/catalog/shared/catalog.abstract.d.ts +1 -0
- package/lib/draw/draw/draw-popup.component.d.ts +52 -5
- package/lib/draw/draw/draw.component.d.ts +34 -4
- package/lib/draw/draw/draw.module.d.ts +3 -1
- package/lib/draw/shared/draw.enum.d.ts +11 -0
- package/lib/draw/shared/draw.interface.d.ts +4 -0
- package/lib/draw/shared/draw.utils.d.ts +2 -0
- package/lib/filter/spatial-filter/spatial-filter-item/spatial-filter-item.component.d.ts +2 -1
- package/lib/geometry/geometry-form-field/geometry-form-field-input.component.d.ts +7 -1
- package/lib/geometry/shared/controls/draw.d.ts +18 -0
- package/lib/import-export/shared/import.interface.d.ts +2 -1
- package/lib/import-export/shared/import.service.d.ts +7 -0
- package/lib/layer/shared/layers/layer.interface.d.ts +4 -0
- package/lib/map/shared/map.utils.d.ts +1 -0
- package/lib/offline/geoDB/configFileToGeoDB.service.d.ts +1 -0
- package/lib/offline/geoDB/geoDB.interface.d.ts +1 -0
- package/lib/offline/geoDB/geoDB.service.d.ts +3 -3
- package/lib/print/shared/geopdf.d.ts +1 -0
- package/lib/print/shared/index.d.ts +1 -0
- package/lib/print/shared/print.interface.d.ts +5 -0
- package/lib/print/shared/print.service.d.ts +17 -8
- package/lib/search/shared/sources/index.d.ts +0 -2
- package/package.json +4 -4
- package/esm2020/lib/search/shared/sources/cadastre.mjs +0 -126
- package/esm2020/lib/search/shared/sources/cadastre.providers.mjs +0 -23
- package/lib/search/shared/sources/cadastre.d.ts +0 -33
- package/lib/search/shared/sources/cadastre.providers.d.ts +0 -18
|
@@ -1,61 +1,591 @@
|
|
|
1
1
|
import { Component, Inject, Input } from '@angular/core';
|
|
2
2
|
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
|
+
import { CoordinatesUnit, GeometryType, LabelType } from '../shared/draw.enum';
|
|
4
|
+
import { transform } from 'ol/proj';
|
|
5
|
+
import { roundCoordTo } from '../../map/shared';
|
|
6
|
+
import OlFeature from 'ol/Feature';
|
|
7
|
+
import { measureOlGeometryLength, measureOlGeometryArea, metersToUnit, squareMetersToUnit } from '../../measure/shared/measure.utils';
|
|
8
|
+
import { MeasureLengthUnit, MeasureLengthUnitAbbreviation, MeasureAreaUnit, MeasureAreaUnitAbbreviation, } from '../../measure/shared/measure.enum';
|
|
9
|
+
import { fromCircle } from 'ol/geom/Polygon';
|
|
10
|
+
import { getLength } from 'ol/sphere';
|
|
11
|
+
import Circle from 'ol/geom/Circle';
|
|
12
|
+
import { DDtoDMS } from '../shared/draw.utils';
|
|
3
13
|
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@
|
|
5
|
-
import * as i2 from "@angular/material/
|
|
6
|
-
import * as i3 from "@angular/
|
|
7
|
-
import * as i4 from "@angular/material/
|
|
8
|
-
import * as i5 from "@
|
|
14
|
+
import * as i1 from "@igo2/core";
|
|
15
|
+
import * as i2 from "@angular/material/dialog";
|
|
16
|
+
import * as i3 from "@angular/common";
|
|
17
|
+
import * as i4 from "@angular/material/button";
|
|
18
|
+
import * as i5 from "@angular/material/button-toggle";
|
|
19
|
+
import * as i6 from "@angular/material/form-field";
|
|
20
|
+
import * as i7 from "@angular/material/input";
|
|
21
|
+
import * as i8 from "@angular/material/select";
|
|
22
|
+
import * as i9 from "@angular/material/core";
|
|
23
|
+
import * as i10 from "@angular/material/radio";
|
|
24
|
+
import * as i11 from "@angular/material/checkbox";
|
|
25
|
+
import * as i12 from "@ngx-translate/core";
|
|
26
|
+
function DrawPopupComponent_div_12_mat_radio_group_5_mat_radio_button_1_Template(rf, ctx) { if (rf & 1) {
|
|
27
|
+
const _r10 = i0.ɵɵgetCurrentView();
|
|
28
|
+
i0.ɵɵelementStart(0, "mat-radio-button", 11);
|
|
29
|
+
i0.ɵɵlistener("change", function DrawPopupComponent_div_12_mat_radio_group_5_mat_radio_button_1_Template_mat_radio_button_change_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r9 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r9.onLabelTypeChange($event.value)); });
|
|
30
|
+
i0.ɵɵtext(1);
|
|
31
|
+
i0.ɵɵelementEnd();
|
|
32
|
+
} if (rf & 2) {
|
|
33
|
+
const option_r8 = ctx.$implicit;
|
|
34
|
+
const ctx_r7 = i0.ɵɵnextContext(3);
|
|
35
|
+
i0.ɵɵproperty("value", option_r8.value)("disabled", ctx_r7.optionAvailable(option_r8.value))("checked", option_r8.checked);
|
|
36
|
+
i0.ɵɵadvance(1);
|
|
37
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r7.getProperLengthLabel(option_r8.value), " ");
|
|
38
|
+
} }
|
|
39
|
+
function DrawPopupComponent_div_12_mat_radio_group_5_Template(rf, ctx) { if (rf & 1) {
|
|
40
|
+
i0.ɵɵelementStart(0, "mat-radio-group", 5);
|
|
41
|
+
i0.ɵɵtemplate(1, DrawPopupComponent_div_12_mat_radio_group_5_mat_radio_button_1_Template, 2, 4, "mat-radio-button", 10);
|
|
42
|
+
i0.ɵɵelementEnd();
|
|
43
|
+
} if (rf & 2) {
|
|
44
|
+
const ctx_r2 = i0.ɵɵnextContext(2);
|
|
45
|
+
i0.ɵɵadvance(1);
|
|
46
|
+
i0.ɵɵproperty("ngForOf", ctx_r2.arrayBuiltInType);
|
|
47
|
+
} }
|
|
48
|
+
function DrawPopupComponent_div_12_ng_container_6_mat_checkbox_1_Template(rf, ctx) { if (rf & 1) {
|
|
49
|
+
const _r14 = i0.ɵɵgetCurrentView();
|
|
50
|
+
i0.ɵɵelementStart(0, "mat-checkbox", 13);
|
|
51
|
+
i0.ɵɵlistener("change", function DrawPopupComponent_div_12_ng_container_6_mat_checkbox_1_Template_mat_checkbox_change_0_listener($event) { i0.ɵɵrestoreView(_r14); const ctx_r13 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r13.onLabelTypeChange($event.source.value, $event.checked)); });
|
|
52
|
+
i0.ɵɵtext(1);
|
|
53
|
+
i0.ɵɵelementEnd();
|
|
54
|
+
} if (rf & 2) {
|
|
55
|
+
const option_r12 = ctx.$implicit;
|
|
56
|
+
const ctx_r11 = i0.ɵɵnextContext(3);
|
|
57
|
+
i0.ɵɵproperty("value", option_r12.value)("disabled", ctx_r11.optionAvailable(option_r12.value))("checked", option_r12.checked);
|
|
58
|
+
i0.ɵɵadvance(1);
|
|
59
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r11.getProperLengthLabel(option_r12.value), " ");
|
|
60
|
+
} }
|
|
61
|
+
function DrawPopupComponent_div_12_ng_container_6_Template(rf, ctx) { if (rf & 1) {
|
|
62
|
+
i0.ɵɵelementContainerStart(0, 5);
|
|
63
|
+
i0.ɵɵtemplate(1, DrawPopupComponent_div_12_ng_container_6_mat_checkbox_1_Template, 2, 4, "mat-checkbox", 12);
|
|
64
|
+
i0.ɵɵelementContainerEnd();
|
|
65
|
+
} if (rf & 2) {
|
|
66
|
+
const ctx_r3 = i0.ɵɵnextContext(2);
|
|
67
|
+
i0.ɵɵadvance(1);
|
|
68
|
+
i0.ɵɵproperty("ngForOf", ctx_r3.arrayBuiltInType);
|
|
69
|
+
} }
|
|
70
|
+
function DrawPopupComponent_div_12_div_7_mat_option_6_Template(rf, ctx) { if (rf & 1) {
|
|
71
|
+
i0.ɵɵelementStart(0, "mat-option", 3);
|
|
72
|
+
i0.ɵɵtext(1);
|
|
73
|
+
i0.ɵɵelementEnd();
|
|
74
|
+
} if (rf & 2) {
|
|
75
|
+
const unit_r17 = ctx.$implicit;
|
|
76
|
+
i0.ɵɵproperty("value", unit_r17);
|
|
77
|
+
i0.ɵɵadvance(1);
|
|
78
|
+
i0.ɵɵtextInterpolate1(" ", unit_r17, " ");
|
|
79
|
+
} }
|
|
80
|
+
function DrawPopupComponent_div_12_div_7_Template(rf, ctx) { if (rf & 1) {
|
|
81
|
+
const _r19 = i0.ɵɵgetCurrentView();
|
|
82
|
+
i0.ɵɵelementStart(0, "div")(1, "mat-form-field", 14);
|
|
83
|
+
i0.ɵɵelement(2, "input", 15, 16);
|
|
84
|
+
i0.ɵɵelementEnd();
|
|
85
|
+
i0.ɵɵelementStart(4, "mat-form-field", 17)(5, "mat-select", 18);
|
|
86
|
+
i0.ɵɵlistener("selectionChange", function DrawPopupComponent_div_12_div_7_Template_mat_select_selectionChange_5_listener($event) { i0.ɵɵrestoreView(_r19); const ctx_r18 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r18.onChangeCoordinateUnit($event.value)); });
|
|
87
|
+
i0.ɵɵtemplate(6, DrawPopupComponent_div_12_div_7_mat_option_6_Template, 2, 2, "mat-option", 19);
|
|
88
|
+
i0.ɵɵelementEnd()()();
|
|
89
|
+
} if (rf & 2) {
|
|
90
|
+
const ctx_r4 = i0.ɵɵnextContext(2);
|
|
91
|
+
i0.ɵɵadvance(2);
|
|
92
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r4.currentCoordinates);
|
|
93
|
+
i0.ɵɵadvance(3);
|
|
94
|
+
i0.ɵɵproperty("value", ctx_r4.coordinatesMeasureUnit);
|
|
95
|
+
i0.ɵɵadvance(1);
|
|
96
|
+
i0.ɵɵproperty("ngForOf", ctx_r4.allCoordinatesUnits);
|
|
97
|
+
} }
|
|
98
|
+
function DrawPopupComponent_div_12_div_8_mat_option_6_Template(rf, ctx) { if (rf & 1) {
|
|
99
|
+
i0.ɵɵelementStart(0, "mat-option", 3);
|
|
100
|
+
i0.ɵɵtext(1);
|
|
101
|
+
i0.ɵɵelementEnd();
|
|
102
|
+
} if (rf & 2) {
|
|
103
|
+
const unit_r22 = ctx.$implicit;
|
|
104
|
+
const ctx_r21 = i0.ɵɵnextContext(3);
|
|
105
|
+
i0.ɵɵproperty("value", unit_r22);
|
|
106
|
+
i0.ɵɵadvance(1);
|
|
107
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r21.getLengthUnitEnum(unit_r22), " ");
|
|
108
|
+
} }
|
|
109
|
+
function DrawPopupComponent_div_12_div_8_Template(rf, ctx) { if (rf & 1) {
|
|
110
|
+
const _r24 = i0.ɵɵgetCurrentView();
|
|
111
|
+
i0.ɵɵelementStart(0, "div")(1, "mat-form-field", 14);
|
|
112
|
+
i0.ɵɵelement(2, "input", 20, 16);
|
|
113
|
+
i0.ɵɵelementEnd();
|
|
114
|
+
i0.ɵɵelementStart(4, "mat-form-field", 17)(5, "mat-select", 18);
|
|
115
|
+
i0.ɵɵlistener("selectionChange", function DrawPopupComponent_div_12_div_8_Template_mat_select_selectionChange_5_listener($event) { i0.ɵɵrestoreView(_r24); const ctx_r23 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r23.onChangeLengthUnit($event.value)); });
|
|
116
|
+
i0.ɵɵtemplate(6, DrawPopupComponent_div_12_div_8_mat_option_6_Template, 2, 2, "mat-option", 19);
|
|
117
|
+
i0.ɵɵelementEnd()()();
|
|
118
|
+
} if (rf & 2) {
|
|
119
|
+
const ctx_r5 = i0.ɵɵnextContext(2);
|
|
120
|
+
i0.ɵɵadvance(2);
|
|
121
|
+
i0.ɵɵpropertyInterpolate("placeholder", ctx_r5.lengthLabelT);
|
|
122
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r5.currentLength);
|
|
123
|
+
i0.ɵɵadvance(3);
|
|
124
|
+
i0.ɵɵproperty("value", ctx_r5.lengthMeasureUnit);
|
|
125
|
+
i0.ɵɵadvance(1);
|
|
126
|
+
i0.ɵɵproperty("ngForOf", ctx_r5.allLengthUnits);
|
|
127
|
+
} }
|
|
128
|
+
function DrawPopupComponent_div_12_div_9_mat_option_7_Template(rf, ctx) { if (rf & 1) {
|
|
129
|
+
i0.ɵɵelementStart(0, "mat-option", 3);
|
|
130
|
+
i0.ɵɵtext(1);
|
|
131
|
+
i0.ɵɵelementEnd();
|
|
132
|
+
} if (rf & 2) {
|
|
133
|
+
const unit_r27 = ctx.$implicit;
|
|
134
|
+
const ctx_r26 = i0.ɵɵnextContext(3);
|
|
135
|
+
i0.ɵɵproperty("value", unit_r27);
|
|
136
|
+
i0.ɵɵadvance(1);
|
|
137
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r26.getAreaUnitEnum(unit_r27), " ");
|
|
138
|
+
} }
|
|
139
|
+
function DrawPopupComponent_div_12_div_9_Template(rf, ctx) { if (rf & 1) {
|
|
140
|
+
const _r29 = i0.ɵɵgetCurrentView();
|
|
141
|
+
i0.ɵɵelementStart(0, "div")(1, "mat-form-field", 14);
|
|
142
|
+
i0.ɵɵelement(2, "input", 20, 16);
|
|
143
|
+
i0.ɵɵpipe(4, "translate");
|
|
144
|
+
i0.ɵɵelementEnd();
|
|
145
|
+
i0.ɵɵelementStart(5, "mat-form-field", 17)(6, "mat-select", 18);
|
|
146
|
+
i0.ɵɵlistener("selectionChange", function DrawPopupComponent_div_12_div_9_Template_mat_select_selectionChange_6_listener($event) { i0.ɵɵrestoreView(_r29); const ctx_r28 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r28.onChangeAreaUnit($event.value)); });
|
|
147
|
+
i0.ɵɵtemplate(7, DrawPopupComponent_div_12_div_9_mat_option_7_Template, 2, 2, "mat-option", 19);
|
|
148
|
+
i0.ɵɵelementEnd()()();
|
|
149
|
+
} if (rf & 2) {
|
|
150
|
+
const ctx_r6 = i0.ɵɵnextContext(2);
|
|
151
|
+
i0.ɵɵadvance(2);
|
|
152
|
+
i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(4, 4, "igo.geo.draw.labelType.Area"));
|
|
153
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r6.currentArea);
|
|
154
|
+
i0.ɵɵadvance(4);
|
|
155
|
+
i0.ɵɵproperty("value", ctx_r6.areaMeasureUnit);
|
|
156
|
+
i0.ɵɵadvance(1);
|
|
157
|
+
i0.ɵɵproperty("ngForOf", ctx_r6.allAreaUnits);
|
|
158
|
+
} }
|
|
159
|
+
function DrawPopupComponent_div_12_Template(rf, ctx) { if (rf & 1) {
|
|
160
|
+
const _r31 = i0.ɵɵgetCurrentView();
|
|
161
|
+
i0.ɵɵelementStart(0, "div")(1, "div")(2, "p", 5);
|
|
162
|
+
i0.ɵɵtext(3);
|
|
163
|
+
i0.ɵɵpipe(4, "translate");
|
|
164
|
+
i0.ɵɵelementEnd();
|
|
165
|
+
i0.ɵɵtemplate(5, DrawPopupComponent_div_12_mat_radio_group_5_Template, 2, 1, "mat-radio-group", 6);
|
|
166
|
+
i0.ɵɵtemplate(6, DrawPopupComponent_div_12_ng_container_6_Template, 2, 1, "ng-container", 6);
|
|
167
|
+
i0.ɵɵtemplate(7, DrawPopupComponent_div_12_div_7_Template, 7, 3, "div", 4);
|
|
168
|
+
i0.ɵɵtemplate(8, DrawPopupComponent_div_12_div_8_Template, 7, 4, "div", 4);
|
|
169
|
+
i0.ɵɵtemplate(9, DrawPopupComponent_div_12_div_9_Template, 8, 6, "div", 4);
|
|
170
|
+
i0.ɵɵelementEnd();
|
|
171
|
+
i0.ɵɵelementStart(10, "div", 7)(11, "button", 8);
|
|
172
|
+
i0.ɵɵlistener("click", function DrawPopupComponent_div_12_Template_button_click_11_listener() { i0.ɵɵrestoreView(_r31); const ctx_r30 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r30.cancelDrawing()); });
|
|
173
|
+
i0.ɵɵtext(12);
|
|
174
|
+
i0.ɵɵpipe(13, "translate");
|
|
175
|
+
i0.ɵɵelementEnd();
|
|
176
|
+
i0.ɵɵelementStart(14, "button", 9);
|
|
177
|
+
i0.ɵɵlistener("click", function DrawPopupComponent_div_12_Template_button_click_14_listener() { i0.ɵɵrestoreView(_r31); const ctx_r32 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r32.confirm()); });
|
|
178
|
+
i0.ɵɵtext(15);
|
|
179
|
+
i0.ɵɵelementEnd()()();
|
|
180
|
+
} if (rf & 2) {
|
|
181
|
+
const ctx_r0 = i0.ɵɵnextContext();
|
|
182
|
+
i0.ɵɵadvance(3);
|
|
183
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 8, "igo.geo.draw.builtInInstructions"));
|
|
184
|
+
i0.ɵɵadvance(2);
|
|
185
|
+
i0.ɵɵproperty("ngIf", ctx_r0.olGeometryType !== "Polygon");
|
|
186
|
+
i0.ɵɵadvance(1);
|
|
187
|
+
i0.ɵɵproperty("ngIf", ctx_r0.olGeometryType === "Polygon");
|
|
188
|
+
i0.ɵɵadvance(1);
|
|
189
|
+
i0.ɵɵproperty("ngIf", ctx_r0.labelFlag === ctx_r0.labelType.Coordinates);
|
|
190
|
+
i0.ɵɵadvance(1);
|
|
191
|
+
i0.ɵɵproperty("ngIf", ctx_r0.labelFlag === ctx_r0.labelType.Length || ctx_r0.polygonCheck === 2);
|
|
192
|
+
i0.ɵɵadvance(1);
|
|
193
|
+
i0.ɵɵproperty("ngIf", ctx_r0.labelFlag === ctx_r0.labelType.Area || ctx_r0.polygonCheck === 2);
|
|
194
|
+
i0.ɵɵadvance(3);
|
|
195
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(13, 10, "igo.geo.draw.cancel"), " ");
|
|
196
|
+
i0.ɵɵadvance(3);
|
|
197
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r0.noLabelButton(), " ");
|
|
198
|
+
} }
|
|
199
|
+
function DrawPopupComponent_div_13_Template(rf, ctx) { if (rf & 1) {
|
|
200
|
+
const _r36 = i0.ɵɵgetCurrentView();
|
|
201
|
+
i0.ɵɵelementStart(0, "div")(1, "div")(2, "p", 5);
|
|
202
|
+
i0.ɵɵtext(3);
|
|
203
|
+
i0.ɵɵpipe(4, "translate");
|
|
204
|
+
i0.ɵɵelementEnd();
|
|
205
|
+
i0.ɵɵelementStart(5, "mat-form-field", 21)(6, "input", 22, 16);
|
|
206
|
+
i0.ɵɵlistener("select", function DrawPopupComponent_div_13_Template_input_select_6_listener() { return true; })("input", function DrawPopupComponent_div_13_Template_input_input_6_listener($event) { i0.ɵɵrestoreView(_r36); const ctx_r35 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r35.getLabelLength($event.target.value)); });
|
|
207
|
+
i0.ɵɵpipe(8, "translate");
|
|
208
|
+
i0.ɵɵelementEnd()()();
|
|
209
|
+
i0.ɵɵelementStart(9, "div", 7)(10, "button", 8);
|
|
210
|
+
i0.ɵɵlistener("click", function DrawPopupComponent_div_13_Template_button_click_10_listener() { i0.ɵɵrestoreView(_r36); const ctx_r37 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r37.cancelDrawing()); });
|
|
211
|
+
i0.ɵɵtext(11);
|
|
212
|
+
i0.ɵɵpipe(12, "translate");
|
|
213
|
+
i0.ɵɵelementEnd();
|
|
214
|
+
i0.ɵɵelementStart(13, "button", 9);
|
|
215
|
+
i0.ɵɵlistener("click", function DrawPopupComponent_div_13_Template_button_click_13_listener() { i0.ɵɵrestoreView(_r36); const _r33 = i0.ɵɵreference(7); const ctx_r38 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r38.confirm(_r33.value)); });
|
|
216
|
+
i0.ɵɵtext(14);
|
|
217
|
+
i0.ɵɵelementEnd()()();
|
|
218
|
+
} if (rf & 2) {
|
|
219
|
+
const ctx_r1 = i0.ɵɵnextContext();
|
|
220
|
+
i0.ɵɵadvance(3);
|
|
221
|
+
i0.ɵɵtextInterpolate(i0.ɵɵpipeBind1(4, 5, "igo.geo.draw.dialogInstruction"));
|
|
222
|
+
i0.ɵɵadvance(3);
|
|
223
|
+
i0.ɵɵpropertyInterpolate("placeholder", i0.ɵɵpipeBind1(8, 7, "igo.geo.draw.dialogTitle"));
|
|
224
|
+
i0.ɵɵpropertyInterpolate("value", ctx_r1.currentLabel);
|
|
225
|
+
i0.ɵɵadvance(5);
|
|
226
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(12, 9, "igo.geo.draw.cancel"), " ");
|
|
227
|
+
i0.ɵɵadvance(3);
|
|
228
|
+
i0.ɵɵtextInterpolate1(" ", ctx_r1.noLabelButton(), " ");
|
|
229
|
+
} }
|
|
9
230
|
export class DrawPopupComponent {
|
|
10
|
-
constructor(dialogRef, data) {
|
|
231
|
+
constructor(languageService, dialogRef, data) {
|
|
232
|
+
this.languageService = languageService;
|
|
11
233
|
this.dialogRef = dialogRef;
|
|
12
234
|
this.data = data;
|
|
13
235
|
this.confirmFlag = false;
|
|
236
|
+
this.labelFlag = LabelType.Custom;
|
|
237
|
+
this.geometryType = GeometryType;
|
|
238
|
+
this.labelType = LabelType;
|
|
239
|
+
this.arrayBuiltInType = [];
|
|
240
|
+
this.olGeometryType = undefined;
|
|
241
|
+
this.polygonCheck = 0; // Count for polygon label types checkboxes
|
|
242
|
+
this.currentLabel = this.data.olGeometry.get('draw');
|
|
243
|
+
this.labelLength = this.currentLabel ? this.currentLabel.length : 0;
|
|
244
|
+
let olGeometry;
|
|
245
|
+
const projection = this.data.map.ol.getView().getProjection();
|
|
246
|
+
if (this.data.olGeometry instanceof OlFeature) {
|
|
247
|
+
if (this.data.olGeometry.get('rad')) {
|
|
248
|
+
const longitudeLatitude = [this.data.olGeometry.get('longitude'), this.data.olGeometry.get('latitude')];
|
|
249
|
+
this.olGeometryType = GeometryType.Circle;
|
|
250
|
+
olGeometry = new Circle(longitudeLatitude, this.data.olGeometry.get('rad'));
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
this.olGeometryType = this.data.olGeometry.getGeometry().getType();
|
|
254
|
+
olGeometry = this.data.olGeometry.get('geometry');
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
this.olGeometryType = this.data.olGeometry.getType();
|
|
259
|
+
olGeometry = this.data.olGeometry;
|
|
260
|
+
}
|
|
261
|
+
if (this.olGeometryType === GeometryType.Point || this.olGeometryType === GeometryType.Circle) {
|
|
262
|
+
if (this.data.olGeometry instanceof OlFeature) {
|
|
263
|
+
let longitude = this.data.olGeometry.get('longitude');
|
|
264
|
+
let latitude = this.data.olGeometry.get('latitude');
|
|
265
|
+
this.longlatDD = roundCoordTo([longitude, latitude], 5);
|
|
266
|
+
this.coordinatesInDD = '(' + latitude + ', '
|
|
267
|
+
+ longitude + ')';
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
let point4326 = transform(this.data.olGeometry.getFlatCoordinates(), projection, 'EPSG:4326');
|
|
271
|
+
this.longlatDD = roundCoordTo([point4326[0], point4326[1]], 5);
|
|
272
|
+
this.coordinatesInDD =
|
|
273
|
+
'(' + this.longlatDD[1] + ', ' + this.longlatDD[0] + ')';
|
|
274
|
+
}
|
|
275
|
+
this.currentCoordinates = this.coordinatesInDD;
|
|
276
|
+
}
|
|
277
|
+
if (this.olGeometryType === GeometryType.LineString) {
|
|
278
|
+
this.lengthInMeters = measureOlGeometryLength(olGeometry, projection.getCode()).toFixed(2);
|
|
279
|
+
this.currentLength = this.lengthInMeters;
|
|
280
|
+
}
|
|
281
|
+
else if (this.olGeometryType === GeometryType.Polygon) {
|
|
282
|
+
this.lengthInMeters = measureOlGeometryLength(olGeometry, projection.getCode()).toFixed(2);
|
|
283
|
+
this.currentLength = this.lengthInMeters;
|
|
284
|
+
this.areaInMetersSquare = measureOlGeometryArea(olGeometry, projection.getCode()).toFixed(2);
|
|
285
|
+
this.currentArea = this.areaInMetersSquare;
|
|
286
|
+
}
|
|
287
|
+
else if (this.olGeometryType === GeometryType.Circle) {
|
|
288
|
+
let circularPolygon = fromCircle(olGeometry, 10000);
|
|
289
|
+
const radius = this.getRadius(circularPolygon);
|
|
290
|
+
this.lengthInMeters = radius.toFixed(2);
|
|
291
|
+
this.currentLength = this.lengthInMeters;
|
|
292
|
+
this.areaInMetersSquare = measureOlGeometryArea(circularPolygon, projection.getCode()).toFixed(2);
|
|
293
|
+
this.currentArea = this.areaInMetersSquare;
|
|
294
|
+
}
|
|
295
|
+
if (data.olGeometry.get('labelType') === LabelType.Coordinates) {
|
|
296
|
+
this.onLabelTypeChange(LabelType.Predefined);
|
|
297
|
+
this.onLabelTypeChange(LabelType.Coordinates, true);
|
|
298
|
+
this.coordinatesMeasureUnit = data.olGeometry.get('measureUnit');
|
|
299
|
+
}
|
|
300
|
+
else if (data.olGeometry.get('labelType') === LabelType.Length) {
|
|
301
|
+
this.onLabelTypeChange(LabelType.Predefined);
|
|
302
|
+
this.onLabelTypeChange(LabelType.Length, true);
|
|
303
|
+
this.lengthMeasureUnit = data.olGeometry.get('measureUnit');
|
|
304
|
+
}
|
|
305
|
+
else if (data.olGeometry.get('labelType') === LabelType.Area) {
|
|
306
|
+
this.onLabelTypeChange(LabelType.Predefined);
|
|
307
|
+
this.onLabelTypeChange(LabelType.Area, true);
|
|
308
|
+
this.areaMeasureUnit = data.olGeometry.get('measureUnit');
|
|
309
|
+
}
|
|
310
|
+
else if (data.olGeometry.get('labelType')?.length === 2) {
|
|
311
|
+
this.onLabelTypeChange(LabelType.Predefined);
|
|
312
|
+
this.onLabelTypeChange(LabelType.Length, true);
|
|
313
|
+
this.onLabelTypeChange(LabelType.Area, true);
|
|
314
|
+
this.lengthMeasureUnit = data.olGeometry.get('measureUnit')[0];
|
|
315
|
+
this.areaMeasureUnit = data.olGeometry.get('measureUnit')[1];
|
|
316
|
+
}
|
|
317
|
+
this.buildArrayType();
|
|
14
318
|
}
|
|
319
|
+
/**
|
|
320
|
+
* HTML Interactions
|
|
321
|
+
*/
|
|
15
322
|
cancelDrawing() {
|
|
16
323
|
this.dialogRef.close();
|
|
17
324
|
}
|
|
18
|
-
confirm(
|
|
325
|
+
confirm(input) {
|
|
19
326
|
this.confirmFlag = true;
|
|
20
|
-
this.
|
|
327
|
+
if (this.labelFlag === LabelType.Predefined) {
|
|
328
|
+
this.dialogRef.close();
|
|
329
|
+
}
|
|
330
|
+
else if (this.labelFlag === LabelType.Custom) {
|
|
331
|
+
this.dialogRef.close({
|
|
332
|
+
label: input
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
else if (this.labelFlag === LabelType.Coordinates) {
|
|
336
|
+
this.dialogRef.close({
|
|
337
|
+
label: this.currentCoordinates,
|
|
338
|
+
measureUnit: this.coordinatesMeasureUnit
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
else if (this.olGeometryType === GeometryType.Polygon) {
|
|
342
|
+
if (this.polygonCheck === 2) {
|
|
343
|
+
this.labelFlag = [LabelType.Length, LabelType.Area];
|
|
344
|
+
this.dialogRef.close({
|
|
345
|
+
label: 'P: ' + this.currentLength + ' ' + MeasureLengthUnitAbbreviation[MeasureLengthUnit.Meters] + '\n'
|
|
346
|
+
+ this.languageService.translate.instant('igo.geo.draw.labelType.A') + this.currentArea + ' ' +
|
|
347
|
+
MeasureAreaUnitAbbreviation[MeasureAreaUnit.SquareMeters], measureUnit: [this.lengthMeasureUnit, this.areaMeasureUnit]
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
this.labelFlag === LabelType.Length ?
|
|
352
|
+
this.dialogRef.close({
|
|
353
|
+
label: 'P: ' + this.currentLength + ' ' + MeasureLengthUnitAbbreviation[this.lengthMeasureUnit],
|
|
354
|
+
measureUnit: this.lengthMeasureUnit
|
|
355
|
+
}) :
|
|
356
|
+
this.dialogRef.close({
|
|
357
|
+
label: this.currentArea + ' ' + MeasureAreaUnitAbbreviation[this.areaMeasureUnit],
|
|
358
|
+
measureUnit: this.areaMeasureUnit
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
else if (this.labelFlag === LabelType.Length) {
|
|
363
|
+
if (this.olGeometryType === GeometryType.Circle) {
|
|
364
|
+
this.dialogRef.close({
|
|
365
|
+
label: 'R: ' + this.currentLength + ' ' + MeasureLengthUnitAbbreviation[this.lengthMeasureUnit],
|
|
366
|
+
measureUnit: this.lengthMeasureUnit
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
else if (this.olGeometryType === GeometryType.LineString) {
|
|
370
|
+
this.dialogRef.close({
|
|
371
|
+
label: this.currentLength + ' ' + MeasureLengthUnitAbbreviation[this.lengthMeasureUnit],
|
|
372
|
+
measureUnit: this.lengthMeasureUnit
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
else if (this.labelFlag === LabelType.Area) {
|
|
377
|
+
this.dialogRef.close({
|
|
378
|
+
label: this.currentArea + ' ' + MeasureAreaUnitAbbreviation[this.areaMeasureUnit],
|
|
379
|
+
measureUnit: this.areaMeasureUnit
|
|
380
|
+
});
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
onLabelTypeChange(labelType, checked) {
|
|
384
|
+
if (labelType !== LabelType.Predefined &&
|
|
385
|
+
labelType !== LabelType.Custom &&
|
|
386
|
+
this.olGeometryType === GeometryType.Polygon) {
|
|
387
|
+
this.arrayBuiltInType.find(type => type.value === labelType) ?
|
|
388
|
+
this.arrayBuiltInType.find(type => type.value === labelType).checked = checked : this.labelFlag = undefined;
|
|
389
|
+
checked ? this.labelFlag = labelType : this.labelFlag = this.arrayBuiltInType.find(type => type.checked)?.value;
|
|
390
|
+
}
|
|
391
|
+
else {
|
|
392
|
+
this.labelFlag = labelType;
|
|
393
|
+
}
|
|
394
|
+
if (labelType === LabelType.Predefined) {
|
|
395
|
+
if (this.olGeometryType === GeometryType.Point) {
|
|
396
|
+
this.labelFlag = LabelType.Coordinates;
|
|
397
|
+
this.currentCoordinates = this.coordinatesInDD;
|
|
398
|
+
this.coordinatesMeasureUnit = CoordinatesUnit.DecimalDegree;
|
|
399
|
+
}
|
|
400
|
+
else if (this.olGeometryType === GeometryType.LineString) {
|
|
401
|
+
this.labelFlag = LabelType.Length;
|
|
402
|
+
this.currentLength = this.lengthInMeters;
|
|
403
|
+
this.lengthMeasureUnit = MeasureLengthUnit.Meters;
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
else if (labelType === LabelType.Area) {
|
|
407
|
+
this.currentArea = this.areaInMetersSquare;
|
|
408
|
+
this.areaMeasureUnit = MeasureAreaUnit.SquareMeters;
|
|
409
|
+
}
|
|
410
|
+
else if (labelType === LabelType.Length) {
|
|
411
|
+
this.currentLength = this.lengthInMeters;
|
|
412
|
+
this.lengthMeasureUnit = MeasureLengthUnit.Meters;
|
|
413
|
+
}
|
|
414
|
+
else if (this.labelFlag === LabelType.Coordinates) {
|
|
415
|
+
this.currentCoordinates = this.coordinatesInDD;
|
|
416
|
+
this.coordinatesMeasureUnit = CoordinatesUnit.DecimalDegree;
|
|
417
|
+
}
|
|
418
|
+
const labeltypes = [this.labelType.Length, this.labelType.Area];
|
|
419
|
+
if (this.olGeometryType === GeometryType.Polygon &&
|
|
420
|
+
labeltypes.includes(labelType)) {
|
|
421
|
+
checked ? this.polygonCheck += 1 : this.polygonCheck -= 1;
|
|
422
|
+
;
|
|
423
|
+
}
|
|
424
|
+
else {
|
|
425
|
+
this.polygonCheck = 0;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
onChangeLengthUnit(lengthUnit) {
|
|
429
|
+
this.lengthMeasureUnit = lengthUnit;
|
|
430
|
+
this.currentLength = metersToUnit(Number(this.lengthInMeters), lengthUnit).toFixed(2);
|
|
431
|
+
}
|
|
432
|
+
onChangeAreaUnit(areaUnit) {
|
|
433
|
+
this.areaMeasureUnit = areaUnit;
|
|
434
|
+
this.currentArea = squareMetersToUnit(Number(this.areaInMetersSquare), areaUnit).toFixed(2);
|
|
435
|
+
}
|
|
436
|
+
onChangeCoordinateUnit(coordinatesUnit) {
|
|
437
|
+
this.coordinatesMeasureUnit = coordinatesUnit;
|
|
438
|
+
let coordinates = DDtoDMS(this.longlatDD, coordinatesUnit);
|
|
439
|
+
this.currentCoordinates = '(' + coordinates[1] + ', ' + coordinates[0] + ')';
|
|
440
|
+
}
|
|
441
|
+
buildArrayType() {
|
|
442
|
+
for (const labelType of Object.values(LabelType)) {
|
|
443
|
+
if (labelType !== LabelType.Custom && labelType !== LabelType.Predefined) {
|
|
444
|
+
this.arrayBuiltInType.push({
|
|
445
|
+
value: labelType,
|
|
446
|
+
checked: this.selectOptions(labelType) ||
|
|
447
|
+
this.labelFlag === labelType ||
|
|
448
|
+
(this.polygonCheck === 2 && labelType !== LabelType.Coordinates)
|
|
449
|
+
});
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
}
|
|
453
|
+
noLabelButton() {
|
|
454
|
+
if (this.labelFlag === LabelType.Predefined || (this.labelFlag === LabelType.Custom && this.labelLength === 0)) {
|
|
455
|
+
return this.languageService.translate.instant('igo.geo.draw.noLabel');
|
|
456
|
+
}
|
|
457
|
+
return 'OK';
|
|
458
|
+
}
|
|
459
|
+
get customOrPredefined() {
|
|
460
|
+
if (this.labelFlag === LabelType.Custom) {
|
|
461
|
+
return LabelType.Custom;
|
|
462
|
+
}
|
|
463
|
+
return LabelType.Predefined;
|
|
464
|
+
}
|
|
465
|
+
optionAvailable(currentOption) {
|
|
466
|
+
switch (this.olGeometryType) {
|
|
467
|
+
case GeometryType.Point:
|
|
468
|
+
if (currentOption === LabelType.Coordinates) {
|
|
469
|
+
return false;
|
|
470
|
+
}
|
|
471
|
+
return true;
|
|
472
|
+
case GeometryType.LineString:
|
|
473
|
+
if (currentOption === LabelType.Length) {
|
|
474
|
+
return false;
|
|
475
|
+
}
|
|
476
|
+
return true;
|
|
477
|
+
case GeometryType.Polygon:
|
|
478
|
+
if (currentOption === LabelType.Coordinates) {
|
|
479
|
+
return true;
|
|
480
|
+
}
|
|
481
|
+
return false;
|
|
482
|
+
default:
|
|
483
|
+
return false;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
get allLengthUnits() {
|
|
487
|
+
return Object.values(MeasureLengthUnit);
|
|
488
|
+
}
|
|
489
|
+
getLengthUnitEnum(lengthUnit) {
|
|
490
|
+
return MeasureLengthUnitAbbreviation[lengthUnit];
|
|
491
|
+
}
|
|
492
|
+
get allAreaUnits() {
|
|
493
|
+
return Object.values(MeasureAreaUnit);
|
|
494
|
+
}
|
|
495
|
+
get allCoordinatesUnits() {
|
|
496
|
+
return Object.values(CoordinatesUnit);
|
|
497
|
+
}
|
|
498
|
+
getAreaUnitEnum(areaUnit) {
|
|
499
|
+
return MeasureAreaUnitAbbreviation[areaUnit];
|
|
500
|
+
}
|
|
501
|
+
getRadius(olGeometry) {
|
|
502
|
+
const length = getLength(olGeometry);
|
|
503
|
+
return Number(length / (2 * Math.PI));
|
|
504
|
+
}
|
|
505
|
+
get lengthLabelT() {
|
|
506
|
+
if (this.olGeometryType === GeometryType.Polygon) {
|
|
507
|
+
return this.languageService.translate.instant('igo.geo.measure.perimeter');
|
|
508
|
+
}
|
|
509
|
+
if (this.olGeometryType === GeometryType.Circle) {
|
|
510
|
+
return this.languageService.translate.instant('igo.geo.search.coordinates.radius');
|
|
511
|
+
}
|
|
512
|
+
return this.languageService.translate.instant('igo.geo.draw.labelType.Length');
|
|
513
|
+
}
|
|
514
|
+
getLabelLength(event) {
|
|
515
|
+
this.labelLength = event.length;
|
|
516
|
+
}
|
|
517
|
+
selectOptions(option) {
|
|
518
|
+
if (this.olGeometryType === GeometryType.Point) {
|
|
519
|
+
return option === LabelType.Coordinates;
|
|
520
|
+
}
|
|
521
|
+
else if (this.olGeometryType === GeometryType.LineString) {
|
|
522
|
+
return option === LabelType.Length;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
getProperLengthLabel(option) {
|
|
526
|
+
if (option === LabelType.Length) {
|
|
527
|
+
if (this.olGeometryType === GeometryType.Polygon) {
|
|
528
|
+
return this.languageService.translate.instant('igo.geo.measure.perimeter');
|
|
529
|
+
}
|
|
530
|
+
if (this.olGeometryType === GeometryType.Circle) {
|
|
531
|
+
return this.languageService.translate.instant('igo.geo.search.coordinates.radius');
|
|
532
|
+
}
|
|
533
|
+
return this.languageService.translate.instant('igo.geo.draw.labelType.Length');
|
|
534
|
+
}
|
|
535
|
+
return this.languageService.translate.instant('igo.geo.draw.labelType.' + option);
|
|
21
536
|
}
|
|
22
537
|
}
|
|
23
|
-
DrawPopupComponent.ɵfac = function DrawPopupComponent_Factory(t) { return new (t || DrawPopupComponent)(i0.ɵɵdirectiveInject(i1.MatDialogRef), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA)); };
|
|
24
|
-
DrawPopupComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawPopupComponent, selectors: [["igo-draw-popup-component"]], inputs: { confirmFlag: "confirmFlag" }, decls: 14, vars:
|
|
25
|
-
|
|
26
|
-
i0.ɵɵelementStart(0, "div", 0)(1, "p", 1);
|
|
538
|
+
DrawPopupComponent.ɵfac = function DrawPopupComponent_Factory(t) { return new (t || DrawPopupComponent)(i0.ɵɵdirectiveInject(i1.LanguageService), i0.ɵɵdirectiveInject(i2.MatDialogRef), i0.ɵɵdirectiveInject(MAT_DIALOG_DATA)); };
|
|
539
|
+
DrawPopupComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: DrawPopupComponent, selectors: [["igo-draw-popup-component"]], inputs: { confirmFlag: "confirmFlag", labelFlag: "labelFlag", coordinatesMeasureUnit: "coordinatesMeasureUnit", lengthMeasureUnit: "lengthMeasureUnit", areaMeasureUnit: "areaMeasureUnit" }, decls: 14, vars: 14, consts: [["mat-dialog-title", ""], [1, "geometry-type-toggle", "mat-typography"], [3, "value", "change"], [3, "value"], [4, "ngIf"], [1, "mat-typography"], ["class", "mat-typography", 4, "ngIf"], ["mat-dialog-actions", ""], ["mat-raised-button", "", 3, "click"], ["mat-raised-button", "", "color", "primary", 3, "click"], [3, "value", "disabled", "checked", "change", 4, "ngFor", "ngForOf"], [3, "value", "disabled", "checked", "change"], ["class", "mat-typography", 3, "value", "disabled", "checked", "change", 4, "ngFor", "ngForOf"], [1, "mat-typography", 3, "value", "disabled", "checked", "change"], [1, "readOnly-Input"], ["matInput", "", "placeholder", "(Latitude, Longitude)", "readonly", "", 3, "value"], ["input", ""], [1, "unit-field"], [3, "value", "selectionChange"], [3, "value", 4, "ngFor", "ngForOf"], ["matInput", "", "readonly", "", 3, "placeholder", "value"], [1, "input"], ["matInput", "", "cdkFocusInitial", "", 3, "placeholder", "value", "select", "input"]], template: function DrawPopupComponent_Template(rf, ctx) { if (rf & 1) {
|
|
540
|
+
i0.ɵɵelementStart(0, "div")(1, "h2", 0);
|
|
27
541
|
i0.ɵɵtext(2);
|
|
28
542
|
i0.ɵɵpipe(3, "translate");
|
|
29
|
-
i0.ɵɵelementEnd();
|
|
30
|
-
i0.ɵɵelementStart(4, "mat-form-field", 2);
|
|
31
|
-
i0.ɵɵelement(5, "input", 3, 4);
|
|
32
|
-
i0.ɵɵpipe(7, "translate");
|
|
33
543
|
i0.ɵɵelementEnd()();
|
|
34
|
-
i0.ɵɵelementStart(
|
|
35
|
-
i0.ɵɵlistener("
|
|
544
|
+
i0.ɵɵelementStart(4, "div", 1)(5, "mat-button-toggle-group", 2);
|
|
545
|
+
i0.ɵɵlistener("change", function DrawPopupComponent_Template_mat_button_toggle_group_change_5_listener($event) { return ctx.onLabelTypeChange($event.value); });
|
|
546
|
+
i0.ɵɵelementStart(6, "mat-button-toggle", 3);
|
|
547
|
+
i0.ɵɵtext(7);
|
|
548
|
+
i0.ɵɵpipe(8, "translate");
|
|
549
|
+
i0.ɵɵelementEnd();
|
|
550
|
+
i0.ɵɵelementStart(9, "mat-button-toggle", 3);
|
|
36
551
|
i0.ɵɵtext(10);
|
|
37
552
|
i0.ɵɵpipe(11, "translate");
|
|
38
|
-
i0.ɵɵelementEnd();
|
|
39
|
-
i0.ɵɵ
|
|
40
|
-
i0.ɵɵ
|
|
41
|
-
i0.ɵɵtext(13, "OK ");
|
|
42
|
-
i0.ɵɵelementEnd()();
|
|
553
|
+
i0.ɵɵelementEnd()()();
|
|
554
|
+
i0.ɵɵtemplate(12, DrawPopupComponent_div_12_Template, 16, 12, "div", 4);
|
|
555
|
+
i0.ɵɵtemplate(13, DrawPopupComponent_div_13_Template, 15, 11, "div", 4);
|
|
43
556
|
} if (rf & 2) {
|
|
44
557
|
i0.ɵɵadvance(2);
|
|
45
|
-
i0.ɵɵ
|
|
558
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(3, 8, "igo.geo.draw.popupTitle"), " ");
|
|
46
559
|
i0.ɵɵadvance(3);
|
|
47
|
-
i0.ɵɵ
|
|
48
|
-
i0.ɵɵ
|
|
49
|
-
i0.ɵɵ
|
|
50
|
-
i0.ɵɵ
|
|
51
|
-
|
|
560
|
+
i0.ɵɵproperty("value", ctx.customOrPredefined);
|
|
561
|
+
i0.ɵɵadvance(1);
|
|
562
|
+
i0.ɵɵproperty("value", ctx.labelType.Custom);
|
|
563
|
+
i0.ɵɵadvance(1);
|
|
564
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(8, 10, "igo.geo.draw.labelType.custom"), " ");
|
|
565
|
+
i0.ɵɵadvance(2);
|
|
566
|
+
i0.ɵɵproperty("value", ctx.labelType.Predefined);
|
|
567
|
+
i0.ɵɵadvance(1);
|
|
568
|
+
i0.ɵɵtextInterpolate1(" ", i0.ɵɵpipeBind1(11, 12, "igo.geo.draw.labelType.predefined"), " ");
|
|
569
|
+
i0.ɵɵadvance(2);
|
|
570
|
+
i0.ɵɵproperty("ngIf", ctx.labelFlag !== ctx.labelType.Custom);
|
|
571
|
+
i0.ɵɵadvance(1);
|
|
572
|
+
i0.ɵɵproperty("ngIf", ctx.labelFlag === ctx.labelType.Custom);
|
|
573
|
+
} }, dependencies: [i3.NgForOf, i3.NgIf, i4.MatButton, i5.MatButtonToggleGroup, i5.MatButtonToggle, i6.MatFormField, i7.MatInput, i8.MatSelect, i9.MatOption, i2.MatDialogTitle, i2.MatDialogActions, i10.MatRadioGroup, i10.MatRadioButton, i11.MatCheckbox, i12.TranslatePipe], styles: [".mat-radio-button[_ngcontent-%COMP%] ~ .mat-radio-button[_ngcontent-%COMP%]{margin-left:16px}.readOnly-Input[_ngcontent-%COMP%]{width:200px!important}.unit-field[_ngcontent-%COMP%]{width:50px;margin-left:10px;margin-top:10px}.mat-form-field[_ngcontent-%COMP%]{position:-webkit-sticky!important;position:sticky!important}.coordinatesInputView[_ngcontent-%COMP%]{top:5em!important} .mat-form-field-wrapper{margin-bottom:-1.25em;margin-top:.25em}.geometry-type-toggle[_ngcontent-%COMP%], .mat-dialog-actions[_ngcontent-%COMP%]{display:flex!important;justify-content:center}.input[_ngcontent-%COMP%]{width:auto!important}.mat-button-toggle-group[_ngcontent-%COMP%], .mat-button-toggle[_ngcontent-%COMP%]{width:100%}mat-checkbox[_ngcontent-%COMP%]{margin-right:10px}"] });
|
|
52
574
|
(function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DrawPopupComponent, [{
|
|
53
575
|
type: Component,
|
|
54
|
-
args: [{ selector: 'igo-draw-popup-component', template: "<div mat-dialog-
|
|
55
|
-
}], function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
576
|
+
args: [{ selector: 'igo-draw-popup-component', template: "<div>\r\n <h2 mat-dialog-title>\r\n {{ 'igo.geo.draw.popupTitle' | translate }}\r\n </h2>\r\n</div>\r\n\r\n\r\n<div class=\"geometry-type-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n (change)=\"onLabelTypeChange($event.value)\" [value]=\"customOrPredefined\">\r\n <mat-button-toggle [value]=\"labelType.Custom\" >\r\n {{ 'igo.geo.draw.labelType.custom' | translate }}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"labelType.Predefined\">\r\n {{ 'igo.geo.draw.labelType.predefined' | translate }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div *ngIf=\"labelFlag !== labelType.Custom\">\r\n <div>\r\n <p class=\"mat-typography\">{{ 'igo.geo.draw.builtInInstructions' | translate }}</p>\r\n <mat-radio-group *ngIf=\"olGeometryType !== 'Polygon'\" class=\"mat-typography\">\r\n <mat-radio-button *ngFor=\"let option of arrayBuiltInType\" [value]=\"option.value\" [disabled]=\"optionAvailable(option.value)\" \r\n (change)=\"onLabelTypeChange($event.value)\" [checked]=\"option.checked\">\r\n {{getProperLengthLabel(option.value)}}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n <ng-container class=\"mat-typography\" *ngIf=\"olGeometryType === 'Polygon'\">\r\n <mat-checkbox\r\n *ngFor=\"let option of arrayBuiltInType\"\r\n class=\"mat-typography\"\r\n [value]=\"option.value\"\r\n [disabled]=\"optionAvailable(option.value)\"\r\n (change)=\"onLabelTypeChange($event.source.value, $event.checked)\"\r\n [checked]=\"option.checked\">\r\n {{getProperLengthLabel(option.value)}}\r\n </mat-checkbox>\r\n </ng-container>\r\n <div *ngIf=\"labelFlag === labelType.Coordinates\">\r\n <mat-form-field class=\"readOnly-Input\">\r\n <input\r\n #input\r\n matInput\r\n placeholder=\"(Latitude, Longitude)\"\r\n value=\"{{currentCoordinates}}\" readonly>\r\n </mat-form-field>\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select [value]=\"coordinatesMeasureUnit\" (selectionChange)=\"onChangeCoordinateUnit($event.value)\">\r\n <mat-option *ngFor=\"let unit of allCoordinatesUnits\" [value]=\"unit\">\r\n {{unit}}\r\n </mat-option>\r\n </mat-select> \r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"labelFlag === labelType.Length || polygonCheck === 2\">\r\n <mat-form-field class=\"readOnly-Input\">\r\n <input\r\n #input\r\n matInput\r\n placeholder={{lengthLabelT}}\r\n value=\"{{currentLength}}\" readonly>\r\n </mat-form-field>\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select [value]=\"lengthMeasureUnit\" (selectionChange)=\"onChangeLengthUnit($event.value)\">\r\n <mat-option *ngFor=\"let unit of allLengthUnits\" [value]=\"unit\">\r\n {{getLengthUnitEnum(unit)}}\r\n </mat-option>\r\n </mat-select> \r\n </mat-form-field>\r\n </div>\r\n <div *ngIf=\"labelFlag === labelType.Area || polygonCheck === 2\">\r\n <mat-form-field class=\"readOnly-Input\">\r\n <input\r\n #input\r\n matInput\r\n placeholder=\"{{ 'igo.geo.draw.labelType.Area' | translate }}\"\r\n value=\"{{currentArea}}\" readonly>\r\n </mat-form-field>\r\n <mat-form-field class=\"unit-field\">\r\n <mat-select [value]=\"areaMeasureUnit\" (selectionChange)=\"onChangeAreaUnit($event.value)\">\r\n <mat-option *ngFor=\"let unit of allAreaUnits\" [value]=\"unit\">\r\n {{getAreaUnitEnum(unit)}}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n\r\n\r\n <div mat-dialog-actions>\r\n <button mat-raised-button (click)=\"cancelDrawing()\" >\r\n {{'igo.geo.draw.cancel' | translate}}\r\n </button>\r\n <button \r\n mat-raised-button \r\n color=\"primary\" \r\n (click)=\"confirm()\"> \r\n {{noLabelButton()}} \r\n </button>\r\n </div>\r\n</div>\r\n\r\n<div *ngIf=\"labelFlag === labelType.Custom\">\r\n <div>\r\n <p class=\"mat-typography\">{{ 'igo.geo.draw.dialogInstruction' | translate }}</p>\r\n <mat-form-field class=\"input\">\r\n <input\r\n #input\r\n matInput\r\n (select)=\"true\"\r\n (input)=\"getLabelLength($event.target.value)\"\r\n placeholder=\"{{'igo.geo.draw.dialogTitle' | translate}}\"\r\n value=\"{{ currentLabel }}\"\r\n cdkFocusInitial/>\r\n </mat-form-field>\r\n </div>\r\n \r\n <div mat-dialog-actions>\r\n <button mat-raised-button (click)=\"cancelDrawing()\" >\r\n {{'igo.geo.draw.cancel' | translate}}\r\n </button>\r\n <button \r\n mat-raised-button \r\n color=\"primary\" \r\n (click)=\"confirm(input.value)\">\r\n {{noLabelButton()}}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".mat-radio-button~.mat-radio-button{margin-left:16px}.readOnly-Input{width:200px!important}.unit-field{width:50px;margin-left:10px;margin-top:10px}.mat-form-field{position:-webkit-sticky!important;position:sticky!important}.coordinatesInputView{top:5em!important}::ng-deep .mat-form-field-wrapper{margin-bottom:-1.25em;margin-top:.25em}.geometry-type-toggle,.mat-dialog-actions{display:flex!important;justify-content:center}.input{width:auto!important}.mat-button-toggle-group,.mat-button-toggle{width:100%}mat-checkbox{margin-right:10px}\n"] }]
|
|
577
|
+
}], function () { return [{ type: i1.LanguageService }, { type: i2.MatDialogRef }, { type: undefined, decorators: [{
|
|
56
578
|
type: Inject,
|
|
57
579
|
args: [MAT_DIALOG_DATA]
|
|
58
580
|
}] }]; }, { confirmFlag: [{
|
|
59
581
|
type: Input
|
|
582
|
+
}], labelFlag: [{
|
|
583
|
+
type: Input
|
|
584
|
+
}], coordinatesMeasureUnit: [{
|
|
585
|
+
type: Input
|
|
586
|
+
}], lengthMeasureUnit: [{
|
|
587
|
+
type: Input
|
|
588
|
+
}], areaMeasureUnit: [{
|
|
589
|
+
type: Input
|
|
60
590
|
}] }); })();
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy1wb3B1cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekQsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7OztBQU96RSxNQUFNLE9BQU8sa0JBQWtCO0lBRzdCLFlBQ1MsU0FBMkMsRUFDbEIsSUFBOEI7UUFEdkQsY0FBUyxHQUFULFNBQVMsQ0FBa0M7UUFDbEIsU0FBSSxHQUFKLElBQUksQ0FBMEI7UUFKdkQsZ0JBQVcsR0FBWSxLQUFLLENBQUM7SUFJNEIsQ0FBQztJQUVuRSxhQUFhO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxDQUFDLFdBQW1CO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7O29GQWRVLGtCQUFrQiw4REFLbkIsZUFBZTtxRUFMZCxrQkFBa0I7O1FDUi9CLDhCQUF3QixXQUFBO1FBQ0ksWUFBa0Q7O1FBQUEsaUJBQUk7UUFDaEYseUNBQTJDO1FBQ3pDLDhCQUlpQzs7UUFDbkMsaUJBQWlCLEVBQUE7UUFFbkIsOEJBQXdCLGdCQUFBO1FBR3BCLCtGQUFTLG1CQUFlLElBQUM7UUFBQyxhQUM1Qjs7UUFBQSxpQkFBUztRQUNULGtDQUdpQztRQUEvQixzSkFBUyxlQUFBLHNCQUFvQixDQUFBLElBQUM7UUFBQyxvQkFDakM7UUFBQSxpQkFBUyxFQUFBOztRQWxCaUIsZUFBa0Q7UUFBbEQsNEVBQWtEO1FBS3hFLGVBQXdEO1FBQXhELHlGQUF3RDtRQUN4RCx3REFBNkI7UUFNTCxlQUM1QjtRQUQ0Qiw0RUFDNUI7O3VGRE5XLGtCQUFrQjtjQUw5QixTQUFTOzJCQUNFLDBCQUEwQjs7c0JBU2pDLE1BQU07dUJBQUMsZUFBZTt3QkFKaEIsV0FBVztrQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2dSZWYsIE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2lnby1kcmF3LXBvcHVwLWNvbXBvbmVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2RyYXctcG9wdXAuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2RyYXctcG9wdXAuY29tcG9uZW50LnNjc3MnXVxyXG4gIH0pXHJcbmV4cG9ydCBjbGFzcyBEcmF3UG9wdXBDb21wb25lbnQge1xyXG4gIEBJbnB1dCgpIGNvbmZpcm1GbGFnOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGRpYWxvZ1JlZjogTWF0RGlhbG9nUmVmPERyYXdQb3B1cENvbXBvbmVudD4sXHJcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IHsgY3VycmVudExhYmVsOiBzdHJpbmcgfSl7fVxyXG5cclxuICBjYW5jZWxEcmF3aW5nKCkge1xyXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UoKTtcclxuICB9XHJcblxyXG4gIGNvbmZpcm0obGFiZWxTdHJpbmc6IHN0cmluZykge1xyXG4gICAgdGhpcy5jb25maXJtRmxhZyA9IHRydWU7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZShsYWJlbFN0cmluZyk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgbWF0LWRpYWxvZy1jb250ZW50PlxyXG4gIDxwIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIj57eyAnaWdvLmdlby5kcmF3LmRpYWxvZ0luc3RydWN0aW9uJyB8IHRyYW5zbGF0ZSB9fTwvcD5cclxuICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJleGFtcGxlLWZ1bGwtd2lkdGhcIj5cclxuICAgIDxpbnB1dFxyXG4gICAgICAjaW5wdXRcclxuICAgICAgbWF0SW5wdXRcclxuICAgICAgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLmRyYXcuZGlhbG9nVGl0bGUnIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICB2YWx1ZT1cInt7ZGF0YS5jdXJyZW50TGFiZWx9fVwiLz5cclxuICA8L21hdC1mb3JtLWZpZWxkPlxyXG48L2Rpdj5cclxuPGRpdiBtYXQtZGlhbG9nLWFjdGlvbnM+XHJcbiAgPGJ1dHRvbiBcclxuICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgKGNsaWNrKT1cImNhbmNlbERyYXdpbmcoKVwiPnt7J2lnby5nZW8uZHJhdy5jYW5jZWwnIHwgdHJhbnNsYXRlfX1cclxuICA8L2J1dHRvbj5cclxuICA8YnV0dG9uIFxyXG4gICAgbWF0LXJhaXNlZC1idXR0b24gXHJcbiAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgIChjbGljayk9XCJjb25maXJtKGlucHV0LnZhbHVlKVwiPk9LXHJcbiAgPC9idXR0b24+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
591
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhdy1wb3B1cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy1wb3B1cC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9nZW8vc3JjL2xpYi9kcmF3L2RyYXcvZHJhdy1wb3B1cC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3BDLE9BQU8sRUFBVSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFDbkMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsWUFBWSxFQUNaLGtCQUFrQixFQUNuQixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsNkJBQTZCLEVBQzdCLGVBQWUsRUFDZiwyQkFBMkIsR0FDNUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUUzQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN0QyxPQUFPLE1BQU0sTUFBTSxnQkFBZ0IsQ0FBQztBQUNwQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7SUNBekMsNENBQ3NFO0lBQXRFLHlOQUFVLGVBQUEs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ZUFBNEI7UUFBNUIsOENBQTRCO1FBQ3BELGVBQTBCO1FBQTFCLDRDQUEwQjtRQUMzQyxlQUNGO1FBREUsdUZBQ0Y7UUFDbUIsZUFBOEI7UUFBOUIsZ0RBQThCO1FBQy9DLGVBQ0Y7UUFERSw0RkFDRjtRQUlFLGVBQW9DO1FBQXBDLDZEQUFvQztRQW9GcEMsZUFBb0M7UUFBcEMsNkRBQW9DOzt1RkR4RTdCLGtCQUFrQjtjQUw5QixTQUFTOzJCQUNFLDBCQUEwQjs7c0JBa0NqQyxNQUFNO3VCQUFDLGVBQWU7d0JBN0JoQixXQUFXO2tCQUFuQixLQUFLO1lBQ0csU0FBUztrQkFBakIsS0FBSztZQUNHLHNCQUFzQjtrQkFBOUIsS0FBSztZQUNHLGlCQUFpQjtrQkFBekIsS0FBSztZQUNHLGVBQWU7a0JBQXZCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IE1hdERpYWxvZ1JlZiwgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgQ29vcmRpbmF0ZXNVbml0LCBHZW9tZXRyeVR5cGUsIExhYmVsVHlwZSB9IGZyb20gJy4uL3NoYXJlZC9kcmF3LmVudW0nO1xyXG5pbXBvcnQgeyB0cmFuc2Zvcm0gfSBmcm9tICdvbC9wcm9qJztcclxuaW1wb3J0IHsgSWdvTWFwLCByb3VuZENvb3JkVG8gfSBmcm9tICcuLi8uLi9tYXAvc2hhcmVkJztcclxuaW1wb3J0IE9sRmVhdHVyZSBmcm9tICdvbC9GZWF0dXJlJztcclxuaW1wb3J0IHtcclxuICBtZWFzdXJlT2xHZW9tZXRyeUxlbmd0aCxcclxuICBtZWFzdXJlT2xHZW9tZXRyeUFyZWEsXHJcbiAgbWV0ZXJzVG9Vbml0LFxyXG4gIHNxdWFyZU1ldGVyc1RvVW5pdFxyXG59IGZyb20gJy4uLy4uL21lYXN1cmUvc2hhcmVkL21lYXN1cmUudXRpbHMnO1xyXG5pbXBvcnQge1xyXG4gIE1lYXN1cmVMZW5ndGhVbml0LFxyXG4gIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uLFxyXG4gIE1lYXN1cmVBcmVhVW5pdCxcclxuICBNZWFzdXJlQXJlYVVuaXRBYmJyZXZpYXRpb24sXHJcbn0gZnJvbSAnLi4vLi4vbWVhc3VyZS9zaGFyZWQvbWVhc3VyZS5lbnVtJztcclxuXHJcbmltcG9ydCB7ZnJvbUNpcmNsZX0gZnJvbSAnb2wvZ2VvbS9Qb2x5Z29uJztcclxuaW1wb3J0IHsgZ2V0TGVuZ3RoIH0gZnJvbSAnb2wvc3BoZXJlJztcclxuaW1wb3J0IENpcmNsZSBmcm9tICdvbC9nZW9tL0NpcmNsZSc7XHJcbmltcG9ydCB7IEREdG9ETVMgfSBmcm9tICcuLi9zaGFyZWQvZHJhdy51dGlscyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tZHJhdy1wb3B1cC1jb21wb25lbnQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9kcmF3LXBvcHVwLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9kcmF3LXBvcHVwLmNvbXBvbmVudC5zY3NzJ11cclxuICB9KVxyXG5leHBvcnQgY2xhc3MgRHJhd1BvcHVwQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBjb25maXJtRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGxhYmVsRmxhZzogTGFiZWxUeXBlIHwgW0xhYmVsVHlwZSwgTGFiZWxUeXBlXSA9IExhYmVsVHlwZS5DdXN0b207XHJcbiAgQElucHV0KCkgY29vcmRpbmF0ZXNNZWFzdXJlVW5pdDogQ29vcmRpbmF0ZXNVbml0O1xyXG4gIEBJbnB1dCgpIGxlbmd0aE1lYXN1cmVVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdDtcclxuICBASW5wdXQoKSBhcmVhTWVhc3VyZVVuaXQ6IE1lYXN1cmVBcmVhVW5pdDtcclxuXHJcbiAgcHVibGljIGdlb21ldHJ5VHlwZSA9IEdlb21ldHJ5VHlwZTtcclxuICBwdWJsaWMgbGFiZWxUeXBlID0gTGFiZWxUeXBlO1xyXG4gIHB1YmxpYyBhcnJheUJ1aWx0SW5UeXBlOiBhbnlbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgY3VycmVudExhYmVsOiBzdHJpbmc7XHJcbiAgcHVibGljIGN1cnJlbnRDb29yZGluYXRlczogc3RyaW5nO1xyXG4gIHB1YmxpYyBjdXJyZW50QXJlYTogc3RyaW5nO1xyXG4gIHB1YmxpYyBjdXJyZW50TGVuZ3RoOiBzdHJpbmc7XHJcblxyXG4gIHB1YmxpYyBvbEdlb21ldHJ5VHlwZTogR2VvbWV0cnlUeXBlID0gdW5kZWZpbmVkO1xyXG4gIHB1YmxpYyBsZW5ndGhJbk1ldGVyczogc3RyaW5nO1xyXG4gIHB1YmxpYyBhcmVhSW5NZXRlcnNTcXVhcmU6IHN0cmluZztcclxuICBwdWJsaWMgY29vcmRpbmF0ZXNJbkREOiBzdHJpbmc7XHJcbiAgcHVibGljIGN1cnJlbnRDb29yZGluYXRlc1VuaXQ6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBsb25nbGF0REQ6IFtudW1iZXIsIG51bWJlcl07XHJcbiAgcHJpdmF0ZSBsYWJlbExlbmd0aDogbnVtYmVyO1xyXG5cclxuICBwdWJsaWMgcG9seWdvbkNoZWNrID0gMDsgLy8gQ291bnQgZm9yIHBvbHlnb24gbGFiZWwgdHlwZXMgY2hlY2tib3hlc1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RHJhd1BvcHVwQ29tcG9uZW50PixcclxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwdWJsaWMgZGF0YTogeyBvbEdlb21ldHJ5OiBhbnksIG1hcDogSWdvTWFwIH1cclxuICAgICkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRMYWJlbCA9IHRoaXMuZGF0YS5vbEdlb21ldHJ5LmdldCgnZHJhdycpO1xyXG4gICAgICB0aGlzLmxhYmVsTGVuZ3RoID0gdGhpcy5jdXJyZW50TGFiZWwgPyB0aGlzLmN1cnJlbnRMYWJlbC5sZW5ndGg6IDA7XHJcbiAgICAgIGxldCBvbEdlb21ldHJ5O1xyXG5cclxuICAgICAgY29uc3QgcHJvamVjdGlvbiA9IHRoaXMuZGF0YS5tYXAub2wuZ2V0VmlldygpLmdldFByb2plY3Rpb24oKTtcclxuXHJcbiAgICAgIGlmKHRoaXMuZGF0YS5vbEdlb21ldHJ5IGluc3RhbmNlb2YgT2xGZWF0dXJlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5vbEdlb21ldHJ5LmdldCgncmFkJykpe1xyXG4gICAgICAgICAgY29uc3QgbG9uZ2l0dWRlTGF0aXR1ZGUgPSBbdGhpcy5kYXRhLm9sR2VvbWV0cnkuZ2V0KCdsb25naXR1ZGUnKSwgdGhpcy5kYXRhLm9sR2VvbWV0cnkuZ2V0KCdsYXRpdHVkZScpXTtcclxuICAgICAgICAgIHRoaXMub2xHZW9tZXRyeVR5cGUgPSBHZW9tZXRyeVR5cGUuQ2lyY2xlO1xyXG4gICAgICAgICAgb2xHZW9tZXRyeSA9IG5ldyBDaXJjbGUobG9uZ2l0dWRlTGF0aXR1ZGUsIHRoaXMuZGF0YS5vbEdlb21ldHJ5LmdldCgncmFkJykpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNle1xyXG4gICAgICAgICAgdGhpcy5vbEdlb21ldHJ5VHlwZSA9IHRoaXMuZGF0YS5vbEdlb21ldHJ5LmdldEdlb21ldHJ5KCkuZ2V0VHlwZSgpO1xyXG4gICAgICAgICAgb2xHZW9tZXRyeSA9IHRoaXMuZGF0YS5vbEdlb21ldHJ5LmdldCgnZ2VvbWV0cnknKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZXtcclxuICAgICAgICB0aGlzLm9sR2VvbWV0cnlUeXBlID0gdGhpcy5kYXRhLm9sR2VvbWV0cnkuZ2V0VHlwZSgpO1xyXG4gICAgICAgIG9sR2VvbWV0cnkgPSB0aGlzLmRhdGEub2xHZW9tZXRyeTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5Qb2ludCB8fCB0aGlzLm9sR2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuQ2lyY2xlKXtcclxuICAgICAgICBpZih0aGlzLmRhdGEub2xHZW9tZXRyeSBpbnN0YW5jZW9mIE9sRmVhdHVyZSl7XHJcbiAgICAgICAgICBsZXQgbG9uZ2l0dWRlID0gdGhpcy5kYXRhLm9sR2VvbWV0cnkuZ2V0KCdsb25naXR1ZGUnKTtcclxuICAgICAgICAgIGxldCBsYXRpdHVkZSA9IHRoaXMuZGF0YS5vbEdlb21ldHJ5LmdldCgnbGF0aXR1ZGUnKTtcclxuICAgICAgICAgIHRoaXMubG9uZ2xhdEREID0gcm91bmRDb29yZFRvKFtsb25naXR1ZGUsIGxhdGl0dWRlXSwgNSk7XHJcbiAgICAgICAgICB0aGlzLmNvb3JkaW5hdGVzSW5ERCA9ICcoJyArIGxhdGl0dWRlICsgJywgJ1xyXG4gICAgICAgICAgKyBsb25naXR1ZGUgKyAnKSc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHBvaW50NDMyNiA9IHRyYW5zZm9ybShcclxuICAgICAgICAgICAgdGhpcy5kYXRhLm9sR2VvbWV0cnkuZ2V0RmxhdENvb3JkaW5hdGVzKCksXHJcbiAgICAgICAgICAgIHByb2plY3Rpb24sXHJcbiAgICAgICAgICAgICdFUFNHOjQzMjYnXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5sb25nbGF0REQgPSByb3VuZENvb3JkVG8oW3BvaW50NDMyNlswXSwgcG9pbnQ0MzI2WzFdXSwgNSk7XHJcbiAgICAgICAgICB0aGlzLmNvb3JkaW5hdGVzSW5ERCA9XHJcbiAgICAgICAgICAgICcoJyArIHRoaXMubG9uZ2xhdEREWzFdICsgJywgJyArIHRoaXMubG9uZ2xhdEREWzBdICsgJyknO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9IHRoaXMuY29vcmRpbmF0ZXNJbkREO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLm9sR2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuTGluZVN0cmluZyl7XHJcbiAgICAgICAgdGhpcy5sZW5ndGhJbk1ldGVycyA9IG1lYXN1cmVPbEdlb21ldHJ5TGVuZ3RoKG9sR2VvbWV0cnksIHByb2plY3Rpb24uZ2V0Q29kZSgpKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudExlbmd0aCA9IHRoaXMubGVuZ3RoSW5NZXRlcnM7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vbEdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLlBvbHlnb24pe1xyXG4gICAgICAgIHRoaXMubGVuZ3RoSW5NZXRlcnMgPSBtZWFzdXJlT2xHZW9tZXRyeUxlbmd0aChvbEdlb21ldHJ5LCBwcm9qZWN0aW9uLmdldENvZGUoKSkudG9GaXhlZCgyKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRMZW5ndGggPSB0aGlzLmxlbmd0aEluTWV0ZXJzO1xyXG4gICAgICAgIHRoaXMuYXJlYUluTWV0ZXJzU3F1YXJlID0gbWVhc3VyZU9sR2VvbWV0cnlBcmVhKG9sR2VvbWV0cnkscHJvamVjdGlvbi5nZXRDb2RlKCkpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50QXJlYSA9IHRoaXMuYXJlYUluTWV0ZXJzU3F1YXJlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYodGhpcy5vbEdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLkNpcmNsZSl7XHJcbiAgICAgICAgbGV0IGNpcmN1bGFyUG9seWdvbiA9IGZyb21DaXJjbGUob2xHZW9tZXRyeSwgMTAwMDApO1xyXG4gICAgICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMuZ2V0UmFkaXVzKGNpcmN1bGFyUG9seWdvbik7XHJcbiAgICAgICAgdGhpcy5sZW5ndGhJbk1ldGVycyA9IHJhZGl1cy50b0ZpeGVkKDIpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudExlbmd0aCA9IHRoaXMubGVuZ3RoSW5NZXRlcnM7XHJcbiAgICAgICAgdGhpcy5hcmVhSW5NZXRlcnNTcXVhcmUgPSBtZWFzdXJlT2xHZW9tZXRyeUFyZWEoY2lyY3VsYXJQb2x5Z29uLHByb2plY3Rpb24uZ2V0Q29kZSgpKS50b0ZpeGVkKDIpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudEFyZWEgPSB0aGlzLmFyZWFJbk1ldGVyc1NxdWFyZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRhdGEub2xHZW9tZXRyeS5nZXQoJ2xhYmVsVHlwZScpID09PSBMYWJlbFR5cGUuQ29vcmRpbmF0ZXMpIHtcclxuICAgICAgICB0aGlzLm9uTGFiZWxUeXBlQ2hhbmdlKExhYmVsVHlwZS5QcmVkZWZpbmVkKTtcclxuICAgICAgICB0aGlzLm9uTGFiZWxUeXBlQ2hhbmdlKExhYmVsVHlwZS5Db29yZGluYXRlcywgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5jb29yZGluYXRlc01lYXN1cmVVbml0ID0gZGF0YS5vbEdlb21ldHJ5LmdldCgnbWVhc3VyZVVuaXQnKTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLm9sR2VvbWV0cnkuZ2V0KCdsYWJlbFR5cGUnKSA9PT0gTGFiZWxUeXBlLkxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMub25MYWJlbFR5cGVDaGFuZ2UoTGFiZWxUeXBlLlByZWRlZmluZWQpO1xyXG4gICAgICAgIHRoaXMub25MYWJlbFR5cGVDaGFuZ2UoTGFiZWxUeXBlLkxlbmd0aCwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5sZW5ndGhNZWFzdXJlVW5pdCA9IGRhdGEub2xHZW9tZXRyeS5nZXQoJ21lYXN1cmVVbml0Jyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5vbEdlb21ldHJ5LmdldCgnbGFiZWxUeXBlJykgPT09IExhYmVsVHlwZS5BcmVhKSB7XHJcbiAgICAgICAgdGhpcy5vbkxhYmVsVHlwZUNoYW5nZShMYWJlbFR5cGUuUHJlZGVmaW5lZCk7XHJcbiAgICAgICAgdGhpcy5vbkxhYmVsVHlwZUNoYW5nZShMYWJlbFR5cGUuQXJlYSwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5hcmVhTWVhc3VyZVVuaXQgPSBkYXRhLm9sR2VvbWV0cnkuZ2V0KCdtZWFzdXJlVW5pdCcpO1xyXG4gICAgICB9IGVsc2UgaWYgKGRhdGEub2xHZW9tZXRyeS5nZXQoJ2xhYmVsVHlwZScpPy5sZW5ndGggPT09IDIpIHtcclxuICAgICAgICB0aGlzLm9uTGFiZWxUeXBlQ2hhbmdlKExhYmVsVHlwZS5QcmVkZWZpbmVkKTtcclxuICAgICAgICB0aGlzLm9uTGFiZWxUeXBlQ2hhbmdlKExhYmVsVHlwZS5MZW5ndGgsIHRydWUpO1xyXG4gICAgICAgIHRoaXMub25MYWJlbFR5cGVDaGFuZ2UoTGFiZWxUeXBlLkFyZWEsIHRydWUpO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoTWVhc3VyZVVuaXQgPSBkYXRhLm9sR2VvbWV0cnkuZ2V0KCdtZWFzdXJlVW5pdCcpWzBdO1xyXG4gICAgICAgIHRoaXMuYXJlYU1lYXN1cmVVbml0ID0gZGF0YS5vbEdlb21ldHJ5LmdldCgnbWVhc3VyZVVuaXQnKVsxXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmJ1aWxkQXJyYXlUeXBlKCk7XHJcbiAgICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEhUTUwgSW50ZXJhY3Rpb25zXHJcbiAgICovXHJcblxyXG4gIGNhbmNlbERyYXdpbmcoKSB7XHJcbiAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gIH1cclxuXHJcbiAgY29uZmlybShpbnB1dD86IHN0cmluZykge1xyXG4gICAgdGhpcy5jb25maXJtRmxhZyA9IHRydWU7XHJcbiAgICBpZih0aGlzLmxhYmVsRmxhZyA9PT0gTGFiZWxUeXBlLlByZWRlZmluZWQpe1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSgpO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5sYWJlbEZsYWcgPT09IExhYmVsVHlwZS5DdXN0b20pe1xyXG4gICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7XHJcbiAgICAgICAgbGFiZWw6IGlucHV0XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZih0aGlzLmxhYmVsRmxhZyA9PT0gTGFiZWxUeXBlLkNvb3JkaW5hdGVzKXtcclxuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyxcclxuICAgICAgICBtZWFzdXJlVW5pdDogdGhpcy5jb29yZGluYXRlc01lYXN1cmVVbml0XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5vbEdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLlBvbHlnb24pIHtcclxuICAgICAgaWYgKHRoaXMucG9seWdvbkNoZWNrID09PSAyKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbEZsYWcgPSBbTGFiZWxUeXBlLkxlbmd0aCwgTGFiZWxUeXBlLkFyZWFdO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHtcclxuICAgICAgICAgIGxhYmVsOiAnUDogJyArIHRoaXMuY3VycmVudExlbmd0aCArICcgJyArIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uW01lYXN1cmVMZW5ndGhVbml0Lk1ldGVyc10gKyAnXFxuJ1xyXG4gICAgICAgICAgKyB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5kcmF3LmxhYmVsVHlwZS5BJykgKyB0aGlzLmN1cnJlbnRBcmVhICsgJyAnICtcclxuICAgICAgICAgIE1lYXN1cmVBcmVhVW5pdEFiYnJldmlhdGlvbltNZWFzdXJlQXJlYVVuaXQuU3F1YXJlTWV0ZXJzXSwgbWVhc3VyZVVuaXQ6IFt0aGlzLmxlbmd0aE1lYXN1cmVVbml0LCB0aGlzLmFyZWFNZWFzdXJlVW5pdF1cclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxhYmVsRmxhZyA9PT0gTGFiZWxUeXBlLkxlbmd0aCA/XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xyXG4gICAgICAgICAgbGFiZWw6ICdQOiAnICsgdGhpcy5jdXJyZW50TGVuZ3RoICsgJyAnICsgTWVhc3VyZUxlbmd0aFVuaXRBYmJyZXZpYXRpb25bdGhpcy5sZW5ndGhNZWFzdXJlVW5pdF0sXHJcbiAgICAgICAgICBtZWFzdXJlVW5pdDogdGhpcy5sZW5ndGhNZWFzdXJlVW5pdFxyXG4gICAgICAgIH0pIDpcclxuICAgICAgICB0aGlzLmRpYWxvZ1JlZi5jbG9zZSh7XHJcbiAgICAgICAgICBsYWJlbDogdGhpcy5jdXJyZW50QXJlYSArICcgJyArIE1lYXN1cmVBcmVhVW5pdEFiYnJldmlhdGlvblt0aGlzLmFyZWFNZWFzdXJlVW5pdF0sXHJcbiAgICAgICAgICBtZWFzdXJlVW5pdDogdGhpcy5hcmVhTWVhc3VyZVVuaXRcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5sYWJlbEZsYWcgPT09IExhYmVsVHlwZS5MZW5ndGgpe1xyXG4gICAgICBpZiAodGhpcy5vbEdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLkNpcmNsZSl7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xyXG4gICAgICAgICAgbGFiZWw6ICdSOiAnICsgdGhpcy5jdXJyZW50TGVuZ3RoICsgJyAnICsgTWVhc3VyZUxlbmd0aFVuaXRBYmJyZXZpYXRpb25bdGhpcy5sZW5ndGhNZWFzdXJlVW5pdF0sXHJcbiAgICAgICAgICBtZWFzdXJlVW5pdDogdGhpcy5sZW5ndGhNZWFzdXJlVW5pdFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5MaW5lU3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xyXG4gICAgICAgICAgbGFiZWw6IHRoaXMuY3VycmVudExlbmd0aCArICcgJyArIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uW3RoaXMubGVuZ3RoTWVhc3VyZVVuaXRdLFxyXG4gICAgICAgICAgbWVhc3VyZVVuaXQ6IHRoaXMubGVuZ3RoTWVhc3VyZVVuaXRcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodGhpcy5sYWJlbEZsYWcgPT09IExhYmVsVHlwZS5BcmVhKXtcclxuICAgICAgdGhpcy5kaWFsb2dSZWYuY2xvc2Uoe1xyXG4gICAgICAgIGxhYmVsOiB0aGlzLmN1cnJlbnRBcmVhICsgJyAnICsgTWVhc3VyZUFyZWFVbml0QWJicmV2aWF0aW9uW3RoaXMuYXJlYU1lYXN1cmVVbml0XSxcclxuICAgICAgICBtZWFzdXJlVW5pdDogdGhpcy5hcmVhTWVhc3VyZVVuaXRcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkxhYmVsVHlwZUNoYW5nZShsYWJlbFR5cGU6IExhYmVsVHlwZSwgY2hlY2tlZD86IGJvb2xlYW4pe1xyXG4gICAgaWYgKGxhYmVsVHlwZSAhPT0gTGFiZWxUeXBlLlByZWRlZmluZWQgJiZcclxuICAgICAgbGFiZWxUeXBlICE9PSBMYWJlbFR5cGUuQ3VzdG9tICYmXHJcbiAgICAgIHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5Qb2x5Z29uKSB7XHJcbiAgICAgICAgdGhpcy5hcnJheUJ1aWx0SW5UeXBlLmZpbmQodHlwZSA9PiB0eXBlLnZhbHVlID09PSBsYWJlbFR5cGUpID9cclxuICAgICAgICAgIHRoaXMuYXJyYXlCdWlsdEluVHlwZS5maW5kKHR5cGUgPT4gdHlwZS52YWx1ZSA9PT0gbGFiZWxUeXBlKS5jaGVja2VkID0gY2hlY2tlZCA6IHRoaXMubGFiZWxGbGFnID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIGNoZWNrZWQgPyB0aGlzLmxhYmVsRmxhZyA9IGxhYmVsVHlwZSA6IHRoaXMubGFiZWxGbGFnID0gdGhpcy5hcnJheUJ1aWx0SW5UeXBlLmZpbmQodHlwZSA9PiB0eXBlLmNoZWNrZWQpPy52YWx1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubGFiZWxGbGFnID0gbGFiZWxUeXBlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChsYWJlbFR5cGUgPT09IExhYmVsVHlwZS5QcmVkZWZpbmVkKXtcclxuICAgICAgaWYgKHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5Qb2ludCApe1xyXG4gICAgICAgIHRoaXMubGFiZWxGbGFnID0gTGFiZWxUeXBlLkNvb3JkaW5hdGVzO1xyXG4gICAgICAgIHRoaXMuY3VycmVudENvb3JkaW5hdGVzID0gdGhpcy5jb29yZGluYXRlc0luREQ7XHJcbiAgICAgICAgdGhpcy5jb29yZGluYXRlc01lYXN1cmVVbml0ID0gQ29vcmRpbmF0ZXNVbml0LkRlY2ltYWxEZWdyZWU7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZiAodGhpcy5vbEdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLkxpbmVTdHJpbmcpe1xyXG4gICAgICAgIHRoaXMubGFiZWxGbGFnID0gTGFiZWxUeXBlLkxlbmd0aDtcclxuICAgICAgICB0aGlzLmN1cnJlbnRMZW5ndGggPSB0aGlzLmxlbmd0aEluTWV0ZXJzO1xyXG4gICAgICAgIHRoaXMubGVuZ3RoTWVhc3VyZVVuaXQgPSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnM7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGxhYmVsVHlwZSA9PT0gTGFiZWxUeXBlLkFyZWEpe1xyXG4gICAgICB0aGlzLmN1cnJlbnRBcmVhID0gdGhpcy5hcmVhSW5NZXRlcnNTcXVhcmU7XHJcbiAgICAgIHRoaXMuYXJlYU1lYXN1cmVVbml0ID0gTWVhc3VyZUFyZWFVbml0LlNxdWFyZU1ldGVycztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGxhYmVsVHlwZSA9PT0gTGFiZWxUeXBlLkxlbmd0aCl7XHJcbiAgICAgIHRoaXMuY3VycmVudExlbmd0aCA9IHRoaXMubGVuZ3RoSW5NZXRlcnM7XHJcbiAgICAgIHRoaXMubGVuZ3RoTWVhc3VyZVVuaXQgPSBNZWFzdXJlTGVuZ3RoVW5pdC5NZXRlcnM7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmxhYmVsRmxhZyA9PT0gTGFiZWxUeXBlLkNvb3JkaW5hdGVzKXtcclxuICAgICAgdGhpcy5jdXJyZW50Q29vcmRpbmF0ZXMgPSB0aGlzLmNvb3JkaW5hdGVzSW5ERDtcclxuICAgICAgdGhpcy5jb29yZGluYXRlc01lYXN1cmVVbml0ID0gQ29vcmRpbmF0ZXNVbml0LkRlY2ltYWxEZWdyZWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbGFiZWx0eXBlcyA9IFt0aGlzLmxhYmVsVHlwZS5MZW5ndGgsIHRoaXMubGFiZWxUeXBlLkFyZWFdO1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm9sR2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUG9seWdvbiAmJlxyXG4gICAgICBsYWJlbHR5cGVzLmluY2x1ZGVzKGxhYmVsVHlwZSkpIHtcclxuICAgICAgY2hlY2tlZCA/IHRoaXMucG9seWdvbkNoZWNrICs9IDEgOiB0aGlzLnBvbHlnb25DaGVjayAtPSAxOztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucG9seWdvbkNoZWNrID0gMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlTGVuZ3RoVW5pdChsZW5ndGhVbml0OiBNZWFzdXJlTGVuZ3RoVW5pdCl7XHJcbiAgICB0aGlzLmxlbmd0aE1lYXN1cmVVbml0ID0gbGVuZ3RoVW5pdDtcclxuICAgIHRoaXMuY3VycmVudExlbmd0aCA9IG1ldGVyc1RvVW5pdChOdW1iZXIodGhpcy5sZW5ndGhJbk1ldGVycyksIGxlbmd0aFVuaXQpLnRvRml4ZWQoMik7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUFyZWFVbml0KGFyZWFVbml0OiBNZWFzdXJlQXJlYVVuaXQpe1xyXG4gICAgdGhpcy5hcmVhTWVhc3VyZVVuaXQgPSBhcmVhVW5pdDtcclxuICAgIHRoaXMuY3VycmVudEFyZWEgPSBzcXVhcmVNZXRlcnNUb1VuaXQoTnVtYmVyKHRoaXMuYXJlYUluTWV0ZXJzU3F1YXJlKSwgYXJlYVVuaXQpLnRvRml4ZWQoMik7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZUNvb3JkaW5hdGVVbml0KGNvb3JkaW5hdGVzVW5pdDogQ29vcmRpbmF0ZXNVbml0KXtcclxuICAgIHRoaXMuY29vcmRpbmF0ZXNNZWFzdXJlVW5pdCA9IGNvb3JkaW5hdGVzVW5pdDtcclxuICAgIGxldCBjb29yZGluYXRlcyA9IEREdG9ETVModGhpcy5sb25nbGF0REQsIGNvb3JkaW5hdGVzVW5pdCk7XHJcbiAgICB0aGlzLmN1cnJlbnRDb29yZGluYXRlcyA9ICcoJyArIGNvb3JkaW5hdGVzWzFdICsgJywgJyArIGNvb3JkaW5hdGVzWzBdICsgJyknO1xyXG4gIH1cclxuXHJcbiAgYnVpbGRBcnJheVR5cGUoKSB7XHJcbiAgICBmb3IgKGNvbnN0IGxhYmVsVHlwZSBvZiBPYmplY3QudmFsdWVzKExhYmVsVHlwZSkpe1xyXG4gICAgICBpZiAobGFiZWxUeXBlICE9PSBMYWJlbFR5cGUuQ3VzdG9tICYmIGxhYmVsVHlwZSAhPT0gTGFiZWxUeXBlLlByZWRlZmluZWQpe1xyXG4gICAgICAgIHRoaXMuYXJyYXlCdWlsdEluVHlwZS5wdXNoKHtcclxuICAgICAgICAgIHZhbHVlOiBsYWJlbFR5cGUsXHJcbiAgICAgICAgICBjaGVja2VkOlxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbnMobGFiZWxUeXBlKSB8fFxyXG4gICAgICAgICAgICB0aGlzLmxhYmVsRmxhZyA9PT0gbGFiZWxUeXBlIHx8XHJcbiAgICAgICAgICAgICh0aGlzLnBvbHlnb25DaGVjayA9PT0gMiAmJiBsYWJlbFR5cGUgIT09IExhYmVsVHlwZS5Db29yZGluYXRlcylcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbm9MYWJlbEJ1dHRvbigpe1xyXG4gICAgaWYgKHRoaXMubGFiZWxGbGFnID09PSBMYWJlbFR5cGUuUHJlZGVmaW5lZCB8fCAodGhpcy5sYWJlbEZsYWcgPT09IExhYmVsVHlwZS5DdXN0b20gJiYgdGhpcy5sYWJlbExlbmd0aCA9PT0gMCkpe1xyXG4gICAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZHJhdy5ub0xhYmVsJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuICdPSyc7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VzdG9tT3JQcmVkZWZpbmVkKCl7XHJcbiAgICBpZiAodGhpcy5sYWJlbEZsYWcgPT09IExhYmVsVHlwZS5DdXN0b20pe1xyXG4gICAgICByZXR1cm4gTGFiZWxUeXBlLkN1c3RvbTtcclxuICAgIH1cclxuICAgIHJldHVybiBMYWJlbFR5cGUuUHJlZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIG9wdGlvbkF2YWlsYWJsZShjdXJyZW50T3B0aW9uOiBMYWJlbFR5cGUpe1xyXG4gICAgc3dpdGNoKHRoaXMub2xHZW9tZXRyeVR5cGUpe1xyXG4gICAgICBjYXNlIEdlb21ldHJ5VHlwZS5Qb2ludDpcclxuICAgICAgICBpZiAoY3VycmVudE9wdGlvbiA9PT0gTGFiZWxUeXBlLkNvb3JkaW5hdGVzKXtcclxuICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGNhc2UgR2VvbWV0cnlUeXBlLkxpbmVTdHJpbmc6XHJcbiAgICAgICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IExhYmVsVHlwZS5MZW5ndGgpe1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgY2FzZSBHZW9tZXRyeVR5cGUuUG9seWdvbjpcclxuICAgICAgICBpZiAoY3VycmVudE9wdGlvbiA9PT0gTGFiZWxUeXBlLkNvb3JkaW5hdGVzKXtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFsbExlbmd0aFVuaXRzKCk6IHN0cmluZ1tde1xyXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoTWVhc3VyZUxlbmd0aFVuaXQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TGVuZ3RoVW5pdEVudW0obGVuZ3RoVW5pdDogTWVhc3VyZUxlbmd0aFVuaXQpe1xyXG4gICAgcmV0dXJuIE1lYXN1cmVMZW5ndGhVbml0QWJicmV2aWF0aW9uW2xlbmd0aFVuaXRdO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFsbEFyZWFVbml0cygpOiBzdHJpbmdbXXtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKE1lYXN1cmVBcmVhVW5pdCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYWxsQ29vcmRpbmF0ZXNVbml0cygpOiBzdHJpbmdbXXtcclxuICAgIHJldHVybiBPYmplY3QudmFsdWVzKENvb3JkaW5hdGVzVW5pdCk7XHJcbiAgfVxyXG5cclxuICBnZXRBcmVhVW5pdEVudW0oYXJlYVVuaXQ6IE1lYXN1cmVBcmVhVW5pdCl7XHJcbiAgICByZXR1cm4gTWVhc3VyZUFyZWFVbml0QWJicmV2aWF0aW9uW2FyZWFVbml0XTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0UmFkaXVzKG9sR2VvbWV0cnkpOiBudW1iZXJ7XHJcbiAgICBjb25zdCBsZW5ndGggPSBnZXRMZW5ndGgob2xHZW9tZXRyeSk7XHJcbiAgICByZXR1cm4gTnVtYmVyKGxlbmd0aCAvICgyICogTWF0aC5QSSkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxlbmd0aExhYmVsVCgpe1xyXG4gICAgaWYgKHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5Qb2x5Z29uKXtcclxuICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLm1lYXN1cmUucGVyaW1ldGVyJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vbEdlb21ldHJ5VHlwZSA9PT0gR2VvbWV0cnlUeXBlLkNpcmNsZSl7XHJcbiAgICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5zZWFyY2guY29vcmRpbmF0ZXMucmFkaXVzJyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoJ2lnby5nZW8uZHJhdy5sYWJlbFR5cGUuTGVuZ3RoJyk7XHJcbiAgfVxyXG5cclxuICBnZXRMYWJlbExlbmd0aChldmVudD8pe1xyXG4gICAgdGhpcy5sYWJlbExlbmd0aCA9IGV2ZW50Lmxlbmd0aDtcclxuICB9XHJcblxyXG4gIHNlbGVjdE9wdGlvbnMob3B0aW9uKXtcclxuICAgIGlmICh0aGlzLm9sR2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUG9pbnQpe1xyXG4gICAgICByZXR1cm4gb3B0aW9uID09PSBMYWJlbFR5cGUuQ29vcmRpbmF0ZXM7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLm9sR2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuTGluZVN0cmluZyl7XHJcbiAgICAgIHJldHVybiBvcHRpb24gPT09IExhYmVsVHlwZS5MZW5ndGg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wZXJMZW5ndGhMYWJlbChvcHRpb24pe1xyXG4gICAgaWYgKG9wdGlvbiA9PT0gTGFiZWxUeXBlLkxlbmd0aCl7XHJcbiAgICAgIGlmICh0aGlzLm9sR2VvbWV0cnlUeXBlID09PSBHZW9tZXRyeVR5cGUuUG9seWdvbil7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLm1lYXN1cmUucGVyaW1ldGVyJyk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMub2xHZW9tZXRyeVR5cGUgPT09IEdlb21ldHJ5VHlwZS5DaXJjbGUpe1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudCgnaWdvLmdlby5zZWFyY2guY29vcmRpbmF0ZXMucmFkaXVzJyk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRyYXcubGFiZWxUeXBlLkxlbmd0aCcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KCdpZ28uZ2VvLmRyYXcubGFiZWxUeXBlLicgKyBvcHRpb24pO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiIsIjxkaXY+XHJcbiAgPGgyIG1hdC1kaWFsb2ctdGl0bGU+XHJcbiAgICB7eyAnaWdvLmdlby5kcmF3LnBvcHVwVGl0bGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgPC9oMj5cclxuPC9kaXY+XHJcblxyXG5cclxuPGRpdiBjbGFzcz1cImdlb21ldHJ5LXR5cGUtdG9nZ2xlIG1hdC10eXBvZ3JhcGh5XCI+XHJcbiAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwXHJcbiAgICAoY2hhbmdlKT1cIm9uTGFiZWxUeXBlQ2hhbmdlKCRldmVudC52YWx1ZSlcIiBbdmFsdWVdPVwiY3VzdG9tT3JQcmVkZWZpbmVkXCI+XHJcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImxhYmVsVHlwZS5DdXN0b21cIiA+XHJcbiAgICAgIHt7ICdpZ28uZ2VvLmRyYXcubGFiZWxUeXBlLmN1c3RvbScgfCB0cmFuc2xhdGUgfX1cclxuICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICA8bWF0LWJ1dHRvbi10b2dnbGUgW3ZhbHVlXT1cImxhYmVsVHlwZS5QcmVkZWZpbmVkXCI+XHJcbiAgICAgIHt7ICdpZ28uZ2VvLmRyYXcubGFiZWxUeXBlLnByZWRlZmluZWQnIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImxhYmVsRmxhZyAhPT0gbGFiZWxUeXBlLkN1c3RvbVwiPlxyXG4gIDxkaXY+XHJcbiAgICA8cCBjbGFzcz1cIm1hdC10eXBvZ3JhcGh5XCI+e3sgJ2lnby5nZW8uZHJhdy5idWlsdEluSW5zdHJ1Y3Rpb25zJyB8IHRyYW5zbGF0ZSB9fTwvcD5cclxuICAgIDxtYXQtcmFkaW8tZ3JvdXAgKm5nSWY9XCJvbEdlb21ldHJ5VHlwZSAhPT0gJ1BvbHlnb24nXCIgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiPlxyXG4gICAgICA8bWF0LXJhZGlvLWJ1dHRvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGFycmF5QnVpbHRJblR5cGVcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCIgW2Rpc2FibGVkXT1cIm9wdGlvbkF2YWlsYWJsZShvcHRpb24udmFsdWUpXCIgXHJcbiAgICAgIChjaGFuZ2UpPVwib25MYWJlbFR5cGVDaGFuZ2UoJGV2ZW50LnZhbHVlKVwiIFtjaGVja2VkXT1cIm9wdGlvbi5jaGVja2VkXCI+XHJcbiAgICAgICAge3tnZXRQcm9wZXJMZW5ndGhMYWJlbChvcHRpb24udmFsdWUpfX1cclxuICAgICAgPC9tYXQtcmFkaW8tYnV0dG9uPlxyXG4gICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICA8bmctY29udGFpbmVyIGNsYXNzPVwibWF0LXR5cG9ncmFwaHlcIiAqbmdJZj1cIm9sR2VvbWV0cnlUeXBlID09PSAnUG9seWdvbidcIj5cclxuICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYXJyYXlCdWlsdEluVHlwZVwiXHJcbiAgICAgICAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiXHJcbiAgICAgICAgW3ZhbHVlXT1cIm9wdGlvbi52YWx1ZVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cIm9wdGlvbkF2YWlsYWJsZShvcHRpb24udmFsdWUpXCJcclxuICAgICAgICAoY2hhbmdlKT1cIm9uTGFiZWxUeXBlQ2hhbmdlKCRldmVudC5zb3VyY2UudmFsdWUsICRldmVudC5jaGVja2VkKVwiXHJcbiAgICAgICAgW2NoZWNrZWRdPVwib3B0aW9uLmNoZWNrZWRcIj5cclxuICAgICAgICB7e2dldFByb3Blckxlbmd0aExhYmVsKG9wdGlvbi52YWx1ZSl9fVxyXG4gICAgICA8L21hdC1jaGVja2JveD5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPGRpdiAqbmdJZj1cImxhYmVsRmxhZyA9PT0gbGFiZWxUeXBlLkNvb3JkaW5hdGVzXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInJlYWRPbmx5LUlucHV0XCI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAjaW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIihMYXRpdHVkZSwgTG9uZ2l0dWRlKVwiXHJcbiAgICAgICAgICB2YWx1ZT1cInt7Y3VycmVudENvb3JkaW5hdGVzfX1cIiByZWFkb25seT5cclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwidW5pdC1maWVsZFwiPlxyXG4gICAgICAgIDxtYXQtc2VsZWN0IFt2YWx1ZV09XCJjb29yZGluYXRlc01lYXN1cmVVbml0XCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZUNvb3JkaW5hdGVVbml0KCRldmVudC52YWx1ZSlcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB1bml0IG9mIGFsbENvb3JkaW5hdGVzVW5pdHNcIiBbdmFsdWVdPVwidW5pdFwiPlxyXG4gICAgICAgICAgICB7e3VuaXR9fVxyXG4gICAgICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgICAgIDwvbWF0LXNlbGVjdD4gIFxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibGFiZWxGbGFnID09PSBsYWJlbFR5cGUuTGVuZ3RoIHx8IHBvbHlnb25DaGVjayA9PT0gMlwiPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJyZWFkT25seS1JbnB1dFwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgI2lucHV0XHJcbiAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3tsZW5ndGhMYWJlbFR9fVxyXG4gICAgICAgICAgdmFsdWU9XCJ7e2N1cnJlbnRMZW5ndGh9fVwiIHJlYWRvbmx5PlxyXG4gICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICA8bWF0LWZvcm0tZmllbGQgY2xhc3M9XCJ1bml0LWZpZWxkXCI+XHJcbiAgICAgICAgPG1hdC1zZWxlY3QgW3ZhbHVlXT1cImxlbmd0aE1lYXN1cmVVbml0XCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZUxlbmd0aFVuaXQoJGV2ZW50LnZhbHVlKVwiPlxyXG4gICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHVuaXQgb2YgYWxsTGVuZ3RoVW5pdHNcIiBbdmFsdWVdPVwidW5pdFwiPlxyXG4gICAgICAgICAgICB7e2dldExlbmd0aFVuaXRFbnVtKHVuaXQpfX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+ICBcclxuICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImxhYmVsRmxhZyA9PT0gbGFiZWxUeXBlLkFyZWEgfHwgcG9seWdvbkNoZWNrID09PSAyXCI+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInJlYWRPbmx5LUlucHV0XCI+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAjaW5wdXRcclxuICAgICAgICAgIG1hdElucHV0XHJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdpZ28uZ2VvLmRyYXcubGFiZWxUeXBlLkFyZWEnIHwgdHJhbnNsYXRlIH19XCJcclxuICAgICAgICAgIHZhbHVlPVwie3tjdXJyZW50QXJlYX19XCIgcmVhZG9ubHk+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cInVuaXQtZmllbGRcIj5cclxuICAgICAgICA8bWF0LXNlbGVjdCBbdmFsdWVdPVwiYXJlYU1lYXN1cmVVbml0XCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNoYW5nZUFyZWFVbml0KCRldmVudC52YWx1ZSlcIj5cclxuICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCB1bml0IG9mIGFsbEFyZWFVbml0c1wiIFt2YWx1ZV09XCJ1bml0XCI+XHJcbiAgICAgICAgICAgIHt7Z2V0QXJlYVVuaXRFbnVtKHVuaXQpfX1cclxuICAgICAgICAgIDwvbWF0LW9wdGlvbj5cclxuICAgICAgICA8L21hdC1zZWxlY3Q+XHJcbiAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG4gIDxkaXYgbWF0LWRpYWxvZy1hY3Rpb25zPlxyXG4gICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsRHJhd2luZygpXCIgPlxyXG4gICAgICB7eydpZ28uZ2VvLmRyYXcuY2FuY2VsJyB8IHRyYW5zbGF0ZX19XHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxidXR0b24gXHJcbiAgICAgIG1hdC1yYWlzZWQtYnV0dG9uIFxyXG4gICAgICBjb2xvcj1cInByaW1hcnlcIiBcclxuICAgICAgKGNsaWNrKT1cImNvbmZpcm0oKVwiPiBcclxuICAgICAge3tub0xhYmVsQnV0dG9uKCl9fSBcclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJsYWJlbEZsYWcgPT09IGxhYmVsVHlwZS5DdXN0b21cIj5cclxuICA8ZGl2PlxyXG4gICAgPHAgY2xhc3M9XCJtYXQtdHlwb2dyYXBoeVwiPnt7ICdpZ28uZ2VvLmRyYXcuZGlhbG9nSW5zdHJ1Y3Rpb24nIHwgdHJhbnNsYXRlIH19PC9wPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaW5wdXRcIj5cclxuICAgICAgPGlucHV0XHJcbiAgICAgICAgI2lucHV0XHJcbiAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAoc2VsZWN0KT1cInRydWVcIlxyXG4gICAgICAgIChpbnB1dCk9XCJnZXRMYWJlbExlbmd0aCgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXHJcbiAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eydpZ28uZ2VvLmRyYXcuZGlhbG9nVGl0bGUnIHwgdHJhbnNsYXRlfX1cIlxyXG4gICAgICAgIHZhbHVlPVwie3sgY3VycmVudExhYmVsIH19XCJcclxuICAgICAgICBjZGtGb2N1c0luaXRpYWwvPlxyXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICA8L2Rpdj5cclxuICBcclxuICA8ZGl2IG1hdC1kaWFsb2ctYWN0aW9ucz5cclxuICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gKGNsaWNrKT1cImNhbmNlbERyYXdpbmcoKVwiID5cclxuICAgICAge3snaWdvLmdlby5kcmF3LmNhbmNlbCcgfCB0cmFuc2xhdGV9fVxyXG4gICAgPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIFxyXG4gICAgICBtYXQtcmFpc2VkLWJ1dHRvbiBcclxuICAgICAgY29sb3I9XCJwcmltYXJ5XCIgXHJcbiAgICAgIChjbGljayk9XCJjb25maXJtKGlucHV0LnZhbHVlKVwiPlxyXG4gICAgICB7e25vTGFiZWxCdXR0b24oKX19XHJcbiAgICA8L2J1dHRvbj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|