@nlabs/reaktor 1.8.0 → 1.9.1

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 (283) hide show
  1. package/README.md +62 -1
  2. package/docs/GENERATION.md +63 -0
  3. package/lib/actions/analytics.js +1 -1
  4. package/lib/actions/apps.d.ts +2 -2
  5. package/lib/actions/apps.js +1 -1
  6. package/lib/actions/connections.js +1 -1
  7. package/lib/actions/content.js +1 -1
  8. package/lib/actions/contentGeneration.d.ts +40 -0
  9. package/lib/actions/contentGeneration.js +206 -0
  10. package/lib/actions/conversations.js +1 -1
  11. package/lib/actions/crm.js +1 -1
  12. package/lib/actions/crud.d.ts +2 -2
  13. package/lib/actions/crud.js +1 -1
  14. package/lib/actions/dynamodb.js +1 -1
  15. package/lib/actions/email.js +1 -1
  16. package/lib/actions/files.d.ts +42 -4
  17. package/lib/actions/files.js +1 -1
  18. package/lib/actions/flags.js +1 -1
  19. package/lib/actions/geminiVideo.d.ts +19 -0
  20. package/lib/actions/geminiVideo.js +161 -0
  21. package/lib/actions/groups.js +1 -1
  22. package/lib/actions/higgsfield.d.ts +20 -0
  23. package/lib/actions/higgsfield.js +148 -0
  24. package/lib/actions/imageGeneration.d.ts +37 -0
  25. package/lib/actions/imageGeneration.js +121 -0
  26. package/lib/actions/images.js +1 -1
  27. package/lib/actions/index.d.ts +5 -0
  28. package/lib/actions/index.js +6 -1
  29. package/lib/actions/ios.js +1 -1
  30. package/lib/actions/locations.js +1 -1
  31. package/lib/actions/messages.js +1 -1
  32. package/lib/actions/notifications.js +1 -1
  33. package/lib/actions/payments.js +27 -26
  34. package/lib/actions/personas.d.ts +4 -4
  35. package/lib/actions/personas.js +1 -1
  36. package/lib/actions/posts.js +1 -1
  37. package/lib/actions/query.js +1 -1
  38. package/lib/actions/reactions.d.ts +6 -6
  39. package/lib/actions/reactions.js +1 -1
  40. package/lib/actions/rum.js +1 -1
  41. package/lib/actions/s3.d.ts +4 -4
  42. package/lib/actions/s3.js +22 -6
  43. package/lib/actions/search.js +1 -1
  44. package/lib/actions/sms.js +1 -1
  45. package/lib/actions/statistics.js +1 -1
  46. package/lib/actions/subscriptions.js +1 -1
  47. package/lib/actions/tags.d.ts +2 -2
  48. package/lib/actions/tags.js +1 -1
  49. package/lib/actions/users.d.ts +2 -2
  50. package/lib/actions/users.js +1 -1
  51. package/lib/actions/videoGeneration.d.ts +20 -0
  52. package/lib/actions/videoGeneration.js +32 -0
  53. package/lib/actions/videos.js +1 -1
  54. package/lib/adapters/arangoAdapter.js +1 -1
  55. package/lib/adapters/contentAdapter.js +1 -1
  56. package/lib/adapters/fileAdapter.js +1 -1
  57. package/lib/adapters/geminiGenerationAdapter.d.ts +34 -0
  58. package/lib/adapters/geminiGenerationAdapter.js +41 -0
  59. package/lib/adapters/higgsfieldAdapter.d.ts +120 -0
  60. package/lib/adapters/higgsfieldAdapter.js +131 -0
  61. package/lib/adapters/imageAdapter.js +1 -1
  62. package/lib/adapters/imageGenerationAdapter.d.ts +17 -0
  63. package/lib/adapters/imageGenerationAdapter.js +18 -0
  64. package/lib/adapters/index.d.ts +3 -0
  65. package/lib/adapters/index.js +4 -1
  66. package/lib/adapters/messageAdapter.js +1 -1
  67. package/lib/adapters/postAdapter.js +1 -1
  68. package/lib/adapters/reaktorAdapter.js +1 -1
  69. package/lib/adapters/tagAdapter.js +1 -1
  70. package/lib/adapters/userAdapter.d.ts +76 -1
  71. package/lib/adapters/userAdapter.js +1 -1
  72. package/lib/config.d.ts +19 -14
  73. package/lib/config.js +9 -1
  74. package/lib/constants/collections.js +1 -1
  75. package/lib/handlers/graphqlHandler.js +1 -1
  76. package/lib/index.d.ts +1 -0
  77. package/lib/index.js +2 -1
  78. package/lib/lambdas/actions/websockets.d.ts +5 -0
  79. package/lib/lambdas/actions/websockets.js +16 -1
  80. package/lib/lambdas/authorizer.js +1 -1
  81. package/lib/lambdas/connection.d.ts +2 -2
  82. package/lib/lambdas/connection.js +1 -1
  83. package/lib/lambdas/utils/message.js +1 -1
  84. package/lib/lambdas/utils/websocket.d.ts +4 -4
  85. package/lib/lambdas/utils/websocket.js +1 -1
  86. package/lib/mocks/conversation.js +1 -1
  87. package/lib/mocks/file.js +1 -1
  88. package/lib/mocks/group.js +1 -1
  89. package/lib/mocks/image.js +1 -1
  90. package/lib/mocks/post.js +1 -1
  91. package/lib/mocks/tag.js +1 -1
  92. package/lib/mocks/user.js +1 -1
  93. package/lib/mocks/video.js +1 -1
  94. package/lib/mutations/analytics/analytics.js +1 -1
  95. package/lib/mutations/content/content.js +15 -1
  96. package/lib/mutations/crm/crm.js +1 -1
  97. package/lib/mutations/events/events.js +1 -1
  98. package/lib/mutations/flags/flags.js +1 -1
  99. package/lib/mutations/groups/groups.js +1 -1
  100. package/lib/mutations/higgsfield/higgsfield.d.ts +1 -0
  101. package/lib/mutations/higgsfield/higgsfield.js +62 -0
  102. package/lib/mutations/images/images.js +10 -1
  103. package/lib/mutations/index.d.ts +2 -1
  104. package/lib/mutations/index.js +11 -2
  105. package/lib/mutations/locations/locations.js +1 -1
  106. package/lib/mutations/messages/messages.js +1 -1
  107. package/lib/mutations/personas/personas.js +1 -1
  108. package/lib/mutations/posts/posts.js +1 -1
  109. package/lib/mutations/reactions/reactions.js +1 -1
  110. package/lib/mutations/rum/rum.js +1 -1
  111. package/lib/mutations/statistics/statistics.js +1 -1
  112. package/lib/mutations/subscriptions/subscriptions.js +1 -1
  113. package/lib/mutations/tags/tags.js +1 -1
  114. package/lib/mutations/users/users.js +1 -1
  115. package/lib/mutations/videos/videos.js +24 -10
  116. package/lib/objectTypes/analytics.js +1 -1
  117. package/lib/objectTypes/app.js +1 -1
  118. package/lib/objectTypes/bankAccount.js +1 -1
  119. package/lib/objectTypes/connection.js +1 -1
  120. package/lib/objectTypes/content.js +1 -1
  121. package/lib/objectTypes/contentGeneration.d.ts +2 -0
  122. package/lib/objectTypes/contentGeneration.js +30 -0
  123. package/lib/objectTypes/conversation.js +1 -1
  124. package/lib/objectTypes/creditCard.js +1 -1
  125. package/lib/objectTypes/crm.js +1 -1
  126. package/lib/objectTypes/document.js +1 -1
  127. package/lib/objectTypes/error.js +1 -1
  128. package/lib/objectTypes/event.js +1 -1
  129. package/lib/objectTypes/external.js +1 -1
  130. package/lib/objectTypes/file.js +1 -1
  131. package/lib/objectTypes/filter.js +1 -1
  132. package/lib/objectTypes/flag.js +1 -1
  133. package/lib/objectTypes/group.js +1 -1
  134. package/lib/objectTypes/higgsfield.d.ts +5 -0
  135. package/lib/objectTypes/higgsfield.js +149 -0
  136. package/lib/objectTypes/iapSubscription.js +1 -1
  137. package/lib/objectTypes/image.js +1 -1
  138. package/lib/objectTypes/imageGeneration.d.ts +2 -0
  139. package/lib/objectTypes/imageGeneration.js +33 -0
  140. package/lib/objectTypes/index.d.ts +2 -0
  141. package/lib/objectTypes/index.js +3 -1
  142. package/lib/objectTypes/location.js +1 -1
  143. package/lib/objectTypes/message.js +1 -1
  144. package/lib/objectTypes/passcode.js +1 -1
  145. package/lib/objectTypes/persona.d.ts +37 -2
  146. package/lib/objectTypes/persona.js +1 -1
  147. package/lib/objectTypes/plan.js +1 -1
  148. package/lib/objectTypes/post.js +1 -1
  149. package/lib/objectTypes/query.js +1 -1
  150. package/lib/objectTypes/reaction.js +1 -1
  151. package/lib/objectTypes/relation.js +1 -1
  152. package/lib/objectTypes/rum.js +1 -1
  153. package/lib/objectTypes/search.js +1 -1
  154. package/lib/objectTypes/statistics.js +1 -1
  155. package/lib/objectTypes/subscription.js +1 -1
  156. package/lib/objectTypes/tag.js +1 -1
  157. package/lib/objectTypes/user.js +1 -1
  158. package/lib/objectTypes/video.js +1 -1
  159. package/lib/objectTypes/videoGeneration.d.ts +2 -0
  160. package/lib/objectTypes/videoGeneration.js +31 -0
  161. package/lib/queries/analytics/analytics.js +1 -1
  162. package/lib/queries/content/content.js +1 -1
  163. package/lib/queries/crm/crm.js +1 -1
  164. package/lib/queries/events/events.js +1 -1
  165. package/lib/queries/flags/flags.js +1 -1
  166. package/lib/queries/groups/groups.js +1 -1
  167. package/lib/queries/higgsfield/higgsfield.d.ts +1 -0
  168. package/lib/queries/higgsfield/higgsfield.js +22 -0
  169. package/lib/queries/images/images.js +1 -1
  170. package/lib/queries/index.d.ts +2 -1
  171. package/lib/queries/index.js +7 -2
  172. package/lib/queries/locations/locations.js +1 -1
  173. package/lib/queries/messages/messages.js +1 -1
  174. package/lib/queries/personas/personas.js +1 -1
  175. package/lib/queries/posts/posts.js +1 -1
  176. package/lib/queries/query/query.js +1 -1
  177. package/lib/queries/reactions/reactions.js +1 -1
  178. package/lib/queries/statistics/statistics.js +1 -1
  179. package/lib/queries/subscriptions/subscriptions.js +1 -1
  180. package/lib/queries/tags/tags.js +1 -1
  181. package/lib/queries/users/users.js +1 -1
  182. package/lib/queries/videos/videos.js +1 -1
  183. package/lib/templates/email/layout.js +1 -1
  184. package/lib/templates/email/passwordForgot.js +1 -1
  185. package/lib/templates/email/passwordRecovery.js +1 -1
  186. package/lib/templates/email/verifyEmail.js +1 -1
  187. package/lib/templates/email/welcome.js +1 -1
  188. package/lib/templates/sms/passwordForgot.js +1 -1
  189. package/lib/templates/sms/passwordRecovery.js +1 -1
  190. package/lib/templates/sms/verifyEmail.js +1 -1
  191. package/lib/templates/sms/verifyPhone.js +1 -1
  192. package/lib/templates/sms/welcome.js +1 -1
  193. package/lib/types/analytics.types.d.ts +16 -16
  194. package/lib/types/analytics.types.js +1 -1
  195. package/lib/types/apps.types.d.ts +4 -4
  196. package/lib/types/apps.types.js +1 -1
  197. package/lib/types/arangodb.types.d.ts +20 -20
  198. package/lib/types/arangodb.types.js +1 -1
  199. package/lib/types/auth.types.js +1 -1
  200. package/lib/types/connections.types.d.ts +2 -2
  201. package/lib/types/connections.types.js +1 -1
  202. package/lib/types/content.types.d.ts +6 -6
  203. package/lib/types/content.types.js +1 -1
  204. package/lib/types/conversations.types.d.ts +2 -2
  205. package/lib/types/conversations.types.js +1 -1
  206. package/lib/types/crm.types.d.ts +30 -30
  207. package/lib/types/crm.types.js +1 -1
  208. package/lib/types/email.types.d.ts +2 -2
  209. package/lib/types/email.types.js +1 -1
  210. package/lib/types/error.types.d.ts +1 -0
  211. package/lib/types/error.types.js +2 -1
  212. package/lib/types/files.types.d.ts +2 -2
  213. package/lib/types/files.types.js +1 -1
  214. package/lib/types/flags.types.d.ts +8 -8
  215. package/lib/types/flags.types.js +1 -1
  216. package/lib/types/google.types.js +1 -1
  217. package/lib/types/groups.types.d.ts +2 -2
  218. package/lib/types/groups.types.js +1 -1
  219. package/lib/types/images.types.d.ts +2 -2
  220. package/lib/types/images.types.js +1 -1
  221. package/lib/types/index.js +1 -1
  222. package/lib/types/locations.types.d.ts +2 -2
  223. package/lib/types/locations.types.js +1 -1
  224. package/lib/types/messages.types.d.ts +2 -2
  225. package/lib/types/messages.types.js +1 -1
  226. package/lib/types/notifications.types.js +1 -1
  227. package/lib/types/payments.types.d.ts +14 -14
  228. package/lib/types/payments.types.js +1 -1
  229. package/lib/types/personas.types.d.ts +2 -2
  230. package/lib/types/personas.types.js +1 -1
  231. package/lib/types/posts.types.d.ts +2 -2
  232. package/lib/types/posts.types.js +1 -1
  233. package/lib/types/rum.types.d.ts +6 -6
  234. package/lib/types/rum.types.js +1 -1
  235. package/lib/types/statistics.types.js +1 -1
  236. package/lib/types/tags.types.d.ts +4 -4
  237. package/lib/types/tags.types.js +1 -1
  238. package/lib/types/users.types.d.ts +2 -2
  239. package/lib/types/users.types.js +1 -1
  240. package/lib/types/videos.types.d.ts +2 -2
  241. package/lib/types/videos.types.js +1 -1
  242. package/lib/types/websockets.types.d.ts +4 -4
  243. package/lib/types/websockets.types.js +1 -1
  244. package/lib/upload.js +1 -1
  245. package/lib/utils/adapterUtils.js +1 -1
  246. package/lib/utils/analyticsUtils.js +1 -1
  247. package/lib/utils/appContext.js +1 -1
  248. package/lib/utils/aqlHelpers.js +1 -1
  249. package/lib/utils/arangodbUtils.js +1 -1
  250. package/lib/utils/authUtils.js +1 -1
  251. package/lib/utils/awsUtils.js +1 -1
  252. package/lib/utils/collectionRegistry.d.ts +2 -2
  253. package/lib/utils/collectionRegistry.js +1 -1
  254. package/lib/utils/contextUtils.js +1 -1
  255. package/lib/utils/dbI18n.example.js +1 -1
  256. package/lib/utils/dbI18n.js +1 -1
  257. package/lib/utils/googleTranslate.js +1 -1
  258. package/lib/utils/graphqlUtils.js +1 -1
  259. package/lib/utils/imageUtils.js +1 -1
  260. package/lib/utils/index.d.ts +3 -0
  261. package/lib/utils/index.js +4 -1
  262. package/lib/utils/languageDetection.js +1 -1
  263. package/lib/utils/localeUtils.example.js +1 -1
  264. package/lib/utils/localeUtils.js +1 -1
  265. package/lib/utils/mediaAccess.d.ts +5 -0
  266. package/lib/utils/mediaAccess.js +57 -0
  267. package/lib/utils/middlewareUtils.js +1 -1
  268. package/lib/utils/nodeRealtime.d.ts +14 -0
  269. package/lib/utils/nodeRealtime.js +84 -0
  270. package/lib/utils/opaqueToken.d.ts +4 -0
  271. package/lib/utils/opaqueToken.js +7 -0
  272. package/lib/utils/queryBuilder.js +1 -1
  273. package/lib/utils/schemaUtils.js +1 -1
  274. package/lib/utils/sessionUtils.js +1 -1
  275. package/lib/utils/stripeUtils.d.ts +1 -1
  276. package/lib/utils/stripeUtils.js +2 -2
  277. package/lib/utils/stripeUtils.ts.bak +12 -0
  278. package/lib/utils/templateUtils.js +1 -1
  279. package/lib/utils/testUtils.js +1 -1
  280. package/lib/utils/translationQueue.example.js +1 -1
  281. package/lib/utils/translationQueue.js +1 -1
  282. package/lib/videoProcessing.js +1 -1
  283. package/package.json +26 -25
@@ -1195,4 +1195,4 @@ export const deleteVideo = async (context, videoId)=>{
1195
1195
  }
1196
1196
  };
1197
1197
 
1198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL3ZpZGVvcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtcbiAgQ3JlYXRlSm9iQ29tbWFuZCxcbiAgRGVzY3JpYmVFbmRwb2ludHNDb21tYW5kLFxuICBNZWRpYUNvbnZlcnRDbGllbnRcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LW1lZGlhY29udmVydCc7XG5pbXBvcnQge0RlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQsIFB1dE9iamVjdENvbW1hbmRJbnB1dH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LXMzJztcbmltcG9ydCB7Z2V0IGFzIGh0dHBHZXR9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VBcmFuZ29JZCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeSwgbGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge0NPTExFQ1RJT05TLCBFREdFU30gZnJvbSAnLi4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmltcG9ydCB7Z2V0Q29ubmVjdGlvbnNCeVVzZXJ9IGZyb20gJy4uL2xhbWJkYXMvYWN0aW9ucy93ZWJzb2NrZXRzLmpzJztcbmltcG9ydCB7d3NDbGllbnR9IGZyb20gJy4uL2xhbWJkYXMvdXRpbHMvd2Vic29ja2V0LmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtidWlsZFJlYWN0aW9uQ291bnRRdWVyeSwgYnVpbGRUYWdzUXVlcnl9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7Z2V0QXdzQ3JlZGVudGlhbHN9IGZyb20gJy4uL3V0aWxzL2F3c1V0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgZGVsZXRlSXRlbSwgZ2V0SXRlbUJ5LCBnZXRMaXN0QnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5pbXBvcnQge2dldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZX0gZnJvbSAnLi9wZXJzb25hcy5qcyc7XG5pbXBvcnQge1xuICBzM0Fib3J0TXVsdGlwYXJ0VXBsb2FkLFxuICBzM0NvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkLFxuICBzM0NyZWF0ZU11bHRpcGFydFVwbG9hZCxcbiAgczNEZWxldGUsXG4gIHMzRGVsZXRlTGlzdCxcbiAgczNHZXRCdWNrZXQsXG4gIHMzR2V0U2lnbmVkVXJsLFxuICBzM0dldFVwbG9hZFBhcnRTaWduZWRVcmwsXG4gIHMzUHV0XG59IGZyb20gJy4vczMuanMnO1xuaW1wb3J0IHtoYXNTdWJzY3JpcHRpb25Ub0l0ZW19IGZyb20gJy4vc3Vic2NyaXB0aW9ucy5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcmFuZ29EYkNvbGxlY3Rpb24sIEFyYW5nb0RiTGltaXR9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtcbiAgVmlkZW9FZGdlVHlwZSxcbiAgVmlkZW9NdWx0aXBhcnRVcGxvYWRUeXBlLFxuICBWaWRlb09wdGlvbnMsXG4gIFZpZGVvVHlwZSxcbiAgVmlkZW9VcGxvYWRQYXJ0SW5wdXQsXG4gIFZpZGVvVXBsb2FkUGFydFVybCxcbiAgVmlkZW9VcmxEYXRhXG59IGZyb20gJy4uL3R5cGVzL3ZpZGVvcy50eXBlcy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAndmlkZW9zJztcbmNvbnN0IGhhc01lZGlhQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX01FRElBKTtcbmNvbnN0IERFRkFVTFRfVklERU9fVVBMT0FEX1BBUlRfU0laRSA9IDEwICogMTAyNCAqIDEwMjQ7XG5jb25zdCBWSURFT19QTEFZQkFDS19ESVIgPSAndmlkZW8tcGxheWJhY2snO1xuXG5sZXQgbWVkaWFDb252ZXJ0RW5kcG9pbnQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuY29uc3QgZ2V0TWVkaWFDb252ZXJ0Q2xpZW50ID0gKGVuZHBvaW50Pzogc3RyaW5nKTogTWVkaWFDb252ZXJ0Q2xpZW50ID0+IG5ldyBNZWRpYUNvbnZlcnRDbGllbnQoe1xuICBjcmVkZW50aWFsczogZ2V0QXdzQ3JlZGVudGlhbHMoKSxcbiAgZW5kcG9pbnQsXG4gIHJlZ2lvbjogQ29uZmlnLmdldCgnYXdzLnJlZ2lvbicpXG59KTtcblxuY29uc3QgZ2V0TWVkaWFDb252ZXJ0RW5kcG9pbnQgPSBhc3luYyAoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+ID0+IHtcbiAgaWYobWVkaWFDb252ZXJ0RW5kcG9pbnQpIHtcbiAgICByZXR1cm4gbWVkaWFDb252ZXJ0RW5kcG9pbnQ7XG4gIH1cblxuICBtZWRpYUNvbnZlcnRFbmRwb2ludCA9IENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQuZW5kcG9pbnQnKTtcblxuICBpZihtZWRpYUNvbnZlcnRFbmRwb2ludCkge1xuICAgIHJldHVybiBtZWRpYUNvbnZlcnRFbmRwb2ludDtcbiAgfVxuXG4gIGNvbnN0IGNsaWVudCA9IGdldE1lZGlhQ29udmVydENsaWVudCgpO1xuICBjb25zdCBlbmRwb2ludHMgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgRGVzY3JpYmVFbmRwb2ludHNDb21tYW5kKHtNYXhSZXN1bHRzOiAxfSkpO1xuICBtZWRpYUNvbnZlcnRFbmRwb2ludCA9IGVuZHBvaW50cy5FbmRwb2ludHM/LlswXT8uVXJsO1xuXG4gIHJldHVybiBtZWRpYUNvbnZlcnRFbmRwb2ludDtcbn07XG5cbmNvbnN0IGdldFZpZGVvTWVkaWFJdGVtRG9jSWRzID0gKGl0ZW1JZDogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBwYXJzZWREb2NJZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcblxuICBpZihwYXJzZWREb2NJZCkge1xuICAgIHJldHVybiBbcGFyc2VkRG9jSWRdO1xuICB9XG5cbiAgY29uc3QgaXRlbUtleSA9IHBhcnNlSWQoaXRlbUlkKTtcblxuICBpZighaXRlbUtleSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBbXG4gICAgYCR7Q09MTEVDVElPTlMuVVNFUlN9LyR7aXRlbUtleX1gLFxuICAgIGAke0NPTExFQ1RJT05TLlBFUlNPTkFTfS8ke2l0ZW1LZXl9YFxuICBdO1xufTtcblxuY29uc3Qgbm9ybWFsaXplVmlkZW9Qcml2YWN5ID0gKHByaXZhY3k6IHVua25vd24pOiAnZnJpZW5kcycgfCAncHJpdmF0ZScgfCAncHVibGljJyB8ICd2aXAnID0+IHtcbiAgc3dpdGNoKFN0cmluZyhwcml2YWN5IHx8ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2ZyaWVuZHMnOlxuICAgICAgcmV0dXJuICdmcmllbmRzJztcbiAgICBjYXNlICdwcml2YXRlJzpcbiAgICAgIHJldHVybiAncHJpdmF0ZSc7XG4gICAgY2FzZSAndmlwJzpcbiAgICAgIHJldHVybiAndmlwJztcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuICdwdWJsaWMnO1xuICB9XG59O1xuXG5jb25zdCBjYW5WaWV3VmlkZW8gPSAoXG4gIHZpZGVvOiBWaWRlb1R5cGUsXG4gIHZpZXdlclVzZXJJZDogc3RyaW5nLFxuICBhY2Nlc3M6IHtcbiAgICByZWFkb25seSBjYW5WaWV3RnJpZW5kczogYm9vbGVhbjtcbiAgICByZWFkb25seSBjYW5WaWV3VmlwOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGlzT3duZXI6IGJvb2xlYW47XG4gIH1cbikgPT4ge1xuICBjb25zdCBwcml2YWN5ID0gbm9ybWFsaXplVmlkZW9Qcml2YWN5KHZpZGVvPy5wcml2YWN5KTtcblxuICBpZihhY2Nlc3MuaXNPd25lciB8fCBTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCAnJykgPT09IHZpZXdlclVzZXJJZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3dpdGNoKHByaXZhY3kpIHtcbiAgICBjYXNlICdwcml2YXRlJzpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICBjYXNlICdmcmllbmRzJzpcbiAgICAgIHJldHVybiBhY2Nlc3MuY2FuVmlld0ZyaWVuZHM7XG4gICAgY2FzZSAndmlwJzpcbiAgICAgIHJldHVybiBhY2Nlc3MuY2FuVmlld1ZpcDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbmNvbnN0IHJlc29sdmVWaWRlb1ZpZXdlckFjY2VzcyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgbGlzdDogQXJyYXk8VmlkZW9UeXBlICYge19tZWRpYUl0ZW1LZXk/OiBzdHJpbmc7IF9tZWRpYUl0ZW1UeXBlPzogc3RyaW5nfT4sXG4gIHNlc3Npb25Vc2VySWQ6IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IG93bmVyVXNlcklkID0gU3RyaW5nKGxpc3RbMF0/LnVzZXJJZCB8fCAnJyk7XG4gIGNvbnN0IGlzT3duZXIgPSAhIXNlc3Npb25Vc2VySWQgJiYgISFvd25lclVzZXJJZCAmJiBzZXNzaW9uVXNlcklkID09PSBvd25lclVzZXJJZDtcblxuICBpZihpc093bmVyKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhblZpZXdGcmllbmRzOiB0cnVlLFxuICAgICAgY2FuVmlld1ZpcDogdHJ1ZSxcbiAgICAgIGlzT3duZXI6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgaWYoIXNlc3Npb25Vc2VySWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2FuVmlld0ZyaWVuZHM6IGZhbHNlLFxuICAgICAgY2FuVmlld1ZpcDogZmFsc2UsXG4gICAgICBpc093bmVyOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBsZXQgY2FuVmlld0ZyaWVuZHMgPSBmYWxzZTtcbiAgbGV0IGNhblZpZXdWaXAgPSBmYWxzZTtcbiAgY29uc3QgbWVkaWFJdGVtS2V5ID0gU3RyaW5nKGxpc3RbMF0/Ll9tZWRpYUl0ZW1LZXkgfHwgJycpO1xuICBjb25zdCBtZWRpYUl0ZW1UeXBlID0gU3RyaW5nKGxpc3RbMF0/Ll9tZWRpYUl0ZW1UeXBlIHx8ICcnKTtcblxuICBpZihtZWRpYUl0ZW1UeXBlID09PSBDT0xMRUNUSU9OUy5QRVJTT05BUyAmJiBtZWRpYUl0ZW1LZXkpIHtcbiAgICBjb25zdCByZWxhdGlvbnNoaXAgPSBhd2FpdCBnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUoY29udGV4dCwgbWVkaWFJdGVtS2V5KTtcbiAgICBjYW5WaWV3RnJpZW5kcyA9ICEhcmVsYXRpb25zaGlwPy5pc0ZyaWVuZDtcbiAgICBjYW5WaWV3VmlwID0gYXdhaXQgaGFzU3Vic2NyaXB0aW9uVG9JdGVtKGNvbnRleHQsIG1lZGlhSXRlbUtleSwgQ09MTEVDVElPTlMuUEVSU09OQVMpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjYW5WaWV3RnJpZW5kcyxcbiAgICBjYW5WaWV3VmlwLFxuICAgIGlzT3duZXI6IGZhbHNlXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VWaWRlb09wdGlvbnMgPSAob3B0aW9uczogVmlkZW9PcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge2Zyb20gPSAwLCB0byA9IDMwLCB0eXBlID0gJ2RlZmF1bHQnfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBsaW1pdDogZ2V0TGltaXQoZnJvbSwgdG8pIGFzIEFyYW5nb0RiTGltaXQsXG4gICAgdHlwZTogcGFyc2VDaGFyKHR5cGUsIDMyKVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvT3B0aW9uYWwgPSAoZmllbGRzOiBzdHJpbmdbXSA9IFtdKSA9PlxuICBmaWVsZHMucmVkdWNlKChzZWxlY3RzLCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgaWYoZmllbGQuaW5jbHVkZXMoJ0NvdW50JykpIHtcbiAgICAgIGNvbnN0IHJlYWN0aW9uUXVlcnkgPSBidWlsZFJlYWN0aW9uQ291bnRRdWVyeShmaWVsZC5yZXBsYWNlKCdDb3VudCcsICcnKSwgJ3YnLCAndmlkZW9zJyk7XG4gICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChyZWFjdGlvblF1ZXJ5KTtcbiAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKGAke2ZpZWxkfToke2ZpZWxkfWApO1xuICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgfVxuXG4gICAgc3dpdGNoKGZpZWxkKSB7XG4gICAgICBjYXNlICdyZWFjdGlvbnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgcmVhY3Rpb25zID0gKEZPUiB2aWRlbywgciBJTiBJTkJPVU5EIHYuX2lkIHJlYWN0aW9ucyBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zIFJFVFVSTiB7bmFtZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9KWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgncmVhY3Rpb25zOnJlYWN0aW9ucycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3RhZ3MnOiB7XG4gICAgICAgIGNvbnN0IHRhZ3NRdWVyeSA9IGJ1aWxkVGFnc1F1ZXJ5KCd2Jyk7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKHRhZ3NRdWVyeSk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCd0YWdzOnRhZ3MnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICd1c2Vycyc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCB1c2VycyA9IEZJUlNUKEZPUiB1IElOIHVzZXJzIEZJTFRFUiB2LnVzZXJJZCA9PSB1Ll9rZXkgTElNSVQgMSBSRVRVUk4gdSlgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3VzZXJzOnVzZXJzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAncHJpdmFjeSc6IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgIH1cbiAgfSwge29iamVjdHM6IFtdLCBxdWVyaWVzOiBbXX0pO1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9zQnlVc2VyID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB1c2VySWQ6IHN0cmluZyxcbiAgZnJvbTogbnVtYmVyID0gMCxcbiAgdG86IG51bWJlciA9IDMwXG4pOiBQcm9taXNlPFZpZGVvVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb3NCeVVzZXInO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGN1c3RvbVF1ZXJpZXMgPSBbXG4gICAgYExFVCB1c2VyID0gRklSU1QoRk9SIHUgSU4gdXNlcnMgRklMVEVSIHUuX2tleSA9PSBkb2MudXNlcklkIExJTUlUIDEgUkVUVVJOIHUpYFxuICBdO1xuXG4gIHJldHVybiBnZXRMaXN0Qnk8VmlkZW9UeXBlPihcbiAgICBjb250ZXh0LFxuICAgICd2aWRlb3MnLFxuICAgIHt1c2VySWQ6IGZvcm1hdFVzZXJJZH0sXG4gICAge1xuICAgICAgc29ydDogW3tmaWVsZDogJ2FkZGVkJywgZGlyZWN0aW9uOiAnREVTQyd9XSxcbiAgICAgIGxpbWl0OiB7ZnJvbSwgdG99LFxuICAgICAgY3VzdG9tUXVlcmllcyxcbiAgICAgIGN1c3RvbU9iamVjdHM6IFsndXNlcjp1c2VyJ11cbiAgICB9XG4gICkuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIFtdIGFzIFZpZGVvVHlwZVtdO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb0NvdW50QnlJdGVtID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGl0ZW1JZDogc3RyaW5nKTogUHJvbWlzZTxudW1iZXI+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvQ291bnRCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGl0ZW1Eb2NJZHMgPSBnZXRWaWRlb01lZGlhSXRlbURvY0lkcyhpdGVtSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIExFVCBtZWRpYSA9IChcbiAgICAgIEZPUiB2IElOICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgICBGSUxURVIgdi5fZnJvbSBJTiAke2l0ZW1Eb2NJZHN9XG4gICAgICAgIEZJTFRFUiB2LnR5cGUgPT0gXCJ2aWRlb1wiXG4gICAgICAgIFJFVFVSTiAxXG4gICAgKVxuICAgIFJFVFVSTiB7Y291bnQ6IExFTkdUSChtZWRpYSl9XG4gIGA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHtjb3VudH0pID0+IGNvdW50KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb3NCeUl0ZW0gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICBvcHRpb25zOiBWaWRlb09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxWaWRlb1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9zQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25Vc2VySWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMoaXRlbUlkKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlVmlkZW9PcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRWaWRlb09wdGlvbmFsKGZpZWxkcyk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIGwgSU4gJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICBGSUxURVIgbC5fZnJvbSBJTiAke2l0ZW1Eb2NJZHN9XG4gICAgICBGSUxURVIgbC50eXBlID09IFwidmlkZW9cIlxuICAgICAgTEVUIHYgPSBET0NVTUVOVChsLl90bylcbiAgICAgIEZJTFRFUiBOT1QgSVNfTlVMTCh2KVxuICAgICAgTEVUIG93bmVyUGVyc29uYSA9IGwuaXRlbVR5cGUgPT0gXCJwZXJzb25hc1wiID8gRE9DVU1FTlQoJHtsaXRlcmFsKENPTExFQ1RJT05TLlBFUlNPTkFTKX0sIFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5KSA6IG51bGxcbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIFNPUlQgdi5hZGRlZCBERVNDXG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBNRVJHRShcbiAgICAgICAgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRSh2LCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3YnKX0sXG4gICAgICAgIHtcbiAgICAgICAgICBfbWVkaWFJdGVtS2V5OiBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSxcbiAgICAgICAgICBfbWVkaWFJdGVtVHlwZTogbC5pdGVtVHlwZSB8fCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmNvbGxlY3Rpb24sXG4gICAgICAgICAgb3duZXJQZXJzb25hSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5fa2V5IDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VJZCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZVVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hTmFtZTogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLm5hbWUgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVRodW1iVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudGh1bWJVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVVzZXJJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnVzZXJJZCA6IG51bGxcbiAgICAgICAgfVxuICAgICAgKVxuICBgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbGlzdCA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQXJyYXk8VmlkZW9UeXBlICYge19tZWRpYUl0ZW1LZXk/OiBzdHJpbmc7IF9tZWRpYUl0ZW1UeXBlPzogc3RyaW5nfT4pO1xuXG4gICAgY29uc3QgYWNjZXNzID0gYXdhaXQgcmVzb2x2ZVZpZGVvVmlld2VyQWNjZXNzKGNvbnRleHQsIGxpc3QsIHNlc3Npb25Vc2VySWQpO1xuXG4gICAgaWYoYWNjZXNzLmlzT3duZXIpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBub3JtYWxpemVWaWRlb1ByaXZhY3kodmlkZW8/LnByaXZhY3kpID09PSAncHVibGljJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKCh2aWRlbykgPT4gY2FuVmlld1ZpZGVvKHZpZGVvLCBzZXNzaW9uVXNlcklkLCBhY2Nlc3MpKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdIGFzIFZpZGVvVHlwZVtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9MaXN0QnlSZWFjdGlvbnMgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHJlYWN0aW9uczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFZpZGVvT3B0aW9uc1xuKTogUHJvbWlzZTxWaWRlb1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9MaXN0QnlSZWFjdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMgPSBbXSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkID0gJyd9ID0ge319ID0gY29udGV4dDtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlVmlkZW9PcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRWaWRlb09wdGlvbmFsKGZpZWxkcyk7XG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbnM6IHN0cmluZ1tdID0gcmVhY3Rpb25zLm1hcCgocmVhY3Rpb25OYW1lKSA9PiBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMikpO1xuICBjb25zdCBmaWx0ZXJCeTogc3RyaW5nW10gPSBbXG4gICAgJ3IudHlwZSA9PSBcInZpZGVvc1wiJyxcbiAgICBgUE9TSVRJT04oJHtKU09OLnN0cmluZ2lmeShmb3JtYXRSZWFjdGlvbnMpfSwgTE9XRVIoci5uYW1lKSlgXG4gIF07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHYsIHIgSU4gT1VUQk9VTkQgJHtmb3JtYXRTZXNzaW9uSWR9IGhhc1JlYWN0aW9uXG4gICAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJ2aWRlb3NcIn1cbiAgICAgIExFVCBtZWRpYSA9IEZJUlNUKFxuICAgICAgICBGT1Igb3duZXIsIGwgSU4gSU5CT1VORCB2Ll9pZCAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgICBGSUxURVIgbC50eXBlID09IFwidmlkZW9cIlxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4ge1xuICAgICAgICAgICAgaXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXksXG4gICAgICAgICAgICBpdGVtVHlwZTogbC5pdGVtVHlwZSB8fCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmNvbGxlY3Rpb25cbiAgICAgICAgICB9XG4gICAgICApXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbWVkaWEgJiYgbWVkaWEuaXRlbVR5cGUgPT0gXCJwZXJzb25hc1wiID8gRE9DVU1FTlQoJHtsaXRlcmFsKENPTExFQ1RJT05TLlBFUlNPTkFTKX0sIG1lZGlhLml0ZW1LZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgRklMVEVSICR7bGl0ZXJhbChmaWx0ZXJCeS5qb2luKCcgJiYgJykpfVxuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoXG4gICAgICAgICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UodiwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCd2Jyl9LFxuICAgICAgICB7XG4gICAgICAgICAgX21lZGlhSXRlbUtleTogbWVkaWEgPyBtZWRpYS5pdGVtS2V5IDogbnVsbCxcbiAgICAgICAgICBfbWVkaWFJdGVtVHlwZTogbWVkaWEgPyBtZWRpYS5pdGVtVHlwZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5fa2V5IDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VJZCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZVVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hTmFtZTogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLm5hbWUgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVRodW1iVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudGh1bWJVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYVVzZXJJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnVzZXJJZCA6IG51bGxcbiAgICAgICAgfVxuICAgICAgKVxuICBgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbGlzdCA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQXJyYXk8VmlkZW9UeXBlICYge19tZWRpYUl0ZW1LZXk/OiBzdHJpbmc7IF9tZWRpYUl0ZW1UeXBlPzogc3RyaW5nfT4pO1xuXG4gICAgY29uc3QgYWNjZXNzID0gYXdhaXQgcmVzb2x2ZVZpZGVvVmlld2VyQWNjZXNzKGNvbnRleHQsIGxpc3QsIHNlc3Npb25JZCk7XG5cbiAgICBpZihhY2Nlc3MuaXNPd25lcikge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgaWYoIXNlc3Npb25JZCkge1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKCh2aWRlbykgPT4gbm9ybWFsaXplVmlkZW9Qcml2YWN5KHZpZGVvPy5wcml2YWN5KSA9PT0gJ3B1YmxpYycpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IGNhblZpZXdWaWRlbyh2aWRlbywgc2Vzc2lvbklkLCBhY2Nlc3MpKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7b3B0aW9ucywgcmVhY3Rpb25zfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHZpZGVvSWQ6IHN0cmluZyk6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlbyc7XG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpO1xuXG4gIHJldHVybiBnZXRJdGVtQnk8VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywge19rZXk6IGZvcm1hdFZpZGVvSWR9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYXRoVXNlclZpZGVvcyA9ICh1c2VySWQ6IHN0cmluZywgdmlkZW9JZDogc3RyaW5nLCB2aWRlb1R5cGU6IHN0cmluZywgZGlyOiBzdHJpbmcgPSAndmlkZW9zJyk6IHN0cmluZyA9PiB7XG4gIGxldCBmaWxlbmFtZSA9IHZpZGVvSWQ7XG5cbiAgc3dpdGNoKHZpZGVvVHlwZSkge1xuICAgIGNhc2UgJ2ltYWdlL3BuZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LnBuZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWFnZS93ZWJwJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VicGA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWFnZS9qcGVnJzpcbiAgICBjYXNlICdpbWFnZS9qcGcnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5qcGdgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8vd2VibSc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LndlYm1gO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8vcXVpY2t0aW1lJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubW92YDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9Lm1wNGA7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBgdXNlcnMvJHt1c2VySWR9LyR7ZGlyfS8ke2ZpbGVuYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9GaWxlbmFtZSA9ICh2aWRlb0lkOiBzdHJpbmcsIHZpZGVvVHlwZTogc3RyaW5nID0gJ3ZpZGVvL21wNCcpOiBzdHJpbmcgPT4ge1xuICBsZXQgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tcDRgO1xuXG4gIHN3aXRjaCh2aWRlb1R5cGUpIHtcbiAgICBjYXNlICdpbWFnZS9wbmcnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5wbmdgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW1hZ2Uvd2VicCc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LndlYnBgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgY2FzZSAnaW1hZ2UvanBnJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0uanBnYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZGVvL3dlYm0nOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJtYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZGVvL3F1aWNrdGltZSc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9Lm1vdmA7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gZmlsZW5hbWU7XG59O1xuXG5jb25zdCBnZXRWaWRlb1VwbG9hZEtleSA9ICh1c2VySWQ6IHN0cmluZywgdmlkZW9JZDogc3RyaW5nLCBmaWxlVHlwZTogc3RyaW5nID0gJ3ZpZGVvL21wNCcpOiBzdHJpbmcgPT5cbiAgZ2V0UGF0aFVzZXJWaWRlb3ModXNlcklkLCB2aWRlb0lkLCBmaWxlVHlwZSwgJ3ZpZGVvcycpO1xuXG5jb25zdCBzYXZlVmlkZW9UaHVtYm5haWwgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgdGh1bWJCYXNlNjQ6IHN0cmluZyA9ICcnLFxuICB0aHVtYkZpbGVUeXBlOiBzdHJpbmcgPSAnaW1hZ2UvanBlZydcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkID0gJyd9ID0ge319ID0gY29udGV4dDtcblxuICBpZighdGh1bWJCYXNlNjQgfHwgIXRodW1iQmFzZTY0LmluY2x1ZGVzKCcsJykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBmb3JtYXRCYXNlNjQgPSB0aHVtYkJhc2U2NC5zdWJzdHIodGh1bWJCYXNlNjQuaW5kZXhPZignLCcpICsgMSk7XG4gIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGZvcm1hdEJhc2U2NCwgJ2Jhc2U2NCcpO1xuXG4gIGlmKCFidWZmZXIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYXdhaXQgczNQdXQoe1xuICAgIEJvZHk6IGJ1ZmZlcixcbiAgICBCdWNrZXQ6IG51bGwsXG4gICAgQ29udGVudFR5cGU6IHRodW1iRmlsZVR5cGUsXG4gICAgS2V5OiBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZpZGVvSWQsIHRodW1iRmlsZVR5cGUsICd2aWRlby10aHVtYnMnKVxuICB9KTtcblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGdldFZpZGVvVXBsb2FkRG9jID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHZpZGVvSWQ6IHN0cmluZyk6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW8oY29udGV4dCwgdmlkZW9JZCk7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuXG4gIGlmKCF2aWRlbyB8fCBTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCAnJykgIT09IHNlc3Npb25JZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT04pO1xuICB9XG5cbiAgcmV0dXJuIHZpZGVvO1xufTtcblxuY29uc3QgZ2V0VmlkZW9QYXJ0VXJscyA9IGFzeW5jIChcbiAga2V5OiBzdHJpbmcsXG4gIHVwbG9hZElkOiBzdHJpbmcsXG4gIHBhcnROdW1iZXJzOiBudW1iZXJbXVxuKTogUHJvbWlzZTxWaWRlb1VwbG9hZFBhcnRVcmxbXT4gPT4gUHJvbWlzZS5hbGwocGFydE51bWJlcnMubWFwKGFzeW5jIChwYXJ0TnVtYmVyKSA9PiAoe1xuICBwYXJ0TnVtYmVyLFxuICB1cmw6IGF3YWl0IHMzR2V0VXBsb2FkUGFydFNpZ25lZFVybCh7XG4gICAgQnVja2V0OiBudWxsLFxuICAgIEtleToga2V5LFxuICAgIFBhcnROdW1iZXI6IHBhcnROdW1iZXIsXG4gICAgVXBsb2FkSWQ6IHVwbG9hZElkXG4gIH0pXG59KSkpO1xuXG5jb25zdCBlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGVcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBvd25lclVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSk7XG5cbiAgaWYoIW93bmVyVXNlcklkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY29ubmVjdGlvbnMgPSBhd2FpdCBnZXRDb25uZWN0aW9uc0J5VXNlcihvd25lclVzZXJJZCkuY2F0Y2goKCkgPT4gW10pO1xuICBjb25zdCBjb25uZWN0aW9uSWRzID0gY29ubmVjdGlvbnNcbiAgICAubWFwKChjb25uZWN0aW9uKSA9PiBwYXJzZVN0cmluZyhjb25uZWN0aW9uPy5jb25uZWN0aW9uSWQgfHwgY29ubmVjdGlvbj8uc29ja2V0SWQgfHwgJycsIDMyKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgLmZpbHRlcigoY29ubmVjdGlvbklkLCBpbmRleCwgbGlzdCkgPT4gbGlzdC5pbmRleE9mKGNvbm5lY3Rpb25JZCkgPT09IGluZGV4KTtcblxuICBpZighY29ubmVjdGlvbklkcy5sZW5ndGgpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCB3c0NsaWVudC5zZW5kKGNvbm5lY3Rpb25JZHMsIHtcbiAgICBhY3Rpb246ICd2aWRlby5wcm9jZXNzaW5nLmNvbXBsZXRlZCcsXG4gICAgZGF0YToge1xuICAgICAgdmlkZW9cbiAgICB9XG4gIH0pLmNhdGNoKCgpID0+IG51bGwpO1xufTtcblxuY29uc3QgZ2V0VmlkZW9QbGF5YmFja0tleSA9ICh1c2VySWQ6IHN0cmluZywgdmlkZW9JZDogc3RyaW5nKTogc3RyaW5nID0+XG4gIGdldFBhdGhVc2VyVmlkZW9zKHVzZXJJZCwgdmlkZW9JZCwgJ3ZpZGVvL21wNCcsIFZJREVPX1BMQVlCQUNLX0RJUik7XG5cbmNvbnN0IGRlbGV0ZVZpZGVvU291cmNlT2JqZWN0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVZpZGVvU291cmNlT2JqZWN0JztcbiAgY29uc3Qgc291cmNlS2V5ID0gU3RyaW5nKHZpZGVvPy5zb3VyY2VLZXkgfHwgdmlkZW8/LnVwbG9hZEtleSB8fCAnJykudHJpbSgpO1xuICBjb25zdCBwbGF5YmFja0tleSA9IFN0cmluZyh2aWRlbz8ucGxheWJhY2tLZXkgfHwgJycpLnRyaW0oKTtcblxuICBpZighc291cmNlS2V5IHx8IHNvdXJjZUtleSA9PT0gcGxheWJhY2tLZXkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIGF3YWl0IHMzRGVsZXRlKHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIEtleTogc291cmNlS2V5XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7c291cmNlS2V5LCB2aWRlb0lkOiB2aWRlbz8udmlkZW9JZCB8fCB2aWRlbz8uX2tleX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmNvbnN0IHNob3VsZFRyYW5zY29kZVZpZGVvID0gKHZpZGVvOiBWaWRlb1R5cGUgPSB7fSk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBmaWxlVHlwZSA9IFN0cmluZyh2aWRlbz8uZmlsZVR5cGUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYoIWZpbGVUeXBlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gIVtcbiAgICAndmlkZW8vbXA0JyxcbiAgICAndmlkZW8vd2VibSdcbiAgXS5pbmNsdWRlcyhmaWxlVHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVmlkZW9UcmFuc2NvZGVKb2IgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGVcbik6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVWaWRlb1RyYW5zY29kZUpvYic7XG4gIGNvbnN0IHJvbGVBcm4gPSBTdHJpbmcoQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5yb2xlQXJuJykgfHwgJycpO1xuICBjb25zdCBidWNrZXQgPSBzM0dldEJ1Y2tldCgpIHx8IENvbmZpZy5nZXQoJ2F3cy5zMy5CdWNrZXQnKTtcbiAgY29uc3QgdmlkZW9JZCA9IHBhcnNlSWQoU3RyaW5nKHZpZGVvPy52aWRlb0lkIHx8IHZpZGVvPy5fa2V5IHx8ICcnKSk7XG4gIGNvbnN0IHVzZXJJZCA9IHBhcnNlSWQoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgY29udGV4dD8uc2Vzc2lvbj8udXNlcklkIHx8ICcnKSk7XG4gIGNvbnN0IHNvdXJjZUtleSA9IFN0cmluZyh2aWRlbz8uc291cmNlS2V5IHx8IHZpZGVvPy51cGxvYWRLZXkgfHwgJycpO1xuXG4gIGlmKCFyb2xlQXJuIHx8ICFidWNrZXQgfHwgIXZpZGVvSWQgfHwgIXVzZXJJZCB8fCAhc291cmNlS2V5KSB7XG4gICAgaWYodmlkZW9JZCkge1xuICAgICAgYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCB2aWRlb0lkLCB7XG4gICAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICBwcm9jZXNzaW5nRXJyb3I6IFtcbiAgICAgICAgICAhcm9sZUFybiA/ICdtaXNzaW5nX21lZGlhY29udmVydF9yb2xlX2FybicgOiAnJyxcbiAgICAgICAgICAhYnVja2V0ID8gJ21pc3NpbmdfczNfYnVja2V0JyA6ICcnLFxuICAgICAgICAgICF1c2VySWQgPyAnbWlzc2luZ191c2VyX2lkJyA6ICcnLFxuICAgICAgICAgICFzb3VyY2VLZXkgPyAnbWlzc2luZ19zb3VyY2Vfa2V5JyA6ICcnXG4gICAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJywnKSxcbiAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ2ZhaWxlZCdcbiAgICAgIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBlbmRwb2ludCA9IGF3YWl0IGdldE1lZGlhQ29udmVydEVuZHBvaW50KCk7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0TWVkaWFDb252ZXJ0Q2xpZW50KGVuZHBvaW50KTtcbiAgICBjb25zdCBxdWV1ZSA9IFN0cmluZyhDb25maWcuZ2V0KCdhd3MubWVkaWFjb252ZXJ0LnF1ZXVlQXJuJykgfHwgJycpO1xuICAgIGNvbnN0IG91dHB1dERlc3RpbmF0aW9uID0gYHMzOi8vJHtidWNrZXR9L3VzZXJzLyR7dXNlcklkfS8ke1ZJREVPX1BMQVlCQUNLX0RJUn0vYDtcbiAgICBjb25zdCBqb2IgPSBhd2FpdCBjbGllbnQuc2VuZChuZXcgQ3JlYXRlSm9iQ29tbWFuZCh7XG4gICAgICAuLi4ocXVldWUgPyB7UXVldWU6IHF1ZXVlfSA6IHt9KSxcbiAgICAgIFJvbGU6IHJvbGVBcm4sXG4gICAgICBTZXR0aW5nczoge1xuICAgICAgICBJbnB1dHM6IFt7XG4gICAgICAgICAgQXVkaW9TZWxlY3RvcnM6IHtcbiAgICAgICAgICAgICdBdWRpbyBTZWxlY3RvciAxJzoge1xuICAgICAgICAgICAgICBEZWZhdWx0U2VsZWN0aW9uOiAnREVGQVVMVCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIEZpbGVJbnB1dDogYHMzOi8vJHtidWNrZXR9LyR7c291cmNlS2V5fWAsXG4gICAgICAgICAgVGltZWNvZGVTb3VyY2U6ICdaRVJPQkFTRUQnLFxuICAgICAgICAgIFZpZGVvU2VsZWN0b3I6IHtcbiAgICAgICAgICAgIFJvdGF0ZTogJ0FVVE8nXG4gICAgICAgICAgfVxuICAgICAgICB9XSxcbiAgICAgICAgT3V0cHV0R3JvdXBzOiBbe1xuICAgICAgICAgIE5hbWU6ICdNUDQnLFxuICAgICAgICAgIE91dHB1dEdyb3VwU2V0dGluZ3M6IHtcbiAgICAgICAgICAgIEZpbGVHcm91cFNldHRpbmdzOiB7XG4gICAgICAgICAgICAgIERlc3RpbmF0aW9uOiBvdXRwdXREZXN0aW5hdGlvblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFR5cGU6ICdGSUxFX0dST1VQX1NFVFRJTkdTJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgT3V0cHV0czogW3tcbiAgICAgICAgICAgIEF1ZGlvRGVzY3JpcHRpb25zOiBbe1xuICAgICAgICAgICAgICBBdWRpb1NvdXJjZU5hbWU6ICdBdWRpbyBTZWxlY3RvciAxJyxcbiAgICAgICAgICAgICAgQ29kZWNTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIEFhY1NldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgICBCaXRyYXRlOiAxMjgwMDAsXG4gICAgICAgICAgICAgICAgICBDb2RpbmdNb2RlOiAnQ09ESU5HX01PREVfMl8wJyxcbiAgICAgICAgICAgICAgICAgIFNhbXBsZVJhdGU6IDQ4MDAwXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBDb2RlYzogJ0FBQydcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfV0sXG4gICAgICAgICAgICBDb250YWluZXJTZXR0aW5nczoge1xuICAgICAgICAgICAgICBDb250YWluZXI6ICdNUDQnLFxuICAgICAgICAgICAgICBNcDRTZXR0aW5nczoge31cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBWaWRlb0Rlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgICAgIENvZGVjU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICBDb2RlYzogJ0hfMjY0JyxcbiAgICAgICAgICAgICAgICBIMjY0U2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgIE1heEJpdHJhdGU6IE51bWJlcihDb25maWcuZ2V0KCdhd3MubWVkaWFjb252ZXJ0Lm1heEJpdHJhdGUnLCA1MDAwMDAwKSksXG4gICAgICAgICAgICAgICAgICBSYXRlQ29udHJvbE1vZGU6ICdRVkJSJyxcbiAgICAgICAgICAgICAgICAgIFNjZW5lQ2hhbmdlRGV0ZWN0OiAnVFJBTlNJVElPTl9ERVRFQ1RJT04nLFxuICAgICAgICAgICAgICAgICAgUXVhbGl0eVR1bmluZ0xldmVsOiAnU0lOR0xFX1BBU1MnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfV1cbiAgICAgICAgfV1cbiAgICAgIH0sXG4gICAgICBVc2VyTWV0YWRhdGE6IHtcbiAgICAgICAgcGxheWJhY2tLZXk6IGdldFZpZGVvUGxheWJhY2tLZXkodXNlcklkLCB2aWRlb0lkKSxcbiAgICAgICAgdXNlcklkLFxuICAgICAgICB2aWRlb0lkXG4gICAgICB9XG4gICAgfSBhcyBhbnkpKTtcblxuICAgIGNvbnN0IGpvYklkID0gU3RyaW5nKGpvYj8uSm9iPy5JZCB8fCAnJyk7XG5cbiAgICBpZihqb2JJZCkge1xuICAgICAgYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCB2aWRlb0lkLCB7XG4gICAgICAgIG1lZGlhQ29udmVydEpvYklkOiBqb2JJZCxcbiAgICAgICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHBsYXliYWNrRmlsZVR5cGU6ICd2aWRlby9tcDQnLFxuICAgICAgICBwbGF5YmFja0tleTogZ2V0VmlkZW9QbGF5YmFja0tleSh1c2VySWQsIHZpZGVvSWQpLFxuICAgICAgICBwcm9jZXNzaW5nU3RhdHVzOiAncXVldWVkJyxcbiAgICAgICAgc3RyZWFtVHlwZTogJ3Byb2dyZXNzaXZlJ1xuICAgICAgfSBhcyBQYXJ0aWFsPFZpZGVvVHlwZT4gYXMgVmlkZW9UeXBlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gam9iSWQ7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZih2aWRlb0lkKSB7XG4gICAgICBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHZpZGVvSWQsIHtcbiAgICAgICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHByb2Nlc3NpbmdFcnJvcjogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnbWVkaWFjb252ZXJ0X2pvYl9mYWlsZWQnLFxuICAgICAgICBwcm9jZXNzaW5nU3RhdHVzOiAnZmFpbGVkJ1xuICAgICAgfSBhcyBQYXJ0aWFsPFZpZGVvVHlwZT4gYXMgVmlkZW9UeXBlKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICB9XG5cbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3NvdXJjZUtleSwgdXNlcklkLCB2aWRlb0lkfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiAnJztcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNvbXBsZXRlVmlkZW9Qcm9jZXNzaW5nID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHtcbiAgICBobHNLZXkgPSAnJyxcbiAgICBwbGF5YmFja0ZpbGVUeXBlID0gJ3ZpZGVvL21wNCcsXG4gICAgcGxheWJhY2tLZXkgPSAnJyxcbiAgICBwcm9jZXNzaW5nU3RhdHVzID0gJ3JlYWR5JyxcbiAgICBzdHJlYW1UeXBlID0gJ3Byb2dyZXNzaXZlJ1xuICB9OiB7XG4gICAgaGxzS2V5Pzogc3RyaW5nO1xuICAgIHBsYXliYWNrRmlsZVR5cGU/OiBzdHJpbmc7XG4gICAgcGxheWJhY2tLZXk/OiBzdHJpbmc7XG4gICAgcHJvY2Vzc2luZ1N0YXR1cz86IHN0cmluZztcbiAgICBzdHJlYW1UeXBlPzogc3RyaW5nO1xuICB9ID0ge31cbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpO1xuXG4gIGlmKCFmb3JtYXRWaWRlb0lkKSB7XG4gICAgcmV0dXJuIG51bGwgYXMgdW5rbm93biBhcyBWaWRlb1R5cGU7XG4gIH1cblxuICBjb25zdCBjdXJyZW50VmlkZW8gPSBhd2FpdCBnZXRWaWRlbyhjb250ZXh0LCBmb3JtYXRWaWRlb0lkKTtcbiAgY29uc3QgZm9ybWF0UGxheWJhY2tLZXkgPSBwbGF5YmFja0tleSB8fCBnZXRWaWRlb1BsYXliYWNrS2V5KFN0cmluZyhjdXJyZW50VmlkZW8/LnVzZXJJZCB8fCAnJyksIGZvcm1hdFZpZGVvSWQpO1xuICBjb25zdCBzb3VyY2VEZWxldGVkID0gcHJvY2Vzc2luZ1N0YXR1cyA9PT0gJ3JlYWR5J1xuICAgID8gYXdhaXQgZGVsZXRlVmlkZW9Tb3VyY2VPYmplY3QoY29udGV4dCwge1xuICAgICAgLi4uY3VycmVudFZpZGVvLFxuICAgICAgcGxheWJhY2tLZXk6IGZvcm1hdFBsYXliYWNrS2V5XG4gICAgfSBhcyBWaWRlb1R5cGUpXG4gICAgOiBmYWxzZTtcbiAgY29uc3QgdXBkYXRlZFZpZGVvID0gYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB7XG4gICAgLi4uKGhsc0tleSA/IHtobHNLZXl9IDoge30pLFxuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgIHBsYXliYWNrRmlsZVR5cGUsXG4gICAgLi4uKGZvcm1hdFBsYXliYWNrS2V5ID8ge3BsYXliYWNrS2V5OiBmb3JtYXRQbGF5YmFja0tleX0gOiB7fSksXG4gICAgcHJvY2Vzc2luZ1N0YXR1cyxcbiAgICAuLi4oc291cmNlRGVsZXRlZCA/IHtzb3VyY2VLZXk6ICcnLCB1cGxvYWRLZXk6ICcnfSA6IHt9KSxcbiAgICBzdHJlYW1UeXBlXG4gIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSk7XG5cbiAgaWYocHJvY2Vzc2luZ1N0YXR1cyA9PT0gJ3JlYWR5Jykge1xuICAgIGF3YWl0IGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZShjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZWRWaWRlbztcbn07XG5cbmV4cG9ydCBjb25zdCBmYWlsVmlkZW9Qcm9jZXNzaW5nID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmdcbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpO1xuXG4gIGlmKCFmb3JtYXRWaWRlb0lkKSB7XG4gICAgcmV0dXJuIG51bGwgYXMgdW5rbm93biBhcyBWaWRlb1R5cGU7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB7XG4gICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgcHJvY2Vzc2luZ1N0YXR1czogJ2ZhaWxlZCdcbiAgfSBhcyBQYXJ0aWFsPFZpZGVvVHlwZT4gYXMgVmlkZW9UeXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBxdWV1ZVZpZGVvVHJhbnNjb2RlQmFja2ZpbGwgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGxpbWl0OiBudW1iZXIgPSAxMFxuKTogUHJvbWlzZTxzdHJpbmdbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAncXVldWVWaWRlb1RyYW5zY29kZUJhY2tmaWxsJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBzYWZlTGltaXQgPSBNYXRoLm1heCgxLCBNYXRoLm1pbihOdW1iZXIobGltaXQgfHwgMTApLCA1MCkpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB2IElOIHZpZGVvc1xuICAgICAgRklMVEVSIHYudXBsb2FkU3RhdHVzID09IFwidXBsb2FkZWRcIlxuICAgICAgRklMVEVSIHYucHJvY2Vzc2luZ1N0YXR1cyAhPSBcInJlYWR5XCJcbiAgICAgIEZJTFRFUiB2LmZpbGVUeXBlICE9IFwidmlkZW8vbXA0XCJcbiAgICAgIEZJTFRFUiAhSEFTKHYsIFwibWVkaWFDb252ZXJ0Sm9iSWRcIikgfHwgdi5tZWRpYUNvbnZlcnRKb2JJZCA9PSBcIlwiXG4gICAgICBTT1JUIHYuYWRkZWQgREVTQ1xuICAgICAgTElNSVQgJHtzYWZlTGltaXR9XG4gICAgICBSRVRVUk4gdlxuICBgO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgbGlzdCA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgVmlkZW9UeXBlW10pO1xuICAgIGNvbnN0IGpvYklkczogc3RyaW5nW10gPSBbXTtcblxuICAgIGZvcihjb25zdCB2aWRlbyBvZiBsaXN0KSB7XG4gICAgICBjb25zdCBqb2JJZCA9IGF3YWl0IGNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iKGNvbnRleHQsIHZpZGVvKTtcblxuICAgICAgaWYoam9iSWQpIHtcbiAgICAgICAgam9iSWRzLnB1c2goam9iSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqb2JJZHM7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcFZpZGVvVXJsID0gKHtcbiAgYnVja2V0LFxuICBkaXJlY3RvcnkgPSAndmlkZW9zJyxcbiAgZmlsZVR5cGUgPSAndmlkZW8vbXA0JyxcbiAgaXNUaHVtYiA9IGZhbHNlLFxuICB0eXBlLFxuICB0eXBlSWQsXG4gIHZpZGVvSWRcbn06IFZpZGVvVXJsRGF0YSk6IHN0cmluZyA9PiB7XG4gIGlmKCF0eXBlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYoIXZpZGVvSWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBidWNrZXROYW1lID0gYnVja2V0IHx8IENvbmZpZy5nZXQoJ2ltYWdlLmJ1Y2tldCcpIHx8ICdkZXYucmVha3Rvci5pbyc7XG4gIGNvbnN0IHZpZGVvTmFtZSA9IGdldFZpZGVvRmlsZW5hbWUodmlkZW9JZCwgZmlsZVR5cGUpO1xuICBjb25zdCB2aWRlb1VybCA9IENvbmZpZy5nZXQoJ2ltYWdlLnVybCcpIHx8IGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vJHtidWNrZXROYW1lfWA7XG5cbiAgaWYodHlwZSA9PT0gJ2FwcHMnKSB7XG4gICAgcmV0dXJuIGAke3ZpZGVvVXJsfS8ke3R5cGV9LyR7ZGlyZWN0b3J5fS8ke3ZpZGVvTmFtZX1gO1xuICB9XG5cbiAgcmV0dXJuIGAke3ZpZGVvVXJsfS8ke3R5cGV9LyR7dHlwZUlkfS8ke2RpcmVjdG9yeX0vJHt2aWRlb05hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb1VybCA9IGFzeW5jICh7XG4gIGJ1Y2tldCxcbiAgZmlsZVR5cGUgPSAndmlkZW8vbXA0JyxcbiAgaW1hZ2VEaXIgPSAndmlkZW9zJyxcbiAgdmlkZW9EaXIgPSAndmlkZW9zJyxcbiAgdmlkZW9JZCxcbiAgdHlwZSxcbiAgdHlwZUlkLFxuICB1cmxUeXBlID0gJ3B1YmxpYydcbn06IGFueSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGlmKCF2aWRlb0lkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3Qga2V5RGlyID0gdmlkZW9EaXIgfHwgaW1hZ2VEaXIgfHwgJ3ZpZGVvcyc7XG4gIGNvbnN0IHZpZGVvS2V5ID0gYCR7dHlwZX0vJHt0eXBlSWR9LyR7a2V5RGlyfS8ke2dldFZpZGVvRmlsZW5hbWUodmlkZW9JZCwgZmlsZVR5cGUpfWA7XG5cbiAgc3dpdGNoKHVybFR5cGUpIHtcbiAgICBjYXNlICdzaWduZWQnOiB7XG4gICAgICBjb25zdCBkZWZhdWx0QnVja2V0ID0gQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgICAgIHJldHVybiBhd2FpdCBzM0dldFNpZ25lZFVybCh7QnVja2V0OiBidWNrZXQgfHwgZGVmYXVsdEJ1Y2tldCwgRXhwaXJlczogNjAgKiA2MCwgS2V5OiB2aWRlb0tleX0pO1xuICAgIH1cbiAgICBjYXNlICdwdWJsaWMnOiB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vYm94LiR7Q29uZmlnLmdldCgnYXBwLnVybCcpfS8ke3ZpZGVvS2V5fWA7XG4gICAgfVxuICAgIGNhc2UgJ2Rldic6IHtcbiAgICAgIHJldHVybiBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tL2Rldi4ke0NvbmZpZy5nZXQoJ2FwcC51cmwnKX0vJHt2aWRlb0tleX1gO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9TaWduZWRLZXlVcmwgPSBhc3luYyAoa2V5OiBzdHJpbmcgPSAnJywgYnVja2V0Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgdmlkZW9LZXkgPSBTdHJpbmcoa2V5IHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIXZpZGVvS2V5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgZGVmYXVsdEJ1Y2tldCA9IENvbmZpZy5nZXQoJ2ltYWdlLmJ1Y2tldCcpIHx8ICdkZXYucmVha3Rvci5pbyc7XG4gIHJldHVybiBhd2FpdCBzM0dldFNpZ25lZFVybCh7QnVja2V0OiBidWNrZXQgfHwgZGVmYXVsdEJ1Y2tldCwgRXhwaXJlczogNjAgKiA2MCwgS2V5OiB2aWRlb0tleX0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHNhdmVWaWRlbyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICBidWZmZXI6IEJ1ZmZlcixcbiAgZmlsZVR5cGU6IHN0cmluZyA9ICd2aWRlby9tcDQnLCBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgY29uc3QgdmlkZW9PYmo6IFB1dE9iamVjdENvbW1hbmRJbnB1dCA9IHtcbiAgICBCb2R5OiBidWZmZXIsXG4gICAgQnVja2V0OiBudWxsLFxuICAgIENvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAuLi4oczNPcHRpb25zIHx8IHt9KSxcbiAgICBLZXk6IGdldFBhdGhVc2VyVmlkZW9zKHNlc3Npb25JZCwgdmlkZW9JZCwgZmlsZVR5cGUsICd2aWRlb3MnKVxuICB9O1xuXG4gIGF3YWl0IHMzUHV0KHZpZGVvT2JqKTtcblxuICByZXR1cm4ge1xuICAgIGZpbGVTaXplOiBidWZmZXIubGVuZ3RoLFxuICAgIGZpbGVUeXBlLFxuICAgIHZpZGVvSWRcbiAgfSBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVWaWRlb011bHRpcGFydFVwbG9hZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZSAmIHtmaWxlTmFtZT86IHN0cmluZzsgZmlsZVNpemU/OiBudW1iZXI7IHBhcnRDb3VudD86IG51bWJlcn0sXG4gIHBhcnRDb3VudDogbnVtYmVyID0gMVxuKTogUHJvbWlzZTxWaWRlb011bHRpcGFydFVwbG9hZFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NyZWF0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBkZXNjcmlwdGlvbiA9ICcnLFxuICAgIGZpbGVTaXplLFxuICAgIGZpbGVUeXBlID0gJ3ZpZGVvL21wNCcsXG4gICAgaXRlbUlkLFxuICAgIGl0ZW1UeXBlLFxuICAgIHByaXZhY3ksXG4gICAgdGh1bWJCYXNlNjQgPSAnJyxcbiAgICB0aHVtYkZpbGVUeXBlID0gJ2ltYWdlL2pwZWcnLFxuICAgIHR5cGUgPSAndmlkZW8nLFxuICAgIHZpZGVvSWRcbiAgfSA9IHZpZGVvO1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKSB8fCBjcmVhdGVIYXNoKGB2aWRlby0ke3Nlc3Npb25JZH0tJHtEYXRlLm5vdygpfS0ke1N0cmluZyh2aWRlbz8uZmlsZU5hbWUgfHwgJycpfWApO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUsIDE2KS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3Qga2V5ID0gZ2V0VmlkZW9VcGxvYWRLZXkoc2Vzc2lvbklkLCBmb3JtYXRWaWRlb0lkLCBmaWxlVHlwZSk7XG4gIGNvbnN0IHNhZmVQYXJ0Q291bnQgPSBNYXRoLm1heCgxLCBNYXRoLm1pbihOdW1iZXIocGFydENvdW50IHx8IHZpZGVvPy5wYXJ0Q291bnQgfHwgMSksIDEwMDAwKSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cGxvYWQgPSBhd2FpdCBzM0NyZWF0ZU11bHRpcGFydFVwbG9hZCh7XG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBDb250ZW50VHlwZTogZmlsZVR5cGUsXG4gICAgICBLZXk6IGtleSxcbiAgICAgIE1ldGFkYXRhOiB7XG4gICAgICAgIGl0ZW1JZDogZm9ybWF0SXRlbUlkIHx8ICcnLFxuICAgICAgICBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUgfHwgJycsXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkLFxuICAgICAgICB2aWRlb0lkOiBmb3JtYXRWaWRlb0lkXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgdXBsb2FkSWQgPSBTdHJpbmcodXBsb2FkPy5VcGxvYWRJZCB8fCAnJyk7XG5cbiAgICBpZighdXBsb2FkSWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGNyZWF0ZSB2aWRlbyB1cGxvYWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBoYXNUaHVtYiA9IGF3YWl0IHNhdmVWaWRlb1RodW1ibmFpbChjb250ZXh0LCBmb3JtYXRWaWRlb0lkLCB0aHVtYkJhc2U2NCwgdGh1bWJGaWxlVHlwZSk7XG4gICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICBfa2V5OiBmb3JtYXRWaWRlb0lkLFxuICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZmlsZVNpemUsXG4gICAgICBmaWxlVHlwZSxcbiAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICBwcml2YWN5LFxuICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ3BlbmRpbmdfdXBsb2FkJyxcbiAgICAgIHNvdXJjZUtleToga2V5LFxuICAgICAgLi4uKGhhc1RodW1iID8ge3RodW1iRmlsZVR5cGV9IDoge30pLFxuICAgICAgdHlwZSxcbiAgICAgIHVwbG9hZElkLFxuICAgICAgdXBsb2FkS2V5OiBrZXksXG4gICAgICB1cGxvYWRTdGF0dXM6ICd1cGxvYWRpbmcnLFxuICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICB9IGFzIFZpZGVvVHlwZTtcbiAgICBjb25zdCBuZXdWaWRlbyA9IGF3YWl0IGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KTtcblxuICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgY29uc3QgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlID0ge3ZpZGVvSWQ6IGZvcm1hdFZpZGVvSWQsIGl0ZW1JZDogZm9ybWF0SXRlbUlkLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUsIHR5cGU6ICd2aWRlbyd9O1xuICAgICAgYXdhaXQgYWRkVmlkZW9FZGdlKGNvbnRleHQsIHZpZGVvRWRnZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydE51bWJlcnMgPSBBcnJheS5mcm9tKHtsZW5ndGg6IHNhZmVQYXJ0Q291bnR9LCAoX3ZhbHVlLCBpbmRleCkgPT4gaW5kZXggKyAxKTtcbiAgICBjb25zdCBwYXJ0VXJscyA9IGF3YWl0IGdldFZpZGVvUGFydFVybHMoa2V5LCB1cGxvYWRJZCwgcGFydE51bWJlcnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGJ1Y2tldDogczNHZXRCdWNrZXQoKSxcbiAgICAgIGtleSxcbiAgICAgIHBhcnRTaXplOiBERUZBVUxUX1ZJREVPX1VQTE9BRF9QQVJUX1NJWkUsXG4gICAgICBwYXJ0VXJscyxcbiAgICAgIHVwbG9hZElkLFxuICAgICAgdmlkZW86IG5ld1ZpZGVvLFxuICAgICAgdmlkZW9JZDogZm9ybWF0VmlkZW9JZFxuICAgIH07XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KSBhcyB1bmtub3duIGFzIFZpZGVvTXVsdGlwYXJ0VXBsb2FkVHlwZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvTXVsdGlwYXJ0VXBsb2FkUGFydFVybHMgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZyxcbiAgcGFydE51bWJlcnM6IG51bWJlcltdID0gW11cbik6IFByb21pc2U8VmlkZW9VcGxvYWRQYXJ0VXJsW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvTXVsdGlwYXJ0VXBsb2FkUGFydFVybHMnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlb1VwbG9hZERvYyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgICBjb25zdCBrZXkgPSBTdHJpbmcodmlkZW8/LnVwbG9hZEtleSB8fCB2aWRlbz8uc291cmNlS2V5IHx8IGdldFZpZGVvVXBsb2FkS2V5KFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSwgcGFyc2VJZCh2aWRlb0lkKSwgdmlkZW8/LmZpbGVUeXBlKSk7XG4gICAgY29uc3QgZm9ybWF0VXBsb2FkSWQgPSBTdHJpbmcodXBsb2FkSWQgfHwgdmlkZW8/LnVwbG9hZElkIHx8ICcnKTtcblxuICAgIGlmKCFrZXkgfHwgIWZvcm1hdFVwbG9hZElkKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGdldFZpZGVvUGFydFVybHMoa2V5LCBmb3JtYXRVcGxvYWRJZCwgcGFydE51bWJlcnMubWFwKChwYXJ0TnVtYmVyKSA9PiBOdW1iZXIocGFydE51bWJlcikpLmZpbHRlcihCb29sZWFuKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KSBhcyB1bmtub3duIGFzIFZpZGVvVXBsb2FkUGFydFVybFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY29tcGxldGVWaWRlb011bHRpcGFydFVwbG9hZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nLFxuICBwYXJ0czogVmlkZW9VcGxvYWRQYXJ0SW5wdXRbXSA9IFtdXG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY29tcGxldGVWaWRlb011bHRpcGFydFVwbG9hZCc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB2aWRlbyA9IGF3YWl0IGdldFZpZGVvVXBsb2FkRG9jKGNvbnRleHQsIHZpZGVvSWQpO1xuICAgIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpO1xuICAgIGNvbnN0IGZvcm1hdFVwbG9hZElkID0gU3RyaW5nKHVwbG9hZElkIHx8IHZpZGVvPy51cGxvYWRJZCB8fCAnJyk7XG4gICAgY29uc3Qga2V5ID0gU3RyaW5nKHZpZGVvPy51cGxvYWRLZXkgfHwgdmlkZW8/LnNvdXJjZUtleSB8fCBnZXRWaWRlb1VwbG9hZEtleShTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCAnJyksIGZvcm1hdFZpZGVvSWQsIHZpZGVvPy5maWxlVHlwZSkpO1xuICAgIGNvbnN0IHVwbG9hZFBhcnRzID0gcGFydHNcbiAgICAgIC5tYXAoKHBhcnQpID0+ICh7XG4gICAgICAgIEVUYWc6IFN0cmluZyhwYXJ0Py5ldGFnIHx8ICcnKS50cmltKCksXG4gICAgICAgIFBhcnROdW1iZXI6IE51bWJlcihwYXJ0Py5wYXJ0TnVtYmVyIHx8IDApXG4gICAgICB9KSlcbiAgICAgIC5maWx0ZXIoKHBhcnQpID0+IHBhcnQuRVRhZyAmJiBwYXJ0LlBhcnROdW1iZXIgPiAwKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEuUGFydE51bWJlciAtIGIuUGFydE51bWJlcik7XG5cbiAgICBpZigha2V5IHx8ICFmb3JtYXRVcGxvYWRJZCB8fCAhdXBsb2FkUGFydHMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdmlkZW8gdXBsb2FkIGRhdGEuJyk7XG4gICAgfVxuXG4gICAgYXdhaXQgczNDb21wbGV0ZU11bHRpcGFydFVwbG9hZCh7XG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBLZXk6IGtleSxcbiAgICAgIE11bHRpcGFydFVwbG9hZDoge1xuICAgICAgICBQYXJ0czogdXBsb2FkUGFydHNcbiAgICAgIH0sXG4gICAgICBVcGxvYWRJZDogZm9ybWF0VXBsb2FkSWRcbiAgICB9KTtcblxuICAgIGNvbnN0IHVwZGF0ZWRWaWRlbyA9IGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwge1xuICAgICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAuLi4oc2hvdWxkVHJhbnNjb2RlVmlkZW8odmlkZW8pXG4gICAgICAgID8ge3Byb2Nlc3NpbmdTdGF0dXM6ICdxdWV1ZWQnfVxuICAgICAgICA6IHtcbiAgICAgICAgICBwbGF5YmFja0ZpbGVUeXBlOiB2aWRlbz8uZmlsZVR5cGUgfHwgJ3ZpZGVvL21wNCcsXG4gICAgICAgICAgcGxheWJhY2tLZXk6IGtleSxcbiAgICAgICAgICBwcm9jZXNzaW5nU3RhdHVzOiAncmVhZHknLFxuICAgICAgICAgIHN0cmVhbVR5cGU6ICdwcm9ncmVzc2l2ZSdcbiAgICAgICAgfSksXG4gICAgICB1cGxvYWRTdGF0dXM6ICd1cGxvYWRlZCdcbiAgICB9KTtcblxuICAgIGlmKHNob3VsZFRyYW5zY29kZVZpZGVvKHVwZGF0ZWRWaWRlbykpIHtcbiAgICAgIHZvaWQgY3JlYXRlVmlkZW9UcmFuc2NvZGVKb2IoY29udGV4dCwgdXBkYXRlZFZpZGVvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdm9pZCBlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUoY29udGV4dCwgdXBkYXRlZFZpZGVvKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZFZpZGVvO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhYm9ydFZpZGVvTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHVwbG9hZElkOiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWJvcnRWaWRlb011bHRpcGFydFVwbG9hZCc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB2aWRlbyA9IGF3YWl0IGdldFZpZGVvVXBsb2FkRG9jKGNvbnRleHQsIHZpZGVvSWQpO1xuICAgIGNvbnN0IGZvcm1hdFVwbG9hZElkID0gU3RyaW5nKHVwbG9hZElkIHx8IHZpZGVvPy51cGxvYWRJZCB8fCAnJyk7XG4gICAgY29uc3Qga2V5ID0gU3RyaW5nKHZpZGVvPy51cGxvYWRLZXkgfHwgdmlkZW8/LnNvdXJjZUtleSB8fCBnZXRWaWRlb1VwbG9hZEtleShTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCAnJyksIHBhcnNlSWQodmlkZW9JZCksIHZpZGVvPy5maWxlVHlwZSkpO1xuXG4gICAgaWYoa2V5ICYmIGZvcm1hdFVwbG9hZElkKSB7XG4gICAgICBhd2FpdCBzM0Fib3J0TXVsdGlwYXJ0VXBsb2FkKHtcbiAgICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgICBLZXk6IGtleSxcbiAgICAgICAgVXBsb2FkSWQ6IGZvcm1hdFVwbG9hZElkXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHBhcnNlSWQodmlkZW9JZCksIHtcbiAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgdXBsb2FkU3RhdHVzOiAnYWJvcnRlZCdcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBhZGRWaWRlbyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZSxcbiAgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkVmlkZW8nO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7dmlkZW9JZCwgZGVzY3JpcHRpb24sIGJ1ZmZlciwgZmlsZVR5cGUsIHByaXZhY3ksIHR5cGUgPSAndmlkZW8nLCBwcm92aWRlciwgZXh0ZXJuYWxJZCwgZXh0ZXJuYWxVcmx9ID0gdmlkZW87XG5cbiAgaWYodHlwZSA9PT0gJ2V4dGVybmFsJykge1xuICAgIGNvbnN0IGluc2VydDogVmlkZW9UeXBlID0ge1xuICAgICAgX2tleTogdmlkZW9JZCxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZXh0ZXJuYWxJZCxcbiAgICAgIGV4dGVybmFsVXJsLFxuICAgICAgcHJpdmFjeSxcbiAgICAgIHByb3ZpZGVyLFxuICAgICAgdHlwZSxcbiAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgfSBhcyBWaWRlb1R5cGU7XG5cbiAgICByZXR1cm4gYWRkSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBpbnNlcnQpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBzYXZlVmlkZW8oY29udGV4dCwgdmlkZW9JZCwgYnVmZmVyLCBmaWxlVHlwZSwgczNPcHRpb25zKVxuICAgIC50aGVuKChzYXZlZDogVmlkZW9UeXBlKSA9PiB7XG4gICAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgICAgLi4uc2F2ZWQsXG4gICAgICAgIF9rZXk6IHZpZGVvSWQsXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICBmaWxlVHlwZSxcbiAgICAgICAgcHJpdmFjeSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICAgIH0gYXMgVmlkZW9UeXBlO1xuXG4gICAgICByZXR1cm4gYWRkSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBpbnNlcnQpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVmlkZW9FZGdlID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSk6IFByb21pc2U8b2JqZWN0PiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRWaWRlb0VkZ2UnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHt2aWRlb0lkLCBpdGVtSWQsIGl0ZW1UeXBlfSA9IHZpZGVvRWRnZTtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaGFzTWVkaWEtdmlkZW8tJHt2aWRlb0lkfS0ke2l0ZW1JZH0tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGl0ZW1Eb2NJZCA9IGdldERvY0lkKGZvcm1hdEl0ZW1UeXBlLCB7X2tleTogZm9ybWF0SXRlbUlkfSk7XG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpO1xuICBjb25zdCBmaWxlRG9jSWQgPSBgdmlkZW9zLyR7Zm9ybWF0VmlkZW9JZH1gO1xuXG4gIGNvbnN0IGVkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7XG4gICAgX2Zyb206IGl0ZW1Eb2NJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBmaWxlRG9jSWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBpdGVtVHlwZSxcbiAgICB0eXBlOiAndmlkZW8nXG4gIH0gYXMgVmlkZW9FZGdlVHlwZTtcblxuICBpZihpdGVtRG9jSWQpIHtcbiAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKEVER0VTLkhBU19NRURJQSkuc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSlcbiAgICAgIC50aGVuKChmaWxlRWRnZSkgPT4gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKEVER0VTLkhBU19NRURJQSkuZG9jdW1lbnQoZmlsZUVkZ2UpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVWaWRlbyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZSxcbiAgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlVmlkZW8nO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgYmFzZTY0ID0gJycsXG4gICAgYnVmZmVyOiB2aWRlb0J1ZmZlcixcbiAgICBkZXNjcmlwdGlvbiA9ICcnLFxuICAgIGV4dGVybmFsSWQsXG4gICAgZXh0ZXJuYWxVcmwsXG4gICAgZmlsZVR5cGUsXG4gICAgaGxzS2V5LFxuICAgIGl0ZW1JZCxcbiAgICBpdGVtVHlwZSxcbiAgICBwbGF5YmFja0ZpbGVUeXBlLFxuICAgIHBsYXliYWNrS2V5LFxuICAgIHByb2Nlc3NpbmdTdGF0dXMsXG4gICAgcHJpdmFjeSxcbiAgICBwcm92aWRlcixcbiAgICBzdHJlYW1UeXBlLFxuICAgIHR5cGUsXG4gICAgdXBsb2FkU3RhdHVzLFxuICAgIHVybCA9ICcnLFxuICAgIHZpZGVvSWRcbiAgfSA9IHZpZGVvO1xuXG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSB2aWRlb0lkIHx8IGNyZWF0ZUhhc2goYHZpZGVvLSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtSWQgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1UeXBlOiBBcmFuZ29EYkNvbGxlY3Rpb24gPSBwYXJzZUNoYXIoaXRlbVR5cGUsIDE2KS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcblxuICBpZih0eXBlID09PSAnZXh0ZXJuYWwnICYmIChleHRlcm5hbElkIHx8IGV4dGVybmFsVXJsKSkge1xuICAgIGNvbnN0IGluc2VydDogVmlkZW9UeXBlID0ge1xuICAgICAgX2tleTogZm9ybWF0VmlkZW9JZCxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgZXh0ZXJuYWxJZCxcbiAgICAgIGV4dGVybmFsVXJsLFxuICAgICAgcHJpdmFjeSxcbiAgICAgIHByb3ZpZGVyLFxuICAgICAgdHlwZSxcbiAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgfSBhcyBWaWRlb1R5cGU7XG5cbiAgICByZXR1cm4gYWRkSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBpbnNlcnQpXG4gICAgICAudGhlbigobmV3VmlkZW86IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICAgICAgcmV0dXJuIGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpLnRoZW4oKCkgPT4gbmV3VmlkZW8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdWaWRlbztcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIGlmKGJhc2U2NCB8fCB2aWRlb0J1ZmZlcikge1xuICAgIGxldCBidWZmZXI6IEJ1ZmZlciA9IHZpZGVvQnVmZmVyIGFzIEJ1ZmZlcjtcbiAgICBpZihiYXNlNjQpIHtcbiAgICAgIGNvbnN0IGZvcm1hdEJhc2U2NCA9IGJhc2U2NC5zdWJzdHIoYmFzZTY0LmluZGV4T2YoJywnKSArIDEpO1xuICAgICAgYnVmZmVyID0gQnVmZmVyLmZyb20oZm9ybWF0QmFzZTY0LCAnYmFzZTY0Jyk7XG4gICAgfVxuXG4gICAgbGV0IHVwZGF0ZWRGaWxlVHlwZSA9IGZpbGVUeXBlO1xuICAgIGlmKCFmaWxlVHlwZSkge1xuICAgICAgY29uc3Qge2ZpbGVUeXBlRnJvbUJ1ZmZlcn0gPSBhd2FpdCBpbXBvcnQoJ2ZpbGUtdHlwZScpO1xuICAgICAgY29uc3Qge21pbWV9ID0gYXdhaXQgZmlsZVR5cGVGcm9tQnVmZmVyKGJ1ZmZlcik7XG4gICAgICB1cGRhdGVkRmlsZVR5cGUgPSBtaW1lO1xuICAgIH1cblxuICAgIGNvbnN0IHZQYXJhbXM6IFZpZGVvVHlwZSA9IHtidWZmZXIsIGZpbGVUeXBlOiB1cGRhdGVkRmlsZVR5cGUsIHVzZXJJZDogc2Vzc2lvbklkLCB2aWRlb0lkOiBmb3JtYXRWaWRlb0lkfSBhcyBWaWRlb1R5cGU7XG4gICAgcmV0dXJuIGFkZFZpZGVvKGNvbnRleHQsIHsuLi52UGFyYW1zLCBkZXNjcmlwdGlvbiwgcHJpdmFjeX0sIHMzT3B0aW9ucylcbiAgICAgIC50aGVuKChuZXdWaWRlbzogVmlkZW9UeXBlKSA9PiB7XG4gICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgICAgICByZXR1cm4gYWRkVmlkZW9FZGdlKGNvbnRleHQsIHZpZGVvRWRnZSkudGhlbigoKSA9PiBuZXdWaWRlbyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1ZpZGVvO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9IGVsc2UgaWYodXJsICE9PSAnJykge1xuICAgIGxldCBjb250ZW50VHlwZTtcbiAgICByZXR1cm4gaHR0cEdldCh1cmwpXG4gICAgICAudGhlbigocmVzOiBhbnkpID0+IHtcbiAgICAgICAgaWYocmVzLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU1BR0VfUkVRVUVTVCk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGVudFR5cGUgPSByZXMuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpO1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfSlcbiAgICAgIC50aGVuKChyZXMpID0+IHJlcy5idWZmZXIoKSlcbiAgICAgIC50aGVuKChidWZmZXI6IEJ1ZmZlcikgPT4ge1xuICAgICAgICBjb25zdCB2UGFyYW1zOiBWaWRlb1R5cGUgPSB7YnVmZmVyLCBkZXNjcmlwdGlvbiwgZmlsZVR5cGU6IGNvbnRlbnRUeXBlLCBwcml2YWN5LCB1c2VySWQ6IHNlc3Npb25JZCwgdmlkZW9JZDogZm9ybWF0VmlkZW9JZH0gYXMgVmlkZW9UeXBlO1xuICAgICAgICByZXR1cm4gYWRkVmlkZW8oY29udGV4dCwgdlBhcmFtcywgczNPcHRpb25zKVxuICAgICAgICAgIC50aGVuKChuZXdWaWRlbzogVmlkZW9UeXBlKSA9PiB7XG4gICAgICAgICAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlID0ge3ZpZGVvSWQ6IGZvcm1hdFZpZGVvSWQsIGl0ZW1JZDogZm9ybWF0SXRlbUlkLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUsIHR5cGU6ICd2aWRlbyd9O1xuICAgICAgICAgICAgICByZXR1cm4gYWRkVmlkZW9FZGdlKGNvbnRleHQsIHZpZGVvRWRnZSkudGhlbigoKSA9PiBuZXdWaWRlbyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3VmlkZW87XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZih2aWRlb0lkICE9PSAnJykge1xuICAgIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgLi4uKGhsc0tleSAhPT0gdW5kZWZpbmVkID8ge2hsc0tleX0gOiB7fSksXG4gICAgICAuLi4ocGxheWJhY2tGaWxlVHlwZSAhPT0gdW5kZWZpbmVkID8ge3BsYXliYWNrRmlsZVR5cGV9IDoge30pLFxuICAgICAgLi4uKHBsYXliYWNrS2V5ICE9PSB1bmRlZmluZWQgPyB7cGxheWJhY2tLZXl9IDoge30pLFxuICAgICAgLi4uKHByb2Nlc3NpbmdTdGF0dXMgIT09IHVuZGVmaW5lZCA/IHtwcm9jZXNzaW5nU3RhdHVzfSA6IHt9KSxcbiAgICAgIC4uLihwcml2YWN5ICE9PSB1bmRlZmluZWQgPyB7cHJpdmFjeX0gOiB7fSksXG4gICAgICAuLi4oc3RyZWFtVHlwZSAhPT0gdW5kZWZpbmVkID8ge3N0cmVhbVR5cGV9IDoge30pLFxuICAgICAgLi4uKHVwbG9hZFN0YXR1cyAhPT0gdW5kZWZpbmVkID8ge3VwbG9hZFN0YXR1c30gOiB7fSlcbiAgICB9O1xuICAgIHJldHVybiB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHVwZGF0ZSlcbiAgICAgIC50aGVuKCh1cGRhdGVkVmlkZW8pID0+IHtcbiAgICAgICAgaWYocHJvY2Vzc2luZ1N0YXR1cyA9PT0gJ3JlYWR5Jykge1xuICAgICAgICAgIHZvaWQgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlZFZpZGVvO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgcmV0dXJuIG51bGwgYXMgdW5rbm93biBhcyBWaWRlb1R5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlVmlkZW8gPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9JZDogc3RyaW5nKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2RlbGV0ZVZpZGVvJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB2aWRlbyA9IGF3YWl0IGRlbGV0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwge1xuICAgICAgY2FzY2FkZTogW0VER0VTLkhBU19NRURJQSwgRURHRVMuSEFTX1JFQUNUSU9OXSxcbiAgICAgIG93bmVyc2hpcDogdHJ1ZVxuICAgIH0pO1xuXG4gICAgaWYodmlkZW8pIHtcbiAgICAgIGNvbnN0IHtfa2V5OiB2S2V5LCBmaWxlVHlwZSwgaGxzS2V5LCBwbGF5YmFja0tleSwgc291cmNlS2V5LCB0aHVtYkZpbGVUeXBlLCB1cGxvYWRLZXl9ID0gdmlkZW87XG4gICAgICBjb25zdCBrZXlzID0gW1xuICAgICAgICBzb3VyY2VLZXksXG4gICAgICAgIHVwbG9hZEtleSxcbiAgICAgICAgcGxheWJhY2tLZXksXG4gICAgICAgIGhsc0tleSxcbiAgICAgICAgYHVzZXJzLyR7c2Vzc2lvbklkfS92aWRlb3MvJHt2S2V5fS5tcDRgLFxuICAgICAgICBmaWxlVHlwZSA/IGdldFBhdGhVc2VyVmlkZW9zKHNlc3Npb25JZCwgdktleSwgZmlsZVR5cGUsICd2aWRlb3MnKSA6ICcnLFxuICAgICAgICB0aHVtYkZpbGVUeXBlID8gZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2S2V5LCB0aHVtYkZpbGVUeXBlLCAndmlkZW8tdGh1bWJzJykgOiAnJ1xuICAgICAgXVxuICAgICAgICAubWFwKChrZXkpID0+IFN0cmluZyhrZXkgfHwgJycpLnRyaW0oKSlcbiAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAuZmlsdGVyKChrZXksIGluZGV4LCBsaXN0KSA9PiBsaXN0LmluZGV4T2Yoa2V5KSA9PT0gaW5kZXgpO1xuICAgICAgY29uc3QgcGFyYW1zOiBEZWxldGVPYmplY3RzQ29tbWFuZElucHV0ID0ge1xuICAgICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICAgIERlbGV0ZToge1xuICAgICAgICAgIE9iamVjdHM6IGtleXMubWFwKChLZXkpID0+ICh7S2V5fSkpLFxuICAgICAgICAgIFF1aWV0OiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gczNEZWxldGVMaXN0KHBhcmFtcykudGhlbigoKSA9PiB2aWRlbyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGwgYXMgdW5rbm93biBhcyBWaWRlb1R5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcbiJdLCJuYW1lcyI6WyJDcmVhdGVKb2JDb21tYW5kIiwiRGVzY3JpYmVFbmRwb2ludHNDb21tYW5kIiwiTWVkaWFDb252ZXJ0Q2xpZW50IiwiZ2V0IiwiaHR0cEdldCIsImNyZWF0ZUhhc2giLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VDaGFyIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwiYXFsIiwibGl0ZXJhbCIsIkNvbmZpZyIsIkNPTExFQ1RJT05TIiwiRURHRVMiLCJnZXRDb25uZWN0aW9uc0J5VXNlciIsIndzQ2xpZW50IiwiRXJyb3JUeXBlcyIsImxvZ0Vycm9yIiwiYnVpbGRSZWFjdGlvbkNvdW50UXVlcnkiLCJidWlsZFRhZ3NRdWVyeSIsImdldERvY0lkIiwiZ2V0TGltaXQiLCJ1c2VEYiIsImdldEF3c0NyZWRlbnRpYWxzIiwiYWRkSXRlbSIsImRlbGV0ZUl0ZW0iLCJnZXRJdGVtQnkiLCJnZXRMaXN0QnkiLCJ1cGRhdGVJdGVtIiwiZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlIiwiczNBYm9ydE11bHRpcGFydFVwbG9hZCIsInMzQ29tcGxldGVNdWx0aXBhcnRVcGxvYWQiLCJzM0NyZWF0ZU11bHRpcGFydFVwbG9hZCIsInMzRGVsZXRlIiwiczNEZWxldGVMaXN0IiwiczNHZXRCdWNrZXQiLCJzM0dldFNpZ25lZFVybCIsInMzR2V0VXBsb2FkUGFydFNpZ25lZFVybCIsInMzUHV0IiwiaGFzU3Vic2NyaXB0aW9uVG9JdGVtIiwiZXZlbnRDYXRlZ29yeSIsImhhc01lZGlhQ29sbGVjdGlvbiIsIkhBU19NRURJQSIsIkRFRkFVTFRfVklERU9fVVBMT0FEX1BBUlRfU0laRSIsIlZJREVPX1BMQVlCQUNLX0RJUiIsIm1lZGlhQ29udmVydEVuZHBvaW50IiwiZ2V0TWVkaWFDb252ZXJ0Q2xpZW50IiwiZW5kcG9pbnQiLCJjcmVkZW50aWFscyIsInJlZ2lvbiIsImdldE1lZGlhQ29udmVydEVuZHBvaW50IiwiY2xpZW50IiwiZW5kcG9pbnRzIiwic2VuZCIsIk1heFJlc3VsdHMiLCJFbmRwb2ludHMiLCJVcmwiLCJnZXRWaWRlb01lZGlhSXRlbURvY0lkcyIsIml0ZW1JZCIsInBhcnNlZERvY0lkIiwiaXRlbUtleSIsIlVTRVJTIiwiUEVSU09OQVMiLCJub3JtYWxpemVWaWRlb1ByaXZhY3kiLCJwcml2YWN5IiwiU3RyaW5nIiwidHJpbSIsInRvTG93ZXJDYXNlIiwiY2FuVmlld1ZpZGVvIiwidmlkZW8iLCJ2aWV3ZXJVc2VySWQiLCJhY2Nlc3MiLCJpc093bmVyIiwidXNlcklkIiwiY2FuVmlld0ZyaWVuZHMiLCJjYW5WaWV3VmlwIiwicmVzb2x2ZVZpZGVvVmlld2VyQWNjZXNzIiwiY29udGV4dCIsImxpc3QiLCJzZXNzaW9uVXNlcklkIiwib3duZXJVc2VySWQiLCJtZWRpYUl0ZW1LZXkiLCJfbWVkaWFJdGVtS2V5IiwibWVkaWFJdGVtVHlwZSIsIl9tZWRpYUl0ZW1UeXBlIiwicmVsYXRpb25zaGlwIiwiaXNGcmllbmQiLCJwYXJzZVZpZGVvT3B0aW9ucyIsIm9wdGlvbnMiLCJmcm9tIiwidG8iLCJ0eXBlIiwibGltaXQiLCJnZXRWaWRlb09wdGlvbmFsIiwiZmllbGRzIiwicmVkdWNlIiwic2VsZWN0cyIsImZpZWxkIiwiaW5jbHVkZXMiLCJyZWFjdGlvblF1ZXJ5IiwicmVwbGFjZSIsInF1ZXJpZXMiLCJwdXNoIiwib2JqZWN0cyIsInRhZ3NRdWVyeSIsImdldFZpZGVvc0J5VXNlciIsImFjdGlvbiIsImZvcm1hdFVzZXJJZCIsImN1c3RvbVF1ZXJpZXMiLCJzb3J0IiwiZGlyZWN0aW9uIiwiY3VzdG9tT2JqZWN0cyIsImNhdGNoIiwiZXJyb3IiLCJjYXRlZ29yeSIsInZhbHVlIiwiREFUQUJBU0VfRVJST1IiLCJnZXRWaWRlb0NvdW50QnlJdGVtIiwiZGF0YWJhc2VOYW1lIiwiaXRlbURvY0lkcyIsImFxbFFyeSIsInF1ZXJ5IiwidGhlbiIsImN1cnNvciIsIm5leHQiLCJjb3VudCIsImdldFZpZGVvc0J5SXRlbSIsInNlc3Npb24iLCJzZWxlY3RPYmplY3RzIiwic2VsZWN0UXVlcmllcyIsImpvaW4iLCJsZW5ndGgiLCJhbGwiLCJmaWx0ZXIiLCJnZXRWaWRlb0xpc3RCeVJlYWN0aW9ucyIsInJlYWN0aW9ucyIsInNlc3Npb25JZCIsImZvcm1hdFNlc3Npb25JZCIsImZvcm1hdFJlYWN0aW9ucyIsIm1hcCIsInJlYWN0aW9uTmFtZSIsImZpbHRlckJ5IiwiSlNPTiIsInN0cmluZ2lmeSIsInBhcmFtcyIsImdldFZpZGVvIiwidmlkZW9JZCIsImZvcm1hdFZpZGVvSWQiLCJfa2V5IiwiZ2V0UGF0aFVzZXJWaWRlb3MiLCJ2aWRlb1R5cGUiLCJkaXIiLCJmaWxlbmFtZSIsImdldFZpZGVvRmlsZW5hbWUiLCJnZXRWaWRlb1VwbG9hZEtleSIsImZpbGVUeXBlIiwic2F2ZVZpZGVvVGh1bWJuYWlsIiwidGh1bWJCYXNlNjQiLCJ0aHVtYkZpbGVUeXBlIiwiZm9ybWF0QmFzZTY0Iiwic3Vic3RyIiwiaW5kZXhPZiIsImJ1ZmZlciIsIkJ1ZmZlciIsIkJvZHkiLCJCdWNrZXQiLCJDb250ZW50VHlwZSIsIktleSIsImdldFZpZGVvVXBsb2FkRG9jIiwiRXJyb3IiLCJJTlZBTElEX0FVVEhFTlRJQ0FUSU9OIiwiZ2V0VmlkZW9QYXJ0VXJscyIsImtleSIsInVwbG9hZElkIiwicGFydE51bWJlcnMiLCJQcm9taXNlIiwicGFydE51bWJlciIsInVybCIsIlBhcnROdW1iZXIiLCJVcGxvYWRJZCIsImVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZSIsImNvbm5lY3Rpb25zIiwiY29ubmVjdGlvbklkcyIsImNvbm5lY3Rpb24iLCJjb25uZWN0aW9uSWQiLCJzb2NrZXRJZCIsIkJvb2xlYW4iLCJpbmRleCIsImRhdGEiLCJnZXRWaWRlb1BsYXliYWNrS2V5IiwiZGVsZXRlVmlkZW9Tb3VyY2VPYmplY3QiLCJzb3VyY2VLZXkiLCJ1cGxvYWRLZXkiLCJwbGF5YmFja0tleSIsInNob3VsZFRyYW5zY29kZVZpZGVvIiwiY3JlYXRlVmlkZW9UcmFuc2NvZGVKb2IiLCJyb2xlQXJuIiwiYnVja2V0IiwibW9kaWZpZWQiLCJEYXRlIiwibm93IiwicHJvY2Vzc2luZ0Vycm9yIiwicHJvY2Vzc2luZ1N0YXR1cyIsInF1ZXVlIiwib3V0cHV0RGVzdGluYXRpb24iLCJqb2IiLCJRdWV1ZSIsIlJvbGUiLCJTZXR0aW5ncyIsIklucHV0cyIsIkF1ZGlvU2VsZWN0b3JzIiwiRGVmYXVsdFNlbGVjdGlvbiIsIkZpbGVJbnB1dCIsIlRpbWVjb2RlU291cmNlIiwiVmlkZW9TZWxlY3RvciIsIlJvdGF0ZSIsIk91dHB1dEdyb3VwcyIsIk5hbWUiLCJPdXRwdXRHcm91cFNldHRpbmdzIiwiRmlsZUdyb3VwU2V0dGluZ3MiLCJEZXN0aW5hdGlvbiIsIlR5cGUiLCJPdXRwdXRzIiwiQXVkaW9EZXNjcmlwdGlvbnMiLCJBdWRpb1NvdXJjZU5hbWUiLCJDb2RlY1NldHRpbmdzIiwiQWFjU2V0dGluZ3MiLCJCaXRyYXRlIiwiQ29kaW5nTW9kZSIsIlNhbXBsZVJhdGUiLCJDb2RlYyIsIkNvbnRhaW5lclNldHRpbmdzIiwiQ29udGFpbmVyIiwiTXA0U2V0dGluZ3MiLCJWaWRlb0Rlc2NyaXB0aW9uIiwiSDI2NFNldHRpbmdzIiwiTWF4Qml0cmF0ZSIsIk51bWJlciIsIlJhdGVDb250cm9sTW9kZSIsIlNjZW5lQ2hhbmdlRGV0ZWN0IiwiUXVhbGl0eVR1bmluZ0xldmVsIiwiVXNlck1ldGFkYXRhIiwiam9iSWQiLCJKb2IiLCJJZCIsIm1lZGlhQ29udmVydEpvYklkIiwicGxheWJhY2tGaWxlVHlwZSIsInN0cmVhbVR5cGUiLCJtZXNzYWdlIiwiY29tcGxldGVWaWRlb1Byb2Nlc3NpbmciLCJobHNLZXkiLCJjdXJyZW50VmlkZW8iLCJmb3JtYXRQbGF5YmFja0tleSIsInNvdXJjZURlbGV0ZWQiLCJ1cGRhdGVkVmlkZW8iLCJmYWlsVmlkZW9Qcm9jZXNzaW5nIiwicXVldWVWaWRlb1RyYW5zY29kZUJhY2tmaWxsIiwic2FmZUxpbWl0IiwiTWF0aCIsIm1heCIsIm1pbiIsImpvYklkcyIsImdldEFwcFZpZGVvVXJsIiwiZGlyZWN0b3J5IiwiaXNUaHVtYiIsInR5cGVJZCIsImJ1Y2tldE5hbWUiLCJ2aWRlb05hbWUiLCJ2aWRlb1VybCIsImdldFZpZGVvVXJsIiwiaW1hZ2VEaXIiLCJ2aWRlb0RpciIsInVybFR5cGUiLCJrZXlEaXIiLCJ2aWRlb0tleSIsImRlZmF1bHRCdWNrZXQiLCJFeHBpcmVzIiwiZ2V0VmlkZW9TaWduZWRLZXlVcmwiLCJzYXZlVmlkZW8iLCJzM09wdGlvbnMiLCJ2aWRlb09iaiIsImZpbGVTaXplIiwiY3JlYXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQiLCJwYXJ0Q291bnQiLCJkZXNjcmlwdGlvbiIsIml0ZW1UeXBlIiwiZmlsZU5hbWUiLCJmb3JtYXRJdGVtSWQiLCJmb3JtYXRJdGVtVHlwZSIsInNhZmVQYXJ0Q291bnQiLCJ1cGxvYWQiLCJNZXRhZGF0YSIsImhhc1RodW1iIiwiaW5zZXJ0IiwiYWRkZWQiLCJ1cGxvYWRTdGF0dXMiLCJuZXdWaWRlbyIsInZpZGVvRWRnZSIsImFkZFZpZGVvRWRnZSIsIkFycmF5IiwiX3ZhbHVlIiwicGFydFVybHMiLCJwYXJ0U2l6ZSIsImdldFZpZGVvTXVsdGlwYXJ0VXBsb2FkUGFydFVybHMiLCJmb3JtYXRVcGxvYWRJZCIsImNvbXBsZXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQiLCJwYXJ0cyIsInVwbG9hZFBhcnRzIiwicGFydCIsIkVUYWciLCJldGFnIiwiYSIsImIiLCJNdWx0aXBhcnRVcGxvYWQiLCJQYXJ0cyIsImFib3J0VmlkZW9NdWx0aXBhcnRVcGxvYWQiLCJhZGRWaWRlbyIsInByb3ZpZGVyIiwiZXh0ZXJuYWxJZCIsImV4dGVybmFsVXJsIiwic2F2ZWQiLCJlZGdlSWQiLCJpdGVtRG9jSWQiLCJmaWxlRG9jSWQiLCJlZGdlIiwiX2Zyb20iLCJfdG8iLCJjb2xsZWN0aW9uIiwic2F2ZSIsInJldHVybk5ldyIsImZpbGVFZGdlIiwiZG9jdW1lbnQiLCJ1cGRhdGVWaWRlbyIsImJhc2U2NCIsInZpZGVvQnVmZmVyIiwidXBkYXRlZEZpbGVUeXBlIiwiZmlsZVR5cGVGcm9tQnVmZmVyIiwibWltZSIsInZQYXJhbXMiLCJjb250ZW50VHlwZSIsInJlcyIsInN0YXR1cyIsIklNQUdFX1JFUVVFU1QiLCJoZWFkZXJzIiwidXBkYXRlIiwidW5kZWZpbmVkIiwiZGVsZXRlVmlkZW8iLCJjYXNjYWRlIiwiSEFTX1JFQUNUSU9OIiwib3duZXJzaGlwIiwidktleSIsImtleXMiLCJEZWxldGUiLCJPYmplY3RzIiwiUXVpZXQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQ0VBLGdCQUFnQixFQUNoQkMsd0JBQXdCLEVBQ3hCQyxrQkFBa0IsUUFDYiwrQkFBK0I7QUFFdEMsU0FBUUMsT0FBT0MsT0FBTyxRQUFPLG9CQUFvQjtBQUNqRCxTQUFRQyxVQUFVLEVBQUVDLGFBQWEsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFDeEcsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBa0JDLE9BQU8sUUFBTyxlQUFlO0FBRS9DLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLFdB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
1198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy92aWRlb3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7XG4gIENyZWF0ZUpvYkNvbW1hbmQsXG4gIERlc2NyaWJlRW5kcG9pbnRzQ29tbWFuZCxcbiAgTWVkaWFDb252ZXJ0Q2xpZW50XG59IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1tZWRpYWNvbnZlcnQnO1xuaW1wb3J0IHtEZWxldGVPYmplY3RzQ29tbWFuZElucHV0LCBQdXRPYmplY3RDb21tYW5kSW5wdXR9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zMyc7XG5pbXBvcnQge2dldCBhcyBodHRwR2V0fSBmcm9tICdAbmxhYnMvcmlwLWh1bnRlcic7XG5pbXBvcnQge2NyZWF0ZUhhc2gsIHBhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnksIGxpdGVyYWx9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQge2dldENvbm5lY3Rpb25zQnlVc2VyfSBmcm9tICcuLi9sYW1iZGFzL2FjdGlvbnMvd2Vic29ja2V0cy5qcyc7XG5pbXBvcnQge3dzQ2xpZW50fSBmcm9tICcuLi9sYW1iZGFzL3V0aWxzL3dlYnNvY2tldC5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7YnVpbGRSZWFjdGlvbkNvdW50UXVlcnksIGJ1aWxkVGFnc1F1ZXJ5fSBmcm9tICcuLi91dGlscy9hcWxIZWxwZXJzLmpzJztcbmltcG9ydCB7Z2V0RG9jSWQsIGdldExpbWl0LCB1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2dldEF3c0NyZWRlbnRpYWxzfSBmcm9tICcuLi91dGlscy9hd3NVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGRlbGV0ZUl0ZW0sIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGV9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtcbiAgczNBYm9ydE11bHRpcGFydFVwbG9hZCxcbiAgczNDb21wbGV0ZU11bHRpcGFydFVwbG9hZCxcbiAgczNDcmVhdGVNdWx0aXBhcnRVcGxvYWQsXG4gIHMzRGVsZXRlLFxuICBzM0RlbGV0ZUxpc3QsXG4gIHMzR2V0QnVja2V0LFxuICBzM0dldFNpZ25lZFVybCxcbiAgczNHZXRVcGxvYWRQYXJ0U2lnbmVkVXJsLFxuICBzM1B1dFxufSBmcm9tICcuL3MzLmpzJztcbmltcG9ydCB7aGFzU3Vic2NyaXB0aW9uVG9JdGVtfSBmcm9tICcuL3N1YnNjcmlwdGlvbnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJDb2xsZWN0aW9uLCBBcmFuZ29EYkxpbWl0fSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIFZpZGVvRWRnZVR5cGUsXG4gIFZpZGVvTXVsdGlwYXJ0VXBsb2FkVHlwZSxcbiAgVmlkZW9PcHRpb25zLFxuICBWaWRlb1R5cGUsXG4gIFZpZGVvVXBsb2FkUGFydElucHV0LFxuICBWaWRlb1VwbG9hZFBhcnRVcmwsXG4gIFZpZGVvVXJsRGF0YVxufSBmcm9tICcuLi90eXBlcy92aWRlb3MudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3ZpZGVvcyc7XG5jb25zdCBoYXNNZWRpYUNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19NRURJQSk7XG5jb25zdCBERUZBVUxUX1ZJREVPX1VQTE9BRF9QQVJUX1NJWkUgPSAxMCAqIDEwMjQgKiAxMDI0O1xuY29uc3QgVklERU9fUExBWUJBQ0tfRElSID0gJ3ZpZGVvLXBsYXliYWNrJztcblxubGV0IG1lZGlhQ29udmVydEVuZHBvaW50OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbmNvbnN0IGdldE1lZGlhQ29udmVydENsaWVudCA9IChlbmRwb2ludD86IHN0cmluZyk6IE1lZGlhQ29udmVydENsaWVudCA9PiBuZXcgTWVkaWFDb252ZXJ0Q2xpZW50KHtcbiAgY3JlZGVudGlhbHM6IGdldEF3c0NyZWRlbnRpYWxzKCksXG4gIGVuZHBvaW50LFxuICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxufSk7XG5cbmNvbnN0IGdldE1lZGlhQ29udmVydEVuZHBvaW50ID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiA9PiB7XG4gIGlmKG1lZGlhQ29udmVydEVuZHBvaW50KSB7XG4gICAgcmV0dXJuIG1lZGlhQ29udmVydEVuZHBvaW50O1xuICB9XG5cbiAgbWVkaWFDb252ZXJ0RW5kcG9pbnQgPSBDb25maWcuZ2V0KCdhd3MubWVkaWFjb252ZXJ0LmVuZHBvaW50Jyk7XG5cbiAgaWYobWVkaWFDb252ZXJ0RW5kcG9pbnQpIHtcbiAgICByZXR1cm4gbWVkaWFDb252ZXJ0RW5kcG9pbnQ7XG4gIH1cblxuICBjb25zdCBjbGllbnQgPSBnZXRNZWRpYUNvbnZlcnRDbGllbnQoKTtcbiAgY29uc3QgZW5kcG9pbnRzID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IERlc2NyaWJlRW5kcG9pbnRzQ29tbWFuZCh7TWF4UmVzdWx0czogMX0pKTtcbiAgbWVkaWFDb252ZXJ0RW5kcG9pbnQgPSBlbmRwb2ludHMuRW5kcG9pbnRzPy5bMF0/LlVybDtcblxuICByZXR1cm4gbWVkaWFDb252ZXJ0RW5kcG9pbnQ7XG59O1xuXG5jb25zdCBnZXRWaWRlb01lZGlhSXRlbURvY0lkcyA9IChpdGVtSWQ6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgY29uc3QgcGFyc2VkRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG5cbiAgaWYocGFyc2VkRG9jSWQpIHtcbiAgICByZXR1cm4gW3BhcnNlZERvY0lkXTtcbiAgfVxuXG4gIGNvbnN0IGl0ZW1LZXkgPSBwYXJzZUlkKGl0ZW1JZCk7XG5cbiAgaWYoIWl0ZW1LZXkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gW1xuICAgIGAke0NPTExFQ1RJT05TLlVTRVJTfS8ke2l0ZW1LZXl9YCxcbiAgICBgJHtDT0xMRUNUSU9OUy5QRVJTT05BU30vJHtpdGVtS2V5fWBcbiAgXTtcbn07XG5cbmNvbnN0IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSA9IChwcml2YWN5OiB1bmtub3duKTogJ2ZyaWVuZHMnIHwgJ3ByaXZhdGUnIHwgJ3B1YmxpYycgfCAndmlwJyA9PiB7XG4gIHN3aXRjaChTdHJpbmcocHJpdmFjeSB8fCAnJykudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdmcmllbmRzJzpcbiAgICAgIHJldHVybiAnZnJpZW5kcyc7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gJ3ByaXZhdGUnO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gJ3ZpcCc7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAncHVibGljJztcbiAgfVxufTtcblxuY29uc3QgY2FuVmlld1ZpZGVvID0gKFxuICB2aWRlbzogVmlkZW9UeXBlLFxuICB2aWV3ZXJVc2VySWQ6IHN0cmluZyxcbiAgYWNjZXNzOiB7XG4gICAgcmVhZG9ubHkgY2FuVmlld0ZyaWVuZHM6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgY2FuVmlld1ZpcDogYm9vbGVhbjtcbiAgICByZWFkb25seSBpc093bmVyOiBib29sZWFuO1xuICB9XG4pID0+IHtcbiAgY29uc3QgcHJpdmFjeSA9IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSh2aWRlbz8ucHJpdmFjeSk7XG5cbiAgaWYoYWNjZXNzLmlzT3duZXIgfHwgU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpID09PSB2aWV3ZXJVc2VySWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHN3aXRjaChwcml2YWN5KSB7XG4gICAgY2FzZSAncHJpdmF0ZSc6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdGcmllbmRzO1xuICAgIGNhc2UgJ3ZpcCc6XG4gICAgICByZXR1cm4gYWNjZXNzLmNhblZpZXdWaXA7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG5jb25zdCByZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGxpc3Q6IEFycmF5PFZpZGVvVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nOyBfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30+LFxuICBzZXNzaW9uVXNlcklkOiBzdHJpbmdcbikgPT4ge1xuICBjb25zdCBvd25lclVzZXJJZCA9IFN0cmluZyhsaXN0WzBdPy51c2VySWQgfHwgJycpO1xuICBjb25zdCBpc093bmVyID0gISFzZXNzaW9uVXNlcklkICYmICEhb3duZXJVc2VySWQgJiYgc2Vzc2lvblVzZXJJZCA9PT0gb3duZXJVc2VySWQ7XG5cbiAgaWYoaXNPd25lcikge1xuICAgIHJldHVybiB7XG4gICAgICBjYW5WaWV3RnJpZW5kczogdHJ1ZSxcbiAgICAgIGNhblZpZXdWaXA6IHRydWUsXG4gICAgICBpc093bmVyOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIGlmKCFzZXNzaW9uVXNlcklkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNhblZpZXdGcmllbmRzOiBmYWxzZSxcbiAgICAgIGNhblZpZXdWaXA6IGZhbHNlLFxuICAgICAgaXNPd25lcjogZmFsc2VcbiAgICB9O1xuICB9XG5cbiAgbGV0IGNhblZpZXdGcmllbmRzID0gZmFsc2U7XG4gIGxldCBjYW5WaWV3VmlwID0gZmFsc2U7XG4gIGNvbnN0IG1lZGlhSXRlbUtleSA9IFN0cmluZyhsaXN0WzBdPy5fbWVkaWFJdGVtS2V5IHx8ICcnKTtcbiAgY29uc3QgbWVkaWFJdGVtVHlwZSA9IFN0cmluZyhsaXN0WzBdPy5fbWVkaWFJdGVtVHlwZSB8fCAnJyk7XG5cbiAgaWYobWVkaWFJdGVtVHlwZSA9PT0gQ09MTEVDVElPTlMuUEVSU09OQVMgJiYgbWVkaWFJdGVtS2V5KSB7XG4gICAgY29uc3QgcmVsYXRpb25zaGlwID0gYXdhaXQgZ2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlKGNvbnRleHQsIG1lZGlhSXRlbUtleSk7XG4gICAgY2FuVmlld0ZyaWVuZHMgPSAhIXJlbGF0aW9uc2hpcD8uaXNGcmllbmQ7XG4gICAgY2FuVmlld1ZpcCA9IGF3YWl0IGhhc1N1YnNjcmlwdGlvblRvSXRlbShjb250ZXh0LCBtZWRpYUl0ZW1LZXksIENPTExFQ1RJT05TLlBFUlNPTkFTKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY2FuVmlld0ZyaWVuZHMsXG4gICAgY2FuVmlld1ZpcCxcbiAgICBpc093bmVyOiBmYWxzZVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVmlkZW9PcHRpb25zID0gKG9wdGlvbnM6IFZpZGVvT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtmcm9tID0gMCwgdG8gPSAzMCwgdHlwZSA9ICdkZWZhdWx0J30gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0LFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb09wdGlvbmFsID0gKGZpZWxkczogc3RyaW5nW10gPSBbXSkgPT5cbiAgZmllbGRzLnJlZHVjZSgoc2VsZWN0cywgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICBjb25zdCByZWFjdGlvblF1ZXJ5ID0gYnVpbGRSZWFjdGlvbkNvdW50UXVlcnkoZmllbGQucmVwbGFjZSgnQ291bnQnLCAnJyksICd2JywgJ3ZpZGVvcycpO1xuICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2gocmVhY3Rpb25RdWVyeSk7XG4gICAgICBzZWxlY3RzLm9iamVjdHMucHVzaChgJHtmaWVsZH06JHtmaWVsZH1gKTtcbiAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgIH1cblxuICAgIHN3aXRjaChmaWVsZCkge1xuICAgICAgY2FzZSAncmVhY3Rpb25zJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHJlYWN0aW9ucyA9IChGT1IgdmlkZW8sIHIgSU4gSU5CT1VORCB2Ll9pZCByZWFjdGlvbnMgQ09MTEVDVCByZWFjdGlvbk5hbWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtcyBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfSlgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3JlYWN0aW9uczpyZWFjdGlvbnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICd0YWdzJzoge1xuICAgICAgICBjb25zdCB0YWdzUXVlcnkgPSBidWlsZFRhZ3NRdWVyeSgndicpO1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaCh0YWdzUXVlcnkpO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndGFnczp0YWdzJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndXNlcnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgdXNlcnMgPSBGSVJTVChGT1IgdSBJTiB1c2VycyBGSUxURVIgdi51c2VySWQgPT0gdS5fa2V5IExJTUlUIDEgUkVUVVJOIHUpYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCd1c2Vyczp1c2VycycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3ByaXZhY3knOiB7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtvYmplY3RzOiBbXSwgcXVlcmllczogW119KTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvc0J5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdXNlcklkOiBzdHJpbmcsXG4gIGZyb206IG51bWJlciA9IDAsXG4gIHRvOiBudW1iZXIgPSAzMFxuKTogUHJvbWlzZTxWaWRlb1R5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9zQnlVc2VyJztcbiAgY29uc3QgZm9ybWF0VXNlcklkID0gcGFyc2VJZCh1c2VySWQpO1xuICBjb25zdCBjdXN0b21RdWVyaWVzID0gW1xuICAgIGBMRVQgdXNlciA9IEZJUlNUKEZPUiB1IElOIHVzZXJzIEZJTFRFUiB1Ll9rZXkgPT0gZG9jLnVzZXJJZCBMSU1JVCAxIFJFVFVSTiB1KWBcbiAgXTtcblxuICByZXR1cm4gZ2V0TGlzdEJ5PFZpZGVvVHlwZT4oXG4gICAgY29udGV4dCxcbiAgICAndmlkZW9zJyxcbiAgICB7dXNlcklkOiBmb3JtYXRVc2VySWR9LFxuICAgIHtcbiAgICAgIHNvcnQ6IFt7ZmllbGQ6ICdhZGRlZCcsIGRpcmVjdGlvbjogJ0RFU0MnfV0sXG4gICAgICBsaW1pdDoge2Zyb20sIHRvfSxcbiAgICAgIGN1c3RvbVF1ZXJpZXMsXG4gICAgICBjdXN0b21PYmplY3RzOiBbJ3VzZXI6dXNlciddXG4gICAgfVxuICApLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBbXSBhcyBWaWRlb1R5cGVbXTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9Db3VudEJ5SXRlbSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBpdGVtSWQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb0NvdW50QnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBpdGVtRG9jSWRzID0gZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMoaXRlbUlkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBMRVQgbWVkaWEgPSAoXG4gICAgICBGT1IgdiBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIHYuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgICBGSUxURVIgdi50eXBlID09IFwidmlkZW9cIlxuICAgICAgICBSRVRVUk4gMVxuICAgIClcbiAgICBSRVRVUk4ge2NvdW50OiBMRU5HVEgobWVkaWEpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh7Y291bnR9KSA9PiBjb3VudClcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9zQnlJdGVtID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgb3B0aW9uczogVmlkZW9PcHRpb25zID0ge31cbik6IFByb21pc2U8VmlkZW9UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvc0J5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcyA9IFtdLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uVXNlcklkID0gJyd9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgaXRlbURvY0lkcyA9IGdldFZpZGVvTWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVZpZGVvT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0VmlkZW9PcHRpb25hbChmaWVsZHMpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiBsIElOICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgRklMVEVSIGwuX2Zyb20gSU4gJHtpdGVtRG9jSWRzfVxuICAgICAgRklMVEVSIGwudHlwZSA9PSBcInZpZGVvXCJcbiAgICAgIExFVCB2ID0gRE9DVU1FTlQobC5fdG8pXG4gICAgICBGSUxURVIgTk9UIElTX05VTEwodilcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBsLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyl9LCBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBTT1JUIHYuYWRkZWQgREVTQ1xuICAgICAgJHtsaXRlcmFsKGxpbWl0LmFxbCl9XG4gICAgICBSRVRVUk4gTUVSR0UoXG4gICAgICAgICR7c2VsZWN0T2JqZWN0cy5sZW5ndGggPiAwID8gbGl0ZXJhbChgTUVSR0UodiwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYCkgOiBsaXRlcmFsKCd2Jyl9LFxuICAgICAgICB7XG4gICAgICAgICAgX21lZGlhSXRlbUtleTogUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXksXG4gICAgICAgICAgX21lZGlhSXRlbVR5cGU6IGwuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5jb2xsZWN0aW9uLFxuICAgICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEFycmF5PFZpZGVvVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nOyBfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30+KTtcblxuICAgIGNvbnN0IGFjY2VzcyA9IGF3YWl0IHJlc29sdmVWaWRlb1ZpZXdlckFjY2Vzcyhjb250ZXh0LCBsaXN0LCBzZXNzaW9uVXNlcklkKTtcblxuICAgIGlmKGFjY2Vzcy5pc093bmVyKSB7XG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgICAgcmV0dXJuIGxpc3QuZmlsdGVyKCh2aWRlbykgPT4gbm9ybWFsaXplVmlkZW9Qcml2YWN5KHZpZGVvPy5wcml2YWN5KSA9PT0gJ3B1YmxpYycpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IGNhblZpZXdWaWRlbyh2aWRlbywgc2Vzc2lvblVzZXJJZCwgYWNjZXNzKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBbXSBhcyBWaWRlb1R5cGVbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvTGlzdEJ5UmVhY3Rpb25zID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBWaWRlb09wdGlvbnNcbik6IFByb21pc2U8VmlkZW9UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvTGlzdEJ5UmVhY3Rpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzID0gW10sIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVZpZGVvT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0VmlkZW9PcHRpb25hbChmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRTZXNzaW9uSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zOiBzdHJpbmdbXSA9IHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uTmFtZSkgPT4gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gW1xuICAgICdyLnR5cGUgPT0gXCJ2aWRlb3NcIicsXG4gICAgYFBPU0lUSU9OKCR7SlNPTi5zdHJpbmdpZnkoZm9ybWF0UmVhY3Rpb25zKX0sIExPV0VSKHIubmFtZSkpYFxuICBdO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB2LCByIElOIE9VVEJPVU5EICR7Zm9ybWF0U2Vzc2lvbklkfSBoYXNSZWFjdGlvblxuICAgICAgT1BUSU9OUyB7dmVydGV4Q29sbGVjdGlvbnM6IFwidmlkZW9zXCJ9XG4gICAgICBMRVQgbWVkaWEgPSBGSVJTVChcbiAgICAgICAgRk9SIG93bmVyLCBsIElOIElOQk9VTkQgdi5faWQgJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgICAgRklMVEVSIGwudHlwZSA9PSBcInZpZGVvXCJcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIHtcbiAgICAgICAgICAgIGl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgICAgaXRlbVR5cGU6IGwuaXRlbVR5cGUgfHwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5jb2xsZWN0aW9uXG4gICAgICAgICAgfVxuICAgICAgKVxuICAgICAgTEVUIG93bmVyUGVyc29uYSA9IG1lZGlhICYmIG1lZGlhLml0ZW1UeXBlID09IFwicGVyc29uYXNcIiA/IERPQ1VNRU5UKCR7bGl0ZXJhbChDT0xMRUNUSU9OUy5QRVJTT05BUyl9LCBtZWRpYS5pdGVtS2V5KSA6IG51bGxcbiAgICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICAgIEZJTFRFUiAke2xpdGVyYWwoZmlsdGVyQnkuam9pbignICYmICcpKX1cbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHYsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndicpfSxcbiAgICAgICAge1xuICAgICAgICAgIF9tZWRpYUl0ZW1LZXk6IG1lZGlhID8gbWVkaWEuaXRlbUtleSA6IG51bGwsXG4gICAgICAgICAgX21lZGlhSXRlbVR5cGU6IG1lZGlhID8gbWVkaWEuaXRlbVR5cGUgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUlkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuX2tleSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hSW1hZ2VJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlSWQgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlVXJsOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEuaW1hZ2VVcmwgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYU5hbWU6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5uYW1lIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFUaHVtYlVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLnRodW1iVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFVc2VySWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS51c2VySWQgOiBudWxsXG4gICAgICAgIH1cbiAgICAgIClcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIEFycmF5PFZpZGVvVHlwZSAmIHtfbWVkaWFJdGVtS2V5Pzogc3RyaW5nOyBfbWVkaWFJdGVtVHlwZT86IHN0cmluZ30+KTtcblxuICAgIGNvbnN0IGFjY2VzcyA9IGF3YWl0IHJlc29sdmVWaWRlb1ZpZXdlckFjY2Vzcyhjb250ZXh0LCBsaXN0LCBzZXNzaW9uSWQpO1xuXG4gICAgaWYoYWNjZXNzLmlzT3duZXIpIHtcbiAgICAgIHJldHVybiBsaXN0O1xuICAgIH1cblxuICAgIGlmKCFzZXNzaW9uSWQpIHtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSh2aWRlbz8ucHJpdmFjeSkgPT09ICdwdWJsaWMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBjYW5WaWV3VmlkZW8odmlkZW8sIHNlc3Npb25JZCwgYWNjZXNzKSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge29wdGlvbnMsIHJlYWN0aW9uc30sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlbyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0lkOiBzdHJpbmcpOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW8nO1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICByZXR1cm4gZ2V0SXRlbUJ5PFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHtfa2V5OiBmb3JtYXRWaWRlb0lkfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UGF0aFVzZXJWaWRlb3MgPSAodXNlcklkOiBzdHJpbmcsIHZpZGVvSWQ6IHN0cmluZywgdmlkZW9UeXBlOiBzdHJpbmcsIGRpcjogc3RyaW5nID0gJ3ZpZGVvcycpOiBzdHJpbmcgPT4ge1xuICBsZXQgZmlsZW5hbWUgPSB2aWRlb0lkO1xuXG4gIHN3aXRjaCh2aWRlb1R5cGUpIHtcbiAgICBjYXNlICdpbWFnZS9wbmcnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5wbmdgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW1hZ2Uvd2VicCc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LndlYnBgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnaW1hZ2UvanBlZyc6XG4gICAgY2FzZSAnaW1hZ2UvanBnJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0uanBnYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZGVvL3dlYm0nOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJtYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3ZpZGVvL3F1aWNrdGltZSc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9Lm1vdmA7XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tcDRgO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gYHVzZXJzLyR7dXNlcklkfS8ke2Rpcn0vJHtmaWxlbmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvRmlsZW5hbWUgPSAodmlkZW9JZDogc3RyaW5nLCB2aWRlb1R5cGU6IHN0cmluZyA9ICd2aWRlby9tcDQnKTogc3RyaW5nID0+IHtcbiAgbGV0IGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubXA0YDtcblxuICBzd2l0Y2godmlkZW9UeXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ucG5nYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL3dlYnAnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJwYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL2pwZWcnOlxuICAgIGNhc2UgJ2ltYWdlL2pwZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LmpwZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby93ZWJtJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VibWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby9xdWlja3RpbWUnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tb3ZgO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVuYW1lO1xufTtcblxuY29uc3QgZ2V0VmlkZW9VcGxvYWRLZXkgPSAodXNlcklkOiBzdHJpbmcsIHZpZGVvSWQ6IHN0cmluZywgZmlsZVR5cGU6IHN0cmluZyA9ICd2aWRlby9tcDQnKTogc3RyaW5nID0+XG4gIGdldFBhdGhVc2VyVmlkZW9zKHVzZXJJZCwgdmlkZW9JZCwgZmlsZVR5cGUsICd2aWRlb3MnKTtcblxuY29uc3Qgc2F2ZVZpZGVvVGh1bWJuYWlsID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHRodW1iQmFzZTY0OiBzdHJpbmcgPSAnJyxcbiAgdGh1bWJGaWxlVHlwZTogc3RyaW5nID0gJ2ltYWdlL2pwZWcnXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXRodW1iQmFzZTY0IHx8ICF0aHVtYkJhc2U2NC5pbmNsdWRlcygnLCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0QmFzZTY0ID0gdGh1bWJCYXNlNjQuc3Vic3RyKHRodW1iQmFzZTY0LmluZGV4T2YoJywnKSArIDEpO1xuICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcblxuICBpZighYnVmZmVyLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGF3YWl0IHMzUHV0KHtcbiAgICBCb2R5OiBidWZmZXIsXG4gICAgQnVja2V0OiBudWxsLFxuICAgIENvbnRlbnRUeXBlOiB0aHVtYkZpbGVUeXBlLFxuICAgIEtleTogZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2aWRlb0lkLCB0aHVtYkZpbGVUeXBlLCAndmlkZW8tdGh1bWJzJylcbiAgfSk7XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBnZXRWaWRlb1VwbG9hZERvYyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0lkOiBzdHJpbmcpOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCB2aWRlbyA9IGF3YWl0IGdldFZpZGVvKGNvbnRleHQsIHZpZGVvSWQpO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkID0gJyd9ID0ge319ID0gY29udGV4dDtcblxuICBpZighdmlkZW8gfHwgU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpICE9PSBzZXNzaW9uSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OKTtcbiAgfVxuXG4gIHJldHVybiB2aWRlbztcbn07XG5cbmNvbnN0IGdldFZpZGVvUGFydFVybHMgPSBhc3luYyAoXG4gIGtleTogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nLFxuICBwYXJ0TnVtYmVyczogbnVtYmVyW11cbik6IFByb21pc2U8VmlkZW9VcGxvYWRQYXJ0VXJsW10+ID0+IFByb21pc2UuYWxsKHBhcnROdW1iZXJzLm1hcChhc3luYyAocGFydE51bWJlcikgPT4gKHtcbiAgcGFydE51bWJlcixcbiAgdXJsOiBhd2FpdCBzM0dldFVwbG9hZFBhcnRTaWduZWRVcmwoe1xuICAgIEJ1Y2tldDogbnVsbCxcbiAgICBLZXk6IGtleSxcbiAgICBQYXJ0TnVtYmVyOiBwYXJ0TnVtYmVyLFxuICAgIFVwbG9hZElkOiB1cGxvYWRJZFxuICB9KVxufSkpKTtcblxuY29uc3QgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3Qgb3duZXJVc2VySWQgPSBwYXJzZUlkKFN0cmluZyh2aWRlbz8udXNlcklkIHx8IGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuXG4gIGlmKCFvd25lclVzZXJJZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNvbm5lY3Rpb25zID0gYXdhaXQgZ2V0Q29ubmVjdGlvbnNCeVVzZXIob3duZXJVc2VySWQpLmNhdGNoKCgpID0+IFtdKTtcbiAgY29uc3QgY29ubmVjdGlvbklkcyA9IGNvbm5lY3Rpb25zXG4gICAgLm1hcCgoY29ubmVjdGlvbikgPT4gcGFyc2VTdHJpbmcoY29ubmVjdGlvbj8uY29ubmVjdGlvbklkIHx8IGNvbm5lY3Rpb24/LnNvY2tldElkIHx8ICcnLCAzMikpXG4gICAgLmZpbHRlcihCb29sZWFuKVxuICAgIC5maWx0ZXIoKGNvbm5lY3Rpb25JZCwgaW5kZXgsIGxpc3QpID0+IGxpc3QuaW5kZXhPZihjb25uZWN0aW9uSWQpID09PSBpbmRleCk7XG5cbiAgaWYoIWNvbm5lY3Rpb25JZHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgd3NDbGllbnQuc2VuZChjb25uZWN0aW9uSWRzLCB7XG4gICAgYWN0aW9uOiAndmlkZW8ucHJvY2Vzc2luZy5jb21wbGV0ZWQnLFxuICAgIGRhdGE6IHtcbiAgICAgIHZpZGVvXG4gICAgfVxuICB9KS5jYXRjaCgoKSA9PiBudWxsKTtcbn07XG5cbmNvbnN0IGdldFZpZGVvUGxheWJhY2tLZXkgPSAodXNlcklkOiBzdHJpbmcsIHZpZGVvSWQ6IHN0cmluZyk6IHN0cmluZyA9PlxuICBnZXRQYXRoVXNlclZpZGVvcyh1c2VySWQsIHZpZGVvSWQsICd2aWRlby9tcDQnLCBWSURFT19QTEFZQkFDS19ESVIpO1xuXG5jb25zdCBkZWxldGVWaWRlb1NvdXJjZU9iamVjdCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZVxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVWaWRlb1NvdXJjZU9iamVjdCc7XG4gIGNvbnN0IHNvdXJjZUtleSA9IFN0cmluZyh2aWRlbz8uc291cmNlS2V5IHx8IHZpZGVvPy51cGxvYWRLZXkgfHwgJycpLnRyaW0oKTtcbiAgY29uc3QgcGxheWJhY2tLZXkgPSBTdHJpbmcodmlkZW8/LnBsYXliYWNrS2V5IHx8ICcnKS50cmltKCk7XG5cbiAgaWYoIXNvdXJjZUtleSB8fCBzb3VyY2VLZXkgPT09IHBsYXliYWNrS2V5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBzM0RlbGV0ZSh7XG4gICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICBLZXk6IHNvdXJjZUtleVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3NvdXJjZUtleSwgdmlkZW9JZDogdmlkZW8/LnZpZGVvSWQgfHwgdmlkZW8/Ll9rZXl9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5jb25zdCBzaG91bGRUcmFuc2NvZGVWaWRlbyA9ICh2aWRlbzogVmlkZW9UeXBlID0ge30pOiBib29sZWFuID0+IHtcbiAgY29uc3QgZmlsZVR5cGUgPSBTdHJpbmcodmlkZW8/LmZpbGVUeXBlIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmKCFmaWxlVHlwZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuICFbXG4gICAgJ3ZpZGVvL21wNCcsXG4gICAgJ3ZpZGVvL3dlYm0nXG4gIF0uaW5jbHVkZXMoZmlsZVR5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlXG4pOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY3JlYXRlVmlkZW9UcmFuc2NvZGVKb2InO1xuICBjb25zdCByb2xlQXJuID0gU3RyaW5nKENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQucm9sZUFybicpIHx8ICcnKTtcbiAgY29uc3QgYnVja2V0ID0gczNHZXRCdWNrZXQoKSB8fCBDb25maWcuZ2V0KCdhd3MuczMuQnVja2V0Jyk7XG4gIGNvbnN0IHZpZGVvSWQgPSBwYXJzZUlkKFN0cmluZyh2aWRlbz8udmlkZW9JZCB8fCB2aWRlbz8uX2tleSB8fCAnJykpO1xuICBjb25zdCB1c2VySWQgPSBwYXJzZUlkKFN0cmluZyh2aWRlbz8udXNlcklkIHx8IGNvbnRleHQ/LnNlc3Npb24/LnVzZXJJZCB8fCAnJykpO1xuICBjb25zdCBzb3VyY2VLZXkgPSBTdHJpbmcodmlkZW8/LnNvdXJjZUtleSB8fCB2aWRlbz8udXBsb2FkS2V5IHx8ICcnKTtcblxuICBpZighcm9sZUFybiB8fCAhYnVja2V0IHx8ICF2aWRlb0lkIHx8ICF1c2VySWQgfHwgIXNvdXJjZUtleSkge1xuICAgIGlmKHZpZGVvSWQpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgdmlkZW9JZCwge1xuICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgcHJvY2Vzc2luZ0Vycm9yOiBbXG4gICAgICAgICAgIXJvbGVBcm4gPyAnbWlzc2luZ19tZWRpYWNvbnZlcnRfcm9sZV9hcm4nIDogJycsXG4gICAgICAgICAgIWJ1Y2tldCA/ICdtaXNzaW5nX3MzX2J1Y2tldCcgOiAnJyxcbiAgICAgICAgICAhdXNlcklkID8gJ21pc3NpbmdfdXNlcl9pZCcgOiAnJyxcbiAgICAgICAgICAhc291cmNlS2V5ID8gJ21pc3Npbmdfc291cmNlX2tleScgOiAnJ1xuICAgICAgICBdLmZpbHRlcihCb29sZWFuKS5qb2luKCcsJyksXG4gICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdmYWlsZWQnXG4gICAgICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBhd2FpdCBnZXRNZWRpYUNvbnZlcnRFbmRwb2ludCgpO1xuICAgIGNvbnN0IGNsaWVudCA9IGdldE1lZGlhQ29udmVydENsaWVudChlbmRwb2ludCk7XG4gICAgY29uc3QgcXVldWUgPSBTdHJpbmcoQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5xdWV1ZUFybicpIHx8ICcnKTtcbiAgICBjb25zdCBvdXRwdXREZXN0aW5hdGlvbiA9IGBzMzovLyR7YnVja2V0fS91c2Vycy8ke3VzZXJJZH0vJHtWSURFT19QTEFZQkFDS19ESVJ9L2A7XG4gICAgY29uc3Qgam9iID0gYXdhaXQgY2xpZW50LnNlbmQobmV3IENyZWF0ZUpvYkNvbW1hbmQoe1xuICAgICAgLi4uKHF1ZXVlID8ge1F1ZXVlOiBxdWV1ZX0gOiB7fSksXG4gICAgICBSb2xlOiByb2xlQXJuLFxuICAgICAgU2V0dGluZ3M6IHtcbiAgICAgICAgSW5wdXRzOiBbe1xuICAgICAgICAgIEF1ZGlvU2VsZWN0b3JzOiB7XG4gICAgICAgICAgICAnQXVkaW8gU2VsZWN0b3IgMSc6IHtcbiAgICAgICAgICAgICAgRGVmYXVsdFNlbGVjdGlvbjogJ0RFRkFVTFQnXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBGaWxlSW5wdXQ6IGBzMzovLyR7YnVja2V0fS8ke3NvdXJjZUtleX1gLFxuICAgICAgICAgIFRpbWVjb2RlU291cmNlOiAnWkVST0JBU0VEJyxcbiAgICAgICAgICBWaWRlb1NlbGVjdG9yOiB7XG4gICAgICAgICAgICBSb3RhdGU6ICdBVVRPJ1xuICAgICAgICAgIH1cbiAgICAgICAgfV0sXG4gICAgICAgIE91dHB1dEdyb3VwczogW3tcbiAgICAgICAgICBOYW1lOiAnTVA0JyxcbiAgICAgICAgICBPdXRwdXRHcm91cFNldHRpbmdzOiB7XG4gICAgICAgICAgICBGaWxlR3JvdXBTZXR0aW5nczoge1xuICAgICAgICAgICAgICBEZXN0aW5hdGlvbjogb3V0cHV0RGVzdGluYXRpb25cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBUeXBlOiAnRklMRV9HUk9VUF9TRVRUSU5HUydcbiAgICAgICAgICB9LFxuICAgICAgICAgIE91dHB1dHM6IFt7XG4gICAgICAgICAgICBBdWRpb0Rlc2NyaXB0aW9uczogW3tcbiAgICAgICAgICAgICAgQXVkaW9Tb3VyY2VOYW1lOiAnQXVkaW8gU2VsZWN0b3IgMScsXG4gICAgICAgICAgICAgIENvZGVjU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICBBYWNTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgICAgQml0cmF0ZTogMTI4MDAwLFxuICAgICAgICAgICAgICAgICAgQ29kaW5nTW9kZTogJ0NPRElOR19NT0RFXzJfMCcsXG4gICAgICAgICAgICAgICAgICBTYW1wbGVSYXRlOiA0ODAwMFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgQ29kZWM6ICdBQUMnXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1dLFxuICAgICAgICAgICAgQ29udGFpbmVyU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgQ29udGFpbmVyOiAnTVA0JyxcbiAgICAgICAgICAgICAgTXA0U2V0dGluZ3M6IHt9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVmlkZW9EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgICBDb2RlY1NldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgQ29kZWM6ICdIXzI2NCcsXG4gICAgICAgICAgICAgICAgSDI2NFNldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgICBNYXhCaXRyYXRlOiBOdW1iZXIoQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5tYXhCaXRyYXRlJywgNTAwMDAwMCkpLFxuICAgICAgICAgICAgICAgICAgUmF0ZUNvbnRyb2xNb2RlOiAnUVZCUicsXG4gICAgICAgICAgICAgICAgICBTY2VuZUNoYW5nZURldGVjdDogJ1RSQU5TSVRJT05fREVURUNUSU9OJyxcbiAgICAgICAgICAgICAgICAgIFF1YWxpdHlUdW5pbmdMZXZlbDogJ1NJTkdMRV9QQVNTJ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1dXG4gICAgICAgIH1dXG4gICAgICB9LFxuICAgICAgVXNlck1ldGFkYXRhOiB7XG4gICAgICAgIHBsYXliYWNrS2V5OiBnZXRWaWRlb1BsYXliYWNrS2V5KHVzZXJJZCwgdmlkZW9JZCksXG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgdmlkZW9JZFxuICAgICAgfVxuICAgIH0gYXMgYW55KSk7XG5cbiAgICBjb25zdCBqb2JJZCA9IFN0cmluZyhqb2I/LkpvYj8uSWQgfHwgJycpO1xuXG4gICAgaWYoam9iSWQpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgdmlkZW9JZCwge1xuICAgICAgICBtZWRpYUNvbnZlcnRKb2JJZDogam9iSWQsXG4gICAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICBwbGF5YmFja0ZpbGVUeXBlOiAndmlkZW8vbXA0JyxcbiAgICAgICAgcGxheWJhY2tLZXk6IGdldFZpZGVvUGxheWJhY2tLZXkodXNlcklkLCB2aWRlb0lkKSxcbiAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ3F1ZXVlZCcsXG4gICAgICAgIHN0cmVhbVR5cGU6ICdwcm9ncmVzc2l2ZSdcbiAgICAgIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvYklkO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYodmlkZW9JZCkge1xuICAgICAgYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCB2aWRlb0lkLCB7XG4gICAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgICBwcm9jZXNzaW5nRXJyb3I6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ21lZGlhY29udmVydF9qb2JfZmFpbGVkJyxcbiAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ2ZhaWxlZCdcbiAgICAgIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSkuY2F0Y2goKCkgPT4gbnVsbCk7XG4gICAgfVxuXG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtzb3VyY2VLZXksIHVzZXJJZCwgdmlkZW9JZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb21wbGV0ZVZpZGVvUHJvY2Vzc2luZyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB7XG4gICAgaGxzS2V5ID0gJycsXG4gICAgcGxheWJhY2tGaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICAgIHBsYXliYWNrS2V5ID0gJycsXG4gICAgcHJvY2Vzc2luZ1N0YXR1cyA9ICdyZWFkeScsXG4gICAgc3RyZWFtVHlwZSA9ICdwcm9ncmVzc2l2ZSdcbiAgfToge1xuICAgIGhsc0tleT86IHN0cmluZztcbiAgICBwbGF5YmFja0ZpbGVUeXBlPzogc3RyaW5nO1xuICAgIHBsYXliYWNrS2V5Pzogc3RyaW5nO1xuICAgIHByb2Nlc3NpbmdTdGF0dXM/OiBzdHJpbmc7XG4gICAgc3RyZWFtVHlwZT86IHN0cmluZztcbiAgfSA9IHt9XG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICBpZighZm9ybWF0VmlkZW9JZCkge1xuICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xuICB9XG5cbiAgY29uc3QgY3VycmVudFZpZGVvID0gYXdhaXQgZ2V0VmlkZW8oY29udGV4dCwgZm9ybWF0VmlkZW9JZCk7XG4gIGNvbnN0IGZvcm1hdFBsYXliYWNrS2V5ID0gcGxheWJhY2tLZXkgfHwgZ2V0VmlkZW9QbGF5YmFja0tleShTdHJpbmcoY3VycmVudFZpZGVvPy51c2VySWQgfHwgJycpLCBmb3JtYXRWaWRlb0lkKTtcbiAgY29uc3Qgc291cmNlRGVsZXRlZCA9IHByb2Nlc3NpbmdTdGF0dXMgPT09ICdyZWFkeSdcbiAgICA/IGF3YWl0IGRlbGV0ZVZpZGVvU291cmNlT2JqZWN0KGNvbnRleHQsIHtcbiAgICAgIC4uLmN1cnJlbnRWaWRlbyxcbiAgICAgIHBsYXliYWNrS2V5OiBmb3JtYXRQbGF5YmFja0tleVxuICAgIH0gYXMgVmlkZW9UeXBlKVxuICAgIDogZmFsc2U7XG4gIGNvbnN0IHVwZGF0ZWRWaWRlbyA9IGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwge1xuICAgIC4uLihobHNLZXkgPyB7aGxzS2V5fSA6IHt9KSxcbiAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICBwbGF5YmFja0ZpbGVUeXBlLFxuICAgIC4uLihmb3JtYXRQbGF5YmFja0tleSA/IHtwbGF5YmFja0tleTogZm9ybWF0UGxheWJhY2tLZXl9IDoge30pLFxuICAgIHByb2Nlc3NpbmdTdGF0dXMsXG4gICAgLi4uKHNvdXJjZURlbGV0ZWQgPyB7c291cmNlS2V5OiAnJywgdXBsb2FkS2V5OiAnJ30gOiB7fSksXG4gICAgc3RyZWFtVHlwZVxuICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpO1xuXG4gIGlmKHByb2Nlc3NpbmdTdGF0dXMgPT09ICdyZWFkeScpIHtcbiAgICBhd2FpdCBlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUoY29udGV4dCwgdXBkYXRlZFZpZGVvKTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVkVmlkZW87XG59O1xuXG5leHBvcnQgY29uc3QgZmFpbFZpZGVvUHJvY2Vzc2luZyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nXG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICBpZighZm9ybWF0VmlkZW9JZCkge1xuICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwge1xuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdmYWlsZWQnXG4gIH0gYXMgUGFydGlhbDxWaWRlb1R5cGU+IGFzIFZpZGVvVHlwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgcXVldWVWaWRlb1RyYW5zY29kZUJhY2tmaWxsID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBsaW1pdDogbnVtYmVyID0gMTBcbik6IFByb21pc2U8c3RyaW5nW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3F1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qgc2FmZUxpbWl0ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oTnVtYmVyKGxpbWl0IHx8IDEwKSwgNTApKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdiBJTiB2aWRlb3NcbiAgICAgIEZJTFRFUiB2LnVwbG9hZFN0YXR1cyA9PSBcInVwbG9hZGVkXCJcbiAgICAgIEZJTFRFUiB2LnByb2Nlc3NpbmdTdGF0dXMgIT0gXCJyZWFkeVwiXG4gICAgICBGSUxURVIgdi5maWxlVHlwZSAhPSBcInZpZGVvL21wNFwiXG4gICAgICBGSUxURVIgIUhBUyh2LCBcIm1lZGlhQ29udmVydEpvYklkXCIpIHx8IHYubWVkaWFDb252ZXJ0Sm9iSWQgPT0gXCJcIlxuICAgICAgU09SVCB2LmFkZGVkIERFU0NcbiAgICAgIExJTUlUICR7c2FmZUxpbWl0fVxuICAgICAgUkVUVVJOIHZcbiAgYDtcblxuICB0cnkge1xuICAgIGNvbnN0IGxpc3QgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFZpZGVvVHlwZVtdKTtcbiAgICBjb25zdCBqb2JJZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBmb3IoY29uc3QgdmlkZW8gb2YgbGlzdCkge1xuICAgICAgY29uc3Qgam9iSWQgPSBhd2FpdCBjcmVhdGVWaWRlb1RyYW5zY29kZUpvYihjb250ZXh0LCB2aWRlbyk7XG5cbiAgICAgIGlmKGpvYklkKSB7XG4gICAgICAgIGpvYklkcy5wdXNoKGpvYklkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gam9iSWRzO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBWaWRlb1VybCA9ICh7XG4gIGJ1Y2tldCxcbiAgZGlyZWN0b3J5ID0gJ3ZpZGVvcycsXG4gIGZpbGVUeXBlID0gJ3ZpZGVvL21wNCcsXG4gIGlzVGh1bWIgPSBmYWxzZSxcbiAgdHlwZSxcbiAgdHlwZUlkLFxuICB2aWRlb0lkXG59OiBWaWRlb1VybERhdGEpOiBzdHJpbmcgPT4ge1xuICBpZighdHlwZSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmKCF2aWRlb0lkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgYnVja2V0TmFtZSA9IGJ1Y2tldCB8fCBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICBjb25zdCB2aWRlb05hbWUgPSBnZXRWaWRlb0ZpbGVuYW1lKHZpZGVvSWQsIGZpbGVUeXBlKTtcbiAgY29uc3QgdmlkZW9VcmwgPSBDb25maWcuZ2V0KCdpbWFnZS51cmwnKSB8fCBgaHR0cHM6Ly9zMy5hbWF6b25hd3MuY29tLyR7YnVja2V0TmFtZX1gO1xuXG4gIGlmKHR5cGUgPT09ICdhcHBzJykge1xuICAgIHJldHVybiBgJHt2aWRlb1VybH0vJHt0eXBlfS8ke2RpcmVjdG9yeX0vJHt2aWRlb05hbWV9YDtcbiAgfVxuXG4gIHJldHVybiBgJHt2aWRlb1VybH0vJHt0eXBlfS8ke3R5cGVJZH0vJHtkaXJlY3Rvcnl9LyR7dmlkZW9OYW1lfWA7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9VcmwgPSBhc3luYyAoe1xuICBidWNrZXQsXG4gIGZpbGVUeXBlID0gJ3ZpZGVvL21wNCcsXG4gIGltYWdlRGlyID0gJ3ZpZGVvcycsXG4gIHZpZGVvRGlyID0gJ3ZpZGVvcycsXG4gIHZpZGVvSWQsXG4gIHR5cGUsXG4gIHR5cGVJZCxcbiAgdXJsVHlwZSA9ICdwdWJsaWMnXG59OiBhbnkpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBpZighdmlkZW9JZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGtleURpciA9IHZpZGVvRGlyIHx8IGltYWdlRGlyIHx8ICd2aWRlb3MnO1xuICBjb25zdCB2aWRlb0tleSA9IGAke3R5cGV9LyR7dHlwZUlkfS8ke2tleURpcn0vJHtnZXRWaWRlb0ZpbGVuYW1lKHZpZGVvSWQsIGZpbGVUeXBlKX1gO1xuXG4gIHN3aXRjaCh1cmxUeXBlKSB7XG4gICAgY2FzZSAnc2lnbmVkJzoge1xuICAgICAgY29uc3QgZGVmYXVsdEJ1Y2tldCA9IENvbmZpZy5nZXQoJ2ltYWdlLmJ1Y2tldCcpIHx8ICdkZXYucmVha3Rvci5pbyc7XG4gICAgICByZXR1cm4gYXdhaXQgczNHZXRTaWduZWRVcmwoe0J1Y2tldDogYnVja2V0IHx8IGRlZmF1bHRCdWNrZXQsIEV4cGlyZXM6IDYwICogNjAsIEtleTogdmlkZW9LZXl9KTtcbiAgICB9XG4gICAgY2FzZSAncHVibGljJzoge1xuICAgICAgcmV0dXJuIGBodHRwczovL2JveC4ke0NvbmZpZy5nZXQoJ2FwcC51cmwnKX0vJHt2aWRlb0tleX1gO1xuICAgIH1cbiAgICBjYXNlICdkZXYnOiB7XG4gICAgICByZXR1cm4gYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS9kZXYuJHtDb25maWcuZ2V0KCdhcHAudXJsJyl9LyR7dmlkZW9LZXl9YDtcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvU2lnbmVkS2V5VXJsID0gYXN5bmMgKGtleTogc3RyaW5nID0gJycsIGJ1Y2tldD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IHZpZGVvS2V5ID0gU3RyaW5nKGtleSB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCF2aWRlb0tleSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGRlZmF1bHRCdWNrZXQgPSBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICByZXR1cm4gYXdhaXQgczNHZXRTaWduZWRVcmwoe0J1Y2tldDogYnVja2V0IHx8IGRlZmF1bHRCdWNrZXQsIEV4cGlyZXM6IDYwICogNjAsIEtleTogdmlkZW9LZXl9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzYXZlVmlkZW8gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgYnVmZmVyOiBCdWZmZXIsXG4gIGZpbGVUeXBlOiBzdHJpbmcgPSAndmlkZW8vbXA0JywgczNPcHRpb25zPzogUHV0T2JqZWN0Q29tbWFuZElucHV0XG4pOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IHZpZGVvT2JqOiBQdXRPYmplY3RDb21tYW5kSW5wdXQgPSB7XG4gICAgQm9keTogYnVmZmVyLFxuICAgIEJ1Y2tldDogbnVsbCxcbiAgICBDb250ZW50VHlwZTogZmlsZVR5cGUsXG4gICAgLi4uKHMzT3B0aW9ucyB8fCB7fSksXG4gICAgS2V5OiBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZpZGVvSWQsIGZpbGVUeXBlLCAndmlkZW9zJylcbiAgfTtcblxuICBhd2FpdCBzM1B1dCh2aWRlb09iaik7XG5cbiAgcmV0dXJuIHtcbiAgICBmaWxlU2l6ZTogYnVmZmVyLmxlbmd0aCxcbiAgICBmaWxlVHlwZSxcbiAgICB2aWRlb0lkXG4gIH0gYXMgdW5rbm93biBhcyBWaWRlb1R5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGUgJiB7ZmlsZU5hbWU/OiBzdHJpbmc7IGZpbGVTaXplPzogbnVtYmVyOyBwYXJ0Q291bnQ/OiBudW1iZXJ9LFxuICBwYXJ0Q291bnQ6IG51bWJlciA9IDFcbik6IFByb21pc2U8VmlkZW9NdWx0aXBhcnRVcGxvYWRUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjcmVhdGVWaWRlb011bHRpcGFydFVwbG9hZCc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBmaWxlU2l6ZSxcbiAgICBmaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICAgIGl0ZW1JZCxcbiAgICBpdGVtVHlwZSxcbiAgICBwcml2YWN5LFxuICAgIHRodW1iQmFzZTY0ID0gJycsXG4gICAgdGh1bWJGaWxlVHlwZSA9ICdpbWFnZS9qcGVnJyxcbiAgICB0eXBlID0gJ3ZpZGVvJyxcbiAgICB2aWRlb0lkXG4gIH0gPSB2aWRlbztcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCkgfHwgY3JlYXRlSGFzaChgdmlkZW8tJHtzZXNzaW9uSWR9LSR7RGF0ZS5ub3coKX0tJHtTdHJpbmcodmlkZW8/LmZpbGVOYW1lIHx8ICcnKX1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlLCAxNikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGtleSA9IGdldFZpZGVvVXBsb2FkS2V5KHNlc3Npb25JZCwgZm9ybWF0VmlkZW9JZCwgZmlsZVR5cGUpO1xuICBjb25zdCBzYWZlUGFydENvdW50ID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oTnVtYmVyKHBhcnRDb3VudCB8fCB2aWRlbz8ucGFydENvdW50IHx8IDEpLCAxMDAwMCkpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdXBsb2FkID0gYXdhaXQgczNDcmVhdGVNdWx0aXBhcnRVcGxvYWQoe1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgICAgS2V5OiBrZXksXG4gICAgICBNZXRhZGF0YToge1xuICAgICAgICBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCB8fCAnJyxcbiAgICAgICAgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlIHx8ICcnLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZCxcbiAgICAgICAgdmlkZW9JZDogZm9ybWF0VmlkZW9JZFxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHVwbG9hZElkID0gU3RyaW5nKHVwbG9hZD8uVXBsb2FkSWQgfHwgJycpO1xuXG4gICAgaWYoIXVwbG9hZElkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgdmlkZW8gdXBsb2FkLicpO1xuICAgIH1cblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgaGFzVGh1bWIgPSBhd2FpdCBzYXZlVmlkZW9UaHVtYm5haWwoY29udGV4dCwgZm9ybWF0VmlkZW9JZCwgdGh1bWJCYXNlNjQsIHRodW1iRmlsZVR5cGUpO1xuICAgIGNvbnN0IGluc2VydDogVmlkZW9UeXBlID0ge1xuICAgICAgX2tleTogZm9ybWF0VmlkZW9JZCxcbiAgICAgIGFkZGVkOiBub3csXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGZpbGVTaXplLFxuICAgICAgZmlsZVR5cGUsXG4gICAgICBtb2RpZmllZDogbm93LFxuICAgICAgcHJpdmFjeSxcbiAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdwZW5kaW5nX3VwbG9hZCcsXG4gICAgICBzb3VyY2VLZXk6IGtleSxcbiAgICAgIC4uLihoYXNUaHVtYiA/IHt0aHVtYkZpbGVUeXBlfSA6IHt9KSxcbiAgICAgIHR5cGUsXG4gICAgICB1cGxvYWRJZCxcbiAgICAgIHVwbG9hZEtleToga2V5LFxuICAgICAgdXBsb2FkU3RhdHVzOiAndXBsb2FkaW5nJyxcbiAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgfSBhcyBWaWRlb1R5cGU7XG4gICAgY29uc3QgbmV3VmlkZW8gPSBhd2FpdCBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydCk7XG5cbiAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgIGF3YWl0IGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnROdW1iZXJzID0gQXJyYXkuZnJvbSh7bGVuZ3RoOiBzYWZlUGFydENvdW50fSwgKF92YWx1ZSwgaW5kZXgpID0+IGluZGV4ICsgMSk7XG4gICAgY29uc3QgcGFydFVybHMgPSBhd2FpdCBnZXRWaWRlb1BhcnRVcmxzKGtleSwgdXBsb2FkSWQsIHBhcnROdW1iZXJzKTtcblxuICAgIHJldHVybiB7XG4gICAgICBidWNrZXQ6IHMzR2V0QnVja2V0KCksXG4gICAgICBrZXksXG4gICAgICBwYXJ0U2l6ZTogREVGQVVMVF9WSURFT19VUExPQURfUEFSVF9TSVpFLFxuICAgICAgcGFydFVybHMsXG4gICAgICB1cGxvYWRJZCxcbiAgICAgIHZpZGVvOiBuZXdWaWRlbyxcbiAgICAgIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWRcbiAgICB9O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCkgYXMgdW5rbm93biBhcyBWaWRlb011bHRpcGFydFVwbG9hZFR5cGU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb011bHRpcGFydFVwbG9hZFBhcnRVcmxzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHVwbG9hZElkOiBzdHJpbmcsXG4gIHBhcnROdW1iZXJzOiBudW1iZXJbXSA9IFtdXG4pOiBQcm9taXNlPFZpZGVvVXBsb2FkUGFydFVybFtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb011bHRpcGFydFVwbG9hZFBhcnRVcmxzJztcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW9VcGxvYWREb2MoY29udGV4dCwgdmlkZW9JZCk7XG4gICAgY29uc3Qga2V5ID0gU3RyaW5nKHZpZGVvPy51cGxvYWRLZXkgfHwgdmlkZW8/LnNvdXJjZUtleSB8fCBnZXRWaWRlb1VwbG9hZEtleShTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCAnJyksIHBhcnNlSWQodmlkZW9JZCksIHZpZGVvPy5maWxlVHlwZSkpO1xuICAgIGNvbnN0IGZvcm1hdFVwbG9hZElkID0gU3RyaW5nKHVwbG9hZElkIHx8IHZpZGVvPy51cGxvYWRJZCB8fCAnJyk7XG5cbiAgICBpZigha2V5IHx8ICFmb3JtYXRVcGxvYWRJZCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBnZXRWaWRlb1BhcnRVcmxzKGtleSwgZm9ybWF0VXBsb2FkSWQsIHBhcnROdW1iZXJzLm1hcCgocGFydE51bWJlcikgPT4gTnVtYmVyKHBhcnROdW1iZXIpKS5maWx0ZXIoQm9vbGVhbikpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCkgYXMgdW5rbm93biBhcyBWaWRlb1VwbG9hZFBhcnRVcmxbXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGNvbXBsZXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZyxcbiAgcGFydHM6IFZpZGVvVXBsb2FkUGFydElucHV0W10gPSBbXVxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NvbXBsZXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlb1VwbG9hZERvYyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcbiAgICBjb25zdCBmb3JtYXRVcGxvYWRJZCA9IFN0cmluZyh1cGxvYWRJZCB8fCB2aWRlbz8udXBsb2FkSWQgfHwgJycpO1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2aWRlbz8udXBsb2FkS2V5IHx8IHZpZGVvPy5zb3VyY2VLZXkgfHwgZ2V0VmlkZW9VcGxvYWRLZXkoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpLCBmb3JtYXRWaWRlb0lkLCB2aWRlbz8uZmlsZVR5cGUpKTtcbiAgICBjb25zdCB1cGxvYWRQYXJ0cyA9IHBhcnRzXG4gICAgICAubWFwKChwYXJ0KSA9PiAoe1xuICAgICAgICBFVGFnOiBTdHJpbmcocGFydD8uZXRhZyB8fCAnJykudHJpbSgpLFxuICAgICAgICBQYXJ0TnVtYmVyOiBOdW1iZXIocGFydD8ucGFydE51bWJlciB8fCAwKVxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0LkVUYWcgJiYgcGFydC5QYXJ0TnVtYmVyID4gMClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLlBhcnROdW1iZXIgLSBiLlBhcnROdW1iZXIpO1xuXG4gICAgaWYoIWtleSB8fCAhZm9ybWF0VXBsb2FkSWQgfHwgIXVwbG9hZFBhcnRzLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIHZpZGVvIHVwbG9hZCBkYXRhLicpO1xuICAgIH1cblxuICAgIGF3YWl0IHMzQ29tcGxldGVNdWx0aXBhcnRVcGxvYWQoe1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgS2V5OiBrZXksXG4gICAgICBNdWx0aXBhcnRVcGxvYWQ6IHtcbiAgICAgICAgUGFydHM6IHVwbG9hZFBhcnRzXG4gICAgICB9LFxuICAgICAgVXBsb2FkSWQ6IGZvcm1hdFVwbG9hZElkXG4gICAgfSk7XG5cbiAgICBjb25zdCB1cGRhdGVkVmlkZW8gPSBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgICAgLi4uKHNob3VsZFRyYW5zY29kZVZpZGVvKHZpZGVvKVxuICAgICAgICA/IHtwcm9jZXNzaW5nU3RhdHVzOiAncXVldWVkJ31cbiAgICAgICAgOiB7XG4gICAgICAgICAgcGxheWJhY2tGaWxlVHlwZTogdmlkZW8/LmZpbGVUeXBlIHx8ICd2aWRlby9tcDQnLFxuICAgICAgICAgIHBsYXliYWNrS2V5OiBrZXksXG4gICAgICAgICAgcHJvY2Vzc2luZ1N0YXR1czogJ3JlYWR5JyxcbiAgICAgICAgICBzdHJlYW1UeXBlOiAncHJvZ3Jlc3NpdmUnXG4gICAgICAgIH0pLFxuICAgICAgdXBsb2FkU3RhdHVzOiAndXBsb2FkZWQnXG4gICAgfSk7XG5cbiAgICBpZihzaG91bGRUcmFuc2NvZGVWaWRlbyh1cGRhdGVkVmlkZW8pKSB7XG4gICAgICB2b2lkIGNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZvaWQgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVwZGF0ZWRWaWRlbztcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWJvcnRWaWRlb011bHRpcGFydFVwbG9hZCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2Fib3J0VmlkZW9NdWx0aXBhcnRVcGxvYWQnO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlb1VwbG9hZERvYyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgICBjb25zdCBmb3JtYXRVcGxvYWRJZCA9IFN0cmluZyh1cGxvYWRJZCB8fCB2aWRlbz8udXBsb2FkSWQgfHwgJycpO1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2aWRlbz8udXBsb2FkS2V5IHx8IHZpZGVvPy5zb3VyY2VLZXkgfHwgZ2V0VmlkZW9VcGxvYWRLZXkoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpLCBwYXJzZUlkKHZpZGVvSWQpLCB2aWRlbz8uZmlsZVR5cGUpKTtcblxuICAgIGlmKGtleSAmJiBmb3JtYXRVcGxvYWRJZCkge1xuICAgICAgYXdhaXQgczNBYm9ydE11bHRpcGFydFVwbG9hZCh7XG4gICAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgICAgS2V5OiBrZXksXG4gICAgICAgIFVwbG9hZElkOiBmb3JtYXRVcGxvYWRJZFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBwYXJzZUlkKHZpZGVvSWQpLCB7XG4gICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgIHVwbG9hZFN0YXR1czogJ2Fib3J0ZWQnXG4gICAgfSk7XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVmlkZW8gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFZpZGVvJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge3ZpZGVvSWQsIGRlc2NyaXB0aW9uLCBidWZmZXIsIGZpbGVUeXBlLCBwcml2YWN5LCB0eXBlID0gJ3ZpZGVvJywgcHJvdmlkZXIsIGV4dGVybmFsSWQsIGV4dGVybmFsVXJsfSA9IHZpZGVvO1xuXG4gIGlmKHR5cGUgPT09ICdleHRlcm5hbCcpIHtcbiAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgIF9rZXk6IHZpZGVvSWQsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGV4dGVybmFsSWQsXG4gICAgICBleHRlcm5hbFVybCxcbiAgICAgIHByaXZhY3ksXG4gICAgICBwcm92aWRlcixcbiAgICAgIHR5cGUsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0gYXMgVmlkZW9UeXBlO1xuXG4gICAgcmV0dXJuIGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gc2F2ZVZpZGVvKGNvbnRleHQsIHZpZGVvSWQsIGJ1ZmZlciwgZmlsZVR5cGUsIHMzT3B0aW9ucylcbiAgICAudGhlbigoc2F2ZWQ6IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICAgIC4uLnNhdmVkLFxuICAgICAgICBfa2V5OiB2aWRlb0lkLFxuICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgZmlsZVR5cGUsXG4gICAgICAgIHByaXZhY3ksXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9IGFzIFZpZGVvVHlwZTtcblxuICAgICAgcmV0dXJuIGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFZpZGVvRWRnZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUpOiBQcm9taXNlPG9iamVjdD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkVmlkZW9FZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7dmlkZW9JZCwgaXRlbUlkLCBpdGVtVHlwZX0gPSB2aWRlb0VkZ2U7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYGhhc01lZGlhLXZpZGVvLSR7dmlkZW9JZH0tJHtpdGVtSWR9LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlKS50b0xvd2VyQ2FzZSgpIGFzIEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBpdGVtRG9jSWQgPSBnZXREb2NJZChmb3JtYXRJdGVtVHlwZSwge19rZXk6IGZvcm1hdEl0ZW1JZH0pO1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcbiAgY29uc3QgZmlsZURvY0lkID0gYHZpZGVvcy8ke2Zvcm1hdFZpZGVvSWR9YDtcblxuICBjb25zdCBlZGdlOiBWaWRlb0VkZ2VUeXBlID0ge1xuICAgIF9mcm9tOiBpdGVtRG9jSWQsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIF90bzogZmlsZURvY0lkLFxuICAgIGFkZGVkOiBub3csXG4gICAgaXRlbVR5cGUsXG4gICAgdHlwZTogJ3ZpZGVvJ1xuICB9IGFzIFZpZGVvRWRnZVR5cGU7XG5cbiAgaWYoaXRlbURvY0lkKSB7XG4gICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgICAudGhlbigoZmlsZUVkZ2UpID0+IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihFREdFUy5IQVNfTUVESUEpLmRvY3VtZW50KGZpbGVFZGdlKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlVmlkZW8gPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGUsXG4gIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZVZpZGVvJztcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGJhc2U2NCA9ICcnLFxuICAgIGJ1ZmZlcjogdmlkZW9CdWZmZXIsXG4gICAgZGVzY3JpcHRpb24gPSAnJyxcbiAgICBleHRlcm5hbElkLFxuICAgIGV4dGVybmFsVXJsLFxuICAgIGZpbGVUeXBlLFxuICAgIGhsc0tleSxcbiAgICBpdGVtSWQsXG4gICAgaXRlbVR5cGUsXG4gICAgcGxheWJhY2tGaWxlVHlwZSxcbiAgICBwbGF5YmFja0tleSxcbiAgICBwcm9jZXNzaW5nU3RhdHVzLFxuICAgIHByaXZhY3ksXG4gICAgcHJvdmlkZXIsXG4gICAgc3RyZWFtVHlwZSxcbiAgICB0eXBlLFxuICAgIHVwbG9hZFN0YXR1cyxcbiAgICB1cmwgPSAnJyxcbiAgICB2aWRlb0lkXG4gIH0gPSB2aWRlbztcblxuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gdmlkZW9JZCB8fCBjcmVhdGVIYXNoKGB2aWRlby0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VJZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRJdGVtVHlwZTogQXJhbmdvRGJDb2xsZWN0aW9uID0gcGFyc2VDaGFyKGl0ZW1UeXBlLCAxNikudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG5cbiAgaWYodHlwZSA9PT0gJ2V4dGVybmFsJyAmJiAoZXh0ZXJuYWxJZCB8fCBleHRlcm5hbFVybCkpIHtcbiAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgIF9rZXk6IGZvcm1hdFZpZGVvSWQsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIGV4dGVybmFsSWQsXG4gICAgICBleHRlcm5hbFVybCxcbiAgICAgIHByaXZhY3ksXG4gICAgICBwcm92aWRlcixcbiAgICAgIHR5cGUsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0gYXMgVmlkZW9UeXBlO1xuXG4gICAgcmV0dXJuIGFkZEl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgaW5zZXJ0KVxuICAgICAgLnRoZW4oKG5ld1ZpZGVvOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlID0ge3ZpZGVvSWQ6IGZvcm1hdFZpZGVvSWQsIGl0ZW1JZDogZm9ybWF0SXRlbUlkLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUsIHR5cGU6ICd2aWRlbyd9O1xuICAgICAgICAgIHJldHVybiBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKS50aGVuKCgpID0+IG5ld1ZpZGVvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3VmlkZW87XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICBpZihiYXNlNjQgfHwgdmlkZW9CdWZmZXIpIHtcbiAgICBsZXQgYnVmZmVyOiBCdWZmZXIgPSB2aWRlb0J1ZmZlciBhcyBCdWZmZXI7XG4gICAgaWYoYmFzZTY0KSB7XG4gICAgICBjb25zdCBmb3JtYXRCYXNlNjQgPSBiYXNlNjQuc3Vic3RyKGJhc2U2NC5pbmRleE9mKCcsJykgKyAxKTtcbiAgICAgIGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGZvcm1hdEJhc2U2NCwgJ2Jhc2U2NCcpO1xuICAgIH1cblxuICAgIGxldCB1cGRhdGVkRmlsZVR5cGUgPSBmaWxlVHlwZTtcbiAgICBpZighZmlsZVR5cGUpIHtcbiAgICAgIGNvbnN0IHtmaWxlVHlwZUZyb21CdWZmZXJ9ID0gYXdhaXQgaW1wb3J0KCdmaWxlLXR5cGUnKTtcbiAgICAgIGNvbnN0IHttaW1lfSA9IGF3YWl0IGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXIpO1xuICAgICAgdXBkYXRlZEZpbGVUeXBlID0gbWltZTtcbiAgICB9XG5cbiAgICBjb25zdCB2UGFyYW1zOiBWaWRlb1R5cGUgPSB7YnVmZmVyLCBmaWxlVHlwZTogdXBkYXRlZEZpbGVUeXBlLCB1c2VySWQ6IHNlc3Npb25JZCwgdmlkZW9JZDogZm9ybWF0VmlkZW9JZH0gYXMgVmlkZW9UeXBlO1xuICAgIHJldHVybiBhZGRWaWRlbyhjb250ZXh0LCB7Li4udlBhcmFtcywgZGVzY3JpcHRpb24sIHByaXZhY3l9LCBzM09wdGlvbnMpXG4gICAgICAudGhlbigobmV3VmlkZW86IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgICBpZihmb3JtYXRJdGVtSWQgJiYgZm9ybWF0SXRlbVR5cGUpIHtcbiAgICAgICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICAgICAgcmV0dXJuIGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpLnRoZW4oKCkgPT4gbmV3VmlkZW8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdWaWRlbztcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHVybCAhPT0gJycpIHtcbiAgICBsZXQgY29udGVudFR5cGU7XG4gICAgcmV0dXJuIGh0dHBHZXQodXJsKVxuICAgICAgLnRoZW4oKHJlczogYW55KSA9PiB7XG4gICAgICAgIGlmKHJlcy5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklNQUdFX1JFUVVFU1QpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnRUeXBlID0gcmVzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKTtcbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgIH0pXG4gICAgICAudGhlbigocmVzKSA9PiByZXMuYnVmZmVyKCkpXG4gICAgICAudGhlbigoYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgICAgICAgY29uc3QgdlBhcmFtczogVmlkZW9UeXBlID0ge2J1ZmZlciwgZGVzY3JpcHRpb24sIGZpbGVUeXBlOiBjb250ZW50VHlwZSwgcHJpdmFjeSwgdXNlcklkOiBzZXNzaW9uSWQsIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWR9IGFzIFZpZGVvVHlwZTtcbiAgICAgICAgcmV0dXJuIGFkZFZpZGVvKGNvbnRleHQsIHZQYXJhbXMsIHMzT3B0aW9ucylcbiAgICAgICAgICAudGhlbigobmV3VmlkZW86IFZpZGVvVHlwZSkgPT4ge1xuICAgICAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgICAgICAgICAgcmV0dXJuIGFkZFZpZGVvRWRnZShjb250ZXh0LCB2aWRlb0VkZ2UpLnRoZW4oKCkgPT4gbmV3VmlkZW8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ld1ZpZGVvO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9IGVsc2UgaWYodmlkZW9JZCAhPT0gJycpIHtcbiAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIC4uLihobHNLZXkgIT09IHVuZGVmaW5lZCA/IHtobHNLZXl9IDoge30pLFxuICAgICAgLi4uKHBsYXliYWNrRmlsZVR5cGUgIT09IHVuZGVmaW5lZCA/IHtwbGF5YmFja0ZpbGVUeXBlfSA6IHt9KSxcbiAgICAgIC4uLihwbGF5YmFja0tleSAhPT0gdW5kZWZpbmVkID8ge3BsYXliYWNrS2V5fSA6IHt9KSxcbiAgICAgIC4uLihwcm9jZXNzaW5nU3RhdHVzICE9PSB1bmRlZmluZWQgPyB7cHJvY2Vzc2luZ1N0YXR1c30gOiB7fSksXG4gICAgICAuLi4ocHJpdmFjeSAhPT0gdW5kZWZpbmVkID8ge3ByaXZhY3l9IDoge30pLFxuICAgICAgLi4uKHN0cmVhbVR5cGUgIT09IHVuZGVmaW5lZCA/IHtzdHJlYW1UeXBlfSA6IHt9KSxcbiAgICAgIC4uLih1cGxvYWRTdGF0dXMgIT09IHVuZGVmaW5lZCA/IHt1cGxvYWRTdGF0dXN9IDoge30pXG4gICAgfTtcbiAgICByZXR1cm4gdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB1cGRhdGUpXG4gICAgICAudGhlbigodXBkYXRlZFZpZGVvKSA9PiB7XG4gICAgICAgIGlmKHByb2Nlc3NpbmdTdGF0dXMgPT09ICdyZWFkeScpIHtcbiAgICAgICAgICB2b2lkIGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZShjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZWRWaWRlbztcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVZpZGVvID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHZpZGVvSWQ6IHN0cmluZyk6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVWaWRlbyc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgdmlkZW8gPSBhd2FpdCBkZWxldGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICAgIGNhc2NhZGU6IFtFREdFUy5IQVNfTUVESUEsIEVER0VTLkhBU19SRUFDVElPTl0sXG4gICAgICBvd25lcnNoaXA6IHRydWVcbiAgICB9KTtcblxuICAgIGlmKHZpZGVvKSB7XG4gICAgICBjb25zdCB7X2tleTogdktleSwgZmlsZVR5cGUsIGhsc0tleSwgcGxheWJhY2tLZXksIHNvdXJjZUtleSwgdGh1bWJGaWxlVHlwZSwgdXBsb2FkS2V5fSA9IHZpZGVvO1xuICAgICAgY29uc3Qga2V5cyA9IFtcbiAgICAgICAgc291cmNlS2V5LFxuICAgICAgICB1cGxvYWRLZXksXG4gICAgICAgIHBsYXliYWNrS2V5LFxuICAgICAgICBobHNLZXksXG4gICAgICAgIGB1c2Vycy8ke3Nlc3Npb25JZH0vdmlkZW9zLyR7dktleX0ubXA0YCxcbiAgICAgICAgZmlsZVR5cGUgPyBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZLZXksIGZpbGVUeXBlLCAndmlkZW9zJykgOiAnJyxcbiAgICAgICAgdGh1bWJGaWxlVHlwZSA/IGdldFBhdGhVc2VyVmlkZW9zKHNlc3Npb25JZCwgdktleSwgdGh1bWJGaWxlVHlwZSwgJ3ZpZGVvLXRodW1icycpIDogJydcbiAgICAgIF1cbiAgICAgICAgLm1hcCgoa2V5KSA9PiBTdHJpbmcoa2V5IHx8ICcnKS50cmltKCkpXG4gICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgLmZpbHRlcigoa2V5LCBpbmRleCwgbGlzdCkgPT4gbGlzdC5pbmRleE9mKGtleSkgPT09IGluZGV4KTtcbiAgICAgIGNvbnN0IHBhcmFtczogRGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCA9IHtcbiAgICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgICBEZWxldGU6IHtcbiAgICAgICAgICBPYmplY3RzOiBrZXlzLm1hcCgoS2V5KSA9PiAoe0tleX0pKSxcbiAgICAgICAgICBRdWlldDogdHJ1ZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHMzRGVsZXRlTGlzdChwYXJhbXMpLnRoZW4oKCkgPT4gdmlkZW8pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsIGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiQ3JlYXRlSm9iQ29tbWFuZCIsIkRlc2NyaWJlRW5kcG9pbnRzQ29tbWFuZCIsIk1lZGlhQ29udmVydENsaWVudCIsImdldCIsImh0dHBHZXQiLCJjcmVhdGVIYXNoIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlQ2hhciIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsImFxbCIsImxpdGVyYWwiLCJDb25maWciLCJDT0xMRUNUSU9OUyIsIkVER0VTIiwiZ2V0Q29ubmVjdGlvbnNCeVVzZXIiLCJ3c0NsaWVudCIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsImJ1aWxkUmVhY3Rpb25Db3VudFF1ZXJ5IiwiYnVpbGRUYWdzUXVlcnkiLCJnZXREb2NJZCIsImdldExpbWl0IiwidXNlRGIiLCJnZXRBd3NDcmVkZW50aWFscyIsImFkZEl0ZW0iLCJkZWxldGVJdGVtIiwiZ2V0SXRlbUJ5IiwiZ2V0TGlzdEJ5IiwidXBkYXRlSXRlbSIsImdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZSIsInMzQWJvcnRNdWx0aXBhcnRVcGxvYWQiLCJzM0NvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkIiwiczNDcmVhdGVNdWx0aXBhcnRVcGxvYWQiLCJzM0RlbGV0ZSIsInMzRGVsZXRlTGlzdCIsInMzR2V0QnVja2V0IiwiczNHZXRTaWduZWRVcmwiLCJzM0dldFVwbG9hZFBhcnRTaWduZWRVcmwiLCJzM1B1dCIsImhhc1N1YnNjcmlwdGlvblRvSXRlbSIsImV2ZW50Q2F0ZWdvcnkiLCJoYXNNZWRpYUNvbGxlY3Rpb24iLCJIQVNfTUVESUEiLCJERUZBVUxUX1ZJREVPX1VQTE9BRF9QQVJUX1NJWkUiLCJWSURFT19QTEFZQkFDS19ESVIiLCJtZWRpYUNvbnZlcnRFbmRwb2ludCIsImdldE1lZGlhQ29udmVydENsaWVudCIsImVuZHBvaW50IiwiY3JlZGVudGlhbHMiLCJyZWdpb24iLCJnZXRNZWRpYUNvbnZlcnRFbmRwb2ludCIsImNsaWVudCIsImVuZHBvaW50cyIsInNlbmQiLCJNYXhSZXN1bHRzIiwiRW5kcG9pbnRzIiwiVXJsIiwiZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMiLCJpdGVtSWQiLCJwYXJzZWREb2NJZCIsIml0ZW1LZXkiLCJVU0VSUyIsIlBFUlNPTkFTIiwibm9ybWFsaXplVmlkZW9Qcml2YWN5IiwicHJpdmFjeSIsIlN0cmluZyIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImNhblZpZXdWaWRlbyIsInZpZGVvIiwidmlld2VyVXNlcklkIiwiYWNjZXNzIiwiaXNPd25lciIsInVzZXJJZCIsImNhblZpZXdGcmllbmRzIiwiY2FuVmlld1ZpcCIsInJlc29sdmVWaWRlb1ZpZXdlckFjY2VzcyIsImNvbnRleHQiLCJsaXN0Iiwic2Vzc2lvblVzZXJJZCIsIm93bmVyVXNlcklkIiwibWVkaWFJdGVtS2V5IiwiX21lZGlhSXRlbUtleSIsIm1lZGlhSXRlbVR5cGUiLCJfbWVkaWFJdGVtVHlwZSIsInJlbGF0aW9uc2hpcCIsImlzRnJpZW5kIiwicGFyc2VWaWRlb09wdGlvbnMiLCJvcHRpb25zIiwiZnJvbSIsInRvIiwidHlwZSIsImxpbWl0IiwiZ2V0VmlkZW9PcHRpb25hbCIsImZpZWxkcyIsInJlZHVjZSIsInNlbGVjdHMiLCJmaWVsZCIsImluY2x1ZGVzIiwicmVhY3Rpb25RdWVyeSIsInJlcGxhY2UiLCJxdWVyaWVzIiwicHVzaCIsIm9iamVjdHMiLCJ0YWdzUXVlcnkiLCJnZXRWaWRlb3NCeVVzZXIiLCJhY3Rpb24iLCJmb3JtYXRVc2VySWQiLCJjdXN0b21RdWVyaWVzIiwic29ydCIsImRpcmVjdGlvbiIsImN1c3RvbU9iamVjdHMiLCJjYXRjaCIsImVycm9yIiwiY2F0ZWdvcnkiLCJ2YWx1ZSIsIkRBVEFCQVNFX0VSUk9SIiwiZ2V0VmlkZW9Db3VudEJ5SXRlbSIsImRhdGFiYXNlTmFtZSIsIml0ZW1Eb2NJZHMiLCJhcWxRcnkiLCJxdWVyeSIsInRoZW4iLCJjdXJzb3IiLCJuZXh0IiwiY291bnQiLCJnZXRWaWRlb3NCeUl0ZW0iLCJzZXNzaW9uIiwic2VsZWN0T2JqZWN0cyIsInNlbGVjdFF1ZXJpZXMiLCJqb2luIiwibGVuZ3RoIiwiYWxsIiwiZmlsdGVyIiwiZ2V0VmlkZW9MaXN0QnlSZWFjdGlvbnMiLCJyZWFjdGlvbnMiLCJzZXNzaW9uSWQiLCJmb3JtYXRTZXNzaW9uSWQiLCJmb3JtYXRSZWFjdGlvbnMiLCJtYXAiLCJyZWFjdGlvbk5hbWUiLCJmaWx0ZXJCeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYXJhbXMiLCJnZXRWaWRlbyIsInZpZGVvSWQiLCJmb3JtYXRWaWRlb0lkIiwiX2tleSIsImdldFBhdGhVc2VyVmlkZW9zIiwidmlkZW9UeXBlIiwiZGlyIiwiZmlsZW5hbWUiLCJnZXRWaWRlb0ZpbGVuYW1lIiwiZ2V0VmlkZW9VcGxvYWRLZXkiLCJmaWxlVHlwZSIsInNhdmVWaWRlb1RodW1ibmFpbCIsInRodW1iQmFzZTY0IiwidGh1bWJGaWxlVHlwZSIsImZvcm1hdEJhc2U2NCIsInN1YnN0ciIsImluZGV4T2YiLCJidWZmZXIiLCJCdWZmZXIiLCJCb2R5IiwiQnVja2V0IiwiQ29udGVudFR5cGUiLCJLZXkiLCJnZXRWaWRlb1VwbG9hZERvYyIsIkVycm9yIiwiSU5WQUxJRF9BVVRIRU5USUNBVElPTiIsImdldFZpZGVvUGFydFVybHMiLCJrZXkiLCJ1cGxvYWRJZCIsInBhcnROdW1iZXJzIiwiUHJvbWlzZSIsInBhcnROdW1iZXIiLCJ1cmwiLCJQYXJ0TnVtYmVyIiwiVXBsb2FkSWQiLCJlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUiLCJjb25uZWN0aW9ucyIsImNvbm5lY3Rpb25JZHMiLCJjb25uZWN0aW9uIiwiY29ubmVjdGlvbklkIiwic29ja2V0SWQiLCJCb29sZWFuIiwiaW5kZXgiLCJkYXRhIiwiZ2V0VmlkZW9QbGF5YmFja0tleSIsImRlbGV0ZVZpZGVvU291cmNlT2JqZWN0Iiwic291cmNlS2V5IiwidXBsb2FkS2V5IiwicGxheWJhY2tLZXkiLCJzaG91bGRUcmFuc2NvZGVWaWRlbyIsImNyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iIiwicm9sZUFybiIsImJ1Y2tldCIsIm1vZGlmaWVkIiwiRGF0ZSIsIm5vdyIsInByb2Nlc3NpbmdFcnJvciIsInByb2Nlc3NpbmdTdGF0dXMiLCJxdWV1ZSIsIm91dHB1dERlc3RpbmF0aW9uIiwiam9iIiwiUXVldWUiLCJSb2xlIiwiU2V0dGluZ3MiLCJJbnB1dHMiLCJBdWRpb1NlbGVjdG9ycyIsIkRlZmF1bHRTZWxlY3Rpb24iLCJGaWxlSW5wdXQiLCJUaW1lY29kZVNvdXJjZSIsIlZpZGVvU2VsZWN0b3IiLCJSb3RhdGUiLCJPdXRwdXRHcm91cHMiLCJOYW1lIiwiT3V0cHV0R3JvdXBTZXR0aW5ncyIsIkZpbGVHcm91cFNldHRpbmdzIiwiRGVzdGluYXRpb24iLCJUeXBlIiwiT3V0cHV0cyIsIkF1ZGlvRGVzY3JpcHRpb25zIiwiQXVkaW9Tb3VyY2VOYW1lIiwiQ29kZWNTZXR0aW5ncyIsIkFhY1NldHRpbmdzIiwiQml0cmF0ZSIsIkNvZGluZ01vZGUiLCJTYW1wbGVSYXRlIiwiQ29kZWMiLCJDb250YWluZXJTZXR0aW5ncyIsIkNvbnRhaW5lciIsIk1wNFNldHRpbmdzIiwiVmlkZW9EZXNjcmlwdGlvbiIsIkgyNjRTZXR0aW5ncyIsIk1heEJpdHJhdGUiLCJOdW1iZXIiLCJSYXRlQ29udHJvbE1vZGUiLCJTY2VuZUNoYW5nZURldGVjdCIsIlF1YWxpdHlUdW5pbmdMZXZlbCIsIlVzZXJNZXRhZGF0YSIsImpvYklkIiwiSm9iIiwiSWQiLCJtZWRpYUNvbnZlcnRKb2JJZCIsInBsYXliYWNrRmlsZVR5cGUiLCJzdHJlYW1UeXBlIiwibWVzc2FnZSIsImNvbXBsZXRlVmlkZW9Qcm9jZXNzaW5nIiwiaGxzS2V5IiwiY3VycmVudFZpZGVvIiwiZm9ybWF0UGxheWJhY2tLZXkiLCJzb3VyY2VEZWxldGVkIiwidXBkYXRlZFZpZGVvIiwiZmFpbFZpZGVvUHJvY2Vzc2luZyIsInF1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCIsInNhZmVMaW1pdCIsIk1hdGgiLCJtYXgiLCJtaW4iLCJqb2JJZHMiLCJnZXRBcHBWaWRlb1VybCIsImRpcmVjdG9yeSIsImlzVGh1bWIiLCJ0eXBlSWQiLCJidWNrZXROYW1lIiwidmlkZW9OYW1lIiwidmlkZW9VcmwiLCJnZXRWaWRlb1VybCIsImltYWdlRGlyIiwidmlkZW9EaXIiLCJ1cmxUeXBlIiwia2V5RGlyIiwidmlkZW9LZXkiLCJkZWZhdWx0QnVja2V0IiwiRXhwaXJlcyIsImdldFZpZGVvU2lnbmVkS2V5VXJsIiwic2F2ZVZpZGVvIiwiczNPcHRpb25zIiwidmlkZW9PYmoiLCJmaWxlU2l6ZSIsImNyZWF0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkIiwicGFydENvdW50IiwiZGVzY3JpcHRpb24iLCJpdGVtVHlwZSIsImZpbGVOYW1lIiwiZm9ybWF0SXRlbUlkIiwiZm9ybWF0SXRlbVR5cGUiLCJzYWZlUGFydENvdW50IiwidXBsb2FkIiwiTWV0YWRhdGEiLCJoYXNUaHVtYiIsImluc2VydCIsImFkZGVkIiwidXBsb2FkU3RhdHVzIiwibmV3VmlkZW8iLCJ2aWRlb0VkZ2UiLCJhZGRWaWRlb0VkZ2UiLCJBcnJheSIsIl92YWx1ZSIsInBhcnRVcmxzIiwicGFydFNpemUiLCJnZXRWaWRlb011bHRpcGFydFVwbG9hZFBhcnRVcmxzIiwiZm9ybWF0VXBsb2FkSWQiLCJjb21wbGV0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkIiwicGFydHMiLCJ1cGxvYWRQYXJ0cyIsInBhcnQiLCJFVGFnIiwiZXRhZyIsImEiLCJiIiwiTXVsdGlwYXJ0VXBsb2FkIiwiUGFydHMiLCJhYm9ydFZpZGVvTXVsdGlwYXJ0VXBsb2FkIiwiYWRkVmlkZW8iLCJwcm92aWRlciIsImV4dGVybmFsSWQiLCJleHRlcm5hbFVybCIsInNhdmVkIiwiZWRnZUlkIiwiaXRlbURvY0lkIiwiZmlsZURvY0lkIiwiZWRnZSIsIl9mcm9tIiwiX3RvIiwiY29sbGVjdGlvbiIsInNhdmUiLCJyZXR1cm5OZXciLCJmaWxlRWRnZSIsImRvY3VtZW50IiwidXBkYXRlVmlkZW8iLCJiYXNlNjQiLCJ2aWRlb0J1ZmZlciIsInVwZGF0ZWRGaWxlVHlwZSIsImZpbGVUeXBlRnJvbUJ1ZmZlciIsIm1pbWUiLCJ2UGFyYW1zIiwiY29udGVudFR5cGUiLCJyZXMiLCJzdGF0dXMiLCJJTUFHRV9SRVFVRVNUIiwiaGVhZGVycyIsInVwZGF0ZSIsInVuZGVmaW5lZCIsImRlbGV0ZVZpZGVvIiwiY2FzY2FkZSIsIkhBU19SRUFDVElPTiIsIm93bmVyc2hpcCIsInZLZXkiLCJrZXlzIiwiRGVsZXRlIiwiT2JqZWN0cyIsIlF1aWV0Il0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUNFQSxnQkFBZ0IsRUFDaEJDLHdCQUF3QixFQUN4QkMsa0JBQWtCLFFBQ2IsK0JBQStCO0FBRXRDLFNBQVFDLE9BQU9DLE9BQU8sUUFBTyxvQkFBb0I7QUFDakQsU0FBUUMsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ3hHLFNBQVFDLEdBQUcsUUFBTyxXQUFXO0FBQzdCLFNBQWtCQyxPQUFPLFFBQU8sZUFBZTtBQUUvQyxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxTQUFRQyxX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
@@ -65,4 +65,4 @@ const performDocumentTransformation = (doc)=>{
65
65
  });
66
66
  };
67
67
 
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hZGFwdGVycy9hcmFuZ29BZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtwYXJzZUFyYW5nb0lkLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtEb2N1bWVudFR5cGV9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB7cmVtb3ZlRW1wdHlLZXlzfSBmcm9tICcuLi91dGlscy9hZGFwdGVyVXRpbHMuanMnO1xuXG5leHBvcnQgY2xhc3MgQXJhbmdvVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBmaWVsZD86IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBcmFuZ29WYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IERvY3VtZW50SW5wdXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIF9mcm9tOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfa2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9vbGRSZXY6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX3Jldjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfdG86IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgYWRkZWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kaWZpZWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKVxufSkucGFzc3Rocm91Z2goKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRG9jdW1lbnRJbnB1dCA9IChkb2M6IHVua25vd24pOiBEb2N1bWVudFR5cGUgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IERvY3VtZW50SW5wdXRTY2hlbWEucGFyc2UoZG9jKTtcbiAgICByZXR1cm4gdmFsaWRhdGVkIGFzIERvY3VtZW50VHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSBlcnJvci5pc3N1ZXMubWFwKChlKSA9PiBgJHtlLnBhdGguam9pbignLicpfTogJHtlLm1lc3NhZ2V9YCkuam9pbignLCAnKTtcbiAgICAgIHRocm93IG5ldyBBcmFuZ29WYWxpZGF0aW9uRXJyb3IoYERvY3VtZW50IHZhbGlkYXRpb24gZmFpbGVkOiAke2ZpZWxkRXJyb3JzfWApO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdERvY3VtZW50T3V0cHV0ID0gKGRvYzogRG9jdW1lbnRUeXBlKTogRG9jdW1lbnRUeXBlID0+IGRvYztcblxuZXhwb3J0IGNvbnN0IHBhcnNlRG9jdW1lbnQgPSAoZG9jOiBEb2N1bWVudFR5cGUpOiBEb2N1bWVudFR5cGUgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBwZXJmb3JtRG9jdW1lbnRUcmFuc2Zvcm1hdGlvbihkb2MpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBBcmFuZ29WYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQXJhbmdvVmFsaWRhdGlvbkVycm9yKGBEb2N1bWVudCBwYXJzaW5nIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgfVxufTtcblxuY29uc3QgcGVyZm9ybURvY3VtZW50VHJhbnNmb3JtYXRpb24gPSAoZG9jOiBEb2N1bWVudFR5cGUpOiBEb2N1bWVudFR5cGUgPT4ge1xuICBjb25zdCB7XG4gICAgX2lkLFxuICAgIF9rZXksXG4gICAgYWRkZWQsXG4gICAgaWQsXG4gICAgbW9kaWZpZWRcbiAgfSA9IGRvYztcblxuICByZXR1cm4gcmVtb3ZlRW1wdHlLZXlzKHtcbiAgICAuLi5kb2MsXG4gICAgLi4uKF9pZCAmJiB7X2lkOiBwYXJzZUFyYW5nb0lkKF9pZCl9KSxcbiAgICAuLi4oX2tleSAmJiB7X2tleTogcGFyc2VJZChfa2V5KX0pLFxuICAgIC4uLihhZGRlZCAhPT0gdW5kZWZpbmVkICYmIHthZGRlZDogcGFyc2VOdW0oYWRkZWQsIDEzKX0pLFxuICAgIC4uLigoX2lkIHx8IGlkKSAmJiB7aWQ6IHBhcnNlQXJhbmdvSWQoX2lkIHx8IGlkKX0pLFxuICAgIC4uLihtb2RpZmllZCAhPT0gdW5kZWZpbmVkICYmIHttb2RpZmllZDogcGFyc2VOdW0obW9kaWZpZWQsIDEzKX0pXG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZU51bSIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUlkIiwieiIsInJlbW92ZUVtcHR5S2V5cyIsIkFyYW5nb1ZhbGlkYXRpb25FcnJvciIsIkVycm9yIiwibWVzc2FnZSIsImZpZWxkIiwibmFtZSIsIkRvY3VtZW50SW5wdXRTY2hlbWEiLCJvYmplY3QiLCJfZnJvbSIsInN0cmluZyIsIm9wdGlvbmFsIiwiX2lkIiwiX2tleSIsIl9vbGRSZXYiLCJfcmV2IiwiX3RvIiwiYWRkZWQiLCJudW1iZXIiLCJpZCIsIm1vZGlmaWVkIiwicGFzc3Rocm91Z2giLCJ2YWxpZGF0ZURvY3VtZW50SW5wdXQiLCJkb2MiLCJ2YWxpZGF0ZWQiLCJwYXJzZSIsImVycm9yIiwiWm9kRXJyb3IiLCJmaWVsZEVycm9ycyIsImlzc3VlcyIsIm1hcCIsImUiLCJwYXRoIiwiam9pbiIsImZvcm1hdERvY3VtZW50T3V0cHV0IiwicGFyc2VEb2N1bWVudCIsInBlcmZvcm1Eb2N1bWVudFRyYW5zZm9ybWF0aW9uIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxRQUFRLFFBQU8sK0JBQStCO0FBQ3RELFNBQVFDLGFBQWEsRUFBRUMsT0FBTyxRQUFPLCtCQUErQjtBQUNwRSxTQUFRQyxDQUFDLFFBQU8sTUFBTTtBQUd0QixTQUFRQyxlQUFlLFFBQU8sMkJBQTJCO0FBRXpELE9BQU8sTUFBTUMsOEJBQThCQzs7SUFDekMsWUFBWUMsT0FBZSxFQUFFLEFBQU9DLEtBQWMsQ0FBRTtRQUNsRCxLQUFLLENBQUNELGVBRDRCQyxRQUFBQTtRQUVsQyxJQUFJLENBQUNDLElBQUksR0FBRztJQUNkO0FBQ0Y7QUFFQSxNQUFNQyxzQkFBc0JQLEVBQUVRLE1BQU0sQ0FBQztJQUNuQ0MsT0FBT1QsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQzFCQyxLQUFLWixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDeEJFLE1BQU1iLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN6QkcsU0FBU2QsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQzVCSSxNQUFNZixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDekJLLEtBQUtoQixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDeEJNLE9BQU9qQixFQUFFa0IsTUFBTSxHQUFHUCxRQUFRO0lBQzFCUSxJQUFJbkIsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3ZCUyxVQUFVcEIsRUFBRWtCLE1BQU0sR0FBR1AsUUFBUTtBQUMvQixHQUFHVSxXQUFXO0FBRWQsT0FBTyxNQUFNQyx3QkFBd0IsQ0FBQ0M7SUFDcEMsSUFBSTtRQUNGLE1BQU1DLFlBQVlqQixvQkFBb0JrQixLQUFLLENBQUNGO1FBQzVDLE9BQU9DO0lBQ1QsRUFBRSxPQUFNRSxPQUFPO1FBQ2IsSUFBR0EsaUJBQWlCMUIsRUFBRTJCLFFBQVEsRUFBRTtZQUM5QixNQUFNQyxjQUFjRixNQUFNRyxNQUFNLENBQUNDLEdBQUcsQ0FBQyxDQUFDQyxJQUFNLEdBQUdBLEVBQUVDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFRixFQUFFM0IsT0FBTyxFQUFFLEVBQUU2QixJQUFJLENBQUM7WUFDdEYsTUFBTSxJQUFJL0Isc0JBQXNCLENBQUMsNEJBQTRCLEVBQUUwQixhQUFhO1FBQzlFO1FBQ0EsTUFBTUY7SUFDUjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1RLHVCQUF1QixDQUFDWCxNQUFvQ0EsSUFBSTtBQUU3RSxPQUFPLE1BQU1ZLGdCQUFnQixDQUFDWjtJQUM1QixJQUFJO1FBQ0YsT0FBT2EsOEJBQThCYjtJQUN2QyxFQUFFLE9BQU1HLE9BQU87UUFDYixJQUFHQSxpQkFBaUJ4Qix1QkFBdUI7WUFDekMsTUFBTXdCO1FBQ1I7UUFDQSxNQUFNLElBQUl4QixzQkFBc0IsQ0FBQyx5QkFBeUIsRUFBRXdCLGlCQUFpQnZCLFFBQVF1QixNQUFNdEIsT0FBTyxHQUFHLGlCQUFpQjtJQUN4SDtBQUNGLEVBQUU7QUFFRixNQUFNZ0MsZ0NBQWdDLENBQUNiO0lBQ3JDLE1BQU0sRUFDSlgsR0FBRyxFQUNIQyxJQUFJLEVBQ0pJLEtBQUssRUFDTEUsRUFBRSxFQUNGQyxRQUFRLEVBQ1QsR0FBR0c7SUFFSixPQUFPdEIsZ0JBQWdCO1FBQ3JCLEdBQUdzQixHQUFHO1FBQ04sR0FBSVgsT0FBTztZQUFDQSxLQUFLZCxjQUFjYztRQUFJLENBQUM7UUFDcEMsR0FBSUMsUUFBUTtZQUFDQSxNQUFNZCxRQUFRYztRQUFLLENBQUM7UUFDakMsR0FBSUksVUFBVW9CLGFBQWE7WUFBQ3BCLE9BQU9wQixTQUFTb0IsT0FBTztRQUFHLENBQUM7UUFDdkQsR0FBSSxBQUFDTCxDQUFBQSxPQUFPTyxFQUFDLEtBQU07WUFBQ0EsSUFBSXJCLGNBQWNjLE9BQU9PO1FBQUcsQ0FBQztRQUNqRCxHQUFJQyxhQUFhaUIsYUFBYTtZQUFDakIsVUFBVXZCLFNBQVN1QixVQUFVO1FBQUcsQ0FBQztJQUNsRTtBQUNGIn0=
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWRhcHRlcnMvYXJhbmdvQWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3BhcnNlTnVtfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9udW1iZXJzJztcbmltcG9ydCB7cGFyc2VBcmFuZ29JZCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7RG9jdW1lbnRUeXBlfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQge3JlbW92ZUVtcHR5S2V5c30gZnJvbSAnLi4vdXRpbHMvYWRhcHRlclV0aWxzLmpzJztcblxuZXhwb3J0IGNsYXNzIEFyYW5nb1ZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgZmllbGQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQXJhbmdvVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuXG5jb25zdCBEb2N1bWVudElucHV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBfZnJvbTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX2tleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfb2xkUmV2OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9yZXY6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX3RvOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGFkZGVkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG1vZGlmaWVkOiB6Lm51bWJlcigpLm9wdGlvbmFsKClcbn0pLnBhc3N0aHJvdWdoKCk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZURvY3VtZW50SW5wdXQgPSAoZG9jOiB1bmtub3duKTogRG9jdW1lbnRUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBEb2N1bWVudElucHV0U2NoZW1hLnBhcnNlKGRvYyk7XG4gICAgcmV0dXJuIHZhbGlkYXRlZCBhcyBEb2N1bWVudFR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0gZXJyb3IuaXNzdWVzLm1hcCgoZSkgPT4gYCR7ZS5wYXRoLmpvaW4oJy4nKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oJywgJyk7XG4gICAgICB0aHJvdyBuZXcgQXJhbmdvVmFsaWRhdGlvbkVycm9yKGBEb2N1bWVudCB2YWxpZGF0aW9uIGZhaWxlZDogJHtmaWVsZEVycm9yc31gKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXREb2N1bWVudE91dHB1dCA9IChkb2M6IERvY3VtZW50VHlwZSk6IERvY3VtZW50VHlwZSA9PiBkb2M7XG5cbmV4cG9ydCBjb25zdCBwYXJzZURvY3VtZW50ID0gKGRvYzogRG9jdW1lbnRUeXBlKTogRG9jdW1lbnRUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcGVyZm9ybURvY3VtZW50VHJhbnNmb3JtYXRpb24oZG9jKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2YgQXJhbmdvVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEFyYW5nb1ZhbGlkYXRpb25FcnJvcihgRG9jdW1lbnQgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cbn07XG5cbmNvbnN0IHBlcmZvcm1Eb2N1bWVudFRyYW5zZm9ybWF0aW9uID0gKGRvYzogRG9jdW1lbnRUeXBlKTogRG9jdW1lbnRUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIF9pZCxcbiAgICBfa2V5LFxuICAgIGFkZGVkLFxuICAgIGlkLFxuICAgIG1vZGlmaWVkXG4gIH0gPSBkb2M7XG5cbiAgcmV0dXJuIHJlbW92ZUVtcHR5S2V5cyh7XG4gICAgLi4uZG9jLFxuICAgIC4uLihfaWQgJiYge19pZDogcGFyc2VBcmFuZ29JZChfaWQpfSksXG4gICAgLi4uKF9rZXkgJiYge19rZXk6IHBhcnNlSWQoX2tleSl9KSxcbiAgICAuLi4oYWRkZWQgIT09IHVuZGVmaW5lZCAmJiB7YWRkZWQ6IHBhcnNlTnVtKGFkZGVkLCAxMyl9KSxcbiAgICAuLi4oKF9pZCB8fCBpZCkgJiYge2lkOiBwYXJzZUFyYW5nb0lkKF9pZCB8fCBpZCl9KSxcbiAgICAuLi4obW9kaWZpZWQgIT09IHVuZGVmaW5lZCAmJiB7bW9kaWZpZWQ6IHBhcnNlTnVtKG1vZGlmaWVkLCAxMyl9KVxuICB9KTtcbn07XG4iXSwibmFtZXMiOlsicGFyc2VOdW0iLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VJZCIsInoiLCJyZW1vdmVFbXB0eUtleXMiLCJBcmFuZ29WYWxpZGF0aW9uRXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJmaWVsZCIsIm5hbWUiLCJEb2N1bWVudElucHV0U2NoZW1hIiwib2JqZWN0IiwiX2Zyb20iLCJzdHJpbmciLCJvcHRpb25hbCIsIl9pZCIsIl9rZXkiLCJfb2xkUmV2IiwiX3JldiIsIl90byIsImFkZGVkIiwibnVtYmVyIiwiaWQiLCJtb2RpZmllZCIsInBhc3N0aHJvdWdoIiwidmFsaWRhdGVEb2N1bWVudElucHV0IiwiZG9jIiwidmFsaWRhdGVkIiwicGFyc2UiLCJlcnJvciIsIlpvZEVycm9yIiwiZmllbGRFcnJvcnMiLCJpc3N1ZXMiLCJtYXAiLCJlIiwicGF0aCIsImpvaW4iLCJmb3JtYXREb2N1bWVudE91dHB1dCIsInBhcnNlRG9jdW1lbnQiLCJwZXJmb3JtRG9jdW1lbnRUcmFuc2Zvcm1hdGlvbiIsInVuZGVmaW5lZCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsUUFBUSxRQUFPLCtCQUErQjtBQUN0RCxTQUFRQyxhQUFhLEVBQUVDLE9BQU8sUUFBTywrQkFBK0I7QUFDcEUsU0FBUUMsQ0FBQyxRQUFPLE1BQU07QUFHdEIsU0FBUUMsZUFBZSxRQUFPLDJCQUEyQjtBQUV6RCxPQUFPLE1BQU1DLDhCQUE4QkM7O0lBQ3pDLFlBQVlDLE9BQWUsRUFBRSxBQUFPQyxLQUFjLENBQUU7UUFDbEQsS0FBSyxDQUFDRCxlQUQ0QkMsUUFBQUE7UUFFbEMsSUFBSSxDQUFDQyxJQUFJLEdBQUc7SUFDZDtBQUNGO0FBRUEsTUFBTUMsc0JBQXNCUCxFQUFFUSxNQUFNLENBQUM7SUFDbkNDLE9BQU9ULEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUMxQkMsS0FBS1osRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3hCRSxNQUFNYixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDekJHLFNBQVNkLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUM1QkksTUFBTWYsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3pCSyxLQUFLaEIsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3hCTSxPQUFPakIsRUFBRWtCLE1BQU0sR0FBR1AsUUFBUTtJQUMxQlEsSUFBSW5CLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN2QlMsVUFBVXBCLEVBQUVrQixNQUFNLEdBQUdQLFFBQVE7QUFDL0IsR0FBR1UsV0FBVztBQUVkLE9BQU8sTUFBTUMsd0JBQXdCLENBQUNDO0lBQ3BDLElBQUk7UUFDRixNQUFNQyxZQUFZakIsb0JBQW9Ca0IsS0FBSyxDQUFDRjtRQUM1QyxPQUFPQztJQUNULEVBQUUsT0FBTUUsT0FBTztRQUNiLElBQUdBLGlCQUFpQjFCLEVBQUUyQixRQUFRLEVBQUU7WUFDOUIsTUFBTUMsY0FBY0YsTUFBTUcsTUFBTSxDQUFDQyxHQUFHLENBQUMsQ0FBQ0MsSUFBTSxHQUFHQSxFQUFFQyxJQUFJLENBQUNDLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFBRUYsRUFBRTNCLE9BQU8sRUFBRSxFQUFFNkIsSUFBSSxDQUFDO1lBQ3RGLE1BQU0sSUFBSS9CLHNCQUFzQixDQUFDLDRCQUE0QixFQUFFMEIsYUFBYTtRQUM5RTtRQUNBLE1BQU1GO0lBQ1I7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNUSx1QkFBdUIsQ0FBQ1gsTUFBb0NBLElBQUk7QUFFN0UsT0FBTyxNQUFNWSxnQkFBZ0IsQ0FBQ1o7SUFDNUIsSUFBSTtRQUNGLE9BQU9hLDhCQUE4QmI7SUFDdkMsRUFBRSxPQUFNRyxPQUFPO1FBQ2IsSUFBR0EsaUJBQWlCeEIsdUJBQXVCO1lBQ3pDLE1BQU13QjtRQUNSO1FBQ0EsTUFBTSxJQUFJeEIsc0JBQXNCLENBQUMseUJBQXlCLEVBQUV3QixpQkFBaUJ2QixRQUFRdUIsTUFBTXRCLE9BQU8sR0FBRyxpQkFBaUI7SUFDeEg7QUFDRixFQUFFO0FBRUYsTUFBTWdDLGdDQUFnQyxDQUFDYjtJQUNyQyxNQUFNLEVBQ0pYLEdBQUcsRUFDSEMsSUFBSSxFQUNKSSxLQUFLLEVBQ0xFLEVBQUUsRUFDRkMsUUFBUSxFQUNULEdBQUdHO0lBRUosT0FBT3RCLGdCQUFnQjtRQUNyQixHQUFHc0IsR0FBRztRQUNOLEdBQUlYLE9BQU87WUFBQ0EsS0FBS2QsY0FBY2M7UUFBSSxDQUFDO1FBQ3BDLEdBQUlDLFFBQVE7WUFBQ0EsTUFBTWQsUUFBUWM7UUFBSyxDQUFDO1FBQ2pDLEdBQUlJLFVBQVVvQixhQUFhO1lBQUNwQixPQUFPcEIsU0FBU29CLE9BQU87UUFBRyxDQUFDO1FBQ3ZELEdBQUksQUFBQ0wsQ0FBQUEsT0FBT08sRUFBQyxLQUFNO1lBQUNBLElBQUlyQixjQUFjYyxPQUFPTztRQUFHLENBQUM7UUFDakQsR0FBSUMsYUFBYWlCLGFBQWE7WUFBQ2pCLFVBQVV2QixTQUFTdUIsVUFBVTtRQUFHLENBQUM7SUFDbEU7QUFDRiJ9
@@ -97,4 +97,4 @@ const performContentTransformation = (content)=>{
97
97
  };
98
98
  export const parseContentFromDb = (content)=>performContentTransformation(content);
99
99
 
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hZGFwdGVycy9jb250ZW50QWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtwYXJzZUFyYW5nb0lkLCBwYXJzZUlkLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7Q29udGVudElucHV0VHlwZSwgQ29udGVudFR5cGV9IGZyb20gJy4uL3R5cGVzL2NvbnRlbnQudHlwZXMuanMnO1xuaW1wb3J0IHtyZW1vdmVFbXB0eUtleXN9IGZyb20gJy4uL3V0aWxzL2FkYXB0ZXJVdGlscy5qcyc7XG5pbXBvcnQge3BhcnNlRG9jdW1lbnR9IGZyb20gJy4vYXJhbmdvQWRhcHRlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBDb250ZW50VmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBmaWVsZD86IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdDb250ZW50VmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuXG5jb25zdCBTVVBQT1JURURfQ09OVEVOVF9MT0NBTEVTID0gWydlbicsICdlcycsICdmcicsICdkZScsICdwdCcsICdpdCddIGFzIGNvbnN0O1xuXG5jb25zdCBjb250ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBjb250ZW50SWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAga2V5OiB6LnN0cmluZygpLm1pbigxLCAnS2V5IGlzIHJlcXVpcmVkJykubWF4KDIwMCwgJ0tleSBtdXN0IGJlIGxlc3MgdGhhbiAyMDAgY2hhcmFjdGVycycpLFxuICBsb2NhbGU6IHouZW51bShTVVBQT1JURURfQ09OVEVOVF9MT0NBTEVTLCB7XG4gICAgbWVzc2FnZTogJ0xvY2FsZSBtdXN0IGJlIG9uZSBvZjogZW4sIGVzLCBmciwgZGUsIHB0LCBpdCdcbiAgfSksXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCkubWluKDEsICdDb250ZW50IGlzIHJlcXVpcmVkJykubWF4KDEwMDAwLCAnQ29udGVudCBtdXN0IGJlIGxlc3MgdGhhbiAxMDAwMCBjaGFyYWN0ZXJzJyksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm1heCg1MDAsICdEZXNjcmlwdGlvbiBtdXN0IGJlIGxlc3MgdGhhbiA1MDAgY2hhcmFjdGVycycpLm9wdGlvbmFsKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm1heCgxMDAsICdDYXRlZ29yeSBtdXN0IGJlIGxlc3MgdGhhbiAxMDAgY2hhcmFjdGVycycpLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VySWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5cbmNvbnN0IGNvbnRlbnRJbnB1dFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29udGVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleTogei5zdHJpbmcoKS5taW4oMSwgJ0tleSBpcyByZXF1aXJlZCcpLm1heCgyMDAsICdLZXkgbXVzdCBiZSBsZXNzIHRoYW4gMjAwIGNoYXJhY3RlcnMnKSxcbiAgbG9jYWxlOiB6LmVudW0oU1VQUE9SVEVEX0NPTlRFTlRfTE9DQUxFUywge1xuICAgIG1lc3NhZ2U6ICdMb2NhbGUgbXVzdCBiZSBvbmUgb2Y6IGVuLCBlcywgZnIsIGRlLCBwdCwgaXQnXG4gIH0pLm9wdGlvbmFsKCksXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCkubWluKDEsICdDb250ZW50IGlzIHJlcXVpcmVkJykubWF4KDEwMDAwLCAnQ29udGVudCBtdXN0IGJlIGxlc3MgdGhhbiAxMDAwMCBjaGFyYWN0ZXJzJyksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm1heCg1MDAsICdEZXNjcmlwdGlvbiBtdXN0IGJlIGxlc3MgdGhhbiA1MDAgY2hhcmFjdGVycycpLm9wdGlvbmFsKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm1heCgxMDAsICdDYXRlZ29yeSBtdXN0IGJlIGxlc3MgdGhhbiAxMDAgY2hhcmFjdGVycycpLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpXG59KTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudCA9IChjb250ZW50OiBDb250ZW50VHlwZSk6IENvbnRlbnRUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gY29udGVudFNjaGVtYS5wYXJzZShjb250ZW50KSBhcyBDb250ZW50VHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGQgPSBlcnJvci5pc3N1ZXNbMF0/LnBhdGguam9pbignLicpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmlzc3Vlc1swXT8ubWVzc2FnZSB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSwgZmllbGQpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudElucHV0ID0gKGNvbnRlbnQ6IENvbnRlbnRJbnB1dFR5cGUpOiBDb250ZW50SW5wdXRUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gY29udGVudElucHV0U2NoZW1hLnBhcnNlKGNvbnRlbnQpIGFzIENvbnRlbnRJbnB1dFR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZXJyb3IuaXNzdWVzWzBdPy5wYXRoLmpvaW4oJy4nKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5pc3N1ZXNbMF0/Lm1lc3NhZ2UgfHwgJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgIHRocm93IG5ldyBDb250ZW50VmFsaWRhdGlvbkVycm9yKG1lc3NhZ2UsIGZpZWxkKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IHBlcmZvcm1Db250ZW50VHJhbnNmb3JtYXRpb24gPSAoY29udGVudDogQ29udGVudFR5cGUpOiBDb250ZW50VHlwZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBfaWQsXG4gICAgX2tleSxcbiAgICBjb250ZW50SWQsXG4gICAgaWQsXG4gICAga2V5LFxuICAgIGxvY2FsZSxcbiAgICBjb250ZW50OiBjb250ZW50VGV4dCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBjYXRlZ29yeSxcbiAgICBpc0FjdGl2ZSxcbiAgICB1c2VySWRcbiAgfSA9IGNvbnRlbnQ7XG5cbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB7XG4gICAgLi4ucGFyc2VEb2N1bWVudChjb250ZW50KSxcbiAgICAuLi4oKF9rZXkgfHwgY29udGVudElkKSAmJiB7Y29udGVudElkOiBwYXJzZUlkKF9rZXkgfHwgY29udGVudElkKX0pLFxuICAgIC4uLigoX2lkIHx8IGlkIHx8IF9rZXkgfHwgY29udGVudElkKSAmJiB7aWQ6IHBhcnNlQXJhbmdvSWQoX2lkIHx8IGlkIHx8IGBjb250ZW50LyR7X2tleSB8fCBjb250ZW50SWR9YCl9KSxcbiAgICBrZXk6IHBhcnNlU3RyaW5nKGtleSwgMjAwKSxcbiAgICBsb2NhbGUsXG4gICAgY29udGVudDogcGFyc2VTdHJpbmcoY29udGVudFRleHQsIDEwMDAwKSxcbiAgICAuLi4oZGVzY3JpcHRpb24gJiYge2Rlc2NyaXB0aW9uOiBwYXJzZVN0cmluZyhkZXNjcmlwdGlvbiwgNTAwKX0pLFxuICAgIC4uLihjYXRlZ29yeSAmJiB7Y2F0ZWdvcnk6IHBhcnNlU3RyaW5nKGNhdGVnb3J5LCAxMDApfSksXG4gICAgLi4uKGlzQWN0aXZlICE9PSB1bmRlZmluZWQgJiYge2lzQWN0aXZlfSksXG4gICAgLi4uKHVzZXJJZCAmJiB7dXNlcklkOiBwYXJzZUlkKHVzZXJJZCl9KVxuICB9O1xuXG4gIHJldHVybiByZW1vdmVFbXB0eUtleXModHJhbnNmb3JtZWQpIGFzIENvbnRlbnRUeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudEZyb21EYiA9IChjb250ZW50OiBDb250ZW50VHlwZSk6IENvbnRlbnRUeXBlID0+IHBlcmZvcm1Db250ZW50VHJhbnNmb3JtYXRpb24oY29udGVudCk7XG4iXSwibmFtZXMiOlsicGFyc2VBcmFuZ29JZCIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsInoiLCJyZW1vdmVFbXB0eUtleXMiLCJwYXJzZURvY3VtZW50IiwiQ29udGVudFZhbGlkYXRpb25FcnJvciIsIkVycm9yIiwibWVzc2FnZSIsImZpZWxkIiwibmFtZSIsIlNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMiLCJjb250ZW50U2NoZW1hIiwib2JqZWN0IiwiY29udGVudElkIiwic3RyaW5nIiwib3B0aW9uYWwiLCJrZXkiLCJtaW4iLCJtYXgiLCJsb2NhbGUiLCJlbnVtIiwiY29udGVudCIsImRlc2NyaXB0aW9uIiwiY2F0ZWdvcnkiLCJpc0FjdGl2ZSIsImJvb2xlYW4iLCJ1c2VySWQiLCJjb250ZW50SW5wdXRTY2hlbWEiLCJwYXJzZUNvbnRlbnQiLCJwYXJzZSIsImVycm9yIiwiWm9kRXJyb3IiLCJpc3N1ZXMiLCJwYXRoIiwiam9pbiIsInBhcnNlQ29udGVudElucHV0IiwicGVyZm9ybUNvbnRlbnRUcmFuc2Zvcm1hdGlvbiIsIl9pZCIsIl9rZXkiLCJpZCIsImNvbnRlbnRUZXh0IiwidHJhbnNmb3Jt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
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWRhcHRlcnMvY29udGVudEFkYXB0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7cGFyc2VBcmFuZ29JZCwgcGFyc2VJZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge0NvbnRlbnRJbnB1dFR5cGUsIENvbnRlbnRUeXBlfSBmcm9tICcuLi90eXBlcy9jb250ZW50LnR5cGVzLmpzJztcbmltcG9ydCB7cmVtb3ZlRW1wdHlLZXlzfSBmcm9tICcuLi91dGlscy9hZGFwdGVyVXRpbHMuanMnO1xuaW1wb3J0IHtwYXJzZURvY3VtZW50fSBmcm9tICcuL2FyYW5nb0FkYXB0ZXIuanMnO1xuXG5leHBvcnQgY2xhc3MgQ29udGVudFZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgZmllbGQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnQ29udGVudFZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuY29uc3QgU1VQUE9SVEVEX0NPTlRFTlRfTE9DQUxFUyA9IFsnZW4nLCAnZXMnLCAnZnInLCAnZGUnLCAncHQnLCAnaXQnXSBhcyBjb25zdDtcblxuY29uc3QgY29udGVudFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29udGVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleTogei5zdHJpbmcoKS5taW4oMSwgJ0tleSBpcyByZXF1aXJlZCcpLm1heCgyMDAsICdLZXkgbXVzdCBiZSBsZXNzIHRoYW4gMjAwIGNoYXJhY3RlcnMnKSxcbiAgbG9jYWxlOiB6LmVudW0oU1VQUE9SVEVEX0NPTlRFTlRfTE9DQUxFUywge1xuICAgIG1lc3NhZ2U6ICdMb2NhbGUgbXVzdCBiZSBvbmUgb2Y6IGVuLCBlcywgZnIsIGRlLCBwdCwgaXQnXG4gIH0pLFxuICBjb250ZW50OiB6LnN0cmluZygpLm1pbigxLCAnQ29udGVudCBpcyByZXF1aXJlZCcpLm1heCgxMDAwMCwgJ0NvbnRlbnQgbXVzdCBiZSBsZXNzIHRoYW4gMTAwMDAgY2hhcmFjdGVycycpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5tYXgoNTAwLCAnRGVzY3JpcHRpb24gbXVzdCBiZSBsZXNzIHRoYW4gNTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5tYXgoMTAwLCAnQ2F0ZWdvcnkgbXVzdCBiZSBsZXNzIHRoYW4gMTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBpc0FjdGl2ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlcklkOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuXG5jb25zdCBjb250ZW50SW5wdXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbnRlbnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXk6IHouc3RyaW5nKCkubWluKDEsICdLZXkgaXMgcmVxdWlyZWQnKS5tYXgoMjAwLCAnS2V5IG11c3QgYmUgbGVzcyB0aGFuIDIwMCBjaGFyYWN0ZXJzJyksXG4gIGxvY2FsZTogei5lbnVtKFNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMsIHtcbiAgICBtZXNzYWdlOiAnTG9jYWxlIG11c3QgYmUgb25lIG9mOiBlbiwgZXMsIGZyLCBkZSwgcHQsIGl0J1xuICB9KS5vcHRpb25hbCgpLFxuICBjb250ZW50OiB6LnN0cmluZygpLm1pbigxLCAnQ29udGVudCBpcyByZXF1aXJlZCcpLm1heCgxMDAwMCwgJ0NvbnRlbnQgbXVzdCBiZSBsZXNzIHRoYW4gMTAwMDAgY2hhcmFjdGVycycpLFxuICBkZXNjcmlwdGlvbjogei5zdHJpbmcoKS5tYXgoNTAwLCAnRGVzY3JpcHRpb24gbXVzdCBiZSBsZXNzIHRoYW4gNTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBjYXRlZ29yeTogei5zdHJpbmcoKS5tYXgoMTAwLCAnQ2F0ZWdvcnkgbXVzdCBiZSBsZXNzIHRoYW4gMTAwIGNoYXJhY3RlcnMnKS5vcHRpb25hbCgpLFxuICBpc0FjdGl2ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnRlbnQgPSAoY29udGVudDogQ29udGVudFR5cGUpOiBDb250ZW50VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbnRlbnRTY2hlbWEucGFyc2UoY29udGVudCkgYXMgQ29udGVudFR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZXJyb3IuaXNzdWVzWzBdPy5wYXRoLmpvaW4oJy4nKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5pc3N1ZXNbMF0/Lm1lc3NhZ2UgfHwgJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgIHRocm93IG5ldyBDb250ZW50VmFsaWRhdGlvbkVycm9yKG1lc3NhZ2UsIGZpZWxkKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnRlbnRJbnB1dCA9IChjb250ZW50OiBDb250ZW50SW5wdXRUeXBlKTogQ29udGVudElucHV0VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNvbnRlbnRJbnB1dFNjaGVtYS5wYXJzZShjb250ZW50KSBhcyBDb250ZW50SW5wdXRUeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGVycm9yLmlzc3Vlc1swXT8ucGF0aC5qb2luKCcuJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IuaXNzdWVzWzBdPy5tZXNzYWdlIHx8ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudFZhbGlkYXRpb25FcnJvcihtZXNzYWdlLCBmaWVsZCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5jb25zdCBwZXJmb3JtQ29udGVudFRyYW5zZm9ybWF0aW9uID0gKGNvbnRlbnQ6IENvbnRlbnRUeXBlKTogQ29udGVudFR5cGUgPT4ge1xuICBjb25zdCB7XG4gICAgX2lkLFxuICAgIF9rZXksXG4gICAgY29udGVudElkLFxuICAgIGlkLFxuICAgIGtleSxcbiAgICBsb2NhbGUsXG4gICAgY29udGVudDogY29udGVudFRleHQsXG4gICAgZGVzY3JpcHRpb24sXG4gICAgY2F0ZWdvcnksXG4gICAgaXNBY3RpdmUsXG4gICAgdXNlcklkXG4gIH0gPSBjb250ZW50O1xuXG4gIGNvbnN0IHRyYW5zZm9ybWVkID0ge1xuICAgIC4uLnBhcnNlRG9jdW1lbnQoY29udGVudCksXG4gICAgLi4uKChfa2V5IHx8IGNvbnRlbnRJZCkgJiYge2NvbnRlbnRJZDogcGFyc2VJZChfa2V5IHx8IGNvbnRlbnRJZCl9KSxcbiAgICAuLi4oKF9pZCB8fCBpZCB8fCBfa2V5IHx8IGNvbnRlbnRJZCkgJiYge2lkOiBwYXJzZUFyYW5nb0lkKF9pZCB8fCBpZCB8fCBgY29udGVudC8ke19rZXkgfHwgY29udGVudElkfWApfSksXG4gICAga2V5OiBwYXJzZVN0cmluZyhrZXksIDIwMCksXG4gICAgbG9jYWxlLFxuICAgIGNvbnRlbnQ6IHBhcnNlU3RyaW5nKGNvbnRlbnRUZXh0LCAxMDAwMCksXG4gICAgLi4uKGRlc2NyaXB0aW9uICYmIHtkZXNjcmlwdGlvbjogcGFyc2VTdHJpbmcoZGVzY3JpcHRpb24sIDUwMCl9KSxcbiAgICAuLi4oY2F0ZWdvcnkgJiYge2NhdGVnb3J5OiBwYXJzZVN0cmluZyhjYXRlZ29yeSwgMTAwKX0pLFxuICAgIC4uLihpc0FjdGl2ZSAhPT0gdW5kZWZpbmVkICYmIHtpc0FjdGl2ZX0pLFxuICAgIC4uLih1c2VySWQgJiYge3VzZXJJZDogcGFyc2VJZCh1c2VySWQpfSlcbiAgfTtcblxuICByZXR1cm4gcmVtb3ZlRW1wdHlLZXlzKHRyYW5zZm9ybWVkKSBhcyBDb250ZW50VHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnRlbnRGcm9tRGIgPSAoY29udGVudDogQ29udGVudFR5cGUpOiBDb250ZW50VHlwZSA9PiBwZXJmb3JtQ29udGVudFRyYW5zZm9ybWF0aW9uKGNvbnRlbnQpO1xuIl0sIm5hbWVzIjpbInBhcnNlQXJhbmdvSWQiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJ6IiwicmVtb3ZlRW1wdHlLZXlzIiwicGFyc2VEb2N1bWVudCIsIkNvbnRlbnRWYWxpZGF0aW9uRXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJmaWVsZCIsIm5hbWUiLCJTVVBQT1JURURfQ09OVEVOVF9MT0NBTEVTIiwiY29udGVudFNjaGVtYSIsIm9iamVjdCIsImNvbnRlbnRJZCIsInN0cmluZyIsIm9wdGlvbmFsIiwia2V5IiwibWluIiwibWF4IiwibG9jYWxlIiwiZW51bSIsImNvbnRlbnQiLCJkZXNjcmlwdGlvbiIsImNhdGVnb3J5IiwiaXNBY3RpdmUiLCJib29sZWFuIiwidXNlcklkIiwiY29udGVudElucHV0U2NoZW1hIiwicGFyc2VDb250ZW50IiwicGFyc2UiLCJlcnJvciIsIlpvZEVycm9yIiwiaXNzdWVzIiwicGF0aCIsImpvaW4iLCJwYXJzZUNvbnRlbnRJbnB1dCIsInBlcmZvcm1Db250ZW50VHJhbnNmb3JtYXRpb24iLCJfaWQiLCJfa2V5IiwiaWQiLCJjb250ZW50VGV4dCIsInRyYW5zZm9y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