gamma-app-controller 2.0.12 → 2.0.15

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.
@@ -72,10 +72,16 @@ export class GammaGeoChartComponent {
72
72
  };
73
73
  }
74
74
  else if (this.mapTYpe == "choroplethMap") {
75
+ debugger;
76
+ let chartConfig = value.kpiConfig.dataConfig;
77
+ if (chartConfig.isDataAggregation) {
78
+ const aggreationData = this.getGroupDataForChart(value.kpiConfig.dataSource, chartConfig['dataAggregationConfig']['dataAggregateColumes'], chartConfig['dataAggregationConfig']['aggregateFields']);
79
+ value.kpiConfig.dataSource = aggreationData;
80
+ console.log(aggreationData);
81
+ }
75
82
  this.choroplethMapDataSource = new Map();
76
83
  this.choroplethTooltipDataSource = new Map();
77
84
  this.choroplethMapData = value.kpiConfig.dataSource;
78
- let chartConfig = value.kpiConfig.dataConfig;
79
85
  this.chartHeight = `${chartConfig.size}px`;
80
86
  let tootTipColumn = chartConfig.chart_config
81
87
  .filter(c => c.displayFor === 'map' || c.displayFor === 'tooltip');
@@ -164,6 +170,71 @@ export class GammaGeoChartComponent {
164
170
  this.addBubbleMarkers();
165
171
  }
166
172
  }
173
+ getGroupDataForChart(data, aggregationConfig, groupByColumns) {
174
+ const groupMap = {};
175
+ data.forEach(row => {
176
+ const groupKey = groupByColumns.map(col => row[col]).join("||");
177
+ if (!groupMap[groupKey]) {
178
+ groupMap[groupKey] = {};
179
+ groupByColumns.forEach(col => {
180
+ groupMap[groupKey][col] = row[col];
181
+ });
182
+ aggregationConfig.forEach(({ aggregateDataField, aggregateFunctionType }) => {
183
+ switch (aggregateFunctionType) {
184
+ case "sum":
185
+ case "avg":
186
+ groupMap[groupKey][aggregateDataField] = 0;
187
+ break;
188
+ case "min":
189
+ groupMap[groupKey][aggregateDataField] = Infinity;
190
+ break;
191
+ case "max":
192
+ groupMap[groupKey][aggregateDataField] = -Infinity;
193
+ break;
194
+ case "count":
195
+ groupMap[groupKey][aggregateDataField] = 0;
196
+ break;
197
+ }
198
+ if (aggregateFunctionType === "avg") {
199
+ groupMap[groupKey][`${aggregateDataField}__count`] = 0;
200
+ }
201
+ });
202
+ }
203
+ aggregationConfig.forEach(({ aggregateDataField, aggregateFunctionType }) => {
204
+ const value = row[aggregateDataField];
205
+ switch (aggregateFunctionType) {
206
+ case "sum":
207
+ groupMap[groupKey][aggregateDataField] += value;
208
+ break;
209
+ case "avg":
210
+ groupMap[groupKey][aggregateDataField] += value;
211
+ groupMap[groupKey][`${aggregateDataField}__count`] += 1;
212
+ break;
213
+ case "min":
214
+ groupMap[groupKey][aggregateDataField] =
215
+ Math.min(groupMap[groupKey][aggregateDataField], value);
216
+ break;
217
+ case "max":
218
+ groupMap[groupKey][aggregateDataField] =
219
+ Math.max(groupMap[groupKey][aggregateDataField], value);
220
+ break;
221
+ case "count":
222
+ groupMap[groupKey][aggregateDataField] += 1;
223
+ break;
224
+ }
225
+ });
226
+ });
227
+ Object.values(groupMap).forEach(group => {
228
+ aggregationConfig.forEach(({ aggregateDataField, aggregateFunctionType }) => {
229
+ if (aggregateFunctionType === "avg") {
230
+ group[aggregateDataField] =
231
+ group[aggregateDataField] / group[`${aggregateDataField}__count`];
232
+ delete group[`${aggregateDataField}__count`];
233
+ }
234
+ });
235
+ });
236
+ return Object.values(groupMap);
237
+ }
167
238
  loadGoogleCharts() {
168
239
  google.charts.load("current", {
169
240
  packages: [this.chartType],
@@ -623,4 +694,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
623
694
  type: Input,
624
695
  args: ["chartDataSource"]
625
696
  }] } });
626
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sTUFBTSxNQUFNLCtDQUErQyxDQUFDOzs7OztBQVNuRSxNQUFNLE9BQU8sc0JBQXNCO0lBaU1qQyxZQUFtQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQTdLL0MsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUliLFdBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdkIseUJBQW9CLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0QsY0FBUyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xELGlDQUE0QixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdFLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQVMxQywrQkFBMEIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUN2RCx3QkFBbUIsR0FBVyxRQUFRLENBQUM7UUFDdkMsd0JBQW1CLEdBQVcsQ0FBQyxRQUFRLENBQUE7UUFDdkMsaUNBQTRCLEdBQVUsRUFBRSxDQUFDO1FBRXpDLDRCQUF1QixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBQ3BELGdDQUEyQixHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7UUFFckQseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBRXRDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFbEIsOEJBQXlCLEdBQUcsQ0FBQyxDQUFDO0lBK0lxQixDQUFDO0lBNUlwRCxJQUNJLGVBQWUsQ0FBQyxLQUFLO1FBQ3ZCLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUM3QyxPQUFPO1NBQ1I7YUFBTTtZQUVMLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUNwQyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQztZQUVsRCxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3pFLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFO29CQUN4QyxJQUFJLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztvQkFDbEQsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLFFBQVEsRUFBRTt3QkFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7d0JBQ2hELElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO3dCQUN4RCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQzt3QkFDN0QsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7d0JBQ3RDLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQzt3QkFDMUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7d0JBQ3RELElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDO3dCQUNqRSxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQzt3QkFFbkQsTUFBTSxhQUFhLEdBQUc7NEJBQ3BCO2dDQUNFLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQztnQ0FDM0MsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUM7Z0NBQzdDLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTs2QkFDdkQ7eUJBQ0YsQ0FBQyxNQUFNLENBQ04sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUNoQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDOzRCQUN0QyxPQUFPO2dDQUNMLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQ0FDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0NBQ25ELE9BQU87NkJBQ1IsQ0FBQzt3QkFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO3dCQUNGLElBQUksQ0FBQyxRQUFRLEdBQUcsYUFBYSxDQUFDO3dCQUU5QixVQUFVLENBQUMsR0FBRyxFQUFFOzRCQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUV4QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7cUJBQ1Q7eUJBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLFdBQVcsRUFBRTt3QkFDdEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUksSUFBSSxDQUFDO3dCQUMxRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQzt3QkFDN0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHOzRCQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWM7eUJBQzFCLENBQUM7cUJBQ0g7eUJBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLGVBQWUsRUFBRTt3QkFHMUMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO3dCQUN6RCxJQUFJLENBQUMsMkJBQTJCLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQzt3QkFDMUQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO3dCQUVwRCxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQzt3QkFFN0MsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLFdBQVcsQ0FBQyxJQUFJLElBQUksQ0FBQzt3QkFFM0MsSUFBSSxhQUFhLEdBQUcsV0FBVyxDQUFDLFlBQVk7NkJBQ3pDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUM7d0JBRXJFLE1BQU0sVUFBVSxHQUNkLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQUM7d0JBRXhFLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTs0QkFDckMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQzs0QkFFdkQsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDOzRCQUUxQixJQUFJLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs0QkFDM0MsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBRTdDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQzs0QkFDN0UsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO3dCQUMvRSxDQUFDLENBQUMsQ0FBQzt3QkFFSCxJQUFJLFdBQVcsQ0FBQyx1QkFBdUIsRUFBRTs0QkFDdkMsSUFBSSxDQUFDLDRCQUE0QixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3ZILElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDLENBQUM7NEJBQ3JFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUM7NEJBQ2pDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsV0FBVyxDQUFDLENBQUM7NEJBQ3pFLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxXQUFXLENBQUM7NEJBQzVDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO3lCQUN2RDt3QkFHRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO3dCQUNuRCxVQUFVLENBQUMsR0FBRyxFQUFFOzRCQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO3dCQUV4QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7cUJBQ1Q7eUJBQ0k7d0JBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQzt3QkFDNUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7d0JBQzdELElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksQ0FBQzt3QkFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxVQUFVLENBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQzNDLENBQUM7d0JBQ0YsSUFBSSxDQUFDLG1CQUFtQixHQUFHOzRCQUN6QixJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWM7eUJBQzFCLENBQUM7cUJBQ0g7aUJBRUY7cUJBQU0sSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxPQUFPLEVBQUU7b0JBQzdDLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO29CQUNsRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVU7eUJBQzFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7eUJBQ3JDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN2RSxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFFdkMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFO3dCQUNqQixJQUFJLENBQUMsZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztxQkFDdkY7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLGVBQWUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztxQkFDdkc7b0JBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLFdBQVcsRUFBRTt3QkFDL0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO3dCQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLENBQUM7d0JBQzFELElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO3dCQUM3RCxJQUFJLENBQUMsbUJBQW1CLEdBQUc7NEJBQ3pCLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYzt5QkFDMUIsQ0FBQztxQkFDSDtpQkFDRjthQUVGO1NBR0Y7SUFFSCxDQUFDO0lBSUQsUUFBUSxLQUFXLENBQUM7SUFFcEIsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxRQUFRLEVBQUU7WUFDNUIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7U0FDekI7YUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFO1lBQ3BDLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGVBQWUsSUFBSSxhQUFhLEVBQUU7Z0JBQzFFLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzdDO2lCQUFNLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGVBQWUsSUFBSSxlQUFlLEVBQUU7Z0JBQ25GLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2dCQUN0QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ3JCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQzthQUVuQjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztnQkFDdEIsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUVsRDtTQUVGO2FBQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLGVBQWUsRUFBRTtZQUUxQyxPQUFPO1NBQ1I7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDNUIsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUMzQixDQUFDLENBQUM7UUFDSCxNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVELFNBQVM7UUFDUCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQVNsRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFFdkMsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FDN0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQzVCLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDNUQsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFJO1FBQ2IsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDckMsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssUUFBUSxFQUFFO2dCQUMvQyxXQUFXO29CQUNULHlCQUF5Qjt3QkFDekIsT0FBTyxDQUFDLE9BQU87d0JBQ2YsY0FBYzt3QkFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDOUQsUUFBUSxDQUFDO2FBQ1o7aUJBQU07Z0JBQ0wsV0FBVztvQkFDVCx5QkFBeUI7d0JBQ3pCLE9BQU8sQ0FBQyxPQUFPO3dCQUNmLGNBQWM7d0JBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUM7d0JBQ3ZCLFFBQVEsQ0FBQzthQUNaO1FBR0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLEVBQUU7WUFDekIsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO2dCQUN2QixXQUFXLEVBQUUsU0FBUztnQkFDdEIsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjO2dCQUNwQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQUN6QixTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRTthQUN0QyxDQUFDO1lBQ0YsT0FBTyxPQUFPLENBQUM7U0FDaEI7YUFBTTtZQUNMLE1BQU0sT0FBTyxHQUFHO2dCQUNkLGVBQWUsRUFBRSxJQUFJLENBQUMsY0FBYztnQkFDcEMsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDekIsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUU7YUFDdEMsQ0FBQztZQUNGLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQU1ELGFBQWE7UUFDWCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUM7UUFNNUMsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLFdBQVcsRUFBRTtZQUMvQixVQUFVLENBQUMsUUFBUSxDQUFDLEdBQUc7Z0JBQ3JCO29CQUNFLFdBQVcsRUFBRSxLQUFLO29CQUNsQixPQUFPLEVBQUU7d0JBQ1AsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLEVBQUU7d0JBQ3BCLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTt3QkFDakIsRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFO3FCQUM3QjtpQkFDRjtnQkFDRDtvQkFDRSxXQUFXLEVBQUUsd0JBQXdCO29CQUNyQyxXQUFXLEVBQUUsUUFBUTtvQkFDckIsT0FBTyxFQUFFO3dCQUNQLEVBQUUsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO3dCQUNsQixFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUU7d0JBQ3BCLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTt3QkFDdEIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFO3FCQUNyQjtpQkFDRjtnQkFDRDtvQkFDRSxXQUFXLEVBQUUsd0JBQXdCO29CQUNyQyxXQUFXLEVBQUUsaUJBQWlCO29CQUM5QixPQUFPLEVBQUU7d0JBQ1AsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2xCLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRTtxQkFDaEI7aUJBQ0Y7Z0JBQ0Q7b0JBQ0UsV0FBVyxFQUFFLHdCQUF3QjtvQkFDckMsV0FBVyxFQUFFLGVBQWU7b0JBQzVCLE9BQU8sRUFBRTt3QkFDUCxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7cUJBQ2xCO2lCQUNGO2FBQ0YsQ0FBQztTQUNIO1FBRUQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUU1QixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFDM0IsVUFBVSxDQUNYLENBQUM7UUFDRixJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDOUQsQ0FBQztJQUdELFVBQVU7UUFDUixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3BDLFFBQVEsRUFBRTtvQkFDUixHQUFHLEVBQUUsVUFBVSxDQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQy9EO29CQUNELEdBQUcsRUFBRSxVQUFVLENBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FDaEU7aUJBQ0Y7Z0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUk7b0JBQy9DLFVBQVUsRUFBRTt3QkFDVixLQUFLLEVBQUUsRUFBRTt3QkFDVCxNQUFNLEVBQUUsRUFBRTtxQkFDWDtpQkFDRixDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUVOLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztnQkFFYixLQUFLLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTthQUMzRCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUcxQixJQUFJLG1CQUFtQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFFdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFFNUMsT0FBTyxFQUFFO1VBQ1AsY0FBYzthQUNYO2FBQ04sQ0FBQyxDQUFDO1lBU0gsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUMvQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxDQUFDO2lCQUNoQztnQkFDRCxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7WUFDdEMsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUdsQyxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsSUFBSTtRQUNuQixJQUFJLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNyQyxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSyxRQUFRLEVBQUU7Z0JBQy9DLFdBQVc7b0JBQ1QseUJBQXlCO3dCQUN6QixPQUFPLENBQUMsT0FBTzt3QkFDZixjQUFjO3dCQUNkLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUM5RCxRQUFRLENBQUM7YUFDWjtpQkFBTTtnQkFDTCxXQUFXO29CQUNULHlCQUF5Qjt3QkFDekIsT0FBTyxDQUFDLE9BQU87d0JBQ2YsY0FBYzt3QkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQzt3QkFDdkIsUUFBUSxDQUFDO2FBQ1o7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFLRCxzQkFBc0IsQ0FBQyxJQUFJO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN2QixJQUFJLFFBQVEsR0FBRyxVQUFVLENBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQzlELENBQUM7WUFDRixJQUFJLFNBQVMsR0FBRyxVQUFVLENBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQy9ELENBQUM7WUFFRixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztnQkFDcEIsUUFBUSxFQUFFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQzthQUd0RCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxVQUFVLEdBQUc7WUFNakIsSUFBSSxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQzFCLENBQUM7UUFLRixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzVELElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1lBQ3hELElBQUksRUFBRSxJQUFJLENBQUMsV0FBVztZQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7U0FDZCxDQUFDLENBQUM7SUFFTCxDQUFDO0lBTUQsMkJBQTJCLENBQUMsSUFBSTtRQUU5QixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7WUFFMUQsSUFBSSxFQUFFLFVBQVUsQ0FDZCxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUMzQztTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUU1RCxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBRXJCLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FDdkIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FDOUQsQ0FBQztZQUNGLElBQUksU0FBUyxHQUFHLFVBQVUsQ0FDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FDL0QsQ0FBQztZQUNGLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO2dCQUNwQixRQUFRLEVBQUUsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDO2FBQ3RELENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDO1lBQ3hELElBQUksRUFBRSxJQUFJLENBQUMsV0FBVztZQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7U0FDZCxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3BDLFFBQVEsRUFBRTtvQkFDUixHQUFHLEVBQUUsVUFBVSxDQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQy9EO29CQUNELEdBQUcsRUFBRSxVQUFVLENBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FDaEU7aUJBQ0Y7Z0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxHQUFHLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLElBQUk7b0JBQy9DLFVBQVUsRUFBRTt3QkFDVixLQUFLLEVBQUUsRUFBRTt3QkFDVCxNQUFNLEVBQUUsRUFBRTtxQkFDWDtpQkFDRixDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUVOLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztnQkFFYixLQUFLLEVBQUUsR0FBRyxRQUFRLENBQUMsSUFBSSxNQUFNLFFBQVEsQ0FBQyxrQkFBa0IsRUFBRTthQUMzRCxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztZQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUsxQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDdkQsTUFBTSxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDNUMsT0FBTyxFQUFFO2NBQ0gsY0FBYztpQkFDWDthQUNWLENBQUMsQ0FBQztZQUdILE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtnQkFDL0IsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDaEM7Z0JBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNsQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDO1lBQ3RDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFHaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsY0FBYyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDckMsSUFBSSxTQUFTLEdBQUcsQ0FBQyxFQUFFO1lBRWpCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1NBQ3ZEO2FBQU07WUFFTCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUMzRDtJQUNILENBQUM7SUFJRCxnQkFBZ0I7UUFDZCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7Z0JBQ3BDLFFBQVEsRUFBRTtvQkFDUixHQUFHLEVBQUUsVUFBVSxDQUNiLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQy9EO29CQUNELEdBQUcsRUFBRSxVQUFVLENBQ2IsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FDaEU7aUJBQ0Y7Z0JBQ0QsSUFBSSxFQUFFO29CQUNKLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO29CQUNuQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7b0JBQzVDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsV0FBVztvQkFDNUQsV0FBVyxFQUFFLEdBQUc7b0JBQ2hCLFlBQVksRUFBRSxDQUFDO2lCQUNoQjtnQkFFRCxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBRWIsS0FBSyxFQUFFLEdBQUcsUUFBUSxDQUFDLElBQUksTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FDdkYsRUFBRTthQUNMLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRzFCLElBQUksbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzFELE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO2dCQUU1QyxPQUFPLEVBQUU7V0FDTixjQUFjO2NBQ1g7YUFDUCxDQUFDLENBQUM7WUFFSCxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7Z0JBQy9CLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFO29CQUMxQixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2hDO2dCQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFVBQVUsQ0FBQztZQUN0QyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxpQkFBaUI7UUFFZixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUN2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUNuQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FDOUQsQ0FDRixDQUFDO1FBQ0YsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDdkIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FDbkIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQzlELENBQ0YsQ0FBQztRQUdGLE1BQU0sYUFBYSxHQUNqQixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUM7UUFDMUQsTUFBTSxhQUFhLEdBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQztRQUcxRCxNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDcEMsT0FBTyxDQUNMLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7Z0JBQy9ELGFBQWEsQ0FDZCxDQUFDO1FBQ0osQ0FBQyxDQUFDO1FBR0YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMzQixDQUFDLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDM0IsSUFBSSxDQUFDLEdBQUcsQ0FDTixTQUFTLENBQ1AsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFDdEQsUUFBUSxFQUNSLFFBQVEsQ0FDVCxFQUNELGFBQWEsQ0FDZCxFQUNELGFBQWEsQ0FDZCxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBS0QsUUFBUSxDQUFDLEdBQVcsRUFBRSxVQUFrQixFQUFFLFFBQWdCLEVBQUUsUUFBZ0IsRUFBRSxRQUFnQjtRQUM1RixJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxRQUFRLEtBQUssUUFBUSxFQUFFO1lBQzlELE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBT0QsTUFBTSxRQUFRLEdBQ1osQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFHM0MsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ2xCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQ3BCLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ2xDLEtBQUssQ0FDTixDQUFDO1FBRUYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN4QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBSTNDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxJQUFJLENBQUMsS0FBYSxFQUFFLEdBQVcsRUFBRSxLQUFhO1FBQzVDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUNELFFBQVEsQ0FBQyxHQUFXO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFdEMsT0FBTztZQUNMLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHO1lBQ3ZCLENBQUMsRUFBRSxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUMsR0FBRyxHQUFHO1lBQ3RCLENBQUMsRUFBRSxNQUFNLEdBQUcsR0FBRztTQUNoQixDQUFDO0lBQ0osQ0FBQztJQUdELGlCQUFpQixDQUFDLFdBQWdCLEVBQUUsYUFBb0I7UUFHdEQsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUM1QixRQUFRLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBZ0IsRUFDbkQ7WUFDRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMxRixJQUFJLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7U0FDakMsQ0FDRixDQUFDO1FBR0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7UUFFbEksTUFBTSxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRWhELElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtZQUNwRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoRCxNQUFNLEdBQUcsR0FBRyxRQUFRLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFFcEMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUV0RCxVQUFVLENBQUMsVUFBVSxDQUNuQixJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FDMUQsQ0FBQztZQUVGLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3JDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBR0Qsc0JBQXNCLENBQUMsUUFBZ0IsRUFBRSxHQUFRLEVBQUUsYUFBb0I7UUFFckUsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDOztjQUUxQixDQUFDLENBQUMsT0FBTztnQkFDUCxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUzs7R0FFNUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVWLE9BQU87Ozs7Ozs7OztVQVNELFFBQVE7O1FBRVYsSUFBSTs7R0FFVCxDQUFDO0lBQ0YsQ0FBQztJQUdELHVCQUF1QixDQUFDLElBQVksRUFBRSxXQUFnQjtRQUNwRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXpDLElBQUksbUJBQW1CLEdBQUcsUUFBUSxDQUFDO1FBQ25DLElBQUksbUJBQW1CLEdBQUcsQ0FBQyxRQUFRLENBQUM7UUFFcEMsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzlDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsS0FBSyxLQUFLLENBQzVCLEVBQUUsU0FBUyxDQUFDO1FBRWIsSUFBSSxDQUFDLGlCQUFpQjthQUNuQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLEtBQUssSUFBSSxDQUFDO2FBQ3JELE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNYLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLDJCQUEyQixDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFFN0MsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUNuRSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3JFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFO2dCQUNaLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztvQkFFN0csSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDOUMsQ0FBQyxDQUFDLENBQUM7YUFDSjtTQUNGO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxPQUFZLEVBQUUsV0FBZ0IsRUFBRSxRQUFRLEVBQUUsUUFBUTtRQUNoRSxNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQzdELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDM0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuSCxPQUFPO1lBQ0wsU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDO1lBQzdGLFdBQVcsRUFBRSxNQUFNO1lBQ25CLFlBQVksRUFBRSxDQUFDO1lBQ2YsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQztJQUNKLENBQUM7SUFPRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNkO2FBQU07WUFDTCxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDYjtJQUNILENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsSUFBSSxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ25DLElBQUksSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNqRixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztnQkFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2FBQ3hEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNkO1FBQ0gsQ0FBQyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO0lBRW5DLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxZQUFZLENBQUMsS0FBVTtRQUNyQixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUNyRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFhO1FBQzFCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFhO1FBQzdCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM3RixDQUFDOzttSEE1MkJVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHdZQ25CbkMsczREQWlETTsyRkQ5Qk8sc0JBQXNCO2tCQUpsQyxTQUFTOytCQUNFLHFCQUFxQjtvR0FJUixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBeUJKLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxTQUFTO3NCQUF6QixNQUFNO2dCQUNVLDRCQUE0QjtzQkFBNUMsTUFBTTtnQkFDRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBeUJGLGVBQWU7c0JBRGxCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcbi8vIGltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuZGVjbGFyZSB2YXIgZ29vZ2xlOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtZ2FtbWEtZ2VvLWNoYXJ0XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5odG1sXCIsXG59KVxuZXhwb3J0IGNsYXNzIEdhbW1hR2VvQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKFwiZ29vZ2xNYXBcIikgZ29vZ2xNYXA6IEVsZW1lbnRSZWY7XG4gIGNoYXJEYXRhOiBhbnk7XG4gIGNoYXJ0SGVpZ2h0OiBhbnk7XG4gIGJhY2dyb3VuZENvbG9yOiBhbnk7XG4gIG1hcENvbG9yczogYW55O1xuICBjaGFydFR5cGU6IGFueTtcbiAgdG9vdFRpcENvbHVtbjogYW55O1xuICByZWdpb246IGFueTtcbiAgcmVnaW9uQ29kZTogYW55O1xuICAvLyBoZWF0IE1hcCBzdGFydFxuICBtYXA6IGFueTtcbiAgbG9jYXRpb25zO1xuICBtYXBUWXBlOiBhbnk7XG4gIG1hcE9wdGlvbkZvckhlYXRNYXA6IHtcbiAgICB6b29tOiBudW1iZXI7XG4gIH07XG4gIGN1cnJlbnRJbmZvV2luZG93OiBhbnk7XG4gIC8vIGhlYXQgTWFwIGVuZFxuICAvL2hlYXQgb25seSBtYXAgc3RhcnQgLy9cbiAgbWFya2VycyA9IFtdO1xuICBoZWF0bWFwOiBhbnk7XG4gIGhlYXRtYXBEYXRhOiBhbnk7XG4gIHpvb21WYWx1Rm9yQWxsOiBudW1iZXI7XG4gIGJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKTtcbiAgLy9oZWF0IG9ubHkgbWFwIGVuZCAvL1xuICBAT3V0cHV0KCkgcHVibGljIGdldFRhYmxlQ29uZmlnT3V0UHV0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9ucmlnaHRDbGlja0NvbnRleHRTZWxlY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSByaWdodENsaWNrRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgc29ydEJ5OiBhbnk7XG4gIGZpbHRlcmVkT2JqZWN0czogYW55O1xuXG5cbiAgLy9jaG9yb3BsZXRoTWFwIHZhcmlhYmxlcy8vXG4gIGNob3JvcGxldGhfbWFwX2RhdGFfc291cmNlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgbWluQ2hvcm9wbGV0aE1hcENudDogbnVtYmVyID0gSW5maW5pdHk7XG4gIG1heENob3JvcGxldGhNYXBDbnQ6IG51bWJlciA9IC1JbmZpbml0eVxuICBhbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWU6IHN0cmluZztcbiAgY2hvcm9wbGV0aE1hcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBjaG9yb3BsZXRoTWFwRGF0YTogYW55O1xuICBpc1JhbmdlU2xpZGVyVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjaG9yb3BsZXRoTWFwQ2hhcnRDb25maWc6IGFueTtcbiAgaXNQbGF5aW5nID0gZmFsc2U7XG4gIHBsYXlJbnRlcnZhbDogYW55O1xuICBjaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gMDtcbiAgY2hvcm9wbGV0aE1hcHNsaWRlU3BlZWQ6IG51bWJlcjtcblxuICBASW5wdXQoXCJjaGFydERhdGFTb3VyY2VcIilcbiAgc2V0IGNoYXJ0RGF0YVNvdXJjZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICBcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wYWdlX2NvbmZpZyA9IHZhbHVlO1xuICAgICAgdGhpcy5wYWdlX3Bhcm1zID0gdmFsdWUudGl0bGVQYXJhbXM7XG4gICAgICB0aGlzLnNvcnRCeSA9IHZhbHVlLmtwaUNvbmZpZz8uZGF0YUNvbmZpZz8uc29ydEJ5O1xuICAgICAgLy8gdGhpcy5pblJvYW1lckdlb0NoYXJ0Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcIm1vbnRobHlcIikge1xuICAgICAgICAgIHRoaXMubWFwVFlwZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcFR5cGU7XG4gICAgICAgICAgaWYgKHRoaXMubWFwVFlwZSA9PSBcImdlb01hcFwiKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lvbiA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnJlZ2lvbjtcbiAgICAgICAgICAgIHRoaXMucmVnaW9uQ29kZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnJlZ2lvbkNvZGU7XG4gICAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnNpemV9cHhgO1xuICAgICAgICAgICAgdGhpcy5jaGFydFR5cGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydFR5cGU7XG4gICAgICAgICAgICB0aGlzLmJhY2dyb3VuZENvbG9yID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgdGhpcy5tYXBDb2xvcnMgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jb2xvcnM7XG4gICAgICAgICAgICAvLyBsZXQgY29uZmlnID0gdmFsdWUuY2hhcnRDb25maWc7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRhID0gW1xuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbXCJhcmd1bWVudEZpZWxkXCJdLFxuICAgICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiY2hhcnRWYWx1ZUZpZWxkXCJdLFxuICAgICAgICAgICAgICAgIHsgdHlwZTogXCJzdHJpbmdcIiwgcm9sZTogXCJ0b29sdGlwXCIsIHA6IHsgaHRtbDogdHJ1ZSB9IH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBdLmNvbmNhdChcbiAgICAgICAgICAgICAgZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29sdGlwID0gdGhpcy5nZXRUb29sdGlwKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICBpdGVtW3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiYXJndW1lbnRGaWVsZFwiXV0sXG4gICAgICAgICAgICAgICAgICBpdGVtW3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiY2hhcnRWYWx1ZUZpZWxkXCJdXSxcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXAsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmNoYXJEYXRhID0gZm9ybWF0dGVkRGF0YTtcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZEdvb2dsZUNoYXJ0cygpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkR29vZ2xlQ2hhcnRzKCk7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXBUWXBlID09IFwiYnViYmxlTWFwXCIpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7dmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuc2l6ZX1weGA7XG4gICAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgICB0aGlzLm1hcE9wdGlvbkZvckhlYXRNYXAgPSB7XG4gICAgICAgICAgICAgIHpvb206IHRoaXMuem9vbVZhbHVGb3JBbGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXBUWXBlID09IFwiY2hvcm9wbGV0aE1hcFwiKSB7XG5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVNvdXJjZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgICAgICAgICB0aGlzLmNob3JvcGxldGhUb29sdGlwRGF0YVNvdXJjZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG5cbiAgICAgICAgICAgIGxldCBjaGFydENvbmZpZyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnO1xuXG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7Y2hhcnRDb25maWcuc2l6ZX1weGA7XG5cbiAgICAgICAgICAgIGxldCB0b290VGlwQ29sdW1uID0gY2hhcnRDb25maWcuY2hhcnRfY29uZmlnXG4gICAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmRpc3BsYXlGb3IgPT09ICdtYXAnIHx8IGMuZGlzcGxheUZvciA9PT0gJ3Rvb2x0aXAnKTtcblxuICAgICAgICAgICAgY29uc3QgdmFsdWVGaWVsZCA9XG4gICAgICAgICAgICAgIGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZy5maW5kKGMgPT4gYy5kaXNwbGF5Rm9yID09PSAnbWFwJyk/LmRhdGFGaWVsZDtcblxuICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UuZm9yRWFjaChkID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gZFtjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkXS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGRbdmFsdWVGaWVsZF07XG5cbiAgICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVNvdXJjZS5zZXQoa2V5LCB2YWwpO1xuICAgICAgICAgICAgICB0aGlzLmNob3JvcGxldGhUb29sdGlwRGF0YVNvdXJjZS5zZXQoa2V5LCBkKTtcblxuICAgICAgICAgICAgICB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1pbih0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQsIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgICB0aGlzLm1heENob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1heCh0aGlzLm1heENob3JvcGxldGhNYXBDbnQsIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChjaGFydENvbmZpZy5pc1ZhbHVlRmllbGRSYW5nZVNsaWRlcikge1xuICAgICAgICAgICAgICB0aGlzLmFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXMgPSBbLi4ubmV3IFNldCh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5tYXAoZCA9PiBkW2NoYXJ0Q29uZmlnLnNsaWRlclZhbHVlRmllbGRdKSldO1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSA9IHRoaXMuYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlc1swXTtcbiAgICAgICAgICAgICAgdGhpcy5pc1JhbmdlU2xpZGVyVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hvcm9wbGV0aE1hcERhdGEodGhpcy5zZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWUsIGNoYXJ0Q29uZmlnKTtcbiAgICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwQ2hhcnRDb25maWcgPSBjaGFydENvbmZpZztcbiAgICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwc2xpZGVTcGVlZCA9IGNoYXJ0Q29uZmlnLnNsaWRlU3BlZWQ7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5pbml0Q2hvcm9wbGV0aE1hcChjaGFydENvbmZpZywgdG9vdFRpcENvbHVtbik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAvLyB0aGlzLmxvYWRHb29nbGVDaGFydHMoKTtcbiAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbnMgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgIHRoaXMudG9vdFRpcENvbHVtbiA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZztcbiAgICAgICAgICAgIHRoaXMuY2hhcnRIZWlnaHQgPSBgJHt2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5zaXplfXB4YDtcbiAgICAgICAgICAgIHRoaXMuem9vbVZhbHVGb3JBbGwgPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgICB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnpvb21cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLm1hcE9wdGlvbkZvckhlYXRNYXAgPSB7XG4gICAgICAgICAgICAgIHpvb206IHRoaXMuem9vbVZhbHVGb3JBbGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJkYWlseVwiKSB7XG4gICAgICAgICAgdGhpcy5tYXBUWXBlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcubWFwVHlwZTtcbiAgICAgICAgICBjb25zdCBzb3J0ZWREYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2VcbiAgICAgICAgICAgIC5maWx0ZXIocmVjb3JkID0+IHJlY29yZFt0aGlzLnNvcnRCeV0pXG4gICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gbW9tZW50KGJbdGhpcy5zb3J0QnldKS5kaWZmKG1vbWVudChhW3RoaXMuc29ydEJ5XSkpKTtcbiAgICAgICAgICBjb25zdCBtb3N0UmVjZW50UmVjb3JkID0gc29ydGVkRGF0YVswXTtcblxuICAgICAgICAgIGlmICh2YWx1ZS5lbmREYXRlKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT2JqZWN0cyA9IHNvcnRlZERhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YVt0aGlzLnNvcnRCeV0gPT09IHZhbHVlLmVuZERhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT2JqZWN0cyA9IHNvcnRlZERhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YVt0aGlzLnNvcnRCeV0gPT09IG1vc3RSZWNlbnRSZWNvcmRbdGhpcy5zb3J0QnldKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy5tYXBUWXBlID09IFwiYnViYmxlTWFwXCIpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gdGhpcy5maWx0ZXJlZE9iamVjdHM7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7dmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuc2l6ZX1weGA7XG4gICAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgICB0aGlzLm1hcE9wdGlvbkZvckhlYXRNYXAgPSB7XG4gICAgICAgICAgICAgIHpvb206IHRoaXMuem9vbVZhbHVGb3JBbGxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH1cblxuXG4gICAgfVxuXG4gIH1cblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMubWFwVFlwZSA9PSBcImdlb01hcFwiKSB7XG4gICAgICB0aGlzLmxvYWRHb29nbGVDaGFydHMoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWFwVFlwZSA9PSBcImhlYXRNYXBcIikge1xuICAgICAgaWYgKHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuaGVhdE1hcENhdGVnb3J5ID09IFwiaGVhdE1hcE9ubHlcIikge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9hZEdvb2dsZUhlYXRPbmx5TWFwcyh0aGlzLmxvY2F0aW9ucyk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuaGVhdE1hcENhdGVnb3J5ID09IFwiaGVhdE1hcE1hcmtlclwiKSB7XG4gICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplTWFwKCk7XG4gICAgICAgIHRoaXMuYWRkTWFya2VycygpO1xuXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUhlYXRXaXRoTWFya2VyTWFwKHRoaXMubG9jYXRpb25zKTtcblxuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJjaG9yb3BsZXRoTWFwXCIpIHtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICB0aGlzLmluaXRpYWxpemVNYXAoKTtcbiAgICAgIHRoaXMuYWRkQnViYmxlTWFya2VycygpO1xuICAgIH1cbiAgfVxuXG4gIGxvYWRHb29nbGVDaGFydHMoKSB7XG4gICAgZ29vZ2xlLmNoYXJ0cy5sb2FkKFwiY3VycmVudFwiLCB7XG4gICAgICBwYWNrYWdlczogW3RoaXMuY2hhcnRUeXBlXSxcbiAgICB9KTtcbiAgICBnb29nbGUuY2hhcnRzLnNldE9uTG9hZENhbGxiYWNrKHRoaXMuZHJhd0NoYXJ0LmJpbmQodGhpcykpO1xuICB9XG5cbiAgZHJhd0NoYXJ0KCkge1xuICAgIGNvbnN0IGRhdGEgPSBnb29nbGUudmlzdWFsaXphdGlvbi5hcnJheVRvRGF0YVRhYmxlKHRoaXMuY2hhckRhdGEpO1xuXG4gICAgLy8gY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAvLyAgIHJlZ2lvbjogJ1VTQScsXG4gICAgLy8gICBkaXNwbGF5TW9kZTogJ21hcmtlcnMnLFxuICAgIC8vICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2dyb3VuZENvbG9yLFxuICAgIC8vICAgdG9vbHRpcDogeyBpc0h0bWw6IHRydWUgfSxcbiAgICAvLyAgIGNvbG9yQXhpczogeyBjb2xvcnM6IHRoaXMubWFwQ29sb3JzIH1cbiAgICAvLyB9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLmdldE9wdGlvbkNvbmZpZygpO1xuXG4gICAgY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uR2VvQ2hhcnQoXG4gICAgICB0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnRcbiAgICApO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICAgIGNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRUb29sdGlwKGRhdGEpIHtcbiAgICBsZXQgdG9vbFRpcERhdGEgPSBcIlwiO1xuICAgIHRoaXMudG9vdFRpcENvbHVtbi5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGRhdGFbZWxlbWVudC5kYXRhRmllbGRdID09PSAnbnVtYmVyJykge1xuICAgICAgICB0b29sVGlwRGF0YSArPVxuICAgICAgICAgIFwiPGRpdiBjbGFzcz0naW5saW5lJz48Yj5cIiArXG4gICAgICAgICAgZWxlbWVudC5jYXB0aW9uICtcbiAgICAgICAgICBcIjo8L2I+PC9kaXY+IFwiICtcbiAgICAgICAgICB0aGlzLmNvbW1vblNlcnZpY2Uucm91bmRPZmZUaWxsVHdvKGRhdGFbZWxlbWVudC5kYXRhRmllbGRdLCAyKSArXG4gICAgICAgICAgXCI8YnIgLz5cIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvb2xUaXBEYXRhICs9XG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdpbmxpbmUnPjxiPlwiICtcbiAgICAgICAgICBlbGVtZW50LmNhcHRpb24gK1xuICAgICAgICAgIFwiOjwvYj48L2Rpdj4gXCIgK1xuICAgICAgICAgIGRhdGFbZWxlbWVudC5kYXRhRmllbGRdICtcbiAgICAgICAgICBcIjxiciAvPlwiO1xuICAgICAgfVxuXG5cbiAgICB9KTtcbiAgICByZXR1cm4gdG9vbFRpcERhdGE7XG4gIH1cblxuICBnZXRPcHRpb25Db25maWcoKSB7XG4gICAgaWYgKHRoaXMucmVnaW9uID09ICdjaXR5Jykge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgcmVnaW9uOiB0aGlzLnJlZ2lvbkNvZGUsXG4gICAgICAgIGRpc3BsYXlNb2RlOiAnbWFya2VycycsXG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNncm91bmRDb2xvcixcbiAgICAgICAgdG9vbHRpcDogeyBpc0h0bWw6IHRydWUgfSxcbiAgICAgICAgY29sb3JBeGlzOiB7IGNvbG9yczogdGhpcy5tYXBDb2xvcnMgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFjZ3JvdW5kQ29sb3IsXG4gICAgICAgIHRvb2x0aXA6IHsgaXNIdG1sOiB0cnVlIH0sXG4gICAgICAgIGNvbG9yQXhpczogeyBjb2xvcnM6IHRoaXMubWFwQ29sb3JzIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9XG4gIH1cblxuXG4gIC8vICBHZW8gTWFwIGVuZCAvL1xuXG4gIC8vIEhlYXQgTWFwIHN0YXJ0IC8vXG4gIGluaXRpYWxpemVNYXAoKTogdm9pZCB7XG4gICAgY29uc3QgbWFwT3B0aW9ucyA9IHRoaXMubWFwT3B0aW9uRm9ySGVhdE1hcDtcbiAgICAvLyB7XG4gICAgLy8gICBjZW50ZXI6IHsgbGF0OiAzNy4wOTAyLCBsbmc6IC05NS43MTI5IH0sIC8vIENlbnRlciBvZiB0aGUgVVNBXG4gICAgLy8gICB6b29tOiA1LFxuICAgIC8vIH07XG5cbiAgICBpZiAodGhpcy5tYXBUWXBlID09IFwiYnViYmxlTWFwXCIpIHtcbiAgICAgIG1hcE9wdGlvbnNbXCJzdHlsZXNcIl0gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhbGxcIixcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IHNhdHVyYXRpb246IC0xMDAgfSxcbiAgICAgICAgICAgIHsgbGlnaHRuZXNzOiA3MCB9LFxuICAgICAgICAgICAgeyB2aXNpYmlsaXR5OiBcInNpbXBsaWZpZWRcIiB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5XCIsXG4gICAgICAgICAgZWxlbWVudFR5cGU6IFwibGFiZWxzXCIsXG4gICAgICAgICAgc3R5bGVyczogW1xuICAgICAgICAgICAgeyBsaWdodG5lc3M6IC0zMCB9LCAvLyBEYXJrZW4gbGFiZWxzIGZ1cnRoZXJcbiAgICAgICAgICAgIHsgdmlzaWJpbGl0eTogXCJvblwiIH0sXG4gICAgICAgICAgICB7IGZvbnRXZWlnaHQ6IFwiYm9sZFwiIH0sIC8vIE1ha2UgbGFiZWxzIGJvbGRcbiAgICAgICAgICAgIHsgZm9udFNpemU6IFwiMTJweFwiIH0sIC8vIEluY3JlYXNlIGZvbnQgc2l6ZVxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5XCIsXG4gICAgICAgICAgZWxlbWVudFR5cGU6IFwiZ2VvbWV0cnkuc3Ryb2tlXCIsXG4gICAgICAgICAgc3R5bGVyczogW1xuICAgICAgICAgICAgeyBsaWdodG5lc3M6IC00MCB9LCAvLyBEYXJrZW4gYm9yZGVycyBzaWduaWZpY2FudGx5XG4gICAgICAgICAgICB7IHdlaWdodDogMS41IH0sIC8vIEluY3JlYXNlIGJvcmRlciB0aGlja25lc3NcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgZmVhdHVyZVR5cGU6IFwiYWRtaW5pc3RyYXRpdmUuY291bnRyeVwiLFxuICAgICAgICAgIGVsZW1lbnRUeXBlOiBcImdlb21ldHJ5LmZpbGxcIixcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IGxpZ2h0bmVzczogOTAgfSwgLy8gS2VlcCBmaWxsIHZlcnkgbGlnaHRcbiAgICAgICAgICBdLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoXG4gICAgICAvLyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlZ2lvbnNfZGl2XCIpICxcbiAgICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudCxcbiAgICAgIG1hcE9wdGlvbnNcbiAgICApO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICB9XG5cbiAgLy8gQWRkIG1hcmtlcnMgdG8gdGhlIG1hcFxuICBhZGRNYXJrZXJzKCk6IHZvaWQge1xuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGxvY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBsYXQ6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWNvbjogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uID8ge1xuICAgICAgICAgIHVybDogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uLCAvLyBSZXBsYWNlIHdpdGggeW91ciBpY29uIHBhdGhcbiAgICAgICAgICBzY2FsZWRTaXplOiB7XG4gICAgICAgICAgICB3aWR0aDogMzIsXG4gICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gOiAnJyxcbiAgICAgICAgLy8gdG9vbHRpcFRleHQ6XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIC8vIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICAgIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChtYXJrZXIuZ2V0UG9zaXRpb24oKSk7XG4gICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcbiAgICAgIGxldCBzdHJpbmdXaXRob3V0UXVvdGVzID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcbiAgICAgIGNvbnN0IGluZm9XSW5kb3dEYXRhID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcblxuICAgICAgY29uc3QgaW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KHtcbiAgICAgICAgLy8gY29udGVudDogaW5mb1dJbmRvd0RhdGEsXG4gICAgICAgIGNvbnRlbnQ6IGA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7XCI+XG4gICAgICAgICR7aW5mb1dJbmRvd0RhdGF9XG4gICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG4gICAgICAvLyB7XG4gICAgICAvLyAgIGNvbnRlbnQ6IGA8ZGl2IHN0eWxlPVwiICBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlO2NvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPjxoND4ke1xuICAgICAgLy8gICAgIGxvY2F0aW9uLmNpdHlcbiAgICAgIC8vICAgfTwvaDQ+PHA+VG90YWwgU2FsZXM6ICQke2xvY2F0aW9uLnRvdGFsX3NhbGVzX2Ftb3VudC50b0ZpeGVkKFxuICAgICAgLy8gICAgIDJcbiAgICAgIC8vICAgKX08L3A+PC9kaXY+YCxcbiAgICAgIC8vIH1cblxuICAgICAgbWFya2VyLmFkZExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5mb1dpbmRvdykge1xuICAgICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvV2luZG93Lm9wZW4odGhpcy5tYXAsIG1hcmtlcik7XG4gICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cgPSBpbmZvV2luZG93O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXAuZml0Qm91bmRzKHRoaXMuYm91bmRzKTtcblxuXG4gIH1cblxuICBnZXRJbmZvV2luZG9EYXRhKGRhdGEpIHtcbiAgICBsZXQgdG9vbFRpcERhdGEgPSBgYDtcbiAgICB0aGlzLnRvb3RUaXBDb2x1bW4uZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICB0b29sVGlwRGF0YSArPVxuICAgICAgICAgIGA8ZGl2IGNsYXNzPSdpbmxpbmUnPjxiPmAgK1xuICAgICAgICAgIGVsZW1lbnQuY2FwdGlvbiArXG4gICAgICAgICAgYDo8L2I+PC9kaXY+IGAgK1xuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5yb3VuZE9mZlRpbGxUd28oZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0sIDIpICtcbiAgICAgICAgICBgPGJyIC8+YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvb2xUaXBEYXRhICs9XG4gICAgICAgICAgYDxkaXYgY2xhc3M9J2lubGluZSc+PGI+YCArXG4gICAgICAgICAgZWxlbWVudC5jYXB0aW9uICtcbiAgICAgICAgICBgOjwvYj48L2Rpdj4gYCArXG4gICAgICAgICAgZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0gK1xuICAgICAgICAgIGA8YnIgLz5gO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0b29sVGlwRGF0YTtcbiAgfVxuICAvLyBIZWF0IE1hcCBFbmQgLy9cblxuICAvL2hlYXQgb25seSBtYXAgc3RhcnQgLy9cblxuICBsb2FkR29vZ2xlSGVhdE9ubHlNYXBzKGRhdGEpOiB2b2lkIHtcbiAgICB0aGlzLmhlYXRtYXBEYXRhID0gW107XG4gICAgZGF0YS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBsZXQgbGF0aXR1ZGUgPSBwYXJzZUZsb2F0KFxuICAgICAgICBlbGVtZW50W3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICApO1xuICAgICAgbGV0IGxvZ3RpdHVkZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgIGVsZW1lbnRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICApO1xuICAgICAgLy8gbGV0IHdlaWdodCA9IChjZWxsTm9kZS5wcm9wZXJ0aWVzWydXZWlnaHQnXSAhPSB1bmRlZmluZWQpID8gY2VsbE5vZGUucHJvcGVydGllc1snV2VpZ2h0J10gOiBcIk5BXCI7XG4gICAgICB0aGlzLmhlYXRtYXBEYXRhLnB1c2goe1xuICAgICAgICBsb2NhdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKVxuICAgICAgICAvLyB3ZWlnaHQ6IHBhcnNlRmxvYXQod2VpZ2h0KSxcblxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKSk7XG4gICAgfSk7XG4gICAgY29uc3QgbWFwT3B0aW9ucyA9IHtcbiAgICAgIC8vIGNlbnRlcjoge1xuICAgICAgLy8gICBsYXQ6IHBhcnNlRmxvYXQodGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jZW50ZXJMYXRpdHVkZSksXG4gICAgICAvLyAgIGxuZzogcGFyc2VGbG9hdCh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNlbnRlckxvbmdpdHVkZSksXG4gICAgICAvLyB9LFxuICAgICAgLy8gem9vbTogcGFyc2VGbG9hdCh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnpvb20pXG4gICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsXG4gICAgfTtcblxuXG5cblxuICAgIHRoaXMubWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcCh0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQsIG1hcE9wdGlvbnMpO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyh0aGlzLmJvdW5kcyk7XG4gICAgdGhpcy5oZWF0bWFwID0gbmV3IGdvb2dsZS5tYXBzLnZpc3VhbGl6YXRpb24uSGVhdG1hcExheWVyKHtcbiAgICAgIGRhdGE6IHRoaXMuaGVhdG1hcERhdGEsXG4gICAgICBtYXA6IHRoaXMubWFwLFxuICAgIH0pO1xuXG4gIH1cblxuXG4gIC8vaGVhdCBvbmx5IG1hcCBlbmQgLy9cblxuICAvL2hlYXQgYW5kIE1hcmtlciAgbWFwIFN0YXJ0IC8vXG4gIGluaXRpYWxpemVIZWF0V2l0aE1hcmtlck1hcChkYXRhKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXBcbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAodGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LCB7XG4gICAgICAvLyBjZW50ZXI6IHsgbGF0OiAzNy43NzQ5LCBsbmc6IC0xMjIuNDE5NCB9LFxuICAgICAgem9vbTogcGFyc2VGbG9hdChcbiAgICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy56b29tXG4gICAgICApLFxuICAgIH0pO1xuICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNoYXJ0SGVpZ2h0O1xuICAgIC8vIEluaXRpYWxpemUgaGVhdG1hcCBsYXllclxuICAgIHRoaXMuaGVhdG1hcERhdGEgPSBbXTtcbiAgICBkYXRhLmZvckVhY2goZWxlbWVudCA9PiB7XG5cbiAgICAgIGxldCBsYXRpdHVkZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgIGVsZW1lbnRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMYXRpdHVkZV1cbiAgICAgICk7XG4gICAgICBsZXQgbG9ndGl0dWRlID0gcGFyc2VGbG9hdChcbiAgICAgICAgZWxlbWVudFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICk7XG4gICAgICB0aGlzLmhlYXRtYXBEYXRhLnB1c2goe1xuICAgICAgICBsb2NhdGlvbjogbmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKVxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobmV3IGdvb2dsZS5tYXBzLkxhdExuZyhsYXRpdHVkZSwgbG9ndGl0dWRlKSk7XG4gICAgfSk7XG4gICAgdGhpcy5oZWF0bWFwID0gbmV3IGdvb2dsZS5tYXBzLnZpc3VhbGl6YXRpb24uSGVhdG1hcExheWVyKHtcbiAgICAgIGRhdGE6IHRoaXMuaGVhdG1hcERhdGEsXG4gICAgICBtYXA6IHRoaXMubWFwLFxuICAgIH0pO1xuICAgIC8vIEluaXRpYWxpemUgbWFya2Vyc1xuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGxvY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBsYXQ6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWNvbjogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uID8ge1xuICAgICAgICAgIHVybDogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5pY29uLCAvLyBSZXBsYWNlIHdpdGggeW91ciBpY29uIHBhdGhcbiAgICAgICAgICBzY2FsZWRTaXplOiB7XG4gICAgICAgICAgICB3aWR0aDogMzIsXG4gICAgICAgICAgICBoZWlnaHQ6IDMyLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0gOiAnJyxcbiAgICAgICAgLy8gdG9vbHRpcFRleHQ6XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIC8vIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICAgIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChtYXJrZXIuZ2V0UG9zaXRpb24oKSk7XG4gICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpO1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcblxuICAgICAgLy8gQWRkIGFuIGluZm8gd2luZG93XG4gICAgICBjb25zdCBpbmZvV0luZG93RGF0YSA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG4gICAgICBjb25zdCBpbmZvV2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coe1xuICAgICAgICBjb250ZW50OiBgPGRpdiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPlxuICAgICAgICAgICAgJHtpbmZvV0luZG93RGF0YX1cbiAgICAgICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG5cblxuICAgICAgbWFya2VyLmFkZExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5mb1dpbmRvdykge1xuICAgICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cuY2xvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpbmZvV2luZG93Lm9wZW4odGhpcy5tYXAsIG1hcmtlcik7XG4gICAgICAgIHRoaXMuY3VycmVudEluZm9XaW5kb3cgPSBpbmZvV2luZG93O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXAuZml0Qm91bmRzKHRoaXMuYm91bmRzKTtcblxuICAgIC8vIEFkZCBsaXN0ZW5lciBmb3Igem9vbSBjaGFuZ2VzXG4gICAgdGhpcy5tYXAuYWRkTGlzdGVuZXIoJ3pvb21fY2hhbmdlZCcsICgpID0+IHRoaXMuaGFuZGxlWm9vbUNoYW5nZSgpKTtcbiAgfVxuXG4gIGhhbmRsZVpvb21DaGFuZ2UoKSB7XG4gICAgY29uc3Qgem9vbUxldmVsID0gdGhpcy5tYXAuZ2V0Wm9vbSgpO1xuICAgIGlmICh6b29tTGV2ZWwgPCA1KSB7XG4gICAgICAvLyBTaG93IGhlYXRtYXAgYW5kIGhpZGUgbWFya2Vyc1xuICAgICAgdGhpcy5oZWF0bWFwLnNldE1hcCh0aGlzLm1hcCk7XG4gICAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiBtYXJrZXIuc2V0TWFwKG51bGwpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGlkZSBoZWF0bWFwIGFuZCBzaG93IG1hcmtlcnNcbiAgICAgIHRoaXMuaGVhdG1hcC5zZXRNYXAobnVsbCk7XG4gICAgICB0aGlzLm1hcmtlcnMuZm9yRWFjaCgobWFya2VyKSA9PiBtYXJrZXIuc2V0TWFwKHRoaXMubWFwKSk7XG4gICAgfVxuICB9XG5cbiAgLy9oZWF0IGFuZCBNYXJrZXIgIG1hcCBFbmQgLy9cbiAgLy9CdWJibGUgQ2hhcnQgU3RhcnRcbiAgYWRkQnViYmxlTWFya2VycygpOiB2b2lkIHtcbiAgICB0aGlzLnByZXBhcmVCdWJibGVEYXRhKCk7XG4gICAgY29uc29sZS5sb2codGhpcy5sb2NhdGlvbnMpO1xuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGxvY2F0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtYXJrZXIgPSBuZXcgZ29vZ2xlLm1hcHMuTWFya2VyKHtcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBsYXQ6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgICAgICksXG4gICAgICAgICAgbG5nOiBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgbG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMb25naXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgfSxcbiAgICAgICAgaWNvbjoge1xuICAgICAgICAgIHBhdGg6IGdvb2dsZS5tYXBzLlN5bWJvbFBhdGguQ0lSQ0xFLFxuICAgICAgICAgIHNjYWxlOiBNYXRoLnJvdW5kKGxvY2F0aW9uLnNhbGVzX3BlcmNlbnRhZ2UpLCAvLyBBZGp1c3QgYnViYmxlIHNpemVcbiAgICAgICAgICBmaWxsQ29sb3I6IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYnViYmxlQ29sb3IsXG4gICAgICAgICAgZmlsbE9wYWNpdHk6IDAuNixcbiAgICAgICAgICBzdHJva2VXZWlnaHQ6IDAsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHRvb2x0aXBUZXh0OlxuICAgICAgICBtYXA6IHRoaXMubWFwLFxuICAgICAgICAvLyB0aXRsZTogYCR7bG9jYXRpb24uY2l0eX06ICQke2xvY2F0aW9uLnRvdGFsX3NhbGVzX2Ftb3VudH1gLFxuICAgICAgICB0aXRsZTogYCR7bG9jYXRpb24uY2l0eX06ICQke2xvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYWdydW1lbnRWYWx1ZV1cbiAgICAgICAgICB9YCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ib3VuZHMuZXh0ZW5kKG1hcmtlci5nZXRQb3NpdGlvbigpKTtcbiAgICAgIHRoaXMubWFya2Vycy5wdXNoKG1hcmtlcik7XG5cbiAgICAgIC8vIEFkZCBhbiBpbmZvIHdpbmRvd1xuICAgICAgbGV0IHN0cmluZ1dpdGhvdXRRdW90ZXMgPSB0aGlzLmdldEluZm9XaW5kb0RhdGEobG9jYXRpb24pO1xuICAgICAgY29uc3QgaW5mb1dJbmRvd0RhdGEgPSB0aGlzLmdldEluZm9XaW5kb0RhdGEobG9jYXRpb24pO1xuXG4gICAgICBjb25zdCBpbmZvV2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coe1xuICAgICAgICAvLyBjb250ZW50OiBpbmZvV0luZG93RGF0YSxcbiAgICAgICAgY29udGVudDogYDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMjBweDtcIj5cbiAgICAgICAgICR7aW5mb1dJbmRvd0RhdGF9XG4gICAgICAgPC9kaXY+YCxcbiAgICAgIH0pO1xuXG4gICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmZvV2luZG93KSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGluZm9XaW5kb3cub3Blbih0aGlzLm1hcCwgbWFya2VyKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdyA9IGluZm9XaW5kb3c7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLm1hcC5maXRCb3VuZHModGhpcy5ib3VuZHMpO1xuICB9XG5cbiAgcHJlcGFyZUJ1YmJsZURhdGEoKSB7XG4gICAgLy8gU3RlcCAxOiBGaW5kIG1pbiBhbmQgbWF4IHRvdGFsX3NhbGVzX2Ftb3VudFxuICAgIGNvbnN0IG1pblNhbGVzID0gTWF0aC5taW4oXG4gICAgICAuLi50aGlzLmxvY2F0aW9ucy5tYXAoXG4gICAgICAgIChkKSA9PiBkW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYWdydW1lbnRWYWx1ZV1cbiAgICAgIClcbiAgICApO1xuICAgIGNvbnN0IG1heFNhbGVzID0gTWF0aC5tYXgoXG4gICAgICAuLi50aGlzLmxvY2F0aW9ucy5tYXAoXG4gICAgICAgIChkKSA9PiBkW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYWdydW1lbnRWYWx1ZV1cbiAgICAgIClcbiAgICApO1xuXG4gICAgLy8gU3RlcCAyOiBEZWZpbmUgbWluIGFuZCBtYXggcGVyY2VudGFnZSB2YWx1ZXNcbiAgICBjb25zdCBtaW5QZXJjZW50YWdlID1cbiAgICAgIHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYnViYmxlTWluaW11bVNpemU7XG4gICAgY29uc3QgbWF4UGVyY2VudGFnZSA9XG4gICAgICB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmJ1YmJsZU1heGltdW1TaXplO1xuXG4gICAgLy8gU3RlcCAzOiBOb3JtYWxpemUgZnVuY3Rpb25cbiAgICBjb25zdCBub3JtYWxpemUgPSAodmFsdWUsIG1pbiwgbWF4KSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pKSAqIChtYXhQZXJjZW50YWdlIC0gbWluUGVyY2VudGFnZSkgK1xuICAgICAgICBtaW5QZXJjZW50YWdlXG4gICAgICApO1xuICAgIH07XG5cbiAgICAvLyBTdGVwIDQ6IEFzc2lnbiBjYWxjdWxhdGVkIHBlcmNlbnRhZ2UgdG8gZWFjaCBvYmplY3RcbiAgICB0aGlzLmxvY2F0aW9ucy5mb3JFYWNoKChkKSA9PiB7XG4gICAgICBkLnNhbGVzX3BlcmNlbnRhZ2UgPSBNYXRoLm1pbihcbiAgICAgICAgTWF0aC5tYXgoXG4gICAgICAgICAgbm9ybWFsaXplKFxuICAgICAgICAgICAgZFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmFncnVtZW50VmFsdWVdLFxuICAgICAgICAgICAgbWluU2FsZXMsXG4gICAgICAgICAgICBtYXhTYWxlc1xuICAgICAgICAgICksXG4gICAgICAgICAgbWluUGVyY2VudGFnZVxuICAgICAgICApLFxuICAgICAgICBtYXhQZXJjZW50YWdlXG4gICAgICApO1xuICAgIH0pO1xuICB9XG4gIC8vQnViYmxlIENoYXJ0IEVuZFxuXG4gIC8vIGNob3JvcGxldGhNYXAgc3RhcnQgLy9cblxuICBnZXRDb2xvcihjbnQ6IG51bWJlciwgc3RhcnRDb2xvcjogc3RyaW5nLCBlbmRDb2xvcjogc3RyaW5nLCBtaW5Db3VudDogbnVtYmVyLCBtYXhDb3VudDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBpZiAoY250ID09PSB1bmRlZmluZWQgfHwgY250ID09PSBudWxsIHx8IG1heENvdW50ID09PSBtaW5Db3VudCkge1xuICAgICAgcmV0dXJuICcjY2NjY2NjJztcbiAgICB9XG5cbiAgICAvLyBjb25zdCByYXRpbyA9IE1hdGgubWluKFxuICAgIC8vICAgTWF0aC5tYXgoKGNudCAtIG1pbkNvdW50KSAvIChtYXhDb3VudCAtIG1pbkNvdW50KSwgMCksXG4gICAgLy8gICAxXG4gICAgLy8gKTtcblxuICAgIGNvbnN0IHJhd1JhdGlvID1cbiAgICAgIChjbnQgLSBtaW5Db3VudCkgLyAobWF4Q291bnQgLSBtaW5Db3VudCk7XG5cbiAgICAvLyBnYW1tYSA8IDEgZXhhZ2dlcmF0ZXMgZGlmZmVyZW5jZXNcbiAgICBjb25zdCBnYW1tYSA9IDAuMjsgLy8gdHJ5IDAuNCDigJMgMC43XG4gICAgY29uc3QgcmF0aW8gPSBNYXRoLnBvdyhcbiAgICAgIE1hdGgubWluKE1hdGgubWF4KHJhd1JhdGlvLCAwKSwgMSksXG4gICAgICBnYW1tYVxuICAgICk7XG5cbiAgICBjb25zdCBzdGFydCA9IHRoaXMuaGV4VG9SZ2Ioc3RhcnRDb2xvcik7XG4gICAgY29uc3QgZW5kID0gdGhpcy5oZXhUb1JnYihlbmRDb2xvcik7XG5cbiAgICBjb25zdCByID0gdGhpcy5sZXJwKHN0YXJ0LnIsIGVuZC5yLCByYXRpbyk7XG4gICAgY29uc3QgZyA9IHRoaXMubGVycChzdGFydC5nLCBlbmQuZywgcmF0aW8pO1xuICAgIGNvbnN0IGIgPSB0aGlzLmxlcnAoc3RhcnQuYiwgZW5kLmIsIHJhdGlvKTtcblxuICAgIC8vIGNvbnNvbGUubG9nKGBDb2xvciBmb3IgY291bnQgJHtjbnR9OiByZ2IoJHtyfSwgJHtnfSwgJHtifSlgKTtcblxuICAgIHJldHVybiBgcmdiKCR7cn0sICR7Z30sICR7Yn0pYDtcbiAgfVxuXG4gIGxlcnAoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHJhdGlvOiBudW1iZXIpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChzdGFydCArIChlbmQgLSBzdGFydCkgKiByYXRpbyk7XG4gIH1cbiAgaGV4VG9SZ2IoaGV4OiBzdHJpbmcpIHtcbiAgICBjb25zdCBjbGVhbkhleCA9IGhleC5yZXBsYWNlKCcjJywgJycpO1xuICAgIGNvbnN0IGJpZ2ludCA9IHBhcnNlSW50KGNsZWFuSGV4LCAxNik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcjogKGJpZ2ludCA+PiAxNikgJiAyNTUsXG4gICAgICBnOiAoYmlnaW50ID4+IDgpICYgMjU1LFxuICAgICAgYjogYmlnaW50ICYgMjU1XG4gICAgfTtcbiAgfVxuXG5cbiAgaW5pdENob3JvcGxldGhNYXAoY2hhcnRDb25maWc6IGFueSwgdG9vdFRpcENvbHVtbjogYW55W10pOiB2b2lkIHtcblxuXG4gICAgdGhpcy5tYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKFxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnb29nbGVtYXBcIikgYXMgSFRNTEVsZW1lbnQsXG4gICAgICB7XG4gICAgICAgIGNlbnRlcjogeyBsYXQ6IHBhcnNlRmxvYXQoY2hhcnRDb25maWcuY2VudGVyTGF0KSwgbG5nOiBwYXJzZUZsb2F0KGNoYXJ0Q29uZmlnLmNlbnRlckxuZykgfSxcbiAgICAgICAgem9vbTogcGFyc2VJbnQoY2hhcnRDb25maWcuem9vbSlcbiAgICAgIH1cbiAgICApO1xuXG5cbiAgICB0aGlzLm1hcC5kYXRhLmxvYWRHZW9Kc29uKGNoYXJ0Q29uZmlnLmdqc29uRmlsZVBhdGgpO1xuICAgIHRoaXMubWFwLmRhdGEuc2V0U3R5bGUoZmVhdHVyZSA9PiB0aGlzLmdldEZlYXR1cmVTdHlsZShmZWF0dXJlLCBjaGFydENvbmZpZywgdGhpcy5taW5DaG9yb3BsZXRoTWFwQ250LCB0aGlzLm1heENob3JvcGxldGhNYXBDbnQpKTtcblxuICAgIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdygpO1xuXG4gICAgdGhpcy5tYXAuZGF0YS5hZGRMaXN0ZW5lcignbW91c2VvdmVyJywgKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGRpc3RyaWN0ID0gZXZlbnQuZmVhdHVyZS5nZXRQcm9wZXJ0eSgnZCcpO1xuICAgICAgY29uc3Qga2V5ID0gZGlzdHJpY3Q/LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgIGNvbnN0IHJvdyA9IHRoaXMuY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlLmdldChrZXkpO1xuXG4gICAgICBpbmZvV2luZG93LnNldENvbnRlbnQoXG4gICAgICAgIHRoaXMuYnVpbGRJbmZvV2luZG93Q29udGVudChkaXN0cmljdCwgcm93LCB0b290VGlwQ29sdW1uKVxuICAgICAgKTtcblxuICAgICAgaW5mb1dpbmRvdy5zZXRQb3NpdGlvbihldmVudC5sYXRMbmcpO1xuICAgICAgaW5mb1dpbmRvdy5vcGVuKHRoaXMubWFwKTtcbiAgICB9KTtcblxuICAgIHRoaXMubWFwLmRhdGEuYWRkTGlzdGVuZXIoJ21vdXNlb3V0JywgKCkgPT4gaW5mb1dpbmRvdy5jbG9zZSgpKTtcbiAgfVxuXG5cbiAgYnVpbGRJbmZvV2luZG93Q29udGVudChkaXN0cmljdDogc3RyaW5nLCByb3c6IGFueSwgdG9vdFRpcENvbHVtbjogYW55W10pOiBzdHJpbmcge1xuXG4gICAgY29uc3Qgcm93cyA9IHRvb3RUaXBDb2x1bW4ubWFwKGMgPT4gYFxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OmZsZXg7IGp1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO1wiPlxuICAgICAgPHNwYW4+JHtjLmNhcHRpb259PC9zcGFuPlxuICAgICAgPHN0cm9uZz4ke3Jvdz8uW2MuZGF0YUZpZWxkXSA/PyAnTm8gZGF0YSd9PC9zdHJvbmc+XG4gICAgPC9kaXY+XG4gIGApLmpvaW4oJycpO1xuXG4gICAgcmV0dXJuIGBcbiAgICA8ZGl2IHN0eWxlPVwiXG4gICAgICBjb2xvcjojMDAwO1xuICAgICAgYmFja2dyb3VuZDojZmZmO1xuICAgICAgcGFkZGluZzo4cHggMTJweDtcbiAgICAgIGZvbnQtc2l6ZToxM3B4O1xuICAgICAgbWluLXdpZHRoOjE1MHB4O1xuICAgIFwiPlxuICAgICAgPGRpdiBzdHlsZT1cImZvbnQtd2VpZ2h0OjYwMDsgbWFyZ2luLWJvdHRvbTo2cHg7XCI+XG4gICAgICAgICR7ZGlzdHJpY3R9IDogXG4gICAgICA8L2Rpdj5cbiAgICAgICR7cm93c31cbiAgICA8L2Rpdj5cbiAgYDtcbiAgfVxuXG5cbiAgdXBkYXRlQ2hvcm9wbGV0aE1hcERhdGEoeWVhcjogc3RyaW5nLCBjaGFydENvbmZpZzogYW55KSB7XG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVNvdXJjZS5jbGVhcigpO1xuICAgIHRoaXMuY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlLmNsZWFyKCk7XG5cbiAgICBsZXQgbWluQ2hvcm9wbGV0aE1hcENudCA9IEluZmluaXR5O1xuICAgIGxldCBtYXhDaG9yb3BsZXRoTWFwQ250ID0gLUluZmluaXR5O1xuXG4gICAgY29uc3QgdmFsdWVGaWVsZCA9IGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZy5maW5kKFxuICAgICAgYyA9PiBjLmRpc3BsYXlGb3IgPT09ICdtYXAnXG4gICAgKT8uZGF0YUZpZWxkO1xuXG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVxuICAgICAgLmZpbHRlcihkID0+IGRbY2hhcnRDb25maWcuc2xpZGVyVmFsdWVGaWVsZF0gPT09IHllYXIpXG4gICAgICAuZm9yRWFjaChkID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gZC5kaXN0cmljdC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhU291cmNlLnNldChrZXksIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgICB0aGlzLmNob3JvcGxldGhUb29sdGlwRGF0YVNvdXJjZS5zZXQoa2V5LCBkKTtcblxuICAgICAgICBtaW5DaG9yb3BsZXRoTWFwQ250ID0gTWF0aC5taW4obWluQ2hvcm9wbGV0aE1hcENudCwgZFt2YWx1ZUZpZWxkXSk7XG4gICAgICAgIG1heENob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1heChtYXhDaG9yb3BsZXRoTWFwQ250LCBkW3ZhbHVlRmllbGRdKTtcbiAgICAgIH0pO1xuICAgIGlmICh0aGlzLm1hcCkge1xuICAgICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICAgIHRoaXMubWFwLmRhdGEuZm9yRWFjaChmZWF0dXJlID0+IHtcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMuZ2V0RmVhdHVyZVN0eWxlKGZlYXR1cmUsIGNoYXJ0Q29uZmlnLCB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQsIHRoaXMubWF4Q2hvcm9wbGV0aE1hcENudCk7XG5cbiAgICAgICAgICB0aGlzLm1hcC5kYXRhLm92ZXJyaWRlU3R5bGUoZmVhdHVyZSwgc3R5bGUpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRGZWF0dXJlU3R5bGUoZmVhdHVyZTogYW55LCBjaGFydENvbmZpZzogYW55LCBtaW5Db3VudCwgbWF4Q291bnQpIHtcbiAgICBjb25zdCBkaXN0cmljdE5hbWUgPSBmZWF0dXJlLmdldFByb3BlcnR5KCdkJyk/LnRvVXBwZXJDYXNlKCk7XG4gICAgY29uc3QgY250ID0gdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVNvdXJjZS5nZXQoZGlzdHJpY3ROYW1lKTtcbiAgICBjb25zb2xlLmxvZyhkaXN0cmljdE5hbWUsIGNudCwgdGhpcy5nZXRDb2xvcihjbnQsIGNoYXJ0Q29uZmlnLmNvbG9yT25lLCBjaGFydENvbmZpZy5jb2xvclR3bywgbWluQ291bnQsIG1heENvdW50KSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGxDb2xvcjogdGhpcy5nZXRDb2xvcihjbnQsIGNoYXJ0Q29uZmlnLmNvbG9yT25lLCBjaGFydENvbmZpZy5jb2xvclR3bywgbWluQ291bnQsIG1heENvdW50KSxcbiAgICAgIHN0cm9rZUNvbG9yOiAnIzU1NScsXG4gICAgICBzdHJva2VXZWlnaHQ6IDEsXG4gICAgICBmaWxsT3BhY2l0eTogMC43NVxuICAgIH07XG4gIH1cblxuICAvLyBjaG9yb3BsZXRoTWFwIHN0YXJ0IC8vXG5cblxuXG5cbiAgdG9nZ2xlUGxheSgpIHtcbiAgICBpZiAodGhpcy5pc1BsYXlpbmcpIHtcbiAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGF5KCk7XG4gICAgfVxuICB9XG5cbiAgcGxheSgpIHtcbiAgICB0aGlzLmlzUGxheWluZyA9IHRydWU7XG4gICAgdGhpcy5wbGF5SW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4IDwgdGhpcy5hbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4Kys7XG4gICAgICAgIHRoaXMudXBkYXRlWWVhckJ5SW5kZXgodGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGF1c2UoKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLmNob3JvcGxldGhNYXBzbGlkZVNwZWVkKTtcblxuICB9XG5cbiAgcGF1c2UoKSB7XG4gICAgdGhpcy5pc1BsYXlpbmcgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5wbGF5SW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5wbGF5SW50ZXJ2YWwpO1xuICAgICAgdGhpcy5wbGF5SW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJlc3RhcnQoKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCA9IDA7XG4gICAgdGhpcy51cGRhdGVZZWFyQnlJbmRleCh0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXgpO1xuICB9XG5cbiAgb25ZZWFyQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnBhdXNlKCk7IC8vIHN0b3AgYXV0b3BsYXkgd2hlbiB1c2VyIG1vdmVzIHNsaWRlclxuICAgIHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCA9ICtldmVudC50YXJnZXQudmFsdWU7XG4gICAgdGhpcy51cGRhdGVZZWFyQnlJbmRleCh0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXgpO1xuICB9XG5cbiAgc2V0WWVhckJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnVwZGF0ZVllYXJCeUluZGV4KGluZGV4KTtcbiAgfVxuXG4gIHVwZGF0ZVllYXJCeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSA9IHRoaXMuYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlc1tpbmRleF07XG4gICAgdGhpcy51cGRhdGVDaG9yb3BsZXRoTWFwRGF0YSh0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSwgdGhpcy5jaG9yb3BsZXRoTWFwQ2hhcnRDb25maWcpO1xuICB9XG5cblxuICAvLyBzZXRZZWFyQnlJbmRleChpbmRleDogbnVtYmVyKSB7XG4gIC8vICAgdGhpcy5zZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWUgPSB0aGlzLmFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXNbaW5kZXhdO1xuICAvLyAgIHRoaXMudXBkYXRlQ2hvcm9wbGV0aE1hcERhdGEodGhpcy5zZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWUsIHRoaXMuY2hvcm9wbGV0aE1hcENoYXJ0Q29uZmlnKTtcbiAgLy8gfVxuXG4gIC8vIG9uWWVhckNoYW5nZShldmVudDogRXZlbnQpIHtcbiAgLy8gICBjb25zdCBpbmRleCA9ICsoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAvLyAgIHRoaXMuc2V0WWVhckJ5SW5kZXgoaW5kZXgpO1xuICAvLyB9XG5cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwibXgtMiBiZy1ncmF5LTgwMFwiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBiZy1ncmF5LTgwMCBwLTJcIj5cbiAgICAgIDxhcHAtbG9hZGVyPjwvYXBwLWxvYWRlcj5cbiAgICA8L2Rpdj5cbiAgPC9uZy1jb250YWluZXI+XG5cbiAgPGRpdiBjbGFzcz1cIm14LTIgcGItMlwiPlxuXG4gICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgIDxkaXYgaWQ9XCJyZWdpb25zX2RpdlwiICNnb29nbE1hcCBzdHlsZT1cIndpZHRoOiAxMDAlXCI+PC9kaXY+XG4gICAgIFxuICAgICAgPGRpdiBpZD1cImdvb2dsZW1hcFwiIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgW3N0eWxlLmhlaWdodF09XCJjaGFydEhlaWdodFwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIiBteC1hdXRvIHctZnVsbCBtdC0zXCIgKm5nSWY9XCJpc1JhbmdlU2xpZGVyVmlzaWJsZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIG1iLTJcIj5cblxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJ0ZXh0LXdoaXRlIHB4LTMgcHktMiByb3VuZGVkIGJnLWdyYXktODAwIGhvdmVyOmJnLWdyYXktNzAwXCIgKGNsaWNrKT1cInRvZ2dsZVBsYXkoKVwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYVwiIFtuZ0NsYXNzXT1cImlzUGxheWluZyA/ICdmYS1wYXVzZScgOiAnZmEtcGxheSdcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBzcGFjZS14LTIgdGV4dC1zbSBmb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCB5ZWFyIG9mIGFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBzZWxlY3Qtbm9uZSBweC0yIHB5LTEgcm91bmRlZC1tZCB0cmFuc2l0aW9uXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2JnLWJsYWNrIHRleHQtd2hpdGUgc2hhZG93JzogeWVhciA9PT0gc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlLFxuICAgICAgICAgICAgJ3RleHQtZ3JheS0zMDAgaG92ZXI6dGV4dC13aGl0ZSc6IHllYXIgIT09IHNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZVxuICAgICAgICAgIH1cIiAoY2xpY2spPVwic2V0WWVhckJ5SW5kZXgoaSlcIj5cbiAgICAgICAgICAgICAgICB7eyB5ZWFyIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRleHQtd2hpdGUgcHgtMyBweS0yIHJvdW5kZWQgYmctZ3JheS04MDAgaG92ZXI6YmctZ3JheS03MDBcIiAoY2xpY2spPVwicmVzdGFydCgpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXJlZnJlc2hcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJyYW5nZVwiIGNsYXNzPVwidy1mdWxsIGgtMiByb3VuZGVkLWxnIGFwcGVhcmFuY2Utbm9uZSBjdXJzb3ItcG9pbnRlclxuICAgICAgICAgICBiZy1ncmFkaWVudC10by1yIGZyb20tZ3JlZW4tNDAwIHZpYS15ZWxsb3ctNDAwIHRvLXJlZC01MDBcIiBbbWluXT1cIjBcIlxuICAgICAgICAgIFttYXhdPVwiYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlcy5sZW5ndGggLSAxXCIgW3ZhbHVlXT1cImNob3JvcGxldGhNYXBDdXJyZW50SW5kZXhcIiAoaW5wdXQpPVwib25ZZWFyQ2hhbmdlKCRldmVudClcIiAvPlxuICAgICAgPC9kaXY+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuXG5cbiAgPC9kaXY+XG5cblxuPC9kaXY+Il19
697
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1nZW8tY2hhcnQvZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sTUFBTSxNQUFNLCtDQUErQyxDQUFDOzs7OztBQVNuRSxNQUFNLE9BQU8sc0JBQXNCO0lBME1qQyxZQUFtQixhQUE0QjtRQUE1QixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQXRML0MsWUFBTyxHQUFHLEVBQUUsQ0FBQztRQUliLFdBQU0sR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFdkIseUJBQW9CLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0QsY0FBUyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ2xELGlDQUE0QixHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzdFLHFCQUFnQixHQUFZLElBQUksQ0FBQztRQVMxQywrQkFBMEIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUN2RCx3QkFBbUIsR0FBVyxRQUFRLENBQUM7UUFDdkMsd0JBQW1CLEdBQVcsQ0FBQyxRQUFRLENBQUE7UUFDdkMsaUNBQTRCLEdBQVUsRUFB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LHVCQUF1QixDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUM3RixDQUFDOzttSEF2OEJVLHNCQUFzQjt1R0FBdEIsc0JBQXNCLHdZQ25CbkMsczREQWlETTsyRkQ5Qk8sc0JBQXNCO2tCQUpsQyxTQUFTOytCQUNFLHFCQUFxQjtvR0FJUixRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBeUJKLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxTQUFTO3NCQUF6QixNQUFNO2dCQUNVLDRCQUE0QjtzQkFBNUMsTUFBTTtnQkFDRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBeUJGLGVBQWU7c0JBRGxCLEtBQUs7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcbi8vIGltcG9ydCBtb21lbnQgZnJvbSBcIm1vbWVudFwiO1xuZGVjbGFyZSB2YXIgZ29vZ2xlOiBhbnk7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJhcHAtZ2FtbWEtZ2VvLWNoYXJ0XCIsXG4gIHRlbXBsYXRlVXJsOiBcIi4vZ2FtbWEtZ2VvLWNoYXJ0LmNvbXBvbmVudC5odG1sXCIsXG59KVxuZXhwb3J0IGNsYXNzIEdhbW1hR2VvQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQge1xuICBAVmlld0NoaWxkKFwiZ29vZ2xNYXBcIikgZ29vZ2xNYXA6IEVsZW1lbnRSZWY7XG4gIGNoYXJEYXRhOiBhbnk7XG4gIGNoYXJ0SGVpZ2h0OiBhbnk7XG4gIGJhY2dyb3VuZENvbG9yOiBhbnk7XG4gIG1hcENvbG9yczogYW55O1xuICBjaGFydFR5cGU6IGFueTtcbiAgdG9vdFRpcENvbHVtbjogYW55O1xuICByZWdpb246IGFueTtcbiAgcmVnaW9uQ29kZTogYW55O1xuICAvLyBoZWF0IE1hcCBzdGFydFxuICBtYXA6IGFueTtcbiAgbG9jYXRpb25zO1xuICBtYXBUWXBlOiBhbnk7XG4gIG1hcE9wdGlvbkZvckhlYXRNYXA6IHtcbiAgICB6b29tOiBudW1iZXI7XG4gIH07XG4gIGN1cnJlbnRJbmZvV2luZG93OiBhbnk7XG4gIC8vIGhlYXQgTWFwIGVuZFxuICAvL2hlYXQgb25seSBtYXAgc3RhcnQgLy9cbiAgbWFya2VycyA9IFtdO1xuICBoZWF0bWFwOiBhbnk7XG4gIGhlYXRtYXBEYXRhOiBhbnk7XG4gIHpvb21WYWx1Rm9yQWxsOiBudW1iZXI7XG4gIGJvdW5kcyA9IG5ldyBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMoKTtcbiAgLy9oZWF0IG9ubHkgbWFwIGVuZCAvL1xuICBAT3V0cHV0KCkgcHVibGljIGdldFRhYmxlQ29uZmlnT3V0UHV0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvUm93Q2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9ucmlnaHRDbGlja0NvbnRleHRTZWxlY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBASW5wdXQoKSByaWdodENsaWNrRW5hYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNMb2FkZXI6IGJvb2xlYW47XG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgc29ydEJ5OiBhbnk7XG4gIGZpbHRlcmVkT2JqZWN0czogYW55O1xuXG5cbiAgLy9jaG9yb3BsZXRoTWFwIHZhcmlhYmxlcy8vXG4gIGNob3JvcGxldGhfbWFwX2RhdGFfc291cmNlID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgbWluQ2hvcm9wbGV0aE1hcENudDogbnVtYmVyID0gSW5maW5pdHk7XG4gIG1heENob3JvcGxldGhNYXBDbnQ6IG51bWJlciA9IC1JbmZpbml0eVxuICBhbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWU6IHN0cmluZztcbiAgY2hvcm9wbGV0aE1hcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICBjaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UgPSBuZXcgTWFwPHN0cmluZywgYW55PigpO1xuICBjaG9yb3BsZXRoTWFwRGF0YTogYW55O1xuICBpc1JhbmdlU2xpZGVyVmlzaWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBjaG9yb3BsZXRoTWFwQ2hhcnRDb25maWc6IGFueTtcbiAgaXNQbGF5aW5nID0gZmFsc2U7XG4gIHBsYXlJbnRlcnZhbDogYW55O1xuICBjaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gMDtcbiAgY2hvcm9wbGV0aE1hcHNsaWRlU3BlZWQ6IG51bWJlcjtcblxuICBASW5wdXQoXCJjaGFydERhdGFTb3VyY2VcIilcbiAgc2V0IGNoYXJ0RGF0YVNvdXJjZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSB7XG5cbiAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wYWdlX2NvbmZpZyA9IHZhbHVlO1xuICAgICAgdGhpcy5wYWdlX3Bhcm1zID0gdmFsdWUudGl0bGVQYXJhbXM7XG4gICAgICB0aGlzLnNvcnRCeSA9IHZhbHVlLmtwaUNvbmZpZz8uZGF0YUNvbmZpZz8uc29ydEJ5O1xuICAgICAgLy8gdGhpcy5pblJvYW1lckdlb0NoYXJ0Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcIm1vbnRobHlcIikge1xuICAgICAgICAgIHRoaXMubWFwVFlwZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcFR5cGU7XG4gICAgICAgICAgaWYgKHRoaXMubWFwVFlwZSA9PSBcImdlb01hcFwiKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2lvbiA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnJlZ2lvbjtcbiAgICAgICAgICAgIHRoaXMucmVnaW9uQ29kZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnJlZ2lvbkNvZGU7XG4gICAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgICBsZXQgZGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnNpemV9cHhgO1xuICAgICAgICAgICAgdGhpcy5jaGFydFR5cGUgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydFR5cGU7XG4gICAgICAgICAgICB0aGlzLmJhY2dyb3VuZENvbG9yID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuYmFja2dyb3VuZENvbG9yO1xuICAgICAgICAgICAgdGhpcy5tYXBDb2xvcnMgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jb2xvcnM7XG4gICAgICAgICAgICAvLyBsZXQgY29uZmlnID0gdmFsdWUuY2hhcnRDb25maWc7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXRhID0gW1xuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbXCJhcmd1bWVudEZpZWxkXCJdLFxuICAgICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiY2hhcnRWYWx1ZUZpZWxkXCJdLFxuICAgICAgICAgICAgICAgIHsgdHlwZTogXCJzdHJpbmdcIiwgcm9sZTogXCJ0b29sdGlwXCIsIHA6IHsgaHRtbDogdHJ1ZSB9IH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBdLmNvbmNhdChcbiAgICAgICAgICAgICAgZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29sdGlwID0gdGhpcy5nZXRUb29sdGlwKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICBpdGVtW3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiYXJndW1lbnRGaWVsZFwiXV0sXG4gICAgICAgICAgICAgICAgICBpdGVtW3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnW1wiY2hhcnRWYWx1ZUZpZWxkXCJdXSxcbiAgICAgICAgICAgICAgICAgIHRvb2x0aXAsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLmNoYXJEYXRhID0gZm9ybWF0dGVkRGF0YTtcbiAgICAgICAgICAgIC8vIHRoaXMubG9hZEdvb2dsZUNoYXJ0cygpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkR29vZ2xlQ2hhcnRzKCk7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXBUWXBlID09IFwiYnViYmxlTWFwXCIpIHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7dmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuc2l6ZX1weGA7XG4gICAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgICB0aGlzLm1hcE9wdGlvbkZvckhlYXRNYXAgPSB7XG4gICAgICAgICAgICAgIHpvb206IHRoaXMuem9vbVZhbHVGb3JBbGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXBUWXBlID09IFwiY2hvcm9wbGV0aE1hcFwiKSB7XG4gICAgICAgICAgICBkZWJ1Z2dlclxuICAgICAgICAgICAgbGV0IGNoYXJ0Q29uZmlnID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWc7XG5cblxuICAgICAgICAgICAgaWYgKGNoYXJ0Q29uZmlnLmlzRGF0YUFnZ3JlZ2F0aW9uKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFnZ3JlYXRpb25EYXRhID0gdGhpcy5nZXRHcm91cERhdGFGb3JDaGFydCh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSwgY2hhcnRDb25maWdbJ2RhdGFBZ2dyZWdhdGlvbkNvbmZpZyddWydkYXRhQWdncmVnYXRlQ29sdW1lcyddLCBjaGFydENvbmZpZ1snZGF0YUFnZ3JlZ2F0aW9uQ29uZmlnJ11bJ2FnZ3JlZ2F0ZUZpZWxkcyddKTtcbiAgICAgICAgICAgICAgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgPSBhZ2dyZWF0aW9uRGF0YTtcblxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhhZ2dyZWF0aW9uRGF0YSk7XG4gICAgICAgICAgICB9XG5cblxuICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoTWFwRGF0YVNvdXJjZSA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG4gICAgICAgICAgICB0aGlzLmNob3JvcGxldGhUb29sdGlwRGF0YVNvdXJjZSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gICAgICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG5cblxuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke2NoYXJ0Q29uZmlnLnNpemV9cHhgO1xuXG4gICAgICAgICAgICBsZXQgdG9vdFRpcENvbHVtbiA9IGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZ1xuICAgICAgICAgICAgICAuZmlsdGVyKGMgPT4gYy5kaXNwbGF5Rm9yID09PSAnbWFwJyB8fCBjLmRpc3BsYXlGb3IgPT09ICd0b29sdGlwJyk7XG5cbiAgICAgICAgICAgIGNvbnN0IHZhbHVlRmllbGQgPVxuICAgICAgICAgICAgICBjaGFydENvbmZpZy5jaGFydF9jb25maWcuZmluZChjID0+IGMuZGlzcGxheUZvciA9PT0gJ21hcCcpPy5kYXRhRmllbGQ7XG5cbiAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmZvckVhY2goZCA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGtleSA9IGRbY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0udG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBkW3ZhbHVlRmllbGRdO1xuXG4gICAgICAgICAgICAgIHRoaXMuY2hvcm9wbGV0aE1hcERhdGFTb3VyY2Uuc2V0KGtleSwgdmFsKTtcbiAgICAgICAgICAgICAgdGhpcy5jaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2Uuc2V0KGtleSwgZCk7XG5cbiAgICAgICAgICAgICAgdGhpcy5taW5DaG9yb3BsZXRoTWFwQ250ID0gTWF0aC5taW4odGhpcy5taW5DaG9yb3BsZXRoTWFwQ250LCBkW3ZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgICAgdGhpcy5tYXhDaG9yb3BsZXRoTWFwQ250ID0gTWF0aC5tYXgodGhpcy5tYXhDaG9yb3BsZXRoTWFwQ250LCBkW3ZhbHVlRmllbGRdKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoY2hhcnRDb25maWcuaXNWYWx1ZUZpZWxkUmFuZ2VTbGlkZXIpIHtcbiAgICAgICAgICAgICAgdGhpcy5hbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzID0gWy4uLm5ldyBTZXQodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubWFwKGQgPT4gZFtjaGFydENvbmZpZy5zbGlkZXJWYWx1ZUZpZWxkXSkpXTtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWUgPSB0aGlzLmFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXNbMF07XG4gICAgICAgICAgICAgIHRoaXMuaXNSYW5nZVNsaWRlclZpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNob3JvcGxldGhNYXBEYXRhKHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlLCBjaGFydENvbmZpZyk7XG4gICAgICAgICAgICAgIHRoaXMuY2hvcm9wbGV0aE1hcENoYXJ0Q29uZmlnID0gY2hhcnRDb25maWc7XG4gICAgICAgICAgICAgIHRoaXMuY2hvcm9wbGV0aE1hcHNsaWRlU3BlZWQgPSBjaGFydENvbmZpZy5zbGlkZVNwZWVkO1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIHRoaXMuaW5pdENob3JvcGxldGhNYXAoY2hhcnRDb25maWcsIHRvb3RUaXBDb2x1bW4pO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgLy8gdGhpcy5sb2FkR29vZ2xlQ2hhcnRzKCk7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9jYXRpb25zID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2U7XG4gICAgICAgICAgICB0aGlzLnRvb3RUaXBDb2x1bW4gPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jaGFydF9jb25maWc7XG4gICAgICAgICAgICB0aGlzLmNoYXJ0SGVpZ2h0ID0gYCR7dmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuc2l6ZX1weGA7XG4gICAgICAgICAgICB0aGlzLnpvb21WYWx1Rm9yQWxsID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy56b29tXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5tYXBPcHRpb25Gb3JIZWF0TWFwID0ge1xuICAgICAgICAgICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cblxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwiZGFpbHlcIikge1xuICAgICAgICAgIHRoaXMubWFwVFlwZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcFR5cGU7XG4gICAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlXG4gICAgICAgICAgICAuZmlsdGVyKHJlY29yZCA9PiByZWNvcmRbdGhpcy5zb3J0QnldKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IG1vbWVudChiW3RoaXMuc29ydEJ5XSkuZGlmZihtb21lbnQoYVt0aGlzLnNvcnRCeV0pKSk7XG4gICAgICAgICAgY29uc3QgbW9zdFJlY2VudFJlY29yZCA9IHNvcnRlZERhdGFbMF07XG5cbiAgICAgICAgICBpZiAodmFsdWUuZW5kRGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9iamVjdHMgPSBzb3J0ZWREYXRhLmZpbHRlcihkYXRhID0+IGRhdGFbdGhpcy5zb3J0QnldID09PSB2YWx1ZS5lbmREYXRlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJlZE9iamVjdHMgPSBzb3J0ZWREYXRhLmZpbHRlcihkYXRhID0+IGRhdGFbdGhpcy5zb3J0QnldID09PSBtb3N0UmVjZW50UmVjb3JkW3RoaXMuc29ydEJ5XSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMubWFwVFlwZSA9PSBcImJ1YmJsZU1hcFwiKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2F0aW9ucyA9IHRoaXMuZmlsdGVyZWRPYmplY3RzO1xuICAgICAgICAgICAgdGhpcy5jaGFydEhlaWdodCA9IGAke3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnNpemV9cHhgO1xuICAgICAgICAgICAgdGhpcy50b290VGlwQ29sdW1uID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY2hhcnRfY29uZmlnO1xuICAgICAgICAgICAgdGhpcy5tYXBPcHRpb25Gb3JIZWF0TWFwID0ge1xuICAgICAgICAgICAgICB6b29tOiB0aGlzLnpvb21WYWx1Rm9yQWxsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9XG5cblxuICAgIH1cblxuICB9XG5cbiAgY29uc3RydWN0b3IocHVibGljIGNvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2UpIHsgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQgeyB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJnZW9NYXBcIikge1xuICAgICAgdGhpcy5sb2FkR29vZ2xlQ2hhcnRzKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJoZWF0TWFwXCIpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmhlYXRNYXBDYXRlZ29yeSA9PSBcImhlYXRNYXBPbmx5XCIpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRHb29nbGVIZWF0T25seU1hcHModGhpcy5sb2NhdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmhlYXRNYXBDYXRlZ29yeSA9PSBcImhlYXRNYXBNYXJrZXJcIikge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZU1hcCgpO1xuICAgICAgICB0aGlzLmFkZE1hcmtlcnMoKTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVIZWF0V2l0aE1hcmtlck1hcCh0aGlzLmxvY2F0aW9ucyk7XG5cbiAgICAgIH1cblxuICAgIH0gZWxzZSBpZiAodGhpcy5tYXBUWXBlID09IFwiY2hvcm9wbGV0aE1hcFwiKSB7XG5cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgdGhpcy5pbml0aWFsaXplTWFwKCk7XG4gICAgICB0aGlzLmFkZEJ1YmJsZU1hcmtlcnMoKTtcbiAgICB9XG4gIH1cblxuXG4gIGdldEdyb3VwRGF0YUZvckNoYXJ0KGRhdGEsIGFnZ3JlZ2F0aW9uQ29uZmlnLCBncm91cEJ5Q29sdW1ucykge1xuICAgIGNvbnN0IGdyb3VwTWFwID0ge307XG5cbiAgICBkYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwS2V5ID0gZ3JvdXBCeUNvbHVtbnMubWFwKGNvbCA9PiByb3dbY29sXSkuam9pbihcInx8XCIpO1xuXG4gICAgICBpZiAoIWdyb3VwTWFwW2dyb3VwS2V5XSkge1xuICAgICAgICBncm91cE1hcFtncm91cEtleV0gPSB7fTtcblxuICAgICAgICBncm91cEJ5Q29sdW1ucy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2NvbF0gPSByb3dbY29sXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWdncmVnYXRpb25Db25maWcuZm9yRWFjaCgoeyBhZ2dyZWdhdGVEYXRhRmllbGQsIGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSB9KSA9PiB7XG4gICAgICAgICAgc3dpdGNoIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgXCJzdW1cIjpcbiAgICAgICAgICAgIGNhc2UgXCJhdmdcIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSAwO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJtaW5cIjpcbiAgICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPSBJbmZpbml0eTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdID0gLUluZmluaXR5O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJjb3VudFwiOlxuICAgICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9IDA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChhZ2dyZWdhdGVGdW5jdGlvblR5cGUgPT09IFwiYXZnXCIpIHtcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVtgJHthZ2dyZWdhdGVEYXRhRmllbGR9X19jb3VudGBdID0gMDtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBcHBseSBhZ2dyZWdhdGlvbnNcbiAgICAgIGFnZ3JlZ2F0aW9uQ29uZmlnLmZvckVhY2goKHsgYWdncmVnYXRlRGF0YUZpZWxkLCBhZ2dyZWdhdGVGdW5jdGlvblR5cGUgfSkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHJvd1thZ2dyZWdhdGVEYXRhRmllbGRdO1xuXG4gICAgICAgIHN3aXRjaCAoYWdncmVnYXRlRnVuY3Rpb25UeXBlKSB7XG4gICAgICAgICAgY2FzZSBcInN1bVwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gKz0gdmFsdWU7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJhdmdcIjpcbiAgICAgICAgICAgIGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdICs9IHZhbHVlO1xuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF0gKz0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSBcIm1pblwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgICBNYXRoLm1pbihncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSwgdmFsdWUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIFwibWF4XCI6XG4gICAgICAgICAgICBncm91cE1hcFtncm91cEtleV1bYWdncmVnYXRlRGF0YUZpZWxkXSA9XG4gICAgICAgICAgICAgIE1hdGgubWF4KGdyb3VwTWFwW2dyb3VwS2V5XVthZ2dyZWdhdGVEYXRhRmllbGRdLCB2YWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgXCJjb3VudFwiOlxuICAgICAgICAgICAgZ3JvdXBNYXBbZ3JvdXBLZXldW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gKz0gMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEZpbmFsaXplIGF2ZXJhZ2VzXG4gICAgT2JqZWN0LnZhbHVlcyhncm91cE1hcCkuZm9yRWFjaChncm91cCA9PiB7XG4gICAgICBhZ2dyZWdhdGlvbkNvbmZpZy5mb3JFYWNoKCh7IGFnZ3JlZ2F0ZURhdGFGaWVsZCwgYWdncmVnYXRlRnVuY3Rpb25UeXBlIH0pID0+IHtcbiAgICAgICAgaWYgKGFnZ3JlZ2F0ZUZ1bmN0aW9uVHlwZSA9PT0gXCJhdmdcIikge1xuICAgICAgICAgIGdyb3VwW2FnZ3JlZ2F0ZURhdGFGaWVsZF0gPVxuICAgICAgICAgICAgZ3JvdXBbYWdncmVnYXRlRGF0YUZpZWxkXSAvIGdyb3VwW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF07XG4gICAgICAgICAgZGVsZXRlIGdyb3VwW2Ake2FnZ3JlZ2F0ZURhdGFGaWVsZH1fX2NvdW50YF07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ3JvdXBNYXApO1xuICB9XG5cbiAgbG9hZEdvb2dsZUNoYXJ0cygpIHtcbiAgICBnb29nbGUuY2hhcnRzLmxvYWQoXCJjdXJyZW50XCIsIHtcbiAgICAgIHBhY2thZ2VzOiBbdGhpcy5jaGFydFR5cGVdLFxuICAgIH0pO1xuICAgIGdvb2dsZS5jaGFydHMuc2V0T25Mb2FkQ2FsbGJhY2sodGhpcy5kcmF3Q2hhcnQuYmluZCh0aGlzKSk7XG4gIH1cblxuICBkcmF3Q2hhcnQoKSB7XG4gICAgY29uc3QgZGF0YSA9IGdvb2dsZS52aXN1YWxpemF0aW9uLmFycmF5VG9EYXRhVGFibGUodGhpcy5jaGFyRGF0YSk7XG5cbiAgICAvLyBjb25zdCBvcHRpb25zID0ge1xuICAgIC8vICAgcmVnaW9uOiAnVVNBJyxcbiAgICAvLyAgIGRpc3BsYXlNb2RlOiAnbWFya2VycycsXG4gICAgLy8gICBiYWNrZ3JvdW5kQ29sb3I6IHRoaXMuYmFjZ3JvdW5kQ29sb3IsXG4gICAgLy8gICB0b29sdGlwOiB7IGlzSHRtbDogdHJ1ZSB9LFxuICAgIC8vICAgY29sb3JBeGlzOiB7IGNvbG9yczogdGhpcy5tYXBDb2xvcnMgfVxuICAgIC8vIH07XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9uQ29uZmlnKCk7XG5cbiAgICBjb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5HZW9DaGFydChcbiAgICAgIHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudFxuICAgICk7XG4gICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuY2hhcnRIZWlnaHQ7XG4gICAgY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldFRvb2x0aXAoZGF0YSkge1xuICAgIGxldCB0b29sVGlwRGF0YSA9IFwiXCI7XG4gICAgdGhpcy50b290VGlwQ29sdW1uLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0gPT09ICdudW1iZXInKSB7XG4gICAgICAgIHRvb2xUaXBEYXRhICs9XG4gICAgICAgICAgXCI8ZGl2IGNsYXNzPSdpbmxpbmUnPjxiPlwiICtcbiAgICAgICAgICBlbGVtZW50LmNhcHRpb24gK1xuICAgICAgICAgIFwiOjwvYj48L2Rpdj4gXCIgK1xuICAgICAgICAgIHRoaXMuY29tbW9uU2VydmljZS5yb3VuZE9mZlRpbGxUd28oZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0sIDIpICtcbiAgICAgICAgICBcIjxiciAvPlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9vbFRpcERhdGEgKz1cbiAgICAgICAgICBcIjxkaXYgY2xhc3M9J2lubGluZSc+PGI+XCIgK1xuICAgICAgICAgIGVsZW1lbnQuY2FwdGlvbiArXG4gICAgICAgICAgXCI6PC9iPjwvZGl2PiBcIiArXG4gICAgICAgICAgZGF0YVtlbGVtZW50LmRhdGFGaWVsZF0gK1xuICAgICAgICAgIFwiPGJyIC8+XCI7XG4gICAgICB9XG5cblxuICAgIH0pO1xuICAgIHJldHVybiB0b29sVGlwRGF0YTtcbiAgfVxuXG4gIGdldE9wdGlvbkNvbmZpZygpIHtcbiAgICBpZiAodGhpcy5yZWdpb24gPT0gJ2NpdHknKSB7XG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICByZWdpb246IHRoaXMucmVnaW9uQ29kZSxcbiAgICAgICAgZGlzcGxheU1vZGU6ICdtYXJrZXJzJyxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmJhY2dyb3VuZENvbG9yLFxuICAgICAgICB0b29sdGlwOiB7IGlzSHRtbDogdHJ1ZSB9LFxuICAgICAgICBjb2xvckF4aXM6IHsgY29sb3JzOiB0aGlzLm1hcENvbG9ycyB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy5iYWNncm91bmRDb2xvcixcbiAgICAgICAgdG9vbHRpcDogeyBpc0h0bWw6IHRydWUgfSxcbiAgICAgICAgY29sb3JBeGlzOiB7IGNvbG9yczogdGhpcy5tYXBDb2xvcnMgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gIEdlbyBNYXAgZW5kIC8vXG5cbiAgLy8gSGVhdCBNYXAgc3RhcnQgLy9cbiAgaW5pdGlhbGl6ZU1hcCgpOiB2b2lkIHtcbiAgICBjb25zdCBtYXBPcHRpb25zID0gdGhpcy5tYXBPcHRpb25Gb3JIZWF0TWFwO1xuICAgIC8vIHtcbiAgICAvLyAgIGNlbnRlcjogeyBsYXQ6IDM3LjA5MDIsIGxuZzogLTk1LjcxMjkgfSwgLy8gQ2VudGVyIG9mIHRoZSBVU0FcbiAgICAvLyAgIHpvb206IDUsXG4gICAgLy8gfTtcblxuICAgIGlmICh0aGlzLm1hcFRZcGUgPT0gXCJidWJibGVNYXBcIikge1xuICAgICAgbWFwT3B0aW9uc1tcInN0eWxlc1wiXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgIGZlYXR1cmVUeXBlOiBcImFsbFwiLFxuICAgICAgICAgIHN0eWxlcnM6IFtcbiAgICAgICAgICAgIHsgc2F0dXJhdGlvbjogLTEwMCB9LFxuICAgICAgICAgICAgeyBsaWdodG5lc3M6IDcwIH0sXG4gICAgICAgICAgICB7IHZpc2liaWxpdHk6IFwic2ltcGxpZmllZFwiIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZlYXR1cmVUeXBlOiBcImFkbWluaXN0cmF0aXZlLmNvdW50cnlcIixcbiAgICAgICAgICBlbGVtZW50VHlwZTogXCJsYWJlbHNcIixcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IGxpZ2h0bmVzczogLTMwIH0sIC8vIERhcmtlbiBsYWJlbHMgZnVydGhlclxuICAgICAgICAgICAgeyB2aXNpYmlsaXR5OiBcIm9uXCIgfSxcbiAgICAgICAgICAgIHsgZm9udFdlaWdodDogXCJib2xkXCIgfSwgLy8gTWFrZSBsYWJlbHMgYm9sZFxuICAgICAgICAgICAgeyBmb250U2l6ZTogXCIxMnB4XCIgfSwgLy8gSW5jcmVhc2UgZm9udCBzaXplXG4gICAgICAgICAgXSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZlYXR1cmVUeXBlOiBcImFkbWluaXN0cmF0aXZlLmNvdW50cnlcIixcbiAgICAgICAgICBlbGVtZW50VHlwZTogXCJnZW9tZXRyeS5zdHJva2VcIixcbiAgICAgICAgICBzdHlsZXJzOiBbXG4gICAgICAgICAgICB7IGxpZ2h0bmVzczogLTQwIH0sIC8vIERhcmtlbiBib3JkZXJzIHNpZ25pZmljYW50bHlcbiAgICAgICAgICAgIHsgd2VpZ2h0OiAxLjUgfSwgLy8gSW5jcmVhc2UgYm9yZGVyIHRoaWNrbmVzc1xuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBmZWF0dXJlVHlwZTogXCJhZG1pbmlzdHJhdGl2ZS5jb3VudHJ5XCIsXG4gICAgICAgICAgZWxlbWVudFR5cGU6IFwiZ2VvbWV0cnkuZmlsbFwiLFxuICAgICAgICAgIHN0eWxlcnM6IFtcbiAgICAgICAgICAgIHsgbGlnaHRuZXNzOiA5MCB9LCAvLyBLZWVwIGZpbGwgdmVyeSBsaWdodFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cblxuICAgIHRoaXMubWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcChcbiAgICAgIC8vIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVnaW9uc19kaXZcIikgLFxuICAgICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LFxuICAgICAgbWFwT3B0aW9uc1xuICAgICk7XG4gICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuY2hhcnRIZWlnaHQ7XG4gIH1cblxuICAvLyBBZGQgbWFya2VycyB0byB0aGUgbWFwXG4gIGFkZE1hcmtlcnMoKTogdm9pZCB7XG4gICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGxhdDogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsbmc6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBpY29uOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24gPyB7XG4gICAgICAgICAgdXJsOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24sIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGljb24gcGF0aFxuICAgICAgICAgIHNjYWxlZFNpemU6IHtcbiAgICAgICAgICAgIHdpZHRoOiAzMixcbiAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSA6ICcnLFxuICAgICAgICAvLyB0b29sdGlwVGV4dDpcbiAgICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICAgICAgLy8gdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnR9YCxcbiAgICAgICAgdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnR9YCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ib3VuZHMuZXh0ZW5kKG1hcmtlci5nZXRQb3NpdGlvbigpKTtcbiAgICAgIHRoaXMubWFya2Vycy5wdXNoKG1hcmtlcik7XG5cbiAgICAgIC8vIEFkZCBhbiBpbmZvIHdpbmRvd1xuICAgICAgbGV0IHN0cmluZ1dpdGhvdXRRdW90ZXMgPSB0aGlzLmdldEluZm9XaW5kb0RhdGEobG9jYXRpb24pO1xuICAgICAgY29uc3QgaW5mb1dJbmRvd0RhdGEgPSB0aGlzLmdldEluZm9XaW5kb0RhdGEobG9jYXRpb24pO1xuXG4gICAgICBjb25zdCBpbmZvV2luZG93ID0gbmV3IGdvb2dsZS5tYXBzLkluZm9XaW5kb3coe1xuICAgICAgICAvLyBjb250ZW50OiBpbmZvV0luZG93RGF0YSxcbiAgICAgICAgY29udGVudDogYDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlOyBjb2xvcjogYmxhY2s7IGZvbnQtc2l6ZTogMjBweDtcIj5cbiAgICAgICAgJHtpbmZvV0luZG93RGF0YX1cbiAgICAgIDwvZGl2PmAsXG4gICAgICB9KTtcbiAgICAgIC8vIHtcbiAgICAgIC8vICAgY29udGVudDogYDxkaXYgc3R5bGU9XCIgIGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7Y29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7XCI+PGg0PiR7XG4gICAgICAvLyAgICAgbG9jYXRpb24uY2l0eVxuICAgICAgLy8gICB9PC9oND48cD5Ub3RhbCBTYWxlczogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50LnRvRml4ZWQoXG4gICAgICAvLyAgICAgMlxuICAgICAgLy8gICApfTwvcD48L2Rpdj5gLFxuICAgICAgLy8gfVxuXG4gICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmZvV2luZG93KSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGluZm9XaW5kb3cub3Blbih0aGlzLm1hcCwgbWFya2VyKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdyA9IGluZm9XaW5kb3c7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLm1hcC5maXRCb3VuZHModGhpcy5ib3VuZHMpO1xuXG5cbiAgfVxuXG4gIGdldEluZm9XaW5kb0RhdGEoZGF0YSkge1xuICAgIGxldCB0b29sVGlwRGF0YSA9IGBgO1xuICAgIHRoaXMudG9vdFRpcENvbHVtbi5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGRhdGFbZWxlbWVudC5kYXRhRmllbGRdID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHRvb2xUaXBEYXRhICs9XG4gICAgICAgICAgYDxkaXYgY2xhc3M9J2lubGluZSc+PGI+YCArXG4gICAgICAgICAgZWxlbWVudC5jYXB0aW9uICtcbiAgICAgICAgICBgOjwvYj48L2Rpdj4gYCArXG4gICAgICAgICAgdGhpcy5jb21tb25TZXJ2aWNlLnJvdW5kT2ZmVGlsbFR3byhkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSwgMikgK1xuICAgICAgICAgIGA8YnIgLz5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9vbFRpcERhdGEgKz1cbiAgICAgICAgICBgPGRpdiBjbGFzcz0naW5saW5lJz48Yj5gICtcbiAgICAgICAgICBlbGVtZW50LmNhcHRpb24gK1xuICAgICAgICAgIGA6PC9iPjwvZGl2PiBgICtcbiAgICAgICAgICBkYXRhW2VsZW1lbnQuZGF0YUZpZWxkXSArXG4gICAgICAgICAgYDxiciAvPmA7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRvb2xUaXBEYXRhO1xuICB9XG4gIC8vIEhlYXQgTWFwIEVuZCAvL1xuXG4gIC8vaGVhdCBvbmx5IG1hcCBzdGFydCAvL1xuXG4gIGxvYWRHb29nbGVIZWF0T25seU1hcHMoZGF0YSk6IHZvaWQge1xuICAgIHRoaXMuaGVhdG1hcERhdGEgPSBbXTtcbiAgICBkYXRhLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGxldCBsYXRpdHVkZSA9IHBhcnNlRmxvYXQoXG4gICAgICAgIGVsZW1lbnRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5tYXJrZXJMYXRpdHVkZV1cbiAgICAgICk7XG4gICAgICBsZXQgbG9ndGl0dWRlID0gcGFyc2VGbG9hdChcbiAgICAgICAgZWxlbWVudFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICk7XG4gICAgICAvLyBsZXQgd2VpZ2h0ID0gKGNlbGxOb2RlLnByb3BlcnRpZXNbJ1dlaWdodCddICE9IHVuZGVmaW5lZCkgPyBjZWxsTm9kZS5wcm9wZXJ0aWVzWydXZWlnaHQnXSA6IFwiTkFcIjtcbiAgICAgIHRoaXMuaGVhdG1hcERhdGEucHVzaCh7XG4gICAgICAgIGxvY2F0aW9uOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdGl0dWRlLCBsb2d0aXR1ZGUpXG4gICAgICAgIC8vIHdlaWdodDogcGFyc2VGbG9hdCh3ZWlnaHQpLFxuXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdGl0dWRlLCBsb2d0aXR1ZGUpKTtcbiAgICB9KTtcbiAgICBjb25zdCBtYXBPcHRpb25zID0ge1xuICAgICAgLy8gY2VudGVyOiB7XG4gICAgICAvLyAgIGxhdDogcGFyc2VGbG9hdCh0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNlbnRlckxhdGl0dWRlKSxcbiAgICAgIC8vICAgbG5nOiBwYXJzZUZsb2F0KHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY2VudGVyTG9uZ2l0dWRlKSxcbiAgICAgIC8vIH0sXG4gICAgICAvLyB6b29tOiBwYXJzZUZsb2F0KHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuem9vbSlcbiAgICAgIHpvb206IHRoaXMuem9vbVZhbHVGb3JBbGxcbiAgICB9O1xuXG5cblxuXG4gICAgdGhpcy5tYXAgPSBuZXcgZ29vZ2xlLm1hcHMuTWFwKHRoaXMuZ29vZ2xNYXAubmF0aXZlRWxlbWVudCwgbWFwT3B0aW9ucyk7XG4gICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuY2hhcnRIZWlnaHQ7XG4gICAgdGhpcy5tYXAuZml0Qm91bmRzKHRoaXMuYm91bmRzKTtcbiAgICB0aGlzLmhlYXRtYXAgPSBuZXcgZ29vZ2xlLm1hcHMudmlzdWFsaXphdGlvbi5IZWF0bWFwTGF5ZXIoe1xuICAgICAgZGF0YTogdGhpcy5oZWF0bWFwRGF0YSxcbiAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgfSk7XG5cbiAgfVxuXG5cbiAgLy9oZWF0IG9ubHkgbWFwIGVuZCAvL1xuXG4gIC8vaGVhdCBhbmQgTWFya2VyICBtYXAgU3RhcnQgLy9cbiAgaW5pdGlhbGl6ZUhlYXRXaXRoTWFya2VyTWFwKGRhdGEpIHtcbiAgICAvLyBJbml0aWFsaXplIG1hcFxuICAgIHRoaXMubWFwID0gbmV3IGdvb2dsZS5tYXBzLk1hcCh0aGlzLmdvb2dsTWFwLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgIC8vIGNlbnRlcjogeyBsYXQ6IDM3Ljc3NDksIGxuZzogLTEyMi40MTk0IH0sXG4gICAgICB6b29tOiBwYXJzZUZsb2F0KFxuICAgICAgICB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnpvb21cbiAgICAgICksXG4gICAgfSk7XG4gICAgdGhpcy5nb29nbE1hcC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IHRoaXMuY2hhcnRIZWlnaHQ7XG4gICAgLy8gSW5pdGlhbGl6ZSBoZWF0bWFwIGxheWVyXG4gICAgdGhpcy5oZWF0bWFwRGF0YSA9IFtdO1xuICAgIGRhdGEuZm9yRWFjaChlbGVtZW50ID0+IHtcblxuICAgICAgbGV0IGxhdGl0dWRlID0gcGFyc2VGbG9hdChcbiAgICAgICAgZWxlbWVudFt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxhdGl0dWRlXVxuICAgICAgKTtcbiAgICAgIGxldCBsb2d0aXR1ZGUgPSBwYXJzZUZsb2F0KFxuICAgICAgICBlbGVtZW50W3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTG9uZ2l0dWRlXVxuICAgICAgKTtcbiAgICAgIHRoaXMuaGVhdG1hcERhdGEucHVzaCh7XG4gICAgICAgIGxvY2F0aW9uOiBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdGl0dWRlLCBsb2d0aXR1ZGUpXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYm91bmRzLmV4dGVuZChuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKGxhdGl0dWRlLCBsb2d0aXR1ZGUpKTtcbiAgICB9KTtcbiAgICB0aGlzLmhlYXRtYXAgPSBuZXcgZ29vZ2xlLm1hcHMudmlzdWFsaXphdGlvbi5IZWF0bWFwTGF5ZXIoe1xuICAgICAgZGF0YTogdGhpcy5oZWF0bWFwRGF0YSxcbiAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgfSk7XG4gICAgLy8gSW5pdGlhbGl6ZSBtYXJrZXJzXG4gICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGxhdDogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsbmc6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBpY29uOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24gPyB7XG4gICAgICAgICAgdXJsOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmljb24sIC8vIFJlcGxhY2Ugd2l0aCB5b3VyIGljb24gcGF0aFxuICAgICAgICAgIHNjYWxlZFNpemU6IHtcbiAgICAgICAgICAgIHdpZHRoOiAzMixcbiAgICAgICAgICAgIGhlaWdodDogMzIsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSA6ICcnLFxuICAgICAgICAvLyB0b29sdGlwVGV4dDpcbiAgICAgICAgbWFwOiB0aGlzLm1hcCxcbiAgICAgICAgLy8gdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnR9YCxcbiAgICAgICAgdGl0bGU6IGAke2xvY2F0aW9uLmNpdHl9OiAkJHtsb2NhdGlvbi50b3RhbF9zYWxlc19hbW91bnR9YCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ib3VuZHMuZXh0ZW5kKG1hcmtlci5nZXRQb3NpdGlvbigpKTtcbiAgICAgIHRoaXMubWFya2Vycy5wdXNoKG1hcmtlcik7XG5cbiAgICAgIC8vIEFkZCBhbiBpbmZvIHdpbmRvd1xuXG4gICAgICAvLyBBZGQgYW4gaW5mbyB3aW5kb3dcbiAgICAgIGNvbnN0IGluZm9XSW5kb3dEYXRhID0gdGhpcy5nZXRJbmZvV2luZG9EYXRhKGxvY2F0aW9uKTtcbiAgICAgIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7XG4gICAgICAgIGNvbnRlbnQ6IGA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAxMDAlOyB3aWR0aDogMTAwJTsgY29sb3I6IGJsYWNrOyBmb250LXNpemU6IDIwcHg7XCI+XG4gICAgICAgICAgICAke2luZm9XSW5kb3dEYXRhfVxuICAgICAgICAgIDwvZGl2PmAsXG4gICAgICB9KTtcblxuXG4gICAgICBtYXJrZXIuYWRkTGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmZvV2luZG93KSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIGluZm9XaW5kb3cub3Blbih0aGlzLm1hcCwgbWFya2VyKTtcbiAgICAgICAgdGhpcy5jdXJyZW50SW5mb1dpbmRvdyA9IGluZm9XaW5kb3c7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLm1hcC5maXRCb3VuZHModGhpcy5ib3VuZHMpO1xuXG4gICAgLy8gQWRkIGxpc3RlbmVyIGZvciB6b29tIGNoYW5nZXNcbiAgICB0aGlzLm1hcC5hZGRMaXN0ZW5lcignem9vbV9jaGFuZ2VkJywgKCkgPT4gdGhpcy5oYW5kbGVab29tQ2hhbmdlKCkpO1xuICB9XG5cbiAgaGFuZGxlWm9vbUNoYW5nZSgpIHtcbiAgICBjb25zdCB6b29tTGV2ZWwgPSB0aGlzLm1hcC5nZXRab29tKCk7XG4gICAgaWYgKHpvb21MZXZlbCA8IDUpIHtcbiAgICAgIC8vIFNob3cgaGVhdG1hcCBhbmQgaGlkZSBtYXJrZXJzXG4gICAgICB0aGlzLmhlYXRtYXAuc2V0TWFwKHRoaXMubWFwKTtcbiAgICAgIHRoaXMubWFya2Vycy5mb3JFYWNoKChtYXJrZXIpID0+IG1hcmtlci5zZXRNYXAobnVsbCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBIaWRlIGhlYXRtYXAgYW5kIHNob3cgbWFya2Vyc1xuICAgICAgdGhpcy5oZWF0bWFwLnNldE1hcChudWxsKTtcbiAgICAgIHRoaXMubWFya2Vycy5mb3JFYWNoKChtYXJrZXIpID0+IG1hcmtlci5zZXRNYXAodGhpcy5tYXApKTtcbiAgICB9XG4gIH1cblxuICAvL2hlYXQgYW5kIE1hcmtlciAgbWFwIEVuZCAvL1xuICAvL0J1YmJsZSBDaGFydCBTdGFydFxuICBhZGRCdWJibGVNYXJrZXJzKCk6IHZvaWQge1xuICAgIHRoaXMucHJlcGFyZUJ1YmJsZURhdGEoKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLmxvY2F0aW9ucyk7XG4gICAgdGhpcy5sb2NhdGlvbnMuZm9yRWFjaCgobG9jYXRpb24pID0+IHtcbiAgICAgIGNvbnN0IG1hcmtlciA9IG5ldyBnb29nbGUubWFwcy5NYXJrZXIoe1xuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGxhdDogcGFyc2VGbG9hdChcbiAgICAgICAgICAgIGxvY2F0aW9uW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcubWFya2VyTGF0aXR1ZGVdXG4gICAgICAgICAgKSxcbiAgICAgICAgICBsbmc6IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICBsb2NhdGlvblt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLm1hcmtlckxvbmdpdHVkZV1cbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgICBpY29uOiB7XG4gICAgICAgICAgcGF0aDogZ29vZ2xlLm1hcHMuU3ltYm9sUGF0aC5DSVJDTEUsXG4gICAgICAgICAgc2NhbGU6IE1hdGgucm91bmQobG9jYXRpb24uc2FsZXNfcGVyY2VudGFnZSksIC8vIEFkanVzdCBidWJibGUgc2l6ZVxuICAgICAgICAgIGZpbGxDb2xvcjogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5idWJibGVDb2xvcixcbiAgICAgICAgICBmaWxsT3BhY2l0eTogMC42LFxuICAgICAgICAgIHN0cm9rZVdlaWdodDogMCxcbiAgICAgICAgfSxcbiAgICAgICAgLy8gdG9vbHRpcFRleHQ6XG4gICAgICAgIG1hcDogdGhpcy5tYXAsXG4gICAgICAgIC8vIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb24udG90YWxfc2FsZXNfYW1vdW50fWAsXG4gICAgICAgIHRpdGxlOiBgJHtsb2NhdGlvbi5jaXR5fTogJCR7bG9jYXRpb25bdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXVxuICAgICAgICAgIH1gLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmJvdW5kcy5leHRlbmQobWFya2VyLmdldFBvc2l0aW9uKCkpO1xuICAgICAgdGhpcy5tYXJrZXJzLnB1c2gobWFya2VyKTtcblxuICAgICAgLy8gQWRkIGFuIGluZm8gd2luZG93XG4gICAgICBsZXQgc3RyaW5nV2l0aG91dFF1b3RlcyA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG4gICAgICBjb25zdCBpbmZvV0luZG93RGF0YSA9IHRoaXMuZ2V0SW5mb1dpbmRvRGF0YShsb2NhdGlvbik7XG5cbiAgICAgIGNvbnN0IGluZm9XaW5kb3cgPSBuZXcgZ29vZ2xlLm1hcHMuSW5mb1dpbmRvdyh7XG4gICAgICAgIC8vIGNvbnRlbnQ6IGluZm9XSW5kb3dEYXRhLFxuICAgICAgICBjb250ZW50OiBgPGRpdiBzdHlsZT1cImhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IGNvbG9yOiBibGFjazsgZm9udC1zaXplOiAyMHB4O1wiPlxuICAgICAgICAgJHtpbmZvV0luZG93RGF0YX1cbiAgICAgICA8L2Rpdj5gLFxuICAgICAgfSk7XG5cbiAgICAgIG1hcmtlci5hZGRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZm9XaW5kb3cpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93LmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaW5mb1dpbmRvdy5vcGVuKHRoaXMubWFwLCBtYXJrZXIpO1xuICAgICAgICB0aGlzLmN1cnJlbnRJbmZvV2luZG93ID0gaW5mb1dpbmRvdztcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMubWFwLmZpdEJvdW5kcyh0aGlzLmJvdW5kcyk7XG4gIH1cblxuICBwcmVwYXJlQnViYmxlRGF0YSgpIHtcbiAgICAvLyBTdGVwIDE6IEZpbmQgbWluIGFuZCBtYXggdG90YWxfc2FsZXNfYW1vdW50XG4gICAgY29uc3QgbWluU2FsZXMgPSBNYXRoLm1pbihcbiAgICAgIC4uLnRoaXMubG9jYXRpb25zLm1hcChcbiAgICAgICAgKGQpID0+IGRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXVxuICAgICAgKVxuICAgICk7XG4gICAgY29uc3QgbWF4U2FsZXMgPSBNYXRoLm1heChcbiAgICAgIC4uLnRoaXMubG9jYXRpb25zLm1hcChcbiAgICAgICAgKGQpID0+IGRbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5hZ3J1bWVudFZhbHVlXVxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyBTdGVwIDI6IERlZmluZSBtaW4gYW5kIG1heCBwZXJjZW50YWdlIHZhbHVlc1xuICAgIGNvbnN0IG1pblBlcmNlbnRhZ2UgPVxuICAgICAgdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5idWJibGVNaW5pbXVtU2l6ZTtcbiAgICBjb25zdCBtYXhQZXJjZW50YWdlID1cbiAgICAgIHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYnViYmxlTWF4aW11bVNpemU7XG5cbiAgICAvLyBTdGVwIDM6IE5vcm1hbGl6ZSBmdW5jdGlvblxuICAgIGNvbnN0IG5vcm1hbGl6ZSA9ICh2YWx1ZSwgbWluLCBtYXgpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICgodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbikpICogKG1heFBlcmNlbnRhZ2UgLSBtaW5QZXJjZW50YWdlKSArXG4gICAgICAgIG1pblBlcmNlbnRhZ2VcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIFN0ZXAgNDogQXNzaWduIGNhbGN1bGF0ZWQgcGVyY2VudGFnZSB0byBlYWNoIG9iamVjdFxuICAgIHRoaXMubG9jYXRpb25zLmZvckVhY2goKGQpID0+IHtcbiAgICAgIGQuc2FsZXNfcGVyY2VudGFnZSA9IE1hdGgubWluKFxuICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICBub3JtYWxpemUoXG4gICAgICAgICAgICBkW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuYWdydW1lbnRWYWx1ZV0sXG4gICAgICAgICAgICBtaW5TYWxlcyxcbiAgICAgICAgICAgIG1heFNhbGVzXG4gICAgICAgICAgKSxcbiAgICAgICAgICBtaW5QZXJjZW50YWdlXG4gICAgICAgICksXG4gICAgICAgIG1heFBlcmNlbnRhZ2VcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbiAgLy9CdWJibGUgQ2hhcnQgRW5kXG5cbiAgLy8gY2hvcm9wbGV0aE1hcCBzdGFydCAvL1xuXG4gIGdldENvbG9yKGNudDogbnVtYmVyLCBzdGFydENvbG9yOiBzdHJpbmcsIGVuZENvbG9yOiBzdHJpbmcsIG1pbkNvdW50OiBudW1iZXIsIG1heENvdW50OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmIChjbnQgPT09IHVuZGVmaW5lZCB8fCBjbnQgPT09IG51bGwgfHwgbWF4Q291bnQgPT09IG1pbkNvdW50KSB7XG4gICAgICByZXR1cm4gJyNjY2NjY2MnO1xuICAgIH1cblxuICAgIC8vIGNvbnN0IHJhdGlvID0gTWF0aC5taW4oXG4gICAgLy8gICBNYXRoLm1heCgoY250IC0gbWluQ291bnQpIC8gKG1heENvdW50IC0gbWluQ291bnQpLCAwKSxcbiAgICAvLyAgIDFcbiAgICAvLyApO1xuXG4gICAgY29uc3QgcmF3UmF0aW8gPVxuICAgICAgKGNudCAtIG1pbkNvdW50KSAvIChtYXhDb3VudCAtIG1pbkNvdW50KTtcblxuICAgIC8vIGdhbW1hIDwgMSBleGFnZ2VyYXRlcyBkaWZmZXJlbmNlc1xuICAgIGNvbnN0IGdhbW1hID0gMC4yOyAvLyB0cnkgMC40IOKAkyAwLjdcbiAgICBjb25zdCByYXRpbyA9IE1hdGgucG93KFxuICAgICAgTWF0aC5taW4oTWF0aC5tYXgocmF3UmF0aW8sIDApLCAxKSxcbiAgICAgIGdhbW1hXG4gICAgKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5oZXhUb1JnYihzdGFydENvbG9yKTtcbiAgICBjb25zdCBlbmQgPSB0aGlzLmhleFRvUmdiKGVuZENvbG9yKTtcblxuICAgIGNvbnN0IHIgPSB0aGlzLmxlcnAoc3RhcnQuciwgZW5kLnIsIHJhdGlvKTtcbiAgICBjb25zdCBnID0gdGhpcy5sZXJwKHN0YXJ0LmcsIGVuZC5nLCByYXRpbyk7XG4gICAgY29uc3QgYiA9IHRoaXMubGVycChzdGFydC5iLCBlbmQuYiwgcmF0aW8pO1xuXG4gICAgLy8gY29uc29sZS5sb2coYENvbG9yIGZvciBjb3VudCAke2NudH06IHJnYigke3J9LCAke2d9LCAke2J9KWApO1xuXG4gICAgcmV0dXJuIGByZ2IoJHtyfSwgJHtnfSwgJHtifSlgO1xuICB9XG5cbiAgbGVycChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgcmF0aW86IG51bWJlcikge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKHN0YXJ0ICsgKGVuZCAtIHN0YXJ0KSAqIHJhdGlvKTtcbiAgfVxuICBoZXhUb1JnYihoZXg6IHN0cmluZykge1xuICAgIGNvbnN0IGNsZWFuSGV4ID0gaGV4LnJlcGxhY2UoJyMnLCAnJyk7XG4gICAgY29uc3QgYmlnaW50ID0gcGFyc2VJbnQoY2xlYW5IZXgsIDE2KTtcblxuICAgIHJldHVybiB7XG4gICAgICByOiAoYmlnaW50ID4+IDE2KSAmIDI1NSxcbiAgICAgIGc6IChiaWdpbnQgPj4gOCkgJiAyNTUsXG4gICAgICBiOiBiaWdpbnQgJiAyNTVcbiAgICB9O1xuICB9XG5cblxuICBpbml0Q2hvcm9wbGV0aE1hcChjaGFydENvbmZpZzogYW55LCB0b290VGlwQ29sdW1uOiBhbnlbXSk6IHZvaWQge1xuXG5cbiAgICB0aGlzLm1hcCA9IG5ldyBnb29nbGUubWFwcy5NYXAoXG4gICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvb2dsZW1hcFwiKSBhcyBIVE1MRWxlbWVudCxcbiAgICAgIHtcbiAgICAgICAgY2VudGVyOiB7IGxhdDogcGFyc2VGbG9hdChjaGFydENvbmZpZy5jZW50ZXJMYXQpLCBsbmc6IHBhcnNlRmxvYXQoY2hhcnRDb25maWcuY2VudGVyTG5nKSB9LFxuICAgICAgICB6b29tOiBwYXJzZUludChjaGFydENvbmZpZy56b29tKVxuICAgICAgfVxuICAgICk7XG5cblxuICAgIHRoaXMubWFwLmRhdGEubG9hZEdlb0pzb24oY2hhcnRDb25maWcuZ2pzb25GaWxlUGF0aCk7XG4gICAgdGhpcy5tYXAuZGF0YS5zZXRTdHlsZShmZWF0dXJlID0+IHRoaXMuZ2V0RmVhdHVyZVN0eWxlKGZlYXR1cmUsIGNoYXJ0Q29uZmlnLCB0aGlzLm1pbkNob3JvcGxldGhNYXBDbnQsIHRoaXMubWF4Q2hvcm9wbGV0aE1hcENudCkpO1xuXG4gICAgY29uc3QgaW5mb1dpbmRvdyA9IG5ldyBnb29nbGUubWFwcy5JbmZvV2luZG93KCk7XG5cbiAgICB0aGlzLm1hcC5kYXRhLmFkZExpc3RlbmVyKCdtb3VzZW92ZXInLCAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZGlzdHJpY3QgPSBldmVudC5mZWF0dXJlLmdldFByb3BlcnR5KCdkJyk7XG4gICAgICBjb25zdCBrZXkgPSBkaXN0cmljdD8udG9VcHBlckNhc2UoKTtcblxuICAgICAgY29uc3Qgcm93ID0gdGhpcy5jaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UuZ2V0KGtleSk7XG5cbiAgICAgIGluZm9XaW5kb3cuc2V0Q29udGVudChcbiAgICAgICAgdGhpcy5idWlsZEluZm9XaW5kb3dDb250ZW50KGRpc3RyaWN0LCByb3csIHRvb3RUaXBDb2x1bW4pXG4gICAgICApO1xuXG4gICAgICBpbmZvV2luZG93LnNldFBvc2l0aW9uKGV2ZW50LmxhdExuZyk7XG4gICAgICBpbmZvV2luZG93Lm9wZW4odGhpcy5tYXApO1xuICAgIH0pO1xuXG4gICAgdGhpcy5tYXAuZGF0YS5hZGRMaXN0ZW5lcignbW91c2VvdXQnLCAoKSA9PiBpbmZvV2luZG93LmNsb3NlKCkpO1xuICB9XG5cblxuICBidWlsZEluZm9XaW5kb3dDb250ZW50KGRpc3RyaWN0OiBzdHJpbmcsIHJvdzogYW55LCB0b290VGlwQ29sdW1uOiBhbnlbXSk6IHN0cmluZyB7XG5cbiAgICBjb25zdCByb3dzID0gdG9vdFRpcENvbHVtbi5tYXAoYyA9PiBgXG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6ZmxleDsganVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47XCI+XG4gICAgICA8c3Bhbj4ke2MuY2FwdGlvbn08L3NwYW4+XG4gICAgICA8c3Ryb25nPiR7cm93Py5bYy5kYXRhRmllbGRdID8/ICdObyBkYXRhJ308L3N0cm9uZz5cbiAgICA8L2Rpdj5cbiAgYCkuam9pbignJyk7XG5cbiAgICByZXR1cm4gYFxuICAgIDxkaXYgc3R5bGU9XCJcbiAgICAgIGNvbG9yOiMwMDA7XG4gICAgICBiYWNrZ3JvdW5kOiNmZmY7XG4gICAgICBwYWRkaW5nOjhweCAxMnB4O1xuICAgICAgZm9udC1zaXplOjEzcHg7XG4gICAgICBtaW4td2lkdGg6MTUwcHg7XG4gICAgXCI+XG4gICAgICA8ZGl2IHN0eWxlPVwiZm9udC13ZWlnaHQ6NjAwOyBtYXJnaW4tYm90dG9tOjZweDtcIj5cbiAgICAgICAgJHtkaXN0cmljdH0gOiBcbiAgICAgIDwvZGl2PlxuICAgICAgJHtyb3dzfVxuICAgIDwvZGl2PlxuICBgO1xuICB9XG5cblxuICB1cGRhdGVDaG9yb3BsZXRoTWFwRGF0YSh5ZWFyOiBzdHJpbmcsIGNoYXJ0Q29uZmlnOiBhbnkpIHtcbiAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhU291cmNlLmNsZWFyKCk7XG4gICAgdGhpcy5jaG9yb3BsZXRoVG9vbHRpcERhdGFTb3VyY2UuY2xlYXIoKTtcblxuICAgIGxldCBtaW5DaG9yb3BsZXRoTWFwQ250ID0gSW5maW5pdHk7XG4gICAgbGV0IG1heENob3JvcGxldGhNYXBDbnQgPSAtSW5maW5pdHk7XG5cbiAgICBjb25zdCB2YWx1ZUZpZWxkID0gY2hhcnRDb25maWcuY2hhcnRfY29uZmlnLmZpbmQoXG4gICAgICBjID0+IGMuZGlzcGxheUZvciA9PT0gJ21hcCdcbiAgICApPy5kYXRhRmllbGQ7XG5cbiAgICB0aGlzLmNob3JvcGxldGhNYXBEYXRhXG4gICAgICAuZmlsdGVyKGQgPT4gZFtjaGFydENvbmZpZy5zbGlkZXJWYWx1ZUZpZWxkXSA9PT0geWVhcilcbiAgICAgIC5mb3JFYWNoKGQgPT4ge1xuICAgICAgICBjb25zdCBrZXkgPSBkLmRpc3RyaWN0LnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHRoaXMuY2hvcm9wbGV0aE1hcERhdGFTb3VyY2Uuc2V0KGtleSwgZFt2YWx1ZUZpZWxkXSk7XG4gICAgICAgIHRoaXMuY2hvcm9wbGV0aFRvb2x0aXBEYXRhU291cmNlLnNldChrZXksIGQpO1xuXG4gICAgICAgIG1pbkNob3JvcGxldGhNYXBDbnQgPSBNYXRoLm1pbihtaW5DaG9yb3BsZXRoTWFwQ250LCBkW3ZhbHVlRmllbGRdKTtcbiAgICAgICAgbWF4Q2hvcm9wbGV0aE1hcENudCA9IE1hdGgubWF4KG1heENob3JvcGxldGhNYXBDbnQsIGRbdmFsdWVGaWVsZF0pO1xuICAgICAgfSk7XG4gICAgaWYgKHRoaXMubWFwKSB7XG4gICAgICBpZiAodGhpcy5tYXApIHtcbiAgICAgICAgdGhpcy5tYXAuZGF0YS5mb3JFYWNoKGZlYXR1cmUgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5nZXRGZWF0dXJlU3R5bGUoZmVhdHVyZSwgY2hhcnRDb25maWcsIHRoaXMubWluQ2hvcm9wbGV0aE1hcENudCwgdGhpcy5tYXhDaG9yb3BsZXRoTWFwQ250KTtcblxuICAgICAgICAgIHRoaXMubWFwLmRhdGEub3ZlcnJpZGVTdHlsZShmZWF0dXJlLCBzdHlsZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEZlYXR1cmVTdHlsZShmZWF0dXJlOiBhbnksIGNoYXJ0Q29uZmlnOiBhbnksIG1pbkNvdW50LCBtYXhDb3VudCkge1xuICAgIGNvbnN0IGRpc3RyaWN0TmFtZSA9IGZlYXR1cmUuZ2V0UHJvcGVydHkoJ2QnKT8udG9VcHBlckNhc2UoKTtcbiAgICBjb25zdCBjbnQgPSB0aGlzLmNob3JvcGxldGhNYXBEYXRhU291cmNlLmdldChkaXN0cmljdE5hbWUpO1xuICAgIGNvbnNvbGUubG9nKGRpc3RyaWN0TmFtZSwgY250LCB0aGlzLmdldENvbG9yKGNudCwgY2hhcnRDb25maWcuY29sb3JPbmUsIGNoYXJ0Q29uZmlnLmNvbG9yVHdvLCBtaW5Db3VudCwgbWF4Q291bnQpKTtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsbENvbG9yOiB0aGlzLmdldENvbG9yKGNudCwgY2hhcnRDb25maWcuY29sb3JPbmUsIGNoYXJ0Q29uZmlnLmNvbG9yVHdvLCBtaW5Db3VudCwgbWF4Q291bnQpLFxuICAgICAgc3Ryb2tlQ29sb3I6ICcjNTU1JyxcbiAgICAgIHN0cm9rZVdlaWdodDogMSxcbiAgICAgIGZpbGxPcGFjaXR5OiAwLjc1XG4gICAgfTtcbiAgfVxuXG4gIC8vIGNob3JvcGxldGhNYXAgc3RhcnQgLy9cblxuXG5cblxuICB0b2dnbGVQbGF5KCkge1xuICAgIGlmICh0aGlzLmlzUGxheWluZykge1xuICAgICAgdGhpcy5wYXVzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBsYXkoKTtcbiAgICB9XG4gIH1cblxuICBwbGF5KCkge1xuICAgIHRoaXMuaXNQbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnBsYXlJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXggPCB0aGlzLmFsbFNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZXMubGVuZ3RoIC0gMSkge1xuICAgICAgICB0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXgrKztcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyQnlJbmRleCh0aGlzLmNob3JvcGxldGhNYXBDdXJyZW50SW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXVzZSgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuY2hvcm9wbGV0aE1hcHNsaWRlU3BlZWQpO1xuXG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICB0aGlzLmlzUGxheWluZyA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnBsYXlJbnRlcnZhbCkge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnBsYXlJbnRlcnZhbCk7XG4gICAgICB0aGlzLnBsYXlJbnRlcnZhbCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmVzdGFydCgpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gMDtcbiAgICB0aGlzLnVwZGF0ZVllYXJCeUluZGV4KHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBvblllYXJDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMucGF1c2UoKTsgLy8gc3RvcCBhdXRvcGxheSB3aGVuIHVzZXIgbW92ZXMgc2xpZGVyXG4gICAgdGhpcy5jaG9yb3BsZXRoTWFwQ3VycmVudEluZGV4ID0gK2V2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB0aGlzLnVwZGF0ZVllYXJCeUluZGV4KHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCk7XG4gIH1cblxuICBzZXRZZWFyQnlJbmRleChpbmRleDogbnVtYmVyKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMuY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleCA9IGluZGV4O1xuICAgIHRoaXMudXBkYXRlWWVhckJ5SW5kZXgoaW5kZXgpO1xuICB9XG5cbiAgdXBkYXRlWWVhckJ5SW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlID0gdGhpcy5hbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzW2luZGV4XTtcbiAgICB0aGlzLnVwZGF0ZUNob3JvcGxldGhNYXBEYXRhKHRoaXMuc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlLCB0aGlzLmNob3JvcGxldGhNYXBDaGFydENvbmZpZyk7XG4gIH1cblxuXG4gIC8vIHNldFllYXJCeUluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgLy8gICB0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSA9IHRoaXMuYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlc1tpbmRleF07XG4gIC8vICAgdGhpcy51cGRhdGVDaG9yb3BsZXRoTWFwRGF0YSh0aGlzLnNlbGVjdGVkUmFuZ2VTbGlkZXJWYWx1ZSwgdGhpcy5jaG9yb3BsZXRoTWFwQ2hhcnRDb25maWcpO1xuICAvLyB9XG5cbiAgLy8gb25ZZWFyQ2hhbmdlKGV2ZW50OiBFdmVudCkge1xuICAvLyAgIGNvbnN0IGluZGV4ID0gKyhldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG4gIC8vICAgdGhpcy5zZXRZZWFyQnlJbmRleChpbmRleCk7XG4gIC8vIH1cblxuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJteC0yIGJnLWdyYXktODAwXCI+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLXN0YXJ0IGJnLWdyYXktODAwIHAtMlwiPlxuICAgICAgPGFwcC1sb2FkZXI+PC9hcHAtbG9hZGVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cblxuICA8ZGl2IGNsYXNzPVwibXgtMiBwYi0yXCI+XG5cbiAgICA8bmctY29udGFpbmVyPlxuICAgICAgPGRpdiBpZD1cInJlZ2lvbnNfZGl2XCIgI2dvb2dsTWFwIHN0eWxlPVwid2lkdGg6IDEwMCVcIj48L2Rpdj5cbiAgICAgXG4gICAgICA8ZGl2IGlkPVwiZ29vZ2xlbWFwXCIgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIiBbc3R5bGUuaGVpZ2h0XT1cImNoYXJ0SGVpZ2h0XCI+PC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiIG14LWF1dG8gdy1mdWxsIG10LTNcIiAqbmdJZj1cImlzUmFuZ2VTbGlkZXJWaXNpYmxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gbWItMlwiPlxuXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRleHQtd2hpdGUgcHgtMyBweS0yIHJvdW5kZWQgYmctZ3JheS04MDAgaG92ZXI6YmctZ3JheS03MDBcIiAoY2xpY2spPVwidG9nZ2xlUGxheSgpXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhXCIgW25nQ2xhc3NdPVwiaXNQbGF5aW5nID8gJ2ZhLXBhdXNlJyA6ICdmYS1wbGF5J1wiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IHNwYWNlLXgtMiB0ZXh0LXNtIGZvbnQtc2VtaWJvbGRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHllYXIgb2YgYWxsU2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlczsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHNlbGVjdC1ub25lIHB4LTIgcHktMSByb3VuZGVkLW1kIHRyYW5zaXRpb25cIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnYmctYmxhY2sgdGV4dC13aGl0ZSBzaGFkb3cnOiB5ZWFyID09PSBzZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWUsXG4gICAgICAgICAgICAndGV4dC1ncmF5LTMwMCBob3Zlcjp0ZXh0LXdoaXRlJzogeWVhciAhPT0gc2VsZWN0ZWRSYW5nZVNsaWRlclZhbHVlXG4gICAgICAgICAgfVwiIChjbGljayk9XCJzZXRZZWFyQnlJbmRleChpKVwiPlxuICAgICAgICAgICAgICAgIHt7IHllYXIgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGV4dC13aGl0ZSBweC0zIHB5LTIgcm91bmRlZCBiZy1ncmF5LTgwMCBob3ZlcjpiZy1ncmF5LTcwMFwiIChjbGljayk9XCJyZXN0YXJ0KClcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtcmVmcmVzaFwiPjwvaT5cbiAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8aW5wdXQgdHlwZT1cInJhbmdlXCIgY2xhc3M9XCJ3LWZ1bGwgaC0yIHJvdW5kZWQtbGcgYXBwZWFyYW5jZS1ub25lIGN1cnNvci1wb2ludGVyXG4gICAgICAgICAgIGJnLWdyYWRpZW50LXRvLXIgZnJvbS1ncmVlbi00MDAgdmlhLXllbGxvdy00MDAgdG8tcmVkLTUwMFwiIFttaW5dPVwiMFwiXG4gICAgICAgICAgW21heF09XCJhbGxTZWxlY3RlZFJhbmdlU2xpZGVyVmFsdWVzLmxlbmd0aCAtIDFcIiBbdmFsdWVdPVwiY2hvcm9wbGV0aE1hcEN1cnJlbnRJbmRleFwiIChpbnB1dCk9XCJvblllYXJDaGFuZ2UoJGV2ZW50KVwiIC8+XG4gICAgICA8L2Rpdj5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG5cblxuICA8L2Rpdj5cblxuXG48L2Rpdj4iXX0=