@skyux/docs-tools 10.0.0-alpha.0 → 10.0.0-alpha.2

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 (94) hide show
  1. package/docs-tools.module.d.ts +6 -7
  2. package/esm2022/docs-tools.module.mjs +5 -9
  3. package/esm2022/modules/anatomy/anatomy-item.component.mjs +3 -3
  4. package/esm2022/modules/anatomy/anatomy-thumbnail.component.mjs +3 -3
  5. package/esm2022/modules/anatomy/anatomy.component.mjs +3 -3
  6. package/esm2022/modules/anatomy/anatomy.module.mjs +4 -4
  7. package/esm2022/modules/code-examples/code-example.component.mjs +3 -3
  8. package/esm2022/modules/code-examples/code-examples-editor.service.mjs +4 -5
  9. package/esm2022/modules/code-examples/code-examples.component.mjs +4 -4
  10. package/esm2022/modules/code-examples/code-examples.module.mjs +4 -4
  11. package/esm2022/modules/demo/demo-control-panel-checkbox.component.mjs +3 -3
  12. package/esm2022/modules/demo/demo-control-panel-radio-group.component.mjs +3 -3
  13. package/esm2022/modules/demo/demo-control-panel-section.component.mjs +3 -3
  14. package/esm2022/modules/demo/demo-control-panel.component.mjs +4 -4
  15. package/esm2022/modules/demo/demo.component.mjs +3 -3
  16. package/esm2022/modules/demo/demo.module.mjs +4 -4
  17. package/esm2022/modules/demo-page/demo-page-dom-adapter.service.mjs +3 -3
  18. package/esm2022/modules/demo-page/demo-page-module-info.component.mjs +3 -3
  19. package/esm2022/modules/demo-page/demo-page-section.component.mjs +4 -4
  20. package/esm2022/modules/demo-page/demo-page-summary.component.mjs +3 -3
  21. package/esm2022/modules/demo-page/demo-page-title.service.mjs +3 -3
  22. package/esm2022/modules/demo-page/demo-page-type-definitions.component.mjs +3 -3
  23. package/esm2022/modules/demo-page/demo-page.component.mjs +16 -11
  24. package/esm2022/modules/demo-page/demo-page.module.mjs +13 -5
  25. package/esm2022/modules/design-guidelines/design-guideline-thumbnail.component.mjs +3 -3
  26. package/esm2022/modules/design-guidelines/design-guideline.component.mjs +3 -3
  27. package/esm2022/modules/design-guidelines/design-guidelines.component.mjs +3 -3
  28. package/esm2022/modules/design-guidelines/design-guidelines.module.mjs +4 -4
  29. package/esm2022/modules/heading-anchor/heading-anchor.component.mjs +3 -3
  30. package/esm2022/modules/heading-anchor/heading-anchor.module.mjs +4 -4
  31. package/esm2022/modules/markdown/markdown.module.mjs +4 -4
  32. package/esm2022/modules/markdown/markdown.pipe.mjs +3 -3
  33. package/esm2022/modules/module-info/module-info.component.mjs +3 -3
  34. package/esm2022/modules/module-info/module-info.module.mjs +4 -4
  35. package/esm2022/modules/safe-html/safe-html.component.mjs +3 -3
  36. package/esm2022/modules/safe-html/safe-html.module.mjs +4 -4
  37. package/esm2022/modules/shared/docs-tools-site-options.mjs +3 -0
  38. package/esm2022/modules/shared/docs-tools-supportal.service.mjs +4 -4
  39. package/esm2022/modules/shared/sky-docs-tools-resources.module.mjs +5 -5
  40. package/esm2022/modules/source-code/source-code-provider.mjs +3 -3
  41. package/esm2022/modules/source-code/source-code.service.mjs +3 -3
  42. package/esm2022/modules/thumbnail/thumbnail.component.mjs +3 -3
  43. package/esm2022/modules/thumbnail/thumbnail.module.mjs +4 -4
  44. package/esm2022/modules/type-definitions/anchor-link.service.mjs +4 -4
  45. package/esm2022/modules/type-definitions/call-signature-definition.component.mjs +5 -5
  46. package/esm2022/modules/type-definitions/class-definition.component.mjs +3 -3
  47. package/esm2022/modules/type-definitions/class-definition.mjs +1 -1
  48. package/esm2022/modules/type-definitions/directive-definition.component.mjs +3 -3
  49. package/esm2022/modules/type-definitions/directive-definition.mjs +1 -1
  50. package/esm2022/modules/type-definitions/enumeration-definition.component.mjs +3 -3
  51. package/esm2022/modules/type-definitions/enumeration-definition.mjs +1 -1
  52. package/esm2022/modules/type-definitions/enumeration-member-definition.mjs +1 -1
  53. package/esm2022/modules/type-definitions/interface-definition.component.mjs +3 -3
  54. package/esm2022/modules/type-definitions/interface-definition.mjs +1 -1
  55. package/esm2022/modules/type-definitions/interface-property-definition.mjs +1 -1
  56. package/esm2022/modules/type-definitions/method-definition.mjs +1 -1
  57. package/esm2022/modules/type-definitions/method-definitions.component.mjs +11 -9
  58. package/esm2022/modules/type-definitions/pipe-definition.component.mjs +3 -3
  59. package/esm2022/modules/type-definitions/preview-feature-indicator.component.mjs +13 -0
  60. package/esm2022/modules/type-definitions/property-definition.mjs +1 -1
  61. package/esm2022/modules/type-definitions/property-definitions.component.mjs +12 -9
  62. package/esm2022/modules/type-definitions/type-alias-definition.component.mjs +10 -9
  63. package/esm2022/modules/type-definitions/type-alias-definition.mjs +1 -1
  64. package/esm2022/modules/type-definitions/type-anchor-links.pipe.mjs +4 -4
  65. package/esm2022/modules/type-definitions/type-definitions-format.service.mjs +4 -4
  66. package/esm2022/modules/type-definitions/type-definitions-provider.mjs +3 -3
  67. package/esm2022/modules/type-definitions/type-definitions.mjs +1 -1
  68. package/esm2022/modules/type-definitions/type-definitions.module.mjs +15 -8
  69. package/esm2022/modules/type-definitions/type-definitions.service.mjs +29 -12
  70. package/esm2022/modules/type-definitions/typedoc-adapter.service.mjs +26 -4
  71. package/esm2022/modules/type-definitions/typedoc-types.mjs +1 -1
  72. package/esm2022/public-api.mjs +2 -1
  73. package/fesm2022/skyux-docs-tools.mjs +272 -208
  74. package/fesm2022/skyux-docs-tools.mjs.map +1 -1
  75. package/modules/demo-page/demo-page.component.d.ts +3 -0
  76. package/modules/demo-page/demo-page.module.d.ts +11 -9
  77. package/modules/shared/docs-tools-site-options.d.ts +3 -0
  78. package/modules/type-definitions/class-definition.d.ts +1 -0
  79. package/modules/type-definitions/directive-definition.d.ts +1 -0
  80. package/modules/type-definitions/enumeration-definition.d.ts +1 -0
  81. package/modules/type-definitions/enumeration-member-definition.d.ts +1 -0
  82. package/modules/type-definitions/interface-definition.d.ts +1 -0
  83. package/modules/type-definitions/interface-property-definition.d.ts +1 -0
  84. package/modules/type-definitions/method-definition.d.ts +1 -0
  85. package/modules/type-definitions/method-definitions.component.d.ts +1 -0
  86. package/modules/type-definitions/preview-feature-indicator.component.d.ts +5 -0
  87. package/modules/type-definitions/property-definition.d.ts +1 -0
  88. package/modules/type-definitions/property-definitions.component.d.ts +1 -0
  89. package/modules/type-definitions/type-alias-definition.d.ts +1 -0
  90. package/modules/type-definitions/type-definitions.d.ts +1 -0
  91. package/modules/type-definitions/type-definitions.module.d.ts +4 -3
  92. package/modules/type-definitions/typedoc-types.d.ts +1 -1
  93. package/package.json +15 -17
  94. package/public-api.d.ts +1 -0
@@ -38,6 +38,7 @@ export class SkyDocsTypeDefinitionsService {
38
38
  pipes: [],
39
39
  services: [],
40
40
  typeAliases: [],
41
+ hasPreviewFeatures: false,
41
42
  };
42
43
  if (!allDefinitions) {
43
44
  console.warn(`No types were found for this project!`);
@@ -57,34 +58,50 @@ export class SkyDocsTypeDefinitionsService {
57
58
  const kind = item.kind;
58
59
  switch (decorator) {
59
60
  case 'Component':
60
- types.components.push(this.adapter.toDirectiveDefinition(item));
61
+ const componentType = this.adapter.toDirectiveDefinition(item);
62
+ types.components.push(componentType);
63
+ types.hasPreviewFeatures ||= componentType.hasPreviewFeatures;
61
64
  break;
62
65
  case 'Directive':
63
- types.directives.push(this.adapter.toDirectiveDefinition(item));
66
+ const directiveType = this.adapter.toDirectiveDefinition(item);
67
+ types.directives.push(directiveType);
68
+ types.hasPreviewFeatures ||= directiveType.hasPreviewFeatures;
64
69
  break;
65
70
  case 'Injectable':
66
- types.services.push(this.adapter.toClassDefinition(item));
71
+ const serviceType = this.adapter.toClassDefinition(item);
72
+ types.services.push(serviceType);
73
+ types.hasPreviewFeatures ||= serviceType.hasPreviewFeatures;
67
74
  break;
68
75
  case 'NgModule':
69
76
  // Don't document modules.
70
77
  break;
71
78
  case 'Pipe':
72
- types.pipes.push(this.adapter.toPipeDefinition(item));
79
+ const pipeType = this.adapter.toPipeDefinition(item);
80
+ types.pipes.push(pipeType);
81
+ types.hasPreviewFeatures ||= pipeType.transformMethod.isPreview;
73
82
  break;
74
83
  default:
75
84
  /*tslint:disable-next-line:switch-default*/
76
85
  switch (kind) {
77
86
  case TypeDocKind.Class:
78
- types.classes.push(this.adapter.toClassDefinition(item));
87
+ const classType = this.adapter.toClassDefinition(item);
88
+ types.classes.push(classType);
89
+ types.hasPreviewFeatures ||= classType.hasPreviewFeatures;
79
90
  break;
80
91
  case TypeDocKind.Interface:
81
- types.interfaces.push(this.adapter.toInterfaceDefinition(item));
92
+ const interfaceType = this.adapter.toInterfaceDefinition(item);
93
+ types.interfaces.push(interfaceType);
94
+ types.hasPreviewFeatures ||= interfaceType.hasPreviewFeatures;
82
95
  break;
83
96
  case TypeDocKind.Enum:
84
- types.enumerations.push(this.adapter.toEnumerationDefinition(item));
97
+ const enumType = this.adapter.toEnumerationDefinition(item);
98
+ types.enumerations.push(enumType);
99
+ types.hasPreviewFeatures ||= enumType.hasPreviewFeatures;
85
100
  break;
86
101
  case TypeDocKind.TypeAlias:
87
- types.typeAliases.push(this.adapter.toTypeAliasDefinition(item));
102
+ const typeAliasType = this.adapter.toTypeAliasDefinition(item);
103
+ types.typeAliases.push(typeAliasType);
104
+ types.hasPreviewFeatures ||= !!typeAliasType.isPreview;
88
105
  break;
89
106
  }
90
107
  }
@@ -92,13 +109,13 @@ export class SkyDocsTypeDefinitionsService {
92
109
  });
93
110
  return types;
94
111
  }
95
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: SkyDocsTypeDefinitionsService, deps: [{ token: i1.SkyDocsTypeDefinitionsProvider }, { token: i2.SkyDocsTypeDocAdapterService }], target: i0.ɵɵFactoryTarget.Injectable }); }
96
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: SkyDocsTypeDefinitionsService, providedIn: 'any' }); }
112
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: SkyDocsTypeDefinitionsService, deps: [{ token: i1.SkyDocsTypeDefinitionsProvider }, { token: i2.SkyDocsTypeDocAdapterService }], target: i0.ɵɵFactoryTarget.Injectable }); }
113
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: SkyDocsTypeDefinitionsService, providedIn: 'any' }); }
97
114
  }
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: SkyDocsTypeDefinitionsService, decorators: [{
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: SkyDocsTypeDefinitionsService, decorators: [{
99
116
  type: Injectable,
100
117
  args: [{
101
118
  providedIn: 'any',
102
119
  }]
103
120
  }], ctorParameters: () => [{ type: i1.SkyDocsTypeDefinitionsProvider }, { type: i2.SkyDocsTypeDocAdapterService }] });
104
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1kZWZpbml0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9jcy10b29scy9zcmMvbW9kdWxlcy90eXBlLWRlZmluaXRpb25zL3R5cGUtZGVmaW5pdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUU5Qzs7R0FFRztBQUlILE1BQU0sT0FBTyw2QkFBNkI7SUFDeEMsWUFDVSx1QkFBdUQsRUFDdkQsT0FBcUM7UUFEckMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFnQztRQUN2RCxZQUFPLEdBQVAsT0FBTyxDQUE4QjtJQUM1QyxDQUFDO0lBRUo7Ozs7T0FJRztJQUNJLGtCQUFrQixDQUN2QixjQUFzQixFQUN0Qix5QkFBb0M7UUFFcEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQ25CLHlCQUF5QixJQUFJLHlCQUF5QixDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQy9ELENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztZQUNwRCxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV2QixlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVBQWlFLENBQ2xFLENBQUM7WUFDSixDQUFD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SSxDQUFDLENBQUMsQ0FBQztnQ0FDaEUsTUFBTTs0QkFDUixLQUFLLFdBQVcsQ0FBQyxJQUFJO2dDQUNuQixLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FDM0MsQ0FBQztnQ0FDRixNQUFNOzRCQUNSLEtBQUssV0FBVyxDQUFDLFNBQVM7Z0NBQ3hCLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUN6QyxDQUFDO2dDQUNGLE1BQU07d0JBQ1YsQ0FBQztnQkFDTCxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs4R0E3R1UsNkJBQTZCO2tIQUE3Qiw2QkFBNkIsY0FGNUIsS0FBSzs7MkZBRU4sNkJBQTZCO2tCQUh6QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVEZWZpbml0aW9ucyB9IGZyb20gJy4vdHlwZS1kZWZpbml0aW9ucyc7XG5cbmltcG9ydCB7IFNreURvY3NUeXBlRGVmaW5pdGlvbnNQcm92aWRlciB9IGZyb20gJy4vdHlwZS1kZWZpbml0aW9ucy1wcm92aWRlcic7XG5cbmltcG9ydCB7IFNreURvY3NUeXBlRG9jQWRhcHRlclNlcnZpY2UgfSBmcm9tICcuL3R5cGVkb2MtYWRhcHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFR5cGVEb2NLaW5kIH0gZnJvbSAnLi90eXBlZG9jLXR5cGVzJztcblxuLyoqXG4gKiBIYW5kbGVzIGFsbCB0eXBlIGRlZmluaXRpb25zIHRoYXQgaGF2ZSBiZWVuIGNvbnZlcnRlZCBmcm9tIHRoZSB0aGlyZC1wYXJ0eSBkb2N1bWVudGF0aW9uIGdlbmVyYXRvci5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAnYW55Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RG9jc1R5cGVEZWZpbml0aW9uc1NlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHR5cGVEZWZpbml0aW9uc1Byb3ZpZGVyOiBTa3lEb2NzVHlwZURlZmluaXRpb25zUHJvdmlkZXIsXG4gICAgcHJpdmF0ZSBhZGFwdGVyOiBTa3lEb2NzVHlwZURvY0FkYXB0ZXJTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogUmV0dXJucyB0eXBlIGRlZmluaXRpb25zIGZyb20gYSBzcGVjaWZpYyBzb3VyY2UgY29kZSBsb2NhdGlvbi5cbiAgICogQHBhcmFtIHNvdXJjZUNvZGVQYXRoIFRoZSBkaXJlY3Rvcnkgb2YgdGhlIHNvdXJjZSBjb2RlIHlvdSB3aXNoIHRvIHB1bGwgdHlwZSBkZWZpbml0aW9ucyBmcm9tLFxuICAgKiByZWxhdGl2ZSB0byB0aGUgYXBwbGljYXRpb24ncyByb290IGRpcmVjdG9yeS5cbiAgICovXG4gIHB1YmxpYyBnZXRUeXBlRGVmaW5pdGlvbnMoXG4gICAgc291cmNlQ29kZVBhdGg6IHN0cmluZyxcbiAgICBhZGRpdGlvbmFsU291cmNlQ29kZVBhdGhzPzogc3RyaW5nW11cbiAgKTogU2t5RG9jc1R5cGVEZWZpbml0aW9ucyB7XG4gICAgaWYgKCFzb3VyY2VDb2RlUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHNvdXJjZUNvZGVQYXRoYCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlUGF0aHM6IHN0cmluZ1tdID1cbiAgICAgIGFkZGl0aW9uYWxTb3VyY2VDb2RlUGF0aHMgJiYgYWRkaXRpb25hbFNvdXJjZUNvZGVQYXRocy5sZW5ndGggPiAwXG4gICAgICAgID8gW3NvdXJjZUNvZGVQYXRoXS5jb25jYXQoYWRkaXRpb25hbFNvdXJjZUNvZGVQYXRocylcbiAgICAgICAgOiBbc291cmNlQ29kZVBhdGhdO1xuXG4gICAgc291cmNlQ29kZVBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICAgIGlmICghcGF0aC5lbmRzV2l0aCgnLycpICYmICFwYXRoLmVuZHNXaXRoKCcudHMnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1NvdXJjZSBjb2RlIHBhdGhzIG11c3QgZW5kIHdpdGggYSBmb3J3YXJkIHNsYXNoIChgL2ApIG9yIGAudHNgLidcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGFsbERlZmluaXRpb25zID0gdGhpcy50eXBlRGVmaW5pdGlvbnNQcm92aWRlci50eXBlRGVmaW5pdGlvbnM7XG4gICAgY29uc3QgdHlwZXM6IFNreURvY3NUeXBlRGVmaW5pdGlvbnMgPSB7XG4gICAgICBjbGFzc2VzOiBbXSxcbiAgICAgIGNvbXBvbmVudHM6IFtdLFxuICAgICAgZGlyZWN0aXZlczogW10sXG4gICAgICBlbnVtZXJhdGlvbnM6IFtdLFxuICAgICAgaW50ZXJmYWNlczogW10sXG4gICAgICBwaXBlczogW10sXG4gICAgICBzZXJ2aWNlczogW10sXG4gICAgICB0eXBlQWxpYXNlczogW10sXG4gICAgfTtcblxuICAgIGlmICghYWxsRGVmaW5pdGlvbnMpIHtcbiAgICAgIGNvbnNvbGUud2FybihgTm8gdHlwZXMgd2VyZSBmb3VuZCBmb3IgdGhpcyBwcm9qZWN0IWApO1xuICAgICAgcmV0dXJuIHR5cGVzO1xuICAgIH1cblxuICAgIHNvdXJjZUNvZGVQYXRocy5mb3JFYWNoKChwYXRoKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ZWREaXIgPSBwYXRoXG4gICAgICAgIC5yZXBsYWNlKC9zcmNcXC9hcHBcXC9wdWJsaWNcXC8vLCAnJylcbiAgICAgICAgLnJlcGxhY2UoL15cXC8vLCAnJyk7IC8vIHJlbW92ZSBmaXJzdCBzbGFzaC5cblxuICAgICAgLy8gT25seSBwcm9jZXNzIHR5cGVzIHRoYXQgbWF0Y2ggdGhlIHJlcXVlc3RlZCBzb3VyY2UgY29kZSBsb2NhdGlvbi5cbiAgICAgIGNvbnN0IHR5cGVEZWZpbml0aW9ucyA9IGFsbERlZmluaXRpb25zLmZpbHRlcihcbiAgICAgICAgKGkpID0+IGkuc291cmNlcyAmJiBpLnNvdXJjZXNbMF0uZmlsZU5hbWUubWF0Y2gocmVxdWVzdGVkRGlyKVxuICAgICAgKTtcbiAgICAgIGlmICh0eXBlRGVmaW5pdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgVHlwZSBkZWZpbml0aW9ucyB3ZXJlIG5vdCBmb3VuZCBmb3IgbG9jYXRpb246ICR7cmVxdWVzdGVkRGlyfWBcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdHlwZURlZmluaXRpb25zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgY29uc3QgZGVjb3JhdG9yID0gaXRlbS5kZWNvcmF0b3JzICYmIGl0ZW0uZGVjb3JhdG9yc1swXT8ubmFtZTtcbiAgICAgICAgY29uc3Qga2luZCA9IGl0ZW0ua2luZDtcblxuICAgICAgICBzd2l0Y2ggKGRlY29yYXRvcikge1xuICAgICAgICAgIGNhc2UgJ0NvbXBvbmVudCc6XG4gICAgICAgICAgICB0eXBlcy5jb21wb25lbnRzLnB1c2godGhpcy5hZGFwdGVyLnRvRGlyZWN0aXZlRGVmaW5pdGlvbihpdGVtKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdEaXJlY3RpdmUnOlxuICAgICAgICAgICAgdHlwZXMuZGlyZWN0aXZlcy5wdXNoKHRoaXMuYWRhcHRlci50b0RpcmVjdGl2ZURlZmluaXRpb24oaXRlbSkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnSW5qZWN0YWJsZSc6XG4gICAgICAgICAgICB0eXBlcy5zZXJ2aWNlcy5wdXNoKHRoaXMuYWRhcHRlci50b0NsYXNzRGVmaW5pdGlvbihpdGVtKSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdOZ01vZHVsZSc6XG4gICAgICAgICAgICAvLyBEb24ndCBkb2N1bWVudCBtb2R1bGVzLlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnUGlwZSc6XG4gICAgICAgICAgICB0eXBlcy5waXBlcy5wdXNoKHRoaXMuYWRhcHRlci50b1BpcGVEZWZpbml0aW9uKGl0ZW0pKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvKnRzbGludDpkaXNhYmxlLW5leHQtbGluZTpzd2l0Y2gtZGVmYXVsdCovXG4gICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgICAgICAgY2FzZSBUeXBlRG9jS2luZC5DbGFzczpcbiAgICAgICAgICAgICAgICB0eXBlcy5jbGFzc2VzLnB1c2godGhpcy5hZGFwdGVyLnRvQ2xhc3NEZWZpbml0aW9uKGl0ZW0pKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBUeXBlRG9jS2luZC5JbnRlcmZhY2U6XG4gICAgICAgICAgICAgICAgdHlwZXMuaW50ZXJmYWNlcy5wdXNoKHRoaXMuYWRhcHRlci50b0ludGVyZmFjZURlZmluaXRpb24oaXRlbSkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFR5cGVEb2NLaW5kLkVudW06XG4gICAgICAgICAgICAgICAgdHlwZXMuZW51bWVyYXRpb25zLnB1c2goXG4gICAgICAgICAgICAgICAgICB0aGlzLmFkYXB0ZXIudG9FbnVtZXJhdGlvbkRlZmluaXRpb24oaXRlbSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFR5cGVEb2NLaW5kLlR5cGVBbGlhczpcbiAgICAgICAgICAgICAgICB0eXBlcy50eXBlQWxpYXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgICAgdGhpcy5hZGFwdGVyLnRvVHlwZUFsaWFzRGVmaW5pdGlvbihpdGVtKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG59XG4iXX0=
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS1kZWZpbml0aW9ucy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZG9jcy10b29scy9zcmMvbW9kdWxlcy90eXBlLWRlZmluaXRpb25zL3R5cGUtZGVmaW5pdGlvbnMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7OztBQUU5Qzs7R0FFRztBQUlILE1BQU0sT0FBTyw2QkFBNkI7SUFDeEMsWUFDVSx1QkFBdUQsRUFDdkQsT0FBcUM7UUFEckMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFnQztRQUN2RCxZQUFPLEdBQVAsT0FBTyxDQUE4QjtJQUM1QyxDQUFDO0lBRUo7Ozs7T0FJRztJQUNJLGtCQUFrQixDQUN2QixjQUFzQixFQUN0Qix5QkFBb0M7UUFFcEMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sSUFBSSxLQUFLLENBQUMsNENBQTRDLENBQUMsQ0FBQztRQUNoRSxDQUFDO1FBRUQsTUFBTSxlQUFlLEdBQ25CLHlCQUF5QixJQUFJLHlCQUF5QixDQUFDLE1BQU0sR0FBRyxDQUFDO1lBQy9ELENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQztZQUNwRCxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV2QixlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDL0IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2pELE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVBQWlFLENBQ2xFLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDO1FBQ3BFLE1BQU0sS0FBSyxHQUEyQjtZQUNwQyxPQUFPLEVBQUUsRUFBRTtZQUNYLFVBQVUsRUFBRSxFQUFFO1lBQ2QsVUFBVSxFQUFFLEVBQUU7WUFDZCxZQUFZLEVBQUUsRUFBRTtZQUNoQixVQUFVLEVBQUUsRUFBRTtZQUNkLEtBQUssRUFBRSxFQUFFO1lBQ1QsUUFBUSxFQUFFLEVBQUU7WUFDWixXQUFXLEVBQUUsRUFBRTtZQUNmLGtCQUFrQixFQUFFLEtBQUs7U0FDMUIsQ0FBQztRQUVGLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsSUFBSSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDdEQsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQy9CLE1BQU0sWUFBWSxHQUFHLElBQUk7aUJBQ3RCLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLENBQUM7aUJBQ2pDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxzQkFBc0I7WUFFN0Msb0VBQW9FO1lBQ3BFLE1BQU0sZUFBZSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQzNDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FDOUQsQ0FBQztZQUNGLElBQUksZUFBZSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxDQUFDLElBQUksQ0FDVixpREFBaUQsWUFBWSxFQUFFLENBQ2hFLENBQUM7WUFDSixDQUFDO1lBRUQsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDO2dCQUM5RCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO2dCQUV2QixRQUFRLFNBQVMsRUFBRSxDQUFDO29CQUNsQixLQUFLLFdBQVc7d0JBQ2QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDL0QsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7d0JBQ3JDLEtBQUssQ0FBQyxrQkFBa0IsS0FBSyxhQUFhLENBQUMsa0JBQWtCLENBQUM7d0JBQzlELE1BQU07b0JBQ1IsS0FBSyxXQUFXO3dCQUNkLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQy9ELEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO3dCQUNyQyxLQUFLLENBQUMsa0JBQWtCLEtBQUssYUFBYSxDQUFDLGtCQUFrQixDQUFDO3dCQUM5RCxNQUFNO29CQUNSLEtBQUssWUFBWTt3QkFDZixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUN6RCxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzt3QkFDakMsS0FBSyxDQUFDLGtCQUFrQixLQUFLLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQzt3QkFDNUQsTUFBTTtvQkFDUixLQUFLLFVBQVU7d0JBQ2IsMEJBQTBCO3dCQUMxQixNQUFNO29CQUNSLEtBQUssTUFBTTt3QkFDVCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO3dCQUNyRCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDM0IsS0FBSyxDQUFDLGtCQUFrQixLQUFLLFFBQVEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO3dCQUNoRSxNQUFNO29CQUNSO3dCQUNFLDJDQUEyQzt3QkFDM0MsUUFBUSxJQUFJLEVBQUUsQ0FBQzs0QkFDYixLQUFLLFdBQVcsQ0FBQyxLQUFLO2dDQUNwQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO2dDQUN2RCxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztnQ0FDOUIsS0FBSyxDQUFDLGtCQUFrQixLQUFLLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQztnQ0FDMUQsTUFBTTs0QkFDUixLQUFLLFdBQVcsQ0FBQyxTQUFTO2dDQUN4QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO2dDQUMvRCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQ0FDckMsS0FBSyxDQUFDLGtCQUFrQixLQUFLLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQztnQ0FDOUQsTUFBTTs0QkFDUixLQUFLLFdBQVcsQ0FBQyxJQUFJO2dDQUNuQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO2dDQUM1RCxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQ0FDbEMsS0FBSyxDQUFDLGtCQUFrQixLQUFLLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztnQ0FDekQsTUFBTTs0QkFDUixLQUFLLFdBQVcsQ0FBQyxTQUFTO2dDQUN4QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO2dDQUMvRCxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQ0FDdEMsS0FBSyxDQUFDLGtCQUFrQixLQUFLLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO2dDQUN2RCxNQUFNO3dCQUNWLENBQUM7Z0JBQ0wsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OEdBMUhVLDZCQUE2QjtrSEFBN0IsNkJBQTZCLGNBRjVCLEtBQUs7OzJGQUVOLDZCQUE2QjtrQkFIekMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsS0FBSztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreURvY3NUeXBlRGVmaW5pdGlvbnMgfSBmcm9tICcuL3R5cGUtZGVmaW5pdGlvbnMnO1xuXG5pbXBvcnQgeyBTa3lEb2NzVHlwZURlZmluaXRpb25zUHJvdmlkZXIgfSBmcm9tICcuL3R5cGUtZGVmaW5pdGlvbnMtcHJvdmlkZXInO1xuXG5pbXBvcnQgeyBTa3lEb2NzVHlwZURvY0FkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi90eXBlZG9jLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUeXBlRG9jS2luZCB9IGZyb20gJy4vdHlwZWRvYy10eXBlcyc7XG5cbi8qKlxuICogSGFuZGxlcyBhbGwgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGhhdmUgYmVlbiBjb252ZXJ0ZWQgZnJvbSB0aGUgdGhpcmQtcGFydHkgZG9jdW1lbnRhdGlvbiBnZW5lcmF0b3IuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ2FueScsXG59KVxuZXhwb3J0IGNsYXNzIFNreURvY3NUeXBlRGVmaW5pdGlvbnNTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0eXBlRGVmaW5pdGlvbnNQcm92aWRlcjogU2t5RG9jc1R5cGVEZWZpbml0aW9uc1Byb3ZpZGVyLFxuICAgIHByaXZhdGUgYWRhcHRlcjogU2t5RG9jc1R5cGVEb2NBZGFwdGVyU2VydmljZSxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHR5cGUgZGVmaW5pdGlvbnMgZnJvbSBhIHNwZWNpZmljIHNvdXJjZSBjb2RlIGxvY2F0aW9uLlxuICAgKiBAcGFyYW0gc291cmNlQ29kZVBhdGggVGhlIGRpcmVjdG9yeSBvZiB0aGUgc291cmNlIGNvZGUgeW91IHdpc2ggdG8gcHVsbCB0eXBlIGRlZmluaXRpb25zIGZyb20sXG4gICAqIHJlbGF0aXZlIHRvIHRoZSBhcHBsaWNhdGlvbidzIHJvb3QgZGlyZWN0b3J5LlxuICAgKi9cbiAgcHVibGljIGdldFR5cGVEZWZpbml0aW9ucyhcbiAgICBzb3VyY2VDb2RlUGF0aDogc3RyaW5nLFxuICAgIGFkZGl0aW9uYWxTb3VyY2VDb2RlUGF0aHM/OiBzdHJpbmdbXSxcbiAgKTogU2t5RG9jc1R5cGVEZWZpbml0aW9ucyB7XG4gICAgaWYgKCFzb3VyY2VDb2RlUGF0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgYHNvdXJjZUNvZGVQYXRoYCBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlUGF0aHM6IHN0cmluZ1tdID1cbiAgICAgIGFkZGl0aW9uYWxTb3VyY2VDb2RlUGF0aHMgJiYgYWRkaXRpb25hbFNvdXJjZUNvZGVQYXRocy5sZW5ndGggPiAwXG4gICAgICAgID8gW3NvdXJjZUNvZGVQYXRoXS5jb25jYXQoYWRkaXRpb25hbFNvdXJjZUNvZGVQYXRocylcbiAgICAgICAgOiBbc291cmNlQ29kZVBhdGhdO1xuXG4gICAgc291cmNlQ29kZVBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICAgIGlmICghcGF0aC5lbmRzV2l0aCgnLycpICYmICFwYXRoLmVuZHNXaXRoKCcudHMnKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1NvdXJjZSBjb2RlIHBhdGhzIG11c3QgZW5kIHdpdGggYSBmb3J3YXJkIHNsYXNoIChgL2ApIG9yIGAudHNgLicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhbGxEZWZpbml0aW9ucyA9IHRoaXMudHlwZURlZmluaXRpb25zUHJvdmlkZXIudHlwZURlZmluaXRpb25zO1xuICAgIGNvbnN0IHR5cGVzOiBTa3lEb2NzVHlwZURlZmluaXRpb25zID0ge1xuICAgICAgY2xhc3NlczogW10sXG4gICAgICBjb21wb25lbnRzOiBbXSxcbiAgICAgIGRpcmVjdGl2ZXM6IFtdLFxuICAgICAgZW51bWVyYXRpb25zOiBbXSxcbiAgICAgIGludGVyZmFjZXM6IFtdLFxuICAgICAgcGlwZXM6IFtdLFxuICAgICAgc2VydmljZXM6IFtdLFxuICAgICAgdHlwZUFsaWFzZXM6IFtdLFxuICAgICAgaGFzUHJldmlld0ZlYXR1cmVzOiBmYWxzZSxcbiAgICB9O1xuXG4gICAgaWYgKCFhbGxEZWZpbml0aW9ucykge1xuICAgICAgY29uc29sZS53YXJuKGBObyB0eXBlcyB3ZXJlIGZvdW5kIGZvciB0aGlzIHByb2plY3QhYCk7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgc291cmNlQ29kZVBhdGhzLmZvckVhY2goKHBhdGgpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RlZERpciA9IHBhdGhcbiAgICAgICAgLnJlcGxhY2UoL3NyY1xcL2FwcFxcL3B1YmxpY1xcLy8sICcnKVxuICAgICAgICAucmVwbGFjZSgvXlxcLy8sICcnKTsgLy8gcmVtb3ZlIGZpcnN0IHNsYXNoLlxuXG4gICAgICAvLyBPbmx5IHByb2Nlc3MgdHlwZXMgdGhhdCBtYXRjaCB0aGUgcmVxdWVzdGVkIHNvdXJjZSBjb2RlIGxvY2F0aW9uLlxuICAgICAgY29uc3QgdHlwZURlZmluaXRpb25zID0gYWxsRGVmaW5pdGlvbnMuZmlsdGVyKFxuICAgICAgICAoaSkgPT4gaS5zb3VyY2VzICYmIGkuc291cmNlc1swXS5maWxlTmFtZS5tYXRjaChyZXF1ZXN0ZWREaXIpLFxuICAgICAgKTtcbiAgICAgIGlmICh0eXBlRGVmaW5pdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgVHlwZSBkZWZpbml0aW9ucyB3ZXJlIG5vdCBmb3VuZCBmb3IgbG9jYXRpb246ICR7cmVxdWVzdGVkRGlyfWAsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHR5cGVEZWZpbml0aW9ucy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlY29yYXRvciA9IGl0ZW0uZGVjb3JhdG9ycyAmJiBpdGVtLmRlY29yYXRvcnNbMF0/Lm5hbWU7XG4gICAgICAgIGNvbnN0IGtpbmQgPSBpdGVtLmtpbmQ7XG5cbiAgICAgICAgc3dpdGNoIChkZWNvcmF0b3IpIHtcbiAgICAgICAgICBjYXNlICdDb21wb25lbnQnOlxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50VHlwZSA9IHRoaXMuYWRhcHRlci50b0RpcmVjdGl2ZURlZmluaXRpb24oaXRlbSk7XG4gICAgICAgICAgICB0eXBlcy5jb21wb25lbnRzLnB1c2goY29tcG9uZW50VHlwZSk7XG4gICAgICAgICAgICB0eXBlcy5oYXNQcmV2aWV3RmVhdHVyZXMgfHw9IGNvbXBvbmVudFR5cGUuaGFzUHJldmlld0ZlYXR1cmVzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnRGlyZWN0aXZlJzpcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGl2ZVR5cGUgPSB0aGlzLmFkYXB0ZXIudG9EaXJlY3RpdmVEZWZpbml0aW9uKGl0ZW0pO1xuICAgICAgICAgICAgdHlwZXMuZGlyZWN0aXZlcy5wdXNoKGRpcmVjdGl2ZVR5cGUpO1xuICAgICAgICAgICAgdHlwZXMuaGFzUHJldmlld0ZlYXR1cmVzIHx8PSBkaXJlY3RpdmVUeXBlLmhhc1ByZXZpZXdGZWF0dXJlcztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ0luamVjdGFibGUnOlxuICAgICAgICAgICAgY29uc3Qgc2VydmljZVR5cGUgPSB0aGlzLmFkYXB0ZXIudG9DbGFzc0RlZmluaXRpb24oaXRlbSk7XG4gICAgICAgICAgICB0eXBlcy5zZXJ2aWNlcy5wdXNoKHNlcnZpY2VUeXBlKTtcbiAgICAgICAgICAgIHR5cGVzLmhhc1ByZXZpZXdGZWF0dXJlcyB8fD0gc2VydmljZVR5cGUuaGFzUHJldmlld0ZlYXR1cmVzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnTmdNb2R1bGUnOlxuICAgICAgICAgICAgLy8gRG9uJ3QgZG9jdW1lbnQgbW9kdWxlcy5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ1BpcGUnOlxuICAgICAgICAgICAgY29uc3QgcGlwZVR5cGUgPSB0aGlzLmFkYXB0ZXIudG9QaXBlRGVmaW5pdGlvbihpdGVtKTtcbiAgICAgICAgICAgIHR5cGVzLnBpcGVzLnB1c2gocGlwZVR5cGUpO1xuICAgICAgICAgICAgdHlwZXMuaGFzUHJldmlld0ZlYXR1cmVzIHx8PSBwaXBlVHlwZS50cmFuc2Zvcm1NZXRob2QuaXNQcmV2aWV3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8qdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOnN3aXRjaC1kZWZhdWx0Ki9cbiAgICAgICAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICAgICAgICBjYXNlIFR5cGVEb2NLaW5kLkNsYXNzOlxuICAgICAgICAgICAgICAgIGNvbnN0IGNsYXNzVHlwZSA9IHRoaXMuYWRhcHRlci50b0NsYXNzRGVmaW5pdGlvbihpdGVtKTtcbiAgICAgICAgICAgICAgICB0eXBlcy5jbGFzc2VzLnB1c2goY2xhc3NUeXBlKTtcbiAgICAgICAgICAgICAgICB0eXBlcy5oYXNQcmV2aWV3RmVhdHVyZXMgfHw9IGNsYXNzVHlwZS5oYXNQcmV2aWV3RmVhdHVyZXM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgVHlwZURvY0tpbmQuSW50ZXJmYWNlOlxuICAgICAgICAgICAgICAgIGNvbnN0IGludGVyZmFjZVR5cGUgPSB0aGlzLmFkYXB0ZXIudG9JbnRlcmZhY2VEZWZpbml0aW9uKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHR5cGVzLmludGVyZmFjZXMucHVzaChpbnRlcmZhY2VUeXBlKTtcbiAgICAgICAgICAgICAgICB0eXBlcy5oYXNQcmV2aWV3RmVhdHVyZXMgfHw9IGludGVyZmFjZVR5cGUuaGFzUHJldmlld0ZlYXR1cmVzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFR5cGVEb2NLaW5kLkVudW06XG4gICAgICAgICAgICAgICAgY29uc3QgZW51bVR5cGUgPSB0aGlzLmFkYXB0ZXIudG9FbnVtZXJhdGlvbkRlZmluaXRpb24oaXRlbSk7XG4gICAgICAgICAgICAgICAgdHlwZXMuZW51bWVyYXRpb25zLnB1c2goZW51bVR5cGUpO1xuICAgICAgICAgICAgICAgIHR5cGVzLmhhc1ByZXZpZXdGZWF0dXJlcyB8fD0gZW51bVR5cGUuaGFzUHJldmlld0ZlYXR1cmVzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIFR5cGVEb2NLaW5kLlR5cGVBbGlhczpcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlQWxpYXNUeXBlID0gdGhpcy5hZGFwdGVyLnRvVHlwZUFsaWFzRGVmaW5pdGlvbihpdGVtKTtcbiAgICAgICAgICAgICAgICB0eXBlcy50eXBlQWxpYXNlcy5wdXNoKHR5cGVBbGlhc1R5cGUpO1xuICAgICAgICAgICAgICAgIHR5cGVzLmhhc1ByZXZpZXdGZWF0dXJlcyB8fD0gISF0eXBlQWxpYXNUeXBlLmlzUHJldmlldztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHlwZXM7XG4gIH1cbn1cbiJdfQ==
@@ -14,6 +14,7 @@ export class SkyDocsTypeDocAdapterService {
14
14
  const definition = {
15
15
  anchorId: this.getAnchorId(entry),
16
16
  name: entry.name,
17
+ hasPreviewFeatures: false,
17
18
  };
18
19
  const tags = this.getCommentTags(entry.comment);
19
20
  this.applyCommentTagValues(definition, tags);
@@ -25,6 +26,9 @@ export class SkyDocsTypeDocAdapterService {
25
26
  if (properties.length) {
26
27
  definition.properties = properties;
27
28
  }
29
+ definition.hasPreviewFeatures =
30
+ !!definition.methods?.some((method) => method.isPreview) ||
31
+ !!definition.properties?.some((property) => property.isPreview);
28
32
  return definition;
29
33
  }
30
34
  toDirectiveDefinition(entry) {
@@ -32,6 +36,7 @@ export class SkyDocsTypeDocAdapterService {
32
36
  anchorId: this.getAnchorId(entry),
33
37
  name: entry.name,
34
38
  selector: this.getSelector(entry),
39
+ hasPreviewFeatures: false,
35
40
  };
36
41
  const tags = this.getCommentTags(entry.comment);
37
42
  this.applyCommentTagValues(definition, tags);
@@ -44,6 +49,9 @@ export class SkyDocsTypeDocAdapterService {
44
49
  if (inputProperties.length) {
45
50
  definition.inputProperties = inputProperties;
46
51
  }
52
+ definition.hasPreviewFeatures =
53
+ !!definition.inputProperties?.some((property) => property.isPreview) ||
54
+ !!definition.eventProperties?.some((property) => property.isPreview);
47
55
  return definition;
48
56
  }
49
57
  toEnumerationDefinition(entry) {
@@ -52,6 +60,7 @@ export class SkyDocsTypeDocAdapterService {
52
60
  anchorId: this.getAnchorId(entry),
53
61
  members,
54
62
  name: entry.name,
63
+ hasPreviewFeatures: !!members.find((member) => member.isPreview),
55
64
  };
56
65
  const tags = this.getCommentTags(entry.comment);
57
66
  this.applyCommentTagValues(definition, tags);
@@ -62,6 +71,7 @@ export class SkyDocsTypeDocAdapterService {
62
71
  const definition = {
63
72
  anchorId: this.getAnchorId(entry),
64
73
  name: entry.name,
74
+ hasPreviewFeatures: !!properties.find((member) => member.isPreview),
65
75
  properties,
66
76
  };
67
77
  const tags = this.getCommentTags(entry.comment);
@@ -88,6 +98,7 @@ export class SkyDocsTypeDocAdapterService {
88
98
  const definition = {
89
99
  anchorId: this.getAnchorId(entry),
90
100
  name: entry.name,
101
+ isPreview: false,
91
102
  type: this.getTypeDefinition({
92
103
  comment: entry.comment,
93
104
  type: entry.type,
@@ -129,6 +140,7 @@ export class SkyDocsTypeDocAdapterService {
129
140
  .map((child) => {
130
141
  let definition = {
131
142
  isOptional: true,
143
+ isPreview: false,
132
144
  name: this.getPropertyName(child),
133
145
  type: this.getTypeDefinition(child),
134
146
  };
@@ -216,6 +228,7 @@ export class SkyDocsTypeDocAdapterService {
216
228
  name: this.getPropertyName(child),
217
229
  type: this.getTypeDefinition(child),
218
230
  isStatic: !!child.flags?.isStatic,
231
+ isPreview: false,
219
232
  parentName: entry.name,
220
233
  };
221
234
  // Comments for methods are stored in a different location.
@@ -248,6 +261,7 @@ export class SkyDocsTypeDocAdapterService {
248
261
  }
249
262
  const definition = {
250
263
  isOptional: tags.extras.required ? false : !!child.flags?.isOptional,
264
+ isPreview: false,
251
265
  name: this.getPropertyName(child),
252
266
  type: this.getTypeDefinition(child),
253
267
  };
@@ -260,6 +274,7 @@ export class SkyDocsTypeDocAdapterService {
260
274
  const indexSignature = entry.indexSignature;
261
275
  const definition = {
262
276
  isOptional: true,
277
+ isPreview: false,
263
278
  name: indexSignature.name,
264
279
  type: {
265
280
  indexSignature: this.getIndexSignatureDefinition(indexSignature),
@@ -284,6 +299,7 @@ export class SkyDocsTypeDocAdapterService {
284
299
  return entry.children.map((child) => {
285
300
  const definition = {
286
301
  name: child.name,
302
+ isPreview: false,
287
303
  };
288
304
  const tags = this.getCommentTags(child.comment);
289
305
  this.applyCommentTagValues(definition, tags);
@@ -481,6 +497,9 @@ export class SkyDocsTypeDocAdapterService {
481
497
  .trim(),
482
498
  });
483
499
  break;
500
+ case '@preview':
501
+ extras['preview'] = true;
502
+ break;
484
503
  case '@required':
485
504
  extras['required'] = true;
486
505
  break;
@@ -538,6 +557,9 @@ export class SkyDocsTypeDocAdapterService {
538
557
  if (tags.description) {
539
558
  definition.description = tags.description;
540
559
  }
560
+ if (tags.extras?.preview) {
561
+ definition.isPreview = tags.extras?.preview;
562
+ }
541
563
  }
542
564
  getDecorator(child) {
543
565
  const name = child.decorators && child.decorators[0] && child.decorators[0].name;
@@ -570,10 +592,10 @@ export class SkyDocsTypeDocAdapterService {
570
592
  this.typeDefinitionsProvider?.anchorIds[entry.name] ||
571
593
  '');
572
594
  }
573
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: SkyDocsTypeDocAdapterService, deps: [{ token: i1.SkyDocsTypeDefinitionsProvider, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
574
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: SkyDocsTypeDocAdapterService, providedIn: 'any' }); }
595
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: SkyDocsTypeDocAdapterService, deps: [{ token: i1.SkyDocsTypeDefinitionsProvider, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
596
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: SkyDocsTypeDocAdapterService, providedIn: 'any' }); }
575
597
  }
576
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImport: i0, type: SkyDocsTypeDocAdapterService, decorators: [{
598
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.0", ngImport: i0, type: SkyDocsTypeDocAdapterService, decorators: [{
577
599
  type: Injectable,
578
600
  args: [{
579
601
  providedIn: 'any',
@@ -581,4 +603,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.1", ngImpor
581
603
  }], ctorParameters: () => [{ type: i1.SkyDocsTypeDefinitionsProvider, decorators: [{
582
604
  type: Optional
583
605
  }] }] });
584
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb2NzLXRvb2xzL3NyYy9tb2R1bGVzL3R5cGUtZGVmaW5pdGlvbnMvdHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFzQ3JELE9BQU8sRUFJTCxXQUFXLEdBS1osTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRXJDOztHQUVHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxZQUNzQix1QkFBd0Q7UUFBeEQsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUFpQztJQUMzRSxDQUFDO0lBRUcsaUJBQWlCLENBQUMsS0FBbUI7UUFDMUMsTUFBTSxVQUFVLEdBQTJCO1lBQ3pDLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNqQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7U0FDakIsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixVQUFVLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUMvQixDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFD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QUFVLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNqRSxpREFBaUQ7UUFDakQsd0JBQXdCO1FBQ3hCLE9BQU8sVUFBVSxFQUFFLFNBQVMsRUFBRSxtQkFBbUI7WUFDL0MsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUM7WUFDbEUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVPLGVBQWUsQ0FDckIsS0FBd0IsRUFDeEIsSUFBd0I7UUFFeEIsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO1FBQzNCLENBQUM7UUFFRCxvRkFBb0Y7UUFDcEYsMkVBQTJFO1FBQzNFLHlEQUF5RDtRQUN6RCxJQUFJLEtBQUssQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDakMsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxZQUFZLENBQUM7SUFDNUIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFtQjtRQUNyQyxPQUFPLENBQ0wsS0FBSyxDQUFDLFFBQVE7WUFDZCxJQUFJLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7WUFDbkQsRUFBRSxDQUNILENBQUM7SUFDSixDQUFDOzhHQTN3QlUsNEJBQTRCO2tIQUE1Qiw0QkFBNEIsY0FGM0IsS0FBSzs7MkZBRU4sNEJBQTRCO2tCQUh4QyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxLQUFLO2lCQUNsQjs7MEJBR0ksUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE9wdGlvbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreURvY3NDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbiB9IGZyb20gJy4vY2FsbC1zaWduYXR1cmUtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NDbGFzc0RlZmluaXRpb24gfSBmcm9tICcuL2NsYXNzLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24gfSBmcm9tICcuL3Byb3BlcnR5LWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ29tbWVudFRhZ3MgfSBmcm9tICcuL2NvbW1lbnQtdGFncyc7XG5cbmltcG9ydCB7IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uIH0gZnJvbSAnLi9kaXJlY3RpdmUtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24gfSBmcm9tICcuL2VudW1lcmF0aW9uLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzRW51bWVyYXRpb25NZW1iZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9lbnVtZXJhdGlvbi1tZW1iZXItZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NJbmRleFNpZ25hdHVyZURlZmluaXRpb24gfSBmcm9tICcuL2luZGV4LXNpZ25hdHVyZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0ludGVyZmFjZURlZmluaXRpb24gfSBmcm9tICcuL2ludGVyZmFjZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0ludGVyZmFjZVByb3BlcnR5RGVmaW5pdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlLXByb3BlcnR5LWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzQ2xhc3NNZXRob2REZWZpbml0aW9uIH0gZnJvbSAnLi9tZXRob2QtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi9wYXJhbWV0ZXItZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NQaXBlRGVmaW5pdGlvbiB9IGZyb20gJy4vcGlwZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1Byb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiB9IGZyb20gJy4vcHJvcGVydHktZGVjb3JhdG9yJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVBbGlhc0RlZmluaXRpb24gfSBmcm9tICcuL3R5cGUtYWxpYXMtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NUeXBlRGVmaW5pdGlvbiB9IGZyb20gJy4vdHlwZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVEZWZpbml0aW9uc1Byb3ZpZGVyIH0gZnJvbSAnLi90eXBlLWRlZmluaXRpb25zLXByb3ZpZGVyJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVQYXJhbWV0ZXJEZWZpbml0aW9uIH0gZnJvbSAnLi90eXBlLXBhcmFtZXRlci1kZWZpbml0aW9uJztcblxuaW1wb3J0IHtcbiAgVHlwZURvY0NvbW1lbnQsXG4gIFR5cGVEb2NFbnRyeSxcbiAgVHlwZURvY0VudHJ5Q2hpbGQsXG4gIFR5cGVEb2NLaW5kLFxuICBUeXBlRG9jUGFyYW1ldGVyLFxuICBUeXBlRG9jU2lnbmF0dXJlLFxuICBUeXBlRG9jVHlwZSxcbiAgVHlwZURvY1R5cGVQYXJhbWV0ZXIsXG59IGZyb20gJy4vdHlwZWRvYy10eXBlcyc7XG5cbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC5vcmRlcmJ5JztcblxuLyoqXG4gKiBDb252ZXJ0cyBUeXBlRG9jIHR5cGVzIGludG8gU0tZIFVYIGRvY3MtdG9vbHMgdHlwZXMsIHRvIGJlIHN1cHBsaWVkIHRvIHRoZSB2YXJpb3VzIGRlZmluaXRpb25zIGNvbXBvbmVudHMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ2FueScsXG59KVxuZXhwb3J0IGNsYXNzIFNreURvY3NUeXBlRG9jQWRhcHRlclNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHR5cGVEZWZpbml0aW9uc1Byb3ZpZGVyPzogU2t5RG9jc1R5cGVEZWZpbml0aW9uc1Byb3ZpZGVyXG4gICkge31cblxuICBwdWJsaWMgdG9DbGFzc0RlZmluaXRpb24oZW50cnk6IFR5cGVEb2NFbnRyeSk6IFNreURvY3NDbGFzc0RlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NDbGFzc0RlZmluaXRpb24gPSB7XG4gICAgICBhbmNob3JJZDogdGhpcy5nZXRBbmNob3JJZChlbnRyeSksXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IG1ldGhvZHMgPSB0aGlzLmdldENsYXNzTWV0aG9kcyhlbnRyeSk7XG4gICAgaWYgKG1ldGhvZHMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLm1ldGhvZHMgPSBtZXRob2RzO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLmdldENsYXNzUHJvcGVydGllcyhlbnRyeSk7XG4gICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcHVibGljIHRvRGlyZWN0aXZlRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uIHtcbiAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzRGlyZWN0aXZlRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICBzZWxlY3RvcjogdGhpcy5nZXRTZWxlY3RvcihlbnRyeSksXG4gICAgfTtcblxuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGVudHJ5LmNvbW1lbnQpO1xuICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q2xhc3NQcm9wZXJ0aWVzKGVudHJ5KTtcblxuICAgIGNvbnN0IGV2ZW50UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZmlsdGVyKFxuICAgICAgKHApID0+IHAuZGVjb3JhdG9yPy5uYW1lID09PSAnT3V0cHV0J1xuICAgICk7XG4gICAgaWYgKGV2ZW50UHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24uZXZlbnRQcm9wZXJ0aWVzID0gZXZlbnRQcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIGNvbnN0IGlucHV0UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZmlsdGVyKFxuICAgICAgKHApID0+IHAuZGVjb3JhdG9yPy5uYW1lID09PSAnSW5wdXQnXG4gICAgKTtcbiAgICBpZiAoaW5wdXRQcm9wZXJ0aWVzLmxlbmd0aCkge1xuICAgICAgZGVmaW5pdGlvbi5pbnB1dFByb3BlcnRpZXMgPSBpbnB1dFByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9FbnVtZXJhdGlvbkRlZmluaXRpb24oXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzRW51bWVyYXRpb25EZWZpbml0aW9uIHtcbiAgICBjb25zdCBtZW1iZXJzID0gdGhpcy5nZXRFbnVtZXJhdGlvbk1lbWJlcnMoZW50cnkpO1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24gPSB7XG4gICAgICBhbmNob3JJZDogdGhpcy5nZXRBbmNob3JJZChlbnRyeSksXG4gICAgICBtZW1iZXJzLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b0ludGVyZmFjZURlZmluaXRpb24oXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzSW50ZXJmYWNlRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0SW50ZXJmYWNlUHJvcGVydGllcyhlbnRyeSk7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0ludGVyZmFjZURlZmluaXRpb24gPSB7XG4gICAgICBhbmNob3JJZDogdGhpcy5nZXRBbmNob3JJZChlbnRyeSksXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgcHJvcGVydGllcyxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICBjb25zdCB0eXBlUGFyYW1ldGVycyA9IHRoaXMuZ2V0VHlwZVBhcmFtZXRlckRlZmluaXRpb25zKFxuICAgICAgZW50cnkudHlwZVBhcmFtZXRlcnNcbiAgICApO1xuICAgIGlmICh0eXBlUGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24udHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVycztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b1BpcGVEZWZpbml0aW9uKGVudHJ5OiBUeXBlRG9jRW50cnkpOiBTa3lEb2NzUGlwZURlZmluaXRpb24ge1xuICAgIGNvbnN0IG1ldGhvZHMgPSB0aGlzLmdldENsYXNzTWV0aG9kcyhlbnRyeSk7XG4gICAgY29uc3QgdHJhbnNmb3JtTWV0aG9kID0gbWV0aG9kcy5maW5kKChtKSA9PiBtLm5hbWUgPT09ICd0cmFuc2Zvcm0nKTtcbiAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzUGlwZURlZmluaXRpb24gPSB7XG4gICAgICBhbmNob3JJZDogdGhpcy5nZXRBbmNob3JJZChlbnRyeSksXG4gICAgICBuYW1lOiBlbnRyeS5uYW1lLFxuICAgICAgdHJhbnNmb3JtTWV0aG9kLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcHVibGljIHRvVHlwZUFsaWFzRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NUeXBlQWxpYXNEZWZpbml0aW9uIHtcbiAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzVHlwZUFsaWFzRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHtcbiAgICAgICAgY29tbWVudDogZW50cnkuY29tbWVudCxcbiAgICAgICAgdHlwZTogZW50cnkudHlwZSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhcbiAgICAgIGVudHJ5LnR5cGUuZGVjbGFyYXRpb24/LnNpZ25hdHVyZXNcbiAgICAgICAgPyBlbnRyeS50eXBlLmRlY2xhcmF0aW9uLnNpZ25hdHVyZXNbMF0uY29tbWVudFxuICAgICAgICA6IGVudHJ5LmNvbW1lbnRcbiAgICApO1xuICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSB0aGlzLmdldFR5cGVQYXJhbWV0ZXJEZWZpbml0aW9ucyhcbiAgICAgIGVudHJ5LnR5cGVQYXJhbWV0ZXJzXG4gICAgKTtcbiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdG9yKGVudHJ5OiBUeXBlRG9jRW50cnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlY29yYXRvclNvdXJjZSA9IGVudHJ5LmRlY29yYXRvcnNbMF0uYXJndW1lbnRzLm9iajtcbiAgICByZXR1cm4gZGVjb3JhdG9yU291cmNlLmluZGV4T2YoJ3NlbGVjdG9yOiBgJykgPiAtMVxuICAgICAgPyBkZWNvcmF0b3JTb3VyY2VcbiAgICAgICAgICAuc3BsaXQoJ3NlbGVjdG9yOiBgJylbMV1cbiAgICAgICAgICAuc3BsaXQoJ2AnKVswXVxuICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMrL2csICcgJylcbiAgICAgIDogZGVjb3JhdG9yU291cmNlLnNwbGl0KFwic2VsZWN0b3I6ICdcIilbMV0uc3BsaXQoXCInXCIpWzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc1Byb3BlcnRpZXMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb25zID0gZW50cnkuY2hpbGRyZW5cbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChjaGlsZCkgPT5cbiAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgcHJvcGVydGllcyAoYm90aCB3aXRoIG9yIHdpdGhvdXQgYSBnZXR0ZXIvc2V0dGVyKVxuICAgICAgICAgIGNoaWxkLmtpbmQgPT09IFR5cGVEb2NLaW5kLlByb3BlcnR5IHx8XG4gICAgICAgICAgY2hpbGQua2luZCA9PT0gVHlwZURvY0tpbmQuQWNjZXNzb3JcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChjaGlsZCkgPT5cbiAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgYWNjZXNzb3JzIHRoYXQgZG9uJ3QgaGF2ZSBhIHNldHRlciBpZiB0aGV5IGFyZSBub3QgaW5wdXRzXG4gICAgICAgICAgY2hpbGQua2luZCAhPT0gVHlwZURvY0tpbmQuQWNjZXNzb3IgfHxcbiAgICAgICAgICBjaGlsZC5zZXRTaWduYXR1cmUgfHxcbiAgICAgICAgICB0aGlzLmdldERlY29yYXRvcihjaGlsZCk/Lm5hbWUgIT09ICdJbnB1dCdcbiAgICAgIClcbiAgICAgIC5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgIGxldCBkZWZpbml0aW9uOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gICAgICAgICAgaXNPcHRpb25hbDogdHJ1ZSxcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgIH07XG4gICAgICAgIGxldCBkZWZhdWx0VmFsdWU6IHN0cmluZztcblxuICAgICAgICAvKiBFbnN1cmUgd2UgYXJlIHByb3Blcmx5IGNhcHR1cmluZyBkZWZpbml0aW9ucyB3aGljaCB1c2UgYSBnZXR0ZXIvc2V0dGVyLiBGaW5hbCBjaGVjayBpcyBhIHNhbml0eSBjaGVjayAqL1xuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGQua2luZCA9PT0gVHlwZURvY0tpbmQuQWNjZXNzb3IgJiZcbiAgICAgICAgICAhY2hpbGQuY29tbWVudD8uc3VtbWFyeVxuICAgICAgICAgICAgPy5tYXAoKGl0ZW0pID0+IGl0ZW0udGV4dClcbiAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgICAgLnRyaW0oKSAmJlxuICAgICAgICAgIChjaGlsZC5zZXRTaWduYXR1cmUgfHwgY2hpbGQuZ2V0U2lnbmF0dXJlKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtYWluVGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCk7XG5cbiAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCBtYWluVGFncyk7XG5cbiAgICAgICAgICBpZiAoY2hpbGQuZ2V0U2lnbmF0dXJlKSB7XG4gICAgICAgICAgICBjb25zdCBnZXRUYWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5nZXRTaWduYXR1cmUuY29tbWVudCk7XG5cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICFnZXRUYWdzLmV4dHJhcy5yZXF1aXJlZDtcblxuICAgICAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgZ2V0VGFncyk7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgZ2V0VGFncyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNoaWxkLnNldFNpZ25hdHVyZSkge1xuICAgICAgICAgICAgY29uc3Qgc2V0VGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuc2V0U2lnbmF0dXJlLmNvbW1lbnQpO1xuXG4gICAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCBzZXRUYWdzKTtcblxuICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsID1cbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsICYmICFzZXRUYWdzLmV4dHJhcy5yZXF1aXJlZDtcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSB8fCB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgc2V0VGFncyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9ICFtYWluVGFncy5leHRyYXMucmVxdWlyZWQ7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgbWFpblRhZ3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsZXQgdGFnczogU2t5RG9jc0NvbW1lbnRUYWdzIHwgdW5kZWZpbmVkO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGNoaWxkLmtpbmQgPT09IFR5cGVEb2NLaW5kLlByb3BlcnR5ICYmXG4gICAgICAgICAgICAhY2hpbGQuY29tbWVudD8uc3VtbWFyeVxuICAgICAgICAgICAgICA/Lm1hcCgoaXRlbSkgPT4gaXRlbS50ZXh0KVxuICAgICAgICAgICAgICAuam9pbignJylcbiAgICAgICAgICAgICAgLnRyaW0oKSAmJlxuICAgICAgICAgICAgY2hpbGQudHlwZS5kZWNsYXJhdGlvbj8uc2lnbmF0dXJlcz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgY2hpbGQudHlwZS5kZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLmNvbW1lbnRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKFxuICAgICAgICAgICAgICBjaGlsZC50eXBlLmRlY2xhcmF0aW9uLnNpZ25hdHVyZXNbMF0uY29tbWVudFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsID0gIXRhZ3MuZXh0cmFzLnJlcXVpcmVkO1xuICAgICAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCk7XG5cbiAgICAgICAgICBkZWZpbml0aW9uLmlzT3B0aW9uYWwgPVxuICAgICAgICAgICAgZGVmaW5pdGlvbi5pc09wdGlvbmFsICYmICF0YWdzLmV4dHJhcy5yZXF1aXJlZDtcblxuICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgICAgICAgZGVmYXVsdFZhbHVlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoY2hpbGQsIHRhZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgIGRlZmluaXRpb24uZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVjb3JhdG9yID0gdGhpcy5nZXREZWNvcmF0b3IoY2hpbGQpO1xuICAgICAgICBpZiAoZGVjb3JhdG9yKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi5kZWNvcmF0b3IgPSBkZWNvcmF0b3I7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRlZmluaXRpb24uZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICBjb25zdCBjb25zdHJ1Y3RvciA9IGVudHJ5LmNoaWxkcmVuLmZpbmQoXG4gICAgICAgICAgICAoY2hpbGQpID0+IGNoaWxkLmtpbmQgPT09IFR5cGVEb2NLaW5kLkNvbnN0cnVjdG9yXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnN0cnVjdG9yLnNpZ25hdHVyZXMuZmluZChcbiAgICAgICAgICAgICAgKHNpZ25hdHVyZSkgPT4gc2lnbmF0dXJlLmtpbmQgPT09IFR5cGVEb2NLaW5kLkNvbnN0cnVjdG9yU2lnbmF0dXJlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLyogU2FuaXR5IGNoZWNrICovXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtID0gc2lnbmF0dXJlLnBhcmFtZXRlcnM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLm5hbWUgPT09IGNoaWxkLm5hbWVcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKG1hdGNoaW5nUGFyYW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtVGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoXG4gICAgICAgICAgICAgICAgICBtYXRjaGluZ1BhcmFtLmNvbW1lbnRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIG1hdGNoaW5nUGFyYW1UYWdzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gb3JkZXJCeShkZWZpbml0aW9ucywgWydpc09wdGlvbmFsJywgJ25hbWUnXSwgWydhc2MnLCAnYXNjJ10pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDbGFzc01ldGhvZHMoZW50cnk6IFR5cGVEb2NFbnRyeSk6IFNreURvY3NDbGFzc01ldGhvZERlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldGhvZHMgPSBlbnRyeS5jaGlsZHJlblxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGNoaWxkKSA9PlxuICAgICAgICAgIGNoaWxkLmtpbmQgPT09IFR5cGVEb2NLaW5kLk1ldGhvZCAmJiAvXm5nLy50ZXN0KGNoaWxkLm5hbWUpID09PSBmYWxzZVxuICAgICAgKVxuICAgICAgLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0NsYXNzTWV0aG9kRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgICAgaXNTdGF0aWM6ICEhY2hpbGQuZmxhZ3M/LmlzU3RhdGljLFxuICAgICAgICAgIHBhcmVudE5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gQ29tbWVudHMgZm9yIG1ldGhvZHMgYXJlIHN0b3JlZCBpbiBhIGRpZmZlcmVudCBsb2NhdGlvbi5cbiAgICAgICAgY29uc3QgY29tbWVudCA9IGNoaWxkLnNpZ25hdHVyZXNbMF0uY29tbWVudDtcbiAgICAgICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY29tbWVudCk7XG4gICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICAgICAgY2hpbGQuc2lnbmF0dXJlc1swXS50eXBlUGFyYW1ldGVyc1xuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi50eXBlUGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICB9KTtcblxuICAgIHJldHVybiBvcmRlckJ5KG1ldGhvZHMsIFsnbmFtZSddLCBbJ2FzYyddKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW50ZXJmYWNlUHJvcGVydGllcyhcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5XG4gICk6IFNreURvY3NJbnRlcmZhY2VQcm9wZXJ0eURlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbiAmJiAhZW50cnkuaW5kZXhTaWduYXR1cmUpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBkZWZpbml0aW9ucyA9XG4gICAgICBlbnRyeS5jaGlsZHJlbj8ubWFwKChjaGlsZCkgPT4ge1xuICAgICAgICBsZXQgdGFnczogU2t5RG9jc0NvbW1lbnRUYWdzIHwgdW5kZWZpbmVkO1xuICAgICAgICBpZiAoY2hpbGQua2luZCA9PT0gVHlwZURvY0tpbmQuTWV0aG9kICYmIGNoaWxkLnNpZ25hdHVyZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLnNpZ25hdHVyZXNbMF0uY29tbWVudCk7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgY2hpbGQudHlwZS50eXBlID09PSAncmVmbGVjdGlvbicgJiZcbiAgICAgICAgICBjaGlsZC50eXBlPy5kZWNsYXJhdGlvbj8uc2lnbmF0dXJlcz8ubGVuZ3RoID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24uc2lnbmF0dXJlc1swXS5jb21tZW50XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5jb21tZW50KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzSW50ZXJmYWNlUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICAgICAgICAgIGlzT3B0aW9uYWw6IHRhZ3MuZXh0cmFzLnJlcXVpcmVkID8gZmFsc2UgOiAhIWNoaWxkLmZsYWdzPy5pc09wdGlvbmFsLFxuICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0UHJvcGVydHlOYW1lKGNoaWxkKSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKGNoaWxkKSxcbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgICAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgICAgIH0pIHx8IFtdO1xuXG4gICAgY29uc3Qgc29ydGVkID0gb3JkZXJCeShkZWZpbml0aW9ucywgWydpc09wdGlvbmFsJywgJ25hbWUnXSwgWydhc2MnLCAnYXNjJ10pO1xuXG4gICAgLy8gQWRkIGFueSBpbmRleCBzaWduYXR1cmVzLCBlLmcuIGBbXzogc3RyaW5nXTogYW55YFxuICAgIGlmIChlbnRyeS5pbmRleFNpZ25hdHVyZSkge1xuICAgICAgY29uc3QgaW5kZXhTaWduYXR1cmUgPSBlbnRyeS5pbmRleFNpZ25hdHVyZTtcbiAgICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NJbnRlcmZhY2VQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gICAgICAgIGlzT3B0aW9uYWw6IHRydWUsXG4gICAgICAgIG5hbWU6IGluZGV4U2lnbmF0dXJlLm5hbWUsXG4gICAgICAgIHR5cGU6IHtcbiAgICAgICAgICBpbmRleFNpZ25hdHVyZTogdGhpcy5nZXRJbmRleFNpZ25hdHVyZURlZmluaXRpb24oaW5kZXhTaWduYXR1cmUpLFxuICAgICAgICB9LFxuICAgICAgfTtcblxuICAgICAgLy8gTmV3IHZlcnNpb25zIG9mIHR5cGVkb2MgZG8gbm90IHNlZW0gdG8gYWRkIHRoZSBjb21tZW50IGZvciBpbmRleCBzaWduYXR1cmVzIC0gdGhlIGVsc2Ugc3RhdGVtZW50IGlzIGEgZGVmYXVsdCBiYXNlZCBvbiB0aGUgb25seSBpbmRleCBzaWduYXR1cmUgd2UgaGFkIGluIFNlcHRlbWJlciAyMDIzIChTa3lTZWxlY3RGaWVsZCkuXG4gICAgICBpZiAoaW5kZXhTaWduYXR1cmUuY29tbWVudCkge1xuICAgICAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhpbmRleFNpZ25hdHVyZS5jb21tZW50KTtcbiAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZpbml0aW9uLmRlc2NyaXB0aW9uID0gJ0FsbCBvdGhlciBwcm9wZXJ0aWVzIGZvciBhbiBpdGVtLic7XG4gICAgICB9XG4gICAgICBzb3J0ZWQucHVzaChkZWZpbml0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc29ydGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFbnVtZXJhdGlvbk1lbWJlcnMoXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeVxuICApOiBTa3lEb2NzRW51bWVyYXRpb25NZW1iZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghZW50cnkuY2hpbGRyZW4pIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZW50cnkuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0VudW1lcmF0aW9uTWVtYmVyRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgbmFtZTogY2hpbGQubmFtZSxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlRGVmaW5pdGlvbihjaGlsZDogVHlwZURvY0VudHJ5Q2hpbGQpOiBTa3lEb2NzVHlwZURlZmluaXRpb24ge1xuICAgIGxldCBkZWZpbml0aW9uOiBTa3lEb2NzVHlwZURlZmluaXRpb247XG5cbiAgICBjb25zdCBraW5kID0gY2hpbGQua2luZDtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgVHlwZURvY0tpbmQuQWNjZXNzb3I6XG4gICAgICAgIGlmIChjaGlsZC5zZXRTaWduYXR1cmUpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZC5zZXRTaWduYXR1cmUucGFyYW1ldGVyc1swXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZURlZmluaXRpb24oY2hpbGQuZ2V0U2lnbmF0dXJlKTtcblxuICAgICAgY2FzZSBUeXBlRG9jS2luZC5NZXRob2Q6XG4gICAgICAgIGRlZmluaXRpb24gPSB7XG4gICAgICAgICAgY2FsbFNpZ25hdHVyZTogdGhpcy5nZXRDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbihcbiAgICAgICAgICAgIGNoaWxkLnNpZ25hdHVyZXNbMF0sXG4gICAgICAgICAgICB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuYW1lOiBjaGlsZC5zaWduYXR1cmVzWzBdLm5hbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxldCBuYW1lOiBzdHJpbmcgPVxuICAgICAgICAgIGNoaWxkLnR5cGUubmFtZSB8fCBjaGlsZC50eXBlLmVsZW1lbnRUeXBlPy5uYW1lIHx8IGNoaWxkLnR5cGUudmFsdWU7XG5cbiAgICAgICAgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLnR5cGUsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVW5pb24/XG4gICAgICAgIGlmIChjaGlsZC50eXBlLnR5cGVzKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi51bmlvblR5cGVzID0gY2hpbGQudHlwZS50eXBlcy5tYXAoKHQpID0+XG4gICAgICAgICAgICB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHsgdHlwZTogdCB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDb252ZXJ0IHJlZmxlY3Rpb24gdHlwZXMuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGlsZC50eXBlLnR5cGUgPT09ICdyZWZsZWN0aW9uJyB8fFxuICAgICAgICAgIGNoaWxkLnR5cGUuZWxlbWVudFR5cGU/LnR5cGUgPT09ICdyZWZsZWN0aW9uJ1xuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBkZWNsYXJhdGlvbiA9XG4gICAgICAgICAgICBjaGlsZC50eXBlLmVsZW1lbnRUeXBlPy50eXBlID09PSAncmVmbGVjdGlvbidcbiAgICAgICAgICAgICAgPyBjaGlsZC50eXBlLmVsZW1lbnRUeXBlLmRlY2xhcmF0aW9uXG4gICAgICAgICAgICAgIDogY2hpbGQudHlwZS5kZWNsYXJhdGlvbjtcbiAgICAgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKGRlY2xhcmF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoZGVjbGFyYXRpb24uc2lnbmF0dXJlcykge1xuICAgICAgICAgICAgICBkZWZpbml0aW9uLmNhbGxTaWduYXR1cmUgPSB0aGlzLmdldENhbGxTaWduYXR1cmVEZWZpbml0aW9uKFxuICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLnNpZ25hdHVyZXNbMF0sXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5jb21tZW50KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbi5pbmRleFNpZ25hdHVyZSkge1xuICAgICAgICAgICAgICBjb25zdCBpbmRleFNpZ25hdHVyZSA9IGRlY2xhcmF0aW9uLmluZGV4U2lnbmF0dXJlO1xuICAgICAgICAgICAgICBkZWZpbml0aW9uLmluZGV4U2lnbmF0dXJlID1cbiAgICAgICAgICAgICAgICB0aGlzLmdldEluZGV4U2lnbmF0dXJlRGVmaW5pdGlvbihpbmRleFNpZ25hdHVyZSk7XG4gICAgICAgICAgICB9IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovIGVsc2UgaWYgKGRlY2xhcmF0aW9uLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgIGRlZmluaXRpb24udHlwZUxpdGVyYWwgPSB7XG4gICAgICAgICAgICAgICAgcHJvcGVydGllczogdGhpcy5nZXRJbnRlcmZhY2VQcm9wZXJ0aWVzKHtcbiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBkZWNsYXJhdGlvbi5jaGlsZHJlbixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQudHlwZS50eXBlID09PSAndHlwZU9wZXJhdG9yJykge1xuICAgICAgICAgIGRlZmluaXRpb24ubmFtZSA9IGAke2NoaWxkLnR5cGUub3BlcmF0b3J9ICR7Y2hpbGQudHlwZS50YXJnZXQubmFtZX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkLnR5cGUudHlwZUFyZ3VtZW50cykge1xuICAgICAgICAgIGRlZmluaXRpb24udHlwZUFyZ3VtZW50cyA9IHRoaXMuZ2V0VHlwZUFyZ3VtZW50RGVmaW5pdGlvbnMoXG4gICAgICAgICAgICBjaGlsZC50eXBlXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgY2FsbFNpZ25hdHVyZTogVHlwZURvY1NpZ25hdHVyZSxcbiAgICBwYXJlbnRUYWdzOiBTa3lEb2NzQ29tbWVudFRhZ3NcbiAgKTogU2t5RG9jc1BhcmFtZXRlckRlZmluaXRpb25bXSB7XG4gICAgaWYgKCFjYWxsU2lnbmF0dXJlLnBhcmFtZXRlcnMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzOiBTa3lEb2NzUGFyYW1ldGVyRGVmaW5pdGlvbltdID1cbiAgICAgIGNhbGxTaWduYXR1cmUucGFyYW1ldGVycy5tYXAoKHApID0+IHtcbiAgICAgICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0UGFyYW1ldGVyQ29tbWVudFRhZ3MocCwgcGFyZW50VGFncyk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMuZ2V0RGVmYXVsdFZhbHVlKHAsIHRhZ3MpO1xuICAgICAgICBjb25zdCB0eXBlQXJndW1lbnRzID0gdGhpcy5nZXRUeXBlQXJndW1lbnREZWZpbml0aW9ucyhwLnR5cGUpO1xuXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlcjogU2t5RG9jc1BhcmFtZXRlckRlZmluaXRpb24gPSB7XG4gICAgICAgICAgaXNPcHRpb25hbDogISEoZGVmYXVsdFZhbHVlIHx8ICEhcC5mbGFncz8uaXNPcHRpb25hbCksXG4gICAgICAgICAgbmFtZTogcC5uYW1lLFxuICAgICAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24ocCksXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcGFyYW1ldGVyLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YWdzLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgICAgcGFyYW1ldGVyLmRlc2NyaXB0aW9uID0gdGFncy5kZXNjcmlwdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIHBhcmFtZXRlci50eXBlQXJndW1lbnRzID0gdHlwZUFyZ3VtZW50cztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXJhbWV0ZXI7XG4gICAgICB9KTtcbiAgICByZXR1cm4gcGFyYW1ldGVycztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VHlwZUFyZ3VtZW50RGVmaW5pdGlvbnMoXG4gICAgdHlwZUNvbmZpZzogVHlwZURvY1R5cGVcbiAgKTogU2t5RG9jc1R5cGVEZWZpbml0aW9uW10ge1xuICAgIGlmICghdHlwZUNvbmZpZyB8fCAhdHlwZUNvbmZpZy50eXBlQXJndW1lbnRzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVDb25maWcudHlwZUFyZ3VtZW50cy5tYXAoKHR5cGVBcmd1bWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZURlZmluaXRpb24oeyB0eXBlOiB0eXBlQXJndW1lbnQgfSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENhbGxTaWduYXR1cmVEZWZpbml0aW9uKFxuICAgIGNhbGxTaWduYXR1cmU6IFR5cGVEb2NTaWduYXR1cmUsXG4gICAgdGFnczogU2t5RG9jc0NvbW1lbnRUYWdzXG4gICk6IFNreURvY3NDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0NhbGxTaWduYXR1cmVEZWZpbml0aW9uID0ge1xuICAgICAgcmV0dXJuVHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjYWxsU2lnbmF0dXJlKSxcbiAgICB9O1xuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRoaXMuZ2V0UGFyYW1ldGVyRGVmaW5pdGlvbnMoY2FsbFNpZ25hdHVyZSwgdGFncyk7XG4gICAgaWYgKHBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbmRleFNpZ25hdHVyZURlZmluaXRpb24oXG4gICAgc2lnbmF0dXJlOiBUeXBlRG9jU2lnbmF0dXJlXG4gICk6IFNreURvY3NJbmRleFNpZ25hdHVyZURlZmluaXRpb24ge1xuICAgIHJldHVybiB7XG4gICAgICBrZXk6IHtcbiAgICAgICAgbmFtZTogc2lnbmF0dXJlLnBhcmFtZXRlcnNbMF0ubmFtZSxcbiAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihzaWduYXR1cmUucGFyYW1ldGVyc1swXSksXG4gICAgICB9LFxuICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihzaWduYXR1cmUpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFR5cGVQYXJhbWV0ZXJEZWZpbml0aW9ucyhcbiAgICB0eXBlUGFyYW1ldGVyczogVHlwZURvY1R5cGVQYXJhbWV0ZXJbXVxuICApOiBTa3lEb2NzVHlwZVBhcmFtZXRlckRlZmluaXRpb25bXSB7XG4gICAgaWYgKCF0eXBlUGFyYW1ldGVycykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlUGFyYW1ldGVycy5tYXAoKHR5cGVQYXJhbSkgPT4ge1xuICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc1R5cGVQYXJhbWV0ZXJEZWZpbml0aW9uID0ge1xuICAgICAgICBuYW1lOiB0eXBlUGFyYW0ubmFtZSxcbiAgICAgIH07XG5cbiAgICAgIGlmICh0eXBlUGFyYW0udHlwZSkge1xuICAgICAgICBkZWZpbml0aW9uLnR5cGUgPSB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHtcbiAgICAgICAgICB0eXBlOiB0eXBlUGFyYW0udHlwZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb21tZW50VGFncyhjb21tZW50OiBUeXBlRG9jQ29tbWVudCk6IFNreURvY3NDb21tZW50VGFncyB7XG4gICAgbGV0IGNvZGVFeGFtcGxlOiBzdHJpbmc7XG4gICAgbGV0IGNvZGVFeGFtcGxlTGFuZ3VhZ2U6IHN0cmluZyA9ICdtYXJrdXAnO1xuICAgIGxldCBkZXByZWNhdGlvbldhcm5pbmc6IHN0cmluZztcbiAgICBsZXQgZGVmYXVsdFZhbHVlOiBzdHJpbmc7XG4gICAgbGV0IGRlc2NyaXB0aW9uOiBzdHJpbmcgPSAnJztcblxuICAgIGxldCBwYXJhbWV0ZXJzOiB7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIH1bXTtcblxuICAgIGNvbnN0IGV4dHJhczoge1xuICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIH0gPSB7fTtcblxuICAgIGlmIChjb21tZW50KSB7XG4gICAgICBpZiAoY29tbWVudC5ibG9ja1RhZ3MpIHtcbiAgICAgICAgY29tbWVudC5ibG9ja1RhZ3MuZm9yRWFjaCgodGFnKSA9PiB7XG4gICAgICAgICAgc3dpdGNoICh0YWcudGFnKSB7XG4gICAgICAgICAgICBjYXNlICdAZGVwcmVjYXRlZCc6XG4gICAgICAgICAgICAgIGRlcHJlY2F0aW9uV2FybmluZyA9IHRhZy5jb250ZW50XG4gICAgICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS50ZXh0KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdAZGVmYXVsdCc6XG4gICAgICAgICAgICBjYXNlICdAZGVmYXVsdFZhbHVlJzpcbiAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdGFnLmNvbnRlbnRcbiAgICAgICAgICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnRleHQpXG4gICAgICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgLnRyaW0oKTtcblxuICAgICAgICAgICAgICBpZiAodGFnLmNvbnRlbnRbMF0ua2luZCA9PT0gJ2NvZGUnKSB7XG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlLnNwbGl0KCdgYGAnKVsxXS50cmltKCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0TGFuZ3VhZ2UgPSBkZWZhdWx0VmFsdWUuc3BsaXQoJ1xcbicpWzBdO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZSA9PT0gJ21hcmt1cCcgfHxcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZSA9PT0gJ3R5cGVzY3JpcHQnIHx8XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0TGFuZ3VhZ2UgPT09ICd0cydcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICAuc2xpY2UoZGVmYXVsdExhbmd1YWdlLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgLnRyaW0oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0BleGFtcGxlJzpcbiAgICAgICAgICAgICAgY29kZUV4YW1wbGUgPSB0YWcuY29udGVudFxuICAgICAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udGV4dClcbiAgICAgICAgICAgICAgICAuam9pbignJylcbiAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgICAgLnNwbGl0KCdgYGAnKVsxXVxuICAgICAgICAgICAgICAgIC50cmltKCk7XG4gICAgICAgICAgICAgIGNvbnN0IGV4YW1wbGVMYW5ndWFnZSA9IGNvZGVFeGFtcGxlLnNwbGl0KCdcXG4nKVswXTtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGV4YW1wbGVMYW5ndWFnZSA9PT0gJ21hcmt1cCcgfHxcbiAgICAgICAgICAgICAgICBleGFtcGxlTGFuZ3VhZ2UgPT09ICd0eXBlc2NyaXB0JyB8fFxuICAgICAgICAgICAgICAgIGV4YW1wbGVMYW5ndWFnZSA9PT0gJ3RzJ1xuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBjb2RlRXhhbXBsZSA9IGNvZGVFeGFtcGxlLnNsaWNlKGV4YW1wbGVMYW5ndWFnZS5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBjb2RlRXhhbXBsZUxhbmd1YWdlID0gZXhhbXBsZUxhbmd1YWdlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdAcGFyYW0nOlxuICAgICAgICAgICAgICBwYXJhbWV0ZXJzID0gcGFyYW1ldGVycyB8fCBbXTtcbiAgICAgICAgICAgICAgcGFyYW1ldGVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0YWcucGFyYW0sXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHRhZy5jb250ZW50XG4gICAgICAgICAgICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnRleHQpXG4gICAgICAgICAgICAgICAgICAuam9pbignJylcbiAgICAgICAgICAgICAgICAgIC50cmltKCksXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0ByZXF1aXJlZCc6XG4gICAgICAgICAgICAgIGV4dHJhc1sncmVxdWlyZWQnXSA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGRlc2NyaXB0aW9uID0gY29tbWVudC5zdW1tYXJ5XG4gICAgICAgID8ubWFwKChpdGVtKSA9PiBpdGVtLnRleHQpXG4gICAgICAgIC5qb2luKCcnKVxuICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjb2RlRXhhbXBsZSxcbiAgICAgIGNvZGVFeGFtcGxlTGFuZ3VhZ2UsXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkZXByZWNhdGlvbldhcm5pbmcsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGV4dHJhcyxcbiAgICAgIHBhcmFtZXRlcnMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJhbWV0ZXIgZGVzY3JpcHRpb25zIGFyZSBkZXJpdmVkIGZyb20gdGhlIHBhcmVudCdzIChmdW5jdGlvbi9tZXRob2QpIGNvbW1lbnQuXG4gICAqL1xuICBwcml2YXRlIGdldFBhcmFtZXRlckNvbW1lbnRUYWdzKFxuICAgIHBhcmFtZXRlcjogVHlwZURvY1BhcmFtZXRlcixcbiAgICBwYXJlbnRUYWdzOiBTa3lEb2NzQ29tbWVudFRhZ3NcbiAgKTogU2t5RG9jc0NvbW1lbnRUYWdzIHtcbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhwYXJhbWV0ZXIuY29tbWVudCk7XG4gICAgY29uc3QgcGFyYW1UYWdzID0gcGFyZW50VGFncy5wYXJhbWV0ZXJzO1xuICAgIGNvbnN0IHRhZ1BhcmFtID0gcGFyYW1UYWdzXG4gICAgICA/IHBhcmFtVGFncy5maW5kKChwYXJhbSkgPT4gcGFyYW0ubmFtZSA9PT0gcGFyYW1ldGVyLm5hbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghdGFnUGFyYW0gfHwgIXRhZ1BhcmFtLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gdGFncztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGFncyxcbiAgICAgIC4uLntcbiAgICAgICAgZGVzY3JpcHRpb246IHRhZ1BhcmFtLmRlc2NyaXB0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgY29tbWVudCB0YWcgKGUuZy4gYEBwYXJhbWApIHZhbHVlcyB0byB0aGUgcHJvdmlkZWQgZGVmaW5pdGlvbiwgaWYgdGhlIHZhbHVlIGlzIGRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhcbiAgICBkZWZpbml0aW9uOiB7XG4gICAgICBjb2RlRXhhbXBsZT86IHN0cmluZztcbiAgICAgIGNvZGVFeGFtcGxlTGFuZ3VhZ2U/OiBzdHJpbmc7XG4gICAgICBkZXByZWNhdGlvbldhcm5pbmc/OiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICB9LFxuICAgIHRhZ3M6IFNreURvY3NDb21tZW50VGFnc1xuICApOiB2b2lkIHtcbiAgICBpZiAodGFncy5jb2RlRXhhbXBsZSkge1xuICAgICAgZGVmaW5pdGlvbi5jb2RlRXhhbXBsZSA9IHRhZ3MuY29kZUV4YW1wbGU7XG4gICAgICBkZWZpbml0aW9uLmNvZGVFeGFtcGxlTGFuZ3VhZ2UgPSB0YWdzLmNvZGVFeGFtcGxlTGFuZ3VhZ2U7XG4gICAgfVxuXG4gICAgaWYgKHRhZ3MuZGVwcmVjYXRpb25XYXJuaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGRlZmluaXRpb24uZGVwcmVjYXRpb25XYXJuaW5nID0gdGFncy5kZXByZWNhdGlvbldhcm5pbmc7XG4gICAgfVxuXG4gICAgaWYgKHRhZ3MuZGVzY3JpcHRpb24pIHtcbiAgICAgIGRlZmluaXRpb24uZGVzY3JpcHRpb24gPSB0YWdzLmRlc2NyaXB0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVjb3JhdG9yKFxuICAgIGNoaWxkOiBUeXBlRG9jRW50cnlDaGlsZFxuICApOiBTa3lEb2NzUHJvcGVydHlEZWNvcmF0b3JEZWZpbml0aW9uIHtcbiAgICBjb25zdCBuYW1lID1cbiAgICAgIGNoaWxkLmRlY29yYXRvcnMgJiYgY2hpbGQuZGVjb3JhdG9yc1swXSAmJiBjaGlsZC5kZWNvcmF0b3JzWzBdLm5hbWU7XG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiB7IG5hbWUgfTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eTogVHlwZURvY0VudHJ5Q2hpbGQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlY29yYXRvcnMgPSBwcm9wZXJ0eS5kZWNvcmF0b3JzICYmIHByb3BlcnR5LmRlY29yYXRvcnNbMF07XG4gICAgLy8gVXNlIHRoZSBJbnB1dCdzIGJvdW5kIHByb3BlcnR5IG5hbWUsIGlmIGZvdW5kLlxuICAgIC8vIGUuZy4gQElucHV0KCdmb29iYXInKVxuICAgIHJldHVybiBkZWNvcmF0b3JzPy5hcmd1bWVudHM/LmJpbmRpbmdQcm9wZXJ0eU5hbWVcbiAgICAgID8gZGVjb3JhdG9ycy5hcmd1bWVudHMuYmluZGluZ1Byb3BlcnR5TmFtZS5yZXBsYWNlKC8oXFwnfFxcXCIpL2csICcnKVxuICAgICAgOiBwcm9wZXJ0eS5uYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREZWZhdWx0VmFsdWUoXG4gICAgY2hpbGQ6IFR5cGVEb2NFbnRyeUNoaWxkLFxuICAgIHRhZ3M6IFNreURvY3NDb21tZW50VGFnc1xuICApOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0YWdzLmRlZmF1bHRWYWx1ZSkge1xuICAgICAgcmV0dXJuIHRhZ3MuZGVmYXVsdFZhbHVlO1xuICAgIH1cblxuICAgIC8vIFR5cGVEb2MgdmVyc2lvbiAwLjIwLnggc3RvcHBlZCBhdXRvLWdlbmVyYXRpbmcgaW5pdGlhbGl6ZXJzIGZvciB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIC8vIChhbmQgcmVwbGFjZWQgdGhlbSB3aXRoIFwiLi4uXCIpIGR1ZSB0byB0aGUgY29tcGxpY2F0ZWQgbG9naWMgaXQgcmVxdWlyZWQuXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vVHlwZVN0cm9uZy90eXBlZG9jL2lzc3Vlcy8xNTUyXG4gICAgaWYgKGNoaWxkLmRlZmF1bHRWYWx1ZSA9PT0gJy4uLicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQuZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBbmNob3JJZChlbnRyeTogVHlwZURvY0VudHJ5KTogc3RyaW5nIHtcbiAgICByZXR1cm4gKFxuICAgICAgZW50cnkuYW5jaG9ySWQgfHxcbiAgICAgIHRoaXMudHlwZURlZmluaXRpb25zUHJvdmlkZXI/LmFuY2hvcklkc1tlbnRyeS5uYW1lXSB8fFxuICAgICAgJydcbiAgICApO1xuICB9XG59XG4iXX0=
606
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kb2NzLXRvb2xzL3NyYy9tb2R1bGVzL3R5cGUtZGVmaW5pdGlvbnMvdHlwZWRvYy1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFzQ3JELE9BQU8sRUFJTCxXQUFXLEdBS1osTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLE9BQU8sTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBRXJDOztHQUVHO0FBSUgsTUFBTSxPQUFPLDRCQUE0QjtJQUN2QyxZQUVVLHVCQUF3RDtRQUF4RCw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQWlDO0lBQy9ELENBQUM7SUFFRyxpQkFBaUIsQ0FBQyxLQUFtQjtRQUMxQyxNQUFNLFVBQVUsR0FBMkI7WUFDekMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2pDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtZQUNoQixrQkFBa0IsRUFBRSxLQUFLO1NBQzFCLENBQUM7UUFFRixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkIsVUFBVSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDL0IsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNsRCxJQUFJLFVB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QztJQUNILENBQUM7SUFFTyxlQUFlLENBQUMsUUFBMkI7UUFDakQsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLGlEQUFpRDtRQUNqRCx3QkFBd0I7UUFDeEIsT0FBTyxVQUFVLEVBQUUsU0FBUyxFQUFFLG1CQUFtQjtZQUMvQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztZQUNsRSxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRU8sZUFBZSxDQUNyQixLQUF3QixFQUN4QixJQUF3QjtRQUV4QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDM0IsQ0FBQztRQUVELG9GQUFvRjtRQUNwRiwyRUFBMkU7UUFDM0UseURBQXlEO1FBQ3pELElBQUksS0FBSyxDQUFDLFlBQVksS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1FBQ1QsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDLFlBQVksQ0FBQztJQUM1QixDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQW1CO1FBQ3JDLE9BQU8sQ0FDTCxLQUFLLENBQUMsUUFBUTtZQUNkLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztZQUNuRCxFQUFFLENBQ0gsQ0FBQztJQUNKLENBQUM7OEdBdnlCVSw0QkFBNEI7a0hBQTVCLDRCQUE0QixjQUYzQixLQUFLOzsyRkFFTiw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLEtBQUs7aUJBQ2xCOzswQkFHSSxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5RG9jc0NhbGxTaWduYXR1cmVEZWZpbml0aW9uIH0gZnJvbSAnLi9jYWxsLXNpZ25hdHVyZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiB9IGZyb20gJy4vY2xhc3MtZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NDbGFzc1Byb3BlcnR5RGVmaW5pdGlvbiB9IGZyb20gJy4vcHJvcGVydHktZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NDb21tZW50VGFncyB9IGZyb20gJy4vY29tbWVudC10YWdzJztcblxuaW1wb3J0IHsgU2t5RG9jc0RpcmVjdGl2ZURlZmluaXRpb24gfSBmcm9tICcuL2RpcmVjdGl2ZS1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0VudW1lcmF0aW9uRGVmaW5pdGlvbiB9IGZyb20gJy4vZW51bWVyYXRpb24tZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NFbnVtZXJhdGlvbk1lbWJlckRlZmluaXRpb24gfSBmcm9tICcuL2VudW1lcmF0aW9uLW1lbWJlci1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc0luZGV4U2lnbmF0dXJlRGVmaW5pdGlvbiB9IGZyb20gJy4vaW5kZXgtc2lnbmF0dXJlLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzSW50ZXJmYWNlRGVmaW5pdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzSW50ZXJmYWNlUHJvcGVydHlEZWZpbml0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2UtcHJvcGVydHktZGVmaW5pdGlvbic7XG5cbmltcG9ydCB7IFNreURvY3NDbGFzc01ldGhvZERlZmluaXRpb24gfSBmcm9tICcuL21ldGhvZC1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1BhcmFtZXRlckRlZmluaXRpb24gfSBmcm9tICcuL3BhcmFtZXRlci1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1BpcGVEZWZpbml0aW9uIH0gZnJvbSAnLi9waXBlLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzUHJvcGVydHlEZWNvcmF0b3JEZWZpbml0aW9uIH0gZnJvbSAnLi9wcm9wZXJ0eS1kZWNvcmF0b3InO1xuXG5pbXBvcnQgeyBTa3lEb2NzVHlwZUFsaWFzRGVmaW5pdGlvbiB9IGZyb20gJy4vdHlwZS1hbGlhcy1kZWZpbml0aW9uJztcblxuaW1wb3J0IHsgU2t5RG9jc1R5cGVEZWZpbml0aW9uIH0gZnJvbSAnLi90eXBlLWRlZmluaXRpb24nO1xuXG5pbXBvcnQgeyBTa3lEb2NzVHlwZURlZmluaXRpb25zUHJvdmlkZXIgfSBmcm9tICcuL3R5cGUtZGVmaW5pdGlvbnMtcHJvdmlkZXInO1xuXG5pbXBvcnQgeyBTa3lEb2NzVHlwZVBhcmFtZXRlckRlZmluaXRpb24gfSBmcm9tICcuL3R5cGUtcGFyYW1ldGVyLWRlZmluaXRpb24nO1xuXG5pbXBvcnQge1xuICBUeXBlRG9jQ29tbWVudCxcbiAgVHlwZURvY0VudHJ5LFxuICBUeXBlRG9jRW50cnlDaGlsZCxcbiAgVHlwZURvY0tpbmQsXG4gIFR5cGVEb2NQYXJhbWV0ZXIsXG4gIFR5cGVEb2NTaWduYXR1cmUsXG4gIFR5cGVEb2NUeXBlLFxuICBUeXBlRG9jVHlwZVBhcmFtZXRlcixcbn0gZnJvbSAnLi90eXBlZG9jLXR5cGVzJztcblxuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoLm9yZGVyYnknO1xuXG4vKipcbiAqIENvbnZlcnRzIFR5cGVEb2MgdHlwZXMgaW50byBTS1kgVVggZG9jcy10b29scyB0eXBlcywgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIHZhcmlvdXMgZGVmaW5pdGlvbnMgY29tcG9uZW50cy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAnYW55Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5RG9jc1R5cGVEb2NBZGFwdGVyU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBPcHRpb25hbCgpXG4gICAgcHJpdmF0ZSB0eXBlRGVmaW5pdGlvbnNQcm92aWRlcj86IFNreURvY3NUeXBlRGVmaW5pdGlvbnNQcm92aWRlcixcbiAgKSB7fVxuXG4gIHB1YmxpYyB0b0NsYXNzRGVmaW5pdGlvbihlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0NsYXNzRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICBoYXNQcmV2aWV3RmVhdHVyZXM6IGZhbHNlLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhlbnRyeS5jb21tZW50KTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IG1ldGhvZHMgPSB0aGlzLmdldENsYXNzTWV0aG9kcyhlbnRyeSk7XG4gICAgaWYgKG1ldGhvZHMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLm1ldGhvZHMgPSBtZXRob2RzO1xuICAgIH1cblxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB0aGlzLmdldENsYXNzUHJvcGVydGllcyhlbnRyeSk7XG4gICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIGRlZmluaXRpb24uaGFzUHJldmlld0ZlYXR1cmVzID1cbiAgICAgICEhZGVmaW5pdGlvbi5tZXRob2RzPy5zb21lKChtZXRob2QpID0+IG1ldGhvZC5pc1ByZXZpZXcpIHx8XG4gICAgICAhIWRlZmluaXRpb24ucHJvcGVydGllcz8uc29tZSgocHJvcGVydHkpID0+IHByb3BlcnR5LmlzUHJldmlldyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b0RpcmVjdGl2ZURlZmluaXRpb24oXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeSxcbiAgKTogU2t5RG9jc0RpcmVjdGl2ZURlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NEaXJlY3RpdmVEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIHNlbGVjdG9yOiB0aGlzLmdldFNlbGVjdG9yKGVudHJ5KSxcbiAgICAgIGhhc1ByZXZpZXdGZWF0dXJlczogZmFsc2UsXG4gICAgfTtcblxuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGVudHJ5LmNvbW1lbnQpO1xuICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHRoaXMuZ2V0Q2xhc3NQcm9wZXJ0aWVzKGVudHJ5KTtcblxuICAgIGNvbnN0IGV2ZW50UHJvcGVydGllcyA9IHByb3BlcnRpZXMuZmlsdGVyKFxuICAgICAgKHApID0+IHAuZGVjb3JhdG9yPy5uYW1lID09PSAnT3V0cHV0JyxcbiAgICApO1xuICAgIGlmIChldmVudFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLmV2ZW50UHJvcGVydGllcyA9IGV2ZW50UHJvcGVydGllcztcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dFByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzLmZpbHRlcihcbiAgICAgIChwKSA9PiBwLmRlY29yYXRvcj8ubmFtZSA9PT0gJ0lucHV0JyxcbiAgICApO1xuICAgIGlmIChpbnB1dFByb3BlcnRpZXMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLmlucHV0UHJvcGVydGllcyA9IGlucHV0UHJvcGVydGllcztcbiAgICB9XG5cbiAgICBkZWZpbml0aW9uLmhhc1ByZXZpZXdGZWF0dXJlcyA9XG4gICAgICAhIWRlZmluaXRpb24uaW5wdXRQcm9wZXJ0aWVzPy5zb21lKChwcm9wZXJ0eSkgPT4gcHJvcGVydHkuaXNQcmV2aWV3KSB8fFxuICAgICAgISFkZWZpbml0aW9uLmV2ZW50UHJvcGVydGllcz8uc29tZSgocHJvcGVydHkpID0+IHByb3BlcnR5LmlzUHJldmlldyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b0VudW1lcmF0aW9uRGVmaW5pdGlvbihcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5LFxuICApOiBTa3lEb2NzRW51bWVyYXRpb25EZWZpbml0aW9uIHtcbiAgICBjb25zdCBtZW1iZXJzID0gdGhpcy5nZXRFbnVtZXJhdGlvbk1lbWJlcnMoZW50cnkpO1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NFbnVtZXJhdGlvbkRlZmluaXRpb24gPSB7XG4gICAgICBhbmNob3JJZDogdGhpcy5nZXRBbmNob3JJZChlbnRyeSksXG4gICAgICBtZW1iZXJzLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIGhhc1ByZXZpZXdGZWF0dXJlczogISFtZW1iZXJzLmZpbmQoKG1lbWJlcikgPT4gbWVtYmVyLmlzUHJldmlldyksXG4gICAgfTtcblxuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGVudHJ5LmNvbW1lbnQpO1xuICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9JbnRlcmZhY2VEZWZpbml0aW9uKFxuICAgIGVudHJ5OiBUeXBlRG9jRW50cnksXG4gICk6IFNreURvY3NJbnRlcmZhY2VEZWZpbml0aW9uIHtcbiAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRJbnRlcmZhY2VQcm9wZXJ0aWVzKGVudHJ5KTtcbiAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzSW50ZXJmYWNlRGVmaW5pdGlvbiA9IHtcbiAgICAgIGFuY2hvcklkOiB0aGlzLmdldEFuY2hvcklkKGVudHJ5KSxcbiAgICAgIG5hbWU6IGVudHJ5Lm5hbWUsXG4gICAgICBoYXNQcmV2aWV3RmVhdHVyZXM6ICEhcHJvcGVydGllcy5maW5kKChtZW1iZXIpID0+IG1lbWJlci5pc1ByZXZpZXcpLFxuICAgICAgcHJvcGVydGllcyxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICBjb25zdCB0eXBlUGFyYW1ldGVycyA9IHRoaXMuZ2V0VHlwZVBhcmFtZXRlckRlZmluaXRpb25zKFxuICAgICAgZW50cnkudHlwZVBhcmFtZXRlcnMsXG4gICAgKTtcbiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmluaXRpb247XG4gIH1cblxuICBwdWJsaWMgdG9QaXBlRGVmaW5pdGlvbihlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc1BpcGVEZWZpbml0aW9uIHtcbiAgICBjb25zdCBtZXRob2RzID0gdGhpcy5nZXRDbGFzc01ldGhvZHMoZW50cnkpO1xuICAgIGNvbnN0IHRyYW5zZm9ybU1ldGhvZCA9IG1ldGhvZHMuZmluZCgobSkgPT4gbS5uYW1lID09PSAndHJhbnNmb3JtJyk7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc1BpcGVEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIHRyYW5zZm9ybU1ldGhvZCxcbiAgICB9O1xuXG4gICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoZW50cnkuY29tbWVudCk7XG4gICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHB1YmxpYyB0b1R5cGVBbGlhc0RlZmluaXRpb24oXG4gICAgZW50cnk6IFR5cGVEb2NFbnRyeSxcbiAgKTogU2t5RG9jc1R5cGVBbGlhc0RlZmluaXRpb24ge1xuICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NUeXBlQWxpYXNEZWZpbml0aW9uID0ge1xuICAgICAgYW5jaG9ySWQ6IHRoaXMuZ2V0QW5jaG9ySWQoZW50cnkpLFxuICAgICAgbmFtZTogZW50cnkubmFtZSxcbiAgICAgIGlzUHJldmlldzogZmFsc2UsXG4gICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHtcbiAgICAgICAgY29tbWVudDogZW50cnkuY29tbWVudCxcbiAgICAgICAgdHlwZTogZW50cnkudHlwZSxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhcbiAgICAgIGVudHJ5LnR5cGUuZGVjbGFyYXRpb24/LnNpZ25hdHVyZXNcbiAgICAgICAgPyBlbnRyeS50eXBlLmRlY2xhcmF0aW9uLnNpZ25hdHVyZXNbMF0uY29tbWVudFxuICAgICAgICA6IGVudHJ5LmNvbW1lbnQsXG4gICAgKTtcbiAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgIGNvbnN0IHR5cGVQYXJhbWV0ZXJzID0gdGhpcy5nZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgICBlbnRyeS50eXBlUGFyYW1ldGVycyxcbiAgICApO1xuICAgIGlmICh0eXBlUGFyYW1ldGVycy5sZW5ndGgpIHtcbiAgICAgIGRlZmluaXRpb24udHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVycztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVmaW5pdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0b3IoZW50cnk6IFR5cGVEb2NFbnRyeSk6IHN0cmluZyB7XG4gICAgY29uc3QgZGVjb3JhdG9yU291cmNlID0gZW50cnkuZGVjb3JhdG9yc1swXS5hcmd1bWVudHMub2JqO1xuICAgIHJldHVybiBkZWNvcmF0b3JTb3VyY2UuaW5kZXhPZignc2VsZWN0b3I6IGAnKSA+IC0xXG4gICAgICA/IGRlY29yYXRvclNvdXJjZVxuICAgICAgICAgIC5zcGxpdCgnc2VsZWN0b3I6IGAnKVsxXVxuICAgICAgICAgIC5zcGxpdCgnYCcpWzBdXG4gICAgICAgICAgLnJlcGxhY2UoL1xcc1xccysvZywgJyAnKVxuICAgICAgOiBkZWNvcmF0b3JTb3VyY2Uuc3BsaXQoXCJzZWxlY3RvcjogJ1wiKVsxXS5zcGxpdChcIidcIilbMF07XG4gIH1cblxuICBwcml2YXRlIGdldENsYXNzUHJvcGVydGllcyhcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5LFxuICApOiBTa3lEb2NzQ2xhc3NQcm9wZXJ0eURlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGRlZmluaXRpb25zID0gZW50cnkuY2hpbGRyZW5cbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChjaGlsZCkgPT5cbiAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgcHJvcGVydGllcyAoYm90aCB3aXRoIG9yIHdpdGhvdXQgYSBnZXR0ZXIvc2V0dGVyKVxuICAgICAgICAgIGNoaWxkLmtpbmQgPT09IFR5cGVEb2NLaW5kLlByb3BlcnR5IHx8XG4gICAgICAgICAgY2hpbGQua2luZCA9PT0gVHlwZURvY0tpbmQuQWNjZXNzb3IsXG4gICAgICApXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoY2hpbGQpID0+XG4gICAgICAgICAgLy8gV2Ugb25seSB3YW50IGFjY2Vzc29ycyB0aGF0IGRvbid0IGhhdmUgYSBzZXR0ZXIgaWYgdGhleSBhcmUgbm90IGlucHV0c1xuICAgICAgICAgIGNoaWxkLmtpbmQgIT09IFR5cGVEb2NLaW5kLkFjY2Vzc29yIHx8XG4gICAgICAgICAgY2hpbGQuc2V0U2lnbmF0dXJlIHx8XG4gICAgICAgICAgdGhpcy5nZXREZWNvcmF0b3IoY2hpbGQpPy5uYW1lICE9PSAnSW5wdXQnLFxuICAgICAgKVxuICAgICAgLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgbGV0IGRlZmluaXRpb246IFNreURvY3NDbGFzc1Byb3BlcnR5RGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICAgIGlzUHJldmlldzogZmFsc2UsXG4gICAgICAgICAgbmFtZTogdGhpcy5nZXRQcm9wZXJ0eU5hbWUoY2hpbGQpLFxuICAgICAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oY2hpbGQpLFxuICAgICAgICB9O1xuICAgICAgICBsZXQgZGVmYXVsdFZhbHVlOiBzdHJpbmc7XG5cbiAgICAgICAgLyogRW5zdXJlIHdlIGFyZSBwcm9wZXJseSBjYXB0dXJpbmcgZGVmaW5pdGlvbnMgd2hpY2ggdXNlIGEgZ2V0dGVyL3NldHRlci4gRmluYWwgY2hlY2sgaXMgYSBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNoaWxkLmtpbmQgPT09IFR5cGVEb2NLaW5kLkFjY2Vzc29yICYmXG4gICAgICAgICAgIWNoaWxkLmNvbW1lbnQ/LnN1bW1hcnlcbiAgICAgICAgICAgID8ubWFwKChpdGVtKSA9PiBpdGVtLnRleHQpXG4gICAgICAgICAgICAuam9pbignJylcbiAgICAgICAgICAgIC50cmltKCkgJiZcbiAgICAgICAgICAoY2hpbGQuc2V0U2lnbmF0dXJlIHx8IGNoaWxkLmdldFNpZ25hdHVyZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgbWFpblRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuXG4gICAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgbWFpblRhZ3MpO1xuXG4gICAgICAgICAgaWYgKGNoaWxkLmdldFNpZ25hdHVyZSkge1xuICAgICAgICAgICAgY29uc3QgZ2V0VGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuZ2V0U2lnbmF0dXJlLmNvbW1lbnQpO1xuXG4gICAgICAgICAgICBkZWZpbml0aW9uLmlzT3B0aW9uYWwgPSAhZ2V0VGFncy5leHRyYXMucmVxdWlyZWQ7XG5cbiAgICAgICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIGdldFRhZ3MpO1xuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoY2hpbGQsIGdldFRhZ3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjaGlsZC5zZXRTaWduYXR1cmUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNldFRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLnNldFNpZ25hdHVyZS5jb21tZW50KTtcblxuICAgICAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgc2V0VGFncyk7XG5cbiAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9XG4gICAgICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCAmJiAhc2V0VGFncy5leHRyYXMucmVxdWlyZWQ7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUgfHwgdGhpcy5nZXREZWZhdWx0VmFsdWUoY2hpbGQsIHNldFRhZ3MpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkZWZpbml0aW9uLmlzT3B0aW9uYWwgPSAhbWFpblRhZ3MuZXh0cmFzLnJlcXVpcmVkO1xuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdGhpcy5nZXREZWZhdWx0VmFsdWUoY2hpbGQsIG1haW5UYWdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbGV0IHRhZ3M6IFNreURvY3NDb21tZW50VGFncyB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBjaGlsZC5raW5kID09PSBUeXBlRG9jS2luZC5Qcm9wZXJ0eSAmJlxuICAgICAgICAgICAgIWNoaWxkLmNvbW1lbnQ/LnN1bW1hcnlcbiAgICAgICAgICAgICAgPy5tYXAoKGl0ZW0pID0+IGl0ZW0udGV4dClcbiAgICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgICAgICAgIC50cmltKCkgJiZcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24/LnNpZ25hdHVyZXM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIGNoaWxkLnR5cGUuZGVjbGFyYXRpb24uc2lnbmF0dXJlc1swXS5jb21tZW50XG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhcbiAgICAgICAgICAgICAgY2hpbGQudHlwZS5kZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLmNvbW1lbnQsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkZWZpbml0aW9uLmlzT3B0aW9uYWwgPSAhdGFncy5leHRyYXMucmVxdWlyZWQ7XG4gICAgICAgICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5jb21tZW50KTtcblxuICAgICAgICAgIGRlZmluaXRpb24uaXNPcHRpb25hbCA9XG4gICAgICAgICAgICBkZWZpbml0aW9uLmlzT3B0aW9uYWwgJiYgIXRhZ3MuZXh0cmFzLnJlcXVpcmVkO1xuXG4gICAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShjaGlsZCwgdGFncyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWNvcmF0b3IgPSB0aGlzLmdldERlY29yYXRvcihjaGlsZCk7XG4gICAgICAgIGlmIChkZWNvcmF0b3IpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLmRlY29yYXRvciA9IGRlY29yYXRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghZGVmaW5pdGlvbi5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gZW50cnkuY2hpbGRyZW4uZmluZChcbiAgICAgICAgICAgIChjaGlsZCkgPT4gY2hpbGQua2luZCA9PT0gVHlwZURvY0tpbmQuQ29uc3RydWN0b3IsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hdHVyZSA9IGNvbnN0cnVjdG9yLnNpZ25hdHVyZXMuZmluZChcbiAgICAgICAgICAgICAgKHNpZ25hdHVyZSkgPT5cbiAgICAgICAgICAgICAgICBzaWduYXR1cmUua2luZCA9PT0gVHlwZURvY0tpbmQuQ29uc3RydWN0b3JTaWduYXR1cmUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLyogU2FuaXR5IGNoZWNrICovXG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgaWYgKHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ1BhcmFtID0gc2lnbmF0dXJlLnBhcmFtZXRlcnM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLm5hbWUgPT09IGNoaWxkLm5hbWUsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmIChtYXRjaGluZ1BhcmFtKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdQYXJhbVRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKFxuICAgICAgICAgICAgICAgICAgbWF0Y2hpbmdQYXJhbS5jb21tZW50LFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgbWF0Y2hpbmdQYXJhbVRhZ3MpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICB9KTtcblxuICAgIHJldHVybiBvcmRlckJ5KGRlZmluaXRpb25zLCBbJ2lzT3B0aW9uYWwnLCAnbmFtZSddLCBbJ2FzYycsICdhc2MnXSk7XG4gIH1cblxuICBwcml2YXRlIGdldENsYXNzTWV0aG9kcyhlbnRyeTogVHlwZURvY0VudHJ5KTogU2t5RG9jc0NsYXNzTWV0aG9kRGVmaW5pdGlvbltdIHtcbiAgICBpZiAoIWVudHJ5LmNoaWxkcmVuKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgbWV0aG9kcyA9IGVudHJ5LmNoaWxkcmVuXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoY2hpbGQpID0+XG4gICAgICAgICAgY2hpbGQua2luZCA9PT0gVHlwZURvY0tpbmQuTWV0aG9kICYmIC9ebmcvLnRlc3QoY2hpbGQubmFtZSkgPT09IGZhbHNlLFxuICAgICAgKVxuICAgICAgLm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0NsYXNzTWV0aG9kRGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgICAgaXNTdGF0aWM6ICEhY2hpbGQuZmxhZ3M/LmlzU3RhdGljLFxuICAgICAgICAgIGlzUHJldmlldzogZmFsc2UsXG4gICAgICAgICAgcGFyZW50TmFtZTogZW50cnkubmFtZSxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBDb21tZW50cyBmb3IgbWV0aG9kcyBhcmUgc3RvcmVkIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uLlxuICAgICAgICBjb25zdCBjb21tZW50ID0gY2hpbGQuc2lnbmF0dXJlc1swXS5jb21tZW50O1xuICAgICAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjb21tZW50KTtcbiAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgICAgY29uc3QgdHlwZVBhcmFtZXRlcnMgPSB0aGlzLmdldFR5cGVQYXJhbWV0ZXJEZWZpbml0aW9ucyhcbiAgICAgICAgICBjaGlsZC5zaWduYXR1cmVzWzBdLnR5cGVQYXJhbWV0ZXJzLFxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi50eXBlUGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICB9KTtcblxuICAgIHJldHVybiBvcmRlckJ5KG1ldGhvZHMsIFsnbmFtZSddLCBbJ2FzYyddKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW50ZXJmYWNlUHJvcGVydGllcyhcbiAgICBlbnRyeTogVHlwZURvY0VudHJ5LFxuICApOiBTa3lEb2NzSW50ZXJmYWNlUHJvcGVydHlEZWZpbml0aW9uW10ge1xuICAgIGlmICghZW50cnkuY2hpbGRyZW4gJiYgIWVudHJ5LmluZGV4U2lnbmF0dXJlKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgZGVmaW5pdGlvbnMgPVxuICAgICAgZW50cnkuY2hpbGRyZW4/Lm1hcCgoY2hpbGQpID0+IHtcbiAgICAgICAgbGV0IHRhZ3M6IFNreURvY3NDb21tZW50VGFncyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNoaWxkLmtpbmQgPT09IFR5cGVEb2NLaW5kLk1ldGhvZCAmJiBjaGlsZC5zaWduYXR1cmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhjaGlsZC5zaWduYXR1cmVzWzBdLmNvbW1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIGNoaWxkLnR5cGUudHlwZSA9PT0gJ3JlZmxlY3Rpb24nICYmXG4gICAgICAgICAgY2hpbGQudHlwZT8uZGVjbGFyYXRpb24/LnNpZ25hdHVyZXM/Lmxlbmd0aCA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoXG4gICAgICAgICAgICBjaGlsZC50eXBlLmRlY2xhcmF0aW9uLnNpZ25hdHVyZXNbMF0uY29tbWVudCxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhZ3MgPSB0aGlzLmdldENvbW1lbnRUYWdzKGNoaWxkLmNvbW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlZmluaXRpb246IFNreURvY3NJbnRlcmZhY2VQcm9wZXJ0eURlZmluaXRpb24gPSB7XG4gICAgICAgICAgaXNPcHRpb25hbDogdGFncy5leHRyYXMucmVxdWlyZWQgPyBmYWxzZSA6ICEhY2hpbGQuZmxhZ3M/LmlzT3B0aW9uYWwsXG4gICAgICAgICAgaXNQcmV2aWV3OiBmYWxzZSxcbiAgICAgICAgICBuYW1lOiB0aGlzLmdldFByb3BlcnR5TmFtZShjaGlsZCksXG4gICAgICAgICAgdHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZCksXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5hcHBseUNvbW1lbnRUYWdWYWx1ZXMoZGVmaW5pdGlvbiwgdGFncyk7XG5cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgICB9KSB8fCBbXTtcblxuICAgIGNvbnN0IHNvcnRlZCA9IG9yZGVyQnkoZGVmaW5pdGlvbnMsIFsnaXNPcHRpb25hbCcsICduYW1lJ10sIFsnYXNjJywgJ2FzYyddKTtcblxuICAgIC8vIEFkZCBhbnkgaW5kZXggc2lnbmF0dXJlcywgZS5nLiBgW186IHN0cmluZ106IGFueWBcbiAgICBpZiAoZW50cnkuaW5kZXhTaWduYXR1cmUpIHtcbiAgICAgIGNvbnN0IGluZGV4U2lnbmF0dXJlID0gZW50cnkuaW5kZXhTaWduYXR1cmU7XG4gICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzSW50ZXJmYWNlUHJvcGVydHlEZWZpbml0aW9uID0ge1xuICAgICAgICBpc09wdGlvbmFsOiB0cnVlLFxuICAgICAgICBpc1ByZXZpZXc6IGZhbHNlLFxuICAgICAgICBuYW1lOiBpbmRleFNpZ25hdHVyZS5uYW1lLFxuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgaW5kZXhTaWduYXR1cmU6IHRoaXMuZ2V0SW5kZXhTaWduYXR1cmVEZWZpbml0aW9uKGluZGV4U2lnbmF0dXJlKSxcbiAgICAgICAgfSxcbiAgICAgIH07XG5cbiAgICAgIC8vIE5ldyB2ZXJzaW9ucyBvZiB0eXBlZG9jIGRvIG5vdCBzZWVtIHRvIGFkZCB0aGUgY29tbWVudCBmb3IgaW5kZXggc2lnbmF0dXJlcyAtIHRoZSBlbHNlIHN0YXRlbWVudCBpcyBhIGRlZmF1bHQgYmFzZWQgb24gdGhlIG9ubHkgaW5kZXggc2lnbmF0dXJlIHdlIGhhZCBpbiBTZXB0ZW1iZXIgMjAyMyAoU2t5U2VsZWN0RmllbGQpLlxuICAgICAgaWYgKGluZGV4U2lnbmF0dXJlLmNvbW1lbnQpIHtcbiAgICAgICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoaW5kZXhTaWduYXR1cmUuY29tbWVudCk7XG4gICAgICAgIHRoaXMuYXBwbHlDb21tZW50VGFnVmFsdWVzKGRlZmluaXRpb24sIHRhZ3MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmaW5pdGlvbi5kZXNjcmlwdGlvbiA9ICdBbGwgb3RoZXIgcHJvcGVydGllcyBmb3IgYW4gaXRlbS4nO1xuICAgICAgfVxuICAgICAgc29ydGVkLnB1c2goZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRlZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW51bWVyYXRpb25NZW1iZXJzKFxuICAgIGVudHJ5OiBUeXBlRG9jRW50cnksXG4gICk6IFNreURvY3NFbnVtZXJhdGlvbk1lbWJlckRlZmluaXRpb25bXSB7XG4gICAgaWYgKCFlbnRyeS5jaGlsZHJlbikge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBlbnRyeS5jaGlsZHJlbi5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzRW51bWVyYXRpb25NZW1iZXJEZWZpbml0aW9uID0ge1xuICAgICAgICBuYW1lOiBjaGlsZC5uYW1lLFxuICAgICAgICBpc1ByZXZpZXc6IGZhbHNlLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgdGFncyA9IHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCk7XG4gICAgICB0aGlzLmFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhkZWZpbml0aW9uLCB0YWdzKTtcblxuICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFR5cGVEZWZpbml0aW9uKGNoaWxkOiBUeXBlRG9jRW50cnlDaGlsZCk6IFNreURvY3NUeXBlRGVmaW5pdGlvbiB7XG4gICAgbGV0IGRlZmluaXRpb246IFNreURvY3NUeXBlRGVmaW5pdGlvbjtcblxuICAgIGNvbnN0IGtpbmQgPSBjaGlsZC5raW5kO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBUeXBlRG9jS2luZC5BY2Nlc3NvcjpcbiAgICAgICAgaWYgKGNoaWxkLnNldFNpZ25hdHVyZSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKGNoaWxkLnNldFNpZ25hdHVyZS5wYXJhbWV0ZXJzWzBdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjaGlsZC5nZXRTaWduYXR1cmUpO1xuXG4gICAgICBjYXNlIFR5cGVEb2NLaW5kLk1ldGhvZDpcbiAgICAgICAgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICBjYWxsU2lnbmF0dXJlOiB0aGlzLmdldENhbGxTaWduYXR1cmVEZWZpbml0aW9uKFxuICAgICAgICAgICAgY2hpbGQuc2lnbmF0dXJlc1swXSxcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCksXG4gICAgICAgICAgKSxcbiAgICAgICAgICBuYW1lOiBjaGlsZC5zaWduYXR1cmVzWzBdLm5hbWUsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGRlZmluaXRpb247XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxldCBuYW1lOiBzdHJpbmcgPVxuICAgICAgICAgIGNoaWxkLnR5cGUubmFtZSB8fCBjaGlsZC50eXBlLmVsZW1lbnRUeXBlPy5uYW1lIHx8IGNoaWxkLnR5cGUudmFsdWU7XG5cbiAgICAgICAgZGVmaW5pdGlvbiA9IHtcbiAgICAgICAgICB0eXBlOiBjaGlsZC50eXBlLnR5cGUsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5hbWUpIHtcbiAgICAgICAgICBkZWZpbml0aW9uLm5hbWUgPSBuYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVW5pb24/XG4gICAgICAgIGlmIChjaGlsZC50eXBlLnR5cGVzKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi51bmlvblR5cGVzID0gY2hpbGQudHlwZS50eXBlcy5tYXAoKHQpID0+XG4gICAgICAgICAgICB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHsgdHlwZTogdCB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udmVydCByZWZsZWN0aW9uIHR5cGVzLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgY2hpbGQudHlwZS50eXBlID09PSAncmVmbGVjdGlvbicgfHxcbiAgICAgICAgICBjaGlsZC50eXBlLmVsZW1lbnRUeXBlPy50eXBlID09PSAncmVmbGVjdGlvbidcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgZGVjbGFyYXRpb24gPVxuICAgICAgICAgICAgY2hpbGQudHlwZS5lbGVtZW50VHlwZT8udHlwZSA9PT0gJ3JlZmxlY3Rpb24nXG4gICAgICAgICAgICAgID8gY2hpbGQudHlwZS5lbGVtZW50VHlwZS5kZWNsYXJhdGlvblxuICAgICAgICAgICAgICA6IGNoaWxkLnR5cGUuZGVjbGFyYXRpb247XG4gICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChkZWNsYXJhdGlvbikge1xuICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLnNpZ25hdHVyZXMpIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi5jYWxsU2lnbmF0dXJlID0gdGhpcy5nZXRDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbihcbiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5zaWduYXR1cmVzWzBdLFxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29tbWVudFRhZ3MoY2hpbGQuY29tbWVudCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLmluZGV4U2lnbmF0dXJlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGluZGV4U2lnbmF0dXJlID0gZGVjbGFyYXRpb24uaW5kZXhTaWduYXR1cmU7XG4gICAgICAgICAgICAgIGRlZmluaXRpb24uaW5kZXhTaWduYXR1cmUgPVxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0SW5kZXhTaWduYXR1cmVEZWZpbml0aW9uKGluZGV4U2lnbmF0dXJlKTtcbiAgICAgICAgICAgIH0gLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8gZWxzZSBpZiAoZGVjbGFyYXRpb24uY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgZGVmaW5pdGlvbi50eXBlTGl0ZXJhbCA9IHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLmdldEludGVyZmFjZVByb3BlcnRpZXMoe1xuICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IGRlY2xhcmF0aW9uLmNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZC50eXBlLnR5cGUgPT09ICd0eXBlT3BlcmF0b3InKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi5uYW1lID0gYCR7Y2hpbGQudHlwZS5vcGVyYXRvcn0gJHtjaGlsZC50eXBlLnRhcmdldC5uYW1lfWA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hpbGQudHlwZS50eXBlQXJndW1lbnRzKSB7XG4gICAgICAgICAgZGVmaW5pdGlvbi50eXBlQXJndW1lbnRzID0gdGhpcy5nZXRUeXBlQXJndW1lbnREZWZpbml0aW9ucyhcbiAgICAgICAgICAgIGNoaWxkLnR5cGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkZWZpbml0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgY2FsbFNpZ25hdHVyZTogVHlwZURvY1NpZ25hdHVyZSxcbiAgICBwYXJlbnRUYWdzOiBTa3lEb2NzQ29tbWVudFRhZ3MsXG4gICk6IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uW10ge1xuICAgIGlmICghY2FsbFNpZ25hdHVyZS5wYXJhbWV0ZXJzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1ldGVyczogU2t5RG9jc1BhcmFtZXRlckRlZmluaXRpb25bXSA9XG4gICAgICBjYWxsU2lnbmF0dXJlLnBhcmFtZXRlcnMubWFwKChwKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmdldFBhcmFtZXRlckNvbW1lbnRUYWdzKHAsIHBhcmVudFRhZ3MpO1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLmdldERlZmF1bHRWYWx1ZShwLCB0YWdzKTtcbiAgICAgICAgY29uc3QgdHlwZUFyZ3VtZW50cyA9IHRoaXMuZ2V0VHlwZUFyZ3VtZW50RGVmaW5pdGlvbnMocC50eXBlKTtcblxuICAgICAgICBjb25zdCBwYXJhbWV0ZXI6IFNreURvY3NQYXJhbWV0ZXJEZWZpbml0aW9uID0ge1xuICAgICAgICAgIGlzT3B0aW9uYWw6ICEhKGRlZmF1bHRWYWx1ZSB8fCAhIXAuZmxhZ3M/LmlzT3B0aW9uYWwpLFxuICAgICAgICAgIG5hbWU6IHAubmFtZSxcbiAgICAgICAgICB0eXBlOiB0aGlzLmdldFR5cGVEZWZpbml0aW9uKHApLFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBhcmFtZXRlci5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGFncy5kZXNjcmlwdGlvbikge1xuICAgICAgICAgIHBhcmFtZXRlci5kZXNjcmlwdGlvbiA9IHRhZ3MuZGVzY3JpcHRpb247XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICBwYXJhbWV0ZXIudHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyYW1ldGVyO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIHBhcmFtZXRlcnM7XG4gIH1cblxuICBwcml2YXRlIGdldFR5cGVBcmd1bWVudERlZmluaXRpb25zKFxuICAgIHR5cGVDb25maWc6IFR5cGVEb2NUeXBlLFxuICApOiBTa3lEb2NzVHlwZURlZmluaXRpb25bXSB7XG4gICAgaWYgKCF0eXBlQ29uZmlnIHx8ICF0eXBlQ29uZmlnLnR5cGVBcmd1bWVudHMpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZUNvbmZpZy50eXBlQXJndW1lbnRzLm1hcCgodHlwZUFyZ3VtZW50KSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUeXBlRGVmaW5pdGlvbih7IHR5cGU6IHR5cGVBcmd1bWVudCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q2FsbFNpZ25hdHVyZURlZmluaXRpb24oXG4gICAgY2FsbFNpZ25hdHVyZTogVHlwZURvY1NpZ25hdHVyZSxcbiAgICB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3MsXG4gICk6IFNreURvY3NDYWxsU2lnbmF0dXJlRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgZGVmaW5pdGlvbjogU2t5RG9jc0NhbGxTaWduYXR1cmVEZWZpbml0aW9uID0ge1xuICAgICAgcmV0dXJuVHlwZTogdGhpcy5nZXRUeXBlRGVmaW5pdGlvbihjYWxsU2lnbmF0dXJlKSxcbiAgICB9O1xuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHRoaXMuZ2V0UGFyYW1ldGVyRGVmaW5pdGlvbnMoY2FsbFNpZ25hdHVyZSwgdGFncyk7XG4gICAgaWYgKHBhcmFtZXRlcnMubGVuZ3RoKSB7XG4gICAgICBkZWZpbml0aW9uLnBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgIH1cblxuICAgIHJldHVybiBkZWZpbml0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRJbmRleFNpZ25hdHVyZURlZmluaXRpb24oXG4gICAgc2lnbmF0dXJlOiBUeXBlRG9jU2lnbmF0dXJlLFxuICApOiBTa3lEb2NzSW5kZXhTaWduYXR1cmVEZWZpbml0aW9uIHtcbiAgICByZXR1cm4ge1xuICAgICAga2V5OiB7XG4gICAgICAgIG5hbWU6IHNpZ25hdHVyZS5wYXJhbWV0ZXJzWzBdLm5hbWUsXG4gICAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oc2lnbmF0dXJlLnBhcmFtZXRlcnNbMF0pLFxuICAgICAgfSxcbiAgICAgIHR5cGU6IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oc2lnbmF0dXJlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbnMoXG4gICAgdHlwZVBhcmFtZXRlcnM6IFR5cGVEb2NUeXBlUGFyYW1ldGVyW10sXG4gICk6IFNreURvY3NUeXBlUGFyYW1ldGVyRGVmaW5pdGlvbltdIHtcbiAgICBpZiAoIXR5cGVQYXJhbWV0ZXJzKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVQYXJhbWV0ZXJzLm1hcCgodHlwZVBhcmFtKSA9PiB7XG4gICAgICBjb25zdCBkZWZpbml0aW9uOiBTa3lEb2NzVHlwZVBhcmFtZXRlckRlZmluaXRpb24gPSB7XG4gICAgICAgIG5hbWU6IHR5cGVQYXJhbS5uYW1lLFxuICAgICAgfTtcblxuICAgICAgaWYgKHR5cGVQYXJhbS50eXBlKSB7XG4gICAgICAgIGRlZmluaXRpb24udHlwZSA9IHRoaXMuZ2V0VHlwZURlZmluaXRpb24oe1xuICAgICAgICAgIHR5cGU6IHR5cGVQYXJhbS50eXBlLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRlZmluaXRpb247XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbW1lbnRUYWdzKGNvbW1lbnQ6IFR5cGVEb2NDb21tZW50KTogU2t5RG9jc0NvbW1lbnRUYWdzIHtcbiAgICBsZXQgY29kZUV4YW1wbGU6IHN0cmluZztcbiAgICBsZXQgY29kZUV4YW1wbGVMYW5ndWFnZTogc3RyaW5nID0gJ21hcmt1cCc7XG4gICAgbGV0IGRlcHJlY2F0aW9uV2FybmluZzogc3RyaW5nO1xuICAgIGxldCBkZWZhdWx0VmFsdWU6IHN0cmluZztcbiAgICBsZXQgZGVzY3JpcHRpb246IHN0cmluZyA9ICcnO1xuXG4gICAgbGV0IHBhcmFtZXRlcnM6IHtcbiAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgfVtdO1xuXG4gICAgY29uc3QgZXh0cmFzOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfSA9IHt9O1xuXG4gICAgaWYgKGNvbW1lbnQpIHtcbiAgICAgIGlmIChjb21tZW50LmJsb2NrVGFncykge1xuICAgICAgICBjb21tZW50LmJsb2NrVGFncy5mb3JFYWNoKCh0YWcpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKHRhZy50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgJ0BkZXByZWNhdGVkJzpcbiAgICAgICAgICAgICAgZGVwcmVjYXRpb25XYXJuaW5nID0gdGFnLmNvbnRlbnRcbiAgICAgICAgICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLnRleHQpXG4gICAgICAgICAgICAgICAgLmpvaW4oJycpXG4gICAgICAgICAgICAgICAgLnRyaW0oKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0BkZWZhdWx0JzpcbiAgICAgICAgICAgIGNhc2UgJ0BkZWZhdWx0VmFsdWUnOlxuICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0YWcuY29udGVudFxuICAgICAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udGV4dClcbiAgICAgICAgICAgICAgICAuam9pbignJylcbiAgICAgICAgICAgICAgICAudHJpbSgpO1xuXG4gICAgICAgICAgICAgIGlmICh0YWcuY29udGVudFswXS5raW5kID09PSAnY29kZScpIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUuc3BsaXQoJ2BgYCcpWzFdLnRyaW0oKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRMYW5ndWFnZSA9IGRlZmF1bHRWYWx1ZS5zcGxpdCgnXFxuJylbMF07XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlID09PSAnbWFya3VwJyB8fFxuICAgICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlID09PSAndHlwZXNjcmlwdCcgfHxcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZSA9PT0gJ3RzJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC5zbGljZShkZWZhdWx0TGFuZ3VhZ2UubGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAudHJpbSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnQGV4YW1wbGUnOlxuICAgICAgICAgICAgICBjb2RlRXhhbXBsZSA9IHRhZy5jb250ZW50XG4gICAgICAgICAgICAgICAgLm1hcCgoaXRlbSkgPT4gaXRlbS50ZXh0KVxuICAgICAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgICAgICAuc3BsaXQoJ2BgYCcpWzFdXG4gICAgICAgICAgICAgICAgLnRyaW0oKTtcbiAgICAgICAgICAgICAgY29uc3QgZXhhbXBsZUxhbmd1YWdlID0gY29kZUV4YW1wbGUuc3BsaXQoJ1xcbicpWzBdO1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZXhhbXBsZUxhbmd1YWdlID09PSAnbWFya3VwJyB8fFxuICAgICAgICAgICAgICAgIGV4YW1wbGVMYW5ndWFnZSA9PT0gJ3R5cGVzY3JpcHQnIHx8XG4gICAgICAgICAgICAgICAgZXhhbXBsZUxhbmd1YWdlID09PSAndHMnXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGNvZGVFeGFtcGxlID0gY29kZUV4YW1wbGUuc2xpY2UoZXhhbXBsZUxhbmd1YWdlLmxlbmd0aCkudHJpbSgpO1xuICAgICAgICAgICAgICAgIGNvZGVFeGFtcGxlTGFuZ3VhZ2UgPSBleGFtcGxlTGFuZ3VhZ2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ0BwYXJhbSc6XG4gICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIHx8IFtdO1xuICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIG5hbWU6IHRhZy5wYXJhbSxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGFnLmNvbnRlbnRcbiAgICAgICAgICAgICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0udGV4dClcbiAgICAgICAgICAgICAgICAgIC5qb2luKCcnKVxuICAgICAgICAgICAgICAgICAgLnRyaW0oKSxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQHByZXZpZXcnOlxuICAgICAgICAgICAgICBleHRyYXNbJ3ByZXZpZXcnXSA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQHJlcXVpcmVkJzpcbiAgICAgICAgICAgICAgZXh0cmFzWydyZXF1aXJlZCddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZGVzY3JpcHRpb24gPSBjb21tZW50LnN1bW1hcnlcbiAgICAgICAgPy5tYXAoKGl0ZW0pID0+IGl0ZW0udGV4dClcbiAgICAgICAgLmpvaW4oJycpXG4gICAgICAgIC50cmltKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGVFeGFtcGxlLFxuICAgICAgY29kZUV4YW1wbGVMYW5ndWFnZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICAgIGRlcHJlY2F0aW9uV2FybmluZyxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZXh0cmFzLFxuICAgICAgcGFyYW1ldGVycyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcmFtZXRlciBkZXNjcmlwdGlvbnMgYXJlIGRlcml2ZWQgZnJvbSB0aGUgcGFyZW50J3MgKGZ1bmN0aW9uL21ldGhvZCkgY29tbWVudC5cbiAgICovXG4gIHByaXZhdGUgZ2V0UGFyYW1ldGVyQ29tbWVudFRhZ3MoXG4gICAgcGFyYW1ldGVyOiBUeXBlRG9jUGFyYW1ldGVyLFxuICAgIHBhcmVudFRhZ3M6IFNreURvY3NDb21tZW50VGFncyxcbiAgKTogU2t5RG9jc0NvbW1lbnRUYWdzIHtcbiAgICBjb25zdCB0YWdzID0gdGhpcy5nZXRDb21tZW50VGFncyhwYXJhbWV0ZXIuY29tbWVudCk7XG4gICAgY29uc3QgcGFyYW1UYWdzID0gcGFyZW50VGFncy5wYXJhbWV0ZXJzO1xuICAgIGNvbnN0IHRhZ1BhcmFtID0gcGFyYW1UYWdzXG4gICAgICA/IHBhcmFtVGFncy5maW5kKChwYXJhbSkgPT4gcGFyYW0ubmFtZSA9PT0gcGFyYW1ldGVyLm5hbWUpXG4gICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmICghdGFnUGFyYW0gfHwgIXRhZ1BhcmFtLmRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gdGFncztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGFncyxcbiAgICAgIC4uLntcbiAgICAgICAgZGVzY3JpcHRpb246IHRhZ1BhcmFtLmRlc2NyaXB0aW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgY29tbWVudCB0YWcgKGUuZy4gYEBwYXJhbWApIHZhbHVlcyB0byB0aGUgcHJvdmlkZWQgZGVmaW5pdGlvbiwgaWYgdGhlIHZhbHVlIGlzIGRlZmluZWQuXG4gICAqL1xuICBwcml2YXRlIGFwcGx5Q29tbWVudFRhZ1ZhbHVlcyhcbiAgICBkZWZpbml0aW9uOiB7XG4gICAgICBjb2RlRXhhbXBsZT86IHN0cmluZztcbiAgICAgIGNvZGVFeGFtcGxlTGFuZ3VhZ2U/OiBzdHJpbmc7XG4gICAgICBkZXByZWNhdGlvbldhcm5pbmc/OiBzdHJpbmc7XG4gICAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgIGlzUHJldmlldz86IGJvb2xlYW47XG4gICAgfSxcbiAgICB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3MsXG4gICk6IHZvaWQge1xuICAgIGlmICh0YWdzLmNvZGVFeGFtcGxlKSB7XG4gICAgICBkZWZpbml0aW9uLmNvZGVFeGFtcGxlID0gdGFncy5jb2RlRXhhbXBsZTtcbiAgICAgIGRlZmluaXRpb24uY29kZUV4YW1wbGVMYW5ndWFnZSA9IHRhZ3MuY29kZUV4YW1wbGVMYW5ndWFnZTtcbiAgICB9XG5cbiAgICBpZiAodGFncy5kZXByZWNhdGlvbldhcm5pbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVmaW5pdGlvbi5kZXByZWNhdGlvbldhcm5pbmcgPSB0YWdzLmRlcHJlY2F0aW9uV2FybmluZztcbiAgICB9XG5cbiAgICBpZiAodGFncy5kZXNjcmlwdGlvbikge1xuICAgICAgZGVmaW5pdGlvbi5kZXNjcmlwdGlvbiA9IHRhZ3MuZGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgaWYgKHRhZ3MuZXh0cmFzPy5wcmV2aWV3KSB7XG4gICAgICBkZWZpbml0aW9uLmlzUHJldmlldyA9IHRhZ3MuZXh0cmFzPy5wcmV2aWV3O1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVjb3JhdG9yKFxuICAgIGNoaWxkOiBUeXBlRG9jRW50cnlDaGlsZCxcbiAgKTogU2t5RG9jc1Byb3BlcnR5RGVjb3JhdG9yRGVmaW5pdGlvbiB7XG4gICAgY29uc3QgbmFtZSA9XG4gICAgICBjaGlsZC5kZWNvcmF0b3JzICYmIGNoaWxkLmRlY29yYXRvcnNbMF0gJiYgY2hpbGQuZGVjb3JhdG9yc1swXS5uYW1lO1xuICAgIGlmIChuYW1lKSB7XG4gICAgICByZXR1cm4geyBuYW1lIH07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHk6IFR5cGVEb2NFbnRyeUNoaWxkKTogc3RyaW5nIHtcbiAgICBjb25zdCBkZWNvcmF0b3JzID0gcHJvcGVydHkuZGVjb3JhdG9ycyAmJiBwcm9wZXJ0eS5kZWNvcmF0b3JzWzBdO1xuICAgIC8vIFVzZSB0aGUgSW5wdXQncyBib3VuZCBwcm9wZXJ0eSBuYW1lLCBpZiBmb3VuZC5cbiAgICAvLyBlLmcuIEBJbnB1dCgnZm9vYmFyJylcbiAgICByZXR1cm4gZGVjb3JhdG9ycz8uYXJndW1lbnRzPy5iaW5kaW5nUHJvcGVydHlOYW1lXG4gICAgICA/IGRlY29yYXRvcnMuYXJndW1lbnRzLmJpbmRpbmdQcm9wZXJ0eU5hbWUucmVwbGFjZSgvKFxcJ3xcXFwiKS9nLCAnJylcbiAgICAgIDogcHJvcGVydHkubmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RGVmYXVsdFZhbHVlKFxuICAgIGNoaWxkOiBUeXBlRG9jRW50cnlDaGlsZCxcbiAgICB0YWdzOiBTa3lEb2NzQ29tbWVudFRhZ3MsXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRhZ3MuZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4gdGFncy5kZWZhdWx0VmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVHlwZURvYyB2ZXJzaW9uIDAuMjAueCBzdG9wcGVkIGF1dG8tZ2VuZXJhdGluZyBpbml0aWFsaXplcnMgZm9yIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgLy8gKGFuZCByZXBsYWNlZCB0aGVtIHdpdGggXCIuLi5cIikgZHVlIHRvIHRoZSBjb21wbGljYXRlZCBsb2dpYyBpdCByZXF1aXJlZC5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9UeXBlU3Ryb25nL3R5cGVkb2MvaXNzdWVzLzE1NTJcbiAgICBpZiAoY2hpbGQuZGVmYXVsdFZhbHVlID09PSAnLi4uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZC5kZWZhdWx0VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIGdldEFuY2hvcklkKGVudHJ5OiBUeXBlRG9jRW50cnkpOiBzdHJpbmcge1xuICAgIHJldHVybiAoXG4gICAgICBlbnRyeS5hbmNob3JJZCB8fFxuICAgICAgdGhpcy50eXBlRGVmaW5pdGlvbnNQcm92aWRlcj8uYW5jaG9ySWRzW2VudHJ5Lm5hbWVdIHx8XG4gICAgICAnJ1xuICAgICk7XG4gIH1cbn1cbiJdfQ==
@@ -31,4 +31,4 @@ export var TypeDocKind;
31
31
  TypeDocKind[TypeDocKind["TypeAlias"] = 4194304] = "TypeAlias";
32
32
  TypeDocKind[TypeDocKind["Reference"] = 8388608] = "Reference";
33
33
  })(TypeDocKind || (TypeDocKind = {}));
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRvYy10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RvY3MtdG9vbHMvc3JjL21vZHVsZXMvdHlwZS1kZWZpbml0aW9ucy90eXBlZG9jLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXlMQTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFOLElBQVksV0EwQlg7QUExQkQsV0FBWSxXQUFXO0lBQ3JCLG1EQUFhLENBQUE7SUFDYixpREFBWSxDQUFBO0lBQ1osdURBQWUsQ0FBQTtJQUNmLDZDQUFVLENBQUE7SUFDViwwREFBaUIsQ0FBQTtJQUNqQixzREFBZSxDQUFBO0lBQ2Ysc0RBQWUsQ0FBQTtJQUNmLGlEQUFZLENBQUE7SUFDWix5REFBaUIsQ0FBQTtJQUNqQiw2REFBbUIsQ0FBQTtJQUNuQix3REFBZ0IsQ0FBQTtJQUNoQixvREFBYyxDQUFBO0lBQ2Qsa0VBQXNCLENBQUE7SUFDdEIsb0VBQXVCLENBQUE7SUFDdkIsaUZBQTZCLENBQUE7SUFDN0IsMkRBQWtCLENBQUE7SUFDbEIsK0RBQXFCLENBQUE7SUFDckIsb0VBQXVCLENBQUE7SUFDdkIsMERBQWtCLENBQUE7SUFDbEIsa0VBQXNCLENBQUE7SUFDdEIsbUVBQXVCLENBQUE7SUFDdkIscURBQXFEO0lBQ3JELHFFQUF3QixDQUFBO0lBQ3hCLDZEQUFvQixDQUFBO0lBQ3BCLDZEQUFvQixDQUFBO0FBQ3RCLENBQUMsRUExQlcsV0FBVyxLQUFYLFdBQVcsUUEwQnRCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jQ29tbWVudCB7XG4gIHN1bW1hcnk/OiB7IGtpbmQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXTtcblxuICBibG9ja1RhZ3M/OiB7XG4gICAgcGFyYW0/OiBzdHJpbmc7XG4gICAgY29udGVudD86IHsga2luZDogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdO1xuICAgIHRhZzpcbiAgICAgIHwgJ0BkZWZhdWx0J1xuICAgICAgfCAnQGRlZmF1bHRWYWx1ZSdcbiAgICAgIHwgJ0BkZXByZWNhdGVkJ1xuICAgICAgfCAnQGV4YW1wbGUnXG4gICAgICB8ICdAcGFyYW0nXG4gICAgICB8ICdAcmVxdWlyZWQnO1xuICB9W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZURvY1NvdXJjZSB7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZURvY1NpZ25hdHVyZSB7XG4gIGNvbW1lbnQ/OiBUeXBlRG9jQ29tbWVudDtcblxuICBraW5kPzpcbiAgICB8IFR5cGVEb2NLaW5kLkNhbGxTaWduYXR1cmVcbiAgICB8IFR5cGVEb2NLaW5kLkNvbnN0cnVjdG9yU2lnbmF0dXJlXG4gICAgfCBUeXBlRG9jS2luZC5JbmRleFNpZ25hdHVyZTtcblxuICBuYW1lOiBzdHJpbmc7XG5cbiAgcGFyYW1ldGVycz86IFR5cGVEb2NQYXJhbWV0ZXJbXTtcblxuICByZXR1cm5UeXBlPzogVHlwZURvY1R5cGU7XG5cbiAgdHlwZT86IFR5cGVEb2NUeXBlO1xuXG4gIHR5cGVQYXJhbWV0ZXJzPzogVHlwZURvY1R5cGVQYXJhbWV0ZXJbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jVHlwZVBhcmFtZXRlciB7XG4gIG5hbWU6IHN0cmluZztcbiAga2luZDogVHlwZURvY0tpbmQuVHlwZVBhcmFtZXRlcjtcbiAgdHlwZT86IFR5cGVEb2NUeXBlO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVEb2NUeXBlIHtcbiAgY29uc3RyYWludD86IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gIH07XG5cbiAgY2FsbFNpZ25hdHVyZT86IFR5cGVEb2NTaWduYXR1cmU7XG5cbiAgZGVjbGFyYXRpb24/OiB7XG4gICAgY2hpbGRyZW4/OiBUeXBlRG9jRW50cnlDaGlsZFtdO1xuICAgIGluZGV4U2lnbmF0dXJlPzogVHlwZURvY1NpZ25hdHVyZTtcbiAgICBzaWduYXR1cmVzPzogVHlwZURvY1NpZ25hdHVyZVtdO1xuICB9O1xuXG4gIGVsZW1lbnRUeXBlPzogVHlwZURvY1R5cGU7XG5cbiAgbmFtZT86IHN0cmluZztcblxuICBvcGVyYXRvcj86ICdrZXlvZic7XG5cbiAgdGFyZ2V0Pzoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgfTtcblxuICB0eXBlPzpcbiAgICB8ICdhcnJheSdcbiAgICB8ICdpbnRyaW5zaWMnXG4gICAgfCAnbGl0ZXJhbCdcbiAgICB8ICdyZWZlcmVuY2UnXG4gICAgfCAncmVmbGVjdGlvbidcbiAgICB8ICd0eXBlUGFyYW1ldGVyJ1xuICAgIHwgJ3R5cGVPcGVyYXRvcidcbiAgICB8ICd1bmlvbidcbiAgICB8ICd1bmtub3duJztcblxuICB0eXBlQXJndW1lbnRzPzogVHlwZURvY1R5cGVbXTtcblxuICB0eXBlcz86IFR5cGVEb2NUeXBlW107XG5cbiAgdmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZURvY1BhcmFtZXRlciB7XG4gIGNvbW1lbnQ/OiBUeXBlRG9jQ29tbWVudDtcblxuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG5cbiAga2luZDogVHlwZURvY0tpbmQuUGFyYW1ldGVyO1xuXG4gIG5hbWU6IHN0cmluZztcblxuICB0eXBlOiBUeXBlRG9jVHlwZTtcblxuICBmbGFncz86IHtcbiAgICBpc09wdGlvbmFsPzogYm9vbGVhbjtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jRW50cnlDaGlsZCB7XG4gIGNvbW1lbnQ/OiBUeXBlRG9jQ29tbWVudDtcblxuICBkZWNvcmF0b3JzPzoge1xuICAgIGFyZ3VtZW50cz86IHtcbiAgICAgIGJpbmRpbmdQcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XG4gICAgfTtcbiAgICBuYW1lOiAnSW5wdXQnIHwgJ091dHB1dCc7XG4gICAgdHlwZTogVHlwZURvY1R5cGU7XG4gIH1bXTtcblxuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XG5cbiAgZmxhZ3M/OiB7XG4gICAgaXNPcHRpb25hbD86IGJvb2xlYW47XG4gICAgaXNTdGF0aWM/OiBib29sZWFuO1xuICB9O1xuXG4gIGtpbmQ/OlxuICAgIHwgVHlwZURvY0tpbmQuQWNjZXNzb3JcbiAgICB8IFR5cGVEb2NLaW5kLkNhbGxTaWduYXR1cmVcbiAgICB8IFR5cGVEb2NLaW5kLkNvbnN0cnVjdG9yXG4gICAgfCBUeXBlRG9jS2luZC5Db25zdHJ1Y3RvclNpZ25hdHVyZVxuICAgIHwgVHlwZURvY0tpbmQuSW5kZXhTaWduYXR1cmVcbiAgICB8IFR5cGVEb2NLaW5kLkVudW1NZW1iZXJcbiAgICB8IFR5cGVEb2NLaW5kLlBhcmFtZXRlclxuICAgIHwgVHlwZURvY0tpbmQuUHJvcGVydHlcbiAgICB8IFR5cGVEb2NLaW5kLk1ldGhvZDtcblxuICBnZXRTaWduYXR1cmU/OiB7XG4gICAgY29tbWVudDogVHlwZURvY0NvbW1lbnQ7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6IFR5cGVEb2NUeXBlO1xuICB9O1xuXG4gIG5hbWU/OiBzdHJpbmc7XG5cbiAgc2V0U2lnbmF0dXJlPzoge1xuICAgIGNvbW1lbnQ6IFR5cGVEb2NDb21tZW50O1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBwYXJhbWV0ZXJzPzogVHlwZURvY1BhcmFtZXRlcltdO1xuICAgIHR5cGU6IFR5cGVEb2NUeXBlO1xuICB9O1xuXG4gIHNpZ25hdHVyZXM/OiBUeXBlRG9jU2lnbmF0dXJlW107XG5cbiAgc291cmNlcz86IFR5cGVEb2NTb3VyY2VbXTtcblxuICB0eXBlPzogVHlwZURvY1R5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZURvY0VudHJ5IHtcbiAgYW5jaG9ySWQ/OiBzdHJpbmc7XG5cbiAgY2hpbGRyZW4/OiBUeXBlRG9jRW50cnlDaGlsZFtdO1xuXG4gIGNvbW1lbnQ/OiBUeXBlRG9jQ29tbWVudDtcblxuICBkZWNvcmF0b3JzPzoge1xuICAgIGFyZ3VtZW50cz86IHtcbiAgICAgIG9iaj86IHN0cmluZztcbiAgICB9O1xuICAgIG5hbWU6ICdDb21wb25lbnQnIHwgJ0RpcmVjdGl2ZScgfCAnSW5qZWN0YWJsZScgfCAnTmdNb2R1bGUnIHwgJ1BpcGUnO1xuICAgIHR5cGU6IFR5cGVEb2NUeXBlO1xuICB9W107XG5cbiAga2luZD86XG4gICAgfCBUeXBlRG9jS2luZC5DbGFzc1xuICAgIHwgVHlwZURvY0tpbmQuRW51bVxuICAgIHwgVHlwZURvY0tpbmQuSW50ZXJmYWNlXG4gICAgfCBUeXBlRG9jS2luZC5UeXBlQWxpYXM7XG5cbiAgaW5kZXhTaWduYXR1cmU/OiBUeXBlRG9jU2lnbmF0dXJlO1xuXG4gIG5hbWU/OiBzdHJpbmc7XG5cbiAgc291cmNlcz86IFR5cGVEb2NTb3VyY2VbXTtcblxuICB0eXBlPzogVHlwZURvY1R5cGU7XG5cbiAgdHlwZVBhcmFtZXRlcnM/OiBUeXBlRG9jVHlwZVBhcmFtZXRlcltdO1xufVxuXG4vKipcbiAqIFRoaXMgZW51bSBjb21lcyBmcm9tOlxuICogaHR0cHM6Ly9naXRodWIuY29tL1R5cGVTdHJvbmcvdHlwZWRvYy9ibG9iL3YwLjI0Ljgvc3JjL2xpYi9tb2RlbHMvcmVmbGVjdGlvbnMva2luZC50c1xuICogVGhlIGVudW0gaXMgdXAgdG8gZGF0ZSBhcyBvZiB2ZXJzaW9uIGAwLjI0LjhgLlxuICovXG5leHBvcnQgZW51bSBUeXBlRG9jS2luZCB7XG4gIFByb2plY3QgPSAweDEsXG4gIE1vZHVsZSA9IDB4MixcbiAgTmFtZXNwYWNlID0gMHg0LFxuICBFbnVtID0gMHg4LFxuICBFbnVtTWVtYmVyID0gMHgxMCxcbiAgVmFyaWFibGUgPSAweDIwLFxuICBGdW5jdGlvbiA9IDB4NDAsXG4gIENsYXNzID0gMHg4MCxcbiAgSW50ZXJmYWNlID0gMHgxMDAsXG4gIENvbnN0cnVjdG9yID0gMHgyMDAsXG4gIFByb3BlcnR5ID0gMHg0MDAsXG4gIE1ldGhvZCA9IDB4ODAwLFxuICBDYWxsU2lnbmF0dXJlID0gMHgxMDAwLFxuICBJbmRleFNpZ25hdHVyZSA9IDB4MjAwMCxcbiAgQ29uc3RydWN0b3JTaWduYXR1cmUgPSAweDQwMDAsXG4gIFBhcmFtZXRlciA9IDB4ODAwMCxcbiAgVHlwZUxpdGVyYWwgPSAweDEwMDAwLFxuICBUeXBlUGFyYW1ldGVyID0gMHgyMDAwMCxcbiAgQWNjZXNzb3IgPSAweDQwMDAwLFxuICBHZXRTaWduYXR1cmUgPSAweDgwMDAwLFxuICBTZXRTaWduYXR1cmUgPSAweDEwMDAwMCxcbiAgLyoqIEBkZXByZWNhdGVkIHdpbGwgYmUgcmVtb3ZlZCBpbiB2MC4yNSwgbm90IHVzZWQgKi9cbiAgT2JqZWN0TGl0ZXJhbCA9IDB4MjAwMDAwLFxuICBUeXBlQWxpYXMgPSAweDQwMDAwMCxcbiAgUmVmZXJlbmNlID0gMHg4MDAwMDAsXG59XG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZWRvYy10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2RvY3MtdG9vbHMvc3JjL21vZHVsZXMvdHlwZS1kZWZpbml0aW9ucy90eXBlZG9jLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTBMQTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFOLElBQVksV0EwQlg7QUExQkQsV0FBWSxXQUFXO0lBQ3JCLG1EQUFhLENBQUE7SUFDYixpREFBWSxDQUFBO0lBQ1osdURBQWUsQ0FBQTtJQUNmLDZDQUFVLENBQUE7SUFDViwwREFBaUIsQ0FBQTtJQUNqQixzREFBZSxDQUFBO0lBQ2Ysc0RBQWUsQ0FBQTtJQUNmLGlEQUFZLENBQUE7SUFDWix5REFBaUIsQ0FBQTtJQUNqQiw2REFBbUIsQ0FBQTtJQUNuQix3REFBZ0IsQ0FBQTtJQUNoQixvREFBYyxDQUFBO0lBQ2Qsa0VBQXNCLENBQUE7SUFDdEIsb0VBQXVCLENBQUE7SUFDdkIsaUZBQTZCLENBQUE7SUFDN0IsMkRBQWtCLENBQUE7SUFDbEIsK0RBQXFCLENBQUE7SUFDckIsb0VBQXVCLENBQUE7SUFDdkIsMERBQWtCLENBQUE7SUFDbEIsa0VBQXNCLENBQUE7SUFDdEIsbUVBQXVCLENBQUE7SUFDdkIscURBQXFEO0lBQ3JELHFFQUF3QixDQUFBO0lBQ3hCLDZEQUFvQixDQUFBO0lBQ3BCLDZEQUFvQixDQUFBO0FBQ3RCLENBQUMsRUExQlcsV0FBVyxLQUFYLFdBQVcsUUEwQnRCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jQ29tbWVudCB7XG4gIHN1bW1hcnk/OiB7IGtpbmQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH1bXTtcblxuICBibG9ja1RhZ3M/OiB7XG4gICAgcGFyYW0/OiBzdHJpbmc7XG4gICAgY29udGVudD86IHsga2luZDogc3RyaW5nOyB0ZXh0OiBzdHJpbmcgfVtdO1xuICAgIHRhZzpcbiAgICAgIHwgJ0BkZWZhdWx0J1xuICAgICAgfCAnQGRlZmF1bHRWYWx1ZSdcbiAgICAgIHwgJ0BkZXByZWNhdGVkJ1xuICAgICAgfCAnQGV4YW1wbGUnXG4gICAgICB8ICdAcGFyYW0nXG4gICAgICB8ICdAcHJldmlldydcbiAgICAgIHwgJ0ByZXF1aXJlZCc7XG4gIH1bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jU291cmNlIHtcbiAgZmlsZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jU2lnbmF0dXJlIHtcbiAgY29tbWVudD86IFR5cGVEb2NDb21tZW50O1xuXG4gIGtpbmQ/OlxuICAgIHwgVHlwZURvY0tpbmQuQ2FsbFNpZ25hdHVyZVxuICAgIHwgVHlwZURvY0tpbmQuQ29uc3RydWN0b3JTaWduYXR1cmVcbiAgICB8IFR5cGVEb2NLaW5kLkluZGV4U2lnbmF0dXJlO1xuXG4gIG5hbWU6IHN0cmluZztcblxuICBwYXJhbWV0ZXJzPzogVHlwZURvY1BhcmFtZXRlcltdO1xuXG4gIHJldHVyblR5cGU/OiBUeXBlRG9jVHlwZTtcblxuICB0eXBlPzogVHlwZURvY1R5cGU7XG5cbiAgdHlwZVBhcmFtZXRlcnM/OiBUeXBlRG9jVHlwZVBhcmFtZXRlcltdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVEb2NUeXBlUGFyYW1ldGVyIHtcbiAgbmFtZTogc3RyaW5nO1xuICBraW5kOiBUeXBlRG9jS2luZC5UeXBlUGFyYW1ldGVyO1xuICB0eXBlPzogVHlwZURvY1R5cGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZURvY1R5cGUge1xuICBjb25zdHJhaW50Pzoge1xuICAgIG5hbWU6IHN0cmluZztcbiAgfTtcblxuICBjYWxsU2lnbmF0dXJlPzogVHlwZURvY1NpZ25hdHVyZTtcblxuICBkZWNsYXJhdGlvbj86IHtcbiAgICBjaGlsZHJlbj86IFR5cGVEb2NFbnRyeUNoaWxkW107XG4gICAgaW5kZXhTaWduYXR1cmU/OiBUeXBlRG9jU2lnbmF0dXJlO1xuICAgIHNpZ25hdHVyZXM/OiBUeXBlRG9jU2lnbmF0dXJlW107XG4gIH07XG5cbiAgZWxlbWVudFR5cGU/OiBUeXBlRG9jVHlwZTtcblxuICBuYW1lPzogc3RyaW5nO1xuXG4gIG9wZXJhdG9yPzogJ2tleW9mJztcblxuICB0YXJnZXQ/OiB7XG4gICAgbmFtZTogc3RyaW5nO1xuICB9O1xuXG4gIHR5cGU/OlxuICAgIHwgJ2FycmF5J1xuICAgIHwgJ2ludHJpbnNpYydcbiAgICB8ICdsaXRlcmFsJ1xuICAgIHwgJ3JlZmVyZW5jZSdcbiAgICB8ICdyZWZsZWN0aW9uJ1xuICAgIHwgJ3R5cGVQYXJhbWV0ZXInXG4gICAgfCAndHlwZU9wZXJhdG9yJ1xuICAgIHwgJ3VuaW9uJ1xuICAgIHwgJ3Vua25vd24nO1xuXG4gIHR5cGVBcmd1bWVudHM/OiBUeXBlRG9jVHlwZVtdO1xuXG4gIHR5cGVzPzogVHlwZURvY1R5cGVbXTtcblxuICB2YWx1ZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jUGFyYW1ldGVyIHtcbiAgY29tbWVudD86IFR5cGVEb2NDb21tZW50O1xuXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcblxuICBraW5kOiBUeXBlRG9jS2luZC5QYXJhbWV0ZXI7XG5cbiAgbmFtZTogc3RyaW5nO1xuXG4gIHR5cGU6IFR5cGVEb2NUeXBlO1xuXG4gIGZsYWdzPzoge1xuICAgIGlzT3B0aW9uYWw/OiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFR5cGVEb2NFbnRyeUNoaWxkIHtcbiAgY29tbWVudD86IFR5cGVEb2NDb21tZW50O1xuXG4gIGRlY29yYXRvcnM/OiB7XG4gICAgYXJndW1lbnRzPzoge1xuICAgICAgYmluZGluZ1Byb3BlcnR5TmFtZT86IHN0cmluZztcbiAgICB9O1xuICAgIG5hbWU6ICdJbnB1dCcgfCAnT3V0cHV0JztcbiAgICB0eXBlOiBUeXBlRG9jVHlwZTtcbiAgfVtdO1xuXG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcblxuICBmbGFncz86IHtcbiAgICBpc09wdGlvbmFsPzogYm9vbGVhbjtcbiAgICBpc1N0YXRpYz86IGJvb2xlYW47XG4gIH07XG5cbiAga2luZD86XG4gICAgfCBUeXBlRG9jS2luZC5BY2Nlc3NvclxuICAgIHwgVHlwZURvY0tpbmQuQ2FsbFNpZ25hdHVyZVxuICAgIHwgVHlwZURvY0tpbmQuQ29uc3RydWN0b3JcbiAgICB8IFR5cGVEb2NLaW5kLkNvbnN0cnVjdG9yU2lnbmF0dXJlXG4gICAgfCBUeXBlRG9jS2luZC5JbmRleFNpZ25hdHVyZVxuICAgIHwgVHlwZURvY0tpbmQuRW51bU1lbWJlclxuICAgIHwgVHlwZURvY0tpbmQuUGFyYW1ldGVyXG4gICAgfCBUeXBlRG9jS2luZC5Qcm9wZXJ0eVxuICAgIHwgVHlwZURvY0tpbmQuTWV0aG9kO1xuXG4gIGdldFNpZ25hdHVyZT86IHtcbiAgICBjb21tZW50OiBUeXBlRG9jQ29tbWVudDtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogVHlwZURvY1R5cGU7XG4gIH07XG5cbiAgbmFtZT86IHN0cmluZztcblxuICBzZXRTaWduYXR1cmU/OiB7XG4gICAgY29tbWVudDogVHlwZURvY0NvbW1lbnQ7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHBhcmFtZXRlcnM/OiBUeXBlRG9jUGFyYW1ldGVyW107XG4gICAgdHlwZTogVHlwZURvY1R5cGU7XG4gIH07XG5cbiAgc2lnbmF0dXJlcz86IFR5cGVEb2NTaWduYXR1cmVbXTtcblxuICBzb3VyY2VzPzogVHlwZURvY1NvdXJjZVtdO1xuXG4gIHR5cGU/OiBUeXBlRG9jVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlRG9jRW50cnkge1xuICBhbmNob3JJZD86IHN0cmluZztcblxuICBjaGlsZHJlbj86IFR5cGVEb2NFbnRyeUNoaWxkW107XG5cbiAgY29tbWVudD86IFR5cGVEb2NDb21tZW50O1xuXG4gIGRlY29yYXRvcnM/OiB7XG4gICAgYXJndW1lbnRzPzoge1xuICAgICAgb2JqPzogc3RyaW5nO1xuICAgIH07XG4gICAgbmFtZTogJ0NvbXBvbmVudCcgfCAnRGlyZWN0aXZlJyB8ICdJbmplY3RhYmxlJyB8ICdOZ01vZHVsZScgfCAnUGlwZSc7XG4gICAgdHlwZTogVHlwZURvY1R5cGU7XG4gIH1bXTtcblxuICBraW5kPzpcbiAgICB8IFR5cGVEb2NLaW5kLkNsYXNzXG4gICAgfCBUeXBlRG9jS2luZC5FbnVtXG4gICAgfCBUeXBlRG9jS2luZC5JbnRlcmZhY2VcbiAgICB8IFR5cGVEb2NLaW5kLlR5cGVBbGlhcztcblxuICBpbmRleFNpZ25hdHVyZT86IFR5cGVEb2NTaWduYXR1cmU7XG5cbiAgbmFtZT86IHN0cmluZztcblxuICBzb3VyY2VzPzogVHlwZURvY1NvdXJjZVtdO1xuXG4gIHR5cGU/OiBUeXBlRG9jVHlwZTtcblxuICB0eXBlUGFyYW1ldGVycz86IFR5cGVEb2NUeXBlUGFyYW1ldGVyW107XG59XG5cbi8qKlxuICogVGhpcyBlbnVtIGNvbWVzIGZyb206XG4gKiBodHRwczovL2dpdGh1Yi5jb20vVHlwZVN0cm9uZy90eXBlZG9jL2Jsb2IvdjAuMjQuOC9zcmMvbGliL21vZGVscy9yZWZsZWN0aW9ucy9raW5kLnRzXG4gKiBUaGUgZW51bSBpcyB1cCB0byBkYXRlIGFzIG9mIHZlcnNpb24gYDAuMjQuOGAuXG4gKi9cbmV4cG9ydCBlbnVtIFR5cGVEb2NLaW5kIHtcbiAgUHJvamVjdCA9IDB4MSxcbiAgTW9kdWxlID0gMHgyLFxuICBOYW1lc3BhY2UgPSAweDQsXG4gIEVudW0gPSAweDgsXG4gIEVudW1NZW1iZXIgPSAweDEwLFxuICBWYXJpYWJsZSA9IDB4MjAsXG4gIEZ1bmN0aW9uID0gMHg0MCxcbiAgQ2xhc3MgPSAweDgwLFxuICBJbnRlcmZhY2UgPSAweDEwMCxcbiAgQ29uc3RydWN0b3IgPSAweDIwMCxcbiAgUHJvcGVydHkgPSAweDQwMCxcbiAgTWV0aG9kID0gMHg4MDAsXG4gIENhbGxTaWduYXR1cmUgPSAweDEwMDAsXG4gIEluZGV4U2lnbmF0dXJlID0gMHgyMDAwLFxuICBDb25zdHJ1Y3RvclNpZ25hdHVyZSA9IDB4NDAwMCxcbiAgUGFyYW1ldGVyID0gMHg4MDAwLFxuICBUeXBlTGl0ZXJhbCA9IDB4MTAwMDAsXG4gIFR5cGVQYXJhbWV0ZXIgPSAweDIwMDAwLFxuICBBY2Nlc3NvciA9IDB4NDAwMDAsXG4gIEdldFNpZ25hdHVyZSA9IDB4ODAwMDAsXG4gIFNldFNpZ25hdHVyZSA9IDB4MTAwMDAwLFxuICAvKiogQGRlcHJlY2F0ZWQgd2lsbCBiZSByZW1vdmVkIGluIHYwLjI1LCBub3QgdXNlZCAqL1xuICBPYmplY3RMaXRlcmFsID0gMHgyMDAwMDAsXG4gIFR5cGVBbGlhcyA9IDB4NDAwMDAwLFxuICBSZWZlcmVuY2UgPSAweDgwMDAwMCxcbn1cbiJdfQ==