@sapui5/sap.fe.templates 1.108.8 → 1.108.10
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/package.json +6 -3
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/Component.js +1 -7
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +1 -4
- package/src/sap/fe/templates/Feedback.js +3 -13
- package/src/sap/fe/templates/ListComponent.js +2 -19
- package/src/sap/fe/templates/ListReport/Component.js +1 -18
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +10 -35
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +1 -1
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +80 -226
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +9 -2
- package/src/sap/fe/templates/ListReport/ListReportTemplating.js +2 -7
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +21 -108
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +9 -17
- package/src/sap/fe/templates/ListReport/overrides/Share.js +9 -25
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +51 -122
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +1 -23
- package/src/sap/fe/templates/ObjectPage/Component.js +12 -37
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +17 -54
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +256 -467
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +69 -15
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +66 -198
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js +1 -32
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +9 -37
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +1 -7
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +9 -31
- package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +2 -4
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/flexibility/ScrollableHeaderContainer.flexibility.js +4 -5
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +1 -1
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +15 -20
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +4 -5
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +18 -68
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +5 -20
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +1 -2
- package/src/sap/fe/templates/TableScroller.js +1 -6
- package/src/sap/fe/templates/library.js +2 -5
- package/src/sap/fe/templates/messagebundle_it.properties +1 -1
|
@@ -6,13 +6,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var system = Device.system;
|
|
9
|
-
|
|
10
9
|
var NavType = NavLibrary.NavType,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
VariantManagementType = CoreLibrary.VariantManagement,
|
|
11
|
+
TemplateContentView = CoreLibrary.TemplateContentView,
|
|
12
|
+
InitialLoadMode = CoreLibrary.InitialLoadMode;
|
|
14
13
|
var FilterRestrictions = CommonUtils.FilterRestrictions,
|
|
15
|
-
|
|
14
|
+
CONDITION_PATH_TO_PROPERTY_PATH_REGEX = /\+|\*/g;
|
|
16
15
|
var ViewStateOverride = {
|
|
17
16
|
_bSearchTriggered: false,
|
|
18
17
|
applyInitialStateOnly: function () {
|
|
@@ -20,15 +19,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
20
19
|
},
|
|
21
20
|
onBeforeStateApplied: function (aPromises) {
|
|
22
21
|
var oView = this.getView(),
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
oController = oView.getController(),
|
|
23
|
+
oFilterBar = oController._getFilterBarControl(),
|
|
24
|
+
aTables = oController._getControls("table");
|
|
27
25
|
if (oFilterBar) {
|
|
28
26
|
oFilterBar.setSuspendSelection(true);
|
|
29
27
|
aPromises.push(oFilterBar.waitForInitialization());
|
|
30
28
|
}
|
|
31
|
-
|
|
32
29
|
aTables.forEach(function (oTable) {
|
|
33
30
|
aPromises.push(oTable.initialized());
|
|
34
31
|
});
|
|
@@ -36,15 +33,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
36
33
|
},
|
|
37
34
|
onAfterStateApplied: function () {
|
|
38
35
|
var oController = this.getView().getController();
|
|
39
|
-
|
|
40
36
|
var oFilterBar = oController._getFilterBarControl();
|
|
41
|
-
|
|
42
37
|
if (oFilterBar) {
|
|
43
38
|
oFilterBar.setSuspendSelection(false);
|
|
44
39
|
} else if (oController._isFilterBarHidden()) {
|
|
45
40
|
var oInternalModelContext = oController.getView().getBindingContext("internal");
|
|
46
41
|
oInternalModelContext.setProperty("hasPendingFilters", false);
|
|
47
|
-
|
|
48
42
|
if (oController._isMultiMode()) {
|
|
49
43
|
oController._getMultiModeControl().setCountsOutDated(true);
|
|
50
44
|
}
|
|
@@ -52,79 +46,63 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
52
46
|
},
|
|
53
47
|
adaptBindingRefreshControls: function (aControls) {
|
|
54
48
|
var oView = this.getView(),
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
49
|
+
oController = oView.getController(),
|
|
50
|
+
aViewControls = oController._getControls(),
|
|
51
|
+
aControlsToRefresh = KeepAliveHelper.getControlsForRefresh(oView, aViewControls);
|
|
59
52
|
Array.prototype.push.apply(aControls, aControlsToRefresh);
|
|
60
53
|
},
|
|
61
54
|
adaptStateControls: function (aStateControls) {
|
|
62
55
|
var oView = this.getView(),
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
56
|
+
oController = oView.getController(),
|
|
57
|
+
oViewData = oView.getViewData(),
|
|
58
|
+
bControlVM = oViewData.variantManagement === VariantManagementType.Control;
|
|
67
59
|
var oFilterBarVM = this._getFilterBarVM(oView);
|
|
68
|
-
|
|
69
60
|
if (oFilterBarVM) {
|
|
70
61
|
aStateControls.push(oFilterBarVM);
|
|
71
62
|
}
|
|
72
|
-
|
|
73
63
|
if (oController._isMultiMode()) {
|
|
74
64
|
aStateControls.push(oController._getMultiModeControl());
|
|
75
65
|
}
|
|
76
|
-
|
|
77
66
|
oController._getControls("table").forEach(function (oTable) {
|
|
78
67
|
var oQuickFilter = oTable.getQuickFilter();
|
|
79
|
-
|
|
80
68
|
if (oQuickFilter) {
|
|
81
69
|
aStateControls.push(oQuickFilter);
|
|
82
70
|
}
|
|
83
|
-
|
|
84
71
|
if (bControlVM) {
|
|
85
72
|
aStateControls.push(oTable.getVariant());
|
|
86
73
|
}
|
|
87
|
-
|
|
88
74
|
aStateControls.push(oTable);
|
|
89
75
|
});
|
|
90
|
-
|
|
91
76
|
if (oController._getControls("Chart")) {
|
|
92
77
|
oController._getControls("Chart").forEach(function (oChart) {
|
|
93
78
|
aStateControls.push(oChart);
|
|
94
79
|
});
|
|
95
80
|
}
|
|
96
|
-
|
|
97
81
|
if (oController._hasMultiVisualizations()) {
|
|
98
82
|
aStateControls.push(oController._getSegmentedButton(TemplateContentView.Chart));
|
|
99
83
|
aStateControls.push(oController._getSegmentedButton(TemplateContentView.Table));
|
|
100
84
|
}
|
|
101
|
-
|
|
102
85
|
var oFilterBar = oController._getFilterBarControl();
|
|
103
|
-
|
|
104
86
|
if (oFilterBar) {
|
|
105
87
|
aStateControls.push(oFilterBar);
|
|
106
88
|
}
|
|
107
|
-
|
|
108
89
|
aStateControls.push(oView.byId("fe::ListReport"));
|
|
109
90
|
},
|
|
110
91
|
retrieveAdditionalStates: function (mAdditionalStates) {
|
|
111
92
|
var oView = this.getView(),
|
|
112
|
-
|
|
113
|
-
|
|
93
|
+
oController = oView.getController(),
|
|
94
|
+
bPendingFilter = oView.getBindingContext("internal").getProperty("hasPendingFilters");
|
|
114
95
|
mAdditionalStates.dataLoaded = !bPendingFilter || !!this._bSearchTriggered;
|
|
115
|
-
|
|
116
96
|
if (oController._hasMultiVisualizations()) {
|
|
117
97
|
var sAlpContentView = oView.getBindingContext("internal").getProperty("alpContentView");
|
|
118
98
|
mAdditionalStates.alpContentView = sAlpContentView;
|
|
119
99
|
}
|
|
120
|
-
|
|
121
100
|
delete this._bSearchTriggered;
|
|
122
101
|
},
|
|
123
102
|
applyAdditionalStates: function (oAdditionalStates) {
|
|
124
103
|
var oView = this.getView(),
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
104
|
+
oController = oView.getController(),
|
|
105
|
+
oFilterBar = oController._getFilterBarControl();
|
|
128
106
|
if (oAdditionalStates) {
|
|
129
107
|
// explicit check for boolean values - 'undefined' should not alter the triggered search property
|
|
130
108
|
if (oAdditionalStates.dataLoaded === false && oFilterBar) {
|
|
@@ -134,24 +112,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
134
112
|
if (oFilterBar) {
|
|
135
113
|
oFilterBar.triggerSearch();
|
|
136
114
|
}
|
|
137
|
-
|
|
138
115
|
this._bSearchTriggered = true;
|
|
139
116
|
}
|
|
140
|
-
|
|
141
117
|
if (oController._hasMultiVisualizations()) {
|
|
142
118
|
var oInternalModelContext = oView.getBindingContext("internal");
|
|
143
|
-
|
|
144
119
|
if (!system.desktop && oAdditionalStates.alpContentView == TemplateContentView.Hybrid) {
|
|
145
120
|
oAdditionalStates.alpContentView = TemplateContentView.Chart;
|
|
146
121
|
}
|
|
147
|
-
|
|
148
122
|
oInternalModelContext.getModel().setProperty("".concat(oInternalModelContext.getPath(), "/alpContentView"), oAdditionalStates.alpContentView);
|
|
149
123
|
}
|
|
150
124
|
}
|
|
151
125
|
},
|
|
152
126
|
_applyNavigationParametersToFilterbar: function (oNavigationParameter, aResults) {
|
|
153
127
|
var _this = this;
|
|
154
|
-
|
|
155
128
|
var oView = this.getView();
|
|
156
129
|
var oController = oView.getController();
|
|
157
130
|
var oAppComponent = oController.getAppComponent();
|
|
@@ -165,25 +138,19 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
165
138
|
bFilterVariantApplied = true;
|
|
166
139
|
}
|
|
167
140
|
}
|
|
168
|
-
|
|
169
141
|
return _this._applySelectionVariant(oView, oNavigationParameter, bFilterVariantApplied);
|
|
170
142
|
}).then(function () {
|
|
171
143
|
var oDynamicPage = oController._getDynamicListReportControl();
|
|
172
|
-
|
|
173
144
|
var bPreventInitialSearch = false;
|
|
174
|
-
|
|
175
145
|
var oFilterBarVM = _this._getFilterBarVM(oView);
|
|
176
|
-
|
|
177
146
|
var oFilterBarControl = oController._getFilterBarControl();
|
|
178
|
-
|
|
179
147
|
if (oFilterBarControl) {
|
|
180
148
|
if (oNavigationParameter.navigationType !== NavType.initial && oNavigationParameter.requiresStandardVariant || !oFilterBarVM && oView.getViewData().initialLoad === InitialLoadMode.Enabled || oController._shouldAutoTriggerSearch(oFilterBarVM)) {
|
|
181
149
|
oFilterBarControl.triggerSearch();
|
|
182
150
|
} else {
|
|
183
151
|
bPreventInitialSearch = _this._preventInitialSearch(oFilterBarVM);
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
|
|
152
|
+
}
|
|
153
|
+
// reset the suspend selection on filter bar to allow loading of data when needed (was set on LR Init)
|
|
187
154
|
oFilterBarControl.setSuspendSelection(false);
|
|
188
155
|
_this._bSearchTriggered = !bPreventInitialSearch;
|
|
189
156
|
oDynamicPage.setHeaderExpanded(system.desktop || bPreventInitialSearch);
|
|
@@ -194,10 +161,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
194
161
|
},
|
|
195
162
|
handleVariantIdPassedViaURLParams: function (oUrlParams) {
|
|
196
163
|
var aPageVariantId = oUrlParams["sap-ui-fe-variant-id"],
|
|
197
|
-
|
|
198
|
-
|
|
164
|
+
aFilterBarVariantId = oUrlParams["sap-ui-fe-filterbar-variant-id"],
|
|
165
|
+
aTableVariantId = oUrlParams["sap-ui-fe-table-variant-id"];
|
|
199
166
|
var oVariant;
|
|
200
|
-
|
|
201
167
|
if (aPageVariantId || aFilterBarVariantId || aTableVariantId) {
|
|
202
168
|
oVariant = {
|
|
203
169
|
sPageVariantId: aPageVariantId && aPageVariantId[0],
|
|
@@ -205,17 +171,14 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
205
171
|
sTableVariantId: aTableVariantId && aTableVariantId[0]
|
|
206
172
|
};
|
|
207
173
|
}
|
|
208
|
-
|
|
209
174
|
return this._handleControlVariantId(oVariant);
|
|
210
175
|
},
|
|
211
176
|
_handleControlVariantId: function (oVariantIDs) {
|
|
212
177
|
var _this2 = this;
|
|
213
|
-
|
|
214
178
|
var oVM;
|
|
215
179
|
var oView = this.getView(),
|
|
216
|
-
|
|
180
|
+
aPromises = [];
|
|
217
181
|
var sVariantManagement = oView.getViewData().variantManagement;
|
|
218
|
-
|
|
219
182
|
if (oVariantIDs && oVariantIDs.sPageVariantId && sVariantManagement === "Page") {
|
|
220
183
|
oVM = oView.byId("fe::PageVariantManagement");
|
|
221
184
|
oVM.getVariants().forEach(function (oVariant) {
|
|
@@ -226,7 +189,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
226
189
|
} else if (oVariantIDs && sVariantManagement === "Control") {
|
|
227
190
|
if (oVariantIDs.sFilterBarVariantId) {
|
|
228
191
|
oVM = oView.getController()._getFilterBarVariantControl();
|
|
229
|
-
|
|
230
192
|
if (oVM) {
|
|
231
193
|
oVM.getVariants().forEach(function (oVariant) {
|
|
232
194
|
if (oVariant.key === oVariantIDs.sFilterBarVariantId) {
|
|
@@ -235,14 +197,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
235
197
|
});
|
|
236
198
|
}
|
|
237
199
|
}
|
|
238
|
-
|
|
239
200
|
if (oVariantIDs.sTableVariantId) {
|
|
240
201
|
var oController = oView.getController(),
|
|
241
|
-
|
|
242
|
-
|
|
202
|
+
aTables = oController._getControls("table");
|
|
243
203
|
aTables.forEach(function (oTable) {
|
|
244
204
|
var oTableVariant = oTable.getVariant();
|
|
245
|
-
|
|
246
205
|
if (oTable && oTableVariant) {
|
|
247
206
|
oTableVariant.getVariants().forEach(function (oVariant) {
|
|
248
207
|
if (oVariant.key === oVariantIDs.sTableVariantId) {
|
|
@@ -253,7 +212,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
253
212
|
});
|
|
254
213
|
}
|
|
255
214
|
}
|
|
256
|
-
|
|
257
215
|
return Promise.all(aPromises);
|
|
258
216
|
},
|
|
259
217
|
_applyControlVariant: function (oVariant, sVariantID, bFilterVariantApplied) {
|
|
@@ -266,21 +224,17 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
266
224
|
return bFilterVariantApplied;
|
|
267
225
|
});
|
|
268
226
|
},
|
|
269
|
-
|
|
270
227
|
/************************************* private helper *****************************************/
|
|
228
|
+
|
|
271
229
|
_getFilterBarVM: function (oView) {
|
|
272
230
|
var oViewData = oView.getViewData();
|
|
273
|
-
|
|
274
231
|
switch (oViewData.variantManagement) {
|
|
275
232
|
case VariantManagementType.Page:
|
|
276
233
|
return oView.byId("fe::PageVariantManagement");
|
|
277
|
-
|
|
278
234
|
case VariantManagementType.Control:
|
|
279
235
|
return oView.getController()._getFilterBarVariantControl();
|
|
280
|
-
|
|
281
236
|
case VariantManagementType.None:
|
|
282
237
|
return null;
|
|
283
|
-
|
|
284
238
|
default:
|
|
285
239
|
throw new Error("unhandled variant setting: ".concat(oViewData.variantManagement));
|
|
286
240
|
}
|
|
@@ -289,7 +243,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
289
243
|
if (!oVariantManagement) {
|
|
290
244
|
return true;
|
|
291
245
|
}
|
|
292
|
-
|
|
293
246
|
var aVariants = oVariantManagement.getVariants();
|
|
294
247
|
var oCurrentVariant = aVariants.find(function (oItem) {
|
|
295
248
|
return oItem.key === oVariantManagement.getCurrentVariantKey();
|
|
@@ -298,13 +251,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
298
251
|
},
|
|
299
252
|
_applySelectionVariant: function (oView, oNavigationParameter, bFilterVariantApplied) {
|
|
300
253
|
var oFilterBar = oView.getController()._getFilterBarControl(),
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
254
|
+
oSelectionVariant = oNavigationParameter.selectionVariant,
|
|
255
|
+
oSelectionVariantDefaults = oNavigationParameter.selectionVariantDefaults;
|
|
304
256
|
if (!oFilterBar || !oSelectionVariant) {
|
|
305
257
|
return Promise.resolve();
|
|
306
258
|
}
|
|
307
|
-
|
|
308
259
|
var oConditions = {};
|
|
309
260
|
var oMetaModel = oView.getModel().getMetaModel();
|
|
310
261
|
var oViewData = oView.getViewData();
|
|
@@ -312,45 +263,37 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
312
263
|
var aMandatoryFilterFields = CommonUtils.getMandatoryFilterFields(oMetaModel, sContextPath);
|
|
313
264
|
var bUseSemanticDateRange = oFilterBar.data("useSemanticDateRange");
|
|
314
265
|
var oVariant;
|
|
315
|
-
|
|
316
266
|
switch (oViewData.variantManagement) {
|
|
317
267
|
case VariantManagementType.Page:
|
|
318
268
|
oVariant = oView.byId("fe::PageVariantManagement");
|
|
319
269
|
break;
|
|
320
|
-
|
|
321
270
|
case VariantManagementType.Control:
|
|
322
271
|
oVariant = oView.getController()._getFilterBarVariantControl();
|
|
323
272
|
break;
|
|
324
|
-
|
|
325
273
|
case VariantManagementType.None:
|
|
326
274
|
default:
|
|
327
275
|
break;
|
|
328
276
|
}
|
|
277
|
+
var bRequiresStandardVariant = oNavigationParameter.requiresStandardVariant;
|
|
278
|
+
// check if FLP default values are there and is it standard variant
|
|
279
|
+
var bIsFLPValuePresent = oSelectionVariantDefaults && oSelectionVariantDefaults.getSelectOptionsPropertyNames().length > 0 && oVariant.getDefaultVariantKey() === oVariant.getStandardVariantKey() && oNavigationParameter.bNavSelVarHasDefaultsOnly;
|
|
329
280
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
var bIsFLPValuePresent = oSelectionVariantDefaults && oSelectionVariantDefaults.getSelectOptionsPropertyNames().length > 0 && oVariant.getDefaultVariantKey() === oVariant.getStandardVariantKey() && oNavigationParameter.bNavSelVarHasDefaultsOnly; // get conditions when FLP value is present
|
|
333
|
-
|
|
281
|
+
// get conditions when FLP value is present
|
|
334
282
|
if (bFilterVariantApplied || bIsFLPValuePresent) {
|
|
335
283
|
oConditions = oFilterBar.getConditions();
|
|
336
284
|
}
|
|
337
|
-
|
|
338
285
|
CommonUtils.addDefaultDisplayCurrency(aMandatoryFilterFields, oSelectionVariant, oSelectionVariantDefaults);
|
|
339
286
|
CommonUtils.addSelectionVariantToConditions(oSelectionVariant, oConditions, oMetaModel, sContextPath, bIsFLPValuePresent, bUseSemanticDateRange, oViewData);
|
|
340
287
|
return this._activateSelectionVariant(oFilterBar, oConditions, oVariant, bRequiresStandardVariant, bFilterVariantApplied, bIsFLPValuePresent);
|
|
341
288
|
},
|
|
342
289
|
_activateSelectionVariant: function (oFilterBar, oConditions, oVariant, bRequiresStandardVariant, bFilterVariantApplied, bIsFLPValuePresent) {
|
|
343
290
|
var _this3 = this;
|
|
344
|
-
|
|
345
291
|
var oPromise;
|
|
346
|
-
|
|
347
292
|
if (oVariant && !bFilterVariantApplied) {
|
|
348
293
|
var oVariantKey = bRequiresStandardVariant ? oVariant.getStandardVariantKey() : oVariant.getDefaultVariantKey();
|
|
349
|
-
|
|
350
294
|
if (oVariantKey === null) {
|
|
351
295
|
oVariantKey = oVariant.getId();
|
|
352
296
|
}
|
|
353
|
-
|
|
354
297
|
oPromise = ControlVariantApplyAPI.activateVariant({
|
|
355
298
|
element: oVariant,
|
|
356
299
|
variantReference: oVariantKey
|
|
@@ -360,14 +303,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
360
303
|
} else {
|
|
361
304
|
oPromise = Promise.resolve(true);
|
|
362
305
|
}
|
|
363
|
-
|
|
364
306
|
return oPromise.then(function (bClearFilterAndReplaceWithAppState) {
|
|
365
307
|
if (bClearFilterAndReplaceWithAppState) {
|
|
366
308
|
return _this3._fnApplyConditions(oFilterBar, oConditions, bIsFLPValuePresent);
|
|
367
309
|
}
|
|
368
310
|
});
|
|
369
311
|
},
|
|
370
|
-
|
|
371
312
|
/*
|
|
372
313
|
* Sets filtered: false flag to every field so that it can be cleared out
|
|
373
314
|
*
|
|
@@ -379,7 +320,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
379
320
|
try {
|
|
380
321
|
return Promise.resolve(StateUtil.retrieveExternalState(oFilterBar).then(function (oExternalState) {
|
|
381
322
|
var oCondition = oExternalState.filter;
|
|
382
|
-
|
|
383
323
|
for (var field in oCondition) {
|
|
384
324
|
if (field !== "$editState" && field !== "$search" && oCondition[field]) {
|
|
385
325
|
oCondition[field].forEach(function (condition) {
|
|
@@ -387,7 +327,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
387
327
|
});
|
|
388
328
|
}
|
|
389
329
|
}
|
|
390
|
-
|
|
391
330
|
return Promise.resolve(oCondition);
|
|
392
331
|
}).catch(function (oError) {
|
|
393
332
|
Log.error("Error while retrieving the external state", oError);
|
|
@@ -399,35 +338,30 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
399
338
|
_fnApplyConditions: function (oFilterBar, oConditions, bIsFLPValuePresent) {
|
|
400
339
|
try {
|
|
401
340
|
var _this5 = this;
|
|
402
|
-
|
|
403
341
|
var mFilter = {},
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
oCondition.
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
delete oCondition.isEmpty;
|
|
418
|
-
};
|
|
419
|
-
|
|
342
|
+
aItems = [],
|
|
343
|
+
fnAdjustValueHelpCondition = function (oCondition) {
|
|
344
|
+
// in case the condition is meant for a field having a VH, the format required by MDC differs
|
|
345
|
+
oCondition.validated = ConditionValidated.Validated;
|
|
346
|
+
if (oCondition.operator === "Empty") {
|
|
347
|
+
oCondition.operator = "EQ";
|
|
348
|
+
oCondition.values = [""];
|
|
349
|
+
} else if (oCondition.operator === "NotEmpty") {
|
|
350
|
+
oCondition.operator = "NE";
|
|
351
|
+
oCondition.values = [""];
|
|
352
|
+
}
|
|
353
|
+
delete oCondition.isEmpty;
|
|
354
|
+
};
|
|
420
355
|
var fnGetPropertyInfo = function (oFilterControl, sEntityTypePath) {
|
|
421
356
|
var sEntitySetPath = ModelHelper.getEntitySetPath(sEntityTypePath),
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
357
|
+
oMetaModel = oFilterControl.getModel().getMetaModel(),
|
|
358
|
+
oFR = CommonUtils.getFilterRestrictionsByPath(sEntitySetPath, oMetaModel),
|
|
359
|
+
aNonFilterableProps = oFR[FilterRestrictions.NON_FILTERABLE_PROPERTIES],
|
|
360
|
+
mFilterFields = FilterUtils.getConvertedFilterFields(oFilterControl, sEntityTypePath),
|
|
361
|
+
aPropertyInfo = [];
|
|
427
362
|
Object.keys(mFilterFields).forEach(function (sFilterFieldKey) {
|
|
428
363
|
var oConvertedProperty = mFilterFields[sFilterFieldKey];
|
|
429
364
|
var sPropertyPath = oConvertedProperty.conditionPath.replace(CONDITION_PATH_TO_PROPERTY_PATH_REGEX, "");
|
|
430
|
-
|
|
431
365
|
if (aNonFilterableProps.indexOf(sPropertyPath) === -1) {
|
|
432
366
|
var sAnnotationPath = oConvertedProperty.annotationPath;
|
|
433
367
|
var oPropertyContext = oMetaModel.createBindingContext(sAnnotationPath);
|
|
@@ -442,7 +376,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
442
376
|
});
|
|
443
377
|
return aPropertyInfo;
|
|
444
378
|
};
|
|
445
|
-
|
|
446
379
|
return Promise.resolve(oFilterBar.waitForInitialization().then(function () {
|
|
447
380
|
try {
|
|
448
381
|
function _temp3() {
|
|
@@ -452,13 +385,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
452
385
|
}).forEach(function (oPropertyInfo) {
|
|
453
386
|
if (oPropertyInfo.path in oConditions) {
|
|
454
387
|
mFilter[oPropertyInfo.path] = oConditions[oPropertyInfo.path];
|
|
455
|
-
|
|
456
388
|
if (!oPropertyInfo.hiddenFilter) {
|
|
457
389
|
aItems.push({
|
|
458
390
|
name: oPropertyInfo.path
|
|
459
391
|
});
|
|
460
392
|
}
|
|
461
|
-
|
|
462
393
|
if (oPropertyInfo.hasValueHelp) {
|
|
463
394
|
mFilter[oPropertyInfo.path].forEach(fnAdjustValueHelpCondition);
|
|
464
395
|
} else {
|
|
@@ -475,10 +406,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
475
406
|
items: aItems
|
|
476
407
|
});
|
|
477
408
|
}
|
|
478
|
-
|
|
479
|
-
|
|
409
|
+
var sEntityTypePath = DelegateUtil.getCustomData(oFilterBar, "entityType");
|
|
410
|
+
// During external app navigation, we have to clear the existing conditions to avoid merging of values coming from annotation and context
|
|
480
411
|
// Condition !bIsFLPValuePresent indicates it's external app navigation
|
|
481
|
-
|
|
482
412
|
var _temp4 = function () {
|
|
483
413
|
if (!bIsFLPValuePresent) {
|
|
484
414
|
return Promise.resolve(_this5._fnClearStateBeforexAppNav(oFilterBar)).then(function (oClearConditions) {
|
|
@@ -489,7 +419,6 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
489
419
|
});
|
|
490
420
|
}
|
|
491
421
|
}();
|
|
492
|
-
|
|
493
422
|
return Promise.resolve(_temp4 && _temp4.then ? _temp4.then(_temp3) : _temp3(_temp4));
|
|
494
423
|
} catch (e) {
|
|
495
424
|
return Promise.reject(e);
|
|
@@ -502,4 +431,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/core/CommonUtils", "sap/fe/core/helpers/K
|
|
|
502
431
|
};
|
|
503
432
|
return ViewStateOverride;
|
|
504
433
|
}, false);
|
|
505
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvcmVMaWJyYXJ5IiwiVmFyaWFudE1hbmFnZW1lbnQiLCJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiSW5pdGlhbExvYWRNb2RlIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiQ29tbW9uVXRpbHMiLCJDT05ESVRJT05fUEFUSF9UT19QUk9QRVJUWV9QQVRIX1JFR0VYIiwiVmlld1N0YXRlT3ZlcnJpZGUiLCJfYlNlYXJjaFRyaWdnZXJlZCIsImFwcGx5SW5pdGlhbFN0YXRlT25seSIsIm9uQmVmb3JlU3RhdGVBcHBsaWVkIiwiYVByb21pc2VzIiwib1ZpZXciLCJnZXRWaWV3Iiwib0NvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwib0ZpbHRlckJhciIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiYVRhYmxlcyIsIl9nZXRDb250cm9scyIsInNldFN1c3BlbmRTZWxlY3Rpb24iLCJwdXNoIiwid2FpdEZvckluaXRpYWxpemF0aW9uIiwiZm9yRWFjaCIsIm9UYWJsZSIsImluaXRpYWxpemVkIiwib25BZnRlclN0YXRlQXBwbGllZCIsIl9pc0ZpbHRlckJhckhpZGRlbiIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic2V0UHJvcGVydHkiLCJfaXNNdWx0aU1vZGUiLCJfZ2V0TXVsdGlNb2RlQ29udHJvbCIsInNldENvdW50c091dERhdGVkIiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwiYVZpZXdDb250cm9scyIsImFDb250cm9sc1RvUmVmcmVzaCIsIktlZXBBbGl2ZUhlbHBlciIsImdldENvbnRyb2xzRm9yUmVmcmVzaCIsIkFycmF5IiwicHJvdG90eXBlIiwiYXBwbHkiLCJhZGFwdFN0YXRlQ29udHJvbHMiLCJhU3RhdGVDb250cm9scyIsIm9WaWV3RGF0YSIsImdldFZpZXdEYXRhIiwiYkNvbnRyb2xWTSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiQ29udHJvbCIsIm9GaWx0ZXJCYXJWTSIsIl9nZXRGaWx0ZXJCYXJWTSIsIm9RdWlja0ZpbHRlciIsImdldFF1aWNrRmlsdGVyIiwiZ2V0VmFyaWFudCIsIm9DaGFydCIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiX2dldFNlZ21lbnRlZEJ1dHRvbiIsIkNoYXJ0IiwiVGFibGUiLCJieUlkIiwicmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwibUFkZGl0aW9uYWxTdGF0ZXMiLCJiUGVuZGluZ0ZpbHRlciIsImdldFByb3BlcnR5IiwiZGF0YUxvYWRlZCIsInNBbHBDb250ZW50VmlldyIsImFscENvbnRlbnRWaWV3IiwiYXBwbHlBZGRpdGlvbmFsU3RhdGVzIiwib0FkZGl0aW9uYWxTdGF0ZXMiLCJ0cmlnZ2VyU2VhcmNoIiwic3lzdGVtIiwiZGVza3RvcCIsIkh5YnJpZCIsImdldE1vZGVsIiwiZ2V0UGF0aCIsIl9hcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzVG9GaWx0ZXJiYXIiLCJvTmF2aWdhdGlvblBhcmFtZXRlciIsImFSZXN1bHRzIiwib0FwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwib1ZhcmlhbnRQcm9taXNlIiwiaGFuZGxlVmFyaWFudElkUGFzc2VkVmlhVVJMUGFyYW1zIiwiYkZpbHRlclZhcmlhbnRBcHBsaWVkIiwidGhlbiIsImFWYXJpYW50cyIsImxlbmd0aCIsIl9hcHBseVNlbGVjdGlvblZhcmlhbnQiLCJvRHluYW1pY1BhZ2UiLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sIiwiYlByZXZlbnRJbml0aWFsU2VhcmNoIiwib0ZpbHRlckJhckNvbnRyb2wiLCJuYXZpZ2F0aW9uVHlwZSIsImluaXRpYWwiLCJyZXF1aXJlc1N0YW5kYXJkVmFyaWFudCIsImluaXRpYWxMb2FkIiwiRW5hYmxlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9wcmV2ZW50SW5pdGlhbFNlYXJjaCIsInNldEhlYWRlckV4cGFuZGVkIiwiY2F0Y2giLCJMb2ciLCJlcnJvciIsIm9VcmxQYXJhbXMiLCJhUGFnZVZhcmlhbnRJZCIsImFGaWx0ZXJCYXJWYXJpYW50SWQiLCJhVGFibGVWYXJpYW50SWQiLCJvVmFyaWFudCIsInNQYWdlVmFyaWFudElkIiwic0ZpbHRlckJhclZhcmlhbnRJZCIsInNUYWJsZVZhcmlhbnRJZCIsIl9oYW5kbGVDb250cm9sVmFyaWFudElkIiwib1ZhcmlhbnRJRHMiLCJvVk0iLCJzVmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50cyIsImtleSIsIl9hcHBseUNvbnRyb2xWYXJpYW50IiwiX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sIiwib1RhYmxlVmFyaWFudCIsIlByb21pc2UiLCJhbGwiLCJzVmFyaWFudElEIiwic1ZhcmlhbnRSZWZlcmVuY2UiLCJfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlIiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiQ29udHJvbFZhcmlhbnRBcHBseUFQSSIsImFjdGl2YXRlVmFyaWFudCIsImVsZW1lbnQiLCJ2YXJpYW50UmVmZXJlbmNlIiwiUGFnZSIsIk5vbmUiLCJFcnJvciIsIm9WYXJpYW50TWFuYWdlbWVudCIsIm9DdXJyZW50VmFyaWFudCIsImZpbmQiLCJvSXRlbSIsImdldEN1cnJlbnRWYXJpYW50S2V5IiwiZXhlY3V0ZU9uU2VsZWN0Iiwib1NlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50Iiwib1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsInNlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsInJlc29sdmUiLCJvQ29uZGl0aW9ucyIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzQ29udGV4dFBhdGgiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMiLCJnZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHMiLCJiVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJkYXRhIiwiYlJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IiwiYklzRkxQVmFsdWVQcmVzZW50IiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJnZXREZWZhdWx0VmFyaWFudEtleSIsImJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHkiLCJnZXRDb25kaXRpb25zIiwiYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeSIsImFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMiLCJfYWN0aXZhdGVTZWxlY3Rpb25WYXJpYW50Iiwib1Byb21pc2UiLCJvVmFyaWFudEtleSIsImdldElkIiwiYkNsZWFyRmlsdGVyQW5kUmVwbGFjZVdpdGhBcHBTdGF0ZSIsIl9mbkFwcGx5Q29uZGl0aW9ucyIsIl9mbkNsZWFyU3RhdGVCZWZvcmV4QXBwTmF2IiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwib0V4dGVybmFsU3RhdGUiLCJvQ29uZGl0aW9uIiwiZmlsdGVyIiwiZmllbGQiLCJjb25kaXRpb24iLCJvRXJyb3IiLCJtRmlsdGVyIiwiYUl0ZW1zIiwiZm5BZGp1c3RWYWx1ZUhlbHBDb25kaXRpb24iLCJ2YWxpZGF0ZWQiLCJDb25kaXRpb25WYWxpZGF0ZWQiLCJWYWxpZGF0ZWQiLCJvcGVyYXRvciIsInZhbHVlcyIsImlzRW1wdHkiLCJmbkdldFByb3BlcnR5SW5mbyIsIm9GaWx0ZXJDb250cm9sIiwic0VudGl0eVR5cGVQYXRoIiwic0VudGl0eVNldFBhdGgiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJvRlIiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJhTm9uRmlsdGVyYWJsZVByb3BzIiwiTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUyIsIm1GaWx0ZXJGaWVsZHMiLCJGaWx0ZXJVdGlscyIsImdldENvbnZlcnRlZEZpbHRlckZpZWxkcyIsImFQcm9wZXJ0eUluZm8iLCJPYmplY3QiLCJrZXlzIiwic0ZpbHRlckZpZWxkS2V5Iiwib0NvbnZlcnRlZFByb3BlcnR5Iiwic1Byb3BlcnR5UGF0aCIsImNvbmRpdGlvblBhdGgiLCJyZXBsYWNlIiwiaW5kZXhPZiIsInNBbm5vdGF0aW9uUGF0aCIsImFubm90YXRpb25QYXRoIiwib1Byb3BlcnR5Q29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwicGF0aCIsImhpZGRlbkZpbHRlciIsImF2YWlsYWJpbGl0eSIsImhhc1ZhbHVlSGVscCIsIlByb3BlcnR5Rm9ybWF0dGVycyIsImdldE9iamVjdCIsImNvbnRleHQiLCJvUHJvcGVydHlJbmZvIiwibmFtZSIsImZpbHRlcmVkIiwiTm90VmFsaWRhdGVkIiwiYXBwbHlFeHRlcm5hbFN0YXRlIiwiaXRlbXMiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDdXN0b21EYXRhIiwib0NsZWFyQ29uZGl0aW9ucyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlld1N0YXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IENvcmVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgKiBhcyBQcm9wZXJ0eUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IE5hdkxpYnJhcnkgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHsgc3lzdGVtIH0gZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBDb250cm9sVmFyaWFudEFwcGx5QVBJIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCBDb25kaXRpb25WYWxpZGF0ZWQgZnJvbSBcInNhcC91aS9tZGMvZW51bS9Db25kaXRpb25WYWxpZGF0ZWRcIjtcbmltcG9ydCBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG5jb25zdCBOYXZUeXBlID0gTmF2TGlicmFyeS5OYXZUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBDb3JlTGlicmFyeS5WYXJpYW50TWFuYWdlbWVudCxcblx0VGVtcGxhdGVDb250ZW50VmlldyA9IENvcmVMaWJyYXJ5LlRlbXBsYXRlQ29udGVudFZpZXcsXG5cdEluaXRpYWxMb2FkTW9kZSA9IENvcmVMaWJyYXJ5LkluaXRpYWxMb2FkTW9kZTtcbmNvbnN0IEZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLkZpbHRlclJlc3RyaWN0aW9ucyxcblx0Q09ORElUSU9OX1BBVEhfVE9fUFJPUEVSVFlfUEFUSF9SRUdFWCA9IC9cXCt8XFwqL2c7XG5cbmNvbnN0IFZpZXdTdGF0ZU92ZXJyaWRlOiBhbnkgPSB7XG5cdF9iU2VhcmNoVHJpZ2dlcmVkOiBmYWxzZSxcblx0YXBwbHlJbml0aWFsU3RhdGVPbmx5OiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cdG9uQmVmb3JlU3RhdGVBcHBsaWVkOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlICYgdHlwZW9mIFZpZXdTdGF0ZU92ZXJyaWRlLCBhUHJvbWlzZXM6IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdG9GaWx0ZXJCYXIgPSBvQ29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpLFxuXHRcdFx0YVRhYmxlcyA9IG9Db250cm9sbGVyLl9nZXRDb250cm9scyhcInRhYmxlXCIpO1xuXHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRvRmlsdGVyQmFyLnNldFN1c3BlbmRTZWxlY3Rpb24odHJ1ZSk7XG5cdFx0XHRhUHJvbWlzZXMucHVzaCgob0ZpbHRlckJhciBhcyBhbnkpLndhaXRGb3JJbml0aWFsaXphdGlvbigpKTtcblx0XHR9XG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0YVByb21pc2VzLnB1c2gob1RhYmxlLmluaXRpYWxpemVkKCkpO1xuXHRcdH0pO1xuXG5cdFx0ZGVsZXRlIHRoaXMuX2JTZWFyY2hUcmlnZ2VyZWQ7XG5cdH0sXG5cdG9uQWZ0ZXJTdGF0ZUFwcGxpZWQ6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUpIHtcblx0XHRjb25zdCBvQ29udHJvbGxlciA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcjtcblx0XHRjb25zdCBvRmlsdGVyQmFyID0gb0NvbnRyb2xsZXIuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0b0ZpbHRlckJhci5zZXRTdXNwZW5kU2VsZWN0aW9uKGZhbHNlKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sbGVyLl9pc0ZpbHRlckJhckhpZGRlbigpKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdGlmIChvQ29udHJvbGxlci5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0YWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBhQ29udHJvbHM6IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdGFWaWV3Q29udHJvbHMgPSBvQ29udHJvbGxlci5fZ2V0Q29udHJvbHMoKSxcblx0XHRcdGFDb250cm9sc1RvUmVmcmVzaCA9IEtlZXBBbGl2ZUhlbHBlci5nZXRDb250cm9sc0ZvclJlZnJlc2gob1ZpZXcsIGFWaWV3Q29udHJvbHMpO1xuXG5cdFx0QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYUNvbnRyb2xzLCBhQ29udHJvbHNUb1JlZnJlc2gpO1xuXHR9LFxuXHRhZGFwdFN0YXRlQ29udHJvbHM6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUgJiB0eXBlb2YgVmlld1N0YXRlT3ZlcnJpZGUsIGFTdGF0ZUNvbnRyb2xzOiBhbnkpIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0b0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRvVmlld0RhdGEgPSBvVmlldy5nZXRWaWV3RGF0YSgpLFxuXHRcdFx0YkNvbnRyb2xWTSA9IG9WaWV3RGF0YS52YXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2w7XG5cblx0XHRjb25zdCBvRmlsdGVyQmFyVk0gPSB0aGlzLl9nZXRGaWx0ZXJCYXJWTShvVmlldyk7XG5cdFx0aWYgKG9GaWx0ZXJCYXJWTSkge1xuXHRcdFx0YVN0YXRlQ29udHJvbHMucHVzaChvRmlsdGVyQmFyVk0pO1xuXHRcdH1cblx0XHRpZiAob0NvbnRyb2xsZXIuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGFTdGF0ZUNvbnRyb2xzLnB1c2gob0NvbnRyb2xsZXIuX2dldE11bHRpTW9kZUNvbnRyb2woKSk7XG5cdFx0fVxuXHRcdG9Db250cm9sbGVyLl9nZXRDb250cm9scyhcInRhYmxlXCIpLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRjb25zdCBvUXVpY2tGaWx0ZXIgPSBvVGFibGUuZ2V0UXVpY2tGaWx0ZXIoKTtcblx0XHRcdGlmIChvUXVpY2tGaWx0ZXIpIHtcblx0XHRcdFx0YVN0YXRlQ29udHJvbHMucHVzaChvUXVpY2tGaWx0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGJDb250cm9sVk0pIHtcblx0XHRcdFx0YVN0YXRlQ29udHJvbHMucHVzaChvVGFibGUuZ2V0VmFyaWFudCgpKTtcblx0XHRcdH1cblx0XHRcdGFTdGF0ZUNvbnRyb2xzLnB1c2gob1RhYmxlKTtcblx0XHR9KTtcblx0XHRpZiAob0NvbnRyb2xsZXIuX2dldENvbnRyb2xzKFwiQ2hhcnRcIikpIHtcblx0XHRcdG9Db250cm9sbGVyLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpLmZvckVhY2goZnVuY3Rpb24gKG9DaGFydDogYW55KSB7XG5cdFx0XHRcdGFTdGF0ZUNvbnRyb2xzLnB1c2gob0NoYXJ0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob0NvbnRyb2xsZXIuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0YVN0YXRlQ29udHJvbHMucHVzaChvQ29udHJvbGxlci5fZ2V0U2VnbWVudGVkQnV0dG9uKFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpKTtcblx0XHRcdGFTdGF0ZUNvbnRyb2xzLnB1c2gob0NvbnRyb2xsZXIuX2dldFNlZ21lbnRlZEJ1dHRvbihUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlKSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSBvQ29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRhU3RhdGVDb250cm9scy5wdXNoKG9GaWx0ZXJCYXIpO1xuXHRcdH1cblx0XHRhU3RhdGVDb250cm9scy5wdXNoKG9WaWV3LmJ5SWQoXCJmZTo6TGlzdFJlcG9ydFwiKSk7XG5cdH0sXG5cdHJldHJpZXZlQWRkaXRpb25hbFN0YXRlczogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSAmIHR5cGVvZiBWaWV3U3RhdGVPdmVycmlkZSwgbUFkZGl0aW9uYWxTdGF0ZXM6IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdGJQZW5kaW5nRmlsdGVyID0gKG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLmdldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIik7XG5cblx0XHRtQWRkaXRpb25hbFN0YXRlcy5kYXRhTG9hZGVkID0gIWJQZW5kaW5nRmlsdGVyIHx8ICEhdGhpcy5fYlNlYXJjaFRyaWdnZXJlZDtcblx0XHRpZiAob0NvbnRyb2xsZXIuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0Y29uc3Qgc0FscENvbnRlbnRWaWV3ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKS5nZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIpO1xuXHRcdFx0bUFkZGl0aW9uYWxTdGF0ZXMuYWxwQ29udGVudFZpZXcgPSBzQWxwQ29udGVudFZpZXc7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIHRoaXMuX2JTZWFyY2hUcmlnZ2VyZWQ7XG5cdH0sXG5cdGFwcGx5QWRkaXRpb25hbFN0YXRlczogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSAmIHR5cGVvZiBWaWV3U3RhdGVPdmVycmlkZSwgb0FkZGl0aW9uYWxTdGF0ZXM6IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdG9GaWx0ZXJCYXIgPSBvQ29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXG5cdFx0aWYgKG9BZGRpdGlvbmFsU3RhdGVzKSB7XG5cdFx0XHQvLyBleHBsaWNpdCBjaGVjayBmb3IgYm9vbGVhbiB2YWx1ZXMgLSAndW5kZWZpbmVkJyBzaG91bGQgbm90IGFsdGVyIHRoZSB0cmlnZ2VyZWQgc2VhcmNoIHByb3BlcnR5XG5cdFx0XHRpZiAob0FkZGl0aW9uYWxTdGF0ZXMuZGF0YUxvYWRlZCA9PT0gZmFsc2UgJiYgb0ZpbHRlckJhcikge1xuXHRcdFx0XHQvLyB3aXRob3V0IHRoaXMsIHRoZSBkYXRhIGlzIGxvYWRlZCBvbiBuYXZpZ2F0aW5nIGJhY2tcblx0XHRcdFx0KG9GaWx0ZXJCYXIgYXMgYW55KS5fYlNlYXJjaFRyaWdnZXJlZCA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChvQWRkaXRpb25hbFN0YXRlcy5kYXRhTG9hZGVkID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRcdFx0b0ZpbHRlckJhci50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fYlNlYXJjaFRyaWdnZXJlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0XHRpZiAoIXN5c3RlbS5kZXNrdG9wICYmIG9BZGRpdGlvbmFsU3RhdGVzLmFscENvbnRlbnRWaWV3ID09IFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkKSB7XG5cdFx0XHRcdFx0b0FkZGl0aW9uYWxTdGF0ZXMuYWxwQ29udGVudFZpZXcgPSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdChvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2FscENvbnRlbnRWaWV3YCxcblx0XHRcdFx0XHRvQWRkaXRpb25hbFN0YXRlcy5hbHBDb250ZW50Vmlld1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNUb0ZpbHRlcmJhcjogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSAmIHR5cGVvZiBWaWV3U3RhdGVPdmVycmlkZSwgb05hdmlnYXRpb25QYXJhbWV0ZXI6IGFueSwgYVJlc3VsdHM6IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IG9Db250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fTtcblx0XHRjb25zdCBvVmFyaWFudFByb21pc2UgPSB0aGlzLmhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyhvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdGxldCBiRmlsdGVyVmFyaWFudEFwcGxpZWQ6IGJvb2xlYW47XG5cdFx0YVJlc3VsdHMucHVzaChcblx0XHRcdG9WYXJpYW50UHJvbWlzZVxuXHRcdFx0XHQudGhlbigoYVZhcmlhbnRzOiBhbnlbXSkgPT4ge1xuXHRcdFx0XHRcdGlmIChhVmFyaWFudHMgJiYgYVZhcmlhbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGlmIChhVmFyaWFudHNbMF0gPT09IHRydWUgfHwgYVZhcmlhbnRzWzFdID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdGJGaWx0ZXJWYXJpYW50QXBwbGllZCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzLl9hcHBseVNlbGVjdGlvblZhcmlhbnQob1ZpZXcsIG9OYXZpZ2F0aW9uUGFyYW1ldGVyLCBiRmlsdGVyVmFyaWFudEFwcGxpZWQpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0R5bmFtaWNQYWdlID0gb0NvbnRyb2xsZXIuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0XHRcdGxldCBiUHJldmVudEluaXRpYWxTZWFyY2ggPSBmYWxzZTtcblx0XHRcdFx0XHRjb25zdCBvRmlsdGVyQmFyVk0gPSB0aGlzLl9nZXRGaWx0ZXJCYXJWTShvVmlldyk7XG5cdFx0XHRcdFx0Y29uc3Qgb0ZpbHRlckJhckNvbnRyb2wgPSBvQ29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0XHRcdGlmIChvRmlsdGVyQmFyQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQob05hdmlnYXRpb25QYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUgIT09IE5hdlR5cGUuaW5pdGlhbCAmJiBvTmF2aWdhdGlvblBhcmFtZXRlci5yZXF1aXJlc1N0YW5kYXJkVmFyaWFudCkgfHxcblx0XHRcdFx0XHRcdFx0KCFvRmlsdGVyQmFyVk0gJiYgb1ZpZXcuZ2V0Vmlld0RhdGEoKS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQpIHx8XG5cdFx0XHRcdFx0XHRcdG9Db250cm9sbGVyLl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaChvRmlsdGVyQmFyVk0pXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0b0ZpbHRlckJhckNvbnRyb2wudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YlByZXZlbnRJbml0aWFsU2VhcmNoID0gdGhpcy5fcHJldmVudEluaXRpYWxTZWFyY2gob0ZpbHRlckJhclZNKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIHJlc2V0IHRoZSBzdXNwZW5kIHNlbGVjdGlvbiBvbiBmaWx0ZXIgYmFyIHRvIGFsbG93IGxvYWRpbmcgb2YgZGF0YSB3aGVuIG5lZWRlZCAod2FzIHNldCBvbiBMUiBJbml0KVxuXHRcdFx0XHRcdFx0b0ZpbHRlckJhckNvbnRyb2wuc2V0U3VzcGVuZFNlbGVjdGlvbihmYWxzZSk7XG5cdFx0XHRcdFx0XHR0aGlzLl9iU2VhcmNoVHJpZ2dlcmVkID0gIWJQcmV2ZW50SW5pdGlhbFNlYXJjaDtcblx0XHRcdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChzeXN0ZW0uZGVza3RvcCB8fCBiUHJldmVudEluaXRpYWxTZWFyY2gpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJWYXJpYW50IElEIGNhbm5vdCBiZSBhcHBsaWVkXCIpO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cdH0sXG5cblx0aGFuZGxlVmFyaWFudElkUGFzc2VkVmlhVVJMUGFyYW1zOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlICYgdHlwZW9mIFZpZXdTdGF0ZU92ZXJyaWRlLCBvVXJsUGFyYW1zOiBhbnkpIHtcblx0XHRjb25zdCBhUGFnZVZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtdmFyaWFudC1pZFwiXSxcblx0XHRcdGFGaWx0ZXJCYXJWYXJpYW50SWQgPSBvVXJsUGFyYW1zW1wic2FwLXVpLWZlLWZpbHRlcmJhci12YXJpYW50LWlkXCJdLFxuXHRcdFx0YVRhYmxlVmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS10YWJsZS12YXJpYW50LWlkXCJdO1xuXHRcdGxldCBvVmFyaWFudDtcblx0XHRpZiAoYVBhZ2VWYXJpYW50SWQgfHwgYUZpbHRlckJhclZhcmlhbnRJZCB8fCBhVGFibGVWYXJpYW50SWQpIHtcblx0XHRcdG9WYXJpYW50ID0ge1xuXHRcdFx0XHRzUGFnZVZhcmlhbnRJZDogYVBhZ2VWYXJpYW50SWQgJiYgYVBhZ2VWYXJpYW50SWRbMF0sXG5cdFx0XHRcdHNGaWx0ZXJCYXJWYXJpYW50SWQ6IGFGaWx0ZXJCYXJWYXJpYW50SWQgJiYgYUZpbHRlckJhclZhcmlhbnRJZFswXSxcblx0XHRcdFx0c1RhYmxlVmFyaWFudElkOiBhVGFibGVWYXJpYW50SWQgJiYgYVRhYmxlVmFyaWFudElkWzBdXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5faGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudCk7XG5cdH0sXG5cblx0X2hhbmRsZUNvbnRyb2xWYXJpYW50SWQ6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUgJiB0eXBlb2YgVmlld1N0YXRlT3ZlcnJpZGUsIG9WYXJpYW50SURzOiBhbnkpIHtcblx0XHRsZXQgb1ZNOiBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0YVByb21pc2VzOiBhbnlbXSA9IFtdO1xuXHRcdGNvbnN0IHNWYXJpYW50TWFuYWdlbWVudCA9IG9WaWV3LmdldFZpZXdEYXRhKCkudmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0aWYgKG9WYXJpYW50SURzICYmIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdG9WTSA9IG9WaWV3LmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpO1xuXHRcdFx0b1ZNLmdldFZhcmlhbnRzKCkuZm9yRWFjaCgob1ZhcmlhbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAob1ZhcmlhbnQua2V5ID09PSBvVmFyaWFudElEcy5zUGFnZVZhcmlhbnRJZCkge1xuXHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKHRoaXMuX2FwcGx5Q29udHJvbFZhcmlhbnQob1ZNLCBvVmFyaWFudElEcy5zUGFnZVZhcmlhbnRJZCwgdHJ1ZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKG9WYXJpYW50SURzICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRcdGlmIChvVmFyaWFudElEcy5zRmlsdGVyQmFyVmFyaWFudElkKSB7XG5cdFx0XHRcdG9WTSA9IG9WaWV3LmdldENvbnRyb2xsZXIoKS5fZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2woKTtcblx0XHRcdFx0aWYgKG9WTSkge1xuXHRcdFx0XHRcdG9WTS5nZXRWYXJpYW50cygpLmZvckVhY2goKG9WYXJpYW50OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGlmIChvVmFyaWFudC5rZXkgPT09IG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQpIHtcblx0XHRcdFx0XHRcdFx0YVByb21pc2VzLnB1c2godGhpcy5fYXBwbHlDb250cm9sVmFyaWFudChvVk0sIG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQsIHRydWUpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9WYXJpYW50SURzLnNUYWJsZVZhcmlhbnRJZCkge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSxcblx0XHRcdFx0XHRhVGFibGVzID0gb0NvbnRyb2xsZXIuX2dldENvbnRyb2xzKFwidGFibGVcIik7XG5cdFx0XHRcdGFUYWJsZXMuZm9yRWFjaCgob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRjb25zdCBvVGFibGVWYXJpYW50ID0gb1RhYmxlLmdldFZhcmlhbnQoKTtcblx0XHRcdFx0XHRpZiAob1RhYmxlICYmIG9UYWJsZVZhcmlhbnQpIHtcblx0XHRcdFx0XHRcdG9UYWJsZVZhcmlhbnQuZ2V0VmFyaWFudHMoKS5mb3JFYWNoKChvVmFyaWFudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChvVmFyaWFudC5rZXkgPT09IG9WYXJpYW50SURzLnNUYWJsZVZhcmlhbnRJZCkge1xuXHRcdFx0XHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKHRoaXMuX2FwcGx5Q29udHJvbFZhcmlhbnQob1RhYmxlVmFyaWFudCwgb1ZhcmlhbnRJRHMuc1RhYmxlVmFyaWFudElkKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHR9LFxuXG5cdF9hcHBseUNvbnRyb2xWYXJpYW50OiBmdW5jdGlvbiAob1ZhcmlhbnQ6IGFueSwgc1ZhcmlhbnRJRDogYW55LCBiRmlsdGVyVmFyaWFudEFwcGxpZWQ6IGFueSkge1xuXHRcdGNvbnN0IHNWYXJpYW50UmVmZXJlbmNlID0gdGhpcy5fY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WYXJpYW50LCBzVmFyaWFudElEKSA/IHNWYXJpYW50SUQgOiBvVmFyaWFudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHRjb25zdCBvVk0gPSBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRlbGVtZW50OiBvVmFyaWFudCxcblx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlXG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9WTS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBiRmlsdGVyVmFyaWFudEFwcGxpZWQ7XG5cdFx0fSk7XG5cdH0sXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHByaXZhdGUgaGVscGVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdF9nZXRGaWx0ZXJCYXJWTTogZnVuY3Rpb24gKG9WaWV3OiBhbnkpIHtcblx0XHRjb25zdCBvVmlld0RhdGEgPSBvVmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdHN3aXRjaCAob1ZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5QYWdlOlxuXHRcdFx0XHRyZXR1cm4gb1ZpZXcuYnlJZChcImZlOjpQYWdlVmFyaWFudE1hbmFnZW1lbnRcIik7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sOlxuXHRcdFx0XHRyZXR1cm4gb1ZpZXcuZ2V0Q29udHJvbGxlcigpLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZTpcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCB2YXJpYW50IHNldHRpbmc6ICR7b1ZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50fWApO1xuXHRcdH1cblx0fSxcblxuXHRfcHJldmVudEluaXRpYWxTZWFyY2g6IGZ1bmN0aW9uIChvVmFyaWFudE1hbmFnZW1lbnQ6IGFueSkge1xuXHRcdGlmICghb1ZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYVZhcmlhbnRzID0gb1ZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3Qgb0N1cnJlbnRWYXJpYW50ID0gYVZhcmlhbnRzLmZpbmQoZnVuY3Rpb24gKG9JdGVtOiBhbnkpIHtcblx0XHRcdHJldHVybiBvSXRlbS5rZXkgPT09IG9WYXJpYW50TWFuYWdlbWVudC5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdH0pO1xuXHRcdHJldHVybiAhb0N1cnJlbnRWYXJpYW50LmV4ZWN1dGVPblNlbGVjdDtcblx0fSxcblxuXHRfYXBwbHlTZWxlY3Rpb25WYXJpYW50OiBmdW5jdGlvbiAob1ZpZXc6IGFueSwgb05hdmlnYXRpb25QYXJhbWV0ZXI6IGFueSwgYkZpbHRlclZhcmlhbnRBcHBsaWVkOiBhbnkpIHtcblx0XHRjb25zdCBvRmlsdGVyQmFyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpLl9nZXRGaWx0ZXJCYXJDb250cm9sKCksXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudCA9IG9OYXZpZ2F0aW9uUGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzID0gb05hdmlnYXRpb25QYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudERlZmF1bHRzO1xuXHRcdGlmICghb0ZpbHRlckJhciB8fCAhb1NlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0bGV0IG9Db25kaXRpb25zID0ge307XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gb1ZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvVmlld0RhdGEuY29udGV4dFBhdGggfHwgYC8ke29WaWV3RGF0YS5lbnRpdHlTZXR9YDtcblx0XHRjb25zdCBhTWFuZGF0b3J5RmlsdGVyRmllbGRzID0gQ29tbW9uVXRpbHMuZ2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzKG9NZXRhTW9kZWwsIHNDb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgYlVzZVNlbWFudGljRGF0ZVJhbmdlID0gb0ZpbHRlckJhci5kYXRhKFwidXNlU2VtYW50aWNEYXRlUmFuZ2VcIik7XG5cdFx0bGV0IG9WYXJpYW50O1xuXHRcdHN3aXRjaCAob1ZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5QYWdlOlxuXHRcdFx0XHRvVmFyaWFudCA9IG9WaWV3LmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2w6XG5cdFx0XHRcdG9WYXJpYW50ID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmU6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Y29uc3QgYlJlcXVpcmVzU3RhbmRhcmRWYXJpYW50ID0gb05hdmlnYXRpb25QYXJhbWV0ZXIucmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ7XG5cdFx0Ly8gY2hlY2sgaWYgRkxQIGRlZmF1bHQgdmFsdWVzIGFyZSB0aGVyZSBhbmQgaXMgaXQgc3RhbmRhcmQgdmFyaWFudFxuXHRcdGNvbnN0IGJJc0ZMUFZhbHVlUHJlc2VudDogYm9vbGVhbiA9XG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzICYmXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzLmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCkubGVuZ3RoID4gMCAmJlxuXHRcdFx0b1ZhcmlhbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gb1ZhcmlhbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCkgJiZcblx0XHRcdG9OYXZpZ2F0aW9uUGFyYW1ldGVyLmJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHk7XG5cblx0XHQvLyBnZXQgY29uZGl0aW9ucyB3aGVuIEZMUCB2YWx1ZSBpcyBwcmVzZW50XG5cdFx0aWYgKGJGaWx0ZXJWYXJpYW50QXBwbGllZCB8fCBiSXNGTFBWYWx1ZVByZXNlbnQpIHtcblx0XHRcdG9Db25kaXRpb25zID0gb0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCk7XG5cdFx0fVxuXHRcdENvbW1vblV0aWxzLmFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3koYU1hbmRhdG9yeUZpbHRlckZpZWxkcywgb1NlbGVjdGlvblZhcmlhbnQsIG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMpO1xuXHRcdENvbW1vblV0aWxzLmFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMoXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdHNDb250ZXh0UGF0aCxcblx0XHRcdGJJc0ZMUFZhbHVlUHJlc2VudCxcblx0XHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRcdG9WaWV3RGF0YVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5fYWN0aXZhdGVTZWxlY3Rpb25WYXJpYW50KFxuXHRcdFx0b0ZpbHRlckJhcixcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0b1ZhcmlhbnQsXG5cdFx0XHRiUmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQsXG5cdFx0XHRiRmlsdGVyVmFyaWFudEFwcGxpZWQsXG5cdFx0XHRiSXNGTFBWYWx1ZVByZXNlbnRcblx0XHQpO1xuXHR9LFxuXHRfYWN0aXZhdGVTZWxlY3Rpb25WYXJpYW50OiBmdW5jdGlvbiAoXG5cdFx0b0ZpbHRlckJhcjogYW55LFxuXHRcdG9Db25kaXRpb25zOiBhbnksXG5cdFx0b1ZhcmlhbnQ6IGFueSxcblx0XHRiUmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ6IGFueSxcblx0XHRiRmlsdGVyVmFyaWFudEFwcGxpZWQ6IGFueSxcblx0XHRiSXNGTFBWYWx1ZVByZXNlbnQ/OiBib29sZWFuXG5cdCkge1xuXHRcdGxldCBvUHJvbWlzZTtcblxuXHRcdGlmIChvVmFyaWFudCAmJiAhYkZpbHRlclZhcmlhbnRBcHBsaWVkKSB7XG5cdFx0XHRsZXQgb1ZhcmlhbnRLZXkgPSBiUmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQgPyBvVmFyaWFudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA6IG9WYXJpYW50LmdldERlZmF1bHRWYXJpYW50S2V5KCk7XG5cdFx0XHRpZiAob1ZhcmlhbnRLZXkgPT09IG51bGwpIHtcblx0XHRcdFx0b1ZhcmlhbnRLZXkgPSBvVmFyaWFudC5nZXRJZCgpO1xuXHRcdFx0fVxuXHRcdFx0b1Byb21pc2UgPSBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRcdGVsZW1lbnQ6IG9WYXJpYW50LFxuXHRcdFx0XHR2YXJpYW50UmVmZXJlbmNlOiBvVmFyaWFudEtleVxuXHRcdFx0fSkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBiUmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQgfHwgb1ZhcmlhbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gb1ZhcmlhbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBvUHJvbWlzZS50aGVuKChiQ2xlYXJGaWx0ZXJBbmRSZXBsYWNlV2l0aEFwcFN0YXRlOiBhbnkpID0+IHtcblx0XHRcdGlmIChiQ2xlYXJGaWx0ZXJBbmRSZXBsYWNlV2l0aEFwcFN0YXRlKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9mbkFwcGx5Q29uZGl0aW9ucyhvRmlsdGVyQmFyLCBvQ29uZGl0aW9ucywgYklzRkxQVmFsdWVQcmVzZW50KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvKlxuXHQgKiBTZXRzIGZpbHRlcmVkOiBmYWxzZSBmbGFnIHRvIGV2ZXJ5IGZpZWxkIHNvIHRoYXQgaXQgY2FuIGJlIGNsZWFyZWQgb3V0XG5cdCAqXG5cdCAqIEBwYXJhbSBvRmlsdGVyQmFyIGZpbHRlcmJhciBjb250cm9sIGlzIHVzZWQgdG8gZGlzcGxheSBmaWx0ZXIgcHJvcGVydGllcyBpbiBhIHVzZXItZnJpZW5kbHkgbWFubmVyIHRvIHBvcHVsYXRlIHZhbHVlcyBmb3IgYSBxdWVyeVxuXHQgKiBAcmV0dXJucyBwcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZm5DbGVhclN0YXRlQmVmb3JleEFwcE5hdjogYXN5bmMgZnVuY3Rpb24gKG9GaWx0ZXJCYXI6IEZpbHRlckJhcikge1xuXHRcdHJldHVybiBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIpXG5cdFx0XHQudGhlbigob0V4dGVybmFsU3RhdGU6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29uZGl0aW9uID0gb0V4dGVybmFsU3RhdGUuZmlsdGVyO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGZpZWxkIGluIG9Db25kaXRpb24pIHtcblx0XHRcdFx0XHRpZiAoZmllbGQgIT09IFwiJGVkaXRTdGF0ZVwiICYmIGZpZWxkICE9PSBcIiRzZWFyY2hcIiAmJiBvQ29uZGl0aW9uW2ZpZWxkXSkge1xuXHRcdFx0XHRcdFx0b0NvbmRpdGlvbltmaWVsZF0uZm9yRWFjaCgoY29uZGl0aW9uOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPikgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25bXCJmaWx0ZXJlZFwiXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUob0NvbmRpdGlvbik7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0X2ZuQXBwbHlDb25kaXRpb25zOiBhc3luYyBmdW5jdGlvbiAob0ZpbHRlckJhcjogYW55LCBvQ29uZGl0aW9uczogYW55LCBiSXNGTFBWYWx1ZVByZXNlbnQ/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgbUZpbHRlcjogYW55ID0ge30sXG5cdFx0XHRhSXRlbXM6IGFueVtdID0gW10sXG5cdFx0XHRmbkFkanVzdFZhbHVlSGVscENvbmRpdGlvbiA9IGZ1bmN0aW9uIChvQ29uZGl0aW9uOiBhbnkpIHtcblx0XHRcdFx0Ly8gaW4gY2FzZSB0aGUgY29uZGl0aW9uIGlzIG1lYW50IGZvciBhIGZpZWxkIGhhdmluZyBhIFZILCB0aGUgZm9ybWF0IHJlcXVpcmVkIGJ5IE1EQyBkaWZmZXJzXG5cdFx0XHRcdG9Db25kaXRpb24udmFsaWRhdGVkID0gQ29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZDtcblx0XHRcdFx0aWYgKG9Db25kaXRpb24ub3BlcmF0b3IgPT09IFwiRW1wdHlcIikge1xuXHRcdFx0XHRcdG9Db25kaXRpb24ub3BlcmF0b3IgPSBcIkVRXCI7XG5cdFx0XHRcdFx0b0NvbmRpdGlvbi52YWx1ZXMgPSBbXCJcIl07XG5cdFx0XHRcdH0gZWxzZSBpZiAob0NvbmRpdGlvbi5vcGVyYXRvciA9PT0gXCJOb3RFbXB0eVwiKSB7XG5cdFx0XHRcdFx0b0NvbmRpdGlvbi5vcGVyYXRvciA9IFwiTkVcIjtcblx0XHRcdFx0XHRvQ29uZGl0aW9uLnZhbHVlcyA9IFtcIlwiXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWxldGUgb0NvbmRpdGlvbi5pc0VtcHR5O1xuXHRcdFx0fTtcblx0XHRjb25zdCBmbkdldFByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChvRmlsdGVyQ29udHJvbDogYW55LCBzRW50aXR5VHlwZVBhdGg6IGFueSkge1xuXHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNFbnRpdHlUeXBlUGF0aCksXG5cdFx0XHRcdG9NZXRhTW9kZWwgPSBvRmlsdGVyQ29udHJvbC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRvRlIgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoc0VudGl0eVNldFBhdGgsIG9NZXRhTW9kZWwpLFxuXHRcdFx0XHRhTm9uRmlsdGVyYWJsZVByb3BzID0gb0ZSW0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXSxcblx0XHRcdFx0bUZpbHRlckZpZWxkcyA9IEZpbHRlclV0aWxzLmdldENvbnZlcnRlZEZpbHRlckZpZWxkcyhvRmlsdGVyQ29udHJvbCwgc0VudGl0eVR5cGVQYXRoKSxcblx0XHRcdFx0YVByb3BlcnR5SW5mbzogYW55W10gPSBbXTtcblx0XHRcdE9iamVjdC5rZXlzKG1GaWx0ZXJGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKHNGaWx0ZXJGaWVsZEtleTogc3RyaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG9Db252ZXJ0ZWRQcm9wZXJ0eSA9IG1GaWx0ZXJGaWVsZHNbc0ZpbHRlckZpZWxkS2V5XTtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IG9Db252ZXJ0ZWRQcm9wZXJ0eS5jb25kaXRpb25QYXRoLnJlcGxhY2UoQ09ORElUSU9OX1BBVEhfVE9fUFJPUEVSVFlfUEFUSF9SRUdFWCwgXCJcIik7XG5cdFx0XHRcdGlmIChhTm9uRmlsdGVyYWJsZVByb3BzLmluZGV4T2Yoc1Byb3BlcnR5UGF0aCkgPT09IC0xKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0NvbnZlcnRlZFByb3BlcnR5LmFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRcdFx0YVByb3BlcnR5SW5mby5wdXNoKHtcblx0XHRcdFx0XHRcdHBhdGg6IG9Db252ZXJ0ZWRQcm9wZXJ0eS5jb25kaXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0aGlkZGVuRmlsdGVyOiBvQ29udmVydGVkUHJvcGVydHkuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdFx0XHRcdFx0aGFzVmFsdWVIZWxwOiAhc0Fubm90YXRpb25QYXRoXG5cdFx0XHRcdFx0XHRcdD8gZmFsc2Vcblx0XHRcdFx0XHRcdFx0OiBQcm9wZXJ0eUZvcm1hdHRlcnMuaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eUNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogb1Byb3BlcnR5Q29udGV4dCB9KVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBhUHJvcGVydHlJbmZvO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gb0ZpbHRlckJhci53YWl0Rm9ySW5pdGlhbGl6YXRpb24oKS50aGVuKGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9GaWx0ZXJCYXIsIFwiZW50aXR5VHlwZVwiKTtcblx0XHRcdC8vIER1cmluZyBleHRlcm5hbCBhcHAgbmF2aWdhdGlvbiwgd2UgaGF2ZSB0byBjbGVhciB0aGUgZXhpc3RpbmcgY29uZGl0aW9ucyB0byBhdm9pZCBtZXJnaW5nIG9mIHZhbHVlcyBjb21pbmcgZnJvbSBhbm5vdGF0aW9uIGFuZCBjb250ZXh0XG5cdFx0XHQvLyBDb25kaXRpb24gIWJJc0ZMUFZhbHVlUHJlc2VudCBpbmRpY2F0ZXMgaXQncyBleHRlcm5hbCBhcHAgbmF2aWdhdGlvblxuXHRcdFx0aWYgKCFiSXNGTFBWYWx1ZVByZXNlbnQpIHtcblx0XHRcdFx0Y29uc3Qgb0NsZWFyQ29uZGl0aW9ucyA9IGF3YWl0IHRoaXMuX2ZuQ2xlYXJTdGF0ZUJlZm9yZXhBcHBOYXYob0ZpbHRlckJhcik7XG5cdFx0XHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUob0ZpbHRlckJhciwge1xuXHRcdFx0XHRcdGZpbHRlcjogb0NsZWFyQ29uZGl0aW9ucyxcblx0XHRcdFx0XHRpdGVtczogYUl0ZW1zXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYVByb3BlcnR5SW5mbyA9IGZuR2V0UHJvcGVydHlJbmZvKG9GaWx0ZXJCYXIsIHNFbnRpdHlUeXBlUGF0aCk7XG5cdFx0XHRhUHJvcGVydHlJbmZvXG5cdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Qcm9wZXJ0eUluZm86IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvUHJvcGVydHlJbmZvLnBhdGggIT09IFwiJGVkaXRTdGF0ZVwiICYmIG9Qcm9wZXJ0eUluZm8ucGF0aCAhPT0gXCIkc2VhcmNoXCI7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHlJbmZvOiBhbnkpIHtcblx0XHRcdFx0XHRpZiAob1Byb3BlcnR5SW5mby5wYXRoIGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0XHRtRmlsdGVyW29Qcm9wZXJ0eUluZm8ucGF0aF0gPSBvQ29uZGl0aW9uc1tvUHJvcGVydHlJbmZvLnBhdGhdO1xuXHRcdFx0XHRcdFx0aWYgKCFvUHJvcGVydHlJbmZvLmhpZGRlbkZpbHRlcikge1xuXHRcdFx0XHRcdFx0XHRhSXRlbXMucHVzaCh7IG5hbWU6IG9Qcm9wZXJ0eUluZm8ucGF0aCB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChvUHJvcGVydHlJbmZvLmhhc1ZhbHVlSGVscCkge1xuXHRcdFx0XHRcdFx0XHRtRmlsdGVyW29Qcm9wZXJ0eUluZm8ucGF0aF0uZm9yRWFjaChmbkFkanVzdFZhbHVlSGVscENvbmRpdGlvbik7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRtRmlsdGVyW29Qcm9wZXJ0eUluZm8ucGF0aF0uZm9yRWFjaChmdW5jdGlvbiAob0NvbmRpdGlvbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0b0NvbmRpdGlvbi52YWxpZGF0ZWQgPSBvQ29uZGl0aW9uLmZpbHRlcmVkID8gQ29uZGl0aW9uVmFsaWRhdGVkLk5vdFZhbGlkYXRlZCA6IG9Db25kaXRpb24udmFsaWRhdGVkO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bUZpbHRlcltvUHJvcGVydHlJbmZvLnBhdGhdID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIsIHsgZmlsdGVyOiBtRmlsdGVyLCBpdGVtczogYUl0ZW1zIH0pO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWaWV3U3RhdGVPdmVycmlkZTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7O0VBb0JBLElBQU1BLE9BQU8sR0FBR0MsVUFBVSxDQUFDRCxPQUEzQjtFQUFBLElBQ0NFLHFCQUFxQixHQUFHQyxXQUFXLENBQUNDLGlCQURyQztFQUFBLElBRUNDLG1CQUFtQixHQUFHRixXQUFXLENBQUNFLG1CQUZuQztFQUFBLElBR0NDLGVBQWUsR0FBR0gsV0FBVyxDQUFDRyxlQUgvQjtFQUlBLElBQU1DLGtCQUFrQixHQUFHQyxXQUFXLENBQUNELGtCQUF2QztFQUFBLElBQ0NFLHFDQUFxQyxHQUFHLFFBRHpDO0VBR0EsSUFBTUMsaUJBQXNCLEdBQUc7SUFDOUJDLGlCQUFpQixFQUFFLEtBRFc7SUFFOUJDLHFCQUFxQixFQUFFLFlBQVk7TUFDbEMsT0FBTyxJQUFQO0lBQ0EsQ0FKNkI7SUFLOUJDLG9CQUFvQixFQUFFLFVBQXNEQyxTQUF0RCxFQUFzRTtNQUMzRixJQUFNQyxLQUFLLEdBQUcsS0FBS0MsT0FBTCxFQUFkO01BQUEsSUFDQ0MsV0FBVyxHQUFHRixLQUFLLENBQUNHLGFBQU4sRUFEZjtNQUFBLElBRUNDLFVBQVUsR0FBR0YsV0FBVyxDQUFDRyxvQkFBWixFQUZkO01BQUEsSUFHQ0MsT0FBTyxHQUFHSixXQUFXLENBQUNLLFlBQVosQ0FBeUIsT0FBekIsQ0FIWDs7TUFJQSxJQUFJSCxVQUFKLEVBQWdCO1FBQ2ZBLFVBQVUsQ0FBQ0ksbUJBQVgsQ0FBK0IsSUFB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
|
|
434
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIlZhcmlhbnRNYW5hZ2VtZW50VHlwZSIsIkNvcmVMaWJyYXJ5IiwiVmFyaWFudE1hbmFnZW1lbnQiLCJUZW1wbGF0ZUNvbnRlbnRWaWV3IiwiSW5pdGlhbExvYWRNb2RlIiwiRmlsdGVyUmVzdHJpY3Rpb25zIiwiQ29tbW9uVXRpbHMiLCJDT05ESVRJT05fUEFUSF9UT19QUk9QRVJUWV9QQVRIX1JFR0VYIiwiVmlld1N0YXRlT3ZlcnJpZGUiLCJfYlNlYXJjaFRyaWdnZXJlZCIsImFwcGx5SW5pdGlhbFN0YXRlT25seSIsIm9uQmVmb3JlU3RhdGVBcHBsaWVkIiwiYVByb21pc2VzIiwib1ZpZXciLCJnZXRWaWV3Iiwib0NvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwib0ZpbHRlckJhciIsIl9nZXRGaWx0ZXJCYXJDb250cm9sIiwiYVRhYmxlcyIsIl9nZXRDb250cm9scyIsInNldFN1c3BlbmRTZWxlY3Rpb24iLCJwdXNoIiwid2FpdEZvckluaXRpYWxpemF0aW9uIiwiZm9yRWFjaCIsIm9UYWJsZSIsImluaXRpYWxpemVkIiwib25BZnRlclN0YXRlQXBwbGllZCIsIl9pc0ZpbHRlckJhckhpZGRlbiIsIm9JbnRlcm5hbE1vZGVsQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwic2V0UHJvcGVydHkiLCJfaXNNdWx0aU1vZGUiLCJfZ2V0TXVsdGlNb2RlQ29udHJvbCIsInNldENvdW50c091dERhdGVkIiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwiYVZpZXdDb250cm9scyIsImFDb250cm9sc1RvUmVmcmVzaCIsIktlZXBBbGl2ZUhlbHBlciIsImdldENvbnRyb2xzRm9yUmVmcmVzaCIsIkFycmF5IiwicHJvdG90eXBlIiwiYXBwbHkiLCJhZGFwdFN0YXRlQ29udHJvbHMiLCJhU3RhdGVDb250cm9scyIsIm9WaWV3RGF0YSIsImdldFZpZXdEYXRhIiwiYkNvbnRyb2xWTSIsInZhcmlhbnRNYW5hZ2VtZW50IiwiQ29udHJvbCIsIm9GaWx0ZXJCYXJWTSIsIl9nZXRGaWx0ZXJCYXJWTSIsIm9RdWlja0ZpbHRlciIsImdldFF1aWNrRmlsdGVyIiwiZ2V0VmFyaWFudCIsIm9DaGFydCIsIl9oYXNNdWx0aVZpc3VhbGl6YXRpb25zIiwiX2dldFNlZ21lbnRlZEJ1dHRvbiIsIkNoYXJ0IiwiVGFibGUiLCJieUlkIiwicmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzIiwibUFkZGl0aW9uYWxTdGF0ZXMiLCJiUGVuZGluZ0ZpbHRlciIsImdldFByb3BlcnR5IiwiZGF0YUxvYWRlZCIsInNBbHBDb250ZW50VmlldyIsImFscENvbnRlbnRWaWV3IiwiYXBwbHlBZGRpdGlvbmFsU3RhdGVzIiwib0FkZGl0aW9uYWxTdGF0ZXMiLCJ0cmlnZ2VyU2VhcmNoIiwic3lzdGVtIiwiZGVza3RvcCIsIkh5YnJpZCIsImdldE1vZGVsIiwiZ2V0UGF0aCIsIl9hcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzVG9GaWx0ZXJiYXIiLCJvTmF2aWdhdGlvblBhcmFtZXRlciIsImFSZXN1bHRzIiwib0FwcENvbXBvbmVudCIsImdldEFwcENvbXBvbmVudCIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsIm9TdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwib1ZhcmlhbnRQcm9taXNlIiwiaGFuZGxlVmFyaWFudElkUGFzc2VkVmlhVVJMUGFyYW1zIiwiYkZpbHRlclZhcmlhbnRBcHBsaWVkIiwidGhlbiIsImFWYXJpYW50cyIsImxlbmd0aCIsIl9hcHBseVNlbGVjdGlvblZhcmlhbnQiLCJvRHluYW1pY1BhZ2UiLCJfZ2V0RHluYW1pY0xpc3RSZXBvcnRDb250cm9sIiwiYlByZXZlbnRJbml0aWFsU2VhcmNoIiwib0ZpbHRlckJhckNvbnRyb2wiLCJuYXZpZ2F0aW9uVHlwZSIsImluaXRpYWwiLCJyZXF1aXJlc1N0YW5kYXJkVmFyaWFudCIsImluaXRpYWxMb2FkIiwiRW5hYmxlZCIsIl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaCIsIl9wcmV2ZW50SW5pdGlhbFNlYXJjaCIsInNldEhlYWRlckV4cGFuZGVkIiwiY2F0Y2giLCJMb2ciLCJlcnJvciIsIm9VcmxQYXJhbXMiLCJhUGFnZVZhcmlhbnRJZCIsImFGaWx0ZXJCYXJWYXJpYW50SWQiLCJhVGFibGVWYXJpYW50SWQiLCJvVmFyaWFudCIsInNQYWdlVmFyaWFudElkIiwic0ZpbHRlckJhclZhcmlhbnRJZCIsInNUYWJsZVZhcmlhbnRJZCIsIl9oYW5kbGVDb250cm9sVmFyaWFudElkIiwib1ZhcmlhbnRJRHMiLCJvVk0iLCJzVmFyaWFudE1hbmFnZW1lbnQiLCJnZXRWYXJpYW50cyIsImtleSIsIl9hcHBseUNvbnRyb2xWYXJpYW50IiwiX2dldEZpbHRlckJhclZhcmlhbnRDb250cm9sIiwib1RhYmxlVmFyaWFudCIsIlByb21pc2UiLCJhbGwiLCJzVmFyaWFudElEIiwic1ZhcmlhbnRSZWZlcmVuY2UiLCJfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlIiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiQ29udHJvbFZhcmlhbnRBcHBseUFQSSIsImFjdGl2YXRlVmFyaWFudCIsImVsZW1lbnQiLCJ2YXJpYW50UmVmZXJlbmNlIiwiUGFnZSIsIk5vbmUiLCJFcnJvciIsIm9WYXJpYW50TWFuYWdlbWVudCIsIm9DdXJyZW50VmFyaWFudCIsImZpbmQiLCJvSXRlbSIsImdldEN1cnJlbnRWYXJpYW50S2V5IiwiZXhlY3V0ZU9uU2VsZWN0Iiwib1NlbGVjdGlvblZhcmlhbnQiLCJzZWxlY3Rpb25WYXJpYW50Iiwib1NlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsInNlbGVjdGlvblZhcmlhbnREZWZhdWx0cyIsInJlc29sdmUiLCJvQ29uZGl0aW9ucyIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJzQ29udGV4dFBhdGgiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsImFNYW5kYXRvcnlGaWx0ZXJGaWVsZHMiLCJnZXRNYW5kYXRvcnlGaWx0ZXJGaWVsZHMiLCJiVXNlU2VtYW50aWNEYXRlUmFuZ2UiLCJkYXRhIiwiYlJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IiwiYklzRkxQVmFsdWVQcmVzZW50IiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJnZXREZWZhdWx0VmFyaWFudEtleSIsImJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHkiLCJnZXRDb25kaXRpb25zIiwiYWRkRGVmYXVsdERpc3BsYXlDdXJyZW5jeSIsImFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMiLCJfYWN0aXZhdGVTZWxlY3Rpb25WYXJpYW50Iiwib1Byb21pc2UiLCJvVmFyaWFudEtleSIsImdldElkIiwiYkNsZWFyRmlsdGVyQW5kUmVwbGFjZVdpdGhBcHBTdGF0ZSIsIl9mbkFwcGx5Q29uZGl0aW9ucyIsIl9mbkNsZWFyU3RhdGVCZWZvcmV4QXBwTmF2IiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwib0V4dGVybmFsU3RhdGUiLCJvQ29uZGl0aW9uIiwiZmlsdGVyIiwiZmllbGQiLCJjb25kaXRpb24iLCJvRXJyb3IiLCJtRmlsdGVyIiwiYUl0ZW1zIiwiZm5BZGp1c3RWYWx1ZUhlbHBDb25kaXRpb24iLCJ2YWxpZGF0ZWQiLCJDb25kaXRpb25WYWxpZGF0ZWQiLCJWYWxpZGF0ZWQiLCJvcGVyYXRvciIsInZhbHVlcyIsImlzRW1wdHkiLCJmbkdldFByb3BlcnR5SW5mbyIsIm9GaWx0ZXJDb250cm9sIiwic0VudGl0eVR5cGVQYXRoIiwic0VudGl0eVNldFBhdGgiLCJNb2RlbEhlbHBlciIsImdldEVudGl0eVNldFBhdGgiLCJvRlIiLCJnZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgiLCJhTm9uRmlsdGVyYWJsZVByb3BzIiwiTk9OX0ZJTFRFUkFCTEVfUFJPUEVSVElFUyIsIm1GaWx0ZXJGaWVsZHMiLCJGaWx0ZXJVdGlscyIsImdldENvbnZlcnRlZEZpbHRlckZpZWxkcyIsImFQcm9wZXJ0eUluZm8iLCJPYmplY3QiLCJrZXlzIiwic0ZpbHRlckZpZWxkS2V5Iiwib0NvbnZlcnRlZFByb3BlcnR5Iiwic1Byb3BlcnR5UGF0aCIsImNvbmRpdGlvblBhdGgiLCJyZXBsYWNlIiwiaW5kZXhPZiIsInNBbm5vdGF0aW9uUGF0aCIsImFubm90YXRpb25QYXRoIiwib1Byb3BlcnR5Q29udGV4dCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwicGF0aCIsImhpZGRlbkZpbHRlciIsImF2YWlsYWJpbGl0eSIsImhhc1ZhbHVlSGVscCIsIlByb3BlcnR5Rm9ybWF0dGVycyIsImdldE9iamVjdCIsImNvbnRleHQiLCJvUHJvcGVydHlJbmZvIiwibmFtZSIsImZpbHRlcmVkIiwiTm90VmFsaWRhdGVkIiwiYXBwbHlFeHRlcm5hbFN0YXRlIiwiaXRlbXMiLCJEZWxlZ2F0ZVV0aWwiLCJnZXRDdXN0b21EYXRhIiwib0NsZWFyQ29uZGl0aW9ucyJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiVmlld1N0YXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsTW9kZWxDb250ZXh0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IENvcmVMaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgKiBhcyBQcm9wZXJ0eUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvUHJvcGVydHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgRGVsZWdhdGVVdGlsIGZyb20gXCJzYXAvZmUvbWFjcm9zL0RlbGVnYXRlVXRpbFwiO1xuaW1wb3J0IEZpbHRlclV0aWxzIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpbHRlci9GaWx0ZXJVdGlsc1wiO1xuaW1wb3J0IE5hdkxpYnJhcnkgZnJvbSBcInNhcC9mZS9uYXZpZ2F0aW9uL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIExpc3RSZXBvcnRDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvdGVtcGxhdGVzL0xpc3RSZXBvcnQvTGlzdFJlcG9ydENvbnRyb2xsZXIuY29udHJvbGxlclwiO1xuaW1wb3J0IHsgc3lzdGVtIH0gZnJvbSBcInNhcC91aS9EZXZpY2VcIjtcbmltcG9ydCBDb250cm9sVmFyaWFudEFwcGx5QVBJIGZyb20gXCJzYXAvdWkvZmwvYXBwbHkvYXBpL0NvbnRyb2xWYXJpYW50QXBwbHlBUElcIjtcbmltcG9ydCB0eXBlIFZhcmlhbnRNYW5hZ2VtZW50IGZyb20gXCJzYXAvdWkvZmwvdmFyaWFudHMvVmFyaWFudE1hbmFnZW1lbnRcIjtcbmltcG9ydCBDb25kaXRpb25WYWxpZGF0ZWQgZnJvbSBcInNhcC91aS9tZGMvZW51bS9Db25kaXRpb25WYWxpZGF0ZWRcIjtcbmltcG9ydCBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgU3RhdGVVdGlsIGZyb20gXCJzYXAvdWkvbWRjL3AxM24vU3RhdGVVdGlsXCI7XG5pbXBvcnQgdHlwZSBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuXG5jb25zdCBOYXZUeXBlID0gTmF2TGlicmFyeS5OYXZUeXBlLFxuXHRWYXJpYW50TWFuYWdlbWVudFR5cGUgPSBDb3JlTGlicmFyeS5WYXJpYW50TWFuYWdlbWVudCxcblx0VGVtcGxhdGVDb250ZW50VmlldyA9IENvcmVMaWJyYXJ5LlRlbXBsYXRlQ29udGVudFZpZXcsXG5cdEluaXRpYWxMb2FkTW9kZSA9IENvcmVMaWJyYXJ5LkluaXRpYWxMb2FkTW9kZTtcbmNvbnN0IEZpbHRlclJlc3RyaWN0aW9ucyA9IENvbW1vblV0aWxzLkZpbHRlclJlc3RyaWN0aW9ucyxcblx0Q09ORElUSU9OX1BBVEhfVE9fUFJPUEVSVFlfUEFUSF9SRUdFWCA9IC9cXCt8XFwqL2c7XG5cbmNvbnN0IFZpZXdTdGF0ZU92ZXJyaWRlOiBhbnkgPSB7XG5cdF9iU2VhcmNoVHJpZ2dlcmVkOiBmYWxzZSxcblx0YXBwbHlJbml0aWFsU3RhdGVPbmx5OiBmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cdG9uQmVmb3JlU3RhdGVBcHBsaWVkOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlICYgdHlwZW9mIFZpZXdTdGF0ZU92ZXJyaWRlLCBhUHJvbWlzZXM6IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdG9GaWx0ZXJCYXIgPSBvQ29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpLFxuXHRcdFx0YVRhYmxlcyA9IG9Db250cm9sbGVyLl9nZXRDb250cm9scyhcInRhYmxlXCIpO1xuXHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRvRmlsdGVyQmFyLnNldFN1c3BlbmRTZWxlY3Rpb24odHJ1ZSk7XG5cdFx0XHRhUHJvbWlzZXMucHVzaCgob0ZpbHRlckJhciBhcyBhbnkpLndhaXRGb3JJbml0aWFsaXphdGlvbigpKTtcblx0XHR9XG5cdFx0YVRhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uIChvVGFibGU6IGFueSkge1xuXHRcdFx0YVByb21pc2VzLnB1c2gob1RhYmxlLmluaXRpYWxpemVkKCkpO1xuXHRcdH0pO1xuXG5cdFx0ZGVsZXRlIHRoaXMuX2JTZWFyY2hUcmlnZ2VyZWQ7XG5cdH0sXG5cdG9uQWZ0ZXJTdGF0ZUFwcGxpZWQ6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUpIHtcblx0XHRjb25zdCBvQ29udHJvbGxlciA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcjtcblx0XHRjb25zdCBvRmlsdGVyQmFyID0gb0NvbnRyb2xsZXIuX2dldEZpbHRlckJhckNvbnRyb2woKTtcblx0XHRpZiAob0ZpbHRlckJhcikge1xuXHRcdFx0b0ZpbHRlckJhci5zZXRTdXNwZW5kU2VsZWN0aW9uKGZhbHNlKTtcblx0XHR9IGVsc2UgaWYgKG9Db250cm9sbGVyLl9pc0ZpbHRlckJhckhpZGRlbigpKSB7XG5cdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvQ29udHJvbGxlci5nZXRWaWV3KCkuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKSBhcyBJbnRlcm5hbE1vZGVsQ29udGV4dDtcblx0XHRcdG9JbnRlcm5hbE1vZGVsQ29udGV4dC5zZXRQcm9wZXJ0eShcImhhc1BlbmRpbmdGaWx0ZXJzXCIsIGZhbHNlKTtcblx0XHRcdGlmIChvQ29udHJvbGxlci5faXNNdWx0aU1vZGUoKSkge1xuXHRcdFx0XHRvQ29udHJvbGxlci5fZ2V0TXVsdGlNb2RlQ29udHJvbCgpLnNldENvdW50c091dERhdGVkKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0YWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBhQ29udHJvbHM6IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdGFWaWV3Q29udHJvbHMgPSBvQ29udHJvbGxlci5fZ2V0Q29udHJvbHMoKSxcblx0XHRcdGFDb250cm9sc1RvUmVmcmVzaCA9IEtlZXBBbGl2ZUhlbHBlci5nZXRDb250cm9sc0ZvclJlZnJlc2gob1ZpZXcsIGFWaWV3Q29udHJvbHMpO1xuXG5cdFx0QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYUNvbnRyb2xzLCBhQ29udHJvbHNUb1JlZnJlc2gpO1xuXHR9LFxuXHRhZGFwdFN0YXRlQ29udHJvbHM6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUgJiB0eXBlb2YgVmlld1N0YXRlT3ZlcnJpZGUsIGFTdGF0ZUNvbnRyb2xzOiBhbnkpIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0b0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXIsXG5cdFx0XHRvVmlld0RhdGEgPSBvVmlldy5nZXRWaWV3RGF0YSgpLFxuXHRcdFx0YkNvbnRyb2xWTSA9IG9WaWV3RGF0YS52YXJpYW50TWFuYWdlbWVudCA9PT0gVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2w7XG5cblx0XHRjb25zdCBvRmlsdGVyQmFyVk0gPSB0aGlzLl9nZXRGaWx0ZXJCYXJWTShvVmlldyk7XG5cdFx0aWYgKG9GaWx0ZXJCYXJWTSkge1xuXHRcdFx0YVN0YXRlQ29udHJvbHMucHVzaChvRmlsdGVyQmFyVk0pO1xuXHRcdH1cblx0XHRpZiAob0NvbnRyb2xsZXIuX2lzTXVsdGlNb2RlKCkpIHtcblx0XHRcdGFTdGF0ZUNvbnRyb2xzLnB1c2gob0NvbnRyb2xsZXIuX2dldE11bHRpTW9kZUNvbnRyb2woKSk7XG5cdFx0fVxuXHRcdG9Db250cm9sbGVyLl9nZXRDb250cm9scyhcInRhYmxlXCIpLmZvckVhY2goZnVuY3Rpb24gKG9UYWJsZTogYW55KSB7XG5cdFx0XHRjb25zdCBvUXVpY2tGaWx0ZXIgPSBvVGFibGUuZ2V0UXVpY2tGaWx0ZXIoKTtcblx0XHRcdGlmIChvUXVpY2tGaWx0ZXIpIHtcblx0XHRcdFx0YVN0YXRlQ29udHJvbHMucHVzaChvUXVpY2tGaWx0ZXIpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGJDb250cm9sVk0pIHtcblx0XHRcdFx0YVN0YXRlQ29udHJvbHMucHVzaChvVGFibGUuZ2V0VmFyaWFudCgpKTtcblx0XHRcdH1cblx0XHRcdGFTdGF0ZUNvbnRyb2xzLnB1c2gob1RhYmxlKTtcblx0XHR9KTtcblx0XHRpZiAob0NvbnRyb2xsZXIuX2dldENvbnRyb2xzKFwiQ2hhcnRcIikpIHtcblx0XHRcdG9Db250cm9sbGVyLl9nZXRDb250cm9scyhcIkNoYXJ0XCIpLmZvckVhY2goZnVuY3Rpb24gKG9DaGFydDogYW55KSB7XG5cdFx0XHRcdGFTdGF0ZUNvbnRyb2xzLnB1c2gob0NoYXJ0KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRpZiAob0NvbnRyb2xsZXIuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0YVN0YXRlQ29udHJvbHMucHVzaChvQ29udHJvbGxlci5fZ2V0U2VnbWVudGVkQnV0dG9uKFRlbXBsYXRlQ29udGVudFZpZXcuQ2hhcnQpKTtcblx0XHRcdGFTdGF0ZUNvbnRyb2xzLnB1c2gob0NvbnRyb2xsZXIuX2dldFNlZ21lbnRlZEJ1dHRvbihUZW1wbGF0ZUNvbnRlbnRWaWV3LlRhYmxlKSk7XG5cdFx0fVxuXHRcdGNvbnN0IG9GaWx0ZXJCYXIgPSBvQ29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRhU3RhdGVDb250cm9scy5wdXNoKG9GaWx0ZXJCYXIpO1xuXHRcdH1cblx0XHRhU3RhdGVDb250cm9scy5wdXNoKG9WaWV3LmJ5SWQoXCJmZTo6TGlzdFJlcG9ydFwiKSk7XG5cdH0sXG5cdHJldHJpZXZlQWRkaXRpb25hbFN0YXRlczogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSAmIHR5cGVvZiBWaWV3U3RhdGVPdmVycmlkZSwgbUFkZGl0aW9uYWxTdGF0ZXM6IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdGJQZW5kaW5nRmlsdGVyID0gKG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KFwiaW50ZXJuYWxcIikgYXMgSW50ZXJuYWxNb2RlbENvbnRleHQpLmdldFByb3BlcnR5KFwiaGFzUGVuZGluZ0ZpbHRlcnNcIik7XG5cblx0XHRtQWRkaXRpb25hbFN0YXRlcy5kYXRhTG9hZGVkID0gIWJQZW5kaW5nRmlsdGVyIHx8ICEhdGhpcy5fYlNlYXJjaFRyaWdnZXJlZDtcblx0XHRpZiAob0NvbnRyb2xsZXIuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0Y29uc3Qgc0FscENvbnRlbnRWaWV3ID0gb1ZpZXcuZ2V0QmluZGluZ0NvbnRleHQoXCJpbnRlcm5hbFwiKS5nZXRQcm9wZXJ0eShcImFscENvbnRlbnRWaWV3XCIpO1xuXHRcdFx0bUFkZGl0aW9uYWxTdGF0ZXMuYWxwQ29udGVudFZpZXcgPSBzQWxwQ29udGVudFZpZXc7XG5cdFx0fVxuXG5cdFx0ZGVsZXRlIHRoaXMuX2JTZWFyY2hUcmlnZ2VyZWQ7XG5cdH0sXG5cdGFwcGx5QWRkaXRpb25hbFN0YXRlczogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSAmIHR5cGVvZiBWaWV3U3RhdGVPdmVycmlkZSwgb0FkZGl0aW9uYWxTdGF0ZXM6IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBMaXN0UmVwb3J0Q29udHJvbGxlcixcblx0XHRcdG9GaWx0ZXJCYXIgPSBvQ29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXG5cdFx0aWYgKG9BZGRpdGlvbmFsU3RhdGVzKSB7XG5cdFx0XHQvLyBleHBsaWNpdCBjaGVjayBmb3IgYm9vbGVhbiB2YWx1ZXMgLSAndW5kZWZpbmVkJyBzaG91bGQgbm90IGFsdGVyIHRoZSB0cmlnZ2VyZWQgc2VhcmNoIHByb3BlcnR5XG5cdFx0XHRpZiAob0FkZGl0aW9uYWxTdGF0ZXMuZGF0YUxvYWRlZCA9PT0gZmFsc2UgJiYgb0ZpbHRlckJhcikge1xuXHRcdFx0XHQvLyB3aXRob3V0IHRoaXMsIHRoZSBkYXRhIGlzIGxvYWRlZCBvbiBuYXZpZ2F0aW5nIGJhY2tcblx0XHRcdFx0KG9GaWx0ZXJCYXIgYXMgYW55KS5fYlNlYXJjaFRyaWdnZXJlZCA9IGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmIChvQWRkaXRpb25hbFN0YXRlcy5kYXRhTG9hZGVkID09PSB0cnVlKSB7XG5cdFx0XHRcdGlmIChvRmlsdGVyQmFyKSB7XG5cdFx0XHRcdFx0b0ZpbHRlckJhci50cmlnZ2VyU2VhcmNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5fYlNlYXJjaFRyaWdnZXJlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIuX2hhc011bHRpVmlzdWFsaXphdGlvbnMoKSkge1xuXHRcdFx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbENvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dChcImludGVybmFsXCIpIGFzIEludGVybmFsTW9kZWxDb250ZXh0O1xuXHRcdFx0XHRpZiAoIXN5c3RlbS5kZXNrdG9wICYmIG9BZGRpdGlvbmFsU3RhdGVzLmFscENvbnRlbnRWaWV3ID09IFRlbXBsYXRlQ29udGVudFZpZXcuSHlicmlkKSB7XG5cdFx0XHRcdFx0b0FkZGl0aW9uYWxTdGF0ZXMuYWxwQ29udGVudFZpZXcgPSBUZW1wbGF0ZUNvbnRlbnRWaWV3LkNoYXJ0O1xuXHRcdFx0XHR9XG5cdFx0XHRcdChvSW50ZXJuYWxNb2RlbENvbnRleHQuZ2V0TW9kZWwoKSBhcyBKU09OTW9kZWwpLnNldFByb3BlcnR5KFxuXHRcdFx0XHRcdGAke29JbnRlcm5hbE1vZGVsQ29udGV4dC5nZXRQYXRoKCl9L2FscENvbnRlbnRWaWV3YCxcblx0XHRcdFx0XHRvQWRkaXRpb25hbFN0YXRlcy5hbHBDb250ZW50Vmlld1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0X2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNUb0ZpbHRlcmJhcjogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSAmIHR5cGVvZiBWaWV3U3RhdGVPdmVycmlkZSwgb05hdmlnYXRpb25QYXJhbWV0ZXI6IGFueSwgYVJlc3VsdHM6IGFueSkge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCkgYXMgTGlzdFJlcG9ydENvbnRyb2xsZXI7XG5cdFx0Y29uc3Qgb0FwcENvbXBvbmVudCA9IG9Db250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gb0FwcENvbXBvbmVudC5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fTtcblx0XHRjb25zdCBvVmFyaWFudFByb21pc2UgPSB0aGlzLmhhbmRsZVZhcmlhbnRJZFBhc3NlZFZpYVVSTFBhcmFtcyhvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdGxldCBiRmlsdGVyVmFyaWFudEFwcGxpZWQ6IGJvb2xlYW47XG5cdFx0YVJlc3VsdHMucHVzaChcblx0XHRcdG9WYXJpYW50UHJvbWlzZVxuXHRcdFx0XHQudGhlbigoYVZhcmlhbnRzOiBhbnlbXSkgPT4ge1xuXHRcdFx0XHRcdGlmIChhVmFyaWFudHMgJiYgYVZhcmlhbnRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGlmIChhVmFyaWFudHNbMF0gPT09IHRydWUgfHwgYVZhcmlhbnRzWzFdID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdGJGaWx0ZXJWYXJpYW50QXBwbGllZCA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzLl9hcHBseVNlbGVjdGlvblZhcmlhbnQob1ZpZXcsIG9OYXZpZ2F0aW9uUGFyYW1ldGVyLCBiRmlsdGVyVmFyaWFudEFwcGxpZWQpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0R5bmFtaWNQYWdlID0gb0NvbnRyb2xsZXIuX2dldER5bmFtaWNMaXN0UmVwb3J0Q29udHJvbCgpO1xuXHRcdFx0XHRcdGxldCBiUHJldmVudEluaXRpYWxTZWFyY2ggPSBmYWxzZTtcblx0XHRcdFx0XHRjb25zdCBvRmlsdGVyQmFyVk0gPSB0aGlzLl9nZXRGaWx0ZXJCYXJWTShvVmlldyk7XG5cdFx0XHRcdFx0Y29uc3Qgb0ZpbHRlckJhckNvbnRyb2wgPSBvQ29udHJvbGxlci5fZ2V0RmlsdGVyQmFyQ29udHJvbCgpO1xuXHRcdFx0XHRcdGlmIChvRmlsdGVyQmFyQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHQob05hdmlnYXRpb25QYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUgIT09IE5hdlR5cGUuaW5pdGlhbCAmJiBvTmF2aWdhdGlvblBhcmFtZXRlci5yZXF1aXJlc1N0YW5kYXJkVmFyaWFudCkgfHxcblx0XHRcdFx0XHRcdFx0KCFvRmlsdGVyQmFyVk0gJiYgb1ZpZXcuZ2V0Vmlld0RhdGEoKS5pbml0aWFsTG9hZCA9PT0gSW5pdGlhbExvYWRNb2RlLkVuYWJsZWQpIHx8XG5cdFx0XHRcdFx0XHRcdG9Db250cm9sbGVyLl9zaG91bGRBdXRvVHJpZ2dlclNlYXJjaChvRmlsdGVyQmFyVk0pXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0b0ZpbHRlckJhckNvbnRyb2wudHJpZ2dlclNlYXJjaCgpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YlByZXZlbnRJbml0aWFsU2VhcmNoID0gdGhpcy5fcHJldmVudEluaXRpYWxTZWFyY2gob0ZpbHRlckJhclZNKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIHJlc2V0IHRoZSBzdXNwZW5kIHNlbGVjdGlvbiBvbiBmaWx0ZXIgYmFyIHRvIGFsbG93IGxvYWRpbmcgb2YgZGF0YSB3aGVuIG5lZWRlZCAod2FzIHNldCBvbiBMUiBJbml0KVxuXHRcdFx0XHRcdFx0b0ZpbHRlckJhckNvbnRyb2wuc2V0U3VzcGVuZFNlbGVjdGlvbihmYWxzZSk7XG5cdFx0XHRcdFx0XHR0aGlzLl9iU2VhcmNoVHJpZ2dlcmVkID0gIWJQcmV2ZW50SW5pdGlhbFNlYXJjaDtcblx0XHRcdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChzeXN0ZW0uZGVza3RvcCB8fCBiUHJldmVudEluaXRpYWxTZWFyY2gpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJWYXJpYW50IElEIGNhbm5vdCBiZSBhcHBsaWVkXCIpO1xuXHRcdFx0XHR9KVxuXHRcdCk7XG5cdH0sXG5cblx0aGFuZGxlVmFyaWFudElkUGFzc2VkVmlhVVJMUGFyYW1zOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlICYgdHlwZW9mIFZpZXdTdGF0ZU92ZXJyaWRlLCBvVXJsUGFyYW1zOiBhbnkpIHtcblx0XHRjb25zdCBhUGFnZVZhcmlhbnRJZCA9IG9VcmxQYXJhbXNbXCJzYXAtdWktZmUtdmFyaWFudC1pZFwiXSxcblx0XHRcdGFGaWx0ZXJCYXJWYXJpYW50SWQgPSBvVXJsUGFyYW1zW1wic2FwLXVpLWZlLWZpbHRlcmJhci12YXJpYW50LWlkXCJdLFxuXHRcdFx0YVRhYmxlVmFyaWFudElkID0gb1VybFBhcmFtc1tcInNhcC11aS1mZS10YWJsZS12YXJpYW50LWlkXCJdO1xuXHRcdGxldCBvVmFyaWFudDtcblx0XHRpZiAoYVBhZ2VWYXJpYW50SWQgfHwgYUZpbHRlckJhclZhcmlhbnRJZCB8fCBhVGFibGVWYXJpYW50SWQpIHtcblx0XHRcdG9WYXJpYW50ID0ge1xuXHRcdFx0XHRzUGFnZVZhcmlhbnRJZDogYVBhZ2VWYXJpYW50SWQgJiYgYVBhZ2VWYXJpYW50SWRbMF0sXG5cdFx0XHRcdHNGaWx0ZXJCYXJWYXJpYW50SWQ6IGFGaWx0ZXJCYXJWYXJpYW50SWQgJiYgYUZpbHRlckJhclZhcmlhbnRJZFswXSxcblx0XHRcdFx0c1RhYmxlVmFyaWFudElkOiBhVGFibGVWYXJpYW50SWQgJiYgYVRhYmxlVmFyaWFudElkWzBdXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5faGFuZGxlQ29udHJvbFZhcmlhbnRJZChvVmFyaWFudCk7XG5cdH0sXG5cblx0X2hhbmRsZUNvbnRyb2xWYXJpYW50SWQ6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUgJiB0eXBlb2YgVmlld1N0YXRlT3ZlcnJpZGUsIG9WYXJpYW50SURzOiBhbnkpIHtcblx0XHRsZXQgb1ZNOiBWYXJpYW50TWFuYWdlbWVudDtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0YVByb21pc2VzOiBhbnlbXSA9IFtdO1xuXHRcdGNvbnN0IHNWYXJpYW50TWFuYWdlbWVudCA9IG9WaWV3LmdldFZpZXdEYXRhKCkudmFyaWFudE1hbmFnZW1lbnQ7XG5cdFx0aWYgKG9WYXJpYW50SURzICYmIG9WYXJpYW50SURzLnNQYWdlVmFyaWFudElkICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJQYWdlXCIpIHtcblx0XHRcdG9WTSA9IG9WaWV3LmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpO1xuXHRcdFx0b1ZNLmdldFZhcmlhbnRzKCkuZm9yRWFjaCgob1ZhcmlhbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAob1ZhcmlhbnQua2V5ID09PSBvVmFyaWFudElEcy5zUGFnZVZhcmlhbnRJZCkge1xuXHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKHRoaXMuX2FwcGx5Q29udHJvbFZhcmlhbnQob1ZNLCBvVmFyaWFudElEcy5zUGFnZVZhcmlhbnRJZCwgdHJ1ZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKG9WYXJpYW50SURzICYmIHNWYXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRcdGlmIChvVmFyaWFudElEcy5zRmlsdGVyQmFyVmFyaWFudElkKSB7XG5cdFx0XHRcdG9WTSA9IG9WaWV3LmdldENvbnRyb2xsZXIoKS5fZ2V0RmlsdGVyQmFyVmFyaWFudENvbnRyb2woKTtcblx0XHRcdFx0aWYgKG9WTSkge1xuXHRcdFx0XHRcdG9WTS5nZXRWYXJpYW50cygpLmZvckVhY2goKG9WYXJpYW50OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdGlmIChvVmFyaWFudC5rZXkgPT09IG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQpIHtcblx0XHRcdFx0XHRcdFx0YVByb21pc2VzLnB1c2godGhpcy5fYXBwbHlDb250cm9sVmFyaWFudChvVk0sIG9WYXJpYW50SURzLnNGaWx0ZXJCYXJWYXJpYW50SWQsIHRydWUpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG9WYXJpYW50SURzLnNUYWJsZVZhcmlhbnRJZCkge1xuXHRcdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKSxcblx0XHRcdFx0XHRhVGFibGVzID0gb0NvbnRyb2xsZXIuX2dldENvbnRyb2xzKFwidGFibGVcIik7XG5cdFx0XHRcdGFUYWJsZXMuZm9yRWFjaCgob1RhYmxlOiBhbnkpID0+IHtcblx0XHRcdFx0XHRjb25zdCBvVGFibGVWYXJpYW50ID0gb1RhYmxlLmdldFZhcmlhbnQoKTtcblx0XHRcdFx0XHRpZiAob1RhYmxlICYmIG9UYWJsZVZhcmlhbnQpIHtcblx0XHRcdFx0XHRcdG9UYWJsZVZhcmlhbnQuZ2V0VmFyaWFudHMoKS5mb3JFYWNoKChvVmFyaWFudDogYW55KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChvVmFyaWFudC5rZXkgPT09IG9WYXJpYW50SURzLnNUYWJsZVZhcmlhbnRJZCkge1xuXHRcdFx0XHRcdFx0XHRcdGFQcm9taXNlcy5wdXNoKHRoaXMuX2FwcGx5Q29udHJvbFZhcmlhbnQob1RhYmxlVmFyaWFudCwgb1ZhcmlhbnRJRHMuc1RhYmxlVmFyaWFudElkKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUHJvbWlzZXMpO1xuXHR9LFxuXG5cdF9hcHBseUNvbnRyb2xWYXJpYW50OiBmdW5jdGlvbiAob1ZhcmlhbnQ6IGFueSwgc1ZhcmlhbnRJRDogYW55LCBiRmlsdGVyVmFyaWFudEFwcGxpZWQ6IGFueSkge1xuXHRcdGNvbnN0IHNWYXJpYW50UmVmZXJlbmNlID0gdGhpcy5fY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WYXJpYW50LCBzVmFyaWFudElEKSA/IHNWYXJpYW50SUQgOiBvVmFyaWFudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHRjb25zdCBvVk0gPSBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRlbGVtZW50OiBvVmFyaWFudCxcblx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlXG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9WTS50aGVuKGZ1bmN0aW9uICgpIHtcblx0XHRcdHJldHVybiBiRmlsdGVyVmFyaWFudEFwcGxpZWQ7XG5cdFx0fSk7XG5cdH0sXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIHByaXZhdGUgaGVscGVyICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdF9nZXRGaWx0ZXJCYXJWTTogZnVuY3Rpb24gKG9WaWV3OiBhbnkpIHtcblx0XHRjb25zdCBvVmlld0RhdGEgPSBvVmlldy5nZXRWaWV3RGF0YSgpO1xuXHRcdHN3aXRjaCAob1ZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5QYWdlOlxuXHRcdFx0XHRyZXR1cm4gb1ZpZXcuYnlJZChcImZlOjpQYWdlVmFyaWFudE1hbmFnZW1lbnRcIik7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5Db250cm9sOlxuXHRcdFx0XHRyZXR1cm4gb1ZpZXcuZ2V0Q29udHJvbGxlcigpLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpO1xuXHRcdFx0Y2FzZSBWYXJpYW50TWFuYWdlbWVudFR5cGUuTm9uZTpcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCB2YXJpYW50IHNldHRpbmc6ICR7b1ZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50fWApO1xuXHRcdH1cblx0fSxcblxuXHRfcHJldmVudEluaXRpYWxTZWFyY2g6IGZ1bmN0aW9uIChvVmFyaWFudE1hbmFnZW1lbnQ6IGFueSkge1xuXHRcdGlmICghb1ZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y29uc3QgYVZhcmlhbnRzID0gb1ZhcmlhbnRNYW5hZ2VtZW50LmdldFZhcmlhbnRzKCk7XG5cdFx0Y29uc3Qgb0N1cnJlbnRWYXJpYW50ID0gYVZhcmlhbnRzLmZpbmQoZnVuY3Rpb24gKG9JdGVtOiBhbnkpIHtcblx0XHRcdHJldHVybiBvSXRlbS5rZXkgPT09IG9WYXJpYW50TWFuYWdlbWVudC5nZXRDdXJyZW50VmFyaWFudEtleSgpO1xuXHRcdH0pO1xuXHRcdHJldHVybiAhb0N1cnJlbnRWYXJpYW50LmV4ZWN1dGVPblNlbGVjdDtcblx0fSxcblxuXHRfYXBwbHlTZWxlY3Rpb25WYXJpYW50OiBmdW5jdGlvbiAob1ZpZXc6IGFueSwgb05hdmlnYXRpb25QYXJhbWV0ZXI6IGFueSwgYkZpbHRlclZhcmlhbnRBcHBsaWVkOiBhbnkpIHtcblx0XHRjb25zdCBvRmlsdGVyQmFyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpLl9nZXRGaWx0ZXJCYXJDb250cm9sKCksXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudCA9IG9OYXZpZ2F0aW9uUGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzID0gb05hdmlnYXRpb25QYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudERlZmF1bHRzO1xuXHRcdGlmICghb0ZpbHRlckJhciB8fCAhb1NlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0bGV0IG9Db25kaXRpb25zID0ge307XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9WaWV3LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gb1ZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvVmlld0RhdGEuY29udGV4dFBhdGggfHwgYC8ke29WaWV3RGF0YS5lbnRpdHlTZXR9YDtcblx0XHRjb25zdCBhTWFuZGF0b3J5RmlsdGVyRmllbGRzID0gQ29tbW9uVXRpbHMuZ2V0TWFuZGF0b3J5RmlsdGVyRmllbGRzKG9NZXRhTW9kZWwsIHNDb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgYlVzZVNlbWFudGljRGF0ZVJhbmdlID0gb0ZpbHRlckJhci5kYXRhKFwidXNlU2VtYW50aWNEYXRlUmFuZ2VcIik7XG5cdFx0bGV0IG9WYXJpYW50O1xuXHRcdHN3aXRjaCAob1ZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRjYXNlIFZhcmlhbnRNYW5hZ2VtZW50VHlwZS5QYWdlOlxuXHRcdFx0XHRvVmFyaWFudCA9IG9WaWV3LmJ5SWQoXCJmZTo6UGFnZVZhcmlhbnRNYW5hZ2VtZW50XCIpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLkNvbnRyb2w6XG5cdFx0XHRcdG9WYXJpYW50ID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpLl9nZXRGaWx0ZXJCYXJWYXJpYW50Q29udHJvbCgpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgVmFyaWFudE1hbmFnZW1lbnRUeXBlLk5vbmU6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0Y29uc3QgYlJlcXVpcmVzU3RhbmRhcmRWYXJpYW50ID0gb05hdmlnYXRpb25QYXJhbWV0ZXIucmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ7XG5cdFx0Ly8gY2hlY2sgaWYgRkxQIGRlZmF1bHQgdmFsdWVzIGFyZSB0aGVyZSBhbmQgaXMgaXQgc3RhbmRhcmQgdmFyaWFudFxuXHRcdGNvbnN0IGJJc0ZMUFZhbHVlUHJlc2VudDogYm9vbGVhbiA9XG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzICYmXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudERlZmF1bHRzLmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCkubGVuZ3RoID4gMCAmJlxuXHRcdFx0b1ZhcmlhbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gb1ZhcmlhbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCkgJiZcblx0XHRcdG9OYXZpZ2F0aW9uUGFyYW1ldGVyLmJOYXZTZWxWYXJIYXNEZWZhdWx0c09ubHk7XG5cblx0XHQvLyBnZXQgY29uZGl0aW9ucyB3aGVuIEZMUCB2YWx1ZSBpcyBwcmVzZW50XG5cdFx0aWYgKGJGaWx0ZXJWYXJpYW50QXBwbGllZCB8fCBiSXNGTFBWYWx1ZVByZXNlbnQpIHtcblx0XHRcdG9Db25kaXRpb25zID0gb0ZpbHRlckJhci5nZXRDb25kaXRpb25zKCk7XG5cdFx0fVxuXHRcdENvbW1vblV0aWxzLmFkZERlZmF1bHREaXNwbGF5Q3VycmVuY3koYU1hbmRhdG9yeUZpbHRlckZpZWxkcywgb1NlbGVjdGlvblZhcmlhbnQsIG9TZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMpO1xuXHRcdENvbW1vblV0aWxzLmFkZFNlbGVjdGlvblZhcmlhbnRUb0NvbmRpdGlvbnMoXG5cdFx0XHRvU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0b01ldGFNb2RlbCxcblx0XHRcdHNDb250ZXh0UGF0aCxcblx0XHRcdGJJc0ZMUFZhbHVlUHJlc2VudCxcblx0XHRcdGJVc2VTZW1hbnRpY0RhdGVSYW5nZSxcblx0XHRcdG9WaWV3RGF0YVxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcy5fYWN0aXZhdGVTZWxlY3Rpb25WYXJpYW50KFxuXHRcdFx0b0ZpbHRlckJhcixcblx0XHRcdG9Db25kaXRpb25zLFxuXHRcdFx0b1ZhcmlhbnQsXG5cdFx0XHRiUmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQsXG5cdFx0XHRiRmlsdGVyVmFyaWFudEFwcGxpZWQsXG5cdFx0XHRiSXNGTFBWYWx1ZVByZXNlbnRcblx0XHQpO1xuXHR9LFxuXHRfYWN0aXZhdGVTZWxlY3Rpb25WYXJpYW50OiBmdW5jdGlvbiAoXG5cdFx0b0ZpbHRlckJhcjogYW55LFxuXHRcdG9Db25kaXRpb25zOiBhbnksXG5cdFx0b1ZhcmlhbnQ6IGFueSxcblx0XHRiUmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ6IGFueSxcblx0XHRiRmlsdGVyVmFyaWFudEFwcGxpZWQ6IGFueSxcblx0XHRiSXNGTFBWYWx1ZVByZXNlbnQ/OiBib29sZWFuXG5cdCkge1xuXHRcdGxldCBvUHJvbWlzZTtcblxuXHRcdGlmIChvVmFyaWFudCAmJiAhYkZpbHRlclZhcmlhbnRBcHBsaWVkKSB7XG5cdFx0XHRsZXQgb1ZhcmlhbnRLZXkgPSBiUmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQgPyBvVmFyaWFudC5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKSA6IG9WYXJpYW50LmdldERlZmF1bHRWYXJpYW50S2V5KCk7XG5cdFx0XHRpZiAob1ZhcmlhbnRLZXkgPT09IG51bGwpIHtcblx0XHRcdFx0b1ZhcmlhbnRLZXkgPSBvVmFyaWFudC5nZXRJZCgpO1xuXHRcdFx0fVxuXHRcdFx0b1Byb21pc2UgPSBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRcdGVsZW1lbnQ6IG9WYXJpYW50LFxuXHRcdFx0XHR2YXJpYW50UmVmZXJlbmNlOiBvVmFyaWFudEtleVxuXHRcdFx0fSkudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBiUmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQgfHwgb1ZhcmlhbnQuZ2V0RGVmYXVsdFZhcmlhbnRLZXkoKSA9PT0gb1ZhcmlhbnQuZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBvUHJvbWlzZS50aGVuKChiQ2xlYXJGaWx0ZXJBbmRSZXBsYWNlV2l0aEFwcFN0YXRlOiBhbnkpID0+IHtcblx0XHRcdGlmIChiQ2xlYXJGaWx0ZXJBbmRSZXBsYWNlV2l0aEFwcFN0YXRlKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9mbkFwcGx5Q29uZGl0aW9ucyhvRmlsdGVyQmFyLCBvQ29uZGl0aW9ucywgYklzRkxQVmFsdWVQcmVzZW50KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSxcblxuXHQvKlxuXHQgKiBTZXRzIGZpbHRlcmVkOiBmYWxzZSBmbGFnIHRvIGV2ZXJ5IGZpZWxkIHNvIHRoYXQgaXQgY2FuIGJlIGNsZWFyZWQgb3V0XG5cdCAqXG5cdCAqIEBwYXJhbSBvRmlsdGVyQmFyIGZpbHRlcmJhciBjb250cm9sIGlzIHVzZWQgdG8gZGlzcGxheSBmaWx0ZXIgcHJvcGVydGllcyBpbiBhIHVzZXItZnJpZW5kbHkgbWFubmVyIHRvIHBvcHVsYXRlIHZhbHVlcyBmb3IgYSBxdWVyeVxuXHQgKiBAcmV0dXJucyBwcm9taXNlIHdoaWNoIHdpbGwgYmUgcmVzb2x2ZWQgdG8gb2JqZWN0XG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRfZm5DbGVhclN0YXRlQmVmb3JleEFwcE5hdjogYXN5bmMgZnVuY3Rpb24gKG9GaWx0ZXJCYXI6IEZpbHRlckJhcikge1xuXHRcdHJldHVybiBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIpXG5cdFx0XHQudGhlbigob0V4dGVybmFsU3RhdGU6IGFueSkgPT4ge1xuXHRcdFx0XHRjb25zdCBvQ29uZGl0aW9uID0gb0V4dGVybmFsU3RhdGUuZmlsdGVyO1xuXHRcdFx0XHRmb3IgKGNvbnN0IGZpZWxkIGluIG9Db25kaXRpb24pIHtcblx0XHRcdFx0XHRpZiAoZmllbGQgIT09IFwiJGVkaXRTdGF0ZVwiICYmIGZpZWxkICE9PSBcIiRzZWFyY2hcIiAmJiBvQ29uZGl0aW9uW2ZpZWxkXSkge1xuXHRcdFx0XHRcdFx0b0NvbmRpdGlvbltmaWVsZF0uZm9yRWFjaCgoY29uZGl0aW9uOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPikgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25kaXRpb25bXCJmaWx0ZXJlZFwiXSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUob0NvbmRpdGlvbik7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uIChvRXJyb3I6IGFueSkge1xuXHRcdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSByZXRyaWV2aW5nIHRoZSBleHRlcm5hbCBzdGF0ZVwiLCBvRXJyb3IpO1xuXHRcdFx0fSk7XG5cdH0sXG5cblx0X2ZuQXBwbHlDb25kaXRpb25zOiBhc3luYyBmdW5jdGlvbiAob0ZpbHRlckJhcjogYW55LCBvQ29uZGl0aW9uczogYW55LCBiSXNGTFBWYWx1ZVByZXNlbnQ/OiBib29sZWFuKSB7XG5cdFx0Y29uc3QgbUZpbHRlcjogYW55ID0ge30sXG5cdFx0XHRhSXRlbXM6IGFueVtdID0gW10sXG5cdFx0XHRmbkFkanVzdFZhbHVlSGVscENvbmRpdGlvbiA9IGZ1bmN0aW9uIChvQ29uZGl0aW9uOiBhbnkpIHtcblx0XHRcdFx0Ly8gaW4gY2FzZSB0aGUgY29uZGl0aW9uIGlzIG1lYW50IGZvciBhIGZpZWxkIGhhdmluZyBhIFZILCB0aGUgZm9ybWF0IHJlcXVpcmVkIGJ5IE1EQyBkaWZmZXJzXG5cdFx0XHRcdG9Db25kaXRpb24udmFsaWRhdGVkID0gQ29uZGl0aW9uVmFsaWRhdGVkLlZhbGlkYXRlZDtcblx0XHRcdFx0aWYgKG9Db25kaXRpb24ub3BlcmF0b3IgPT09IFwiRW1wdHlcIikge1xuXHRcdFx0XHRcdG9Db25kaXRpb24ub3BlcmF0b3IgPSBcIkVRXCI7XG5cdFx0XHRcdFx0b0NvbmRpdGlvbi52YWx1ZXMgPSBbXCJcIl07XG5cdFx0XHRcdH0gZWxzZSBpZiAob0NvbmRpdGlvbi5vcGVyYXRvciA9PT0gXCJOb3RFbXB0eVwiKSB7XG5cdFx0XHRcdFx0b0NvbmRpdGlvbi5vcGVyYXRvciA9IFwiTkVcIjtcblx0XHRcdFx0XHRvQ29uZGl0aW9uLnZhbHVlcyA9IFtcIlwiXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkZWxldGUgb0NvbmRpdGlvbi5pc0VtcHR5O1xuXHRcdFx0fTtcblx0XHRjb25zdCBmbkdldFByb3BlcnR5SW5mbyA9IGZ1bmN0aW9uIChvRmlsdGVyQ29udHJvbDogYW55LCBzRW50aXR5VHlwZVBhdGg6IGFueSkge1xuXHRcdFx0Y29uc3Qgc0VudGl0eVNldFBhdGggPSBNb2RlbEhlbHBlci5nZXRFbnRpdHlTZXRQYXRoKHNFbnRpdHlUeXBlUGF0aCksXG5cdFx0XHRcdG9NZXRhTW9kZWwgPSBvRmlsdGVyQ29udHJvbC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpLFxuXHRcdFx0XHRvRlIgPSBDb21tb25VdGlscy5nZXRGaWx0ZXJSZXN0cmljdGlvbnNCeVBhdGgoc0VudGl0eVNldFBhdGgsIG9NZXRhTW9kZWwpLFxuXHRcdFx0XHRhTm9uRmlsdGVyYWJsZVByb3BzID0gb0ZSW0ZpbHRlclJlc3RyaWN0aW9ucy5OT05fRklMVEVSQUJMRV9QUk9QRVJUSUVTXSxcblx0XHRcdFx0bUZpbHRlckZpZWxkcyA9IEZpbHRlclV0aWxzLmdldENvbnZlcnRlZEZpbHRlckZpZWxkcyhvRmlsdGVyQ29udHJvbCwgc0VudGl0eVR5cGVQYXRoKSxcblx0XHRcdFx0YVByb3BlcnR5SW5mbzogYW55W10gPSBbXTtcblx0XHRcdE9iamVjdC5rZXlzKG1GaWx0ZXJGaWVsZHMpLmZvckVhY2goZnVuY3Rpb24gKHNGaWx0ZXJGaWVsZEtleTogc3RyaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG9Db252ZXJ0ZWRQcm9wZXJ0eSA9IG1GaWx0ZXJGaWVsZHNbc0ZpbHRlckZpZWxkS2V5XTtcblx0XHRcdFx0Y29uc3Qgc1Byb3BlcnR5UGF0aCA9IG9Db252ZXJ0ZWRQcm9wZXJ0eS5jb25kaXRpb25QYXRoLnJlcGxhY2UoQ09ORElUSU9OX1BBVEhfVE9fUFJPUEVSVFlfUEFUSF9SRUdFWCwgXCJcIik7XG5cdFx0XHRcdGlmIChhTm9uRmlsdGVyYWJsZVByb3BzLmluZGV4T2Yoc1Byb3BlcnR5UGF0aCkgPT09IC0xKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gb0NvbnZlcnRlZFByb3BlcnR5LmFubm90YXRpb25QYXRoO1xuXHRcdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUNvbnRleHQgPSBvTWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KHNBbm5vdGF0aW9uUGF0aCk7XG5cdFx0XHRcdFx0YVByb3BlcnR5SW5mby5wdXNoKHtcblx0XHRcdFx0XHRcdHBhdGg6IG9Db252ZXJ0ZWRQcm9wZXJ0eS5jb25kaXRpb25QYXRoLFxuXHRcdFx0XHRcdFx0aGlkZGVuRmlsdGVyOiBvQ29udmVydGVkUHJvcGVydHkuYXZhaWxhYmlsaXR5ID09PSBcIkhpZGRlblwiLFxuXHRcdFx0XHRcdFx0aGFzVmFsdWVIZWxwOiAhc0Fubm90YXRpb25QYXRoXG5cdFx0XHRcdFx0XHRcdD8gZmFsc2Vcblx0XHRcdFx0XHRcdFx0OiBQcm9wZXJ0eUZvcm1hdHRlcnMuaGFzVmFsdWVIZWxwKG9Qcm9wZXJ0eUNvbnRleHQuZ2V0T2JqZWN0KCksIHsgY29udGV4dDogb1Byb3BlcnR5Q29udGV4dCB9KVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBhUHJvcGVydHlJbmZvO1xuXHRcdH07XG5cblx0XHRyZXR1cm4gb0ZpbHRlckJhci53YWl0Rm9ySW5pdGlhbGl6YXRpb24oKS50aGVuKGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlUGF0aCA9IERlbGVnYXRlVXRpbC5nZXRDdXN0b21EYXRhKG9GaWx0ZXJCYXIsIFwiZW50aXR5VHlwZVwiKTtcblx0XHRcdC8vIER1cmluZyBleHRlcm5hbCBhcHAgbmF2aWdhdGlvbiwgd2UgaGF2ZSB0byBjbGVhciB0aGUgZXhpc3RpbmcgY29uZGl0aW9ucyB0byBhdm9pZCBtZXJnaW5nIG9mIHZhbHVlcyBjb21pbmcgZnJvbSBhbm5vdGF0aW9uIGFuZCBjb250ZXh0XG5cdFx0XHQvLyBDb25kaXRpb24gIWJJc0ZMUFZhbHVlUHJlc2VudCBpbmRpY2F0ZXMgaXQncyBleHRlcm5hbCBhcHAgbmF2aWdhdGlvblxuXHRcdFx0aWYgKCFiSXNGTFBWYWx1ZVByZXNlbnQpIHtcblx0XHRcdFx0Y29uc3Qgb0NsZWFyQ29uZGl0aW9ucyA9IGF3YWl0IHRoaXMuX2ZuQ2xlYXJTdGF0ZUJlZm9yZXhBcHBOYXYob0ZpbHRlckJhcik7XG5cdFx0XHRcdGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUob0ZpbHRlckJhciwge1xuXHRcdFx0XHRcdGZpbHRlcjogb0NsZWFyQ29uZGl0aW9ucyxcblx0XHRcdFx0XHRpdGVtczogYUl0ZW1zXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0Y29uc3QgYVByb3BlcnR5SW5mbyA9IGZuR2V0UHJvcGVydHlJbmZvKG9GaWx0ZXJCYXIsIHNFbnRpdHlUeXBlUGF0aCk7XG5cdFx0XHRhUHJvcGVydHlJbmZvXG5cdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Qcm9wZXJ0eUluZm86IGFueSkge1xuXHRcdFx0XHRcdHJldHVybiBvUHJvcGVydHlJbmZvLnBhdGggIT09IFwiJGVkaXRTdGF0ZVwiICYmIG9Qcm9wZXJ0eUluZm8ucGF0aCAhPT0gXCIkc2VhcmNoXCI7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mb3JFYWNoKGZ1bmN0aW9uIChvUHJvcGVydHlJbmZvOiBhbnkpIHtcblx0XHRcdFx0XHRpZiAob1Byb3BlcnR5SW5mby5wYXRoIGluIG9Db25kaXRpb25zKSB7XG5cdFx0XHRcdFx0XHRtRmlsdGVyW29Qcm9wZXJ0eUluZm8ucGF0aF0gPSBvQ29uZGl0aW9uc1tvUHJvcGVydHlJbmZvLnBhdGhdO1xuXHRcdFx0XHRcdFx0aWYgKCFvUHJvcGVydHlJbmZvLmhpZGRlbkZpbHRlcikge1xuXHRcdFx0XHRcdFx0XHRhSXRlbXMucHVzaCh7IG5hbWU6IG9Qcm9wZXJ0eUluZm8ucGF0aCB9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmIChvUHJvcGVydHlJbmZvLmhhc1ZhbHVlSGVscCkge1xuXHRcdFx0XHRcdFx0XHRtRmlsdGVyW29Qcm9wZXJ0eUluZm8ucGF0aF0uZm9yRWFjaChmbkFkanVzdFZhbHVlSGVscENvbmRpdGlvbik7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRtRmlsdGVyW29Qcm9wZXJ0eUluZm8ucGF0aF0uZm9yRWFjaChmdW5jdGlvbiAob0NvbmRpdGlvbjogYW55KSB7XG5cdFx0XHRcdFx0XHRcdFx0b0NvbmRpdGlvbi52YWxpZGF0ZWQgPSBvQ29uZGl0aW9uLmZpbHRlcmVkID8gQ29uZGl0aW9uVmFsaWRhdGVkLk5vdFZhbGlkYXRlZCA6IG9Db25kaXRpb24udmFsaWRhdGVkO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bUZpbHRlcltvUHJvcGVydHlJbmZvLnBhdGhdID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdHJldHVybiBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKG9GaWx0ZXJCYXIsIHsgZmlsdGVyOiBtRmlsdGVyLCBpdGVtczogYUl0ZW1zIH0pO1xuXHRcdH0pO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBWaWV3U3RhdGVPdmVycmlkZTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7RUFvQkEsSUFBTUEsT0FBTyxHQUFHQyxVQUFVLENBQUNELE9BQU87SUFDakNFLHFCQUFxQixHQUFHQyxXQUFXLENBQUNDLGlCQUFpQjtJQUNyREMsbUJBQW1CLEdBQUdGLFdBQVcsQ0FBQ0UsbUJBQW1CO0lBQ3JEQyxlQUFlLEdBQUdILFdBQVcsQ0FBQ0csZUFBZTtFQUM5QyxJQUFNQyxrQkFBa0IsR0FBR0MsV0FBVyxDQUFDRCxrQkFBa0I7SUFDeERFLHFDQUFxQyxHQUFHLFFBQVE7RUFFakQsSUFBTUMsaUJBQXNCLEdBQUc7SUFDOUJDLGlCQUFpQixFQUFFLEtBQUs7SUFDeEJDLHFCQUFxQixFQUFFLFlBQVk7TUFDbEMsT0FBTyxJQUFJO0lBQ1osQ0FBQztJQUNEQyxvQkFBb0IsRUFBRSxVQUFzREMsU0FBYyxFQUFFO01BQzNGLElBQU1DLEtBQUssR0FBRyxJQUFJLENBQUNDLE9BQU8sRUFBRTtRQUMzQkMsV0FBVyxHQUFHRixLQUFLLENBQUNHLGFBQWEsRUFBMEI7UUFDM0RDLFVBQVUsR0FBR0YsV0FBVyxDQUFDRyxvQkFBb0IsRUFBRTtRQUMvQ0MsT0FBTyxHQUFHSixXQUFXLENBQUNLLFlBQVksQ0FBQyxPQUFPLENBQUM7TUFDNUMsSUFBSUgsVUFBVSxFQUFFO1FBQ2ZBLFVBQVUsQ0FBQ0ksbUJBQW1CLENBQUMsSUFBSSxDQUFDO1FBQ3BDVCxTQUFTLENBQUNVLElBQUks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
|