@dollhousemcp/mcp-server 2.0.0-rc.6 → 2.0.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 (238) hide show
  1. package/CHANGELOG.md +52 -61
  2. package/README.github.md +2 -2
  3. package/README.md +2 -2
  4. package/README.md.backup +284 -224
  5. package/README.npm.md +2 -2
  6. package/dist/cache/LRUCache.d.ts +3 -0
  7. package/dist/cache/LRUCache.d.ts.map +1 -1
  8. package/dist/cache/LRUCache.js +36 -26
  9. package/dist/config/env.d.ts +14 -4
  10. package/dist/config/env.d.ts.map +1 -1
  11. package/dist/config/env.js +20 -6
  12. package/dist/di/Container.d.ts +21 -0
  13. package/dist/di/Container.d.ts.map +1 -1
  14. package/dist/di/Container.js +250 -53
  15. package/dist/elements/BaseElement.d.ts.map +1 -1
  16. package/dist/elements/BaseElement.js +5 -10
  17. package/dist/elements/base/BaseElementManager.d.ts +22 -0
  18. package/dist/elements/base/BaseElementManager.d.ts.map +1 -1
  19. package/dist/elements/base/BaseElementManager.js +47 -7
  20. package/dist/elements/memories/Memory.d.ts +1 -0
  21. package/dist/elements/memories/Memory.d.ts.map +1 -1
  22. package/dist/elements/memories/Memory.js +12 -8
  23. package/dist/elements/memories/MemoryManager.d.ts.map +1 -1
  24. package/dist/elements/memories/MemoryManager.js +23 -42
  25. package/dist/elements/memories/MemorySearchIndex.js +2 -2
  26. package/dist/generated/version.d.ts +2 -2
  27. package/dist/generated/version.d.ts.map +1 -1
  28. package/dist/generated/version.js +3 -3
  29. package/dist/handlers/EnhancedIndexHandler.js +6 -6
  30. package/dist/handlers/element-crud/listElements.d.ts +2 -0
  31. package/dist/handlers/element-crud/listElements.d.ts.map +1 -1
  32. package/dist/handlers/element-crud/listElements.js +3 -1
  33. package/dist/handlers/mcp-aql/Gatekeeper.d.ts.map +1 -1
  34. package/dist/handlers/mcp-aql/Gatekeeper.js +23 -17
  35. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts +14 -0
  36. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  37. package/dist/handlers/mcp-aql/MCPAQLHandler.js +110 -14
  38. package/dist/handlers/mcp-aql/OperationRouter.d.ts.map +1 -1
  39. package/dist/handlers/mcp-aql/OperationRouter.js +13 -1
  40. package/dist/handlers/mcp-aql/OperationSchema.d.ts +7 -0
  41. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  42. package/dist/handlers/mcp-aql/OperationSchema.js +52 -1
  43. package/dist/handlers/mcp-aql/evaluatePermission.d.ts +53 -0
  44. package/dist/handlers/mcp-aql/evaluatePermission.d.ts.map +1 -0
  45. package/dist/handlers/mcp-aql/evaluatePermission.js +132 -0
  46. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
  47. package/dist/handlers/mcp-aql/policies/ToolClassification.js +2 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +3 -3
  50. package/dist/logging/LogHooks.js +11 -11
  51. package/dist/logging/LogManager.d.ts +0 -2
  52. package/dist/logging/LogManager.d.ts.map +1 -1
  53. package/dist/logging/LogManager.js +1 -3
  54. package/dist/logging/sinks/MemoryLogSink.d.ts +2 -0
  55. package/dist/logging/sinks/MemoryLogSink.d.ts.map +1 -1
  56. package/dist/logging/sinks/MemoryLogSink.js +12 -3
  57. package/dist/logging/types.d.ts +0 -2
  58. package/dist/logging/types.d.ts.map +1 -1
  59. package/dist/logging/types.js +1 -1
  60. package/dist/metrics/GatekeeperMetricsTracker.d.ts +32 -0
  61. package/dist/metrics/GatekeeperMetricsTracker.d.ts.map +1 -0
  62. package/dist/metrics/GatekeeperMetricsTracker.js +42 -0
  63. package/dist/metrics/MetricsManager.d.ts +47 -0
  64. package/dist/metrics/MetricsManager.d.ts.map +1 -0
  65. package/dist/metrics/MetricsManager.js +232 -0
  66. package/dist/metrics/OperationMetricsTracker.d.ts +32 -0
  67. package/dist/metrics/OperationMetricsTracker.d.ts.map +1 -0
  68. package/dist/metrics/OperationMetricsTracker.js +53 -0
  69. package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts +27 -0
  70. package/dist/metrics/collectors/DefaultElementProviderCollector.d.ts.map +1 -0
  71. package/dist/metrics/collectors/DefaultElementProviderCollector.js +69 -0
  72. package/dist/metrics/collectors/FileLockManagerCollector.d.ts +16 -0
  73. package/dist/metrics/collectors/FileLockManagerCollector.d.ts.map +1 -0
  74. package/dist/metrics/collectors/FileLockManagerCollector.js +51 -0
  75. package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts +16 -0
  76. package/dist/metrics/collectors/GatekeeperMetricsCollector.d.ts.map +1 -0
  77. package/dist/metrics/collectors/GatekeeperMetricsCollector.js +76 -0
  78. package/dist/metrics/collectors/LRUCacheCollector.d.ts +18 -0
  79. package/dist/metrics/collectors/LRUCacheCollector.d.ts.map +1 -0
  80. package/dist/metrics/collectors/LRUCacheCollector.js +95 -0
  81. package/dist/metrics/collectors/OperationMetricsCollector.d.ts +16 -0
  82. package/dist/metrics/collectors/OperationMetricsCollector.d.ts.map +1 -0
  83. package/dist/metrics/collectors/OperationMetricsCollector.js +80 -0
  84. package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts +17 -0
  85. package/dist/metrics/collectors/OperationalTelemetryCollector.d.ts.map +1 -0
  86. package/dist/metrics/collectors/OperationalTelemetryCollector.js +26 -0
  87. package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts +14 -0
  88. package/dist/metrics/collectors/PerformanceMonitorCollector.d.ts.map +1 -0
  89. package/dist/metrics/collectors/PerformanceMonitorCollector.js +141 -0
  90. package/dist/metrics/collectors/SecurityMonitorCollector.d.ts +21 -0
  91. package/dist/metrics/collectors/SecurityMonitorCollector.d.ts.map +1 -0
  92. package/dist/metrics/collectors/SecurityMonitorCollector.js +56 -0
  93. package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts +15 -0
  94. package/dist/metrics/collectors/SecurityTelemetryCollector.d.ts.map +1 -0
  95. package/dist/metrics/collectors/SecurityTelemetryCollector.js +112 -0
  96. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts +16 -0
  97. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.d.ts.map +1 -0
  98. package/dist/metrics/collectors/TriggerMetricsTrackerCollector.js +26 -0
  99. package/dist/metrics/collectors/index.d.ts +11 -0
  100. package/dist/metrics/collectors/index.d.ts.map +1 -0
  101. package/dist/metrics/collectors/index.js +11 -0
  102. package/dist/metrics/sinks/MemoryMetricsSink.d.ts +22 -0
  103. package/dist/metrics/sinks/MemoryMetricsSink.d.ts.map +1 -0
  104. package/dist/metrics/sinks/MemoryMetricsSink.js +121 -0
  105. package/dist/metrics/types.d.ts +98 -0
  106. package/dist/metrics/types.d.ts.map +1 -0
  107. package/dist/metrics/types.js +24 -0
  108. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  109. package/dist/portfolio/DefaultElementProvider.js +1 -7
  110. package/dist/portfolio/EnhancedIndexManager.d.ts.map +1 -1
  111. package/dist/portfolio/EnhancedIndexManager.js +18 -18
  112. package/dist/portfolio/NLPScoringManager.d.ts.map +1 -1
  113. package/dist/portfolio/NLPScoringManager.js +5 -9
  114. package/dist/portfolio/PortfolioIndexManager.js +2 -2
  115. package/dist/portfolio/RelationshipManager.js +2 -2
  116. package/dist/portfolio/VerbTriggerManager.d.ts.map +1 -1
  117. package/dist/portfolio/VerbTriggerManager.js +5 -19
  118. package/dist/portfolio/config/IndexConfig.d.ts.map +1 -1
  119. package/dist/portfolio/config/IndexConfig.js +1 -12
  120. package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.d.ts.map +1 -1
  121. package/dist/portfolio/enhanced-index/ElementDefinitionBuilder.js +3 -15
  122. package/dist/portfolio/enhanced-index/SemanticRelationshipService.d.ts.map +1 -1
  123. package/dist/portfolio/enhanced-index/SemanticRelationshipService.js +2 -16
  124. package/dist/portfolio/types/RelationshipTypes.d.ts.map +1 -1
  125. package/dist/portfolio/types/RelationshipTypes.js +3 -17
  126. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  127. package/dist/security/audit/config/suppressions.js +36 -8
  128. package/dist/security/constants.d.ts.map +1 -1
  129. package/dist/security/constants.js +10 -6
  130. package/dist/security/fileLockManager.d.ts.map +1 -1
  131. package/dist/security/fileLockManager.js +8 -6
  132. package/dist/security/secureYamlParser.d.ts.map +1 -1
  133. package/dist/security/secureYamlParser.js +1 -13
  134. package/dist/security/securityMonitor.d.ts +2 -1
  135. package/dist/security/securityMonitor.d.ts.map +1 -1
  136. package/dist/security/securityMonitor.js +14 -3
  137. package/dist/security/telemetry/SecurityTelemetry.d.ts +16 -0
  138. package/dist/security/telemetry/SecurityTelemetry.d.ts.map +1 -1
  139. package/dist/security/telemetry/SecurityTelemetry.js +30 -2
  140. package/dist/security/tokenManager.d.ts +3 -0
  141. package/dist/security/tokenManager.d.ts.map +1 -1
  142. package/dist/security/tokenManager.js +13 -5
  143. package/dist/security/validation/BackgroundValidator.d.ts.map +1 -1
  144. package/dist/security/validation/BackgroundValidator.js +7 -7
  145. package/dist/server/startup.d.ts.map +1 -1
  146. package/dist/server/startup.js +8 -24
  147. package/dist/server/tools/MCPAQLTools.js +4 -1
  148. package/dist/services/ActivationStore.d.ts.map +1 -1
  149. package/dist/services/ActivationStore.js +9 -3
  150. package/dist/services/FileWatchService.d.ts +1 -0
  151. package/dist/services/FileWatchService.d.ts.map +1 -1
  152. package/dist/services/FileWatchService.js +83 -48
  153. package/dist/services/MetadataService.d.ts.map +1 -1
  154. package/dist/services/MetadataService.js +7 -2
  155. package/dist/services/query/ElementQueryService.d.ts.map +1 -1
  156. package/dist/services/query/ElementQueryService.js +1 -41
  157. package/dist/services/query/PaginationService.d.ts.map +1 -1
  158. package/dist/services/query/PaginationService.js +1 -14
  159. package/dist/services/query/SortService.d.ts.map +1 -1
  160. package/dist/services/query/SortService.js +1 -6
  161. package/dist/services/validation/ValidationService.d.ts.map +1 -1
  162. package/dist/services/validation/ValidationService.js +3 -8
  163. package/dist/storage/ElementStorageLayer.d.ts.map +1 -1
  164. package/dist/storage/ElementStorageLayer.js +5 -2
  165. package/dist/storage/MemoryStorageLayer.d.ts.map +1 -1
  166. package/dist/storage/MemoryStorageLayer.js +5 -2
  167. package/dist/telemetry/OperationalTelemetry.js +2 -2
  168. package/dist/utils/EventDeduplicator.d.ts +44 -0
  169. package/dist/utils/EventDeduplicator.d.ts.map +1 -0
  170. package/dist/utils/EventDeduplicator.js +93 -0
  171. package/dist/utils/FileLock.d.ts.map +1 -1
  172. package/dist/utils/FileLock.js +1 -9
  173. package/dist/utils/PerformanceMonitor.d.ts.map +1 -1
  174. package/dist/utils/PerformanceMonitor.js +5 -5
  175. package/dist/utils/SlidingWindowRateLimiter.d.ts +13 -0
  176. package/dist/utils/SlidingWindowRateLimiter.d.ts.map +1 -0
  177. package/dist/utils/SlidingWindowRateLimiter.js +23 -0
  178. package/dist/web/console/IngestRoutes.d.ts +84 -0
  179. package/dist/web/console/IngestRoutes.d.ts.map +1 -0
  180. package/dist/web/console/IngestRoutes.js +252 -0
  181. package/dist/web/console/LeaderElection.d.ts +89 -0
  182. package/dist/web/console/LeaderElection.d.ts.map +1 -0
  183. package/dist/web/console/LeaderElection.js +205 -0
  184. package/dist/web/console/LeaderForwardingSink.d.ts +61 -0
  185. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -0
  186. package/dist/web/console/LeaderForwardingSink.js +197 -0
  187. package/dist/web/console/SessionNames.d.ts +46 -0
  188. package/dist/web/console/SessionNames.d.ts.map +1 -0
  189. package/dist/web/console/SessionNames.js +257 -0
  190. package/dist/web/console/UnifiedConsole.d.ts +64 -0
  191. package/dist/web/console/UnifiedConsole.d.ts.map +1 -0
  192. package/dist/web/console/UnifiedConsole.js +119 -0
  193. package/dist/web/contentPipeline.d.ts +58 -0
  194. package/dist/web/contentPipeline.d.ts.map +1 -0
  195. package/dist/web/contentPipeline.js +112 -0
  196. package/dist/web/portDiscovery.d.ts +58 -0
  197. package/dist/web/portDiscovery.d.ts.map +1 -0
  198. package/dist/web/portDiscovery.js +143 -0
  199. package/dist/web/public/app.js +148 -60
  200. package/dist/web/public/logs.js +638 -0
  201. package/dist/web/public/metrics.js +682 -0
  202. package/dist/web/public/permissions.js +394 -0
  203. package/dist/web/public/sessions.js +369 -0
  204. package/dist/web/routes/healthRoutes.d.ts +16 -0
  205. package/dist/web/routes/healthRoutes.d.ts.map +1 -0
  206. package/dist/web/routes/healthRoutes.js +29 -0
  207. package/dist/web/routes/logRoutes.d.ts +18 -0
  208. package/dist/web/routes/logRoutes.d.ts.map +1 -0
  209. package/dist/web/routes/logRoutes.js +126 -0
  210. package/dist/web/routes/metricsRoutes.d.ts +17 -0
  211. package/dist/web/routes/metricsRoutes.d.ts.map +1 -0
  212. package/dist/web/routes/metricsRoutes.js +90 -0
  213. package/dist/web/routes/permissionRoutes.d.ts +16 -0
  214. package/dist/web/routes/permissionRoutes.d.ts.map +1 -0
  215. package/dist/web/routes/permissionRoutes.js +133 -0
  216. package/dist/web/routes.d.ts.map +1 -1
  217. package/dist/web/routes.js +309 -339
  218. package/dist/web/server.d.ts +21 -1
  219. package/dist/web/server.d.ts.map +1 -1
  220. package/dist/web/server.js +42 -4
  221. package/dist/web/sinks/WebSSELogSink.d.ts +15 -0
  222. package/dist/web/sinks/WebSSELogSink.d.ts.map +1 -0
  223. package/dist/web/sinks/WebSSELogSink.js +22 -0
  224. package/dist/web/sinks/WebSSEMetricsSink.d.ts +16 -0
  225. package/dist/web/sinks/WebSSEMetricsSink.d.ts.map +1 -0
  226. package/dist/web/sinks/WebSSEMetricsSink.js +23 -0
  227. package/package.json +2 -2
  228. package/server.json +2 -2
  229. package/dist/constants/version.d.ts +0 -3
  230. package/dist/constants/version.d.ts.map +0 -1
  231. package/dist/constants/version.js +0 -4
  232. package/dist/logging/sinks/SSELogSink.d.ts +0 -35
  233. package/dist/logging/sinks/SSELogSink.d.ts.map +0 -1
  234. package/dist/logging/sinks/SSELogSink.js +0 -181
  235. package/dist/logging/viewer/viewerHtml.d.ts +0 -8
  236. package/dist/logging/viewer/viewerHtml.d.ts.map +0 -1
  237. package/dist/logging/viewer/viewerHtml.js +0 -204
  238. package/dist/web/public/public/app.js +0 -1878
@@ -237,7 +237,7 @@ export class MemorySearchIndex {
237
237
  if (this.config.enableContentIndex) {
238
238
  this.contentIndex = new ContentIndex(this.config);
239
239
  }
240
- logger.debug('MemorySearchIndex created', this.config);
240
+ // Config available via stats methods — no need to log on every instantiation
241
241
  }
242
242
  /**
243
243
  * Build or rebuild the index from entries
@@ -687,4 +687,4 @@ export class MemorySearchIndex {
687
687
  }
688
688
  }
689
689
  }
690
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5U2VhcmNoSW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvbWVtb3JpZXMvTWVtb3J5U2VhcmNoSW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUdILE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBcUZwRTs7R0FFRztBQUNILE1BQU0sWUFBWTtJQUNSLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztJQUMvQyxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7SUFDckMsTUFBTSxDQUFvQjtJQUUzQyxZQUFZLE1BQXlCO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxPQUFlLEVBQUUsT0FBZTtRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFdEQsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV0Qyx3QkFBd0I7UUFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN4QyxDQUFDO1lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsV0FBVyxDQUFDLE9BQWU7UUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRW5CLDZCQUE2QjtRQUM3QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLElBQUksT0FBTyxFQUFFLENBQUM7Z0JBQ1osT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFhO1FBQ2xCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7UUFFekMsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM5QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM3QyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNaLEtBQUssTUFBTSxPQUFPLElBQUksT0FBTyxFQUFFLENBQUM7b0JBQzlCLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNLLFlBQVksQ0FBQyxPQUFlLEVBQUUsT0FBOEI7UUFDbEUseUJBQXlCO1FBQ3pCLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxJQUFJLENBQUMseUNBQXlDLEVBQUU7Z0JBQ3JELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTzthQUMxQixDQUFDLENBQUM7WUFFSCxrRUFBa0U7WUFDbEUsZUFBZSxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQixJQUFJLEVBQUUsc0JBQXNCLENBQUMsZ0NBQWdDO2dCQUM3RCxRQUFRLEVBQUUsS0FBSztnQkFDZixNQUFNLEVBQUUsZ0NBQWdDO2dCQUN4QyxPQUFPLEVBQUUsa0RBQWtELE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLGNBQWMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BILFFBQVEsRUFBRTtvQkFDUixPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU87b0JBQ3pCLFVBQVUsRUFBRSxDQUFDLENBQUUsZ0RBQWdEO2lCQUNoRTthQUNGLENBQUMsQ0FBQztZQUVILE9BQU8sSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNuQixDQUFDO1FBRUQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3hELE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFFaEMsd0RBQXdEO1FBQ3hELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRTNDLElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNsQixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2hCLFNBQVMsRUFBRSxDQUFDO2dCQUNaLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUN2RCxNQUFNO2dCQUNSLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLGFBQWE7SUFDVCxPQUFPLEdBQTZDLEVBQUUsQ0FBQztJQUUvRCxRQUFRLENBQUMsT0FBZSxFQUFFLElBQVU7UUFDbEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRWpDLG9DQUFvQztRQUNwQyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUVoQyxPQUFPLElBQUksR0FBRyxLQUFLLEVBQUUsQ0FBQztZQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzNDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxFQUFFLENBQUM7Z0JBQzVDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7UUFFRCw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQWU7UUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQzVELElBQUksS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxXQUFXLENBQUMsSUFBVyxFQUFFLEVBQVM7UUFDaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFM0MsMEJBQTBCO1FBQzFCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBRTlCLE9BQU8sS0FBSyxHQUFHLEdBQUcsRUFBRSxDQUFDO1lBQ25CLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDMUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsR0FBRyxRQUFRLEVBQUUsQ0FBQztnQkFDM0MsS0FBSyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDbEIsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsR0FBRyxHQUFHLENBQUM7WUFDWixDQUFDO1FBQ0gsQ0FBQztRQUVELCtCQUErQjtRQUMvQixLQUFLLElBQUksQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNqRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksS0FBSyxDQUFDLFNBQVMsR0FBRyxNQUFNO2dCQUFFLE1BQU07WUFDcEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDN0IsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxJQUFTO1FBQ25CLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUM1QixDQUFDO0NBQ0Y7QUFFRDs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDWCxNQUFNLENBQW9CO0lBRTNDLFVBQVU7SUFDRixRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7SUFDMUMsWUFBWSxHQUFHLElBQUksR0FBRyxFQUE2QixDQUFDO0lBQ3BELFlBQVksR0FBd0IsSUFBSSxDQUFDO0lBQ3pDLGFBQWEsR0FBRyxJQUFJLGFBQWEsRUFBRSxDQUFDO0lBRTVDLDZCQUE2QjtJQUNyQixZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7SUFFdEQsY0FBYztJQUNOLE9BQU8sR0FBRyxLQUFLLENBQUM7SUFDaEIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixVQUFVLEdBQXlCLElBQUksQ0FBQztJQUN4QyxLQUFLLEdBQXFCO1FBQ2hDLFNBQVMsRUFBRSxLQUFLO1FBQ2hCLFVBQVUsRUFBRSxDQUFDO1FBQ2IsUUFBUSxFQUFFLENBQUM7UUFDWCxTQUFTLEVBQUUsQ0FBQztRQUNaLGdCQUFnQixFQUFFLENBQUM7S0FDcEIsQ0FBQztJQUVGLG9CQUFvQjtJQUNILGNBQWMsQ0FBUztJQUNoQyxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFFN0IsWUFBWSxTQUE0QixFQUFFO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWMsSUFBSSxHQUFHO1lBQzVDLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsS0FBSyxLQUFLO1lBQ3ZELGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxnQkFBZ0IsSUFBSSxHQUFHO1lBQ2hELGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYSxJQUFJLENBQUM7WUFDeEMsaUJBQWlCLEVBQUUsTUFBTSxDQUFDLGlCQUFpQixJQUFJLEtBQUs7WUFDcEQsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXLElBQUksR0FBRztZQUN0QyxpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCLEtBQUssS0FBSztTQUN0RCxDQUFDO1FBRUYsdURBQXVEO1FBQ3ZELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRXJFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxPQUF1QjtRQUN0Qyw4REFBOEQ7UUFDOUQsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN2QyxNQUFNLENBQUMsS0FBSyxDQUFDLDZDQUE2QyxDQUFDLENBQUM7WUFDNUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ3pCLENBQUM7UUFFRCxrREFBa0Q7UUFDbEQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRU8sS0FBSyxDQUFDLGFBQWEsQ0FBQyxPQUF1QjtRQUNqRCw0QkFBNEI7UUFDNUIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQzFELE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRTdCLElBQUksQ0FBQztZQUNILHlCQUF5QjtZQUN6QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFYiw4Q0FBOEM7WUFDOUMsSUFBSSxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDdkQsTUFBTSxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsRUFBRTtvQkFDbkQsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUN4QixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjO2lCQUN0QyxDQUFDLENBQUM7Z0JBQ0gsT0FBTztZQUNULENBQUM7WUFFRCxnQkFBZ0I7WUFDaEIsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM3QixDQUFDO1lBRUQseUJBQXlCO1lBQ3pCLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBRXpCLDRFQUE0RTtZQUM1RSxlQUFlLENBQUMsZ0JBQWdCLENBQUM7Z0JBQy9CLElBQUksRUFBRSxzQkFBc0IsQ0FBQyxjQUFxQixFQUFHLGdDQUFnQztnQkFDckYsUUFBUSxFQUFFLEtBQUs7Z0JBQ2YsTUFBTSxFQUFFLDhCQUE4QjtnQkFDdEMsT0FBTyxFQUFFLCtDQUErQyxPQUFPLENBQUMsSUFBSSxVQUFVO2dCQUM5RSxRQUFRLEVBQUU7b0JBQ1IsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJO29CQUN4QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO29CQUM1QixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2lCQUN4QzthQUNGLENBQUMsQ0FBQztZQUVILGVBQWU7WUFDZixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO1lBQ3pDLElBQUksQ0FBQyxLQUFLLEdBQUc7Z0JBQ1gsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsVUFBVSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUN4QixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJO2dCQUM1QixTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLElBQUksQ0FBQztnQkFDdkMsU0FBUyxFQUFFLElBQUksSUFBSSxFQUFFO2dCQUNyQixXQUFXLEVBQUUsU0FBUztnQkFDdEIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjthQUN4QyxDQUFDO1lBRUYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFFcEIsTUFBTSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixNQUFNLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzNELHlCQUF5QjtZQUN6QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDYixNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7Z0JBQVMsQ0FBQztZQUNULElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRLENBQUMsS0FBa0I7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztRQUUxQixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV4QixNQUFNLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7T0FFRztJQUNILFdBQVcsQ0FBQyxPQUFlO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUFFLE9BQU87UUFFMUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRW5CLHdCQUF3QjtRQUN4QixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDekIsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxPQUFPLEVBQUUsQ0FBQztvQkFDWixPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN4QixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUM1QixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLFlBQVksSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDO1FBQ2xILE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzNELElBQUksY0FBYyxFQUFFLENBQUM7WUFDbkIsY0FBYyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhDLDZCQUE2QjtRQUM3QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV4QyxvQkFBb0I7UUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUV4QixNQUFNLENBQUMsS0FBSyxDQUFDLDBCQUEwQixFQUFFLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLEtBQWtCLEVBQUUsT0FBdUI7UUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQixNQUFNLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUM7WUFDL0QsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsZ0RBQWdEO1FBQ2hELElBQUksWUFBWSxHQUF1QixJQUFJLENBQUM7UUFFNUMsMEJBQTBCO1FBQzFCLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3ZCLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUUsQ0FBQztRQUVELGdDQUFnQztRQUNoQyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztZQUNyQyxLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ3JELElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osSUFBSSxZQUFZLEVBQUUsQ0FBQzt3QkFDakIsd0NBQXdDO3dCQUN4QyxLQUFLLE1BQU0sRUFBRSxJQUFJLE9BQU8sRUFBRSxDQUFDOzRCQUN6QixJQUFJLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQ0FDekIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDckIsQ0FBQzt3QkFDSCxDQUFDO29CQUNILENBQUM7eUJBQU0sQ0FBQzt3QkFDTixlQUFlO3dCQUNmLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQzVDLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxZQUFZLEdBQUcsVUFBVSxDQUFDO1FBQzVCLENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNqRixJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNqQixlQUFlO2dCQUNmLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7Z0JBQ3ZDLEtBQUssTUFBTSxFQUFFLElBQUksWUFBWSxFQUFFLENBQUM7b0JBQzlCLElBQUksV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO3dCQUN4QixZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN2QixDQUFDO2dCQUNILENBQUM7Z0JBQ0QsWUFBWSxHQUFHLFlBQVksQ0FBQztZQUM5QixDQUFDO2lCQUFNLENBQUM7Z0JBQ04sWUFBWSxHQUFHLFdBQVcsQ0FBQztZQUM3QixDQUFDO1FBQ0gsQ0FBQztRQUVELCtCQUErQjtRQUMvQixNQUFNLGFBQWEsR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZO1lBQ3RELENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ3pDLENBQUMsQ0FBQyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUU5QixnQkFBZ0I7UUFDaEIsTUFBTSxPQUFPLEdBQW1CLEVBQUUsQ0FBQztRQUNuQyxNQUFNLGFBQWEsR0FBRyxZQUFZLElBQUksSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFFOUQsS0FBSyxNQUFNLEVBQUUsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUMvQixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxLQUFLO2dCQUFFLFNBQVM7WUFFckIsa0JBQWtCO1lBQ2xCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztZQUVkLDBCQUEwQjtZQUMxQixJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztnQkFDMUIsS0FBSyxJQUFJLGFBQWEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7WUFFRCxrQkFBa0I7WUFDbEIsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQzFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FDcEMsQ0FBQztnQkFDRixLQUFLLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQztZQUM5QixDQUFDO1lBRUQsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDWCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsT0FBTyxFQUFFO29CQUNQLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDcEUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7aUJBQy9DO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELHFDQUFxQztRQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFMUMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLENBQUM7UUFDakMsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUM7UUFFakMsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVEOztPQUVHO0lBQ0ssWUFBWSxDQUFDLEtBQWtCLEVBQUUsT0FBdUI7UUFDOUQsTUFBTSxPQUFPLEdBQW1CLEVBQUUsQ0FBQztRQUVuQyxLQUFLLE1BQU0sQ0FBQyxFQUFFLEtBQUssQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLHNCQUFzQjtZQUN0QixJQUFJLEtBQUssQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxZQUFZLEtBQUssS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUM5RSxTQUFTO1lBQ1gsQ0FBQztZQUVELG1CQUFtQjtZQUNuQixJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUM3RixTQUFTO1lBQ1gsQ0FBQztZQUNELElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLFNBQVMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pGLFNBQVM7WUFDWCxDQUFDO1lBRUQsYUFBYTtZQUNiLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FDeEMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUNwQyxDQUFDO2dCQUNGLElBQUksQ0FBQyxVQUFVO29CQUFFLFNBQVM7WUFDNUIsQ0FBQztZQUVELHlDQUF5QztZQUN6QyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFDZCxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDbEIsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3ZCLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUUsQ0FBQztvQkFDOUQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUNyRCxLQUFLLElBQUksQ0FBQyxDQUFDO29CQUNiLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNYLEtBQUs7Z0JBQ0wsS0FBSztnQkFDTCxPQUFPLEVBQUU7b0JBQ1AsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNyRTthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxvQkFBb0I7UUFDcEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLElBQUksR0FBRyxDQUFDO1FBRWpDLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRDs7T0FFRztJQUNLLFVBQVUsQ0FBQyxFQUFVLEVBQUUsS0FBa0I7UUFDL0MsY0FBYztRQUNkLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUVqQyxtQkFBbUI7UUFDbkIsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3pCLEtBQUssTUFBTSxHQUFHLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUN4QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNiLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO29CQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7Z0JBQzVDLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQztRQUVELHVCQUF1QjtRQUN2QixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFFLFlBQVksSUFBSSxLQUFLLENBQUMsWUFBWSxJQUFJLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDO1FBQ2xILElBQUksY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixjQUFjLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdEQsQ0FBQztRQUNELGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdkIsdUJBQXVCO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELHdCQUF3QjtRQUN4QixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ2hGLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUs7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRztZQUNYLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFVBQVUsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLENBQUM7WUFDWCxTQUFTLEVBQUUsQ0FBQztTQUNiLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxRQUFRO1FBQ04sT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssaUJBQWlCO1FBQ3ZCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUVuQiw0QkFBNEI7UUFDNUIsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUMzQyxVQUFVLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxrQkFBa0I7WUFDaEQsVUFBVSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsb0JBQW9CO1FBQ3ZELENBQUM7UUFFRCxnQ0FBZ0M7UUFDaEMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDdEIsd0NBQXdDO1lBQ3hDLFVBQVUsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDN0MsQ0FBQztRQUVELGlDQUFpQztRQUNqQyxVQUFVLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUMsWUFBWTtRQUV4RCx3QkFBd0I7UUFDeEIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDL0MsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztRQUNqRCxDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztRQUVuQyx3Q0FBd0M7UUFDeEMsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sQ0FBQyxJQUFJLENBQUMscUNBQXFDLEVBQUU7Z0JBQ2pELE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO2dCQUM1QyxPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7YUFDdkQsQ0FBQyxDQUFDO1lBRUgsa0NBQWtDO1lBQ2xDLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssZUFBZTtRQUNyQiwrREFBK0Q7UUFDL0QsdUNBQXVDO1FBQ3ZDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDaEUsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFFMUQsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLGNBQWMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3hDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlCLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO1lBQ2pDLFlBQVksRUFBRSxjQUFjO1lBQzVCLGNBQWMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUk7U0FDdkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7T0FHRztJQUNILFNBQVM7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUNwRCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUc7WUFDaEIsT0FBTyxFQUFFLE9BQU87WUFDaEIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO1lBQ2pCLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDakUsR0FBRztnQkFDSCxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7YUFDckIsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMzRSxLQUFLO2dCQUNMLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQzthQUNyQixDQUFDLENBQUM7WUFDSCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLEVBQUU7WUFDN0Msb0RBQW9EO1lBQ3BELHVDQUF1QztTQUN4QyxDQUFDO1FBRUYsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFRDs7O09BR0c7SUFDSCxXQUFXLENBQUMsSUFBWSxFQUFFLE9BQWlDO1FBQ3pELElBQUksQ0FBQztZQUNILE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbkMsbUJBQW1CO1lBQ25CLElBQUksU0FBUyxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyw4QkFBOEIsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDckUsQ0FBQztZQUVELHlCQUF5QjtZQUN6QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7WUFFYixvQkFBb0I7WUFDcEIsS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDdkMsQ0FBQztZQUVELHdCQUF3QjtZQUN4QixLQUFLLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNwRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxLQUFxQixFQUFFLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDN0QsQ0FBQztZQUVELHlCQUF5QjtZQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFeEQsOENBQThDO1lBQzlDLEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztnQkFDbEMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO29CQUNsRSxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDO1lBRUQsaUVBQWlFO1lBQ2pFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNuQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEQsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDaEQsQ0FBQztZQUNILENBQUM7WUFFRCxlQUFlO1lBQ2YsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDO1lBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBRXBCLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMvRCxxQ0FBcUM7WUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZW1vcnkgU2VhcmNoIEluZGV4IC0gSGlnaC1wZXJmb3JtYW5jZSBpbmRleGVkIHNlYXJjaCBmb3IgTWVtb3J5IGVsZW1lbnRzXG4gKlxuICogQWRkcmVzc2VzIGlzc3VlICM5ODQ6IEltcGxlbWVudCBzZWFyY2ggaW5kZXhpbmcgZm9yIE1lbW9yeSBlbGVtZW50IHNjYWxhYmlsaXR5XG4gKlxuICogRmVhdHVyZXM6XG4gKiAtIFRhZyBpbmRleCBmb3IgTygxKSB0YWctYmFzZWQgcXVlcmllc1xuICogLSBDb250ZW50IGluZGV4IHVzaW5nIGludmVydGVkIGluZGV4IHBhdHRlcm5cbiAqIC0gVGVtcG9yYWwgaW5kZXggZm9yIGRhdGUgcmFuZ2UgcXVlcmllc1xuICogLSBQcml2YWN5IGxldmVsIGluZGV4IGZvciBmaWx0ZXJlZCBhY2Nlc3NcbiAqIC0gSW5jcmVtZW50YWwgaW5kZXggdXBkYXRlc1xuICogLSBPcHRpb25hbCBwZXJzaXN0ZW5jZVxuICogLSBDb25maWd1cmFibGUgdGhyZXNob2xkc1xuICovXG5cbmltcG9ydCB7IE1lbW9yeUVudHJ5IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5pbXBvcnQgeyBQcml2YWN5TGV2ZWwsIE1FTU9SWV9DT05TVEFOVFMsIE1FTU9SWV9TRUNVUklUWV9FVkVOVFMgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscy9sb2dnZXIuanMnO1xuaW1wb3J0IHsgVW5pY29kZVZhbGlkYXRvciB9IGZyb20gJy4uLy4uL3NlY3VyaXR5L3ZhbGlkYXRvcnMvdW5pY29kZVZhbGlkYXRvci5qcyc7XG5pbXBvcnQgeyBTZWN1cml0eU1vbml0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS9zZWN1cml0eU1vbml0b3IuanMnO1xuXG4vLyBNYXAtbGlrZSBpbnRlcmZhY2UgZm9yIG1lbW9yeSBlbnRyaWVzXG50eXBlIE1lbW9yeUVudHJ5TWFwID0gTWFwPHN0cmluZywgTWVtb3J5RW50cnk+IHwge1xuICBoYXM6IChrZXk6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAga2V5czogKCkgPT4gSXRlcmFibGU8c3RyaW5nPjtcbiAgdmFsdWVzOiAoKSA9PiBJdGVyYWJsZTxNZW1vcnlFbnRyeT47XG4gIGdldDogKGtleTogc3RyaW5nKSA9PiBNZW1vcnlFbnRyeSB8IHVuZGVmaW5lZDtcbiAgc2l6ZTogbnVtYmVyO1xuICBbU3ltYm9sLml0ZXJhdG9yXTogKCkgPT4gSXRlcmF0b3I8W3N0cmluZywgTWVtb3J5RW50cnldPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoSW5kZXhDb25maWcge1xuICAvKipcbiAgICogRW5hYmxlIGluZGV4aW5nIHdoZW4gbWVtb3J5IGhhcyBtb3JlIHRoYW4gdGhpcyBtYW55IGVudHJpZXNcbiAgICogRGVmYXVsdDogMTAwXG4gICAqL1xuICBpbmRleFRocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogRW5hYmxlIGNvbnRlbnQgaW5kZXggKG1vcmUgbWVtb3J5IGludGVuc2l2ZSlcbiAgICogRGVmYXVsdDogdHJ1ZVxuICAgKi9cbiAgZW5hYmxlQ29udGVudEluZGV4PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWF4aW11bSBudW1iZXIgb2YgdGVybXMgdG8gaW5kZXggcGVyIGVudHJ5XG4gICAqIERlZmF1bHQ6IDEwMFxuICAgKi9cbiAgbWF4VGVybXNQZXJFbnRyeT86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSB0ZXJtIGxlbmd0aCB0byBpbmRleFxuICAgKiBEZWZhdWx0OiAyXG4gICAqL1xuICBtaW5UZXJtTGVuZ3RoPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgaW5kZXggcGVyc2lzdGVuY2UgdG8gZGlza1xuICAgKiBEZWZhdWx0OiBmYWxzZVxuICAgKi9cbiAgZW5hYmxlUGVyc2lzdGVuY2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG1lbW9yeSB1c2FnZSBpbiBNQlxuICAgKiBEZWZhdWx0OiAxMDBcbiAgICovXG4gIG1heE1lbW9yeU1CPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgTFJVIGV2aWN0aW9uIHdoZW4gbWVtb3J5IGxpbWl0IGlzIHJlYWNoZWRcbiAgICogRGVmYXVsdDogdHJ1ZVxuICAgKi9cbiAgZW5hYmxlTFJVRXZpY3Rpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEluZGV4U3RhdHMge1xuICBpc0luZGV4ZWQ6IGJvb2xlYW47XG4gIGVudHJ5Q291bnQ6IG51bWJlcjtcbiAgdGFnQ291bnQ6IG51bWJlcjtcbiAgdGVybUNvdW50OiBudW1iZXI7XG4gIGxhc3RCdWlsdD86IERhdGU7XG4gIGJ1aWxkVGltZU1zPzogbnVtYmVyO1xuICBtZW1vcnlVc2FnZUJ5dGVzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaFF1ZXJ5IHtcbiAgdGFncz86IHN0cmluZ1tdO1xuICBjb250ZW50Pzogc3RyaW5nO1xuICBkYXRlRnJvbT86IERhdGU7XG4gIGRhdGVUbz86IERhdGU7XG4gIHByaXZhY3lMZXZlbD86IFByaXZhY3lMZXZlbDtcbiAgbGltaXQ/OiBudW1iZXI7XG4gIG9mZnNldD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXN1bHQge1xuICBlbnRyeTogTWVtb3J5RW50cnk7XG4gIHNjb3JlOiBudW1iZXI7XG4gIG1hdGNoZXM6IHtcbiAgICB0YWdzPzogc3RyaW5nW107XG4gICAgdGVybXM/OiBzdHJpbmdbXTtcbiAgfTtcbn1cblxuLyoqXG4gKiBJbnZlcnRlZCBpbmRleCBmb3IgY29udGVudCBzZWFyY2hcbiAqL1xuY2xhc3MgQ29udGVudEluZGV4IHtcbiAgcHJpdmF0ZSB0ZXJtVG9FbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+PigpO1xuICBwcml2YXRlIGVudHJ5VG9UZXJtcyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFNlYXJjaEluZGV4Q29uZmlnO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogU2VhcmNoSW5kZXhDb25maWcpIHtcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gZW50cnkgdG8gdGhlIGNvbnRlbnQgaW5kZXhcbiAgICovXG4gIGFkZEVudHJ5KGVudHJ5SWQ6IHN0cmluZywgY29udGVudDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdGVybXMgPSB0aGlzLmV4dHJhY3RUZXJtcyhjb250ZW50LCB7IGVudHJ5SWQgfSk7XG5cbiAgICAvLyBTdG9yZSB0ZXJtcyBmb3IgdGhpcyBlbnRyeVxuICAgIHRoaXMuZW50cnlUb1Rlcm1zLnNldChlbnRyeUlkLCB0ZXJtcyk7XG5cbiAgICAvLyBVcGRhdGUgaW52ZXJ0ZWQgaW5kZXhcbiAgICBmb3IgKGNvbnN0IHRlcm0gb2YgdGVybXMpIHtcbiAgICAgIGxldCBlbnRyaWVzID0gdGhpcy50ZXJtVG9FbnRyaWVzLmdldCh0ZXJtKTtcbiAgICAgIGlmICghZW50cmllcykge1xuICAgICAgICBlbnRyaWVzID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLnRlcm1Ub0VudHJpZXMuc2V0KHRlcm0sIGVudHJpZXMpO1xuICAgICAgfVxuICAgICAgZW50cmllcy5hZGQoZW50cnlJZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBlbnRyeSBmcm9tIHRoZSBpbmRleFxuICAgKi9cbiAgcmVtb3ZlRW50cnkoZW50cnlJZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdGVybXMgPSB0aGlzLmVudHJ5VG9UZXJtcy5nZXQoZW50cnlJZCk7XG4gICAgaWYgKCF0ZXJtcykgcmV0dXJuO1xuXG4gICAgLy8gUmVtb3ZlIGZyb20gaW52ZXJ0ZWQgaW5kZXhcbiAgICBmb3IgKGNvbnN0IHRlcm0gb2YgdGVybXMpIHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSB0aGlzLnRlcm1Ub0VudHJpZXMuZ2V0KHRlcm0pO1xuICAgICAgaWYgKGVudHJpZXMpIHtcbiAgICAgICAgZW50cmllcy5kZWxldGUoZW50cnlJZCk7XG4gICAgICAgIGlmIChlbnRyaWVzLnNpemUgPT09IDApIHtcbiAgICAgICAgICB0aGlzLnRlcm1Ub0VudHJpZXMuZGVsZXRlKHRlcm0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGVudHJ5IHRlcm1zXG4gICAgdGhpcy5lbnRyeVRvVGVybXMuZGVsZXRlKGVudHJ5SWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCBmb3IgZW50cmllcyBjb250YWluaW5nIHF1ZXJ5IHRlcm1zXG4gICAqL1xuICBzZWFyY2gocXVlcnk6IHN0cmluZyk6IE1hcDxzdHJpbmcsIG51bWJlcj4ge1xuICAgIGNvbnN0IHF1ZXJ5VGVybXMgPSB0aGlzLmV4dHJhY3RUZXJtcyhxdWVyeSk7XG4gICAgY29uc3Qgc2NvcmVzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAgIGZvciAoY29uc3QgdGVybSBvZiBxdWVyeVRlcm1zKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gdGhpcy50ZXJtVG9FbnRyaWVzLmdldCh0ZXJtKTtcbiAgICAgIGlmIChlbnRyaWVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZW50cnlJZCBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgc2NvcmVzLnNldChlbnRyeUlkLCAoc2NvcmVzLmdldChlbnRyeUlkKSB8fCAwKSArIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjb3JlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0IHNlYXJjaGFibGUgdGVybXMgZnJvbSBjb250ZW50XG4gICAqIFNFQ1VSSVRZIEZJWDogQWRkZWQgYXVkaXQgbG9nZ2luZyBmb3IgVW5pY29kZSB2YWxpZGF0aW9uIG9wZXJhdGlvbnNcbiAgICovXG4gIHByaXZhdGUgZXh0cmFjdFRlcm1zKGNvbnRlbnQ6IHN0cmluZywgY29udGV4dD86IHsgZW50cnlJZD86IHN0cmluZyB9KTogU2V0PHN0cmluZz4ge1xuICAgIC8vIE5vcm1hbGl6ZSBmb3Igc2VjdXJpdHlcbiAgICBjb25zdCBub3JtYWxpemVkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUoY29udGVudCk7XG4gICAgaWYgKCFub3JtYWxpemVkLmlzVmFsaWQpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdJbnZhbGlkIFVuaWNvZGUgaW4gY29udGVudCBmb3IgaW5kZXhpbmcnLCB7XG4gICAgICAgIGVudHJ5SWQ6IGNvbnRleHQ/LmVudHJ5SWRcbiAgICAgIH0pO1xuXG4gICAgICAvLyBTRUNVUklUWSBGSVg6IExvZyBzZWN1cml0eSBldmVudCBmb3IgYXVkaXQgdHJhaWwgKERNQ1AtU0VDLTAwNilcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfVU5JQ09ERV9WQUxJREFUSU9OX0ZBSUxFRCxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnlTZWFyY2hJbmRleC5leHRyYWN0VGVybXMnLFxuICAgICAgICBkZXRhaWxzOiBgSW52YWxpZCBVbmljb2RlIGRldGVjdGVkIGR1cmluZyB0ZXJtIGV4dHJhY3Rpb24ke2NvbnRleHQ/LmVudHJ5SWQgPyBgIGZvciBlbnRyeSAke2NvbnRleHQuZW50cnlJZH1gIDogJyd9YCxcbiAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICBlbnRyeUlkOiBjb250ZXh0Py5lbnRyeUlkLFxuICAgICAgICAgIGlzc3VlQ291bnQ6IDAgIC8vIFVuaWNvZGVWYWxpZGF0aW9uUmVzdWx0IGRvZXNuJ3QgZXhwb3NlIGlzc3Vlc1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0ID0gbm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudC50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IHRlcm1zID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAvLyBTaW1wbGUgdG9rZW5pemF0aW9uIChjYW4gYmUgaW1wcm92ZWQgd2l0aCBiZXR0ZXIgTkxQKVxuICAgIGNvbnN0IHdvcmRzID0gdGV4dC5tYXRjaCgvXFxiXFx3K1xcYi9nKSB8fCBbXTtcblxuICAgIGxldCB0ZXJtQ291bnQgPSAwO1xuICAgIGZvciAoY29uc3Qgd29yZCBvZiB3b3Jkcykge1xuICAgICAgaWYgKHdvcmQubGVuZ3RoID49ICh0aGlzLmNvbmZpZy5taW5UZXJtTGVuZ3RoIHx8IDIpKSB7XG4gICAgICAgIHRlcm1zLmFkZCh3b3JkKTtcbiAgICAgICAgdGVybUNvdW50Kys7XG4gICAgICAgIGlmICh0ZXJtQ291bnQgPj0gKHRoaXMuY29uZmlnLm1heFRlcm1zUGVyRW50cnkgfHwgMTAwKSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1zO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy50ZXJtVG9FbnRyaWVzLmNsZWFyKCk7XG4gICAgdGhpcy5lbnRyeVRvVGVybXMuY2xlYXIoKTtcbiAgfVxuXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVybVRvRW50cmllcy5zaXplO1xuICB9XG59XG5cbi8qKlxuICogRGF0ZSByYW5nZSBpbmRleCB1c2luZyBzb3J0ZWQgYXJyYXkgZm9yIGVmZmljaWVudCByYW5nZSBxdWVyaWVzXG4gKi9cbmNsYXNzIFRlbXBvcmFsSW5kZXgge1xuICBwcml2YXRlIGVudHJpZXM6IEFycmF5PHsgaWQ6IHN0cmluZzsgdGltZXN0YW1wOiBudW1iZXIgfT4gPSBbXTtcblxuICBhZGRFbnRyeShlbnRyeUlkOiBzdHJpbmcsIGRhdGU6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcblxuICAgIC8vIEJpbmFyeSBzZWFyY2ggZm9yIGluc2VydGlvbiBwb2ludFxuICAgIGxldCBsZWZ0ID0gMDtcbiAgICBsZXQgcmlnaHQgPSB0aGlzLmVudHJpZXMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGxlZnQgPCByaWdodCkge1xuICAgICAgY29uc3QgbWlkID0gTWF0aC5mbG9vcigobGVmdCArIHJpZ2h0KSAvIDIpO1xuICAgICAgaWYgKHRoaXMuZW50cmllc1ttaWRdLnRpbWVzdGFtcCA8IHRpbWVzdGFtcCkge1xuICAgICAgICBsZWZ0ID0gbWlkICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJpZ2h0ID0gbWlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluc2VydCBhdCBjb3JyZWN0IHBvc2l0aW9uIHRvIG1haW50YWluIHNvcnRcbiAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGxlZnQsIDAsIHsgaWQ6IGVudHJ5SWQsIHRpbWVzdGFtcCB9KTtcbiAgfVxuXG4gIHJlbW92ZUVudHJ5KGVudHJ5SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5lbnRyaWVzLmZpbmRJbmRleChlID0+IGUuaWQgPT09IGVudHJ5SWQpO1xuICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBlbnRyaWVzIHdpdGhpbiBkYXRlIHJhbmdlXG4gICAqL1xuICBzZWFyY2hSYW5nZShmcm9tPzogRGF0ZSwgdG8/OiBEYXRlKTogU2V0PHN0cmluZz4ge1xuICAgIGNvbnN0IHJlc3VsdHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBmcm9tVGltZSA9IGZyb20/LmdldFRpbWUoKSB8fCAwO1xuICAgIGNvbnN0IHRvVGltZSA9IHRvPy5nZXRUaW1lKCkgfHwgRGF0ZS5ub3coKTtcblxuICAgIC8vIEJpbmFyeSBzZWFyY2ggZm9yIHN0YXJ0XG4gICAgbGV0IHN0YXJ0ID0gMDtcbiAgICBsZXQgZW5kID0gdGhpcy5lbnRyaWVzLmxlbmd0aDtcblxuICAgIHdoaWxlIChzdGFydCA8IGVuZCkge1xuICAgICAgY29uc3QgbWlkID0gTWF0aC5mbG9vcigoc3RhcnQgKyBlbmQpIC8gMik7XG4gICAgICBpZiAodGhpcy5lbnRyaWVzW21pZF0udGltZXN0YW1wIDwgZnJvbVRpbWUpIHtcbiAgICAgICAgc3RhcnQgPSBtaWQgKyAxO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5kID0gbWlkO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENvbGxlY3QgYWxsIGVudHJpZXMgaW4gcmFuZ2VcbiAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCB0aGlzLmVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzW2ldO1xuICAgICAgaWYgKGVudHJ5LnRpbWVzdGFtcCA+IHRvVGltZSkgYnJlYWs7XG4gICAgICByZXN1bHRzLmFkZChlbnRyeS5pZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdHM7XG4gIH1cblxuICBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLmVudHJpZXMgPSBbXTtcbiAgfVxuXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcy5sZW5ndGg7XG4gIH1cblxuICBzZXJpYWxpemUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzO1xuICB9XG5cbiAgZGVzZXJpYWxpemUoZGF0YTogYW55KTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzID0gZGF0YSB8fCBbXTtcbiAgfVxufVxuXG4vKipcbiAqIE1haW4gc2VhcmNoIGluZGV4IGZvciBNZW1vcnkgZWxlbWVudHNcbiAqL1xuZXhwb3J0IGNsYXNzIE1lbW9yeVNlYXJjaEluZGV4IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFNlYXJjaEluZGV4Q29uZmlnO1xuXG4gIC8vIEluZGV4ZXNcbiAgcHJpdmF0ZSB0YWdJbmRleCA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcbiAgcHJpdmF0ZSBwcml2YWN5SW5kZXggPSBuZXcgTWFwPFByaXZhY3lMZXZlbCwgU2V0PHN0cmluZz4+KCk7XG4gIHByaXZhdGUgY29udGVudEluZGV4OiBDb250ZW50SW5kZXggfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0ZW1wb3JhbEluZGV4ID0gbmV3IFRlbXBvcmFsSW5kZXgoKTtcblxuICAvLyBDYWNoZWQgZW50cmllcyBmb3Igc2NvcmluZ1xuICBwcml2YXRlIGVudHJpZXNDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBNZW1vcnlFbnRyeT4oKTtcblxuICAvLyBJbmRleCBzdGF0ZVxuICBwcml2YXRlIGlzQnVpbHQgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpc0J1aWxkaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgYnVpbGRRdWV1ZTogUHJvbWlzZTx2b2lkPiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHN0YXRzOiBTZWFyY2hJbmRleFN0YXRzID0ge1xuICAgIGlzSW5kZXhlZDogZmFsc2UsXG4gICAgZW50cnlDb3VudDogMCxcbiAgICB0YWdDb3VudDogMCxcbiAgICB0ZXJtQ291bnQ6IDAsXG4gICAgbWVtb3J5VXNhZ2VCeXRlczogMFxuICB9O1xuXG4gIC8vIE1lbW9yeSBtYW5hZ2VtZW50XG4gIHByaXZhdGUgcmVhZG9ubHkgbWF4TWVtb3J5Qnl0ZXM6IG51bWJlcjtcbiAgcHJpdmF0ZSBtZW1vcnlVc2FnZUJ5dGVzID0gMDtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFNlYXJjaEluZGV4Q29uZmlnID0ge30pIHtcbiAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgIGluZGV4VGhyZXNob2xkOiBjb25maWcuaW5kZXhUaHJlc2hvbGQgfHwgMTAwLFxuICAgICAgZW5hYmxlQ29udGVudEluZGV4OiBjb25maWcuZW5hYmxlQ29udGVudEluZGV4ICE9PSBmYWxzZSxcbiAgICAgIG1heFRlcm1zUGVyRW50cnk6IGNvbmZpZy5tYXhUZXJtc1BlckVudHJ5IHx8IDEwMCxcbiAgICAgIG1pblRlcm1MZW5ndGg6IGNvbmZpZy5taW5UZXJtTGVuZ3RoIHx8IDIsXG4gICAgICBlbmFibGVQZXJzaXN0ZW5jZTogY29uZmlnLmVuYWJsZVBlcnNpc3RlbmNlIHx8IGZhbHNlLFxuICAgICAgbWF4TWVtb3J5TUI6IGNvbmZpZy5tYXhNZW1vcnlNQiB8fCAxMDAsXG4gICAgICBlbmFibGVMUlVFdmljdGlvbjogY29uZmlnLmVuYWJsZUxSVUV2aWN0aW9uICE9PSBmYWxzZVxuICAgIH07XG5cbiAgICAvLyBDb25maWd1cmUgbWVtb3J5IGxpbWl0IChkZWZhdWx0IDEwME1CLCBjb25maWd1cmFibGUpXG4gICAgdGhpcy5tYXhNZW1vcnlCeXRlcyA9ICh0aGlzLmNvbmZpZy5tYXhNZW1vcnlNQiB8fCAxMDApICogMTAyNCAqIDEwMjQ7XG5cbiAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlQ29udGVudEluZGV4KSB7XG4gICAgICB0aGlzLmNvbnRlbnRJbmRleCA9IG5ldyBDb250ZW50SW5kZXgodGhpcy5jb25maWcpO1xuICAgIH1cblxuICAgIGxvZ2dlci5kZWJ1ZygnTWVtb3J5U2VhcmNoSW5kZXggY3JlYXRlZCcsIHRoaXMuY29uZmlnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBvciByZWJ1aWxkIHRoZSBpbmRleCBmcm9tIGVudHJpZXNcbiAgICogRklYOiBBZGRlZCByYWNlIGNvbmRpdGlvbiBwcm90ZWN0aW9uIHdpdGggaXNCdWlsZGluZyBmbGFnIGFuZCBidWlsZCBxdWV1ZVxuICAgKi9cbiAgYXN5bmMgYnVpbGRJbmRleChlbnRyaWVzOiBNZW1vcnlFbnRyeU1hcCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIElmIGFscmVhZHkgYnVpbGRpbmcsIHdhaXQgZm9yIHRoZSBjdXJyZW50IGJ1aWxkIHRvIGNvbXBsZXRlXG4gICAgaWYgKHRoaXMuaXNCdWlsZGluZyAmJiB0aGlzLmJ1aWxkUXVldWUpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnSW5kZXggYnVpbGQgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2FpdGluZy4uLicpO1xuICAgICAgcmV0dXJuIHRoaXMuYnVpbGRRdWV1ZTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgYnVpbGQgcHJvbWlzZSB0byBoYW5kbGUgY29uY3VycmVudCBjYWxsc1xuICAgIHRoaXMuYnVpbGRRdWV1ZSA9IHRoaXMuX2RvQnVpbGRJbmRleChlbnRyaWVzKTtcbiAgICByZXR1cm4gdGhpcy5idWlsZFF1ZXVlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfZG9CdWlsZEluZGV4KGVudHJpZXM6IE1lbW9yeUVudHJ5TWFwKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gUHJldmVudCBjb25jdXJyZW50IGJ1aWxkc1xuICAgIGlmICh0aGlzLmlzQnVpbGRpbmcpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdBdHRlbXB0ZWQgY29uY3VycmVudCBpbmRleCBidWlsZCwgc2tpcHBpbmcnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmlzQnVpbGRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ2xlYXIgZXhpc3RpbmcgaW5kZXhlc1xuICAgICAgdGhpcy5jbGVhcigpO1xuXG4gICAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgaW5kZXggYmFzZWQgb24gdGhyZXNob2xkXG4gICAgICBpZiAoZW50cmllcy5zaXplIDwgKHRoaXMuY29uZmlnLmluZGV4VGhyZXNob2xkIHx8IDEwMCkpIHtcbiAgICAgICAgbG9nZ2VyLmRlYnVnKCdOb3QgYnVpbGRpbmcgaW5kZXggLSBiZWxvdyB0aHJlc2hvbGQnLCB7XG4gICAgICAgICAgZW50cnlDb3VudDogZW50cmllcy5zaXplLFxuICAgICAgICAgIHRocmVzaG9sZDogdGhpcy5jb25maWcuaW5kZXhUaHJlc2hvbGRcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQnVpbGQgaW5kZXhlc1xuICAgICAgZm9yIChjb25zdCBbaWQsIGVudHJ5XSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIHRoaXMuYWRkVG9JbmRleChpZCwgZW50cnkpO1xuICAgICAgfVxuXG4gICAgICAvLyBDYWxjdWxhdGUgbWVtb3J5IHVzYWdlXG4gICAgICB0aGlzLnVwZGF0ZU1lbW9yeVVzYWdlKCk7XG5cbiAgICAgIC8vIFNFQ1VSSVRZIEZJWDogTG9nIHNlY3VyaXR5IGV2ZW50IGZvciBpbmRleCBidWlsZCBvcGVyYXRpb24gKERNQ1AtU0VDLTAwNilcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogTUVNT1JZX1NFQ1VSSVRZX0VWRU5UUy5NRU1PUllfQ1JFQVRFRCBhcyBhbnksICAvLyBVc2luZyBDUkVBVEVEIGZvciBpbmRleCBidWlsZFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ01lbW9yeVNlYXJjaEluZGV4LmJ1aWxkSW5kZXgnLFxuICAgICAgICBkZXRhaWxzOiBgTWVtb3J5IHNlYXJjaCBpbmRleCBidWlsdCBzdWNjZXNzZnVsbHkgd2l0aCAke2VudHJpZXMuc2l6ZX0gZW50cmllc2AsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgZW50cnlDb3VudDogZW50cmllcy5zaXplLFxuICAgICAgICAgIHRhZ0NvdW50OiB0aGlzLnRhZ0luZGV4LnNpemUsXG4gICAgICAgICAgbWVtb3J5VXNhZ2VCeXRlczogdGhpcy5tZW1vcnlVc2FnZUJ5dGVzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBVcGRhdGUgc3RhdHNcbiAgICAgIGNvbnN0IGJ1aWxkVGltZSA9IERhdGUubm93KCkgLSBzdGFydFRpbWU7XG4gICAgICB0aGlzLnN0YXRzID0ge1xuICAgICAgICBpc0luZGV4ZWQ6IHRydWUsXG4gICAgICAgIGVudHJ5Q291bnQ6IGVudHJpZXMuc2l6ZSxcbiAgICAgICAgdGFnQ291bnQ6IHRoaXMudGFnSW5kZXguc2l6ZSxcbiAgICAgICAgdGVybUNvdW50OiB0aGlzLmNvbnRlbnRJbmRleD8uc2l6ZSB8fCAwLFxuICAgICAgICBsYXN0QnVpbHQ6IG5ldyBEYXRlKCksXG4gICAgICAgIGJ1aWxkVGltZU1zOiBidWlsZFRpbWUsXG4gICAgICAgIG1lbW9yeVVzYWdlQnl0ZXM6IHRoaXMubWVtb3J5VXNhZ2VCeXRlc1xuICAgICAgfTtcblxuICAgICAgdGhpcy5pc0J1aWx0ID0gdHJ1ZTtcblxuICAgICAgbG9nZ2VyLmluZm8oJ01lbW9yeSBzZWFyY2ggaW5kZXggYnVpbHQnLCB0aGlzLnN0YXRzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gYnVpbGQgbWVtb3J5IHNlYXJjaCBpbmRleCcsIGVycm9yKTtcbiAgICAgIC8vIFJlc2V0IHN0YXRlIG9uIGZhaWx1cmVcbiAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzQnVpbGRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuYnVpbGRRdWV1ZSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNpbmdsZSBlbnRyeSB0byB0aGUgaW5kZXggKGluY3JlbWVudGFsIHVwZGF0ZSlcbiAgICovXG4gIGFkZEVudHJ5KGVudHJ5OiBNZW1vcnlFbnRyeSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0J1aWx0KSByZXR1cm47XG5cbiAgICB0aGlzLmFkZFRvSW5kZXgoZW50cnkuaWQsIGVudHJ5KTtcbiAgICB0aGlzLnN0YXRzLmVudHJ5Q291bnQrKztcblxuICAgIGxvZ2dlci5kZWJ1ZygnRW50cnkgYWRkZWQgdG8gaW5kZXgnLCB7IGlkOiBlbnRyeS5pZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZW50cnkgZnJvbSB0aGUgaW5kZXhcbiAgICovXG4gIHJlbW92ZUVudHJ5KGVudHJ5SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0J1aWx0KSByZXR1cm47XG5cbiAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW50cmllc0NhY2hlLmdldChlbnRyeUlkKTtcbiAgICBpZiAoIWVudHJ5KSByZXR1cm47XG5cbiAgICAvLyBSZW1vdmUgZnJvbSB0YWcgaW5kZXhcbiAgICBpZiAoZW50cnkubWV0YWRhdGE/LnRhZ3MpIHtcbiAgICAgIGZvciAoY29uc3QgdGFnIG9mIGVudHJ5Lm1ldGFkYXRhLnRhZ3MpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IHRoaXMudGFnSW5kZXguZ2V0KHRhZyk7XG4gICAgICAgIGlmIChlbnRyaWVzKSB7XG4gICAgICAgICAgZW50cmllcy5kZWxldGUoZW50cnlJZCk7XG4gICAgICAgICAgaWYgKGVudHJpZXMuc2l6ZSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy50YWdJbmRleC5kZWxldGUodGFnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBwcml2YWN5IGluZGV4XG4gICAgY29uc3QgcHJpdmFjeUxldmVsID0gZW50cnkubWV0YWRhdGE/LnByaXZhY3lMZXZlbCB8fCBlbnRyeS5wcml2YWN5TGV2ZWwgfHwgTUVNT1JZX0NPTlNUQU5UUy5ERUZBVUxUX1BSSVZBQ1lfTEVWRUw7XG4gICAgY29uc3QgcHJpdmFjeUVudHJpZXMgPSB0aGlzLnByaXZhY3lJbmRleC5nZXQocHJpdmFjeUxldmVsKTtcbiAgICBpZiAocHJpdmFjeUVudHJpZXMpIHtcbiAgICAgIHByaXZhY3lFbnRyaWVzLmRlbGV0ZShlbnRyeUlkKTtcbiAgICB9XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBjb250ZW50IGluZGV4XG4gICAgdGhpcy5jb250ZW50SW5kZXg/LnJlbW92ZUVudHJ5KGVudHJ5SWQpO1xuXG4gICAgLy8gUmVtb3ZlIGZyb20gdGVtcG9yYWwgaW5kZXhcbiAgICB0aGlzLnRlbXBvcmFsSW5kZXgucmVtb3ZlRW50cnkoZW50cnlJZCk7XG5cbiAgICAvLyBSZW1vdmUgZnJvbSBjYWNoZVxuICAgIHRoaXMuZW50cmllc0NhY2hlLmRlbGV0ZShlbnRyeUlkKTtcblxuICAgIHRoaXMuc3RhdHMuZW50cnlDb3VudC0tO1xuXG4gICAgbG9nZ2VyLmRlYnVnKCdFbnRyeSByZW1vdmVkIGZyb20gaW5kZXgnLCB7IGlkOiBlbnRyeUlkIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlYXJjaCB0aGUgaW5kZXggd2l0aCBtdWx0aXBsZSBjcml0ZXJpYVxuICAgKi9cbiAgc2VhcmNoKHF1ZXJ5OiBTZWFyY2hRdWVyeSwgZW50cmllczogTWVtb3J5RW50cnlNYXApOiBTZWFyY2hSZXN1bHRbXSB7XG4gICAgaWYgKCF0aGlzLmlzQnVpbHQpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZygnSW5kZXggbm90IGJ1aWx0LCBmYWxsaW5nIGJhY2sgdG8gbGluZWFyIHNlYXJjaCcpO1xuICAgICAgcmV0dXJuIHRoaXMubGluZWFyU2VhcmNoKHF1ZXJ5LCBlbnRyaWVzKTtcbiAgICB9XG5cbiAgICAvLyBTdGFydCB3aXRoIGFsbCBlbnRyaWVzIG9yIGZpbHRlcmVkIGJ5IHByaXZhY3lcbiAgICBsZXQgY2FuZGlkYXRlSWRzOiBTZXQ8c3RyaW5nPiB8IG51bGwgPSBudWxsO1xuXG4gICAgLy8gRmlsdGVyIGJ5IHByaXZhY3kgbGV2ZWxcbiAgICBpZiAocXVlcnkucHJpdmFjeUxldmVsKSB7XG4gICAgICBjYW5kaWRhdGVJZHMgPSBuZXcgU2V0KHRoaXMucHJpdmFjeUluZGV4LmdldChxdWVyeS5wcml2YWN5TGV2ZWwpIHx8IFtdKTtcbiAgICB9XG5cbiAgICAvLyBGaWx0ZXIgYnkgdGFncyAoaW50ZXJzZWN0aW9uKVxuICAgIGlmIChxdWVyeS50YWdzICYmIHF1ZXJ5LnRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgdGFnUmVzdWx0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgZm9yIChjb25zdCB0YWcgb2YgcXVlcnkudGFncykge1xuICAgICAgICBjb25zdCBlbnRyaWVzID0gdGhpcy50YWdJbmRleC5nZXQodGFnLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBpZiAoZW50cmllcykge1xuICAgICAgICAgIGlmIChjYW5kaWRhdGVJZHMpIHtcbiAgICAgICAgICAgIC8vIEludGVyc2VjdGlvbiB3aXRoIGV4aXN0aW5nIGNhbmRpZGF0ZXNcbiAgICAgICAgICAgIGZvciAoY29uc3QgaWQgb2YgZW50cmllcykge1xuICAgICAgICAgICAgICBpZiAoY2FuZGlkYXRlSWRzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICB0YWdSZXN1bHRzLmFkZChpZCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmlyc3QgZmlsdGVyXG4gICAgICAgICAgICBlbnRyaWVzLmZvckVhY2goaWQgPT4gdGFnUmVzdWx0cy5hZGQoaWQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhbmRpZGF0ZUlkcyA9IHRhZ1Jlc3VsdHM7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIGJ5IGRhdGUgcmFuZ2VcbiAgICBpZiAocXVlcnkuZGF0ZUZyb20gfHwgcXVlcnkuZGF0ZVRvKSB7XG4gICAgICBjb25zdCBkYXRlUmVzdWx0cyA9IHRoaXMudGVtcG9yYWxJbmRleC5zZWFyY2hSYW5nZShxdWVyeS5kYXRlRnJvbSwgcXVlcnkuZGF0ZVRvKTtcbiAgICAgIGlmIChjYW5kaWRhdGVJZHMpIHtcbiAgICAgICAgLy8gSW50ZXJzZWN0aW9uXG4gICAgICAgIGNvbnN0IGludGVyc2VjdGlvbiA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGNhbmRpZGF0ZUlkcykge1xuICAgICAgICAgIGlmIChkYXRlUmVzdWx0cy5oYXMoaWQpKSB7XG4gICAgICAgICAgICBpbnRlcnNlY3Rpb24uYWRkKGlkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2FuZGlkYXRlSWRzID0gaW50ZXJzZWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FuZGlkYXRlSWRzID0gZGF0ZVJlc3VsdHM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2NvcmUgYnkgY29udGVudCBpZiBwcm92aWRlZFxuICAgIGNvbnN0IGNvbnRlbnRTY29yZXMgPSBxdWVyeS5jb250ZW50ICYmIHRoaXMuY29udGVudEluZGV4XG4gICAgICA/IHRoaXMuY29udGVudEluZGV4LnNlYXJjaChxdWVyeS5jb250ZW50KVxuICAgICAgOiBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpO1xuXG4gICAgLy8gQnVpbGQgcmVzdWx0c1xuICAgIGNvbnN0IHJlc3VsdHM6IFNlYXJjaFJlc3VsdFtdID0gW107XG4gICAgY29uc3Qgc2VhcmNoRW50cmllcyA9IGNhbmRpZGF0ZUlkcyB8fCBuZXcgU2V0KGVudHJpZXMua2V5cygpKTtcblxuICAgIGZvciAoY29uc3QgaWQgb2Ygc2VhcmNoRW50cmllcykge1xuICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzLmdldChpZCk7XG4gICAgICBpZiAoIWVudHJ5KSBjb250aW51ZTtcblxuICAgICAgLy8gQ2FsY3VsYXRlIHNjb3JlXG4gICAgICBsZXQgc2NvcmUgPSAxO1xuXG4gICAgICAvLyBDb250ZW50IHJlbGV2YW5jZSBzY29yZVxuICAgICAgaWYgKGNvbnRlbnRTY29yZXMuaGFzKGlkKSkge1xuICAgICAgICBzY29yZSArPSBjb250ZW50U2NvcmVzLmdldChpZCkhICogMjtcbiAgICAgIH1cblxuICAgICAgLy8gVGFnIG1hdGNoIGJvbnVzXG4gICAgICBpZiAocXVlcnkudGFncyAmJiBlbnRyeS5tZXRhZGF0YT8udGFncykge1xuICAgICAgICBjb25zdCBtYXRjaGVkVGFncyA9IHF1ZXJ5LnRhZ3MuZmlsdGVyKHRhZyA9PlxuICAgICAgICAgIGVudHJ5Lm1ldGFkYXRhPy50YWdzPy5pbmNsdWRlcyh0YWcpXG4gICAgICAgICk7XG4gICAgICAgIHNjb3JlICs9IG1hdGNoZWRUYWdzLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgZW50cnksXG4gICAgICAgIHNjb3JlLFxuICAgICAgICBtYXRjaGVzOiB7XG4gICAgICAgICAgdGFnczogcXVlcnkudGFncz8uZmlsdGVyKHRhZyA9PiBlbnRyeS5tZXRhZGF0YT8udGFncz8uaW5jbHVkZXModGFnKSksXG4gICAgICAgICAgdGVybXM6IHF1ZXJ5LmNvbnRlbnQgPyBbJ2luZGV4ZWQnXSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTb3J0IGJ5IHNjb3JlIGFuZCBhcHBseSBwYWdpbmF0aW9uXG4gICAgcmVzdWx0cy5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG5cbiAgICBjb25zdCBvZmZzZXQgPSBxdWVyeS5vZmZzZXQgfHwgMDtcbiAgICBjb25zdCBsaW1pdCA9IHF1ZXJ5LmxpbWl0IHx8IDEwMDtcblxuICAgIHJldHVybiByZXN1bHRzLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgbGltaXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhbGxiYWNrIGxpbmVhciBzZWFyY2ggd2hlbiBpbmRleCBpcyBub3QgYXZhaWxhYmxlXG4gICAqL1xuICBwcml2YXRlIGxpbmVhclNlYXJjaChxdWVyeTogU2VhcmNoUXVlcnksIGVudHJpZXM6IE1lbW9yeUVudHJ5TWFwKTogU2VhcmNoUmVzdWx0W10ge1xuICAgIGNvbnN0IHJlc3VsdHM6IFNlYXJjaFJlc3VsdFtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IFssIGVudHJ5XSBvZiBlbnRyaWVzKSB7XG4gICAgICAvLyBDaGVjayBwcml2YWN5IGxldmVsXG4gICAgICBpZiAocXVlcnkucHJpdmFjeUxldmVsICYmIGVudHJ5Lm1ldGFkYXRhPy5wcml2YWN5TGV2ZWwgIT09IHF1ZXJ5LnByaXZhY3lMZXZlbCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgZGF0ZSByYW5nZVxuICAgICAgaWYgKHF1ZXJ5LmRhdGVGcm9tICYmIGVudHJ5Lm1ldGFkYXRhPy50aW1lc3RhbXAgJiYgZW50cnkubWV0YWRhdGEudGltZXN0YW1wIDwgcXVlcnkuZGF0ZUZyb20pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBpZiAocXVlcnkuZGF0ZVRvICYmIGVudHJ5Lm1ldGFkYXRhPy50aW1lc3RhbXAgJiYgZW50cnkubWV0YWRhdGEudGltZXN0YW1wID4gcXVlcnkuZGF0ZVRvKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBDaGVjayB0YWdzXG4gICAgICBpZiAocXVlcnkudGFncyAmJiBxdWVyeS50YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgaGFzQWxsVGFncyA9IHF1ZXJ5LnRhZ3MuZXZlcnkodGFnID0+XG4gICAgICAgICAgZW50cnkubWV0YWRhdGE/LnRhZ3M/LmluY2x1ZGVzKHRhZylcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFoYXNBbGxUYWdzKSBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgY29udGVudCAoc2ltcGxlIHN1YnN0cmluZyBtYXRjaClcbiAgICAgIGxldCBzY29yZSA9IDE7XG4gICAgICBpZiAocXVlcnkuY29udGVudCkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUocXVlcnkuY29udGVudCk7XG4gICAgICAgIGlmIChub3JtYWxpemVkLmlzVmFsaWQpIHtcbiAgICAgICAgICBjb25zdCBzZWFyY2hUZXJtID0gbm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChlbnRyeS5jb250ZW50LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGVybSkpIHtcbiAgICAgICAgICAgIHNjb3JlICs9IDI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgIGVudHJ5LFxuICAgICAgICBzY29yZSxcbiAgICAgICAgbWF0Y2hlczoge1xuICAgICAgICAgIHRhZ3M6IHF1ZXJ5LnRhZ3M/LmZpbHRlcih0YWcgPT4gZW50cnkubWV0YWRhdGE/LnRhZ3M/LmluY2x1ZGVzKHRhZykpXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFNvcnQgYW5kIHBhZ2luYXRlXG4gICAgcmVzdWx0cy5zb3J0KChhLCBiKSA9PiBiLnNjb3JlIC0gYS5zY29yZSk7XG4gICAgY29uc3Qgb2Zmc2V0ID0gcXVlcnkub2Zmc2V0IHx8IDA7XG4gICAgY29uc3QgbGltaXQgPSBxdWVyeS5saW1pdCB8fCAxMDA7XG5cbiAgICByZXR1cm4gcmVzdWx0cy5zbGljZShvZmZzZXQsIG9mZnNldCArIGxpbWl0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBoZWxwZXIgdG8gYWRkIGVudHJ5IHRvIGFsbCBpbmRleGVzXG4gICAqL1xuICBwcml2YXRlIGFkZFRvSW5kZXgoaWQ6IHN0cmluZywgZW50cnk6IE1lbW9yeUVudHJ5KTogdm9pZCB7XG4gICAgLy8gQ2FjaGUgZW50cnlcbiAgICB0aGlzLmVudHJpZXNDYWNoZS5zZXQoaWQsIGVudHJ5KTtcblxuICAgIC8vIEFkZCB0byB0YWcgaW5kZXhcbiAgICBpZiAoZW50cnkubWV0YWRhdGE/LnRhZ3MpIHtcbiAgICAgIGZvciAoY29uc3QgdGFnIG9mIGVudHJ5Lm1ldGFkYXRhLnRhZ3MpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZFRhZyA9IHRhZy50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBsZXQgZW50cmllcyA9IHRoaXMudGFnSW5kZXguZ2V0KG5vcm1hbGl6ZWRUYWcpO1xuICAgICAgICBpZiAoIWVudHJpZXMpIHtcbiAgICAgICAgICBlbnRyaWVzID0gbmV3IFNldCgpO1xuICAgICAgICAgIHRoaXMudGFnSW5kZXguc2V0KG5vcm1hbGl6ZWRUYWcsIGVudHJpZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVudHJpZXMuYWRkKGlkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgdG8gcHJpdmFjeSBpbmRleFxuICAgIGNvbnN0IHByaXZhY3lMZXZlbCA9IGVudHJ5Lm1ldGFkYXRhPy5wcml2YWN5TGV2ZWwgfHwgZW50cnkucHJpdmFjeUxldmVsIHx8IE1FTU9SWV9DT05TVEFOVFMuREVGQVVMVF9QUklWQUNZX0xFVkVMO1xuICAgIGxldCBwcml2YWN5RW50cmllcyA9IHRoaXMucHJpdmFjeUluZGV4LmdldChwcml2YWN5TGV2ZWwpO1xuICAgIGlmICghcHJpdmFjeUVudHJpZXMpIHtcbiAgICAgIHByaXZhY3lFbnRyaWVzID0gbmV3IFNldCgpO1xuICAgICAgdGhpcy5wcml2YWN5SW5kZXguc2V0KHByaXZhY3lMZXZlbCwgcHJpdmFjeUVudHJpZXMpO1xuICAgIH1cbiAgICBwcml2YWN5RW50cmllcy5hZGQoaWQpO1xuXG4gICAgLy8gQWRkIHRvIGNvbnRlbnQgaW5kZXhcbiAgICBpZiAodGhpcy5jb250ZW50SW5kZXgpIHtcbiAgICAgIHRoaXMuY29udGVudEluZGV4LmFkZEVudHJ5KGlkLCBlbnRyeS5jb250ZW50KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgdG8gdGVtcG9yYWwgaW5kZXhcbiAgICB0aGlzLnRlbXBvcmFsSW5kZXguYWRkRW50cnkoaWQsIGVudHJ5Lm1ldGFkYXRhPy50aW1lc3RhbXAgfHwgZW50cnkudGltZXN0YW1wKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW5kZXhlc1xuICAgKi9cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy50YWdJbmRleC5jbGVhcigpO1xuICAgIHRoaXMucHJpdmFjeUluZGV4LmNsZWFyKCk7XG4gICAgdGhpcy5jb250ZW50SW5kZXg/LmNsZWFyKCk7XG4gICAgdGhpcy50ZW1wb3JhbEluZGV4LmNsZWFyKCk7XG4gICAgdGhpcy5lbnRyaWVzQ2FjaGUuY2xlYXIoKTtcbiAgICB0aGlzLmlzQnVpbHQgPSBmYWxzZTtcbiAgICB0aGlzLnN0YXRzID0ge1xuICAgICAgaXNJbmRleGVkOiBmYWxzZSxcbiAgICAgIGVudHJ5Q291bnQ6IDAsXG4gICAgICB0YWdDb3VudDogMCxcbiAgICAgIHRlcm1Db3VudDogMFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0IGluZGV4IHN0YXRpc3RpY3NcbiAgICovXG4gIGdldFN0YXRzKCk6IFNlYXJjaEluZGV4U3RhdHMge1xuICAgIHJldHVybiB7IC4uLnRoaXMuc3RhdHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBpbmRleCBpcyBidWlsdFxuICAgKi9cbiAgZ2V0IGlzSW5kZXhlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0J1aWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBhbmQgdXBkYXRlIG1lbW9yeSB1c2FnZVxuICAgKiBGSVg6IEFkZGVkIG1lbW9yeSBtb25pdG9yaW5nIGZvciBjb250ZW50IGluZGV4XG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZU1lbW9yeVVzYWdlKCk6IHZvaWQge1xuICAgIGxldCB0b3RhbEJ5dGVzID0gMDtcblxuICAgIC8vIEVzdGltYXRlIHRhZyBpbmRleCBtZW1vcnlcbiAgICBmb3IgKGNvbnN0IFt0YWcsIGVudHJpZXNdIG9mIHRoaXMudGFnSW5kZXgpIHtcbiAgICAgIHRvdGFsQnl0ZXMgKz0gdGFnLmxlbmd0aCAqIDI7IC8vIFVURi0xNiBlbmNvZGluZ1xuICAgICAgdG90YWxCeXRlcyArPSBlbnRyaWVzLnNpemUgKiAzMjsgLy8gRXN0aW1hdGVkIElEIHNpemVcbiAgICB9XG5cbiAgICAvLyBFc3RpbWF0ZSBjb250ZW50IGluZGV4IG1lbW9yeVxuICAgIGlmICh0aGlzLmNvbnRlbnRJbmRleCkge1xuICAgICAgLy8gUm91Z2ggZXN0aW1hdGU6IGVhY2ggdGVybSArIGVudHJ5IElEc1xuICAgICAgdG90YWxCeXRlcyArPSB0aGlzLmNvbnRlbnRJbmRleC5zaXplICogMTAwO1xuICAgIH1cblxuICAgIC8vIEVzdGltYXRlIHRlbXBvcmFsIGluZGV4IG1lbW9yeVxuICAgIHRvdGFsQnl0ZXMgKz0gdGhpcy50ZW1wb3JhbEluZGV4LnNpemUgKiA0ODsgLy8gRGF0ZSArIElEXG5cbiAgICAvLyBFc3RpbWF0ZSBjYWNoZSBtZW1vcnlcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc0NhY2hlLnZhbHVlcygpKSB7XG4gICAgICB0b3RhbEJ5dGVzICs9IEpTT04uc3RyaW5naWZ5KGVudHJ5KS5sZW5ndGggKiAyO1xuICAgIH1cblxuICAgIHRoaXMubWVtb3J5VXNhZ2VCeXRlcyA9IHRvdGFsQnl0ZXM7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSdyZSBleGNlZWRpbmcgbWVtb3J5IGxpbWl0XG4gICAgaWYgKHRvdGFsQnl0ZXMgPiB0aGlzLm1heE1lbW9yeUJ5dGVzKSB7XG4gICAgICBsb2dnZXIud2FybignTWVtb3J5IHNlYXJjaCBpbmRleCBleGNlZWRpbmcgbGltaXQnLCB7XG4gICAgICAgIHVzZWRNQjogTWF0aC5yb3VuZCh0b3RhbEJ5dGVzIC8gMTAyNCAvIDEwMjQpLFxuICAgICAgICBsaW1pdE1COiBNYXRoLnJvdW5kKHRoaXMubWF4TWVtb3J5Qnl0ZXMgLyAxMDI0IC8gMTAyNClcbiAgICAgIH0pO1xuXG4gICAgICAvLyBUcmlnZ2VyIExSVSBldmljdGlvbiBpZiBlbmFibGVkXG4gICAgICBpZiAodGhpcy5jb25maWcuZW5hYmxlTFJVRXZpY3Rpb24pIHtcbiAgICAgICAgdGhpcy5ldmljdExSVUVudHJpZXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZpY3QgbGVhc3QgcmVjZW50bHkgdXNlZCBlbnRyaWVzIHRvIGZyZWUgbWVtb3J5XG4gICAqIEZJWDogQWRkZWQgTFJVIGV2aWN0aW9uIGZvciBtZW1vcnkgbWFuYWdlbWVudFxuICAgKi9cbiAgcHJpdmF0ZSBldmljdExSVUVudHJpZXMoKTogdm9pZCB7XG4gICAgLy8gR2V0IGVudHJpZXMgc29ydGVkIGJ5IGFjY2VzcyB0aW1lICh3b3VsZCBuZWVkIHRvIHRyYWNrIHRoaXMpXG4gICAgLy8gRm9yIG5vdywgZXZpY3Qgb2xkZXN0IDIwJSBvZiBlbnRyaWVzXG4gICAgY29uc3QgZW50cmllc1RvRXZpY3QgPSBNYXRoLmZsb29yKHRoaXMuZW50cmllc0NhY2hlLnNpemUgKiAwLjIpO1xuICAgIGNvbnN0IGVudHJpZXNBcnJheSA9IEFycmF5LmZyb20odGhpcy5lbnRyaWVzQ2FjaGUua2V5cygpKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZW50cmllc1RvRXZpY3Q7IGkrKykge1xuICAgICAgY29uc3QgaWRUb0V2aWN0ID0gZW50cmllc0FycmF5W2ldO1xuICAgICAgdGhpcy5yZW1vdmVFbnRyeShpZFRvRXZpY3QpO1xuICAgIH1cblxuICAgIGxvZ2dlci5pbmZvKCdFdmljdGVkIExSVSBlbnRyaWVzJywge1xuICAgICAgZXZpY3RlZENvdW50OiBlbnRyaWVzVG9FdmljdCxcbiAgICAgIHJlbWFpbmluZ0NvdW50OiB0aGlzLmVudHJpZXNDYWNoZS5zaXplXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VyaWFsaXplIGluZGV4IHRvIEpTT04gZm9yIHBlcnNpc3RlbmNlXG4gICAqIEZJWDogQWRkZWQgaW5kZXggc2VyaWFsaXphdGlvbiBmb3IgY29sZCBzdGFydCBvcHRpbWl6YXRpb25cbiAgICovXG4gIHNlcmlhbGl6ZSgpOiBzdHJpbmcge1xuICAgIGlmICghdGhpcy5pc0J1aWx0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXJpYWxpemUgdW5idWlsdCBpbmRleCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4RGF0YSA9IHtcbiAgICAgIHZlcnNpb246ICcxLjAuMCcsXG4gICAgICBzdGF0czogdGhpcy5zdGF0cyxcbiAgICAgIHRhZ0luZGV4OiBBcnJheS5mcm9tKHRoaXMudGFnSW5kZXguZW50cmllcygpKS5tYXAoKFt0YWcsIGlkc10pID0+ICh7XG4gICAgICAgIHRhZyxcbiAgICAgICAgaWRzOiBBcnJheS5mcm9tKGlkcylcbiAgICAgIH0pKSxcbiAgICAgIHByaXZhY3lJbmRleDogQXJyYXkuZnJvbSh0aGlzLnByaXZhY3lJbmRleC5lbnRyaWVzKCkpLm1hcCgoW2xldmVsLCBpZHNdKSA9PiAoe1xuICAgICAgICBsZXZlbCxcbiAgICAgICAgaWRzOiBBcnJheS5mcm9tKGlkcylcbiAgICAgIH0pKSxcbiAgICAgIHRlbXBvcmFsSW5kZXg6IHRoaXMudGVtcG9yYWxJbmRleC5zZXJpYWxpemUoKSxcbiAgICAgIC8vIE5vdGU6IENvbnRlbnQgaW5kZXggaXMgbm90IHNlcmlhbGl6ZWQgZHVlIHRvIHNpemVcbiAgICAgIC8vIEl0IHdpbGwgYmUgcmVidWlsdCBvbiBsb2FkIGlmIG5lZWRlZFxuICAgIH07XG5cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaW5kZXhEYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlcmlhbGl6ZSBpbmRleCBmcm9tIEpTT05cbiAgICogRklYOiBBZGRlZCBpbmRleCBkZXNlcmlhbGl6YXRpb24gZm9yIGZhc3RlciBzdGFydHVwXG4gICAqL1xuICBkZXNlcmlhbGl6ZShkYXRhOiBzdHJpbmcsIGVudHJpZXM6IE1hcDxzdHJpbmcsIE1lbW9yeUVudHJ5Pik6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpbmRleERhdGEgPSBKU09OLnBhcnNlKGRhdGEpO1xuXG4gICAgICAvLyBWYWxpZGF0ZSB2ZXJzaW9uXG4gICAgICBpZiAoaW5kZXhEYXRhLnZlcnNpb24gIT09ICcxLjAuMCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBpbmRleCB2ZXJzaW9uOiAke2luZGV4RGF0YS52ZXJzaW9ufWApO1xuICAgICAgfVxuXG4gICAgICAvLyBDbGVhciBleGlzdGluZyBpbmRleGVzXG4gICAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICAgIC8vIFJlc3RvcmUgdGFnIGluZGV4XG4gICAgICBmb3IgKGNvbnN0IHsgdGFnLCBpZHMgfSBvZiBpbmRleERhdGEudGFnSW5kZXgpIHtcbiAgICAgICAgdGhpcy50YWdJbmRleC5zZXQodGFnLCBuZXcgU2V0KGlkcykpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXN0b3JlIHByaXZhY3kgaW5kZXhcbiAgICAgIGZvciAoY29uc3QgeyBsZXZlbCwgaWRzIH0gb2YgaW5kZXhEYXRhLnByaXZhY3lJbmRleCkge1xuICAgICAgICB0aGlzLnByaXZhY3lJbmRleC5zZXQobGV2ZWwgYXMgUHJpdmFjeUxldmVsLCBuZXcgU2V0KGlkcykpO1xuICAgICAgfVxuXG4gICAgICAvLyBSZXN0b3JlIHRlbXBvcmFsIGluZGV4XG4gICAgICB0aGlzLnRlbXBvcmFsSW5kZXguZGVzZXJpYWxpemUoaW5kZXhEYXRhLnRlbXBvcmFsSW5kZXgpO1xuXG4gICAgICAvLyBSZXN0b3JlIGVudHJpZXMgY2FjaGUgZnJvbSBwcm92aWRlZCBlbnRyaWVzXG4gICAgICBmb3IgKGNvbnN0IFtpZCwgZW50cnldIG9mIGVudHJpZXMpIHtcbiAgICAgICAgaWYgKGluZGV4RGF0YS50YWdJbmRleC5zb21lKChpdGVtOiBhbnkpID0+IGl0ZW0uaWRzLmluY2x1ZGVzKGlkKSkpIHtcbiAgICAgICAgICB0aGlzLmVudHJpZXNDYWNoZS5zZXQoaWQsIGVudHJ5KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWJ1aWxkIGNvbnRlbnQgaW5kZXggaWYgZW5hYmxlZCAoY2FuJ3Qgc2VyaWFsaXplIGVmZmljaWVudGx5KVxuICAgICAgaWYgKHRoaXMuY29uZmlnLmVuYWJsZUNvbnRlbnRJbmRleCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRJbmRleCA9IG5ldyBDb250ZW50SW5kZXgodGhpcy5jb25maWcpO1xuICAgICAgICBmb3IgKGNvbnN0IFtpZCwgZW50cnldIG9mIHRoaXMuZW50cmllc0NhY2hlKSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50SW5kZXguYWRkRW50cnkoaWQsIGVudHJ5LmNvbnRlbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFVwZGF0ZSBzdGF0c1xuICAgICAgdGhpcy5zdGF0cyA9IGluZGV4RGF0YS5zdGF0cztcbiAgICAgIHRoaXMuaXNCdWlsdCA9IHRydWU7XG5cbiAgICAgIGxvZ2dlci5pbmZvKCdNZW1vcnkgc2VhcmNoIGluZGV4IGRlc2VyaWFsaXplZCcsIHRoaXMuc3RhdHMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBkZXNlcmlhbGl6ZSBpbmRleCwgcmVidWlsZGluZycsIGVycm9yKTtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBidWlsZGluZyBmcm9tIHNjcmF0Y2hcbiAgICAgIHRoaXMuYnVpbGRJbmRleChlbnRyaWVzKTtcbiAgICB9XG4gIH1cbn0iXX0=
690
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVtb3J5U2VhcmNoSW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvbWVtb3JpZXMvTWVtb3J5U2VhcmNoSW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUdILE9BQU8sRUFBZ0IsZ0JBQWdCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBcUZwRTs7R0FFRztBQUNILE1BQU0sWUFBWTtJQUNSLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBdUIsQ0FBQztJQUMvQyxZQUFZLEdBQUcsSUFBSSxHQUFHLEVBQXVCLENBQUM7SUFDckMsTUFBTSxDQUFvQjtJQUUzQyxZQUFZLE1BQXlCO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQ3ZCLENBQUM7SUFFRDs7T0FFRztJQUNILFFBQVEsQ0FBQyxPQUFlLEVBQUUsT0FBZTtRQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFFdEQsNkJBQTZCO1FBQzdCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV0Qyx3QkFBd0I7UUFDeEIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxHQUFHLElB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bkMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2xELEtBQUssTUFBTSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQzVDLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2hELENBQUM7WUFDSCxDQUFDO1lBRUQsZUFBZTtZQUNmLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztZQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztZQUVwQixNQUFNLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM5RCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sQ0FBQyxLQUFLLENBQUMseUNBQXlDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDL0QscUNBQXFDO1lBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTWVtb3J5IFNlYXJjaCBJbmRleCAtIEhpZ2gtcGVyZm9ybWFuY2UgaW5kZXhlZCBzZWFyY2ggZm9yIE1lbW9yeSBlbGVtZW50c1xuICpcbiAqIEFkZHJlc3NlcyBpc3N1ZSAjOTg0OiBJbXBsZW1lbnQgc2VhcmNoIGluZGV4aW5nIGZvciBNZW1vcnkgZWxlbWVudCBzY2FsYWJpbGl0eVxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBUYWcgaW5kZXggZm9yIE8oMSkgdGFnLWJhc2VkIHF1ZXJpZXNcbiAqIC0gQ29udGVudCBpbmRleCB1c2luZyBpbnZlcnRlZCBpbmRleCBwYXR0ZXJuXG4gKiAtIFRlbXBvcmFsIGluZGV4IGZvciBkYXRlIHJhbmdlIHF1ZXJpZXNcbiAqIC0gUHJpdmFjeSBsZXZlbCBpbmRleCBmb3IgZmlsdGVyZWQgYWNjZXNzXG4gKiAtIEluY3JlbWVudGFsIGluZGV4IHVwZGF0ZXNcbiAqIC0gT3B0aW9uYWwgcGVyc2lzdGVuY2VcbiAqIC0gQ29uZmlndXJhYmxlIHRocmVzaG9sZHNcbiAqL1xuXG5pbXBvcnQgeyBNZW1vcnlFbnRyeSB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHsgUHJpdmFjeUxldmVsLCBNRU1PUllfQ09OU1RBTlRTLCBNRU1PUllfU0VDVVJJVFlfRVZFTlRTIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nZ2VyLmpzJztcbmltcG9ydCB7IFVuaWNvZGVWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi9zZWN1cml0eS92YWxpZGF0b3JzL3VuaWNvZGVWYWxpZGF0b3IuanMnO1xuaW1wb3J0IHsgU2VjdXJpdHlNb25pdG9yIH0gZnJvbSAnLi4vLi4vc2VjdXJpdHkvc2VjdXJpdHlNb25pdG9yLmpzJztcblxuLy8gTWFwLWxpa2UgaW50ZXJmYWNlIGZvciBtZW1vcnkgZW50cmllc1xudHlwZSBNZW1vcnlFbnRyeU1hcCA9IE1hcDxzdHJpbmcsIE1lbW9yeUVudHJ5PiB8IHtcbiAgaGFzOiAoa2V5OiBzdHJpbmcpID0+IGJvb2xlYW47XG4gIGtleXM6ICgpID0+IEl0ZXJhYmxlPHN0cmluZz47XG4gIHZhbHVlczogKCkgPT4gSXRlcmFibGU8TWVtb3J5RW50cnk+O1xuICBnZXQ6IChrZXk6IHN0cmluZykgPT4gTWVtb3J5RW50cnkgfCB1bmRlZmluZWQ7XG4gIHNpemU6IG51bWJlcjtcbiAgW1N5bWJvbC5pdGVyYXRvcl06ICgpID0+IEl0ZXJhdG9yPFtzdHJpbmcsIE1lbW9yeUVudHJ5XT47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlYXJjaEluZGV4Q29uZmlnIHtcbiAgLyoqXG4gICAqIEVuYWJsZSBpbmRleGluZyB3aGVuIG1lbW9yeSBoYXMgbW9yZSB0aGFuIHRoaXMgbWFueSBlbnRyaWVzXG4gICAqIERlZmF1bHQ6IDEwMFxuICAgKi9cbiAgaW5kZXhUaHJlc2hvbGQ/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBjb250ZW50IGluZGV4IChtb3JlIG1lbW9yeSBpbnRlbnNpdmUpXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIGVuYWJsZUNvbnRlbnRJbmRleD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHRlcm1zIHRvIGluZGV4IHBlciBlbnRyeVxuICAgKiBEZWZhdWx0OiAxMDBcbiAgICovXG4gIG1heFRlcm1zUGVyRW50cnk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gdGVybSBsZW5ndGggdG8gaW5kZXhcbiAgICogRGVmYXVsdDogMlxuICAgKi9cbiAgbWluVGVybUxlbmd0aD86IG51bWJlcjtcblxuICAvKipcbiAgICogRW5hYmxlIGluZGV4IHBlcnNpc3RlbmNlIHRvIGRpc2tcbiAgICogRGVmYXVsdDogZmFsc2VcbiAgICovXG4gIGVuYWJsZVBlcnNpc3RlbmNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWF4aW11bSBtZW1vcnkgdXNhZ2UgaW4gTUJcbiAgICogRGVmYXVsdDogMTAwXG4gICAqL1xuICBtYXhNZW1vcnlNQj86IG51bWJlcjtcblxuICAvKipcbiAgICogRW5hYmxlIExSVSBldmljdGlvbiB3aGVuIG1lbW9yeSBsaW1pdCBpcyByZWFjaGVkXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIGVuYWJsZUxSVUV2aWN0aW9uPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hJbmRleFN0YXRzIHtcbiAgaXNJbmRleGVkOiBib29sZWFuO1xuICBlbnRyeUNvdW50OiBudW1iZXI7XG4gIHRhZ0NvdW50OiBudW1iZXI7XG4gIHRlcm1Db3VudDogbnVtYmVyO1xuICBsYXN0QnVpbHQ/OiBEYXRlO1xuICBidWlsZFRpbWVNcz86IG51bWJlcjtcbiAgbWVtb3J5VXNhZ2VCeXRlcz86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hRdWVyeSB7XG4gIHRhZ3M/OiBzdHJpbmdbXTtcbiAgY29udGVudD86IHN0cmluZztcbiAgZGF0ZUZyb20/OiBEYXRlO1xuICBkYXRlVG8/OiBEYXRlO1xuICBwcml2YWN5TGV2ZWw/OiBQcml2YWN5TGV2ZWw7XG4gIGxpbWl0PzogbnVtYmVyO1xuICBvZmZzZXQ/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoUmVzdWx0IHtcbiAgZW50cnk6IE1lbW9yeUVudHJ5O1xuICBzY29yZTogbnVtYmVyO1xuICBtYXRjaGVzOiB7XG4gICAgdGFncz86IHN0cmluZ1tdO1xuICAgIHRlcm1zPzogc3RyaW5nW107XG4gIH07XG59XG5cbi8qKlxuICogSW52ZXJ0ZWQgaW5kZXggZm9yIGNvbnRlbnQgc2VhcmNoXG4gKi9cbmNsYXNzIENvbnRlbnRJbmRleCB7XG4gIHByaXZhdGUgdGVybVRvRW50cmllcyA9IG5ldyBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj4oKTtcbiAgcHJpdmF0ZSBlbnRyeVRvVGVybXMgPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBTZWFyY2hJbmRleENvbmZpZztcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFNlYXJjaEluZGV4Q29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGVudHJ5IHRvIHRoZSBjb250ZW50IGluZGV4XG4gICAqL1xuICBhZGRFbnRyeShlbnRyeUlkOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5leHRyYWN0VGVybXMoY29udGVudCwgeyBlbnRyeUlkIH0pO1xuXG4gICAgLy8gU3RvcmUgdGVybXMgZm9yIHRoaXMgZW50cnlcbiAgICB0aGlzLmVudHJ5VG9UZXJtcy5zZXQoZW50cnlJZCwgdGVybXMpO1xuXG4gICAgLy8gVXBkYXRlIGludmVydGVkIGluZGV4XG4gICAgZm9yIChjb25zdCB0ZXJtIG9mIHRlcm1zKSB7XG4gICAgICBsZXQgZW50cmllcyA9IHRoaXMudGVybVRvRW50cmllcy5nZXQodGVybSk7XG4gICAgICBpZiAoIWVudHJpZXMpIHtcbiAgICAgICAgZW50cmllcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy50ZXJtVG9FbnRyaWVzLnNldCh0ZXJtLCBlbnRyaWVzKTtcbiAgICAgIH1cbiAgICAgIGVudHJpZXMuYWRkKGVudHJ5SWQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZW50cnkgZnJvbSB0aGUgaW5kZXhcbiAgICovXG4gIHJlbW92ZUVudHJ5KGVudHJ5SWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRlcm1zID0gdGhpcy5lbnRyeVRvVGVybXMuZ2V0KGVudHJ5SWQpO1xuICAgIGlmICghdGVybXMpIHJldHVybjtcblxuICAgIC8vIFJlbW92ZSBmcm9tIGludmVydGVkIGluZGV4XG4gICAgZm9yIChjb25zdCB0ZXJtIG9mIHRlcm1zKSB7XG4gICAgICBjb25zdCBlbnRyaWVzID0gdGhpcy50ZXJtVG9FbnRyaWVzLmdldCh0ZXJtKTtcbiAgICAgIGlmIChlbnRyaWVzKSB7XG4gICAgICAgIGVudHJpZXMuZGVsZXRlKGVudHJ5SWQpO1xuICAgICAgICBpZiAoZW50cmllcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgdGhpcy50ZXJtVG9FbnRyaWVzLmRlbGV0ZSh0ZXJtKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBlbnRyeSB0ZXJtc1xuICAgIHRoaXMuZW50cnlUb1Rlcm1zLmRlbGV0ZShlbnRyeUlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIGVudHJpZXMgY29udGFpbmluZyBxdWVyeSB0ZXJtc1xuICAgKi9cbiAgc2VhcmNoKHF1ZXJ5OiBzdHJpbmcpOiBNYXA8c3RyaW5nLCBudW1iZXI+IHtcbiAgICBjb25zdCBxdWVyeVRlcm1zID0gdGhpcy5leHRyYWN0VGVybXMocXVlcnkpO1xuICAgIGNvbnN0IHNjb3JlcyA9IG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCk7XG5cbiAgICBmb3IgKGNvbnN0IHRlcm0gb2YgcXVlcnlUZXJtcykge1xuICAgICAgY29uc3QgZW50cmllcyA9IHRoaXMudGVybVRvRW50cmllcy5nZXQodGVybSk7XG4gICAgICBpZiAoZW50cmllcykge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5SWQgb2YgZW50cmllcykge1xuICAgICAgICAgIHNjb3Jlcy5zZXQoZW50cnlJZCwgKHNjb3Jlcy5nZXQoZW50cnlJZCkgfHwgMCkgKyAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzY29yZXM7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBzZWFyY2hhYmxlIHRlcm1zIGZyb20gY29udGVudFxuICAgKiBTRUNVUklUWSBGSVg6IEFkZGVkIGF1ZGl0IGxvZ2dpbmcgZm9yIFVuaWNvZGUgdmFsaWRhdGlvbiBvcGVyYXRpb25zXG4gICAqL1xuICBwcml2YXRlIGV4dHJhY3RUZXJtcyhjb250ZW50OiBzdHJpbmcsIGNvbnRleHQ/OiB7IGVudHJ5SWQ/OiBzdHJpbmcgfSk6IFNldDxzdHJpbmc+IHtcbiAgICAvLyBOb3JtYWxpemUgZm9yIHNlY3VyaXR5XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKGNvbnRlbnQpO1xuICAgIGlmICghbm9ybWFsaXplZC5pc1ZhbGlkKSB7XG4gICAgICBsb2dnZXIud2FybignSW52YWxpZCBVbmljb2RlIGluIGNvbnRlbnQgZm9yIGluZGV4aW5nJywge1xuICAgICAgICBlbnRyeUlkOiBjb250ZXh0Py5lbnRyeUlkXG4gICAgICB9KTtcblxuICAgICAgLy8gU0VDVVJJVFkgRklYOiBMb2cgc2VjdXJpdHkgZXZlbnQgZm9yIGF1ZGl0IHRyYWlsIChETUNQLVNFQy0wMDYpXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6IE1FTU9SWV9TRUNVUklUWV9FVkVOVFMuTUVNT1JZX1VOSUNPREVfVkFMSURBVElPTl9GQUlMRUQsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnTWVtb3J5U2VhcmNoSW5kZXguZXh0cmFjdFRlcm1zJyxcbiAgICAgICAgZGV0YWlsczogYEludmFsaWQgVW5pY29kZSBkZXRlY3RlZCBkdXJpbmcgdGVybSBleHRyYWN0aW9uJHtjb250ZXh0Py5lbnRyeUlkID8gYCBmb3IgZW50cnkgJHtjb250ZXh0LmVudHJ5SWR9YCA6ICcnfWAsXG4gICAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgICAgZW50cnlJZDogY29udGV4dD8uZW50cnlJZCxcbiAgICAgICAgICBpc3N1ZUNvdW50OiAwICAvLyBVbmljb2RlVmFsaWRhdGlvblJlc3VsdCBkb2Vzbid0IGV4cG9zZSBpc3N1ZXNcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBuZXcgU2V0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgdGV4dCA9IG5vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnQudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCB0ZXJtcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgLy8gU2ltcGxlIHRva2VuaXphdGlvbiAoY2FuIGJlIGltcHJvdmVkIHdpdGggYmV0dGVyIE5MUClcbiAgICBjb25zdCB3b3JkcyA9IHRleHQubWF0Y2goL1xcYlxcdytcXGIvZykgfHwgW107XG5cbiAgICBsZXQgdGVybUNvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcbiAgICAgIGlmICh3b3JkLmxlbmd0aCA+PSAodGhpcy5jb25maWcubWluVGVybUxlbmd0aCB8fCAyKSkge1xuICAgICAgICB0ZXJtcy5hZGQod29yZCk7XG4gICAgICAgIHRlcm1Db3VudCsrO1xuICAgICAgICBpZiAodGVybUNvdW50ID49ICh0aGlzLmNvbmZpZy5tYXhUZXJtc1BlckVudHJ5IHx8IDEwMCkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZXJtcztcbiAgfVxuXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMudGVybVRvRW50cmllcy5jbGVhcigpO1xuICAgIHRoaXMuZW50cnlUb1Rlcm1zLmNsZWFyKCk7XG4gIH1cblxuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnRlcm1Ub0VudHJpZXMuc2l6ZTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGUgcmFuZ2UgaW5kZXggdXNpbmcgc29ydGVkIGFycmF5IGZvciBlZmZpY2llbnQgcmFuZ2UgcXVlcmllc1xuICovXG5jbGFzcyBUZW1wb3JhbEluZGV4IHtcbiAgcHJpdmF0ZSBlbnRyaWVzOiBBcnJheTx7IGlkOiBzdHJpbmc7IHRpbWVzdGFtcDogbnVtYmVyIH0+ID0gW107XG5cbiAgYWRkRW50cnkoZW50cnlJZDogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gZGF0ZS5nZXRUaW1lKCk7XG5cbiAgICAvLyBCaW5hcnkgc2VhcmNoIGZvciBpbnNlcnRpb24gcG9pbnRcbiAgICBsZXQgbGVmdCA9IDA7XG4gICAgbGV0IHJpZ2h0ID0gdGhpcy5lbnRyaWVzLmxlbmd0aDtcblxuICAgIHdoaWxlIChsZWZ0IDwgcmlnaHQpIHtcbiAgICAgIGNvbnN0IG1pZCA9IE1hdGguZmxvb3IoKGxlZnQgKyByaWdodCkgLyAyKTtcbiAgICAgIGlmICh0aGlzLmVudHJpZXNbbWlkXS50aW1lc3RhbXAgPCB0aW1lc3RhbXApIHtcbiAgICAgICAgbGVmdCA9IG1pZCArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByaWdodCA9IG1pZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbnNlcnQgYXQgY29ycmVjdCBwb3NpdGlvbiB0byBtYWludGFpbiBzb3J0XG4gICAgdGhpcy5lbnRyaWVzLnNwbGljZShsZWZ0LCAwLCB7IGlkOiBlbnRyeUlkLCB0aW1lc3RhbXAgfSk7XG4gIH1cblxuICByZW1vdmVFbnRyeShlbnRyeUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZW50cmllcy5maW5kSW5kZXgoZSA9PiBlLmlkID09PSBlbnRyeUlkKTtcbiAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5lbnRyaWVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgZW50cmllcyB3aXRoaW4gZGF0ZSByYW5nZVxuICAgKi9cbiAgc2VhcmNoUmFuZ2UoZnJvbT86IERhdGUsIHRvPzogRGF0ZSk6IFNldDxzdHJpbmc+IHtcbiAgICBjb25zdCByZXN1bHRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgZnJvbVRpbWUgPSBmcm9tPy5nZXRUaW1lKCkgfHwgMDtcbiAgICBjb25zdCB0b1RpbWUgPSB0bz8uZ2V0VGltZSgpIHx8IERhdGUubm93KCk7XG5cbiAgICAvLyBCaW5hcnkgc2VhcmNoIGZvciBzdGFydFxuICAgIGxldCBzdGFydCA9IDA7XG4gICAgbGV0IGVuZCA9IHRoaXMuZW50cmllcy5sZW5ndGg7XG5cbiAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHtcbiAgICAgIGNvbnN0IG1pZCA9IE1hdGguZmxvb3IoKHN0YXJ0ICsgZW5kKSAvIDIpO1xuICAgICAgaWYgKHRoaXMuZW50cmllc1ttaWRdLnRpbWVzdGFtcCA8IGZyb21UaW1lKSB7XG4gICAgICAgIHN0YXJ0ID0gbWlkICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuZCA9IG1pZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDb2xsZWN0IGFsbCBlbnRyaWVzIGluIHJhbmdlXG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDwgdGhpcy5lbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMuZW50cmllc1tpXTtcbiAgICAgIGlmIChlbnRyeS50aW1lc3RhbXAgPiB0b1RpbWUpIGJyZWFrO1xuICAgICAgcmVzdWx0cy5hZGQoZW50cnkuaWQpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG5cbiAgY2xlYXIoKTogdm9pZCB7XG4gICAgdGhpcy5lbnRyaWVzID0gW107XG4gIH1cblxuICBnZXQgc2l6ZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMubGVuZ3RoO1xuICB9XG5cbiAgc2VyaWFsaXplKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcztcbiAgfVxuXG4gIGRlc2VyaWFsaXplKGRhdGE6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuZW50cmllcyA9IGRhdGEgfHwgW107XG4gIH1cbn1cblxuLyoqXG4gKiBNYWluIHNlYXJjaCBpbmRleCBmb3IgTWVtb3J5IGVsZW1lbnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBNZW1vcnlTZWFyY2hJbmRleCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBTZWFyY2hJbmRleENvbmZpZztcblxuICAvLyBJbmRleGVzXG4gIHByaXZhdGUgdGFnSW5kZXggPSBuZXcgTWFwPHN0cmluZywgU2V0PHN0cmluZz4+KCk7XG4gIHByaXZhdGUgcHJpdmFjeUluZGV4ID0gbmV3IE1hcDxQcml2YWN5TGV2ZWwsIFNldDxzdHJpbmc+PigpO1xuICBwcml2YXRlIGNvbnRlbnRJbmRleDogQ29udGVudEluZGV4IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdGVtcG9yYWxJbmRleCA9IG5ldyBUZW1wb3JhbEluZGV4KCk7XG5cbiAgLy8gQ2FjaGVkIGVudHJpZXMgZm9yIHNjb3JpbmdcbiAgcHJpdmF0ZSBlbnRyaWVzQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgTWVtb3J5RW50cnk+KCk7XG5cbiAgLy8gSW5kZXggc3RhdGVcbiAgcHJpdmF0ZSBpc0J1aWx0ID0gZmFsc2U7XG4gIHByaXZhdGUgaXNCdWlsZGluZyA9IGZhbHNlO1xuICBwcml2YXRlIGJ1aWxkUXVldWU6IFByb21pc2U8dm9pZD4gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBzdGF0czogU2VhcmNoSW5kZXhTdGF0cyA9IHtcbiAgICBpc0luZGV4ZWQ6IGZhbHNlLFxuICAgIGVudHJ5Q291bnQ6IDAsXG4gICAgdGFnQ291bnQ6IDAsXG4gICAgdGVybUNvdW50OiAwLFxuICAgIG1lbW9yeVVzYWdlQnl0ZXM6IDBcbiAgfTtcblxuICAvLyBNZW1vcnkgbWFuYWdlbWVudFxuICBwcml2YXRlIHJlYWRvbmx5IG1heE1lbW9yeUJ5dGVzOiBudW1iZXI7XG4gIHByaXZhdGUgbWVtb3J5VXNhZ2VCeXRlcyA9IDA7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBTZWFyY2hJbmRleENvbmZpZyA9IHt9KSB7XG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICBpbmRleFRocmVzaG9sZDogY29uZmlnLmluZGV4VGhyZXNob2xkIHx8IDEwMCxcbiAgICAgIGVuYWJsZUNvbnRlbnRJbmRleDogY29uZmlnLmVuYWJsZUNvbnRlbnRJbmRleCAhPT0gZmFsc2UsXG4gICAgICBtYXhUZXJtc1BlckVudHJ5OiBjb25maWcubWF4VGVybXNQZXJFbnRyeSB8fCAxMDAsXG4gICAgICBtaW5UZXJtTGVuZ3RoOiBjb25maWcubWluVGVybUxlbmd0aCB8fCAyLFxuICAgICAgZW5hYmxlUGVyc2lzdGVuY2U6IGNvbmZpZy5lbmFibGVQZXJzaXN0ZW5jZSB8fCBmYWxzZSxcbiAgICAgIG1heE1lbW9yeU1COiBjb25maWcubWF4TWVtb3J5TUIgfHwgMTAwLFxuICAgICAgZW5hYmxlTFJVRXZpY3Rpb246IGNvbmZpZy5lbmFibGVMUlVFdmljdGlvbiAhPT0gZmFsc2VcbiAgICB9O1xuXG4gICAgLy8gQ29uZmlndXJlIG1lbW9yeSBsaW1pdCAoZGVmYXVsdCAxMDBNQiwgY29uZmlndXJhYmxlKVxuICAgIHRoaXMubWF4TWVtb3J5Qnl0ZXMgPSAodGhpcy5jb25maWcubWF4TWVtb3J5TUIgfHwgMTAwKSAqIDEwMjQgKiAxMDI0O1xuXG4gICAgaWYgKHRoaXMuY29uZmlnLmVuYWJsZUNvbnRlbnRJbmRleCkge1xuICAgICAgdGhpcy5jb250ZW50SW5kZXggPSBuZXcgQ29udGVudEluZGV4KHRoaXMuY29uZmlnKTtcbiAgICB9XG5cbiAgICAvLyBDb25maWcgYXZhaWxhYmxlIHZpYSBzdGF0cyBtZXRob2RzIOKAlCBubyBuZWVkIHRvIGxvZyBvbiBldmVyeSBpbnN0YW50aWF0aW9uXG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgb3IgcmVidWlsZCB0aGUgaW5kZXggZnJvbSBlbnRyaWVzXG4gICAqIEZJWDogQWRkZWQgcmFjZSBjb25kaXRpb24gcHJvdGVjdGlvbiB3aXRoIGlzQnVpbGRpbmcgZmxhZyBhbmQgYnVpbGQgcXVldWVcbiAgICovXG4gIGFzeW5jIGJ1aWxkSW5kZXgoZW50cmllczogTWVtb3J5RW50cnlNYXApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBJZiBhbHJlYWR5IGJ1aWxkaW5nLCB3YWl0IGZvciB0aGUgY3VycmVudCBidWlsZCB0byBjb21wbGV0ZVxuICAgIGlmICh0aGlzLmlzQnVpbGRpbmcgJiYgdGhpcy5idWlsZFF1ZXVlKSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0luZGV4IGJ1aWxkIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdhaXRpbmcuLi4nKTtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkUXVldWU7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGJ1aWxkIHByb21pc2UgdG8gaGFuZGxlIGNvbmN1cnJlbnQgY2FsbHNcbiAgICB0aGlzLmJ1aWxkUXVldWUgPSB0aGlzLl9kb0J1aWxkSW5kZXgoZW50cmllcyk7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRRdWV1ZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgX2RvQnVpbGRJbmRleChlbnRyaWVzOiBNZW1vcnlFbnRyeU1hcCk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFByZXZlbnQgY29uY3VycmVudCBidWlsZHNcbiAgICBpZiAodGhpcy5pc0J1aWxkaW5nKSB7XG4gICAgICBsb2dnZXIud2FybignQXR0ZW1wdGVkIGNvbmN1cnJlbnQgaW5kZXggYnVpbGQsIHNraXBwaW5nJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pc0J1aWxkaW5nID0gdHJ1ZTtcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENsZWFyIGV4aXN0aW5nIGluZGV4ZXNcbiAgICAgIHRoaXMuY2xlYXIoKTtcblxuICAgICAgLy8gQ2hlY2sgaWYgd2Ugc2hvdWxkIGluZGV4IGJhc2VkIG9uIHRocmVzaG9sZFxuICAgICAgaWYgKGVudHJpZXMuc2l6ZSA8ICh0aGlzLmNvbmZpZy5pbmRleFRocmVzaG9sZCB8fCAxMDApKSB7XG4gICAgICAgIGxvZ2dlci5kZWJ1ZygnTm90IGJ1aWxkaW5nIGluZGV4IC0gYmVsb3cgdGhyZXNob2xkJywge1xuICAgICAgICAgIGVudHJ5Q291bnQ6IGVudHJpZXMuc2l6ZSxcbiAgICAgICAgICB0aHJlc2hvbGQ6IHRoaXMuY29uZmlnLmluZGV4VGhyZXNob2xkXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIEJ1aWxkIGluZGV4ZXNcbiAgICAgIGZvciAoY29uc3QgW2lkLCBlbnRyeV0gb2YgZW50cmllcykge1xuICAgICAgICB0aGlzLmFkZFRvSW5kZXgoaWQsIGVudHJ5KTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FsY3VsYXRlIG1lbW9yeSB1c2FnZVxuICAgICAgdGhpcy51cGRhdGVNZW1vcnlVc2FnZSgpO1xuXG4gICAgICAvLyBTRUNVUklUWSBGSVg6IExvZyBzZWN1cml0eSBldmVudCBmb3IgaW5kZXggYnVpbGQgb3BlcmF0aW9uIChETUNQLVNFQy0wMDYpXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6IE1FTU9SWV9TRUNVUklUWV9FVkVOVFMuTUVNT1JZX0NSRUFURUQgYXMgYW55LCAgLy8gVXNpbmcgQ1JFQVRFRCBmb3IgaW5kZXggYnVpbGRcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdNZW1vcnlTZWFyY2hJbmRleC5idWlsZEluZGV4JyxcbiAgICAgICAgZGV0YWlsczogYE1lbW9yeSBzZWFyY2ggaW5kZXggYnVpbHQgc3VjY2Vzc2Z1bGx5IHdpdGggJHtlbnRyaWVzLnNpemV9IGVudHJpZXNgLFxuICAgICAgICBtZXRhZGF0YToge1xuICAgICAgICAgIGVudHJ5Q291bnQ6IGVudHJpZXMuc2l6ZSxcbiAgICAgICAgICB0YWdDb3VudDogdGhpcy50YWdJbmRleC5zaXplLFxuICAgICAgICAgIG1lbW9yeVVzYWdlQnl0ZXM6IHRoaXMubWVtb3J5VXNhZ2VCeXRlc1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gVXBkYXRlIHN0YXRzXG4gICAgICBjb25zdCBidWlsZFRpbWUgPSBEYXRlLm5vdygpIC0gc3RhcnRUaW1lO1xuICAgICAgdGhpcy5zdGF0cyA9IHtcbiAgICAgICAgaXNJbmRleGVkOiB0cnVlLFxuICAgICAgICBlbnRyeUNvdW50OiBlbnRyaWVzLnNpemUsXG4gICAgICAgIHRhZ0NvdW50OiB0aGlzLnRhZ0luZGV4LnNpemUsXG4gICAgICAgIHRlcm1Db3VudDogdGhpcy5jb250ZW50SW5kZXg/LnNpemUgfHwgMCxcbiAgICAgICAgbGFzdEJ1aWx0OiBuZXcgRGF0ZSgpLFxuICAgICAgICBidWlsZFRpbWVNczogYnVpbGRUaW1lLFxuICAgICAgICBtZW1vcnlVc2FnZUJ5dGVzOiB0aGlzLm1lbW9yeVVzYWdlQnl0ZXNcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuaXNCdWlsdCA9IHRydWU7XG5cbiAgICAgIGxvZ2dlci5pbmZvKCdNZW1vcnkgc2VhcmNoIGluZGV4IGJ1aWx0JywgdGhpcy5zdGF0cyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGJ1aWxkIG1lbW9yeSBzZWFyY2ggaW5kZXgnLCBlcnJvcik7XG4gICAgICAvLyBSZXNldCBzdGF0ZSBvbiBmYWlsdXJlXG4gICAgICB0aGlzLmNsZWFyKCk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5pc0J1aWxkaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLmJ1aWxkUXVldWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzaW5nbGUgZW50cnkgdG8gdGhlIGluZGV4IChpbmNyZW1lbnRhbCB1cGRhdGUpXG4gICAqL1xuICBhZGRFbnRyeShlbnRyeTogTWVtb3J5RW50cnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNCdWlsdCkgcmV0dXJuO1xuXG4gICAgdGhpcy5hZGRUb0luZGV4KGVudHJ5LmlkLCBlbnRyeSk7XG4gICAgdGhpcy5zdGF0cy5lbnRyeUNvdW50Kys7XG5cbiAgICBsb2dnZXIuZGVidWcoJ0VudHJ5IGFkZGVkIHRvIGluZGV4JywgeyBpZDogZW50cnkuaWQgfSk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGVudHJ5IGZyb20gdGhlIGluZGV4XG4gICAqL1xuICByZW1vdmVFbnRyeShlbnRyeUlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNCdWlsdCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZW50cnkgPSB0aGlzLmVudHJpZXNDYWNoZS5nZXQoZW50cnlJZCk7XG4gICAgaWYgKCFlbnRyeSkgcmV0dXJuO1xuXG4gICAgLy8gUmVtb3ZlIGZyb20gdGFnIGluZGV4XG4gICAgaWYgKGVudHJ5Lm1ldGFkYXRhPy50YWdzKSB7XG4gICAgICBmb3IgKGNvbnN0IHRhZyBvZiBlbnRyeS5tZXRhZGF0YS50YWdzKSB7XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSB0aGlzLnRhZ0luZGV4LmdldCh0YWcpO1xuICAgICAgICBpZiAoZW50cmllcykge1xuICAgICAgICAgIGVudHJpZXMuZGVsZXRlKGVudHJ5SWQpO1xuICAgICAgICAgIGlmIChlbnRyaWVzLnNpemUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMudGFnSW5kZXguZGVsZXRlKHRhZyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGZyb20gcHJpdmFjeSBpbmRleFxuICAgIGNvbnN0IHByaXZhY3lMZXZlbCA9IGVudHJ5Lm1ldGFkYXRhPy5wcml2YWN5TGV2ZWwgfHwgZW50cnkucHJpdmFjeUxldmVsIHx8IE1FTU9SWV9DT05TVEFOVFMuREVGQVVMVF9QUklWQUNZX0xFVkVMO1xuICAgIGNvbnN0IHByaXZhY3lFbnRyaWVzID0gdGhpcy5wcml2YWN5SW5kZXguZ2V0KHByaXZhY3lMZXZlbCk7XG4gICAgaWYgKHByaXZhY3lFbnRyaWVzKSB7XG4gICAgICBwcml2YWN5RW50cmllcy5kZWxldGUoZW50cnlJZCk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGZyb20gY29udGVudCBpbmRleFxuICAgIHRoaXMuY29udGVudEluZGV4Py5yZW1vdmVFbnRyeShlbnRyeUlkKTtcblxuICAgIC8vIFJlbW92ZSBmcm9tIHRlbXBvcmFsIGluZGV4XG4gICAgdGhpcy50ZW1wb3JhbEluZGV4LnJlbW92ZUVudHJ5KGVudHJ5SWQpO1xuXG4gICAgLy8gUmVtb3ZlIGZyb20gY2FjaGVcbiAgICB0aGlzLmVudHJpZXNDYWNoZS5kZWxldGUoZW50cnlJZCk7XG5cbiAgICB0aGlzLnN0YXRzLmVudHJ5Q291bnQtLTtcblxuICAgIGxvZ2dlci5kZWJ1ZygnRW50cnkgcmVtb3ZlZCBmcm9tIGluZGV4JywgeyBpZDogZW50cnlJZCB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggdGhlIGluZGV4IHdpdGggbXVsdGlwbGUgY3JpdGVyaWFcbiAgICovXG4gIHNlYXJjaChxdWVyeTogU2VhcmNoUXVlcnksIGVudHJpZXM6IE1lbW9yeUVudHJ5TWFwKTogU2VhcmNoUmVzdWx0W10ge1xuICAgIGlmICghdGhpcy5pc0J1aWx0KSB7XG4gICAgICBsb2dnZXIuZGVidWcoJ0luZGV4IG5vdCBidWlsdCwgZmFsbGluZyBiYWNrIHRvIGxpbmVhciBzZWFyY2gnKTtcbiAgICAgIHJldHVybiB0aGlzLmxpbmVhclNlYXJjaChxdWVyeSwgZW50cmllcyk7XG4gICAgfVxuXG4gICAgLy8gU3RhcnQgd2l0aCBhbGwgZW50cmllcyBvciBmaWx0ZXJlZCBieSBwcml2YWN5XG4gICAgbGV0IGNhbmRpZGF0ZUlkczogU2V0PHN0cmluZz4gfCBudWxsID0gbnVsbDtcblxuICAgIC8vIEZpbHRlciBieSBwcml2YWN5IGxldmVsXG4gICAgaWYgKHF1ZXJ5LnByaXZhY3lMZXZlbCkge1xuICAgICAgY2FuZGlkYXRlSWRzID0gbmV3IFNldCh0aGlzLnByaXZhY3lJbmRleC5nZXQocXVlcnkucHJpdmFjeUxldmVsKSB8fCBbXSk7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIGJ5IHRhZ3MgKGludGVyc2VjdGlvbilcbiAgICBpZiAocXVlcnkudGFncyAmJiBxdWVyeS50YWdzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHRhZ1Jlc3VsdHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgIGZvciAoY29uc3QgdGFnIG9mIHF1ZXJ5LnRhZ3MpIHtcbiAgICAgICAgY29uc3QgZW50cmllcyA9IHRoaXMudGFnSW5kZXguZ2V0KHRhZy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgaWYgKGVudHJpZXMpIHtcbiAgICAgICAgICBpZiAoY2FuZGlkYXRlSWRzKSB7XG4gICAgICAgICAgICAvLyBJbnRlcnNlY3Rpb24gd2l0aCBleGlzdGluZyBjYW5kaWRhdGVzXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZUlkcy5oYXMoaWQpKSB7XG4gICAgICAgICAgICAgICAgdGFnUmVzdWx0cy5hZGQoaWQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpcnN0IGZpbHRlclxuICAgICAgICAgICAgZW50cmllcy5mb3JFYWNoKGlkID0+IHRhZ1Jlc3VsdHMuYWRkKGlkKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYW5kaWRhdGVJZHMgPSB0YWdSZXN1bHRzO1xuICAgIH1cblxuICAgIC8vIEZpbHRlciBieSBkYXRlIHJhbmdlXG4gICAgaWYgKHF1ZXJ5LmRhdGVGcm9tIHx8IHF1ZXJ5LmRhdGVUbykge1xuICAgICAgY29uc3QgZGF0ZVJlc3VsdHMgPSB0aGlzLnRlbXBvcmFsSW5kZXguc2VhcmNoUmFuZ2UocXVlcnkuZGF0ZUZyb20sIHF1ZXJ5LmRhdGVUbyk7XG4gICAgICBpZiAoY2FuZGlkYXRlSWRzKSB7XG4gICAgICAgIC8vIEludGVyc2VjdGlvblxuICAgICAgICBjb25zdCBpbnRlcnNlY3Rpb24gPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBjYW5kaWRhdGVJZHMpIHtcbiAgICAgICAgICBpZiAoZGF0ZVJlc3VsdHMuaGFzKGlkKSkge1xuICAgICAgICAgICAgaW50ZXJzZWN0aW9uLmFkZChpZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhbmRpZGF0ZUlkcyA9IGludGVyc2VjdGlvbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbmRpZGF0ZUlkcyA9IGRhdGVSZXN1bHRzO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNjb3JlIGJ5IGNvbnRlbnQgaWYgcHJvdmlkZWRcbiAgICBjb25zdCBjb250ZW50U2NvcmVzID0gcXVlcnkuY29udGVudCAmJiB0aGlzLmNvbnRlbnRJbmRleFxuICAgICAgPyB0aGlzLmNvbnRlbnRJbmRleC5zZWFyY2gocXVlcnkuY29udGVudClcbiAgICAgIDogbmV3IE1hcDxzdHJpbmcsIG51bWJlcj4oKTtcblxuICAgIC8vIEJ1aWxkIHJlc3VsdHNcbiAgICBjb25zdCByZXN1bHRzOiBTZWFyY2hSZXN1bHRbXSA9IFtdO1xuICAgIGNvbnN0IHNlYXJjaEVudHJpZXMgPSBjYW5kaWRhdGVJZHMgfHwgbmV3IFNldChlbnRyaWVzLmtleXMoKSk7XG5cbiAgICBmb3IgKGNvbnN0IGlkIG9mIHNlYXJjaEVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gZW50cmllcy5nZXQoaWQpO1xuICAgICAgaWYgKCFlbnRyeSkgY29udGludWU7XG5cbiAgICAgIC8vIENhbGN1bGF0ZSBzY29yZVxuICAgICAgbGV0IHNjb3JlID0gMTtcblxuICAgICAgLy8gQ29udGVudCByZWxldmFuY2Ugc2NvcmVcbiAgICAgIGlmIChjb250ZW50U2NvcmVzLmhhcyhpZCkpIHtcbiAgICAgICAgc2NvcmUgKz0gY29udGVudFNjb3Jlcy5nZXQoaWQpISAqIDI7XG4gICAgICB9XG5cbiAgICAgIC8vIFRhZyBtYXRjaCBib251c1xuICAgICAgaWYgKHF1ZXJ5LnRhZ3MgJiYgZW50cnkubWV0YWRhdGE/LnRhZ3MpIHtcbiAgICAgICAgY29uc3QgbWF0Y2hlZFRhZ3MgPSBxdWVyeS50YWdzLmZpbHRlcih0YWcgPT5cbiAgICAgICAgICBlbnRyeS5tZXRhZGF0YT8udGFncz8uaW5jbHVkZXModGFnKVxuICAgICAgICApO1xuICAgICAgICBzY29yZSArPSBtYXRjaGVkVGFncy5sZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdHMucHVzaCh7XG4gICAgICAgIGVudHJ5LFxuICAgICAgICBzY29yZSxcbiAgICAgICAgbWF0Y2hlczoge1xuICAgICAgICAgIHRhZ3M6IHF1ZXJ5LnRhZ3M/LmZpbHRlcih0YWcgPT4gZW50cnkubWV0YWRhdGE/LnRhZ3M/LmluY2x1ZGVzKHRhZykpLFxuICAgICAgICAgIHRlcm1zOiBxdWVyeS5jb250ZW50ID8gWydpbmRleGVkJ10gOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gU29ydCBieSBzY29yZSBhbmQgYXBwbHkgcGFnaW5hdGlvblxuICAgIHJlc3VsdHMuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuXG4gICAgY29uc3Qgb2Zmc2V0ID0gcXVlcnkub2Zmc2V0IHx8IDA7XG4gICAgY29uc3QgbGltaXQgPSBxdWVyeS5saW1pdCB8fCAxMDA7XG5cbiAgICByZXR1cm4gcmVzdWx0cy5zbGljZShvZmZzZXQsIG9mZnNldCArIGxpbWl0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWxsYmFjayBsaW5lYXIgc2VhcmNoIHdoZW4gaW5kZXggaXMgbm90IGF2YWlsYWJsZVxuICAgKi9cbiAgcHJpdmF0ZSBsaW5lYXJTZWFyY2gocXVlcnk6IFNlYXJjaFF1ZXJ5LCBlbnRyaWVzOiBNZW1vcnlFbnRyeU1hcCk6IFNlYXJjaFJlc3VsdFtdIHtcbiAgICBjb25zdCByZXN1bHRzOiBTZWFyY2hSZXN1bHRbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBbLCBlbnRyeV0gb2YgZW50cmllcykge1xuICAgICAgLy8gQ2hlY2sgcHJpdmFjeSBsZXZlbFxuICAgICAgaWYgKHF1ZXJ5LnByaXZhY3lMZXZlbCAmJiBlbnRyeS5tZXRhZGF0YT8ucHJpdmFjeUxldmVsICE9PSBxdWVyeS5wcml2YWN5TGV2ZWwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGRhdGUgcmFuZ2VcbiAgICAgIGlmIChxdWVyeS5kYXRlRnJvbSAmJiBlbnRyeS5tZXRhZGF0YT8udGltZXN0YW1wICYmIGVudHJ5Lm1ldGFkYXRhLnRpbWVzdGFtcCA8IHF1ZXJ5LmRhdGVGcm9tKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHF1ZXJ5LmRhdGVUbyAmJiBlbnRyeS5tZXRhZGF0YT8udGltZXN0YW1wICYmIGVudHJ5Lm1ldGFkYXRhLnRpbWVzdGFtcCA+IHF1ZXJ5LmRhdGVUbykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgdGFnc1xuICAgICAgaWYgKHF1ZXJ5LnRhZ3MgJiYgcXVlcnkudGFncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGhhc0FsbFRhZ3MgPSBxdWVyeS50YWdzLmV2ZXJ5KHRhZyA9PlxuICAgICAgICAgIGVudHJ5Lm1ldGFkYXRhPy50YWdzPy5pbmNsdWRlcyh0YWcpXG4gICAgICAgICk7XG4gICAgICAgIGlmICghaGFzQWxsVGFncykgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGNvbnRlbnQgKHNpbXBsZSBzdWJzdHJpbmcgbWF0Y2gpXG4gICAgICBsZXQgc2NvcmUgPSAxO1xuICAgICAgaWYgKHF1ZXJ5LmNvbnRlbnQpIHtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKHF1ZXJ5LmNvbnRlbnQpO1xuICAgICAgICBpZiAobm9ybWFsaXplZC5pc1ZhbGlkKSB7XG4gICAgICAgICAgY29uc3Qgc2VhcmNoVGVybSA9IG5vcm1hbGl6ZWQubm9ybWFsaXplZENvbnRlbnQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICBpZiAoZW50cnkuY29udGVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaFRlcm0pKSB7XG4gICAgICAgICAgICBzY29yZSArPSAyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bHRzLnB1c2goe1xuICAgICAgICBlbnRyeSxcbiAgICAgICAgc2NvcmUsXG4gICAgICAgIG1hdGNoZXM6IHtcbiAgICAgICAgICB0YWdzOiBxdWVyeS50YWdzPy5maWx0ZXIodGFnID0+IGVudHJ5Lm1ldGFkYXRhPy50YWdzPy5pbmNsdWRlcyh0YWcpKVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBTb3J0IGFuZCBwYWdpbmF0ZVxuICAgIHJlc3VsdHMuc29ydCgoYSwgYikgPT4gYi5zY29yZSAtIGEuc2NvcmUpO1xuICAgIGNvbnN0IG9mZnNldCA9IHF1ZXJ5Lm9mZnNldCB8fCAwO1xuICAgIGNvbnN0IGxpbWl0ID0gcXVlcnkubGltaXQgfHwgMTAwO1xuXG4gICAgcmV0dXJuIHJlc3VsdHMuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBsaW1pdCk7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgaGVscGVyIHRvIGFkZCBlbnRyeSB0byBhbGwgaW5kZXhlc1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRUb0luZGV4KGlkOiBzdHJpbmcsIGVudHJ5OiBNZW1vcnlFbnRyeSk6IHZvaWQge1xuICAgIC8vIENhY2hlIGVudHJ5XG4gICAgdGhpcy5lbnRyaWVzQ2FjaGUuc2V0KGlkLCBlbnRyeSk7XG5cbiAgICAvLyBBZGQgdG8gdGFnIGluZGV4XG4gICAgaWYgKGVudHJ5Lm1ldGFkYXRhPy50YWdzKSB7XG4gICAgICBmb3IgKGNvbnN0IHRhZyBvZiBlbnRyeS5tZXRhZGF0YS50YWdzKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUYWcgPSB0YWcudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgbGV0IGVudHJpZXMgPSB0aGlzLnRhZ0luZGV4LmdldChub3JtYWxpemVkVGFnKTtcbiAgICAgICAgaWYgKCFlbnRyaWVzKSB7XG4gICAgICAgICAgZW50cmllcyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB0aGlzLnRhZ0luZGV4LnNldChub3JtYWxpemVkVGFnLCBlbnRyaWVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzLmFkZChpZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIHRvIHByaXZhY3kgaW5kZXhcbiAgICBjb25zdCBwcml2YWN5TGV2ZWwgPSBlbnRyeS5tZXRhZGF0YT8ucHJpdmFjeUxldmVsIHx8IGVudHJ5LnByaXZhY3lMZXZlbCB8fCBNRU1PUllfQ09OU1RBTlRTLkRFRkFVTFRfUFJJVkFDWV9MRVZFTDtcbiAgICBsZXQgcHJpdmFjeUVudHJpZXMgPSB0aGlzLnByaXZhY3lJbmRleC5nZXQocHJpdmFjeUxldmVsKTtcbiAgICBpZiAoIXByaXZhY3lFbnRyaWVzKSB7XG4gICAgICBwcml2YWN5RW50cmllcyA9IG5ldyBTZXQoKTtcbiAgICAgIHRoaXMucHJpdmFjeUluZGV4LnNldChwcml2YWN5TGV2ZWwsIHByaXZhY3lFbnRyaWVzKTtcbiAgICB9XG4gICAgcHJpdmFjeUVudHJpZXMuYWRkKGlkKTtcblxuICAgIC8vIEFkZCB0byBjb250ZW50IGluZGV4XG4gICAgaWYgKHRoaXMuY29udGVudEluZGV4KSB7XG4gICAgICB0aGlzLmNvbnRlbnRJbmRleC5hZGRFbnRyeShpZCwgZW50cnkuY29udGVudCk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHRvIHRlbXBvcmFsIGluZGV4XG4gICAgdGhpcy50ZW1wb3JhbEluZGV4LmFkZEVudHJ5KGlkLCBlbnRyeS5tZXRhZGF0YT8udGltZXN0YW1wIHx8IGVudHJ5LnRpbWVzdGFtcCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGluZGV4ZXNcbiAgICovXG4gIGNsZWFyKCk6IHZvaWQge1xuICAgIHRoaXMudGFnSW5kZXguY2xlYXIoKTtcbiAgICB0aGlzLnByaXZhY3lJbmRleC5jbGVhcigpO1xuICAgIHRoaXMuY29udGVudEluZGV4Py5jbGVhcigpO1xuICAgIHRoaXMudGVtcG9yYWxJbmRleC5jbGVhcigpO1xuICAgIHRoaXMuZW50cmllc0NhY2hlLmNsZWFyKCk7XG4gICAgdGhpcy5pc0J1aWx0ID0gZmFsc2U7XG4gICAgdGhpcy5zdGF0cyA9IHtcbiAgICAgIGlzSW5kZXhlZDogZmFsc2UsXG4gICAgICBlbnRyeUNvdW50OiAwLFxuICAgICAgdGFnQ291bnQ6IDAsXG4gICAgICB0ZXJtQ291bnQ6IDBcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpbmRleCBzdGF0aXN0aWNzXG4gICAqL1xuICBnZXRTdGF0cygpOiBTZWFyY2hJbmRleFN0YXRzIHtcbiAgICByZXR1cm4geyAuLi50aGlzLnN0YXRzIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgaW5kZXggaXMgYnVpbHRcbiAgICovXG4gIGdldCBpc0luZGV4ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNCdWlsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgYW5kIHVwZGF0ZSBtZW1vcnkgdXNhZ2VcbiAgICogRklYOiBBZGRlZCBtZW1vcnkgbW9uaXRvcmluZyBmb3IgY29udGVudCBpbmRleFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVNZW1vcnlVc2FnZSgpOiB2b2lkIHtcbiAgICBsZXQgdG90YWxCeXRlcyA9IDA7XG5cbiAgICAvLyBFc3RpbWF0ZSB0YWcgaW5kZXggbWVtb3J5XG4gICAgZm9yIChjb25zdCBbdGFnLCBlbnRyaWVzXSBvZiB0aGlzLnRhZ0luZGV4KSB7XG4gICAgICB0b3RhbEJ5dGVzICs9IHRhZy5sZW5ndGggKiAyOyAvLyBVVEYtMTYgZW5jb2RpbmdcbiAgICAgIHRvdGFsQnl0ZXMgKz0gZW50cmllcy5zaXplICogMzI7IC8vIEVzdGltYXRlZCBJRCBzaXplXG4gICAgfVxuXG4gICAgLy8gRXN0aW1hdGUgY29udGVudCBpbmRleCBtZW1vcnlcbiAgICBpZiAodGhpcy5jb250ZW50SW5kZXgpIHtcbiAgICAgIC8vIFJvdWdoIGVzdGltYXRlOiBlYWNoIHRlcm0gKyBlbnRyeSBJRHNcbiAgICAgIHRvdGFsQnl0ZXMgKz0gdGhpcy5jb250ZW50SW5kZXguc2l6ZSAqIDEwMDtcbiAgICB9XG5cbiAgICAvLyBFc3RpbWF0ZSB0ZW1wb3JhbCBpbmRleCBtZW1vcnlcbiAgICB0b3RhbEJ5dGVzICs9IHRoaXMudGVtcG9yYWxJbmRleC5zaXplICogNDg7IC8vIERhdGUgKyBJRFxuXG4gICAgLy8gRXN0aW1hdGUgY2FjaGUgbWVtb3J5XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNDYWNoZS52YWx1ZXMoKSkge1xuICAgICAgdG90YWxCeXRlcyArPSBKU09OLnN0cmluZ2lmeShlbnRyeSkubGVuZ3RoICogMjtcbiAgICB9XG5cbiAgICB0aGlzLm1lbW9yeVVzYWdlQnl0ZXMgPSB0b3RhbEJ5dGVzO1xuXG4gICAgLy8gQ2hlY2sgaWYgd2UncmUgZXhjZWVkaW5nIG1lbW9yeSBsaW1pdFxuICAgIGlmICh0b3RhbEJ5dGVzID4gdGhpcy5tYXhNZW1vcnlCeXRlcykge1xuICAgICAgbG9nZ2VyLndhcm4oJ01lbW9yeSBzZWFyY2ggaW5kZXggZXhjZWVkaW5nIGxpbWl0Jywge1xuICAgICAgICB1c2VkTUI6IE1hdGgucm91bmQodG90YWxCeXRlcyAvIDEwMjQgLyAxMDI0KSxcbiAgICAgICAgbGltaXRNQjogTWF0aC5yb3VuZCh0aGlzLm1heE1lbW9yeUJ5dGVzIC8gMTAyNCAvIDEwMjQpXG4gICAgICB9KTtcblxuICAgICAgLy8gVHJpZ2dlciBMUlUgZXZpY3Rpb24gaWYgZW5hYmxlZFxuICAgICAgaWYgKHRoaXMuY29uZmlnLmVuYWJsZUxSVUV2aWN0aW9uKSB7XG4gICAgICAgIHRoaXMuZXZpY3RMUlVFbnRyaWVzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2aWN0IGxlYXN0IHJlY2VudGx5IHVzZWQgZW50cmllcyB0byBmcmVlIG1lbW9yeVxuICAgKiBGSVg6IEFkZGVkIExSVSBldmljdGlvbiBmb3IgbWVtb3J5IG1hbmFnZW1lbnRcbiAgICovXG4gIHByaXZhdGUgZXZpY3RMUlVFbnRyaWVzKCk6IHZvaWQge1xuICAgIC8vIEdldCBlbnRyaWVzIHNvcnRlZCBieSBhY2Nlc3MgdGltZSAod291bGQgbmVlZCB0byB0cmFjayB0aGlzKVxuICAgIC8vIEZvciBub3csIGV2aWN0IG9sZGVzdCAyMCUgb2YgZW50cmllc1xuICAgIGNvbnN0IGVudHJpZXNUb0V2aWN0ID0gTWF0aC5mbG9vcih0aGlzLmVudHJpZXNDYWNoZS5zaXplICogMC4yKTtcbiAgICBjb25zdCBlbnRyaWVzQXJyYXkgPSBBcnJheS5mcm9tKHRoaXMuZW50cmllc0NhY2hlLmtleXMoKSk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXNUb0V2aWN0OyBpKyspIHtcbiAgICAgIGNvbnN0IGlkVG9FdmljdCA9IGVudHJpZXNBcnJheVtpXTtcbiAgICAgIHRoaXMucmVtb3ZlRW50cnkoaWRUb0V2aWN0KTtcbiAgICB9XG5cbiAgICBsb2dnZXIuaW5mbygnRXZpY3RlZCBMUlUgZW50cmllcycsIHtcbiAgICAgIGV2aWN0ZWRDb3VudDogZW50cmllc1RvRXZpY3QsXG4gICAgICByZW1haW5pbmdDb3VudDogdGhpcy5lbnRyaWVzQ2FjaGUuc2l6ZVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBpbmRleCB0byBKU09OIGZvciBwZXJzaXN0ZW5jZVxuICAgKiBGSVg6IEFkZGVkIGluZGV4IHNlcmlhbGl6YXRpb24gZm9yIGNvbGQgc3RhcnQgb3B0aW1pemF0aW9uXG4gICAqL1xuICBzZXJpYWxpemUoKTogc3RyaW5nIHtcbiAgICBpZiAoIXRoaXMuaXNCdWlsdCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc2VyaWFsaXplIHVuYnVpbHQgaW5kZXgnKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleERhdGEgPSB7XG4gICAgICB2ZXJzaW9uOiAnMS4wLjAnLFxuICAgICAgc3RhdHM6IHRoaXMuc3RhdHMsXG4gICAgICB0YWdJbmRleDogQXJyYXkuZnJvbSh0aGlzLnRhZ0luZGV4LmVudHJpZXMoKSkubWFwKChbdGFnLCBpZHNdKSA9PiAoe1xuICAgICAgICB0YWcsXG4gICAgICAgIGlkczogQXJyYXkuZnJvbShpZHMpXG4gICAgICB9KSksXG4gICAgICBwcml2YWN5SW5kZXg6IEFycmF5LmZyb20odGhpcy5wcml2YWN5SW5kZXguZW50cmllcygpKS5tYXAoKFtsZXZlbCwgaWRzXSkgPT4gKHtcbiAgICAgICAgbGV2ZWwsXG4gICAgICAgIGlkczogQXJyYXkuZnJvbShpZHMpXG4gICAgICB9KSksXG4gICAgICB0ZW1wb3JhbEluZGV4OiB0aGlzLnRlbXBvcmFsSW5kZXguc2VyaWFsaXplKCksXG4gICAgICAvLyBOb3RlOiBDb250ZW50IGluZGV4IGlzIG5vdCBzZXJpYWxpemVkIGR1ZSB0byBzaXplXG4gICAgICAvLyBJdCB3aWxsIGJlIHJlYnVpbHQgb24gbG9hZCBpZiBuZWVkZWRcbiAgICB9O1xuXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGluZGV4RGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogRGVzZXJpYWxpemUgaW5kZXggZnJvbSBKU09OXG4gICAqIEZJWDogQWRkZWQgaW5kZXggZGVzZXJpYWxpemF0aW9uIGZvciBmYXN0ZXIgc3RhcnR1cFxuICAgKi9cbiAgZGVzZXJpYWxpemUoZGF0YTogc3RyaW5nLCBlbnRyaWVzOiBNYXA8c3RyaW5nLCBNZW1vcnlFbnRyeT4pOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaW5kZXhEYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcblxuICAgICAgLy8gVmFsaWRhdGUgdmVyc2lvblxuICAgICAgaWYgKGluZGV4RGF0YS52ZXJzaW9uICE9PSAnMS4wLjAnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgaW5kZXggdmVyc2lvbjogJHtpbmRleERhdGEudmVyc2lvbn1gKTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2xlYXIgZXhpc3RpbmcgaW5kZXhlc1xuICAgICAgdGhpcy5jbGVhcigpO1xuXG4gICAgICAvLyBSZXN0b3JlIHRhZyBpbmRleFxuICAgICAgZm9yIChjb25zdCB7IHRhZywgaWRzIH0gb2YgaW5kZXhEYXRhLnRhZ0luZGV4KSB7XG4gICAgICAgIHRoaXMudGFnSW5kZXguc2V0KHRhZywgbmV3IFNldChpZHMpKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzdG9yZSBwcml2YWN5IGluZGV4XG4gICAgICBmb3IgKGNvbnN0IHsgbGV2ZWwsIGlkcyB9IG9mIGluZGV4RGF0YS5wcml2YWN5SW5kZXgpIHtcbiAgICAgICAgdGhpcy5wcml2YWN5SW5kZXguc2V0KGxldmVsIGFzIFByaXZhY3lMZXZlbCwgbmV3IFNldChpZHMpKTtcbiAgICAgIH1cblxuICAgICAgLy8gUmVzdG9yZSB0ZW1wb3JhbCBpbmRleFxuICAgICAgdGhpcy50ZW1wb3JhbEluZGV4LmRlc2VyaWFsaXplKGluZGV4RGF0YS50ZW1wb3JhbEluZGV4KTtcblxuICAgICAgLy8gUmVzdG9yZSBlbnRyaWVzIGNhY2hlIGZyb20gcHJvdmlkZWQgZW50cmllc1xuICAgICAgZm9yIChjb25zdCBbaWQsIGVudHJ5XSBvZiBlbnRyaWVzKSB7XG4gICAgICAgIGlmIChpbmRleERhdGEudGFnSW5kZXguc29tZSgoaXRlbTogYW55KSA9PiBpdGVtLmlkcy5pbmNsdWRlcyhpZCkpKSB7XG4gICAgICAgICAgdGhpcy5lbnRyaWVzQ2FjaGUuc2V0KGlkLCBlbnRyeSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gUmVidWlsZCBjb250ZW50IGluZGV4IGlmIGVuYWJsZWQgKGNhbid0IHNlcmlhbGl6ZSBlZmZpY2llbnRseSlcbiAgICAgIGlmICh0aGlzLmNvbmZpZy5lbmFibGVDb250ZW50SW5kZXgpIHtcbiAgICAgICAgdGhpcy5jb250ZW50SW5kZXggPSBuZXcgQ29udGVudEluZGV4KHRoaXMuY29uZmlnKTtcbiAgICAgICAgZm9yIChjb25zdCBbaWQsIGVudHJ5XSBvZiB0aGlzLmVudHJpZXNDYWNoZSkge1xuICAgICAgICAgIHRoaXMuY29udGVudEluZGV4LmFkZEVudHJ5KGlkLCBlbnRyeS5jb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBVcGRhdGUgc3RhdHNcbiAgICAgIHRoaXMuc3RhdHMgPSBpbmRleERhdGEuc3RhdHM7XG4gICAgICB0aGlzLmlzQnVpbHQgPSB0cnVlO1xuXG4gICAgICBsb2dnZXIuaW5mbygnTWVtb3J5IHNlYXJjaCBpbmRleCBkZXNlcmlhbGl6ZWQnLCB0aGlzLnN0YXRzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVzZXJpYWxpemUgaW5kZXgsIHJlYnVpbGRpbmcnLCBlcnJvcik7XG4gICAgICAvLyBGYWxsIGJhY2sgdG8gYnVpbGRpbmcgZnJvbSBzY3JhdGNoXG4gICAgICB0aGlzLmJ1aWxkSW5kZXgoZW50cmllcyk7XG4gICAgfVxuICB9XG59Il19
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export declare const PACKAGE_VERSION = "2.0.0-rc.6";
6
- export declare const BUILD_TIMESTAMP = "2026-03-26T20:44:27.331Z";
5
+ export declare const PACKAGE_VERSION = "2.0.0";
6
+ export declare const BUILD_TIMESTAMP = "2026-04-01T23:24:54.345Z";
7
7
  export declare const BUILD_TYPE: 'npm' | 'git';
8
8
  export declare const PACKAGE_NAME = "@dollhousemcp/mcp-server";
9
9
  //# sourceMappingURL=version.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/generated/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe,eAAe,CAAC;AAC5C,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,UAAU,EAAE,KAAK,GAAG,KAAa,CAAC;AAC/C,eAAO,MAAM,YAAY,6BAA6B,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/generated/version.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe,UAAU,CAAC;AACvC,eAAO,MAAM,eAAe,6BAA6B,CAAC;AAC1D,eAAO,MAAM,UAAU,EAAE,KAAK,GAAG,KAAa,CAAC;AAC/C,eAAO,MAAM,YAAY,6BAA6B,CAAC"}
@@ -2,8 +2,8 @@
2
2
  * Auto-generated file - DO NOT EDIT
3
3
  * Generated at build time by scripts/generate-version.js
4
4
  */
5
- export const PACKAGE_VERSION = '2.0.0-rc.6';
6
- export const BUILD_TIMESTAMP = '2026-03-26T20:44:27.331Z';
5
+ export const PACKAGE_VERSION = '2.0.0';
6
+ export const BUILD_TIMESTAMP = '2026-04-01T23:24:54.345Z';
7
7
  export const BUILD_TYPE = 'npm';
8
8
  export const PACKAGE_NAME = '@dollhousemcp/mcp-server';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDO0FBQzVDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMC1yYy42JztcbmV4cG9ydCBjb25zdCBCVUlMRF9USU1FU1RBTVAgPSAnMjAyNi0wMy0yNlQyMDo0NDoyNy4zMzFaJztcbmV4cG9ydCBjb25zdCBCVUlMRF9UWVBFOiAnbnBtJyB8ICdnaXQnID0gJ25wbSc7XG5leHBvcnQgY29uc3QgUEFDS0FHRV9OQU1FID0gJ0Bkb2xsaG91c2VtY3AvbWNwLXNlcnZlcic7XG4iXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9nZW5lcmF0ZWQvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUMxRCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQWtCLEtBQUssQ0FBQztBQUMvQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dG8tZ2VuZXJhdGVkIGZpbGUgLSBETyBOT1QgRURJVFxuICogR2VuZXJhdGVkIGF0IGJ1aWxkIHRpbWUgYnkgc2NyaXB0cy9nZW5lcmF0ZS12ZXJzaW9uLmpzXG4gKi9cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9ICcyLjAuMCc7XG5leHBvcnQgY29uc3QgQlVJTERfVElNRVNUQU1QID0gJzIwMjYtMDQtMDFUMjM6MjQ6NTQuMzQ1Wic7XG5leHBvcnQgY29uc3QgQlVJTERfVFlQRTogJ25wbScgfCAnZ2l0JyA9ICducG0nO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAZG9sbGhvdXNlbWNwL21jcC1zZXJ2ZXInO1xuIl19
@@ -73,10 +73,10 @@ export class EnhancedIndexHandler {
73
73
  }
74
74
  // FIX: DMCP-SEC-006 - Add security audit logging for index operations
75
75
  SecurityMonitor.logSecurityEvent({
76
- type: 'ELEMENT_CREATED',
76
+ type: 'MEMORY_SEARCHED',
77
77
  severity: 'LOW',
78
78
  source: 'EnhancedIndexHandler.findSimilarElements',
79
- details: `Similarity search performed for element: ${options.elementName}`,
79
+ details: `Similarity search for: ${options.elementName}`,
80
80
  additionalData: {
81
81
  elementType: options.elementType,
82
82
  limit: options.limit,
@@ -277,10 +277,10 @@ export class EnhancedIndexHandler {
277
277
  });
278
278
  // FIX: DMCP-SEC-006 - Add security audit logging
279
279
  SecurityMonitor.logSecurityEvent({
280
- type: 'ELEMENT_CREATED',
280
+ type: 'MEMORY_SEARCHED',
281
281
  severity: 'LOW',
282
282
  source: 'EnhancedIndexHandler.searchByVerb',
283
- details: `Verb search performed for action: ${options.verb}`,
283
+ details: `Verb search for action: ${options.verb}`,
284
284
  additionalData: {
285
285
  verb: options.verb,
286
286
  limit: options.limit
@@ -340,7 +340,7 @@ export class EnhancedIndexHandler {
340
340
  });
341
341
  // FIX: DMCP-SEC-006 - Add security audit logging
342
342
  SecurityMonitor.logSecurityEvent({
343
- type: 'ELEMENT_CREATED',
343
+ type: 'MEMORY_SEARCHED',
344
344
  severity: 'LOW',
345
345
  source: 'EnhancedIndexHandler.getRelationshipStats',
346
346
  details: 'Enhanced Index statistics retrieved',
@@ -406,4 +406,4 @@ export class EnhancedIndexHandler {
406
406
  return icons[type] || icons.unknown;
407
407
  }
408
408
  }
409
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5oYW5jZWRJbmRleEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGFuZGxlcnMvRW5oYW5jZWRJbmRleEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFHSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFbEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdEUsTUFBTSxPQUFPLG9CQUFvQjtJQUVaO0lBQ0E7SUFGbkIsWUFDbUIsb0JBQTBDLEVBQzFDLGdCQUF5QztRQUR6Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7SUFDekQsQ0FBQztJQUVKOztPQUVHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BS3pCO1FBQ0MsSUFBSSxDQUFDO1lBQ0gsa0JBQWtCO1lBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sT0FBTyxDQUFDLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDcEUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1lBQ25FLENBQUM7WUFFRCxtRkFBbUY7WUFDbkYs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WUFDSCxDQUFDO1lBRUQsT0FBTztnQkFDTCxPQUFPLEVBQUUsQ0FBQzt3QkFDUixJQUFJLEVBQUUsTUFBTTt3QkFDWixJQUFJO3FCQUNMLENBQUM7YUFDSCxDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsWUFBWSxDQUFDLFFBQVEsQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRSxPQUFPO2dCQUNMLE9BQU8sRUFBRSxDQUFDO3dCQUNSLElBQUksRUFBRSxNQUFNO3dCQUNaLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSwwQkFBMEIsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRTtxQkFDaEksQ0FBQzthQUNILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYyxDQUFDLElBQVk7UUFDakMsTUFBTSxLQUFLLEdBQThCO1lBQ3ZDLFFBQVEsRUFBRSxJQUFJO1lBQ2QsTUFBTSxFQUFFLEtBQUs7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLE1BQU0sRUFBRSxJQUFJO1lBQ1osUUFBUSxFQUFFLElBQUk7WUFDZCxTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbmhhbmNlZCBJbmRleCBoYW5kbGVyIGZvciBzZW1hbnRpYyBzZWFyY2ggYW5kIHJlbGF0aW9uc2hpcHNcbiAqXG4gKiBJbXBsZW1lbnRzIHRoZSBNQ1AgdG9vbCBoYW5kbGVycyBmb3IgRW5oYW5jZWQgSW5kZXggZnVuY3Rpb25hbGl0eVxuICogaW5jbHVkaW5nIHNpbWlsYXJpdHkgc2VhcmNoLCByZWxhdGlvbnNoaXAgZGlzY292ZXJ5LCBhbmQgdmVyYi1iYXNlZCBzZWFyY2guXG4gKlxuICogRklYRVMgSU1QTEVNRU5URUQgKElzc3VlICMxMDk5KTpcbiAqIC0gVXNlcyBjZW50cmFsaXplZCBlbGVtZW50IElEIHBhcnNpbmcgdXRpbGl0aWVzXG4gKiAtIENvbnNpc3RlbnQgSUQgZm9ybWF0IGhhbmRsaW5nXG4gKiAtIEJldHRlciBlcnJvciBoYW5kbGluZyBmb3IgaW52YWxpZCBJRHNcbiAqXG4gKiBVc2VzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGZvciBhbGwgc2VydmljZXM6XG4gKiAtIEVuaGFuY2VkSW5kZXhNYW5hZ2VyIGZvciBzZW1hbnRpYyBzZWFyY2ggYW5kIHJlbGF0aW9uc2hpcHNcbiAqIC0gUGVyc29uYUluZGljYXRvclNlcnZpY2UgZm9yIHBlcnNvbmEgaW5kaWNhdG9yIGZvcm1hdHRpbmdcbiAqL1xuXG5pbXBvcnQgeyBFbmhhbmNlZEluZGV4TWFuYWdlciB9IGZyb20gJy4uL3BvcnRmb2xpby9FbmhhbmNlZEluZGV4TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIgfSBmcm9tICcuLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi4vc2VjdXJpdHkvZXJyb3JIYW5kbGVyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBwYXJzZUVsZW1lbnRJZFdpdGhGYWxsYmFjaywgZm9ybWF0RWxlbWVudElkIH0gZnJvbSAnLi4vdXRpbHMvZWxlbWVudElkLmpzJztcbmltcG9ydCB7IHBhcnNlUmVsYXRpb25zaGlwLCBpc1BhcnNlZFJlbGF0aW9uc2hpcCB9IGZyb20gJy4uL3BvcnRmb2xpby90eXBlcy9SZWxhdGlvbnNoaXBUeXBlcy5qcyc7XG5pbXBvcnQgeyBQZXJzb25hSW5kaWNhdG9yU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL1BlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlLmpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQgfSBmcm9tICcuL2VsZW1lbnQtY3J1ZC9oZWxwZXJzLmpzJztcblxuZXhwb3J0IGNsYXNzIEVuaGFuY2VkSW5kZXhIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmhhbmNlZEluZGV4TWFuYWdlcjogRW5oYW5jZWRJbmRleE1hbmFnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmRpY2F0b3JTZXJ2aWNlOiBQZXJzb25hSW5kaWNhdG9yU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIEZpbmQgc2VtYW50aWNhbGx5IHNpbWlsYXIgZWxlbWVudHMgdXNpbmcgTkxQIHNjb3JpbmdcbiAgICovXG4gIGFzeW5jIGZpbmRTaW1pbGFyRWxlbWVudHMob3B0aW9uczoge1xuICAgIGVsZW1lbnROYW1lOiBzdHJpbmc7XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICB0aHJlc2hvbGQ6IG51bWJlcjtcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBpbnB1dHNcbiAgICAgIGlmICghb3B0aW9ucy5lbGVtZW50TmFtZSB8fCB0eXBlb2Ygb3B0aW9ucy5lbGVtZW50TmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbGVtZW50IG5hbWUgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gRklYOiBETUNQLVNFQy0wMDQgLSBOb3JtYWxpemUgVW5pY29kZSBpbiB1c2VyIGlucHV0IHRvIHByZXZlbnQgaG9tb2dyYXBoIGF0dGFja3NcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShvcHRpb25zLmVsZW1lbnROYW1lKTtcbiAgICAgIGlmICghbm9ybWFsaXplZC5pc1ZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IG5hbWU6ICR7bm9ybWFsaXplZC5kZXRlY3RlZElzc3Vlcz8uam9pbignLCAnKX1gKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuZWxlbWVudE5hbWUgPSBub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50O1xuXG4gICAgICAvLyBBbHNvIG5vcm1hbGl6ZSBlbGVtZW50IHR5cGUgaWYgcHJvdmlkZWRcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUob3B0aW9ucy5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghbm9ybWFsaXplZFR5cGUuaXNWYWxpZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7bm9ybWFsaXplZFR5cGUuZGV0ZWN0ZWRJc3N1ZXM/LmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5lbGVtZW50VHlwZSA9IG5vcm1hbGl6ZWRUeXBlLm5vcm1hbGl6ZWRDb250ZW50O1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubGltaXQgPD0gMCB8fCBvcHRpb25zLmxpbWl0ID4gMTAwKSB7XG4gICAgICAgIG9wdGlvbnMubGltaXQgPSA1OyAvLyBEZWZhdWx0IHRvIHJlYXNvbmFibGUgbGltaXRcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnRocmVzaG9sZCA8IDAgfHwgb3B0aW9ucy50aHJlc2hvbGQgPiAxKSB7XG4gICAgICAgIG9wdGlvbnMudGhyZXNob2xkID0gMC4zOyAvLyBEZWZhdWx0IHRvIHJlYXNvbmFibGUgdGhyZXNob2xkXG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgdGhlIGVuaGFuY2VkIGluZGV4IGlzIGF2YWlsYWJsZSB3aXRoIGVycm9yIGhhbmRsaW5nXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEluZGV4KCk7XG4gICAgICB9IGNhdGNoIChpbmRleEVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBFbmhhbmNlZCBJbmRleCcsIGluZGV4RXJyb3IpO1xuICAgICAgICAvLyBUcnkgdG8gcmVjb3ZlciBieSBmb3JjaW5nIHJlYnVpbGRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEluZGV4KHsgZm9yY2VSZWJ1aWxkOiB0cnVlIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuaGFuY2VkIEluZGV4IGlzIHVuYXZhaWxhYmxlLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgZm9yIGluZGV4IG9wZXJhdGlvbnNcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0VMRU1FTlRfQ1JFQVRFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnRW5oYW5jZWRJbmRleEhhbmRsZXIuZmluZFNpbWlsYXJFbGVtZW50cycsXG4gICAgICAgIGRldGFpbHM6IGBTaW1pbGFyaXR5IHNlYXJjaCBwZXJmb3JtZWQgZm9yIGVsZW1lbnQ6ICR7b3B0aW9ucy5lbGVtZW50TmFtZX1gLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlLFxuICAgICAgICAgIGxpbWl0OiBvcHRpb25zLmxpbWl0LFxuICAgICAgICAgIHRocmVzaG9sZDogb3B0aW9ucy50aHJlc2hvbGRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGVsZW1lbnRcbiAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IG9wdGlvbnMuZWxlbWVudFR5cGUgP1xuICAgICAgICBgJHtvcHRpb25zLmVsZW1lbnRUeXBlfS8ke29wdGlvbnMuZWxlbWVudE5hbWV9YCA6XG4gICAgICAgIG9wdGlvbnMuZWxlbWVudE5hbWU7XG5cbiAgICAgIC8vIEdldCBjb25uZWN0ZWQgZWxlbWVudHMgKHNpbWlsYXIvcmVsYXRlZClcbiAgICAgIGNvbnN0IGNvbm5lY3RlZE1hcCA9IGF3YWl0IHRoaXMuZW5oYW5jZWRJbmRleE1hbmFnZXIuZ2V0Q29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAge1xuICAgICAgICAgIG1heERlcHRoOiAxLCAgLy8gRGlyZWN0IHJlbGF0aW9uc2hpcHMgb25seVxuICAgICAgICAgIG1pblN0cmVuZ3RoOiBvcHRpb25zLnRocmVzaG9sZFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBDb252ZXJ0IHRvIGFycmF5IGFuZCBzb3J0IGJ5IHJlbGF0aW9uc2hpcCBzdHJlbmd0aFxuICAgICAgY29uc3Qgc2ltaWxhckVsZW1lbnRzID0gQXJyYXkuZnJvbShjb25uZWN0ZWRNYXAuZW50cmllcygpKVxuICAgICAgICAubWFwKChbaWQsIHBhdGhdKSA9PiB7XG4gICAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVdID0gaWQuc3BsaXQoJy8nKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBzY29yZTogcGF0aC50b3RhbFN0cmVuZ3RoIHx8IDAsXG4gICAgICAgICAgICByZWxhdGlvbnNoaXBzOiBwYXRoLnJlbGF0aW9uc2hpcHMgfHwgW10gIC8vIHJlbGF0aW9uc2hpcHMgaXMgYWxyZWFkeSBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKVxuICAgICAgICAuc2xpY2UoMCwgb3B0aW9ucy5saW1pdCk7XG5cbiAgICAgIC8vIEZvcm1hdCByZXN1bHRzXG4gICAgICBsZXQgdGV4dCA9IGAke3RoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+UjSAqKlNpbWlsYXIgRWxlbWVudHMqKlxcblxcbmA7XG4gICAgICB0ZXh0ICs9IGAqKlJlZmVyZW5jZSoqOiAke29wdGlvbnMuZWxlbWVudE5hbWV9XFxuYDtcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHRleHQgKz0gYCoqVHlwZSoqOiAke29wdGlvbnMuZWxlbWVudFR5cGV9XFxuYDtcbiAgICAgIH1cbiAgICAgIHRleHQgKz0gYCoqRm91bmQqKjogJHtzaW1pbGFyRWxlbWVudHMubGVuZ3RofSBzaW1pbGFyIGVsZW1lbnRzXFxuXFxuYDtcblxuICAgICAgaWYgKHNpbWlsYXJFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGV4dCArPSBgTm8gc2ltaWxhciBlbGVtZW50cyBmb3VuZCB3aXRoIHNpbWlsYXJpdHkgc2NvcmUgPj0gJHtvcHRpb25zLnRocmVzaG9sZH1cXG5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNpbWlsYXJFbGVtZW50cykge1xuICAgICAgICAgIGNvbnN0IGljb24gPSB0aGlzLmdldEVsZW1lbnRJY29uKGVsZW1lbnQudHlwZSk7XG4gICAgICAgICAgdGV4dCArPSBgJHtpY29ufSAqKiR7ZWxlbWVudC5uYW1lfSoqICgke2VsZW1lbnQudHlwZX0pXFxuYDtcbiAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OKIFNpbWlsYXJpdHk6ICR7KGVsZW1lbnQuc2NvcmUgKiAxMDApLnRvRml4ZWQoMSl9JVxcbmA7XG4gICAgICAgICAgaWYgKGVsZW1lbnQucmVsYXRpb25zaGlwcyAmJiBlbGVtZW50LnJlbGF0aW9uc2hpcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGV4dCArPSBgICAg8J+UlyBSZWxhdGlvbnNoaXBzOiAke2VsZW1lbnQucmVsYXRpb25zaGlwcy5qb2luKCcsICcpfVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRleHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRW5oYW5jZWRJbmRleEhhbmRsZXIuZmluZFNpbWlsYXJFbGVtZW50cycsIGVycm9yLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5pbmRpY2F0b3JTZXJ2aWNlLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRmFpbGVkIHRvIGZpbmQgc2ltaWxhciBlbGVtZW50czogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHJlbGF0aW9uc2hpcHMgZm9yIGEgc3BlY2lmaWMgZWxlbWVudFxuICAgKi9cbiAgYXN5bmMgZ2V0RWxlbWVudFJlbGF0aW9uc2hpcHMob3B0aW9uczoge1xuICAgIGVsZW1lbnROYW1lOiBzdHJpbmc7XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgcmVsYXRpb25zaGlwVHlwZXM/OiBzdHJpbmdbXTtcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNCAtIE5vcm1hbGl6ZSBVbmljb2RlIGluIHVzZXIgaW5wdXRcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShvcHRpb25zLmVsZW1lbnROYW1lKTtcbiAgICAgIGlmICghbm9ybWFsaXplZC5pc1ZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IG5hbWU6ICR7bm9ybWFsaXplZC5kZXRlY3RlZElzc3Vlcz8uam9pbignLCAnKX1gKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuZWxlbWVudE5hbWUgPSBub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50O1xuXG4gICAgICBpZiAob3B0aW9ucy5lbGVtZW50VHlwZSkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG9wdGlvbnMuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIW5vcm1hbGl6ZWRUeXBlLmlzVmFsaWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCB0eXBlOiAke25vcm1hbGl6ZWRUeXBlLmRldGVjdGVkSXNzdWVzPy5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZWxlbWVudFR5cGUgPSBub3JtYWxpemVkVHlwZS5ub3JtYWxpemVkQ29udGVudDtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHRoZSBpbmRleCB3aXRoIGVycm9yIGhhbmRsaW5nXG4gICAgICBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEluZGV4KCkuY2F0Y2goYXN5bmMgKGVycm9yKSA9PiB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBFbmhhbmNlZCBJbmRleCwgYXR0ZW1wdGluZyByZWJ1aWxkJywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbmhhbmNlZEluZGV4TWFuYWdlci5nZXRJbmRleCh7IGZvcmNlUmVidWlsZDogdHJ1ZSB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEFkZCBzZWN1cml0eSBhdWRpdCBsb2dnaW5nXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdFTEVNRU5UX0NSRUFURUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0VuaGFuY2VkSW5kZXhIYW5kbGVyLmdldEVsZW1lbnRSZWxhdGlvbnNoaXBzJyxcbiAgICAgICAgZGV0YWlsczogYFJlbGF0aW9uc2hpcCBxdWVyeSBwZXJmb3JtZWQgZm9yIGVsZW1lbnQ6ICR7b3B0aW9ucy5lbGVtZW50TmFtZX1gLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcFR5cGVzOiBvcHRpb25zLnJlbGF0aW9uc2hpcFR5cGVzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBJc3N1ZSAjNzQ5OiBOb3JtYWxpemUgZWxlbWVudCB0eXBlIChzaW5ndWxhcuKGknBsdXJhbCkgYmVmb3JlIElEIGZvcm1hdHRpbmdcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNvbnN0IHsgdHlwZTogcmVzb2x2ZWRUeXBlIH0gPSBub3JtYWxpemVFbGVtZW50VHlwZUlucHV0KG9wdGlvbnMuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAocmVzb2x2ZWRUeXBlKSB7XG4gICAgICAgICAgb3B0aW9ucy5lbGVtZW50VHlwZSA9IHJlc29sdmVkVHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7b3B0aW9ucy5lbGVtZW50VHlwZX0nIGluIHJlbGF0aW9uc2hpcCBxdWVyeSDigJQgcHJvY2VlZGluZyB3aXRoIG9yaWdpbmFsIHZhbHVlYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRklYOiBVc2UgY2VudHJhbGl6ZWQgZWxlbWVudCBJRCBmb3JtYXR0aW5nXG4gICAgICAvLyBJZiBubyBlbGVtZW50IHR5cGUgcHJvdmlkZWQsIHVzZSBmdWxsIGVsZW1lbnQgbmFtZSBhcy1pcyAobWF5IGFscmVhZHkgaW5jbHVkZSB0eXBlKVxuICAgICAgY29uc3QgZWxlbWVudElkID0gb3B0aW9ucy5lbGVtZW50VHlwZSA/XG4gICAgICAgIGZvcm1hdEVsZW1lbnRJZChvcHRpb25zLmVsZW1lbnRUeXBlLCBvcHRpb25zLmVsZW1lbnROYW1lKSA6XG4gICAgICAgIG9wdGlvbnMuZWxlbWVudE5hbWU7XG5cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHMgPSBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEVsZW1lbnRSZWxhdGlvbnNoaXBzKGVsZW1lbnRJZCk7XG5cbiAgICAgIC8vIEZpbHRlciBieSB0eXBlIGlmIHJlcXVlc3RlZFxuICAgICAgbGV0IGZpbHRlcmVkUmVsYXRpb25zaGlwcyA9IHJlbGF0aW9uc2hpcHM7XG4gICAgICBpZiAob3B0aW9ucy5yZWxhdGlvbnNoaXBUeXBlcyAmJiBvcHRpb25zLnJlbGF0aW9uc2hpcFR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyZWRSZWxhdGlvbnNoaXBzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBvcHRpb25zLnJlbGF0aW9uc2hpcFR5cGVzKSB7XG4gICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcHNbdHlwZV0pIHtcbiAgICAgICAgICAgIGZpbHRlcmVkUmVsYXRpb25zaGlwc1t0eXBlXSA9IHJlbGF0aW9uc2hpcHNbdHlwZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZvcm1hdCByZXN1bHRzXG4gICAgICBsZXQgdGV4dCA9IGAke3RoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+UlyAqKkVsZW1lbnQgUmVsYXRpb25zaGlwcyoqXFxuXFxuYDtcbiAgICAgIHRleHQgKz0gYCoqRWxlbWVudCoqOiAke29wdGlvbnMuZWxlbWVudE5hbWV9XFxuYDtcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHRleHQgKz0gYCoqVHlwZSoqOiAke29wdGlvbnMuZWxlbWVudFR5cGV9XFxuYDtcbiAgICAgIH1cbiAgICAgIHRleHQgKz0gJ1xcbic7XG5cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcENvdW50ID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXJlZFJlbGF0aW9uc2hpcHMpXG4gICAgICAgIC5yZWR1Y2UoKHN1bSwgcmVscykgPT4gc3VtICsgKEFycmF5LmlzQXJyYXkocmVscykgPyByZWxzLmxlbmd0aCA6IDApLCAwKTtcblxuICAgICAgaWYgKHJlbGF0aW9uc2hpcENvdW50ID09PSAwKSB7XG4gICAgICAgIHRleHQgKz0gYE5vIHJlbGF0aW9uc2hpcHMgZm91bmQgZm9yIHRoaXMgZWxlbWVudC5cXG5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBbcmVsVHlwZSwgcmVsYXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXJlZFJlbGF0aW9uc2hpcHMpKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25zKSAmJiByZWxhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGV4dCArPSBgKioke3JlbFR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZWxUeXBlLnNsaWNlKDEpfSAoJHtyZWxhdGlvbnMubGVuZ3RofSkqKlxcbmA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlbCBvZiByZWxhdGlvbnMpIHtcbiAgICAgICAgICAgICAgLy8gRklYOiBVc2UgdHlwZS1zYWZlIHJlbGF0aW9uc2hpcCBwYXJzaW5nXG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJlbCA9IHBhcnNlUmVsYXRpb25zaGlwKHJlbCk7XG4gICAgICAgICAgICAgIGlmIChpc1BhcnNlZFJlbGF0aW9uc2hpcChwYXJzZWRSZWwpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMuZ2V0RWxlbWVudEljb24ocGFyc2VkUmVsLnRhcmdldFR5cGUpO1xuICAgICAgICAgICAgICAgIHRleHQgKz0gYCAgJHtpY29ufSAke3BhcnNlZFJlbC50YXJnZXROYW1lfWA7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZFJlbC5zdHJlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgdGV4dCArPSBgIChzdHJlbmd0aDogJHsocGFyc2VkUmVsLnN0cmVuZ3RoICogMTAwKS50b0ZpeGVkKDApfSUpYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGV4dCArPSAnXFxuJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayBmb3IgaW52YWxpZCByZWxhdGlvbnNoaXBzXG4gICAgICAgICAgICAgICAgY29uc3QgaWRUb1BhcnNlID0gdHlwZW9mIHJlbCA9PT0gJ3N0cmluZycgPyByZWwgOiAocmVsIGFzIGFueSkuZWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUVsZW1lbnRJZFdpdGhGYWxsYmFjayhpZFRvUGFyc2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGljb24gPSB0aGlzLmdldEVsZW1lbnRJY29uKHBhcnNlZC50eXBlKTtcbiAgICAgICAgICAgICAgICB0ZXh0ICs9IGAgICR7aWNvbn0gJHtwYXJzZWQubmFtZX0g4pqg77iPXFxuYDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCArPSAnXFxuJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRW5oYW5jZWRJbmRleEhhbmRsZXIuZ2V0RWxlbWVudFJlbGF0aW9uc2hpcHMnLCBlcnJvciwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBnZXQgcmVsYXRpb25zaGlwczogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIGVsZW1lbnRzIGJ5IGFjdGlvbiB2ZXJiXG4gICAqL1xuICBhc3luYyBzZWFyY2hCeVZlcmIob3B0aW9uczoge1xuICAgIHZlcmI6IHN0cmluZztcbiAgICBsaW1pdDogbnVtYmVyO1xuICB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZJWDogRE1DUC1TRUMtMDA0IC0gTm9ybWFsaXplIFVuaWNvZGUgaW4gdXNlciBpbnB1dFxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG9wdGlvbnMudmVyYik7XG4gICAgICBpZiAoIW5vcm1hbGl6ZWQuaXNWYWxpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmVyYjogJHtub3JtYWxpemVkLmRldGVjdGVkSXNzdWVzPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy52ZXJiID0gbm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudDtcblxuICAgICAgLy8gR2V0IHRoZSBpbmRleCB3aXRoIGVycm9yIGhhbmRsaW5nXG4gICAgICBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEluZGV4KCkuY2F0Y2goYXN5bmMgKGVycm9yKSA9PiB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBFbmhhbmNlZCBJbmRleCwgYXR0ZW1wdGluZyByZWJ1aWxkJywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbmhhbmNlZEluZGV4TWFuYWdlci5nZXRJbmRleCh7IGZvcmNlUmVidWlsZDogdHJ1ZSB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEFkZCBzZWN1cml0eSBhdWRpdCBsb2dnaW5nXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdFTEVNRU5UX0NSRUFURUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0VuaGFuY2VkSW5kZXhIYW5kbGVyLnNlYXJjaEJ5VmVyYicsXG4gICAgICAgIGRldGFpbHM6IGBWZXJiIHNlYXJjaCBwZXJmb3JtZWQgZm9yIGFjdGlvbjogJHtvcHRpb25zLnZlcmJ9YCxcbiAgICAgICAgYWRkaXRpb25hbERhdGE6IHtcbiAgICAgICAgICB2ZXJiOiBvcHRpb25zLnZlcmIsXG4gICAgICAgICAgbGltaXQ6IG9wdGlvbnMubGltaXRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIFNlYXJjaCBieSB2ZXJiXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5lbmhhbmNlZEluZGV4TWFuYWdlci5nZXRFbGVtZW50c0J5QWN0aW9uKG9wdGlvbnMudmVyYik7XG5cbiAgICAgIC8vIExpbWl0IHJlc3VsdHNcbiAgICAgIGNvbnN0IGxpbWl0ZWQgPSByZXN1bHRzLnNsaWNlKDAsIG9wdGlvbnMubGltaXQpO1xuXG4gICAgICAvLyBGb3JtYXQgcmVzdWx0c1xuICAgICAgbGV0IHRleHQgPSBgJHt0aGlzLmluZGljYXRvclNlcnZpY2UuZ2V0UGVyc29uYUluZGljYXRvcigpffCfjq8gKipFbGVtZW50cyBmb3IgQWN0aW9uOiBcIiR7b3B0aW9ucy52ZXJifVwiKipcXG5cXG5gO1xuICAgICAgdGV4dCArPSBgKipGb3VuZCoqOiAke2xpbWl0ZWQubGVuZ3RofSBlbGVtZW50JHtsaW1pdGVkLmxlbmd0aCA9PT0gMSA/ICcnIDogJ3MnfVxcblxcbmA7XG5cbiAgICAgIGlmIChsaW1pdGVkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0ZXh0ICs9IGBObyBlbGVtZW50cyBmb3VuZCB0aGF0IGNhbiBoYW5kbGUgdGhlIGFjdGlvbiBcIiR7b3B0aW9ucy52ZXJifVwiLlxcblxcbmA7XG4gICAgICAgIHRleHQgKz0gYCoqVGlwczoqKlxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBUcnkgcmVsYXRlZCB2ZXJicyAoZS5nLiwgXCJhbmFseXplXCIg4oaSIFwicmV2aWV3XCIsIFwiZXhhbWluZVwiKVxcbmA7XG4gICAgICAgIHRleHQgKz0gYOKAoiBVc2UgY29tbW9uIGFjdGlvbiB2ZXJicyBsaWtlIFwiY3JlYXRlXCIsIFwiZGVidWdcIiwgXCJvcHRpbWl6ZVwiXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIENoZWNrIGVsZW1lbnQgZGVzY3JpcHRpb25zIGZvciBzdXBwb3J0ZWQgYWN0aW9uc1xcbmA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnROYW1lIG9mIGxpbWl0ZWQpIHtcbiAgICAgICAgICAvLyBGSVg6IFVzZSBjZW50cmFsaXplZCBlbGVtZW50IElEIHBhcnNpbmdcbiAgICAgICAgICAvLyBOb3RlOiBnZXRFbGVtZW50c0J5QWN0aW9uIHJldHVybnMgbmFtZXMgaW4gXCJ0eXBlL25hbWVcIiBmb3JtYXQgZm9yIGxlZ2FjeSByZWFzb25zXG4gICAgICAgICAgY29uc3QgcGFyc2VkID0gZWxlbWVudE5hbWUuaW5jbHVkZXMoJy8nKSA/XG4gICAgICAgICAgICB7IHR5cGU6IGVsZW1lbnROYW1lLnNwbGl0KCcvJylbMF0sIG5hbWU6IGVsZW1lbnROYW1lLnNwbGl0KCcvJylbMV0gfSA6XG4gICAgICAgICAgICBwYXJzZUVsZW1lbnRJZFdpdGhGYWxsYmFjayhlbGVtZW50TmFtZSk7XG5cbiAgICAgICAgICBjb25zdCBpY29uID0gdGhpcy5nZXRFbGVtZW50SWNvbihwYXJzZWQudHlwZSk7XG4gICAgICAgICAgdGV4dCArPSBgJHtpY29ufSAqKiR7cGFyc2VkLm5hbWV9KiogKCR7cGFyc2VkLnR5cGV9KVxcbmA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRW5oYW5jZWRJbmRleEhhbmRsZXIuc2VhcmNoQnlWZXJiJywgZXJyb3IsIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmluZGljYXRvclNlcnZpY2UuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gc2VhcmNoIGJ5IHZlcmI6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0YXRpc3RpY3MgYWJvdXQgdGhlIEVuaGFuY2VkIEluZGV4IHJlbGF0aW9uc2hpcHNcbiAgICovXG4gIGFzeW5jIGdldFJlbGF0aW9uc2hpcFN0YXRzKCkge1xuICAgIHRyeSB7XG4gICAgICAvLyBHZXQgdGhlIGluZGV4IHdpdGggZXJyb3IgaGFuZGxpbmdcbiAgICAgIGF3YWl0IHRoaXMuZW5oYW5jZWRJbmRleE1hbmFnZXIuZ2V0SW5kZXgoKS5jYXRjaChhc3luYyAoZXJyb3IpID0+IHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZ2V0IEVuaGFuY2VkIEluZGV4LCBhdHRlbXB0aW5nIHJlYnVpbGQnLCBlcnJvcik7XG4gICAgICAgIHJldHVybiB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEluZGV4KHsgZm9yY2VSZWJ1aWxkOiB0cnVlIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmdcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ0VMRU1FTlRfQ1JFQVRFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnRW5oYW5jZWRJbmRleEhhbmRsZXIuZ2V0UmVsYXRpb25zaGlwU3RhdHMnLFxuICAgICAgICBkZXRhaWxzOiAnRW5oYW5jZWQgSW5kZXggc3RhdGlzdGljcyByZXRyaWV2ZWQnLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge31cbiAgICAgIH0pO1xuXG4gICAgICAvLyBHZXQgc3RhdHNcbiAgICAgIGNvbnN0IHN0YXRzID0gYXdhaXQgdGhpcy5lbmhhbmNlZEluZGV4TWFuYWdlci5nZXRSZWxhdGlvbnNoaXBTdGF0cygpO1xuXG4gICAgICAvLyBHZXQgdGhlIGluZGV4IGZvciBhZGRpdGlvbmFsIGluZm9cbiAgICAgIGNvbnN0IGluZGV4ID0gYXdhaXQgdGhpcy5lbmhhbmNlZEluZGV4TWFuYWdlci5nZXRJbmRleCgpO1xuXG4gICAgICAvLyBGb3JtYXQgcmVzdWx0c1xuICAgICAgbGV0IHRleHQgPSBgJHt0aGlzLmluZGljYXRvclNlcnZpY2UuZ2V0UGVyc29uYUluZGljYXRvcigpffCfk4ogKipFbmhhbmNlZCBJbmRleCBTdGF0aXN0aWNzKipcXG5cXG5gO1xuICAgICAgdGV4dCArPSBgKipJbmRleCBNZXRhZGF0YToqKlxcbmA7XG4gICAgICB0ZXh0ICs9IGDigKIgVmVyc2lvbjogJHtpbmRleC5tZXRhZGF0YS52ZXJzaW9ufVxcbmA7XG4gICAgICB0ZXh0ICs9IGDigKIgTGFzdCBVcGRhdGVkOiAke25ldyBEYXRlKGluZGV4Lm1ldGFkYXRhLmxhc3RfdXBkYXRlZCkudG9Mb2NhbGVTdHJpbmcoKX1cXG5gO1xuICAgICAgdGV4dCArPSBg4oCiIFRvdGFsIEVsZW1lbnRzOiAke2luZGV4Lm1ldGFkYXRhLnRvdGFsX2VsZW1lbnRzfVxcblxcbmA7XG5cbiAgICAgIHRleHQgKz0gYCoqUmVsYXRpb25zaGlwIFN0YXRpc3RpY3M6KipcXG5gO1xuICAgICAgZm9yIChjb25zdCBbdHlwZSwgY291bnRdIG9mIE9iamVjdC5lbnRyaWVzKHN0YXRzKSkge1xuICAgICAgICB0ZXh0ICs9IGDigKIgJHt0eXBlfTogJHtjb3VudH1cXG5gO1xuICAgICAgfVxuXG4gICAgICAvLyBDb3VudCB2ZXJiIHRyaWdnZXJzXG4gICAgICBjb25zdCB2ZXJiQ291bnQgPSBPYmplY3Qua2V5cyhpbmRleC5hY3Rpb25fdHJpZ2dlcnMgfHwge30pLmxlbmd0aDtcbiAgICAgIHRleHQgKz0gYFxcbioqVmVyYiBUcmlnZ2VyczoqKiAke3ZlcmJDb3VudH0gdmVyYnMgbWFwcGVkXFxuYDtcblxuICAgICAgLy8gU2hvdyB0b3AgdmVyYnMgaWYgYW55XG4gICAgICBpZiAodmVyYkNvdW50ID4gMCkge1xuICAgICAgICBjb25zdCB0b3BWZXJicyA9IE9iamVjdC5lbnRyaWVzKGluZGV4LmFjdGlvbl90cmlnZ2VycylcbiAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYlsxXS5sZW5ndGggLSBhWzFdLmxlbmd0aClcbiAgICAgICAgICAuc2xpY2UoMCwgNSk7XG4gICAgICAgIHRleHQgKz0gYCoqVG9wIEFjdGlvbiBWZXJiczoqKlxcbmA7XG4gICAgICAgIGZvciAoY29uc3QgW3ZlcmIsIGVsZW1lbnRzXSBvZiB0b3BWZXJicykge1xuICAgICAgICAgIHRleHQgKz0gYOKAoiAke3ZlcmJ9OiAke2VsZW1lbnRzLmxlbmd0aH0gZWxlbWVudHNcXG5gO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBFcnJvckhhbmRsZXIubG9nRXJyb3IoJ0VuaGFuY2VkSW5kZXhIYW5kbGVyLmdldFJlbGF0aW9uc2hpcFN0YXRzJywgZXJyb3IpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0OiBgJHt0aGlzLmluZGljYXRvclNlcnZpY2UuZ2V0UGVyc29uYUluZGljYXRvcigpfeKdjCBGYWlsZWQgdG8gZ2V0IHN0YXRzOiAke1NlY3VyZUVycm9ySGFuZGxlci5zYW5pdGl6ZUVycm9yKGVycm9yKS5tZXNzYWdlfWBcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldCBpY29uIGZvciBlbGVtZW50IHR5cGVcbiAgICovXG4gIHByaXZhdGUgZ2V0RWxlbWVudEljb24odHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpY29uczogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHtcbiAgICAgIHBlcnNvbmFzOiAn8J+OrScsXG4gICAgICBza2lsbHM6ICfwn5ug77iPJyxcbiAgICAgIHRlbXBsYXRlczogJ/Cfk4QnLFxuICAgICAgYWdlbnRzOiAn8J+klicsXG4gICAgICBtZW1vcmllczogJ/Cfp6AnLFxuICAgICAgZW5zZW1ibGVzOiAn8J+OqCcsXG4gICAgICB1bmtub3duOiAn8J+TpidcbiAgICB9O1xuICAgIHJldHVybiBpY29uc1t0eXBlXSB8fCBpY29ucy51bmtub3duO1xuICB9XG59XG4iXX0=
409
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW5oYW5jZWRJbmRleEhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaGFuZGxlcnMvRW5oYW5jZWRJbmRleEhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFHSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDakUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDcEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLG9CQUFvQixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFFbEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFdEUsTUFBTSxPQUFPLG9CQUFvQjtJQUVaO0lBQ0E7SUFGbkIsWUFDbUIsb0JBQTBDLEVBQzFDLGdCQUF5QztRQUR6Qyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQXNCO1FBQzFDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBeUI7SUFDekQsQ0FBQztJQUVKOztPQUVHO0lBQ0gsS0FBSyxDQUFDLG1CQUFtQixDQUFDLE9BS3pCO1FBQ0MsSUFBSSxDQUFDO1lBQ0gsa0JBQWtCO1lBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sT0FBTyxDQUFDLFdBQVcsS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDcEUsTUFBTSxJQUFJLEtBQUssQ0FBQywrQ0FBK0MsQ0FBQyxDQUFDO1lBQ25FLENBQUM7WUFFRCxtRkFBbUY7WUFDbkYs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WUFDSCxDQUFDO1lBRUQsT0FBTztnQkFDTCxPQUFPLEVBQUUsQ0FBQzt3QkFDUixJQUFJLEVBQUUsTUFBTTt3QkFDWixJQUFJO3FCQUNMLENBQUM7YUFDSCxDQUFDO1FBQ0osQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsWUFBWSxDQUFDLFFBQVEsQ0FBQywyQ0FBMkMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUMxRSxPQUFPO2dCQUNMLE9BQU8sRUFBRSxDQUFDO3dCQUNSLElBQUksRUFBRSxNQUFNO3dCQUNaLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFBbUIsRUFBRSwwQkFBMEIsa0JBQWtCLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRTtxQkFDaEksQ0FBQzthQUNILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssY0FBYyxDQUFDLElBQVk7UUFDakMsTUFBTSxLQUFLLEdBQThCO1lBQ3ZDLFFBQVEsRUFBRSxJQUFJO1lBQ2QsTUFBTSxFQUFFLEtBQUs7WUFDYixTQUFTLEVBQUUsSUFBSTtZQUNmLE1BQU0sRUFBRSxJQUFJO1lBQ1osUUFBUSxFQUFFLElBQUk7WUFDZCxTQUFTLEVBQUUsSUFBSTtZQUNmLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDdEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFbmhhbmNlZCBJbmRleCBoYW5kbGVyIGZvciBzZW1hbnRpYyBzZWFyY2ggYW5kIHJlbGF0aW9uc2hpcHNcbiAqXG4gKiBJbXBsZW1lbnRzIHRoZSBNQ1AgdG9vbCBoYW5kbGVycyBmb3IgRW5oYW5jZWQgSW5kZXggZnVuY3Rpb25hbGl0eVxuICogaW5jbHVkaW5nIHNpbWlsYXJpdHkgc2VhcmNoLCByZWxhdGlvbnNoaXAgZGlzY292ZXJ5LCBhbmQgdmVyYi1iYXNlZCBzZWFyY2guXG4gKlxuICogRklYRVMgSU1QTEVNRU5URUQgKElzc3VlICMxMDk5KTpcbiAqIC0gVXNlcyBjZW50cmFsaXplZCBlbGVtZW50IElEIHBhcnNpbmcgdXRpbGl0aWVzXG4gKiAtIENvbnNpc3RlbnQgSUQgZm9ybWF0IGhhbmRsaW5nXG4gKiAtIEJldHRlciBlcnJvciBoYW5kbGluZyBmb3IgaW52YWxpZCBJRHNcbiAqXG4gKiBVc2VzIGRlcGVuZGVuY3kgaW5qZWN0aW9uIGZvciBhbGwgc2VydmljZXM6XG4gKiAtIEVuaGFuY2VkSW5kZXhNYW5hZ2VyIGZvciBzZW1hbnRpYyBzZWFyY2ggYW5kIHJlbGF0aW9uc2hpcHNcbiAqIC0gUGVyc29uYUluZGljYXRvclNlcnZpY2UgZm9yIHBlcnNvbmEgaW5kaWNhdG9yIGZvcm1hdHRpbmdcbiAqL1xuXG5pbXBvcnQgeyBFbmhhbmNlZEluZGV4TWFuYWdlciB9IGZyb20gJy4uL3BvcnRmb2xpby9FbmhhbmNlZEluZGV4TWFuYWdlci5qcyc7XG5pbXBvcnQgeyBFcnJvckhhbmRsZXIgfSBmcm9tICcuLi91dGlscy9FcnJvckhhbmRsZXIuanMnO1xuaW1wb3J0IHsgU2VjdXJlRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi4vc2VjdXJpdHkvZXJyb3JIYW5kbGVyLmpzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uL3V0aWxzL2xvZ2dlci5qcyc7XG5pbXBvcnQgeyBVbmljb2RlVmFsaWRhdG9yIH0gZnJvbSAnLi4vc2VjdXJpdHkvdmFsaWRhdG9ycy91bmljb2RlVmFsaWRhdG9yLmpzJztcbmltcG9ydCB7IFNlY3VyaXR5TW9uaXRvciB9IGZyb20gJy4uL3NlY3VyaXR5L3NlY3VyaXR5TW9uaXRvci5qcyc7XG5pbXBvcnQgeyBwYXJzZUVsZW1lbnRJZFdpdGhGYWxsYmFjaywgZm9ybWF0RWxlbWVudElkIH0gZnJvbSAnLi4vdXRpbHMvZWxlbWVudElkLmpzJztcbmltcG9ydCB7IHBhcnNlUmVsYXRpb25zaGlwLCBpc1BhcnNlZFJlbGF0aW9uc2hpcCB9IGZyb20gJy4uL3BvcnRmb2xpby90eXBlcy9SZWxhdGlvbnNoaXBUeXBlcy5qcyc7XG5pbXBvcnQgeyBQZXJzb25hSW5kaWNhdG9yU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL1BlcnNvbmFJbmRpY2F0b3JTZXJ2aWNlLmpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUVsZW1lbnRUeXBlSW5wdXQgfSBmcm9tICcuL2VsZW1lbnQtY3J1ZC9oZWxwZXJzLmpzJztcblxuZXhwb3J0IGNsYXNzIEVuaGFuY2VkSW5kZXhIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbmhhbmNlZEluZGV4TWFuYWdlcjogRW5oYW5jZWRJbmRleE1hbmFnZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmRpY2F0b3JTZXJ2aWNlOiBQZXJzb25hSW5kaWNhdG9yU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIEZpbmQgc2VtYW50aWNhbGx5IHNpbWlsYXIgZWxlbWVudHMgdXNpbmcgTkxQIHNjb3JpbmdcbiAgICovXG4gIGFzeW5jIGZpbmRTaW1pbGFyRWxlbWVudHMob3B0aW9uczoge1xuICAgIGVsZW1lbnROYW1lOiBzdHJpbmc7XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgbGltaXQ6IG51bWJlcjtcbiAgICB0aHJlc2hvbGQ6IG51bWJlcjtcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBWYWxpZGF0ZSBpbnB1dHNcbiAgICAgIGlmICghb3B0aW9ucy5lbGVtZW50TmFtZSB8fCB0eXBlb2Ygb3B0aW9ucy5lbGVtZW50TmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbGVtZW50IG5hbWUgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgLy8gRklYOiBETUNQLVNFQy0wMDQgLSBOb3JtYWxpemUgVW5pY29kZSBpbiB1c2VyIGlucHV0IHRvIHByZXZlbnQgaG9tb2dyYXBoIGF0dGFja3NcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShvcHRpb25zLmVsZW1lbnROYW1lKTtcbiAgICAgIGlmICghbm9ybWFsaXplZC5pc1ZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IG5hbWU6ICR7bm9ybWFsaXplZC5kZXRlY3RlZElzc3Vlcz8uam9pbignLCAnKX1gKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuZWxlbWVudE5hbWUgPSBub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50O1xuXG4gICAgICAvLyBBbHNvIG5vcm1hbGl6ZSBlbGVtZW50IHR5cGUgaWYgcHJvdmlkZWRcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUeXBlID0gVW5pY29kZVZhbGlkYXRvci5ub3JtYWxpemUob3B0aW9ucy5lbGVtZW50VHlwZSk7XG4gICAgICAgIGlmICghbm9ybWFsaXplZFR5cGUuaXNWYWxpZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IHR5cGU6ICR7bm9ybWFsaXplZFR5cGUuZGV0ZWN0ZWRJc3N1ZXM/LmpvaW4oJywgJyl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5lbGVtZW50VHlwZSA9IG5vcm1hbGl6ZWRUeXBlLm5vcm1hbGl6ZWRDb250ZW50O1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMubGltaXQgPD0gMCB8fCBvcHRpb25zLmxpbWl0ID4gMTAwKSB7XG4gICAgICAgIG9wdGlvbnMubGltaXQgPSA1OyAvLyBEZWZhdWx0IHRvIHJlYXNvbmFibGUgbGltaXRcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnRocmVzaG9sZCA8IDAgfHwgb3B0aW9ucy50aHJlc2hvbGQgPiAxKSB7XG4gICAgICAgIG9wdGlvbnMudGhyZXNob2xkID0gMC4zOyAvLyBEZWZhdWx0IHRvIHJlYXNvbmFibGUgdGhyZXNob2xkXG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgdGhlIGVuaGFuY2VkIGluZGV4IGlzIGF2YWlsYWJsZSB3aXRoIGVycm9yIGhhbmRsaW5nXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEluZGV4KCk7XG4gICAgICB9IGNhdGNoIChpbmRleEVycm9yKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBFbmhhbmNlZCBJbmRleCcsIGluZGV4RXJyb3IpO1xuICAgICAgICAvLyBUcnkgdG8gcmVjb3ZlciBieSBmb3JjaW5nIHJlYnVpbGRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEluZGV4KHsgZm9yY2VSZWJ1aWxkOiB0cnVlIH0pO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0VuaGFuY2VkIEluZGV4IGlzIHVuYXZhaWxhYmxlLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZJWDogRE1DUC1TRUMtMDA2IC0gQWRkIHNlY3VyaXR5IGF1ZGl0IGxvZ2dpbmcgZm9yIGluZGV4IG9wZXJhdGlvbnNcbiAgICAgIFNlY3VyaXR5TW9uaXRvci5sb2dTZWN1cml0eUV2ZW50KHtcbiAgICAgICAgdHlwZTogJ01FTU9SWV9TRUFSQ0hFRCcsXG4gICAgICAgIHNldmVyaXR5OiAnTE9XJyxcbiAgICAgICAgc291cmNlOiAnRW5oYW5jZWRJbmRleEhhbmRsZXIuZmluZFNpbWlsYXJFbGVtZW50cycsXG4gICAgICAgIGRldGFpbHM6IGBTaW1pbGFyaXR5IHNlYXJjaCBmb3I6ICR7b3B0aW9ucy5lbGVtZW50TmFtZX1gLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlLFxuICAgICAgICAgIGxpbWl0OiBvcHRpb25zLmxpbWl0LFxuICAgICAgICAgIHRocmVzaG9sZDogb3B0aW9ucy50aHJlc2hvbGRcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEZpbmQgdGhlIGVsZW1lbnRcbiAgICAgIGNvbnN0IGVsZW1lbnRJZCA9IG9wdGlvbnMuZWxlbWVudFR5cGUgP1xuICAgICAgICBgJHtvcHRpb25zLmVsZW1lbnRUeXBlfS8ke29wdGlvbnMuZWxlbWVudE5hbWV9YCA6XG4gICAgICAgIG9wdGlvbnMuZWxlbWVudE5hbWU7XG5cbiAgICAgIC8vIEdldCBjb25uZWN0ZWQgZWxlbWVudHMgKHNpbWlsYXIvcmVsYXRlZClcbiAgICAgIGNvbnN0IGNvbm5lY3RlZE1hcCA9IGF3YWl0IHRoaXMuZW5oYW5jZWRJbmRleE1hbmFnZXIuZ2V0Q29ubmVjdGVkRWxlbWVudHMoXG4gICAgICAgIGVsZW1lbnRJZCxcbiAgICAgICAge1xuICAgICAgICAgIG1heERlcHRoOiAxLCAgLy8gRGlyZWN0IHJlbGF0aW9uc2hpcHMgb25seVxuICAgICAgICAgIG1pblN0cmVuZ3RoOiBvcHRpb25zLnRocmVzaG9sZFxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICAvLyBDb252ZXJ0IHRvIGFycmF5IGFuZCBzb3J0IGJ5IHJlbGF0aW9uc2hpcCBzdHJlbmd0aFxuICAgICAgY29uc3Qgc2ltaWxhckVsZW1lbnRzID0gQXJyYXkuZnJvbShjb25uZWN0ZWRNYXAuZW50cmllcygpKVxuICAgICAgICAubWFwKChbaWQsIHBhdGhdKSA9PiB7XG4gICAgICAgICAgY29uc3QgW3R5cGUsIG5hbWVdID0gaWQuc3BsaXQoJy8nKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBzY29yZTogcGF0aC50b3RhbFN0cmVuZ3RoIHx8IDAsXG4gICAgICAgICAgICByZWxhdGlvbnNoaXBzOiBwYXRoLnJlbGF0aW9uc2hpcHMgfHwgW10gIC8vIHJlbGF0aW9uc2hpcHMgaXMgYWxyZWFkeSBhbiBhcnJheSBvZiBzdHJpbmdzXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGIuc2NvcmUgLSBhLnNjb3JlKVxuICAgICAgICAuc2xpY2UoMCwgb3B0aW9ucy5saW1pdCk7XG5cbiAgICAgIC8vIEZvcm1hdCByZXN1bHRzXG4gICAgICBsZXQgdGV4dCA9IGAke3RoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+UjSAqKlNpbWlsYXIgRWxlbWVudHMqKlxcblxcbmA7XG4gICAgICB0ZXh0ICs9IGAqKlJlZmVyZW5jZSoqOiAke29wdGlvbnMuZWxlbWVudE5hbWV9XFxuYDtcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHRleHQgKz0gYCoqVHlwZSoqOiAke29wdGlvbnMuZWxlbWVudFR5cGV9XFxuYDtcbiAgICAgIH1cbiAgICAgIHRleHQgKz0gYCoqRm91bmQqKjogJHtzaW1pbGFyRWxlbWVudHMubGVuZ3RofSBzaW1pbGFyIGVsZW1lbnRzXFxuXFxuYDtcblxuICAgICAgaWYgKHNpbWlsYXJFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGV4dCArPSBgTm8gc2ltaWxhciBlbGVtZW50cyBmb3VuZCB3aXRoIHNpbWlsYXJpdHkgc2NvcmUgPj0gJHtvcHRpb25zLnRocmVzaG9sZH1cXG5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNpbWlsYXJFbGVtZW50cykge1xuICAgICAgICAgIGNvbnN0IGljb24gPSB0aGlzLmdldEVsZW1lbnRJY29uKGVsZW1lbnQudHlwZSk7XG4gICAgICAgICAgdGV4dCArPSBgJHtpY29ufSAqKiR7ZWxlbWVudC5uYW1lfSoqICgke2VsZW1lbnQudHlwZX0pXFxuYDtcbiAgICAgICAgICB0ZXh0ICs9IGAgICDwn5OKIFNpbWlsYXJpdHk6ICR7KGVsZW1lbnQuc2NvcmUgKiAxMDApLnRvRml4ZWQoMSl9JVxcbmA7XG4gICAgICAgICAgaWYgKGVsZW1lbnQucmVsYXRpb25zaGlwcyAmJiBlbGVtZW50LnJlbGF0aW9uc2hpcHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGV4dCArPSBgICAg8J+UlyBSZWxhdGlvbnNoaXBzOiAke2VsZW1lbnQucmVsYXRpb25zaGlwcy5qb2luKCcsICcpfVxcbmA7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRleHQgKz0gJ1xcbic7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRW5oYW5jZWRJbmRleEhhbmRsZXIuZmluZFNpbWlsYXJFbGVtZW50cycsIGVycm9yLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgICAgdHlwZTogXCJ0ZXh0XCIsXG4gICAgICAgICAgdGV4dDogYCR7dGhpcy5pbmRpY2F0b3JTZXJ2aWNlLmdldFBlcnNvbmFJbmRpY2F0b3IoKX3inYwgRmFpbGVkIHRvIGZpbmQgc2ltaWxhciBlbGVtZW50czogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHJlbGF0aW9uc2hpcHMgZm9yIGEgc3BlY2lmaWMgZWxlbWVudFxuICAgKi9cbiAgYXN5bmMgZ2V0RWxlbWVudFJlbGF0aW9uc2hpcHMob3B0aW9uczoge1xuICAgIGVsZW1lbnROYW1lOiBzdHJpbmc7XG4gICAgZWxlbWVudFR5cGU/OiBzdHJpbmc7XG4gICAgcmVsYXRpb25zaGlwVHlwZXM/OiBzdHJpbmdbXTtcbiAgfSkge1xuICAgIHRyeSB7XG4gICAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNCAtIE5vcm1hbGl6ZSBVbmljb2RlIGluIHVzZXIgaW5wdXRcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBVbmljb2RlVmFsaWRhdG9yLm5vcm1hbGl6ZShvcHRpb25zLmVsZW1lbnROYW1lKTtcbiAgICAgIGlmICghbm9ybWFsaXplZC5pc1ZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IG5hbWU6ICR7bm9ybWFsaXplZC5kZXRlY3RlZElzc3Vlcz8uam9pbignLCAnKX1gKTtcbiAgICAgIH1cbiAgICAgIG9wdGlvbnMuZWxlbWVudE5hbWUgPSBub3JtYWxpemVkLm5vcm1hbGl6ZWRDb250ZW50O1xuXG4gICAgICBpZiAob3B0aW9ucy5lbGVtZW50VHlwZSkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkVHlwZSA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG9wdGlvbnMuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIW5vcm1hbGl6ZWRUeXBlLmlzVmFsaWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZWxlbWVudCB0eXBlOiAke25vcm1hbGl6ZWRUeXBlLmRldGVjdGVkSXNzdWVzPy5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnMuZWxlbWVudFR5cGUgPSBub3JtYWxpemVkVHlwZS5ub3JtYWxpemVkQ29udGVudDtcbiAgICAgIH1cblxuICAgICAgLy8gR2V0IHRoZSBpbmRleCB3aXRoIGVycm9yIGhhbmRsaW5nXG4gICAgICBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEluZGV4KCkuY2F0Y2goYXN5bmMgKGVycm9yKSA9PiB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBFbmhhbmNlZCBJbmRleCwgYXR0ZW1wdGluZyByZWJ1aWxkJywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbmhhbmNlZEluZGV4TWFuYWdlci5nZXRJbmRleCh7IGZvcmNlUmVidWlsZDogdHJ1ZSB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEFkZCBzZWN1cml0eSBhdWRpdCBsb2dnaW5nXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdFTEVNRU5UX0NSRUFURUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0VuaGFuY2VkSW5kZXhIYW5kbGVyLmdldEVsZW1lbnRSZWxhdGlvbnNoaXBzJyxcbiAgICAgICAgZGV0YWlsczogYFJlbGF0aW9uc2hpcCBxdWVyeSBwZXJmb3JtZWQgZm9yIGVsZW1lbnQ6ICR7b3B0aW9ucy5lbGVtZW50TmFtZX1gLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIGVsZW1lbnRUeXBlOiBvcHRpb25zLmVsZW1lbnRUeXBlLFxuICAgICAgICAgIHJlbGF0aW9uc2hpcFR5cGVzOiBvcHRpb25zLnJlbGF0aW9uc2hpcFR5cGVzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBJc3N1ZSAjNzQ5OiBOb3JtYWxpemUgZWxlbWVudCB0eXBlIChzaW5ndWxhcuKGknBsdXJhbCkgYmVmb3JlIElEIGZvcm1hdHRpbmdcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIGNvbnN0IHsgdHlwZTogcmVzb2x2ZWRUeXBlIH0gPSBub3JtYWxpemVFbGVtZW50VHlwZUlucHV0KG9wdGlvbnMuZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAocmVzb2x2ZWRUeXBlKSB7XG4gICAgICAgICAgb3B0aW9ucy5lbGVtZW50VHlwZSA9IHJlc29sdmVkVHlwZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBsb2dnZXIud2FybihgVW5rbm93biBlbGVtZW50IHR5cGUgJyR7b3B0aW9ucy5lbGVtZW50VHlwZX0nIGluIHJlbGF0aW9uc2hpcCBxdWVyeSDigJQgcHJvY2VlZGluZyB3aXRoIG9yaWdpbmFsIHZhbHVlYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRklYOiBVc2UgY2VudHJhbGl6ZWQgZWxlbWVudCBJRCBmb3JtYXR0aW5nXG4gICAgICAvLyBJZiBubyBlbGVtZW50IHR5cGUgcHJvdmlkZWQsIHVzZSBmdWxsIGVsZW1lbnQgbmFtZSBhcy1pcyAobWF5IGFscmVhZHkgaW5jbHVkZSB0eXBlKVxuICAgICAgY29uc3QgZWxlbWVudElkID0gb3B0aW9ucy5lbGVtZW50VHlwZSA/XG4gICAgICAgIGZvcm1hdEVsZW1lbnRJZChvcHRpb25zLmVsZW1lbnRUeXBlLCBvcHRpb25zLmVsZW1lbnROYW1lKSA6XG4gICAgICAgIG9wdGlvbnMuZWxlbWVudE5hbWU7XG5cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHMgPSBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEVsZW1lbnRSZWxhdGlvbnNoaXBzKGVsZW1lbnRJZCk7XG5cbiAgICAgIC8vIEZpbHRlciBieSB0eXBlIGlmIHJlcXVlc3RlZFxuICAgICAgbGV0IGZpbHRlcmVkUmVsYXRpb25zaGlwcyA9IHJlbGF0aW9uc2hpcHM7XG4gICAgICBpZiAob3B0aW9ucy5yZWxhdGlvbnNoaXBUeXBlcyAmJiBvcHRpb25zLnJlbGF0aW9uc2hpcFR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyZWRSZWxhdGlvbnNoaXBzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdHlwZSBvZiBvcHRpb25zLnJlbGF0aW9uc2hpcFR5cGVzKSB7XG4gICAgICAgICAgaWYgKHJlbGF0aW9uc2hpcHNbdHlwZV0pIHtcbiAgICAgICAgICAgIGZpbHRlcmVkUmVsYXRpb25zaGlwc1t0eXBlXSA9IHJlbGF0aW9uc2hpcHNbdHlwZV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEZvcm1hdCByZXN1bHRzXG4gICAgICBsZXQgdGV4dCA9IGAke3RoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+UlyAqKkVsZW1lbnQgUmVsYXRpb25zaGlwcyoqXFxuXFxuYDtcbiAgICAgIHRleHQgKz0gYCoqRWxlbWVudCoqOiAke29wdGlvbnMuZWxlbWVudE5hbWV9XFxuYDtcbiAgICAgIGlmIChvcHRpb25zLmVsZW1lbnRUeXBlKSB7XG4gICAgICAgIHRleHQgKz0gYCoqVHlwZSoqOiAke29wdGlvbnMuZWxlbWVudFR5cGV9XFxuYDtcbiAgICAgIH1cbiAgICAgIHRleHQgKz0gJ1xcbic7XG5cbiAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcENvdW50ID0gT2JqZWN0LnZhbHVlcyhmaWx0ZXJlZFJlbGF0aW9uc2hpcHMpXG4gICAgICAgIC5yZWR1Y2UoKHN1bSwgcmVscykgPT4gc3VtICsgKEFycmF5LmlzQXJyYXkocmVscykgPyByZWxzLmxlbmd0aCA6IDApLCAwKTtcblxuICAgICAgaWYgKHJlbGF0aW9uc2hpcENvdW50ID09PSAwKSB7XG4gICAgICAgIHRleHQgKz0gYE5vIHJlbGF0aW9uc2hpcHMgZm91bmQgZm9yIHRoaXMgZWxlbWVudC5cXG5gO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBbcmVsVHlwZSwgcmVsYXRpb25zXSBvZiBPYmplY3QuZW50cmllcyhmaWx0ZXJlZFJlbGF0aW9uc2hpcHMpKSB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVsYXRpb25zKSAmJiByZWxhdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGV4dCArPSBgKioke3JlbFR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZWxUeXBlLnNsaWNlKDEpfSAoJHtyZWxhdGlvbnMubGVuZ3RofSkqKlxcbmA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlbCBvZiByZWxhdGlvbnMpIHtcbiAgICAgICAgICAgICAgLy8gRklYOiBVc2UgdHlwZS1zYWZlIHJlbGF0aW9uc2hpcCBwYXJzaW5nXG4gICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJlbCA9IHBhcnNlUmVsYXRpb25zaGlwKHJlbCk7XG4gICAgICAgICAgICAgIGlmIChpc1BhcnNlZFJlbGF0aW9uc2hpcChwYXJzZWRSZWwpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWNvbiA9IHRoaXMuZ2V0RWxlbWVudEljb24ocGFyc2VkUmVsLnRhcmdldFR5cGUpO1xuICAgICAgICAgICAgICAgIHRleHQgKz0gYCAgJHtpY29ufSAke3BhcnNlZFJlbC50YXJnZXROYW1lfWA7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZFJlbC5zdHJlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgdGV4dCArPSBgIChzdHJlbmd0aDogJHsocGFyc2VkUmVsLnN0cmVuZ3RoICogMTAwKS50b0ZpeGVkKDApfSUpYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGV4dCArPSAnXFxuJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayBmb3IgaW52YWxpZCByZWxhdGlvbnNoaXBzXG4gICAgICAgICAgICAgICAgY29uc3QgaWRUb1BhcnNlID0gdHlwZW9mIHJlbCA9PT0gJ3N0cmluZycgPyByZWwgOiAocmVsIGFzIGFueSkuZWxlbWVudDtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUVsZW1lbnRJZFdpdGhGYWxsYmFjayhpZFRvUGFyc2UpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGljb24gPSB0aGlzLmdldEVsZW1lbnRJY29uKHBhcnNlZC50eXBlKTtcbiAgICAgICAgICAgICAgICB0ZXh0ICs9IGAgICR7aWNvbn0gJHtwYXJzZWQubmFtZX0g4pqg77iPXFxuYDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCArPSAnXFxuJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRW5oYW5jZWRJbmRleEhhbmRsZXIuZ2V0RWxlbWVudFJlbGF0aW9uc2hpcHMnLCBlcnJvciwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBnZXQgcmVsYXRpb25zaGlwczogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWFyY2ggZm9yIGVsZW1lbnRzIGJ5IGFjdGlvbiB2ZXJiXG4gICAqL1xuICBhc3luYyBzZWFyY2hCeVZlcmIob3B0aW9uczoge1xuICAgIHZlcmI6IHN0cmluZztcbiAgICBsaW1pdDogbnVtYmVyO1xuICB9KSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEZJWDogRE1DUC1TRUMtMDA0IC0gTm9ybWFsaXplIFVuaWNvZGUgaW4gdXNlciBpbnB1dFxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IFVuaWNvZGVWYWxpZGF0b3Iubm9ybWFsaXplKG9wdGlvbnMudmVyYik7XG4gICAgICBpZiAoIW5vcm1hbGl6ZWQuaXNWYWxpZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdmVyYjogJHtub3JtYWxpemVkLmRldGVjdGVkSXNzdWVzPy5qb2luKCcsICcpfWApO1xuICAgICAgfVxuICAgICAgb3B0aW9ucy52ZXJiID0gbm9ybWFsaXplZC5ub3JtYWxpemVkQ29udGVudDtcblxuICAgICAgLy8gR2V0IHRoZSBpbmRleCB3aXRoIGVycm9yIGhhbmRsaW5nXG4gICAgICBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEluZGV4KCkuY2F0Y2goYXN5bmMgKGVycm9yKSA9PiB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignRmFpbGVkIHRvIGdldCBFbmhhbmNlZCBJbmRleCwgYXR0ZW1wdGluZyByZWJ1aWxkJywgZXJyb3IpO1xuICAgICAgICByZXR1cm4gdGhpcy5lbmhhbmNlZEluZGV4TWFuYWdlci5nZXRJbmRleCh7IGZvcmNlUmVidWlsZDogdHJ1ZSB9KTtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBGSVg6IERNQ1AtU0VDLTAwNiAtIEFkZCBzZWN1cml0eSBhdWRpdCBsb2dnaW5nXG4gICAgICBTZWN1cml0eU1vbml0b3IubG9nU2VjdXJpdHlFdmVudCh7XG4gICAgICAgIHR5cGU6ICdNRU1PUllfU0VBUkNIRUQnLFxuICAgICAgICBzZXZlcml0eTogJ0xPVycsXG4gICAgICAgIHNvdXJjZTogJ0VuaGFuY2VkSW5kZXhIYW5kbGVyLnNlYXJjaEJ5VmVyYicsXG4gICAgICAgIGRldGFpbHM6IGBWZXJiIHNlYXJjaCBmb3IgYWN0aW9uOiAke29wdGlvbnMudmVyYn1gLFxuICAgICAgICBhZGRpdGlvbmFsRGF0YToge1xuICAgICAgICAgIHZlcmI6IG9wdGlvbnMudmVyYixcbiAgICAgICAgICBsaW1pdDogb3B0aW9ucy5saW1pdFxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gU2VhcmNoIGJ5IHZlcmJcbiAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEVsZW1lbnRzQnlBY3Rpb24ob3B0aW9ucy52ZXJiKTtcblxuICAgICAgLy8gTGltaXQgcmVzdWx0c1xuICAgICAgY29uc3QgbGltaXRlZCA9IHJlc3VsdHMuc2xpY2UoMCwgb3B0aW9ucy5saW1pdCk7XG5cbiAgICAgIC8vIEZvcm1hdCByZXN1bHRzXG4gICAgICBsZXQgdGV4dCA9IGAke3RoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+OryAqKkVsZW1lbnRzIGZvciBBY3Rpb246IFwiJHtvcHRpb25zLnZlcmJ9XCIqKlxcblxcbmA7XG4gICAgICB0ZXh0ICs9IGAqKkZvdW5kKio6ICR7bGltaXRlZC5sZW5ndGh9IGVsZW1lbnQke2xpbWl0ZWQubGVuZ3RoID09PSAxID8gJycgOiAncyd9XFxuXFxuYDtcblxuICAgICAgaWYgKGxpbWl0ZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRleHQgKz0gYE5vIGVsZW1lbnRzIGZvdW5kIHRoYXQgY2FuIGhhbmRsZSB0aGUgYWN0aW9uIFwiJHtvcHRpb25zLnZlcmJ9XCIuXFxuXFxuYDtcbiAgICAgICAgdGV4dCArPSBgKipUaXBzOioqXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFRyeSByZWxhdGVkIHZlcmJzIChlLmcuLCBcImFuYWx5emVcIiDihpIgXCJyZXZpZXdcIiwgXCJleGFtaW5lXCIpXFxuYDtcbiAgICAgICAgdGV4dCArPSBg4oCiIFVzZSBjb21tb24gYWN0aW9uIHZlcmJzIGxpa2UgXCJjcmVhdGVcIiwgXCJkZWJ1Z1wiLCBcIm9wdGltaXplXCJcXG5gO1xuICAgICAgICB0ZXh0ICs9IGDigKIgQ2hlY2sgZWxlbWVudCBkZXNjcmlwdGlvbnMgZm9yIHN1cHBvcnRlZCBhY3Rpb25zXFxuYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudE5hbWUgb2YgbGltaXRlZCkge1xuICAgICAgICAgIC8vIEZJWDogVXNlIGNlbnRyYWxpemVkIGVsZW1lbnQgSUQgcGFyc2luZ1xuICAgICAgICAgIC8vIE5vdGU6IGdldEVsZW1lbnRzQnlBY3Rpb24gcmV0dXJucyBuYW1lcyBpbiBcInR5cGUvbmFtZVwiIGZvcm1hdCBmb3IgbGVnYWN5IHJlYXNvbnNcbiAgICAgICAgICBjb25zdCBwYXJzZWQgPSBlbGVtZW50TmFtZS5pbmNsdWRlcygnLycpID9cbiAgICAgICAgICAgIHsgdHlwZTogZWxlbWVudE5hbWUuc3BsaXQoJy8nKVswXSwgbmFtZTogZWxlbWVudE5hbWUuc3BsaXQoJy8nKVsxXSB9IDpcbiAgICAgICAgICAgIHBhcnNlRWxlbWVudElkV2l0aEZhbGxiYWNrKGVsZW1lbnROYW1lKTtcblxuICAgICAgICAgIGNvbnN0IGljb24gPSB0aGlzLmdldEVsZW1lbnRJY29uKHBhcnNlZC50eXBlKTtcbiAgICAgICAgICB0ZXh0ICs9IGAke2ljb259ICoqJHtwYXJzZWQubmFtZX0qKiAoJHtwYXJzZWQudHlwZX0pXFxuYDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHRcbiAgICAgICAgfV1cbiAgICAgIH07XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgRXJyb3JIYW5kbGVyLmxvZ0Vycm9yKCdFbmhhbmNlZEluZGV4SGFuZGxlci5zZWFyY2hCeVZlcmInLCBlcnJvciwgb3B0aW9ucyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBzZWFyY2ggYnkgdmVyYjogJHtTZWN1cmVFcnJvckhhbmRsZXIuc2FuaXRpemVFcnJvcihlcnJvcikubWVzc2FnZX1gXG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc3RhdGlzdGljcyBhYm91dCB0aGUgRW5oYW5jZWQgSW5kZXggcmVsYXRpb25zaGlwc1xuICAgKi9cbiAgYXN5bmMgZ2V0UmVsYXRpb25zaGlwU3RhdHMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEdldCB0aGUgaW5kZXggd2l0aCBlcnJvciBoYW5kbGluZ1xuICAgICAgYXdhaXQgdGhpcy5lbmhhbmNlZEluZGV4TWFuYWdlci5nZXRJbmRleCgpLmNhdGNoKGFzeW5jIChlcnJvcikgPT4ge1xuICAgICAgICBsb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgRW5oYW5jZWQgSW5kZXgsIGF0dGVtcHRpbmcgcmVidWlsZCcsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5oYW5jZWRJbmRleE1hbmFnZXIuZ2V0SW5kZXgoeyBmb3JjZVJlYnVpbGQ6IHRydWUgfSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gRklYOiBETUNQLVNFQy0wMDYgLSBBZGQgc2VjdXJpdHkgYXVkaXQgbG9nZ2luZ1xuICAgICAgU2VjdXJpdHlNb25pdG9yLmxvZ1NlY3VyaXR5RXZlbnQoe1xuICAgICAgICB0eXBlOiAnTUVNT1JZX1NFQVJDSEVEJyxcbiAgICAgICAgc2V2ZXJpdHk6ICdMT1cnLFxuICAgICAgICBzb3VyY2U6ICdFbmhhbmNlZEluZGV4SGFuZGxlci5nZXRSZWxhdGlvbnNoaXBTdGF0cycsXG4gICAgICAgIGRldGFpbHM6ICdFbmhhbmNlZCBJbmRleCBzdGF0aXN0aWNzIHJldHJpZXZlZCcsXG4gICAgICAgIGFkZGl0aW9uYWxEYXRhOiB7fVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEdldCBzdGF0c1xuICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldFJlbGF0aW9uc2hpcFN0YXRzKCk7XG5cbiAgICAgIC8vIEdldCB0aGUgaW5kZXggZm9yIGFkZGl0aW9uYWwgaW5mb1xuICAgICAgY29uc3QgaW5kZXggPSBhd2FpdCB0aGlzLmVuaGFuY2VkSW5kZXhNYW5hZ2VyLmdldEluZGV4KCk7XG5cbiAgICAgIC8vIEZvcm1hdCByZXN1bHRzXG4gICAgICBsZXQgdGV4dCA9IGAke3RoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCl98J+TiiAqKkVuaGFuY2VkIEluZGV4IFN0YXRpc3RpY3MqKlxcblxcbmA7XG4gICAgICB0ZXh0ICs9IGAqKkluZGV4IE1ldGFkYXRhOioqXFxuYDtcbiAgICAgIHRleHQgKz0gYOKAoiBWZXJzaW9uOiAke2luZGV4Lm1ldGFkYXRhLnZlcnNpb259XFxuYDtcbiAgICAgIHRleHQgKz0gYOKAoiBMYXN0IFVwZGF0ZWQ6ICR7bmV3IERhdGUoaW5kZXgubWV0YWRhdGEubGFzdF91cGRhdGVkKS50b0xvY2FsZVN0cmluZygpfVxcbmA7XG4gICAgICB0ZXh0ICs9IGDigKIgVG90YWwgRWxlbWVudHM6ICR7aW5kZXgubWV0YWRhdGEudG90YWxfZWxlbWVudHN9XFxuXFxuYDtcblxuICAgICAgdGV4dCArPSBgKipSZWxhdGlvbnNoaXAgU3RhdGlzdGljczoqKlxcbmA7XG4gICAgICBmb3IgKGNvbnN0IFt0eXBlLCBjb3VudF0gb2YgT2JqZWN0LmVudHJpZXMoc3RhdHMpKSB7XG4gICAgICAgIHRleHQgKz0gYOKAoiAke3R5cGV9OiAke2NvdW50fVxcbmA7XG4gICAgICB9XG5cbiAgICAgIC8vIENvdW50IHZlcmIgdHJpZ2dlcnNcbiAgICAgIGNvbnN0IHZlcmJDb3VudCA9IE9iamVjdC5rZXlzKGluZGV4LmFjdGlvbl90cmlnZ2VycyB8fCB7fSkubGVuZ3RoO1xuICAgICAgdGV4dCArPSBgXFxuKipWZXJiIFRyaWdnZXJzOioqICR7dmVyYkNvdW50fSB2ZXJicyBtYXBwZWRcXG5gO1xuXG4gICAgICAvLyBTaG93IHRvcCB2ZXJicyBpZiBhbnlcbiAgICAgIGlmICh2ZXJiQ291bnQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHRvcFZlcmJzID0gT2JqZWN0LmVudHJpZXMoaW5kZXguYWN0aW9uX3RyaWdnZXJzKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBiWzFdLmxlbmd0aCAtIGFbMV0ubGVuZ3RoKVxuICAgICAgICAgIC5zbGljZSgwLCA1KTtcbiAgICAgICAgdGV4dCArPSBgKipUb3AgQWN0aW9uIFZlcmJzOioqXFxuYDtcbiAgICAgICAgZm9yIChjb25zdCBbdmVyYiwgZWxlbWVudHNdIG9mIHRvcFZlcmJzKSB7XG4gICAgICAgICAgdGV4dCArPSBg4oCiICR7dmVyYn06ICR7ZWxlbWVudHMubGVuZ3RofSBlbGVtZW50c1xcbmA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW3tcbiAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICB0ZXh0XG4gICAgICAgIH1dXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIEVycm9ySGFuZGxlci5sb2dFcnJvcignRW5oYW5jZWRJbmRleEhhbmRsZXIuZ2V0UmVsYXRpb25zaGlwU3RhdHMnLCBlcnJvcik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjb250ZW50OiBbe1xuICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgIHRleHQ6IGAke3RoaXMuaW5kaWNhdG9yU2VydmljZS5nZXRQZXJzb25hSW5kaWNhdG9yKCl94p2MIEZhaWxlZCB0byBnZXQgc3RhdHM6ICR7U2VjdXJlRXJyb3JIYW5kbGVyLnNhbml0aXplRXJyb3IoZXJyb3IpLm1lc3NhZ2V9YFxuICAgICAgICB9XVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGljb24gZm9yIGVsZW1lbnQgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRFbGVtZW50SWNvbih0eXBlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgICAgcGVyc29uYXM6ICfwn46tJyxcbiAgICAgIHNraWxsczogJ/Cfm6DvuI8nLFxuICAgICAgdGVtcGxhdGVzOiAn8J+ThCcsXG4gICAgICBhZ2VudHM6ICfwn6SWJyxcbiAgICAgIG1lbW9yaWVzOiAn8J+noCcsXG4gICAgICBlbnNlbWJsZXM6ICfwn46oJyxcbiAgICAgIHVua25vd246ICfwn5OmJ1xuICAgIH07XG4gICAgcmV0dXJuIGljb25zW3R5cGVdIHx8IGljb25zLnVua25vd247XG4gIH1cbn1cbiJdfQ==
@@ -22,6 +22,8 @@ export interface ListElementItem {
22
22
  type: string;
23
23
  version?: string;
24
24
  tags?: string[];
25
+ created?: string;
26
+ author?: string;
25
27
  }
26
28
  /**
27
29
  * Structured response shape for list_elements.
@@ -1 +1 @@
1
- {"version":3,"file":"listElements.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/listElements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAmC,MAAM,+BAA+B,CAAC;AAE9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAoNpF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;YACjC,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE;QACT,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,kBAAkB,GAAG,cAAc,GAAG,gBAAgB,CAAC;CAC9D;AAED,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,wBAAsB,YAAY,CAChC,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/C,OAAO,CAAC,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,CAAC,CA0DnE"}
1
+ {"version":3,"file":"listElements.d.ts","sourceRoot":"","sources":["../../../src/handlers/element-crud/listElements.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAmC,MAAM,+BAA+B,CAAC;AAE9F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAoNpF;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,UAAU,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,OAAO,CAAC;QACrB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;YACjC,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;KACH,CAAC;IACF,YAAY,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE;QACT,sBAAsB,EAAE,MAAM,CAAC;KAChC,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,kBAAkB,GAAG,cAAc,GAAG,gBAAgB,CAAC;CAC9D;AAED,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAElC,wBAAsB,YAAY,CAChC,OAAO,EAAE,kBAAkB,EAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/C,OAAO,CAAC,kBAAkB,GAAG,iBAAiB,GAAG,eAAe,CAAC,CA0DnE"}