@yibozhang/pro-table 16.1.8 → 16.1.9

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.
Files changed (62) hide show
  1. package/esm2022/lib/components/colmuns-setting/colmuns-setting.component.mjs +9 -12
  2. package/esm2022/lib/components/dynamic-search-field/dynamic-search-field.component.mjs +9 -12
  3. package/esm2022/lib/directives/trim-input.directive.mjs +3 -5
  4. package/esm2022/lib/directives/trim-input.module.mjs +4 -4
  5. package/esm2022/lib/page-container/page-container.component.mjs +7 -8
  6. package/esm2022/lib/page-container/page-container.module.mjs +6 -6
  7. package/esm2022/lib/page-public/antd-form.mjs +23 -25
  8. package/esm2022/lib/page-public/array-form.mjs +6 -5
  9. package/esm2022/lib/plate-input/plate-input.component.mjs +11 -15
  10. package/esm2022/lib/plate-input/plate-input.module.mjs +6 -6
  11. package/esm2022/lib/plate-input/plate-prefix-load.service.mjs +4 -5
  12. package/esm2022/lib/pro-table.component.mjs +74 -82
  13. package/esm2022/lib/pro-table.module.mjs +6 -6
  14. package/esm2022/lib/table-search-bar/table-search-bar-module.mjs +6 -6
  15. package/esm2022/lib/table-search-bar/table-search-bar.component.mjs +11 -13
  16. package/fesm2022/yibozhang-pro-table.mjs +170 -195
  17. package/fesm2022/yibozhang-pro-table.mjs.map +1 -1
  18. package/index.d.ts +0 -1
  19. package/lib/components/colmuns-setting/colmuns-setting.component.d.ts +0 -1
  20. package/lib/components/dynamic-search-field/dynamic-search-field.component.d.ts +0 -1
  21. package/lib/constants.d.ts +0 -1
  22. package/lib/directives/trim-input.directive.d.ts +0 -1
  23. package/lib/directives/trim-input.module.d.ts +0 -1
  24. package/lib/page-container/page-container.component.d.ts +0 -1
  25. package/lib/page-container/page-container.module.d.ts +0 -1
  26. package/lib/page-public/antd-form.d.ts +0 -1
  27. package/lib/page-public/array-form.d.ts +0 -1
  28. package/lib/plate-input/plate-input.component.d.ts +0 -1
  29. package/lib/plate-input/plate-input.module.d.ts +0 -1
  30. package/lib/plate-input/plate-prefix-load.service.d.ts +0 -1
  31. package/lib/pro-table.component.d.ts +0 -1
  32. package/lib/pro-table.module.d.ts +0 -1
  33. package/lib/table-search-bar/table-search-bar-module.d.ts +0 -1
  34. package/lib/table-search-bar/table-search-bar.component.d.ts +0 -1
  35. package/lib/tokens.d.ts +0 -1
  36. package/lib/type.d.ts +0 -1
  37. package/lib/utils/modal-width-detector.d.ts +0 -1
  38. package/lib/utils/select-width-detector.d.ts +0 -1
  39. package/package.json +1 -1
  40. package/public-api.d.ts +0 -1
  41. package/lib/components/colmuns-setting/colmuns-setting.component.d.ts.map +0 -1
  42. package/lib/components/dynamic-search-field/dynamic-search-field.component.d.ts.map +0 -1
  43. package/lib/constants.d.ts.map +0 -1
  44. package/lib/directives/trim-input.directive.d.ts.map +0 -1
  45. package/lib/directives/trim-input.module.d.ts.map +0 -1
  46. package/lib/page-container/page-container.component.d.ts.map +0 -1
  47. package/lib/page-container/page-container.module.d.ts.map +0 -1
  48. package/lib/page-public/antd-form.d.ts.map +0 -1
  49. package/lib/page-public/array-form.d.ts.map +0 -1
  50. package/lib/plate-input/plate-input.component.d.ts.map +0 -1
  51. package/lib/plate-input/plate-input.module.d.ts.map +0 -1
  52. package/lib/plate-input/plate-prefix-load.service.d.ts.map +0 -1
  53. package/lib/pro-table.component.d.ts.map +0 -1
  54. package/lib/pro-table.module.d.ts.map +0 -1
  55. package/lib/table-search-bar/table-search-bar-module.d.ts.map +0 -1
  56. package/lib/table-search-bar/table-search-bar.component.d.ts.map +0 -1
  57. package/lib/tokens.d.ts.map +0 -1
  58. package/lib/type.d.ts.map +0 -1
  59. package/lib/utils/modal-width-detector.d.ts.map +0 -1
  60. package/lib/utils/select-width-detector.d.ts.map +0 -1
  61. package/public-api.d.ts.map +0 -1
  62. package/yibozhang-pro-table.d.ts.map +0 -1
@@ -5,31 +5,29 @@ import * as i0 from "@angular/core";
5
5
  import * as i1 from "@angular/forms";
6
6
  // ==================== 服务类 ====================
7
7
  export class AntdFormService {
8
- fb;
9
- // ==================== 公共属性 ====================
10
- formStore = {};
11
- formModifyType = "create";
12
- // ==================== 私有属性 ====================
13
- formRegisterStore = {};
14
- labelWidth = "120px";
15
- labelAlign = "right";
16
- labelObservers = {};
17
- errorMessageStore = {};
18
- arrayEditingRows = {};
19
- arrayRowSnapshots = {};
20
- arrayItemConfigs = {};
21
- classPrefix = "ant-form-";
22
- defaultErrorMessages = {
23
- required: "该字段为必填项",
24
- minlength: "输入长度不足",
25
- maxlength: "输入长度超限",
26
- email: "请输入合法的邮箱地址",
27
- pattern: "输入格式不正确",
28
- };
29
8
  // ==================== 构造函数 ====================
30
9
  constructor(fb) {
31
10
  this.fb = fb;
32
- console.log('aaaaaaa');
11
+ // ==================== 公共属性 ====================
12
+ this.formStore = {};
13
+ this.formModifyType = "create";
14
+ // ==================== 私有属性 ====================
15
+ this.formRegisterStore = {};
16
+ this.labelWidth = "120px";
17
+ this.labelAlign = "right";
18
+ this.labelObservers = {};
19
+ this.errorMessageStore = {};
20
+ this.arrayEditingRows = {};
21
+ this.arrayRowSnapshots = {};
22
+ this.arrayItemConfigs = {};
23
+ this.classPrefix = "ant-form-";
24
+ this.defaultErrorMessages = {
25
+ required: "该字段为必填项",
26
+ minlength: "输入长度不足",
27
+ maxlength: "输入长度超限",
28
+ email: "请输入合法的邮箱地址",
29
+ pattern: "输入格式不正确",
30
+ };
33
31
  }
34
32
  // ==================== 表单创建和初始化 ====================
35
33
  // 判断是否为嵌套 FormGroup 配置
@@ -830,11 +828,11 @@ export class AntdFormService {
830
828
  }
831
829
  return valueChanges$.subscribe(handler);
832
830
  }
833
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AntdFormService, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Injectable });
834
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AntdFormService, providedIn: "root" });
831
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AntdFormService, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Injectable }); }
832
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AntdFormService, providedIn: "root" }); }
835
833
  }
836
834
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: AntdFormService, decorators: [{
837
835
  type: Injectable,
838
836
  args: [{ providedIn: "root" }]
839
837
  }], ctorParameters: function () { return [{ type: i1.UntypedFormBuilder }]; } });
840
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50ZC1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvLXRhYmxlL3NyYy9saWIvcGFnZS1wdWJsaWMvYW50ZC1mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUdMLGdCQUFnQixFQUVoQixnQkFBZ0IsR0FFakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQW1GcEUsZ0RBQWdEO0FBR2hELE1BQU0sT0FBTyxlQUFlO0lBOEJOO0lBN0JwQixpREFBaUQ7SUFDakQsU0FBUyxHQUFxQyxFQUFFLENBQUM7SUFDakQsY0FBYyxHQUFtQixRQUFRLENBQUM7SUFFMUMsaURBQWlEO0lBQ3pDLGlCQUFpQixHQUE0QixFQUFFLENBQUM7SUFDaEQsVUFBVSxHQUFXLE9BQU8sQ0FBQztJQUM3QixVQUFVLEdBQVcsT0FBTyxDQUFDO0lBQzdCLGNBQWMsR0FBcUMsRUFBRSxDQUFDO0lBQ3RELGlCQUFpQixHQUdyQixFQUFFLENBQUM7SUFDQyxnQkFBZ0IsR0FBZ0QsRUFBRSxDQUFDO0lBQ25FLGlCQUFpQixHQUdyQixFQUFFLENBQUM7SUFDQyxnQkFBZ0IsR0FBK0MsRUFBRSxDQUFDO0lBQ2xFLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakIsb0JBQW9CLEdBQXVCO1FBQzFELFFBQVEsRUFBRSxTQUFTO1FBQ25CLFNBQVMsRUFBRSxRQUFRO1FBQ25CLFNBQVMsRUFBRSxRQUFRO1FBQ25CLEtBQUssRUFBRSxZQUFZO1FBQ25CLE9BQU8sRUFBRSxTQUFTO0tBQ25CLENBQUM7SUFFRixpREFBaUQ7SUFDakQsWUFBb0IsRUFBc0I7UUFBdEIsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMs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QVUsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDekIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNqRDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFVBQVU7SUFDRiw0QkFBNEIsQ0FDbEMsTUFBeUMsRUFDekMsT0FBMkIsRUFDM0IsT0FBc0I7UUFFdEIsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztRQUV4QyxJQUFJLE9BQU8sRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQzdCLGFBQWEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNwRTtRQUVELElBQUksT0FBTyxFQUFFLG9CQUFvQixLQUFLLEtBQUssRUFBRTtZQUMzQyxhQUFhLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7U0FDNUQ7UUFFRCxJQUFJLE9BQU8sRUFBRSxXQUFXLEVBQUU7WUFDeEIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QjtRQUVELE9BQU8sYUFBYSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO3dHQXhqQ1UsZUFBZTs0R0FBZixlQUFlLGNBREYsTUFBTTs7NEZBQ25CLGVBQWU7a0JBRDNCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIEFic3RyYWN0Q29udHJvbE9wdGlvbnMsXHJcbiAgVW50eXBlZEZvcm1BcnJheSxcclxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXHJcbiAgVW50eXBlZEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JGbixcclxufSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gXCJyeGpzL29wZXJhdG9yc1wiO1xyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT0g57G75Z6L5a6a5LmJID09PT09PT09PT09PT09PT09PT09XHJcblxyXG4vLyDlrZfmrrXplJnor6/mtojmga/nsbvlnovvvIjlrZfnrKbkuLLmiJblh73mlbDvvIlcclxuZXhwb3J0IHR5cGUgRmllbGRFcnJvck1lc3NhZ2UgPVxyXG4gIHwgc3RyaW5nXHJcbiAgfCAoKGNvbnRleHQ6IHsgY29udHJvbDogQWJzdHJhY3RDb250cm9sOyBjb250cm9sTmFtZTogc3RyaW5nIH0pID0+IHN0cmluZyk7XHJcblxyXG4vLyDlrZfmrrXplJnor6/mtojmga/pm4blkIhcclxuZXhwb3J0IHR5cGUgRmllbGRFcnJvck1lc3NhZ2VzID0gUmVjb3JkPHN0cmluZywgRmllbGRFcnJvck1lc3NhZ2U+O1xyXG5cclxuLy8g5a2X5q616YWN572uXHJcbmV4cG9ydCB0eXBlIEZpZWxkQ29uZmlnID0ge1xyXG4gIHZhbHVlOiBhbnk7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIHZhbGlkYXRvcnM/OiAoKSA9PiBWYWxpZGF0b3JGbltdO1xyXG4gIGVycm9yTWVzc2FnZXM/OiBGaWVsZEVycm9yTWVzc2FnZXM7XHJcbn07XHJcblxyXG4vLyDltYzlpZcgRm9ybUdyb3VwIOmFjee9rlxyXG5leHBvcnQgdHlwZSBGb3JtR3JvdXBDb25maWcgPSB7XHJcbiAgdHlwZTogXCJncm91cFwiO1xyXG4gIGZpZWxkczogRm9ybUNvbmZpZztcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgdmFsaWRhdG9ycz86ICgpID0+IFZhbGlkYXRvckZuW107XHJcbiAgZXJyb3JNZXNzYWdlcz86IEZpZWxkRXJyb3JNZXNzYWdlcztcclxufTtcclxuXHJcbi8vIEZvcm1BcnJheSDphY3nva5cclxuZXhwb3J0IHR5cGUgRm9ybUFycmF5Q29uZmlnID0ge1xyXG4gIHR5cGU6IFwiYXJyYXlcIjtcclxuICBpdGVtQ29uZmlnOiBGb3JtQ29uZmlnO1xyXG4gIGluaXRpYWxSb3dzPzogbnVtYmVyO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICB2YWxpZGF0b3JzPzogKCkgPT4gVmFsaWRhdG9yRm5bXTtcclxufTtcclxuXHJcbi8vIOihqOWNleS/ruaUueexu+Wei1xyXG5leHBvcnQgdHlwZSBGb3JtTW9kaWZ5VHlwZSA9IFwiY3JlYXRlXCIgfCBcInVwZGF0ZVwiO1xyXG5cclxuLy8g6KGo5Y2V6YWN572u77yI5pSv5oyB5pmu6YCa5a2X5q6144CB5bWM5aWXIEZvcm1Hcm91cCDlkowgRm9ybUFycmF577yJXHJcbmV4cG9ydCB0eXBlIEZvcm1Db25maWcgPSBSZWNvcmQ8c3RyaW5nLCBGaWVsZENvbmZpZyB8IEZvcm1Hcm91cENvbmZpZyB8IEZvcm1BcnJheUNvbmZpZz47XHJcblxyXG4vLyDnm5HlkKzpgInpoblcclxuZXhwb3J0IHR5cGUgV2F0Y2hPcHRpb25zID0ge1xyXG4gIGRlYm91bmNlPzogbnVtYmVyO1xyXG4gIGRpc3RpbmN0VW50aWxDaGFuZ2VkPzogYm9vbGVhbjtcclxuICBlbWl0SW5pdGlhbD86IGJvb2xlYW47XHJcbn07XHJcblxyXG4vLyDmibnph4/mt7vliqDlrZfmrrXphY3nva7pgInpoblcclxuZXhwb3J0IHR5cGUgQWRkRmllbGRzQ29uZmlnT3B0aW9ucyA9IHtcclxuICBlbWl0RXZlbnQ/OiBib29sZWFuO1xyXG4gIHVwZGF0ZVZhbHVlQW5kVmFsaWRpdHk/OiBib29sZWFuO1xyXG4gIG9uRmllbGRBZGRlZD86IChmaWVsZE5hbWU6IHN0cmluZywgc3VjY2VzczogYm9vbGVhbiwgZXJyb3I/OiBzdHJpbmcpID0+IHZvaWQ7IC8vIOavj+S4quWtl+autea3u+WKoOeahOWbnuiwg1xyXG4gIHRhcmdldFBhdGg/OiBzdHJpbmc7IC8vIOebruagh+i3r+W+hO+8jOeUqOS6juWcqOW1jOWllyBGb3JtR3JvdXAg5YaF6YOo5re75Yqg5a2X5q6177yM5L6L5aaCOiBcImNhcmRCYXNlSW5mb1wiIOaIliBcInVzZXJJbmZvLmFkZHJlc3NJbmZvXCJcclxufTtcclxuXHJcbi8vIOaJuemHj+a3u+WKoOWtl+autemFjee9rue7k+aenFxyXG5leHBvcnQgdHlwZSBBZGRGaWVsZHNDb25maWdSZXN1bHQgPSB7XHJcbiAgc3VjY2VzczogYm9vbGVhbjtcclxuICBhZGRlZDogc3RyaW5nW107IC8vIOaIkOWKn+a3u+WKoOeahOWtl+auteWQjeWIl+ihqFxyXG4gIGZhaWxlZDogQXJyYXk8eyBmaWVsZE5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB9PjsgLy8g5aSx6LSl55qE5a2X5q615Y+K6ZSZ6K+v5L+h5oGvXHJcbn07XHJcblxyXG4vLyDmibnph4/liKDpmaTlrZfmrrXphY3nva7pgInpoblcclxuZXhwb3J0IHR5cGUgUmVtb3ZlRmllbGRzQ29uZmlnT3B0aW9ucyA9IHtcclxuICBlbWl0RXZlbnQ/OiBib29sZWFuO1xyXG4gIG9uRmllbGRSZW1vdmVkPzogKFxyXG4gICAgZmllbGROYW1lOiBzdHJpbmcsXHJcbiAgICBzdWNjZXNzOiBib29sZWFuLFxyXG4gICAgZXJyb3I/OiBzdHJpbmdcclxuICApID0+IHZvaWQ7IC8vIOavj+S4quWtl+auteWIoOmZpOeahOWbnuiwg1xyXG59O1xyXG5cclxuLy8g5om56YeP5Yig6Zmk5a2X5q616YWN572u57uT5p6cXHJcbmV4cG9ydCB0eXBlIFJlbW92ZUZpZWxkc0NvbmZpZ1Jlc3VsdCA9IHtcclxuICBzdWNjZXNzOiBib29sZWFuO1xyXG4gIHJlbW92ZWQ6IHN0cmluZ1tdOyAvLyDmiJDlip/liKDpmaTnmoTlrZfmrrXlkI3liJfooahcclxuICBmYWlsZWQ6IEFycmF5PHsgZmllbGROYW1lOiBzdHJpbmc7IGVycm9yOiBzdHJpbmcgfT47IC8vIOWksei0peeahOWtl+auteWPiumUmeivr+S/oeaBr1xyXG59O1xyXG5cclxuLy8gPT09PT09PT09PT09PT09PT09PT0g5pyN5Yqh57G7ID09PT09PT09PT09PT09PT09PT09XHJcblxyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXHJcbmV4cG9ydCBjbGFzcyBBbnRkRm9ybVNlcnZpY2Uge1xyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOWFrOWFseWxnuaApyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGZvcm1TdG9yZTogUmVjb3JkPHN0cmluZywgVW50eXBlZEZvcm1Hcm91cD4gPSB7fTtcclxuICBmb3JtTW9kaWZ5VHlwZTogRm9ybU1vZGlmeVR5cGUgPSBcImNyZWF0ZVwiO1xyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDnp4HmnInlsZ7mgKcgPT09PT09PT09PT09PT09PT09PT1cclxuICBwcml2YXRlIGZvcm1SZWdpc3RlclN0b3JlOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xyXG4gIHByaXZhdGUgbGFiZWxXaWR0aDogc3RyaW5nID0gXCIxMjBweFwiO1xyXG4gIHByaXZhdGUgbGFiZWxBbGlnbjogc3RyaW5nID0gXCJyaWdodFwiO1xyXG4gIHByaXZhdGUgbGFiZWxPYnNlcnZlcnM6IFJlY29yZDxzdHJpbmcsIE11dGF0aW9uT2JzZXJ2ZXI+ID0ge307XHJcbiAgcHJpdmF0ZSBlcnJvck1lc3NhZ2VTdG9yZTogUmVjb3JkPFxyXG4gICAgc3RyaW5nLFxyXG4gICAgUmVjb3JkPHN0cmluZywgRmllbGRFcnJvck1lc3NhZ2VzPlxyXG4gID4gPSB7fTtcclxuICBwcml2YXRlIGFycmF5RWRpdGluZ1Jvd3M6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIFNldDxudW1iZXI+Pj4gPSB7fTtcclxuICBwcml2YXRlIGFycmF5Um93U25hcHNob3RzOiBSZWNvcmQ8XHJcbiAgICBzdHJpbmcsXHJcbiAgICBSZWNvcmQ8c3RyaW5nLCBNYXA8bnVtYmVyLCBhbnk+PlxyXG4gID4gPSB7fTtcclxuICBwcml2YXRlIGFycmF5SXRlbUNvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIEZvcm1Db25maWc+PiA9IHt9O1xyXG4gIHByaXZhdGUgY2xhc3NQcmVmaXggPSBcImFudC1mb3JtLVwiO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdEVycm9yTWVzc2FnZXM6IEZpZWxkRXJyb3JNZXNzYWdlcyA9IHtcclxuICAgIHJlcXVpcmVkOiBcIuivpeWtl+auteS4uuW/heWhq+mhuVwiLFxyXG4gICAgbWlubGVuZ3RoOiBcIui+k+WFpemVv+W6puS4jei2s1wiLFxyXG4gICAgbWF4bGVuZ3RoOiBcIui+k+WFpemVv+W6pui2hemZkFwiLFxyXG4gICAgZW1haWw6IFwi6K+36L6T5YWl5ZCI5rOV55qE6YKu566x5Zyw5Z2AXCIsXHJcbiAgICBwYXR0ZXJuOiBcIui+k+WFpeagvOW8j+S4jeato+ehrlwiLFxyXG4gIH07XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOaehOmAoOWHveaVsCA9PT09PT09PT09PT09PT09PT09PVxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmI6IFVudHlwZWRGb3JtQnVpbGRlcikge1xyXG4gICAgY29uc29sZS5sb2coJ2FhYWFhYWEnKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOihqOWNleWIm+W7uuWSjOWIneWni+WMliA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyDliKTmlq3mmK/lkKbkuLrltYzlpZcgRm9ybUdyb3VwIOmFjee9rlxyXG4gIHByaXZhdGUgaXNGb3JtR3JvdXBDb25maWcoXHJcbiAgICBjb25maWc6IEZpZWxkQ29uZmlnIHwgRm9ybUdyb3VwQ29uZmlnIHwgRm9ybUFycmF5Q29uZmlnXHJcbiAgKTogY29uZmlnIGlzIEZvcm1Hcm91cENvbmZpZyB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0eXBlb2YgY29uZmlnID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgIGNvbmZpZyAhPT0gbnVsbCAmJlxyXG4gICAgICBcInR5cGVcIiBpbiBjb25maWcgJiZcclxuICAgICAgY29uZmlnLnR5cGUgPT09IFwiZ3JvdXBcIlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIOWIpOaWreaYr+WQpuS4uiBGb3JtQXJyYXkg6YWN572uXHJcbiAgcHJpdmF0ZSBpc0Zvcm1BcnJheUNvbmZpZyhcclxuICAgIGNvbmZpZzogRmllbGRDb25maWcgfCBGb3JtR3JvdXBDb25maWcgfCBGb3JtQXJyYXlDb25maWdcclxuICApOiBjb25maWcgaXMgRm9ybUFycmF5Q29uZmlnIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHR5cGVvZiBjb25maWcgPT09IFwib2JqZWN0XCIgJiZcclxuICAgICAgY29uZmlnICE9PSBudWxsICYmXHJcbiAgICAgIFwidHlwZVwiIGluIGNvbmZpZyAmJlxyXG4gICAgICBjb25maWcudHlwZSA9PT0gXCJhcnJheVwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8g5qC55o2u6Lev5b6E6I635Y+W5bWM5aWX55qEIEZvcm1BcnJheVxyXG4gIHByaXZhdGUgZ2V0TmVzdGVkRm9ybUFycmF5KFxyXG4gICAgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgcGF0aDogc3RyaW5nXHJcbiAgKTogVW50eXBlZEZvcm1BcnJheSB8IG51bGwge1xyXG4gICAgaWYgKCFwYXRoIHx8IHBhdGgudHJpbSgpID09PSBcIlwiKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHBhdGguc3BsaXQoXCIuXCIpLmZpbHRlcigocCkgPT4gcC50cmltKCkgIT09IFwiXCIpO1xyXG4gICAgbGV0IGN1cnJlbnQ6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBmb3JtR3JvdXA7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXRoUGFydHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKCFjdXJyZW50KSByZXR1cm4gbnVsbDtcclxuICAgICAgY29uc3QgcGFydCA9IHBhdGhQYXJ0c1tpXTtcclxuICAgICAgaWYgKGkgPT09IHBhdGhQYXJ0cy5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gKGN1cnJlbnQgYXMgVW50eXBlZEZvcm1Hcm91cCkuZ2V0XHJcbiAgICAgICAgICA/IGN1cnJlbnQuZ2V0KHBhcnQpXHJcbiAgICAgICAgICA6IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkgPyB0YXJnZXQgOiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN1cnJlbnQgPSBjdXJyZW50IGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCA/IGN1cnJlbnQuZ2V0KHBhcnQpIDogbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8g5qC55o2uIGl0ZW1Db25maWcg5Yib5bu6IEZvcm1BcnJheSDnmoTljZXooYwgRm9ybUdyb3VwXHJcbiAgcHJpdmF0ZSBjcmVhdGVBcnJheVJvd0dyb3VwKFxyXG4gICAgaXRlbUNvbmZpZzogRm9ybUNvbmZpZyxcclxuICAgIGRpc2FibGVkPzogYm9vbGVhblxyXG4gICk6IFVudHlwZWRGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuY3JlYXRlTmVzdGVkRm9ybUdyb3VwKGl0ZW1Db25maWcsIGRpc2FibGVkKTtcclxuICB9XHJcblxyXG4gIC8vIOmAkuW9kuWIm+W7uuW1jOWllyBGb3JtR3JvdXBcclxuICBwcml2YXRlIGNyZWF0ZU5lc3RlZEZvcm1Hcm91cChcclxuICAgIGZpZWxkczogRm9ybUNvbmZpZyxcclxuICAgIGRpc2FibGVkPzogYm9vbGVhblxyXG4gICk6IFVudHlwZWRGb3JtR3JvdXAge1xyXG4gICAgY29uc3QgZ3JvdXBDb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuXHJcbiAgICBPYmplY3QuZW50cmllcyhmaWVsZHMpLmZvckVhY2goKFtrZXksIGZpZWxkQ29uZmlnXSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pc0Zvcm1Hcm91cENvbmZpZyhmaWVsZENvbmZpZykpIHtcclxuICAgICAgICAvLyDpgJLlvZLliJvlu7rltYzlpZfnmoQgRm9ybUdyb3VwXHJcbiAgICAgICAgZ3JvdXBDb25maWdba2V5XSA9IHRoaXMuY3JlYXRlTmVzdGVkRm9ybUdyb3VwKFxyXG4gICAgICAgICAgZmllbGRDb25maWcuZmllbGRzLFxyXG4gICAgICAgICAgZmllbGRDb25maWcuZGlzYWJsZWQgPz8gZGlzYWJsZWRcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNGb3JtQXJyYXlDb25maWcoZmllbGRDb25maWcpKSB7XHJcbiAgICAgICAgLy8g5Yib5bu6IEZvcm1BcnJheVxyXG4gICAgICAgIGNvbnN0IHJvd3M6IFVudHlwZWRGb3JtR3JvdXBbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHJvd0NvdW50ID0gZmllbGRDb25maWcuaW5pdGlhbFJvd3MgPz8gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcclxuICAgICAgICAgIHJvd3MucHVzaChcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVBcnJheVJvd0dyb3VwKFxyXG4gICAgICAgICAgICAgIGZpZWxkQ29uZmlnLml0ZW1Db25maWcsXHJcbiAgICAgICAgICAgICAgZmllbGRDb25maWcuZGlzYWJsZWQgPz8gZGlzYWJsZWRcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ3JvdXBDb25maWdba2V5XSA9IHRoaXMuZmIuYXJyYXkocm93cywgZmllbGRDb25maWcudmFsaWRhdG9ycz8uKCkgPz8gW10pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOWIm+W7uuaZrumAmiBGb3JtQ29udHJvbFxyXG4gICAgICAgIGdyb3VwQ29uZmlnW2tleV0gPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBmaWVsZENvbmZpZy52YWx1ZSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZpZWxkQ29uZmlnLmRpc2FibGVkID8/IGRpc2FibGVkID8/IGZhbHNlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZpZWxkQ29uZmlnLnZhbGlkYXRvcnM/LigpID8/IFtdLFxyXG4gICAgICAgIF07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKGdyb3VwQ29uZmlnKTtcclxuICB9XHJcblxyXG4gIC8vIOWIneWni+WMluihqOWNlVxyXG4gIGNyZWF0ZUZvcm1Hcm91cChcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGNvbmZpZzogRm9ybUNvbmZpZyxcclxuICAgIG9wdGlvbnM/OiB7IGxhYmVsV2lkdGg/OiBzdHJpbmc7IGxhYmVsQWxpZ24/OiBzdHJpbmcgfVxyXG4gICk6IFVudHlwZWRGb3JtR3JvdXAge1xyXG4gICAgY29uc3QgZ3JvdXBDb25maWc6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlU3RvcmVbbmFtZV0gPSB7fTtcclxuXHJcbiAgICBPYmplY3QuZW50cmllcyhjb25maWcpLmZvckVhY2goKFtrZXksIGZpZWxkQ29uZmlnXSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5pc0Zvcm1Hcm91cENvbmZpZyhmaWVsZENvbmZpZykpIHtcclxuICAgICAgICAvLyDlpITnkIbltYzlpZcgRm9ybUdyb3VwXHJcbiAgICAgICAgY29uc3QgbmVzdGVkR3JvdXAgPSB0aGlzLmNyZWF0ZU5lc3RlZEZvcm1Hcm91cChcclxuICAgICAgICAgIGZpZWxkQ29uZmlnLmZpZWxkcyxcclxuICAgICAgICAgIGZpZWxkQ29uZmlnLmRpc2FibGVkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBncm91cENvbmZpZ1trZXldID0gbmVzdGVkR3JvdXA7XHJcblxyXG4gICAgICAgIC8vIOWtmOWCqOW1jOWllyBGb3JtR3JvdXAg55qE6ZSZ6K+v5raI5oGv77yI5aaC5p6c6ZyA6KaB77yJXHJcbiAgICAgICAgaWYgKGZpZWxkQ29uZmlnLmVycm9yTWVzc2FnZXMpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlU3RvcmVbbmFtZV1ba2V5XSA9IGZpZWxkQ29uZmlnLmVycm9yTWVzc2FnZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuaXNGb3JtQXJyYXlDb25maWcoZmllbGRDb25maWcpKSB7XHJcbiAgICAgICAgLy8g5aSE55CGIEZvcm1BcnJheVxyXG4gICAgICAgIGNvbnN0IHJvd3M6IFVudHlwZWRGb3JtR3JvdXBbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHJvd0NvdW50ID0gZmllbGRDb25maWcuaW5pdGlhbFJvd3MgPz8gMDtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcclxuICAgICAgICAgIHJvd3MucHVzaChcclxuICAgICAgICAgICAgdGhpcy5jcmVhdGVBcnJheVJvd0dyb3VwKGZpZWxkQ29uZmlnLml0ZW1Db25maWcsIGZpZWxkQ29uZmlnLmRpc2FibGVkKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZ3JvdXBDb25maWdba2V5XSA9IHRoaXMuZmIuYXJyYXkocm93cywgZmllbGRDb25maWcudmFsaWRhdG9ycz8uKCkgPz8gW10pO1xyXG4gICAgICAgIHRoaXMuX2Vuc3VyZUFycmF5SXRlbUNvbmZpZyhuYW1lLCBrZXksIGZpZWxkQ29uZmlnLml0ZW1Db25maWcpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOWkhOeQhuaZrumAmuWtl+autVxyXG4gICAgICAgIGdyb3VwQ29uZmlnW2tleV0gPSBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBmaWVsZENvbmZpZy52YWx1ZSxcclxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZpZWxkQ29uZmlnLmRpc2FibGVkID8/IGZhbHNlLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZpZWxkQ29uZmlnLnZhbGlkYXRvcnM/LigpID8/IFtdLFxyXG4gICAgICAgIF07XHJcbiAgICAgICAgaWYgKGZpZWxkQ29uZmlnLmVycm9yTWVzc2FnZXMpIHtcclxuICAgICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlU3RvcmVbbmFtZV1ba2V5XSA9IGZpZWxkQ29uZmlnLmVycm9yTWVzc2FnZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAob3B0aW9ucz8ubGFiZWxXaWR0aCkge1xyXG4gICAgICB0aGlzLmxhYmVsV2lkdGggPSBvcHRpb25zLmxhYmVsV2lkdGg7XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9ucz8ubGFiZWxBbGlnbikge1xyXG4gICAgICB0aGlzLmxhYmVsQWxpZ24gPSBvcHRpb25zLmxhYmVsQWxpZ247XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1TdG9yZVtuYW1lXSA9IHRoaXMuZmIuZ3JvdXAoZ3JvdXBDb25maWcpO1xyXG4gICAgdGhpcy5mb3JtUmVnaXN0ZXJTdG9yZVtuYW1lXSA9IHRydWU7XHJcbiAgICB0aGlzLnNldENTU1ZhcmlhYmxlc1RvVGFyZ2V0KG5hbWUpO1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0b3JlW25hbWVdO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g6KGo5Y2V5pON5L2cID09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIOmHjee9ruihqOWNlVxyXG4gIHJlc2V0Rm9ybUdyb3VwKG5hbWU6IHN0cmluZywgdmFsdWU/OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybVN0b3JlW25hbWVdPy5yZXNldCh2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyDmo4DmtYvooajljZXmmK/lkKblrozmiJDms6jlhoxcclxuICBpc0Zvcm1SZWdpc3RlcmVkKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybVJlZ2lzdGVyU3RvcmVbbmFtZV0gPz8gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyDplIDmr4Hlr7nlupTnmoTooajljZVcclxuICBkZXN0b3J5KG5hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xyXG4gICAgICAvLyDmuIXnkIbplJnor6/mtojmga/lrZjlgqhcclxuICAgICAgaWYgKHRoaXMuZXJyb3JNZXNzYWdlU3RvcmVbbmFtZV0pIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5lcnJvck1lc3NhZ2VTdG9yZVtuYW1lXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5riF55CG6KGo5Y2V5rOo5YaM5qCH6K6wXHJcbiAgICAgIGlmICh0aGlzLmZvcm1SZWdpc3RlclN0b3JlW25hbWVdKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZm9ybVJlZ2lzdGVyU3RvcmVbbmFtZV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOa4heeQhuihqOWNlee7hO+8iEFuZ3VsYXIg5Lya6Ieq5Yqo5aSE55CGIEZvcm1Hcm91cCDnmoTmuIXnkIbvvIlcclxuICAgICAgaWYgKHRoaXMuZm9ybVN0b3JlW25hbWVdKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZm9ybVN0b3JlW25hbWVdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDmuIXnkIYgRm9ybUFycmF5IOe8lui+keeKtuaAgVxyXG4gICAgICBpZiAodGhpcy5hcnJheUVkaXRpbmdSb3dzW25hbWVdKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuYXJyYXlFZGl0aW5nUm93c1tuYW1lXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5riF55CGIEZvcm1BcnJheSDooYzlv6vnhadcclxuICAgICAgaWYgKHRoaXMuYXJyYXlSb3dTbmFwc2hvdHNbbmFtZV0pIHtcclxuICAgICAgICBkZWxldGUgdGhpcy5hcnJheVJvd1NuYXBzaG90c1tuYW1lXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5riF55CGIEZvcm1BcnJheSBpdGVtQ29uZmlnIOe8k+WtmFxyXG4gICAgICBpZiAodGhpcy5hcnJheUl0ZW1Db25maWdzW25hbWVdKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuYXJyYXlJdGVtQ29uZmlnc1tuYW1lXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvLyDmoLnmja7ot6/lvoTojrflj5bltYzlpZfnmoQgRm9ybUdyb3VwXHJcbiAgcHJpdmF0ZSBnZXROZXN0ZWRGb3JtR3JvdXAoXHJcbiAgICBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICBwYXRoOiBzdHJpbmdcclxuICApOiBVbnR5cGVkRm9ybUdyb3VwIHwgbnVsbCB7XHJcbiAgICBpZiAoIXBhdGggfHwgcGF0aC50cmltKCkgPT09IFwiXCIpIHtcclxuICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KFwiLlwiKS5maWx0ZXIoKHApID0+IHAudHJpbSgpICE9PSBcIlwiKTtcclxuICAgIGxldCBjdXJyZW50R3JvdXA6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBmb3JtR3JvdXA7XHJcblxyXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhdGhQYXJ0cykge1xyXG4gICAgICBpZiAoIWN1cnJlbnRHcm91cCB8fCAhKGN1cnJlbnRHcm91cCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgY3VycmVudEdyb3VwID0gY3VycmVudEdyb3VwLmdldChwYXJ0KTtcclxuICAgICAgaWYgKCFjdXJyZW50R3JvdXAgfHwgIShjdXJyZW50R3JvdXAgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGN1cnJlbnRHcm91cCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXAgPyBjdXJyZW50R3JvdXAgOiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8g5om56YeP5re75Yqg5a2X5q616YWN572uXHJcbiAgYWRkRmllbGRzQ29uZmlnKFxyXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcclxuICAgIGZpZWxkc0NvbmZpZzogRm9ybUNvbmZpZyxcclxuICAgIG9wdGlvbnM/OiBBZGRGaWVsZHNDb25maWdPcHRpb25zXHJcbiAgKTogQWRkRmllbGRzQ29uZmlnUmVzdWx0IHtcclxuICAgIGNvbnN0IHJlc3VsdDogQWRkRmllbGRzQ29uZmlnUmVzdWx0ID0ge1xyXG4gICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICBhZGRlZDogW10sXHJcbiAgICAgIGZhaWxlZDogW10sXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIDEuIOmqjOivgeihqOWNleaYr+WQpuWtmOWcqFxyXG4gICAgY29uc3Qgcm9vdEZvcm1Hcm91cCA9IHRoaXMuZm9ybVN0b3JlW2Zvcm1OYW1lXTtcclxuICAgIGlmICghcm9vdEZvcm1Hcm91cCkge1xyXG4gICAgICAvLyDlpoLmnpzooajljZXkuI3lrZjlnKjvvIzmiYDmnInlrZfmrrXpg73lpLHotKVcclxuICAgICAgT2JqZWN0LmtleXMoZmllbGRzQ29uZmlnKS5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IGBGb3JtIFwiJHtmb3JtTmFtZX1cIiBub3QgZm91bmRgO1xyXG4gICAgICAgIHJlc3VsdC5mYWlsZWQucHVzaCh7XHJcbiAgICAgICAgICBmaWVsZE5hbWUsXHJcbiAgICAgICAgICBlcnJvcixcclxuICAgICAgICB9KTtcclxuICAgICAgICBvcHRpb25zPy5vbkZpZWxkQWRkZWQ/LihmaWVsZE5hbWUsIGZhbHNlLCBlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXN1bHQuc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDIuIOiOt+WPluebruaghyBGb3JtR3JvdXDvvIjmlK/mjIHltYzlpZfot6/lvoTvvIlcclxuICAgIGNvbnN0IHRhcmdldFBhdGggPSBvcHRpb25zPy50YXJnZXRQYXRoO1xyXG4gICAgY29uc3QgdGFyZ2V0Rm9ybUdyb3VwID0gdGFyZ2V0UGF0aFxyXG4gICAgICA/IHRoaXMuZ2V0TmVzdGVkRm9ybUdyb3VwKHJvb3RGb3JtR3JvdXAsIHRhcmdldFBhdGgpXHJcbiAgICAgIDogcm9vdEZvcm1Hcm91cDtcclxuXHJcbiAgICBpZiAoIXRhcmdldEZvcm1Hcm91cCkge1xyXG4gICAgICAvLyDlpoLmnpznm67moIcgRm9ybUdyb3VwIOS4jeWtmOWcqO+8jOaJgOacieWtl+autemDveWksei0pVxyXG4gICAgICBPYmplY3Qua2V5cyhmaWVsZHNDb25maWcpLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGFyZ2V0UGF0aFxyXG4gICAgICAgICAgPyBgVGFyZ2V0IEZvcm1Hcm91cCBhdCBwYXRoIFwiJHt0YXJnZXRQYXRofVwiIG5vdCBmb3VuZGBcclxuICAgICAgICAgIDogYEZvcm1Hcm91cCBub3QgZm91bmRgO1xyXG4gICAgICAgIHJlc3VsdC5mYWlsZWQucHVzaCh7XHJcbiAgICAgICAgICBmaWVsZE5hbWUsXHJcbiAgICAgICAgICBlcnJvcixcclxuICAgICAgICB9KTtcclxuICAgICAgICBvcHRpb25zPy5vbkZpZWxkQWRkZWQ/LihmaWVsZE5hbWUsIGZhbHNlLCBlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXN1bHQuc3VjY2VzcyA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDMuIOWIneWni+WMliBlcnJvck1lc3NhZ2VTdG9yZe+8iOWmguaenOS4jeWtmOWcqO+8iVxyXG4gICAgaWYgKCF0aGlzLmVycm9yTWVzc2FnZVN0b3JlW2Zvcm1OYW1lXSkge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZVN0b3JlW2Zvcm1OYW1lXSA9IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDQuIOaJuemHj+aehOW7uuaOp+S7tumFjee9rlxyXG4gICAgY29uc3QgY29udHJvbHNUb0FkZDogUmVjb3JkPHN0cmluZywgQWJzdHJhY3RDb250cm9sPiA9IHt9O1xyXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlc1RvQWRkOiBSZWNvcmQ8c3RyaW5nLCBGaWVsZEVycm9yTWVzc2FnZXM+ID0ge307XHJcblxyXG4gICAgLy8gNS4g6YGN5Y6G5omA5pyJ5a2X5q616YWN572u77yM6L+b6KGM6aqM6K+B5ZKM5p6E5bu6XHJcbiAgICBPYmplY3QuZW50cmllcyhmaWVsZHNDb25maWcpLmZvckVhY2goKFtmaWVsZE5hbWUsIGZpZWxkQ29uZmlnXSkgPT4ge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIC8vIDUuMSDmo4Dmn6XlrZfmrrXmmK/lkKblt7LlrZjlnKhcclxuICAgICAgICBpZiAodGFyZ2V0Rm9ybUdyb3VwLmdldChmaWVsZE5hbWUpKSB7XHJcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGBGaWVsZCBcIiR7ZmllbGROYW1lfVwiIGFscmVhZHkgZXhpc3RzJHtcclxuICAgICAgICAgICAgdGFyZ2V0UGF0aCA/IGAgaW4gXCIke3RhcmdldFBhdGh9XCJgIDogXCJcIlxyXG4gICAgICAgICAgfWA7XHJcbiAgICAgICAgICByZXN1bHQuZmFpbGVkLnB1c2goe1xyXG4gICAgICAgICAgICBmaWVsZE5hbWUsXHJcbiAgICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBvcHRpb25zPy5vbkZpZWxkQWRkZWQ/LihmaWVsZE5hbWUsIGZhbHNlLCBlcnJvcik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyA1LjIg5Yib5bu65o6n5Lu2XHJcbiAgICAgICAgbGV0IGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNGb3JtR3JvdXBDb25maWcoZmllbGRDb25maWcpKSB7XHJcbiAgICAgICAgICAvLyDliJvlu7rltYzlpZcgRm9ybUdyb3VwXHJcbiAgICAgICAgICBjb250cm9sID0gdGhpcy5jcmVhdGVOZXN0ZWRGb3JtR3JvdXAoXHJcbiAgICAgICAgICAgIGZpZWxkQ29uZmlnLmZpZWxkcyxcclxuICAgICAgICAgICAgZmllbGRDb25maWcuZGlzYWJsZWRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICAvLyDlrZjlgqjltYzlpZcgRm9ybUdyb3VwIOeahOmUmeivr+a2iOaBr++8iOWmguaenOmcgOimge+8iVxyXG4gICAgICAgICAgaWYgKGZpZWxkQ29uZmlnLmVycm9yTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlS2V5ID0gdGFyZ2V0UGF0aFxyXG4gICAgICAgICAgICAgID8gYCR7dGFyZ2V0UGF0aH0uJHtmaWVsZE5hbWV9YFxyXG4gICAgICAgICAgICAgIDogZmllbGROYW1lO1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2VzVG9BZGRbZXJyb3JNZXNzYWdlS2V5XSA9IGZpZWxkQ29uZmlnLmVycm9yTWVzc2FnZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRm9ybUFycmF5Q29uZmlnKGZpZWxkQ29uZmlnKSkge1xyXG4gICAgICAgICAgLy8g5Yib5bu6IEZvcm1BcnJheVxyXG4gICAgICAgICAgY29uc3Qgcm93czogVW50eXBlZEZvcm1Hcm91cFtdID0gW107XHJcbiAgICAgICAgICBjb25zdCByb3dDb3VudCA9IGZpZWxkQ29uZmlnLmluaXRpYWxSb3dzID8/IDA7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyBpKyspIHtcclxuICAgICAgICAgICAgcm93cy5wdXNoKFxyXG4gICAgICAgICAgICAgIHRoaXMuY3JlYXRlQXJyYXlSb3dHcm91cChcclxuICAgICAgICAgICAgICAgIGZpZWxkQ29uZmlnLml0ZW1Db25maWcsXHJcbiAgICAgICAgICAgICAgICBmaWVsZENvbmZpZy5kaXNhYmxlZFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnRyb2wgPSB0aGlzLmZiLmFycmF5KHJvd3MsIGZpZWxkQ29uZmlnLnZhbGlkYXRvcnM/LigpID8/IFtdKTtcclxuICAgICAgICAgIHRoaXMuX2Vuc3VyZUFycmF5SXRlbUNvbmZpZyhmb3JtTmFtZSwgZmllbGROYW1lLCBmaWVsZENvbmZpZy5pdGVtQ29uZmlnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8g5Yib5bu65pmu6YCaIEZvcm1Db250cm9sXHJcbiAgICAgICAgICBjb25zdCBjb250cm9sT3B0aW9uczogQWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgdmFsaWRhdG9yczogZmllbGRDb25maWcudmFsaWRhdG9ycz8uKCkgPz8gW10sXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29udHJvbCA9IHRoaXMuZmIuY29udHJvbChmaWVsZENvbmZpZy52YWx1ZSwgY29udHJvbE9wdGlvbnMpO1xyXG4gICAgICAgICAgLy8g6K6+572uIGRpc2FibGVkIOeKtuaAgVxyXG4gICAgICAgICAgaWYgKGZpZWxkQ29uZmlnLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8g5a2Y5YKo6ZSZ6K+v5raI5oGvXHJcbiAgICAgICAgICBpZiAoZmllbGRDb25maWcuZXJyb3JNZXNzYWdlcykge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2VLZXkgPSB0YXJnZXRQYXRoXHJcbiAgICAgICAgICAgICAgPyBgJHt0YXJnZXRQYXRofS4ke2ZpZWxkTmFtZX1gXHJcbiAgICAgICAgICAgICAgOiBmaWVsZE5hbWU7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZXNUb0FkZFtlcnJvck1lc3NhZ2VLZXldID0gZmllbGRDb25maWcuZXJyb3JNZXNzYWdlcztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnRyb2xzVG9BZGRbZmllbGROYW1lXSA9IGNvbnRyb2w7XHJcblxyXG4gICAgICAgIHJlc3VsdC5hZGRlZC5wdXNoKGZpZWxkTmFtZSk7XHJcbiAgICAgICAgb3B0aW9ucz8ub25GaWVsZEFkZGVkPy4oZmllbGROYW1lLCB0cnVlKTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvcj8udG9TdHJpbmcoKSB8fCBcIlVua25vd24gZXJyb3JcIjtcclxuICAgICAgICByZXN1bHQuZmFpbGVkLnB1c2goe1xyXG4gICAgICAgICAgZmllbGROYW1lLFxyXG4gICAgICAgICAgZXJyb3I6IGVycm9yTWVzc2FnZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBvcHRpb25zPy5vbkZpZWxkQWRkZWQ/LihmaWVsZE5hbWUsIGZhbHNlLCBlcnJvck1lc3NhZ2UpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyA2LiDmibnph4/mt7vliqDliLDnm67moIcgRm9ybUdyb3VwXHJcbiAgICBpZiAoT2JqZWN0LmtleXMoY29udHJvbHNUb0FkZCkubGVuZ3RoID4gMCkge1xyXG4gICAgICBPYmplY3QuZW50cmllcyhjb250cm9sc1RvQWRkKS5mb3JFYWNoKChbZmllbGROYW1lLCBjb250cm9sXSkgPT4ge1xyXG4gICAgICAgIHRhcmdldEZvcm1Hcm91cC5hZGRDb250cm9sKGZpZWxkTmFtZSwgY29udHJvbCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gNy4g5om56YeP5a2Y5YKo6ZSZ6K+v5raI5oGvXHJcbiAgICAgIE9iamVjdC5lbnRyaWVzKGVycm9yTWVzc2FnZXNUb0FkZCkuZm9yRWFjaCgoW2tleSwgbWVzc2FnZXNdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2VTdG9yZVtmb3JtTmFtZV1ba2V5XSA9IG1lc3NhZ2VzO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIDguIOabtOaWsOihqOWNlemqjOivgeeKtuaAgVxyXG4gICAgICBpZiAob3B0aW9ucz8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSkge1xyXG4gICAgICAgIHRhcmdldEZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcclxuICAgICAgICAgIGVtaXRFdmVudDogb3B0aW9ucz8uZW1pdEV2ZW50ID8/IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyA5LiDliKTmlq3mlbTkvZPmmK/lkKbmiJDlip9cclxuICAgIHJlc3VsdC5zdWNjZXNzID0gcmVzdWx0LmZhaWxlZC5sZW5ndGggPT09IDA7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vIOaJuemHj+WIoOmZpOWtl+autemFjee9rlxyXG4gIHJlbW92ZUZpZWxkc0NvbmZpZyhcclxuICAgIGZvcm1OYW1lOiBzdHJpbmcsXHJcbiAgICBmaWVsZE5hbWVzOiBzdHJpbmdbXSxcclxuICAgIG9wdGlvbnM/OiBSZW1vdmVGaWVsZHNDb25maWdPcHRpb25zXHJcbiAgKTogUmVtb3ZlRmllbGRzQ29uZmlnUmVzdWx0IHtcclxuICAgIGNvbnN0IHJlc3VsdDogUmVtb3ZlRmllbGRzQ29uZmlnUmVzdWx0ID0ge1xyXG4gICAgICBzdWNjZXNzOiB0cnVlLFxyXG4gICAgICByZW1vdmVkOiBbXSxcclxuICAgICAgZmFpbGVkOiBbXSxcclxuICAgIH07XHJcblxyXG4gICAgLy8gMS4g6aqM6K+B6KGo5Y2V5piv5ZCm5a2Y5ZyoXHJcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1TdG9yZVtmb3JtTmFtZV07XHJcbiAgICBpZiAoIWZvcm1Hcm91cCkge1xyXG4gICAgICBmaWVsZE5hbWVzLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gYEZvcm0gXCIke2Zvcm1OYW1lfVwiIG5vdCBmb3VuZGA7XHJcbiAgICAgICAgcmVzdWx0LmZhaWxlZC5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkTmFtZSxcclxuICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG9wdGlvbnM/Lm9uRmllbGRSZW1vdmVkPy4oZmllbGROYW1lLCBmYWxzZSwgZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmVzdWx0LnN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyAyLiDmibnph4/mlLbpm4bpnIDopoHmuIXnkIbnmoTkv6Hmga9cclxuICAgIGNvbnN0IGZpZWxkc1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgY29uc3QgZXJyb3JNZXNzYWdlS2V5c1RvUmVtb3ZlOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIC8vIDMuIOmqjOivgeavj+S4quWtl+auteW5tuaUtumbhuS/oeaBr1xyXG4gICAgZmllbGROYW1lcy5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcclxuICAgICAgY29uc3QgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoZmllbGROYW1lKTtcclxuXHJcbiAgICAgIGlmICghY29udHJvbCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gYEZpZWxkIFwiJHtmaWVsZE5hbWV9XCIgbm90IGZvdW5kYDtcclxuICAgICAgICByZXN1bHQuZmFpbGVkLnB1c2goe1xyXG4gICAgICAgICAgZmllbGROYW1lLFxyXG4gICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgb3B0aW9ucz8ub25GaWVsZFJlbW92ZWQ/LihmaWVsZE5hbWUsIGZhbHNlLCBlcnJvcik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDmlLbpm4bplJnor6/mtojmga/plK5cclxuICAgICAgZXJyb3JNZXNzYWdlS2V5c1RvUmVtb3ZlLnB1c2goZmllbGROYW1lKTtcclxuICAgICAgZmllbGRzVG9SZW1vdmUucHVzaChmaWVsZE5hbWUpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gNC4g5om56YeP5omn6KGM5Yig6Zmk5pON5L2cXHJcbiAgICB0cnkge1xyXG4gICAgICAvLyA0LjEg5LuOIEZvcm1Hcm91cCDkuK3np7vpmaTmjqfku7ZcclxuICAgICAgZmllbGRzVG9SZW1vdmUuZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XHJcbiAgICAgICAgZm9ybUdyb3VwLnJlbW92ZUNvbnRyb2woZmllbGROYW1lKTtcclxuICAgICAgICByZXN1bHQucmVtb3ZlZC5wdXNoKGZpZWxkTmFtZSk7XHJcbiAgICAgICAgb3B0aW9ucz8ub25GaWVsZFJlbW92ZWQ/LihmaWVsZE5hbWUsIHRydWUpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIDQuMiDmibnph4/liKDpmaTplJnor6/mtojmga9cclxuICAgICAgaWYgKHRoaXMuZXJyb3JNZXNzYWdlU3RvcmVbZm9ybU5hbWVdKSB7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlS2V5c1RvUmVtb3ZlLmZvckVhY2goKGtleSkgPT4ge1xyXG4gICAgICAgICAgZGVsZXRlIHRoaXMuZXJyb3JNZXNzYWdlU3RvcmVbZm9ybU5hbWVdW2tleV07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgLy8g5aaC5p6c5om56YeP5Yig6Zmk6L+H56iL5Lit5Ye66ZSZ77yM5qCH6K6w5Li65aSx6LSlXHJcbiAgICAgIGZpZWxkc1RvUmVtb3ZlLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIGlmICghcmVzdWx0LnJlbW92ZWQuaW5jbHVkZXMoZmllbGROYW1lKSkge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3I/LnRvU3RyaW5nKCkgfHwgXCJGYWlsZWQgdG8gcmVtb3ZlIGZpZWxkXCI7XHJcbiAgICAgICAgICByZXN1bHQuZmFpbGVkLnB1c2goe1xyXG4gICAgICAgICAgICBmaWVsZE5hbWUsXHJcbiAgICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIG9wdGlvbnM/Lm9uRmllbGRSZW1vdmVkPy4oZmllbGROYW1lLCBmYWxzZSwgZXJyb3JNZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIDUuIOWIpOaWreaVtOS9k+aYr+WQpuaIkOWKn1xyXG4gICAgcmVzdWx0LnN1Y2Nlc3MgPSByZXN1bHQuZmFpbGVkLmxlbmd0aCA9PT0gMDtcclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgLy8g5bGA6YOo6LWL5YC877yI5pSv5oyBIEZvcm1BcnJheSDlm57loavvvJroh6rliqjph43lu7rooYznu5PmnoTvvIlcclxuICBwYXRjaEZvcm1WYWx1ZXMoXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXHJcbiAgICBvcHRpb25zPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH1cclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybVN0b3JlW25hbWVdO1xyXG4gICAgaWYgKCFmb3JtR3JvdXApIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSBwYXRjaEZvcm1WYWx1ZXM6IGZvcm0gXCIke25hbWV9XCIgbm90IGZvdW5kLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFycmF5VmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnlbXT4gPSB7fTtcclxuICAgIGNvbnN0IHBsYWluVmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcblxyXG4gICAgLy8g5Yy65YiGIEZvcm1BcnJheSDlrZfmrrXlkozmma7pgJrlrZfmrrVcclxuICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlcykuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xyXG4gICAgICBjb25zdCBjdHJsID0gZm9ybUdyb3VwLmdldChrZXkpO1xyXG4gICAgICBpZiAoY3RybCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkgJiYgQXJyYXkuaXNBcnJheSh2YWwpKSB7XHJcbiAgICAgICAgYXJyYXlWYWx1ZXNba2V5XSA9IHZhbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBwbGFpblZhbHVlc1trZXldID0gdmFsO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyDlpITnkIYgRm9ybUFycmF5IOWbnuWhq++8mua4heepuuaXp+ihjO+8jOaMiSBpdGVtQ29uZmlnIOmHjeW7ulxyXG4gICAgT2JqZWN0LmVudHJpZXMoYXJyYXlWYWx1ZXMpLmZvckVhY2goKFtrZXksIHJvd3NdKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZvcm1BcnJheSA9IGZvcm1Hcm91cC5nZXQoa2V5KSBhcyBVbnR5cGVkRm9ybUFycmF5O1xyXG4gICAgICBjb25zdCBpdGVtQ29uZmlnID0gdGhpcy5hcnJheUl0ZW1Db25maWdzW25hbWVdPy5ba2V5XTtcclxuXHJcbiAgICAgIC8vIOa4heepuueOsOacieihjFxyXG4gICAgICB3aGlsZSAoZm9ybUFycmF5Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmb3JtQXJyYXkucmVtb3ZlQXQoMCwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDmuIXnkIbor6XmlbDnu4TnmoTnvJbovpHnirbmgIHlkozlv6vnhadcclxuICAgICAgdGhpcy5fZW5zdXJlQXJyYXlTdGF0ZShuYW1lLCBrZXkpO1xyXG4gICAgICB0aGlzLmFycmF5RWRpdGluZ1Jvd3NbbmFtZV1ba2V5XSA9IG5ldyBTZXQoKTtcclxuICAgICAgdGhpcy5hcnJheVJvd1NuYXBzaG90c1tuYW1lXVtrZXldID0gbmV3IE1hcCgpO1xyXG5cclxuICAgICAgLy8g5oyJIGl0ZW1Db25maWcg5Yib5bu66KGM5bm25Zue5aGrXHJcbiAgICAgIHJvd3MuZm9yRWFjaCgocm93RGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld1JvdyA9IGl0ZW1Db25maWdcclxuICAgICAgICAgID8gdGhpcy5jcmVhdGVBcnJheVJvd0dyb3VwKGl0ZW1Db25maWcpXHJcbiAgICAgICAgICA6IHRoaXMuZmIuZ3JvdXAoe30pO1xyXG4gICAgICAgIGlmIChpdGVtQ29uZmlnKSB7XHJcbiAgICAgICAgICBuZXdSb3cucGF0Y2hWYWx1ZShyb3dEYXRhLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcm1BcnJheS5wdXNoKG5ld1JvdywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIOe7n+S4gOinpuWPkeS4gOasoSB2YWx1ZUNoYW5nZXNcclxuICAgICAgaWYgKG9wdGlvbnM/LmVtaXRFdmVudCAhPT0gZmFsc2UpIHtcclxuICAgICAgICBmb3JtQXJyYXkudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogdHJ1ZSB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g5aSE55CG5pmu6YCa5a2X5q6177yI5ZCr5bWM5aWXIEZvcm1Hcm91cO+8iVxyXG4gICAgaWYgKE9iamVjdC5rZXlzKHBsYWluVmFsdWVzKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGZvcm1Hcm91cC5wYXRjaFZhbHVlKHBsYWluVmFsdWVzLCB7XHJcbiAgICAgICAgZW1pdEV2ZW50OiBvcHRpb25zPy5lbWl0RXZlbnQgPz8gdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDooajljZXmoKHpqozvvIjoh6rliqjov4fmu6TlhoXpg6jlrZfmrrXvvIlcclxuICB2YWxpZGF0ZUZvcm0oXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBvcHRpb25zPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuOyBvbmx5U2VsZj86IGJvb2xlYW4gfVxyXG4gICk6IGJvb2xlYW4gfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcclxuICAgIGlmICh0aGlzLmZvcm1TdG9yZVtuYW1lXS52YWxpZCkge1xyXG4gICAgICBjb25zdCByYXdWYWx1ZSA9IHRoaXMuZm9ybVN0b3JlW25hbWVdLmdldFJhd1ZhbHVlKCk7XHJcbiAgICAgIHJldHVybiB0aGlzLmV4Y2x1ZGVJbnRlcm5hbEZpZWxkcyhyYXdWYWx1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDpgJLlvZLmoKHpqozmiYDmnInmjqfku7ZcclxuICAgICAgdGhpcy5tYXJrQWxsQ29udHJvbHNBc0RpcnR5KFxyXG4gICAgICAgIHRoaXMuZm9ybVN0b3JlW25hbWVdLFxyXG4gICAgICAgIG9wdGlvbnM/LmVtaXRFdmVudCA/PyB0cnVlLFxyXG4gICAgICAgIG9wdGlvbnM/Lm9ubHlTZWxmID8/IGZhbHNlXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOmAkuW9kuagh+iusOaJgOacieaXoOaViOaOp+S7tuS4uiBkaXJ0eVxyXG4gIHByaXZhdGUgbWFya0FsbENvbnRyb2xzQXNEaXJ0eShcclxuICAgIGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCxcclxuICAgIGVtaXRFdmVudDogYm9vbGVhbixcclxuICAgIG9ubHlTZWxmOiBib29sZWFuXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoY29udHJvbC5pbnZhbGlkKSB7XHJcbiAgICAgIGNvbnRyb2wubWFya0FzRGlydHkoKTtcclxuICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtcclxuICAgICAgICBlbWl0RXZlbnQsXHJcbiAgICAgICAgb25seVNlbGYsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWmguaenOaYryBGb3JtR3JvdXDvvIzpgJLlvZLlpITnkIbmiYDmnInlrZDmjqfku7ZcclxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkge1xyXG4gICAgICBPYmplY3QudmFsdWVzKGNvbnRyb2wuY29udHJvbHMpLmZvckVhY2goKGNoaWxkQ29udHJvbCkgPT4ge1xyXG4gICAgICAgIHRoaXMubWFya0FsbENvbnRyb2xzQXNEaXJ0eShjaGlsZENvbnRyb2wsIGVtaXRFdmVudCwgb25seVNlbGYpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlpoLmnpzmmK8gRm9ybUFycmF577yM6YCS5b2S5aSE55CG5omA5pyJ6KGMXHJcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtQXJyYXkpIHtcclxuICAgICAgY29udHJvbC5jb250cm9scy5mb3JFYWNoKChjaGlsZENvbnRyb2wpID0+IHtcclxuICAgICAgICB0aGlzLm1hcmtBbGxDb250cm9sc0FzRGlydHkoY2hpbGRDb250cm9sLCBlbWl0RXZlbnQsIG9ubHlTZWxmKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDplJnor6/mtojmga/nm7jlhbMgPT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgLy8g6I635Y+W5a2X5q616aaW5p2h6ZSZ6K+v5o+Q56S6XHJcbiAgZ2V0RmllbGRFcnJvck1lc3NhZ2UobmFtZTogc3RyaW5nLCBjb250cm9sTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybVN0b3JlW25hbWVdO1xyXG4gICAgaWYgKCFmb3JtR3JvdXApIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSBnZXRGaWVsZEVycm9yTWVzc2FnZTogZm9ybSBcIiR7bmFtZX1cIiBub3QgZm91bmQuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKTtcclxuICAgIGlmICghY29udHJvbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYFtBbnRkRm9ybVNlcnZpY2VdIGdldEZpZWxkRXJyb3JNZXNzYWdlOiBjb250cm9sIFwiJHtjb250cm9sTmFtZX1cIiBub3QgZm91bmQgaW4gZm9ybSBcIiR7bmFtZX1cIi5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgfVxyXG4gICAgaWYgKCFjb250cm9sLmVycm9ycykge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDku44gZXJyb3JNZXNzYWdlU3RvcmUg6I635Y+W6ZSZ6K+v5raI5oGv6YWN572u77yM5Zue6YCA5p+l5om+IGFycmF5SXRlbUNvbmZpZ3NcclxuICAgIGNvbnN0IGVycm9yTWVzc2FnZXMgPSB0aGlzLmVycm9yTWVzc2FnZVN0b3JlW25hbWVdPy5bY29udHJvbE5hbWVdXHJcbiAgICAgID8/IHRoaXMuX2dldEFycmF5SXRlbUVycm9yTWVzc2FnZXMobmFtZSwgY29udHJvbE5hbWUpO1xyXG4gICAgY29uc3QgbWVyZ2VkTWVzc2FnZXMgPSB7XHJcbiAgICAgIC4uLnRoaXMuZGVmYXVsdEVycm9yTWVzc2FnZXMsXHJcbiAgICAgIC4uLihlcnJvck1lc3NhZ2VzID8/IHt9KSxcclxuICAgIH07XHJcblxyXG4gICAgZm9yIChjb25zdCBlcnJvcktleSBvZiBPYmplY3Qua2V5cyhjb250cm9sLmVycm9ycykpIHtcclxuICAgICAgY29uc3QgbWVzc2FnZSA9IG1lcmdlZE1lc3NhZ2VzW2Vycm9yS2V5XTtcclxuICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICAvLyDkuI3lho3mlK/mjIHlh73mlbDlvaLlvI/vvIzlj6rov5Tlm57lrZfnrKbkuLJcclxuICAgICAgICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlIDogXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFwiXCI7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDnm5HlkKznm7jlhbMgPT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgLy8g55uR5ZCs6KGo5Y2V5omA5pyJ5a2X5q615Y+Y5pu0XHJcbiAgd2F0Y2hGb3JtQ2hhbmdlczxUID0gYW55PihcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGhhbmRsZXI6ICh2YWx1ZTogVCkgPT4gdm9pZCxcclxuICAgIG9wdGlvbnM/OiBXYXRjaE9wdGlvbnNcclxuICApOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5mb3JtU3RvcmVbbmFtZV07XHJcbiAgICBpZiAoIWZvcm1Hcm91cCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYFtBbnRkRm9ybVNlcnZpY2VdIHdhdGNoRm9ybUNoYW5nZXM6IGZvcm0gXCIke25hbWV9XCIgbm90IGZvdW5kLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5zZXR1cFZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uKGZvcm1Hcm91cCwgaGFuZGxlciwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvLyDnm5HlkKzmjIflrprlrZfmrrXlj5jmm7RcclxuICB3YXRjaEZpZWxkQ2hhbmdlczxUID0gYW55PihcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmcsXHJcbiAgICBoYW5kbGVyOiAodmFsdWU6IFQpID0+IHZvaWQsXHJcbiAgICBvcHRpb25zPzogV2F0Y2hPcHRpb25zXHJcbiAgKTogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybVN0b3JlW25hbWVdO1xyXG4gICAgaWYgKCFmb3JtR3JvdXApIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSB3YXRjaEZpZWxkQ2hhbmdlczogZm9ybSBcIiR7bmFtZX1cIiBub3QgZm91bmQuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKTtcclxuICAgIGlmICghY29udHJvbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYFtBbnRkRm9ybVNlcnZpY2VdIHdhdGNoRmllbGRDaGFuZ2VzOiBjb250cm9sIFwiJHtjb250cm9sTmFtZX1cIiBub3QgZm91bmQgaW4gZm9ybSBcIiR7bmFtZX1cIi5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2V0dXBWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbihjb250cm9sLCBoYW5kbGVyLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IEZvcm1BcnJheSDmk43kvZwgPT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgLy8g6I635Y+W5oyH5a6a6Lev5b6E55qEIEZvcm1BcnJheSDlrp7kvovvvIjkvpvmqKHmnb8gbmdGb3Ig5L2/55So77yJXHJcbiAgZ2V0Rm9ybUFycmF5KGZvcm1OYW1lOiBzdHJpbmcsIGFycmF5UGF0aDogc3RyaW5nKTogVW50eXBlZEZvcm1BcnJheSB8IG51bGwge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5mb3JtU3RvcmVbZm9ybU5hbWVdO1xyXG4gICAgaWYgKCFmb3JtR3JvdXApIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSBnZXRGb3JtQXJyYXk6IGZvcm0gXCIke2Zvcm1OYW1lfVwiIG5vdCBmb3VuZC5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5nZXROZXN0ZWRGb3JtQXJyYXkoZm9ybUdyb3VwLCBhcnJheVBhdGgpO1xyXG4gICAgaWYgKCFmb3JtQXJyYXkpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSBnZXRGb3JtQXJyYXk6IEZvcm1BcnJheSBhdCBwYXRoIFwiJHthcnJheVBhdGh9XCIgbm90IGZvdW5kIGluIGZvcm0gXCIke2Zvcm1OYW1lfVwiLmBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICAvLyDlkJEgRm9ybUFycmF5IOaWsOWinuS4gOihjO+8iOiHquWKqOi/m+WFpee8lui+keeKtuaAge+8jOaXoOW/q+eFp++8iVxyXG4gIGFkZEFycmF5Um93KGZvcm1OYW1lOiBzdHJpbmcsIGFycmF5UGF0aDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1TdG9yZVtmb3JtTmFtZV07XHJcbiAgICBpZiAoIWZvcm1Hcm91cCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYFtBbnRkRm9ybVNlcnZpY2VdIGFkZEFycmF5Um93OiBmb3JtIFwiJHtmb3JtTmFtZX1cIiBub3QgZm91bmQuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmdldE5lc3RlZEZvcm1BcnJheShmb3JtR3JvdXAsIGFycmF5UGF0aCk7XHJcbiAgICBpZiAoIWZvcm1BcnJheSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYFtBbnRkRm9ybVNlcnZpY2VdIGFkZEFycmF5Um93OiBGb3JtQXJyYXkgYXQgcGF0aCBcIiR7YXJyYXlQYXRofVwiIG5vdCBmb3VuZCBpbiBmb3JtIFwiJHtmb3JtTmFtZX1cIi5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlj5bnrKzkuIDooYznmoTnu5PmnoTkvZzkuLrmqKHmnb/vvIzoi6Xml6DooYzliJnml6Dms5Xmjqjmlq0gaXRlbUNvbmZpZ1xyXG4gICAgLy8g5paw6KGM6buY6K6k5Li656m6IEZvcm1Hcm91cO+8iOiwg+eUqOaWueW6lOmAmui/hyBpdGVtQ29uZmlnIOS8oOWFpeWFt+S9k+e7k+aehO+8iVxyXG4gICAgLy8g5a6e6ZmF6KGM5Yib5bu66YCa6L+HIF9hZGRBcnJheVJvd1dpdGhDb25maWcg5a6M5oiQ77yM5q2k5aSE5L+d55WZ56m66KGM5YWc5bqVXHJcbiAgICBjb25zdCBuZXdSb3cgPSB0aGlzLmZiLmdyb3VwKHt9KTtcclxuICAgIGZvcm1BcnJheS5wdXNoKG5ld1Jvdyk7XHJcblxyXG4gICAgY29uc3QgbmV3SW5kZXggPSBmb3JtQXJyYXkubGVuZ3RoIC0gMTtcclxuICAgIHRoaXMuX2Vuc3VyZUFycmF5U3RhdGUoZm9ybU5hbWUsIGFycmF5UGF0aCk7XHJcbiAgICAvLyDmlrDlop7ooYzml6Dljoblj7Llv6vnhafvvIxjYW5jZWxSb3dFZGl0IOaXtuebtOaOpeWIoOmZpFxyXG4gICAgdGhpcy5hcnJheUVkaXRpbmdSb3dzW2Zvcm1OYW1lXVthcnJheVBhdGhdLmFkZChuZXdJbmRleCk7XHJcbiAgfVxyXG5cclxuICAvLyDlkJEgRm9ybUFycmF5IOaWsOWinuS4gOihjO+8iOaMh+WumiBpdGVtQ29uZmln77yJXHJcbiAgYWRkQXJyYXlSb3dXaXRoQ29uZmlnKFxyXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcclxuICAgIGFycmF5UGF0aDogc3RyaW5nLFxyXG4gICAgaXRlbUNvbmZpZzogRm9ybUNvbmZpZ1xyXG4gICk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5mb3JtU3RvcmVbZm9ybU5hbWVdO1xyXG4gICAgaWYgKCFmb3JtR3JvdXApIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSBhZGRBcnJheVJvd1dpdGhDb25maWc6IGZvcm0gXCIke2Zvcm1OYW1lfVwiIG5vdCBmb3VuZC5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZ2V0TmVzdGVkRm9ybUFycmF5KGZvcm1Hcm91cCwgYXJyYXlQYXRoKTtcclxuICAgIGlmICghZm9ybUFycmF5KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgW0FudGRGb3JtU2VydmljZV0gYWRkQXJyYXlSb3dXaXRoQ29uZmlnOiBGb3JtQXJyYXkgYXQgcGF0aCBcIiR7YXJyYXlQYXRofVwiIG5vdCBmb3VuZCBpbiBmb3JtIFwiJHtmb3JtTmFtZX1cIi5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBuZXdSb3cgPSB0aGlzLmNyZWF0ZUFycmF5Um93R3JvdXAoaXRlbUNvbmZpZyk7XHJcbiAgICBmb3JtQXJyYXkucHVzaChuZXdSb3cpO1xyXG5cclxuICAgIGNvbnN0IG5ld0luZGV4ID0gZm9ybUFycmF5Lmxlbmd0aCAtIDE7XHJcbiAgICB0aGlzLl9lbnN1cmVBcnJheVN0YXRlKGZvcm1OYW1lLCBhcnJheVBhdGgpO1xyXG4gICAgLy8g5paw5aKe6KGM5peg5Y6G5Y+y5b+r54Wn77yMY2FuY2VsUm93RWRpdCDml7bnm7TmjqXliKDpmaRcclxuICAgIHRoaXMuYXJyYXlFZGl0aW5nUm93c1tmb3JtTmFtZV1bYXJyYXlQYXRoXS5hZGQobmV3SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8g5Yig6ZmkIEZvcm1BcnJheSDkuK3mjIflrprooYzvvIjlkIzml7bmuIXnkIbnvJbovpHnirbmgIHlkozlv6vnhafvvIzlubbph43lr7npvZDntKLlvJXvvIlcclxuICByZW1vdmVBcnJheVJvdyhmb3JtTmFtZTogc3RyaW5nLCBhcnJheVBhdGg6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5mb3JtU3RvcmVbZm9ybU5hbWVdO1xyXG4gICAgaWYgKCFmb3JtR3JvdXApIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSByZW1vdmVBcnJheVJvdzogZm9ybSBcIiR7Zm9ybU5hbWV9XCIgbm90IGZvdW5kLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5nZXROZXN0ZWRGb3JtQXJyYXkoZm9ybUdyb3VwLCBhcnJheVBhdGgpO1xyXG4gICAgaWYgKCFmb3JtQXJyYXkpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSByZW1vdmVBcnJheVJvdzogRm9ybUFycmF5IGF0IHBhdGggXCIke2FycmF5UGF0aH1cIiBub3QgZm91bmQgaW4gZm9ybSBcIiR7Zm9ybU5hbWV9XCIuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGZvcm1BcnJheS5sZW5ndGgpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSByZW1vdmVBcnJheVJvdzogaW5kZXggJHtpbmRleH0gb3V0IG9mIHJhbmdlLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcm1BcnJheS5yZW1vdmVBdChpbmRleCk7XHJcbiAgICB0aGlzLl9lbnN1cmVBcnJheVN0YXRlKGZvcm1OYW1lLCBhcnJheVBhdGgpO1xyXG5cclxuICAgIC8vIOa4heeQhuiiq+WIoOihjOeahOW/q+eFp1xyXG4gICAgY29uc3Qgc25hcHNob3RNYXAgPSB0aGlzLmFycmF5Um93U25hcHNob3RzW2Zvcm1OYW1lXVthcnJheVBhdGhdO1xyXG4gICAgc25hcHNob3RNYXAuZGVsZXRlKGluZGV4KTtcclxuXHJcbiAgICAvLyDph43lr7npvZDvvJrlv6vnhafkuK0gPiBpbmRleCDnmoTplK7lhajpg6ggLTFcclxuICAgIGNvbnN0IG5ld1NuYXBzaG90TWFwID0gbmV3IE1hcDxudW1iZXIsIGFueT4oKTtcclxuICAgIHNuYXBzaG90TWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgbmV3U25hcHNob3RNYXAuc2V0KGtleSA+IGluZGV4ID8ga2V5IC0gMSA6IGtleSwgdmFsdWUpO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmFycmF5Um93U25hcHNob3RzW2Zvcm1OYW1lXVthcnJheVBhdGhdID0gbmV3U25hcHNob3RNYXA7XHJcblxyXG4gICAgLy8g6YeN5a+56b2Q77yaZWRpdGluZ1Jvd3Mg5LitID4gaW5kZXgg55qE57Si5byV5YWo6YOoIC0xXHJcbiAgICBjb25zdCBlZGl0aW5nU2V0ID0gdGhpcy5hcnJheUVkaXRpbmdSb3dzW2Zvcm1OYW1lXVthcnJheVBhdGhdO1xyXG4gICAgY29uc3QgbmV3RWRpdGluZ1NldCA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG4gICAgZWRpdGluZ1NldC5mb3JFYWNoKChpKSA9PiB7XHJcbiAgICAgIGlmIChpICE9PSBpbmRleCkge1xyXG4gICAgICAgIG5ld0VkaXRpbmdTZXQuYWRkKGkgPiBpbmRleCA/IGkgLSAxIDogaSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5hcnJheUVkaXRpbmdSb3dzW2Zvcm1OYW1lXVthcnJheVBhdGhdID0gbmV3RWRpdGluZ1NldDtcclxuICB9XHJcblxyXG4gIC8vIOWtmOWCqCBGb3JtQXJyYXkg55qEIGl0ZW1Db25maWfvvIjnlKjkuo7lm57loavml7bph43lu7rooYznu5PmnoTvvIlcclxuICBwcml2YXRlIF9lbnN1cmVBcnJheUl0ZW1Db25maWcoXHJcbiAgICBmb3JtTmFtZTogc3RyaW5nLFxyXG4gICAgYXJyYXlQYXRoOiBzdHJpbmcsXHJcbiAgICBpdGVtQ29uZmlnOiBGb3JtQ29uZmlnXHJcbiAgKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYXJyYXlJdGVtQ29uZmlnc1tmb3JtTmFtZV0pIHtcclxuICAgICAgdGhpcy5hcnJheUl0ZW1Db25maWdzW2Zvcm1OYW1lXSA9IHt9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5hcnJheUl0ZW1Db25maWdzW2Zvcm1OYW1lXVthcnJheVBhdGhdID0gaXRlbUNvbmZpZztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2dldEFycmF5SXRlbUVycm9yTWVzc2FnZXMoXHJcbiAgICBmb3JtTmFtZTogc3RyaW5nLFxyXG4gICAgY29udHJvbE5hbWU6IHN0cmluZ1xyXG4gICk6IEZpZWxkRXJyb3JNZXNzYWdlcyB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IGNvbnRyb2xOYW1lLnNwbGl0KCcuJyk7XHJcbiAgICBpZiAocGFydHMubGVuZ3RoIDwgMykgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IG1heWJlSW5kZXggPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXTtcclxuICAgIGlmICghL15cXGQrJC8udGVzdChtYXliZUluZGV4KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGNvbnN0IGZpZWxkTmFtZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xyXG4gICAgY29uc3QgYXJyYXlQYXRoID0gcGFydHMuc2xpY2UoMCwgLTIpLmpvaW4oJy4nKTtcclxuICAgIGNvbnN0IGl0ZW1Db25maWcgPSB0aGlzLmFycmF5SXRlbUNvbmZpZ3NbZm9ybU5hbWVdPy5bYXJyYXlQYXRoXTtcclxuICAgIGNvbnN0IGZpZWxkQ29uZmlnID0gaXRlbUNvbmZpZz8uW2ZpZWxkTmFtZV07XHJcbiAgICBpZiAoIWZpZWxkQ29uZmlnIHx8IHRoaXMuaXNGb3JtR3JvdXBDb25maWcoZmllbGRDb25maWcpIHx8IHRoaXMuaXNGb3JtQXJyYXlDb25maWcoZmllbGRDb25maWcpKSB7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmllbGRDb25maWcuZXJyb3JNZXNzYWdlcztcclxuICB9XHJcblxyXG4gIC8vIOWIneWni+WMliBhcnJheUVkaXRpbmdSb3dzIOWSjCBhcnJheVJvd1NuYXBzaG90cyDlr7nlupTot6/lvoTvvIjoi6XkuI3lrZjlnKjliJnliJvlu7rvvIlcclxuICBwcml2YXRlIF9lbnN1cmVBcnJheVN0YXRlKGZvcm1OYW1lOiBzdHJpbmcsIGFycmF5UGF0aDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuYXJyYXlFZGl0aW5nUm93c1tmb3JtTmFtZV0pIHtcclxuICAgICAgdGhpcy5hcnJheUVkaXRpbmdSb3dzW2Zvcm1OYW1lXSA9IHt9O1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmFycmF5RWRpdGluZ1Jvd3NbZm9ybU5hbWVdW2FycmF5UGF0aF0pIHtcclxuICAgICAgdGhpcy5hcnJheUVkaXRpbmdSb3dzW2Zvcm1OYW1lXVthcnJheVBhdGhdID0gbmV3IFNldDxudW1iZXI+KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuYXJyYXlSb3dTbmFwc2hvdHNbZm9ybU5hbWVdKSB7XHJcbiAgICAgIHRoaXMuYXJyYXlSb3dTbmFwc2hvdHNbZm9ybU5hbWVdID0ge307XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuYXJyYXlSb3dTbmFwc2hvdHNbZm9ybU5hbWVdW2FycmF5UGF0aF0pIHtcclxuICAgICAgdGhpcy5hcnJheVJvd1NuYXBzaG90c1tmb3JtTmFtZV1bYXJyYXlQYXRoXSA9IG5ldyBNYXA8bnVtYmVyLCBhbnk+KCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBGb3JtQXJyYXkg6KGM57qn57yW6L6RID09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIOW8gOWQr+aMh+WumuihjOeahOe8lui+keaooeW8j++8iOS/neWtmOW9k+WJjeWAvOS4uuW/q+eFp++8iVxyXG4gIHN0YXJ0Um93RWRpdChmb3JtTmFtZTogc3RyaW5nLCBhcnJheVBhdGg6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5nZXRGb3JtQXJyYXkoZm9ybU5hbWUsIGFycmF5UGF0aCk7XHJcbiAgICBpZiAoIWZvcm1BcnJheSkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHJvd0NvbnRyb2wgPSBmb3JtQXJyYXkuYXQoaW5kZXgpO1xyXG4gICAgaWYgKCFyb3dDb250cm9sKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgW0FudGRGb3JtU2VydmljZV0gc3RhcnRSb3dFZGl0OiByb3cgJHtpbmRleH0gbm90IGZvdW5kIGluIFwiJHthcnJheVBhdGh9XCIuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZW5zdXJlQXJyYXlTdGF0ZShmb3JtTmFtZSwgYXJyYXlQYXRoKTtcclxuXHJcbiAgICAvLyDkv53lrZjlv6vnhafvvIjku4XlvZPlv6vnhafkuI3lrZjlnKjml7bvvIzpgb/lhY3ph43lpI3nvJbovpHopobnm5bljp/lp4vlgLzvvIlcclxuICAgIGNvbnN0IHNuYXBzaG90TWFwID0gdGhpcy5hcnJheVJvd1NuYXBzaG90c1tmb3JtTmFtZV1bYXJyYXlQYXRoXTtcclxuICAgIGlmICghc25hcHNob3RNYXAuaGFzKGluZGV4KSkge1xyXG4gICAgICBzbmFwc2hvdE1hcC5zZXQoaW5kZXgsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocm93Q29udHJvbC5nZXRSYXdWYWx1ZSgpKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYXJyYXlFZGl0aW5nUm93c1tmb3JtTmFtZV1bYXJyYXlQYXRoXS5hZGQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8g56Gu6K6k5L+d5a2Y5oyH5a6a6KGM77yI6aqM6K+B6YCa6L+H5YiZ5riF6Zmk5b+r54Wn5bm26YCA5Ye657yW6L6R54q25oCB77yM6L+U5Zue6KGM5pWw5o2u77yb5ZCm5YiZ6L+U5ZueIGZhbHNl77yJXHJcbiAgY29uZmlybVJvd0VkaXQoXHJcbiAgICBmb3JtTmFtZTogc3RyaW5nLFxyXG4gICAgYXJyYXlQYXRoOiBzdHJpbmcsXHJcbiAgICBpbmRleDogbnVtYmVyXHJcbiAgKTogUmVjb3JkPHN0cmluZywgYW55PiB8IGZhbHNlIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZ2V0Rm9ybUFycmF5KGZvcm1OYW1lLCBhcnJheVBhdGgpO1xyXG4gICAgaWYgKCFmb3JtQXJyYXkpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICBjb25zdCByb3dDb250cm9sID0gZm9ybUFycmF5LmF0KGluZGV4KTtcclxuICAgIGlmICghcm93Q29udHJvbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYFtBbnRkRm9ybVNlcnZpY2VdIGNvbmZpcm1Sb3dFZGl0OiByb3cgJHtpbmRleH0gbm90IGZvdW5kIGluIFwiJHthcnJheVBhdGh9XCIuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHJvd0NvbnRyb2wuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLm1hcmtBbGxDb250cm9sc0FzRGlydHkocm93Q29udHJvbCwgdHJ1ZSwgZmFsc2UpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fZW5zdXJlQXJyYXlTdGF0ZShmb3JtTmFtZSwgYXJyYXlQYXRoKTtcclxuICAgIHRoaXMuYXJyYXlSb3dTbmFwc2hvdHNbZm9ybU5hbWVdW2FycmF5UGF0aF0uZGVsZXRlKGluZGV4KTtcclxuICAgIHRoaXMuYXJyYXlFZGl0aW5nUm93c1tmb3JtTmFtZV1bYXJyYXlQYXRoXS5kZWxldGUoaW5kZXgpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmV4Y2x1ZGVJbnRlcm5hbEZpZWxkcyhyb3dDb250cm9sLmdldFJhd1ZhbHVlKCkpO1xyXG4gIH1cclxuXHJcbiAgLy8g5Y+W5raI57yW6L6R5oyH5a6a6KGM77yI5LuO5b+r54Wn5oGi5aSN5YC877yb6Iul5peg5b+r54Wn5YiZ6K+05piO5piv5paw5aKe6KGM77yM55u05o6l5Yig6Zmk6K+l6KGM77yJXHJcbiAgY2FuY2VsUm93RWRpdChmb3JtTmFtZTogc3RyaW5nLCBhcnJheVBhdGg6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5nZXRGb3JtQXJyYXkoZm9ybU5hbWUsIGFycmF5UGF0aCk7XHJcbiAgICBpZiAoIWZvcm1BcnJheSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuX2Vuc3VyZUFycmF5U3RhdGUoZm9ybU5hbWUsIGFycmF5UGF0aCk7XHJcbiAgICBjb25zdCBzbmFwc2hvdE1hcCA9IHRoaXMuYXJyYXlSb3dTbmFwc2hvdHNbZm9ybU5hbWVdW2FycmF5UGF0aF07XHJcblxyXG4gICAgaWYgKHNuYXBzaG90TWFwLmhhcyhpbmRleCkpIHtcclxuICAgICAgLy8g5bey5pyJ6KGM77ya5LuO5b+r54Wn5oGi5aSN5YC8XHJcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gc25hcHNob3RNYXAuZ2V0KGluZGV4KTtcclxuICAgICAgY29uc3Qgcm93Q29udHJvbCA9IGZvcm1BcnJheS5hdChpbmRleCk7XHJcbiAgICAgIGlmIChyb3dDb250cm9sKSB7XHJcbiAgICAgICAgcm93Q29udHJvbC5wYXRjaFZhbHVlKHNuYXBzaG90KTtcclxuICAgICAgICByb3dDb250cm9sLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgcm93Q29udHJvbC5tYXJrQXNVbnRvdWNoZWQoKTtcclxuICAgICAgfVxyXG4gICAgICBzbmFwc2hvdE1hcC5kZWxldGUoaW5kZXgpO1xyXG4gICAgICB0aGlzLmFycmF5RWRpdGluZ1Jvd3NbZm9ybU5hbWVdW2FycmF5UGF0aF0uZGVsZXRlKGluZGV4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIOaWsOWinuihjO+8muebtOaOpeWIoOmZpFxyXG4gICAgICB0aGlzLnJlbW92ZUFycmF5Um93KGZvcm1OYW1lLCBhcnJheVBhdGgsIGluZGV4KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOafpeivouaMh+WumuihjOaYr+WQpuWkhOS6jue8lui+keeKtuaAgVxyXG4gIGlzUm93RWRpdGluZyhmb3JtTmFtZTogc3RyaW5nLCBhcnJheVBhdGg6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5hcnJheUVkaXRpbmdSb3dzW2Zvcm1OYW1lXT8uW2FycmF5UGF0aF0/LmhhcyhpbmRleCkgPz8gZmFsc2VcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyDojrflj5bmiYDmnInmraPlnKjnvJbovpHnmoTooYzntKLlvJXliJfooahcclxuICBnZXRFZGl0aW5nUm93SW5kaWNlcyhmb3JtTmFtZTogc3RyaW5nLCBhcnJheVBhdGg6IHN0cmluZyk6IG51bWJlcltdIHtcclxuICAgIGNvbnN0IGVkaXRpbmdTZXQgPSB0aGlzLmFycmF5RWRpdGluZ1Jvd3NbZm9ybU5hbWVdPy5bYXJyYXlQYXRoXTtcclxuICAgIHJldHVybiBlZGl0aW5nU2V0ID8gQXJyYXkuZnJvbShlZGl0aW5nU2V0KS5zb3J0KChhLCBiKSA9PiBhIC0gYikgOiBbXTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOW3peWFt+aWueazlSA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyDojrflj5booajljZXnsbvlkI1cclxuICBnZXRGb3JtQ2xhc3NOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dGhpcy5jbGFzc1ByZWZpeH1jdXN0b20tJHtuYW1lfSBgO1xyXG4gIH1cclxuXHJcbiAgLy8g6K6+572uIENTUyDlj5jph4/liLDnm67moIflhYPntKDvvIjmlK/mjIHmjIHkuYXljJbnm5HlkKzliqjmgIHmt7vliqDnmoTlhYPntKDvvIlcclxuICBzZXRDU1NWYXJpYWJsZXNUb1RhcmdldChuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1Db250YWluZXJTZWxlY3RvciA9IGAuJHt0aGlzLmdldEZvcm1DbGFzc05hbWUobmFtZSl9YDtcclxuICAgIGNvbnN0IGZvcm1Db250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICBmb3JtQ29udGFpbmVyU2VsZWN0b3JcclxuICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgLy8g5aaC5p6c5a655Zmo6L+Y5LiN5a2Y5Zyo77yM5Y+v5Lul55SoIE11dGF0aW9uT2JzZXJ2ZXIg562J5b6F5a6D5Ye6546wXHJcbiAgICBpZiAoIWZvcm1Db250YWluZXIpIHtcclxuICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgIGZvcm1Db250YWluZXJTZWxlY3RvclxyXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xyXG4gICAgICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwiLS1sYWJlbC13aWR0aFwiLCB0aGlzLmxhYmVsV2lkdGgpO1xyXG4gICAgICAgICAgY29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwiLS1sYWJlbC1hbGlnblwiLCB0aGlzLmxhYmVsQWxpZ24pO1xyXG4gICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBvYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmJvZHksIHtcclxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgc3VidHJlZTogdHJ1ZSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyAxMOenkuWQjuiHquWKqOaWreW8gO+8jOmBv+WFjeWGheWtmOazhOa8j1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKSwgMTAwMDApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5Zyo5a655Zmo5LiK6K6+572uIENTUyDlj5jph49cclxuICAgIGZvcm1Db250YWluZXIuc3R5bGUuc2V0UHJvcGVydHkoXCItLWxhYmVsLXdpZHRoXCIsIHRoaXMubGFiZWxXaWR0aCk7XHJcbiAgICBmb3JtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwiLS1sYWJlbC1hbGlnblwiLCB0aGlzLmxhYmVsQWxpZ24pO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g56eB5pyJ5pa55rOVID09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIOi/h+a7pOWGhemDqOWtl+aute+8iOmAkuW9kuWkhOeQhuWvueixoeWSjOaVsOe7hO+8iVxyXG4gIHByaXZhdGUgZXhjbHVkZUludGVybmFsRmllbGRzKHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOeJueauiuWkhOeQhiBEYXRlIOWvueixoe+8jOebtOaOpei/lOWbnuS4jeWBmui9rOaNolxyXG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoKGl0ZW0pID0+IHRoaXMuZXhjbHVkZUludGVybmFsRmllbGRzKGl0ZW0pKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBmaWx0ZXJlZDogYW55ID0ge307XHJcbiAgICBPYmplY3QuZW50cmllcyh2YWx1ZSkuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xyXG4gICAgICAvLyDov4fmu6Tku6UgX18g5byA5aS055qE5YaF6YOo5a2X5q61XHJcbiAgICAgIGlmICgha2V5LnN0YXJ0c1dpdGgoXCJfX1wiKSkge1xyXG4gICAgICAgIGZpbHRlcmVkW2tleV0gPSB0aGlzLmV4Y2x1ZGVJbnRlcm5hbEZpZWxkcyh2YWwpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICB9XHJcblxyXG4gIC8vIOiuvue9ruWAvOWPmOabtOiuoumYhVxyXG4gIHByaXZhdGUgc2V0dXBWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbjxUPihcclxuICAgIHRhcmdldDogeyB2YWx1ZUNoYW5nZXM6IGFueTsgdmFsdWU6IGFueSB9LFxyXG4gICAgaGFuZGxlcjogKHZhbHVlOiBUKSA9PiB2b2lkLFxyXG4gICAgb3B0aW9ucz86IFdhdGNoT3B0aW9uc1xyXG4gICk6IFN1YnNjcmlwdGlvbiB7XHJcbiAgICBsZXQgdmFsdWVDaGFuZ2VzJCA9IHRhcmdldC52YWx1ZUNoYW5nZXM7XHJcblxyXG4gICAgaWYgKG9wdGlvbnM/LmRlYm91bmNlICE9IG51bGwpIHtcclxuICAgICAgdmFsdWVDaGFuZ2VzJCA9IHZhbHVlQ2hhbmdlcyQucGlwZShkZWJvdW5jZVRpbWUob3B0aW9ucy5kZWJvdW5jZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvcHRpb25zPy5kaXN0aW5jdFVudGlsQ2hhbmdlZCAhPT0gZmFsc2UpIHtcclxuICAgICAgdmFsdWVDaGFuZ2VzJCA9IHZhbHVlQ2hhbmdlcyQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucz8uZW1pdEluaXRpYWwpIHtcclxuICAgICAgaGFuZGxlcih0YXJnZXQudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB2YWx1ZUNoYW5nZXMkLnN1YnNjcmliZShoYW5kbGVyKTtcclxuICB9XHJcbn1cclxuIl19
838
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW50ZC1mb3JtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvLXRhYmxlL3NyYy9saWIvcGFnZS1wdWJsaWMvYW50ZC1mb3JtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUdMLGdCQUFnQixFQUVoQixnQkFBZ0IsR0FFakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7OztBQW1GcEUsZ0RBQWdEO0FBR2hELE1BQU0sT0FBTyxlQUFlO0lBNkIxQixpREFBaUQ7SUFDakQsWUFBb0IsRUFBc0I7UUFBdEIsT0FBRSxHQUFGLEVBQUUsQ0FBb0I7UUE3QjFDLGlEQUFpRDtRQUNqRCxjQUFTLEdBQXFDLEVBQUUsQ0FBQztRQUNqRCxtQkFBYyxHQUFtQixRQUFRLENBQUM7UUFFMUMsaURBQWlEO1FBQ3pDLHNCQUFpQixHQUE0QixFQUFFLENBQUM7UUFDaEQsZUFBVSxHQUFXLE9BQU8sQ0FBQztRQUM3QixlQUFVLEdBQVcsT0FBTyxDQUFDO1FBQzdCLG1CQUFjLEdBQXFDLEVBQUUsQ0FBQztRQUN0RCxzQkFBaUIsR0FHckIsRUFBRSxDQUFDO1FBQ0MscUJBQWdCLEdBQWdELEVBQUUsQ0FBQztRQUNuRSxzQkFBaUIsR0FHckIsRUFBRSxDQUFDO1FBQ0MscUJBQWdCLEdBQStDLEVBQUUsQ0FBQztRQUNsRSxnQkFBVyxHQUFHLFdBQVcsQ0FBQztRQUNqQix5QkFBb0IsR0FBdUI7WUFDMUQsUUFBUSxFQUFFLFNBQVM7WUFDbkIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsU0FBUyxFQUFFLFFBQVE7WUFDbkIsS0FBSyxFQUFFLFlBQVk7WUFDbkIsT0FBTyxFQUFFLFNBQVM7U0FDbkIsQ0FBQztJQUlGLENBQUM7SUFFRCxxREFBcUQ7SUFFckQsdUJBQXVCO0lB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RyxDQUFDLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQ2pEO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsVUFBVTtJQUNGLDRCQUE0QixDQUNsQyxNQUF5QyxFQUN6QyxPQUEyQixFQUMzQixPQUFzQjtRQUV0QixJQUFJLGFBQWEsR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDO1FBRXhDLElBQUksT0FBTyxFQUFFLFFBQVEsSUFBSSxJQUFJLEVBQUU7WUFDN0IsYUFBYSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsSUFBSSxPQUFPLEVBQUUsb0JBQW9CLEtBQUssS0FBSyxFQUFFO1lBQzNDLGFBQWEsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztTQUM1RDtRQUVELElBQUksT0FBTyxFQUFFLFdBQVcsRUFBRTtZQUN4QixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ3ZCO1FBRUQsT0FBTyxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzFDLENBQUM7K0dBdmpDVSxlQUFlO21IQUFmLGVBQWUsY0FERixNQUFNOzs0RkFDbkIsZUFBZTtrQkFEM0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgQWJzdHJhY3RDb250cm9sT3B0aW9ucyxcclxuICBVbnR5cGVkRm9ybUFycmF5LFxyXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcclxuICBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvckZuLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkIH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PSDnsbvlnovlrprkuYkgPT09PT09PT09PT09PT09PT09PT1cclxuXHJcbi8vIOWtl+autemUmeivr+a2iOaBr+exu+Wei++8iOWtl+espuS4suaIluWHveaVsO+8iVxyXG5leHBvcnQgdHlwZSBGaWVsZEVycm9yTWVzc2FnZSA9XHJcbiAgfCBzdHJpbmdcclxuICB8ICgoY29udGV4dDogeyBjb250cm9sOiBBYnN0cmFjdENvbnRyb2w7IGNvbnRyb2xOYW1lOiBzdHJpbmcgfSkgPT4gc3RyaW5nKTtcclxuXHJcbi8vIOWtl+autemUmeivr+a2iOaBr+mbhuWQiFxyXG5leHBvcnQgdHlwZSBGaWVsZEVycm9yTWVzc2FnZXMgPSBSZWNvcmQ8c3RyaW5nLCBGaWVsZEVycm9yTWVzc2FnZT47XHJcblxyXG4vLyDlrZfmrrXphY3nva5cclxuZXhwb3J0IHR5cGUgRmllbGRDb25maWcgPSB7XHJcbiAgdmFsdWU6IGFueTtcclxuICBkaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgdmFsaWRhdG9ycz86ICgpID0+IFZhbGlkYXRvckZuW107XHJcbiAgZXJyb3JNZXNzYWdlcz86IEZpZWxkRXJyb3JNZXNzYWdlcztcclxufTtcclxuXHJcbi8vIOW1jOWllyBGb3JtR3JvdXAg6YWN572uXHJcbmV4cG9ydCB0eXBlIEZvcm1Hcm91cENvbmZpZyA9IHtcclxuICB0eXBlOiBcImdyb3VwXCI7XHJcbiAgZmllbGRzOiBGb3JtQ29uZmlnO1xyXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcclxuICB2YWxpZGF0b3JzPzogKCkgPT4gVmFsaWRhdG9yRm5bXTtcclxuICBlcnJvck1lc3NhZ2VzPzogRmllbGRFcnJvck1lc3NhZ2VzO1xyXG59O1xyXG5cclxuLy8gRm9ybUFycmF5IOmFjee9rlxyXG5leHBvcnQgdHlwZSBGb3JtQXJyYXlDb25maWcgPSB7XHJcbiAgdHlwZTogXCJhcnJheVwiO1xyXG4gIGl0ZW1Db25maWc6IEZvcm1Db25maWc7XHJcbiAgaW5pdGlhbFJvd3M/OiBudW1iZXI7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIHZhbGlkYXRvcnM/OiAoKSA9PiBWYWxpZGF0b3JGbltdO1xyXG59O1xyXG5cclxuLy8g6KGo5Y2V5L+u5pS557G75Z6LXHJcbmV4cG9ydCB0eXBlIEZvcm1Nb2RpZnlUeXBlID0gXCJjcmVhdGVcIiB8IFwidXBkYXRlXCI7XHJcblxyXG4vLyDooajljZXphY3nva7vvIjmlK/mjIHmma7pgJrlrZfmrrXjgIHltYzlpZcgRm9ybUdyb3VwIOWSjCBGb3JtQXJyYXnvvIlcclxuZXhwb3J0IHR5cGUgRm9ybUNvbmZpZyA9IFJlY29yZDxzdHJpbmcsIEZpZWxkQ29uZmlnIHwgRm9ybUdyb3VwQ29uZmlnIHwgRm9ybUFycmF5Q29uZmlnPjtcclxuXHJcbi8vIOebkeWQrOmAiemhuVxyXG5leHBvcnQgdHlwZSBXYXRjaE9wdGlvbnMgPSB7XHJcbiAgZGVib3VuY2U/OiBudW1iZXI7XHJcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQ/OiBib29sZWFuO1xyXG4gIGVtaXRJbml0aWFsPzogYm9vbGVhbjtcclxufTtcclxuXHJcbi8vIOaJuemHj+a3u+WKoOWtl+autemFjee9rumAiemhuVxyXG5leHBvcnQgdHlwZSBBZGRGaWVsZHNDb25maWdPcHRpb25zID0ge1xyXG4gIGVtaXRFdmVudD86IGJvb2xlYW47XHJcbiAgdXBkYXRlVmFsdWVBbmRWYWxpZGl0eT86IGJvb2xlYW47XHJcbiAgb25GaWVsZEFkZGVkPzogKGZpZWxkTmFtZTogc3RyaW5nLCBzdWNjZXNzOiBib29sZWFuLCBlcnJvcj86IHN0cmluZykgPT4gdm9pZDsgLy8g5q+P5Liq5a2X5q615re75Yqg55qE5Zue6LCDXHJcbiAgdGFyZ2V0UGF0aD86IHN0cmluZzsgLy8g55uu5qCH6Lev5b6E77yM55So5LqO5Zyo5bWM5aWXIEZvcm1Hcm91cCDlhoXpg6jmt7vliqDlrZfmrrXvvIzkvovlpoI6IFwiY2FyZEJhc2VJbmZvXCIg5oiWIFwidXNlckluZm8uYWRkcmVzc0luZm9cIlxyXG59O1xyXG5cclxuLy8g5om56YeP5re75Yqg5a2X5q616YWN572u57uT5p6cXHJcbmV4cG9ydCB0eXBlIEFkZEZpZWxkc0NvbmZpZ1Jlc3VsdCA9IHtcclxuICBzdWNjZXNzOiBib29sZWFuO1xyXG4gIGFkZGVkOiBzdHJpbmdbXTsgLy8g5oiQ5Yqf5re75Yqg55qE5a2X5q615ZCN5YiX6KGoXHJcbiAgZmFpbGVkOiBBcnJheTx7IGZpZWxkTmFtZTogc3RyaW5nOyBlcnJvcjogc3RyaW5nIH0+OyAvLyDlpLHotKXnmoTlrZfmrrXlj4rplJnor6/kv6Hmga9cclxufTtcclxuXHJcbi8vIOaJuemHj+WIoOmZpOWtl+autemFjee9rumAiemhuVxyXG5leHBvcnQgdHlwZSBSZW1vdmVGaWVsZHNDb25maWdPcHRpb25zID0ge1xyXG4gIGVtaXRFdmVudD86IGJvb2xlYW47XHJcbiAgb25GaWVsZFJlbW92ZWQ/OiAoXHJcbiAgICBmaWVsZE5hbWU6IHN0cmluZyxcclxuICAgIHN1Y2Nlc3M6IGJvb2xlYW4sXHJcbiAgICBlcnJvcj86IHN0cmluZ1xyXG4gICkgPT4gdm9pZDsgLy8g5q+P5Liq5a2X5q615Yig6Zmk55qE5Zue6LCDXHJcbn07XHJcblxyXG4vLyDmibnph4/liKDpmaTlrZfmrrXphY3nva7nu5PmnpxcclxuZXhwb3J0IHR5cGUgUmVtb3ZlRmllbGRzQ29uZmlnUmVzdWx0ID0ge1xyXG4gIHN1Y2Nlc3M6IGJvb2xlYW47XHJcbiAgcmVtb3ZlZDogc3RyaW5nW107IC8vIOaIkOWKn+WIoOmZpOeahOWtl+auteWQjeWIl+ihqFxyXG4gIGZhaWxlZDogQXJyYXk8eyBmaWVsZE5hbWU6IHN0cmluZzsgZXJyb3I6IHN0cmluZyB9PjsgLy8g5aSx6LSl55qE5a2X5q615Y+K6ZSZ6K+v5L+h5oGvXHJcbn07XHJcblxyXG4vLyA9PT09PT09PT09PT09PT09PT09PSDmnI3liqHnsbsgPT09PT09PT09PT09PT09PT09PT1cclxuXHJcbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogXCJyb290XCIgfSlcclxuZXhwb3J0IGNsYXNzIEFudGRGb3JtU2VydmljZSB7XHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g5YWs5YWx5bGe5oCnID09PT09PT09PT09PT09PT09PT09XHJcbiAgZm9ybVN0b3JlOiBSZWNvcmQ8c3RyaW5nLCBVbnR5cGVkRm9ybUdyb3VwPiA9IHt9O1xyXG4gIGZvcm1Nb2RpZnlUeXBlOiBGb3JtTW9kaWZ5VHlwZSA9IFwiY3JlYXRlXCI7XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOengeacieWxnuaApyA9PT09PT09PT09PT09PT09PT09PVxyXG4gIHByaXZhdGUgZm9ybVJlZ2lzdGVyU3RvcmU6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XHJcbiAgcHJpdmF0ZSBsYWJlbFdpZHRoOiBzdHJpbmcgPSBcIjEyMHB4XCI7XHJcbiAgcHJpdmF0ZSBsYWJlbEFsaWduOiBzdHJpbmcgPSBcInJpZ2h0XCI7XHJcbiAgcHJpdmF0ZSBsYWJlbE9ic2VydmVyczogUmVjb3JkPHN0cmluZywgTXV0YXRpb25PYnNlcnZlcj4gPSB7fTtcclxuICBwcml2YXRlIGVycm9yTWVzc2FnZVN0b3JlOiBSZWNvcmQ8XHJcbiAgICBzdHJpbmcsXHJcbiAgICBSZWNvcmQ8c3RyaW5nLCBGaWVsZEVycm9yTWVzc2FnZXM+XHJcbiAgPiA9IHt9O1xyXG4gIHByaXZhdGUgYXJyYXlFZGl0aW5nUm93czogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgU2V0PG51bWJlcj4+PiA9IHt9O1xyXG4gIHByaXZhdGUgYXJyYXlSb3dTbmFwc2hvdHM6IFJlY29yZDxcclxuICAgIHN0cmluZyxcclxuICAgIFJlY29yZDxzdHJpbmcsIE1hcDxudW1iZXIsIGFueT4+XHJcbiAgPiA9IHt9O1xyXG4gIHByaXZhdGUgYXJyYXlJdGVtQ29uZmlnczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgRm9ybUNvbmZpZz4+ID0ge307XHJcbiAgcHJpdmF0ZSBjbGFzc1ByZWZpeCA9IFwiYW50LWZvcm0tXCI7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0RXJyb3JNZXNzYWdlczogRmllbGRFcnJvck1lc3NhZ2VzID0ge1xyXG4gICAgcmVxdWlyZWQ6IFwi6K+l5a2X5q615Li65b+F5aGr6aG5XCIsXHJcbiAgICBtaW5sZW5ndGg6IFwi6L6T5YWl6ZW/5bqm5LiN6LazXCIsXHJcbiAgICBtYXhsZW5ndGg6IFwi6L6T5YWl6ZW/5bqm6LaF6ZmQXCIsXHJcbiAgICBlbWFpbDogXCLor7fovpPlhaXlkIjms5XnmoTpgq7nrrHlnLDlnYBcIixcclxuICAgIHBhdHRlcm46IFwi6L6T5YWl5qC85byP5LiN5q2j56GuXCIsXHJcbiAgfTtcclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g5p6E6YCg5Ye95pWwID09PT09PT09PT09PT09PT09PT09XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmYjogVW50eXBlZEZvcm1CdWlsZGVyKSB7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDooajljZXliJvlu7rlkozliJ3lp4vljJYgPT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgLy8g5Yik5pat5piv5ZCm5Li65bWM5aWXIEZvcm1Hcm91cCDphY3nva5cclxuICBwcml2YXRlIGlzRm9ybUdyb3VwQ29uZmlnKFxyXG4gICAgY29uZmlnOiBGaWVsZENvbmZpZyB8IEZvcm1Hcm91cENvbmZpZyB8IEZvcm1BcnJheUNvbmZpZ1xyXG4gICk6IGNvbmZpZyBpcyBGb3JtR3JvdXBDb25maWcge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdHlwZW9mIGNvbmZpZyA9PT0gXCJvYmplY3RcIiAmJlxyXG4gICAgICBjb25maWcgIT09IG51bGwgJiZcclxuICAgICAgXCJ0eXBlXCIgaW4gY29uZmlnICYmXHJcbiAgICAgIGNvbmZpZy50eXBlID09PSBcImdyb3VwXCJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyDliKTmlq3mmK/lkKbkuLogRm9ybUFycmF5IOmFjee9rlxyXG4gIHByaXZhdGUgaXNGb3JtQXJyYXlDb25maWcoXHJcbiAgICBjb25maWc6IEZpZWxkQ29uZmlnIHwgRm9ybUdyb3VwQ29uZmlnIHwgRm9ybUFycmF5Q29uZmlnXHJcbiAgKTogY29uZmlnIGlzIEZvcm1BcnJheUNvbmZpZyB7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICB0eXBlb2YgY29uZmlnID09PSBcIm9iamVjdFwiICYmXHJcbiAgICAgIGNvbmZpZyAhPT0gbnVsbCAmJlxyXG4gICAgICBcInR5cGVcIiBpbiBjb25maWcgJiZcclxuICAgICAgY29uZmlnLnR5cGUgPT09IFwiYXJyYXlcIlxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8vIOagueaNrui3r+W+hOiOt+WPluW1jOWll+eahCBGb3JtQXJyYXlcclxuICBwcml2YXRlIGdldE5lc3RlZEZvcm1BcnJheShcclxuICAgIGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCxcclxuICAgIHBhdGg6IHN0cmluZ1xyXG4gICk6IFVudHlwZWRGb3JtQXJyYXkgfCBudWxsIHtcclxuICAgIGlmICghcGF0aCB8fCBwYXRoLnRyaW0oKSA9PT0gXCJcIikge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXRoUGFydHMgPSBwYXRoLnNwbGl0KFwiLlwiKS5maWx0ZXIoKHApID0+IHAudHJpbSgpICE9PSBcIlwiKTtcclxuICAgIGxldCBjdXJyZW50OiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gZm9ybUdyb3VwO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aFBhcnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICghY3VycmVudCkgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNvbnN0IHBhcnQgPSBwYXRoUGFydHNbaV07XHJcbiAgICAgIGlmIChpID09PSBwYXRoUGFydHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IChjdXJyZW50IGFzIFVudHlwZWRGb3JtR3JvdXApLmdldFxyXG4gICAgICAgICAgPyBjdXJyZW50LmdldChwYXJ0KVxyXG4gICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5ID8gdGFyZ2V0IDogbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjdXJyZW50ID0gY3VycmVudCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXAgPyBjdXJyZW50LmdldChwYXJ0KSA6IG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIOagueaNriBpdGVtQ29uZmlnIOWIm+W7uiBGb3JtQXJyYXkg55qE5Y2V6KGMIEZvcm1Hcm91cFxyXG4gIHByaXZhdGUgY3JlYXRlQXJyYXlSb3dHcm91cChcclxuICAgIGl0ZW1Db25maWc6IEZvcm1Db25maWcsXHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW5cclxuICApOiBVbnR5cGVkRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLmNyZWF0ZU5lc3RlZEZvcm1Hcm91cChpdGVtQ29uZmlnLCBkaXNhYmxlZCk7XHJcbiAgfVxyXG5cclxuICAvLyDpgJLlvZLliJvlu7rltYzlpZcgRm9ybUdyb3VwXHJcbiAgcHJpdmF0ZSBjcmVhdGVOZXN0ZWRGb3JtR3JvdXAoXHJcbiAgICBmaWVsZHM6IEZvcm1Db25maWcsXHJcbiAgICBkaXNhYmxlZD86IGJvb2xlYW5cclxuICApOiBVbnR5cGVkRm9ybUdyb3VwIHtcclxuICAgIGNvbnN0IGdyb3VwQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcblxyXG4gICAgT2JqZWN0LmVudHJpZXMoZmllbGRzKS5mb3JFYWNoKChba2V5LCBmaWVsZENvbmZpZ10pID0+IHtcclxuICAgICAgaWYgKHRoaXMuaXNGb3JtR3JvdXBDb25maWcoZmllbGRDb25maWcpKSB7XHJcbiAgICAgICAgLy8g6YCS5b2S5Yib5bu65bWM5aWX55qEIEZvcm1Hcm91cFxyXG4gICAgICAgIGdyb3VwQ29uZmlnW2tleV0gPSB0aGlzLmNyZWF0ZU5lc3RlZEZvcm1Hcm91cChcclxuICAgICAgICAgIGZpZWxkQ29uZmlnLmZpZWxkcyxcclxuICAgICAgICAgIGZpZWxkQ29uZmlnLmRpc2FibGVkID8/IGRpc2FibGVkXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRm9ybUFycmF5Q29uZmlnKGZpZWxkQ29uZmlnKSkge1xyXG4gICAgICAgIC8vIOWIm+W7uiBGb3JtQXJyYXlcclxuICAgICAgICBjb25zdCByb3dzOiBVbnR5cGVkRm9ybUdyb3VwW10gPSBbXTtcclxuICAgICAgICBjb25zdCByb3dDb3VudCA9IGZpZWxkQ29uZmlnLmluaXRpYWxSb3dzID8/IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICByb3dzLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQXJyYXlSb3dHcm91cChcclxuICAgICAgICAgICAgICBmaWVsZENvbmZpZy5pdGVtQ29uZmlnLFxyXG4gICAgICAgICAgICAgIGZpZWxkQ29uZmlnLmRpc2FibGVkID8/IGRpc2FibGVkXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdyb3VwQ29uZmlnW2tleV0gPSB0aGlzLmZiLmFycmF5KHJvd3MsIGZpZWxkQ29uZmlnLnZhbGlkYXRvcnM/LigpID8/IFtdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDliJvlu7rmma7pgJogRm9ybUNvbnRyb2xcclxuICAgICAgICBncm91cENvbmZpZ1trZXldID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZTogZmllbGRDb25maWcudmFsdWUsXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBmaWVsZENvbmZpZy5kaXNhYmxlZCA/PyBkaXNhYmxlZCA/PyBmYWxzZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmaWVsZENvbmZpZy52YWxpZGF0b3JzPy4oKSA/PyBbXSxcclxuICAgICAgICBdO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cChncm91cENvbmZpZyk7XHJcbiAgfVxyXG5cclxuICAvLyDliJ3lp4vljJbooajljZVcclxuICBjcmVhdGVGb3JtR3JvdXAoXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBjb25maWc6IEZvcm1Db25maWcsXHJcbiAgICBvcHRpb25zPzogeyBsYWJlbFdpZHRoPzogc3RyaW5nOyBsYWJlbEFsaWduPzogc3RyaW5nIH1cclxuICApOiBVbnR5cGVkRm9ybUdyb3VwIHtcclxuICAgIGNvbnN0IGdyb3VwQ29uZmlnOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZVN0b3JlW25hbWVdID0ge307XHJcblxyXG4gICAgT2JqZWN0LmVudHJpZXMoY29uZmlnKS5mb3JFYWNoKChba2V5LCBmaWVsZENvbmZpZ10pID0+IHtcclxuICAgICAgaWYgKHRoaXMuaXNGb3JtR3JvdXBDb25maWcoZmllbGRDb25maWcpKSB7XHJcbiAgICAgICAgLy8g5aSE55CG5bWM5aWXIEZvcm1Hcm91cFxyXG4gICAgICAgIGNvbnN0IG5lc3RlZEdyb3VwID0gdGhpcy5jcmVhdGVOZXN0ZWRGb3JtR3JvdXAoXHJcbiAgICAgICAgICBmaWVsZENvbmZpZy5maWVsZHMsXHJcbiAgICAgICAgICBmaWVsZENvbmZpZy5kaXNhYmxlZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgZ3JvdXBDb25maWdba2V5XSA9IG5lc3RlZEdyb3VwO1xyXG5cclxuICAgICAgICAvLyDlrZjlgqjltYzlpZcgRm9ybUdyb3VwIOeahOmUmeivr+a2iOaBr++8iOWmguaenOmcgOimge+8iVxyXG4gICAgICAgIGlmIChmaWVsZENvbmZpZy5lcnJvck1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZVN0b3JlW25hbWVdW2tleV0gPSBmaWVsZENvbmZpZy5lcnJvck1lc3NhZ2VzO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmlzRm9ybUFycmF5Q29uZmlnKGZpZWxkQ29uZmlnKSkge1xyXG4gICAgICAgIC8vIOWkhOeQhiBGb3JtQXJyYXlcclxuICAgICAgICBjb25zdCByb3dzOiBVbnR5cGVkRm9ybUdyb3VwW10gPSBbXTtcclxuICAgICAgICBjb25zdCByb3dDb3VudCA9IGZpZWxkQ29uZmlnLmluaXRpYWxSb3dzID8/IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICByb3dzLnB1c2goXHJcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQXJyYXlSb3dHcm91cChmaWVsZENvbmZpZy5pdGVtQ29uZmlnLCBmaWVsZENvbmZpZy5kaXNhYmxlZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGdyb3VwQ29uZmlnW2tleV0gPSB0aGlzLmZiLmFycmF5KHJvd3MsIGZpZWxkQ29uZmlnLnZhbGlkYXRvcnM/LigpID8/IFtdKTtcclxuICAgICAgICB0aGlzLl9lbnN1cmVBcnJheUl0ZW1Db25maWcobmFtZSwga2V5LCBmaWVsZENvbmZpZy5pdGVtQ29uZmlnKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDlpITnkIbmma7pgJrlrZfmrrVcclxuICAgICAgICBncm91cENvbmZpZ1trZXldID0gW1xyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICB2YWx1ZTogZmllbGRDb25maWcudmFsdWUsXHJcbiAgICAgICAgICAgIGRpc2FibGVkOiBmaWVsZENvbmZpZy5kaXNhYmxlZCA/PyBmYWxzZSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmaWVsZENvbmZpZy52YWxpZGF0b3JzPy4oKSA/PyBbXSxcclxuICAgICAgICBdO1xyXG4gICAgICAgIGlmIChmaWVsZENvbmZpZy5lcnJvck1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICB0aGlzLmVycm9yTWVzc2FnZVN0b3JlW25hbWVdW2tleV0gPSBmaWVsZENvbmZpZy5lcnJvck1lc3NhZ2VzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKG9wdGlvbnM/LmxhYmVsV2lkdGgpIHtcclxuICAgICAgdGhpcy5sYWJlbFdpZHRoID0gb3B0aW9ucy5sYWJlbFdpZHRoO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbnM/LmxhYmVsQWxpZ24pIHtcclxuICAgICAgdGhpcy5sYWJlbEFsaWduID0gb3B0aW9ucy5sYWJlbEFsaWduO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtU3RvcmVbbmFtZV0gPSB0aGlzLmZiLmdyb3VwKGdyb3VwQ29uZmlnKTtcclxuICAgIHRoaXMuZm9ybVJlZ2lzdGVyU3RvcmVbbmFtZV0gPSB0cnVlO1xyXG4gICAgdGhpcy5zZXRDU1NWYXJpYWJsZXNUb1RhcmdldChuYW1lKTtcclxuICAgIHJldHVybiB0aGlzLmZvcm1TdG9yZVtuYW1lXTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOihqOWNleaTjeS9nCA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyDph43nva7ooajljZVcclxuICByZXNldEZvcm1Hcm91cChuYW1lOiBzdHJpbmcsIHZhbHVlPzogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLmZvcm1TdG9yZVtuYW1lXT8ucmVzZXQodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLy8g5qOA5rWL6KGo5Y2V5piv5ZCm5a6M5oiQ5rOo5YaMXHJcbiAgaXNGb3JtUmVnaXN0ZXJlZChuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZvcm1SZWdpc3RlclN0b3JlW25hbWVdID8/IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLy8g6ZSA5q+B5a+55bqU55qE6KGo5Y2VXHJcbiAgZGVzdG9yeShuYW1lczogc3RyaW5nW10pOiB2b2lkIHtcclxuICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcclxuICAgICAgLy8g5riF55CG6ZSZ6K+v5raI5oGv5a2Y5YKoXHJcbiAgICAgIGlmICh0aGlzLmVycm9yTWVzc2FnZVN0b3JlW25hbWVdKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuZXJyb3JNZXNzYWdlU3RvcmVbbmFtZV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOa4heeQhuihqOWNleazqOWGjOagh+iusFxyXG4gICAgICBpZiAodGhpcy5mb3JtUmVnaXN0ZXJTdG9yZVtuYW1lXSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmZvcm1SZWdpc3RlclN0b3JlW25hbWVdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDmuIXnkIbooajljZXnu4TvvIhBbmd1bGFyIOS8muiHquWKqOWkhOeQhiBGb3JtR3JvdXAg55qE5riF55CG77yJXHJcbiAgICAgIGlmICh0aGlzLmZvcm1TdG9yZVtuYW1lXSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmZvcm1TdG9yZVtuYW1lXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5riF55CGIEZvcm1BcnJheSDnvJbovpHnirbmgIFcclxuICAgICAgaWYgKHRoaXMuYXJyYXlFZGl0aW5nUm93c1tuYW1lXSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmFycmF5RWRpdGluZ1Jvd3NbbmFtZV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOa4heeQhiBGb3JtQXJyYXkg6KGM5b+r54WnXHJcbiAgICAgIGlmICh0aGlzLmFycmF5Um93U25hcHNob3RzW25hbWVdKSB7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuYXJyYXlSb3dTbmFwc2hvdHNbbmFtZV07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIOa4heeQhiBGb3JtQXJyYXkgaXRlbUNvbmZpZyDnvJPlrZhcclxuICAgICAgaWYgKHRoaXMuYXJyYXlJdGVtQ29uZmlnc1tuYW1lXSkge1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmFycmF5SXRlbUNvbmZpZ3NbbmFtZV07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLy8g5qC55o2u6Lev5b6E6I635Y+W5bWM5aWX55qEIEZvcm1Hcm91cFxyXG4gIHByaXZhdGUgZ2V0TmVzdGVkRm9ybUdyb3VwKFxyXG4gICAgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgcGF0aDogc3RyaW5nXHJcbiAgKTogVW50eXBlZEZvcm1Hcm91cCB8IG51bGwge1xyXG4gICAgaWYgKCFwYXRoIHx8IHBhdGgudHJpbSgpID09PSBcIlwiKSB7XHJcbiAgICAgIHJldHVybiBmb3JtR3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcGF0aFBhcnRzID0gcGF0aC5zcGxpdChcIi5cIikuZmlsdGVyKChwKSA9PiBwLnRyaW0oKSAhPT0gXCJcIik7XHJcbiAgICBsZXQgY3VycmVudEdyb3VwOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gZm9ybUdyb3VwO1xyXG5cclxuICAgIGZvciAoY29uc3QgcGFydCBvZiBwYXRoUGFydHMpIHtcclxuICAgICAgaWYgKCFjdXJyZW50R3JvdXAgfHwgIShjdXJyZW50R3JvdXAgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwKSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGN1cnJlbnRHcm91cCA9IGN1cnJlbnRHcm91cC5nZXQocGFydCk7XHJcbiAgICAgIGlmICghY3VycmVudEdyb3VwIHx8ICEoY3VycmVudEdyb3VwIGluc3RhbmNlb2YgVW50eXBlZEZvcm1Hcm91cCkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBjdXJyZW50R3JvdXAgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwID8gY3VycmVudEdyb3VwIDogbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIOaJuemHj+a3u+WKoOWtl+autemFjee9rlxyXG4gIGFkZEZpZWxkc0NvbmZpZyhcclxuICAgIGZvcm1OYW1lOiBzdHJpbmcsXHJcbiAgICBmaWVsZHNDb25maWc6IEZvcm1Db25maWcsXHJcbiAgICBvcHRpb25zPzogQWRkRmllbGRzQ29uZmlnT3B0aW9uc1xyXG4gICk6IEFkZEZpZWxkc0NvbmZpZ1Jlc3VsdCB7XHJcbiAgICBjb25zdCByZXN1bHQ6IEFkZEZpZWxkc0NvbmZpZ1Jlc3VsdCA9IHtcclxuICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgYWRkZWQ6IFtdLFxyXG4gICAgICBmYWlsZWQ6IFtdLFxyXG4gICAgfTtcclxuXHJcbiAgICAvLyAxLiDpqozor4HooajljZXmmK/lkKblrZjlnKhcclxuICAgIGNvbnN0IHJvb3RGb3JtR3JvdXAgPSB0aGlzLmZvcm1TdG9yZVtmb3JtTmFtZV07XHJcbiAgICBpZiAoIXJvb3RGb3JtR3JvdXApIHtcclxuICAgICAgLy8g5aaC5p6c6KGo5Y2V5LiN5a2Y5Zyo77yM5omA5pyJ5a2X5q616YO95aSx6LSlXHJcbiAgICAgIE9iamVjdC5rZXlzKGZpZWxkc0NvbmZpZykuZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSBgRm9ybSBcIiR7Zm9ybU5hbWV9XCIgbm90IGZvdW5kYDtcclxuICAgICAgICByZXN1bHQuZmFpbGVkLnB1c2goe1xyXG4gICAgICAgICAgZmllbGROYW1lLFxyXG4gICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgb3B0aW9ucz8ub25GaWVsZEFkZGVkPy4oZmllbGROYW1lLCBmYWxzZSwgZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmVzdWx0LnN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyAyLiDojrflj5bnm67moIcgRm9ybUdyb3Vw77yI5pSv5oyB5bWM5aWX6Lev5b6E77yJXHJcbiAgICBjb25zdCB0YXJnZXRQYXRoID0gb3B0aW9ucz8udGFyZ2V0UGF0aDtcclxuICAgIGNvbnN0IHRhcmdldEZvcm1Hcm91cCA9IHRhcmdldFBhdGhcclxuICAgICAgPyB0aGlzLmdldE5lc3RlZEZvcm1Hcm91cChyb290Rm9ybUdyb3VwLCB0YXJnZXRQYXRoKVxyXG4gICAgICA6IHJvb3RGb3JtR3JvdXA7XHJcblxyXG4gICAgaWYgKCF0YXJnZXRGb3JtR3JvdXApIHtcclxuICAgICAgLy8g5aaC5p6c55uu5qCHIEZvcm1Hcm91cCDkuI3lrZjlnKjvvIzmiYDmnInlrZfmrrXpg73lpLHotKVcclxuICAgICAgT2JqZWN0LmtleXMoZmllbGRzQ29uZmlnKS5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRhcmdldFBhdGhcclxuICAgICAgICAgID8gYFRhcmdldCBGb3JtR3JvdXAgYXQgcGF0aCBcIiR7dGFyZ2V0UGF0aH1cIiBub3QgZm91bmRgXHJcbiAgICAgICAgICA6IGBGb3JtR3JvdXAgbm90IGZvdW5kYDtcclxuICAgICAgICByZXN1bHQuZmFpbGVkLnB1c2goe1xyXG4gICAgICAgICAgZmllbGROYW1lLFxyXG4gICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgb3B0aW9ucz8ub25GaWVsZEFkZGVkPy4oZmllbGROYW1lLCBmYWxzZSwgZXJyb3IpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmVzdWx0LnN1Y2Nlc3MgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyAzLiDliJ3lp4vljJYgZXJyb3JNZXNzYWdlU3RvcmXvvIjlpoLmnpzkuI3lrZjlnKjvvIlcclxuICAgIGlmICghdGhpcy5lcnJvck1lc3NhZ2VTdG9yZVtmb3JtTmFtZV0pIHtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2VTdG9yZVtmb3JtTmFtZV0gPSB7fTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA0LiDmibnph4/mnoTlu7rmjqfku7bphY3nva5cclxuICAgIGNvbnN0IGNvbnRyb2xzVG9BZGQ6IFJlY29yZDxzdHJpbmcsIEFic3RyYWN0Q29udHJvbD4gPSB7fTtcclxuICAgIGNvbnN0IGVycm9yTWVzc2FnZXNUb0FkZDogUmVjb3JkPHN0cmluZywgRmllbGRFcnJvck1lc3NhZ2VzPiA9IHt9O1xyXG5cclxuICAgIC8vIDUuIOmBjeWOhuaJgOacieWtl+autemFjee9ru+8jOi/m+ihjOmqjOivgeWSjOaehOW7ulxyXG4gICAgT2JqZWN0LmVudHJpZXMoZmllbGRzQ29uZmlnKS5mb3JFYWNoKChbZmllbGROYW1lLCBmaWVsZENvbmZpZ10pID0+IHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICAvLyA1LjEg5qOA5p+l5a2X5q615piv5ZCm5bey5a2Y5ZyoXHJcbiAgICAgICAgaWYgKHRhcmdldEZvcm1Hcm91cC5nZXQoZmllbGROYW1lKSkge1xyXG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBgRmllbGQgXCIke2ZpZWxkTmFtZX1cIiBhbHJlYWR5IGV4aXN0cyR7XHJcbiAgICAgICAgICAgIHRhcmdldFBhdGggPyBgIGluIFwiJHt0YXJnZXRQYXRofVwiYCA6IFwiXCJcclxuICAgICAgICAgIH1gO1xyXG4gICAgICAgICAgcmVzdWx0LmZhaWxlZC5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGROYW1lLFxyXG4gICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgb3B0aW9ucz8ub25GaWVsZEFkZGVkPy4oZmllbGROYW1lLCBmYWxzZSwgZXJyb3IpO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gNS4yIOWIm+W7uuaOp+S7tlxyXG4gICAgICAgIGxldCBjb250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzRm9ybUdyb3VwQ29uZmlnKGZpZWxkQ29uZmlnKSkge1xyXG4gICAgICAgICAgLy8g5Yib5bu65bWM5aWXIEZvcm1Hcm91cFxyXG4gICAgICAgICAgY29udHJvbCA9IHRoaXMuY3JlYXRlTmVzdGVkRm9ybUdyb3VwKFxyXG4gICAgICAgICAgICBmaWVsZENvbmZpZy5maWVsZHMsXHJcbiAgICAgICAgICAgIGZpZWxkQ29uZmlnLmRpc2FibGVkXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8g5a2Y5YKo5bWM5aWXIEZvcm1Hcm91cCDnmoTplJnor6/mtojmga/vvIjlpoLmnpzpnIDopoHvvIlcclxuICAgICAgICAgIGlmIChmaWVsZENvbmZpZy5lcnJvck1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZUtleSA9IHRhcmdldFBhdGhcclxuICAgICAgICAgICAgICA/IGAke3RhcmdldFBhdGh9LiR7ZmllbGROYW1lfWBcclxuICAgICAgICAgICAgICA6IGZpZWxkTmFtZTtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlc1RvQWRkW2Vycm9yTWVzc2FnZUtleV0gPSBmaWVsZENvbmZpZy5lcnJvck1lc3NhZ2VzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0Zvcm1BcnJheUNvbmZpZyhmaWVsZENvbmZpZykpIHtcclxuICAgICAgICAgIC8vIOWIm+W7uiBGb3JtQXJyYXlcclxuICAgICAgICAgIGNvbnN0IHJvd3M6IFVudHlwZWRGb3JtR3JvdXBbXSA9IFtdO1xyXG4gICAgICAgICAgY29uc3Qgcm93Q291bnQgPSBmaWVsZENvbmZpZy5pbml0aWFsUm93cyA/PyAwO1xyXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgIHJvd3MucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUFycmF5Um93R3JvdXAoXHJcbiAgICAgICAgICAgICAgICBmaWVsZENvbmZpZy5pdGVtQ29uZmlnLFxyXG4gICAgICAgICAgICAgICAgZmllbGRDb25maWcuZGlzYWJsZWRcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb250cm9sID0gdGhpcy5mYi5hcnJheShyb3dzLCBmaWVsZENvbmZpZy52YWxpZGF0b3JzPy4oKSA/PyBbXSk7XHJcbiAgICAgICAgICB0aGlzLl9lbnN1cmVBcnJheUl0ZW1Db25maWcoZm9ybU5hbWUsIGZpZWxkTmFtZSwgZmllbGRDb25maWcuaXRlbUNvbmZpZyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIOWIm+W7uuaZrumAmiBGb3JtQ29udHJvbFxyXG4gICAgICAgICAgY29uc3QgY29udHJvbE9wdGlvbnM6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHZhbGlkYXRvcnM6IGZpZWxkQ29uZmlnLnZhbGlkYXRvcnM/LigpID8/IFtdLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIGNvbnRyb2wgPSB0aGlzLmZiLmNvbnRyb2woZmllbGRDb25maWcudmFsdWUsIGNvbnRyb2xPcHRpb25zKTtcclxuICAgICAgICAgIC8vIOiuvue9riBkaXNhYmxlZCDnirbmgIFcclxuICAgICAgICAgIGlmIChmaWVsZENvbmZpZy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIOWtmOWCqOmUmeivr+a2iOaBr1xyXG4gICAgICAgICAgaWYgKGZpZWxkQ29uZmlnLmVycm9yTWVzc2FnZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlS2V5ID0gdGFyZ2V0UGF0aFxyXG4gICAgICAgICAgICAgID8gYCR7dGFyZ2V0UGF0aH0uJHtmaWVsZE5hbWV9YFxyXG4gICAgICAgICAgICAgIDogZmllbGROYW1lO1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2VzVG9BZGRbZXJyb3JNZXNzYWdlS2V5XSA9IGZpZWxkQ29uZmlnLmVycm9yTWVzc2FnZXM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb250cm9sc1RvQWRkW2ZpZWxkTmFtZV0gPSBjb250cm9sO1xyXG5cclxuICAgICAgICByZXN1bHQuYWRkZWQucHVzaChmaWVsZE5hbWUpO1xyXG4gICAgICAgIG9wdGlvbnM/Lm9uRmllbGRBZGRlZD8uKGZpZWxkTmFtZSwgdHJ1ZSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3I/LnRvU3RyaW5nKCkgfHwgXCJVbmtub3duIGVycm9yXCI7XHJcbiAgICAgICAgcmVzdWx0LmZhaWxlZC5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkTmFtZSxcclxuICAgICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgb3B0aW9ucz8ub25GaWVsZEFkZGVkPy4oZmllbGROYW1lLCBmYWxzZSwgZXJyb3JNZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gNi4g5om56YeP5re75Yqg5Yiw55uu5qCHIEZvcm1Hcm91cFxyXG4gICAgaWYgKE9iamVjdC5rZXlzKGNvbnRyb2xzVG9BZGQpLmxlbmd0aCA+IDApIHtcclxuICAgICAgT2JqZWN0LmVudHJpZXMoY29udHJvbHNUb0FkZCkuZm9yRWFjaCgoW2ZpZWxkTmFtZSwgY29udHJvbF0pID0+IHtcclxuICAgICAgICB0YXJnZXRGb3JtR3JvdXAuYWRkQ29udHJvbChmaWVsZE5hbWUsIGNvbnRyb2wpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIC8vIDcuIOaJuemHj+WtmOWCqOmUmeivr+a2iOaBr1xyXG4gICAgICBPYmplY3QuZW50cmllcyhlcnJvck1lc3NhZ2VzVG9BZGQpLmZvckVhY2goKFtrZXksIG1lc3NhZ2VzXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlU3RvcmVbZm9ybU5hbWVdW2tleV0gPSBtZXNzYWdlcztcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyA4LiDmm7TmlrDooajljZXpqozor4HnirbmgIFcclxuICAgICAgaWYgKG9wdGlvbnM/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkpIHtcclxuICAgICAgICB0YXJnZXRGb3JtR3JvdXAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XHJcbiAgICAgICAgICBlbWl0RXZlbnQ6IG9wdGlvbnM/LmVtaXRFdmVudCA/PyB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gOS4g5Yik5pat5pW05L2T5piv5ZCm5oiQ5YqfXHJcbiAgICByZXN1bHQuc3VjY2VzcyA9IHJlc3VsdC5mYWlsZWQubGVuZ3RoID09PSAwO1xyXG5cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICAvLyDmibnph4/liKDpmaTlrZfmrrXphY3nva5cclxuICByZW1vdmVGaWVsZHNDb25maWcoXHJcbiAgICBmb3JtTmFtZTogc3RyaW5nLFxyXG4gICAgZmllbGROYW1lczogc3RyaW5nW10sXHJcbiAgICBvcHRpb25zPzogUmVtb3ZlRmllbGRzQ29uZmlnT3B0aW9uc1xyXG4gICk6IFJlbW92ZUZpZWxkc0NvbmZpZ1Jlc3VsdCB7XHJcbiAgICBjb25zdCByZXN1bHQ6IFJlbW92ZUZpZWxkc0NvbmZpZ1Jlc3VsdCA9IHtcclxuICAgICAgc3VjY2VzczogdHJ1ZSxcclxuICAgICAgcmVtb3ZlZDogW10sXHJcbiAgICAgIGZhaWxlZDogW10sXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIDEuIOmqjOivgeihqOWNleaYr+WQpuWtmOWcqFxyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5mb3JtU3RvcmVbZm9ybU5hbWVdO1xyXG4gICAgaWYgKCFmb3JtR3JvdXApIHtcclxuICAgICAgZmllbGROYW1lcy5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IGBGb3JtIFwiJHtmb3JtTmFtZX1cIiBub3QgZm91bmRgO1xyXG4gICAgICAgIHJlc3VsdC5mYWlsZWQucHVzaCh7XHJcbiAgICAgICAgICBmaWVsZE5hbWUsXHJcbiAgICAgICAgICBlcnJvcixcclxuICAgICAgICB9KTtcclxuICAgICAgICBvcHRpb25zPy5vbkZpZWxkUmVtb3ZlZD8uKGZpZWxkTmFtZSwgZmFsc2UsIGVycm9yKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJlc3VsdC5zdWNjZXNzID0gZmFsc2U7XHJcbiAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gMi4g5om56YeP5pS26ZuG6ZyA6KaB5riF55CG55qE5L+h5oGvXHJcbiAgICBjb25zdCBmaWVsZHNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcclxuICAgIGNvbnN0IGVycm9yTWVzc2FnZUtleXNUb1JlbW92ZTogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgICAvLyAzLiDpqozor4Hmr4/kuKrlrZfmrrXlubbmlLbpm4bkv6Hmga9cclxuICAgIGZpZWxkTmFtZXMuZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkTmFtZSk7XHJcblxyXG4gICAgICBpZiAoIWNvbnRyb2wpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IGBGaWVsZCBcIiR7ZmllbGROYW1lfVwiIG5vdCBmb3VuZGA7XHJcbiAgICAgICAgcmVzdWx0LmZhaWxlZC5wdXNoKHtcclxuICAgICAgICAgIGZpZWxkTmFtZSxcclxuICAgICAgICAgIGVycm9yLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG9wdGlvbnM/Lm9uRmllbGRSZW1vdmVkPy4oZmllbGROYW1lLCBmYWxzZSwgZXJyb3IpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5pS26ZuG6ZSZ6K+v5raI5oGv6ZSuXHJcbiAgICAgIGVycm9yTWVzc2FnZUtleXNUb1JlbW92ZS5wdXNoKGZpZWxkTmFtZSk7XHJcbiAgICAgIGZpZWxkc1RvUmVtb3ZlLnB1c2goZmllbGROYW1lKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIDQuIOaJuemHj+aJp+ihjOWIoOmZpOaTjeS9nFxyXG4gICAgdHJ5IHtcclxuICAgICAgLy8gNC4xIOS7jiBGb3JtR3JvdXAg5Lit56e76Zmk5o6n5Lu2XHJcbiAgICAgIGZpZWxkc1RvUmVtb3ZlLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xyXG4gICAgICAgIGZvcm1Hcm91cC5yZW1vdmVDb250cm9sKGZpZWxkTmFtZSk7XHJcbiAgICAgICAgcmVzdWx0LnJlbW92ZWQucHVzaChmaWVsZE5hbWUpO1xyXG4gICAgICAgIG9wdGlvbnM/Lm9uRmllbGRSZW1vdmVkPy4oZmllbGROYW1lLCB0cnVlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyA0LjIg5om56YeP5Yig6Zmk6ZSZ6K+v5raI5oGvXHJcbiAgICAgIGlmICh0aGlzLmVycm9yTWVzc2FnZVN0b3JlW2Zvcm1OYW1lXSkge1xyXG4gICAgICAgIGVycm9yTWVzc2FnZUtleXNUb1JlbW92ZS5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgIGRlbGV0ZSB0aGlzLmVycm9yTWVzc2FnZVN0b3JlW2Zvcm1OYW1lXVtrZXldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XHJcbiAgICAgIC8vIOWmguaenOaJuemHj+WIoOmZpOi/h+eoi+S4reWHuumUme+8jOagh+iusOS4uuWksei0pVxyXG4gICAgICBmaWVsZHNUb1JlbW92ZS5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcclxuICAgICAgICBpZiAoIXJlc3VsdC5yZW1vdmVkLmluY2x1ZGVzKGZpZWxkTmFtZSkpIHtcclxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yPy50b1N0cmluZygpIHx8IFwiRmFpbGVkIHRvIHJlbW92ZSBmaWVsZFwiO1xyXG4gICAgICAgICAgcmVzdWx0LmZhaWxlZC5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGROYW1lLFxyXG4gICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBvcHRpb25zPy5vbkZpZWxkUmVtb3ZlZD8uKGZpZWxkTmFtZSwgZmFsc2UsIGVycm9yTWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyA1LiDliKTmlq3mlbTkvZPmmK/lkKbmiJDlip9cclxuICAgIHJlc3VsdC5zdWNjZXNzID0gcmVzdWx0LmZhaWxlZC5sZW5ndGggPT09IDA7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8vIOWxgOmDqOi1i+WAvO+8iOaUr+aMgSBGb3JtQXJyYXkg5Zue5aGr77ya6Ieq5Yqo6YeN5bu66KGM57uT5p6E77yJXHJcbiAgcGF0Y2hGb3JtVmFsdWVzKFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgdmFsdWVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxyXG4gICAgb3B0aW9ucz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbiB9XHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1TdG9yZVtuYW1lXTtcclxuICAgIGlmICghZm9ybUdyb3VwKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgW0FudGRGb3JtU2VydmljZV0gcGF0Y2hGb3JtVmFsdWVzOiBmb3JtIFwiJHtuYW1lfVwiIG5vdCBmb3VuZC5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBhcnJheVZhbHVlczogUmVjb3JkPHN0cmluZywgYW55W10+ID0ge307XHJcbiAgICBjb25zdCBwbGFpblZhbHVlczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xyXG5cclxuICAgIC8vIOWMuuWIhiBGb3JtQXJyYXkg5a2X5q615ZKM5pmu6YCa5a2X5q61XHJcbiAgICBPYmplY3QuZW50cmllcyh2YWx1ZXMpLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcclxuICAgICAgY29uc3QgY3RybCA9IGZvcm1Hcm91cC5nZXQoa2V5KTtcclxuICAgICAgaWYgKGN0cmwgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5ICYmIEFycmF5LmlzQXJyYXkodmFsKSkge1xyXG4gICAgICAgIGFycmF5VmFsdWVzW2tleV0gPSB2YWw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcGxhaW5WYWx1ZXNba2V5XSA9IHZhbDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgLy8g5aSE55CGIEZvcm1BcnJheSDlm57loavvvJrmuIXnqbrml6fooYzvvIzmjIkgaXRlbUNvbmZpZyDph43lu7pcclxuICAgIE9iamVjdC5lbnRyaWVzKGFycmF5VmFsdWVzKS5mb3JFYWNoKChba2V5LCByb3dzXSkgPT4ge1xyXG4gICAgICBjb25zdCBmb3JtQXJyYXkgPSBmb3JtR3JvdXAuZ2V0KGtleSkgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgY29uc3QgaXRlbUNvbmZpZyA9IHRoaXMuYXJyYXlJdGVtQ29uZmlnc1tuYW1lXT8uW2tleV07XHJcblxyXG4gICAgICAvLyDmuIXnqbrnjrDmnInooYxcclxuICAgICAgd2hpbGUgKGZvcm1BcnJheS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgZm9ybUFycmF5LnJlbW92ZUF0KDAsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5riF55CG6K+l5pWw57uE55qE57yW6L6R54q25oCB5ZKM5b+r54WnXHJcbiAgICAgIHRoaXMuX2Vuc3VyZUFycmF5U3RhdGUobmFtZSwga2V5KTtcclxuICAgICAgdGhpcy5hcnJheUVkaXRpbmdSb3dzW25hbWVdW2tleV0gPSBuZXcgU2V0KCk7XHJcbiAgICAgIHRoaXMuYXJyYXlSb3dTbmFwc2hvdHNbbmFtZV1ba2V5XSA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICAgIC8vIOaMiSBpdGVtQ29uZmlnIOWIm+W7uuihjOW5tuWbnuWhq1xyXG4gICAgICByb3dzLmZvckVhY2goKHJvd0RhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBuZXdSb3cgPSBpdGVtQ29uZmlnXHJcbiAgICAgICAgICA/IHRoaXMuY3JlYXRlQXJyYXlSb3dHcm91cChpdGVtQ29uZmlnKVxyXG4gICAgICAgICAgOiB0aGlzLmZiLmdyb3VwKHt9KTtcclxuICAgICAgICBpZiAoaXRlbUNvbmZpZykge1xyXG4gICAgICAgICAgbmV3Um93LnBhdGNoVmFsdWUocm93RGF0YSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3JtQXJyYXkucHVzaChuZXdSb3csIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICAvLyDnu5/kuIDop6blj5HkuIDmrKEgdmFsdWVDaGFuZ2VzXHJcbiAgICAgIGlmIChvcHRpb25zPy5lbWl0RXZlbnQgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgZm9ybUFycmF5LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IHRydWUgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8vIOWkhOeQhuaZrumAmuWtl+aute+8iOWQq+W1jOWllyBGb3JtR3JvdXDvvIlcclxuICAgIGlmIChPYmplY3Qua2V5cyhwbGFpblZhbHVlcykubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3JtR3JvdXAucGF0Y2hWYWx1ZShwbGFpblZhbHVlcywge1xyXG4gICAgICAgIGVtaXRFdmVudDogb3B0aW9ucz8uZW1pdEV2ZW50ID8/IHRydWUsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g6KGo5Y2V5qCh6aqM77yI6Ieq5Yqo6L+H5ruk5YaF6YOo5a2X5q6177yJXHJcbiAgdmFsaWRhdGVGb3JtKFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgb3B0aW9ucz86IHsgZW1pdEV2ZW50PzogYm9vbGVhbjsgb25seVNlbGY/OiBib29sZWFuIH1cclxuICApOiBib29sZWFuIHwgUmVjb3JkPHN0cmluZywgYW55PiB7XHJcbiAgICBpZiAodGhpcy5mb3JtU3RvcmVbbmFtZV0udmFsaWQpIHtcclxuICAgICAgY29uc3QgcmF3VmFsdWUgPSB0aGlzLmZvcm1TdG9yZVtuYW1lXS5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgICByZXR1cm4gdGhpcy5leGNsdWRlSW50ZXJuYWxGaWVsZHMocmF3VmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g6YCS5b2S5qCh6aqM5omA5pyJ5o6n5Lu2XHJcbiAgICAgIHRoaXMubWFya0FsbENvbnRyb2xzQXNEaXJ0eShcclxuICAgICAgICB0aGlzLmZvcm1TdG9yZVtuYW1lXSxcclxuICAgICAgICBvcHRpb25zPy5lbWl0RXZlbnQgPz8gdHJ1ZSxcclxuICAgICAgICBvcHRpb25zPy5vbmx5U2VsZiA/PyBmYWxzZVxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDpgJLlvZLmoIforrDmiYDmnInml6DmlYjmjqfku7bkuLogZGlydHlcclxuICBwcml2YXRlIG1hcmtBbGxDb250cm9sc0FzRGlydHkoXHJcbiAgICBjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsXHJcbiAgICBlbWl0RXZlbnQ6IGJvb2xlYW4sXHJcbiAgICBvbmx5U2VsZjogYm9vbGVhblxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKGNvbnRyb2wuaW52YWxpZCkge1xyXG4gICAgICBjb250cm9sLm1hcmtBc0RpcnR5KCk7XHJcbiAgICAgIGNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7XHJcbiAgICAgICAgZW1pdEV2ZW50LFxyXG4gICAgICAgIG9ubHlTZWxmLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDlpoLmnpzmmK8gRm9ybUdyb3Vw77yM6YCS5b2S5aSE55CG5omA5pyJ5a2Q5o6n5Lu2XHJcbiAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIFVudHlwZWRGb3JtR3JvdXApIHtcclxuICAgICAgT2JqZWN0LnZhbHVlcyhjb250cm9sLmNvbnRyb2xzKS5mb3JFYWNoKChjaGlsZENvbnRyb2wpID0+IHtcclxuICAgICAgICB0aGlzLm1hcmtBbGxDb250cm9sc0FzRGlydHkoY2hpbGRDb250cm9sLCBlbWl0RXZlbnQsIG9ubHlTZWxmKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5aaC5p6c5pivIEZvcm1BcnJhee+8jOmAkuW9kuWkhOeQhuaJgOacieihjFxyXG4gICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XHJcbiAgICAgIGNvbnRyb2wuY29udHJvbHMuZm9yRWFjaCgoY2hpbGRDb250cm9sKSA9PiB7XHJcbiAgICAgICAgdGhpcy5tYXJrQWxsQ29udHJvbHNBc0RpcnR5KGNoaWxkQ29udHJvbCwgZW1pdEV2ZW50LCBvbmx5U2VsZik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g6ZSZ6K+v5raI5oGv55u45YWzID09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIOiOt+WPluWtl+autemmluadoemUmeivr+aPkOekulxyXG4gIGdldEZpZWxkRXJyb3JNZXNzYWdlKG5hbWU6IHN0cmluZywgY29udHJvbE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1TdG9yZVtuYW1lXTtcclxuICAgIGlmICghZm9ybUdyb3VwKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgW0FudGRGb3JtU2VydmljZV0gZ2V0RmllbGRFcnJvck1lc3NhZ2U6IGZvcm0gXCIke25hbWV9XCIgbm90IGZvdW5kLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZSk7XHJcbiAgICBpZiAoIWNvbnRyb2wpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSBnZXRGaWVsZEVycm9yTWVzc2FnZTogY29udHJvbCBcIiR7Y29udHJvbE5hbWV9XCIgbm90IGZvdW5kIGluIGZvcm0gXCIke25hbWV9XCIuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICAgIGlmICghY29udHJvbC5lcnJvcnMpIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5LuOIGVycm9yTWVzc2FnZVN0b3JlIOiOt+WPlumUmeivr+a2iOaBr+mFjee9ru+8jOWbnumAgOafpeaJviBhcnJheUl0ZW1Db25maWdzXHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2VzID0gdGhpcy5lcnJvck1lc3NhZ2VTdG9yZVtuYW1lXT8uW2NvbnRyb2xOYW1lXVxyXG4gICAgICA/PyB0aGlzLl9nZXRBcnJheUl0ZW1FcnJvck1lc3NhZ2VzKG5hbWUsIGNvbnRyb2xOYW1lKTtcclxuICAgIGNvbnN0IG1lcmdlZE1lc3NhZ2VzID0ge1xyXG4gICAgICAuLi50aGlzLmRlZmF1bHRFcnJvck1lc3NhZ2VzLFxyXG4gICAgICAuLi4oZXJyb3JNZXNzYWdlcyA/PyB7fSksXHJcbiAgICB9O1xyXG5cclxuICAgIGZvciAoY29uc3QgZXJyb3JLZXkgb2YgT2JqZWN0LmtleXMoY29udHJvbC5lcnJvcnMpKSB7XHJcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBtZXJnZWRNZXNzYWdlc1tlcnJvcktleV07XHJcbiAgICAgIGlmIChtZXNzYWdlKSB7XHJcbiAgICAgICAgLy8g5LiN5YaN5pSv5oyB5Ye95pWw5b2i5byP77yM5Y+q6L+U5Zue5a2X56ym5LiyXHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBtZXNzYWdlID09PSBcInN0cmluZ1wiID8gbWVzc2FnZSA6IFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBcIlwiO1xyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0g55uR5ZCs55u45YWzID09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIOebkeWQrOihqOWNleaJgOacieWtl+auteWPmOabtFxyXG4gIHdhdGNoRm9ybUNoYW5nZXM8VCA9IGFueT4oXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBoYW5kbGVyOiAodmFsdWU6IFQpID0+IHZvaWQsXHJcbiAgICBvcHRpb25zPzogV2F0Y2hPcHRpb25zXHJcbiAgKTogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybVN0b3JlW25hbWVdO1xyXG4gICAgaWYgKCFmb3JtR3JvdXApIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSB3YXRjaEZvcm1DaGFuZ2VzOiBmb3JtIFwiJHtuYW1lfVwiIG5vdCBmb3VuZC5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuc2V0dXBWYWx1ZUNoYW5nZVN1YnNjcmlwdGlvbihmb3JtR3JvdXAsIGhhbmRsZXIsIG9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLy8g55uR5ZCs5oyH5a6a5a2X5q615Y+Y5pu0XHJcbiAgd2F0Y2hGaWVsZENoYW5nZXM8VCA9IGFueT4oXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBjb250cm9sTmFtZTogc3RyaW5nLFxyXG4gICAgaGFuZGxlcjogKHZhbHVlOiBUKSA9PiB2b2lkLFxyXG4gICAgb3B0aW9ucz86IFdhdGNoT3B0aW9uc1xyXG4gICk6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZCB7XHJcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1TdG9yZVtuYW1lXTtcclxuICAgIGlmICghZm9ybUdyb3VwKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgW0FudGRGb3JtU2VydmljZV0gd2F0Y2hGaWVsZENoYW5nZXM6IGZvcm0gXCIke25hbWV9XCIgbm90IGZvdW5kLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250cm9sID0gZm9ybUdyb3VwLmdldChjb250cm9sTmFtZSk7XHJcbiAgICBpZiAoIWNvbnRyb2wpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSB3YXRjaEZpZWxkQ2hhbmdlczogY29udHJvbCBcIiR7Y29udHJvbE5hbWV9XCIgbm90IGZvdW5kIGluIGZvcm0gXCIke25hbWV9XCIuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnNldHVwVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24oY29udHJvbCwgaGFuZGxlciwgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSBGb3JtQXJyYXkg5pON5L2cID09PT09PT09PT09PT09PT09PT09XHJcblxyXG4gIC8vIOiOt+WPluaMh+Wumui3r+W+hOeahCBGb3JtQXJyYXkg5a6e5L6L77yI5L6b5qih5p2/IG5nRm9yIOS9v+eUqO+8iVxyXG4gIGdldEZvcm1BcnJheShmb3JtTmFtZTogc3RyaW5nLCBhcnJheVBhdGg6IHN0cmluZyk6IFVudHlwZWRGb3JtQXJyYXkgfCBudWxsIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybVN0b3JlW2Zvcm1OYW1lXTtcclxuICAgIGlmICghZm9ybUdyb3VwKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgW0FudGRGb3JtU2VydmljZV0gZ2V0Rm9ybUFycmF5OiBmb3JtIFwiJHtmb3JtTmFtZX1cIiBub3QgZm91bmQuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZ2V0TmVzdGVkRm9ybUFycmF5KGZvcm1Hcm91cCwgYXJyYXlQYXRoKTtcclxuICAgIGlmICghZm9ybUFycmF5KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgW0FudGRGb3JtU2VydmljZV0gZ2V0Rm9ybUFycmF5OiBGb3JtQXJyYXkgYXQgcGF0aCBcIiR7YXJyYXlQYXRofVwiIG5vdCBmb3VuZCBpbiBmb3JtIFwiJHtmb3JtTmFtZX1cIi5gXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgLy8g5ZCRIEZvcm1BcnJheSDmlrDlop7kuIDooYzvvIjoh6rliqjov5vlhaXnvJbovpHnirbmgIHvvIzml6Dlv6vnhafvvIlcclxuICBhZGRBcnJheVJvdyhmb3JtTmFtZTogc3RyaW5nLCBhcnJheVBhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5mb3JtU3RvcmVbZm9ybU5hbWVdO1xyXG4gICAgaWYgKCFmb3JtR3JvdXApIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSBhZGRBcnJheVJvdzogZm9ybSBcIiR7Zm9ybU5hbWV9XCIgbm90IGZvdW5kLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZm9ybUFycmF5ID0gdGhpcy5nZXROZXN0ZWRGb3JtQXJyYXkoZm9ybUdyb3VwLCBhcnJheVBhdGgpO1xyXG4gICAgaWYgKCFmb3JtQXJyYXkpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSBhZGRBcnJheVJvdzogRm9ybUFycmF5IGF0IHBhdGggXCIke2FycmF5UGF0aH1cIiBub3QgZm91bmQgaW4gZm9ybSBcIiR7Zm9ybU5hbWV9XCIuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5Y+W56ys5LiA6KGM55qE57uT5p6E5L2c5Li65qih5p2/77yM6Iul5peg6KGM5YiZ5peg5rOV5o6o5patIGl0ZW1Db25maWdcclxuICAgIC8vIOaWsOihjOm7mOiupOS4uuepuiBGb3JtR3JvdXDvvIjosIPnlKjmlrnlupTpgJrov4cgaXRlbUNvbmZpZyDkvKDlhaXlhbfkvZPnu5PmnoTvvIlcclxuICAgIC8vIOWunumZheihjOWIm+W7uumAmui/hyBfYWRkQXJyYXlSb3dXaXRoQ29uZmlnIOWujOaIkO+8jOatpOWkhOS/neeVmeepuuihjOWFnOW6lVxyXG4gICAgY29uc3QgbmV3Um93ID0gdGhpcy5mYi5ncm91cCh7fSk7XHJcbiAgICBmb3JtQXJyYXkucHVzaChuZXdSb3cpO1xyXG5cclxuICAgIGNvbnN0IG5ld0luZGV4ID0gZm9ybUFycmF5Lmxlbmd0aCAtIDE7XHJcbiAgICB0aGlzLl9lbnN1cmVBcnJheVN0YXRlKGZvcm1OYW1lLCBhcnJheVBhdGgpO1xyXG4gICAgLy8g5paw5aKe6KGM5peg5Y6G5Y+y5b+r54Wn77yMY2FuY2VsUm93RWRpdCDml7bnm7TmjqXliKDpmaRcclxuICAgIHRoaXMuYXJyYXlFZGl0aW5nUm93c1tmb3JtTmFtZV1bYXJyYXlQYXRoXS5hZGQobmV3SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8g5ZCRIEZvcm1BcnJheSDmlrDlop7kuIDooYzvvIjmjIflrpogaXRlbUNvbmZpZ++8iVxyXG4gIGFkZEFycmF5Um93V2l0aENvbmZpZyhcclxuICAgIGZvcm1OYW1lOiBzdHJpbmcsXHJcbiAgICBhcnJheVBhdGg6IHN0cmluZyxcclxuICAgIGl0ZW1Db25maWc6IEZvcm1Db25maWdcclxuICApOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybVN0b3JlW2Zvcm1OYW1lXTtcclxuICAgIGlmICghZm9ybUdyb3VwKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgW0FudGRGb3JtU2VydmljZV0gYWRkQXJyYXlSb3dXaXRoQ29uZmlnOiBmb3JtIFwiJHtmb3JtTmFtZX1cIiBub3QgZm91bmQuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmdldE5lc3RlZEZvcm1BcnJheShmb3JtR3JvdXAsIGFycmF5UGF0aCk7XHJcbiAgICBpZiAoIWZvcm1BcnJheSkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYFtBbnRkRm9ybVNlcnZpY2VdIGFkZEFycmF5Um93V2l0aENvbmZpZzogRm9ybUFycmF5IGF0IHBhdGggXCIke2FycmF5UGF0aH1cIiBub3QgZm91bmQgaW4gZm9ybSBcIiR7Zm9ybU5hbWV9XCIuYFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3Um93ID0gdGhpcy5jcmVhdGVBcnJheVJvd0dyb3VwKGl0ZW1Db25maWcpO1xyXG4gICAgZm9ybUFycmF5LnB1c2gobmV3Um93KTtcclxuXHJcbiAgICBjb25zdCBuZXdJbmRleCA9IGZvcm1BcnJheS5sZW5ndGggLSAxO1xyXG4gICAgdGhpcy5fZW5zdXJlQXJyYXlTdGF0ZShmb3JtTmFtZSwgYXJyYXlQYXRoKTtcclxuICAgIC8vIOaWsOWinuihjOaXoOWOhuWPsuW/q+eFp++8jGNhbmNlbFJvd0VkaXQg5pe255u05o6l5Yig6ZmkXHJcbiAgICB0aGlzLmFycmF5RWRpdGluZ1Jvd3NbZm9ybU5hbWVdW2FycmF5UGF0aF0uYWRkKG5ld0luZGV4KTtcclxuICB9XHJcblxyXG4gIC8vIOWIoOmZpCBGb3JtQXJyYXkg5Lit5oyH5a6a6KGM77yI5ZCM5pe25riF55CG57yW6L6R54q25oCB5ZKM5b+r54Wn77yM5bm26YeN5a+56b2Q57Si5byV77yJXHJcbiAgcmVtb3ZlQXJyYXlSb3coZm9ybU5hbWU6IHN0cmluZywgYXJyYXlQYXRoOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybVN0b3JlW2Zvcm1OYW1lXTtcclxuICAgIGlmICghZm9ybUdyb3VwKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgW0FudGRGb3JtU2VydmljZV0gcmVtb3ZlQXJyYXlSb3c6IGZvcm0gXCIke2Zvcm1OYW1lfVwiIG5vdCBmb3VuZC5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZ2V0TmVzdGVkRm9ybUFycmF5KGZvcm1Hcm91cCwgYXJyYXlQYXRoKTtcclxuICAgIGlmICghZm9ybUFycmF5KSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgW0FudGRGb3JtU2VydmljZV0gcmVtb3ZlQXJyYXlSb3c6IEZvcm1BcnJheSBhdCBwYXRoIFwiJHthcnJheVBhdGh9XCIgbm90IGZvdW5kIGluIGZvcm0gXCIke2Zvcm1OYW1lfVwiLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBmb3JtQXJyYXkubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICBgW0FudGRGb3JtU2VydmljZV0gcmVtb3ZlQXJyYXlSb3c6IGluZGV4ICR7aW5kZXh9IG91dCBvZiByYW5nZS5gXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBmb3JtQXJyYXkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gICAgdGhpcy5fZW5zdXJlQXJyYXlTdGF0ZShmb3JtTmFtZSwgYXJyYXlQYXRoKTtcclxuXHJcbiAgICAvLyDmuIXnkIbooqvliKDooYznmoTlv6vnhadcclxuICAgIGNvbnN0IHNuYXBzaG90TWFwID0gdGhpcy5hcnJheVJvd1NuYXBzaG90c1tmb3JtTmFtZV1bYXJyYXlQYXRoXTtcclxuICAgIHNuYXBzaG90TWFwLmRlbGV0ZShpbmRleCk7XHJcblxyXG4gICAgLy8g6YeN5a+56b2Q77ya5b+r54Wn5LitID4gaW5kZXgg55qE6ZSu5YWo6YOoIC0xXHJcbiAgICBjb25zdCBuZXdTbmFwc2hvdE1hcCA9IG5ldyBNYXA8bnVtYmVyLCBhbnk+KCk7XHJcbiAgICBzbmFwc2hvdE1hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XHJcbiAgICAgIG5ld1NuYXBzaG90TWFwLnNldChrZXkgPiBpbmRleCA/IGtleSAtIDEgOiBrZXksIHZhbHVlKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5hcnJheVJvd1NuYXBzaG90c1tmb3JtTmFtZV1bYXJyYXlQYXRoXSA9IG5ld1NuYXBzaG90TWFwO1xyXG5cclxuICAgIC8vIOmHjeWvuem9kO+8mmVkaXRpbmdSb3dzIOS4rSA+IGluZGV4IOeahOe0ouW8leWFqOmDqCAtMVxyXG4gICAgY29uc3QgZWRpdGluZ1NldCA9IHRoaXMuYXJyYXlFZGl0aW5nUm93c1tmb3JtTmFtZV1bYXJyYXlQYXRoXTtcclxuICAgIGNvbnN0IG5ld0VkaXRpbmdTZXQgPSBuZXcgU2V0PG51bWJlcj4oKTtcclxuICAgIGVkaXRpbmdTZXQuZm9yRWFjaCgoaSkgPT4ge1xyXG4gICAgICBpZiAoaSAhPT0gaW5kZXgpIHtcclxuICAgICAgICBuZXdFZGl0aW5nU2V0LmFkZChpID4gaW5kZXggPyBpIC0gMSA6IGkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYXJyYXlFZGl0aW5nUm93c1tmb3JtTmFtZV1bYXJyYXlQYXRoXSA9IG5ld0VkaXRpbmdTZXQ7XHJcbiAgfVxyXG5cclxuICAvLyDlrZjlgqggRm9ybUFycmF5IOeahCBpdGVtQ29uZmln77yI55So5LqO5Zue5aGr5pe26YeN5bu66KGM57uT5p6E77yJXHJcbiAgcHJpdmF0ZSBfZW5zdXJlQXJyYXlJdGVtQ29uZmlnKFxyXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcclxuICAgIGFycmF5UGF0aDogc3RyaW5nLFxyXG4gICAgaXRlbUNvbmZpZzogRm9ybUNvbmZpZ1xyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFycmF5SXRlbUNvbmZpZ3NbZm9ybU5hbWVdKSB7XHJcbiAgICAgIHRoaXMuYXJyYXlJdGVtQ29uZmlnc1tmb3JtTmFtZV0gPSB7fTtcclxuICAgIH1cclxuICAgIHRoaXMuYXJyYXlJdGVtQ29uZmlnc1tmb3JtTmFtZV1bYXJyYXlQYXRoXSA9IGl0ZW1Db25maWc7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9nZXRBcnJheUl0ZW1FcnJvck1lc3NhZ2VzKFxyXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcclxuICAgIGNvbnRyb2xOYW1lOiBzdHJpbmdcclxuICApOiBGaWVsZEVycm9yTWVzc2FnZXMgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgcGFydHMgPSBjb250cm9sTmFtZS5zcGxpdCgnLicpO1xyXG4gICAgaWYgKHBhcnRzLmxlbmd0aCA8IDMpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBtYXliZUluZGV4ID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMl07XHJcbiAgICBpZiAoIS9eXFxkKyQvLnRlc3QobWF5YmVJbmRleCkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICBjb25zdCBmaWVsZE5hbWUgPSBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXTtcclxuICAgIGNvbnN0IGFycmF5UGF0aCA9IHBhcnRzLnNsaWNlKDAsIC0yKS5qb2luKCcuJyk7XHJcbiAgICBjb25zdCBpdGVtQ29uZmlnID0gdGhpcy5hcnJheUl0ZW1Db25maWdzW2Zvcm1OYW1lXT8uW2FycmF5UGF0aF07XHJcbiAgICBjb25zdCBmaWVsZENvbmZpZyA9IGl0ZW1Db25maWc/LltmaWVsZE5hbWVdO1xyXG4gICAgaWYgKCFmaWVsZENvbmZpZyB8fCB0aGlzLmlzRm9ybUdyb3VwQ29uZmlnKGZpZWxkQ29uZmlnKSB8fCB0aGlzLmlzRm9ybUFycmF5Q29uZmlnKGZpZWxkQ29uZmlnKSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpZWxkQ29uZmlnLmVycm9yTWVzc2FnZXM7XHJcbiAgfVxyXG5cclxuICAvLyDliJ3lp4vljJYgYXJyYXlFZGl0aW5nUm93cyDlkowgYXJyYXlSb3dTbmFwc2hvdHMg5a+55bqU6Lev5b6E77yI6Iul5LiN5a2Y5Zyo5YiZ5Yib5bu677yJXHJcbiAgcHJpdmF0ZSBfZW5zdXJlQXJyYXlTdGF0ZShmb3JtTmFtZTogc3RyaW5nLCBhcnJheVBhdGg6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLmFycmF5RWRpdGluZ1Jvd3NbZm9ybU5hbWVdKSB7XHJcbiAgICAgIHRoaXMuYXJyYXlFZGl0aW5nUm93c1tmb3JtTmFtZV0gPSB7fTtcclxuICAgIH1cclxuICAgIGlmICghdGhpcy5hcnJheUVkaXRpbmdSb3dzW2Zvcm1OYW1lXVthcnJheVBhdGhdKSB7XHJcbiAgICAgIHRoaXMuYXJyYXlFZGl0aW5nUm93c1tmb3JtTmFtZV1bYXJyYXlQYXRoXSA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmFycmF5Um93U25hcHNob3RzW2Zvcm1OYW1lXSkge1xyXG4gICAgICB0aGlzLmFycmF5Um93U25hcHNob3RzW2Zvcm1OYW1lXSA9IHt9O1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmFycmF5Um93U25hcHNob3RzW2Zvcm1OYW1lXVthcnJheVBhdGhdKSB7XHJcbiAgICAgIHRoaXMuYXJyYXlSb3dTbmFwc2hvdHNbZm9ybU5hbWVdW2FycmF5UGF0aF0gPSBuZXcgTWFwPG51bWJlciwgYW55PigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gPT09PT09PT09PT09PT09PT09PT0gRm9ybUFycmF5IOihjOe6p+e8lui+kSA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyDlvIDlkK/mjIflrprooYznmoTnvJbovpHmqKHlvI/vvIjkv53lrZjlvZPliY3lgLzkuLrlv6vnhafvvIlcclxuICBzdGFydFJvd0VkaXQoZm9ybU5hbWU6IHN0cmluZywgYXJyYXlQYXRoOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZ2V0Rm9ybUFycmF5KGZvcm1OYW1lLCBhcnJheVBhdGgpO1xyXG4gICAgaWYgKCFmb3JtQXJyYXkpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCByb3dDb250cm9sID0gZm9ybUFycmF5LmF0KGluZGV4KTtcclxuICAgIGlmICghcm93Q29udHJvbCkge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgYFtBbnRkRm9ybVNlcnZpY2VdIHN0YXJ0Um93RWRpdDogcm93ICR7aW5kZXh9IG5vdCBmb3VuZCBpbiBcIiR7YXJyYXlQYXRofVwiLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Vuc3VyZUFycmF5U3RhdGUoZm9ybU5hbWUsIGFycmF5UGF0aCk7XHJcblxyXG4gICAgLy8g5L+d5a2Y5b+r54Wn77yI5LuF5b2T5b+r54Wn5LiN5a2Y5Zyo5pe277yM6YG/5YWN6YeN5aSN57yW6L6R6KaG55uW5Y6f5aeL5YC877yJXHJcbiAgICBjb25zdCBzbmFwc2hvdE1hcCA9IHRoaXMuYXJyYXlSb3dTbmFwc2hvdHNbZm9ybU5hbWVdW2FycmF5UGF0aF07XHJcbiAgICBpZiAoIXNuYXBzaG90TWFwLmhhcyhpbmRleCkpIHtcclxuICAgICAgc25hcHNob3RNYXAuc2V0KGluZGV4LCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJvd0NvbnRyb2wuZ2V0UmF3VmFsdWUoKSkpKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmFycmF5RWRpdGluZ1Jvd3NbZm9ybU5hbWVdW2FycmF5UGF0aF0uYWRkKGluZGV4KTtcclxuICB9XHJcblxyXG4gIC8vIOehruiupOS/neWtmOaMh+WumuihjO+8iOmqjOivgemAmui/h+WImea4hemZpOW/q+eFp+W5tumAgOWHuue8lui+keeKtuaAge+8jOi/lOWbnuihjOaVsOaNru+8m+WQpuWImei/lOWbniBmYWxzZe+8iVxyXG4gIGNvbmZpcm1Sb3dFZGl0KFxyXG4gICAgZm9ybU5hbWU6IHN0cmluZyxcclxuICAgIGFycmF5UGF0aDogc3RyaW5nLFxyXG4gICAgaW5kZXg6IG51bWJlclxyXG4gICk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBmYWxzZSB7XHJcbiAgICBjb25zdCBmb3JtQXJyYXkgPSB0aGlzLmdldEZvcm1BcnJheShmb3JtTmFtZSwgYXJyYXlQYXRoKTtcclxuICAgIGlmICghZm9ybUFycmF5KSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgY29uc3Qgcm93Q29udHJvbCA9IGZvcm1BcnJheS5hdChpbmRleCk7XHJcbiAgICBpZiAoIXJvd0NvbnRyb2wpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBbQW50ZEZvcm1TZXJ2aWNlXSBjb25maXJtUm93RWRpdDogcm93ICR7aW5kZXh9IG5vdCBmb3VuZCBpbiBcIiR7YXJyYXlQYXRofVwiLmBcclxuICAgICAgKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChyb3dDb250cm9sLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5tYXJrQWxsQ29udHJvbHNBc0RpcnR5KHJvd0NvbnRyb2wsIHRydWUsIGZhbHNlKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX2Vuc3VyZUFycmF5U3RhdGUoZm9ybU5hbWUsIGFycmF5UGF0aCk7XHJcbiAgICB0aGlzLmFycmF5Um93U25hcHNob3RzW2Zvcm1OYW1lXVthcnJheVBhdGhdLmRlbGV0ZShpbmRleCk7XHJcbiAgICB0aGlzLmFycmF5RWRpdGluZ1Jvd3NbZm9ybU5hbWVdW2FycmF5UGF0aF0uZGVsZXRlKGluZGV4KTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5leGNsdWRlSW50ZXJuYWxGaWVsZHMocm93Q29udHJvbC5nZXRSYXdWYWx1ZSgpKTtcclxuICB9XHJcblxyXG4gIC8vIOWPlua2iOe8lui+keaMh+WumuihjO+8iOS7juW/q+eFp+aBouWkjeWAvO+8m+iLpeaXoOW/q+eFp+WImeivtOaYjuaYr+aWsOWinuihjO+8jOebtOaOpeWIoOmZpOivpeihjO+8iVxyXG4gIGNhbmNlbFJvd0VkaXQoZm9ybU5hbWU6IHN0cmluZywgYXJyYXlQYXRoOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgIGNvbnN0IGZvcm1BcnJheSA9IHRoaXMuZ2V0Rm9ybUFycmF5KGZvcm1OYW1lLCBhcnJheVBhdGgpO1xyXG4gICAgaWYgKCFmb3JtQXJyYXkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLl9lbnN1cmVBcnJheVN0YXRlKGZvcm1OYW1lLCBhcnJheVBhdGgpO1xyXG4gICAgY29uc3Qgc25hcHNob3RNYXAgPSB0aGlzLmFycmF5Um93U25hcHNob3RzW2Zvcm1OYW1lXVthcnJheVBhdGhdO1xyXG5cclxuICAgIGlmIChzbmFwc2hvdE1hcC5oYXMoaW5kZXgpKSB7XHJcbiAgICAgIC8vIOW3suacieihjO+8muS7juW/q+eFp+aBouWkjeWAvFxyXG4gICAgICBjb25zdCBzbmFwc2hvdCA9IHNuYXBzaG90TWFwLmdldChpbmRleCk7XHJcbiAgICAgIGNvbnN0IHJvd0NvbnRyb2wgPSBmb3JtQXJyYXkuYXQoaW5kZXgpO1xyXG4gICAgICBpZiAocm93Q29udHJvbCkge1xyXG4gICAgICAgIHJvd0NvbnRyb2wucGF0Y2hWYWx1ZShzbmFwc2hvdCk7XHJcbiAgICAgICAgcm93Q29udHJvbC5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgIHJvd0NvbnRyb2wubWFya0FzVW50b3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgICAgc25hcHNob3RNYXAuZGVsZXRlKGluZGV4KTtcclxuICAgICAgdGhpcy5hcnJheUVkaXRpbmdSb3dzW2Zvcm1OYW1lXVthcnJheVBhdGhdLmRlbGV0ZShpbmRleCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDmlrDlop7ooYzvvJrnm7TmjqXliKDpmaRcclxuICAgICAgdGhpcy5yZW1vdmVBcnJheVJvdyhmb3JtTmFtZSwgYXJyYXlQYXRoLCBpbmRleCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDmn6Xor6LmjIflrprooYzmmK/lkKblpITkuo7nvJbovpHnirbmgIFcclxuICBpc1Jvd0VkaXRpbmcoZm9ybU5hbWU6IHN0cmluZywgYXJyYXlQYXRoOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIHRoaXMuYXJyYXlFZGl0aW5nUm93c1tmb3JtTmFtZV0/LlthcnJheVBhdGhdPy5oYXMoaW5kZXgpID8/IGZhbHNlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+W5omA5pyJ5q2j5Zyo57yW6L6R55qE6KGM57Si5byV5YiX6KGoXHJcbiAgZ2V0RWRpdGluZ1Jvd0luZGljZXMoZm9ybU5hbWU6IHN0cmluZywgYXJyYXlQYXRoOiBzdHJpbmcpOiBudW1iZXJbXSB7XHJcbiAgICBjb25zdCBlZGl0aW5nU2V0ID0gdGhpcy5hcnJheUVkaXRpbmdSb3dzW2Zvcm1OYW1lXT8uW2FycmF5UGF0aF07XHJcbiAgICByZXR1cm4gZWRpdGluZ1NldCA/IEFycmF5LmZyb20oZWRpdGluZ1NldCkuc29ydCgoYSwgYikgPT4gYSAtIGIpIDogW107XHJcbiAgfVxyXG5cclxuICAvLyA9PT09PT09PT09PT09PT09PT09PSDlt6Xlhbfmlrnms5UgPT09PT09PT09PT09PT09PT09PT1cclxuXHJcbiAgLy8g6I635Y+W6KGo5Y2V57G75ZCNXHJcbiAgZ2V0Rm9ybUNsYXNzTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3RoaXMuY2xhc3NQcmVmaXh9Y3VzdG9tLSR7bmFtZX0gYDtcclxuICB9XHJcblxyXG4gIC8vIOiuvue9riBDU1Mg5Y+Y6YeP5Yiw55uu5qCH5YWD57Sg77yI5pSv5oyB5oyB5LmF5YyW55uR5ZCs5Yqo5oCB5re75Yqg55qE5YWD57Sg77yJXHJcbiAgc2V0Q1NTVmFyaWFibGVzVG9UYXJnZXQobmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBjb25zdCBmb3JtQ29udGFpbmVyU2VsZWN0b3IgPSBgLiR7dGhpcy5nZXRGb3JtQ2xhc3NOYW1lKG5hbWUpfWA7XHJcbiAgICBjb25zdCBmb3JtQ29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgZm9ybUNvbnRhaW5lclNlbGVjdG9yXHJcbiAgICApIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgIC8vIOWmguaenOWuueWZqOi/mOS4jeWtmOWcqO+8jOWPr+S7peeUqCBNdXRhdGlvbk9ic2VydmVyIOetieW+heWug+WHuueOsFxyXG4gICAgaWYgKCFmb3JtQ29udGFpbmVyKSB7XHJcbiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICBmb3JtQ29udGFpbmVyU2VsZWN0b3JcclxuICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcclxuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tbGFiZWwtd2lkdGhcIiwgdGhpcy5sYWJlbFdpZHRoKTtcclxuICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tbGFiZWwtYWxpZ25cIiwgdGhpcy5sYWJlbEFsaWduKTtcclxuICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5ib2R5LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIHN1YnRyZWU6IHRydWUsXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgLy8gMTDnp5LlkI7oh6rliqjmlq3lvIDvvIzpgb/lhY3lhoXlrZjms4TmvI9cclxuICAgICAgc2V0VGltZW91dCgoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KCksIDEwMDAwKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWcqOWuueWZqOS4iuiuvue9riBDU1Mg5Y+Y6YePXHJcbiAgICBmb3JtQ29udGFpbmVyLnN0eWxlLnNldFByb3BlcnR5KFwiLS1sYWJlbC13aWR0aFwiLCB0aGlzLmxhYmVsV2lkdGgpO1xyXG4gICAgZm9ybUNvbnRhaW5lci5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tbGFiZWwtYWxpZ25cIiwgdGhpcy5sYWJlbEFsaWduKTtcclxuICB9XHJcblxyXG4gIC8vID09PT09PT09PT09PT09PT09PT09IOengeacieaWueazlSA9PT09PT09PT09PT09PT09PT09PVxyXG5cclxuICAvLyDov4fmu6TlhoXpg6jlrZfmrrXvvIjpgJLlvZLlpITnkIblr7nosaHlkozmlbDnu4TvvIlcclxuICBwcml2YXRlIGV4Y2x1ZGVJbnRlcm5hbEZpZWxkcyh2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyDnibnmrorlpITnkIYgRGF0ZSDlr7nosaHvvIznm7TmjqXov5Tlm57kuI3lgZrovazmjaJcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWUubWFwKChpdGVtKSA9PiB0aGlzLmV4Y2x1ZGVJbnRlcm5hbEZpZWxkcyhpdGVtKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIikge1xyXG4gICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZmlsdGVyZWQ6IGFueSA9IHt9O1xyXG4gICAgT2JqZWN0LmVudHJpZXModmFsdWUpLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcclxuICAgICAgLy8g6L+H5ruk5LulIF9fIOW8gOWktOeahOWGhemDqOWtl+autVxyXG4gICAgICBpZiAoIWtleS5zdGFydHNXaXRoKFwiX19cIikpIHtcclxuICAgICAgICBmaWx0ZXJlZFtrZXldID0gdGhpcy5leGNsdWRlSW50ZXJuYWxGaWVsZHModmFsKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgfVxyXG5cclxuICAvLyDorr7nva7lgLzlj5jmm7TorqLpmIVcclxuICBwcml2YXRlIHNldHVwVmFsdWVDaGFuZ2VTdWJzY3JpcHRpb248VD4oXHJcbiAgICB0YXJnZXQ6IHsgdmFsdWVDaGFuZ2VzOiBhbnk7IHZhbHVlOiBhbnkgfSxcclxuICAgIGhhbmRsZXI6ICh2YWx1ZTogVCkgPT4gdm9pZCxcclxuICAgIG9wdGlvbnM/OiBXYXRjaE9wdGlvbnNcclxuICApOiBTdWJzY3JpcHRpb24ge1xyXG4gICAgbGV0IHZhbHVlQ2hhbmdlcyQgPSB0YXJnZXQudmFsdWVDaGFuZ2VzO1xyXG5cclxuICAgIGlmIChvcHRpb25zPy5kZWJvdW5jZSAhPSBudWxsKSB7XHJcbiAgICAgIHZhbHVlQ2hhbmdlcyQgPSB2YWx1ZUNoYW5nZXMkLnBpcGUoZGVib3VuY2VUaW1lKG9wdGlvbnMuZGVib3VuY2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9ucz8uZGlzdGluY3RVbnRpbENoYW5nZWQgIT09IGZhbHNlKSB7XHJcbiAgICAgIHZhbHVlQ2hhbmdlcyQgPSB2YWx1ZUNoYW5nZXMkLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbnM/LmVtaXRJbml0aWFsKSB7XHJcbiAgICAgIGhhbmRsZXIodGFyZ2V0LnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdmFsdWVDaGFuZ2VzJC5zdWJzY3JpYmUoaGFuZGxlcik7XHJcbiAgfVxyXG59XHJcbiJdfQ==