@yibozhang/pro-table 16.1.1 → 16.1.3
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.
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Component, ContentChild, ContentChildren, EventEmitter, HostListener, Inject, Input, Optional, Output, TemplateRef, } from "@angular/core";
|
|
2
|
-
import { cloneDeep, hasIn, isNil, debounce
|
|
2
|
+
import { cloneDeep, hasIn, isNil, debounce } from "lodash-es";
|
|
3
3
|
import { PRO_TABLE_DEFAULT_COLUMN, PRO_TABLE_DEFAULT_PROPS } from "./constants";
|
|
4
4
|
import { PRO_TABLE_COLUMN_REMOTE } from "./tokens";
|
|
5
5
|
import { isObservable, lastValueFrom } from "rxjs";
|
|
@@ -76,8 +76,6 @@ export class ProTableComponent {
|
|
|
76
76
|
_sortPriority = [];
|
|
77
77
|
// 存储每个 autoComplete 字段的防抖函数
|
|
78
78
|
_autoCompleteDebounceMap = new Map();
|
|
79
|
-
// 仅在初始化时运行列配置预检查,避免后续调用重复触发
|
|
80
|
-
_preCheckDone = false;
|
|
81
79
|
_columns = [];
|
|
82
80
|
// 筛选表单数据存储
|
|
83
81
|
_searchParams = {};
|
|
@@ -165,85 +163,9 @@ export class ProTableComponent {
|
|
|
165
163
|
// 注意:此时所有 ContentChild 和 ContentChildren 都已初始化完成
|
|
166
164
|
this.autoRegisterTemplates();
|
|
167
165
|
}
|
|
168
|
-
async preCheckServerColumns() {
|
|
169
|
-
const res = await this.fetchRemoteColumns();
|
|
170
|
-
if (!res)
|
|
171
|
-
return false;
|
|
172
|
-
const initColumns = this.columns
|
|
173
|
-
.filter((col) => !col.auxiliaryColumn)
|
|
174
|
-
.map((column) => {
|
|
175
|
-
return {
|
|
176
|
-
field: column.prop,
|
|
177
|
-
isShow: !column.hideInTable,
|
|
178
|
-
header: column.title,
|
|
179
|
-
sortName: column.sortName || null,
|
|
180
|
-
};
|
|
181
|
-
});
|
|
182
|
-
if (res.code === 0) {
|
|
183
|
-
const serverColumns = Array.isArray(res?.data?.tabColumn)
|
|
184
|
-
? res.data.tabColumn
|
|
185
|
-
: [];
|
|
186
|
-
// 以远程数据为主:保留远程顺序与显示状态,仅做字段结构合并(新增字段追加、删除字段过滤)
|
|
187
|
-
const merged = this.mergeServerColumnsWithInit(serverColumns, initColumns);
|
|
188
|
-
if (!isEqual(serverColumns, merged)) {
|
|
189
|
-
const persistRes = await this.persistRemoteColumns(merged);
|
|
190
|
-
if (persistRes) {
|
|
191
|
-
this.queryDynamicColumns();
|
|
192
|
-
}
|
|
193
|
-
return false;
|
|
194
|
-
}
|
|
195
|
-
return true;
|
|
196
|
-
}
|
|
197
|
-
else if (res.code === 10) {
|
|
198
|
-
// code === 10 表示未初始化,需要继续执行后续逻辑
|
|
199
|
-
return true;
|
|
200
|
-
}
|
|
201
|
-
else {
|
|
202
|
-
return false;
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
mergeServerColumnsWithInit(serverColumns, initColumns) {
|
|
206
|
-
const initByField = new Map();
|
|
207
|
-
initColumns.forEach((c) => initByField.set(c.field, c));
|
|
208
|
-
const merged = [];
|
|
209
|
-
const seen = new Set();
|
|
210
|
-
// 1) 保留远程顺序与显示状态;同步 header/sortName;过滤掉前端已不存在的 field
|
|
211
|
-
serverColumns.forEach((sc) => {
|
|
212
|
-
const field = sc?.field;
|
|
213
|
-
if (!field || !initByField.has(field) || seen.has(field))
|
|
214
|
-
return;
|
|
215
|
-
const init = initByField.get(field);
|
|
216
|
-
merged.push({
|
|
217
|
-
...sc,
|
|
218
|
-
header: init.header,
|
|
219
|
-
sortName: init.sortName ?? null,
|
|
220
|
-
});
|
|
221
|
-
seen.add(field);
|
|
222
|
-
});
|
|
223
|
-
// 2) 追加前端新增但远程未存储的字段,使用前端默认配置(默认显示/默认标题等)
|
|
224
|
-
initColumns.forEach((ic) => {
|
|
225
|
-
const field = ic?.field;
|
|
226
|
-
if (!field || seen.has(field))
|
|
227
|
-
return;
|
|
228
|
-
merged.push({
|
|
229
|
-
field,
|
|
230
|
-
isShow: ic.isShow,
|
|
231
|
-
header: ic.header,
|
|
232
|
-
sortName: ic.sortName ?? null,
|
|
233
|
-
});
|
|
234
|
-
seen.add(field);
|
|
235
|
-
});
|
|
236
|
-
return merged;
|
|
237
|
-
}
|
|
238
166
|
async queryDynamicColumns() {
|
|
239
167
|
if (!this.tableName || !this.columnRemote)
|
|
240
168
|
return;
|
|
241
|
-
if (!this._preCheckDone) {
|
|
242
|
-
const checkResult = await this.preCheckServerColumns();
|
|
243
|
-
this._preCheckDone = true;
|
|
244
|
-
if (!checkResult)
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
169
|
const res = await this.fetchRemoteColumns();
|
|
248
170
|
if (!res)
|
|
249
171
|
return;
|
|
@@ -256,22 +178,19 @@ export class ProTableComponent {
|
|
|
256
178
|
hideInTable: !item.isShow,
|
|
257
179
|
};
|
|
258
180
|
});
|
|
259
|
-
this._serverColumns = _tabColumn;
|
|
260
|
-
this.updateTableColumns(
|
|
181
|
+
this._serverColumns = _tabColumn.filter((col) => this.columns.some((localCol) => localCol.prop === col.prop));
|
|
182
|
+
this.updateTableColumns(this._serverColumns);
|
|
261
183
|
}
|
|
262
184
|
else if (res.code === 10) {
|
|
263
185
|
// 如果未设置接口返回,需要默认调用一次修改函数初始化数据
|
|
264
186
|
const initColumns = this.columns
|
|
265
187
|
.filter((col) => !col.auxiliaryColumn)
|
|
266
|
-
.map((column) => {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
};
|
|
273
|
-
});
|
|
274
|
-
// 调用修改接口初始化数据
|
|
188
|
+
.map((column) => ({
|
|
189
|
+
field: column.prop,
|
|
190
|
+
isShow: true,
|
|
191
|
+
header: column.title,
|
|
192
|
+
sortName: column.sortName || null,
|
|
193
|
+
}));
|
|
275
194
|
const initRes = await this.persistRemoteColumns(initColumns);
|
|
276
195
|
if (initRes) {
|
|
277
196
|
this.queryDynamicColumns();
|
|
@@ -463,63 +382,21 @@ export class ProTableComponent {
|
|
|
463
382
|
this.setSelectRequest(this._searchFiledColumns);
|
|
464
383
|
}
|
|
465
384
|
updateTableColumns(injectColumns) {
|
|
466
|
-
//
|
|
467
|
-
const
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
// 4. 按照injectColumns的顺序重新排列非辅助列
|
|
473
|
-
const reorderedNonAuxiliaryColumns = [];
|
|
474
|
-
const remainingNonAuxiliaryColumns = [...nonAuxiliaryColumns]; // 复制一份用于查找和移除
|
|
475
|
-
processedInjectColumns.forEach((injectCol) => {
|
|
476
|
-
// 查找非辅助列中对应的下标
|
|
477
|
-
const existingColIndex = remainingNonAuxiliaryColumns.findIndex((col) => col.prop === injectCol.prop);
|
|
478
|
-
if (existingColIndex !== -1) {
|
|
479
|
-
// 如果找到相同列,用injectColumns中的属性覆盖原始columns中的属性
|
|
480
|
-
const existingCol = remainingNonAuxiliaryColumns[existingColIndex];
|
|
481
|
-
const updatedCol = { ...existingCol, ...injectCol };
|
|
482
|
-
reorderedNonAuxiliaryColumns.push(updatedCol);
|
|
483
|
-
// 从剩余数组中移除,避免重复
|
|
484
|
-
remainingNonAuxiliaryColumns.splice(existingColIndex, 1);
|
|
485
|
-
}
|
|
486
|
-
else {
|
|
487
|
-
// 如果没找到对应的列,直接添加injectColumns中的列
|
|
488
|
-
reorderedNonAuxiliaryColumns.push(injectCol);
|
|
489
|
-
}
|
|
490
|
-
});
|
|
491
|
-
// 5. 处理剩余的原始columns中的非辅助列(在injectColumns中未出现的列)
|
|
492
|
-
// 这些列应该被隐藏(设置hideInTable为true)
|
|
493
|
-
remainingNonAuxiliaryColumns.forEach((remainingCol) => {
|
|
494
|
-
const hiddenCol = { ...remainingCol, hideInTable: true };
|
|
495
|
-
reorderedNonAuxiliaryColumns.push(hiddenCol);
|
|
496
|
-
});
|
|
497
|
-
// 6. 按照原始columns的顺序重新组合:保持辅助列的原始位置和属性
|
|
498
|
-
const finalColumns = [];
|
|
499
|
-
let nonAuxiliaryIndex = 0;
|
|
500
|
-
let auxiliaryIndex = 0;
|
|
501
|
-
originalColumns.forEach((originalCol) => {
|
|
502
|
-
if (originalCol.auxiliaryColumn) {
|
|
503
|
-
// 如果是辅助列,使用原始列数据,完全不进行任何修改
|
|
504
|
-
finalColumns.push(originalCol);
|
|
505
|
-
auxiliaryIndex++;
|
|
506
|
-
}
|
|
507
|
-
else {
|
|
508
|
-
// 如果是非辅助列,使用重新排序后的列,但保留原始列的所有属性
|
|
509
|
-
const reorderedCol = reorderedNonAuxiliaryColumns[nonAuxiliaryIndex];
|
|
510
|
-
if (reorderedCol) {
|
|
511
|
-
// 合并原始列和重新排序后的列,确保保留所有原始属性
|
|
512
|
-
const mergedCol = { ...originalCol, ...reorderedCol };
|
|
513
|
-
finalColumns.push(mergedCol);
|
|
514
|
-
}
|
|
515
|
-
else {
|
|
516
|
-
// 如果重新排序后的列不存在,使用原始列
|
|
517
|
-
finalColumns.push(originalCol);
|
|
518
|
-
}
|
|
519
|
-
nonAuxiliaryIndex++;
|
|
520
|
-
}
|
|
385
|
+
// 远程列直接作为来源,过滤掉本地不存在的列,并从本地列补充渲染配置
|
|
386
|
+
const remoteColumns = injectColumns
|
|
387
|
+
.filter((injectCol) => this.columns.some((col) => col.prop === injectCol.prop))
|
|
388
|
+
.map((injectCol) => {
|
|
389
|
+
const localCol = this.columns.find((col) => col.prop === injectCol.prop);
|
|
390
|
+
return { ...localCol, ...injectCol };
|
|
521
391
|
});
|
|
522
|
-
|
|
392
|
+
// 辅助列取自本地,保持在原始位置(首部 / 尾部)
|
|
393
|
+
const firstNonAuxIndex = this.columns.findIndex((c) => !c.auxiliaryColumn);
|
|
394
|
+
const lastNonAuxIndex = this.columns.length -
|
|
395
|
+
1 -
|
|
396
|
+
[...this.columns].reverse().findIndex((c) => !c.auxiliaryColumn);
|
|
397
|
+
const headAuxiliary = this.columns.filter((col, i) => col.auxiliaryColumn && i < firstNonAuxIndex);
|
|
398
|
+
const tailAuxiliary = this.columns.filter((col, i) => col.auxiliaryColumn && i > lastNonAuxIndex);
|
|
399
|
+
this.formateInnerColumns([...headAuxiliary, ...remoteColumns, ...tailAuxiliary]);
|
|
523
400
|
}
|
|
524
401
|
// 通过 Proxy 监听 _searchParams 的属性变更
|
|
525
402
|
createSearchParamsProxy(target) {
|
|
@@ -1190,4 +1067,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1190
1067
|
type: HostListener,
|
|
1191
1068
|
args: ["window:resize"]
|
|
1192
1069
|
}] } });
|
|
1193
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byby10YWJsZS9zcmMvbGliL3Byby10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm8tdGFibGUvc3JjL2xpYi9wcm8tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFXaEYsT0FBTyxFQUFFLHVCQUF1QixFQUErQixNQUFNLFVBQVUsQ0FBQztBQUNoRixPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFPbkQsTUFBTSxPQUFPLGlCQUFpQjtJQTJKbEI7SUExSkQsYUFBYSxHQUFZLElBQUksQ0FBQztJQUU5QixZQUFZLEdBQVksSUFBSSxDQUFDO0lBRTdCLEtBQUssR0FBa0IsSUFBSSxDQUFDO0lBRTVCLFNBQVMsR0FBVyxFQUFFLENBQUM7SUFFdkIsUUFBUSxHQUFZLEtBQUssQ0FBQztJQUUxQixPQUFPLEdBQXFCLEVBQUUsQ0FBQztJQUUvQixhQUFhLEdBQVksSUFBSSxDQUFDO0lBRTlCLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFFOUIsY0FBYyxHQUFXLElBQUksQ0FBQztJQUU5QixZQUFZLEdBQVcsSUFBSSxDQUFDO0lBRTVCLFVBQVUsR0FBVyxN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QkFBcEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUdHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUdHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTTtnQkFFRyxZQUFZO3NCQUFyQixNQUFNO2dCQUVHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsdUJBQXVCO3NCQUFoQyxNQUFNO2dCQUVvQixZQUFZO3NCQUF0QyxZQUFZO3VCQUFDLFdBQVc7Z0JBRUssZUFBZTtzQkFBNUMsWUFBWTt1QkFBQyxjQUFjO2dCQUVFLFlBQVk7c0JBQXpDLGVBQWU7dUJBQUMsV0FBVztnQkE4RDVCLGNBQWM7c0JBRGIsWUFBWTt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRJbml0LFxyXG4gIENvbXBvbmVudCxcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgQ29udGVudENoaWxkcmVuLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgSW5qZWN0LFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPcHRpb25hbCxcclxuICBPdXRwdXQsXHJcbiAgUXVlcnlMaXN0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IGNsb25lRGVlcCwgaGFzSW4sIGlzTmlsLCBkZWJvdW5jZSwgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2gtZXNcIjtcclxuaW1wb3J0IHsgUFJPX1RBQkxFX0RFRkFVTFRfQ09MVU1OLCBQUk9fVEFCTEVfREVGQVVMVF9QUk9QUyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQge1xyXG4gIEF1dG9Db21wbGV0ZUZpZWxkUHJvcHMsXHJcbiAgQ2hlY2tib3hGaWVsZFByb3BzLFxyXG4gIE9wdGlvbnNUeXBlLFxyXG4gIFByb1RhYmxlQ29sdW1uLFxyXG4gIFByb1RhYmxlUGFnZUluZm8sXHJcbiAgUHJvVGFibGVSZXF1ZXN0UmVzdWx0LFxyXG4gIFByb1RhYmxlVmFsdWVzQ2hhbmdlLFxyXG4gIFNlbGVjdEZpZWxkUHJvcHMsXHJcbn0gZnJvbSBcIi4vdHlwZVwiO1xyXG5pbXBvcnQgeyBQUk9fVEFCTEVfQ09MVU1OX1JFTU9URSwgUHJvVGFibGVSZW1vdGVDb2x1bW5TZXJ2aWNlIH0gZnJvbSBcIi4vdG9rZW5zXCI7XHJcbmltcG9ydCB7IGlzT2JzZXJ2YWJsZSwgbGFzdFZhbHVlRnJvbSB9IGZyb20gXCJyeGpzXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtcHJvLXRhYmxlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi9wcm8tdGFibGUuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4vcHJvLXRhYmxlLmNvbXBvbmVudC5sZXNzXCJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQge1xyXG4gIEBJbnB1dCgpIHNob3dTZWFyY2hCdG46IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBzaG93Q2xlYXJCdG46IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBJbnB1dCgpIHRhYmxlTmFtZTogc3RyaW5nID0gXCJcIjtcclxuXHJcbiAgQElucHV0KCkgbXVsdGlSb3c6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgY29sdW1uczogUHJvVGFibGVDb2x1bW5bXSA9IFtdO1xyXG5cclxuICBASW5wdXQoKSBzaG93U2VhcmNoQmFyOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0FjdGlvbkJhcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIGNvbmZpcm1CdG5UZXh0OiBzdHJpbmcgPSBcIuafpeivolwiO1xyXG5cclxuICBASW5wdXQoKSBjbGVhckJ0blRleHQ6IHN0cmluZyA9IFwi5riF56m6XCI7XHJcblxyXG4gIEBJbnB1dCgpIGxhYmVsV2lkdGg6IHN0cmluZyA9IFwiOTBweFwiO1xyXG5cclxuICBASW5wdXQoKSBsYWJlbEFsaWduOiBzdHJpbmcgPSBcInJpZ2h0XCI7XHJcblxyXG4gIEBJbnB1dCgpIGZvcm1JdGVtV2lkdGg6IHN0cmluZyA9IFwiMzMwcHhcIjtcclxuXHJcbiAgQElucHV0KCkgZGF0YVNvdXJjZTogYW55W10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgYm9yZGVyZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBvdXRlckJvcmRlcmVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd1BhZ2luYXRpb246IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBmcm9udFBhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgc2Nyb2xsOiB7IHg/OiBzdHJpbmcgfCBudW1iZXI7IHk/OiBzdHJpbmcgfCBudW1iZXIgfSB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSByZXF1ZXN0OiAocGFyYW1zOiBhbnkpID0+IFByb21pc2U8UHJvVGFibGVSZXF1ZXN0UmVzdWx0PjtcclxuXHJcbiAgQElucHV0KCkgc3VtbWFyeURhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLy8g5o6S5bqP5qih5byP77yabG9jYWwg5pys5Zyw5o6S5bqP77ybc2VydmVyIOWcqOe6v+aOkuW6j++8iOaPkOS6pOe7meaOpeWPo++8iVxyXG4gIEBJbnB1dCgpIHNvcnRNb2RlOiBcImxvY2FsXCIgfCBcInNlcnZlclwiID0gXCJsb2NhbFwiO1xyXG5cclxuICBASW5wdXQoKSBzaG93Q29sdW1uU2V0dGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDmmK/lkKblvIDlkK/lpJrliJfmjpLluo/vvIjpu5jorqTljZXliJfvvIlcclxuICBASW5wdXQoKSBtdWx0aXBsZVNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NoZWNrYm94OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIOWIpOaWreihjOaYr+WQpuemgeeUqOeahOWHveaVsFxyXG4gIEBJbnB1dCgpIHJvd0Rpc2FibGVkOiAoZGF0YTogYW55KSA9PiBib29sZWFuID0gKCkgPT4gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHJlcmVuZGVyT25SZXNpemU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyDmmK/lkKboh6rliqjop6blj5Hor7fmsYJcclxuICBASW5wdXQoKSBhdXRvVHJpZ2dlclJlcXVlc3Q6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBjdXN0b21UYWJsZVJlbmRlcj86IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBPdXRwdXQoKSBvblJvd0NsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvblJvd0RiQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uVmFsdWVzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9UYWJsZVZhbHVlc0NoYW5nZT4oKTtcclxuXHJcbiAgQE91dHB1dCgpIG9uUmVzZXRGb3JtQmVmb3JlUmVsb2FkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoXCJhY3Rpb25CYXJcIikgYWN0aW9uQmFyVHBsITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZChcIkltZ0FjdGlvbkJhclwiKSBpbWdBY3Rpb25CYXJUcGwhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlUmVmKSBhbGxUZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XHJcblxyXG4gIHByaXZhdGUgX3NhdmVkU2VhcmNoUGFyYW1zOiBhbnkgPSB7fTtcclxuXHJcbiAgLy8g5a2Y5YKo5omA5pyJ6Ieq5a6a5LmJ5qih5p2/55qE5byV55SoXHJcbiAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXMgPSBuZXcgTWFwPHN0cmluZywgVGVtcGxhdGVSZWY8YW55Pj4oKTtcclxuXHJcbiAgLy8g6K6w5b2V5ZCE5YiX5o6S5bqP54q25oCB77yaJ2FzY2VuZCcgfCAnZGVzY2VuZCcgfCBudWxsXHJcblxyXG4gIHByaXZhdGUgX3NvcnRNYXA6IFJlY29yZDxzdHJpbmcsIFwiYXNjZW5kXCIgfCBcImRlc2NlbmRcIiB8IG51bGw+ID0ge307XHJcblxyXG4gIC8vIOiusOW9leWkmuWIl+aOkuW6j+eahOS8mOWFiOe6p++8iOWQjuiuvue9rueahOS8mOWFiO+8iVxyXG4gIHByaXZhdGUgX3NvcnRQcmlvcml0eTogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgLy8g5a2Y5YKo5q+P5LiqIGF1dG9Db21wbGV0ZSDlrZfmrrXnmoTpmLLmipblh73mlbBcclxuICBwcml2YXRlIF9hdXRvQ29tcGxldGVEZWJvdW5jZU1hcDogTWFwPHN0cmluZywgKGV2ZW50OiBFdmVudCkgPT4gdm9pZD4gPVxyXG4gICAgbmV3IE1hcCgpO1xyXG5cclxuICAvLyDku4XlnKjliJ3lp4vljJbml7bov5DooYzliJfphY3nva7pooTmo4Dmn6XvvIzpgb/lhY3lkI7nu63osIPnlKjph43lpI3op6blj5FcclxuICBwcml2YXRlIF9wcmVDaGVja0RvbmU6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgX2NvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgLy8g562b6YCJ6KGo5Y2V5pWw5o2u5a2Y5YKoXHJcbiAgX3NlYXJjaFBhcmFtczogYW55ID0ge307XHJcblxyXG4gIC8vIOetm+mAieihqOWNlWxpc3TmuLLmn5PmlbDmja5cclxuICBfc2VhcmNoRmlsZWRDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdID0gW107XHJcblxyXG4gIF9wYWdlSW5mbzogUHJvVGFibGVQYWdlSW5mbyA9IHtcclxuICAgIHBhZ2VJbmRleDogMSxcclxuICAgIHBhZ2VTaXplOiAxNSxcclxuICAgIHRvdGFsOiAxMDAsXHJcbiAgICBwYWdlU2l6ZU9wdGlvbnM6IFsxMCwgMTUsIDIwLCA1MCwgMTAwLCA1MDAsIDEwMDBdLFxyXG4gIH07XHJcblxyXG4gIF9sb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIF9zZWxlY3RlZFRhYmxlUm93OiBhbnkgPSBudWxsO1xyXG5cclxuICAvLyDpgInkuK3nmoTooYzmlbDmja7vvIjnlKjkuo7lpI3pgInmoYbpgInmi6nvvIktIOS/neeVmeeUqOS6juWFvOWuueaAp1xyXG4gIF9zZWxlY3RlZFJvd3M6IGFueVtdID0gW107XHJcblxyXG4gIC8vIOWFqOmAieeKtuaAgVxyXG4gIF9jaGVja2VkQWxsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIOWNiumAieeKtuaAge+8iOmDqOWIhumAieS4re+8iVxyXG4gIF9pbmRldGVybWluYXRlOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIC8vIOi/nOeoi2NvbHVtbnNcclxuICBfc2VydmVyQ29sdW1uczogUHJvVGFibGVDb2x1bW5bXSA9IFtdO1xyXG5cclxuICAvLyDlrZjlgqggYXV0b0NvbXBsZXRlIOWtl+auteeahOaVsOaNrua6kFxyXG4gIF9hdXRvQ29tcGxldGVEYXRhU291cmNlczogUmVjb3JkPHN0cmluZywgYW55W10+ID0ge307XHJcblxyXG4gIC8vIOaOp+WItuihqOagvOaYvuekuueKtuaAge+8jOeUqOS6jumHjeaWsOaMgui9vVxyXG4gIF9zaG93VGFibGU6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAvLyDpmLLmipblrprml7blmajvvIznlKjkuo7nqpflj6PlpKflsI/osIPmlbRcclxuICBwcml2YXRlIHJlc2l6ZURlYm91bmNlOiBhbnk7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoXCJ3aW5kb3c6cmVzaXplXCIpXHJcbiAgb25XaW5kb3dSZXNpemUoKSB7XHJcbiAgICBpZiAoIXRoaXMucmVyZW5kZXJPblJlc2l6ZSkgcmV0dXJuO1xyXG5cclxuICAgIGlmICh0aGlzLnJlc2l6ZURlYm91bmNlKSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZURlYm91bmNlKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc2l6ZURlYm91bmNlID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vIOmAmui/hyBuZ0lmIOmHjeaWsOaMgui9veihqOagvFxyXG4gICAgICB0aGlzLl9zaG93VGFibGUgPSBmYWxzZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5fc2hvd1RhYmxlID0gdHJ1ZTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9LCAxNTApO1xyXG4gIH1cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBPcHRpb25hbCgpXHJcbiAgICBASW5qZWN0KFBST19UQUJMRV9DT0xVTU5fUkVNT1RFKVxyXG4gICAgcHJpdmF0ZSBjb2x1bW5SZW1vdGU6IFByb1RhYmxlUmVtb3RlQ29sdW1uU2VydmljZSB8IG51bGwsXHJcbiAgKSB7fVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGZldGNoUmVtb3RlQ29sdW1ucygpIHtcclxuICAgIGlmICghdGhpcy5jb2x1bW5SZW1vdGU/LmdldENvbCB8fCAhdGhpcy50YWJsZU5hbWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNvbHVtblJlbW90ZS5nZXRDb2wodGhpcy50YWJsZU5hbWUsIHRoaXMubXVsdGlSb3cpO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHBlcnNpc3RSZW1vdGVDb2x1bW5zKGNvbHVtbnM6IGFueVtdKSB7XHJcbiAgICBpZiAoIXRoaXMuY29sdW1uUmVtb3RlPy5zZXRDb2wgfHwgIXRoaXMudGFibGVOYW1lKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5jb2x1bW5SZW1vdGUuc2V0Q29sKFxyXG4gICAgICAgIHRoaXMudGFibGVOYW1lLFxyXG4gICAgICAgIGNvbHVtbnMsXHJcbiAgICAgICAgdGhpcy5tdWx0aVJvdyxcclxuICAgICAgKTtcclxuICAgICAgaWYgKHJlc3VsdCAmJiBpc09ic2VydmFibGUocmVzdWx0KSkge1xyXG4gICAgICAgIHJldHVybiBhd2FpdCBsYXN0VmFsdWVGcm9tKHJlc3VsdCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLl9zZWFyY2hQYXJhbXMgPSB7fTtcclxuICAgIHRoaXMuZm9ybWF0ZUlubmVyQ29sdW1ucyh0aGlzLmNvbHVtbnMpO1xyXG4gICAgYXdhaXQgdGhpcy5zZXRTZWFyY2hQYXJhbXModGhpcy5jb2x1bW5zKTtcclxuXHJcbiAgICAvLyDkvb/nlKggUHJveHkg5YyF6KOFIF9zZWFyY2hQYXJhbXPvvIzmi6bmiKrooajljZXpobnlgLzlj5jljJblubblkJHlpJblj5Hlh7rkuovku7ZcclxuICAgIHRoaXMuX3NlYXJjaFBhcmFtcyA9IHRoaXMuY3JlYXRlU2VhcmNoUGFyYW1zUHJveHkodGhpcy5fc2VhcmNoUGFyYW1zKTtcclxuICAgIGlmICh0aGlzLmF1dG9UcmlnZ2VyUmVxdWVzdCkge1xyXG4gICAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnF1ZXJ5RHluYW1pY0NvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcclxuICAgIC8vIOiHquWKqOazqOWGjOaJgOacieiHquWumuS5ieaooeadv1xyXG4gICAgLy8g5rOo5oSP77ya5q2k5pe25omA5pyJIENvbnRlbnRDaGlsZCDlkowgQ29udGVudENoaWxkcmVuIOmDveW3suWIneWni+WMluWujOaIkFxyXG4gICAgdGhpcy5hdXRvUmVnaXN0ZXJUZW1wbGF0ZXMoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcHJlQ2hlY2tTZXJ2ZXJDb2x1bW5zKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5mZXRjaFJlbW90ZUNvbHVtbnMoKTtcclxuICAgIGlmICghcmVzKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBpbml0Q29sdW1ucyA9IHRoaXMuY29sdW1uc1xyXG4gICAgICAuZmlsdGVyKChjb2wpID0+ICFjb2wuYXV4aWxpYXJ5Q29sdW1uKVxyXG4gICAgICAubWFwKChjb2x1bW4pID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZmllbGQ6IGNvbHVtbi5wcm9wLFxyXG4gICAgICAgICAgaXNTaG93OiAhY29sdW1uLmhpZGVJblRhYmxlLCAvLyDpu5jorqTlhajpg6jmmL7npLpcclxuICAgICAgICAgIGhlYWRlcjogY29sdW1uLnRpdGxlLFxyXG4gICAgICAgICAgc29ydE5hbWU6IGNvbHVtbi5zb3J0TmFtZSB8fCBudWxsLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHJlcy5jb2RlID09PSAwKSB7XHJcbiAgICAgIGNvbnN0IHNlcnZlckNvbHVtbnMgPSBBcnJheS5pc0FycmF5KHJlcz8uZGF0YT8udGFiQ29sdW1uKVxyXG4gICAgICAgID8gcmVzLmRhdGEudGFiQ29sdW1uXHJcbiAgICAgICAgOiBbXTtcclxuICAgICAgLy8g5Lul6L+c56iL5pWw5o2u5Li65Li777ya5L+d55WZ6L+c56iL6aG65bqP5LiO5pi+56S654q25oCB77yM5LuF5YGa5a2X5q6157uT5p6E5ZCI5bm277yI5paw5aKe5a2X5q616L+95Yqg44CB5Yig6Zmk5a2X5q616L+H5ruk77yJXHJcbiAgICAgIGNvbnN0IG1lcmdlZCA9IHRoaXMubWVyZ2VTZXJ2ZXJDb2x1bW5zV2l0aEluaXQoXHJcbiAgICAgICAgc2VydmVyQ29sdW1ucyxcclxuICAgICAgICBpbml0Q29sdW1ucyxcclxuICAgICAgKTtcclxuICAgICAgaWYgKCFpc0VxdWFsKHNlcnZlckNvbHVtbnMsIG1lcmdlZCkpIHtcclxuICAgICAgICBjb25zdCBwZXJzaXN0UmVzID0gYXdhaXQgdGhpcy5wZXJzaXN0UmVtb3RlQ29sdW1ucyhtZXJnZWQpO1xyXG4gICAgICAgIGlmIChwZXJzaXN0UmVzKSB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5RHluYW1pY0NvbHVtbnMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIGlmIChyZXMuY29kZSA9PT0gMTApIHtcclxuICAgICAgLy8gY29kZSA9PT0gMTAg6KGo56S65pyq5Yid5aeL5YyW77yM6ZyA6KaB57un57ut5omn6KGM5ZCO57ut6YC76L6RXHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBtZXJnZVNlcnZlckNvbHVtbnNXaXRoSW5pdChcclxuICAgIHNlcnZlckNvbHVtbnM6IGFueVtdLFxyXG4gICAgaW5pdENvbHVtbnM6IEFycmF5PHtcclxuICAgICAgZmllbGQ6IHN0cmluZztcclxuICAgICAgaXNTaG93OiBib29sZWFuO1xyXG4gICAgICBoZWFkZXI6IHN0cmluZztcclxuICAgICAgc29ydE5hbWU/OiBzdHJpbmcgfCBudWxsO1xyXG4gICAgfT4sXHJcbiAgKSB7XHJcbiAgICBjb25zdCBpbml0QnlGaWVsZCA9IG5ldyBNYXA8XHJcbiAgICAgIHN0cmluZyxcclxuICAgICAge1xyXG4gICAgICAgIGZpZWxkOiBzdHJpbmc7XHJcbiAgICAgICAgaXNTaG93OiBib29sZWFuO1xyXG4gICAgICAgIGhlYWRlcjogc3RyaW5nO1xyXG4gICAgICAgIHNvcnROYW1lPzogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgfVxyXG4gICAgPigpO1xyXG4gICAgaW5pdENvbHVtbnMuZm9yRWFjaCgoYykgPT4gaW5pdEJ5RmllbGQuc2V0KGMuZmllbGQsIGMpKTtcclxuXHJcbiAgICBjb25zdCBtZXJnZWQ6IGFueVtdID0gW107XHJcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcblxyXG4gICAgLy8gMSkg5L+d55WZ6L+c56iL6aG65bqP5LiO5pi+56S654q25oCB77yb5ZCM5q2lIGhlYWRlci9zb3J0TmFtZe+8m+i/h+a7pOaOieWJjeerr+W3suS4jeWtmOWcqOeahCBmaWVsZFxyXG4gICAgc2VydmVyQ29sdW1ucy5mb3JFYWNoKChzYzogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGZpZWxkID0gc2M/LmZpZWxkO1xyXG4gICAgICBpZiAoIWZpZWxkIHx8ICFpbml0QnlGaWVsZC5oYXMoZmllbGQpIHx8IHNlZW4uaGFzKGZpZWxkKSkgcmV0dXJuO1xyXG4gICAgICBjb25zdCBpbml0ID0gaW5pdEJ5RmllbGQuZ2V0KGZpZWxkKSE7XHJcbiAgICAgIG1lcmdlZC5wdXNoKHtcclxuICAgICAgICAuLi5zYyxcclxuICAgICAgICBoZWFkZXI6IGluaXQuaGVhZGVyLFxyXG4gICAgICAgIHNvcnROYW1lOiBpbml0LnNvcnROYW1lID8/IG51bGwsXHJcbiAgICAgIH0pO1xyXG4gICAgICBzZWVuLmFkZChmaWVsZCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyAyKSDov73liqDliY3nq6/mlrDlop7kvYbov5znqIvmnKrlrZjlgqjnmoTlrZfmrrXvvIzkvb/nlKjliY3nq6/pu5jorqTphY3nva7vvIjpu5jorqTmmL7npLov6buY6K6k5qCH6aKY562J77yJXHJcbiAgICBpbml0Q29sdW1ucy5mb3JFYWNoKChpYykgPT4ge1xyXG4gICAgICBjb25zdCBmaWVsZCA9IGljPy5maWVsZDtcclxuICAgICAgaWYgKCFmaWVsZCB8fCBzZWVuLmhhcyhmaWVsZCkpIHJldHVybjtcclxuICAgICAgbWVyZ2VkLnB1c2goe1xyXG4gICAgICAgIGZpZWxkLFxyXG4gICAgICAgIGlzU2hvdzogaWMuaXNTaG93LFxyXG4gICAgICAgIGhlYWRlcjogaWMuaGVhZGVyLFxyXG4gICAgICAgIHNvcnROYW1lOiBpYy5zb3J0TmFtZSA/PyBudWxsLFxyXG4gICAgICB9KTtcclxuICAgICAgc2Vlbi5hZGQoZmllbGQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIG1lcmdlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgcXVlcnlEeW5hbWljQ29sdW1ucygpIHtcclxuICAgIGlmICghdGhpcy50YWJsZU5hbWUgfHwgIXRoaXMuY29sdW1uUmVtb3RlKSByZXR1cm47XHJcbiAgICBpZiAoIXRoaXMuX3ByZUNoZWNrRG9uZSkge1xyXG4gICAgICBjb25zdCBjaGVja1Jlc3VsdCA9IGF3YWl0IHRoaXMucHJlQ2hlY2tTZXJ2ZXJDb2x1bW5zKCk7XHJcbiAgICAgIHRoaXMuX3ByZUNoZWNrRG9uZSA9IHRydWU7XHJcbiAgICAgIGlmICghY2hlY2tSZXN1bHQpIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZmV0Y2hSZW1vdGVDb2x1bW5zKCk7XHJcbiAgICBpZiAoIXJlcykgcmV0dXJuO1xyXG4gICAgaWYgKHJlcy5jb2RlID09PSAwKSB7XHJcbiAgICAgIGNvbnN0IF90YWJDb2x1bW4gPSByZXMuZGF0YS50YWJDb2x1bW4ubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHRpdGxlOiBpdGVtLmhlYWRlcixcclxuICAgICAgICAgIHByb3A6IGl0ZW0uZmllbGQsXHJcbiAgICAgICAgICBzb3J0TmFtZTogaXRlbS5zb3J0TmFtZSxcclxuICAgICAgICAgIGhpZGVJblRhYmxlOiAhaXRlbS5pc1Nob3csXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuX3NlcnZlckNvbHVtbnMgPSBfdGFiQ29sdW1uO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRhYmxlQ29sdW1ucyhfdGFiQ29sdW1uKTtcclxuICAgIH0gZWxzZSBpZiAocmVzLmNvZGUgPT09IDEwKSB7XHJcbiAgICAgIC8vIOWmguaenOacquiuvue9ruaOpeWPo+i/lOWbnu+8jOmcgOimgem7mOiupOiwg+eUqOS4gOasoeS/ruaUueWHveaVsOWIneWni+WMluaVsOaNrlxyXG4gICAgICBjb25zdCBpbml0Q29sdW1ucyA9IHRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gIWNvbC5hdXhpbGlhcnlDb2x1bW4pXHJcbiAgICAgICAgLm1hcCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLnByb3AsXHJcbiAgICAgICAgICAgIGlzU2hvdzogdHJ1ZSwgLy8g6buY6K6k5YWo6YOo5pi+56S6XHJcbiAgICAgICAgICAgIGhlYWRlcjogY29sdW1uLnRpdGxlLFxyXG4gICAgICAgICAgICBzb3J0TmFtZTogY29sdW1uLnNvcnROYW1lIHx8IG51bGwsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgLy8g6LCD55So5L+u5pS55o6l5Y+j5Yid5aeL5YyW5pWw5o2uXHJcbiAgICAgIGNvbnN0IGluaXRSZXMgPSBhd2FpdCB0aGlzLnBlcnNpc3RSZW1vdGVDb2x1bW5zKGluaXRDb2x1bW5zKTtcclxuICAgICAgaWYgKGluaXRSZXMpIHtcclxuICAgICAgICB0aGlzLnF1ZXJ5RHluYW1pY0NvbHVtbnMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXRlSW5uZXJDb2x1bW5zKGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10pIHtcclxuICAgIHRoaXMuX2NvbHVtbnMgPSBjb2x1bW5zXHJcbiAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmhpZGVJblRhYmxlKVxyXG4gICAgICAubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4uUFJPX1RBQkxFX0RFRkFVTFRfQ09MVU1OLCAuLi5pdGVtIH0gYXMgUHJvVGFibGVDb2x1bW47XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g6Ieq5Yqo5rOo5YaM5qih5p2/55qE5pa55rOVXHJcbiAgcHJpdmF0ZSBhdXRvUmVnaXN0ZXJUZW1wbGF0ZXMoKSB7XHJcbiAgICAvLyDojrflj5bmiYDmnInmqKHmnb9cclxuICAgIGNvbnN0IGFsbFRlbXBsYXRlc0FycmF5ID0gdGhpcy5hbGxUZW1wbGF0ZXMudG9BcnJheSgpO1xyXG5cclxuICAgIC8vIOiOt+WPluaJgOaciemcgOimgeiHquWumuS5ieaooeadv+eahOWIl1xyXG4gICAgY29uc3QgY29sdW1uc1dpdGhDdXN0b21SZW5kZXIgPSB0aGlzLl9jb2x1bW5zLmZpbHRlcihcclxuICAgICAgKGNvbCkgPT4gY29sLmN1c3RvbVJlbmRlcixcclxuICAgICk7XHJcblxyXG4gICAgLy8g6I635Y+W5omA5pyJ6ZyA6KaB6Ieq5a6a5LmJbGFiZWzmqKHmnb/nmoTliJfvvIjkvb/nlKjljp/lp4tjb2x1bW5z77yM56Gu5L+d6aG65bqP5q2j56Gu77yJXHJcbiAgICBjb25zdCBjb2x1bW5zV2l0aEN1c3RvbUxhYmVsID0gdGhpcy5jb2x1bW5zLmZpbHRlcihcclxuICAgICAgKGNvbCkgPT4gY29sLmN1c3RvbUxhYmVsUmVuZGVyLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyDorqHnrpfpnIDopoHnmoTmqKHmnb/mgLvmlbBcclxuICAgIGNvbnN0IGN1c3RvbVJlbmRlckNvdW50ID0gY29sdW1uc1dpdGhDdXN0b21SZW5kZXIubGVuZ3RoO1xyXG4gICAgY29uc3QgdG90YWxOZWVkZWRUZW1wbGF0ZXMgPVxyXG4gICAgICBjdXN0b21SZW5kZXJDb3VudCArIGNvbHVtbnNXaXRoQ3VzdG9tTGFiZWwubGVuZ3RoO1xyXG5cclxuICAgIC8vIOivhuWIq+W5tuaOkumZpOeJueauiuaooeadv++8iGFjdGlvbkJhciDlkowgaW1nQWN0aW9uQmFy77yJXHJcbiAgICBjb25zdCBzcGVjaWFsVGVtcGxhdGVJbmRpY2VzID0gbmV3IFNldDxudW1iZXI+KCk7XHJcblxyXG4gICAgLy8g5bCd6K+V5om+5YiwIGFjdGlvbkJhclRwbCDlnKggYWxsVGVtcGxhdGVzQXJyYXkg5Lit55qE5L2N572uXHJcbiAgICBpZiAodGhpcy5hY3Rpb25CYXJUcGwpIHtcclxuICAgICAgY29uc3QgYWN0aW9uQmFySW5kZXggPSB0aGlzLmZpbmRUZW1wbGF0ZUluZGV4KFxyXG4gICAgICAgIGFsbFRlbXBsYXRlc0FycmF5LFxyXG4gICAgICAgIHRoaXMuYWN0aW9uQmFyVHBsLFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoYWN0aW9uQmFySW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgc3BlY2lhbFRlbXBsYXRlSW5kaWNlcy5hZGQoYWN0aW9uQmFySW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5bCd6K+V5om+5YiwIGltZ0FjdGlvbkJhclRwbCDlnKggYWxsVGVtcGxhdGVzQXJyYXkg5Lit55qE5L2N572uXHJcbiAgICBpZiAodGhpcy5pbWdBY3Rpb25CYXJUcGwpIHtcclxuICAgICAgY29uc3QgaW1nQWN0aW9uQmFySW5kZXggPSB0aGlzLmZpbmRUZW1wbGF0ZUluZGV4KFxyXG4gICAgICAgIGFsbFRlbXBsYXRlc0FycmF5LFxyXG4gICAgICAgIHRoaXMuaW1nQWN0aW9uQmFyVHBsLFxyXG4gICAgICApO1xyXG4gICAgICBpZiAoaW1nQWN0aW9uQmFySW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgc3BlY2lhbFRlbXBsYXRlSW5kaWNlcy5hZGQoaW1nQWN0aW9uQmFySW5kZXgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aaC5p6c5peg5rOV6YCa6L+H5byV55So5om+5Yiw54m55q6K5qih5p2/77yM5L2/55So5aSH55So562W55WlXHJcbiAgICAvLyDlpIfnlKjnrZbnlaXvvJrlgYforr7mnIDlkI7nmoTmqKHmnb/mmK/nibnmrormqKHmnb9cclxuICAgIGNvbnN0IHNwZWNpYWxUZW1wbGF0ZUNvdW50ID1cclxuICAgICAgKHRoaXMuYWN0aW9uQmFyVHBsID8gMSA6IDApICsgKHRoaXMuaW1nQWN0aW9uQmFyVHBsID8gMSA6IDApO1xyXG4gICAgaWYgKHNwZWNpYWxUZW1wbGF0ZUluZGljZXMuc2l6ZSA9PT0gMCAmJiBzcGVjaWFsVGVtcGxhdGVDb3VudCA+IDApIHtcclxuICAgICAgZm9yIChcclxuICAgICAgICBsZXQgaSA9IGFsbFRlbXBsYXRlc0FycmF5Lmxlbmd0aCAtIHNwZWNpYWxUZW1wbGF0ZUNvdW50O1xyXG4gICAgICAgIGkgPCBhbGxUZW1wbGF0ZXNBcnJheS5sZW5ndGg7XHJcbiAgICAgICAgaSsrXHJcbiAgICAgICkge1xyXG4gICAgICAgIHNwZWNpYWxUZW1wbGF0ZUluZGljZXMuYWRkKGkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5o+Q5Y+W5YiX5qih5p2/77yI5o6S6Zmk54m55q6K5qih5p2/77yJXHJcbiAgICBjb25zdCBjb2x1bW5UZW1wbGF0ZXM6IFRlbXBsYXRlUmVmPGFueT5bXSA9IFtdO1xyXG4gICAgYWxsVGVtcGxhdGVzQXJyYXkuZm9yRWFjaCgodHBsLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoIXNwZWNpYWxUZW1wbGF0ZUluZGljZXMuaGFzKGluZGV4KSkge1xyXG4gICAgICAgIGNvbHVtblRlbXBsYXRlcy5wdXNoKHRwbCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIOmqjOivgeaooeadv+aVsOmHj1xyXG4gICAgaWYgKGNvbHVtblRlbXBsYXRlcy5sZW5ndGggIT09IHRvdGFsTmVlZGVkVGVtcGxhdGVzKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgUHJvVGFibGU6IOaooeadv+aVsOmHj+S4jeWMuemFje+8gemcgOimgSAke3RvdGFsTmVlZGVkVGVtcGxhdGVzfSDkuKrliJfmqKHmnb/vvIzlrp7pmYXmnIkgJHtjb2x1bW5UZW1wbGF0ZXMubGVuZ3RofSDkuKrjgILor7fmo4Dmn6UgY3VzdG9tUmVuZGVyIOWSjCBjdXN0b21MYWJlbFJlbmRlciDphY3nva7jgIJgLFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOazqOWGjOiHquWumuS5iea4suafk+aooeadv1xyXG4gICAgY29sdW1uc1dpdGhDdXN0b21SZW5kZXIuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xyXG4gICAgICBjb25zdCB0ZW1wbGF0ZU5hbWUgPSBjb2x1bW4uY3VzdG9tUmVuZGVyITtcclxuICAgICAgaWYgKGluZGV4IDwgY29sdW1uVGVtcGxhdGVzLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzLnNldCh0ZW1wbGF0ZU5hbWUsIGNvbHVtblRlbXBsYXRlc1tpbmRleF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICBgUHJvVGFibGU6IOacquaJvuWIsOaooeadvyBcIiR7dGVtcGxhdGVOYW1lfVwi77yM57Si5byVICR7aW5kZXh9IOi2heWHuuiMg+WbtGAsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g5rOo5YaM6Ieq5a6a5LmJbGFiZWzmqKHmnb/vvIjku44gY3VzdG9tUmVuZGVyQ291bnQg5LmL5ZCO5byA5aeL77yJXHJcbiAgICBjb2x1bW5zV2l0aEN1c3RvbUxhYmVsLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgdGVtcGxhdGVOYW1lID0gY29sdW1uLmN1c3RvbUxhYmVsUmVuZGVyITtcclxuICAgICAgY29uc3QgdGVtcGxhdGVJbmRleCA9IGN1c3RvbVJlbmRlckNvdW50ICsgaW5kZXg7XHJcbiAgICAgIGlmICh0ZW1wbGF0ZUluZGV4IDwgY29sdW1uVGVtcGxhdGVzLmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzLnNldCh0ZW1wbGF0ZU5hbWUsIGNvbHVtblRlbXBsYXRlc1t0ZW1wbGF0ZUluZGV4XSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcclxuICAgICAgICAgIGBQcm9UYWJsZTog5pyq5om+5YiwbGFiZWzmqKHmnb8gXCIke3RlbXBsYXRlTmFtZX1cIu+8jOe0ouW8lSAke3RlbXBsYXRlSW5kZXh9IOi2heWHuuiMg+WbtGAsXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyDlsJ3or5XlnKjmlbDnu4TkuK3mib7liLDmqKHmnb/nmoTntKLlvJXvvIjkvb/nlKjlpJrnp43mr5TovoPmlrnlvI/vvIlcclxuICBwcml2YXRlIGZpbmRUZW1wbGF0ZUluZGV4KFxyXG4gICAgdGVtcGxhdGVzOiBUZW1wbGF0ZVJlZjxhbnk+W10sXHJcbiAgICB0YXJnZXQ6IFRlbXBsYXRlUmVmPGFueT4sXHJcbiAgKTogbnVtYmVyIHtcclxuICAgIC8vIOaWueazlTHvvJrlvJXnlKjnm7jnrYnmgKdcclxuICAgIGxldCBpbmRleCA9IHRlbXBsYXRlcy5pbmRleE9mKHRhcmdldCk7XHJcbiAgICBpZiAoaW5kZXggIT09IC0xKSByZXR1cm4gaW5kZXg7XHJcblxyXG4gICAgLy8g5pa55rOVMu+8mumAmui/hyBlbGVtZW50UmVmIOavlOi+g1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdGFyZ2V0RWxlbWVudFJlZiA9ICh0YXJnZXQgYXMgYW55KS5lbGVtZW50UmVmO1xyXG4gICAgICBpZiAodGFyZ2V0RWxlbWVudFJlZikge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGVtcGxhdGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCB0cGxFbGVtZW50UmVmID0gKHRlbXBsYXRlc1tpXSBhcyBhbnkpLmVsZW1lbnRSZWY7XHJcbiAgICAgICAgICBpZiAodHBsRWxlbWVudFJlZiA9PT0gdGFyZ2V0RWxlbWVudFJlZikge1xyXG4gICAgICAgICAgICByZXR1cm4gaTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgLy8g5b+955Wl6ZSZ6K+vXHJcbiAgICB9XHJcblxyXG4gICAgLy8g5pa55rOVM++8mumAmui/hyBBbmd1bGFyIOWGhemDqOWxnuaAp+avlOi+g1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgdGFyZ2V0Q29udGFpbmVyID0gKHRhcmdldCBhcyBhbnkpLl9kZWNsYXJhdGlvblRDb250YWluZXI7XHJcbiAgICAgIGlmICh0YXJnZXRDb250YWluZXIpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlbXBsYXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgdHBsQ29udGFpbmVyID0gKHRlbXBsYXRlc1tpXSBhcyBhbnkpLl9kZWNsYXJhdGlvblRDb250YWluZXI7XHJcbiAgICAgICAgICBpZiAodHBsQ29udGFpbmVyID09PSB0YXJnZXRDb250YWluZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIOW/veeVpemUmeivr1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAtMTtcclxuICB9XHJcblxyXG4gIC8vIOiuvue9ruetm+mAieihqOWNlem7mOiupOWxnuaAp1xyXG4gIHByaXZhdGUgc2V0U2VhcmNoRm9ybURlZmF1bHRQcm9wKGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10pIHtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS52YWx1ZVR5cGUpIHtcclxuICAgICAgICBpZiAoaXRlbS5maWVsZFByb3BzKSB7XHJcbiAgICAgICAgICBpdGVtLmZpZWxkUHJvcHMgPSB7XHJcbiAgICAgICAgICAgIC4uLlBST19UQUJMRV9ERUZBVUxUX1BST1BTW2l0ZW0udmFsdWVUeXBlXSxcclxuICAgICAgICAgICAgLi4uaXRlbS5maWVsZFByb3BzLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaXRlbS5maWVsZFByb3BzID0geyAuLi5QUk9fVEFCTEVfREVGQVVMVF9QUk9QU1tpdGVtLnZhbHVlVHlwZV0gfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g5Yqo5oCB6K6+572uT3B0aW9uc1xyXG4gIHByaXZhdGUgc2V0U2VsZWN0UmVxdWVzdChjb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdKSB7XHJcbiAgICBjb2x1bW5zLm1hcChhc3luYyAoaXRlbSkgPT4ge1xyXG4gICAgICBpZiAoaXRlbS5maWVsZFByb3BzICYmIGhhc0luKGl0ZW0uZmllbGRQcm9wcywgXCJyZXF1ZXN0XCIpKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSBhd2FpdCAoXHJcbiAgICAgICAgICAgIGl0ZW0uZmllbGRQcm9wcyBhcyBTZWxlY3RGaWVsZFByb3BzXHJcbiAgICAgICAgICApLnJlcXVlc3Q/LigpO1xyXG4gICAgICAgICAgKGl0ZW0uZmllbGRQcm9wcyBhcyBTZWxlY3RGaWVsZFByb3BzKS5vcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgKGl0ZW0uZmllbGRQcm9wcyBhcyBTZWxlY3RGaWVsZFByb3BzKS5vcHRpb25zID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgc2V0U2VhcmNoUGFyYW1zKGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10pIHtcclxuICAgIHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucyA9IFtdO1xyXG4gICAgY29sdW1uc1xyXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmxhZyA9ICFpdGVtLmhpZGVJblNlYXJjaCAmJiBpdGVtLnZhbHVlVHlwZTtcclxuICAgICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgICAgdGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zLnB1c2goY2xvbmVEZWVwKGl0ZW0pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZsYWc7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICBjb25zdCBrZXkgPSBjb2x1bW4uZmllbGRQcm9wcz8ubmFtZSB8fCBjb2x1bW4ucHJvcDtcclxuICAgICAgICBsZXQgZGVmYXVsdFZhbHVlID0gUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFNbY29sdW1uLnZhbHVlVHlwZV0udmFsdWU7XHJcblxyXG4gICAgICAgIC8vIOWvueS6jmNoZWNrYm9457G75Z6L77yM5LuOb3B0aW9uc+S4reaJvuWHumNoZWNrZWTkuLp0cnVl55qE6aG55L2c5Li66buY6K6k5YC8XHJcbiAgICAgICAgaWYgKGNvbHVtbi52YWx1ZVR5cGUgPT09IFwiY2hlY2tib3hcIikge1xyXG4gICAgICAgICAgY29uc3QgY2hlY2tlZFZhbHVlcyA9IChjb2x1bW4uZmllbGRQcm9wcz8ub3B0aW9ucyB8fCBbXSlcclxuICAgICAgICAgICAgLmZpbHRlcigob3B0OiBPcHRpb25zVHlwZSkgPT4gb3B0LmNoZWNrZWQpXHJcbiAgICAgICAgICAgIC5tYXAoKG9wdDogT3B0aW9uc1R5cGUpID0+IG9wdC52YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLl9zZWFyY2hQYXJhbXNba2V5XSA9XHJcbiAgICAgICAgICAgIGNoZWNrZWRWYWx1ZXMubGVuZ3RoID4gMCA/IGNoZWNrZWRWYWx1ZXMgOiBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trZXldID0gY29sdW1uLmZpZWxkUHJvcHM/LnZhbHVlIHx8IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOWIneWni+WMliBhdXRvQ29tcGxldGUg5pWw5o2u5rqQXHJcbiAgICAgICAgaWYgKGNvbHVtbi52YWx1ZVR5cGUgPT09IFwiYXV0b0NvbXBsZXRlXCIpIHtcclxuICAgICAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZURhdGFTb3VyY2VzW2tleV0gPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIC8vIOagueaNruWIl+eahCBvcmRlciDlrZfmrrXov5vooYzmjpLluo/vvIzmnKrorr7nva4gb3JkZXIg55qE5pS+5Zyo5pyA5ZCOXHJcbiAgICB0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgYU9yZGVyID0gaXNOaWwoYT8ub3JkZXIpID8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgOiBhLm9yZGVyO1xyXG4gICAgICBjb25zdCBiT3JkZXIgPSBpc05pbChiPy5vcmRlcikgPyBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiA6IGIub3JkZXI7XHJcbiAgICAgIGlmIChhT3JkZXIgPT09IGJPcmRlcikgcmV0dXJuIDA7XHJcbiAgICAgIHJldHVybiBhT3JkZXIgLSBiT3JkZXI7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnNldFNlYXJjaEZvcm1EZWZhdWx0UHJvcCh0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMpO1xyXG5cclxuICAgIC8vIOW5tuWPkeWKoOi9veaJgOaciemcgOimgeW8guatpeiOt+WPlueahOmAiemhuVxyXG4gICAgdGhpcy5zZXRTZWxlY3RSZXF1ZXN0KHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVRhYmxlQ29sdW1ucyhpbmplY3RDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdKSB7XHJcbiAgICAvLyAxLiDkvb/nlKjmnIDljp/lp4vnmoRjb2x1bW5z5L2c5Li65pWw5o2u5rqQ77yM56Gu5L+d6L6F5Yqp5YiX5a6M5YWo5LiN5Y+X5b2x5ZONXHJcbiAgICBjb25zdCBvcmlnaW5hbENvbHVtbnMgPSBjbG9uZURlZXAodGhpcy5jb2x1bW5zKTtcclxuXHJcbiAgICAvLyAyLiDlpITnkIblrZfmrrXmmKDlsITvvIjlpoLmnpzmj5DkvpvkuoZmaWVsZHPlj4LmlbDvvIlcclxuICAgIGxldCBwcm9jZXNzZWRJbmplY3RDb2x1bW5zID0gaW5qZWN0Q29sdW1ucztcclxuXHJcbiAgICAvLyAzLiDliIbnprvovoXliqnliJflkozpnZ7ovoXliqnliJfvvIjkvb/nlKjljp/lp4vmlbDmja7vvIlcclxuICAgIGNvbnN0IG5vbkF1eGlsaWFyeUNvbHVtbnMgPSBvcmlnaW5hbENvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAoY29sKSA9PiAhY29sLmF1eGlsaWFyeUNvbHVtbixcclxuICAgICk7XHJcblxyXG4gICAgLy8gNC4g5oyJ54WnaW5qZWN0Q29sdW1uc+eahOmhuuW6j+mHjeaWsOaOkuWIl+mdnui+heWKqeWIl1xyXG4gICAgY29uc3QgcmVvcmRlcmVkTm9uQXV4aWxpYXJ5Q29sdW1uczogUHJvVGFibGVDb2x1bW5bXSA9IFtdO1xyXG4gICAgY29uc3QgcmVtYWluaW5nTm9uQXV4aWxpYXJ5Q29sdW1ucyA9IFsuLi5ub25BdXhpbGlhcnlDb2x1bW5zXTsgLy8g5aSN5Yi25LiA5Lu955So5LqO5p+l5om+5ZKM56e76ZmkXHJcblxyXG4gICAgcHJvY2Vzc2VkSW5qZWN0Q29sdW1ucy5mb3JFYWNoKChpbmplY3RDb2wpID0+IHtcclxuICAgICAgLy8g5p+l5om+6Z2e6L6F5Yqp5YiX5Lit5a+55bqU55qE5LiL5qCHXHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ29sSW5kZXggPSByZW1haW5pbmdOb25BdXhpbGlhcnlDb2x1bW5zLmZpbmRJbmRleChcclxuICAgICAgICAoY29sKSA9PiBjb2wucHJvcCA9PT0gaW5qZWN0Q29sLnByb3AsXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChleGlzdGluZ0NvbEluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIC8vIOWmguaenOaJvuWIsOebuOWQjOWIl++8jOeUqGluamVjdENvbHVtbnPkuK3nmoTlsZ7mgKfopobnm5bljp/lp4tjb2x1bW5z5Lit55qE5bGe5oCnXHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdDb2wgPSByZW1haW5pbmdOb25BdXhpbGlhcnlDb2x1bW5zW2V4aXN0aW5nQ29sSW5kZXhdO1xyXG5cclxuICAgICAgICBjb25zdCB1cGRhdGVkQ29sID0geyAuLi5leGlzdGluZ0NvbCwgLi4uaW5qZWN0Q29sIH07XHJcbiAgICAgICAgcmVvcmRlcmVkTm9uQXV4aWxpYXJ5Q29sdW1ucy5wdXNoKHVwZGF0ZWRDb2wpO1xyXG4gICAgICAgIC8vIOS7juWJqeS9meaVsOe7hOS4reenu+mZpO+8jOmBv+WFjemHjeWkjVxyXG4gICAgICAgIHJlbWFpbmluZ05vbkF1eGlsaWFyeUNvbHVtbnMuc3BsaWNlKGV4aXN0aW5nQ29sSW5kZXgsIDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOWmguaenOayoeaJvuWIsOWvueW6lOeahOWIl++8jOebtOaOpea3u+WKoGluamVjdENvbHVtbnPkuK3nmoTliJdcclxuICAgICAgICByZW9yZGVyZWROb25BdXhpbGlhcnlDb2x1bW5zLnB1c2goaW5qZWN0Q29sKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gNS4g5aSE55CG5Ymp5L2Z55qE5Y6f5aeLY29sdW1uc+S4reeahOmdnui+heWKqeWIl++8iOWcqGluamVjdENvbHVtbnPkuK3mnKrlh7rnjrDnmoTliJfvvIlcclxuICAgIC8vIOi/meS6m+WIl+W6lOivpeiiq+makOiXj++8iOiuvue9rmhpZGVJblRhYmxl5Li6dHJ1Ze+8iVxyXG4gICAgcmVtYWluaW5nTm9uQXV4aWxpYXJ5Q29sdW1ucy5mb3JFYWNoKChyZW1haW5pbmdDb2wpID0+IHtcclxuICAgICAgY29uc3QgaGlkZGVuQ29sID0geyAuLi5yZW1haW5pbmdDb2wsIGhpZGVJblRhYmxlOiB0cnVlIH07XHJcbiAgICAgIHJlb3JkZXJlZE5vbkF1eGlsaWFyeUNvbHVtbnMucHVzaChoaWRkZW5Db2wpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gNi4g5oyJ54Wn5Y6f5aeLY29sdW1uc+eahOmhuuW6j+mHjeaWsOe7hOWQiO+8muS/neaMgei+heWKqeWIl+eahOWOn+Wni+S9jee9ruWSjOWxnuaAp1xyXG4gICAgY29uc3QgZmluYWxDb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdID0gW107XHJcbiAgICBsZXQgbm9uQXV4aWxpYXJ5SW5kZXggPSAwO1xyXG4gICAgbGV0IGF1eGlsaWFyeUluZGV4ID0gMDtcclxuXHJcbiAgICBvcmlnaW5hbENvbHVtbnMuZm9yRWFjaCgob3JpZ2luYWxDb2wpID0+IHtcclxuICAgICAgaWYgKG9yaWdpbmFsQ29sLmF1eGlsaWFyeUNvbHVtbikge1xyXG4gICAgICAgIC8vIOWmguaenOaYr+i+heWKqeWIl++8jOS9v+eUqOWOn+Wni+WIl+aVsOaNru+8jOWujOWFqOS4jei/m+ihjOS7u+S9leS/ruaUuVxyXG4gICAgICAgIGZpbmFsQ29sdW1ucy5wdXNoKG9yaWdpbmFsQ29sKTtcclxuICAgICAgICBhdXhpbGlhcnlJbmRleCsrO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOWmguaenOaYr+mdnui+heWKqeWIl++8jOS9v+eUqOmHjeaWsOaOkuW6j+WQjueahOWIl++8jOS9huS/neeVmeWOn+Wni+WIl+eahOaJgOacieWxnuaAp1xyXG4gICAgICAgIGNvbnN0IHJlb3JkZXJlZENvbCA9IHJlb3JkZXJlZE5vbkF1eGlsaWFyeUNvbHVtbnNbbm9uQXV4aWxpYXJ5SW5kZXhdO1xyXG4gICAgICAgIGlmIChyZW9yZGVyZWRDb2wpIHtcclxuICAgICAgICAgIC8vIOWQiOW5tuWOn+Wni+WIl+WSjOmHjeaWsOaOkuW6j+WQjueahOWIl++8jOehruS/neS/neeVmeaJgOacieWOn+Wni+WxnuaAp1xyXG4gICAgICAgICAgY29uc3QgbWVyZ2VkQ29sID0geyAuLi5vcmlnaW5hbENvbCwgLi4ucmVvcmRlcmVkQ29sIH07XHJcbiAgICAgICAgICBmaW5hbENvbHVtbnMucHVzaChtZXJnZWRDb2wpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyDlpoLmnpzph43mlrDmjpLluo/lkI7nmoTliJfkuI3lrZjlnKjvvIzkvb/nlKjljp/lp4vliJdcclxuICAgICAgICAgIGZpbmFsQ29sdW1ucy5wdXNoKG9yaWdpbmFsQ29sKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbm9uQXV4aWxpYXJ5SW5kZXgrKztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZvcm1hdGVJbm5lckNvbHVtbnMoZmluYWxDb2x1bW5zKTtcclxuICB9XHJcblxyXG4gIC8vIOmAmui/hyBQcm94eSDnm5HlkKwgX3NlYXJjaFBhcmFtcyDnmoTlsZ7mgKflj5jmm7RcclxuICBwcml2YXRlIGNyZWF0ZVNlYXJjaFBhcmFtc1Byb3h5KHRhcmdldDogYW55KSB7XHJcbiAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgIGNvbnN0IGhhbmRsZXI6IFByb3h5SGFuZGxlcjxhbnk+ID0ge1xyXG4gICAgICBzZXQob2JqOiBhbnksIHByb3A6IHN0cmluZyB8IHN5bWJvbCwgdmFsdWU6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IFN0cmluZyhwcm9wKTtcclxuICAgICAgICBjb25zdCBvbGRWYWwgPSBvYmpba2V5XTtcclxuICAgICAgICBpZiAob2xkVmFsID09PSB2YWx1ZSkge1xyXG4gICAgICAgICAgb2JqW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBzZWxmLm9uVmFsdWVzQ2hhbmdlLmVtaXQoe1xyXG4gICAgICAgICAgICBrZXksXHJcbiAgICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgICBwYXJhbXM6IHNlbGYuZ2V0U2VhcmNoUGFyYW1zKCksXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7fVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICAgIHJldHVybiBuZXcgUHJveHkodGFyZ2V0LCBoYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2xlYXJFbXB0eVNlYXJjaFBhcmFtcygpIHtcclxuICAgIGNvbnN0IGNsb25lU2VhcmNoUGFyYW1zID0gY2xvbmVEZWVwKHRoaXMuX3NlYXJjaFBhcmFtcyk7XHJcbiAgICByZXR1cm4gY2xvbmVTZWFyY2hQYXJhbXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkU2VydmVyU29ydFBheWxvYWQoKSB7XHJcbiAgICAvLyDmnoTlu7rmv4DmtLvmjpLluo/pm4blkIjvvIjmjInkvJjlhYjnuqfku47kvY7liLDpq5jvvIzmnKvlsL7kvJjlhYjvvIlcclxuICAgIGNvbnN0IGFjdGl2ZUtleXMgPSB0aGlzLl9zb3J0UHJpb3JpdHkuZmlsdGVyKChrKSA9PiAhIXRoaXMuX3NvcnRNYXBba10pO1xyXG4gICAgaWYgKGFjdGl2ZUtleXMubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IHNvcnRzID0gYWN0aXZlS2V5cy5tYXAoKGZpZWxkKSA9PiB7XHJcbiAgICAgIC8vIOafpeaJvuWvueW6lOeahOWIl+mFjee9ru+8jOS8mOWFiOS9v+eUqHNvcnROYW1l5a2X5q61XHJcbiAgICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuX2NvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wucHJvcCA9PT0gZmllbGQpO1xyXG4gICAgICBjb25zdCBzb3J0RmllbGQgPSBjb2x1bW4/LnNvcnROYW1lIHx8IGZpZWxkO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIGZpZWxkOiBzb3J0RmllbGQsXHJcbiAgICAgICAgb3JkZXI6IHRoaXMuX3NvcnRNYXBbZmllbGRdISxcclxuICAgICAgfTtcclxuICAgIH0pO1xyXG4gICAgaWYgKHRoaXMubXVsdGlwbGVTb3J0KSB7XHJcbiAgICAgIHJldHVybiBzb3J0czsgLy8g5Lul5pWw57uE5b2i5byP5o+Q5Lqk5aSa5YiX5o6S5bqPXHJcbiAgICB9XHJcbiAgICBjb25zdCBbZmlyc3RdID0gc29ydHM7XHJcbiAgICByZXR1cm4gZmlyc3Q7IC8vIOWFvOWuueWNleWIl+e7k+aehCB7IGZpZWxkLCBvcmRlciB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNvcnREYXRhU291cmNlSW5QbGFjZSgpIHtcclxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTb3VyY2UpIHx8IHRoaXMuZGF0YVNvdXJjZS5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgIGNvbnN0IGFjdGl2ZUtleXMgPSB0aGlzLl9zb3J0UHJpb3JpdHkuZmlsdGVyKChrKSA9PiAhIXRoaXMuX3NvcnRNYXBba10pO1xyXG4gICAgaWYgKGFjdGl2ZUtleXMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgLy8g5aSN5Yi25LiA5Lu95LyY5YWI57qn77yM5LuO5YmN5Yiw5ZCO5LyY5YWI57qn5LuO5L2O5Yiw6auY77yI5pyA5ZCO6K6+572u55qE5a2X5q615LyY5YWI77yJXHJcbiAgICBjb25zdCBrZXlzSW5Qcmlvcml0eSA9IFsuLi5hY3RpdmVLZXlzXTtcclxuICAgIHRoaXMuZGF0YVNvdXJjZS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xyXG4gICAgICBmb3IgKGxldCBpID0ga2V5c0luUHJpb3JpdHkubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IGtleXNJblByaW9yaXR5W2ldO1xyXG4gICAgICAgIGNvbnN0IG9yZGVyID0gdGhpcy5fc29ydE1hcFtmaWVsZF0hO1xyXG4gICAgICAgIGNvbnN0IGF2ID0gYT8uW2ZpZWxkXTtcclxuICAgICAgICBjb25zdCBidiA9IGI/LltmaWVsZF07XHJcbiAgICAgICAgY29uc3QgY21wID0gdGhpcy5jb21wYXJlVmFsdWVzKGF2LCBidik7XHJcbiAgICAgICAgaWYgKGNtcCAhPT0gMCkgcmV0dXJuIG9yZGVyID09PSBcImFzY2VuZFwiID8gY21wIDogLWNtcDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjb21wYXJlVmFsdWVzKGFWYWw6IGFueSwgYlZhbDogYW55KTogbnVtYmVyIHtcclxuICAgIGlmIChhVmFsID09IG51bGwgJiYgYlZhbCA9PSBudWxsKSByZXR1cm4gMDtcclxuICAgIGlmIChhVmFsID09IG51bGwpIHJldHVybiAtMTtcclxuICAgIGlmIChiVmFsID09IG51bGwpIHJldHVybiAxO1xyXG4gICAgaWYgKGFWYWwgaW5zdGFuY2VvZiBEYXRlICYmIGJWYWwgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIHJldHVybiBhVmFsLmdldFRpbWUoKSAtIGJWYWwuZ2V0VGltZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBhVmFsID09PSBcImJvb2xlYW5cIiAmJiB0eXBlb2YgYlZhbCA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgcmV0dXJuIGFWYWwgPT09IGJWYWwgPyAwIDogYVZhbCA/IDEgOiAtMTtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgYVZhbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgYlZhbCA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICByZXR1cm4gYVZhbCAtIGJWYWw7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGFWYWwgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIGJWYWwgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgcmV0dXJuIGFWYWwubG9jYWxlQ29tcGFyZShiVmFsKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGFOdW0gPSBOdW1iZXIoYVZhbCk7XHJcbiAgICBjb25zdCBiTnVtID0gTnVtYmVyKGJWYWwpO1xyXG4gICAgaWYgKCFpc05hTihhTnVtKSAmJiAhaXNOYU4oYk51bSkpIHJldHVybiBhTnVtIC0gYk51bTtcclxuICAgIHJldHVybiBTdHJpbmcoYVZhbCkubG9jYWxlQ29tcGFyZShTdHJpbmcoYlZhbCkpO1xyXG4gIH1cclxuXHJcbiAgLy8g5omn6KGMIGF1dG9Db21wbGV0ZSDmlbDmja7mupDmn6Xor6LvvIjlrp7pmYXmiafooYzpgLvovpHvvIlcclxuICBwcml2YXRlIGV4ZWN1dGVBdXRvQ29tcGxldGVEYXRhU291cmNlKGV2ZW50OiBFdmVudCwgY29sdW1uOiBQcm9UYWJsZUNvbHVtbikge1xyXG4gICAgY29uc3QgZmllbGRLZXkgPSBjb2x1bW4uZmllbGRQcm9wcz8ubmFtZSB8fCBjb2x1bW4ucHJvcDtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIChjb2x1bW4uZmllbGRQcm9wcyBhcyBBdXRvQ29tcGxldGVGaWVsZFByb3BzKS5kYXRhU291cmNlICYmXHJcbiAgICAgIHR5cGVvZiAoY29sdW1uLmZpZWxkUHJvcHMgYXMgQXV0b0NvbXBsZXRlRmllbGRQcm9wcykuZGF0YVNvdXJjZSA9PT1cclxuICAgICAgICBcImZ1bmN0aW9uXCJcclxuICAgICkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IChjb2x1bW4uZmllbGRQcm9wcyBhcyBBdXRvQ29tcGxldGVGaWVsZFByb3BzKS5kYXRhU291cmNlKFxyXG4gICAgICAgICAgZXZlbnQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyDlpoLmnpzov5Tlm57nmoTmmK8gUHJvbWlzZe+8jOWkhOeQhuW8guatpee7k+aenFxyXG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XHJcbiAgICAgICAgICByZXN1bHRcclxuICAgICAgICAgICAgLnRoZW4oKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1tmaWVsZEtleV0gPSBkYXRhIHx8IFtdO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkF1dG9Db21wbGV0ZSBkYXRhU291cmNlIGVycm9yOlwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNbZmllbGRLZXldID0gW107XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyDlkIzmraXov5Tlm57nu5PmnpxcclxuICAgICAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZURhdGFTb3VyY2VzW2ZpZWxkS2V5XSA9IHJlc3VsdCB8fCBbXTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkF1dG9Db21wbGV0ZSBkYXRhU291cmNlIGVycm9yOlwiLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNbZmllbGRLZXldID0gW107XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRTZWFyY2hQYXJhbXMob3B0aW9ucz86IHtcclxuICAgIHVzZVNhdmVkPzogYm9vbGVhbjsgLy8g5L2/55So5pyA6L+R5LiA5qyh5p+l6K+i5o+Q5Lqk55qE5Y+C5pWw77yM6buY6K6k5Li6IGZhbHNl77ybZmFsc2Ug5Li65b2T5YmN6KGo5Y2V5YC8XHJcbiAgfSk6IGFueSB7XHJcbiAgICBjb25zdCB7IHVzZVNhdmVkID0gZmFsc2UgfSA9IG9wdGlvbnMgfHwge307XHJcbiAgICBjb25zdCByYXdQYXJhbXMgPSB1c2VTYXZlZCA/IHRoaXMuX3NhdmVkU2VhcmNoUGFyYW1zIDogdGhpcy5fc2VhcmNoUGFyYW1zO1xyXG4gICAgY29uc3QgcGFyYW1zID0gY2xvbmVEZWVwKHJhd1BhcmFtcyB8fCB7fSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgcGFyYW1zLFxyXG4gICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4LFxyXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLl9wYWdlSW5mby5wYWdlU2l6ZSxcclxuICAgICAgfSxcclxuICAgICAgLy8g5Zyo57q/5o6S5bqP5qih5byP77ya5oqK5o6S5bqP5a+56LGh5o+Q5Lqk57uZ5o6l5Y+jXHJcbiAgICAgIC4uLih0aGlzLnNvcnRNb2RlID09PSBcInNlcnZlclwiXHJcbiAgICAgICAgPyB7IHNvcnQ6IHRoaXMuYnVpbGRTZXJ2ZXJTb3J0UGF5bG9hZCgpIH1cclxuICAgICAgICA6IHt9KSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVsb2FkKGFmdGVyRGVsZXRlPzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5oYW5kbGVRdWVyeShhZnRlckRlbGV0ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0RmllbGRzVmFsdWUoZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSB7XHJcbiAgICBPYmplY3Qua2V5cyhmaWVsZHMpLmZvckVhY2goKGspID0+IHtcclxuICAgICAgdGhpcy5fc2VhcmNoUGFyYW1zW2tdID0gZmllbGRzW2tdOyAvLyDkv53nlZkgUHJveHnvvIzpgJDpobnotYvlgLzop6blj5Hmi6bmiKpcclxuXHJcbiAgICAgIC8vIGNoZWNrYm94IOexu+Wei+mcgOimgeWQjOatpeabtOaWsCBvcHRpb25zIOeahCBjaGVja2VkIOeKtuaAge+8jOWQpuWImSBVSSDkuI3kvJrlk43lupRcclxuICAgICAgY29uc3QgdGFyZ2V0Q29sdW1uID0gdGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zLmZpbmQoXHJcbiAgICAgICAgKGl0ZW0pID0+IChpdGVtLmZpZWxkUHJvcHM/Lm5hbWUgfHwgaXRlbS5wcm9wKSA9PT0gayxcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRhcmdldENvbHVtbj8udmFsdWVUeXBlID09PSBcImNoZWNrYm94XCIpIHtcclxuICAgICAgICBjb25zdCB2YWx1ZXM6IGFueVtdID0gQXJyYXkuaXNBcnJheShmaWVsZHNba10pID8gZmllbGRzW2tdIDogW107XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0RmllbGRQcm9wcyA9IHRhcmdldENvbHVtbi5maWVsZFByb3BzIGFzIENoZWNrYm94RmllbGRQcm9wcztcclxuICAgICAgICBpZiAodGFyZ2V0RmllbGRQcm9wcz8ub3B0aW9ucykge1xyXG4gICAgICAgICAgdGFyZ2V0RmllbGRQcm9wcy5vcHRpb25zID0gdGFyZ2V0RmllbGRQcm9wcy5vcHRpb25zLm1hcChcclxuICAgICAgICAgICAgKGl0ZW06IE9wdGlvbnNUeXBlKSA9PiAoe1xyXG4gICAgICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICAgICAgY2hlY2tlZDogdmFsdWVzLmluY2x1ZGVzKGl0ZW0udmFsdWUpLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGaWVsZFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XHJcbiAgICB0aGlzLl9zZWFyY2hQYXJhbXNba2V5XSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsZWFyU2VsZWN0ZWRSb3coKSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3luYyBzZXRDb2x1bW5zKFxyXG4gICAgY29sdW1uczogUHJvVGFibGVDb2x1bW5bXSxcclxuICAgIG9wdGlvbnM/OiB7XHJcbiAgICAgIHJlbG9hZD86IGJvb2xlYW47IC8vIOaYr+WQpumHjeaWsOWKoOi9veaVsOaNru+8jOm7mOiupOS4uiBmYWxzZVxyXG4gICAgfSxcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIC8vIOabtOaWsCBjb2x1bW5zIOi+k+WFpeWxnuaAp1xyXG4gICAgdGhpcy5jb2x1bW5zID0gY2xvbmVEZWVwKGNvbHVtbnMpO1xyXG5cclxuICAgIC8vIOmHjeaWsOagvOW8j+WMluWGhemDqOWIl1xyXG4gICAgdGhpcy5mb3JtYXRlSW5uZXJDb2x1bW5zKHRoaXMuY29sdW1ucyk7XHJcblxyXG4gICAgLy8g6YeN5paw6K6+572u5pCc57Si5Y+C5pWw77yI5byC5q2l5pON5L2c77yJXHJcbiAgICAvLyDlhYjmuIXnqbrml6fnmoTmkJzntKLlj4LmlbDvvIzpgb/lhY3ml6fmlbDmja7mrovnlZlcclxuICAgIHRoaXMuX3NlYXJjaFBhcmFtcyA9IHt9O1xyXG4gICAgYXdhaXQgdGhpcy5zZXRTZWFyY2hQYXJhbXModGhpcy5jb2x1bW5zKTtcclxuXHJcbiAgICAvLyDph43mlrDliJvlu7ogUHJveHnvvIznoa7kv53ooajljZXpobnlgLzlj5jljJbog73mraPluLjop6blj5Hkuovku7ZcclxuICAgIHRoaXMuX3NlYXJjaFBhcmFtcyA9IHRoaXMuY3JlYXRlU2VhcmNoUGFyYW1zUHJveHkodGhpcy5fc2VhcmNoUGFyYW1zKTtcclxuXHJcbiAgICAvLyDph43mlrDms6jlhozmqKHmnb/vvIjlpoLmnpznu4Tku7blt7Lnu4/liJ3lp4vljJblrozmiJDvvIlcclxuICAgIGlmICh0aGlzLmFsbFRlbXBsYXRlcykge1xyXG4gICAgICB0aGlzLmF1dG9SZWdpc3RlclRlbXBsYXRlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWmguaenOiuvue9ruS6hiByZWxvYWQg6YCJ6aG55Li6IHRydWXvvIzliJnph43mlrDmn6Xor6LmlbDmja5cclxuICAgIGlmIChvcHRpb25zPy5yZWxvYWQgPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNlbGVjdGVkUm93RGF0YTxUID0gYW55PigpOiBUIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZFRhYmxlUm93O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldENoZWNrZWRSb3dzPFQgPSBhbnk+KCk6IFRbXSB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0NoZWNrYm94KSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIC8vIOi/lOWbnuW9k+WJjeaVsOaNrua6kOS4reaJgOaciSBjaGVja2VkIOS4uiB0cnVlIOeahOmhuVxyXG4gICAgLy8g5rOo5oSP77ya5aaC5p6c6ZyA6KaB6I635Y+W5omA5pyJ6aG155qE6YCJ5Lit6aG577yM6ZyA6KaB6YGN5Y6G5omA5pyJ5pWw5o2u5rqQ5oiW5L2/55SoIF9zZWxlY3RlZFJvd0lkc1xyXG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoKHJvdykgPT4gcm93LmNoZWNrZWQgPT09IHRydWUpIGFzIFRbXTtcclxuICB9XHJcblxyXG4gIC8vIOiOt+WPluaMh+WumuWQjeensOeahOaooeadv1xyXG4gIGdldFRlbXBsYXRlKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcclxuICAgIGlmICghbmFtZSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5jdXN0b21UZW1wbGF0ZXMuZ2V0KG5hbWUpIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRUb29sVGlwVGV4dFZhbHVlKGNvbHVtbjogUHJvVGFibGVDb2x1bW4sIGRhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBrZXkgPVxyXG4gICAgICBjb2x1bW4uY3VzdG9tUmVuZGVyICYmIHRoaXMuZ2V0VGVtcGxhdGUoY29sdW1uLmN1c3RvbVJlbmRlcilcclxuICAgICAgICA/IFwiXCJcclxuICAgICAgICA6IGNvbHVtbi5lbGxpcHNpc1xyXG4gICAgICAgICAgPyBjb2x1bW4ucHJvcFxyXG4gICAgICAgICAgOiBcIlwiO1xyXG4gICAgcmV0dXJuICFrZXkgPyBcIlwiIDogZGF0YVtrZXldO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGFibGVSb3dDaGVja2VkKGRhdGE6IGFueSkge1xyXG4gICAgLy8g5ZCv55So5aSN6YCJ5qGG5pe277ya6KGM6auY5Lqu5bqU5LiO5aSN6YCJ5qGG6YCJ5Lit54q25oCB5LiA6Ie077yI5pSv5oyB5aSa6YCJ77yJXHJcbiAgICBpZiAodGhpcy5zaG93Q2hlY2tib3gpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaXNSb3dDaGVja2VkKGRhdGEpO1xyXG4gICAgfVxyXG4gICAgLy8g5pyq5ZCv55So5aSN6YCJ5qGG5pe277ya5LuN54S25L2/55So5Y2V6YCJ6KGM6auY5LquXHJcbiAgICBpZiAoIXRoaXMuX3NlbGVjdGVkVGFibGVSb3cpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLl9zZWxlY3RlZFRhYmxlUm93KSA9PT0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XHJcbiAgfVxyXG5cclxuICAvLyDmo4Dmn6XooYzmmK/lkKbooqvnpoHnlKhcclxuICBpc1Jvd0Rpc2FibGVkKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0aGlzLnNob3dDaGVja2JveCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHRoaXMucm93RGlzYWJsZWQgPyB0aGlzLnJvd0Rpc2FibGVkKGRhdGEpIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyDmo4Dmn6XooYzmmK/lkKbooqvlpI3pgInmoYbpgInkuK3vvIjmlbDmja7pqbHliqjmqKHlvI/vvIlcclxuICBpc1Jvd0NoZWNrZWQoZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0NoZWNrYm94KSByZXR1cm4gZmFsc2U7XHJcbiAgICAvLyDnm7TmjqXor7vlj5bmlbDmja7lr7nosaHnmoQgY2hlY2tlZCDlsZ7mgKdcclxuICAgIHJldHVybiBkYXRhLmNoZWNrZWQgPT09IHRydWU7XHJcbiAgfVxyXG5cclxuICAvLyDliIfmjaLooYznmoTpgInkuK3nirbmgIHvvIjmlbDmja7pqbHliqjmqKHlvI/vvIzkv53nlZnnlKjkuo7lhbzlrrnvvIlcclxuICB0b2dnbGVSb3dDaGVja2VkKGRhdGE6IGFueSwgY2hlY2tlZDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyDpmLvmraLkuovku7blhpLms6HvvIzpgb/lhY3op6blj5HooYzngrnlh7tcclxuICAgIH1cclxuICAgIC8vIOWmguaenOihjOiiq+emgeeUqO+8jOS4jeWFgeiuuOWIh+aNoumAieS4reeKtuaAgVxyXG4gICAgaWYgKHRoaXMuaXNSb3dEaXNhYmxlZChkYXRhKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8g55u05o6l6K6+572u5pWw5o2u5a+56LGh55qEIGNoZWNrZWQg5bGe5oCnXHJcbiAgICBkYXRhLmNoZWNrZWQgPSBjaGVja2VkO1xyXG5cclxuICAgIC8vIOWQjOatpeabtOaWsCBfc2VsZWN0ZWRSb3dz77yI55So5LqO5YW85a655oCn77yJXHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX3NlbGVjdGVkUm93cy5maW5kSW5kZXgoKHJvdykgPT5cclxuICAgICAgdGhpcy5pc1NhbWVSb3cocm93LCBkYXRhKSxcclxuICAgICk7XHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICBpZiAoaW5kZXggPT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnB1c2goZGF0YSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8g5Yu+6YCJ5aSN6YCJ5qGG5pe25ZCM5q2l6K6+572u6auY5Lqu6YCJ5Lit6KGMXHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBkYXRhO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgICAvLyDoi6XlvZPliY3pq5jkuq7ooYzkuLror6XooYzvvIzliJnlj5bmtojpq5jkuq5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgJiZcclxuICAgICAgICB0aGlzLmlzU2FtZVJvdyh0aGlzLl9zZWxlY3RlZFRhYmxlUm93LCBkYXRhKVxyXG4gICAgICApIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlQ2hlY2tBbGxTdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIC8vIOabtOaWsOWFqOmAieeKtuaAge+8iOaVsOaNrumpseWKqOaooeW8j++8iVxyXG4gIHVwZGF0ZUNoZWNrQWxsU3RhdHVzKCkge1xyXG4gICAgaWYgKCF0aGlzLnNob3dDaGVja2JveCB8fCAhQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTb3VyY2UpKSB7XHJcbiAgICAgIHRoaXMuX2NoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgICAgdGhpcy5faW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyDlj6rorqHnrpflj6/nlKjnmoTooYzvvIjmnKrnpoHnlKjnmoTooYzvvIlcclxuICAgIGNvbnN0IGF2YWlsYWJsZVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UuZmlsdGVyKFxyXG4gICAgICAocm93KSA9PiAhdGhpcy5pc1Jvd0Rpc2FibGVkKHJvdyksXHJcbiAgICApO1xyXG4gICAgLy8g5Z+65LqO5pWw5o2u5a+56LGh55qEIGNoZWNrZWQg5bGe5oCn6K6h566XXHJcbiAgICBjb25zdCBjaGVja2VkQ291bnQgPSBhdmFpbGFibGVSb3dzLmZpbHRlcihcclxuICAgICAgKHJvdykgPT4gcm93LmNoZWNrZWQgPT09IHRydWUsXHJcbiAgICApLmxlbmd0aDtcclxuICAgIGNvbnN0IHRvdGFsQ291bnQgPSBhdmFpbGFibGVSb3dzLmxlbmd0aDtcclxuICAgIHRoaXMuX2NoZWNrZWRBbGwgPVxyXG4gICAgICB0b3RhbENvdW50ID4gMCAmJiBjaGVja2VkQ291bnQgPiAwICYmIGNoZWNrZWRDb3VudCA9PT0gdG90YWxDb3VudDtcclxuICAgIHRoaXMuX2luZGV0ZXJtaW5hdGUgPSBjaGVja2VkQ291bnQgPiAwICYmIGNoZWNrZWRDb3VudCA8IHRvdGFsQ291bnQ7XHJcbiAgfVxyXG5cclxuICAvLyDlhajpgIkv5Y+W5raI5YWo6YCJ77yI5pWw5o2u6amx5Yqo5qih5byP77yJXHJcbiAgdG9nZ2xlQ2hlY2tBbGwoY2hlY2tlZDogYm9vbGVhbiwgZXZlbnQ/OiBFdmVudCkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWPquWkhOeQhuWPr+eUqOeahOihjO+8iOacquemgeeUqOeahOihjO+8iVxyXG4gICAgY29uc3QgYXZhaWxhYmxlUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoXHJcbiAgICAgIChyb3cpID0+ICF0aGlzLmlzUm93RGlzYWJsZWQocm93KSxcclxuICAgICk7XHJcblxyXG4gICAgLy8g5om56YeP6K6+572uIGNoZWNrZWQg5bGe5oCnXHJcbiAgICBhdmFpbGFibGVSb3dzLmZvckVhY2goKHJvdykgPT4ge1xyXG4gICAgICByb3cuY2hlY2tlZCA9IGNoZWNrZWQ7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDlkIzmraXmm7TmlrAgX3NlbGVjdGVkUm93c++8iOeUqOS6juWFvOWuueaAp++8iVxyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzID0gWy4uLmF2YWlsYWJsZVJvd3NdO1xyXG4gICAgICAvLyDlkIzmraXorr7nva7pq5jkuq7pgInkuK3ooYzkuLrnrKzkuIDmnaHlj6/pgInmlbDmja5cclxuICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9XHJcbiAgICAgICAgYXZhaWxhYmxlUm93cy5sZW5ndGggPiAwID8gYXZhaWxhYmxlUm93c1swXSA6IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MgPSBbXTtcclxuICAgICAgLy8g5Y+W5raI6auY5LquXHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlQ2hlY2tBbGxTdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIC8vIOiOt+WPlumAieS4reeahOihjOaVsOaNru+8iOS/neeVmeeUqOS6juWFvOWuueaAp++8iVxyXG4gIGdldFNlbGVjdGVkUm93cygpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDaGVja2VkUm93cygpO1xyXG4gIH1cclxuXHJcbiAgLy8g5aSE55CG6KGMIGNoZWNrYm94IOWPmOWMluS6i+S7tu+8iOaVsOaNrumpseWKqOaooeW8j++8iVxyXG4gIGhhbmRsZVJvd0NoZWNrZWRDaGFuZ2UoZGF0YTogYW55LCBjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pc1Jvd0Rpc2FibGVkKGRhdGEpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDmlbDmja7lr7nosaHnmoQgY2hlY2tlZCDlsZ7mgKflt7Lnu4/pgJrov4flj4zlkJHnu5Hlrproh6rliqjmm7TmlrBcclxuICAgIC8vIOi/memHjOWPqumcgOimgeWQjOatpeabtOaWsCBfc2VsZWN0ZWRSb3dzXHJcblxyXG4gICAgLy8g5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd3PvvIjnlKjkuo7lhbzlrrnmgKfvvIlcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fc2VsZWN0ZWRSb3dzLmZpbmRJbmRleCgocm93KSA9PlxyXG4gICAgICB0aGlzLmlzU2FtZVJvdyhyb3csIGRhdGEpLFxyXG4gICAgKTtcclxuICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd3MucHVzaChkYXRhKTtcclxuICAgICAgfVxyXG4gICAgICAvLyDli77pgInlpI3pgInmoYbml7blkIzmraXorr7nva7pq5jkuq7pgInkuK3ooYxcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IGRhdGE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIOiLpeW9k+WJjemrmOS6ruihjOS4uuivpeihjO+8jOWImeWPlua2iOmrmOS6rlxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyAmJlxyXG4gICAgICAgIHRoaXMuaXNTYW1lUm93KHRoaXMuX3NlbGVjdGVkVGFibGVSb3csIGRhdGEpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5pu05paw5YWo6YCJ54q25oCBXHJcbiAgICB0aGlzLnVwZGF0ZUNoZWNrQWxsU3RhdHVzKCk7XHJcbiAgfVxyXG5cclxuICAvLyDliLfmlrDlhajpgInnirbmgIHvvIjnlKjkuo7lhbbku5blnLrmma/vvIlcclxuICByZWZyZXNoQ2hlY2tBbGxTdGF0dXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUNoZWNrQWxsU3RhdHVzKCk7XHJcbiAgfVxyXG5cclxuICAvLyDojrflj5booYznmoTllK/kuIDmoIfor4bvvIjnlKjkuo7ot6jpobXpgInkuK3vvIlcclxuICBwcml2YXRlIGdldFJvd0lkKGRhdGE6IGFueSk6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCB7XHJcbiAgICByZXR1cm4gZGF0YS5pZCA/PyBkYXRhLmtleSA/PyB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICAvLyDliKTmlq3kuKTooYzmmK/lkKbkuLrlkIzkuIDooYxcclxuICBwcml2YXRlIGlzU2FtZVJvdyhyb3cxOiBhbnksIHJvdzI6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgaWQxID0gdGhpcy5nZXRSb3dJZChyb3cxKTtcclxuICAgIGNvbnN0IGlkMiA9IHRoaXMuZ2V0Um93SWQocm93Mik7XHJcblxyXG4gICAgaWYgKGlkMSAhPT0gdW5kZWZpbmVkICYmIGlkMiAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBpZDEgPT09IGlkMjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmYWxsYmFjayDliLAgSlNPTiDmr5TovoNcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShyb3cxKSA9PT0gSlNPTi5zdHJpbmdpZnkocm93Mik7XHJcbiAgfVxyXG5cclxuICAvLyDmuIXnqbrpgInkuK3nmoTooYzvvIjmlbDmja7pqbHliqjmqKHlvI/vvIlcclxuICBjbGVhclNlbGVjdGVkUm93cygpIHtcclxuICAgIC8vIOa4heepuuW9k+WJjeaVsOaNrua6kOS4reaJgOaciemhueeahCBjaGVja2VkIOeKtuaAgVxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5kYXRhU291cmNlKSkge1xyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgICAgcm93LmNoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2VsZWN0ZWRSb3dzID0gW107XHJcbiAgICB0aGlzLl9jaGVja2VkQWxsID0gZmFsc2U7XHJcbiAgICB0aGlzLl9pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGhhbmRsZUZpZWxkQ2hlY2tCb3hDaGFuZ2UoY2hlY2tCb3hPcHRpb25zOiBPcHRpb25zVHlwZVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZXRGaWVsZHNWYWx1ZSh7XHJcbiAgICAgIFtrZXldOiBjaGVja0JveE9wdGlvbnNcclxuICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmNoZWNrZWQpXHJcbiAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS52YWx1ZSksXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVNlYXJjaCgpIHtcclxuICAgIHRoaXMuX3NhdmVkU2VhcmNoUGFyYW1zID0gdGhpcy5jbGVhckVtcHR5U2VhcmNoUGFyYW1zKCk7XHJcbiAgICB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggPSAxO1xyXG4gICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlUmVzZXRGb3JtKCkge1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5fc2VhcmNoUGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgY29uc3QgdGFyZ2V0Q29sdW1uID0gdGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zLmZpbmQoKGl0ZW0pID0+IHtcclxuICAgICAgICByZXR1cm4gKGl0ZW0uZmllbGRQcm9wcz8ubmFtZSB8fCBpdGVtLnByb3ApID09PSBrZXk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8g5a+55LqOY2hlY2tib3jnsbvlnovvvIzpnIDopoHnibnmrorlpITnkIbpu5jorqTlgLxcclxuICAgICAgaWYgKHRhcmdldENvbHVtbj8udmFsdWVUeXBlID09PSBcImNoZWNrYm94XCIpIHtcclxuICAgICAgICAvLyDku47ljp/lp4tjb2x1bW5z6YWN572u5Lit6I635Y+W5Yid5aeL6YWN572u77yM5Lul56Gu5L+d5L2/55So5q2j56Gu55qE6buY6K6k5YC8XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxDb2x1bW4gPSB0aGlzLmNvbHVtbnMuZmluZCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChpdGVtLmZpZWxkUHJvcHM/Lm5hbWUgfHwgaXRlbS5wcm9wKSA9PT0ga2V5O1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyDku47ljp/lp4tvcHRpb25z5Lit5om+5Ye6Y2hlY2tlZOS4unRydWXnmoTpobnkvZzkuLrpu5jorqTlgLxcclxuICAgICAgICBjb25zdCBvcmlnaW5hbEZpZWxkUHJvcHMgPSBvcmlnaW5hbENvbHVtbj8uZmllbGRQcm9wcyBhc1xyXG4gICAgICAgICAgfCBDaGVja2JveEZpZWxkUHJvcHNcclxuICAgICAgICAgIHwgdW5kZWZpbmVkO1xyXG4gICAgICAgIGNvbnN0IGNoZWNrZWRWYWx1ZXMgPSAob3JpZ2luYWxGaWVsZFByb3BzPy5vcHRpb25zIHx8IFtdKVxyXG4gICAgICAgICAgLmZpbHRlcigob3B0OiBPcHRpb25zVHlwZSkgPT4gb3B0LmNoZWNrZWQpXHJcbiAgICAgICAgICAubWFwKChvcHQ6IE9wdGlvbnNUeXBlKSA9PiBvcHQudmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9XHJcbiAgICAgICAgICBjaGVja2VkVmFsdWVzLmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgPyBjaGVja2VkVmFsdWVzXHJcbiAgICAgICAgICAgIDogUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFNbdGFyZ2V0Q29sdW1uLnZhbHVlVHlwZV0udmFsdWU7XHJcblxyXG4gICAgICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trZXldID0gZGVmYXVsdFZhbHVlO1xyXG5cclxuICAgICAgICAvLyDmoLnmja7pu5jorqTlgLzmgaLlpI1vcHRpb25z55qEY2hlY2tlZOeKtuaAge+8jOS9v+eUqOWOn+Wni29wdGlvbnPnmoTnu5PmnoRcclxuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpID8gZGVmYXVsdFZhbHVlIDogW107XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxPcHRpb25zID0gb3JpZ2luYWxGaWVsZFByb3BzPy5vcHRpb25zIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldEZpZWxkUHJvcHMgPSB0YXJnZXRDb2x1bW4uZmllbGRQcm9wcyBhcyBDaGVja2JveEZpZWxkUHJvcHM7XHJcbiAgICAgICAgdGFyZ2V0RmllbGRQcm9wcy5vcHRpb25zID0gb3JpZ2luYWxPcHRpb25zLm1hcCgoaXRlbTogT3B0aW9uc1R5cGUpID0+IHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICAgIGNoZWNrZWQ6IGRlZmF1bHRWYWx1ZXMuaW5jbHVkZXMoaXRlbS52YWx1ZSksXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trZXldID0gdGFyZ2V0Q29sdW1uPy5maWVsZFByb3BzXHJcbiAgICAgICAgICA/IHRhcmdldENvbHVtbj8uZmllbGRQcm9wcy52YWx1ZSB8fFxyXG4gICAgICAgICAgICBQUk9fVEFCTEVfREVGQVVMVF9QUk9QU1t0YXJnZXRDb2x1bW4udmFsdWVUeXBlXS52YWx1ZVxyXG4gICAgICAgICAgOiBQUk9fVEFCTEVfREVGQVVMVF9QUk9QU1t0YXJnZXRDb2x1bW4udmFsdWVUeXBlXS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fc2F2ZWRTZWFyY2hQYXJhbXMgPSB7fTtcclxuICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA9IDE7XHJcbiAgICB0aGlzLm9uUmVzZXRGb3JtQmVmb3JlUmVsb2FkLmVtaXQoKTtcclxuICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcclxuICB9XHJcblxyXG4gIGhhbmRsZVBhZ2VJbmRleENoYW5nZShwYWdlSW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4ID0gcGFnZUluZGV4O1xyXG4gICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlUGFnZVNpemVDaGFuZ2UocGFnZVNpemU6IGFueSkge1xyXG4gICAgdGhpcy5fcGFnZUluZm8ucGFnZVNpemUgPSBwYWdlU2l6ZTtcclxuICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA9IDE7XHJcbiAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBoYW5kbGVRdWVyeShhZnRlckRlbGV0ZT86IGJvb2xlYW4pIHtcclxuICAgIC8vIOWIoOmZpOWQjuWIt+aWsOS4lOW9k+WJjemhteS7heWJqeS4gOadoeiusOW9leaXtu+8jOiLpeS4jeWcqOesrOS4gOmhteWImeWFiOWbnumAgOS4gOmhtVxyXG4gICAgaWYgKFxyXG4gICAgICBhZnRlckRlbGV0ZSAmJlxyXG4gICAgICBBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkgJiZcclxuICAgICAgdGhpcy5kYXRhU291cmNlLmxlbmd0aCA9PT0gMSAmJlxyXG4gICAgICB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggPiAxXHJcbiAgICApIHtcclxuICAgICAgdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4ID0gdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4IC0gMTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3Qoe1xyXG4gICAgICAgICAgcGFyYW1zOiB0aGlzLmNsZWFyRW1wdHlTZWFyY2hQYXJhbXMoKSxcclxuICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgIHBhZ2VJbmRleDogdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4LFxyXG4gICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5fcGFnZUluZm8ucGFnZVNpemUsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8g5Zyo57q/5o6S5bqP5qih5byP77ya5oqK5o6S5bqP5a+56LGh5o+Q5Lqk57uZ5o6l5Y+jXHJcbiAgICAgICAgICAuLi4odGhpcy5zb3J0TW9kZSA9PT0gXCJzZXJ2ZXJcIlxyXG4gICAgICAgICAgICA/IHsgc29ydDogdGhpcy5idWlsZFNlcnZlclNvcnRQYXlsb2FkKCkgfVxyXG4gICAgICAgICAgICA6IHt9KSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8g5p+l6K+i5ZCO6buY6K6k5LiN5L+d55WZ6Leo6aG16YCJ5Lit54q25oCB77ya5q+P5qyh6L+U5Zue55qE5pWw5o2u5Z2H5Yid5aeL5YyW5Li65pyq6YCJ5LitXHJcbiAgICAgICAgaWYgKHRoaXMuc2hvd0NoZWNrYm94KSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSAocmVzdWx0LmRhdGEgfHwgW10pLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIC4uLml0ZW0sXHJcbiAgICAgICAgICAgICAgY2hlY2tlZDogZmFsc2UsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5kYXRhU291cmNlID0gcmVzdWx0LmRhdGEgfHwgW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnN1bW1hcnlEYXRhID0gcmVzdWx0LnN1bW1hcnlEYXRhIHx8IG51bGw7XHJcbiAgICAgICAgLy8g5pys5Zyw5o6S5bqP5qih5byP77ya5ou/5Yiw5pWw5o2u5ZCO5Zyo5YmN56uv5o6S5bqPXHJcbiAgICAgICAgaWYgKHRoaXMuc29ydE1vZGUgPT09IFwibG9jYWxcIikge1xyXG4gICAgICAgICAgdGhpcy5zb3J0RGF0YVNvdXJjZUluUGxhY2UoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fcGFnZUluZm8udG90YWwgPSByZXN1bHQudG90YWwgfHwgMDtcclxuICAgICAgICAvLyDlj5bmtojot6jpobXlpJrpgInvvJrmn6Xor6LlkI7muIXnqbrpgInkuK3nirbmgIFcclxuICAgICAgICBpZiAodGhpcy5zaG93Q2hlY2tib3gpIHtcclxuICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3RlZFJvd3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihcIuafpeivouWksei0pTpcIiwgZXJyb3IpO1xyXG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgIHRoaXMuX3BhZ2VJbmZvLnRvdGFsID0gMDtcclxuICAgICAgICB0aGlzLnN1bW1hcnlEYXRhID0gbnVsbDtcclxuICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICB0aGlzLl9sb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcIuacquaPkOS+myBfcmVxdWVzdCDlm57osIPlh73mlbBcIik7XHJcbiAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOinpuWPkeWIl+aOkuW6j+WPmOabtFxyXG4gIG9uU29ydENoYW5nZShzb3J0S2V5OiBzdHJpbmcsIHNvcnRPcmRlcjogXCJhc2NlbmRcIiB8IFwiZGVzY2VuZFwiIHwgbnVsbCkge1xyXG4gICAgLy8g5Y2V5YiX5o6S5bqP77ya6YeN572u5YW25a6D5YiX77yb5aSa5YiX5o6S5bqP77ya5L+d55WZ5YW25a6D5YiXXHJcbiAgICBpZiAoIXRoaXMubXVsdGlwbGVTb3J0KSB7XHJcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuX3NvcnRNYXApLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgIGlmIChrZXkgIT09IHNvcnRLZXkpIHRoaXMuX3NvcnRNYXBba2V5XSA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc29ydE1hcFtzb3J0S2V5XSA9IHNvcnRPcmRlcjtcclxuXHJcbiAgICAvLyDnu7TmiqTkvJjlhYjnuqfpmJ/liJfvvJrmnInluo/liJfkuJTpnZ7nqbogLT4g572u5LqO5pyr5bC+77yb5Li656m6IC0+IOenu+mZpFxyXG4gICAgdGhpcy5fc29ydFByaW9yaXR5ID0gdGhpcy5fc29ydFByaW9yaXR5LmZpbHRlcigoaykgPT4gayAhPT0gc29ydEtleSk7XHJcbiAgICBpZiAoc29ydE9yZGVyKSB7XHJcbiAgICAgIHRoaXMuX3NvcnRQcmlvcml0eS5wdXNoKHNvcnRLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnNvcnRNb2RlID09PSBcImxvY2FsXCIpIHtcclxuICAgICAgdGhpcy5zb3J0RGF0YVNvdXJjZUluUGxhY2UoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIOWcqOe6v+aOkuW6j++8mumHjeaWsOivt+axglxyXG4gICAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTb3J0T3JkZXIoc29ydEtleTogc3RyaW5nKTogXCJhc2NlbmRcIiB8IFwiZGVzY2VuZFwiIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydE1hcFtzb3J0S2V5XSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlVGFibGVSb3dDbGljayhkYXRhOiBhbnkpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBkYXRhO1xyXG4gICAgaWYgKHRoaXMuc2hvd0NoZWNrYm94ICYmICF0aGlzLmlzUm93RGlzYWJsZWQoZGF0YSkpIHtcclxuICAgICAgLy8g5YWI5riF56m65omA5pyJ6YCJ5Lit6KGMXHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cyA9IFtdO1xyXG4gICAgICBjb25zdCBuZXh0Q2hlY2tlZCA9ICF0aGlzLmlzUm93Q2hlY2tlZChkYXRhKTtcclxuICAgICAgdGhpcy50b2dnbGVSb3dDaGVja2VkKGRhdGEsIG5leHRDaGVja2VkKTtcclxuICAgIH1cclxuICAgIHRoaXMub25Sb3dDbGljay5lbWl0KHRoaXMuX3NlbGVjdGVkVGFibGVSb3cpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlVGFibGVSb3dEYkNsaWNrKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IGRhdGE7XHJcbiAgICB0aGlzLm9uUm93RGJDbGljay5lbWl0KHRoaXMuX3NlbGVjdGVkVGFibGVSb3cpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ29sdW1uc1NldHRpbmdDb25maXJtKCkge1xyXG4gICAgdGhpcy5xdWVyeUR5bmFtaWNDb2x1bW5zKCk7XHJcbiAgfVxyXG5cclxuICAvLyDlpITnkIYgYXV0b0NvbXBsZXRlIOi+k+WFpeS6i+S7tu+8iOW4pumYsuaKlu+8iVxyXG4gIGhhbmRsZUF1dG9Db21wbGV0ZUlucHV0KGV2ZW50OiBFdmVudCwgY29sdW1uOiBQcm9UYWJsZUNvbHVtbikge1xyXG4gICAgY29uc3QgZmllbGRLZXkgPSBjb2x1bW4uZmllbGRQcm9wcz8ubmFtZSB8fCBjb2x1bW4ucHJvcDtcclxuXHJcbiAgICAvLyDlpoLmnpzor6XlrZfmrrXov5jmsqHmnInpmLLmipblh73mlbDvvIzliJvlu7rkuIDkuKpcclxuICAgIGlmICghdGhpcy5fYXV0b0NvbXBsZXRlRGVib3VuY2VNYXAuaGFzKGZpZWxkS2V5KSkge1xyXG4gICAgICBjb25zdCBkZWJvdW5jZWRGbiA9IGRlYm91bmNlKChldnQ6IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgLy8g6YeN5paw5p+l5om+5a+55bqU55qEIGNvbHVtbu+8jOehruS/neS9v+eUqOacgOaWsOeahOmFjee9rlxyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRDb2x1bW4gPSB0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMuZmluZChcclxuICAgICAgICAgIChjb2wpID0+IChjb2wuZmllbGRQcm9wcz8ubmFtZSB8fCBjb2wucHJvcCkgPT09IGZpZWxkS2V5LFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGN1cnJlbnRDb2x1bW4pIHtcclxuICAgICAgICAgIHRoaXMuZXhlY3V0ZUF1dG9Db21wbGV0ZURhdGFTb3VyY2UoZXZ0LCBjdXJyZW50Q29sdW1uKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sIDMwMCk7IC8vIDMwMG1zIOmYsuaKluW7tui/n1xyXG4gICAgICB0aGlzLl9hdXRvQ29tcGxldGVEZWJvdW5jZU1hcC5zZXQoZmllbGRLZXksIGRlYm91bmNlZEZuKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDosIPnlKjpmLLmipblh73mlbBcclxuICAgIGNvbnN0IGRlYm91bmNlZEZuID0gdGhpcy5fYXV0b0NvbXBsZXRlRGVib3VuY2VNYXAuZ2V0KGZpZWxkS2V5KTtcclxuICAgIGlmIChkZWJvdW5jZWRGbikge1xyXG4gICAgICBkZWJvdW5jZWRGbihldmVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDojrflj5YgYXV0b0NvbXBsZXRlIOeahOaVsOaNrua6kFxyXG4gIGdldEF1dG9Db21wbGV0ZURhdGFTb3VyY2UoY29sdW1uOiBQcm9UYWJsZUNvbHVtbik6IGFueVtdIHtcclxuICAgIGNvbnN0IGZpZWxkS2V5ID0gY29sdW1uLmZpZWxkUHJvcHM/Lm5hbWUgfHwgY29sdW1uLnByb3A7XHJcbiAgICByZXR1cm4gdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNbZmllbGRLZXldIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgZ2V0RmllbGRQcm9wcyhjb2x1bW46IFByb1RhYmxlQ29sdW1uKTogYW55IHtcclxuICAgIHJldHVybiBjb2x1bW4uZmllbGRQcm9wcztcclxuICB9XHJcblxyXG4gIC8vIOiOt+WPluaMh+WumuWQjeensOeahGxhYmVs5qih5p2/XHJcbiAgZ2V0TGFiZWxUZW1wbGF0ZShuYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCB7XHJcbiAgICBpZiAoIW5hbWUpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tVGVtcGxhdGVzLmdldChuYW1lKSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+WIGZvcm0taXRlbSDnmoTliqjmgIHnsbvlkI1cclxuICBnZXRGb3JtSXRlbUNsYXNzTmFtZShjb2x1bW46IFByb1RhYmxlQ29sdW1uKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZpZWxkTmFtZSA9IHRoaXMuZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5hbWUgfHwgY29sdW1uLnByb3A7XHJcbiAgICByZXR1cm4gYHByby10YWJsZS0ke2ZpZWxkTmFtZX0tZm9ybS1pdGVtYDtcclxuICB9XHJcbn1cclxuIiwiPGFwcC1wYWdlLWNvbnRhaW5lclxyXG4gIFt0aXRsZV09XCJ0aXRsZVwiXHJcbiAgW3Nob3dIZWFkZXJdPVwic2hvd1NlYXJjaEJhclwiXHJcbiAgbmdDbGFzcz1cInByby10YWJsZS1jb250YWluZXJcIlxyXG4+XHJcbiAgPG5nLXRlbXBsYXRlICNoZWFkZXI+XHJcbiAgICA8YXBwLXRhYmxlLXNlYXJjaC1iYXJcclxuICAgICAgKm5nSWY9XCJzaG93U2VhcmNoQmFyXCJcclxuICAgICAgW2xhYmVsV2lkdGhdPVwibGFiZWxXaWR0aFwiXHJcbiAgICAgIFtsYWJlbEFsaWduXT1cImxhYmVsQWxpZ25cIlxyXG4gICAgICBbZm9ybUl0ZW1XaWR0aF09XCJmb3JtSXRlbVdpZHRoXCJcclxuICAgID5cclxuICAgICAgPG5nLXRlbXBsYXRlICNsZWZ0Q29udGVudD5cclxuICAgICAgICA8bnotZm9ybS1pdGVtXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIF9zZWFyY2hGaWxlZENvbHVtbnNcIlxyXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZ2V0Rm9ybUl0ZW1DbGFzc05hbWUoY29sdW1uKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPG56LWZvcm0tbGFiZWwgKm5nSWY9XCIhZ2V0RmllbGRQcm9wcyhjb2x1bW4pLmhpZGVMYWJlbFwiIG56Tm9Db2xvbj5cclxuICAgICAgICAgICAgPCEtLSDmo4Dmn6XmmK/lkKbmnInoh6rlrprkuYlsYWJlbOaooeadvyAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBjb2x1bW4uY3VzdG9tTGFiZWxSZW5kZXIgJiZcclxuICAgICAgICAgICAgICAgICAgZ2V0TGFiZWxUZW1wbGF0ZShjb2x1bW4uY3VzdG9tTGFiZWxSZW5kZXIpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBkZWZhdWx0TGFiZWxcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0TGFiZWxUZW1wbGF0ZShjb2x1bW4uY3VzdG9tTGFiZWxSZW5kZXIpXCJcclxuICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XHJcbiAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogY29sdW1uLFxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcclxuICAgICAgICAgICAgICAgICAgZmllbGRQcm9wczogZ2V0RmllbGRQcm9wcyhjb2x1bW4pXHJcbiAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRMYWJlbD5cclxuICAgICAgICAgICAgICB7eyBnZXRGaWVsZFByb3BzKGNvbHVtbikubGFiZWwgfHwgY29sdW1uLnRpdGxlIH19XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICA8L256LWZvcm0tbGFiZWw+XHJcbiAgICAgICAgICA8bnotZm9ybS1jb250cm9sICpuZ0lmPVwiY29sdW1uLnZhbHVlVHlwZSA9PT0gJ2lucHV0J1wiPlxyXG4gICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICBuei1pbnB1dFxyXG4gICAgICAgICAgICAgIFtuYW1lXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5uYW1lIHx8IGNvbHVtbi5wcm9wXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLnBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIlxyXG4gICAgICAgICAgICAgICAgX3NlYXJjaFBhcmFtc1tnZXRGaWVsZFByb3BzKGNvbHVtbikubmFtZSB8fCBjb2x1bW4ucHJvcF1cclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9uei1mb3JtLWNvbnRyb2w+XHJcbiAgICAgICAgICA8bnotZm9ybS1jb250cm9sICpuZ0lmPVwiY29sdW1uLnZhbHVlVHlwZSA9PT0gJ2lucHV0UGxhdGUnXCI+XHJcbiAgICAgICAgICAgIDxhcHAtcGxhdGUtaW5wdXRcclxuICAgICAgICAgICAgICBbbmFtZV09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikubmFtZSB8fCBjb2x1bW4ucHJvcFwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJcclxuICAgICAgICAgICAgICAgIF9zZWFyY2hQYXJhbXNbZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5hbWUgfHwgY29sdW1uLnByb3BdXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPjwvYXBwLXBsYXRlLWlucHV0PlxyXG4gICAgICAgICAgPC9uei1mb3JtLWNvbnRyb2w+XHJcbiAgICAgICAgICA8bnotZm9ybS1jb250cm9sICpuZ0lmPVwiY29sdW1uLnZhbHVlVHlwZSA9PT0gJ3NlbGVjdCdcIj5cclxuICAgICAgICAgICAgPG56LXNlbGVjdFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiXHJcbiAgICAgICAgICAgICAgICBfc2VhcmNoUGFyYW1zW2dldEZpZWxkUHJvcHMoY29sdW1uKS5uYW1lIHx8IGNvbHVtbi5wcm9wXVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW256QWxsb3dDbGVhcl09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikuYWxsb3dDbGVhclwiXHJcbiAgICAgICAgICAgICAgW256UGxhY2VIb2xkZXJdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLnBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgICBbbmFtZV09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikubmFtZSB8fCBjb2x1bW4ucHJvcFwiXHJcbiAgICAgICAgICAgICAgW256T3B0aW9uc109XCJnZXRGaWVsZFByb3BzKGNvbHVtbikub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW256RGlzYWJsZWRdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8L256LXNlbGVjdD5cclxuICAgICAgICAgIDwvbnotZm9ybS1jb250cm9sPlxyXG4gICAgICAgICAgPG56LWZvcm0tY29udHJvbCAqbmdJZj1cImNvbHVtbi52YWx1ZVR5cGUgPT09ICdzZWxlY3RNdWx0aXBsZSdcIj5cclxuICAgICAgICAgICAgPG56LXNlbGVjdFxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiXHJcbiAgICAgICAgICAgICAgICBfc2VhcmNoUGFyYW1zW2dldEZpZWxkUHJvcHMoY29sdW1uKS5uYW1lIHx8IGNvbHVtbi5wcm9wXVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW256QWxsb3dDbGVhcl09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikuYWxsb3dDbGVhclwiXHJcbiAgICAgICAgICAgICAgW256UGxhY2VIb2xkZXJdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLnBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgICBbbmFtZV09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikubmFtZSB8fCBjb2x1bW4ucHJvcFwiXHJcbiAgICAgICAgICAgICAgW256T3B0aW9uc109XCJnZXRGaWVsZFByb3BzKGNvbHVtbikub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW256RGlzYWJsZWRdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBuek1vZGU9XCJtdWx0aXBsZVwiXHJcbiAgICAgICAgICAgICAgW256TWF4VGFnQ291bnRdPVwiMlwiXHJcbiAgICAgICAgICAgICAgW256TWF4VGFnUGxhY2Vob2xkZXJdPVwibnpNYXhUYWdQbGFjZWhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW256Q3VzdG9tVGVtcGxhdGVdPVwiZGVmYXVsdFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbnpNYXhUYWdQbGFjZWhvbGRlcj5cclxuICAgICAgICAgICAgICAgICtcclxuICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgIF9zZWFyY2hQYXJhbXNbZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5hbWUgfHwgY29sdW1uLnByb3BdXHJcbiAgICAgICAgICAgICAgICAgICAgPy5sZW5ndGhcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRUZW1wbGF0ZSBsZXQtc2VsZWN0ZWQ+XHJcbiAgICAgICAgICAgICAgICB7eyBzZWxlY3RlZC5uekxhYmVsLmxlbmd0aCA+IDQgPyBzZWxlY3RlZC5uekxhYmVsLnN1YnN0cmluZygwLCA0KSArICcuLi4nIDogc2VsZWN0ZWQubnpMYWJlbCB9fVxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbnotc2VsZWN0PlxyXG4gICAgICAgICAgPC9uei1mb3JtLWNvbnRyb2w+XHJcbiAgICAgICAgICA8bnotZm9ybS1jb250cm9sICpuZ0lmPVwiY29sdW1uLnZhbHVlVHlwZSA9PT0gJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgIDxuei1kYXRlLXBpY2tlclxyXG4gICAgICAgICAgICAgIFtuelNob3dUaW1lXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5zaG93VGltZVwiXHJcbiAgICAgICAgICAgICAgW256Rm9ybWF0XT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5mb3JtYXRcIlxyXG4gICAgICAgICAgICAgIFtuelBsYWNlSG9sZGVyXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5wbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW256QWxsb3dDbGVhcl09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikuYWxsb3dDbGVhclwiXHJcbiAgICAgICAgICAgICAgW256RGlzYWJsZWRdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIlxyXG4gICAgICAgICAgICAgICAgX3NlYXJjaFBhcmFtc1tnZXRGaWVsZFByb3BzKGNvbHVtbikubmFtZSB8fCBjb2x1bW4ucHJvcF1cclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtuek1vZGVdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm1vZGVcIlxyXG4gICAgICAgICAgICA+PC9uei1kYXRlLXBpY2tlcj5cclxuICAgICAgICAgIDwvbnotZm9ybS1jb250cm9sPlxyXG4gICAgICAgICAgPG56LWZvcm0tY29udHJvbCAqbmdJZj1cImNvbHVtbi52YWx1ZVR5cGUgPT09ICdjaGVja2JveCdcIj5cclxuICAgICAgICAgICAgPG56LWNoZWNrYm94LWdyb3VwXHJcbiAgICAgICAgICAgICAgW2NsYXNzXT1cIlxyXG4gICAgICAgICAgICAgICAgZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5vU3R5bGVcclxuICAgICAgICAgICAgICAgICAgPyAncHJvLXRhYmxlLWNoZWNrYm94Z3JvdXAtbm9zdHlsZSdcclxuICAgICAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikub3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgW256RGlzYWJsZWRdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJcclxuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQ2hlY2tCb3hDaGFuZ2UoXHJcbiAgICAgICAgICAgICAgICAgICRldmVudCxcclxuICAgICAgICAgICAgICAgICAgZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5hbWUgfHwgY29sdW1uLnByb3BcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+PC9uei1jaGVja2JveC1ncm91cD5cclxuICAgICAgICAgIDwvbnotZm9ybS1jb250cm9sPlxyXG4gICAgICAgICAgPG56LWZvcm0tY29udHJvbCAqbmdJZj1cImNvbHVtbi52YWx1ZVR5cGUgPT09ICdhdXRvQ29tcGxldGUnXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIG56LWlucHV0XHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJcclxuICAgICAgICAgICAgICAgIF9zZWFyY2hQYXJhbXNbZ2V0RmllbGRQcm9wcyhjb2x1bW4pPy5uYW1lIHx8IGNvbHVtbi5wcm9wXVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgKGlucHV0KT1cImhhbmRsZUF1dG9Db21wbGV0ZUlucHV0KCRldmVudCwgY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgW256QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRGaWVsZFByb3BzKGNvbHVtbik/LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pPy5wbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxuei1hdXRvY29tcGxldGVcclxuICAgICAgICAgICAgICBbbnpCYWNrZmlsbF09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikuYmFja0ZpbGxcIlxyXG4gICAgICAgICAgICAgIFtuekRlZmF1bHRBY3RpdmVGaXJzdE9wdGlvbl09XCJcclxuICAgICAgICAgICAgICAgIGdldEZpZWxkUHJvcHMoY29sdW1uKS5kZWZhdWx0QWN0aXZlRmlyc3RPcHRpb25cclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtueldpZHRoXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS53aWR0aFwiXHJcbiAgICAgICAgICAgICAgI2F1dG9cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxuei1hdXRvLW9wdGlvblxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBnZXRBdXRvQ29tcGxldGVEYXRhU291cmNlKGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICAgW256VmFsdWVdPVwiXHJcbiAgICAgICAgICAgICAgICAgIGdldEZpZWxkUHJvcHMoY29sdW1uKS5yZXR1cm5GdWxsRGF0YSA/IG9wdGlvbiA6IG9wdGlvbi52YWx1ZVxyXG4gICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgIFtuekxhYmVsXT1cIm9wdGlvbi5sYWJlbFwiXHJcbiAgICAgICAgICAgICAgICBbbnpEaXNhYmxlZF09XCJvcHRpb24uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxyXG4gICAgICAgICAgICAgIDwvbnotYXV0by1vcHRpb24+XHJcbiAgICAgICAgICAgIDwvbnotYXV0b2NvbXBsZXRlPlxyXG4gICAgICAgICAgPC9uei1mb3JtLWNvbnRyb2w+XHJcbiAgICAgICAgICA8bnotZm9ybS1jb250cm9sICpuZ0lmPVwiY29sdW1uLnZhbHVlVHlwZSA9PT0gJ2N1c3RvbSdcIj5cclxuICAgICAgICAgICAgPGFwcC1keW5hbWljLXNlYXJjaC1maWVsZFxyXG4gICAgICAgICAgICAgIFtjb21wb25lbnRdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLmNvbXBvbmVudFwiXHJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIl9zZWFyY2hQYXJhbXNbZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5hbWUgfHwgY29sdW1uLnByb3BdXCJcclxuICAgICAgICAgICAgICBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pXCJcclxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiXHJcbiAgICAgICAgICAgICAgICBzZXRGaWVsZFZhbHVlKGdldEZpZWxkUHJvcHMoY29sdW1uKS5uYW1lIHx8IGNvbHVtbi5wcm9wLCAkZXZlbnQpXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPjwvYXBwLWR5bmFtaWMtc2VhcmNoLWZpZWxkPlxyXG4gICAgICAgICAgPC9uei1mb3JtLWNvbnRyb2w+XHJcbiAgICAgICAgICA8bnotZm9ybS1jb250cm9sICpuZ0lmPVwiY29sdW1uLnZhbHVlVHlwZSA9PT0gJ2lucHV0TnVtYmVyJ1wiPlxyXG4gICAgICAgICAgICA8bnotaW5wdXQtbnVtYmVyXHJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIicxMDAlJ1wiXHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJcclxuICAgICAgICAgICAgICAgIF9zZWFyY2hQYXJhbXNbZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5hbWUgfHwgY29sdW1uLnByb3BdXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbbnpQbGFjZUhvbGRlcl09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikucGxhY2VIb2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtuekRpc2FibGVkXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgW256Rm9ybWF0dGVyXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5mb3JtYXR0ZXJQZXJjZW50XCJcclxuICAgICAgICAgICAgICBbbnpQYXJzZXJdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLnBhcnNlclBlcmNlbnRcIlxyXG4gICAgICAgICAgICA+PC9uei1pbnB1dC1udW1iZXI+XHJcbiAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cclxuICAgICAgICA8L256LWZvcm0taXRlbT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPG5nLXRlbXBsYXRlICNhY3Rpb25UZXh0QnRuPlxyXG4gICAgICAgIDxuei1zcGFjZSBbbnpTaXplXT1cIjRcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuelNwYWNlSXRlbSAqbmdJZj1cInNob3dTZWFyY2hCdG5cIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBuei1idXR0b24gbnpUeXBlPVwicHJpbWFyeVwiIChjbGljayk9XCJoYW5kbGVTZWFyY2goKVwiPlxyXG4gICAgICAgICAgICAgIHt7IGNvbmZpcm1CdG5UZXh0IH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuelNwYWNlSXRlbSAqbmdJZj1cInNob3dDbGVhckJ0blwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiAoY2xpY2spPVwiaGFuZGxlUmVzZXRGb3JtKClcIj5cclxuICAgICAgICAgICAgICB7eyBjbGVhckJ0blRleHQgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbnotc3BhY2U+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjYWN0aW9uSW1nQnRuPlxyXG4gICAgICAgIDxuei1zcGFjZT5cclxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpbWdBY3Rpb25CYXJUcGxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuelNwYWNlSXRlbSBjbGFzcz1cInNldHRpbmctc3BhY2UtaXRlbVwiICpuZ0lmPVwic2hvd0NvbHVtblNldHRpbmdcIj5cclxuICAgICAgICAgICAgPHNwYW4gbnotdG9vbHRpcCBuelRvb2x0aXBUaXRsZT1cIuiuvue9ruWtl+autVwiPlxyXG4gICAgICAgICAgICAgIDxhcHAtY29sbXVucy1zZXR0aW5nXHJcbiAgICAgICAgICAgICAgICBbY29sdW1uc109XCJjb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZENvbHVtbnNdPVwiX3NlcnZlckNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgW3RhYmxlTmFtZV09XCJ0YWJsZU5hbWVcIlxyXG4gICAgICAgICAgICAgICAgKGFmdGVyQ29uZmlybSk9XCJoYW5kbGVDb2x1bW5zU2V0dGluZ0NvbmZpcm0oKVwiXHJcbiAgICAgICAgICAgICAgPjwvYXBwLWNvbG11bnMtc2V0dGluZz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L256LXNwYWNlPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9hcHAtdGFibGUtc2VhcmNoLWJhcj5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8bmctdGVtcGxhdGUgI2JvZHk+XHJcbiAgICA8ZGl2IGNsYXNzPVwibWItNFwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0FjdGlvbkJhclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhY3Rpb25CYXJUcGxcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21UYWJsZVJlbmRlclwiPlxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY3VzdG9tVGFibGVSZW5kZXJcIj48L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG56LXRhYmxlXHJcbiAgICAgICpuZ0lmPVwiIWN1c3RvbVRhYmxlUmVuZGVyICYmIF9zaG93VGFibGVcIlxyXG4gICAgICAjZHluYW1pY1RhYmxlXHJcbiAgICAgIG56U2l6ZT1cInNtYWxsXCJcclxuICAgICAgbnpTaG93U2l6ZUNoYW5nZXJcclxuICAgICAgW256Qm9yZGVyZWRdPVwiYm9yZGVyZWRcIlxyXG4gICAgICBbbnpPdXRlckJvcmRlcmVkXT1cIm91dGVyQm9yZGVyZWRcIlxyXG4gICAgICBbbnpEYXRhXT1cImRhdGFTb3VyY2VcIlxyXG4gICAgICBbbnpQYWdlSW5kZXhdPVwiX3BhZ2VJbmZvLnBhZ2VJbmRleFwiXHJcbiAgICAgIFtuelBhZ2VTaXplXT1cIl9wYWdlSW5mby5wYWdlU2l6ZVwiXHJcbiAgICAgIFtuelRvdGFsXT1cIl9wYWdlSW5mby50b3RhbFwiXHJcbiAgICAgIFtuelBhZ2VTaXplT3B0aW9uc109XCJfcGFnZUluZm8ucGFnZVNpemVPcHRpb25zXCJcclxuICAgICAgW256U2hvd1BhZ2luYXRpb25dPVwic2hvd1BhZ2luYXRpb25cIlxyXG4gICAgICBbbnpTaG93VG90YWxdPVwidG90YWxUZW1wbGF0ZVwiXHJcbiAgICAgIFtuekxvYWRpbmddPVwiX2xvYWRpbmdcIlxyXG4gICAgICBbbnpGcm9udFBhZ2luYXRpb25dPVwiZnJvbnRQYWdpbmF0aW9uXCJcclxuICAgICAgW256U2Nyb2xsXT1cInNjcm9sbFwiXHJcbiAgICAgIChuelBhZ2VJbmRleENoYW5nZSk9XCJoYW5kbGVQYWdlSW5kZXhDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgIChuelBhZ2VTaXplQ2hhbmdlKT1cImhhbmRsZVBhZ2VTaXplQ2hhbmdlKCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgICA8dGhlYWQ+XHJcbiAgICAgICAgPHRyPlxyXG4gICAgICAgICAgPCEtLSDlpI3pgInmoYbliJfvvIjlvZMgc2hvd0NoZWNrYm94PXRydWUg5pe25pi+56S677yJIC0tPlxyXG4gICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0NoZWNrYm94XCJcclxuICAgICAgICAgICAgW256V2lkdGhdPVwiJzUwcHgnXCJcclxuICAgICAgICAgICAgW256QWxpZ25dPVwiJ2NlbnRlcidcIlxyXG4gICAgICAgICAgICBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlclwiXHJcbiAgICAgICAgICAgIFsobnpDaGVja2VkKV09XCJfY2hlY2tlZEFsbFwiXHJcbiAgICAgICAgICAgIFtuekluZGV0ZXJtaW5hdGVdPVwiX2luZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAobnpDaGVja2VkQ2hhbmdlKT1cInRvZ2dsZUNoZWNrQWxsKCRldmVudClcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgID48L3RoPlxyXG4gICAgICAgICAgPHRoXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgX2NvbHVtbnNcIlxyXG4gICAgICAgICAgICBbbnpXaWR0aF09XCJjb2x1bW4ud2lkdGhcIlxyXG4gICAgICAgICAgICBbbnpBbGlnbl09XCJjb2x1bW4uYWxpZ25cIlxyXG4gICAgICAgICAgICBbbnpMZWZ0XT1cImNvbHVtbi5maXhlZExlZnRcIlxyXG4gICAgICAgICAgICBbbnpSaWdodF09XCJjb2x1bW4uZml4ZWRSaWdodFwiXHJcbiAgICAgICAgICAgIFtuelNob3dTb3J0XT1cIiEhY29sdW1uLnNvcnRlclwiXHJcbiAgICAgICAgICAgIFtuelNvcnRPcmRlcl09XCJnZXRTb3J0T3JkZXIoY29sdW1uLnByb3ApXCJcclxuICAgICAgICAgICAgKG56U29ydE9yZGVyQ2hhbmdlKT1cIm9uU29ydENoYW5nZShjb2x1bW4ucHJvcCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IGNvbHVtbi50aXRsZSB9fVxyXG4gICAgICAgICAgPC90aD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L3RoZWFkPlxyXG5cclxuICAgICAgPHRib2R5PlxyXG4gICAgICAgIDx0clxyXG4gICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGRhdGE7IGxldCBpID0gaW5kZXg7IG9mOiBkeW5hbWljVGFibGUuZGF0YVwiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICdhbnQtdGFibGUtY3VzdG9tLXJvdy1zZWxlY3RlZCc6ICEhZ2V0VGFibGVSb3dDaGVja2VkKGRhdGEpLFxyXG4gICAgICAgICAgICAnYW50LXRhYmxlLWN1c3RvbS1yb3ctZXZlbic6IGkgJSAyID09PSAwLFxyXG4gICAgICAgICAgICAnYW50LXRhYmxlLWN1c3RvbS1yb3ctb2RkJzogaSAlIDIgIT09IDBcclxuICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVRhYmxlUm93Q2xpY2soZGF0YSlcIlxyXG4gICAgICAgICAgKGRibGNsaWNrKT1cImhhbmRsZVRhYmxlUm93RGJDbGljayhkYXRhKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPCEtLSDlpI3pgInmoYbliJfvvIjlvZMgc2hvd0NoZWNrYm94PXRydWUg5pe25pi+56S677yJIC0tPlxyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0NoZWNrYm94XCJcclxuICAgICAgICAgICAgW256QWxpZ25dPVwiJ2NlbnRlcidcIlxyXG4gICAgICAgICAgICBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjsgd2lkdGg6IDUwcHhcIlxyXG4gICAgICAgICAgICBbKG56Q2hlY2tlZCldPVwiZGF0YS5jaGVja2VkXCJcclxuICAgICAgICAgICAgW256RGlzYWJsZWRdPVwiaXNSb3dEaXNhYmxlZChkYXRhKVwiXHJcbiAgICAgICAgICAgIChuekNoZWNrZWRDaGFuZ2UpPVwiaGFuZGxlUm93Q2hlY2tlZENoYW5nZShkYXRhLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICA+PC90ZD5cclxuICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIF9jb2x1bW5zXCJcclxuICAgICAgICAgICAgW256TGVmdF09XCJjb2x1bW4uZml4ZWRMZWZ0XCJcclxuICAgICAgICAgICAgW256UmlnaHRdPVwiY29sdW1uLmZpeGVkUmlnaHRcIlxyXG4gICAgICAgICAgICBbbnpBbGlnbl09XCJjb2x1bW4uYWxpZ25cIlxyXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgJ3Byby1ub3dyYXAnOiB0cnVlXHJcbiAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8IS0tIOajgOafpeaYr+WQpuacieiHquWumuS5ieaooeadvyAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICBjb2x1bW4uY3VzdG9tUmVuZGVyICYmIGdldFRlbXBsYXRlKGNvbHVtbi5jdXN0b21SZW5kZXIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcclxuICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICBjb2x1bW46IGNvbHVtbixcclxuICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiBfcGFnZUluZm9cclxuICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0g6buY6K6k5riy5p+T6YC76L6RIC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCIhY29sdW1uLmN1c3RvbVJlbmRlciB8fCAhZ2V0VGVtcGxhdGUoY29sdW1uLmN1c3RvbVJlbmRlcilcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi5lbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInByby1lbGxpcHNpc1wiXHJcbiAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJkYXRhW2NvbHVtbi5wcm9wXVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogJ2NhbGMoJyArIGNvbHVtbi53aWR0aCArICcgLSAyNXB4KSdcclxuICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGRhdGFbY29sdW1uLnByb3BdIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbHVtbi5lbGxpcHNpc1wiPlxyXG4gICAgICAgICAgICAgICAge3sgZGF0YVtjb2x1bW4ucHJvcF0gfX1cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgICAgPHRyICpuZ0lmPVwic3VtbWFyeURhdGEgJiYgX3BhZ2VJbmZvLnRvdGFsID4gMFwiPlxyXG4gICAgICAgICAgPCEtLSDmsYfmgLvooYznmoTlpI3pgInmoYbliJfvvIjlvZMgc2hvd0NoZWNrYm94PXRydWUg5pe25pi+56S677yM5L2G5Li656m677yJIC0tPlxyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0NoZWNrYm94XCJcclxuICAgICAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2U4ZThlOFwiXHJcbiAgICAgICAgICA+PC90ZD5cclxuICAgICAgICAgIDx0ZFxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY29sdW1uOyBsZXQgaSA9IGluZGV4OyBvZjogX2NvbHVtbnNcIlxyXG4gICAgICAgICAgICBbbnpMZWZ0XT1cImNvbHVtbi5maXhlZExlZnRcIlxyXG4gICAgICAgICAgICBbbnpSaWdodF09XCJjb2x1bW4uZml4ZWRSaWdodFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7IGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlOGU4ZThcIlxyXG4gICAgICAgICAgICBbbnpBbGlnbl09XCJjb2x1bW4uYWxpZ25cIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8c3BhbiAqbmdJZj1cImkgPT09IDBcIj7mgLvorqE8L3NwYW4+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpICE9PSAwICYmIGNvbHVtbi5zdW1tYXJ5XCI+XHJcbiAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5zdW1tYXJ5Py5mb3JtYXRcclxuICAgICAgICAgICAgICAgICAgPyBjb2x1bW4uc3VtbWFyeT8uZm9ybWF0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgc3VtbWFyeURhdGFbY29sdW1uLnN1bW1hcnk/Lm5hbWUgfHwgY29sdW1uLnByb3BdXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICA6IHN1bW1hcnlEYXRhW2NvbHVtbi5zdW1tYXJ5Py5uYW1lIHx8IGNvbHVtbi5wcm9wXVxyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgICA8L3Rib2R5PlxyXG4gICAgICA8bmctdGVtcGxhdGUgI3RvdGFsVGVtcGxhdGUgbGV0LXRvdGFsXHJcbiAgICAgICAgPuWFsSB7eyBfcGFnZUluZm8udG90YWwgfX0g5p2h6K6w5b2VPC9uZy10ZW1wbGF0ZVxyXG4gICAgICA+XHJcbiAgICA8L256LXRhYmxlPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcbjwvYXBwLXBhZ2UtY29udGFpbmVyPlxyXG4iXX0=
|
|
1070
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvLXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byby10YWJsZS9zcmMvbGliL3Byby10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm8tdGFibGUvc3JjL2xpYi9wcm8tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLFlBQVksRUFDWixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsTUFBTSxFQUVOLFdBQVcsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFXLE1BQU0sV0FBVyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVdoRixPQUFPLEVBQUUsdUJBQXVCLEVBQStCLE1BQU0sVUFBVSxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU9uRCxNQUFNLE9BQU8saUJBQWlCO0lBeUpsQjtJQXhKRCxhQUFhLEdBQVksSUFBSSxDQUFDO0lBRTlCLFlBQVksR0FBWSxJQUFJLENBQUM7SUFFN0IsS0FBSyxHQUFrQixJQUFJLENBQUM7SUFFNUIsU0FBUyxHQUFXLEVBQUUsQ0FBQztJQUV2QixRQUFRLEdBQVksS0FBSyxDQUFDO0lBRTFCLE9BQU8sR0FBcUIsRUFBRSxDQUFDO0lBRS9CLGFBQWEsR0FBWSxJQUFJLENBQUM7SUFFOUIsYUFBYSxHQUFZLElBQUksQ0FBQztJQUU5QixjQUFjLEdBQVcsSUFBSSxDQUFDO0lBRTlCLFlBQVksR0FBVyxJQUFJLENBQUM7SUFFNUIsVUFBVSxHQUFXLE1BQU0sQ0FBQztJ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TUFBTTtnQkFFb0IsWUFBWTtzQkFBdEMsWUFBWTt1QkFBQyxXQUFXO2dCQUVLLGVBQWU7c0JBQTVDLFlBQVk7dUJBQUMsY0FBYztnQkFFRSxZQUFZO3NCQUF6QyxlQUFlO3VCQUFDLFdBQVc7Z0JBNEQ1QixjQUFjO3NCQURiLFlBQVk7dUJBQUMsZUFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIEluamVjdCxcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbiAgT3B0aW9uYWwsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBUZW1wbGF0ZVJlZixcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBjbG9uZURlZXAsIGhhc0luLCBpc05pbCwgZGVib3VuY2UsIGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoLWVzXCI7XHJcbmltcG9ydCB7IFBST19UQUJMRV9ERUZBVUxUX0NPTFVNTiwgUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFMgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHtcclxuICBBdXRvQ29tcGxldGVGaWVsZFByb3BzLFxyXG4gIENoZWNrYm94RmllbGRQcm9wcyxcclxuICBPcHRpb25zVHlwZSxcclxuICBQcm9UYWJsZUNvbHVtbixcclxuICBQcm9UYWJsZVBhZ2VJbmZvLFxyXG4gIFByb1RhYmxlUmVxdWVzdFJlc3VsdCxcclxuICBQcm9UYWJsZVZhbHVlc0NoYW5nZSxcclxuICBTZWxlY3RGaWVsZFByb3BzLFxyXG59IGZyb20gXCIuL3R5cGVcIjtcclxuaW1wb3J0IHsgUFJPX1RBQkxFX0NPTFVNTl9SRU1PVEUsIFByb1RhYmxlUmVtb3RlQ29sdW1uU2VydmljZSB9IGZyb20gXCIuL3Rva2Vuc1wiO1xyXG5pbXBvcnQgeyBpc09ic2VydmFibGUsIGxhc3RWYWx1ZUZyb20gfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXByby10YWJsZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vcHJvLXRhYmxlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3Byby10YWJsZS5jb21wb25lbnQubGVzc1wiXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb1RhYmxlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlckNvbnRlbnRJbml0IHtcclxuICBASW5wdXQoKSBzaG93U2VhcmNoQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NsZWFyQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBASW5wdXQoKSB0YWJsZU5hbWU6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIEBJbnB1dCgpIG11bHRpUm93OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIGNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgc2hvd1NlYXJjaEJhcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dBY3Rpb25CYXI6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICBASW5wdXQoKSBjb25maXJtQnRuVGV4dDogc3RyaW5nID0gXCLmn6Xor6JcIjtcclxuXHJcbiAgQElucHV0KCkgY2xlYXJCdG5UZXh0OiBzdHJpbmcgPSBcIua4heepulwiO1xyXG5cclxuICBASW5wdXQoKSBsYWJlbFdpZHRoOiBzdHJpbmcgPSBcIjkwcHhcIjtcclxuXHJcbiAgQElucHV0KCkgbGFiZWxBbGlnbjogc3RyaW5nID0gXCJyaWdodFwiO1xyXG5cclxuICBASW5wdXQoKSBmb3JtSXRlbVdpZHRoOiBzdHJpbmcgPSBcIjMzMHB4XCI7XHJcblxyXG4gIEBJbnB1dCgpIGRhdGFTb3VyY2U6IGFueVtdID0gW107XHJcblxyXG4gIEBJbnB1dCgpIGJvcmRlcmVkOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgb3V0ZXJCb3JkZXJlZDogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgZnJvbnRQYWdpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHNjcm9sbDogeyB4Pzogc3RyaW5nIHwgbnVtYmVyOyB5Pzogc3RyaW5nIHwgbnVtYmVyIH0gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgQElucHV0KCkgcmVxdWVzdDogKHBhcmFtczogYW55KSA9PiBQcm9taXNlPFByb1RhYmxlUmVxdWVzdFJlc3VsdD47XHJcblxyXG4gIEBJbnB1dCgpIHN1bW1hcnlEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8vIOaOkuW6j+aooeW8j++8mmxvY2FsIOacrOWcsOaOkuW6j++8m3NlcnZlciDlnKjnur/mjpLluo/vvIjmj5DkuqTnu5nmjqXlj6PvvIlcclxuICBASW5wdXQoKSBzb3J0TW9kZTogXCJsb2NhbFwiIHwgXCJzZXJ2ZXJcIiA9IFwibG9jYWxcIjtcclxuXHJcbiAgQElucHV0KCkgc2hvd0NvbHVtblNldHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgLy8g5piv5ZCm5byA5ZCv5aSa5YiX5o6S5bqP77yI6buY6K6k5Y2V5YiX77yJXHJcbiAgQElucHV0KCkgbXVsdGlwbGVTb3J0OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDliKTmlq3ooYzmmK/lkKbnpoHnlKjnmoTlh73mlbBcclxuICBASW5wdXQoKSByb3dEaXNhYmxlZDogKGRhdGE6IGFueSkgPT4gYm9vbGVhbiA9ICgpID0+IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSByZXJlbmRlck9uUmVzaXplOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8g5piv5ZCm6Ieq5Yqo6Kem5Y+R6K+35rGCXHJcbiAgQElucHV0KCkgYXV0b1RyaWdnZXJSZXF1ZXN0OiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgY3VzdG9tVGFibGVSZW5kZXI/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICBAT3V0cHV0KCkgb25Sb3dDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAT3V0cHV0KCkgb25Sb3dEYkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvblZhbHVlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UHJvVGFibGVWYWx1ZXNDaGFuZ2U+KCk7XHJcblxyXG4gIEBPdXRwdXQoKSBvblJlc2V0Rm9ybUJlZm9yZVJlbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuICBAQ29udGVudENoaWxkKFwiYWN0aW9uQmFyXCIpIGFjdGlvbkJhclRwbCE6IFRlbXBsYXRlUmVmPGFueT47XHJcblxyXG4gIEBDb250ZW50Q2hpbGQoXCJJbWdBY3Rpb25CYXJcIikgaW1nQWN0aW9uQmFyVHBsITogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZVJlZikgYWxsVGVtcGxhdGVzITogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICBwcml2YXRlIF9zYXZlZFNlYXJjaFBhcmFtczogYW55ID0ge307XHJcblxyXG4gIC8vIOWtmOWCqOaJgOacieiHquWumuS5ieaooeadv+eahOW8leeUqFxyXG4gIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVzID0gbmV3IE1hcDxzdHJpbmcsIFRlbXBsYXRlUmVmPGFueT4+KCk7XHJcblxyXG4gIC8vIOiusOW9leWQhOWIl+aOkuW6j+eKtuaAge+8midhc2NlbmQnIHwgJ2Rlc2NlbmQnIHwgbnVsbFxyXG5cclxuICBwcml2YXRlIF9zb3J0TWFwOiBSZWNvcmQ8c3RyaW5nLCBcImFzY2VuZFwiIHwgXCJkZXNjZW5kXCIgfCBudWxsPiA9IHt9O1xyXG5cclxuICAvLyDorrDlvZXlpJrliJfmjpLluo/nmoTkvJjlhYjnuqfvvIjlkI7orr7nva7nmoTkvJjlhYjvvIlcclxuICBwcml2YXRlIF9zb3J0UHJpb3JpdHk6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIC8vIOWtmOWCqOavj+S4qiBhdXRvQ29tcGxldGUg5a2X5q6155qE6Ziy5oqW5Ye95pWwXHJcbiAgcHJpdmF0ZSBfYXV0b0NvbXBsZXRlRGVib3VuY2VNYXA6IE1hcDxzdHJpbmcsIChldmVudDogRXZlbnQpID0+IHZvaWQ+ID1cclxuICAgIG5ldyBNYXAoKTtcclxuXHJcblxyXG4gIF9jb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdID0gW107XHJcblxyXG4gIC8vIOetm+mAieihqOWNleaVsOaNruWtmOWCqFxyXG4gIF9zZWFyY2hQYXJhbXM6IGFueSA9IHt9O1xyXG5cclxuICAvLyDnrZvpgInooajljZVsaXN05riy5p+T5pWw5o2uXHJcbiAgX3NlYXJjaEZpbGVkQ29sdW1uczogUHJvVGFibGVDb2x1bW5bXSA9IFtdO1xyXG5cclxuICBfcGFnZUluZm86IFByb1RhYmxlUGFnZUluZm8gPSB7XHJcbiAgICBwYWdlSW5kZXg6IDEsXHJcbiAgICBwYWdlU2l6ZTogMTUsXHJcbiAgICB0b3RhbDogMTAwLFxyXG4gICAgcGFnZVNpemVPcHRpb25zOiBbMTAsIDE1LCAyMCwgNTAsIDEwMCwgNTAwLCAxMDAwXSxcclxuICB9O1xyXG5cclxuICBfbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBfc2VsZWN0ZWRUYWJsZVJvdzogYW55ID0gbnVsbDtcclxuXHJcbiAgLy8g6YCJ5Lit55qE6KGM5pWw5o2u77yI55So5LqO5aSN6YCJ5qGG6YCJ5oup77yJLSDkv53nlZnnlKjkuo7lhbzlrrnmgKdcclxuICBfc2VsZWN0ZWRSb3dzOiBhbnlbXSA9IFtdO1xyXG5cclxuICAvLyDlhajpgInnirbmgIFcclxuICBfY2hlY2tlZEFsbDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDljYrpgInnirbmgIHvvIjpg6jliIbpgInkuK3vvIlcclxuICBfaW5kZXRlcm1pbmF0ZTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAvLyDov5znqItjb2x1bW5zXHJcbiAgX3NlcnZlckNvbHVtbnM6IFByb1RhYmxlQ29sdW1uW10gPSBbXTtcclxuXHJcbiAgLy8g5a2Y5YKoIGF1dG9Db21wbGV0ZSDlrZfmrrXnmoTmlbDmja7mupBcclxuICBfYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIGFueVtdPiA9IHt9O1xyXG5cclxuICAvLyDmjqfliLbooajmoLzmmL7npLrnirbmgIHvvIznlKjkuo7ph43mlrDmjILovb1cclxuICBfc2hvd1RhYmxlOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgLy8g6Ziy5oqW5a6a5pe25Zmo77yM55So5LqO56qX5Y+j5aSn5bCP6LCD5pW0XHJcbiAgcHJpdmF0ZSByZXNpemVEZWJvdW5jZTogYW55O1xyXG5cclxuICBASG9zdExpc3RlbmVyKFwid2luZG93OnJlc2l6ZVwiKVxyXG4gIG9uV2luZG93UmVzaXplKCkge1xyXG4gICAgaWYgKCF0aGlzLnJlcmVuZGVyT25SZXNpemUpIHJldHVybjtcclxuXHJcbiAgICBpZiAodGhpcy5yZXNpemVEZWJvdW5jZSkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVEZWJvdW5jZSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNpemVEZWJvdW5jZSA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyDpgJrov4cgbmdJZiDph43mlrDmjILovb3ooajmoLxcclxuICAgICAgdGhpcy5fc2hvd1RhYmxlID0gZmFsc2U7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuX3Nob3dUYWJsZSA9IHRydWU7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSwgMTUwKTtcclxuICB9XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAT3B0aW9uYWwoKVxyXG4gICAgQEluamVjdChQUk9fVEFCTEVfQ09MVU1OX1JFTU9URSlcclxuICAgIHByaXZhdGUgY29sdW1uUmVtb3RlOiBQcm9UYWJsZVJlbW90ZUNvbHVtblNlcnZpY2UgfCBudWxsLFxyXG4gICkge31cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBmZXRjaFJlbW90ZUNvbHVtbnMoKSB7XHJcbiAgICBpZiAoIXRoaXMuY29sdW1uUmVtb3RlPy5nZXRDb2wgfHwgIXRoaXMudGFibGVOYW1lKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jb2x1bW5SZW1vdGUuZ2V0Q29sKHRoaXMudGFibGVOYW1lLCB0aGlzLm11bHRpUm93KTtcclxuICAgICAgcmV0dXJuIHJlcztcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBwZXJzaXN0UmVtb3RlQ29sdW1ucyhjb2x1bW5zOiBhbnlbXSkge1xyXG4gICAgaWYgKCF0aGlzLmNvbHVtblJlbW90ZT8uc2V0Q29sIHx8ICF0aGlzLnRhYmxlTmFtZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuY29sdW1uUmVtb3RlLnNldENvbChcclxuICAgICAgICB0aGlzLnRhYmxlTmFtZSxcclxuICAgICAgICBjb2x1bW5zLFxyXG4gICAgICAgIHRoaXMubXVsdGlSb3csXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChyZXN1bHQgJiYgaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcclxuICAgICAgICByZXR1cm4gYXdhaXQgbGFzdFZhbHVlRnJvbShyZXN1bHQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG5nT25Jbml0KCk6IFByb21pc2U8dm9pZD4geyAgICBcclxuICAgIHRoaXMuX3NlYXJjaFBhcmFtcyA9IHt9O1xyXG4gICAgdGhpcy5mb3JtYXRlSW5uZXJDb2x1bW5zKHRoaXMuY29sdW1ucyk7XHJcbiAgICBhd2FpdCB0aGlzLnNldFNlYXJjaFBhcmFtcyh0aGlzLmNvbHVtbnMpO1xyXG5cclxuICAgIC8vIOS9v+eUqCBQcm94eSDljIXoo4UgX3NlYXJjaFBhcmFtc++8jOaLpuaIquihqOWNlemhueWAvOWPmOWMluW5tuWQkeWkluWPkeWHuuS6i+S7tlxyXG4gICAgdGhpcy5fc2VhcmNoUGFyYW1zID0gdGhpcy5jcmVhdGVTZWFyY2hQYXJhbXNQcm94eSh0aGlzLl9zZWFyY2hQYXJhbXMpO1xyXG4gICAgaWYgKHRoaXMuYXV0b1RyaWdnZXJSZXF1ZXN0KSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcclxuICAgIH1cclxuICAgIHRoaXMucXVlcnlEeW5hbWljQ29sdW1ucygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgLy8g6Ieq5Yqo5rOo5YaM5omA5pyJ6Ieq5a6a5LmJ5qih5p2/XHJcbiAgICAvLyDms6jmhI/vvJrmraTml7bmiYDmnIkgQ29udGVudENoaWxkIOWSjCBDb250ZW50Q2hpbGRyZW4g6YO95bey5Yid5aeL5YyW5a6M5oiQXHJcbiAgICB0aGlzLmF1dG9SZWdpc3RlclRlbXBsYXRlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBxdWVyeUR5bmFtaWNDb2x1bW5zKCkge1xyXG4gICAgaWYgKCF0aGlzLnRhYmxlTmFtZSB8fCAhdGhpcy5jb2x1bW5SZW1vdGUpIHJldHVybjtcclxuICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZmV0Y2hSZW1vdGVDb2x1bW5zKCk7XHJcbiAgICBpZiAoIXJlcykgcmV0dXJuO1xyXG4gICAgaWYgKHJlcy5jb2RlID09PSAwKSB7XHJcbiAgICAgIGNvbnN0IF90YWJDb2x1bW4gPSByZXMuZGF0YS50YWJDb2x1bW4ubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHRpdGxlOiBpdGVtLmhlYWRlcixcclxuICAgICAgICAgIHByb3A6IGl0ZW0uZmllbGQsXHJcbiAgICAgICAgICBzb3J0TmFtZTogaXRlbS5zb3J0TmFtZSxcclxuICAgICAgICAgIGhpZGVJblRhYmxlOiAhaXRlbS5pc1Nob3csXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuX3NlcnZlckNvbHVtbnMgPSBfdGFiQ29sdW1uLmZpbHRlcigoY29sKSA9PlxyXG4gICAgICAgIHRoaXMuY29sdW1ucy5zb21lKChsb2NhbENvbCkgPT4gbG9jYWxDb2wucHJvcCA9PT0gY29sLnByb3ApLFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnVwZGF0ZVRhYmxlQ29sdW1ucyh0aGlzLl9zZXJ2ZXJDb2x1bW5zKTtcclxuICAgIH0gZWxzZSBpZiAocmVzLmNvZGUgPT09IDEwKSB7XHJcbiAgICAgIC8vIOWmguaenOacquiuvue9ruaOpeWPo+i/lOWbnu+8jOmcgOimgem7mOiupOiwg+eUqOS4gOasoeS/ruaUueWHveaVsOWIneWni+WMluaVsOaNrlxyXG4gICAgICBjb25zdCBpbml0Q29sdW1ucyA9IHRoaXMuY29sdW1uc1xyXG4gICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gIWNvbC5hdXhpbGlhcnlDb2x1bW4pXHJcbiAgICAgICAgLm1hcCgoY29sdW1uKSA9PiAoe1xyXG4gICAgICAgICAgZmllbGQ6IGNvbHVtbi5wcm9wLFxyXG4gICAgICAgICAgaXNTaG93OiB0cnVlLFxyXG4gICAgICAgICAgaGVhZGVyOiBjb2x1bW4udGl0bGUsXHJcbiAgICAgICAgICBzb3J0TmFtZTogY29sdW1uLnNvcnROYW1lIHx8IG51bGwsXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICBjb25zdCBpbml0UmVzID0gYXdhaXQgdGhpcy5wZXJzaXN0UmVtb3RlQ29sdW1ucyhpbml0Q29sdW1ucyk7XHJcbiAgICAgIGlmIChpbml0UmVzKSB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUR5bmFtaWNDb2x1bW5zKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0ZUlubmVyQ29sdW1ucyhjb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdKSB7XHJcbiAgICB0aGlzLl9jb2x1bW5zID0gY29sdW1uc1xyXG4gICAgICAuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5oaWRlSW5UYWJsZSlcclxuICAgICAgLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiB7IC4uLlBST19UQUJMRV9ERUZBVUxUX0NPTFVNTiwgLi4uaXRlbSB9IGFzIFByb1RhYmxlQ29sdW1uO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOiHquWKqOazqOWGjOaooeadv+eahOaWueazlVxyXG4gIHByaXZhdGUgYXV0b1JlZ2lzdGVyVGVtcGxhdGVzKCkge1xyXG4gICAgLy8g6I635Y+W5omA5pyJ5qih5p2/XHJcbiAgICBjb25zdCBhbGxUZW1wbGF0ZXNBcnJheSA9IHRoaXMuYWxsVGVtcGxhdGVzLnRvQXJyYXkoKTtcclxuXHJcbiAgICAvLyDojrflj5bmiYDmnInpnIDopoHoh6rlrprkuYnmqKHmnb/nmoTliJdcclxuICAgIGNvbnN0IGNvbHVtbnNXaXRoQ3VzdG9tUmVuZGVyID0gdGhpcy5fY29sdW1ucy5maWx0ZXIoXHJcbiAgICAgIChjb2wpID0+IGNvbC5jdXN0b21SZW5kZXIsXHJcbiAgICApO1xyXG5cclxuICAgIC8vIOiOt+WPluaJgOaciemcgOimgeiHquWumuS5iWxhYmVs5qih5p2/55qE5YiX77yI5L2/55So5Y6f5aeLY29sdW1uc++8jOehruS/nemhuuW6j+ato+ehru+8iVxyXG4gICAgY29uc3QgY29sdW1uc1dpdGhDdXN0b21MYWJlbCA9IHRoaXMuY29sdW1ucy5maWx0ZXIoXHJcbiAgICAgIChjb2wpID0+IGNvbC5jdXN0b21MYWJlbFJlbmRlcixcclxuICAgICk7XHJcblxyXG4gICAgLy8g6K6h566X6ZyA6KaB55qE5qih5p2/5oC75pWwXHJcbiAgICBjb25zdCBjdXN0b21SZW5kZXJDb3VudCA9IGNvbHVtbnNXaXRoQ3VzdG9tUmVuZGVyLmxlbmd0aDtcclxuICAgIGNvbnN0IHRvdGFsTmVlZGVkVGVtcGxhdGVzID1cclxuICAgICAgY3VzdG9tUmVuZGVyQ291bnQgKyBjb2x1bW5zV2l0aEN1c3RvbUxhYmVsLmxlbmd0aDtcclxuXHJcbiAgICAvLyDor4bliKvlubbmjpLpmaTnibnmrormqKHmnb/vvIhhY3Rpb25CYXIg5ZKMIGltZ0FjdGlvbkJhcu+8iVxyXG4gICAgY29uc3Qgc3BlY2lhbFRlbXBsYXRlSW5kaWNlcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG5cclxuICAgIC8vIOWwneivleaJvuWIsCBhY3Rpb25CYXJUcGwg5ZyoIGFsbFRlbXBsYXRlc0FycmF5IOS4reeahOS9jee9rlxyXG4gICAgaWYgKHRoaXMuYWN0aW9uQmFyVHBsKSB7XHJcbiAgICAgIGNvbnN0IGFjdGlvbkJhckluZGV4ID0gdGhpcy5maW5kVGVtcGxhdGVJbmRleChcclxuICAgICAgICBhbGxUZW1wbGF0ZXNBcnJheSxcclxuICAgICAgICB0aGlzLmFjdGlvbkJhclRwbCxcclxuICAgICAgKTtcclxuICAgICAgaWYgKGFjdGlvbkJhckluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHNwZWNpYWxUZW1wbGF0ZUluZGljZXMuYWRkKGFjdGlvbkJhckluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOWwneivleaJvuWIsCBpbWdBY3Rpb25CYXJUcGwg5ZyoIGFsbFRlbXBsYXRlc0FycmF5IOS4reeahOS9jee9rlxyXG4gICAgaWYgKHRoaXMuaW1nQWN0aW9uQmFyVHBsKSB7XHJcbiAgICAgIGNvbnN0IGltZ0FjdGlvbkJhckluZGV4ID0gdGhpcy5maW5kVGVtcGxhdGVJbmRleChcclxuICAgICAgICBhbGxUZW1wbGF0ZXNBcnJheSxcclxuICAgICAgICB0aGlzLmltZ0FjdGlvbkJhclRwbCxcclxuICAgICAgKTtcclxuICAgICAgaWYgKGltZ0FjdGlvbkJhckluZGV4ICE9PSAtMSkge1xyXG4gICAgICAgIHNwZWNpYWxUZW1wbGF0ZUluZGljZXMuYWRkKGltZ0FjdGlvbkJhckluZGV4KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOWmguaenOaXoOazlemAmui/h+W8leeUqOaJvuWIsOeJueauiuaooeadv++8jOS9v+eUqOWkh+eUqOetlueVpVxyXG4gICAgLy8g5aSH55So562W55Wl77ya5YGH6K6+5pyA5ZCO55qE5qih5p2/5piv54m55q6K5qih5p2/XHJcbiAgICBjb25zdCBzcGVjaWFsVGVtcGxhdGVDb3VudCA9XHJcbiAgICAgICh0aGlzLmFjdGlvbkJhclRwbCA/IDEgOiAwKSArICh0aGlzLmltZ0FjdGlvbkJhclRwbCA/IDEgOiAwKTtcclxuICAgIGlmIChzcGVjaWFsVGVtcGxhdGVJbmRpY2VzLnNpemUgPT09IDAgJiYgc3BlY2lhbFRlbXBsYXRlQ291bnQgPiAwKSB7XHJcbiAgICAgIGZvciAoXHJcbiAgICAgICAgbGV0IGkgPSBhbGxUZW1wbGF0ZXNBcnJheS5sZW5ndGggLSBzcGVjaWFsVGVtcGxhdGVDb3VudDtcclxuICAgICAgICBpIDwgYWxsVGVtcGxhdGVzQXJyYXkubGVuZ3RoO1xyXG4gICAgICAgIGkrK1xyXG4gICAgICApIHtcclxuICAgICAgICBzcGVjaWFsVGVtcGxhdGVJbmRpY2VzLmFkZChpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIOaPkOWPluWIl+aooeadv++8iOaOkumZpOeJueauiuaooeadv++8iVxyXG4gICAgY29uc3QgY29sdW1uVGVtcGxhdGVzOiBUZW1wbGF0ZVJlZjxhbnk+W10gPSBbXTtcclxuICAgIGFsbFRlbXBsYXRlc0FycmF5LmZvckVhY2goKHRwbCwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKCFzcGVjaWFsVGVtcGxhdGVJbmRpY2VzLmhhcyhpbmRleCkpIHtcclxuICAgICAgICBjb2x1bW5UZW1wbGF0ZXMucHVzaCh0cGwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDpqozor4HmqKHmnb/mlbDph49cclxuICAgIGlmIChjb2x1bW5UZW1wbGF0ZXMubGVuZ3RoICE9PSB0b3RhbE5lZWRlZFRlbXBsYXRlcykge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYFByb1RhYmxlOiDmqKHmnb/mlbDph4/kuI3ljLnphY3vvIHpnIDopoEgJHt0b3RhbE5lZWRlZFRlbXBsYXRlc30g5Liq5YiX5qih5p2/77yM5a6e6ZmF5pyJICR7Y29sdW1uVGVtcGxhdGVzLmxlbmd0aH0g5Liq44CC6K+35qOA5p+lIGN1c3RvbVJlbmRlciDlkowgY3VzdG9tTGFiZWxSZW5kZXIg6YWN572u44CCYCxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDms6jlhozoh6rlrprkuYnmuLLmn5PmqKHmnb9cclxuICAgIGNvbHVtbnNXaXRoQ3VzdG9tUmVuZGVyLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcclxuICAgICAgY29uc3QgdGVtcGxhdGVOYW1lID0gY29sdW1uLmN1c3RvbVJlbmRlciE7XHJcbiAgICAgIGlmIChpbmRleCA8IGNvbHVtblRlbXBsYXRlcy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlcy5zZXQodGVtcGxhdGVOYW1lLCBjb2x1bW5UZW1wbGF0ZXNbaW5kZXhdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICAgYFByb1RhYmxlOiDmnKrmib7liLDmqKHmnb8gXCIke3RlbXBsYXRlTmFtZX1cIu+8jOe0ouW8lSAke2luZGV4fSDotoXlh7rojIPlm7RgLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIOazqOWGjOiHquWumuS5iWxhYmVs5qih5p2/77yI5LuOIGN1c3RvbVJlbmRlckNvdW50IOS5i+WQjuW8gOWni++8iVxyXG4gICAgY29sdW1uc1dpdGhDdXN0b21MYWJlbC5mb3JFYWNoKChjb2x1bW4sIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IHRlbXBsYXRlTmFtZSA9IGNvbHVtbi5jdXN0b21MYWJlbFJlbmRlciE7XHJcbiAgICAgIGNvbnN0IHRlbXBsYXRlSW5kZXggPSBjdXN0b21SZW5kZXJDb3VudCArIGluZGV4O1xyXG4gICAgICBpZiAodGVtcGxhdGVJbmRleCA8IGNvbHVtblRlbXBsYXRlcy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlcy5zZXQodGVtcGxhdGVOYW1lLCBjb2x1bW5UZW1wbGF0ZXNbdGVtcGxhdGVJbmRleF0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgICBgUHJvVGFibGU6IOacquaJvuWIsGxhYmVs5qih5p2/IFwiJHt0ZW1wbGF0ZU5hbWV9XCLvvIzntKLlvJUgJHt0ZW1wbGF0ZUluZGV4fSDotoXlh7rojIPlm7RgLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g5bCd6K+V5Zyo5pWw57uE5Lit5om+5Yiw5qih5p2/55qE57Si5byV77yI5L2/55So5aSa56eN5q+U6L6D5pa55byP77yJXHJcbiAgcHJpdmF0ZSBmaW5kVGVtcGxhdGVJbmRleChcclxuICAgIHRlbXBsYXRlczogVGVtcGxhdGVSZWY8YW55PltdLFxyXG4gICAgdGFyZ2V0OiBUZW1wbGF0ZVJlZjxhbnk+LFxyXG4gICk6IG51bWJlciB7XHJcbiAgICAvLyDmlrnms5Ux77ya5byV55So55u4562J5oCnXHJcbiAgICBsZXQgaW5kZXggPSB0ZW1wbGF0ZXMuaW5kZXhPZih0YXJnZXQpO1xyXG4gICAgaWYgKGluZGV4ICE9PSAtMSkgcmV0dXJuIGluZGV4O1xyXG5cclxuICAgIC8vIOaWueazlTLvvJrpgJrov4cgZWxlbWVudFJlZiDmr5TovoNcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHRhcmdldEVsZW1lbnRSZWYgPSAodGFyZ2V0IGFzIGFueSkuZWxlbWVudFJlZjtcclxuICAgICAgaWYgKHRhcmdldEVsZW1lbnRSZWYpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlbXBsYXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgdHBsRWxlbWVudFJlZiA9ICh0ZW1wbGF0ZXNbaV0gYXMgYW55KS5lbGVtZW50UmVmO1xyXG4gICAgICAgICAgaWYgKHRwbEVsZW1lbnRSZWYgPT09IHRhcmdldEVsZW1lbnRSZWYpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIC8vIOW/veeVpemUmeivr1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOaWueazlTPvvJrpgJrov4cgQW5ndWxhciDlhoXpg6jlsZ7mgKfmr5TovoNcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHRhcmdldENvbnRhaW5lciA9ICh0YXJnZXQgYXMgYW55KS5fZGVjbGFyYXRpb25UQ29udGFpbmVyO1xyXG4gICAgICBpZiAodGFyZ2V0Q29udGFpbmVyKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZW1wbGF0ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IHRwbENvbnRhaW5lciA9ICh0ZW1wbGF0ZXNbaV0gYXMgYW55KS5fZGVjbGFyYXRpb25UQ29udGFpbmVyO1xyXG4gICAgICAgICAgaWYgKHRwbENvbnRhaW5lciA9PT0gdGFyZ2V0Q29udGFpbmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAvLyDlv73nlaXplJnor69cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gLTE7XHJcbiAgfVxyXG5cclxuICAvLyDorr7nva7nrZvpgInooajljZXpu5jorqTlsZ7mgKdcclxuICBwcml2YXRlIHNldFNlYXJjaEZvcm1EZWZhdWx0UHJvcChjb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdKSB7XHJcbiAgICBjb2x1bW5zLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0udmFsdWVUeXBlKSB7XHJcbiAgICAgICAgaWYgKGl0ZW0uZmllbGRQcm9wcykge1xyXG4gICAgICAgICAgaXRlbS5maWVsZFByb3BzID0ge1xyXG4gICAgICAgICAgICAuLi5QUk9fVEFCTEVfREVGQVVMVF9QUk9QU1tpdGVtLnZhbHVlVHlwZV0sXHJcbiAgICAgICAgICAgIC4uLml0ZW0uZmllbGRQcm9wcyxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGl0ZW0uZmllbGRQcm9wcyA9IHsgLi4uUFJPX1RBQkxFX0RFRkFVTFRfUFJPUFNbaXRlbS52YWx1ZVR5cGVdIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vIOWKqOaAgeiuvue9rk9wdGlvbnNcclxuICBwcml2YXRlIHNldFNlbGVjdFJlcXVlc3QoY29sdW1uczogUHJvVGFibGVDb2x1bW5bXSkge1xyXG4gICAgY29sdW1ucy5tYXAoYXN5bmMgKGl0ZW0pID0+IHtcclxuICAgICAgaWYgKGl0ZW0uZmllbGRQcm9wcyAmJiBoYXNJbihpdGVtLmZpZWxkUHJvcHMsIFwicmVxdWVzdFwiKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBvcHRpb25zID0gYXdhaXQgKFxyXG4gICAgICAgICAgICBpdGVtLmZpZWxkUHJvcHMgYXMgU2VsZWN0RmllbGRQcm9wc1xyXG4gICAgICAgICAgKS5yZXF1ZXN0Py4oKTtcclxuICAgICAgICAgIChpdGVtLmZpZWxkUHJvcHMgYXMgU2VsZWN0RmllbGRQcm9wcykub3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIChpdGVtLmZpZWxkUHJvcHMgYXMgU2VsZWN0RmllbGRQcm9wcykub3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIHNldFNlYXJjaFBhcmFtcyhjb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdKSB7XHJcbiAgICB0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMgPSBbXTtcclxuICAgIGNvbHVtbnNcclxuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGZsYWcgPSAhaXRlbS5oaWRlSW5TZWFyY2ggJiYgaXRlbS52YWx1ZVR5cGU7XHJcbiAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICAgIHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucy5wdXNoKGNsb25lRGVlcChpdGVtKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmbGFnO1xyXG4gICAgICB9KVxyXG4gICAgICAuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gY29sdW1uLmZpZWxkUHJvcHM/Lm5hbWUgfHwgY29sdW1uLnByb3A7XHJcbiAgICAgICAgbGV0IGRlZmF1bHRWYWx1ZSA9IFBST19UQUJMRV9ERUZBVUxUX1BST1BTW2NvbHVtbi52YWx1ZVR5cGVdLnZhbHVlO1xyXG5cclxuICAgICAgICAvLyDlr7nkuo5jaGVja2JveOexu+Wei++8jOS7jm9wdGlvbnPkuK3mib7lh7pjaGVja2Vk5Li6dHJ1ZeeahOmhueS9nOS4uum7mOiupOWAvFxyXG4gICAgICAgIGlmIChjb2x1bW4udmFsdWVUeXBlID09PSBcImNoZWNrYm94XCIpIHtcclxuICAgICAgICAgIGNvbnN0IGNoZWNrZWRWYWx1ZXMgPSAoY29sdW1uLmZpZWxkUHJvcHM/Lm9wdGlvbnMgfHwgW10pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKG9wdDogT3B0aW9uc1R5cGUpID0+IG9wdC5jaGVja2VkKVxyXG4gICAgICAgICAgICAubWFwKChvcHQ6IE9wdGlvbnNUeXBlKSA9PiBvcHQudmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5fc2VhcmNoUGFyYW1zW2tleV0gPVxyXG4gICAgICAgICAgICBjaGVja2VkVmFsdWVzLmxlbmd0aCA+IDAgPyBjaGVja2VkVmFsdWVzIDogZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLl9zZWFyY2hQYXJhbXNba2V5XSA9IGNvbHVtbi5maWVsZFByb3BzPy52YWx1ZSB8fCBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDliJ3lp4vljJYgYXV0b0NvbXBsZXRlIOaVsOaNrua6kFxyXG4gICAgICAgIGlmIChjb2x1bW4udmFsdWVUeXBlID09PSBcImF1dG9Db21wbGV0ZVwiKSB7XHJcbiAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1trZXldID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyDmoLnmja7liJfnmoQgb3JkZXIg5a2X5q616L+b6KGM5o6S5bqP77yM5pyq6K6+572uIG9yZGVyIOeahOaUvuWcqOacgOWQjlxyXG4gICAgdGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IGFPcmRlciA9IGlzTmlsKGE/Lm9yZGVyKSA/IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIDogYS5vcmRlcjtcclxuICAgICAgY29uc3QgYk9yZGVyID0gaXNOaWwoYj8ub3JkZXIpID8gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgOiBiLm9yZGVyO1xyXG4gICAgICBpZiAoYU9yZGVyID09PSBiT3JkZXIpIHJldHVybiAwO1xyXG4gICAgICByZXR1cm4gYU9yZGVyIC0gYk9yZGVyO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZXRTZWFyY2hGb3JtRGVmYXVsdFByb3AodGhpcy5fc2VhcmNoRmlsZWRDb2x1bW5zKTtcclxuXHJcbiAgICAvLyDlubblj5HliqDovb3miYDmnInpnIDopoHlvILmraXojrflj5bnmoTpgInpoblcclxuICAgIHRoaXMuc2V0U2VsZWN0UmVxdWVzdCh0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB1cGRhdGVUYWJsZUNvbHVtbnMoaW5qZWN0Q29sdW1uczogUHJvVGFibGVDb2x1bW5bXSkge1xyXG4gICAgLy8g6L+c56iL5YiX55u05o6l5L2c5Li65p2l5rqQ77yM6L+H5ruk5o6J5pys5Zyw5LiN5a2Y5Zyo55qE5YiX77yM5bm25LuO5pys5Zyw5YiX6KGl5YWF5riy5p+T6YWN572uXHJcbiAgICBjb25zdCByZW1vdGVDb2x1bW5zID0gaW5qZWN0Q29sdW1uc1xyXG4gICAgICAuZmlsdGVyKChpbmplY3RDb2wpID0+XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnByb3AgPT09IGluamVjdENvbC5wcm9wKSxcclxuICAgICAgKVxyXG4gICAgICAubWFwKChpbmplY3RDb2wpID0+IHtcclxuICAgICAgICBjb25zdCBsb2NhbENvbCA9IHRoaXMuY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5wcm9wID09PSBpbmplY3RDb2wucHJvcCk7XHJcbiAgICAgICAgcmV0dXJuIHsgLi4ubG9jYWxDb2wsIC4uLmluamVjdENvbCB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyDovoXliqnliJflj5boh6rmnKzlnLDvvIzkv53mjIHlnKjljp/lp4vkvY3nva7vvIjpppbpg6ggLyDlsL7pg6jvvIlcclxuICAgIGNvbnN0IGZpcnN0Tm9uQXV4SW5kZXggPSB0aGlzLmNvbHVtbnMuZmluZEluZGV4KFxyXG4gICAgICAoYykgPT4gIWMuYXV4aWxpYXJ5Q29sdW1uLFxyXG4gICAgKTtcclxuICAgIGNvbnN0IGxhc3ROb25BdXhJbmRleCA9XHJcbiAgICAgIHRoaXMuY29sdW1ucy5sZW5ndGggLVxyXG4gICAgICAxIC1cclxuICAgICAgWy4uLnRoaXMuY29sdW1uc10ucmV2ZXJzZSgpLmZpbmRJbmRleCgoYykgPT4gIWMuYXV4aWxpYXJ5Q29sdW1uKTtcclxuICAgIGNvbnN0IGhlYWRBdXhpbGlhcnkgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAoY29sLCBpKSA9PiBjb2wuYXV4aWxpYXJ5Q29sdW1uICYmIGkgPCBmaXJzdE5vbkF1eEluZGV4LFxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRhaWxBdXhpbGlhcnkgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKFxyXG4gICAgICAoY29sLCBpKSA9PiBjb2wuYXV4aWxpYXJ5Q29sdW1uICYmIGkgPiBsYXN0Tm9uQXV4SW5kZXgsXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZm9ybWF0ZUlubmVyQ29sdW1ucyhbLi4uaGVhZEF1eGlsaWFyeSwgLi4ucmVtb3RlQ29sdW1ucywgLi4udGFpbEF1eGlsaWFyeV0pO1xyXG4gIH1cclxuXHJcbiAgLy8g6YCa6L+HIFByb3h5IOebkeWQrCBfc2VhcmNoUGFyYW1zIOeahOWxnuaAp+WPmOabtFxyXG4gIHByaXZhdGUgY3JlYXRlU2VhcmNoUGFyYW1zUHJveHkodGFyZ2V0OiBhbnkpIHtcclxuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgY29uc3QgaGFuZGxlcjogUHJveHlIYW5kbGVyPGFueT4gPSB7XHJcbiAgICAgIHNldChvYmo6IGFueSwgcHJvcDogc3RyaW5nIHwgc3ltYm9sLCB2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gU3RyaW5nKHByb3ApO1xyXG4gICAgICAgIGNvbnN0IG9sZFZhbCA9IG9ialtrZXldO1xyXG4gICAgICAgIGlmIChvbGRWYWwgPT09IHZhbHVlKSB7XHJcbiAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG9ialtrZXldID0gdmFsdWU7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHNlbGYub25WYWx1ZXNDaGFuZ2UuZW1pdCh7XHJcbiAgICAgICAgICAgIGtleSxcclxuICAgICAgICAgICAgdmFsdWUsXHJcbiAgICAgICAgICAgIHBhcmFtczogc2VsZi5nZXRTZWFyY2hQYXJhbXMoKSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHt9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBQcm94eSh0YXJnZXQsIGhhbmRsZXIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhckVtcHR5U2VhcmNoUGFyYW1zKCkge1xyXG4gICAgY29uc3QgY2xvbmVTZWFyY2hQYXJhbXMgPSBjbG9uZURlZXAodGhpcy5fc2VhcmNoUGFyYW1zKTtcclxuICAgIHJldHVybiBjbG9uZVNlYXJjaFBhcmFtcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRTZXJ2ZXJTb3J0UGF5bG9hZCgpIHtcclxuICAgIC8vIOaehOW7uua/gOa0u+aOkuW6j+mbhuWQiO+8iOaMieS8mOWFiOe6p+S7juS9juWIsOmrmO+8jOacq+WwvuS8mOWFiO+8iVxyXG4gICAgY29uc3QgYWN0aXZlS2V5cyA9IHRoaXMuX3NvcnRQcmlvcml0eS5maWx0ZXIoKGspID0+ICEhdGhpcy5fc29ydE1hcFtrXSk7XHJcbiAgICBpZiAoYWN0aXZlS2V5cy5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgY29uc3Qgc29ydHMgPSBhY3RpdmVLZXlzLm1hcCgoZmllbGQpID0+IHtcclxuICAgICAgLy8g5p+l5om+5a+55bqU55qE5YiX6YWN572u77yM5LyY5YWI5L2/55Soc29ydE5hbWXlrZfmrrVcclxuICAgICAgY29uc3QgY29sdW1uID0gdGhpcy5fY29sdW1ucy5maW5kKChjb2wpID0+IGNvbC5wcm9wID09PSBmaWVsZCk7XHJcbiAgICAgIGNvbnN0IHNvcnRGaWVsZCA9IGNvbHVtbj8uc29ydE5hbWUgfHwgZmllbGQ7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgZmllbGQ6IHNvcnRGaWVsZCxcclxuICAgICAgICBvcmRlcjogdGhpcy5fc29ydE1hcFtmaWVsZF0hLFxyXG4gICAgICB9O1xyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpcy5tdWx0aXBsZVNvcnQpIHtcclxuICAgICAgcmV0dXJuIHNvcnRzOyAvLyDku6XmlbDnu4TlvaLlvI/mj5DkuqTlpJrliJfmjpLluo9cclxuICAgIH1cclxuICAgIGNvbnN0IFtmaXJzdF0gPSBzb3J0cztcclxuICAgIHJldHVybiBmaXJzdDsgLy8g5YW85a655Y2V5YiX57uT5p6EIHsgZmllbGQsIG9yZGVyIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc29ydERhdGFTb3VyY2VJblBsYWNlKCkge1xyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkgfHwgdGhpcy5kYXRhU291cmNlLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG4gICAgY29uc3QgYWN0aXZlS2V5cyA9IHRoaXMuX3NvcnRQcmlvcml0eS5maWx0ZXIoKGspID0+ICEhdGhpcy5fc29ydE1hcFtrXSk7XHJcbiAgICBpZiAoYWN0aXZlS2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAvLyDlpI3liLbkuIDku73kvJjlhYjnuqfvvIzku47liY3liLDlkI7kvJjlhYjnuqfku47kvY7liLDpq5jvvIjmnIDlkI7orr7nva7nmoTlrZfmrrXkvJjlhYjvvIlcclxuICAgIGNvbnN0IGtleXNJblByaW9yaXR5ID0gWy4uLmFjdGl2ZUtleXNdO1xyXG4gICAgdGhpcy5kYXRhU291cmNlLnNvcnQoKGE6IGFueSwgYjogYW55KSA9PiB7XHJcbiAgICAgIGZvciAobGV0IGkgPSBrZXlzSW5Qcmlvcml0eS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0ga2V5c0luUHJpb3JpdHlbaV07XHJcbiAgICAgICAgY29uc3Qgb3JkZXIgPSB0aGlzLl9zb3J0TWFwW2ZpZWxkXSE7XHJcbiAgICAgICAgY29uc3QgYXYgPSBhPy5bZmllbGRdO1xyXG4gICAgICAgIGNvbnN0IGJ2ID0gYj8uW2ZpZWxkXTtcclxuICAgICAgICBjb25zdCBjbXAgPSB0aGlzLmNvbXBhcmVWYWx1ZXMoYXYsIGJ2KTtcclxuICAgICAgICBpZiAoY21wICE9PSAwKSByZXR1cm4gb3JkZXIgPT09IFwiYXNjZW5kXCIgPyBjbXAgOiAtY21wO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbXBhcmVWYWx1ZXMoYVZhbDogYW55LCBiVmFsOiBhbnkpOiBudW1iZXIge1xyXG4gICAgaWYgKGFWYWwgPT0gbnVsbCAmJiBiVmFsID09IG51bGwpIHJldHVybiAwO1xyXG4gICAgaWYgKGFWYWwgPT0gbnVsbCkgcmV0dXJuIC0xO1xyXG4gICAgaWYgKGJWYWwgPT0gbnVsbCkgcmV0dXJuIDE7XHJcbiAgICBpZiAoYVZhbCBpbnN0YW5jZW9mIERhdGUgJiYgYlZhbCBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgcmV0dXJuIGFWYWwuZ2V0VGltZSgpIC0gYlZhbC5nZXRUaW1lKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGFWYWwgPT09IFwiYm9vbGVhblwiICYmIHR5cGVvZiBiVmFsID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICByZXR1cm4gYVZhbCA9PT0gYlZhbCA/IDAgOiBhVmFsID8gMSA6IC0xO1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBhVmFsID09PSBcIm51bWJlclwiICYmIHR5cGVvZiBiVmFsID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgIHJldHVybiBhVmFsIC0gYlZhbDtcclxuICAgIH1cclxuICAgIGlmICh0eXBlb2YgYVZhbCA9PT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgYlZhbCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICByZXR1cm4gYVZhbC5sb2NhbGVDb21wYXJlKGJWYWwpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYU51bSA9IE51bWJlcihhVmFsKTtcclxuICAgIGNvbnN0IGJOdW0gPSBOdW1iZXIoYlZhbCk7XHJcbiAgICBpZiAoIWlzTmFOKGFOdW0pICYmICFpc05hTihiTnVtKSkgcmV0dXJuIGFOdW0gLSBiTnVtO1xyXG4gICAgcmV0dXJuIFN0cmluZyhhVmFsKS5sb2NhbGVDb21wYXJlKFN0cmluZyhiVmFsKSk7XHJcbiAgfVxyXG5cclxuICAvLyDmiafooYwgYXV0b0NvbXBsZXRlIOaVsOaNrua6kOafpeivou+8iOWunumZheaJp+ihjOmAu+i+ke+8iVxyXG4gIHByaXZhdGUgZXhlY3V0ZUF1dG9Db21wbGV0ZURhdGFTb3VyY2UoZXZlbnQ6IEV2ZW50LCBjb2x1bW46IFByb1RhYmxlQ29sdW1uKSB7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IGNvbHVtbi5maWVsZFByb3BzPy5uYW1lIHx8IGNvbHVtbi5wcm9wO1xyXG5cclxuICAgIGlmIChcclxuICAgICAgKGNvbHVtbi5maWVsZFByb3BzIGFzIEF1dG9Db21wbGV0ZUZpZWxkUHJvcHMpLmRhdGFTb3VyY2UgJiZcclxuICAgICAgdHlwZW9mIChjb2x1bW4uZmllbGRQcm9wcyBhcyBBdXRvQ29tcGxldGVGaWVsZFByb3BzKS5kYXRhU291cmNlID09PVxyXG4gICAgICAgIFwiZnVuY3Rpb25cIlxyXG4gICAgKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gKGNvbHVtbi5maWVsZFByb3BzIGFzIEF1dG9Db21wbGV0ZUZpZWxkUHJvcHMpLmRhdGFTb3VyY2UoXHJcbiAgICAgICAgICBldmVudCxcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIOWmguaenOi/lOWbnueahOaYryBQcm9taXNl77yM5aSE55CG5byC5q2l57uT5p6cXHJcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcclxuICAgICAgICAgIHJlc3VsdFxyXG4gICAgICAgICAgICAudGhlbigoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZURhdGFTb3VyY2VzW2ZpZWxkS2V5XSA9IGRhdGEgfHwgW107XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiQXV0b0NvbXBsZXRlIGRhdGFTb3VyY2UgZXJyb3I6XCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1tmaWVsZEtleV0gPSBbXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIOWQjOatpei/lOWbnue7k+aenFxyXG4gICAgICAgICAgdGhpcy5fYXV0b0NvbXBsZXRlRGF0YVNvdXJjZXNbZmllbGRLZXldID0gcmVzdWx0IHx8IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwiQXV0b0NvbXBsZXRlIGRhdGFTb3VyY2UgZXJyb3I6XCIsIGVycm9yKTtcclxuICAgICAgICB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1tmaWVsZEtleV0gPSBbXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNlYXJjaFBhcmFtcyhvcHRpb25zPzoge1xyXG4gICAgdXNlU2F2ZWQ/OiBib29sZWFuOyAvLyDkvb/nlKjmnIDov5HkuIDmrKHmn6Xor6Lmj5DkuqTnmoTlj4LmlbDvvIzpu5jorqTkuLogZmFsc2XvvJtmYWxzZSDkuLrlvZPliY3ooajljZXlgLxcclxuICB9KTogYW55IHtcclxuICAgIGNvbnN0IHsgdXNlU2F2ZWQgPSBmYWxzZSB9ID0gb3B0aW9ucyB8fCB7fTtcclxuICAgIGNvbnN0IHJhd1BhcmFtcyA9IHVzZVNhdmVkID8gdGhpcy5fc2F2ZWRTZWFyY2hQYXJhbXMgOiB0aGlzLl9zZWFyY2hQYXJhbXM7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBjbG9uZURlZXAocmF3UGFyYW1zIHx8IHt9KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBwYXJhbXMsXHJcbiAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgcGFnZUluZGV4OiB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXgsXHJcbiAgICAgICAgcGFnZVNpemU6IHRoaXMuX3BhZ2VJbmZvLnBhZ2VTaXplLFxyXG4gICAgICB9LFxyXG4gICAgICAvLyDlnKjnur/mjpLluo/mqKHlvI/vvJrmiormjpLluo/lr7nosaHmj5DkuqTnu5nmjqXlj6NcclxuICAgICAgLi4uKHRoaXMuc29ydE1vZGUgPT09IFwic2VydmVyXCJcclxuICAgICAgICA/IHsgc29ydDogdGhpcy5idWlsZFNlcnZlclNvcnRQYXlsb2FkKCkgfVxyXG4gICAgICAgIDoge30pLFxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZWxvYWQoYWZ0ZXJEZWxldGU/OiBib29sZWFuKSB7XHJcbiAgICB0aGlzLmhhbmRsZVF1ZXJ5KGFmdGVyRGVsZXRlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRGaWVsZHNWYWx1ZShmaWVsZHM6IFJlY29yZDxzdHJpbmcsIGFueT4pIHtcclxuICAgIE9iamVjdC5rZXlzKGZpZWxkcykuZm9yRWFjaCgoaykgPT4ge1xyXG4gICAgICB0aGlzLl9zZWFyY2hQYXJhbXNba10gPSBmaWVsZHNba107IC8vIOS/neeVmSBQcm94ee+8jOmAkOmhuei1i+WAvOinpuWPkeaLpuaIqlxyXG5cclxuICAgICAgLy8gY2hlY2tib3gg57G75Z6L6ZyA6KaB5ZCM5q2l5pu05pawIG9wdGlvbnMg55qEIGNoZWNrZWQg54q25oCB77yM5ZCm5YiZIFVJIOS4jeS8muWTjeW6lFxyXG4gICAgICBjb25zdCB0YXJnZXRDb2x1bW4gPSB0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMuZmluZChcclxuICAgICAgICAoaXRlbSkgPT4gKGl0ZW0uZmllbGRQcm9wcz8ubmFtZSB8fCBpdGVtLnByb3ApID09PSBrLFxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGFyZ2V0Q29sdW1uPy52YWx1ZVR5cGUgPT09IFwiY2hlY2tib3hcIikge1xyXG4gICAgICAgIGNvbnN0IHZhbHVlczogYW55W10gPSBBcnJheS5pc0FycmF5KGZpZWxkc1trXSkgPyBmaWVsZHNba10gOiBbXTtcclxuICAgICAgICBjb25zdCB0YXJnZXRGaWVsZFByb3BzID0gdGFyZ2V0Q29sdW1uLmZpZWxkUHJvcHMgYXMgQ2hlY2tib3hGaWVsZFByb3BzO1xyXG4gICAgICAgIGlmICh0YXJnZXRGaWVsZFByb3BzPy5vcHRpb25zKSB7XHJcbiAgICAgICAgICB0YXJnZXRGaWVsZFByb3BzLm9wdGlvbnMgPSB0YXJnZXRGaWVsZFByb3BzLm9wdGlvbnMubWFwKFxyXG4gICAgICAgICAgICAoaXRlbTogT3B0aW9uc1R5cGUpID0+ICh7XHJcbiAgICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgICBjaGVja2VkOiB2YWx1ZXMuaW5jbHVkZXMoaXRlbS52YWx1ZSksXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEZpZWxkVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcclxuICAgIHRoaXMuX3NlYXJjaFBhcmFtc1trZXldID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xlYXJTZWxlY3RlZFJvdygpIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIHNldENvbHVtbnMoXHJcbiAgICBjb2x1bW5zOiBQcm9UYWJsZUNvbHVtbltdLFxyXG4gICAgb3B0aW9ucz86IHtcclxuICAgICAgcmVsb2FkPzogYm9vbGVhbjsgLy8g5piv5ZCm6YeN5paw5Yqg6L295pWw5o2u77yM6buY6K6k5Li6IGZhbHNlXHJcbiAgICB9LFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8g5pu05pawIGNvbHVtbnMg6L6T5YWl5bGe5oCnXHJcbiAgICB0aGlzLmNvbHVtbnMgPSBjbG9uZURlZXAoY29sdW1ucyk7XHJcblxyXG4gICAgLy8g6YeN5paw5qC85byP5YyW5YaF6YOo5YiXXHJcbiAgICB0aGlzLmZvcm1hdGVJbm5lckNvbHVtbnModGhpcy5jb2x1bW5zKTtcclxuXHJcbiAgICAvLyDph43mlrDorr7nva7mkJzntKLlj4LmlbDvvIjlvILmraXmk43kvZzvvIlcclxuICAgIC8vIOWFiOa4heepuuaXp+eahOaQnOe0ouWPguaVsO+8jOmBv+WFjeaXp+aVsOaNruaui+eVmVxyXG4gICAgdGhpcy5fc2VhcmNoUGFyYW1zID0ge307XHJcbiAgICBhd2FpdCB0aGlzLnNldFNlYXJjaFBhcmFtcyh0aGlzLmNvbHVtbnMpO1xyXG5cclxuICAgIC8vIOmHjeaWsOWIm+W7uiBQcm94ee+8jOehruS/neihqOWNlemhueWAvOWPmOWMluiDveato+W4uOinpuWPkeS6i+S7tlxyXG4gICAgdGhpcy5fc2VhcmNoUGFyYW1zID0gdGhpcy5jcmVhdGVTZWFyY2hQYXJhbXNQcm94eSh0aGlzLl9zZWFyY2hQYXJhbXMpO1xyXG5cclxuICAgIC8vIOmHjeaWsOazqOWGjOaooeadv++8iOWmguaenOe7hOS7tuW3sue7j+WIneWni+WMluWujOaIkO+8iVxyXG4gICAgaWYgKHRoaXMuYWxsVGVtcGxhdGVzKSB7XHJcbiAgICAgIHRoaXMuYXV0b1JlZ2lzdGVyVGVtcGxhdGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aaC5p6c6K6+572u5LqGIHJlbG9hZCDpgInpobnkuLogdHJ1Ze+8jOWImemHjeaWsOafpeivouaVsOaNrlxyXG4gICAgaWYgKG9wdGlvbnM/LnJlbG9hZCA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0U2VsZWN0ZWRSb3dEYXRhPFQgPSBhbnk+KCk6IFQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGFibGVSb3c7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0Q2hlY2tlZFJvd3M8VCA9IGFueT4oKTogVFtdIHtcclxuICAgIGlmICghdGhpcy5zaG93Q2hlY2tib3gpIHtcclxuICAgICAgcmV0dXJuIFtdO1xyXG4gICAgfVxyXG4gICAgLy8g6L+U5Zue5b2T5YmN5pWw5o2u5rqQ5Lit5omA5pyJIGNoZWNrZWQg5Li6IHRydWUg55qE6aG5XHJcbiAgICAvLyDms6jmhI/vvJrlpoLmnpzpnIDopoHojrflj5bmiYDmnInpobXnmoTpgInkuK3pobnvvIzpnIDopoHpgY3ljobmiYDmnInmlbDmja7mupDmiJbkvb/nlKggX3NlbGVjdGVkUm93SWRzXHJcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmZpbHRlcigocm93KSA9PiByb3cuY2hlY2tlZCA9PT0gdHJ1ZSkgYXMgVFtdO1xyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+W5oyH5a6a5ZCN56ew55qE5qih5p2/XHJcbiAgZ2V0VGVtcGxhdGUobmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwge1xyXG4gICAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB0aGlzLmN1c3RvbVRlbXBsYXRlcy5nZXQobmFtZSkgfHwgbnVsbDtcclxuICB9XHJcblxyXG4gIGdldFRvb2xUaXBUZXh0VmFsdWUoY29sdW1uOiBQcm9UYWJsZUNvbHVtbiwgZGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGtleSA9XHJcbiAgICAgIGNvbHVtbi5jdXN0b21SZW5kZXIgJiYgdGhpcy5nZXRUZW1wbGF0ZShjb2x1bW4uY3VzdG9tUmVuZGVyKVxyXG4gICAgICAgID8gXCJcIlxyXG4gICAgICAgIDogY29sdW1uLmVsbGlwc2lzXHJcbiAgICAgICAgICA/IGNvbHVtbi5wcm9wXHJcbiAgICAgICAgICA6IFwiXCI7XHJcbiAgICByZXR1cm4gIWtleSA/IFwiXCIgOiBkYXRhW2tleV07XHJcbiAgfVxyXG5cclxuICBnZXRUYWJsZVJvd0NoZWNrZWQoZGF0YTogYW55KSB7XHJcbiAgICAvLyDlkK/nlKjlpI3pgInmoYbml7bvvJrooYzpq5jkuq7lupTkuI7lpI3pgInmoYbpgInkuK3nirbmgIHkuIDoh7TvvIjmlK/mjIHlpJrpgInvvIlcclxuICAgIGlmICh0aGlzLnNob3dDaGVja2JveCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pc1Jvd0NoZWNrZWQoZGF0YSk7XHJcbiAgICB9XHJcbiAgICAvLyDmnKrlkK/nlKjlpI3pgInmoYbml7bvvJrku43nhLbkvb/nlKjljZXpgInooYzpq5jkuq5cclxuICAgIGlmICghdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdykgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuX3NlbGVjdGVkVGFibGVSb3cpID09PSBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuICB9XHJcblxyXG4gIC8vIOajgOafpeihjOaYr+WQpuiiq+emgeeUqFxyXG4gIGlzUm93RGlzYWJsZWQoZGF0YTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0NoZWNrYm94KSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gdGhpcy5yb3dEaXNhYmxlZCA/IHRoaXMucm93RGlzYWJsZWQoZGF0YSkgOiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIOajgOafpeihjOaYr+WQpuiiq+WkjemAieahhumAieS4re+8iOaVsOaNrumpseWKqOaooeW8j++8iVxyXG4gIGlzUm93Q2hlY2tlZChkYXRhOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5zaG93Q2hlY2tib3gpIHJldHVybiBmYWxzZTtcclxuICAgIC8vIOebtOaOpeivu+WPluaVsOaNruWvueixoeeahCBjaGVja2VkIOWxnuaAp1xyXG4gICAgcmV0dXJuIGRhdGEuY2hlY2tlZCA9PT0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8vIOWIh+aNouihjOeahOmAieS4reeKtuaAge+8iOaVsOaNrumpseWKqOaooeW8j++8jOS/neeVmeeUqOS6juWFvOWuue+8iVxyXG4gIHRvZ2dsZVJvd0NoZWNrZWQoZGF0YTogYW55LCBjaGVja2VkOiBib29sZWFuLCBldmVudD86IEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIOmYu+atouS6i+S7tuWGkuazoe+8jOmBv+WFjeinpuWPkeihjOeCueWHu1xyXG4gICAgfVxyXG4gICAgLy8g5aaC5p6c6KGM6KKr56aB55So77yM5LiN5YWB6K645YiH5o2i6YCJ5Lit54q25oCBXHJcbiAgICBpZiAodGhpcy5pc1Jvd0Rpc2FibGVkKGRhdGEpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDnm7TmjqXorr7nva7mlbDmja7lr7nosaHnmoQgY2hlY2tlZCDlsZ7mgKdcclxuICAgIGRhdGEuY2hlY2tlZCA9IGNoZWNrZWQ7XHJcblxyXG4gICAgLy8g5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd3PvvIjnlKjkuo7lhbzlrrnmgKfvvIlcclxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fc2VsZWN0ZWRSb3dzLmZpbmRJbmRleCgocm93KSA9PlxyXG4gICAgICB0aGlzLmlzU2FtZVJvdyhyb3csIGRhdGEpLFxyXG4gICAgKTtcclxuICAgIGlmIChjaGVja2VkKSB7XHJcbiAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFJvd3MucHVzaChkYXRhKTtcclxuICAgICAgfVxyXG4gICAgICAvLyDli77pgInlpI3pgInmoYbml7blkIzmraXorr7nva7pq5jkuq7pgInkuK3ooYxcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IGRhdGE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIOiLpeW9k+WJjemrmOS6ruihjOS4uuivpeihjO+8jOWImeWPlua2iOmrmOS6rlxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyAmJlxyXG4gICAgICAgIHRoaXMuaXNTYW1lUm93KHRoaXMuX3NlbGVjdGVkVGFibGVSb3csIGRhdGEpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVDaGVja0FsbFN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgLy8g5pu05paw5YWo6YCJ54q25oCB77yI5pWw5o2u6amx5Yqo5qih5byP77yJXHJcbiAgdXBkYXRlQ2hlY2tBbGxTdGF0dXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0NoZWNrYm94IHx8ICFBcnJheS5pc0FycmF5KHRoaXMuZGF0YVNvdXJjZSkpIHtcclxuICAgICAgdGhpcy5fY2hlY2tlZEFsbCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLl9pbmRldGVybWluYXRlID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIOWPquiuoeeul+WPr+eUqOeahOihjO+8iOacquemgeeUqOeahOihjO+8iVxyXG4gICAgY29uc3QgYXZhaWxhYmxlUm93cyA9IHRoaXMuZGF0YVNvdXJjZS5maWx0ZXIoXHJcbiAgICAgIChyb3cpID0+ICF0aGlzLmlzUm93RGlzYWJsZWQocm93KSxcclxuICAgICk7XHJcbiAgICAvLyDln7rkuo7mlbDmja7lr7nosaHnmoQgY2hlY2tlZCDlsZ7mgKforqHnrpdcclxuICAgIGNvbnN0IGNoZWNrZWRDb3VudCA9IGF2YWlsYWJsZVJvd3MuZmlsdGVyKFxyXG4gICAgICAocm93KSA9PiByb3cuY2hlY2tlZCA9PT0gdHJ1ZSxcclxuICAgICkubGVuZ3RoO1xyXG4gICAgY29uc3QgdG90YWxDb3VudCA9IGF2YWlsYWJsZVJvd3MubGVuZ3RoO1xyXG4gICAgdGhpcy5fY2hlY2tlZEFsbCA9XHJcbiAgICAgIHRvdGFsQ291bnQgPiAwICYmIGNoZWNrZWRDb3VudCA+IDAgJiYgY2hlY2tlZENvdW50ID09PSB0b3RhbENvdW50O1xyXG4gICAgdGhpcy5faW5kZXRlcm1pbmF0ZSA9IGNoZWNrZWRDb3VudCA+IDAgJiYgY2hlY2tlZENvdW50IDwgdG90YWxDb3VudDtcclxuICB9XHJcblxyXG4gIC8vIOWFqOmAiS/lj5bmtojlhajpgInvvIjmlbDmja7pqbHliqjmqKHlvI/vvIlcclxuICB0b2dnbGVDaGVja0FsbChjaGVja2VkOiBib29sZWFuLCBldmVudD86IEV2ZW50KSB7XHJcbiAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5Y+q5aSE55CG5Y+v55So55qE6KGM77yI5pyq56aB55So55qE6KGM77yJXHJcbiAgICBjb25zdCBhdmFpbGFibGVSb3dzID0gdGhpcy5kYXRhU291cmNlLmZpbHRlcihcclxuICAgICAgKHJvdykgPT4gIXRoaXMuaXNSb3dEaXNhYmxlZChyb3cpLFxyXG4gICAgKTtcclxuXHJcbiAgICAvLyDmibnph4/orr7nva4gY2hlY2tlZCDlsZ7mgKdcclxuICAgIGF2YWlsYWJsZVJvd3MuZm9yRWFjaCgocm93KSA9PiB7XHJcbiAgICAgIHJvdy5jaGVja2VkID0gY2hlY2tlZDtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIOWQjOatpeabtOaWsCBfc2VsZWN0ZWRSb3dz77yI55So5LqO5YW85a655oCn77yJXHJcbiAgICBpZiAoY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFJvd3MgPSBbLi4uYXZhaWxhYmxlUm93c107XHJcbiAgICAgIC8vIOWQjOatpeiuvue9rumrmOS6rumAieS4reihjOS4uuesrOS4gOadoeWPr+mAieaVsOaNrlxyXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID1cclxuICAgICAgICBhdmFpbGFibGVSb3dzLmxlbmd0aCA+IDAgPyBhdmFpbGFibGVSb3dzWzBdIDogbnVsbDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkUm93cyA9IFtdO1xyXG4gICAgICAvLyDlj5bmtojpq5jkuq5cclxuICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy51cGRhdGVDaGVja0FsbFN0YXR1cygpO1xyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+W6YCJ5Lit55qE6KGM5pWw5o2u77yI5L+d55WZ55So5LqO5YW85a655oCn77yJXHJcbiAgZ2V0U2VsZWN0ZWRSb3dzKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLmdldENoZWNrZWRSb3dzKCk7XHJcbiAgfVxyXG5cclxuICAvLyDlpITnkIbooYwgY2hlY2tib3gg5Y+Y5YyW5LqL5Lu277yI5pWw5o2u6amx5Yqo5qih5byP77yJXHJcbiAgaGFuZGxlUm93Q2hlY2tlZENoYW5nZShkYXRhOiBhbnksIGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlzUm93RGlzYWJsZWQoZGF0YSkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOaVsOaNruWvueixoeeahCBjaGVja2VkIOWxnuaAp+W3sue7j+mAmui/h+WPjOWQkee7keWumuiHquWKqOabtOaWsFxyXG4gICAgLy8g6L+Z6YeM5Y+q6ZyA6KaB5ZCM5q2l5pu05pawIF9zZWxlY3RlZFJvd3NcclxuXHJcbiAgICAvLyDlkIzmraXmm7TmlrAgX3NlbGVjdGVkUm93c++8iOeUqOS6juWFvOWuueaAp++8iVxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9zZWxlY3RlZFJvd3MuZmluZEluZGV4KChyb3cpID0+XHJcbiAgICAgIHRoaXMuaXNTYW1lUm93KHJvdywgZGF0YSksXHJcbiAgICApO1xyXG4gICAgaWYgKGNoZWNrZWQpIHtcclxuICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkUm93cy5wdXNoKGRhdGEpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIOWLvumAieWkjemAieahhuaXtuWQjOatpeiuvue9rumrmOS6rumAieS4reihjFxyXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gZGF0YTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgICAgLy8g6Iul5b2T5YmN6auY5Lqu6KGM5Li66K+l6KGM77yM5YiZ5Y+W5raI6auY5LquXHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ICYmXHJcbiAgICAgICAgdGhpcy5pc1NhbWVSb3codGhpcy5fc2VsZWN0ZWRUYWJsZVJvdywgZGF0YSlcclxuICAgICAgKSB7XHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyDmm7TmlrDlhajpgInnirbmgIFcclxuICAgIHRoaXMudXBkYXRlQ2hlY2tBbGxTdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIC8vIOWIt+aWsOWFqOmAieeKtuaAge+8iOeUqOS6juWFtuS7luWcuuaZr++8iVxyXG4gIHJlZnJlc2hDaGVja0FsbFN0YXR1cygpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlQ2hlY2tBbGxTdGF0dXMoKTtcclxuICB9XHJcblxyXG4gIC8vIOiOt+WPluihjOeahOWUr+S4gOagh+ivhu+8iOeUqOS6jui3qOmhtemAieS4re+8iVxyXG4gIHByaXZhdGUgZ2V0Um93SWQoZGF0YTogYW55KTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiBkYXRhLmlkID8/IGRhdGEua2V5ID8/IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8vIOWIpOaWreS4pOihjOaYr+WQpuS4uuWQjOS4gOihjFxyXG4gIHByaXZhdGUgaXNTYW1lUm93KHJvdzE6IGFueSwgcm93MjogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBpZDEgPSB0aGlzLmdldFJvd0lkKHJvdzEpO1xyXG4gICAgY29uc3QgaWQyID0gdGhpcy5nZXRSb3dJZChyb3cyKTtcclxuXHJcbiAgICBpZiAoaWQxICE9PSB1bmRlZmluZWQgJiYgaWQyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIGlkMSA9PT0gaWQyO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZhbGxiYWNrIOWIsCBKU09OIOavlOi+g1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHJvdzEpID09PSBKU09OLnN0cmluZ2lmeShyb3cyKTtcclxuICB9XHJcblxyXG4gIC8vIOa4heepuumAieS4reeahOihjO+8iOaVsOaNrumpseWKqOaooeW8j++8iVxyXG4gIGNsZWFyU2VsZWN0ZWRSb3dzKCkge1xyXG4gICAgLy8g5riF56m65b2T5YmN5pWw5o2u5rqQ5Lit5omA5pyJ6aG555qEIGNoZWNrZWQg54q25oCBXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGFTb3VyY2UpKSB7XHJcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5mb3JFYWNoKChyb3cpID0+IHtcclxuICAgICAgICByb3cuY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zZWxlY3RlZFJvd3MgPSBbXTtcclxuICAgIHRoaXMuX2NoZWNrZWRBbGwgPSBmYWxzZTtcclxuICAgIHRoaXMuX2luZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuICAgIHRoaXMuX3NlbGVjdGVkVGFibGVSb3cgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRmllbGRDaGVja0JveENoYW5nZShjaGVja0JveE9wdGlvbnM6IE9wdGlvbnNUeXBlW10sIGtleTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNldEZpZWxkc1ZhbHVlKHtcclxuICAgICAgW2tleV06IGNoZWNrQm94T3B0aW9uc1xyXG4gICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY2hlY2tlZClcclxuICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnZhbHVlKSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlU2VhcmNoKCkge1xyXG4gICAgdGhpcy5fc2F2ZWRTZWFyY2hQYXJhbXMgPSB0aGlzLmNsZWFyRW1wdHlTZWFyY2hQYXJhbXMoKTtcclxuICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA9IDE7XHJcbiAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXNldEZvcm0oKSB7XHJcbiAgICBPYmplY3Qua2V5cyh0aGlzLl9zZWFyY2hQYXJhbXMpLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICBjb25zdCB0YXJnZXRDb2x1bW4gPSB0aGlzLl9zZWFyY2hGaWxlZENvbHVtbnMuZmluZCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIHJldHVybiAoaXRlbS5maWVsZFByb3BzPy5uYW1lIHx8IGl0ZW0ucHJvcCkgPT09IGtleTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyDlr7nkuo5jaGVja2JveOexu+Wei++8jOmcgOimgeeJueauiuWkhOeQhum7mOiupOWAvFxyXG4gICAgICBpZiAodGFyZ2V0Q29sdW1uPy52YWx1ZVR5cGUgPT09IFwiY2hlY2tib3hcIikge1xyXG4gICAgICAgIC8vIOS7juWOn+Wni2NvbHVtbnPphY3nva7kuK3ojrflj5bliJ3lp4vphY3nva7vvIzku6Xnoa7kv53kvb/nlKjmraPnoa7nmoTpu5jorqTlgLxcclxuICAgICAgICBjb25zdCBvcmlnaW5hbENvbHVtbiA9IHRoaXMuY29sdW1ucy5maW5kKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKGl0ZW0uZmllbGRQcm9wcz8ubmFtZSB8fCBpdGVtLnByb3ApID09PSBrZXk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIOS7juWOn+Wni29wdGlvbnPkuK3mib7lh7pjaGVja2Vk5Li6dHJ1ZeeahOmhueS9nOS4uum7mOiupOWAvFxyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsRmllbGRQcm9wcyA9IG9yaWdpbmFsQ29sdW1uPy5maWVsZFByb3BzIGFzXHJcbiAgICAgICAgICB8IENoZWNrYm94RmllbGRQcm9wc1xyXG4gICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgY29uc3QgY2hlY2tlZFZhbHVlcyA9IChvcmlnaW5hbEZpZWxkUHJvcHM/Lm9wdGlvbnMgfHwgW10pXHJcbiAgICAgICAgICAuZmlsdGVyKChvcHQ6IE9wdGlvbnNUeXBlKSA9PiBvcHQuY2hlY2tlZClcclxuICAgICAgICAgIC5tYXAoKG9wdDogT3B0aW9uc1R5cGUpID0+IG9wdC52YWx1ZSk7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID1cclxuICAgICAgICAgIGNoZWNrZWRWYWx1ZXMubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICA/IGNoZWNrZWRWYWx1ZXNcclxuICAgICAgICAgICAgOiBQUk9fVEFCTEVfREVGQVVMVF9QUk9QU1t0YXJnZXRDb2x1bW4udmFsdWVUeXBlXS52YWx1ZTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2VhcmNoUGFyYW1zW2tleV0gPSBkZWZhdWx0VmFsdWU7XHJcblxyXG4gICAgICAgIC8vIOagueaNrum7mOiupOWAvOaBouWkjW9wdGlvbnPnmoRjaGVja2Vk54q25oCB77yM5L2/55So5Y6f5aeLb3B0aW9uc+eahOe7k+aehFxyXG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSkgPyBkZWZhdWx0VmFsdWUgOiBbXTtcclxuICAgICAgICBjb25zdCBvcmlnaW5hbE9wdGlvbnMgPSBvcmlnaW5hbEZpZWxkUHJvcHM/Lm9wdGlvbnMgfHwgW107XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0RmllbGRQcm9wcyA9IHRhcmdldENvbHVtbi5maWVsZFByb3BzIGFzIENoZWNrYm94RmllbGRQcm9wcztcclxuICAgICAgICB0YXJnZXRGaWVsZFByb3BzLm9wdGlvbnMgPSBvcmlnaW5hbE9wdGlvbnMubWFwKChpdGVtOiBPcHRpb25zVHlwZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgY2hlY2tlZDogZGVmYXVsdFZhbHVlcy5pbmNsdWRlcyhpdGVtLnZhbHVlKSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fc2VhcmNoUGFyYW1zW2tleV0gPSB0YXJnZXRDb2x1bW4/LmZpZWxkUHJvcHNcclxuICAgICAgICAgID8gdGFyZ2V0Q29sdW1uPy5maWVsZFByb3BzLnZhbHVlIHx8XHJcbiAgICAgICAgICAgIFBST19UQUJMRV9ERUZBVUxUX1BST1BTW3RhcmdldENvbHVtbi52YWx1ZVR5cGVdLnZhbHVlXHJcbiAgICAgICAgICA6IFBST19UQUJMRV9ERUZBVUxUX1BST1BTW3RhcmdldENvbHVtbi52YWx1ZVR5cGVdLnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9zYXZlZFNlYXJjaFBhcmFtcyA9IHt9O1xyXG4gICAgdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4ID0gMTtcclxuICAgIHRoaXMub25SZXNldEZvcm1CZWZvcmVSZWxvYWQuZW1pdCgpO1xyXG4gICAgdGhpcy5oYW5kbGVRdWVyeSgpO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlUGFnZUluZGV4Q2hhbmdlKHBhZ2VJbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggPSBwYWdlSW5kZXg7XHJcbiAgICB0aGlzLmhhbmRsZVF1ZXJ5KCk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVQYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogYW55KSB7XHJcbiAgICB0aGlzLl9wYWdlSW5mby5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xyXG4gICAgdGhpcy5fcGFnZUluZm8ucGFnZUluZGV4ID0gMTtcclxuICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGhhbmRsZVF1ZXJ5KGFmdGVyRGVsZXRlPzogYm9vbGVhbikge1xyXG4gICAgLy8g5Yig6Zmk5ZCO5Yi35paw5LiU5b2T5YmN6aG15LuF5Ymp5LiA5p2h6K6w5b2V5pe277yM6Iul5LiN5Zyo56ys5LiA6aG15YiZ5YWI5Zue6YCA5LiA6aG1XHJcbiAgICBpZiAoXHJcbiAgICAgIGFmdGVyRGVsZXRlICYmXHJcbiAgICAgIEFycmF5LmlzQXJyYXkodGhpcy5kYXRhU291cmNlKSAmJlxyXG4gICAgICB0aGlzLmRhdGFTb3VyY2UubGVuZ3RoID09PSAxICYmXHJcbiAgICAgIHRoaXMuX3BhZ2VJbmZvLnBhZ2VJbmRleCA+IDFcclxuICAgICkge1xyXG4gICAgICB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggPSB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXggLSAxO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2xvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMucmVxdWVzdCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCh7XHJcbiAgICAgICAgICBwYXJhbXM6IHRoaXMuY2xlYXJFbXB0eVNlYXJjaFBhcmFtcygpLFxyXG4gICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLl9wYWdlSW5mby5wYWdlSW5kZXgsXHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLl9wYWdlSW5mby5wYWdlU2l6ZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAvLyDlnKjnur/mjpLluo/mqKHlvI/vvJrmiormjpLluo/lr7nosaHmj5DkuqTnu5nmjqXlj6NcclxuICAgICAgICAgIC4uLih0aGlzLnNvcnRNb2RlID09PSBcInNlcnZlclwiXHJcbiAgICAgICAgICAgID8geyBzb3J0OiB0aGlzLmJ1aWxkU2VydmVyU29ydFBheWxvYWQoKSB9XHJcbiAgICAgICAgICAgIDoge30pLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyDmn6Xor6LlkI7pu5jorqTkuI3kv53nlZnot6jpobXpgInkuK3nirbmgIHvvJrmr4/mrKHov5Tlm57nmoTmlbDmja7lnYfliJ3lp4vljJbkuLrmnKrpgInkuK1cclxuICAgICAgICBpZiAodGhpcy5zaG93Q2hlY2tib3gpIHtcclxuICAgICAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IChyZXN1bHQuZGF0YSB8fCBbXSkubWFwKChpdGVtKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgLi4uaXRlbSxcclxuICAgICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSByZXN1bHQuZGF0YSB8fCBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc3VtbWFyeURhdGEgPSByZXN1bHQuc3VtbWFyeURhdGEgfHwgbnVsbDtcclxuICAgICAgICAvLyDmnKzlnLDmjpLluo/mqKHlvI/vvJrmi7/liLDmlbDmja7lkI7lnKjliY3nq6/mjpLluo9cclxuICAgICAgICBpZiAodGhpcy5zb3J0TW9kZSA9PT0gXCJsb2NhbFwiKSB7XHJcbiAgICAgICAgICB0aGlzLnNvcnREYXRhU291cmNlSW5QbGFjZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9wYWdlSW5mby50b3RhbCA9IHJlc3VsdC50b3RhbCB8fCAwO1xyXG4gICAgICAgIC8vIOWPlua2iOi3qOmhteWkmumAie+8muafpeivouWQjua4heepuumAieS4reeKtuaAgVxyXG4gICAgICAgIGlmICh0aGlzLnNob3dDaGVja2JveCkge1xyXG4gICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGVkUm93cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKFwi5p+l6K+i5aSx6LSlOlwiLCBlcnJvcik7XHJcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gW107XHJcbiAgICAgICAgdGhpcy5fcGFnZUluZm8udG90YWwgPSAwO1xyXG4gICAgICAgIHRoaXMuc3VtbWFyeURhdGEgPSBudWxsO1xyXG4gICAgICB9IGZpbmFsbHkge1xyXG4gICAgICAgIHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKFwi5pyq5o+Q5L6bIF9yZXF1ZXN0IOWbnuiwg+WHveaVsFwiKTtcclxuICAgICAgdGhpcy5fbG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g6Kem5Y+R5YiX5o6S5bqP5Y+Y5pu0XHJcbiAgb25Tb3J0Q2hhbmdlKHNvcnRLZXk6IHN0cmluZywgc29ydE9yZGVyOiBcImFzY2VuZFwiIHwgXCJkZXNjZW5kXCIgfCBudWxsKSB7XHJcbiAgICAvLyDljZXliJfmjpLluo/vvJrph43nva7lhbblroPliJfvvJvlpJrliJfmjpLluo/vvJrkv53nlZnlhbblroPliJdcclxuICAgIGlmICghdGhpcy5tdWx0aXBsZVNvcnQpIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5fc29ydE1hcCkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKGtleSAhPT0gc29ydEtleSkgdGhpcy5fc29ydE1hcFtrZXldID0gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zb3J0TWFwW3NvcnRLZXldID0gc29ydE9yZGVyO1xyXG5cclxuICAgIC8vIOe7tOaKpOS8mOWFiOe6p+mYn+WIl++8muacieW6j+WIl+S4lOmdnuepuiAtPiDnva7kuo7mnKvlsL7vvJvkuLrnqbogLT4g56e76ZmkXHJcbiAgICB0aGlzLl9zb3J0UHJpb3JpdHkgPSB0aGlzLl9zb3J0UHJpb3JpdHkuZmlsdGVyKChrKSA9PiBrICE9PSBzb3J0S2V5KTtcclxuICAgIGlmIChzb3J0T3JkZXIpIHtcclxuICAgICAgdGhpcy5fc29ydFByaW9yaXR5LnB1c2goc29ydEtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuc29ydE1vZGUgPT09IFwibG9jYWxcIikge1xyXG4gICAgICB0aGlzLnNvcnREYXRhU291cmNlSW5QbGFjZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5Zyo57q/5o6S5bqP77ya6YeN5paw6K+35rGCXHJcbiAgICAgIHRoaXMuaGFuZGxlUXVlcnkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFNvcnRPcmRlcihzb3J0S2V5OiBzdHJpbmcpOiBcImFzY2VuZFwiIHwgXCJkZXNjZW5kXCIgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3J0TWFwW3NvcnRLZXldIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUYWJsZVJvd0NsaWNrKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyA9IGRhdGE7XHJcbiAgICBpZiAodGhpcy5zaG93Q2hlY2tib3ggJiYgIXRoaXMuaXNSb3dEaXNhYmxlZChkYXRhKSkge1xyXG4gICAgICAvLyDlhYjmuIXnqbrmiYDmnInpgInkuK3ooYxcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dzID0gW107XHJcbiAgICAgIGNvbnN0IG5leHRDaGVja2VkID0gIXRoaXMuaXNSb3dDaGVja2VkKGRhdGEpO1xyXG4gICAgICB0aGlzLnRvZ2dsZVJvd0NoZWNrZWQoZGF0YSwgbmV4dENoZWNrZWQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblJvd0NsaWNrLmVtaXQodGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUYWJsZVJvd0RiQ2xpY2soZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZFRhYmxlUm93ID0gZGF0YTtcclxuICAgIHRoaXMub25Sb3dEYkNsaWNrLmVtaXQodGhpcy5fc2VsZWN0ZWRUYWJsZVJvdyk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVDb2x1bW5zU2V0dGluZ0NvbmZpcm0oKSB7XHJcbiAgICB0aGlzLnF1ZXJ5RHluYW1pY0NvbHVtbnMoKTtcclxuICB9XHJcblxyXG4gIC8vIOWkhOeQhiBhdXRvQ29tcGxldGUg6L6T5YWl5LqL5Lu277yI5bim6Ziy5oqW77yJXHJcbiAgaGFuZGxlQXV0b0NvbXBsZXRlSW5wdXQoZXZlbnQ6IEV2ZW50LCBjb2x1bW46IFByb1RhYmxlQ29sdW1uKSB7XHJcbiAgICBjb25zdCBmaWVsZEtleSA9IGNvbHVtbi5maWVsZFByb3BzPy5uYW1lIHx8IGNvbHVtbi5wcm9wO1xyXG5cclxuICAgIC8vIOWmguaenOivpeWtl+autei/mOayoeaciemYsuaKluWHveaVsO+8jOWIm+W7uuS4gOS4qlxyXG4gICAgaWYgKCF0aGlzLl9hdXRvQ29tcGxldGVEZWJvdW5jZU1hcC5oYXMoZmllbGRLZXkpKSB7XHJcbiAgICAgIGNvbnN0IGRlYm91bmNlZEZuID0gZGVib3VuY2UoKGV2dDogRXZlbnQpID0+IHtcclxuICAgICAgICAvLyDph43mlrDmn6Xmib7lr7nlupTnmoQgY29sdW1u77yM56Gu5L+d5L2/55So5pyA5paw55qE6YWN572uXHJcbiAgICAgICAgY29uc3QgY3VycmVudENvbHVtbiA9IHRoaXMuX3NlYXJjaEZpbGVkQ29sdW1ucy5maW5kKFxyXG4gICAgICAgICAgKGNvbCkgPT4gKGNvbC5maWVsZFByb3BzPy5uYW1lIHx8IGNvbC5wcm9wKSA9PT0gZmllbGRLZXksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY3VycmVudENvbHVtbikge1xyXG4gICAgICAgICAgdGhpcy5leGVjdXRlQXV0b0NvbXBsZXRlRGF0YVNvdXJjZShldnQsIGN1cnJlbnRDb2x1bW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgMzAwKTsgLy8gMzAwbXMg6Ziy5oqW5bu26L+fXHJcbiAgICAgIHRoaXMuX2F1dG9Db21wbGV0ZURlYm91bmNlTWFwLnNldChmaWVsZEtleSwgZGVib3VuY2VkRm4pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOiwg+eUqOmYsuaKluWHveaVsFxyXG4gICAgY29uc3QgZGVib3VuY2VkRm4gPSB0aGlzLl9hdXRvQ29tcGxldGVEZWJvdW5jZU1hcC5nZXQoZmllbGRLZXkpO1xyXG4gICAgaWYgKGRlYm91bmNlZEZuKSB7XHJcbiAgICAgIGRlYm91bmNlZEZuKGV2ZW50KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOiOt+WPliBhdXRvQ29tcGxldGUg55qE5pWw5o2u5rqQXHJcbiAgZ2V0QXV0b0NvbXBsZXRlRGF0YVNvdXJjZShjb2x1bW46IFByb1RhYmxlQ29sdW1uKTogYW55W10ge1xyXG4gICAgY29uc3QgZmllbGRLZXkgPSBjb2x1bW4uZmllbGRQcm9wcz8ubmFtZSB8fCBjb2x1bW4ucHJvcDtcclxuICAgIHJldHVybiB0aGlzLl9hdXRvQ29tcGxldGVEYXRhU291cmNlc1tmaWVsZEtleV0gfHwgW107XHJcbiAgfVxyXG5cclxuICBnZXRGaWVsZFByb3BzKGNvbHVtbjogUHJvVGFibGVDb2x1bW4pOiBhbnkge1xyXG4gICAgcmV0dXJuIGNvbHVtbi5maWVsZFByb3BzO1xyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+W5oyH5a6a5ZCN56ew55qEbGFiZWzmqKHmnb9cclxuICBnZXRMYWJlbFRlbXBsYXRlKG5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsIHtcclxuICAgIGlmICghbmFtZSkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5jdXN0b21UZW1wbGF0ZXMuZ2V0KG5hbWUpIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICAvLyDojrflj5YgZm9ybS1pdGVtIOeahOWKqOaAgeexu+WQjVxyXG4gIGdldEZvcm1JdGVtQ2xhc3NOYW1lKGNvbHVtbjogUHJvVGFibGVDb2x1bW4pOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5nZXRGaWVsZFByb3BzKGNvbHVtbikubmFtZSB8fCBjb2x1bW4ucHJvcDtcclxuICAgIHJldHVybiBgcHJvLXRhYmxlLSR7ZmllbGROYW1lfS1mb3JtLWl0ZW1gO1xyXG4gIH1cclxufVxyXG4iLCI8YXBwLXBhZ2UtY29udGFpbmVyXHJcbiAgW3RpdGxlXT1cInRpdGxlXCJcclxuICBbc2hvd0hlYWRlcl09XCJzaG93U2VhcmNoQmFyXCJcclxuICBuZ0NsYXNzPVwicHJvLXRhYmxlLWNvbnRhaW5lclwiXHJcbj5cclxuICA8bmctdGVtcGxhdGUgI2hlYWRlcj5cclxuICAgIDxhcHAtdGFibGUtc2VhcmNoLWJhclxyXG4gICAgICAqbmdJZj1cInNob3dTZWFyY2hCYXJcIlxyXG4gICAgICBbbGFiZWxXaWR0aF09XCJsYWJlbFdpZHRoXCJcclxuICAgICAgW2xhYmVsQWxpZ25dPVwibGFiZWxBbGlnblwiXHJcbiAgICAgIFtmb3JtSXRlbVdpZHRoXT1cImZvcm1JdGVtV2lkdGhcIlxyXG4gICAgPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2xlZnRDb250ZW50PlxyXG4gICAgICAgIDxuei1mb3JtLWl0ZW1cclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgX3NlYXJjaEZpbGVkQ29sdW1uc1wiXHJcbiAgICAgICAgICBbbmdDbGFzc109XCJnZXRGb3JtSXRlbUNsYXNzTmFtZShjb2x1bW4pXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8bnotZm9ybS1sYWJlbCAqbmdJZj1cIiFnZXRGaWVsZFByb3BzKGNvbHVtbikuaGlkZUxhYmVsXCIgbnpOb0NvbG9uPlxyXG4gICAgICAgICAgICA8IS0tIOajgOafpeaYr+WQpuacieiHquWumuS5iWxhYmVs5qih5p2/IC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5jdXN0b21MYWJlbFJlbmRlciAmJlxyXG4gICAgICAgICAgICAgICAgICBnZXRMYWJlbFRlbXBsYXRlKGNvbHVtbi5jdXN0b21MYWJlbFJlbmRlcik7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGRlZmF1bHRMYWJlbFxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRMYWJlbFRlbXBsYXRlKGNvbHVtbi5jdXN0b21MYWJlbFJlbmRlcilcIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntcclxuICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2x1bW4sXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxyXG4gICAgICAgICAgICAgICAgICBmaWVsZFByb3BzOiBnZXRGaWVsZFByb3BzKGNvbHVtbilcclxuICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdExhYmVsPlxyXG4gICAgICAgICAgICAgIHt7IGdldEZpZWxkUHJvcHMoY29sdW1uKS5sYWJlbCB8fCBjb2x1bW4udGl0bGUgfX1cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDwvbnotZm9ybS1sYWJlbD5cclxuICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2wgKm5nSWY9XCJjb2x1bW4udmFsdWVUeXBlID09PSAnaW5wdXQnXCI+XHJcbiAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgIG56LWlucHV0XHJcbiAgICAgICAgICAgICAgW25hbWVdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5hbWUgfHwgY29sdW1uLnByb3BcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikucGxhY2VIb2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiXHJcbiAgICAgICAgICAgICAgICBfc2VhcmNoUGFyYW1zW2dldEZpZWxkUHJvcHMoY29sdW1uKS5uYW1lIHx8IGNvbHVtbi5wcm9wXVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cclxuICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2wgKm5nSWY9XCJjb2x1bW4udmFsdWVUeXBlID09PSAnaW5wdXRQbGF0ZSdcIj5cclxuICAgICAgICAgICAgPGFwcC1wbGF0ZS1pbnB1dFxyXG4gICAgICAgICAgICAgIFtuYW1lXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5uYW1lIHx8IGNvbHVtbi5wcm9wXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIlxyXG4gICAgICAgICAgICAgICAgX3NlYXJjaFBhcmFtc1tnZXRGaWVsZFByb3BzKGNvbHVtbikubmFtZSB8fCBjb2x1bW4ucHJvcF1cclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+PC9hcHAtcGxhdGUtaW5wdXQ+XHJcbiAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cclxuICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2wgKm5nSWY9XCJjb2x1bW4udmFsdWVUeXBlID09PSAnc2VsZWN0J1wiPlxyXG4gICAgICAgICAgICA8bnotc2VsZWN0XHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJcclxuICAgICAgICAgICAgICAgIF9zZWFyY2hQYXJhbXNbZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5hbWUgfHwgY29sdW1uLnByb3BdXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbbnpBbGxvd0NsZWFyXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5hbGxvd0NsZWFyXCJcclxuICAgICAgICAgICAgICBbbnpQbGFjZUhvbGRlcl09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikucGxhY2VIb2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtuYW1lXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5uYW1lIHx8IGNvbHVtbi5wcm9wXCJcclxuICAgICAgICAgICAgICBbbnpPcHRpb25zXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5vcHRpb25zXCJcclxuICAgICAgICAgICAgICBbbnpEaXNhYmxlZF09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbnotc2VsZWN0PlxyXG4gICAgICAgICAgPC9uei1mb3JtLWNvbnRyb2w+XHJcbiAgICAgICAgICA8bnotZm9ybS1jb250cm9sICpuZ0lmPVwiY29sdW1uLnZhbHVlVHlwZSA9PT0gJ3NlbGVjdE11bHRpcGxlJ1wiPlxyXG4gICAgICAgICAgICA8bnotc2VsZWN0XHJcbiAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJcclxuICAgICAgICAgICAgICAgIF9zZWFyY2hQYXJhbXNbZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5hbWUgfHwgY29sdW1uLnByb3BdXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbbnpBbGxvd0NsZWFyXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5hbGxvd0NsZWFyXCJcclxuICAgICAgICAgICAgICBbbnpQbGFjZUhvbGRlcl09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikucGxhY2VIb2xkZXJcIlxyXG4gICAgICAgICAgICAgIFtuYW1lXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5uYW1lIHx8IGNvbHVtbi5wcm9wXCJcclxuICAgICAgICAgICAgICBbbnpPcHRpb25zXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5vcHRpb25zXCJcclxuICAgICAgICAgICAgICBbbnpEaXNhYmxlZF09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIG56TW9kZT1cIm11bHRpcGxlXCJcclxuICAgICAgICAgICAgICBbbnpNYXhUYWdDb3VudF09XCIyXCJcclxuICAgICAgICAgICAgICBbbnpNYXhUYWdQbGFjZWhvbGRlcl09XCJuek1heFRhZ1BsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICBbbnpDdXN0b21UZW1wbGF0ZV09XCJkZWZhdWx0VGVtcGxhdGVcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNuek1heFRhZ1BsYWNlaG9sZGVyPlxyXG4gICAgICAgICAgICAgICAgK1xyXG4gICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgX3NlYXJjaFBhcmFtc1tnZXRGaWVsZFByb3BzKGNvbHVtbikubmFtZSB8fCBjb2x1bW4ucHJvcF1cclxuICAgICAgICAgICAgICAgICAgICA/Lmxlbmd0aFxyXG4gICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFRlbXBsYXRlIGxldC1zZWxlY3RlZD5cclxuICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkLm56TGFiZWwubGVuZ3RoID4gNCA/IHNlbGVjdGVkLm56TGFiZWwuc3Vic3RyaW5nKDAsIDQpICsgJy4uLicgOiBzZWxlY3RlZC5uekxhYmVsIH19XHJcbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9uei1zZWxlY3Q+XHJcbiAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cclxuICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2wgKm5nSWY9XCJjb2x1bW4udmFsdWVUeXBlID09PSAnZGF0ZSdcIj5cclxuICAgICAgICAgICAgPG56LWRhdGUtcGlja2VyXHJcbiAgICAgICAgICAgICAgW256U2hvd1RpbWVdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLnNob3dUaW1lXCJcclxuICAgICAgICAgICAgICBbbnpGb3JtYXRdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLmZvcm1hdFwiXHJcbiAgICAgICAgICAgICAgW256UGxhY2VIb2xkZXJdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLnBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgICBbbnpBbGxvd0NsZWFyXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5hbGxvd0NsZWFyXCJcclxuICAgICAgICAgICAgICBbbnpEaXNhYmxlZF09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiXHJcbiAgICAgICAgICAgICAgICBfc2VhcmNoUGFyYW1zW2dldEZpZWxkUHJvcHMoY29sdW1uKS5uYW1lIHx8IGNvbHVtbi5wcm9wXVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW256TW9kZV09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikubW9kZVwiXHJcbiAgICAgICAgICAgID48L256LWRhdGUtcGlja2VyPlxyXG4gICAgICAgICAgPC9uei1mb3JtLWNvbnRyb2w+XHJcbiAgICAgICAgICA8bnotZm9ybS1jb250cm9sICpuZ0lmPVwiY29sdW1uLnZhbHVlVHlwZSA9PT0gJ2NoZWNrYm94J1wiPlxyXG4gICAgICAgICAgICA8bnotY2hlY2tib3gtZ3JvdXBcclxuICAgICAgICAgICAgICBbY2xhc3NdPVwiXHJcbiAgICAgICAgICAgICAgICBnZXRGaWVsZFByb3BzKGNvbHVtbikubm9TdHlsZVxyXG4gICAgICAgICAgICAgICAgICA/ICdwcm8tdGFibGUtY2hlY2tib3hncm91cC1ub3N0eWxlJ1xyXG4gICAgICAgICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5vcHRpb25zXCJcclxuICAgICAgICAgICAgICBbbnpEaXNhYmxlZF09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikuZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIlxyXG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGVja0JveENoYW5nZShcclxuICAgICAgICAgICAgICAgICAgJGV2ZW50LFxyXG4gICAgICAgICAgICAgICAgICBnZXRGaWVsZFByb3BzKGNvbHVtbikubmFtZSB8fCBjb2x1bW4ucHJvcFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L256LWNoZWNrYm94LWdyb3VwPlxyXG4gICAgICAgICAgPC9uei1mb3JtLWNvbnRyb2w+XHJcbiAgICAgICAgICA8bnotZm9ybS1jb250cm9sICpuZ0lmPVwiY29sdW1uLnZhbHVlVHlwZSA9PT0gJ2F1dG9Db21wbGV0ZSdcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgbnotaW5wdXRcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIlxyXG4gICAgICAgICAgICAgICAgX3NlYXJjaFBhcmFtc1tnZXRGaWVsZFByb3BzKGNvbHVtbik/Lm5hbWUgfHwgY29sdW1uLnByb3BdXHJcbiAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAoaW5wdXQpPVwiaGFuZGxlQXV0b0NvbXBsZXRlSW5wdXQoJGV2ZW50LCBjb2x1bW4pXCJcclxuICAgICAgICAgICAgICBbbnpBdXRvY29tcGxldGVdPVwiYXV0b1wiXHJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKT8uZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJnZXRGaWVsZFByb3BzKGNvbHVtbik/LnBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPG56LWF1dG9jb21wbGV0ZVxyXG4gICAgICAgICAgICAgIFtuekJhY2tmaWxsXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5iYWNrRmlsbFwiXHJcbiAgICAgICAgICAgICAgW256RGVmYXVsdEFjdGl2ZUZpcnN0T3B0aW9uXT1cIlxyXG4gICAgICAgICAgICAgICAgZ2V0RmllbGRQcm9wcyhjb2x1bW4pLmRlZmF1bHRBY3RpdmVGaXJzdE9wdGlvblxyXG4gICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgW256V2lkdGhdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLndpZHRoXCJcclxuICAgICAgICAgICAgICAjYXV0b1xyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG56LWF1dG8tb3B0aW9uXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGdldEF1dG9Db21wbGV0ZURhdGFTb3VyY2UoY29sdW1uKVwiXHJcbiAgICAgICAgICAgICAgICBbbnpWYWx1ZV09XCJcclxuICAgICAgICAgICAgICAgICAgZ2V0RmllbGRQcm9wcyhjb2x1bW4pLnJldHVybkZ1bGxEYXRhID8gb3B0aW9uIDogb3B0aW9uLnZhbHVlXHJcbiAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgW256TGFiZWxdPVwib3B0aW9uLmxhYmVsXCJcclxuICAgICAgICAgICAgICAgIFtuekRpc2FibGVkXT1cIm9wdGlvbi5kaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgb3B0aW9uLmxhYmVsIH19XHJcbiAgICAgICAgICAgICAgPC9uei1hdXRvLW9wdGlvbj5cclxuICAgICAgICAgICAgPC9uei1hdXRvY29tcGxldGU+XHJcbiAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cclxuICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2wgKm5nSWY9XCJjb2x1bW4udmFsdWVUeXBlID09PSAnY3VzdG9tJ1wiPlxyXG4gICAgICAgICAgICA8YXBwLWR5bmFtaWMtc2VhcmNoLWZpZWxkXHJcbiAgICAgICAgICAgICAgW2NvbXBvbmVudF09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikuY29tcG9uZW50XCJcclxuICAgICAgICAgICAgICBbdmFsdWVdPVwiX3NlYXJjaFBhcmFtc1tnZXRGaWVsZFByb3BzKGNvbHVtbikubmFtZSB8fCBjb2x1bW4ucHJvcF1cIlxyXG4gICAgICAgICAgICAgIFtwcm9wc109XCJnZXRGaWVsZFByb3BzKGNvbHVtbilcIlxyXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJcclxuICAgICAgICAgICAgICAgIHNldEZpZWxkVmFsdWUoZ2V0RmllbGRQcm9wcyhjb2x1bW4pLm5hbWUgfHwgY29sdW1uLnByb3AsICRldmVudClcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+PC9hcHAtZHluYW1pYy1zZWFyY2gtZmllbGQ+XHJcbiAgICAgICAgICA8L256LWZvcm0tY29udHJvbD5cclxuICAgICAgICAgIDxuei1mb3JtLWNvbnRyb2wgKm5nSWY9XCJjb2x1bW4udmFsdWVUeXBlID09PSAnaW5wdXROdW1iZXInXCI+XHJcbiAgICAgICAgICAgIDxuei1pbnB1dC1udW1iZXJcclxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiJzEwMCUnXCJcclxuICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIlxyXG4gICAgICAgICAgICAgICAgX3NlYXJjaFBhcmFtc1tnZXRGaWVsZFByb3BzKGNvbHVtbikubmFtZSB8fCBjb2x1bW4ucHJvcF1cclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgIFtuelBsYWNlSG9sZGVyXT1cImdldEZpZWxkUHJvcHMoY29sdW1uKS5wbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgICAgW256RGlzYWJsZWRdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICBbbnpGb3JtYXR0ZXJdPVwiZ2V0RmllbGRQcm9wcyhjb2x1bW4pLmZvcm1hdHRlclBlcmNlbnRcIlxyXG4gICAgICAgICAgICAgIFtuelBhcnNlcl09XCJnZXRGaWVsZFByb3BzKGNvbHVtbikucGFyc2VyUGVyY2VudFwiXHJcbiAgICAgICAgICAgID48L256LWlucHV0LW51bWJlcj5cclxuICAgICAgICAgIDwvbnotZm9ybS1jb250cm9sPlxyXG4gICAgICAgIDwvbnotZm9ybS1pdGVtPlxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8bmctdGVtcGxhdGUgI2FjdGlvblRleHRCdG4+XHJcbiAgICAgICAgPG56LXNwYWNlIFtuelNpemVdPVwiNFwiPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG56U3BhY2VJdGVtICpuZ0lmPVwic2hvd1NlYXJjaEJ0blwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uIG56LWJ1dHRvbiBuelR5cGU9XCJwcmltYXJ5XCIgKGNsaWNrKT1cImhhbmRsZVNlYXJjaCgpXCI+XHJcbiAgICAgICAgICAgICAge3sgY29uZmlybUJ0blRleHQgfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG56U3BhY2VJdGVtICpuZ0lmPVwic2hvd0NsZWFyQnRuXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gbnotYnV0dG9uIChjbGljayk9XCJoYW5kbGVSZXNldEZvcm0oKVwiPlxyXG4gICAgICAgICAgICAgIHt7IGNsZWFyQnRuVGV4dCB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPC9uei1zcGFjZT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPG5nLXRlbXBsYXRlICNhY3Rpb25JbWdCdG4+XHJcbiAgICAgICAgPG56LXNwYWNlPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImltZ0FjdGlvbkJhclRwbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgPG5nLXRlbXBsYXRlIG56U3BhY2VJdGVtIGNsYXNzPVwic2V0dGluZy1zcGFjZS1pdGVtXCIgKm5nSWY9XCJzaG93Q29sdW1uU2V0dGluZ1wiPlxyXG4gICAgICAgICAgICA8c3BhbiBuei10b29sdGlwIG56VG9vbHRpcFRpdGxlPVwi6K6+572u5a2X5q61XCI+XHJcbiAgICAgICAgICAgICAgPGFwcC1jb2xtdW5zLXNldHRpbmdcclxuICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkQ29sdW1uc109XCJfc2VydmVyQ29sdW1uc1wiXHJcbiAgICAgICAgICAgICAgICBbdGFibGVOYW1lXT1cInRhYmxlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAoYWZ0ZXJDb25maXJtKT1cImhhbmRsZUNvbHVtbnNTZXR0aW5nQ29uZmlybSgpXCJcclxuICAgICAgICAgICAgICA+PC9hcHAtY29sbXVucy1zZXR0aW5nPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgIDwvbnotc3BhY2U+XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2FwcC10YWJsZS1zZWFyY2gtYmFyPlxyXG4gIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gIDxuZy10ZW1wbGF0ZSAjYm9keT5cclxuICAgIDxkaXYgY2xhc3M9XCJtYi00XCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93QWN0aW9uQmFyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFjdGlvbkJhclRwbFwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVRhYmxlUmVuZGVyXCI+XHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjdXN0b21UYWJsZVJlbmRlclwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8bnotdGFibGVcclxuICAgICAgKm5nSWY9XCIhY3VzdG9tVGFibGVSZW5kZXIgJiYgX3Nob3dUYWJsZVwiXHJcbiAgICAgICNkeW5hbWljVGFibGVcclxuICAgICAgbnpTaXplPVwic21hbGxcIlxyXG4gICAgICBuelNob3dTaXplQ2hhbmdlclxyXG4gICAgICBbbnpCb3JkZXJlZF09XCJib3JkZXJlZFwiXHJcbiAgICAgIFtuek91dGVyQm9yZGVyZWRdPVwib3V0ZXJCb3JkZXJlZFwiXHJcbiAgICAgIFtuekRhdGFdPVwiZGF0YVNvdXJjZVwiXHJcbiAgICAgIFtuelBhZ2VJbmRleF09XCJfcGFnZUluZm8ucGFnZUluZGV4XCJcclxuICAgICAgW256UGFnZVNpemVdPVwiX3BhZ2VJbmZvLnBhZ2VTaXplXCJcclxuICAgICAgW256VG90YWxdPVwiX3BhZ2VJbmZvLnRvdGFsXCJcclxuICAgICAgW256UGFnZVNpemVPcHRpb25zXT1cIl9wYWdlSW5mby5wYWdlU2l6ZU9wdGlvbnNcIlxyXG4gICAgICBbbnpTaG93UGFnaW5hdGlvbl09XCJzaG93UGFnaW5hdGlvblwiXHJcbiAgICAgIFtuelNob3dUb3RhbF09XCJ0b3RhbFRlbXBsYXRlXCJcclxuICAgICAgW256TG9hZGluZ109XCJfbG9hZGluZ1wiXHJcbiAgICAgIFtuekZyb250UGFnaW5hdGlvbl09XCJmcm9udFBhZ2luYXRpb25cIlxyXG4gICAgICBbbnpTY3JvbGxdPVwic2Nyb2xsXCJcclxuICAgICAgKG56UGFnZUluZGV4Q2hhbmdlKT1cImhhbmRsZVBhZ2VJbmRleENoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgKG56UGFnZVNpemVDaGFuZ2UpPVwiaGFuZGxlUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICA+XHJcbiAgICAgIDx0aGVhZD5cclxuICAgICAgICA8dHI+XHJcbiAgICAgICAgICA8IS0tIOWkjemAieahhuWIl++8iOW9kyBzaG93Q2hlY2tib3g9dHJ1ZSDml7bmmL7npLrvvIkgLS0+XHJcbiAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgKm5nSWY9XCJzaG93Q2hlY2tib3hcIlxyXG4gICAgICAgICAgICBbbnpXaWR0aF09XCInNTBweCdcIlxyXG4gICAgICAgICAgICBbbnpBbGlnbl09XCInY2VudGVyJ1wiXHJcbiAgICAgICAgICAgIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyXCJcclxuICAgICAgICAgICAgWyhuekNoZWNrZWQpXT1cIl9jaGVja2VkQWxsXCJcclxuICAgICAgICAgICAgW256SW5kZXRlcm1pbmF0ZV09XCJfaW5kZXRlcm1pbmF0ZVwiXHJcbiAgICAgICAgICAgIChuekNoZWNrZWRDaGFuZ2UpPVwidG9nZ2xlQ2hlY2tBbGwoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgPjwvdGg+XHJcbiAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBfY29sdW1uc1wiXHJcbiAgICAgICAgICAgIFtueldpZHRoXT1cImNvbHVtbi53aWR0aFwiXHJcbiAgICAgICAgICAgIFtuekFsaWduXT1cImNvbHVtbi5hbGlnblwiXHJcbiAgICAgICAgICAgIFtuekxlZnRdPVwiY29sdW1uLmZpeGVkTGVmdFwiXHJcbiAgICAgICAgICAgIFtuelJpZ2h0XT1cImNvbHVtbi5maXhlZFJpZ2h0XCJcclxuICAgICAgICAgICAgW256U2hvd1NvcnRdPVwiISFjb2x1bW4uc29ydGVyXCJcclxuICAgICAgICAgICAgW256U29ydE9yZGVyXT1cImdldFNvcnRPcmRlcihjb2x1bW4ucHJvcClcIlxyXG4gICAgICAgICAgICAobnpTb3J0T3JkZXJDaGFuZ2UpPVwib25Tb3J0Q2hhbmdlKGNvbHVtbi5wcm9wLCAkZXZlbnQpXCJcclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3sgY29sdW1uLnRpdGxlIH19XHJcbiAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGhlYWQ+XHJcblxyXG4gICAgICA8dGJvZHk+XHJcbiAgICAgICAgPHRyXHJcbiAgICAgICAgICBzdHlsZT1cImN1cnNvcjogcG9pbnRlclwiXHJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgZGF0YTsgbGV0IGkgPSBpbmRleDsgb2Y6IGR5bmFtaWNUYWJsZS5kYXRhXCJcclxuICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgJ2FudC10YWJsZS1jdXN0b20tcm93LXNlbGVjdGVkJzogISFnZXRUYWJsZVJvd0NoZWNrZWQoZGF0YSksXHJcbiAgICAgICAgICAgICdhbnQtdGFibGUtY3VzdG9tLXJvdy1ldmVuJzogaSAlIDIgPT09IDAsXHJcbiAgICAgICAgICAgICdhbnQtdGFibGUtY3VzdG9tLXJvdy1vZGQnOiBpICUgMiAhPT0gMFxyXG4gICAgICAgICAgfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlVGFibGVSb3dDbGljayhkYXRhKVwiXHJcbiAgICAgICAgICAoZGJsY2xpY2spPVwiaGFuZGxlVGFibGVSb3dEYkNsaWNrKGRhdGEpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8IS0tIOWkjemAieahhuWIl++8iOW9kyBzaG93Q2hlY2tib3g9dHJ1ZSDml7bmmL7npLrvvIkgLS0+XHJcbiAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgKm5nSWY9XCJzaG93Q2hlY2tib3hcIlxyXG4gICAgICAgICAgICBbbnpBbGlnbl09XCInY2VudGVyJ1wiXHJcbiAgICAgICAgICAgIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyOyB3aWR0aDogNTBweFwiXHJcbiAgICAgICAgICAgIFsobnpDaGVja2VkKV09XCJkYXRhLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICBbbnpEaXNhYmxlZF09XCJpc1Jvd0Rpc2FibGVkKGRhdGEpXCJcclxuICAgICAgICAgICAgKG56Q2hlY2tlZENoYW5nZSk9XCJoYW5kbGVSb3dDaGVja2VkQ2hhbmdlKGRhdGEsICRldmVudClcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcclxuICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgX2NvbHVtbnNcIlxyXG4gICAgICAgICAgICBbbnpMZWZ0XT1cImNvbHVtbi5maXhlZExlZnRcIlxyXG4gICAgICAgICAgICBbbnpSaWdodF09XCJjb2x1bW4uZml4ZWRSaWdodFwiXHJcbiAgICAgICAgICAgIFtuekFsaWduXT1cImNvbHVtbi5hbGlnblwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAncHJvLW5vd3JhcCc6IHRydWVcclxuICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwhLS0g5qOA5p+l5piv5ZCm5pyJ6Ieq5a6a5LmJ5qih5p2/IC0tPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgIGNvbHVtbi5jdXN0b21SZW5kZXIgJiYgZ2V0VGVtcGxhdGUoY29sdW1uLmN1c3RvbVJlbmRlcik7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGVtcGxhdGVcclxuICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xyXG4gICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sdW1uLFxyXG4gICAgICAgICAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgICAgICAgICAgcGFnZUluZm86IF9wYWdlSW5mb1xyXG4gICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSDpu5jorqTmuLLmn5PpgLvovpEgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAqbmdJZj1cIiFjb2x1bW4uY3VzdG9tUmVuZGVyIHx8ICFnZXRUZW1wbGF0ZShjb2x1bW4uY3VzdG9tUmVuZGVyKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmVsbGlwc2lzXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvLWVsbGlwc2lzXCJcclxuICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cImRhdGFbY29sdW1uLnByb3BdXCJcclxuICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAnY2FsYygnICsgY29sdW1uLndpZHRoICsgJyAtIDI1cHgpJ1xyXG4gICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgZGF0YVtjb2x1bW4ucHJvcF0gfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uLmVsbGlwc2lzXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXRhW2NvbHVtbi5wcm9wXSB9fVxyXG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgPC90cj5cclxuICAgICAgICA8dHIgKm5nSWY9XCJzdW1tYXJ5RGF0YSAmJiBfcGFnZUluZm8udG90YWwgPiAwXCI+XHJcbiAgICAgICAgICA8IS0tIOaxh+aAu+ihjOeahOWkjemAieahhuWIl++8iOW9kyBzaG93Q2hlY2tib3g9dHJ1ZSDml7bmmL7npLrvvIzkvYbkuLrnqbrvvIkgLS0+XHJcbiAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgKm5nSWY9XCJzaG93Q2hlY2tib3hcIlxyXG4gICAgICAgICAgICBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkOyBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZThlOGU4XCJcclxuICAgICAgICAgID48L3RkPlxyXG4gICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjb2x1bW47IGxldCBpID0gaW5kZXg7IG9mOiBfY29sdW1uc1wiXHJcbiAgICAgICAgICAgIFtuekxlZnRdPVwiY29sdW1uLmZpeGVkTGVmdFwiXHJcbiAgICAgICAgICAgIFtuelJpZ2h0XT1cImNvbHVtbi5maXhlZFJpZ2h0XCJcclxuICAgICAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2U4ZThlOFwiXHJcbiAgICAgICAgICAgIFtuekFsaWduXT1cImNvbHVtbi5hbGlnblwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaSA9PT0gMFwiPuaAu+iuoTwvc3Bhbj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImkgIT09IDAgJiYgY29sdW1uLnN1bW1hcnlcIj5cclxuICAgICAgICAgICAgICB7e1xyXG4gICAgICAgICAgICAgICAgY29sdW1uLnN1bW1hcnk/LmZvcm1hdFxyXG4gICAgICAgICAgICAgICAgICA/IGNvbHVtbi5zdW1tYXJ5Py5mb3JtYXQoXHJcbiAgICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5RGF0YVtjb2x1bW4uc3VtbWFyeT8ubmFtZSB8fCBjb2x1bW4ucHJvcF1cclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgIDogc3VtbWFyeURhdGFbY29sdW1uLnN1bW1hcnk/Lm5hbWUgfHwgY29sdW1uLnByb3BdXHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICA8L3RkPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICAgIDwvdGJvZHk+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSAjdG90YWxUZW1wbGF0ZSBsZXQtdG90YWxcclxuICAgICAgICA+5YWxIHt7IF9wYWdlSW5mby50b3RhbCB9fSDmnaHorrDlvZU8L25nLXRlbXBsYXRlXHJcbiAgICAgID5cclxuICAgIDwvbnotdGFibGU+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuPC9hcHAtcGFnZS1jb250YWluZXI+XHJcbiJdfQ==
|