@dollhousemcp/mcp-server 1.5.2 → 1.6.0

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 (272) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +494 -111
  3. package/data/agents/code-reviewer.md +8 -1
  4. package/data/agents/research-assistant.md +8 -1
  5. package/data/agents/task-manager.md +8 -1
  6. package/data/ensembles/business-advisor.md +8 -1
  7. package/data/ensembles/creative-studio.md +8 -1
  8. package/data/ensembles/development-team.md +8 -1
  9. package/data/ensembles/security-analysis-team.md +8 -1
  10. package/data/memories/conversation-history.md +8 -1
  11. package/data/memories/learning-progress.md +8 -1
  12. package/data/memories/project-context.md +8 -1
  13. package/data/personas/business-consultant.md +8 -1
  14. package/data/personas/creative-writer.md +8 -1
  15. package/data/personas/debug-detective.md +8 -1
  16. package/data/personas/eli5-explainer.md +8 -1
  17. package/data/personas/security-analyst.md +8 -1
  18. package/data/personas/technical-analyst.md +8 -1
  19. package/data/skills/code-review.md +8 -1
  20. package/data/skills/creative-writing.md +8 -1
  21. package/data/skills/data-analysis.md +8 -1
  22. package/data/skills/penetration-testing.md +8 -1
  23. package/data/skills/research.md +8 -1
  24. package/data/skills/threat-modeling.md +8 -1
  25. package/data/skills/translation.md +8 -1
  26. package/data/templates/code-documentation.md +8 -1
  27. package/data/templates/email-professional.md +8 -1
  28. package/data/templates/meeting-notes.md +8 -1
  29. package/data/templates/penetration-test-report.md +8 -1
  30. package/data/templates/project-brief.md +8 -1
  31. package/data/templates/report-executive.md +8 -1
  32. package/data/templates/security-vulnerability-report.md +8 -1
  33. package/data/templates/threat-assessment-report.md +8 -1
  34. package/dist/auth/GitHubAuthManager.d.ts +6 -1
  35. package/dist/auth/GitHubAuthManager.d.ts.map +1 -1
  36. package/dist/auth/GitHubAuthManager.js +45 -18
  37. package/dist/benchmarks/IndexPerformanceBenchmark.d.ts +98 -0
  38. package/dist/benchmarks/IndexPerformanceBenchmark.d.ts.map +1 -0
  39. package/dist/benchmarks/IndexPerformanceBenchmark.js +531 -0
  40. package/dist/cache/CollectionCache.d.ts.map +1 -1
  41. package/dist/cache/CollectionCache.js +13 -3
  42. package/dist/cache/CollectionIndexCache.d.ts +77 -0
  43. package/dist/cache/CollectionIndexCache.d.ts.map +1 -0
  44. package/dist/cache/CollectionIndexCache.js +349 -0
  45. package/dist/cache/LRUCache.d.ts +93 -0
  46. package/dist/cache/LRUCache.d.ts.map +1 -0
  47. package/dist/cache/LRUCache.js +299 -0
  48. package/dist/cache/index.d.ts +1 -0
  49. package/dist/cache/index.d.ts.map +1 -1
  50. package/dist/cache/index.js +2 -1
  51. package/dist/collection/CollectionBrowser.d.ts +21 -1
  52. package/dist/collection/CollectionBrowser.d.ts.map +1 -1
  53. package/dist/collection/CollectionBrowser.js +130 -10
  54. package/dist/collection/CollectionIndexManager.d.ts +151 -0
  55. package/dist/collection/CollectionIndexManager.d.ts.map +1 -0
  56. package/dist/collection/CollectionIndexManager.js +499 -0
  57. package/dist/collection/CollectionSearch.d.ts +55 -0
  58. package/dist/collection/CollectionSearch.d.ts.map +1 -1
  59. package/dist/collection/CollectionSearch.js +338 -13
  60. package/dist/collection/CollectionSeeder.d.ts.map +1 -1
  61. package/dist/collection/CollectionSeeder.js +38 -1
  62. package/dist/collection/ElementInstaller.d.ts +31 -0
  63. package/dist/collection/ElementInstaller.d.ts.map +1 -1
  64. package/dist/collection/ElementInstaller.js +77 -15
  65. package/dist/collection/PersonaSubmitter.d.ts +1 -1
  66. package/dist/collection/PersonaSubmitter.d.ts.map +1 -1
  67. package/dist/collection/PersonaSubmitter.js +2 -2
  68. package/dist/collection/index.d.ts +1 -0
  69. package/dist/collection/index.d.ts.map +1 -1
  70. package/dist/collection/index.js +2 -1
  71. package/dist/config/ConfigManager.d.ts +78 -0
  72. package/dist/config/ConfigManager.d.ts.map +1 -0
  73. package/dist/config/ConfigManager.js +216 -0
  74. package/dist/config/element-types.d.ts +135 -0
  75. package/dist/config/element-types.d.ts.map +1 -0
  76. package/dist/config/element-types.js +108 -0
  77. package/dist/config/index.d.ts +2 -0
  78. package/dist/config/index.d.ts.map +1 -1
  79. package/dist/config/index.js +3 -1
  80. package/dist/config/portfolio-constants.d.ts +83 -0
  81. package/dist/config/portfolio-constants.d.ts.map +1 -0
  82. package/dist/config/portfolio-constants.js +99 -0
  83. package/dist/elements/BaseElement.d.ts +14 -2
  84. package/dist/elements/BaseElement.d.ts.map +1 -1
  85. package/dist/elements/BaseElement.js +88 -6
  86. package/dist/elements/agents/Agent.d.ts +10 -1
  87. package/dist/elements/agents/Agent.d.ts.map +1 -1
  88. package/dist/elements/agents/Agent.js +66 -19
  89. package/dist/elements/agents/AgentManager.d.ts +2 -0
  90. package/dist/elements/agents/AgentManager.d.ts.map +1 -1
  91. package/dist/elements/agents/AgentManager.js +12 -10
  92. package/dist/elements/skills/Skill.d.ts +10 -1
  93. package/dist/elements/skills/Skill.d.ts.map +1 -1
  94. package/dist/elements/skills/Skill.js +40 -3
  95. package/dist/elements/skills/SkillManager.d.ts +1 -0
  96. package/dist/elements/skills/SkillManager.d.ts.map +1 -1
  97. package/dist/elements/skills/SkillManager.js +10 -4
  98. package/dist/elements/templates/Template.d.ts +10 -1
  99. package/dist/elements/templates/Template.d.ts.map +1 -1
  100. package/dist/elements/templates/Template.js +35 -18
  101. package/dist/elements/templates/TemplateManager.d.ts +1 -1
  102. package/dist/elements/templates/TemplateManager.d.ts.map +1 -1
  103. package/dist/elements/templates/TemplateManager.js +6 -5
  104. package/dist/generated/version.d.ts +2 -2
  105. package/dist/generated/version.js +3 -3
  106. package/dist/index.barrel.d.ts +1 -2
  107. package/dist/index.barrel.d.ts.map +1 -1
  108. package/dist/index.barrel.js +2 -4
  109. package/dist/index.d.ts +143 -25
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +1883 -310
  112. package/dist/persona/PersonaElement.d.ts +10 -0
  113. package/dist/persona/PersonaElement.d.ts.map +1 -1
  114. package/dist/persona/PersonaElement.js +55 -32
  115. package/dist/persona/PersonaElementManager.d.ts.map +1 -1
  116. package/dist/persona/PersonaElementManager.js +13 -11
  117. package/dist/persona/PersonaLoader.d.ts.map +1 -1
  118. package/dist/persona/PersonaLoader.js +8 -2
  119. package/dist/persona/export-import/PersonaImporter.d.ts.map +1 -1
  120. package/dist/persona/export-import/PersonaImporter.js +24 -5
  121. package/dist/persona/export-import/PersonaSharer.d.ts +21 -0
  122. package/dist/persona/export-import/PersonaSharer.d.ts.map +1 -1
  123. package/dist/persona/export-import/PersonaSharer.js +198 -22
  124. package/dist/portfolio/DefaultElementProvider.d.ts +90 -0
  125. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  126. package/dist/portfolio/DefaultElementProvider.js +499 -7
  127. package/dist/portfolio/GitHubPortfolioIndexer.d.ts +129 -0
  128. package/dist/portfolio/GitHubPortfolioIndexer.d.ts.map +1 -0
  129. package/dist/portfolio/GitHubPortfolioIndexer.js +475 -0
  130. package/dist/portfolio/MigrationManager.d.ts.map +1 -1
  131. package/dist/portfolio/MigrationManager.js +136 -3
  132. package/dist/portfolio/PortfolioIndexManager.d.ts +130 -0
  133. package/dist/portfolio/PortfolioIndexManager.d.ts.map +1 -0
  134. package/dist/portfolio/PortfolioIndexManager.js +478 -0
  135. package/dist/portfolio/PortfolioManager.d.ts +5 -0
  136. package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
  137. package/dist/portfolio/PortfolioManager.js +61 -20
  138. package/dist/portfolio/PortfolioRepoManager.d.ts +75 -0
  139. package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -0
  140. package/dist/portfolio/PortfolioRepoManager.js +337 -0
  141. package/dist/portfolio/UnifiedIndexManager.d.ts +388 -0
  142. package/dist/portfolio/UnifiedIndexManager.d.ts.map +1 -0
  143. package/dist/portfolio/UnifiedIndexManager.js +1434 -0
  144. package/dist/portfolio/index.d.ts +15 -0
  145. package/dist/portfolio/index.d.ts.map +1 -0
  146. package/dist/portfolio/index.js +15 -0
  147. package/dist/portfolio/types.d.ts +7 -0
  148. package/dist/portfolio/types.d.ts.map +1 -1
  149. package/dist/portfolio/types.js +6 -1
  150. package/dist/security/InputValidator.d.ts.map +1 -1
  151. package/dist/security/InputValidator.js +50 -48
  152. package/dist/security/audit/SecurityAuditor.d.ts.map +1 -1
  153. package/dist/security/audit/SecurityAuditor.js +17 -9
  154. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  155. package/dist/security/audit/config/suppressions.js +19 -3
  156. package/dist/security/contentValidator.d.ts +2 -0
  157. package/dist/security/contentValidator.d.ts.map +1 -1
  158. package/dist/security/contentValidator.js +115 -4
  159. package/dist/security/secureYamlParser.d.ts +1 -0
  160. package/dist/security/secureYamlParser.d.ts.map +1 -1
  161. package/dist/security/secureYamlParser.js +29 -7
  162. package/dist/security/securityMonitor.d.ts +1 -1
  163. package/dist/security/securityMonitor.d.ts.map +1 -1
  164. package/dist/security/securityMonitor.js +1 -1
  165. package/dist/security/tokenManager.d.ts +1 -1
  166. package/dist/security/tokenManager.d.ts.map +1 -1
  167. package/dist/security/tokenManager.js +30 -10
  168. package/dist/server/ServerSetup.d.ts +22 -2
  169. package/dist/server/ServerSetup.d.ts.map +1 -1
  170. package/dist/server/ServerSetup.js +77 -12
  171. package/dist/server/tools/AuthTools.d.ts.map +1 -1
  172. package/dist/server/tools/AuthTools.js +33 -1
  173. package/dist/server/tools/BuildInfoTools.d.ts +25 -0
  174. package/dist/server/tools/BuildInfoTools.d.ts.map +1 -0
  175. package/dist/server/tools/BuildInfoTools.js +36 -0
  176. package/dist/server/tools/CollectionTools.d.ts.map +1 -1
  177. package/dist/server/tools/CollectionTools.js +55 -46
  178. package/dist/server/tools/ConfigTools.d.ts.map +1 -1
  179. package/dist/server/tools/ConfigTools.js +29 -1
  180. package/dist/server/tools/PersonaTools.d.ts +4 -2
  181. package/dist/server/tools/PersonaTools.d.ts.map +1 -1
  182. package/dist/server/tools/PersonaTools.js +5 -152
  183. package/dist/server/tools/PortfolioTools.d.ts +12 -0
  184. package/dist/server/tools/PortfolioTools.d.ts.map +1 -0
  185. package/dist/server/tools/PortfolioTools.js +221 -0
  186. package/dist/server/tools/index.d.ts +3 -1
  187. package/dist/server/tools/index.d.ts.map +1 -1
  188. package/dist/server/tools/index.js +4 -2
  189. package/dist/server/types.d.ts +40 -5
  190. package/dist/server/types.d.ts.map +1 -1
  191. package/dist/server/types.js +1 -1
  192. package/dist/services/BuildInfoService.d.ts +84 -0
  193. package/dist/services/BuildInfoService.d.ts.map +1 -0
  194. package/dist/services/BuildInfoService.js +271 -0
  195. package/dist/tools/portfolio/PortfolioElementAdapter.d.ts +54 -0
  196. package/dist/tools/portfolio/PortfolioElementAdapter.d.ts.map +1 -0
  197. package/dist/tools/portfolio/PortfolioElementAdapter.js +229 -0
  198. package/dist/tools/portfolio/submitToPortfolioTool.d.ts +164 -0
  199. package/dist/tools/portfolio/submitToPortfolioTool.d.ts.map +1 -0
  200. package/dist/tools/portfolio/submitToPortfolioTool.js +1523 -0
  201. package/dist/tools/portfolio/types.d.ts +41 -0
  202. package/dist/tools/portfolio/types.d.ts.map +1 -0
  203. package/dist/tools/portfolio/types.js +15 -0
  204. package/dist/types/collection.d.ts +51 -0
  205. package/dist/types/collection.d.ts.map +1 -1
  206. package/dist/types/collection.js +1 -1
  207. package/dist/utils/EarlyTerminationSearch.d.ts +41 -0
  208. package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -0
  209. package/dist/utils/EarlyTerminationSearch.js +164 -0
  210. package/dist/utils/ErrorHandler.d.ts +86 -0
  211. package/dist/utils/ErrorHandler.d.ts.map +1 -0
  212. package/dist/utils/ErrorHandler.js +201 -0
  213. package/dist/utils/FileDiscoveryUtil.d.ts +53 -0
  214. package/dist/utils/FileDiscoveryUtil.d.ts.map +1 -0
  215. package/dist/utils/FileDiscoveryUtil.js +169 -0
  216. package/dist/utils/GitHubRateLimiter.d.ts +88 -0
  217. package/dist/utils/GitHubRateLimiter.d.ts.map +1 -0
  218. package/dist/utils/GitHubRateLimiter.js +315 -0
  219. package/dist/utils/PerformanceMonitor.d.ts +134 -0
  220. package/dist/utils/PerformanceMonitor.d.ts.map +1 -0
  221. package/dist/utils/PerformanceMonitor.js +347 -0
  222. package/dist/utils/RateLimiter.d.ts.map +1 -0
  223. package/dist/utils/RateLimiter.js +172 -0
  224. package/dist/utils/SecureDownloader.d.ts +241 -0
  225. package/dist/utils/SecureDownloader.d.ts.map +1 -0
  226. package/dist/utils/SecureDownloader.js +759 -0
  227. package/dist/utils/ToolCache.d.ts +82 -0
  228. package/dist/utils/ToolCache.d.ts.map +1 -0
  229. package/dist/utils/ToolCache.js +196 -0
  230. package/dist/utils/errorCodes.d.ts +136 -0
  231. package/dist/utils/errorCodes.d.ts.map +1 -0
  232. package/dist/utils/errorCodes.js +87 -0
  233. package/dist/utils/index.d.ts +3 -0
  234. package/dist/utils/index.d.ts.map +1 -1
  235. package/dist/utils/index.js +4 -1
  236. package/dist/utils/installation.d.ts +1 -1
  237. package/dist/utils/installation.d.ts.map +1 -1
  238. package/dist/utils/installation.js +9 -8
  239. package/dist/utils/searchUtils.d.ts +31 -0
  240. package/dist/utils/searchUtils.d.ts.map +1 -1
  241. package/dist/utils/searchUtils.js +62 -1
  242. package/package.json +17 -7
  243. package/dist/config/updateConfig.d.ts +0 -84
  244. package/dist/config/updateConfig.d.ts.map +0 -1
  245. package/dist/config/updateConfig.js +0 -148
  246. package/dist/server/tools/UpdateTools.d.ts +0 -10
  247. package/dist/server/tools/UpdateTools.d.ts.map +0 -1
  248. package/dist/server/tools/UpdateTools.js +0 -85
  249. package/dist/update/BackupManager.d.ts +0 -63
  250. package/dist/update/BackupManager.d.ts.map +0 -1
  251. package/dist/update/BackupManager.js +0 -370
  252. package/dist/update/DependencyChecker.d.ts +0 -41
  253. package/dist/update/DependencyChecker.d.ts.map +0 -1
  254. package/dist/update/DependencyChecker.js +0 -132
  255. package/dist/update/RateLimiter.d.ts.map +0 -1
  256. package/dist/update/RateLimiter.js +0 -172
  257. package/dist/update/SignatureVerifier.d.ts +0 -71
  258. package/dist/update/SignatureVerifier.d.ts.map +0 -1
  259. package/dist/update/SignatureVerifier.js +0 -214
  260. package/dist/update/UpdateChecker.d.ts +0 -132
  261. package/dist/update/UpdateChecker.d.ts.map +0 -1
  262. package/dist/update/UpdateChecker.js +0 -506
  263. package/dist/update/UpdateManager.d.ts +0 -60
  264. package/dist/update/UpdateManager.d.ts.map +0 -1
  265. package/dist/update/UpdateManager.js +0 -730
  266. package/dist/update/VersionManager.d.ts +0 -31
  267. package/dist/update/VersionManager.d.ts.map +0 -1
  268. package/dist/update/VersionManager.js +0 -181
  269. package/dist/update/index.d.ts +0 -9
  270. package/dist/update/index.d.ts.map +0 -1
  271. package/dist/update/index.js +0 -9
  272. /package/dist/{update → utils}/RateLimiter.d.ts +0 -0
@@ -193,6 +193,43 @@ export class CollectionSeeder {
193
193
  path: 'library/ensembles/security-analysis-team.md',
194
194
  sha: 'seed-data',
195
195
  last_modified: new Date().toISOString()
196
+ },
197
+ // Test Elements for E2E Testing
198
+ {
199
+ name: 'safe-roundtrip-tester.md',
200
+ path: 'library/skills/safe-roundtrip-tester.md',
201
+ sha: 'seed-data',
202
+ last_modified: new Date().toISOString()
203
+ },
204
+ {
205
+ name: 'roundtrip-test-skill.md',
206
+ path: 'library/skills/roundtrip-test-skill.md',
207
+ sha: 'seed-data',
208
+ last_modified: new Date().toISOString()
209
+ },
210
+ {
211
+ name: 'test-validator.md',
212
+ path: 'library/skills/test-validator.md',
213
+ sha: 'seed-data',
214
+ last_modified: new Date().toISOString()
215
+ },
216
+ {
217
+ name: 'sample-skill.md',
218
+ path: 'library/skills/sample-skill.md',
219
+ sha: 'seed-data',
220
+ last_modified: new Date().toISOString()
221
+ },
222
+ {
223
+ name: 'test-element.md',
224
+ path: 'library/agents/test-element.md',
225
+ sha: 'seed-data',
226
+ last_modified: new Date().toISOString()
227
+ },
228
+ {
229
+ name: 'testing-framework.md',
230
+ path: 'library/templates/testing-framework.md',
231
+ sha: 'seed-data',
232
+ last_modified: new Date().toISOString()
196
233
  }
197
234
  ];
198
235
  return CollectionSeeder.cachedSeedData;
@@ -227,4 +264,4 @@ export class CollectionSeeder {
227
264
  return this.getSeedData().find(item => item.path === path);
228
265
  }
229
266
  }
230
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvblNlZWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWVkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBSUg7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixpRUFBaUU7SUFDekQsTUFBTSxDQUFDLGNBQWMsR0FBNEIsSUFBSSxDQUFDO0lBRTlEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsV0FBVztRQUNoQixrQ0FBa0M7UUFDbEMsSUFBSSxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQyxPQUFPLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLGdCQUFnQixDQUFDLGNBQWMsR0FBRztZQUNoQyxtQkFBbUI7WUFDbkI7Z0JBQ0UsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsSUFBSSxFQUFFLHFDQUFxQztnQkFDM0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSxvQ0FBb0M7Z0JBQzFDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixJQUFJLEVBQUUscUNBQXFDO2dCQUMzQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHNCQUFzQjtnQkFDNUIsSUFBSSxFQUFFLHVDQUF1QztnQkFDN0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSx3QkFBd0I7Z0JBQzlCLElBQUksRUFBRSx5Q0FBeUM7Z0JBQy9DLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixJQUFJLEVBQUUsc0NBQXNDO2dCQUM1QyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBRUQsaUJBQWlCO1lBQ2pCO2dCQUNFLElBQUksRUFBRSxnQkFBZ0I7Z0JBQ3RCLElBQUksRUFBRSwrQkFBK0I7Z0JBQ3JDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixJQUFJLEVBQUUsb0NBQW9DO2dCQUMxQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsSUFBSSxFQUFFLGlDQUFpQztnQkFDdkMsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxhQUFhO2dCQUNuQixJQUFJLEVBQUUsNEJBQTRCO2dCQUNsQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsSUFBSSxFQUFFLCtCQUErQjtnQkFDckMsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLElBQUksRUFBRSxtQ0FBbUM7Z0JBQ3pDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsd0JBQXdCO2dCQUM5QixJQUFJLEVBQUUsdUNBQXVDO2dCQUM3QyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBRUQsaUJBQWlCO1lBQ2pCO2dCQUNFLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxpQ0FBaUM7Z0JBQ3ZDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixJQUFJLEVBQUUsc0NBQXNDO2dCQUM1QyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLGlCQUFpQjtnQkFDdkIsSUFBSSxFQUFFLGdDQUFnQztnQkFDdEMsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUVELG9CQUFvQjtZQUNwQjtnQkFDRSxJQUFJLEVBQUUsdUJBQXVCO2dCQUM3QixJQUFJLEVBQUUseUNBQXlDO2dCQUMvQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHVCQUF1QjtnQkFDN0IsSUFBSSxFQUFFLHlDQUF5QztnQkFDL0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxrQkFBa0I7Z0JBQ3hCLElBQUksRUFBRSxvQ0FBb0M7Z0JBQzFDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsa0JBQWtCO2dCQUN4QixJQUFJLEVBQUUsb0NBQW9DO2dCQUMxQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHFCQUFxQjtnQkFDM0IsSUFBSSxFQUFFLHVDQUF1QztnQkFDN0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSw0QkFBNEI7Z0JBQ2xDLElBQUksRUFBRSw4Q0FBOEM7Z0JBQ3BELEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsa0NBQWtDO2dCQUN4QyxJQUFJLEVBQUUsb0RBQW9EO2dCQUMxRCxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLDZCQUE2QjtnQkFDbkMsSUFBSSxFQUFFLCtDQUErQztnQkFDckQsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUVELG9CQUFvQjtZQUNwQjtnQkFDRSxJQUFJLEVBQUUscUJBQXFCO2dCQUMzQixJQUFJLEVBQUUsdUNBQXVDO2dCQUM3QyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsSUFBSSxFQUFFLHNDQUFzQztnQkFDNUMsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxxQkFBcUI7Z0JBQzNCLElBQUksRUFBRSx1Q0FBdUM7Z0JBQzdDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsMkJBQTJCO2dCQUNqQyxJQUFJLEVBQUUsNkNBQTZDO2dCQUNuRCxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1NBQ0YsQ0FBQztRQUVGLE9BQU8sZ0JBQWdCLENBQUMsY0FBYyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxZQUFZO1FBQ2pCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwQyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUU1QyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLGdFQUFnRTtZQUNoRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDO1lBQ3ZDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN0RCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxLQUFLLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDdEIsTUFBTSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDO1NBQ3RDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBWTtRQUNsQyxPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxXQUFXLENBQUMsSUFBWTtRQUM3QixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxDQUFDO0lBQzdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3Rpb24gc2VlZGVyIGZvciBhbm9ueW1vdXMvb2ZmbGluZSBicm93c2luZ1xuICogUHJvdmlkZXMgYmFzaWMgY29sbGVjdGlvbiBkYXRhIHRoYXQgZG9lc24ndCByZXF1aXJlIEdpdEh1YiBhdXRoZW50aWNhdGlvblxuICovXG5cbmltcG9ydCB7IENvbGxlY3Rpb25JdGVtIH0gZnJvbSAnLi4vY2FjaGUvQ29sbGVjdGlvbkNhY2hlLmpzJztcblxuLyoqXG4gKiBCYXNpYyBjb2xsZWN0aW9uIGRhdGEgdGhhdCBjYW4gYmUgdXNlZCB3aXRob3V0IEdpdEh1YiBBUEkgYWNjZXNzXG4gKiBUaGlzIHByb3ZpZGVzIGEgbWluaW1hbCBzZXQgb2Ygd2VsbC1rbm93biBjb2xsZWN0aW9uIGl0ZW1zXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW9uU2VlZGVyIHtcbiAgLy8gQ2FjaGUgdGhlIHNlZWQgZGF0YSBhcyBhIHN0YXRpYyBwcm9wZXJ0eSBmb3IgbWVtb3J5IGVmZmljaWVuY3lcbiAgcHJpdmF0ZSBzdGF0aWMgY2FjaGVkU2VlZERhdGE6IENvbGxlY3Rpb25JdGVtW10gfCBudWxsID0gbnVsbDtcbiAgXG4gIC8qKlxuICAgKiBHZXQgc2VlZCBkYXRhIGZvciB0aGUgY29sbGVjdGlvbiBjYWNoZVxuICAgKiBUaGlzIGluY2x1ZGVzIHBvcHVsYXIvZXNzZW50aWFsIGl0ZW1zIHRoYXQgYXJlIGNvbW1vbmx5IHJlcXVlc3RlZFxuICAgKiBEYXRhIGlzIGNhY2hlZCBhcyBhIHN0YXRpYyBwcm9wZXJ0eSB0byBhdm9pZCByZWNyZWF0aW9uIG9uIGV2ZXJ5IGNhbGxcbiAgICovXG4gIHN0YXRpYyBnZXRTZWVkRGF0YSgpOiBDb2xsZWN0aW9uSXRlbVtdIHtcbiAgICAvLyBSZXR1cm4gY2FjaGVkIGRhdGEgaWYgYXZhaWxhYmxlXG4gICAgaWYgKENvbGxlY3Rpb25TZWVkZXIuY2FjaGVkU2VlZERhdGEpIHtcbiAgICAgIHJldHVybiBDb2xsZWN0aW9uU2VlZGVyLmNhY2hlZFNlZWREYXRhO1xuICAgIH1cbiAgICBcbiAgICAvLyBDcmVhdGUgYW5kIGNhY2hlIHRoZSBzZWVkIGRhdGFcbiAgICBDb2xsZWN0aW9uU2VlZGVyLmNhY2hlZFNlZWREYXRhID0gW1xuICAgICAgLy8gUG9wdWxhciBQZXJzb25hc1xuICAgICAge1xuICAgICAgICBuYW1lOiAnY3JlYXRpdmUtd3JpdGVyLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvcGVyc29uYXMvY3JlYXRpdmUtd3JpdGVyLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZWxpNS1leHBsYWluZXIubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9wZXJzb25hcy9lbGk1LWV4cGxhaW5lci5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2RlYnVnLWRldGVjdGl2ZS5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3BlcnNvbmFzL2RlYnVnLWRldGVjdGl2ZS5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3RlY2huaWNhbC1hbmFseXN0Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvcGVyc29uYXMvdGVjaG5pY2FsLWFuYWx5c3QubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdidXNpbmVzcy1jb25zdWx0YW50Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvcGVyc29uYXMvYnVzaW5lc3MtY29uc3VsdGFudC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NlY3VyaXR5LWFuYWx5c3QubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9wZXJzb25hcy9zZWN1cml0eS1hbmFseXN0Lm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBQb3B1bGFyIFNraWxsc1xuICAgICAge1xuICAgICAgICBuYW1lOiAnY29kZS1yZXZpZXcubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9za2lsbHMvY29kZS1yZXZpZXcubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjcmVhdGl2ZS13cml0aW5nLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL2NyZWF0aXZlLXdyaXRpbmcubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdkYXRhLWFuYWx5c2lzLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL2RhdGEtYW5hbHlzaXMubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdyZXNlYXJjaC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3NraWxscy9yZXNlYXJjaC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3RyYW5zbGF0aW9uLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL3RyYW5zbGF0aW9uLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndGhyZWF0LW1vZGVsaW5nLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL3RocmVhdC1tb2RlbGluZy5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3BlbmV0cmF0aW9uLXRlc3RpbmcubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9za2lsbHMvcGVuZXRyYXRpb24tdGVzdGluZy5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gUG9wdWxhciBBZ2VudHNcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NvZGUtcmV2aWV3ZXIubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9hZ2VudHMvY29kZS1yZXZpZXdlci5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3Jlc2VhcmNoLWFzc2lzdGFudC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L2FnZW50cy9yZXNlYXJjaC1hc3Npc3RhbnQubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0YXNrLW1hbmFnZXIubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9hZ2VudHMvdGFzay1tYW5hZ2VyLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBQb3B1bGFyIFRlbXBsYXRlc1xuICAgICAge1xuICAgICAgICBuYW1lOiAnY29kZS1kb2N1bWVudGF0aW9uLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL2NvZGUtZG9jdW1lbnRhdGlvbi5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2VtYWlsLXByb2Zlc3Npb25hbC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3RlbXBsYXRlcy9lbWFpbC1wcm9mZXNzaW9uYWwubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdtZWV0aW5nLW5vdGVzLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL21lZXRpbmctbm90ZXMubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwcm9qZWN0LWJyaWVmLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3Byb2plY3QtYnJpZWYubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdyZXBvcnQtZXhlY3V0aXZlLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3JlcG9ydC1leGVjdXRpdmUubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwZW5ldHJhdGlvbi10ZXN0LXJlcG9ydC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3RlbXBsYXRlcy9wZW5ldHJhdGlvbi10ZXN0LXJlcG9ydC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3NlY3VyaXR5LXZ1bG5lcmFiaWxpdHktcmVwb3J0Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3NlY3VyaXR5LXZ1bG5lcmFiaWxpdHktcmVwb3J0Lm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndGhyZWF0LWFzc2Vzc21lbnQtcmVwb3J0Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3RocmVhdC1hc3Nlc3NtZW50LXJlcG9ydC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gUG9wdWxhciBFbnNlbWJsZXNcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2J1c2luZXNzLWFkdmlzb3IubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9lbnNlbWJsZXMvYnVzaW5lc3MtYWR2aXNvci5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NyZWF0aXZlLXN0dWRpby5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L2Vuc2VtYmxlcy9jcmVhdGl2ZS1zdHVkaW8ubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdkZXZlbG9wbWVudC10ZWFtLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvZW5zZW1ibGVzL2RldmVsb3BtZW50LXRlYW0ubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzZWN1cml0eS1hbmFseXNpcy10ZWFtLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvZW5zZW1ibGVzL3NlY3VyaXR5LWFuYWx5c2lzLXRlYW0ubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH1cbiAgICBdO1xuICAgIFxuICAgIHJldHVybiBDb2xsZWN0aW9uU2VlZGVyLmNhY2hlZFNlZWREYXRhO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IGNvbGxlY3Rpb24gc3RhdGlzdGljcyBmcm9tIHNlZWQgZGF0YVxuICAgKi9cbiAgc3RhdGljIGdldFNlZWRTdGF0cygpIHtcbiAgICBjb25zdCBzZWVkRGF0YSA9IHRoaXMuZ2V0U2VlZERhdGEoKTtcbiAgICBjb25zdCB0eXBlQ291bnQgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuICAgIFxuICAgIHNlZWREYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAvLyBFeHRyYWN0IHR5cGUgZnJvbSBwYXRoIChsaWJyYXJ5L3BlcnNvbmFzL25hbWUubWQgLT4gcGVyc29uYXMpXG4gICAgICBjb25zdCBwYXRoUGFydHMgPSBpdGVtLnBhdGguc3BsaXQoJy8nKTtcbiAgICAgIGNvbnN0IHR5cGUgPSBwYXRoUGFydHNbMV0gfHwgJ3Vua25vd24nO1xuICAgICAgdHlwZUNvdW50LnNldCh0eXBlLCAodHlwZUNvdW50LmdldCh0eXBlKSB8fCAwKSArIDEpO1xuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICB0b3RhbDogc2VlZERhdGEubGVuZ3RoLFxuICAgICAgYnlUeXBlOiBPYmplY3QuZnJvbUVudHJpZXModHlwZUNvdW50KVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDaGVjayBpZiBhbiBpdGVtIGlzIGF2YWlsYWJsZSBpbiBzZWVkIGRhdGFcbiAgICovXG4gIHN0YXRpYyBpc0l0ZW1JblNlZWREYXRhKHBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNlZWREYXRhKCkuc29tZShpdGVtID0+IGl0ZW0ucGF0aCA9PT0gcGF0aCk7XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgc2VlZCBpdGVtIGJ5IHBhdGhcbiAgICovXG4gIHN0YXRpYyBnZXRTZWVkSXRlbShwYXRoOiBzdHJpbmcpOiBDb2xsZWN0aW9uSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U2VlZERhdGEoKS5maW5kKGl0ZW0gPT4gaXRlbS5wYXRoID09PSBwYXRoKTtcbiAgfVxufSJdfQ==
267
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29sbGVjdGlvblNlZWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0NvbGxlY3Rpb25TZWVkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBSUg7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQUMzQixpRUFBaUU7SUFDekQsTUFBTSxDQUFDLGNBQWMsR0FBNEIsSUFBSSxDQUFDO0lBRTlEOzs7O09BSUc7SUFDSCxNQUFNLENBQUMsV0FBVztRQUNoQixrQ0FBa0M7UUFDbEMsSUFBSSxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQyxPQUFPLGdCQUFnQixDQUFDLGNBQWMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLGdCQUFnQixDQUFDLGNBQWMsR0FBRztZQUNoQyxtQkFBbUI7WUFDbkI7Z0JBQ0UsSUFBSSxFQUFFLG9CQUFvQjtnQkFDMUIsSUFBSSxFQUFFLHFDQUFxQztnQkFDM0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRTthQUN4QztZQUNEO2dCQUNFLElBQUksRUFBRSxtQkFBbUI7Z0JBQ3pCLElBQUksRUFBRSxvQ0FBb0M7Z0JBQzFDLEdBQUcsRUFBRSxXQUFXO2dCQUNoQixhQUFhLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUU7YUFDeEM7WUFDRDtnQkFDRSxJQUFJLEVBQUUsb0JBQW9CO2dCQUMxQixJQUFJLEVBQUUscUNBQXFDO2dCQUMzQyxHQUFHLEVBQUUsV0FBVztnQkFDaEIsYUFBYSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO2FBQ3hDO1lBQ0Q7Z0JBQ0UsSUFBSSxFQUFFLHNCQUFzQjtnQkFDNUIsSUFBSSxFQUFFLHVDQUF1QztnQkFDN0MsR0FBRyxFQUFFLFdBQVc7Z0JBQ2hCLGFBQWEsRUFBRSxJQUFJLElBQUksRUFB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QUFDLGdCQUFnQixDQUFDLElBQVk7UUFDbEMsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsV0FBVyxDQUFDLElBQVk7UUFDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUM3RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb2xsZWN0aW9uIHNlZWRlciBmb3IgYW5vbnltb3VzL29mZmxpbmUgYnJvd3NpbmdcbiAqIFByb3ZpZGVzIGJhc2ljIGNvbGxlY3Rpb24gZGF0YSB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBHaXRIdWIgYXV0aGVudGljYXRpb25cbiAqL1xuXG5pbXBvcnQgeyBDb2xsZWN0aW9uSXRlbSB9IGZyb20gJy4uL2NhY2hlL0NvbGxlY3Rpb25DYWNoZS5qcyc7XG5cbi8qKlxuICogQmFzaWMgY29sbGVjdGlvbiBkYXRhIHRoYXQgY2FuIGJlIHVzZWQgd2l0aG91dCBHaXRIdWIgQVBJIGFjY2Vzc1xuICogVGhpcyBwcm92aWRlcyBhIG1pbmltYWwgc2V0IG9mIHdlbGwta25vd24gY29sbGVjdGlvbiBpdGVtc1xuICovXG5leHBvcnQgY2xhc3MgQ29sbGVjdGlvblNlZWRlciB7XG4gIC8vIENhY2hlIHRoZSBzZWVkIGRhdGEgYXMgYSBzdGF0aWMgcHJvcGVydHkgZm9yIG1lbW9yeSBlZmZpY2llbmN5XG4gIHByaXZhdGUgc3RhdGljIGNhY2hlZFNlZWREYXRhOiBDb2xsZWN0aW9uSXRlbVtdIHwgbnVsbCA9IG51bGw7XG4gIFxuICAvKipcbiAgICogR2V0IHNlZWQgZGF0YSBmb3IgdGhlIGNvbGxlY3Rpb24gY2FjaGVcbiAgICogVGhpcyBpbmNsdWRlcyBwb3B1bGFyL2Vzc2VudGlhbCBpdGVtcyB0aGF0IGFyZSBjb21tb25seSByZXF1ZXN0ZWRcbiAgICogRGF0YSBpcyBjYWNoZWQgYXMgYSBzdGF0aWMgcHJvcGVydHkgdG8gYXZvaWQgcmVjcmVhdGlvbiBvbiBldmVyeSBjYWxsXG4gICAqL1xuICBzdGF0aWMgZ2V0U2VlZERhdGEoKTogQ29sbGVjdGlvbkl0ZW1bXSB7XG4gICAgLy8gUmV0dXJuIGNhY2hlZCBkYXRhIGlmIGF2YWlsYWJsZVxuICAgIGlmIChDb2xsZWN0aW9uU2VlZGVyLmNhY2hlZFNlZWREYXRhKSB7XG4gICAgICByZXR1cm4gQ29sbGVjdGlvblNlZWRlci5jYWNoZWRTZWVkRGF0YTtcbiAgICB9XG4gICAgXG4gICAgLy8gQ3JlYXRlIGFuZCBjYWNoZSB0aGUgc2VlZCBkYXRhXG4gICAgQ29sbGVjdGlvblNlZWRlci5jYWNoZWRTZWVkRGF0YSA9IFtcbiAgICAgIC8vIFBvcHVsYXIgUGVyc29uYXNcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NyZWF0aXZlLXdyaXRlci5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3BlcnNvbmFzL2NyZWF0aXZlLXdyaXRlci5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2VsaTUtZXhwbGFpbmVyLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvcGVyc29uYXMvZWxpNS1leHBsYWluZXIubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdkZWJ1Zy1kZXRlY3RpdmUubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9wZXJzb25hcy9kZWJ1Zy1kZXRlY3RpdmUubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0ZWNobmljYWwtYW5hbHlzdC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3BlcnNvbmFzL3RlY2huaWNhbC1hbmFseXN0Lm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnYnVzaW5lc3MtY29uc3VsdGFudC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3BlcnNvbmFzL2J1c2luZXNzLWNvbnN1bHRhbnQubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzZWN1cml0eS1hbmFseXN0Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvcGVyc29uYXMvc2VjdXJpdHktYW5hbHlzdC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gUG9wdWxhciBTa2lsbHNcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NvZGUtcmV2aWV3Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL2NvZGUtcmV2aWV3Lm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnY3JlYXRpdmUtd3JpdGluZy5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3NraWxscy9jcmVhdGl2ZS13cml0aW5nLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZGF0YS1hbmFseXNpcy5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3NraWxscy9kYXRhLWFuYWx5c2lzLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncmVzZWFyY2gubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9za2lsbHMvcmVzZWFyY2gubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICd0cmFuc2xhdGlvbi5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3NraWxscy90cmFuc2xhdGlvbi5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3RocmVhdC1tb2RlbGluZy5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3NraWxscy90aHJlYXQtbW9kZWxpbmcubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdwZW5ldHJhdGlvbi10ZXN0aW5nLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL3BlbmV0cmF0aW9uLXRlc3RpbmcubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICBcbiAgICAgIC8vIFBvcHVsYXIgQWdlbnRzXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjb2RlLXJldmlld2VyLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvYWdlbnRzL2NvZGUtcmV2aWV3ZXIubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdyZXNlYXJjaC1hc3Npc3RhbnQubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9hZ2VudHMvcmVzZWFyY2gtYXNzaXN0YW50Lm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndGFzay1tYW5hZ2VyLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvYWdlbnRzL3Rhc2stbWFuYWdlci5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIFxuICAgICAgLy8gUG9wdWxhciBUZW1wbGF0ZXNcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ2NvZGUtZG9jdW1lbnRhdGlvbi5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3RlbXBsYXRlcy9jb2RlLWRvY3VtZW50YXRpb24ubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdlbWFpbC1wcm9mZXNzaW9uYWwubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS90ZW1wbGF0ZXMvZW1haWwtcHJvZmVzc2lvbmFsLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnbWVldGluZy1ub3Rlcy5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3RlbXBsYXRlcy9tZWV0aW5nLW5vdGVzLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncHJvamVjdC1icmllZi5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3RlbXBsYXRlcy9wcm9qZWN0LWJyaWVmLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncmVwb3J0LWV4ZWN1dGl2ZS5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3RlbXBsYXRlcy9yZXBvcnQtZXhlY3V0aXZlLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAncGVuZXRyYXRpb24tdGVzdC1yZXBvcnQubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS90ZW1wbGF0ZXMvcGVuZXRyYXRpb24tdGVzdC1yZXBvcnQubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzZWN1cml0eS12dWxuZXJhYmlsaXR5LXJlcG9ydC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3RlbXBsYXRlcy9zZWN1cml0eS12dWxuZXJhYmlsaXR5LXJlcG9ydC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3RocmVhdC1hc3Nlc3NtZW50LXJlcG9ydC5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L3RlbXBsYXRlcy90aHJlYXQtYXNzZXNzbWVudC1yZXBvcnQubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICBcbiAgICAgIC8vIFBvcHVsYXIgRW5zZW1ibGVzXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdidXNpbmVzcy1hZHZpc29yLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvZW5zZW1ibGVzL2J1c2luZXNzLWFkdmlzb3IubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdjcmVhdGl2ZS1zdHVkaW8ubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9lbnNlbWJsZXMvY3JlYXRpdmUtc3R1ZGlvLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnZGV2ZWxvcG1lbnQtdGVhbS5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L2Vuc2VtYmxlcy9kZXZlbG9wbWVudC10ZWFtLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnc2VjdXJpdHktYW5hbHlzaXMtdGVhbS5tZCcsXG4gICAgICAgIHBhdGg6ICdsaWJyYXJ5L2Vuc2VtYmxlcy9zZWN1cml0eS1hbmFseXNpcy10ZWFtLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAgXG4gICAgICAvLyBUZXN0IEVsZW1lbnRzIGZvciBFMkUgVGVzdGluZ1xuICAgICAge1xuICAgICAgICBuYW1lOiAnc2FmZS1yb3VuZHRyaXAtdGVzdGVyLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL3NhZmUtcm91bmR0cmlwLXRlc3Rlci5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3JvdW5kdHJpcC10ZXN0LXNraWxsLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvc2tpbGxzL3JvdW5kdHJpcC10ZXN0LXNraWxsLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndGVzdC12YWxpZGF0b3IubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9za2lsbHMvdGVzdC12YWxpZGF0b3IubWQnLFxuICAgICAgICBzaGE6ICdzZWVkLWRhdGEnLFxuICAgICAgICBsYXN0X21vZGlmaWVkOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKClcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdzYW1wbGUtc2tpbGwubWQnLFxuICAgICAgICBwYXRoOiAnbGlicmFyeS9za2lsbHMvc2FtcGxlLXNraWxsLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAndGVzdC1lbGVtZW50Lm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvYWdlbnRzL3Rlc3QtZWxlbWVudC5tZCcsXG4gICAgICAgIHNoYTogJ3NlZWQtZGF0YScsXG4gICAgICAgIGxhc3RfbW9kaWZpZWQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ3Rlc3RpbmctZnJhbWV3b3JrLm1kJyxcbiAgICAgICAgcGF0aDogJ2xpYnJhcnkvdGVtcGxhdGVzL3Rlc3RpbmctZnJhbWV3b3JrLm1kJyxcbiAgICAgICAgc2hhOiAnc2VlZC1kYXRhJyxcbiAgICAgICAgbGFzdF9tb2RpZmllZDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpXG4gICAgICB9XG4gICAgXTtcbiAgICBcbiAgICByZXR1cm4gQ29sbGVjdGlvblNlZWRlci5jYWNoZWRTZWVkRGF0YTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEdldCBjb2xsZWN0aW9uIHN0YXRpc3RpY3MgZnJvbSBzZWVkIGRhdGFcbiAgICovXG4gIHN0YXRpYyBnZXRTZWVkU3RhdHMoKSB7XG4gICAgY29uc3Qgc2VlZERhdGEgPSB0aGlzLmdldFNlZWREYXRhKCk7XG4gICAgY29uc3QgdHlwZUNvdW50ID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcbiAgICBcbiAgICBzZWVkRGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgLy8gRXh0cmFjdCB0eXBlIGZyb20gcGF0aCAobGlicmFyeS9wZXJzb25hcy9uYW1lLm1kIC0+IHBlcnNvbmFzKVxuICAgICAgY29uc3QgcGF0aFBhcnRzID0gaXRlbS5wYXRoLnNwbGl0KCcvJyk7XG4gICAgICBjb25zdCB0eXBlID0gcGF0aFBhcnRzWzFdIHx8ICd1bmtub3duJztcbiAgICAgIHR5cGVDb3VudC5zZXQodHlwZSwgKHR5cGVDb3VudC5nZXQodHlwZSkgfHwgMCkgKyAxKTtcbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4ge1xuICAgICAgdG90YWw6IHNlZWREYXRhLmxlbmd0aCxcbiAgICAgIGJ5VHlwZTogT2JqZWN0LmZyb21FbnRyaWVzKHR5cGVDb3VudClcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gaXRlbSBpcyBhdmFpbGFibGUgaW4gc2VlZCBkYXRhXG4gICAqL1xuICBzdGF0aWMgaXNJdGVtSW5TZWVkRGF0YShwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRTZWVkRGF0YSgpLnNvbWUoaXRlbSA9PiBpdGVtLnBhdGggPT09IHBhdGgpO1xuICB9XG4gIFxuICAvKipcbiAgICogR2V0IHNlZWQgaXRlbSBieSBwYXRoXG4gICAqL1xuICBzdGF0aWMgZ2V0U2VlZEl0ZW0ocGF0aDogc3RyaW5nKTogQ29sbGVjdGlvbkl0ZW0gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFNlZWREYXRhKCkuZmluZChpdGVtID0+IGl0ZW0ucGF0aCA9PT0gcGF0aCk7XG4gIH1cbn0iXX0=
@@ -1,6 +1,22 @@
1
1
  /**
2
2
  * Install AI customization elements from collection
3
3
  * Supports all element types: personas, skills, templates, agents, memories, ensembles
4
+ *
5
+ * SECURITY FIX (2025-08-12): Fixed critical vulnerability where content was written to disk
6
+ * BEFORE validation was complete. This could allow malicious content to persist on the
7
+ * filesystem even when validation failed. The fix implements:
8
+ *
9
+ * 1. VALIDATE-BEFORE-WRITE PATTERN: All content validation (ContentValidator.sanitizePersonaContent,
10
+ * SecureYamlParser.safeMatter, metadata validation, etc.) is now performed BEFORE any disk operations.
11
+ *
12
+ * 2. ATOMIC FILE OPERATIONS: Uses temporary file + atomic rename to prevent partial file corruption
13
+ * and ensure complete cleanup on any failure during the write process.
14
+ *
15
+ * 3. GUARANTEED CLEANUP: If any part of the write operation fails, temporary files are automatically
16
+ * cleaned up, preventing orphaned malicious content on the filesystem.
17
+ *
18
+ * The vulnerability existed in installContent() where fs.writeFile() was called after validation
19
+ * but before final success confirmation, creating a window where malicious content could persist.
4
20
  */
5
21
  import { GitHubClient } from './GitHubClient.js';
6
22
  import { IElementMetadata } from '../types/elements/IElement.js';
@@ -13,6 +29,9 @@ export declare class ElementInstaller {
13
29
  /**
14
30
  * Install AI customization element from the collection
15
31
  * Automatically detects element type from path structure
32
+ *
33
+ * SECURITY FIX: Implements validate-before-write pattern with atomic operations
34
+ * to prevent malicious content persistence on validation failure.
16
35
  */
17
36
  installContent(inputPath: string): Promise<{
18
37
  success: boolean;
@@ -21,6 +40,18 @@ export declare class ElementInstaller {
21
40
  elementType?: ElementType;
22
41
  filename?: string;
23
42
  }>;
43
+ /**
44
+ * Atomic file write operation with guaranteed cleanup on failure
45
+ *
46
+ * SECURITY FIX: This method ensures that file writes are atomic and any
47
+ * failures during the write process will not leave partial or corrupted
48
+ * files on the filesystem. Uses temporary file + rename for atomicity.
49
+ *
50
+ * @param destination - Final destination path for the file
51
+ * @param content - Content to write to the file
52
+ * @throws Error if write operation fails (with guaranteed cleanup)
53
+ */
54
+ private atomicWriteFile;
24
55
  /**
25
56
  * Get ElementType from string
26
57
  */
@@ -1 +1 @@
1
- {"version":3,"file":"ElementInstaller.d.ts","sourceRoot":"","sources":["../../src/collection/ElementInstaller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMjE,OAAO,EAAoB,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEjF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,OAAO,CAAmE;gBAEtE,YAAY,EAAE,YAAY;IAKtC;;;OAGG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;QAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IA+FF;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgBhC;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM;CAmBrG"}
1
+ {"version":3,"file":"ElementInstaller.d.ts","sourceRoot":"","sources":["../../src/collection/ElementInstaller.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAMjE,OAAO,EAAoB,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEjF,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,OAAO,CAAmE;gBAEtE,YAAY,EAAE,YAAY;IAKtC;;;;;;OAMG;IACG,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;QAC/C,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;QAC5B,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAqGF;;;;;;;;;;OAUG;YACW,eAAe;IA8B7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAgBhC;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM;CAmBrG"}
@@ -1,6 +1,22 @@
1
1
  /**
2
2
  * Install AI customization elements from collection
3
3
  * Supports all element types: personas, skills, templates, agents, memories, ensembles
4
+ *
5
+ * SECURITY FIX (2025-08-12): Fixed critical vulnerability where content was written to disk
6
+ * BEFORE validation was complete. This could allow malicious content to persist on the
7
+ * filesystem even when validation failed. The fix implements:
8
+ *
9
+ * 1. VALIDATE-BEFORE-WRITE PATTERN: All content validation (ContentValidator.sanitizePersonaContent,
10
+ * SecureYamlParser.safeMatter, metadata validation, etc.) is now performed BEFORE any disk operations.
11
+ *
12
+ * 2. ATOMIC FILE OPERATIONS: Uses temporary file + atomic rename to prevent partial file corruption
13
+ * and ensure complete cleanup on any failure during the write process.
14
+ *
15
+ * 3. GUARANTEED CLEANUP: If any part of the write operation fails, temporary files are automatically
16
+ * cleaned up, preventing orphaned malicious content on the filesystem.
17
+ *
18
+ * The vulnerability existed in installContent() where fs.writeFile() was called after validation
19
+ * but before final success confirmation, creating a window where malicious content could persist.
4
20
  */
5
21
  import * as fs from 'fs/promises';
6
22
  import * as path from 'path';
@@ -21,11 +37,14 @@ export class ElementInstaller {
21
37
  /**
22
38
  * Install AI customization element from the collection
23
39
  * Automatically detects element type from path structure
40
+ *
41
+ * SECURITY FIX: Implements validate-before-write pattern with atomic operations
42
+ * to prevent malicious content persistence on validation failure.
24
43
  */
25
44
  async installContent(inputPath) {
26
- // Validate and sanitize the input path
45
+ // SECURITY: Validate and sanitize the input path first
27
46
  const sanitizedPath = validatePath(inputPath);
28
- // Detect element type from path structure
47
+ // SECURITY: Detect element type from path structure and validate format
29
48
  // Expected format: library/[element-type]/[category]/[element].md
30
49
  const pathParts = sanitizedPath.split('/');
31
50
  if (pathParts.length < 3 || pathParts[0] !== 'library') {
@@ -33,26 +52,29 @@ export class ElementInstaller {
33
52
  }
34
53
  const elementTypeStr = pathParts[1];
35
54
  const elementType = this.getElementTypeFromString(elementTypeStr);
36
- // Ensure the path ends with .md
55
+ // SECURITY: Ensure the path ends with .md to prevent arbitrary file types
37
56
  if (!sanitizedPath.endsWith('.md')) {
38
57
  throw new Error('Invalid file type. Only .md files are allowed.');
39
58
  }
59
+ // STEP 1: FETCH CONTENT INTO MEMORY (NO DISK OPERATIONS YET)
40
60
  const url = `${this.baseUrl}/${sanitizedPath}`;
41
61
  const data = await this.githubClient.fetchFromGitHub(url);
42
62
  if (data.type !== 'file') {
43
63
  throw new Error('Path does not point to a file');
44
64
  }
45
- // Check file size before downloading
65
+ // SECURITY: Check file size before downloading to prevent DoS attacks
46
66
  if (data.size > SECURITY_LIMITS.MAX_PERSONA_SIZE_BYTES) {
47
67
  throw new Error(`File too large (${data.size} bytes, max ${SECURITY_LIMITS.MAX_PERSONA_SIZE_BYTES} bytes)`);
48
68
  }
49
- // Decode Base64 content
69
+ // Decode Base64 content into memory only
50
70
  const content = Buffer.from(data.content, 'base64').toString('utf-8');
51
- // Validate content size after decoding
71
+ // STEP 2: PERFORM ALL VALIDATION BEFORE ANY DISK OPERATIONS
72
+ // This is the critical security fix - validate everything in memory first
73
+ // SECURITY: Validate content size after decoding
52
74
  validateContentSize(content, SECURITY_LIMITS.MAX_PERSONA_SIZE_BYTES);
53
- // Sanitize content for security threats
75
+ // SECURITY: Sanitize content for security threats (XSS, injection, etc.)
54
76
  const sanitizedContent = ContentValidator.sanitizePersonaContent(content);
55
- // Use secure YAML parser
77
+ // SECURITY: Use secure YAML parser to prevent YAML bombs and injection
56
78
  let parsed;
57
79
  try {
58
80
  parsed = SecureYamlParser.safeMatter(sanitizedContent);
@@ -64,22 +86,22 @@ export class ElementInstaller {
64
86
  throw error;
65
87
  }
66
88
  const metadata = parsed.data;
67
- // Additional metadata validation for injection attacks
89
+ // SECURITY: Additional metadata validation for injection attacks
68
90
  const metadataValidation = ContentValidator.validateMetadata(metadata);
69
91
  if (!metadataValidation.isValid) {
70
92
  throw new Error(`Security validation failed: ${metadataValidation.detectedPatterns?.join(', ')}`);
71
93
  }
72
- // Validate metadata
94
+ // SECURITY: Validate required metadata fields
73
95
  if (!metadata.name || !metadata.description) {
74
96
  throw new Error('Invalid content: missing required name or description');
75
97
  }
76
- // Generate and validate local filename
98
+ // SECURITY: Generate and validate local filename to prevent path traversal
77
99
  const originalFilename = sanitizedPath.split('/').pop() || 'downloaded-element.md';
78
100
  const filename = validateFilename(originalFilename);
79
101
  // Get appropriate directory for element type
80
102
  const elementDir = this.portfolioManager.getElementDir(elementType);
81
103
  const localPath = path.join(elementDir, filename);
82
- // Check if file already exists
104
+ // SECURITY: Check if file already exists before any write operations
83
105
  try {
84
106
  await fs.access(localPath);
85
107
  return {
@@ -90,8 +112,10 @@ export class ElementInstaller {
90
112
  catch {
91
113
  // File doesn't exist, proceed with installation
92
114
  }
93
- // Write the sanitized file
94
- await fs.writeFile(localPath, sanitizedContent, 'utf-8');
115
+ // STEP 3: ALL VALIDATION COMPLETE - NOW PERFORM ATOMIC WRITE OPERATION
116
+ // SECURITY FIX: Use atomic write to prevent partial file corruption and
117
+ // ensure cleanup on any failure during the write process
118
+ await this.atomicWriteFile(localPath, sanitizedContent);
95
119
  return {
96
120
  success: true,
97
121
  message: `AI customization element installed successfully!`,
@@ -100,6 +124,44 @@ export class ElementInstaller {
100
124
  elementType
101
125
  };
102
126
  }
127
+ /**
128
+ * Atomic file write operation with guaranteed cleanup on failure
129
+ *
130
+ * SECURITY FIX: This method ensures that file writes are atomic and any
131
+ * failures during the write process will not leave partial or corrupted
132
+ * files on the filesystem. Uses temporary file + rename for atomicity.
133
+ *
134
+ * @param destination - Final destination path for the file
135
+ * @param content - Content to write to the file
136
+ * @throws Error if write operation fails (with guaranteed cleanup)
137
+ */
138
+ async atomicWriteFile(destination, content) {
139
+ // Generate unique temporary file name to avoid collisions
140
+ const tempFile = `${destination}.tmp.${Date.now()}.${Math.random().toString(36).substring(2)}`;
141
+ try {
142
+ // SECURITY: Write to temporary file first
143
+ // If this fails, no files are left on disk
144
+ await fs.writeFile(tempFile, content, 'utf-8');
145
+ // SECURITY: Atomic rename operation
146
+ // On most filesystems, rename is atomic - the file appears with complete content
147
+ // or doesn't appear at all. This prevents partial file corruption.
148
+ await fs.rename(tempFile, destination);
149
+ }
150
+ catch (error) {
151
+ // SECURITY: Guaranteed cleanup of temporary file on ANY failure
152
+ // This ensures no temporary files are left behind even if the
153
+ // rename operation fails after successful write
154
+ try {
155
+ await fs.unlink(tempFile);
156
+ }
157
+ catch (cleanupError) {
158
+ // Ignore cleanup errors - the file may not exist if writeFile failed
159
+ // The original error is more important to propagate
160
+ }
161
+ // Re-throw the original error to maintain error handling semantics
162
+ throw error;
163
+ }
164
+ }
103
165
  /**
104
166
  * Get ElementType from string
105
167
  */
@@ -137,4 +199,4 @@ export class ElementInstaller {
137
199
  `🚀 **Ready to use!**`;
138
200
  }
139
201
  }
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudEluc3RhbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0VsZW1lbnRJbnN0YWxsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBRUgsT0FBTyxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDbEMsT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFHN0IsT0FBTyxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BHLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWpGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbkIsWUFBWSxDQUFlO0lBQzNCLGdCQUFnQixDQUFtQjtJQUNuQyxPQUFPLEdBQUcsK0RBQStELENBQUM7SUFFbEYsWUFBWSxZQUEwQjtRQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDekQsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsU0FBaUI7UUFPcEMsdUNBQXVDO1FBQ3ZDLE1BQU0sYUFBYSxHQUFHLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5QywwQ0FBMEM7UUFDMUMsa0VBQWtFO1FBQ2xFLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFD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QyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZHLENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxRQUEwQixFQUFFLFFBQWdCLEVBQUUsV0FBd0I7UUFDekYsTUFBTSxVQUFVLEdBQWdDO1lBQzlDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUk7WUFDM0IsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSTtZQUN6QixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJO1lBQzVCLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUk7WUFDekIsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSTtZQUMxQixDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsRUFBRSxJQUFJO1NBQzdCLENBQUM7UUFFRixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQzlDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU1RSxPQUFPLDREQUE0RDtZQUNqRSxHQUFHLEtBQUssTUFBTSxRQUFRLENBQUMsSUFBSSxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUk7WUFDbkYsWUFBWSxRQUFRLElBQUk7WUFDeEIsZ0JBQWdCLFFBQVEsTUFBTTtZQUM5QixzQkFBc0IsQ0FBQztJQUMzQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEluc3RhbGwgQUkgY3VzdG9taXphdGlvbiBlbGVtZW50cyBmcm9tIGNvbGxlY3Rpb25cbiAqIFN1cHBvcnRzIGFsbCBlbGVtZW50IHR5cGVzOiBwZXJzb25hcywgc2tpbGxzLCB0ZW1wbGF0ZXMsIGFnZW50cywgbWVtb3JpZXMsIGVuc2VtYmxlc1xuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBHaXRIdWJDbGllbnQgfSBmcm9tICcuL0dpdEh1YkNsaWVudC5qcyc7XG5pbXBvcnQgeyBJRWxlbWVudE1ldGFkYXRhIH0gZnJvbSAnLi4vdHlwZXMvZWxlbWVudHMvSUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQYXRoLCB2YWxpZGF0ZUZpbGVuYW1lLCB2YWxpZGF0ZUNvbnRlbnRTaXplIH0gZnJvbSAnLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTIH0gZnJvbSAnLi4vc2VjdXJpdHkvY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyZVlhbWxQYXJzZXIgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvU2VjdXJpdHlFcnJvci5qcyc7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyLCBFbGVtZW50VHlwZSB9IGZyb20gJy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRJbnN0YWxsZXIge1xuICBwcml2YXRlIGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50O1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIHByaXZhdGUgYmFzZVVybCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uL2NvbnRlbnRzJztcbiAgXG4gIGNvbnN0cnVjdG9yKGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50KSB7XG4gICAgdGhpcy5naXRodWJDbGllbnQgPSBnaXRodWJDbGllbnQ7XG4gICAgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogSW5zdGFsbCBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnQgZnJvbSB0aGUgY29sbGVjdGlvblxuICAgKiBBdXRvbWF0aWNhbGx5IGRldGVjdHMgZWxlbWVudCB0eXBlIGZyb20gcGF0aCBzdHJ1Y3R1cmVcbiAgICovXG4gIGFzeW5jIGluc3RhbGxDb250ZW50KGlucHV0UGF0aDogc3RyaW5nKTogUHJvbWlzZTx7IFxuICAgIHN1Y2Nlc3M6IGJvb2xlYW47IFxuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBtZXRhZGF0YT86IElFbGVtZW50TWV0YWRhdGE7XG4gICAgZWxlbWVudFR5cGU/OiBFbGVtZW50VHlwZTtcbiAgICBmaWxlbmFtZT86IHN0cmluZztcbiAgfT4ge1xuICAgIC8vIFZhbGlkYXRlIGFuZCBzYW5pdGl6ZSB0aGUgaW5wdXQgcGF0aFxuICAgIGNvbnN0IHNhbml0aXplZFBhdGggPSB2YWxpZGF0ZVBhdGgoaW5wdXRQYXRoKTtcbiAgICBcbiAgICAvLyBEZXRlY3QgZWxlbWVudCB0eXBlIGZyb20gcGF0aCBzdHJ1Y3R1cmVcbiAgICAvLyBFeHBlY3RlZCBmb3JtYXQ6IGxpYnJhcnkvW2VsZW1lbnQtdHlwZV0vW2NhdGVnb3J5XS9bZWxlbWVudF0ubWRcbiAgICBjb25zdCBwYXRoUGFydHMgPSBzYW5pdGl6ZWRQYXRoLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhdGhQYXJ0cy5sZW5ndGggPCAzIHx8IHBhdGhQYXJ0c1swXSAhPT0gJ2xpYnJhcnknKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29sbGVjdGlvbiBwYXRoIGZvcm1hdC4gRXhwZWN0ZWQ6IGxpYnJhcnkvW2VsZW1lbnQtdHlwZV0vW2NhdGVnb3J5XS9bZWxlbWVudF0ubWQnKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZWxlbWVudFR5cGVTdHIgPSBwYXRoUGFydHNbMV07XG4gICAgY29uc3QgZWxlbWVudFR5cGUgPSB0aGlzLmdldEVsZW1lbnRUeXBlRnJvbVN0cmluZyhlbGVtZW50VHlwZVN0cik7XG4gICAgXG4gICAgLy8gRW5zdXJlIHRoZSBwYXRoIGVuZHMgd2l0aCAubWRcbiAgICBpZiAoIXNhbml0aXplZFBhdGguZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZmlsZSB0eXBlLiBPbmx5IC5tZCBmaWxlcyBhcmUgYWxsb3dlZC4nKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5iYXNlVXJsfS8ke3Nhbml0aXplZFBhdGh9YDtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5naXRodWJDbGllbnQuZmV0Y2hGcm9tR2l0SHViKHVybCk7XG4gICAgXG4gICAgaWYgKGRhdGEudHlwZSAhPT0gJ2ZpbGUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggZG9lcyBub3QgcG9pbnQgdG8gYSBmaWxlJyk7XG4gICAgfVxuICAgIFxuICAgIC8vIENoZWNrIGZpbGUgc2l6ZSBiZWZvcmUgZG93bmxvYWRpbmdcbiAgICBpZiAoZGF0YS5zaXplID4gU0VDVVJJVFlfTElNSVRTLk1BWF9QRVJTT05BX1NJWkVfQllURVMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmlsZSB0b28gbGFyZ2UgKCR7ZGF0YS5zaXplfSBieXRlcywgbWF4ICR7U0VDVVJJVFlfTElNSVRTLk1BWF9QRVJTT05BX1NJWkVfQllURVN9IGJ5dGVzKWApO1xuICAgIH1cbiAgICBcbiAgICAvLyBEZWNvZGUgQmFzZTY0IGNvbnRlbnRcbiAgICBjb25zdCBjb250ZW50ID0gQnVmZmVyLmZyb20oZGF0YS5jb250ZW50LCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgXG4gICAgLy8gVmFsaWRhdGUgY29udGVudCBzaXplIGFmdGVyIGRlY29kaW5nXG4gICAgdmFsaWRhdGVDb250ZW50U2l6ZShjb250ZW50LCBTRUNVUklUWV9MSU1JVFMuTUFYX1BFUlNPTkFfU0laRV9CWVRFUyk7XG4gICAgXG4gICAgLy8gU2FuaXRpemUgY29udGVudCBmb3Igc2VjdXJpdHkgdGhyZWF0c1xuICAgIGNvbnN0IHNhbml0aXplZENvbnRlbnQgPSBDb250ZW50VmFsaWRhdG9yLnNhbml0aXplUGVyc29uYUNvbnRlbnQoY29udGVudCk7XG4gICAgXG4gICAgLy8gVXNlIHNlY3VyZSBZQU1MIHBhcnNlclxuICAgIGxldCBwYXJzZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZCA9IFNlY3VyZVlhbWxQYXJzZXIuc2FmZU1hdHRlcihzYW5pdGl6ZWRDb250ZW50KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VjdXJpdHlFcnJvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNlY3VyaXR5IHRocmVhdCBpbiBjb250ZW50OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgbWV0YWRhdGEgPSBwYXJzZWQuZGF0YSBhcyBJRWxlbWVudE1ldGFkYXRhO1xuICAgIFxuICAgIC8vIEFkZGl0aW9uYWwgbWV0YWRhdGEgdmFsaWRhdGlvbiBmb3IgaW5qZWN0aW9uIGF0dGFja3NcbiAgICBjb25zdCBtZXRhZGF0YVZhbGlkYXRpb24gPSBDb250ZW50VmFsaWRhdG9yLnZhbGlkYXRlTWV0YWRhdGEobWV0YWRhdGEpO1xuICAgIGlmICghbWV0YWRhdGFWYWxpZGF0aW9uLmlzVmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2VjdXJpdHkgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7bWV0YWRhdGFWYWxpZGF0aW9uLmRldGVjdGVkUGF0dGVybnM/LmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIFxuICAgIC8vIFZhbGlkYXRlIG1ldGFkYXRhXG4gICAgaWYgKCFtZXRhZGF0YS5uYW1lIHx8ICFtZXRhZGF0YS5kZXNjcmlwdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvbnRlbnQ6IG1pc3NpbmcgcmVxdWlyZWQgbmFtZSBvciBkZXNjcmlwdGlvbicpO1xuICAgIH1cbiAgICBcbiAgICAvLyBHZW5lcmF0ZSBhbmQgdmFsaWRhdGUgbG9jYWwgZmlsZW5hbWVcbiAgICBjb25zdCBvcmlnaW5hbEZpbGVuYW1lID0gc2FuaXRpemVkUGF0aC5zcGxpdCgnLycpLnBvcCgpIHx8ICdkb3dubG9hZGVkLWVsZW1lbnQubWQnO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gdmFsaWRhdGVGaWxlbmFtZShvcmlnaW5hbEZpbGVuYW1lKTtcbiAgICBcbiAgICAvLyBHZXQgYXBwcm9wcmlhdGUgZGlyZWN0b3J5IGZvciBlbGVtZW50IHR5cGVcbiAgICBjb25zdCBlbGVtZW50RGlyID0gdGhpcy5wb3J0Zm9saW9NYW5hZ2VyLmdldEVsZW1lbnREaXIoZWxlbWVudFR5cGUpO1xuICAgIGNvbnN0IGxvY2FsUGF0aCA9IHBhdGguam9pbihlbGVtZW50RGlyLCBmaWxlbmFtZSk7XG4gICAgXG4gICAgLy8gQ2hlY2sgaWYgZmlsZSBhbHJlYWR5IGV4aXN0c1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3MobG9jYWxQYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgQUkgY3VzdG9taXphdGlvbiBlbGVtZW50IGFscmVhZHkgZXhpc3RzOiAke2ZpbGVuYW1lfVxcblxcblRoZSBlbGVtZW50IGhhcyBhbHJlYWR5IGJlZW4gaW5zdGFsbGVkLmBcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3QsIHByb2NlZWQgd2l0aCBpbnN0YWxsYXRpb25cbiAgICB9XG4gICAgXG4gICAgLy8gV3JpdGUgdGhlIHNhbml0aXplZCBmaWxlXG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGxvY2FsUGF0aCwgc2FuaXRpemVkQ29udGVudCwgJ3V0Zi04Jyk7XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIHN1Y2Nlc3M6IHRydWUsXG4gICAgICBtZXNzYWdlOiBgQUkgY3VzdG9taXphdGlvbiBlbGVtZW50IGluc3RhbGxlZCBzdWNjZXNzZnVsbHkhYCxcbiAgICAgIG1ldGFkYXRhLFxuICAgICAgZmlsZW5hbWUsXG4gICAgICBlbGVtZW50VHlwZVxuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBHZXQgRWxlbWVudFR5cGUgZnJvbSBzdHJpbmdcbiAgICovXG4gIHByaXZhdGUgZ2V0RWxlbWVudFR5cGVGcm9tU3RyaW5nKHR5cGVTdHI6IHN0cmluZyk6IEVsZW1lbnRUeXBlIHtcbiAgICBjb25zdCB0eXBlTWFwOiBSZWNvcmQ8c3RyaW5nLCBFbGVtZW50VHlwZT4gPSB7XG4gICAgICAncGVyc29uYXMnOiBFbGVtZW50VHlwZS5QRVJTT05BLFxuICAgICAgJ3NraWxscyc6IEVsZW1lbnRUeXBlLlNLSUxMLFxuICAgICAgJ3RlbXBsYXRlcyc6IEVsZW1lbnRUeXBlLlRFTVBMQVRFLFxuICAgICAgJ2FnZW50cyc6IEVsZW1lbnRUeXBlLkFHRU5UXG4gICAgfTtcbiAgICBcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IHR5cGVNYXBbdHlwZVN0cl07XG4gICAgaWYgKCFlbGVtZW50VHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGVsZW1lbnQgdHlwZTogJHt0eXBlU3RyfS4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LmtleXModHlwZU1hcCkuam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGVsZW1lbnRUeXBlO1xuICB9XG4gIFxuICAvKipcbiAgICogRm9ybWF0IGluc3RhbGxhdGlvbiBzdWNjZXNzIG1lc3NhZ2VcbiAgICovXG4gIGZvcm1hdEluc3RhbGxTdWNjZXNzKG1ldGFkYXRhOiBJRWxlbWVudE1ldGFkYXRhLCBmaWxlbmFtZTogc3RyaW5nLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHR5cGVFbW9qaXM6IFJlY29yZDxFbGVtZW50VHlwZSwgc3RyaW5nPiA9IHtcbiAgICAgIFtFbGVtZW50VHlwZS5QRVJTT05BXTogJ/Cfjq0nLFxuICAgICAgW0VsZW1lbnRUeXBlLlNLSUxMXTogJ/Cfjq8nLFxuICAgICAgW0VsZW1lbnRUeXBlLlRFTVBMQVRFXTogJ/Cfk4QnLFxuICAgICAgW0VsZW1lbnRUeXBlLkFHRU5UXTogJ/CfpJYnLFxuICAgICAgW0VsZW1lbnRUeXBlLk1FTU9SWV06ICfwn6egJyxcbiAgICAgIFtFbGVtZW50VHlwZS5FTlNFTUJMRV06ICfwn468J1xuICAgIH07XG4gICAgXG4gICAgY29uc3QgZW1vamkgPSB0eXBlRW1vamlzW2VsZW1lbnRUeXBlXSB8fCAn8J+Tpic7XG4gICAgY29uc3QgdHlwZU5hbWUgPSBlbGVtZW50VHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGVsZW1lbnRUeXBlLnNsaWNlKDEpO1xuICAgIFxuICAgIHJldHVybiBg4pyFICoqQUkgQ3VzdG9taXphdGlvbiBFbGVtZW50IEluc3RhbGxlZCBTdWNjZXNzZnVsbHkhKipcXG5cXG5gICtcbiAgICAgIGAke2Vtb2ppfSAqKiR7bWV0YWRhdGEubmFtZX0qKiAke21ldGFkYXRhLmF1dGhvciA/IGBieSAke21ldGFkYXRhLmF1dGhvcn1gIDogJyd9XFxuYCArXG4gICAgICBg8J+TgSBUeXBlOiAke3R5cGVOYW1lfVxcbmAgK1xuICAgICAgYPCfk4QgU2F2ZWQgYXM6ICR7ZmlsZW5hbWV9XFxuXFxuYCArXG4gICAgICBg8J+agCAqKlJlYWR5IHRvIHVzZSEqKmA7XG4gIH1cbn0iXX0=
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWxlbWVudEluc3RhbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL0VsZW1lbnRJbnN0YWxsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFFSCxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUc3QixPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFakYsTUFBTSxPQUFPLGdCQUFnQjtJQUNuQixZQUFZLENBQWU7SUFDM0IsZ0JBQWdCLENBQW1CO0lBQ25DLE9BQU8sR0FBRywrREFBK0QsQ0FBQztJQUVsRixZQUFZLFlBQTBCO1FBQ3BDLElBQUksQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLGNBQWMsQ0FBQyxTQUFpQjtRQU9wQyx1REFBdUQ7UUFDdkQsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRTlDLHdFQUF3RTtRQUN4RSxrRUFBa0U7UUFDbEUsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFD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QUF3QjtRQUN6RixNQUFNLFVBQVUsR0FBZ0M7WUFDOUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSTtZQUMzQixDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJO1lBQ3pCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUk7WUFDNUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSTtZQUN6QixDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJO1lBQzFCLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUk7U0FDN0IsQ0FBQztRQUVGLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLENBQUM7UUFDOUMsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTVFLE9BQU8sNERBQTREO1lBQ2pFLEdBQUcsS0FBSyxNQUFNLFFBQVEsQ0FBQyxJQUFJLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSTtZQUNuRixZQUFZLFFBQVEsSUFBSTtZQUN4QixnQkFBZ0IsUUFBUSxNQUFNO1lBQzlCLHNCQUFzQixDQUFDO0lBQzNCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSW5zdGFsbCBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnRzIGZyb20gY29sbGVjdGlvblxuICogU3VwcG9ydHMgYWxsIGVsZW1lbnQgdHlwZXM6IHBlcnNvbmFzLCBza2lsbHMsIHRlbXBsYXRlcywgYWdlbnRzLCBtZW1vcmllcywgZW5zZW1ibGVzXG4gKiBcbiAqIFNFQ1VSSVRZIEZJWCAoMjAyNS0wOC0xMik6IEZpeGVkIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdHkgd2hlcmUgY29udGVudCB3YXMgd3JpdHRlbiB0byBkaXNrXG4gKiBCRUZPUkUgdmFsaWRhdGlvbiB3YXMgY29tcGxldGUuIFRoaXMgY291bGQgYWxsb3cgbWFsaWNpb3VzIGNvbnRlbnQgdG8gcGVyc2lzdCBvbiB0aGVcbiAqIGZpbGVzeXN0ZW0gZXZlbiB3aGVuIHZhbGlkYXRpb24gZmFpbGVkLiBUaGUgZml4IGltcGxlbWVudHM6XG4gKiBcbiAqIDEuIFZBTElEQVRFLUJFRk9SRS1XUklURSBQQVRURVJOOiBBbGwgY29udGVudCB2YWxpZGF0aW9uIChDb250ZW50VmFsaWRhdG9yLnNhbml0aXplUGVyc29uYUNvbnRlbnQsXG4gKiAgICBTZWN1cmVZYW1sUGFyc2VyLnNhZmVNYXR0ZXIsIG1ldGFkYXRhIHZhbGlkYXRpb24sIGV0Yy4pIGlzIG5vdyBwZXJmb3JtZWQgQkVGT1JFIGFueSBkaXNrIG9wZXJhdGlvbnMuXG4gKiBcbiAqIDIuIEFUT01JQyBGSUxFIE9QRVJBVElPTlM6IFVzZXMgdGVtcG9yYXJ5IGZpbGUgKyBhdG9taWMgcmVuYW1lIHRvIHByZXZlbnQgcGFydGlhbCBmaWxlIGNvcnJ1cHRpb25cbiAqICAgIGFuZCBlbnN1cmUgY29tcGxldGUgY2xlYW51cCBvbiBhbnkgZmFpbHVyZSBkdXJpbmcgdGhlIHdyaXRlIHByb2Nlc3MuXG4gKiBcbiAqIDMuIEdVQVJBTlRFRUQgQ0xFQU5VUDogSWYgYW55IHBhcnQgb2YgdGhlIHdyaXRlIG9wZXJhdGlvbiBmYWlscywgdGVtcG9yYXJ5IGZpbGVzIGFyZSBhdXRvbWF0aWNhbGx5XG4gKiAgICBjbGVhbmVkIHVwLCBwcmV2ZW50aW5nIG9ycGhhbmVkIG1hbGljaW91cyBjb250ZW50IG9uIHRoZSBmaWxlc3lzdGVtLlxuICogXG4gKiBUaGUgdnVsbmVyYWJpbGl0eSBleGlzdGVkIGluIGluc3RhbGxDb250ZW50KCkgd2hlcmUgZnMud3JpdGVGaWxlKCkgd2FzIGNhbGxlZCBhZnRlciB2YWxpZGF0aW9uXG4gKiBidXQgYmVmb3JlIGZpbmFsIHN1Y2Nlc3MgY29uZmlybWF0aW9uLCBjcmVhdGluZyBhIHdpbmRvdyB3aGVyZSBtYWxpY2lvdXMgY29udGVudCBjb3VsZCBwZXJzaXN0LlxuICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzL3Byb21pc2VzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBHaXRIdWJDbGllbnQgfSBmcm9tICcuL0dpdEh1YkNsaWVudC5qcyc7XG5pbXBvcnQgeyBJRWxlbWVudE1ldGFkYXRhIH0gZnJvbSAnLi4vdHlwZXMvZWxlbWVudHMvSUVsZW1lbnQuanMnO1xuaW1wb3J0IHsgdmFsaWRhdGVQYXRoLCB2YWxpZGF0ZUZpbGVuYW1lLCB2YWxpZGF0ZUNvbnRlbnRTaXplIH0gZnJvbSAnLi4vc2VjdXJpdHkvSW5wdXRWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU0VDVVJJVFlfTElNSVRTIH0gZnJvbSAnLi4vc2VjdXJpdHkvY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IENvbnRlbnRWYWxpZGF0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9jb250ZW50VmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyZVlhbWxQYXJzZXIgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cmVZYW1sUGFyc2VyLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5RXJyb3IgfSBmcm9tICcuLi9lcnJvcnMvU2VjdXJpdHlFcnJvci5qcyc7XG5pbXBvcnQgeyBQb3J0Zm9saW9NYW5hZ2VyLCBFbGVtZW50VHlwZSB9IGZyb20gJy4uL3BvcnRmb2xpby9Qb3J0Zm9saW9NYW5hZ2VyLmpzJztcblxuZXhwb3J0IGNsYXNzIEVsZW1lbnRJbnN0YWxsZXIge1xuICBwcml2YXRlIGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50O1xuICBwcml2YXRlIHBvcnRmb2xpb01hbmFnZXI6IFBvcnRmb2xpb01hbmFnZXI7XG4gIHByaXZhdGUgYmFzZVVybCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL0RvbGxob3VzZU1DUC9jb2xsZWN0aW9uL2NvbnRlbnRzJztcbiAgXG4gIGNvbnN0cnVjdG9yKGdpdGh1YkNsaWVudDogR2l0SHViQ2xpZW50KSB7XG4gICAgdGhpcy5naXRodWJDbGllbnQgPSBnaXRodWJDbGllbnQ7XG4gICAgdGhpcy5wb3J0Zm9saW9NYW5hZ2VyID0gUG9ydGZvbGlvTWFuYWdlci5nZXRJbnN0YW5jZSgpO1xuICB9XG4gIFxuICAvKipcbiAgICogSW5zdGFsbCBBSSBjdXN0b21pemF0aW9uIGVsZW1lbnQgZnJvbSB0aGUgY29sbGVjdGlvblxuICAgKiBBdXRvbWF0aWNhbGx5IGRldGVjdHMgZWxlbWVudCB0eXBlIGZyb20gcGF0aCBzdHJ1Y3R1cmVcbiAgICogXG4gICAqIFNFQ1VSSVRZIEZJWDogSW1wbGVtZW50cyB2YWxpZGF0ZS1iZWZvcmUtd3JpdGUgcGF0dGVybiB3aXRoIGF0b21pYyBvcGVyYXRpb25zXG4gICAqIHRvIHByZXZlbnQgbWFsaWNpb3VzIGNvbnRlbnQgcGVyc2lzdGVuY2Ugb24gdmFsaWRhdGlvbiBmYWlsdXJlLlxuICAgKi9cbiAgYXN5bmMgaW5zdGFsbENvbnRlbnQoaW5wdXRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHsgXG4gICAgc3VjY2VzczogYm9vbGVhbjsgXG4gICAgbWVzc2FnZTogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogSUVsZW1lbnRNZXRhZGF0YTtcbiAgICBlbGVtZW50VHlwZT86IEVsZW1lbnRUeXBlO1xuICAgIGZpbGVuYW1lPzogc3RyaW5nO1xuICB9PiB7XG4gICAgLy8gU0VDVVJJVFk6IFZhbGlkYXRlIGFuZCBzYW5pdGl6ZSB0aGUgaW5wdXQgcGF0aCBmaXJzdFxuICAgIGNvbnN0IHNhbml0aXplZFBhdGggPSB2YWxpZGF0ZVBhdGgoaW5wdXRQYXRoKTtcbiAgICBcbiAgICAvLyBTRUNVUklUWTogRGV0ZWN0IGVsZW1lbnQgdHlwZSBmcm9tIHBhdGggc3RydWN0dXJlIGFuZCB2YWxpZGF0ZSBmb3JtYXRcbiAgICAvLyBFeHBlY3RlZCBmb3JtYXQ6IGxpYnJhcnkvW2VsZW1lbnQtdHlwZV0vW2NhdGVnb3J5XS9bZWxlbWVudF0ubWRcbiAgICBjb25zdCBwYXRoUGFydHMgPSBzYW5pdGl6ZWRQYXRoLnNwbGl0KCcvJyk7XG4gICAgaWYgKHBhdGhQYXJ0cy5sZW5ndGggPCAzIHx8IHBhdGhQYXJ0c1swXSAhPT0gJ2xpYnJhcnknKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29sbGVjdGlvbiBwYXRoIGZvcm1hdC4gRXhwZWN0ZWQ6IGxpYnJhcnkvW2VsZW1lbnQtdHlwZV0vW2NhdGVnb3J5XS9bZWxlbWVudF0ubWQnKTtcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZWxlbWVudFR5cGVTdHIgPSBwYXRoUGFydHNbMV07XG4gICAgY29uc3QgZWxlbWVudFR5cGUgPSB0aGlzLmdldEVsZW1lbnRUeXBlRnJvbVN0cmluZyhlbGVtZW50VHlwZVN0cik7XG4gICAgXG4gICAgLy8gU0VDVVJJVFk6IEVuc3VyZSB0aGUgcGF0aCBlbmRzIHdpdGggLm1kIHRvIHByZXZlbnQgYXJiaXRyYXJ5IGZpbGUgdHlwZXNcbiAgICBpZiAoIXNhbml0aXplZFBhdGguZW5kc1dpdGgoJy5tZCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZmlsZSB0eXBlLiBPbmx5IC5tZCBmaWxlcyBhcmUgYWxsb3dlZC4nKTtcbiAgICB9XG4gICAgXG4gICAgLy8gU1RFUCAxOiBGRVRDSCBDT05URU5UIElOVE8gTUVNT1JZIChOTyBESVNLIE9QRVJBVElPTlMgWUVUKVxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMuYmFzZVVybH0vJHtzYW5pdGl6ZWRQYXRofWA7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2l0aHViQ2xpZW50LmZldGNoRnJvbUdpdEh1Yih1cmwpO1xuICAgIFxuICAgIGlmIChkYXRhLnR5cGUgIT09ICdmaWxlJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXRoIGRvZXMgbm90IHBvaW50IHRvIGEgZmlsZScpO1xuICAgIH1cbiAgICBcbiAgICAvLyBTRUNVUklUWTogQ2hlY2sgZmlsZSBzaXplIGJlZm9yZSBkb3dubG9hZGluZyB0byBwcmV2ZW50IERvUyBhdHRhY2tzXG4gICAgaWYgKGRhdGEuc2l6ZSA+IFNFQ1VSSVRZX0xJTUlUUy5NQVhfUEVSU09OQV9TSVpFX0JZVEVTKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZpbGUgdG9vIGxhcmdlICgke2RhdGEuc2l6ZX0gYnl0ZXMsIG1heCAke1NFQ1VSSVRZX0xJTUlUUy5NQVhfUEVSU09OQV9TSVpFX0JZVEVTfSBieXRlcylgKTtcbiAgICB9XG4gICAgXG4gICAgLy8gRGVjb2RlIEJhc2U2NCBjb250ZW50IGludG8gbWVtb3J5IG9ubHlcbiAgICBjb25zdCBjb250ZW50ID0gQnVmZmVyLmZyb20oZGF0YS5jb250ZW50LCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0Zi04Jyk7XG4gICAgXG4gICAgLy8gU1RFUCAyOiBQRVJGT1JNIEFMTCBWQUxJREFUSU9OIEJFRk9SRSBBTlkgRElTSyBPUEVSQVRJT05TXG4gICAgLy8gVGhpcyBpcyB0aGUgY3JpdGljYWwgc2VjdXJpdHkgZml4IC0gdmFsaWRhdGUgZXZlcnl0aGluZyBpbiBtZW1vcnkgZmlyc3RcbiAgICBcbiAgICAvLyBTRUNVUklUWTogVmFsaWRhdGUgY29udGVudCBzaXplIGFmdGVyIGRlY29kaW5nXG4gICAgdmFsaWRhdGVDb250ZW50U2l6ZShjb250ZW50LCBTRUNVUklUWV9MSU1JVFMuTUFYX1BFUlNPTkFfU0laRV9CWVRFUyk7XG4gICAgXG4gICAgLy8gU0VDVVJJVFk6IFNhbml0aXplIGNvbnRlbnQgZm9yIHNlY3VyaXR5IHRocmVhdHMgKFhTUywgaW5qZWN0aW9uLCBldGMuKVxuICAgIGNvbnN0IHNhbml0aXplZENvbnRlbnQgPSBDb250ZW50VmFsaWRhdG9yLnNhbml0aXplUGVyc29uYUNvbnRlbnQoY29udGVudCk7XG4gICAgXG4gICAgLy8gU0VDVVJJVFk6IFVzZSBzZWN1cmUgWUFNTCBwYXJzZXIgdG8gcHJldmVudCBZQU1MIGJvbWJzIGFuZCBpbmplY3Rpb25cbiAgICBsZXQgcGFyc2VkO1xuICAgIHRyeSB7XG4gICAgICBwYXJzZWQgPSBTZWN1cmVZYW1sUGFyc2VyLnNhZmVNYXR0ZXIoc2FuaXRpemVkQ29udGVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlY3VyaXR5RXJyb3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWN1cml0eSB0aHJlYXQgaW4gY29udGVudDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG1ldGFkYXRhID0gcGFyc2VkLmRhdGEgYXMgSUVsZW1lbnRNZXRhZGF0YTtcbiAgICBcbiAgICAvLyBTRUNVUklUWTogQWRkaXRpb25hbCBtZXRhZGF0YSB2YWxpZGF0aW9uIGZvciBpbmplY3Rpb24gYXR0YWNrc1xuICAgIGNvbnN0IG1ldGFkYXRhVmFsaWRhdGlvbiA9IENvbnRlbnRWYWxpZGF0b3IudmFsaWRhdGVNZXRhZGF0YShtZXRhZGF0YSk7XG4gICAgaWYgKCFtZXRhZGF0YVZhbGlkYXRpb24uaXNWYWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTZWN1cml0eSB2YWxpZGF0aW9uIGZhaWxlZDogJHttZXRhZGF0YVZhbGlkYXRpb24uZGV0ZWN0ZWRQYXR0ZXJucz8uam9pbignLCAnKX1gKTtcbiAgICB9XG4gICAgXG4gICAgLy8gU0VDVVJJVFk6IFZhbGlkYXRlIHJlcXVpcmVkIG1ldGFkYXRhIGZpZWxkc1xuICAgIGlmICghbWV0YWRhdGEubmFtZSB8fCAhbWV0YWRhdGEuZGVzY3JpcHRpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb250ZW50OiBtaXNzaW5nIHJlcXVpcmVkIG5hbWUgb3IgZGVzY3JpcHRpb24nKTtcbiAgICB9XG4gICAgXG4gICAgLy8gU0VDVVJJVFk6IEdlbmVyYXRlIGFuZCB2YWxpZGF0ZSBsb2NhbCBmaWxlbmFtZSB0byBwcmV2ZW50IHBhdGggdHJhdmVyc2FsXG4gICAgY29uc3Qgb3JpZ2luYWxGaWxlbmFtZSA9IHNhbml0aXplZFBhdGguc3BsaXQoJy8nKS5wb3AoKSB8fCAnZG93bmxvYWRlZC1lbGVtZW50Lm1kJztcbiAgICBjb25zdCBmaWxlbmFtZSA9IHZhbGlkYXRlRmlsZW5hbWUob3JpZ2luYWxGaWxlbmFtZSk7XG4gICAgXG4gICAgLy8gR2V0IGFwcHJvcHJpYXRlIGRpcmVjdG9yeSBmb3IgZWxlbWVudCB0eXBlXG4gICAgY29uc3QgZWxlbWVudERpciA9IHRoaXMucG9ydGZvbGlvTWFuYWdlci5nZXRFbGVtZW50RGlyKGVsZW1lbnRUeXBlKTtcbiAgICBjb25zdCBsb2NhbFBhdGggPSBwYXRoLmpvaW4oZWxlbWVudERpciwgZmlsZW5hbWUpO1xuICAgIFxuICAgIC8vIFNFQ1VSSVRZOiBDaGVjayBpZiBmaWxlIGFscmVhZHkgZXhpc3RzIGJlZm9yZSBhbnkgd3JpdGUgb3BlcmF0aW9uc1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBmcy5hY2Nlc3MobG9jYWxQYXRoKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN1Y2Nlc3M6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgQUkgY3VzdG9taXphdGlvbiBlbGVtZW50IGFscmVhZHkgZXhpc3RzOiAke2ZpbGVuYW1lfVxcblxcblRoZSBlbGVtZW50IGhhcyBhbHJlYWR5IGJlZW4gaW5zdGFsbGVkLmBcbiAgICAgIH07XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBGaWxlIGRvZXNuJ3QgZXhpc3QsIHByb2NlZWQgd2l0aCBpbnN0YWxsYXRpb25cbiAgICB9XG4gICAgXG4gICAgLy8gU1RFUCAzOiBBTEwgVkFMSURBVElPTiBDT01QTEVURSAtIE5PVyBQRVJGT1JNIEFUT01JQyBXUklURSBPUEVSQVRJT05cbiAgICAvLyBTRUNVUklUWSBGSVg6IFVzZSBhdG9taWMgd3JpdGUgdG8gcHJldmVudCBwYXJ0aWFsIGZpbGUgY29ycnVwdGlvbiBhbmRcbiAgICAvLyBlbnN1cmUgY2xlYW51cCBvbiBhbnkgZmFpbHVyZSBkdXJpbmcgdGhlIHdyaXRlIHByb2Nlc3NcbiAgICBhd2FpdCB0aGlzLmF0b21pY1dyaXRlRmlsZShsb2NhbFBhdGgsIHNhbml0aXplZENvbnRlbnQpO1xuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgbWVzc2FnZTogYEFJIGN1c3RvbWl6YXRpb24gZWxlbWVudCBpbnN0YWxsZWQgc3VjY2Vzc2Z1bGx5IWAsXG4gICAgICBtZXRhZGF0YSxcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgZWxlbWVudFR5cGVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEF0b21pYyBmaWxlIHdyaXRlIG9wZXJhdGlvbiB3aXRoIGd1YXJhbnRlZWQgY2xlYW51cCBvbiBmYWlsdXJlXG4gICAqIFxuICAgKiBTRUNVUklUWSBGSVg6IFRoaXMgbWV0aG9kIGVuc3VyZXMgdGhhdCBmaWxlIHdyaXRlcyBhcmUgYXRvbWljIGFuZCBhbnlcbiAgICogZmFpbHVyZXMgZHVyaW5nIHRoZSB3cml0ZSBwcm9jZXNzIHdpbGwgbm90IGxlYXZlIHBhcnRpYWwgb3IgY29ycnVwdGVkXG4gICAqIGZpbGVzIG9uIHRoZSBmaWxlc3lzdGVtLiBVc2VzIHRlbXBvcmFyeSBmaWxlICsgcmVuYW1lIGZvciBhdG9taWNpdHkuXG4gICAqIFxuICAgKiBAcGFyYW0gZGVzdGluYXRpb24gLSBGaW5hbCBkZXN0aW5hdGlvbiBwYXRoIGZvciB0aGUgZmlsZVxuICAgKiBAcGFyYW0gY29udGVudCAtIENvbnRlbnQgdG8gd3JpdGUgdG8gdGhlIGZpbGVcbiAgICogQHRocm93cyBFcnJvciBpZiB3cml0ZSBvcGVyYXRpb24gZmFpbHMgKHdpdGggZ3VhcmFudGVlZCBjbGVhbnVwKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBhdG9taWNXcml0ZUZpbGUoZGVzdGluYXRpb246IHN0cmluZywgY29udGVudDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gR2VuZXJhdGUgdW5pcXVlIHRlbXBvcmFyeSBmaWxlIG5hbWUgdG8gYXZvaWQgY29sbGlzaW9uc1xuICAgIGNvbnN0IHRlbXBGaWxlID0gYCR7ZGVzdGluYXRpb259LnRtcC4ke0RhdGUubm93KCl9LiR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpfWA7XG4gICAgXG4gICAgdHJ5IHtcbiAgICAgIC8vIFNFQ1VSSVRZOiBXcml0ZSB0byB0ZW1wb3JhcnkgZmlsZSBmaXJzdFxuICAgICAgLy8gSWYgdGhpcyBmYWlscywgbm8gZmlsZXMgYXJlIGxlZnQgb24gZGlza1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBGaWxlLCBjb250ZW50LCAndXRmLTgnKTtcbiAgICAgIFxuICAgICAgLy8gU0VDVVJJVFk6IEF0b21pYyByZW5hbWUgb3BlcmF0aW9uXG4gICAgICAvLyBPbiBtb3N0IGZpbGVzeXN0ZW1zLCByZW5hbWUgaXMgYXRvbWljIC0gdGhlIGZpbGUgYXBwZWFycyB3aXRoIGNvbXBsZXRlIGNvbnRlbnRcbiAgICAgIC8vIG9yIGRvZXNuJ3QgYXBwZWFyIGF0IGFsbC4gVGhpcyBwcmV2ZW50cyBwYXJ0aWFsIGZpbGUgY29ycnVwdGlvbi5cbiAgICAgIGF3YWl0IGZzLnJlbmFtZSh0ZW1wRmlsZSwgZGVzdGluYXRpb24pO1xuICAgICAgXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFNFQ1VSSVRZOiBHdWFyYW50ZWVkIGNsZWFudXAgb2YgdGVtcG9yYXJ5IGZpbGUgb24gQU5ZIGZhaWx1cmVcbiAgICAgIC8vIFRoaXMgZW5zdXJlcyBubyB0ZW1wb3JhcnkgZmlsZXMgYXJlIGxlZnQgYmVoaW5kIGV2ZW4gaWYgdGhlXG4gICAgICAvLyByZW5hbWUgb3BlcmF0aW9uIGZhaWxzIGFmdGVyIHN1Y2Nlc3NmdWwgd3JpdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IGZzLnVubGluayh0ZW1wRmlsZSk7XG4gICAgICB9IGNhdGNoIChjbGVhbnVwRXJyb3IpIHtcbiAgICAgICAgLy8gSWdub3JlIGNsZWFudXAgZXJyb3JzIC0gdGhlIGZpbGUgbWF5IG5vdCBleGlzdCBpZiB3cml0ZUZpbGUgZmFpbGVkXG4gICAgICAgIC8vIFRoZSBvcmlnaW5hbCBlcnJvciBpcyBtb3JlIGltcG9ydGFudCB0byBwcm9wYWdhdGVcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gUmUtdGhyb3cgdGhlIG9yaWdpbmFsIGVycm9yIHRvIG1haW50YWluIGVycm9yIGhhbmRsaW5nIHNlbWFudGljc1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIFxuICAvKipcbiAgICogR2V0IEVsZW1lbnRUeXBlIGZyb20gc3RyaW5nXG4gICAqL1xuICBwcml2YXRlIGdldEVsZW1lbnRUeXBlRnJvbVN0cmluZyh0eXBlU3RyOiBzdHJpbmcpOiBFbGVtZW50VHlwZSB7XG4gICAgY29uc3QgdHlwZU1hcDogUmVjb3JkPHN0cmluZywgRWxlbWVudFR5cGU+ID0ge1xuICAgICAgJ3BlcnNvbmFzJzogRWxlbWVudFR5cGUuUEVSU09OQSxcbiAgICAgICdza2lsbHMnOiBFbGVtZW50VHlwZS5TS0lMTCxcbiAgICAgICd0ZW1wbGF0ZXMnOiBFbGVtZW50VHlwZS5URU1QTEFURSxcbiAgICAgICdhZ2VudHMnOiBFbGVtZW50VHlwZS5BR0VOVFxuICAgIH07XG4gICAgXG4gICAgY29uc3QgZWxlbWVudFR5cGUgPSB0eXBlTWFwW3R5cGVTdHJdO1xuICAgIGlmICghZWxlbWVudFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBlbGVtZW50IHR5cGU6ICR7dHlwZVN0cn0uIFZhbGlkIHR5cGVzOiAke09iamVjdC5rZXlzKHR5cGVNYXApLmpvaW4oJywgJyl9YCk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBlbGVtZW50VHlwZTtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZvcm1hdCBpbnN0YWxsYXRpb24gc3VjY2VzcyBtZXNzYWdlXG4gICAqL1xuICBmb3JtYXRJbnN0YWxsU3VjY2VzcyhtZXRhZGF0YTogSUVsZW1lbnRNZXRhZGF0YSwgZmlsZW5hbWU6IHN0cmluZywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlKTogc3RyaW5nIHtcbiAgICBjb25zdCB0eXBlRW1vamlzOiBSZWNvcmQ8RWxlbWVudFR5cGUsIHN0cmluZz4gPSB7XG4gICAgICBbRWxlbWVudFR5cGUuUEVSU09OQV06ICfwn46tJyxcbiAgICAgIFtFbGVtZW50VHlwZS5TS0lMTF06ICfwn46vJyxcbiAgICAgIFtFbGVtZW50VHlwZS5URU1QTEFURV06ICfwn5OEJyxcbiAgICAgIFtFbGVtZW50VHlwZS5BR0VOVF06ICfwn6SWJyxcbiAgICAgIFtFbGVtZW50VHlwZS5NRU1PUlldOiAn8J+noCcsXG4gICAgICBbRWxlbWVudFR5cGUuRU5TRU1CTEVdOiAn8J+OvCdcbiAgICB9O1xuICAgIFxuICAgIGNvbnN0IGVtb2ppID0gdHlwZUVtb2ppc1tlbGVtZW50VHlwZV0gfHwgJ/Cfk6YnO1xuICAgIGNvbnN0IHR5cGVOYW1lID0gZWxlbWVudFR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBlbGVtZW50VHlwZS5zbGljZSgxKTtcbiAgICBcbiAgICByZXR1cm4gYOKchSAqKkFJIEN1c3RvbWl6YXRpb24gRWxlbWVudCBJbnN0YWxsZWQgU3VjY2Vzc2Z1bGx5ISoqXFxuXFxuYCArXG4gICAgICBgJHtlbW9qaX0gKioke21ldGFkYXRhLm5hbWV9KiogJHttZXRhZGF0YS5hdXRob3IgPyBgYnkgJHttZXRhZGF0YS5hdXRob3J9YCA6ICcnfVxcbmAgK1xuICAgICAgYPCfk4EgVHlwZTogJHt0eXBlTmFtZX1cXG5gICtcbiAgICAgIGDwn5OEIFNhdmVkIGFzOiAke2ZpbGVuYW1lfVxcblxcbmAgK1xuICAgICAgYPCfmoAgKipSZWFkeSB0byB1c2UhKipgO1xuICB9XG59Il19
@@ -8,7 +8,7 @@
8
8
  * - No email submission pathway (GitHub account required)
9
9
  */
10
10
  import { Persona } from '../types/persona.js';
11
- import { RateLimitStatus } from '../update/RateLimiter.js';
11
+ import { RateLimitStatus } from '../utils/RateLimiter.js';
12
12
  export declare class PersonaSubmitter {
13
13
  private rateLimiter;
14
14
  constructor();
@@ -1 +1 @@
1
- {"version":3,"file":"PersonaSubmitter.d.ts","sourceRoot":"","sources":["../../src/collection/PersonaSubmitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAe,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAgBxE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAc;;IAUjC;;;OAGG;IACH,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG;QACzC,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,eAAe,CAAC;KACnC;IAsCD;;OAEG;IACH,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAW,GAAG,MAAM;IAczG;;OAEG;IACH,iCAAiC,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAW,GAAG,MAAM;IAiBlH;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyB/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IASpC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAYvC;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAOhC"}
1
+ {"version":3,"file":"PersonaSubmitter.d.ts","sourceRoot":"","sources":["../../src/collection/PersonaSubmitter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAe,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAgBvE,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,WAAW,CAAc;;IAUjC;;;OAGG;IACH,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG;QACzC,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,eAAe,CAAC;KACnC;IAsCD;;OAEG;IACH,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAW,GAAG,MAAM;IAczG;;OAEG;IACH,iCAAiC,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,GAAE,MAAW,GAAG,MAAM;IAiBlH;;OAEG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyB/B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAMzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAI3B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;OAEG;IACH,OAAO,CAAC,4BAA4B;IASpC;;OAEG;IACH,OAAO,CAAC,+BAA+B;IAYvC;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAOhC"}
@@ -7,7 +7,7 @@
7
7
  * - URL length validation for GitHub limits
8
8
  * - No email submission pathway (GitHub account required)
9
9
  */
10
- import { RateLimiter } from '../update/RateLimiter.js';
10
+ import { RateLimiter } from '../utils/RateLimiter.js';
11
11
  import { SecurityMonitor } from '../security/securityMonitor.js';
12
12
  // Configuration constants
13
13
  const GITHUB_URL_LIMIT = 8192; // GitHub's URL length limit (~8KB)
@@ -190,4 +190,4 @@ export class PersonaSubmitter {
190
190
  `• The review typically takes 2-3 business days`;
191
191
  }
192
192
  }
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYVN1Ym1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL1BlcnNvbmFTdWJtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFHSCxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLDBCQUEwQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSwwQkFBMEI7QUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxtQ0FBbUM7QUFDbEUsTUFBTSxxQkFBcUIsR0FBRyxjQUFjLENBQUM7QUFDN0MsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUM7QUFFMUMsNkJBQTZCO0FBQzdCLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsZUFBZSxFQUFFLElBQUk7SUFDckIsWUFBWSxFQUFFLElBQUk7SUFDbEIsUUFBUSxFQUFFLEdBQUc7SUFDYixZQUFZLEVBQUUsSUFBSTtDQUNWLENBQUM7QUFFWCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLFdBQVcsQ0FBYztJQUVqQztRQUNFLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQ2pDLFdBQVcsRUFBRSxDQUFDO1lBQ2QsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLFNBQVM7WUFDbkMsVUFBVSxFQUFFLEtBQUssQ0FBQyx5Q0FBeUM7U0FDNUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNEOzs7T0FHRztJQUNILHVCQUF1QixDQUFDLE9BQWdCO1FBTXRDLG1CQUFtQjtRQUNuQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXRELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsOEJBQThCO1lBQzlCLGVBQWUsQ0FBQyxnQkFBZ0Is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a0M7WUFDbEMsc0RBQXNEO1lBQ3RELG9EQUFvRDtZQUNwRCwrREFBK0Q7WUFDL0QsNkZBQTZGO1lBQzdGLHFGQUFxRixDQUFDO0lBQzFGLENBQUM7SUFFRDs7T0FFRztJQUNLLHVCQUF1QjtRQUM3QixPQUFPLDBCQUEwQjtZQUMvQixrREFBa0Q7WUFDbEQsNEVBQTRFO1lBQzVFLGdHQUFnRztZQUNoRyxnREFBZ0QsQ0FBQztJQUNyRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN1Ym1pdCBwZXJzb25hcyB0byB0aGUgY29sbGVjdGlvblxuICogSGFuZGxlcyBib3RoIGF1dGhlbnRpY2F0ZWQgYW5kIGFub255bW91cyBzdWJtaXNzaW9uIHdvcmtmbG93c1xuICogXG4gKiBTZWN1cml0eSBGZWF0dXJlczpcbiAqIC0gUmF0ZSBsaW1pdGluZyB0byBwcmV2ZW50IHNwYW0gKDUgc3VibWlzc2lvbnMgcGVyIGhvdXIgcGVyIHNlc3Npb24pXG4gKiAtIFVSTCBsZW5ndGggdmFsaWRhdGlvbiBmb3IgR2l0SHViIGxpbWl0c1xuICogLSBObyBlbWFpbCBzdWJtaXNzaW9uIHBhdGh3YXkgKEdpdEh1YiBhY2NvdW50IHJlcXVpcmVkKVxuICovXG5cbmltcG9ydCB7IFBlcnNvbmEgfSBmcm9tICcuLi90eXBlcy9wZXJzb25hLmpzJztcbmltcG9ydCB7IFJhdGVMaW1pdGVyLCBSYXRlTGltaXRTdGF0dXMgfSBmcm9tICcuLi91cGRhdGUvUmF0ZUxpbWl0ZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcblxuLy8gQ29uZmlndXJhdGlvbiBjb25zdGFudHNcbmNvbnN0IEdJVEhVQl9VUkxfTElNSVQgPSA4MTkyOyAvLyBHaXRIdWIncyBVUkwgbGVuZ3RoIGxpbWl0ICh+OEtCKVxuY29uc3QgQ09MTEVDVElPTl9SRVBPX09XTkVSID0gJ0RvbGxob3VzZU1DUCc7XG5jb25zdCBDT0xMRUNUSU9OX1JFUE9fTkFNRSA9ICdjb2xsZWN0aW9uJztcblxuLy8gQ29tbW9uIHJlc3BvbnNlIGNvbXBvbmVudHNcbmNvbnN0IFJFU1BPTlNFX0NPTVBPTkVOVFMgPSB7XG4gIFNVQk1JU1NJT05fSUNPTjogJ/Cfk6QnLFxuICBQRVJTT05BX0lDT046ICfwn46tJyxcbiAgVElQX0lDT046ICfirZAnLFxuICBQUk9fVElQX0lDT046ICfwn5KhJ1xufSBhcyBjb25zdDtcblxuZXhwb3J0IGNsYXNzIFBlcnNvbmFTdWJtaXR0ZXIge1xuICBwcml2YXRlIHJhdGVMaW1pdGVyOiBSYXRlTGltaXRlcjtcbiAgXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8vIEluaXRpYWxpemUgcmF0ZSBsaW1pdGVyOiA1IHN1Ym1pc3Npb25zIHBlciBob3VyXG4gICAgdGhpcy5yYXRlTGltaXRlciA9IG5ldyBSYXRlTGltaXRlcih7XG4gICAgICBtYXhSZXF1ZXN0czogNSxcbiAgICAgIHdpbmRvd01zOiA2MCAqIDYwICogMTAwMCwgLy8gMSBob3VyXG4gICAgICBtaW5EZWxheU1zOiAxMDAwMCAvLyBNaW5pbXVtIDEwIHNlY29uZHMgYmV0d2VlbiBzdWJtaXNzaW9uc1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBHaXRIdWIgaXNzdWUgZm9yIHBlcnNvbmEgc3VibWlzc2lvblxuICAgKiBJbmNsdWRlcyBVUkwgbGVuZ3RoIHZhbGlkYXRpb24gdG8gY29tcGx5IHdpdGggR2l0SHViJ3MgfjhLQiBsaW1pdFxuICAgKi9cbiAgZ2VuZXJhdGVTdWJtaXNzaW9uSXNzdWUocGVyc29uYTogUGVyc29uYSk6IHsgXG4gICAgaXNzdWVUaXRsZTogc3RyaW5nOyBcbiAgICBpc3N1ZUJvZHk6IHN0cmluZzsgXG4gICAgZ2l0aHViSXNzdWVVcmw6IHN0cmluZztcbiAgICByYXRlTGltaXRTdGF0dXM/OiBSYXRlTGltaXRTdGF0dXM7XG4gIH0ge1xuICAgIC8vIENoZWNrIHJhdGUgbGltaXRcbiAgICBjb25zdCByYXRlTGltaXRTdGF0dXMgPSB0aGlzLnJhdGVMaW1pdGVyLmNoZWNrTGltaXQoKTtcbiAgICBcbiAgICBpZiAoIXJhdGVMaW1pdFN0YXR1cy5hbGxvd2VkKSB7XG4gICAgICAvLyBMb2cgcG90ZW50aWFsIGFidXNlIGF0dGVtcHRcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ1JBVEVfTElNSVRfRVhDRUVERUQnLFxuICAgICAgICBzZXZlcml0eTogJ01FRElVTScsXG4gICAgICAgIHNvdXJjZTogJ1BlcnNvbmFTdWJtaXR0ZXIuZ2VuZXJhdGVTdWJtaXNzaW9uSXNzdWUnLFxuICAgICAgICBkZXRhaWxzOiBgU3VibWlzc2lvbiByYXRlIGxpbWl0IGV4Y2VlZGVkLiBSZXRyeSBhZnRlciAke3JhdGVMaW1pdFN0YXR1cy5yZXRyeUFmdGVyTXN9bXNgXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgU3VibWlzc2lvbiByYXRlIGxpbWl0IGV4Y2VlZGVkLiBQbGVhc2Ugd2FpdCAke01hdGguY2VpbChyYXRlTGltaXRTdGF0dXMucmV0cnlBZnRlck1zISAvIDEwMDApfSBzZWNvbmRzIGJlZm9yZSBzdWJtaXR0aW5nIGFnYWluLiBgICtcbiAgICAgICAgYFRoaXMgbGltaXQgaGVscHMgcHJldmVudCBzcGFtIGFuZCBlbnN1cmVzIHF1YWxpdHkgc3VibWlzc2lvbnMuYFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgaXNzdWVUaXRsZSA9IGBOZXcgUGVyc29uYSBTdWJtaXNzaW9uOiAke3BlcnNvbmEubWV0YWRhdGEubmFtZX1gO1xuICAgIGxldCBpc3N1ZUJvZHkgPSB0aGlzLmJ1aWxkSXNzdWVCb2R5KHBlcnNvbmEpO1xuICAgIFxuICAgIC8vIENoZWNrIFVSTCBsZW5ndGggYW5kIHRydW5jYXRlIGlmIG5lY2Vzc2FyeVxuICAgIGxldCBnaXRodWJJc3N1ZVVybCA9IHRoaXMuYnVpbGRHaXRIdWJJc3N1ZVVybChpc3N1ZVRpdGxlLCBpc3N1ZUJvZHkpO1xuICAgIFxuICAgIC8vIElmIFVSTCBleGNlZWRzIEdpdEh1YidzIGxpbWl0LCB0cnVuY2F0ZSB0aGUgY29udGVudFxuICAgIGlmIChnaXRodWJJc3N1ZVVybC5sZW5ndGggPj0gR0lUSFVCX1VSTF9MSU1JVCkge1xuICAgICAgaXNzdWVCb2R5ID0gdGhpcy5idWlsZFRydW5jYXRlZElzc3VlQm9keShwZXJzb25hKTtcbiAgICAgIGdpdGh1Yklzc3VlVXJsID0gdGhpcy5idWlsZEdpdEh1Yklzc3VlVXJsKGlzc3VlVGl0bGUsIGlzc3VlQm9keSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB7XG4gICAgICBpc3N1ZVRpdGxlLFxuICAgICAgaXNzdWVCb2R5LFxuICAgICAgZ2l0aHViSXNzdWVVcmwsXG4gICAgICByYXRlTGltaXRTdGF0dXNcbiAgICB9O1xuICB9XG4gIFxuICAvKipcbiAgICogRm9ybWF0IHN1Ym1pc3Npb24gcmVzcG9uc2UgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlcnNcbiAgICovXG4gIGZvcm1hdFN1Ym1pc3Npb25SZXNwb25zZShwZXJzb25hOiBQZXJzb25hLCBnaXRodWJJc3N1ZVVybDogc3RyaW5nLCBwZXJzb25hSW5kaWNhdG9yOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5idWlsZFJlc3BvbnNlSGVhZGVyKFxuICAgICAgJ1BlcnNvbmEgU3VibWlzc2lvbiBQcmVwYXJlZCcsXG4gICAgICBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICAnaXMgcmVhZHkgZm9yIGNvbGxlY3Rpb24gc3VibWlzc2lvbiEnLFxuICAgICAgcGVyc29uYUluZGljYXRvclxuICAgICk7XG4gICAgXG4gICAgY29uc3Qgc3RlcHMgPSB0aGlzLmJ1aWxkU3RhbmRhcmRTdWJtaXNzaW9uU3RlcHMoZ2l0aHViSXNzdWVVcmwpO1xuICAgIGNvbnN0IHRpcCA9IGAke1JFU1BPTlNFX0NPTVBPTkVOVFMuVElQX0lDT059ICoqVGlwOioqIFlvdSBjYW4gYWxzbyBzdWJtaXQgdmlhIHB1bGwgcmVxdWVzdCBpZiB5b3UncmUgZmFtaWxpYXIgd2l0aCBHaXQhYDtcbiAgICBcbiAgICByZXR1cm4gYCR7aGVhZGVyfVxcblxcbiR7c3RlcHN9XFxuXFxuJHt0aXB9YDtcbiAgfVxuICBcbiAgLyoqXG4gICAqIEZvcm1hdCBhbm9ueW1vdXMgc3VibWlzc2lvbiByZXNwb25zZSBmb3IgdW5hdXRoZW50aWNhdGVkIHVzZXJzXG4gICAqL1xuICBmb3JtYXRBbm9ueW1vdXNTdWJtaXNzaW9uUmVzcG9uc2UocGVyc29uYTogUGVyc29uYSwgZ2l0aHViSXNzdWVVcmw6IHN0cmluZywgcGVyc29uYUluZGljYXRvcjogc3RyaW5nID0gJycpOiBzdHJpbmcge1xuICAgIGNvbnN0IGhlYWRlciA9IHRoaXMuYnVpbGRSZXNwb25zZUhlYWRlcihcbiAgICAgICdBbm9ueW1vdXMgU3VibWlzc2lvbiBQYXRoIEF2YWlsYWJsZScsXG4gICAgICBwZXJzb25hLm1ldGFkYXRhLm5hbWUsXG4gICAgICAnY2FuIGJlIHN1Ym1pdHRlZCB3aXRob3V0IEdpdEh1YiBhdXRoZW50aWNhdGlvbiEnLFxuICAgICAgcGVyc29uYUluZGljYXRvclxuICAgICk7XG4gICAgXG4gICAgY29uc3QgcHJvY2VzcyA9IHRoaXMuYnVpbGRBbm9ueW1vdXNTdWJtaXNzaW9uUHJvY2VzcyhnaXRodWJJc3N1ZVVybCk7XG4gICAgY29uc3QgbmV4dFN0ZXBzID0gdGhpcy5idWlsZEFub255bW91c05leHRTdGVwcygpO1xuICAgIGNvbnN0IHByb1RpcCA9IGAke1JFU1BPTlNFX0NPTVBPTkVOVFMuUFJPX1RJUF9JQ09OfSAqKlBybyB0aXA6KiogQ3JlYXRpbmcgYSBmcmVlIEdpdEh1YiBhY2NvdW50IHVubG9ja3MgYWRkaXRpb25hbCBmZWF0dXJlcywgYnV0IGl0J3MgY29tcGxldGVseSBvcHRpb25hbCBmb3Igc3VibWlzc2lvbnMhYDtcbiAgICBcbiAgICByZXR1cm4gYCR7aGVhZGVyfVxcblxcbiR7cHJvY2Vzc31cXG5cXG4ke25leHRTdGVwc31cXG5cXG4ke3Byb1RpcH1gO1xuICB9XG5cbiAgLy8gUHJpdmF0ZSBoZWxwZXIgbWV0aG9kcyBmb3IgYnVpbGRpbmcgcmVzcG9uc2UgY29tcG9uZW50c1xuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgZnVsbCBpc3N1ZSBib2R5IHdpdGggYWxsIHBlcnNvbmEgZGV0YWlsc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZElzc3VlQm9keShwZXJzb25hOiBQZXJzb25hKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCMjIFBlcnNvbmEgU3VibWlzc2lvblxcblxcbmAgK1xuICAgICAgYCoqTmFtZToqKiAke3BlcnNvbmEubWV0YWRhdGEubmFtZX1cXG5gICtcbiAgICAgIGAqKkF1dGhvcjoqKiAke3BlcnNvbmEubWV0YWRhdGEuYXV0aG9yIHx8ICdVbmtub3duJ31cXG5gICtcbiAgICAgIGAqKkNhdGVnb3J5OioqICR7cGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeSB8fCAnR2VuZXJhbCd9XFxuYCArXG4gICAgICBgKipEZXNjcmlwdGlvbjoqKiAke3BlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuXFxuYCArXG4gICAgICBgIyMjIFBlcnNvbmEgQ29udGVudDpcXG5gICtcbiAgICAgIGBcXGBcXGBcXGBtYXJrZG93blxcbmAgK1xuICAgICAgYC0tLVxcbmAgK1xuICAgICAgYCR7dGhpcy5zZXJpYWxpemVNZXRhZGF0YShwZXJzb25hLm1ldGFkYXRhKX1cXG5gICtcbiAgICAgIGAtLS1cXG5cXG5gICtcbiAgICAgIGAke3BlcnNvbmEuY29udGVudH1cXG5gICtcbiAgICAgIGBcXGBcXGBcXGBcXG5cXG5gICtcbiAgICAgIGAjIyMgU3VibWlzc2lvbiBEZXRhaWxzOlxcbmAgK1xuICAgICAgYC0gU3VibWl0dGVkIHZpYSBEb2xsaG91c2VNQ1AgY2xpZW50XFxuYCArXG4gICAgICBgLSBGaWxlbmFtZTogJHtwZXJzb25hLmZpbGVuYW1lfVxcbmAgK1xuICAgICAgYC0gVW5pcXVlIElEOiAke3BlcnNvbmEudW5pcXVlX2lkfVxcblxcbmAgK1xuICAgICAgYC0tLVxcbmAgK1xuICAgICAgYCpQbGVhc2UgcmV2aWV3IHRoaXMgcGVyc29uYSBmb3IgaW5jbHVzaW9uIGluIHRoZSBjb2xsZWN0aW9uLipgO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGEgdHJ1bmNhdGVkIGlzc3VlIGJvZHkgdG8gZml0IHdpdGhpbiBVUkwgbGltaXRzXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkVHJ1bmNhdGVkSXNzdWVCb2R5KHBlcnNvbmE6IFBlcnNvbmEpOiBzdHJpbmcge1xuICAgIGNvbnN0IHRydW5jYXRlZENvbnRlbnQgPSBwZXJzb25hLmNvbnRlbnQubGVuZ3RoID4gNTAwIFxuICAgICAgPyBgJHtwZXJzb25hLmNvbnRlbnQuc3Vic3RyaW5nKDAsIDUwMCl9Li4uXFxuXFxuW0NvbnRlbnQgdHJ1bmNhdGVkIGR1ZSB0byBsZW5ndGhdYFxuICAgICAgOiBwZXJzb25hLmNvbnRlbnQ7XG4gICAgXG4gICAgcmV0dXJuIGAjIyBQZXJzb25hIFN1Ym1pc3Npb25cXG5cXG5gICtcbiAgICAgIGAqKk5hbWU6KiogJHtwZXJzb25hLm1ldGFkYXRhLm5hbWV9XFxuYCArXG4gICAgICBgKipBdXRob3I6KiogJHtwZXJzb25hLm1ldGFkYXRhLmF1dGhvciB8fCAnVW5rbm93bid9XFxuYCArXG4gICAgICBgKipDYXRlZ29yeToqKiAke3BlcnNvbmEubWV0YWRhdGEuY2F0ZWdvcnkgfHwgJ0dlbmVyYWwnfVxcbmAgK1xuICAgICAgYCoqRGVzY3JpcHRpb246KiogJHtwZXJzb25hLm1ldGFkYXRhLmRlc2NyaXB0aW9ufVxcblxcbmAgK1xuICAgICAgYCMjIyBQZXJzb25hIENvbnRlbnQgKFRydW5jYXRlZCk6XFxuYCArXG4gICAgICBgXFxgXFxgXFxgbWFya2Rvd25cXG5gICtcbiAgICAgIGAtLS1cXG5gICtcbiAgICAgIGAke3RoaXMuc2VyaWFsaXplTWV0YWRhdGEocGVyc29uYS5tZXRhZGF0YSl9XFxuYCArXG4gICAgICBgLS0tXFxuXFxuYCArXG4gICAgICBgJHt0cnVuY2F0ZWRDb250ZW50fVxcbmAgK1xuICAgICAgYFxcYFxcYFxcYFxcblxcbmAgK1xuICAgICAgYCMjIyBTdWJtaXNzaW9uIERldGFpbHM6XFxuYCArXG4gICAgICBgLSBTdWJtaXR0ZWQgdmlhIERvbGxob3VzZU1DUCBjbGllbnRcXG5gICtcbiAgICAgIGAtIEZpbGVuYW1lOiAke3BlcnNvbmEuZmlsZW5hbWV9XFxuYCArXG4gICAgICBgLSBVbmlxdWUgSUQ6ICR7cGVyc29uYS51bmlxdWVfaWR9XFxuXFxuYCArXG4gICAgICBgLS0tXFxuYCArXG4gICAgICBgKlBsZWFzZSByZXZpZXcgdGhpcyBwZXJzb25hIGZvciBpbmNsdXNpb24gaW4gdGhlIGNvbGxlY3Rpb24uKmA7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIHBlcnNvbmEgbWV0YWRhdGEgdG8gWUFNTCBmb3JtYXRcbiAgICovXG4gIHByaXZhdGUgc2VyaWFsaXplTWV0YWRhdGEobWV0YWRhdGE6IGFueSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKG1ldGFkYXRhKVxuICAgICAgLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBgJHtrZXl9OiAke0FycmF5LmlzQXJyYXkodmFsdWUpID8gSlNPTi5zdHJpbmdpZnkodmFsdWUpIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpfWApXG4gICAgICAuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgdGhlIEdpdEh1YiBpc3N1ZSBVUkxcbiAgICovXG4gIHByaXZhdGUgYnVpbGRHaXRIdWJJc3N1ZVVybCh0aXRsZTogc3RyaW5nLCBib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgaHR0cHM6Ly9naXRodWIuY29tLyR7Q09MTEVDVElPTl9SRVBPX09XTkVSfS8ke0NPTExFQ1RJT05fUkVQT19OQU1FfS9pc3N1ZXMvbmV3P3RpdGxlPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRpdGxlKX0mYm9keT0ke2VuY29kZVVSSUNvbXBvbmVudChib2R5KX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIGNvbW1vbiByZXNwb25zZSBoZWFkZXIgdXNlZCBieSBib3RoIGF1dGhlbnRpY2F0ZWQgYW5kIGFub255bW91cyByZXNwb25zZXNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRSZXNwb25zZUhlYWRlcih0aXRsZTogc3RyaW5nLCBwZXJzb25hTmFtZTogc3RyaW5nLCBzdWJ0aXRsZTogc3RyaW5nLCBwZXJzb25hSW5kaWNhdG9yOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwZXJzb25hSW5kaWNhdG9yfSR7UkVTUE9OU0VfQ09NUE9ORU5UUy5TVUJNSVNTSU9OX0lDT059ICoqJHt0aXRsZX0qKlxcblxcbmAgK1xuICAgICAgYCR7UkVTUE9OU0VfQ09NUE9ORU5UUy5QRVJTT05BX0lDT059ICoqJHtwZXJzb25hTmFtZX0qKiAke3N1YnRpdGxlfWA7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgc3RhbmRhcmQgc3VibWlzc2lvbiBzdGVwcyBmb3IgYXV0aGVudGljYXRlZCB1c2Vyc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFN0YW5kYXJkU3VibWlzc2lvblN0ZXBzKGdpdGh1Yklzc3VlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgKipOZXh0IFN0ZXBzOioqXFxuYCArXG4gICAgICBgMS4gQ2xpY2sgdGhpcyBsaW5rIHRvIGNyZWF0ZSBhIEdpdEh1YiBpc3N1ZTogXFxuYCArXG4gICAgICBgICAgJHtnaXRodWJJc3N1ZVVybH1cXG5cXG5gICtcbiAgICAgIGAyLiBSZXZpZXcgdGhlIHByZS1maWxsZWQgY29udGVudFxcbmAgK1xuICAgICAgYDMuIENsaWNrIFwiU3VibWl0IG5ldyBpc3N1ZVwiXFxuYCArXG4gICAgICBgNC4gVGhlIG1haW50YWluZXJzIHdpbGwgcmV2aWV3IHlvdXIgc3VibWlzc2lvbmA7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5vbnltb3VzIHN1Ym1pc3Npb24gcHJvY2VzcyBpbnN0cnVjdGlvbnNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRBbm9ueW1vdXNTdWJtaXNzaW9uUHJvY2VzcyhnaXRodWJJc3N1ZVVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCoqQW5vbnltb3VzIFN1Ym1pc3Npb24gUHJvY2VzczoqKlxcbmAgK1xuICAgICAgYDEuIENsaWNrIHRoaXMgbGluayB0byBjcmVhdGUgYSBHaXRIdWIgaXNzdWU6XFxuYCArXG4gICAgICBgICAgJHtnaXRodWJJc3N1ZVVybH1cXG5cXG5gICtcbiAgICAgIGAyLiAqKlRvIHN1Ym1pdCB5b3VyIHBlcnNvbmE6KipcXG5gICtcbiAgICAgIGAgICDigKIgWW91J2xsIG5lZWQgYSBHaXRIdWIgYWNjb3VudCAoZnJlZSB0byBjcmVhdGUpXFxuYCArXG4gICAgICBgICAg4oCiIENsaWNrIFwiU3VibWl0IG5ldyBpc3N1ZVwiIHRvIHN1Ym1pdCBkaXJlY3RseVxcbmAgK1xuICAgICAgYCAgIOKAoiBUaGUgZm9ybSBpcyBwcmUtZmlsbGVkIHdpdGggYWxsIHlvdXIgcGVyc29uYSBkZXRhaWxzXFxuXFxuYCArXG4gICAgICBgKipOb3RlOioqIEdpdEh1YiBhY2NvdW50IGlzIHJlcXVpcmVkIGZvciBzdWJtaXNzaW9uIHRvIHByZXZlbnQgc3BhbSBhbmQgbWFpbnRhaW4gcXVhbGl0eS5cXG5gICtcbiAgICAgIGBDcmVhdGluZyBhbiBhY2NvdW50IGlzIGZyZWUgYW5kIHRha2VzIGxlc3MgdGhhbiBhIG1pbnV0ZTogaHR0cHM6Ly9naXRodWIuY29tL3NpZ251cGA7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYW5vbnltb3VzIHN1Ym1pc3Npb24gbmV4dCBzdGVwcyBhbmQgZXhwZWN0YXRpb25zXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkQW5vbnltb3VzTmV4dFN0ZXBzKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAqKldoYXQgaGFwcGVucyBuZXh0OioqXFxuYCArXG4gICAgICBg4oCiIENvbW11bml0eSBtYWludGFpbmVycyByZXZpZXcgYWxsIHN1Ym1pc3Npb25zXFxuYCArXG4gICAgICBg4oCiIEFub255bW91cyBzdWJtaXNzaW9ucyBnZXQgdGhlIHNhbWUgY29uc2lkZXJhdGlvbiBhcyBhdXRoZW50aWNhdGVkIG9uZXNcXG5gICtcbiAgICAgIGDigKIgSWYgYWNjZXB0ZWQsIHlvdXIgcGVyc29uYSBqb2lucyB0aGUgY29sbGVjdGlvbiB3aXRoIGF0dHJpYnV0aW9uIHRvIFwiQ29tbXVuaXR5IENvbnRyaWJ1dG9yXCJcXG5gICtcbiAgICAgIGDigKIgVGhlIHJldmlldyB0eXBpY2FsbHkgdGFrZXMgMi0zIGJ1c2luZXNzIGRheXNgO1xuICB9XG59Il19
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGVyc29uYVN1Ym1pdHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9uL1BlcnNvbmFTdWJtaXR0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFHSCxPQUFPLEVBQUUsV0FBVyxFQUFtQixNQUFNLHlCQUF5QixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVqRSwwQkFBMEI7QUFDMUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsQ0FBQyxtQ0FBbUM7QUFDbEUsTUFBTSxxQkFBcUIsR0FBRyxjQUFjLENBQUM7QUFDN0MsTUFBTSxvQkFBb0IsR0FBRyxZQUFZLENBQUM7QUFFMUMsNkJBQTZCO0FBQzdCLE1BQU0sbUJBQW1CLEdBQUc7SUFDMUIsZUFBZSxFQUFFLElBQUk7SUFDckIsWUFBWSxFQUFFLElBQUk7SUFDbEIsUUFBUSxFQUFFLEdBQUc7SUFDYixZQUFZLEVBQUUsSUFBSTtDQUNWLENBQUM7QUFFWCxNQUFNLE9BQU8sZ0JBQWdCO0lBQ25CLFdBQVcsQ0FBYztJQUVqQztRQUNFLGtEQUFrRDtRQUNsRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDO1lBQ2pDLFdBQVcsRUFBRSxDQUFDO1lBQ2QsUUFBUSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLFNBQVM7WUFDbkMsVUFBVSxFQUFFLEtBQUssQ0FBQyx5Q0FBeUM7U0FDNUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNEOzs7T0FHRztJQUNILHVCQUF1QixDQUFDLE9BQWdCO1FBTXRDLG1CQUFtQjtRQUNuQixNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBRXRELElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0IsOEJBQThCO1lBQzlCLGVBQWUsQ0FBQyxnQkFBZ0Is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a0M7WUFDbEMsc0RBQXNEO1lBQ3RELG9EQUFvRDtZQUNwRCwrREFBK0Q7WUFDL0QsNkZBQTZGO1lBQzdGLHFGQUFxRixDQUFDO0lBQzFGLENBQUM7SUFFRDs7T0FFRztJQUNLLHVCQUF1QjtRQUM3QixPQUFPLDBCQUEwQjtZQUMvQixrREFBa0Q7WUFDbEQsNEVBQTRFO1lBQzVFLGdHQUFnRztZQUNoRyxnREFBZ0QsQ0FBQztJQUNyRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFN1Ym1pdCBwZXJzb25hcyB0byB0aGUgY29sbGVjdGlvblxuICogSGFuZGxlcyBib3RoIGF1dGhlbnRpY2F0ZWQgYW5kIGFub255bW91cyBzdWJtaXNzaW9uIHdvcmtmbG93c1xuICogXG4gKiBTZWN1cml0eSBGZWF0dXJlczpcbiAqIC0gUmF0ZSBsaW1pdGluZyB0byBwcmV2ZW50IHNwYW0gKDUgc3VibWlzc2lvbnMgcGVyIGhvdXIgcGVyIHNlc3Npb24pXG4gKiAtIFVSTCBsZW5ndGggdmFsaWRhdGlvbiBmb3IgR2l0SHViIGxpbWl0c1xuICogLSBObyBlbWFpbCBzdWJtaXNzaW9uIHBhdGh3YXkgKEdpdEh1YiBhY2NvdW50IHJlcXVpcmVkKVxuICovXG5cbmltcG9ydCB7IFBlcnNvbmEgfSBmcm9tICcuLi90eXBlcy9wZXJzb25hLmpzJztcbmltcG9ydCB7IFJhdGVMaW1pdGVyLCBSYXRlTGltaXRTdGF0dXMgfSBmcm9tICcuLi91dGlscy9SYXRlTGltaXRlci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuXG4vLyBDb25maWd1cmF0aW9uIGNvbnN0YW50c1xuY29uc3QgR0lUSFVCX1VSTF9MSU1JVCA9IDgxOTI7IC8vIEdpdEh1YidzIFVSTCBsZW5ndGggbGltaXQgKH44S0IpXG5jb25zdCBDT0xMRUNUSU9OX1JFUE9fT1dORVIgPSAnRG9sbGhvdXNlTUNQJztcbmNvbnN0IENPTExFQ1RJT05fUkVQT19OQU1FID0gJ2NvbGxlY3Rpb24nO1xuXG4vLyBDb21tb24gcmVzcG9uc2UgY29tcG9uZW50c1xuY29uc3QgUkVTUE9OU0VfQ09NUE9ORU5UUyA9IHtcbiAgU1VCTUlTU0lPTl9JQ09OOiAn8J+TpCcsXG4gIFBFUlNPTkFfSUNPTjogJ/Cfjq0nLFxuICBUSVBfSUNPTjogJ+KtkCcsXG4gIFBST19USVBfSUNPTjogJ/CfkqEnXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgY2xhc3MgUGVyc29uYVN1Ym1pdHRlciB7XG4gIHByaXZhdGUgcmF0ZUxpbWl0ZXI6IFJhdGVMaW1pdGVyO1xuICBcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSByYXRlIGxpbWl0ZXI6IDUgc3VibWlzc2lvbnMgcGVyIGhvdXJcbiAgICB0aGlzLnJhdGVMaW1pdGVyID0gbmV3IFJhdGVMaW1pdGVyKHtcbiAgICAgIG1heFJlcXVlc3RzOiA1LFxuICAgICAgd2luZG93TXM6IDYwICogNjAgKiAxMDAwLCAvLyAxIGhvdXJcbiAgICAgIG1pbkRlbGF5TXM6IDEwMDAwIC8vIE1pbmltdW0gMTAgc2Vjb25kcyBiZXR3ZWVuIHN1Ym1pc3Npb25zXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEdlbmVyYXRlIEdpdEh1YiBpc3N1ZSBmb3IgcGVyc29uYSBzdWJtaXNzaW9uXG4gICAqIEluY2x1ZGVzIFVSTCBsZW5ndGggdmFsaWRhdGlvbiB0byBjb21wbHkgd2l0aCBHaXRIdWIncyB+OEtCIGxpbWl0XG4gICAqL1xuICBnZW5lcmF0ZVN1Ym1pc3Npb25Jc3N1ZShwZXJzb25hOiBQZXJzb25hKTogeyBcbiAgICBpc3N1ZVRpdGxlOiBzdHJpbmc7IFxuICAgIGlzc3VlQm9keTogc3RyaW5nOyBcbiAgICBnaXRodWJJc3N1ZVVybDogc3RyaW5nO1xuICAgIHJhdGVMaW1pdFN0YXR1cz86IFJhdGVMaW1pdFN0YXR1cztcbiAgfSB7XG4gICAgLy8gQ2hlY2sgcmF0ZSBsaW1pdFxuICAgIGNvbnN0IHJhdGVMaW1pdFN0YXR1cyA9IHRoaXMucmF0ZUxpbWl0ZXIuY2hlY2tMaW1pdCgpO1xuICAgIFxuICAgIGlmICghcmF0ZUxpbWl0U3RhdHVzLmFsbG93ZWQpIHtcbiAgICAgIC8vIExvZyBwb3RlbnRpYWwgYWJ1c2UgYXR0ZW1wdFxuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnUkFURV9MSU1JVF9FWENFRURFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTUVESVVNJyxcbiAgICAgICAgc291cmNlOiAnUGVyc29uYVN1Ym1pdHRlci5nZW5lcmF0ZVN1Ym1pc3Npb25Jc3N1ZScsXG4gICAgICAgIGRldGFpbHM6IGBTdWJtaXNzaW9uIHJhdGUgbGltaXQgZXhjZWVkZWQuIFJldHJ5IGFmdGVyICR7cmF0ZUxpbWl0U3RhdHVzLnJldHJ5QWZ0ZXJNc31tc2BcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBTdWJtaXNzaW9uIHJhdGUgbGltaXQgZXhjZWVkZWQuIFBsZWFzZSB3YWl0ICR7TWF0aC5jZWlsKHJhdGVMaW1pdFN0YXR1cy5yZXRyeUFmdGVyTXMhIC8gMTAwMCl9IHNlY29uZHMgYmVmb3JlIHN1Ym1pdHRpbmcgYWdhaW4uIGAgK1xuICAgICAgICBgVGhpcyBsaW1pdCBoZWxwcyBwcmV2ZW50IHNwYW0gYW5kIGVuc3VyZXMgcXVhbGl0eSBzdWJtaXNzaW9ucy5gXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBpc3N1ZVRpdGxlID0gYE5ldyBQZXJzb25hIFN1Ym1pc3Npb246ICR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfWA7XG4gICAgbGV0IGlzc3VlQm9keSA9IHRoaXMuYnVpbGRJc3N1ZUJvZHkocGVyc29uYSk7XG4gICAgXG4gICAgLy8gQ2hlY2sgVVJMIGxlbmd0aCBhbmQgdHJ1bmNhdGUgaWYgbmVjZXNzYXJ5XG4gICAgbGV0IGdpdGh1Yklzc3VlVXJsID0gdGhpcy5idWlsZEdpdEh1Yklzc3VlVXJsKGlzc3VlVGl0bGUsIGlzc3VlQm9keSk7XG4gICAgXG4gICAgLy8gSWYgVVJMIGV4Y2VlZHMgR2l0SHViJ3MgbGltaXQsIHRydW5jYXRlIHRoZSBjb250ZW50XG4gICAgaWYgKGdpdGh1Yklzc3VlVXJsLmxlbmd0aCA+PSBHSVRIVUJfVVJMX0xJTUlUKSB7XG4gICAgICBpc3N1ZUJvZHkgPSB0aGlzLmJ1aWxkVHJ1bmNhdGVkSXNzdWVCb2R5KHBlcnNvbmEpO1xuICAgICAgZ2l0aHViSXNzdWVVcmwgPSB0aGlzLmJ1aWxkR2l0SHViSXNzdWVVcmwoaXNzdWVUaXRsZSwgaXNzdWVCb2R5KTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHtcbiAgICAgIGlzc3VlVGl0bGUsXG4gICAgICBpc3N1ZUJvZHksXG4gICAgICBnaXRodWJJc3N1ZVVybCxcbiAgICAgIHJhdGVMaW1pdFN0YXR1c1xuICAgIH07XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBGb3JtYXQgc3VibWlzc2lvbiByZXNwb25zZSBmb3IgYXV0aGVudGljYXRlZCB1c2Vyc1xuICAgKi9cbiAgZm9ybWF0U3VibWlzc2lvblJlc3BvbnNlKHBlcnNvbmE6IFBlcnNvbmEsIGdpdGh1Yklzc3VlVXJsOiBzdHJpbmcsIHBlcnNvbmFJbmRpY2F0b3I6IHN0cmluZyA9ICcnKTogc3RyaW5nIHtcbiAgICBjb25zdCBoZWFkZXIgPSB0aGlzLmJ1aWxkUmVzcG9uc2VIZWFkZXIoXG4gICAgICAnUGVyc29uYSBTdWJtaXNzaW9uIFByZXBhcmVkJyxcbiAgICAgIHBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgICdpcyByZWFkeSBmb3IgY29sbGVjdGlvbiBzdWJtaXNzaW9uIScsXG4gICAgICBwZXJzb25hSW5kaWNhdG9yXG4gICAgKTtcbiAgICBcbiAgICBjb25zdCBzdGVwcyA9IHRoaXMuYnVpbGRTdGFuZGFyZFN1Ym1pc3Npb25TdGVwcyhnaXRodWJJc3N1ZVVybCk7XG4gICAgY29uc3QgdGlwID0gYCR7UkVTUE9OU0VfQ09NUE9ORU5UUy5USVBfSUNPTn0gKipUaXA6KiogWW91IGNhbiBhbHNvIHN1Ym1pdCB2aWEgcHVsbCByZXF1ZXN0IGlmIHlvdSdyZSBmYW1pbGlhciB3aXRoIEdpdCFgO1xuICAgIFxuICAgIHJldHVybiBgJHtoZWFkZXJ9XFxuXFxuJHtzdGVwc31cXG5cXG4ke3RpcH1gO1xuICB9XG4gIFxuICAvKipcbiAgICogRm9ybWF0IGFub255bW91cyBzdWJtaXNzaW9uIHJlc3BvbnNlIGZvciB1bmF1dGhlbnRpY2F0ZWQgdXNlcnNcbiAgICovXG4gIGZvcm1hdEFub255bW91c1N1Ym1pc3Npb25SZXNwb25zZShwZXJzb25hOiBQZXJzb25hLCBnaXRodWJJc3N1ZVVybDogc3RyaW5nLCBwZXJzb25hSW5kaWNhdG9yOiBzdHJpbmcgPSAnJyk6IHN0cmluZyB7XG4gICAgY29uc3QgaGVhZGVyID0gdGhpcy5idWlsZFJlc3BvbnNlSGVhZGVyKFxuICAgICAgJ0Fub255bW91cyBTdWJtaXNzaW9uIFBhdGggQXZhaWxhYmxlJyxcbiAgICAgIHBlcnNvbmEubWV0YWRhdGEubmFtZSxcbiAgICAgICdjYW4gYmUgc3VibWl0dGVkIHdpdGhvdXQgR2l0SHViIGF1dGhlbnRpY2F0aW9uIScsXG4gICAgICBwZXJzb25hSW5kaWNhdG9yXG4gICAgKTtcbiAgICBcbiAgICBjb25zdCBwcm9jZXNzID0gdGhpcy5idWlsZEFub255bW91c1N1Ym1pc3Npb25Qcm9jZXNzKGdpdGh1Yklzc3VlVXJsKTtcbiAgICBjb25zdCBuZXh0U3RlcHMgPSB0aGlzLmJ1aWxkQW5vbnltb3VzTmV4dFN0ZXBzKCk7XG4gICAgY29uc3QgcHJvVGlwID0gYCR7UkVTUE9OU0VfQ09NUE9ORU5UUy5QUk9fVElQX0lDT059ICoqUHJvIHRpcDoqKiBDcmVhdGluZyBhIGZyZWUgR2l0SHViIGFjY291bnQgdW5sb2NrcyBhZGRpdGlvbmFsIGZlYXR1cmVzLCBidXQgaXQncyBjb21wbGV0ZWx5IG9wdGlvbmFsIGZvciBzdWJtaXNzaW9ucyFgO1xuICAgIFxuICAgIHJldHVybiBgJHtoZWFkZXJ9XFxuXFxuJHtwcm9jZXNzfVxcblxcbiR7bmV4dFN0ZXBzfVxcblxcbiR7cHJvVGlwfWA7XG4gIH1cblxuICAvLyBQcml2YXRlIGhlbHBlciBtZXRob2RzIGZvciBidWlsZGluZyByZXNwb25zZSBjb21wb25lbnRzXG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBmdWxsIGlzc3VlIGJvZHkgd2l0aCBhbGwgcGVyc29uYSBkZXRhaWxzXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkSXNzdWVCb2R5KHBlcnNvbmE6IFBlcnNvbmEpOiBzdHJpbmcge1xuICAgIHJldHVybiBgIyMgUGVyc29uYSBTdWJtaXNzaW9uXFxuXFxuYCArXG4gICAgICBgKipOYW1lOioqICR7cGVyc29uYS5tZXRhZGF0YS5uYW1lfVxcbmAgK1xuICAgICAgYCoqQXV0aG9yOioqICR7cGVyc29uYS5tZXRhZGF0YS5hdXRob3IgfHwgJ1Vua25vd24nfVxcbmAgK1xuICAgICAgYCoqQ2F0ZWdvcnk6KiogJHtwZXJzb25hLm1ldGFkYXRhLmNhdGVnb3J5IHx8ICdHZW5lcmFsJ31cXG5gICtcbiAgICAgIGAqKkRlc2NyaXB0aW9uOioqICR7cGVyc29uYS5tZXRhZGF0YS5kZXNjcmlwdGlvbn1cXG5cXG5gICtcbiAgICAgIGAjIyMgUGVyc29uYSBDb250ZW50OlxcbmAgK1xuICAgICAgYFxcYFxcYFxcYG1hcmtkb3duXFxuYCArXG4gICAgICBgLS0tXFxuYCArXG4gICAgICBgJHt0aGlzLnNlcmlhbGl6ZU1ldGFkYXRhKHBlcnNvbmEubWV0YWRhdGEpfVxcbmAgK1xuICAgICAgYC0tLVxcblxcbmAgK1xuICAgICAgYCR7cGVyc29uYS5jb250ZW50fVxcbmAgK1xuICAgICAgYFxcYFxcYFxcYFxcblxcbmAgK1xuICAgICAgYCMjIyBTdWJtaXNzaW9uIERldGFpbHM6XFxuYCArXG4gICAgICBgLSBTdWJtaXR0ZWQgdmlhIERvbGxob3VzZU1DUCBjbGllbnRcXG5gICtcbiAgICAgIGAtIEZpbGVuYW1lOiAke3BlcnNvbmEuZmlsZW5hbWV9XFxuYCArXG4gICAgICBgLSBVbmlxdWUgSUQ6ICR7cGVyc29uYS51bmlxdWVfaWR9XFxuXFxuYCArXG4gICAgICBgLS0tXFxuYCArXG4gICAgICBgKlBsZWFzZSByZXZpZXcgdGhpcyBwZXJzb25hIGZvciBpbmNsdXNpb24gaW4gdGhlIGNvbGxlY3Rpb24uKmA7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYSB0cnVuY2F0ZWQgaXNzdWUgYm9keSB0byBmaXQgd2l0aGluIFVSTCBsaW1pdHNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRUcnVuY2F0ZWRJc3N1ZUJvZHkocGVyc29uYTogUGVyc29uYSk6IHN0cmluZyB7XG4gICAgY29uc3QgdHJ1bmNhdGVkQ29udGVudCA9IHBlcnNvbmEuY29udGVudC5sZW5ndGggPiA1MDAgXG4gICAgICA/IGAke3BlcnNvbmEuY29udGVudC5zdWJzdHJpbmcoMCwgNTAwKX0uLi5cXG5cXG5bQ29udGVudCB0cnVuY2F0ZWQgZHVlIHRvIGxlbmd0aF1gXG4gICAgICA6IHBlcnNvbmEuY29udGVudDtcbiAgICBcbiAgICByZXR1cm4gYCMjIFBlcnNvbmEgU3VibWlzc2lvblxcblxcbmAgK1xuICAgICAgYCoqTmFtZToqKiAke3BlcnNvbmEubWV0YWRhdGEubmFtZX1cXG5gICtcbiAgICAgIGAqKkF1dGhvcjoqKiAke3BlcnNvbmEubWV0YWRhdGEuYXV0aG9yIHx8ICdVbmtub3duJ31cXG5gICtcbiAgICAgIGAqKkNhdGVnb3J5OioqICR7cGVyc29uYS5tZXRhZGF0YS5jYXRlZ29yeSB8fCAnR2VuZXJhbCd9XFxuYCArXG4gICAgICBgKipEZXNjcmlwdGlvbjoqKiAke3BlcnNvbmEubWV0YWRhdGEuZGVzY3JpcHRpb259XFxuXFxuYCArXG4gICAgICBgIyMjIFBlcnNvbmEgQ29udGVudCAoVHJ1bmNhdGVkKTpcXG5gICtcbiAgICAgIGBcXGBcXGBcXGBtYXJrZG93blxcbmAgK1xuICAgICAgYC0tLVxcbmAgK1xuICAgICAgYCR7dGhpcy5zZXJpYWxpemVNZXRhZGF0YShwZXJzb25hLm1ldGFkYXRhKX1cXG5gICtcbiAgICAgIGAtLS1cXG5cXG5gICtcbiAgICAgIGAke3RydW5jYXRlZENvbnRlbnR9XFxuYCArXG4gICAgICBgXFxgXFxgXFxgXFxuXFxuYCArXG4gICAgICBgIyMjIFN1Ym1pc3Npb24gRGV0YWlsczpcXG5gICtcbiAgICAgIGAtIFN1Ym1pdHRlZCB2aWEgRG9sbGhvdXNlTUNQIGNsaWVudFxcbmAgK1xuICAgICAgYC0gRmlsZW5hbWU6ICR7cGVyc29uYS5maWxlbmFtZX1cXG5gICtcbiAgICAgIGAtIFVuaXF1ZSBJRDogJHtwZXJzb25hLnVuaXF1ZV9pZH1cXG5cXG5gICtcbiAgICAgIGAtLS1cXG5gICtcbiAgICAgIGAqUGxlYXNlIHJldmlldyB0aGlzIHBlcnNvbmEgZm9yIGluY2x1c2lvbiBpbiB0aGUgY29sbGVjdGlvbi4qYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJpYWxpemUgcGVyc29uYSBtZXRhZGF0YSB0byBZQU1MIGZvcm1hdFxuICAgKi9cbiAgcHJpdmF0ZSBzZXJpYWxpemVNZXRhZGF0YShtZXRhZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMobWV0YWRhdGEpXG4gICAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IGAke2tleX06ICR7QXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YClcbiAgICAgIC5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCB0aGUgR2l0SHViIGlzc3VlIFVSTFxuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEdpdEh1Yklzc3VlVXJsKHRpdGxlOiBzdHJpbmcsIGJvZHk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBodHRwczovL2dpdGh1Yi5jb20vJHtDT0xMRUNUSU9OX1JFUE9fT1dORVJ9LyR7Q09MTEVDVElPTl9SRVBPX05BTUV9L2lzc3Vlcy9uZXc/dGl0bGU9JHtlbmNvZGVVUklDb21wb25lbnQodGl0bGUpfSZib2R5PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGJvZHkpfWA7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgY29tbW9uIHJlc3BvbnNlIGhlYWRlciB1c2VkIGJ5IGJvdGggYXV0aGVudGljYXRlZCBhbmQgYW5vbnltb3VzIHJlc3BvbnNlc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZFJlc3BvbnNlSGVhZGVyKHRpdGxlOiBzdHJpbmcsIHBlcnNvbmFOYW1lOiBzdHJpbmcsIHN1YnRpdGxlOiBzdHJpbmcsIHBlcnNvbmFJbmRpY2F0b3I6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3BlcnNvbmFJbmRpY2F0b3J9JHtSRVNQT05TRV9DT01QT05FTlRTLlNVQk1JU1NJT05fSUNPTn0gKioke3RpdGxlfSoqXFxuXFxuYCArXG4gICAgICBgJHtSRVNQT05TRV9DT01QT05FTlRTLlBFUlNPTkFfSUNPTn0gKioke3BlcnNvbmFOYW1lfSoqICR7c3VidGl0bGV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBzdGFuZGFyZCBzdWJtaXNzaW9uIHN0ZXBzIGZvciBhdXRoZW50aWNhdGVkIHVzZXJzXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkU3RhbmRhcmRTdWJtaXNzaW9uU3RlcHMoZ2l0aHViSXNzdWVVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAqKk5leHQgU3RlcHM6KipcXG5gICtcbiAgICAgIGAxLiBDbGljayB0aGlzIGxpbmsgdG8gY3JlYXRlIGEgR2l0SHViIGlzc3VlOiBcXG5gICtcbiAgICAgIGAgICAke2dpdGh1Yklzc3VlVXJsfVxcblxcbmAgK1xuICAgICAgYDIuIFJldmlldyB0aGUgcHJlLWZpbGxlZCBjb250ZW50XFxuYCArXG4gICAgICBgMy4gQ2xpY2sgXCJTdWJtaXQgbmV3IGlzc3VlXCJcXG5gICtcbiAgICAgIGA0LiBUaGUgbWFpbnRhaW5lcnMgd2lsbCByZXZpZXcgeW91ciBzdWJtaXNzaW9uYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbm9ueW1vdXMgc3VibWlzc2lvbiBwcm9jZXNzIGluc3RydWN0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBidWlsZEFub255bW91c1N1Ym1pc3Npb25Qcm9jZXNzKGdpdGh1Yklzc3VlVXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgKipBbm9ueW1vdXMgU3VibWlzc2lvbiBQcm9jZXNzOioqXFxuYCArXG4gICAgICBgMS4gQ2xpY2sgdGhpcyBsaW5rIHRvIGNyZWF0ZSBhIEdpdEh1YiBpc3N1ZTpcXG5gICtcbiAgICAgIGAgICAke2dpdGh1Yklzc3VlVXJsfVxcblxcbmAgK1xuICAgICAgYDIuICoqVG8gc3VibWl0IHlvdXIgcGVyc29uYToqKlxcbmAgK1xuICAgICAgYCAgIOKAoiBZb3UnbGwgbmVlZCBhIEdpdEh1YiBhY2NvdW50IChmcmVlIHRvIGNyZWF0ZSlcXG5gICtcbiAgICAgIGAgICDigKIgQ2xpY2sgXCJTdWJtaXQgbmV3IGlzc3VlXCIgdG8gc3VibWl0IGRpcmVjdGx5XFxuYCArXG4gICAgICBgICAg4oCiIFRoZSBmb3JtIGlzIHByZS1maWxsZWQgd2l0aCBhbGwgeW91ciBwZXJzb25hIGRldGFpbHNcXG5cXG5gICtcbiAgICAgIGAqKk5vdGU6KiogR2l0SHViIGFjY291bnQgaXMgcmVxdWlyZWQgZm9yIHN1Ym1pc3Npb24gdG8gcHJldmVudCBzcGFtIGFuZCBtYWludGFpbiBxdWFsaXR5LlxcbmAgK1xuICAgICAgYENyZWF0aW5nIGFuIGFjY291bnQgaXMgZnJlZSBhbmQgdGFrZXMgbGVzcyB0aGFuIGEgbWludXRlOiBodHRwczovL2dpdGh1Yi5jb20vc2lnbnVwYDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBhbm9ueW1vdXMgc3VibWlzc2lvbiBuZXh0IHN0ZXBzIGFuZCBleHBlY3RhdGlvbnNcbiAgICovXG4gIHByaXZhdGUgYnVpbGRBbm9ueW1vdXNOZXh0U3RlcHMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCoqV2hhdCBoYXBwZW5zIG5leHQ6KipcXG5gICtcbiAgICAgIGDigKIgQ29tbXVuaXR5IG1haW50YWluZXJzIHJldmlldyBhbGwgc3VibWlzc2lvbnNcXG5gICtcbiAgICAgIGDigKIgQW5vbnltb3VzIHN1Ym1pc3Npb25zIGdldCB0aGUgc2FtZSBjb25zaWRlcmF0aW9uIGFzIGF1dGhlbnRpY2F0ZWQgb25lc1xcbmAgK1xuICAgICAgYOKAoiBJZiBhY2NlcHRlZCwgeW91ciBwZXJzb25hIGpvaW5zIHRoZSBjb2xsZWN0aW9uIHdpdGggYXR0cmlidXRpb24gdG8gXCJDb21tdW5pdHkgQ29udHJpYnV0b3JcIlxcbmAgK1xuICAgICAgYOKAoiBUaGUgcmV2aWV3IHR5cGljYWxseSB0YWtlcyAyLTMgYnVzaW5lc3MgZGF5c2A7XG4gIH1cbn0iXX0=
@@ -3,6 +3,7 @@
3
3
  */
4
4
  export * from './GitHubClient.js';
5
5
  export * from './CollectionBrowser.js';
6
+ export * from './CollectionIndexManager.js';
6
7
  export * from './CollectionSearch.js';
7
8
  export * from './CollectionSeeder.js';
8
9
  export * from './PersonaDetails.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collection/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/collection/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
@@ -3,9 +3,10 @@
3
3
  */
4
4
  export * from './GitHubClient.js';
5
5
  export * from './CollectionBrowser.js';
6
+ export * from './CollectionIndexManager.js';
6
7
  export * from './CollectionSearch.js';
7
8
  export * from './CollectionSeeder.js';
8
9
  export * from './PersonaDetails.js';
9
10
  export * from './ElementInstaller.js';
10
11
  export * from './PersonaSubmitter.js';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbGxlY3Rpb24gbW9kdWxlIGV4cG9ydHNcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL0dpdEh1YkNsaWVudC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25Ccm93c2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblNlYXJjaC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25TZWVkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9QZXJzb25hRGV0YWlscy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0VsZW1lbnRJbnN0YWxsZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9QZXJzb25hU3VibWl0dGVyLmpzJzsiXX0=
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29sbGVjdGlvbi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx1QkFBdUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29sbGVjdGlvbiBtb2R1bGUgZXhwb3J0c1xuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vR2l0SHViQ2xpZW50LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvbkJyb3dzZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9Db2xsZWN0aW9uSW5kZXhNYW5hZ2VyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vQ29sbGVjdGlvblNlYXJjaC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0NvbGxlY3Rpb25TZWVkZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9QZXJzb25hRGV0YWlscy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL0VsZW1lbnRJbnN0YWxsZXIuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9QZXJzb25hU3VibWl0dGVyLmpzJzsiXX0=