@nlabs/reaktor 1.6.3 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/LICENSE +74 -201
  2. package/README.md +48 -16
  3. package/lib/actions/analytics.d.ts +10 -0
  4. package/lib/actions/analytics.js +539 -0
  5. package/lib/actions/apps.js +2 -2
  6. package/lib/actions/connections.js +1 -1
  7. package/lib/actions/content.js +2 -2
  8. package/lib/actions/conversations.js +2 -2
  9. package/lib/actions/crm.d.ts +11 -1
  10. package/lib/actions/crm.js +443 -13
  11. package/lib/actions/crud.js +2 -2
  12. package/lib/actions/dynamodb.d.ts +1 -1
  13. package/lib/actions/dynamodb.js +2 -2
  14. package/lib/actions/email.d.ts +1 -1
  15. package/lib/actions/email.js +2 -2
  16. package/lib/actions/files.js +2 -2
  17. package/lib/actions/flags.d.ts +6 -0
  18. package/lib/actions/flags.js +147 -0
  19. package/lib/actions/groups.js +2 -2
  20. package/lib/actions/images.d.ts +1 -1
  21. package/lib/actions/images.js +2 -2
  22. package/lib/actions/index.d.ts +3 -2
  23. package/lib/actions/index.js +4 -3
  24. package/lib/actions/ios.js +1 -1
  25. package/lib/actions/locations.js +2 -2
  26. package/lib/actions/messages.js +2 -2
  27. package/lib/actions/notifications.d.ts +1 -1
  28. package/lib/actions/notifications.js +2 -2
  29. package/lib/actions/payments.d.ts +3 -3
  30. package/lib/actions/payments.js +144 -189
  31. package/lib/actions/personas.js +1 -1
  32. package/lib/actions/posts.d.ts +0 -4
  33. package/lib/actions/posts.js +2 -4
  34. package/lib/actions/query.js +2 -2
  35. package/lib/actions/reactions.js +2 -2
  36. package/lib/actions/rum.js +148 -45
  37. package/lib/actions/s3.d.ts +1 -1
  38. package/lib/actions/s3.js +2 -2
  39. package/lib/actions/search.js +2 -2
  40. package/lib/actions/sms.js +2 -2
  41. package/lib/actions/statistics.js +2 -2
  42. package/lib/actions/subscriptions.js +2 -2
  43. package/lib/actions/tags.js +2 -2
  44. package/lib/actions/users.d.ts +4 -1
  45. package/lib/actions/users.js +85 -11
  46. package/lib/actions/videos.js +2 -2
  47. package/lib/adapters/arangoAdapter.js +1 -1
  48. package/lib/adapters/contentAdapter.js +2 -2
  49. package/lib/adapters/fileAdapter.js +1 -1
  50. package/lib/adapters/imageAdapter.js +1 -1
  51. package/lib/adapters/index.js +1 -1
  52. package/lib/adapters/messageAdapter.js +1 -1
  53. package/lib/adapters/postAdapter.js +1 -1
  54. package/lib/adapters/reaktorAdapter.js +1 -1
  55. package/lib/adapters/tagAdapter.d.ts +0 -1
  56. package/lib/adapters/tagAdapter.js +1 -2
  57. package/lib/adapters/userAdapter.d.ts +0 -1
  58. package/lib/adapters/userAdapter.js +1 -2
  59. package/lib/config.js +8 -2
  60. package/lib/constants/collections.d.ts +17 -1
  61. package/lib/constants/collections.js +18 -2
  62. package/lib/handlers/graphqlHandler.d.ts +2 -2
  63. package/lib/handlers/graphqlHandler.js +2 -19
  64. package/lib/index.d.ts +4 -2
  65. package/lib/index.js +4 -3
  66. package/lib/lambdas/actions/websockets.js +2 -2
  67. package/lib/lambdas/authorizer.js +2 -2
  68. package/lib/lambdas/connection.js +2 -2
  69. package/lib/lambdas/utils/message.js +2 -2
  70. package/lib/lambdas/utils/websocket.d.ts +1 -1
  71. package/lib/lambdas/utils/websocket.js +2 -2
  72. package/lib/mocks/conversation.js +1 -1
  73. package/lib/mocks/file.js +1 -1
  74. package/lib/mocks/group.js +1 -1
  75. package/lib/mocks/image.js +1 -1
  76. package/lib/mocks/post.js +1 -1
  77. package/lib/mocks/tag.js +1 -1
  78. package/lib/mocks/user.js +1 -1
  79. package/lib/mocks/video.js +1 -1
  80. package/lib/mutations/analytics/analytics.d.ts +1 -0
  81. package/lib/mutations/analytics/analytics.js +35 -0
  82. package/lib/mutations/content/content.js +2 -2
  83. package/lib/mutations/crm/crm.js +57 -11
  84. package/lib/mutations/events/events.js +2 -2
  85. package/lib/mutations/flags/flags.d.ts +1 -0
  86. package/lib/mutations/flags/flags.js +33 -0
  87. package/lib/mutations/groups/groups.js +2 -2
  88. package/lib/mutations/images/images.js +2 -2
  89. package/lib/mutations/index.d.ts +3 -1
  90. package/lib/mutations/index.js +13 -3
  91. package/lib/mutations/locations/locations.js +2 -2
  92. package/lib/mutations/messages/messages.js +2 -2
  93. package/lib/mutations/personas/personas.js +2 -2
  94. package/lib/mutations/posts/posts.js +2 -2
  95. package/lib/mutations/reactions/reactions.js +2 -2
  96. package/lib/mutations/rum/rum.js +2 -2
  97. package/lib/mutations/statistics/statistics.js +2 -2
  98. package/lib/mutations/subscriptions/subscriptions.js +2 -2
  99. package/lib/mutations/tags/tags.js +2 -2
  100. package/lib/mutations/users/users.js +30 -17
  101. package/lib/mutations/videos/videos.js +2 -2
  102. package/lib/objectTypes/analytics.d.ts +8 -0
  103. package/lib/objectTypes/analytics.js +147 -0
  104. package/lib/objectTypes/app.js +2 -2
  105. package/lib/objectTypes/bankAccount.js +2 -2
  106. package/lib/objectTypes/connection.js +2 -2
  107. package/lib/objectTypes/content.js +2 -2
  108. package/lib/objectTypes/conversation.js +2 -2
  109. package/lib/objectTypes/creditCard.js +2 -2
  110. package/lib/objectTypes/crm.d.ts +5 -0
  111. package/lib/objectTypes/crm.js +68 -2
  112. package/lib/objectTypes/document.js +1 -1
  113. package/lib/objectTypes/error.js +2 -2
  114. package/lib/objectTypes/event.js +2 -2
  115. package/lib/objectTypes/external.js +2 -2
  116. package/lib/objectTypes/file.js +2 -2
  117. package/lib/objectTypes/filter.js +2 -2
  118. package/lib/objectTypes/flag.d.ts +1 -0
  119. package/lib/objectTypes/flag.js +35 -0
  120. package/lib/objectTypes/group.js +2 -2
  121. package/lib/objectTypes/iapSubscription.js +2 -2
  122. package/lib/objectTypes/image.d.ts +1 -1
  123. package/lib/objectTypes/image.js +2 -2
  124. package/lib/objectTypes/index.d.ts +2 -0
  125. package/lib/objectTypes/index.js +3 -1
  126. package/lib/objectTypes/location.js +2 -2
  127. package/lib/objectTypes/message.js +2 -2
  128. package/lib/objectTypes/passcode.js +2 -2
  129. package/lib/objectTypes/persona.js +2 -2
  130. package/lib/objectTypes/plan.js +2 -2
  131. package/lib/objectTypes/post.js +2 -2
  132. package/lib/objectTypes/query.js +2 -2
  133. package/lib/objectTypes/reaction.js +2 -2
  134. package/lib/objectTypes/relation.js +2 -2
  135. package/lib/objectTypes/rum.js +4 -4
  136. package/lib/objectTypes/search.js +2 -2
  137. package/lib/objectTypes/statistics.js +2 -2
  138. package/lib/objectTypes/subscription.js +2 -2
  139. package/lib/objectTypes/tag.js +2 -2
  140. package/lib/objectTypes/user.js +10 -2
  141. package/lib/objectTypes/video.d.ts +1 -1
  142. package/lib/objectTypes/video.js +2 -2
  143. package/lib/queries/analytics/analytics.d.ts +1 -0
  144. package/lib/queries/analytics/analytics.js +41 -0
  145. package/lib/queries/content/content.js +2 -2
  146. package/lib/queries/crm/crm.js +52 -13
  147. package/lib/queries/events/events.js +2 -2
  148. package/lib/queries/flags/flags.d.ts +1 -0
  149. package/lib/queries/flags/flags.js +16 -0
  150. package/lib/queries/groups/groups.js +2 -2
  151. package/lib/queries/images/images.js +2 -2
  152. package/lib/queries/index.d.ts +3 -1
  153. package/lib/queries/index.js +13 -3
  154. package/lib/queries/locations/locations.js +2 -2
  155. package/lib/queries/messages/messages.js +1 -1
  156. package/lib/queries/personas/personas.js +2 -2
  157. package/lib/queries/posts/posts.js +2 -2
  158. package/lib/queries/query/query.js +2 -2
  159. package/lib/queries/reactions/reactions.js +2 -2
  160. package/lib/queries/statistics/statistics.js +2 -2
  161. package/lib/queries/subscriptions/subscriptions.js +1 -1
  162. package/lib/queries/tags/tags.js +2 -2
  163. package/lib/queries/users/users.js +2 -2
  164. package/lib/queries/videos/videos.js +2 -2
  165. package/lib/templates/email/layout.js +1 -1
  166. package/lib/templates/email/passwordForgot.js +1 -1
  167. package/lib/templates/email/passwordRecovery.js +1 -1
  168. package/lib/templates/email/verifyEmail.js +1 -1
  169. package/lib/templates/email/welcome.js +1 -1
  170. package/lib/templates/sms/passwordForgot.js +1 -1
  171. package/lib/templates/sms/passwordRecovery.js +1 -1
  172. package/lib/templates/sms/verifyEmail.js +1 -1
  173. package/lib/templates/sms/verifyPhone.js +1 -1
  174. package/lib/templates/sms/welcome.js +1 -1
  175. package/lib/types/analytics.types.d.ts +92 -0
  176. package/lib/types/analytics.types.js +6 -0
  177. package/lib/types/apps.types.d.ts +1 -1
  178. package/lib/types/apps.types.js +2 -2
  179. package/lib/types/arangodb.types.d.ts +2 -2
  180. package/lib/types/arangodb.types.js +2 -2
  181. package/lib/types/auth.types.d.ts +4 -1
  182. package/lib/types/auth.types.js +2 -2
  183. package/lib/types/connections.types.d.ts +1 -1
  184. package/lib/types/connections.types.js +2 -2
  185. package/lib/types/content.types.d.ts +1 -1
  186. package/lib/types/content.types.js +2 -2
  187. package/lib/types/conversations.types.d.ts +1 -1
  188. package/lib/types/conversations.types.js +2 -2
  189. package/lib/types/crm.types.d.ts +58 -2
  190. package/lib/types/crm.types.js +2 -2
  191. package/lib/types/email.types.d.ts +1 -1
  192. package/lib/types/email.types.js +2 -2
  193. package/lib/types/error.types.js +1 -1
  194. package/lib/types/files.types.d.ts +1 -1
  195. package/lib/types/files.types.js +2 -2
  196. package/lib/types/flags.types.d.ts +28 -0
  197. package/lib/types/flags.types.js +3 -0
  198. package/lib/types/google.types.d.ts +1 -1
  199. package/lib/types/google.types.js +2 -2
  200. package/lib/types/groups.types.d.ts +1 -1
  201. package/lib/types/groups.types.js +2 -2
  202. package/lib/types/images.types.d.ts +1 -1
  203. package/lib/types/images.types.js +2 -2
  204. package/lib/types/index.d.ts +3 -1
  205. package/lib/types/index.js +4 -2
  206. package/lib/types/locations.types.d.ts +1 -1
  207. package/lib/types/locations.types.js +2 -2
  208. package/lib/types/messages.types.d.ts +1 -1
  209. package/lib/types/messages.types.js +2 -2
  210. package/lib/types/notifications.types.d.ts +1 -1
  211. package/lib/types/notifications.types.js +2 -2
  212. package/lib/types/payments.types.d.ts +4 -1
  213. package/lib/types/payments.types.js +2 -2
  214. package/lib/types/personas.types.js +1 -1
  215. package/lib/types/posts.types.d.ts +1 -1
  216. package/lib/types/posts.types.js +2 -2
  217. package/lib/types/rum.types.d.ts +3 -3
  218. package/lib/types/rum.types.js +2 -2
  219. package/lib/types/statistics.types.js +1 -1
  220. package/lib/types/tags.types.d.ts +1 -1
  221. package/lib/types/tags.types.js +2 -2
  222. package/lib/types/users.types.d.ts +2 -1
  223. package/lib/types/users.types.js +2 -2
  224. package/lib/types/videos.types.d.ts +1 -1
  225. package/lib/types/videos.types.js +2 -2
  226. package/lib/types/websockets.types.d.ts +1 -1
  227. package/lib/types/websockets.types.js +2 -2
  228. package/lib/upload.js +4 -9
  229. package/lib/utils/adapterUtils.d.ts +1 -1
  230. package/lib/utils/adapterUtils.js +2 -2
  231. package/lib/utils/analyticsUtils.d.ts +1 -1
  232. package/lib/utils/analyticsUtils.js +2 -2
  233. package/lib/utils/appContext.d.ts +2 -0
  234. package/lib/utils/appContext.js +10 -0
  235. package/lib/utils/aqlHelpers.d.ts +1 -1
  236. package/lib/utils/aqlHelpers.js +2 -2
  237. package/lib/utils/arangodbUtils.d.ts +9 -1
  238. package/lib/utils/arangodbUtils.js +10 -2
  239. package/lib/utils/authUtils.js +2 -2
  240. package/lib/utils/awsUtils.js +2 -2
  241. package/lib/utils/collectionRegistry.d.ts +1 -1
  242. package/lib/utils/collectionRegistry.js +17 -2
  243. package/lib/utils/contextUtils.d.ts +2 -2
  244. package/lib/utils/contextUtils.js +2 -2
  245. package/lib/utils/dbI18n.example.d.ts +1 -1
  246. package/lib/utils/dbI18n.example.js +2 -2
  247. package/lib/utils/dbI18n.js +2 -2
  248. package/lib/utils/googleTranslate.d.ts +1 -1
  249. package/lib/utils/googleTranslate.js +2 -2
  250. package/lib/utils/graphqlUtils.d.ts +2 -0
  251. package/lib/utils/graphqlUtils.js +1 -1
  252. package/lib/utils/imageUtils.js +1 -1
  253. package/lib/utils/index.d.ts +1 -1
  254. package/lib/utils/index.js +2 -2
  255. package/lib/utils/languageDetection.js +1 -1
  256. package/lib/utils/localeUtils.d.ts +1 -1
  257. package/lib/utils/localeUtils.example.d.ts +1 -1
  258. package/lib/utils/localeUtils.example.js +2 -2
  259. package/lib/utils/localeUtils.js +2 -2
  260. package/lib/utils/middlewareUtils.js +1 -1
  261. package/lib/utils/queryBuilder.d.ts +1 -1
  262. package/lib/utils/queryBuilder.js +2 -2
  263. package/lib/utils/schemaUtils.js +1 -1
  264. package/lib/utils/sessionUtils.d.ts +4 -0
  265. package/lib/utils/sessionUtils.js +2 -2
  266. package/lib/utils/stripeUtils.d.ts +1 -1
  267. package/lib/utils/stripeUtils.js +2 -2
  268. package/lib/utils/templateUtils.js +1 -1
  269. package/lib/utils/testUtils.js +2 -2
  270. package/lib/utils/translationQueue.d.ts +1 -1
  271. package/lib/utils/translationQueue.example.d.ts +1 -1
  272. package/lib/utils/translationQueue.example.js +2 -2
  273. package/lib/utils/translationQueue.js +2 -2
  274. package/lib/videoProcessing.js +1 -1
  275. package/package.json +49 -86
  276. package/lib/actions/websockets.d.ts +0 -20
  277. package/lib/actions/websockets.js +0 -164
  278. package/lib/mocks/nlabs.png +0 -0
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { CreateJobCommand, DescribeEndpointsCommand, MediaConvertClient } from '@aws-sdk/client-mediaconvert';
5
5
  import { get as httpGet } from '@nlabs/rip-hunter';
6
6
  import { createHash, parseArangoId, parseChar, parseId, parseString } from '@nlabs/utils/parsers/strings';
@@ -1195,4 +1195,4 @@ export const deleteVideo = async (context, videoId)=>{
1195
1195
  }
1196
1196
  };
1197
1197
 
1198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvdmlkZW9zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge1xuICBDcmVhdGVKb2JDb21tYW5kLFxuICBEZXNjcmliZUVuZHBvaW50c0NvbW1hbmQsXG4gIE1lZGlhQ29udmVydENsaWVudFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtbWVkaWFjb252ZXJ0JztcbmltcG9ydCB7RGVsZXRlT2JqZWN0c0NvbW1hbmRJbnB1dCwgUHV0T2JqZWN0Q29tbWFuZElucHV0fSBmcm9tICdAYXdzLXNkay9jbGllbnQtczMnO1xuaW1wb3J0IHtnZXQgYXMgaHR0cEdldH0gZnJvbSAnQG5sYWJzL3JpcC1odW50ZXInO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5LCBsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHtnZXRDb25uZWN0aW9uc0J5VXNlcn0gZnJvbSAnLi4vbGFtYmRhcy9hY3Rpb25zL3dlYnNvY2tldHMuanMnO1xuaW1wb3J0IHt3c0NsaWVudH0gZnJvbSAnLi4vbGFtYmRhcy91dGlscy93ZWJzb2NrZXQuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2J1aWxkUmVhY3Rpb25Db3VudFF1ZXJ5LCBidWlsZFRhZ3NRdWVyeX0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge2dldERvY0lkLCBnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRBd3NDcmVkZW50aWFsc30gZnJvbSAnLi4vdXRpbHMvYXdzVXRpbHMuanMnO1xuaW1wb3J0IHthZGRJdGVtLCBkZWxldGVJdGVtLCBnZXRJdGVtQnksIGdldExpc3RCeSwgdXBkYXRlSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7Z2V0UGVyc29uYVJlbGF0aW9uc2hpcFN0YXRlfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7XG4gIHMzQWJvcnRNdWx0aXBhcnRVcGxvYWQsXG4gIHMzQ29tcGxldGVNdWx0aXBhcnRVcGxvYWQsXG4gIHMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkLFxuICBzM0RlbGV0ZSxcbiAgczNEZWxldGVMaXN0LFxuICBzM0dldEJ1Y2tldCxcbiAgczNHZXRTaWduZWRVcmwsXG4gIHMzR2V0VXBsb2FkUGFydFNpZ25lZFVybCxcbiAgczNQdXRcbn0gZnJvbSAnLi9zMy5qcyc7XG5pbXBvcnQge2hhc1N1YnNjcmlwdGlvblRvSXRlbX0gZnJvbSAnLi9zdWJzY3JpcHRpb25zLmpzJztcblxuaW1wb3J0IHR5cGUge0FyYW5nb0RiQ29sbGVjdGlvbiwgQXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1xuICBWaWRlb0VkZ2VUeXBlLFxuICBWaWRlb011bHRpcGFydFVwbG9hZFR5cGUsXG4gIFZpZGVvT3B0aW9ucyxcbiAgVmlkZW9UeXBlLFxuICBWaWRlb1VwbG9hZFBhcnRJbnB1dCxcbiAgVmlkZW9VcGxvYWRQYXJ0VXJsLFxuICBWaWRlb1VybERhdGFcbn0gZnJvbSAnLi4vdHlwZXMvdmlkZW9zLnR5cGVzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeSA9ICd2aWRlb3MnO1xuY29uc3QgaGFzTWVkaWFDb2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfTUVESUEpO1xuY29uc3QgREVGQVVMVF9WSURFT19VUExPQURfUEFSVF9TSVpFID0gMTAgKiAxMDI0ICogMTAyNDtcbmNvbnN0IFZJREVPX1BMQVlCQUNLX0RJUiA9ICd2aWRlby1wbGF5YmFjayc7XG5cbmxldCBtZWRpYUNvbnZlcnRFbmRwb2ludDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5jb25zdCBnZXRNZWRpYUNvbnZlcnRDbGllbnQgPSAoZW5kcG9pbnQ/OiBzdHJpbmcpOiBNZWRpYUNvbnZlcnRDbGllbnQgPT4gbmV3IE1lZGlhQ29udmVydENsaWVudCh7XG4gIGNyZWRlbnRpYWxzOiBnZXRBd3NDcmVkZW50aWFscygpLFxuICBlbmRwb2ludCxcbiAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbn0pO1xuXG5jb25zdCBnZXRNZWRpYUNvbnZlcnRFbmRwb2ludCA9IGFzeW5jICgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4gPT4ge1xuICBpZihtZWRpYUNvbnZlcnRFbmRwb2ludCkge1xuICAgIHJldHVybiBtZWRpYUNvbnZlcnRFbmRwb2ludDtcbiAgfVxuXG4gIG1lZGlhQ29udmVydEVuZHBvaW50ID0gQ29uZmlnLmdldCgnYXdzLm1lZGlhY29udmVydC5lbmRwb2ludCcpO1xuXG4gIGlmKG1lZGlhQ29udmVydEVuZHBvaW50KSB7XG4gICAgcmV0dXJuIG1lZGlhQ29udmVydEVuZHBvaW50O1xuICB9XG5cbiAgY29uc3QgY2xpZW50ID0gZ2V0TWVkaWFDb252ZXJ0Q2xpZW50KCk7XG4gIGNvbnN0IGVuZHBvaW50cyA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBEZXNjcmliZUVuZHBvaW50c0NvbW1hbmQoe01heFJlc3VsdHM6IDF9KSk7XG4gIG1lZGlhQ29udmVydEVuZHBvaW50ID0gZW5kcG9pbnRzLkVuZHBvaW50cz8uWzBdPy5Vcmw7XG5cbiAgcmV0dXJuIG1lZGlhQ29udmVydEVuZHBvaW50O1xufTtcblxuY29uc3QgZ2V0VmlkZW9NZWRpYUl0ZW1Eb2NJZHMgPSAoaXRlbUlkOiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IHBhcnNlZERvY0lkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuXG4gIGlmKHBhcnNlZERvY0lkKSB7XG4gICAgcmV0dXJuIFtwYXJzZWREb2NJZF07XG4gIH1cblxuICBjb25zdCBpdGVtS2V5ID0gcGFyc2VJZChpdGVtSWQpO1xuXG4gIGlmKCFpdGVtS2V5KSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICBgJHtDT0xMRUNUSU9OUy5VU0VSU30vJHtpdGVtS2V5fWAsXG4gICAgYCR7Q09MTEVDVElPTlMuUEVSU09OQVN9LyR7aXRlbUtleX1gXG4gIF07XG59O1xuXG5jb25zdCBub3JtYWxpemVWaWRlb1ByaXZhY3kgPSAocHJpdmFjeTogdW5rbm93bik6ICdmcmllbmRzJyB8ICdwcml2YXRlJyB8ICdwdWJsaWMnIHwgJ3ZpcCcgPT4ge1xuICBzd2l0Y2goU3RyaW5nKHByaXZhY3kgfHwgJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAnZnJpZW5kcyc6XG4gICAgICByZXR1cm4gJ2ZyaWVuZHMnO1xuICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgcmV0dXJuICdwcml2YXRlJztcbiAgICBjYXNlICd2aXAnOlxuICAgICAgcmV0dXJuICd2aXAnO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJ3B1YmxpYyc7XG4gIH1cbn07XG5cbmNvbnN0IGNhblZpZXdWaWRlbyA9IChcbiAgdmlkZW86IFZpZGVvVHlwZSxcbiAgdmlld2VyVXNlcklkOiBzdHJpbmcsXG4gIGFjY2Vzczoge1xuICAgIHJlYWRvbmx5IGNhblZpZXdGcmllbmRzOiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGNhblZpZXdWaXA6IGJvb2xlYW47XG4gICAgcmVhZG9ubHkgaXNPd25lcjogYm9vbGVhbjtcbiAgfVxuKSA9PiB7XG4gIGNvbnN0IHByaXZhY3kgPSBub3JtYWxpemVWaWRlb1ByaXZhY3kodmlkZW8/LnByaXZhY3kpO1xuXG4gIGlmKGFjY2Vzcy5pc093bmVyIHx8IFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSA9PT0gdmlld2VyVXNlcklkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzd2l0Y2gocHJpdmFjeSkge1xuICAgIGNhc2UgJ3ByaXZhdGUnOlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNhc2UgJ2ZyaWVuZHMnOlxuICAgICAgcmV0dXJuIGFjY2Vzcy5jYW5WaWV3RnJpZW5kcztcbiAgICBjYXNlICd2aXAnOlxuICAgICAgcmV0dXJuIGFjY2Vzcy5jYW5WaWV3VmlwO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuY29uc3QgcmVzb2x2ZVZpZGVvVmlld2VyQWNjZXNzID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBsaXN0OiBBcnJheTxWaWRlb1R5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZzsgX21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9PixcbiAgc2Vzc2lvblVzZXJJZDogc3RyaW5nXG4pID0+IHtcbiAgY29uc3Qgb3duZXJVc2VySWQgPSBTdHJpbmcobGlzdFswXT8udXNlcklkIHx8ICcnKTtcbiAgY29uc3QgaXNPd25lciA9ICEhc2Vzc2lvblVzZXJJZCAmJiAhIW93bmVyVXNlcklkICYmIHNlc3Npb25Vc2VySWQgPT09IG93bmVyVXNlcklkO1xuXG4gIGlmKGlzT3duZXIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2FuVmlld0ZyaWVuZHM6IHRydWUsXG4gICAgICBjYW5WaWV3VmlwOiB0cnVlLFxuICAgICAgaXNPd25lcjogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBpZighc2Vzc2lvblVzZXJJZCkge1xuICAgIHJldHVybiB7XG4gICAgICBjYW5WaWV3RnJpZW5kczogZmFsc2UsXG4gICAgICBjYW5WaWV3VmlwOiBmYWxzZSxcbiAgICAgIGlzT3duZXI6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGxldCBjYW5WaWV3RnJpZW5kcyA9IGZhbHNlO1xuICBsZXQgY2FuVmlld1ZpcCA9IGZhbHNlO1xuICBjb25zdCBtZWRpYUl0ZW1LZXkgPSBTdHJpbmcobGlzdFswXT8uX21lZGlhSXRlbUtleSB8fCAnJyk7XG4gIGNvbnN0IG1lZGlhSXRlbVR5cGUgPSBTdHJpbmcobGlzdFswXT8uX21lZGlhSXRlbVR5cGUgfHwgJycpO1xuXG4gIGlmKG1lZGlhSXRlbVR5cGUgPT09IENPTExFQ1RJT05TLlBFUlNPTkFTICYmIG1lZGlhSXRlbUtleSkge1xuICAgIGNvbnN0IHJlbGF0aW9uc2hpcCA9IGF3YWl0IGdldFBlcnNvbmFSZWxhdGlvbnNoaXBTdGF0ZShjb250ZXh0LCBtZWRpYUl0ZW1LZXkpO1xuICAgIGNhblZpZXdGcmllbmRzID0gISFyZWxhdGlvbnNoaXA/LmlzRnJpZW5kO1xuICAgIGNhblZpZXdWaXAgPSBhd2FpdCBoYXNTdWJzY3JpcHRpb25Ub0l0ZW0oY29udGV4dCwgbWVkaWFJdGVtS2V5LCBDT0xMRUNUSU9OUy5QRVJTT05BUyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNhblZpZXdGcmllbmRzLFxuICAgIGNhblZpZXdWaXAsXG4gICAgaXNPd25lcjogZmFsc2VcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVZpZGVvT3B0aW9ucyA9IChvcHRpb25zOiBWaWRlb09wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7ZnJvbSA9IDAsIHRvID0gMzAsIHR5cGUgPSAnZGVmYXVsdCd9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9PcHRpb25hbCA9IChmaWVsZHM6IHN0cmluZ1tdID0gW10pID0+XG4gIGZpZWxkcy5yZWR1Y2UoKHNlbGVjdHMsIGZpZWxkOiBzdHJpbmcpID0+IHtcbiAgICBpZihmaWVsZC5pbmNsdWRlcygnQ291bnQnKSkge1xuICAgICAgY29uc3QgcmVhY3Rpb25RdWVyeSA9IGJ1aWxkUmVhY3Rpb25Db3VudFF1ZXJ5KGZpZWxkLnJlcGxhY2UoJ0NvdW50JywgJycpLCAndicsICd2aWRlb3MnKTtcbiAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKHJlYWN0aW9uUXVlcnkpO1xuICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goYCR7ZmllbGR9OiR7ZmllbGR9YCk7XG4gICAgICByZXR1cm4gc2VsZWN0cztcbiAgICB9XG5cbiAgICBzd2l0Y2goZmllbGQpIHtcbiAgICAgIGNhc2UgJ3JlYWN0aW9ucyc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCByZWFjdGlvbnMgPSAoRk9SIHZpZGVvLCByIElOIElOQk9VTkQgdi5faWQgcmVhY3Rpb25zIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXMgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX0pYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdyZWFjdGlvbnM6cmVhY3Rpb25zJyk7XG4gICAgICAgIHJldHVybiBzZWxlY3RzO1xuICAgICAgfVxuICAgICAgY2FzZSAndGFncyc6IHtcbiAgICAgICAgY29uc3QgdGFnc1F1ZXJ5ID0gYnVpbGRUYWdzUXVlcnkoJ3YnKTtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2godGFnc1F1ZXJ5KTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ3RhZ3M6dGFncycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3VzZXJzJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIHVzZXJzID0gRklSU1QoRk9SIHUgSU4gdXNlcnMgRklMVEVSIHYudXNlcklkID09IHUuX2tleSBMSU1JVCAxIFJFVFVSTiB1KWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndXNlcnM6dXNlcnMnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICdwcml2YWN5Jzoge1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgfVxuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb3NCeVVzZXIgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHVzZXJJZDogc3RyaW5nLFxuICBmcm9tOiBudW1iZXIgPSAwLFxuICB0bzogbnVtYmVyID0gMzBcbik6IFByb21pc2U8VmlkZW9UeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvc0J5VXNlcic7XG4gIGNvbnN0IGZvcm1hdFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY3VzdG9tUXVlcmllcyA9IFtcbiAgICBgTEVUIHVzZXIgPSBGSVJTVChGT1IgdSBJTiB1c2VycyBGSUxURVIgdS5fa2V5ID09IGRvYy51c2VySWQgTElNSVQgMSBSRVRVUk4gdSlgXG4gIF07XG5cbiAgcmV0dXJuIGdldExpc3RCeTxWaWRlb1R5cGU+KFxuICAgIGNvbnRleHQsXG4gICAgJ3ZpZGVvcycsXG4gICAge3VzZXJJZDogZm9ybWF0VXNlcklkfSxcbiAgICB7XG4gICAgICBzb3J0OiBbe2ZpZWxkOiAnYWRkZWQnLCBkaXJlY3Rpb246ICdERVNDJ31dLFxuICAgICAgbGltaXQ6IHtmcm9tLCB0b30sXG4gICAgICBjdXN0b21RdWVyaWVzLFxuICAgICAgY3VzdG9tT2JqZWN0czogWyd1c2VyOnVzZXInXVxuICAgIH1cbiAgKS5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICByZXR1cm4gW10gYXMgVmlkZW9UeXBlW107XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvQ291bnRCeUl0ZW0gPSAoY29udGV4dDogQXBpQ29udGV4dCwgaXRlbUlkOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9Db3VudEJ5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgaXRlbURvY0lkcyA9IGdldFZpZGVvTWVkaWFJdGVtRG9jSWRzKGl0ZW1JZCk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgTEVUIG1lZGlhID0gKFxuICAgICAgRk9SIHYgSU4gJHtoYXNNZWRpYUNvbGxlY3Rpb259XG4gICAgICAgIEZJTFRFUiB2Ll9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgICAgRklMVEVSIHYudHlwZSA9PSBcInZpZGVvXCJcbiAgICAgICAgUkVUVVJOIDFcbiAgICApXG4gICAgUkVUVVJOIHtjb3VudDogTEVOR1RIKG1lZGlhKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoe2NvdW50fSkgPT4gY291bnQpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvc0J5SXRlbSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIG9wdGlvbnM6IFZpZGVvT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFZpZGVvVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb3NCeUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMgPSBbXSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGl0ZW1Eb2NJZHMgPSBnZXRWaWRlb01lZGlhSXRlbURvY0lkcyhpdGVtSWQpO1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VWaWRlb09wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFZpZGVvT3B0aW9uYWwoZmllbGRzKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgbCBJTiAke2hhc01lZGlhQ29sbGVjdGlvbn1cbiAgICAgIEZJTFRFUiBsLl9mcm9tIElOICR7aXRlbURvY0lkc31cbiAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJ2aWRlb1wiXG4gICAgICBMRVQgdiA9IERPQ1VNRU5UKGwuX3RvKVxuICAgICAgRklMVEVSIE5PVCBJU19OVUxMKHYpXG4gICAgICBMRVQgb3duZXJQZXJzb25hID0gbC5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgUEFSU0VfSURFTlRJRklFUihsLl9mcm9tKS5rZXkpIDogbnVsbFxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgU09SVCB2LmFkZGVkIERFU0NcbiAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgUkVUVVJOIE1FUkdFKFxuICAgICAgICAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHYsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndicpfSxcbiAgICAgICAge1xuICAgICAgICAgIF9tZWRpYUl0ZW1LZXk6IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkua2V5LFxuICAgICAgICAgIF9tZWRpYUl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvbixcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBBcnJheTxWaWRlb1R5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZzsgX21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9Pik7XG5cbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCByZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MoY29udGV4dCwgbGlzdCwgc2Vzc2lvblVzZXJJZCk7XG5cbiAgICBpZihhY2Nlc3MuaXNPd25lcikge1xuICAgICAgcmV0dXJuIGxpc3Q7XG4gICAgfVxuXG4gICAgaWYoIXNlc3Npb25Vc2VySWQpIHtcbiAgICAgIHJldHVybiBsaXN0LmZpbHRlcigodmlkZW8pID0+IG5vcm1hbGl6ZVZpZGVvUHJpdmFjeSh2aWRlbz8ucHJpdmFjeSkgPT09ICdwdWJsaWMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBjYW5WaWV3VmlkZW8odmlkZW8sIHNlc3Npb25Vc2VySWQsIGFjY2VzcykpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW10gYXMgVmlkZW9UeXBlW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb0xpc3RCeVJlYWN0aW9ucyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgcmVhY3Rpb25zOiBzdHJpbmdbXSA9IFtdLFxuICBvcHRpb25zPzogVmlkZW9PcHRpb25zXG4pOiBQcm9taXNlPFZpZGVvVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRWaWRlb0xpc3RCeVJlYWN0aW9ucyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcyA9IFtdLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7bGltaXR9ID0gcGFyc2VWaWRlb09wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFZpZGVvT3B0aW9uYWwoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uczogc3RyaW5nW10gPSByZWFjdGlvbnMubWFwKChyZWFjdGlvbk5hbWUpID0+IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKSk7XG4gIGNvbnN0IGZpbHRlckJ5OiBzdHJpbmdbXSA9IFtcbiAgICAnci50eXBlID09IFwidmlkZW9zXCInLFxuICAgIGBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KGZvcm1hdFJlYWN0aW9ucyl9LCBMT1dFUihyLm5hbWUpKWBcbiAgXTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdiwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gaGFzUmVhY3Rpb25cbiAgICAgIE9QVElPTlMge3ZlcnRleENvbGxlY3Rpb25zOiBcInZpZGVvc1wifVxuICAgICAgTEVUIG1lZGlhID0gRklSU1QoXG4gICAgICAgIEZPUiBvd25lciwgbCBJTiBJTkJPVU5EIHYuX2lkICR7aGFzTWVkaWFDb2xsZWN0aW9ufVxuICAgICAgICAgIEZJTFRFUiBsLnR5cGUgPT0gXCJ2aWRlb1wiXG4gICAgICAgICAgTElNSVQgMVxuICAgICAgICAgIFJFVFVSTiB7XG4gICAgICAgICAgICBpdGVtS2V5OiBQQVJTRV9JREVOVElGSUVSKGwuX2Zyb20pLmtleSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBsLml0ZW1UeXBlIHx8IFBBUlNFX0lERU5USUZJRVIobC5fZnJvbSkuY29sbGVjdGlvblxuICAgICAgICAgIH1cbiAgICAgIClcbiAgICAgIExFVCBvd25lclBlcnNvbmEgPSBtZWRpYSAmJiBtZWRpYS5pdGVtVHlwZSA9PSBcInBlcnNvbmFzXCIgPyBET0NVTUVOVCgke2xpdGVyYWwoQ09MTEVDVElPTlMuUEVSU09OQVMpfSwgbWVkaWEuaXRlbUtleSkgOiBudWxsXG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiBNRVJHRShcbiAgICAgICAgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRSh2LCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3YnKX0sXG4gICAgICAgIHtcbiAgICAgICAgICBfbWVkaWFJdGVtS2V5OiBtZWRpYSA/IG1lZGlhLml0ZW1LZXkgOiBudWxsLFxuICAgICAgICAgIF9tZWRpYUl0ZW1UeXBlOiBtZWRpYSA/IG1lZGlhLml0ZW1UeXBlIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJZDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLl9rZXkgOiBudWxsLFxuICAgICAgICAgIG93bmVyUGVyc29uYUltYWdlSWQ6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS5pbWFnZUlkIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFJbWFnZVVybDogb3duZXJQZXJzb25hID8gb3duZXJQZXJzb25hLmltYWdlVXJsIDogbnVsbCxcbiAgICAgICAgICBvd25lclBlcnNvbmFOYW1lOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEubmFtZSA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVGh1bWJVcmw6IG93bmVyUGVyc29uYSA/IG93bmVyUGVyc29uYS50aHVtYlVybCA6IG51bGwsXG4gICAgICAgICAgb3duZXJQZXJzb25hVXNlcklkOiBvd25lclBlcnNvbmEgPyBvd25lclBlcnNvbmEudXNlcklkIDogbnVsbFxuICAgICAgICB9XG4gICAgICApXG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBBcnJheTxWaWRlb1R5cGUgJiB7X21lZGlhSXRlbUtleT86IHN0cmluZzsgX21lZGlhSXRlbVR5cGU/OiBzdHJpbmd9Pik7XG5cbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCByZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MoY29udGV4dCwgbGlzdCwgc2Vzc2lvbklkKTtcblxuICAgIGlmKGFjY2Vzcy5pc093bmVyKSB7XG4gICAgICByZXR1cm4gbGlzdDtcbiAgICB9XG5cbiAgICBpZighc2Vzc2lvbklkKSB7XG4gICAgICByZXR1cm4gbGlzdC5maWx0ZXIoKHZpZGVvKSA9PiBub3JtYWxpemVWaWRlb1ByaXZhY3kodmlkZW8/LnByaXZhY3kpID09PSAncHVibGljJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKCh2aWRlbykgPT4gY2FuVmlld1ZpZGVvKHZpZGVvLCBzZXNzaW9uSWQsIGFjY2VzcykpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtvcHRpb25zLCByZWFjdGlvbnN9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW8gPSAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9JZDogc3RyaW5nKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFZpZGVvJztcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgcmV0dXJuIGdldEl0ZW1CeTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCB7X2tleTogZm9ybWF0VmlkZW9JZH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFBhdGhVc2VyVmlkZW9zID0gKHVzZXJJZDogc3RyaW5nLCB2aWRlb0lkOiBzdHJpbmcsIHZpZGVvVHlwZTogc3RyaW5nLCBkaXI6IHN0cmluZyA9ICd2aWRlb3MnKTogc3RyaW5nID0+IHtcbiAgbGV0IGZpbGVuYW1lID0gdmlkZW9JZDtcblxuICBzd2l0Y2godmlkZW9UeXBlKSB7XG4gICAgY2FzZSAnaW1hZ2UvcG5nJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ucG5nYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL3dlYnAnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS53ZWJwYDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2ltYWdlL2pwZWcnOlxuICAgIGNhc2UgJ2ltYWdlL2pwZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LmpwZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby93ZWJtJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VibWA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICd2aWRlby9xdWlja3RpbWUnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5tb3ZgO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubXA0YDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGB1c2Vycy8ke3VzZXJJZH0vJHtkaXJ9LyR7ZmlsZW5hbWV9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb0ZpbGVuYW1lID0gKHZpZGVvSWQ6IHN0cmluZywgdmlkZW9UeXBlOiBzdHJpbmcgPSAndmlkZW8vbXA0Jyk6IHN0cmluZyA9PiB7XG4gIGxldCBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9Lm1wNGA7XG5cbiAgc3dpdGNoKHZpZGVvVHlwZSkge1xuICAgIGNhc2UgJ2ltYWdlL3BuZyc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LnBuZ2A7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWFnZS93ZWJwJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ud2VicGA7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdpbWFnZS9qcGVnJzpcbiAgICBjYXNlICdpbWFnZS9qcGcnOlxuICAgICAgZmlsZW5hbWUgPSBgJHt2aWRlb0lkfS5qcGdgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8vd2VibSc6XG4gICAgICBmaWxlbmFtZSA9IGAke3ZpZGVvSWR9LndlYm1gO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndmlkZW8vcXVpY2t0aW1lJzpcbiAgICAgIGZpbGVuYW1lID0gYCR7dmlkZW9JZH0ubW92YDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiBmaWxlbmFtZTtcbn07XG5cbmNvbnN0IGdldFZpZGVvVXBsb2FkS2V5ID0gKHVzZXJJZDogc3RyaW5nLCB2aWRlb0lkOiBzdHJpbmcsIGZpbGVUeXBlOiBzdHJpbmcgPSAndmlkZW8vbXA0Jyk6IHN0cmluZyA9PlxuICBnZXRQYXRoVXNlclZpZGVvcyh1c2VySWQsIHZpZGVvSWQsIGZpbGVUeXBlLCAndmlkZW9zJyk7XG5cbmNvbnN0IHNhdmVWaWRlb1RodW1ibmFpbCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB0aHVtYkJhc2U2NDogc3RyaW5nID0gJycsXG4gIHRodW1iRmlsZVR5cGU6IHN0cmluZyA9ICdpbWFnZS9qcGVnJ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWQgPSAnJ30gPSB7fX0gPSBjb250ZXh0O1xuXG4gIGlmKCF0aHVtYkJhc2U2NCB8fCAhdGh1bWJCYXNlNjQuaW5jbHVkZXMoJywnKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdEJhc2U2NCA9IHRodW1iQmFzZTY0LnN1YnN0cih0aHVtYkJhc2U2NC5pbmRleE9mKCcsJykgKyAxKTtcbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZm9ybWF0QmFzZTY0LCAnYmFzZTY0Jyk7XG5cbiAgaWYoIWJ1ZmZlci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBhd2FpdCBzM1B1dCh7XG4gICAgQm9keTogYnVmZmVyLFxuICAgIEJ1Y2tldDogbnVsbCxcbiAgICBDb250ZW50VHlwZTogdGh1bWJGaWxlVHlwZSxcbiAgICBLZXk6IGdldFBhdGhVc2VyVmlkZW9zKHNlc3Npb25JZCwgdmlkZW9JZCwgdGh1bWJGaWxlVHlwZSwgJ3ZpZGVvLXRodW1icycpXG4gIH0pO1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgZ2V0VmlkZW9VcGxvYWREb2MgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9JZDogc3RyaW5nKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgdmlkZW8gPSBhd2FpdCBnZXRWaWRlbyhjb250ZXh0LCB2aWRlb0lkKTtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCA9ICcnfSA9IHt9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXZpZGVvIHx8IFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSAhPT0gc2Vzc2lvbklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTik7XG4gIH1cblxuICByZXR1cm4gdmlkZW87XG59O1xuXG5jb25zdCBnZXRWaWRlb1BhcnRVcmxzID0gYXN5bmMgKFxuICBrZXk6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZyxcbiAgcGFydE51bWJlcnM6IG51bWJlcltdXG4pOiBQcm9taXNlPFZpZGVvVXBsb2FkUGFydFVybFtdPiA9PiBQcm9taXNlLmFsbChwYXJ0TnVtYmVycy5tYXAoYXN5bmMgKHBhcnROdW1iZXIpID0+ICh7XG4gIHBhcnROdW1iZXIsXG4gIHVybDogYXdhaXQgczNHZXRVcGxvYWRQYXJ0U2lnbmVkVXJsKHtcbiAgICBCdWNrZXQ6IG51bGwsXG4gICAgS2V5OiBrZXksXG4gICAgUGFydE51bWJlcjogcGFydE51bWJlcixcbiAgICBVcGxvYWRJZDogdXBsb2FkSWRcbiAgfSlcbn0pKSk7XG5cbmNvbnN0IGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IG93bmVyVXNlcklkID0gcGFyc2VJZChTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCBjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcblxuICBpZighb3duZXJVc2VySWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBjb25uZWN0aW9ucyA9IGF3YWl0IGdldENvbm5lY3Rpb25zQnlVc2VyKG93bmVyVXNlcklkKS5jYXRjaCgoKSA9PiBbXSk7XG4gIGNvbnN0IGNvbm5lY3Rpb25JZHMgPSBjb25uZWN0aW9uc1xuICAgIC5tYXAoKGNvbm5lY3Rpb24pID0+IHBhcnNlU3RyaW5nKGNvbm5lY3Rpb24/LmNvbm5lY3Rpb25JZCB8fCBjb25uZWN0aW9uPy5zb2NrZXRJZCB8fCAnJywgMzIpKVxuICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAuZmlsdGVyKChjb25uZWN0aW9uSWQsIGluZGV4LCBsaXN0KSA9PiBsaXN0LmluZGV4T2YoY29ubmVjdGlvbklkKSA9PT0gaW5kZXgpO1xuXG4gIGlmKCFjb25uZWN0aW9uSWRzLmxlbmd0aCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHdzQ2xpZW50LnNlbmQoY29ubmVjdGlvbklkcywge1xuICAgIGFjdGlvbjogJ3ZpZGVvLnByb2Nlc3NpbmcuY29tcGxldGVkJyxcbiAgICBkYXRhOiB7XG4gICAgICB2aWRlb1xuICAgIH1cbiAgfSkuY2F0Y2goKCkgPT4gbnVsbCk7XG59O1xuXG5jb25zdCBnZXRWaWRlb1BsYXliYWNrS2V5ID0gKHVzZXJJZDogc3RyaW5nLCB2aWRlb0lkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgZ2V0UGF0aFVzZXJWaWRlb3ModXNlcklkLCB2aWRlb0lkLCAndmlkZW8vbXA0JywgVklERU9fUExBWUJBQ0tfRElSKTtcblxuY29uc3QgZGVsZXRlVmlkZW9Tb3VyY2VPYmplY3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvOiBWaWRlb1R5cGVcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVmlkZW9Tb3VyY2VPYmplY3QnO1xuICBjb25zdCBzb3VyY2VLZXkgPSBTdHJpbmcodmlkZW8/LnNvdXJjZUtleSB8fCB2aWRlbz8udXBsb2FkS2V5IHx8ICcnKS50cmltKCk7XG4gIGNvbnN0IHBsYXliYWNrS2V5ID0gU3RyaW5nKHZpZGVvPy5wbGF5YmFja0tleSB8fCAnJykudHJpbSgpO1xuXG4gIGlmKCFzb3VyY2VLZXkgfHwgc291cmNlS2V5ID09PSBwbGF5YmFja0tleSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgczNEZWxldGUoe1xuICAgICAgQnVja2V0OiBudWxsLFxuICAgICAgS2V5OiBzb3VyY2VLZXlcbiAgICB9KTtcblxuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtzb3VyY2VLZXksIHZpZGVvSWQ6IHZpZGVvPy52aWRlb0lkIHx8IHZpZGVvPy5fa2V5fSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuY29uc3Qgc2hvdWxkVHJhbnNjb2RlVmlkZW8gPSAodmlkZW86IFZpZGVvVHlwZSA9IHt9KTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGZpbGVUeXBlID0gU3RyaW5nKHZpZGVvPy5maWxlVHlwZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcblxuICBpZighZmlsZVR5cGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiAhW1xuICAgICd2aWRlby9tcDQnLFxuICAgICd2aWRlby93ZWJtJ1xuICBdLmluY2x1ZGVzKGZpbGVUeXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVWaWRlb1RyYW5zY29kZUpvYiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW86IFZpZGVvVHlwZVxuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NyZWF0ZVZpZGVvVHJhbnNjb2RlSm9iJztcbiAgY29uc3Qgcm9sZUFybiA9IFN0cmluZyhDb25maWcuZ2V0KCdhd3MubWVkaWFjb252ZXJ0LnJvbGVBcm4nKSB8fCAnJyk7XG4gIGNvbnN0IGJ1Y2tldCA9IHMzR2V0QnVja2V0KCkgfHwgQ29uZmlnLmdldCgnYXdzLnMzLkJ1Y2tldCcpO1xuICBjb25zdCB2aWRlb0lkID0gcGFyc2VJZChTdHJpbmcodmlkZW8/LnZpZGVvSWQgfHwgdmlkZW8/Ll9rZXkgfHwgJycpKTtcbiAgY29uc3QgdXNlcklkID0gcGFyc2VJZChTdHJpbmcodmlkZW8/LnVzZXJJZCB8fCBjb250ZXh0Py5zZXNzaW9uPy51c2VySWQgfHwgJycpKTtcbiAgY29uc3Qgc291cmNlS2V5ID0gU3RyaW5nKHZpZGVvPy5zb3VyY2VLZXkgfHwgdmlkZW8/LnVwbG9hZEtleSB8fCAnJyk7XG5cbiAgaWYoIXJvbGVBcm4gfHwgIWJ1Y2tldCB8fCAhdmlkZW9JZCB8fCAhdXNlcklkIHx8ICFzb3VyY2VLZXkpIHtcbiAgICBpZih2aWRlb0lkKSB7XG4gICAgICBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHZpZGVvSWQsIHtcbiAgICAgICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICAgIHByb2Nlc3NpbmdFcnJvcjogW1xuICAgICAgICAgICFyb2xlQXJuID8gJ21pc3NpbmdfbWVkaWFjb252ZXJ0X3JvbGVfYXJuJyA6ICcnLFxuICAgICAgICAgICFidWNrZXQgPyAnbWlzc2luZ19zM19idWNrZXQnIDogJycsXG4gICAgICAgICAgIXVzZXJJZCA/ICdtaXNzaW5nX3VzZXJfaWQnIDogJycsXG4gICAgICAgICAgIXNvdXJjZUtleSA/ICdtaXNzaW5nX3NvdXJjZV9rZXknIDogJydcbiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbikuam9pbignLCcpLFxuICAgICAgICBwcm9jZXNzaW5nU3RhdHVzOiAnZmFpbGVkJ1xuICAgICAgfSBhcyBQYXJ0aWFsPFZpZGVvVHlwZT4gYXMgVmlkZW9UeXBlKS5jYXRjaCgoKSA9PiBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gYXdhaXQgZ2V0TWVkaWFDb252ZXJ0RW5kcG9pbnQoKTtcbiAgICBjb25zdCBjbGllbnQgPSBnZXRNZWRpYUNvbnZlcnRDbGllbnQoZW5kcG9pbnQpO1xuICAgIGNvbnN0IHF1ZXVlID0gU3RyaW5nKENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQucXVldWVBcm4nKSB8fCAnJyk7XG4gICAgY29uc3Qgb3V0cHV0RGVzdGluYXRpb24gPSBgczM6Ly8ke2J1Y2tldH0vdXNlcnMvJHt1c2VySWR9LyR7VklERU9fUExBWUJBQ0tfRElSfS9gO1xuICAgIGNvbnN0IGpvYiA9IGF3YWl0IGNsaWVudC5zZW5kKG5ldyBDcmVhdGVKb2JDb21tYW5kKHtcbiAgICAgIC4uLihxdWV1ZSA/IHtRdWV1ZTogcXVldWV9IDoge30pLFxuICAgICAgUm9sZTogcm9sZUFybixcbiAgICAgIFNldHRpbmdzOiB7XG4gICAgICAgIElucHV0czogW3tcbiAgICAgICAgICBBdWRpb1NlbGVjdG9yczoge1xuICAgICAgICAgICAgJ0F1ZGlvIFNlbGVjdG9yIDEnOiB7XG4gICAgICAgICAgICAgIERlZmF1bHRTZWxlY3Rpb246ICdERUZBVUxUJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgRmlsZUlucHV0OiBgczM6Ly8ke2J1Y2tldH0vJHtzb3VyY2VLZXl9YCxcbiAgICAgICAgICBUaW1lY29kZVNvdXJjZTogJ1pFUk9CQVNFRCcsXG4gICAgICAgICAgVmlkZW9TZWxlY3Rvcjoge1xuICAgICAgICAgICAgUm90YXRlOiAnQVVUTydcbiAgICAgICAgICB9XG4gICAgICAgIH1dLFxuICAgICAgICBPdXRwdXRHcm91cHM6IFt7XG4gICAgICAgICAgTmFtZTogJ01QNCcsXG4gICAgICAgICAgT3V0cHV0R3JvdXBTZXR0aW5nczoge1xuICAgICAgICAgICAgRmlsZUdyb3VwU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgRGVzdGluYXRpb246IG91dHB1dERlc3RpbmF0aW9uXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgVHlwZTogJ0ZJTEVfR1JPVVBfU0VUVElOR1MnXG4gICAgICAgICAgfSxcbiAgICAgICAgICBPdXRwdXRzOiBbe1xuICAgICAgICAgICAgQXVkaW9EZXNjcmlwdGlvbnM6IFt7XG4gICAgICAgICAgICAgIEF1ZGlvU291cmNlTmFtZTogJ0F1ZGlvIFNlbGVjdG9yIDEnLFxuICAgICAgICAgICAgICBDb2RlY1NldHRpbmdzOiB7XG4gICAgICAgICAgICAgICAgQWFjU2V0dGluZ3M6IHtcbiAgICAgICAgICAgICAgICAgIEJpdHJhdGU6IDEyODAwMCxcbiAgICAgICAgICAgICAgICAgIENvZGluZ01vZGU6ICdDT0RJTkdfTU9ERV8yXzAnLFxuICAgICAgICAgICAgICAgICAgU2FtcGxlUmF0ZTogNDgwMDBcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIENvZGVjOiAnQUFDJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XSxcbiAgICAgICAgICAgIENvbnRhaW5lclNldHRpbmdzOiB7XG4gICAgICAgICAgICAgIENvbnRhaW5lcjogJ01QNCcsXG4gICAgICAgICAgICAgIE1wNFNldHRpbmdzOiB7fVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFZpZGVvRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgICAgQ29kZWNTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgIENvZGVjOiAnSF8yNjQnLFxuICAgICAgICAgICAgICAgIEgyNjRTZXR0aW5nczoge1xuICAgICAgICAgICAgICAgICAgTWF4Qml0cmF0ZTogTnVtYmVyKENvbmZpZy5nZXQoJ2F3cy5tZWRpYWNvbnZlcnQubWF4Qml0cmF0ZScsIDUwMDAwMDApKSxcbiAgICAgICAgICAgICAgICAgIFJhdGVDb250cm9sTW9kZTogJ1FWQlInLFxuICAgICAgICAgICAgICAgICAgU2NlbmVDaGFuZ2VEZXRlY3Q6ICdUUkFOU0lUSU9OX0RFVEVDVElPTicsXG4gICAgICAgICAgICAgICAgICBRdWFsaXR5VHVuaW5nTGV2ZWw6ICdTSU5HTEVfUEFTUydcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XVxuICAgICAgICB9XVxuICAgICAgfSxcbiAgICAgIFVzZXJNZXRhZGF0YToge1xuICAgICAgICBwbGF5YmFja0tleTogZ2V0VmlkZW9QbGF5YmFja0tleSh1c2VySWQsIHZpZGVvSWQpLFxuICAgICAgICB1c2VySWQsXG4gICAgICAgIHZpZGVvSWRcbiAgICAgIH1cbiAgICB9IGFzIGFueSkpO1xuXG4gICAgY29uc3Qgam9iSWQgPSBTdHJpbmcoam9iPy5Kb2I/LklkIHx8ICcnKTtcblxuICAgIGlmKGpvYklkKSB7XG4gICAgICBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIHZpZGVvSWQsIHtcbiAgICAgICAgbWVkaWFDb252ZXJ0Sm9iSWQ6IGpvYklkLFxuICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgcGxheWJhY2tGaWxlVHlwZTogJ3ZpZGVvL21wNCcsXG4gICAgICAgIHBsYXliYWNrS2V5OiBnZXRWaWRlb1BsYXliYWNrS2V5KHVzZXJJZCwgdmlkZW9JZCksXG4gICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdxdWV1ZWQnLFxuICAgICAgICBzdHJlYW1UeXBlOiAncHJvZ3Jlc3NpdmUnXG4gICAgICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpO1xuICAgIH1cblxuICAgIHJldHVybiBqb2JJZDtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKHZpZGVvSWQpIHtcbiAgICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgdmlkZW9JZCwge1xuICAgICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgICAgcHJvY2Vzc2luZ0Vycm9yOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdtZWRpYWNvbnZlcnRfam9iX2ZhaWxlZCcsXG4gICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdmYWlsZWQnXG4gICAgICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpLmNhdGNoKCgpID0+IG51bGwpO1xuICAgIH1cblxuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7c291cmNlS2V5LCB1c2VySWQsIHZpZGVvSWR9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgY29tcGxldGVWaWRlb1Byb2Nlc3NpbmcgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAge1xuICAgIGhsc0tleSA9ICcnLFxuICAgIHBsYXliYWNrRmlsZVR5cGUgPSAndmlkZW8vbXA0JyxcbiAgICBwbGF5YmFja0tleSA9ICcnLFxuICAgIHByb2Nlc3NpbmdTdGF0dXMgPSAncmVhZHknLFxuICAgIHN0cmVhbVR5cGUgPSAncHJvZ3Jlc3NpdmUnXG4gIH06IHtcbiAgICBobHNLZXk/OiBzdHJpbmc7XG4gICAgcGxheWJhY2tGaWxlVHlwZT86IHN0cmluZztcbiAgICBwbGF5YmFja0tleT86IHN0cmluZztcbiAgICBwcm9jZXNzaW5nU3RhdHVzPzogc3RyaW5nO1xuICAgIHN0cmVhbVR5cGU/OiBzdHJpbmc7XG4gIH0gPSB7fVxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgaWYoIWZvcm1hdFZpZGVvSWQpIHtcbiAgICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRWaWRlbyA9IGF3YWl0IGdldFZpZGVvKGNvbnRleHQsIGZvcm1hdFZpZGVvSWQpO1xuICBjb25zdCBmb3JtYXRQbGF5YmFja0tleSA9IHBsYXliYWNrS2V5IHx8IGdldFZpZGVvUGxheWJhY2tLZXkoU3RyaW5nKGN1cnJlbnRWaWRlbz8udXNlcklkIHx8ICcnKSwgZm9ybWF0VmlkZW9JZCk7XG4gIGNvbnN0IHNvdXJjZURlbGV0ZWQgPSBwcm9jZXNzaW5nU3RhdHVzID09PSAncmVhZHknXG4gICAgPyBhd2FpdCBkZWxldGVWaWRlb1NvdXJjZU9iamVjdChjb250ZXh0LCB7XG4gICAgICAuLi5jdXJyZW50VmlkZW8sXG4gICAgICBwbGF5YmFja0tleTogZm9ybWF0UGxheWJhY2tLZXlcbiAgICB9IGFzIFZpZGVvVHlwZSlcbiAgICA6IGZhbHNlO1xuICBjb25zdCB1cGRhdGVkVmlkZW8gPSBhd2FpdCB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICAuLi4oaGxzS2V5ID8ge2hsc0tleX0gOiB7fSksXG4gICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgcGxheWJhY2tGaWxlVHlwZSxcbiAgICAuLi4oZm9ybWF0UGxheWJhY2tLZXkgPyB7cGxheWJhY2tLZXk6IGZvcm1hdFBsYXliYWNrS2V5fSA6IHt9KSxcbiAgICBwcm9jZXNzaW5nU3RhdHVzLFxuICAgIC4uLihzb3VyY2VEZWxldGVkID8ge3NvdXJjZUtleTogJycsIHVwbG9hZEtleTogJyd9IDoge30pLFxuICAgIHN0cmVhbVR5cGVcbiAgfSBhcyBQYXJ0aWFsPFZpZGVvVHlwZT4gYXMgVmlkZW9UeXBlKTtcblxuICBpZihwcm9jZXNzaW5nU3RhdHVzID09PSAncmVhZHknKSB7XG4gICAgYXdhaXQgZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlKGNvbnRleHQsIHVwZGF0ZWRWaWRlbyk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlZFZpZGVvO1xufTtcblxuZXhwb3J0IGNvbnN0IGZhaWxWaWRlb1Byb2Nlc3NpbmcgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG5cbiAgaWYoIWZvcm1hdFZpZGVvSWQpIHtcbiAgICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGZvcm1hdFZpZGVvSWQsIHtcbiAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICBwcm9jZXNzaW5nU3RhdHVzOiAnZmFpbGVkJ1xuICB9IGFzIFBhcnRpYWw8VmlkZW9UeXBlPiBhcyBWaWRlb1R5cGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IHF1ZXVlVmlkZW9UcmFuc2NvZGVCYWNrZmlsbCA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgbGltaXQ6IG51bWJlciA9IDEwXG4pOiBQcm9taXNlPHN0cmluZ1tdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdxdWV1ZVZpZGVvVHJhbnNjb2RlQmFja2ZpbGwnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNhZmVMaW1pdCA9IE1hdGgubWF4KDEsIE1hdGgubWluKE51bWJlcihsaW1pdCB8fCAxMCksIDUwKSk7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHYgSU4gdmlkZW9zXG4gICAgICBGSUxURVIgdi51cGxvYWRTdGF0dXMgPT0gXCJ1cGxvYWRlZFwiXG4gICAgICBGSUxURVIgdi5wcm9jZXNzaW5nU3RhdHVzICE9IFwicmVhZHlcIlxuICAgICAgRklMVEVSIHYuZmlsZVR5cGUgIT0gXCJ2aWRlby9tcDRcIlxuICAgICAgRklMVEVSICFIQVModiwgXCJtZWRpYUNvbnZlcnRKb2JJZFwiKSB8fCB2Lm1lZGlhQ29udmVydEpvYklkID09IFwiXCJcbiAgICAgIFNPUlQgdi5hZGRlZCBERVNDXG4gICAgICBMSU1JVCAke3NhZmVMaW1pdH1cbiAgICAgIFJFVFVSTiB2XG4gIGA7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBsaXN0ID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBWaWRlb1R5cGVbXSk7XG4gICAgY29uc3Qgam9iSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgZm9yKGNvbnN0IHZpZGVvIG9mIGxpc3QpIHtcbiAgICAgIGNvbnN0IGpvYklkID0gYXdhaXQgY3JlYXRlVmlkZW9UcmFuc2NvZGVKb2IoY29udGV4dCwgdmlkZW8pO1xuXG4gICAgICBpZihqb2JJZCkge1xuICAgICAgICBqb2JJZHMucHVzaChqb2JJZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGpvYklkcztcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXBwVmlkZW9VcmwgPSAoe1xuICBidWNrZXQsXG4gIGRpcmVjdG9yeSA9ICd2aWRlb3MnLFxuICBmaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICBpc1RodW1iID0gZmFsc2UsXG4gIHR5cGUsXG4gIHR5cGVJZCxcbiAgdmlkZW9JZFxufTogVmlkZW9VcmxEYXRhKTogc3RyaW5nID0+IHtcbiAgaWYoIXR5cGUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZighdmlkZW9JZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGJ1Y2tldE5hbWUgPSBidWNrZXQgfHwgQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgY29uc3QgdmlkZW9OYW1lID0gZ2V0VmlkZW9GaWxlbmFtZSh2aWRlb0lkLCBmaWxlVHlwZSk7XG4gIGNvbnN0IHZpZGVvVXJsID0gQ29uZmlnLmdldCgnaW1hZ2UudXJsJykgfHwgYGh0dHBzOi8vczMuYW1hem9uYXdzLmNvbS8ke2J1Y2tldE5hbWV9YDtcblxuICBpZih0eXBlID09PSAnYXBwcycpIHtcbiAgICByZXR1cm4gYCR7dmlkZW9Vcmx9LyR7dHlwZX0vJHtkaXJlY3Rvcnl9LyR7dmlkZW9OYW1lfWA7XG4gIH1cblxuICByZXR1cm4gYCR7dmlkZW9Vcmx9LyR7dHlwZX0vJHt0eXBlSWR9LyR7ZGlyZWN0b3J5fS8ke3ZpZGVvTmFtZX1gO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpZGVvVXJsID0gYXN5bmMgKHtcbiAgYnVja2V0LFxuICBmaWxlVHlwZSA9ICd2aWRlby9tcDQnLFxuICBpbWFnZURpciA9ICd2aWRlb3MnLFxuICB2aWRlb0RpciA9ICd2aWRlb3MnLFxuICB2aWRlb0lkLFxuICB0eXBlLFxuICB0eXBlSWQsXG4gIHVybFR5cGUgPSAncHVibGljJ1xufTogYW55KTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgaWYoIXZpZGVvSWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBrZXlEaXIgPSB2aWRlb0RpciB8fCBpbWFnZURpciB8fCAndmlkZW9zJztcbiAgY29uc3QgdmlkZW9LZXkgPSBgJHt0eXBlfS8ke3R5cGVJZH0vJHtrZXlEaXJ9LyR7Z2V0VmlkZW9GaWxlbmFtZSh2aWRlb0lkLCBmaWxlVHlwZSl9YDtcblxuICBzd2l0Y2godXJsVHlwZSkge1xuICAgIGNhc2UgJ3NpZ25lZCc6IHtcbiAgICAgIGNvbnN0IGRlZmF1bHRCdWNrZXQgPSBDb25maWcuZ2V0KCdpbWFnZS5idWNrZXQnKSB8fCAnZGV2LnJlYWt0b3IuaW8nO1xuICAgICAgcmV0dXJuIGF3YWl0IHMzR2V0U2lnbmVkVXJsKHtCdWNrZXQ6IGJ1Y2tldCB8fCBkZWZhdWx0QnVja2V0LCBFeHBpcmVzOiA2MCAqIDYwLCBLZXk6IHZpZGVvS2V5fSk7XG4gICAgfVxuICAgIGNhc2UgJ3B1YmxpYyc6IHtcbiAgICAgIHJldHVybiBgaHR0cHM6Ly9ib3guJHtDb25maWcuZ2V0KCdhcHAudXJsJyl9LyR7dmlkZW9LZXl9YDtcbiAgICB9XG4gICAgY2FzZSAnZGV2Jzoge1xuICAgICAgcmV0dXJuIGBodHRwczovL3MzLmFtYXpvbmF3cy5jb20vZGV2LiR7Q29uZmlnLmdldCgnYXBwLnVybCcpfS8ke3ZpZGVvS2V5fWA7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWRlb1NpZ25lZEtleVVybCA9IGFzeW5jIChrZXk6IHN0cmluZyA9ICcnLCBidWNrZXQ/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBjb25zdCB2aWRlb0tleSA9IFN0cmluZyhrZXkgfHwgJycpLnRyaW0oKTtcblxuICBpZighdmlkZW9LZXkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBkZWZhdWx0QnVja2V0ID0gQ29uZmlnLmdldCgnaW1hZ2UuYnVja2V0JykgfHwgJ2Rldi5yZWFrdG9yLmlvJztcbiAgcmV0dXJuIGF3YWl0IHMzR2V0U2lnbmVkVXJsKHtCdWNrZXQ6IGJ1Y2tldCB8fCBkZWZhdWx0QnVja2V0LCBFeHBpcmVzOiA2MCAqIDYwLCBLZXk6IHZpZGVvS2V5fSk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2F2ZVZpZGVvID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIGJ1ZmZlcjogQnVmZmVyLFxuICBmaWxlVHlwZTogc3RyaW5nID0gJ3ZpZGVvL21wNCcsIHMzT3B0aW9ucz86IFB1dE9iamVjdENvbW1hbmRJbnB1dFxuKTogUHJvbWlzZTxWaWRlb1R5cGU+ID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBjb25zdCB2aWRlb09iajogUHV0T2JqZWN0Q29tbWFuZElucHV0ID0ge1xuICAgIEJvZHk6IGJ1ZmZlcixcbiAgICBCdWNrZXQ6IG51bGwsXG4gICAgQ29udGVudFR5cGU6IGZpbGVUeXBlLFxuICAgIC4uLihzM09wdGlvbnMgfHwge30pLFxuICAgIEtleTogZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2aWRlb0lkLCBmaWxlVHlwZSwgJ3ZpZGVvcycpXG4gIH07XG5cbiAgYXdhaXQgczNQdXQodmlkZW9PYmopO1xuXG4gIHJldHVybiB7XG4gICAgZmlsZVNpemU6IGJ1ZmZlci5sZW5ndGgsXG4gICAgZmlsZVR5cGUsXG4gICAgdmlkZW9JZFxuICB9IGFzIHVua25vd24gYXMgVmlkZW9UeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlICYge2ZpbGVOYW1lPzogc3RyaW5nOyBmaWxlU2l6ZT86IG51bWJlcjsgcGFydENvdW50PzogbnVtYmVyfSxcbiAgcGFydENvdW50OiBudW1iZXIgPSAxXG4pOiBQcm9taXNlPFZpZGVvTXVsdGlwYXJ0VXBsb2FkVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY3JlYXRlVmlkZW9NdWx0aXBhcnRVcGxvYWQnO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkID0gJyd9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgZmlsZVNpemUsXG4gICAgZmlsZVR5cGUgPSAndmlkZW8vbXA0JyxcbiAgICBpdGVtSWQsXG4gICAgaXRlbVR5cGUsXG4gICAgcHJpdmFjeSxcbiAgICB0aHVtYkJhc2U2NCA9ICcnLFxuICAgIHRodW1iRmlsZVR5cGUgPSAnaW1hZ2UvanBlZycsXG4gICAgdHlwZSA9ICd2aWRlbycsXG4gICAgdmlkZW9JZFxuICB9ID0gdmlkZW87XG4gIGNvbnN0IGZvcm1hdFZpZGVvSWQgPSBwYXJzZUlkKHZpZGVvSWQpIHx8IGNyZWF0ZUhhc2goYHZpZGVvLSR7c2Vzc2lvbklkfS0ke0RhdGUubm93KCl9LSR7U3RyaW5nKHZpZGVvPy5maWxlTmFtZSB8fCAnJyl9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSwgMTYpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuICBjb25zdCBrZXkgPSBnZXRWaWRlb1VwbG9hZEtleShzZXNzaW9uSWQsIGZvcm1hdFZpZGVvSWQsIGZpbGVUeXBlKTtcbiAgY29uc3Qgc2FmZVBhcnRDb3VudCA9IE1hdGgubWF4KDEsIE1hdGgubWluKE51bWJlcihwYXJ0Q291bnQgfHwgdmlkZW8/LnBhcnRDb3VudCB8fCAxKSwgMTAwMDApKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHVwbG9hZCA9IGF3YWl0IHMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkKHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIENvbnRlbnRUeXBlOiBmaWxlVHlwZSxcbiAgICAgIEtleToga2V5LFxuICAgICAgTWV0YWRhdGE6IHtcbiAgICAgICAgaXRlbUlkOiBmb3JtYXRJdGVtSWQgfHwgJycsXG4gICAgICAgIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSB8fCAnJyxcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWQsXG4gICAgICAgIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWRcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB1cGxvYWRJZCA9IFN0cmluZyh1cGxvYWQ/LlVwbG9hZElkIHx8ICcnKTtcblxuICAgIGlmKCF1cGxvYWRJZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIHZpZGVvIHVwbG9hZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IGhhc1RodW1iID0gYXdhaXQgc2F2ZVZpZGVvVGh1bWJuYWlsKGNvbnRleHQsIGZvcm1hdFZpZGVvSWQsIHRodW1iQmFzZTY0LCB0aHVtYkZpbGVUeXBlKTtcbiAgICBjb25zdCBpbnNlcnQ6IFZpZGVvVHlwZSA9IHtcbiAgICAgIF9rZXk6IGZvcm1hdFZpZGVvSWQsXG4gICAgICBhZGRlZDogbm93LFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBmaWxlU2l6ZSxcbiAgICAgIGZpbGVUeXBlLFxuICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgIHByaXZhY3ksXG4gICAgICBwcm9jZXNzaW5nU3RhdHVzOiAncGVuZGluZ191cGxvYWQnLFxuICAgICAgc291cmNlS2V5OiBrZXksXG4gICAgICAuLi4oaGFzVGh1bWIgPyB7dGh1bWJGaWxlVHlwZX0gOiB7fSksXG4gICAgICB0eXBlLFxuICAgICAgdXBsb2FkSWQsXG4gICAgICB1cGxvYWRLZXk6IGtleSxcbiAgICAgIHVwbG9hZFN0YXR1czogJ3VwbG9hZGluZycsXG4gICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgIH0gYXMgVmlkZW9UeXBlO1xuICAgIGNvbnN0IG5ld1ZpZGVvID0gYXdhaXQgYWRkSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBpbnNlcnQpO1xuXG4gICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICBhd2FpdCBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0TnVtYmVycyA9IEFycmF5LmZyb20oe2xlbmd0aDogc2FmZVBhcnRDb3VudH0sIChfdmFsdWUsIGluZGV4KSA9PiBpbmRleCArIDEpO1xuICAgIGNvbnN0IHBhcnRVcmxzID0gYXdhaXQgZ2V0VmlkZW9QYXJ0VXJscyhrZXksIHVwbG9hZElkLCBwYXJ0TnVtYmVycyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgYnVja2V0OiBzM0dldEJ1Y2tldCgpLFxuICAgICAga2V5LFxuICAgICAgcGFydFNpemU6IERFRkFVTFRfVklERU9fVVBMT0FEX1BBUlRfU0laRSxcbiAgICAgIHBhcnRVcmxzLFxuICAgICAgdXBsb2FkSWQsXG4gICAgICB2aWRlbzogbmV3VmlkZW8sXG4gICAgICB2aWRlb0lkOiBmb3JtYXRWaWRlb0lkXG4gICAgfTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpIGFzIHVua25vd24gYXMgVmlkZW9NdWx0aXBhcnRVcGxvYWRUeXBlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VmlkZW9NdWx0aXBhcnRVcGxvYWRQYXJ0VXJscyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmlkZW9JZDogc3RyaW5nLFxuICB1cGxvYWRJZDogc3RyaW5nLFxuICBwYXJ0TnVtYmVyczogbnVtYmVyW10gPSBbXVxuKTogUHJvbWlzZTxWaWRlb1VwbG9hZFBhcnRVcmxbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VmlkZW9NdWx0aXBhcnRVcGxvYWRQYXJ0VXJscyc7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB2aWRlbyA9IGF3YWl0IGdldFZpZGVvVXBsb2FkRG9jKGNvbnRleHQsIHZpZGVvSWQpO1xuICAgIGNvbnN0IGtleSA9IFN0cmluZyh2aWRlbz8udXBsb2FkS2V5IHx8IHZpZGVvPy5zb3VyY2VLZXkgfHwgZ2V0VmlkZW9VcGxvYWRLZXkoU3RyaW5nKHZpZGVvPy51c2VySWQgfHwgJycpLCBwYXJzZUlkKHZpZGVvSWQpLCB2aWRlbz8uZmlsZVR5cGUpKTtcbiAgICBjb25zdCBmb3JtYXRVcGxvYWRJZCA9IFN0cmluZyh1cGxvYWRJZCB8fCB2aWRlbz8udXBsb2FkSWQgfHwgJycpO1xuXG4gICAgaWYoIWtleSB8fCAhZm9ybWF0VXBsb2FkSWQpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXdhaXQgZ2V0VmlkZW9QYXJ0VXJscyhrZXksIGZvcm1hdFVwbG9hZElkLCBwYXJ0TnVtYmVycy5tYXAoKHBhcnROdW1iZXIpID0+IE51bWJlcihwYXJ0TnVtYmVyKSkuZmlsdGVyKEJvb2xlYW4pKTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpIGFzIHVua25vd24gYXMgVmlkZW9VcGxvYWRQYXJ0VXJsW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb21wbGV0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlb0lkOiBzdHJpbmcsXG4gIHVwbG9hZElkOiBzdHJpbmcsXG4gIHBhcnRzOiBWaWRlb1VwbG9hZFBhcnRJbnB1dFtdID0gW11cbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdjb21wbGV0ZVZpZGVvTXVsdGlwYXJ0VXBsb2FkJztcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW9VcGxvYWREb2MoY29udGV4dCwgdmlkZW9JZCk7XG4gICAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG4gICAgY29uc3QgZm9ybWF0VXBsb2FkSWQgPSBTdHJpbmcodXBsb2FkSWQgfHwgdmlkZW8/LnVwbG9hZElkIHx8ICcnKTtcbiAgICBjb25zdCBrZXkgPSBTdHJpbmcodmlkZW8/LnVwbG9hZEtleSB8fCB2aWRlbz8uc291cmNlS2V5IHx8IGdldFZpZGVvVXBsb2FkS2V5KFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSwgZm9ybWF0VmlkZW9JZCwgdmlkZW8/LmZpbGVUeXBlKSk7XG4gICAgY29uc3QgdXBsb2FkUGFydHMgPSBwYXJ0c1xuICAgICAgLm1hcCgocGFydCkgPT4gKHtcbiAgICAgICAgRVRhZzogU3RyaW5nKHBhcnQ/LmV0YWcgfHwgJycpLnRyaW0oKSxcbiAgICAgICAgUGFydE51bWJlcjogTnVtYmVyKHBhcnQ/LnBhcnROdW1iZXIgfHwgMClcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydC5FVGFnICYmIHBhcnQuUGFydE51bWJlciA+IDApXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5QYXJ0TnVtYmVyIC0gYi5QYXJ0TnVtYmVyKTtcblxuICAgIGlmKCFrZXkgfHwgIWZvcm1hdFVwbG9hZElkIHx8ICF1cGxvYWRQYXJ0cy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTWlzc2luZyB2aWRlbyB1cGxvYWQgZGF0YS4nKTtcbiAgICB9XG5cbiAgICBhd2FpdCBzM0NvbXBsZXRlTXVsdGlwYXJ0VXBsb2FkKHtcbiAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgIEtleToga2V5LFxuICAgICAgTXVsdGlwYXJ0VXBsb2FkOiB7XG4gICAgICAgIFBhcnRzOiB1cGxvYWRQYXJ0c1xuICAgICAgfSxcbiAgICAgIFVwbG9hZElkOiBmb3JtYXRVcGxvYWRJZFxuICAgIH0pO1xuXG4gICAgY29uc3QgdXBkYXRlZFZpZGVvID0gYXdhaXQgdXBkYXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB7XG4gICAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICAgIC4uLihzaG91bGRUcmFuc2NvZGVWaWRlbyh2aWRlbylcbiAgICAgICAgPyB7cHJvY2Vzc2luZ1N0YXR1czogJ3F1ZXVlZCd9XG4gICAgICAgIDoge1xuICAgICAgICAgIHBsYXliYWNrRmlsZVR5cGU6IHZpZGVvPy5maWxlVHlwZSB8fCAndmlkZW8vbXA0JyxcbiAgICAgICAgICBwbGF5YmFja0tleToga2V5LFxuICAgICAgICAgIHByb2Nlc3NpbmdTdGF0dXM6ICdyZWFkeScsXG4gICAgICAgICAgc3RyZWFtVHlwZTogJ3Byb2dyZXNzaXZlJ1xuICAgICAgICB9KSxcbiAgICAgIHVwbG9hZFN0YXR1czogJ3VwbG9hZGVkJ1xuICAgIH0pO1xuXG4gICAgaWYoc2hvdWxkVHJhbnNjb2RlVmlkZW8odXBkYXRlZFZpZGVvKSkge1xuICAgICAgdm9pZCBjcmVhdGVWaWRlb1RyYW5zY29kZUpvYihjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIGVtaXRWaWRlb1Byb2Nlc3NpbmdDb21wbGV0ZShjb250ZXh0LCB1cGRhdGVkVmlkZW8pO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkVmlkZW87XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFib3J0VmlkZW9NdWx0aXBhcnRVcGxvYWQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZpZGVvSWQ6IHN0cmluZyxcbiAgdXBsb2FkSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhYm9ydFZpZGVvTXVsdGlwYXJ0VXBsb2FkJztcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZ2V0VmlkZW9VcGxvYWREb2MoY29udGV4dCwgdmlkZW9JZCk7XG4gICAgY29uc3QgZm9ybWF0VXBsb2FkSWQgPSBTdHJpbmcodXBsb2FkSWQgfHwgdmlkZW8/LnVwbG9hZElkIHx8ICcnKTtcbiAgICBjb25zdCBrZXkgPSBTdHJpbmcodmlkZW8/LnVwbG9hZEtleSB8fCB2aWRlbz8uc291cmNlS2V5IHx8IGdldFZpZGVvVXBsb2FkS2V5KFN0cmluZyh2aWRlbz8udXNlcklkIHx8ICcnKSwgcGFyc2VJZCh2aWRlb0lkKSwgdmlkZW8/LmZpbGVUeXBlKSk7XG5cbiAgICBpZihrZXkgJiYgZm9ybWF0VXBsb2FkSWQpIHtcbiAgICAgIGF3YWl0IHMzQWJvcnRNdWx0aXBhcnRVcGxvYWQoe1xuICAgICAgICBCdWNrZXQ6IG51bGwsXG4gICAgICAgIEtleToga2V5LFxuICAgICAgICBVcGxvYWRJZDogZm9ybWF0VXBsb2FkSWRcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGF3YWl0IHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgcGFyc2VJZCh2aWRlb0lkKSwge1xuICAgICAgbW9kaWZpZWQ6IERhdGUubm93KCksXG4gICAgICB1cGxvYWRTdGF0dXM6ICdhYm9ydGVkJ1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZFZpZGVvID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRWaWRlbyc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHt2aWRlb0lkLCBkZXNjcmlwdGlvbiwgYnVmZmVyLCBmaWxlVHlwZSwgcHJpdmFjeSwgdHlwZSA9ICd2aWRlbycsIHByb3ZpZGVyLCBleHRlcm5hbElkLCBleHRlcm5hbFVybH0gPSB2aWRlbztcblxuICBpZih0eXBlID09PSAnZXh0ZXJuYWwnKSB7XG4gICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICBfa2V5OiB2aWRlb0lkLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBleHRlcm5hbElkLFxuICAgICAgZXh0ZXJuYWxVcmwsXG4gICAgICBwcml2YWN5LFxuICAgICAgcHJvdmlkZXIsXG4gICAgICB0eXBlLFxuICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICB9IGFzIFZpZGVvVHlwZTtcblxuICAgIHJldHVybiBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydClcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgcmV0dXJuIHNhdmVWaWRlbyhjb250ZXh0LCB2aWRlb0lkLCBidWZmZXIsIGZpbGVUeXBlLCBzM09wdGlvbnMpXG4gICAgLnRoZW4oKHNhdmVkOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgIGNvbnN0IGluc2VydDogVmlkZW9UeXBlID0ge1xuICAgICAgICAuLi5zYXZlZCxcbiAgICAgICAgX2tleTogdmlkZW9JZCxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIGZpbGVUeXBlLFxuICAgICAgICBwcml2YWN5LFxuICAgICAgICB0eXBlLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfSBhcyBWaWRlb1R5cGU7XG5cbiAgICAgIHJldHVybiBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydClcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRWaWRlb0VkZ2UgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlKTogUHJvbWlzZTxvYmplY3Q+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZFZpZGVvRWRnZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge3ZpZGVvSWQsIGl0ZW1JZCwgaXRlbVR5cGV9ID0gdmlkZW9FZGdlO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBlZGdlSWQgPSBjcmVhdGVIYXNoKGBoYXNNZWRpYS12aWRlby0ke3ZpZGVvSWR9LSR7aXRlbUlkfS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSkudG9Mb3dlckNhc2UoKSBhcyBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgaXRlbURvY0lkID0gZ2V0RG9jSWQoZm9ybWF0SXRlbVR5cGUsIHtfa2V5OiBmb3JtYXRJdGVtSWR9KTtcbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHBhcnNlSWQodmlkZW9JZCk7XG4gIGNvbnN0IGZpbGVEb2NJZCA9IGB2aWRlb3MvJHtmb3JtYXRWaWRlb0lkfWA7XG5cbiAgY29uc3QgZWRnZTogVmlkZW9FZGdlVHlwZSA9IHtcbiAgICBfZnJvbTogaXRlbURvY0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZpbGVEb2NJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIGl0ZW1UeXBlLFxuICAgIHR5cGU6ICd2aWRlbydcbiAgfSBhcyBWaWRlb0VkZ2VUeXBlO1xuXG4gIGlmKGl0ZW1Eb2NJZCkge1xuICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgLnRoZW4oKGZpbGVFZGdlKSA9PiB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oRURHRVMuSEFTX01FRElBKS5kb2N1bWVudChmaWxlRWRnZSkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpZGVvID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB2aWRlbzogVmlkZW9UeXBlLFxuICBzM09wdGlvbnM/OiBQdXRPYmplY3RDb21tYW5kSW5wdXRcbik6IFByb21pc2U8VmlkZW9UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVWaWRlbyc7XG4gIGNvbnN0IHtzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBiYXNlNjQgPSAnJyxcbiAgICBidWZmZXI6IHZpZGVvQnVmZmVyLFxuICAgIGRlc2NyaXB0aW9uID0gJycsXG4gICAgZXh0ZXJuYWxJZCxcbiAgICBleHRlcm5hbFVybCxcbiAgICBmaWxlVHlwZSxcbiAgICBobHNLZXksXG4gICAgaXRlbUlkLFxuICAgIGl0ZW1UeXBlLFxuICAgIHBsYXliYWNrRmlsZVR5cGUsXG4gICAgcGxheWJhY2tLZXksXG4gICAgcHJvY2Vzc2luZ1N0YXR1cyxcbiAgICBwcml2YWN5LFxuICAgIHByb3ZpZGVyLFxuICAgIHN0cmVhbVR5cGUsXG4gICAgdHlwZSxcbiAgICB1cGxvYWRTdGF0dXMsXG4gICAgdXJsID0gJycsXG4gICAgdmlkZW9JZFxuICB9ID0gdmlkZW87XG5cbiAgY29uc3QgZm9ybWF0VmlkZW9JZCA9IHZpZGVvSWQgfHwgY3JlYXRlSGFzaChgdmlkZW8tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IEFyYW5nb0RiQ29sbGVjdGlvbiA9IHBhcnNlQ2hhcihpdGVtVHlwZSwgMTYpLnRvTG93ZXJDYXNlKCkgYXMgQXJhbmdvRGJDb2xsZWN0aW9uO1xuXG4gIGlmKHR5cGUgPT09ICdleHRlcm5hbCcgJiYgKGV4dGVybmFsSWQgfHwgZXh0ZXJuYWxVcmwpKSB7XG4gICAgY29uc3QgaW5zZXJ0OiBWaWRlb1R5cGUgPSB7XG4gICAgICBfa2V5OiBmb3JtYXRWaWRlb0lkLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBleHRlcm5hbElkLFxuICAgICAgZXh0ZXJuYWxVcmwsXG4gICAgICBwcml2YWN5LFxuICAgICAgcHJvdmlkZXIsXG4gICAgICB0eXBlLFxuICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgICB9IGFzIFZpZGVvVHlwZTtcblxuICAgIHJldHVybiBhZGRJdGVtPFZpZGVvVHlwZT4oY29udGV4dCwgJ3ZpZGVvcycsIGluc2VydClcbiAgICAgIC50aGVuKChuZXdWaWRlbzogVmlkZW9UeXBlKSA9PiB7XG4gICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgIGNvbnN0IHZpZGVvRWRnZTogVmlkZW9FZGdlVHlwZSA9IHt2aWRlb0lkOiBmb3JtYXRWaWRlb0lkLCBpdGVtSWQ6IGZvcm1hdEl0ZW1JZCwgaXRlbVR5cGU6IGZvcm1hdEl0ZW1UeXBlLCB0eXBlOiAndmlkZW8nfTtcbiAgICAgICAgICByZXR1cm4gYWRkVmlkZW9FZGdlKGNvbnRleHQsIHZpZGVvRWRnZSkudGhlbigoKSA9PiBuZXdWaWRlbyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ld1ZpZGVvO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuICB9XG5cbiAgaWYoYmFzZTY0IHx8IHZpZGVvQnVmZmVyKSB7XG4gICAgbGV0IGJ1ZmZlcjogQnVmZmVyID0gdmlkZW9CdWZmZXIgYXMgQnVmZmVyO1xuICAgIGlmKGJhc2U2NCkge1xuICAgICAgY29uc3QgZm9ybWF0QmFzZTY0ID0gYmFzZTY0LnN1YnN0cihiYXNlNjQuaW5kZXhPZignLCcpICsgMSk7XG4gICAgICBidWZmZXIgPSBCdWZmZXIuZnJvbShmb3JtYXRCYXNlNjQsICdiYXNlNjQnKTtcbiAgICB9XG5cbiAgICBsZXQgdXBkYXRlZEZpbGVUeXBlID0gZmlsZVR5cGU7XG4gICAgaWYoIWZpbGVUeXBlKSB7XG4gICAgICBjb25zdCB7ZmlsZVR5cGVGcm9tQnVmZmVyfSA9IGF3YWl0IGltcG9ydCgnZmlsZS10eXBlJyk7XG4gICAgICBjb25zdCB7bWltZX0gPSBhd2FpdCBmaWxlVHlwZUZyb21CdWZmZXIoYnVmZmVyKTtcbiAgICAgIHVwZGF0ZWRGaWxlVHlwZSA9IG1pbWU7XG4gICAgfVxuXG4gICAgY29uc3QgdlBhcmFtczogVmlkZW9UeXBlID0ge2J1ZmZlciwgZmlsZVR5cGU6IHVwZGF0ZWRGaWxlVHlwZSwgdXNlcklkOiBzZXNzaW9uSWQsIHZpZGVvSWQ6IGZvcm1hdFZpZGVvSWR9IGFzIFZpZGVvVHlwZTtcbiAgICByZXR1cm4gYWRkVmlkZW8oY29udGV4dCwgey4uLnZQYXJhbXMsIGRlc2NyaXB0aW9uLCBwcml2YWN5fSwgczNPcHRpb25zKVxuICAgICAgLnRoZW4oKG5ld1ZpZGVvOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgICAgaWYoZm9ybWF0SXRlbUlkICYmIGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgY29uc3QgdmlkZW9FZGdlOiBWaWRlb0VkZ2VUeXBlID0ge3ZpZGVvSWQ6IGZvcm1hdFZpZGVvSWQsIGl0ZW1JZDogZm9ybWF0SXRlbUlkLCBpdGVtVHlwZTogZm9ybWF0SXRlbVR5cGUsIHR5cGU6ICd2aWRlbyd9O1xuICAgICAgICAgIHJldHVybiBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKS50aGVuKCgpID0+IG5ld1ZpZGVvKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3VmlkZW87XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZih1cmwgIT09ICcnKSB7XG4gICAgbGV0IGNvbnRlbnRUeXBlO1xuICAgIHJldHVybiBodHRwR2V0KHVybClcbiAgICAgIC50aGVuKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBpZihyZXMuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JUeXBlcy5JTUFHRV9SRVFVRVNUKTtcbiAgICAgICAgfVxuICAgICAgICBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzLmdldCgnY29udGVudC10eXBlJyk7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKHJlcykgPT4gcmVzLmJ1ZmZlcigpKVxuICAgICAgLnRoZW4oKGJ1ZmZlcjogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHZQYXJhbXM6IFZpZGVvVHlwZSA9IHtidWZmZXIsIGRlc2NyaXB0aW9uLCBmaWxlVHlwZTogY29udGVudFR5cGUsIHByaXZhY3ksIHVzZXJJZDogc2Vzc2lvbklkLCB2aWRlb0lkOiBmb3JtYXRWaWRlb0lkfSBhcyBWaWRlb1R5cGU7XG4gICAgICAgIHJldHVybiBhZGRWaWRlbyhjb250ZXh0LCB2UGFyYW1zLCBzM09wdGlvbnMpXG4gICAgICAgICAgLnRoZW4oKG5ld1ZpZGVvOiBWaWRlb1R5cGUpID0+IHtcbiAgICAgICAgICAgIGlmKGZvcm1hdEl0ZW1JZCAmJiBmb3JtYXRJdGVtVHlwZSkge1xuICAgICAgICAgICAgICBjb25zdCB2aWRlb0VkZ2U6IFZpZGVvRWRnZVR5cGUgPSB7dmlkZW9JZDogZm9ybWF0VmlkZW9JZCwgaXRlbUlkOiBmb3JtYXRJdGVtSWQsIGl0ZW1UeXBlOiBmb3JtYXRJdGVtVHlwZSwgdHlwZTogJ3ZpZGVvJ307XG4gICAgICAgICAgICAgIHJldHVybiBhZGRWaWRlb0VkZ2UoY29udGV4dCwgdmlkZW9FZGdlKS50aGVuKCgpID0+IG5ld1ZpZGVvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdWaWRlbztcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgfSBlbHNlIGlmKHZpZGVvSWQgIT09ICcnKSB7XG4gICAgY29uc3QgdXBkYXRlID0ge1xuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAuLi4oaGxzS2V5ICE9PSB1bmRlZmluZWQgPyB7aGxzS2V5fSA6IHt9KSxcbiAgICAgIC4uLihwbGF5YmFja0ZpbGVUeXBlICE9PSB1bmRlZmluZWQgPyB7cGxheWJhY2tGaWxlVHlwZX0gOiB7fSksXG4gICAgICAuLi4ocGxheWJhY2tLZXkgIT09IHVuZGVmaW5lZCA/IHtwbGF5YmFja0tleX0gOiB7fSksXG4gICAgICAuLi4ocHJvY2Vzc2luZ1N0YXR1cyAhPT0gdW5kZWZpbmVkID8ge3Byb2Nlc3NpbmdTdGF0dXN9IDoge30pLFxuICAgICAgLi4uKHByaXZhY3kgIT09IHVuZGVmaW5lZCA/IHtwcml2YWN5fSA6IHt9KSxcbiAgICAgIC4uLihzdHJlYW1UeXBlICE9PSB1bmRlZmluZWQgPyB7c3RyZWFtVHlwZX0gOiB7fSksXG4gICAgICAuLi4odXBsb2FkU3RhdHVzICE9PSB1bmRlZmluZWQgPyB7dXBsb2FkU3RhdHVzfSA6IHt9KVxuICAgIH07XG4gICAgcmV0dXJuIHVwZGF0ZUl0ZW08VmlkZW9UeXBlPihjb250ZXh0LCAndmlkZW9zJywgZm9ybWF0VmlkZW9JZCwgdXBkYXRlKVxuICAgICAgLnRoZW4oKHVwZGF0ZWRWaWRlbykgPT4ge1xuICAgICAgICBpZihwcm9jZXNzaW5nU3RhdHVzID09PSAncmVhZHknKSB7XG4gICAgICAgICAgdm9pZCBlbWl0VmlkZW9Qcm9jZXNzaW5nQ29tcGxldGUoY29udGV4dCwgdXBkYXRlZFZpZGVvKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1cGRhdGVkVmlkZW87XG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVWaWRlbyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB2aWRlb0lkOiBzdHJpbmcpOiBQcm9taXNlPFZpZGVvVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZGVsZXRlVmlkZW8nO1xuICBjb25zdCB7c2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRWaWRlb0lkID0gcGFyc2VJZCh2aWRlb0lkKTtcblxuICB0cnkge1xuICAgIGNvbnN0IHZpZGVvID0gYXdhaXQgZGVsZXRlSXRlbTxWaWRlb1R5cGU+KGNvbnRleHQsICd2aWRlb3MnLCBmb3JtYXRWaWRlb0lkLCB7XG4gICAgICBjYXNjYWRlOiBbRURHRVMuSEFTX01FRElBLCBFREdFUy5IQVNfUkVBQ1RJT05dLFxuICAgICAgb3duZXJzaGlwOiB0cnVlXG4gICAgfSk7XG5cbiAgICBpZih2aWRlbykge1xuICAgICAgY29uc3Qge19rZXk6IHZLZXksIGZpbGVUeXBlLCBobHNLZXksIHBsYXliYWNrS2V5LCBzb3VyY2VLZXksIHRodW1iRmlsZVR5cGUsIHVwbG9hZEtleX0gPSB2aWRlbztcbiAgICAgIGNvbnN0IGtleXMgPSBbXG4gICAgICAgIHNvdXJjZUtleSxcbiAgICAgICAgdXBsb2FkS2V5LFxuICAgICAgICBwbGF5YmFja0tleSxcbiAgICAgICAgaGxzS2V5LFxuICAgICAgICBgdXNlcnMvJHtzZXNzaW9uSWR9L3ZpZGVvcy8ke3ZLZXl9Lm1wNGAsXG4gICAgICAgIGZpbGVUeXBlID8gZ2V0UGF0aFVzZXJWaWRlb3Moc2Vzc2lvbklkLCB2S2V5LCBmaWxlVHlwZSwgJ3ZpZGVvcycpIDogJycsXG4gICAgICAgIHRodW1iRmlsZVR5cGUgPyBnZXRQYXRoVXNlclZpZGVvcyhzZXNzaW9uSWQsIHZLZXksIHRodW1iRmlsZVR5cGUsICd2aWRlby10aHVtYnMnKSA6ICcnXG4gICAgICBdXG4gICAgICAgIC5tYXAoKGtleSkgPT4gU3RyaW5nKGtleSB8fCAnJykudHJpbSgpKVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgIC5maWx0ZXIoKGtleSwgaW5kZXgsIGxpc3QpID0+IGxpc3QuaW5kZXhPZihrZXkpID09PSBpbmRleCk7XG4gICAgICBjb25zdCBwYXJhbXM6IERlbGV0ZU9iamVjdHNDb21tYW5kSW5wdXQgPSB7XG4gICAgICAgIEJ1Y2tldDogbnVsbCxcbiAgICAgICAgRGVsZXRlOiB7XG4gICAgICAgICAgT2JqZWN0czoga2V5cy5tYXAoKEtleSkgPT4gKHtLZXl9KSksXG4gICAgICAgICAgUXVpZXQ6IHRydWVcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiBzM0RlbGV0ZUxpc3QocGFyYW1zKS50aGVuKCgpID0+IHZpZGVvKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbCBhcyB1bmtub3duIGFzIFZpZGVvVHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuIl0sIm5hbWVzIjpbIkNyZWF0ZUpvYkNvbW1hbmQiLCJEZXNjcmliZUVuZHBvaW50c0NvbW1hbmQiLCJNZWRpYUNvbnZlcnRDbGllbnQiLCJnZXQiLCJodHRwR2V0IiwiY3JlYXRlSGFzaCIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUNoYXIiLCJwYXJzZUlkIiwicGFyc2VTdHJpbmciLCJhcWwiLCJsaXRlcmFsIiwiQ29uZmlnIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsImdldENvbm5lY3Rpb25zQnlVc2VyIiwid3NDbGllbnQiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJidWlsZFJlYWN0aW9uQ291bnRRdWVyeSIsImJ1aWxkVGFnc1F1ZXJ5IiwiZ2V0RG9jSWQiLCJnZXRMaW1pdCIsInVzZURiIiwiZ2V0QXdzQ3JlZGVudGlhbHMiLCJhZGRJdGVtIiwiZGVsZXRlSXRlbSIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJnZXRQZXJzb25hUmVsYXRpb25zaGlwU3RhdGUiLCJzM0Fib3J0TXVsdGlwYXJ0VXBsb2FkIiwiczNDb21wbGV0ZU11bHRpcGFydFVwbG9hZCIsInMzQ3JlYXRlTXVsdGlwYXJ0VXBsb2FkIiwiczNEZWxldGUiLCJzM0RlbGV0ZUxpc3QiLCJzM0dldEJ1Y2tldCIsInMzR2V0U2lnbmVkVXJsIiwiczNHZXRVcGxvYWRQYXJ0U2lnbmVkVXJsIiwiczNQdXQiLCJoYXNTdWJzY3JpcHRpb25Ub0l0ZW0iLCJldmVudENhdGVnb3J5IiwiaGFzTWVkaWFDb2xsZWN0aW9uIiwiSEFTX01FRElBIiwiREVGQVVMVF9WSURFT19VUExPQURfUEFSVF9TSVpFIiwiVklERU9fUExBWUJBQ0tfRElSIiwibWVkaWFDb252ZXJ0RW5kcG9pbnQiLCJnZXRNZWRpYUNvbnZlcnRDbGllbnQiLCJlbmRwb2ludCIsImNyZWRlbnRpYWxzIiwicmVnaW9uIiwiZ2V0TWVkaWFDb252ZXJ0RW5kcG9pbnQiLCJjbGllbnQiLCJlbmRwb2ludHMiLCJzZW5kIiwiTWF4UmVzdWx0cyIsIkVuZHBvaW50cyIsIlVybCIsImdldFZpZGVvTWVkaWFJdGVtRG9jSWRzIiwiaXRlbUlkIiwicGFyc2VkRG9jSWQiLCJpdGVtS2V5IiwiVVNFUlMiLCJQRVJTT05BUyIsIm5vcm1hbGl6ZVZpZGVvUHJpdmFjeSIsInByaXZhY3kiLCJTdHJpbmciLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJjYW5WaWV3VmlkZW8iLCJ2aWRlbyIsInZpZXdlclVzZXJJZCIsImFjY2VzcyIsImlzT3duZXIiLCJ1c2VySWQiLCJjYW5WaWV3RnJpZW5kcyIsImNhblZpZXdWaXAiLCJyZXNvbHZlVmlkZW9WaWV3ZXJBY2Nlc3MiLCJjb250ZXh0IiwibGlzdCIsInNlc3Npb25Vc2VySWQiLCJvd25lclVzZXJJZCIsIm1lZGlhSXRlbUtleSIsIl9tZWRpYUl0ZW1LZXkiLCJtZWRpYUl0ZW1UeXBlIiwiX21lZGlhSXRlbVR5cGUiLCJyZWxhdGlvbnNoaXAiLCJpc0ZyaWVuZCIsInBhcnNlVmlkZW9PcHRpb25zIiwib3B0aW9ucyIsImZyb20iLCJ0byIsInR5cGUiLCJsaW1pdCIsImdldFZpZGVvT3B0aW9uYWwiLCJmaWVsZHMiLCJyZWR1Y2UiLCJzZWxlY3RzIiwiZmllbGQiLCJpbmNsdWRlcyIsInJlYWN0aW9uUXVlcnkiLCJyZXBsYWNlIiwicXVlcmllcyIsInB1c2giLCJvYmplY3RzIiwidGFnc1F1ZXJ5IiwiZ2V0VmlkZW9zQnlVc2VyIiwiYWN0aW9uIiwiZm9ybWF0VXNlcklkIiwiY3VzdG9tUXVlcmllcyIsInNvcnQiLCJkaXJlY3Rpb24iLCJjdXN0b21PYmplY3RzIiwiY2F0Y2giLCJlcnJvciIsImNhdGVnb3J5IiwidmFsdWUiLCJEQVRBQkFTRV9FUlJPUiIsImdldFZpZGVvQ291bnRCeUl0ZW0iLCJkYXRhYmFzZU5hbWUiLCJpdGVtRG9jSWRzIiwiYXFsUXJ5IiwicXVlcnkiLCJ0aGVuIiwiY3Vyc29yIiwibmV4dCIsImNvdW50IiwiZ2V0VmlkZW9zQnlJdGVtIiwic2Vzc2lvbiIsInNlbGVjdE9iamVjdHMiLCJzZWxlY3RRdWVyaWVzIiwiam9pbiIsImxlbmd0aCIsImFsbCIsImZpbHRlciIsImdldFZpZGVvTGlzdEJ5UmVhY3Rpb25zIiwicmVhY3Rpb25zIiwic2Vzc2lvbklkIiwiZm9ybWF0U2Vzc2lvbklkIiwiZm9ybWF0UmVhY3Rpb25zIiwibWFwIiwicmVhY3Rpb25OYW1lIiwiZmlsdGVyQnkiLCJKU09OIiwic3RyaW5naWZ5IiwicGFyYW1zIiwiZ2V0VmlkZW8iLCJ2aWRlb0lkIiwiZm9ybWF0VmlkZW9JZCIsIl9rZXkiLCJnZXRQYXRoVXNlclZpZGVvcyIsInZpZGVvVHlwZSIsImRpciIsImZpbGVuYW1lIiwiZ2V0VmlkZW9GaWxlbmFtZSIsImdldFZpZGVvVXBsb2FkS2V5IiwiZmlsZVR5cGUiLCJzYXZlVmlkZW9UaHVtYm5haWwiLCJ0aHVtYkJhc2U2NCIsInRodW1iRmlsZVR5cGUiLCJmb3JtYXRCYXNlNjQiLCJzdWJzdHIiLCJpbmRleE9mIiwiYnVmZmVyIiwiQnVmZmVyIiwiQm9keSIsIkJ1Y2tldCIsIkNvbnRlbnRUeXBlIiwiS2V5IiwiZ2V0VmlkZW9VcGxvYWREb2MiLCJFcnJvciIsIklOVkFMSURfQVVUSEVOVElDQVRJT04iLCJnZXRWaWRlb1BhcnRVcmxzIiwia2V5IiwidXBsb2FkSWQiLCJwYXJ0TnVtYmVycyIsIlByb21pc2UiLCJwYXJ0TnVtYmVyIiwidXJsIiwiUGFydE51bWJlciIsIlVwbG9hZElkIiwiZW1pdFZpZGVvUHJvY2Vzc2luZ0NvbXBsZXRlIiwiY29ubmVjdGlvbnMiLCJjb25uZWN0aW9uSWRzIiwiY29ubmVjdGlvbiIsImNvbm5lY3Rpb25JZCIsInNvY2tldElkIiwiQm9vbGVhbiIsImluZGV4IiwiZGF0YSIsImdldFZpZGVvUGxheWJhY2tLZXkiLCJkZWxldGVWaWRlb1NvdXJjZU9iamVjdCIsInNvdXJjZUtleSIsInVwbG9hZEtleSIsInBsYXliYWNrS2V5Iiwic2hvdWxkVHJhbnNjb2RlVmlkZW8iLCJjcmVhdGVWaWRlb1RyYW5zY29kZUpvYiIsInJvbGVBcm4iLCJidWNrZXQiLCJtb2RpZmllZCIsIkRhdGUiLCJub3ciLCJwcm9jZXNzaW5nRXJyb3IiLCJwcm9jZXNzaW5nU3RhdHVzIiwicXVldWUiLCJvdXRwdXREZXN0aW5hdGlvbiIsImpvYiIsIlF1ZXVlIiwiUm9sZSIsIlNldHRpbmdzIiwiSW5wdXRzIiwiQXVkaW9TZWxlY3RvcnMiLCJEZWZhdWx0U2VsZWN0aW9uIiwiRmlsZUlucHV0IiwiVGltZWNvZGVTb3VyY2UiLCJWaWRlb1NlbGVjdG9yIiwiUm90YXRlIiwiT3V0cHV0R3JvdXBzIiwiTmFtZSIsIk91dHB1dEdyb3VwU2V0dGluZ3MiLCJGaWxlR3JvdXBTZXR0aW5ncyIsIkRlc3RpbmF0aW9uIiwiVHlwZSIsIk91dHB1dHMiLCJBdWRpb0Rlc2NyaXB0aW9ucyIsIkF1ZGlvU291cmNlTmFtZSIsIkNvZGVjU2V0dGluZ3MiLCJBYWNTZXR0aW5ncyIsIkJpdHJhdGUiLCJDb2RpbmdNb2RlIiwiU2FtcGxlUmF0ZSIsIkNvZGVjIiwiQ29udGFpbmVyU2V0dGluZ3MiLCJDb250YWluZXIiLCJNcDRTZXR0aW5ncyIsIlZpZGVvRGVzY3JpcHRpb24iLCJIMjY0U2V0dGluZ3MiLCJNYXhCaXRyYXRlIiwiTnVtYmVyIiwiUmF0ZUNvbnRyb2xNb2RlIiwiU2NlbmVDaGFuZ2VEZXRlY3QiLCJRdWFsaXR5VHVuaW5nTGV2ZWwiLCJVc2VyTWV0YWRhdGEiLCJqb2JJZCIsIkpvYiIsIklkIiwibWVkaWFDb252ZXJ0Sm9iSWQiLCJwbGF5YmFja0ZpbGVUeXBlIiwic3RyZWFtVHlwZSIsIm1lc3NhZ2UiLCJjb21wbGV0ZVZpZGVvUHJvY2Vzc2luZyIsImhsc0tleSIsImN1cnJlbnRWaWRlbyIsImZvcm1hdFBsYXliYWNrS2V5Iiwic291cmNlRGVsZXRlZCIsInVwZGF0ZWRWaWRlbyIsImZhaWxWaWRlb1Byb2Nlc3NpbmciLCJxdWV1ZVZpZGVvVHJhbnNjb2RlQmFja2ZpbGwiLCJzYWZlTGltaXQiLCJNYXRoIiwibWF4IiwibWluIiwiam9iSWRzIiwiZ2V0QXBwVmlkZW9VcmwiLCJkaXJlY3RvcnkiLCJpc1RodW1iIiwidHlwZUlkIiwiYnVja2V0TmFtZSIsInZpZGVvTmFtZSIsInZpZGVvVXJsIiwiZ2V0VmlkZW9VcmwiLCJpbWFnZURpciIsInZpZGVvRGlyIiwidXJsVHlwZSIsImtleURpciIsInZpZGVvS2V5IiwiZGVmYXVsdEJ1Y2tldCIsIkV4cGlyZXMiLCJnZXRWaWRlb1NpZ25lZEtleVVybCIsInNhdmVWaWRlbyIsInMzT3B0aW9ucyIsInZpZGVvT2JqIiwiZmlsZVNpemUiLCJjcmVhdGVWaWRlb011bHRpcGFydFVwbG9hZCIsInBhcnRDb3VudCIsImRlc2NyaXB0aW9uIiwiaXRlbVR5cGUiLCJmaWxlTmFtZSIsImZvcm1hdEl0ZW1JZCIsImZvcm1hdEl0ZW1UeXBlIiwic2FmZVBhcnRDb3VudCIsInVwbG9hZCIsIk1ldGFkYXRhIiwiaGFzVGh1bWIiLCJpbnNlcnQiLCJhZGRlZCIsInVwbG9hZFN0YXR1cyIsIm5ld1ZpZGVvIiwidmlkZW9FZGdlIiwiYWRkVmlkZW9FZGdlIiwiQXJyYXkiLCJfdmFsdWUiLCJwYXJ0VXJscyIsInBhcnRTaXplIiwiZ2V0VmlkZW9NdWx0aXBhcnRVcGxvYWRQYXJ0VXJscyIsImZvcm1hdFVwbG9hZElkIiwiY29tcGxldGVWaWRlb011bHRpcGFydFVwbG9hZCIsInBhcnRzIiwidXBsb2FkUGFydHMiLCJwYXJ0IiwiRVRhZyIsImV0YWciLCJhIiwiYiIsIk11bHRpcGFydFVwbG9hZCIsIlBhcnRzIiwiYWJvcnRWaWRlb011bHRpcGFydFVwbG9hZCIsImFkZFZpZGVvIiwicHJvdmlkZXIiLCJleHRlcm5hbElkIiwiZXh0ZXJuYWxVcmwiLCJzYXZlZCIsImVkZ2VJZCIsIml0ZW1Eb2NJZCIsImZpbGVEb2NJZCIsImVkZ2UiLCJfZnJvbSIsIl90byIsImNvbGxlY3Rpb24iLCJzYXZlIiwicmV0dXJuTmV3IiwiZmlsZUVkZ2UiLCJkb2N1bWVudCIsInVwZGF0ZVZpZGVvIiwiYmFzZTY0IiwidmlkZW9CdWZmZXIiLCJ1cGRhdGVkRmlsZVR5cGUiLCJmaWxlVHlwZUZyb21CdWZmZXIiLCJtaW1lIiwidlBhcmFtcyIsImNvbnRlbnRUeXBlIiwicmVzIiwic3RhdHVzIiwiSU1BR0VfUkVRVUVTVCIsImhlYWRlcnMiLCJ1cGRhdGUiLCJ1bmRlZmluZWQiLCJkZWxldGVWaWRlbyIsImNhc2NhZGUiLCJIQVNfUkVBQ1RJT04iLCJvd25lcnNoaXAiLCJ2S2V5Iiwia2V5cyIsIkRlbGV0ZSIsIk9iamVjdHMiLCJRdWlldCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FDRUEsZ0JBQWdCLEVBQ2hCQyx3QkFBd0IsRUFDeEJDLGtCQUFrQixRQUNiLCtCQUErQjtBQUV0QyxTQUFRQyxPQUFPQyxPQUFPLFFBQU8sb0JBQW9CO0FBQ2pELFNBQVFDLFVBQVUsRUFBRUMsYUFBYSxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsV0FBVyxRQUFPLCtCQUErQjtBQUN4RyxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUM3QixTQUFrQkMsT0FBTyxRQUFPLGVBQWU7QUFFL0MsU0FBUUMsTUFBTSxRQUFPLGVBQWU7QUFDcEMsU0FBUUMsV0FBVyxF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
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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
@@ -65,4 +65,4 @@ const performDocumentTransformation = (doc)=>{
65
65
  });
66
66
  };
67
67
 
68
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FkYXB0ZXJzL2FyYW5nb0FkYXB0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwYXJzZU51bX0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvbnVtYmVycyc7XG5pbXBvcnQge3BhcnNlQXJhbmdvSWQsIHBhcnNlSWR9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge0RvY3VtZW50VHlwZX0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHtyZW1vdmVFbXB0eUtleXN9IGZyb20gJy4uL3V0aWxzL2FkYXB0ZXJVdGlscy5qcyc7XG5cbmV4cG9ydCBjbGFzcyBBcmFuZ29WYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0FyYW5nb1ZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuY29uc3QgRG9jdW1lbnRJbnB1dFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgX2Zyb206IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX2lkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9rZXk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX29sZFJldjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfcmV2OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF90bzogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBhZGRlZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBpZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RpZmllZDogei5udW1iZXIoKS5vcHRpb25hbCgpXG59KS5wYXNzdGhyb3VnaCgpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVEb2N1bWVudElucHV0ID0gKGRvYzogdW5rbm93bik6IERvY3VtZW50VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdmFsaWRhdGVkID0gRG9jdW1lbnRJbnB1dFNjaGVtYS5wYXJzZShkb2MpO1xuICAgIHJldHVybiB2YWxpZGF0ZWQgYXMgRG9jdW1lbnRUeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZEVycm9ycyA9IGVycm9yLmlzc3Vlcy5tYXAoKGUpID0+IGAke2UucGF0aC5qb2luKCcuJyl9OiAke2UubWVzc2FnZX1gKS5qb2luKCcsICcpO1xuICAgICAgdGhyb3cgbmV3IEFyYW5nb1ZhbGlkYXRpb25FcnJvcihgRG9jdW1lbnQgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7ZmllbGRFcnJvcnN9YCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RG9jdW1lbnRPdXRwdXQgPSAoZG9jOiBEb2N1bWVudFR5cGUpOiBEb2N1bWVudFR5cGUgPT4gZG9jO1xuXG5leHBvcnQgY29uc3QgcGFyc2VEb2N1bWVudCA9IChkb2M6IERvY3VtZW50VHlwZSk6IERvY3VtZW50VHlwZSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHBlcmZvcm1Eb2N1bWVudFRyYW5zZm9ybWF0aW9uKGRvYyk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIEFyYW5nb1ZhbGlkYXRpb25FcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICAgIHRocm93IG5ldyBBcmFuZ29WYWxpZGF0aW9uRXJyb3IoYERvY3VtZW50IHBhcnNpbmcgZmFpbGVkOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InfWApO1xuICB9XG59O1xuXG5jb25zdCBwZXJmb3JtRG9jdW1lbnRUcmFuc2Zvcm1hdGlvbiA9IChkb2M6IERvY3VtZW50VHlwZSk6IERvY3VtZW50VHlwZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBfaWQsXG4gICAgX2tleSxcbiAgICBhZGRlZCxcbiAgICBpZCxcbiAgICBtb2RpZmllZFxuICB9ID0gZG9jO1xuXG4gIHJldHVybiByZW1vdmVFbXB0eUtleXMoe1xuICAgIC4uLmRvYyxcbiAgICAuLi4oX2lkICYmIHtfaWQ6IHBhcnNlQXJhbmdvSWQoX2lkKX0pLFxuICAgIC4uLihfa2V5ICYmIHtfa2V5OiBwYXJzZUlkKF9rZXkpfSksXG4gICAgLi4uKGFkZGVkICE9PSB1bmRlZmluZWQgJiYge2FkZGVkOiBwYXJzZU51bShhZGRlZCwgMTMpfSksXG4gICAgLi4uKChfaWQgfHwgaWQpICYmIHtpZDogcGFyc2VBcmFuZ29JZChfaWQgfHwgaWQpfSksXG4gICAgLi4uKG1vZGlmaWVkICE9PSB1bmRlZmluZWQgJiYge21vZGlmaWVkOiBwYXJzZU51bShtb2RpZmllZCwgMTMpfSlcbiAgfSk7XG59O1xuIl0sIm5hbWVzIjpbInBhcnNlTnVtIiwicGFyc2VBcmFuZ29JZCIsInBhcnNlSWQiLCJ6IiwicmVtb3ZlRW1wdHlLZXlzIiwiQXJhbmdvVmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiRG9jdW1lbnRJbnB1dFNjaGVtYSIsIm9iamVjdCIsIl9mcm9tIiwic3RyaW5nIiwib3B0aW9uYWwiLCJfaWQiLCJfa2V5IiwiX29sZFJldiIsIl9yZXYiLCJfdG8iLCJhZGRlZCIsIm51bWJlciIsImlkIiwibW9kaWZpZWQiLCJwYXNzdGhyb3VnaCIsInZhbGlkYXRlRG9jdW1lbnRJbnB1dCIsImRvYyIsInZhbGlkYXRlZCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImZpZWxkRXJyb3JzIiwiaXNzdWVzIiwibWFwIiwiZSIsInBhdGgiLCJqb2luIiwiZm9ybWF0RG9jdW1lbnRPdXRwdXQiLCJwYXJzZURvY3VtZW50IiwicGVyZm9ybURvY3VtZW50VHJhbnNmb3JtYXRpb24iLCJ1bmRlZmluZWQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLFFBQVEsUUFBTywrQkFBK0I7QUFDdEQsU0FBUUMsYUFBYSxFQUFFQyxPQUFPLFFBQU8sK0JBQStCO0FBQ3BFLFNBQVFDLENBQUMsUUFBTyxNQUFNO0FBR3RCLFNBQVFDLGVBQWUsUUFBTywyQkFBMkI7QUFFekQsT0FBTyxNQUFNQyw4QkFBOEJDOztJQUN6QyxZQUFZQyxPQUFlLEVBQUUsQUFBT0MsS0FBYyxDQUFFO1FBQ2xELEtBQUssQ0FBQ0QsZUFENEJDLFFBQUFBO1FBRWxDLElBQUksQ0FBQ0MsSUFBSSxHQUFHO0lBQ2Q7QUFDRjtBQUVBLE1BQU1DLHNCQUFzQlAsRUFBRVEsTUFBTSxDQUFDO0lBQ25DQyxPQUFPVCxFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDMUJDLEtBQUtaLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN4QkUsTUFBTWIsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3pCRyxTQUFTZCxFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDNUJJLE1BQU1mLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN6QkssS0FBS2hCLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN4Qk0sT0FBT2pCLEVBQUVrQixNQUFNLEdBQUdQLFFBQVE7SUFDMUJRLElBQUluQixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDdkJTLFVBQVVwQixFQUFFa0IsTUFBTSxHQUFHUCxRQUFRO0FBQy9CLEdBQUdVLFdBQVc7QUFFZCxPQUFPLE1BQU1DLHdCQUF3QixDQUFDQztJQUNwQyxJQUFJO1FBQ0YsTUFBTUMsWUFBWWpCLG9CQUFvQmtCLEtBQUssQ0FBQ0Y7UUFDNUMsT0FBT0M7SUFDVCxFQUFFLE9BQU1FLE9BQU87UUFDYixJQUFHQSxpQkFBaUIxQixFQUFFMkIsUUFBUSxFQUFFO1lBQzlCLE1BQU1DLGNBQWNGLE1BQU1HLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDLENBQUNDLElBQU0sR0FBR0EsRUFBRUMsSUFBSSxDQUFDQyxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUVGLEVBQUUzQixPQUFPLEVBQUUsRUFBRTZCLElBQUksQ0FBQztZQUN0RixNQUFNLElBQUkvQixzQkFBc0IsQ0FBQyw0QkFBNEIsRUFBRTBCLGFBQWE7UUFDOUU7UUFDQSxNQUFNRjtJQUNSO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTVEsdUJBQXVCLENBQUNYLE1BQW9DQSxJQUFJO0FBRTdFLE9BQU8sTUFBTVksZ0JBQWdCLENBQUNaO0lBQzVCLElBQUk7UUFDRixPQUFPYSw4QkFBOEJiO0lBQ3ZDLEVBQUUsT0FBTUcsT0FBTztRQUNiLElBQUdBLGlCQUFpQnhCLHVCQUF1QjtZQUN6QyxNQUFNd0I7UUFDUjtRQUNBLE1BQU0sSUFBSXhCLHNCQUFzQixDQUFDLHlCQUF5QixFQUFFd0IsaUJBQWlCdkIsUUFBUXVCLE1BQU10QixPQUFPLEdBQUcsaUJBQWlCO0lBQ3hIO0FBQ0YsRUFBRTtBQUVGLE1BQU1nQyxnQ0FBZ0MsQ0FBQ2I7SUFDckMsTUFBTSxFQUNKWCxHQUFHLEVBQ0hDLElBQUksRUFDSkksS0FBSyxFQUNMRSxFQUFFLEVBQ0ZDLFFBQVEsRUFDVCxHQUFHRztJQUVKLE9BQU90QixnQkFBZ0I7UUFDckIsR0FBR3NCLEdBQUc7UUFDTixHQUFJWCxPQUFPO1lBQUNBLEtBQUtkLGNBQWNjO1FBQUksQ0FBQztRQUNwQyxHQUFJQyxRQUFRO1lBQUNBLE1BQU1kLFFBQVFjO1FBQUssQ0FBQztRQUNqQyxHQUFJSSxVQUFVb0IsYUFBYTtZQUFDcEIsT0FBT3BCLFNBQVNvQixPQUFPO1FBQUcsQ0FBQztRQUN2RCxHQUFJLEFBQUNMLENBQUFBLE9BQU9PLEVBQUMsS0FBTTtZQUFDQSxJQUFJckIsY0FBY2MsT0FBT087UUFBRyxDQUFDO1FBQ2pELEdBQUlDLGFBQWFpQixhQUFhO1lBQUNqQixVQUFVdkIsU0FBU3VCLFVBQVU7UUFBRyxDQUFDO0lBQ2xFO0FBQ0YifQ==
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hZGFwdGVycy9hcmFuZ29BZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7cGFyc2VOdW19IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtwYXJzZUFyYW5nb0lkLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtEb2N1bWVudFR5cGV9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB7cmVtb3ZlRW1wdHlLZXlzfSBmcm9tICcuLi91dGlscy9hZGFwdGVyVXRpbHMuanMnO1xuXG5leHBvcnQgY2xhc3MgQXJhbmdvVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBmaWVsZD86IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdBcmFuZ29WYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IERvY3VtZW50SW5wdXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIF9mcm9tOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfa2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIF9vbGRSZXY6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX3Jldjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfdG86IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgYWRkZWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kaWZpZWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKVxufSkucGFzc3Rocm91Z2goKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRG9jdW1lbnRJbnB1dCA9IChkb2M6IHVua25vd24pOiBEb2N1bWVudFR5cGUgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHZhbGlkYXRlZCA9IERvY3VtZW50SW5wdXRTY2hlbWEucGFyc2UoZG9jKTtcbiAgICByZXR1cm4gdmFsaWRhdGVkIGFzIERvY3VtZW50VHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSBlcnJvci5pc3N1ZXMubWFwKChlKSA9PiBgJHtlLnBhdGguam9pbignLicpfTogJHtlLm1lc3NhZ2V9YCkuam9pbignLCAnKTtcbiAgICAgIHRocm93IG5ldyBBcmFuZ29WYWxpZGF0aW9uRXJyb3IoYERvY3VtZW50IHZhbGlkYXRpb24gZmFpbGVkOiAke2ZpZWxkRXJyb3JzfWApO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdERvY3VtZW50T3V0cHV0ID0gKGRvYzogRG9jdW1lbnRUeXBlKTogRG9jdW1lbnRUeXBlID0+IGRvYztcblxuZXhwb3J0IGNvbnN0IHBhcnNlRG9jdW1lbnQgPSAoZG9jOiBEb2N1bWVudFR5cGUpOiBEb2N1bWVudFR5cGUgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBwZXJmb3JtRG9jdW1lbnRUcmFuc2Zvcm1hdGlvbihkb2MpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBBcmFuZ29WYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgQXJhbmdvVmFsaWRhdGlvbkVycm9yKGBEb2N1bWVudCBwYXJzaW5nIGZhaWxlZDogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJ31gKTtcbiAgfVxufTtcblxuY29uc3QgcGVyZm9ybURvY3VtZW50VHJhbnNmb3JtYXRpb24gPSAoZG9jOiBEb2N1bWVudFR5cGUpOiBEb2N1bWVudFR5cGUgPT4ge1xuICBjb25zdCB7XG4gICAgX2lkLFxuICAgIF9rZXksXG4gICAgYWRkZWQsXG4gICAgaWQsXG4gICAgbW9kaWZpZWRcbiAgfSA9IGRvYztcblxuICByZXR1cm4gcmVtb3ZlRW1wdHlLZXlzKHtcbiAgICAuLi5kb2MsXG4gICAgLi4uKF9pZCAmJiB7X2lkOiBwYXJzZUFyYW5nb0lkKF9pZCl9KSxcbiAgICAuLi4oX2tleSAmJiB7X2tleTogcGFyc2VJZChfa2V5KX0pLFxuICAgIC4uLihhZGRlZCAhPT0gdW5kZWZpbmVkICYmIHthZGRlZDogcGFyc2VOdW0oYWRkZWQsIDEzKX0pLFxuICAgIC4uLigoX2lkIHx8IGlkKSAmJiB7aWQ6IHBhcnNlQXJhbmdvSWQoX2lkIHx8IGlkKX0pLFxuICAgIC4uLihtb2RpZmllZCAhPT0gdW5kZWZpbmVkICYmIHttb2RpZmllZDogcGFyc2VOdW0obW9kaWZpZWQsIDEzKX0pXG4gIH0pO1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZU51bSIsInBhcnNlQXJhbmdvSWQiLCJwYXJzZUlkIiwieiIsInJlbW92ZUVtcHR5S2V5cyIsIkFyYW5nb1ZhbGlkYXRpb25FcnJvciIsIkVycm9yIiwibWVzc2FnZSIsImZpZWxkIiwibmFtZSIsIkRvY3VtZW50SW5wdXRTY2hlbWEiLCJvYmplY3QiLCJfZnJvbSIsInN0cmluZyIsIm9wdGlvbmFsIiwiX2lkIiwiX2tleSIsIl9vbGRSZXYiLCJfcmV2IiwiX3RvIiwiYWRkZWQiLCJudW1iZXIiLCJpZCIsIm1vZGlmaWVkIiwicGFzc3Rocm91Z2giLCJ2YWxpZGF0ZURvY3VtZW50SW5wdXQiLCJkb2MiLCJ2YWxpZGF0ZWQiLCJwYXJzZSIsImVycm9yIiwiWm9kRXJyb3IiLCJmaWVsZEVycm9ycyIsImlzc3VlcyIsIm1hcCIsImUiLCJwYXRoIiwiam9pbiIsImZvcm1hdERvY3VtZW50T3V0cHV0IiwicGFyc2VEb2N1bWVudCIsInBlcmZvcm1Eb2N1bWVudFRyYW5zZm9ybWF0aW9uIiwidW5kZWZpbmVkIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxRQUFRLFFBQU8sK0JBQStCO0FBQ3RELFNBQVFDLGFBQWEsRUFBRUMsT0FBTyxRQUFPLCtCQUErQjtBQUNwRSxTQUFRQyxDQUFDLFFBQU8sTUFBTTtBQUd0QixTQUFRQyxlQUFlLFFBQU8sMkJBQTJCO0FBRXpELE9BQU8sTUFBTUMsOEJBQThCQzs7SUFDekMsWUFBWUMsT0FBZSxFQUFFLEFBQU9DLEtBQWMsQ0FBRTtRQUNsRCxLQUFLLENBQUNELGVBRDRCQyxRQUFBQTtRQUVsQyxJQUFJLENBQUNDLElBQUksR0FBRztJQUNkO0FBQ0Y7QUFFQSxNQUFNQyxzQkFBc0JQLEVBQUVRLE1BQU0sQ0FBQztJQUNuQ0MsT0FBT1QsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQzFCQyxLQUFLWixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDeEJFLE1BQU1iLEVBQUVVLE1BQU0sR0FBR0MsUUFBUTtJQUN6QkcsU0FBU2QsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQzVCSSxNQUFNZixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDekJLLEtBQUtoQixFQUFFVSxNQUFNLEdBQUdDLFFBQVE7SUFDeEJNLE9BQU9qQixFQUFFa0IsTUFBTSxHQUFHUCxRQUFRO0lBQzFCUSxJQUFJbkIsRUFBRVUsTUFBTSxHQUFHQyxRQUFRO0lBQ3ZCUyxVQUFVcEIsRUFBRWtCLE1BQU0sR0FBR1AsUUFBUTtBQUMvQixHQUFHVSxXQUFXO0FBRWQsT0FBTyxNQUFNQyx3QkFBd0IsQ0FBQ0M7SUFDcEMsSUFBSTtRQUNGLE1BQU1DLFlBQVlqQixvQkFBb0JrQixLQUFLLENBQUNGO1FBQzVDLE9BQU9DO0lBQ1QsRUFBRSxPQUFNRSxPQUFPO1FBQ2IsSUFBR0EsaUJBQWlCMUIsRUFBRTJCLFFBQVEsRUFBRTtZQUM5QixNQUFNQyxjQUFjRixNQUFNRyxNQUFNLENBQUNDLEdBQUcsQ0FBQyxDQUFDQyxJQUFNLEdBQUdBLEVBQUVDLElBQUksQ0FBQ0MsSUFBSSxDQUFDLEtBQUssRUFBRSxFQUFFRixFQUFFM0IsT0FBTyxFQUFFLEVBQUU2QixJQUFJLENBQUM7WUFDdEYsTUFBTSxJQUFJL0Isc0JBQXNCLENBQUMsNEJBQTRCLEVBQUUwQixhQUFhO1FBQzlFO1FBQ0EsTUFBTUY7SUFDUjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1RLHVCQUF1QixDQUFDWCxNQUFvQ0EsSUFBSTtBQUU3RSxPQUFPLE1BQU1ZLGdCQUFnQixDQUFDWjtJQUM1QixJQUFJO1FBQ0YsT0FBT2EsOEJBQThCYjtJQUN2QyxFQUFFLE9BQU1HLE9BQU87UUFDYixJQUFHQSxpQkFBaUJ4Qix1QkFBdUI7WUFDekMsTUFBTXdCO1FBQ1I7UUFDQSxNQUFNLElBQUl4QixzQkFBc0IsQ0FBQyx5QkFBeUIsRUFBRXdCLGlCQUFpQnZCLFFBQVF1QixNQUFNdEIsT0FBTyxHQUFHLGlCQUFpQjtJQUN4SDtBQUNGLEVBQUU7QUFFRixNQUFNZ0MsZ0NBQWdDLENBQUNiO0lBQ3JDLE1BQU0sRUFDSlgsR0FBRyxFQUNIQyxJQUFJLEVBQ0pJLEtBQUssRUFDTEUsRUFBRSxFQUNGQyxRQUFRLEVBQ1QsR0FBR0c7SUFFSixPQUFPdEIsZ0JBQWdCO1FBQ3JCLEdBQUdzQixHQUFHO1FBQ04sR0FBSVgsT0FBTztZQUFDQSxLQUFLZCxjQUFjYztRQUFJLENBQUM7UUFDcEMsR0FBSUMsUUFBUTtZQUFDQSxNQUFNZCxRQUFRYztRQUFLLENBQUM7UUFDakMsR0FBSUksVUFBVW9CLGFBQWE7WUFBQ3BCLE9BQU9wQixTQUFTb0IsT0FBTztRQUFHLENBQUM7UUFDdkQsR0FBSSxBQUFDTCxDQUFBQSxPQUFPTyxFQUFDLEtBQU07WUFBQ0EsSUFBSXJCLGNBQWNjLE9BQU9PO1FBQUcsQ0FBQztRQUNqRCxHQUFJQyxhQUFhaUIsYUFBYTtZQUFDakIsVUFBVXZCLFNBQVN1QixVQUFVO1FBQUcsQ0FBQztJQUNsRTtBQUNGIn0=
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Copyright (c) 2025-Present, Nitrogen Labs, Inc.
3
- * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
3
+ * All rights reserved. Use is subject to the accompanying commercial LICENSE.
4
4
  */ import { parseArangoId, parseId, parseString } from '@nlabs/utils/parsers/strings';
5
5
  import { z } from 'zod';
6
6
  import { removeEmptyKeys } from '../utils/adapterUtils.js';
@@ -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FkYXB0ZXJzL2NvbnRlbnRBZGFwdGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDI1LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge3BhcnNlQXJhbmdvSWQsIHBhcnNlSWQsIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7en0gZnJvbSAnem9kJztcblxuaW1wb3J0IHtDb250ZW50SW5wdXRUeXBlLCBDb250ZW50VHlwZX0gZnJvbSAnLi4vdHlwZXMvY29udGVudC50eXBlcy5qcyc7XG5pbXBvcnQge3JlbW92ZUVtcHR5S2V5c30gZnJvbSAnLi4vdXRpbHMvYWRhcHRlclV0aWxzLmpzJztcbmltcG9ydCB7cGFyc2VEb2N1bWVudH0gZnJvbSAnLi9hcmFuZ29BZGFwdGVyLmpzJztcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRWYWxpZGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZywgcHVibGljIGZpZWxkPzogc3RyaW5nKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gJ0NvbnRlbnRWYWxpZGF0aW9uRXJyb3InO1xuICB9XG59XG5cbmNvbnN0IFNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMgPSBbJ2VuJywgJ2VzJywgJ2ZyJywgJ2RlJywgJ3B0JywgJ2l0J10gYXMgY29uc3Q7XG5cbmNvbnN0IGNvbnRlbnRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGNvbnRlbnRJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBrZXk6IHouc3RyaW5nKCkubWluKDEsICdLZXkgaXMgcmVxdWlyZWQnKS5tYXgoMjAwLCAnS2V5IG11c3QgYmUgbGVzcyB0aGFuIDIwMCBjaGFyYWN0ZXJzJyksXG4gIGxvY2FsZTogei5lbnVtKFNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMsIHtcbiAgICBtZXNzYWdlOiAnTG9jYWxlIG11c3QgYmUgb25lIG9mOiBlbiwgZXMsIGZyLCBkZSwgcHQsIGl0J1xuICB9KSxcbiAgY29udGVudDogei5zdHJpbmcoKS5taW4oMSwgJ0NvbnRlbnQgaXMgcmVxdWlyZWQnKS5tYXgoMTAwMDAsICdDb250ZW50IG11c3QgYmUgbGVzcyB0aGFuIDEwMDAwIGNoYXJhY3RlcnMnKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubWF4KDUwMCwgJ0Rlc2NyaXB0aW9uIG11c3QgYmUgbGVzcyB0aGFuIDUwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkubWF4KDEwMCwgJ0NhdGVnb3J5IG11c3QgYmUgbGVzcyB0aGFuIDEwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgaXNBY3RpdmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZXJJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcblxuY29uc3QgY29udGVudElucHV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBjb250ZW50SWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAga2V5OiB6LnN0cmluZygpLm1pbigxLCAnS2V5IGlzIHJlcXVpcmVkJykubWF4KDIwMCwgJ0tleSBtdXN0IGJlIGxlc3MgdGhhbiAyMDAgY2hhcmFjdGVycycpLFxuICBsb2NhbGU6IHouZW51bShTVVBQT1JURURfQ09OVEVOVF9MT0NBTEVTLCB7XG4gICAgbWVzc2FnZTogJ0xvY2FsZSBtdXN0IGJlIG9uZSBvZjogZW4sIGVzLCBmciwgZGUsIHB0LCBpdCdcbiAgfSkub3B0aW9uYWwoKSxcbiAgY29udGVudDogei5zdHJpbmcoKS5taW4oMSwgJ0NvbnRlbnQgaXMgcmVxdWlyZWQnKS5tYXgoMTAwMDAsICdDb250ZW50IG11c3QgYmUgbGVzcyB0aGFuIDEwMDAwIGNoYXJhY3RlcnMnKSxcbiAgZGVzY3JpcHRpb246IHouc3RyaW5nKCkubWF4KDUwMCwgJ0Rlc2NyaXB0aW9uIG11c3QgYmUgbGVzcyB0aGFuIDUwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkubWF4KDEwMCwgJ0NhdGVnb3J5IG11c3QgYmUgbGVzcyB0aGFuIDEwMCBjaGFyYWN0ZXJzJykub3B0aW9uYWwoKSxcbiAgaXNBY3RpdmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKClcbn0pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50ID0gKGNvbnRlbnQ6IENvbnRlbnRUeXBlKTogQ29udGVudFR5cGUgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb250ZW50U2NoZW1hLnBhcnNlKGNvbnRlbnQpIGFzIENvbnRlbnRUeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGVycm9yLmlzc3Vlc1swXT8ucGF0aC5qb2luKCcuJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IuaXNzdWVzWzBdPy5tZXNzYWdlIHx8ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICB0aHJvdyBuZXcgQ29udGVudFZhbGlkYXRpb25FcnJvcihtZXNzYWdlLCBmaWVsZCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50SW5wdXQgPSAoY29udGVudDogQ29udGVudElucHV0VHlwZSk6IENvbnRlbnRJbnB1dFR5cGUgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb250ZW50SW5wdXRTY2hlbWEucGFyc2UoY29udGVudCkgYXMgQ29udGVudElucHV0VHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGQgPSBlcnJvci5pc3N1ZXNbMF0/LnBhdGguam9pbignLicpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmlzc3Vlc1swXT8ubWVzc2FnZSB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSwgZmllbGQpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuY29uc3QgcGVyZm9ybUNvbnRlbnRUcmFuc2Zvcm1hdGlvbiA9IChjb250ZW50OiBDb250ZW50VHlwZSk6IENvbnRlbnRUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIF9pZCxcbiAgICBfa2V5LFxuICAgIGNvbnRlbnRJZCxcbiAgICBpZCxcbiAgICBrZXksXG4gICAgbG9jYWxlLFxuICAgIGNvbnRlbnQ6IGNvbnRlbnRUZXh0LFxuICAgIGRlc2NyaXB0aW9uLFxuICAgIGNhdGVnb3J5LFxuICAgIGlzQWN0aXZlLFxuICAgIHVzZXJJZFxuICB9ID0gY29udGVudDtcblxuICBjb25zdCB0cmFuc2Zvcm1lZCA9IHtcbiAgICAuLi5wYXJzZURvY3VtZW50KGNvbnRlbnQpLFxuICAgIC4uLigoX2tleSB8fCBjb250ZW50SWQpICYmIHtjb250ZW50SWQ6IHBhcnNlSWQoX2tleSB8fCBjb250ZW50SWQpfSksXG4gICAgLi4uKChfaWQgfHwgaWQgfHwgX2tleSB8fCBjb250ZW50SWQpICYmIHtpZDogcGFyc2VBcmFuZ29JZChfaWQgfHwgaWQgfHwgYGNvbnRlbnQvJHtfa2V5IHx8IGNvbnRlbnRJZH1gKX0pLFxuICAgIGtleTogcGFyc2VTdHJpbmcoa2V5LCAyMDApLFxuICAgIGxvY2FsZSxcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhjb250ZW50VGV4dCwgMTAwMDApLFxuICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7ZGVzY3JpcHRpb246IHBhcnNlU3RyaW5nKGRlc2NyaXB0aW9uLCA1MDApfSksXG4gICAgLi4uKGNhdGVnb3J5ICYmIHtjYXRlZ29yeTogcGFyc2VTdHJpbmcoY2F0ZWdvcnksIDEwMCl9KSxcbiAgICAuLi4oaXNBY3RpdmUgIT09IHVuZGVmaW5lZCAmJiB7aXNBY3RpdmV9KSxcbiAgICAuLi4odXNlcklkICYmIHt1c2VySWQ6IHBhcnNlSWQodXNlcklkKX0pXG4gIH07XG5cbiAgcmV0dXJuIHJlbW92ZUVtcHR5S2V5cyh0cmFuc2Zvcm1lZCkgYXMgQ29udGVudFR5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50RnJvbURiID0gKGNvbnRlbnQ6IENvbnRlbnRUeXBlKTogQ29udGVudFR5cGUgPT4gcGVyZm9ybUNvbnRlbnRUcmFuc2Zvcm1hdGlvbihjb250ZW50KTtcbiJdLCJuYW1lcyI6WyJwYXJzZUFyYW5nb0lkIiwicGFyc2VJZCIsInBhcnNlU3RyaW5nIiwieiIsInJlbW92ZUVtcHR5S2V5cyIsInBhcnNlRG9jdW1lbnQiLCJDb250ZW50VmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiU1VQUE9SVEVEX0NPTlRFTlRfTE9DQUxFUyIsImNvbnRlbnRTY2hlbWEiLCJvYmplY3QiLCJjb250ZW50SWQiLCJzdHJpbmciLCJvcHRpb25hbCIsImtleSIsIm1pbiIsIm1heCIsImxvY2FsZSIsImVudW0iLCJjb250ZW50IiwiZGVzY3JpcHRpb24iLCJjYXRlZ29yeSIsImlzQWN0aXZlIiwiYm9vbGVhbiIsInVzZXJJZCIsImNvbnRlbnRJbnB1dFNjaGVtYSIsInBhcnNlQ29udGVudCIsInBhcnNlIiwiZXJyb3IiLCJab2RFcnJvciIsImlzc3VlcyIsInBhdGgiLCJqb2luIiwicGFyc2VDb250ZW50SW5wdXQiLCJwZXJmb3JtQ29udGVudFRyYW5zZm9ybWF0aW9uIiwiX2lkIiwiX2tleSIsImlkIiwiY29udGVudFRleHQiLCJ0cmFuc2Zvcm1lZCIs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
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hZGFwdGVycy9jb250ZW50QWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtwYXJzZUFyYW5nb0lkLCBwYXJzZUlkLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7Q29udGVudElucHV0VHlwZSwgQ29udGVudFR5cGV9IGZyb20gJy4uL3R5cGVzL2NvbnRlbnQudHlwZXMuanMnO1xuaW1wb3J0IHtyZW1vdmVFbXB0eUtleXN9IGZyb20gJy4uL3V0aWxzL2FkYXB0ZXJVdGlscy5qcyc7XG5pbXBvcnQge3BhcnNlRG9jdW1lbnR9IGZyb20gJy4vYXJhbmdvQWRhcHRlci5qcyc7XG5cbmV4cG9ydCBjbGFzcyBDb250ZW50VmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBmaWVsZD86IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdDb250ZW50VmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuXG5jb25zdCBTVVBQT1JURURfQ09OVEVOVF9MT0NBTEVTID0gWydlbicsICdlcycsICdmcicsICdkZScsICdwdCcsICdpdCddIGFzIGNvbnN0O1xuXG5jb25zdCBjb250ZW50U2NoZW1hID0gei5vYmplY3Qoe1xuICBjb250ZW50SWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAga2V5OiB6LnN0cmluZygpLm1pbigxLCAnS2V5IGlzIHJlcXVpcmVkJykubWF4KDIwMCwgJ0tleSBtdXN0IGJlIGxlc3MgdGhhbiAyMDAgY2hhcmFjdGVycycpLFxuICBsb2NhbGU6IHouZW51bShTVVBQT1JURURfQ09OVEVOVF9MT0NBTEVTLCB7XG4gICAgbWVzc2FnZTogJ0xvY2FsZSBtdXN0IGJlIG9uZSBvZjogZW4sIGVzLCBmciwgZGUsIHB0LCBpdCdcbiAgfSksXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCkubWluKDEsICdDb250ZW50IGlzIHJlcXVpcmVkJykubWF4KDEwMDAwLCAnQ29udGVudCBtdXN0IGJlIGxlc3MgdGhhbiAxMDAwMCBjaGFyYWN0ZXJzJyksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm1heCg1MDAsICdEZXNjcmlwdGlvbiBtdXN0IGJlIGxlc3MgdGhhbiA1MDAgY2hhcmFjdGVycycpLm9wdGlvbmFsKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm1heCgxMDAsICdDYXRlZ29yeSBtdXN0IGJlIGxlc3MgdGhhbiAxMDAgY2hhcmFjdGVycycpLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VySWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5cbmNvbnN0IGNvbnRlbnRJbnB1dFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgY29udGVudElkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGtleTogei5zdHJpbmcoKS5taW4oMSwgJ0tleSBpcyByZXF1aXJlZCcpLm1heCgyMDAsICdLZXkgbXVzdCBiZSBsZXNzIHRoYW4gMjAwIGNoYXJhY3RlcnMnKSxcbiAgbG9jYWxlOiB6LmVudW0oU1VQUE9SVEVEX0NPTlRFTlRfTE9DQUxFUywge1xuICAgIG1lc3NhZ2U6ICdMb2NhbGUgbXVzdCBiZSBvbmUgb2Y6IGVuLCBlcywgZnIsIGRlLCBwdCwgaXQnXG4gIH0pLm9wdGlvbmFsKCksXG4gIGNvbnRlbnQ6IHouc3RyaW5nKCkubWluKDEsICdDb250ZW50IGlzIHJlcXVpcmVkJykubWF4KDEwMDAwLCAnQ29udGVudCBtdXN0IGJlIGxlc3MgdGhhbiAxMDAwMCBjaGFyYWN0ZXJzJyksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm1heCg1MDAsICdEZXNjcmlwdGlvbiBtdXN0IGJlIGxlc3MgdGhhbiA1MDAgY2hhcmFjdGVycycpLm9wdGlvbmFsKCksXG4gIGNhdGVnb3J5OiB6LnN0cmluZygpLm1heCgxMDAsICdDYXRlZ29yeSBtdXN0IGJlIGxlc3MgdGhhbiAxMDAgY2hhcmFjdGVycycpLm9wdGlvbmFsKCksXG4gIGlzQWN0aXZlOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpXG59KTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudCA9IChjb250ZW50OiBDb250ZW50VHlwZSk6IENvbnRlbnRUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gY29udGVudFNjaGVtYS5wYXJzZShjb250ZW50KSBhcyBDb250ZW50VHlwZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGlmKGVycm9yIGluc3RhbmNlb2Ygei5ab2RFcnJvcikge1xuICAgICAgY29uc3QgZmllbGQgPSBlcnJvci5pc3N1ZXNbMF0/LnBhdGguam9pbignLicpO1xuICAgICAgY29uc3QgbWVzc2FnZSA9IGVycm9yLmlzc3Vlc1swXT8ubWVzc2FnZSB8fCAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgdGhyb3cgbmV3IENvbnRlbnRWYWxpZGF0aW9uRXJyb3IobWVzc2FnZSwgZmllbGQpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudElucHV0ID0gKGNvbnRlbnQ6IENvbnRlbnRJbnB1dFR5cGUpOiBDb250ZW50SW5wdXRUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gY29udGVudElucHV0U2NoZW1hLnBhcnNlKGNvbnRlbnQpIGFzIENvbnRlbnRJbnB1dFR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZXJyb3IuaXNzdWVzWzBdPy5wYXRoLmpvaW4oJy4nKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5pc3N1ZXNbMF0/Lm1lc3NhZ2UgfHwgJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgIHRocm93IG5ldyBDb250ZW50VmFsaWRhdGlvbkVycm9yKG1lc3NhZ2UsIGZpZWxkKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IHBlcmZvcm1Db250ZW50VHJhbnNmb3JtYXRpb24gPSAoY29udGVudDogQ29udGVudFR5cGUpOiBDb250ZW50VHlwZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBfaWQsXG4gICAgX2tleSxcbiAgICBjb250ZW50SWQsXG4gICAgaWQsXG4gICAga2V5LFxuICAgIGxvY2FsZSxcbiAgICBjb250ZW50OiBjb250ZW50VGV4dCxcbiAgICBkZXNjcmlwdGlvbixcbiAgICBjYXRlZ29yeSxcbiAgICBpc0FjdGl2ZSxcbiAgICB1c2VySWRcbiAgfSA9IGNvbnRlbnQ7XG5cbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB7XG4gICAgLi4ucGFyc2VEb2N1bWVudChjb250ZW50KSxcbiAgICAuLi4oKF9rZXkgfHwgY29udGVudElkKSAmJiB7Y29udGVudElkOiBwYXJzZUlkKF9rZXkgfHwgY29udGVudElkKX0pLFxuICAgIC4uLigoX2lkIHx8IGlkIHx8IF9rZXkgfHwgY29udGVudElkKSAmJiB7aWQ6IHBhcnNlQXJhbmdvSWQoX2lkIHx8IGlkIHx8IGBjb250ZW50LyR7X2tleSB8fCBjb250ZW50SWR9YCl9KSxcbiAgICBrZXk6IHBhcnNlU3RyaW5nKGtleSwgMjAwKSxcbiAgICBsb2NhbGUsXG4gICAgY29udGVudDogcGFyc2VTdHJpbmcoY29udGVudFRleHQsIDEwMDAwKSxcbiAgICAuLi4oZGVzY3JpcHRpb24gJiYge2Rlc2NyaXB0aW9uOiBwYXJzZVN0cmluZyhkZXNjcmlwdGlvbiwgNTAwKX0pLFxuICAgIC4uLihjYXRlZ29yeSAmJiB7Y2F0ZWdvcnk6IHBhcnNlU3RyaW5nKGNhdGVnb3J5LCAxMDApfSksXG4gICAgLi4uKGlzQWN0aXZlICE9PSB1bmRlZmluZWQgJiYge2lzQWN0aXZlfSksXG4gICAgLi4uKHVzZXJJZCAmJiB7dXNlcklkOiBwYXJzZUlkKHVzZXJJZCl9KVxuICB9O1xuXG4gIHJldHVybiByZW1vdmVFbXB0eUtleXModHJhbnNmb3JtZWQpIGFzIENvbnRlbnRUeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudEZyb21EYiA9IChjb250ZW50OiBDb250ZW50VHlwZSk6IENvbnRlbnRUeXBlID0+IHBlcmZvcm1Db250ZW50VHJhbnNmb3JtYXRpb24oY29udGVudCk7XG4iXSwibmFtZXMiOlsicGFyc2VBcmFuZ29JZCIsInBhcnNlSWQiLCJwYXJzZVN0cmluZyIsInoiLCJyZW1vdmVFbXB0eUtleXMiLCJwYXJzZURvY3VtZW50IiwiQ29udGVudFZhbGlkYXRpb25FcnJvciIsIkVycm9yIiwibWVzc2FnZSIsImZpZWxkIiwibmFtZSIsIlNVUFBPUlRFRF9DT05URU5UX0xPQ0FMRVMiLCJjb250ZW50U2NoZW1hIiwib2JqZWN0IiwiY29udGVudElkIiwic3RyaW5nIiwib3B0aW9uYWwiLCJrZXkiLCJtaW4iLCJtYXgiLCJsb2NhbGUiLCJlbnVtIiwiY29udGVudCIsImRlc2NyaXB0aW9uIiwiY2F0ZWdvcnkiLCJpc0FjdGl2ZSIsImJvb2xlYW4iLCJ1c2VySWQiLCJjb250ZW50SW5wdXRTY2hlbWEiLCJwYXJzZUNvbnRlbnQiLCJwYXJzZSIsImVycm9yIiwiWm9kRXJyb3IiLCJpc3N1ZXMiLCJwYXRoIiwiam9pbiIsInBhcnNlQ29udGVudElucHV0IiwicGVyZm9ybUNvbnRlbnRUcmFuc2Zvcm1hdGlvbiIsIl9pZCIsIl9rZXkiLCJpZCIsImNvbnRlbnRUZXh0IiwidHJhbnNmb3JtZWQiLCJ1bmRlZmluZWQiLCJwYXJzZUNvbnRlbnRGcm9tRGIiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLGFBQWEsRUFBRUMsT0FBTyxFQUFFQyxXQUFXLFFBQU8sK0JBQStCO0FBQ2pGLFNBQVFDLENBQUMsUUFBTyxNQUFNO0FBR3RCLFNBQVFDLGVBQWUsUUFBTywyQkFBMkI7QUFDekQsU0FBUUMsYUFBYSxRQUFPLHFCQUFxQjtBQUVqRCxPQUFPLE1BQU1DLCtCQUErQkM7O0lBQzFDLFlBQVlDLE9BQWUsRUFBRSxBQUFPQyxLQUFjLENBQUU7UUFDbEQsS0FBSyxDQUFDRCxlQUQ0QkMsUUFBQUE7UUFFbEMsSUFBSSxDQUFDQyxJQUFJLEdBQUc7SUFDZDtBQUNGO0FBRUEsTUFBTUMsNEJBQTRCO0lBQUM7SUFBTTtJQUFNO0lBQU07SUFBTTtJQUFNO0NBQUs7QUFFdEUsTUFBTUMsZ0JBQWdCVCxFQUFFVSxNQUFNLENBQUM7SUFDN0JDLFdBQVdYLEVBQUVZLE1BQU0sR0FBR0MsUUFBUTtJQUM5QkMsS0FBS2QsRUFBRVksTUFBTSxHQUFHRyxHQUFHLENBQUMsR0FBRyxtQkFBbUJDLEdBQUcsQ0FBQyxLQUFLO0lBQ25EQyxRQUFRakIsRUFBRWtCLElBQUksQ0FBQ1YsMkJBQTJCO1FBQ3hDSCxTQUFTO0lBQ1g7SUFDQWMsU0FBU25CLEVBQUVZLE1BQU0sR0FBR0csR0FBRyxDQUFDLEdBQUcsdUJBQXVCQyxHQUFHLENBQUMsT0FBTztJQUM3REksYUFBYXBCLEVBQUVZLE1BQU0sR0FBR0ksR0FBRyxDQUFDLEtBQUssZ0RBQWdESCxRQUFRO0lBQ3pGUSxVQUFVckIsRUFBRVksTUFBTSxHQUFHSSxHQUFHLENBQUMsS0FBSyw2Q0FBNkNILFFBQVE7SUFDbkZTLFVBQVV0QixFQUFFdUIsT0FBTyxHQUFHVixRQUFRO0lBQzlCVyxRQUFReEIsRUFBRVksTUFBTSxHQUFHQyxRQUFRO0FBQzdCO0FBRUEsTUFBTVkscUJBQXFCekIsRUFBRVUsTUFBTSxDQUFDO0lBQ2xDQyxXQUFXWCxFQUFFWSxNQUFNLEdBQUdDLFFBQVE7SUFDOUJDLEtBQUtkLEVBQUVZLE1BQU0sR0FBR0csR0FBRyxDQUFDLEdBQUcsbUJBQW1CQyxHQUFHLENBQUMsS0FBSztJQUNuREMsUUFBUWpCLEVBQUVrQixJQUFJLENBQUNWLDJCQUEyQjtRQUN4Q0gsU0FBUztJQUNYLEdBQUdRLFFBQVE7SUFDWE0sU0FBU25CLEVBQUVZLE1BQU0sR0FBR0csR0FBRyxDQUFDLEdBQUcsdUJBQXVCQyxHQUFHLENBQUMsT0FBTztJQUM3REksYUFBYXBCLEVBQUVZLE1BQU0sR0FBR0ksR0FBRyxDQUFDLEtBQUssZ0RBQWdESCxRQUFRO0lBQ3pGUSxVQUFVckIsRUFBRVksTUFBTSxHQUFHSSxHQUFHLENBQUMsS0FBSyw2Q0FBNkNILFFBQVE7SUFDbkZTLFVBQVV0QixFQUFFdUIsT0FBTyxHQUFHVixRQUFRO0FBQ2hDO0FBRUEsT0FBTyxNQUFNYSxlQUFlLENBQUNQO0lBQzNCLElBQUk7UUFDRixPQUFPVixjQUFja0IsS0FBSyxDQUFDUjtJQUM3QixFQUFFLE9BQU1TLE9BQU87UUFDYixJQUFHQSxpQkFBaUI1QixFQUFFNkIsUUFBUSxFQUFFO1lBQzlCLE1BQU12QixRQUFRc0IsTUFBTUUsTUFBTSxDQUFDLEVBQUUsRUFBRUMsS0FBS0MsS0FBSztZQUN6QyxNQUFNM0IsVUFBVXVCLE1BQU1FLE1BQU0sQ0FBQyxFQUFFLEVBQUV6QixXQUFXO1lBQzVDLE1BQU0sSUFBSUYsdUJBQXVCRSxTQUFTQztRQUM1QztRQUNBLE1BQU1zQjtJQUNSO0FBQ0YsRUFBRTtBQUVGLE9BQU8sTUFBTUssb0JBQW9CLENBQUNkO0lBQ2hDLElBQUk7UUFDRixPQUFPTSxtQkFBbUJFLEtBQUssQ0FBQ1I7SUFDbEMsRUFBRSxPQUFNUyxPQUFPO1FBQ2IsSUFBR0EsaUJBQWlCNUIsRUFBRTZCLFFBQVEsRUFBRTtZQUM5QixNQUFNdkIsUUFBUXNCLE1BQU1FLE1BQU0sQ0FBQyxFQUFFLEVBQUVDLEtBQUtDLEtBQUs7WUFDekMsTUFBTTNCLFVBQVV1QixNQUFNRSxNQUFNLENBQUMsRUFBRSxFQUFFekIsV0FBVztZQUM1QyxNQUFNLElBQUlGLHVCQUF1QkUsU0FBU0M7UUFDNUM7UUFDQSxNQUFNc0I7SUFDUjtBQUNGLEVBQUU7QUFFRixNQUFNTSwrQkFBK0IsQ0FBQ2Y7SUFDcEMsTUFBTSxFQUNKZ0IsR0FBRyxFQUNIQyxJQUFJLEVBQ0p6QixTQUFTLEVBQ1QwQixFQUFFLEVBQ0Z2QixHQUFHLEVBQ0hHLE1BQU0sRUFDTkUsU0FBU21CLFdBQVcsRUFDcEJsQixXQUFXLEVBQ1hDLFFBQVEsRUFDUkMsUUFBUSxFQUNSRSxNQUFNLEVBQ1AsR0FBR0w7SUFFSixNQUFNb0IsY0FBYztRQUNsQixHQUFHckMsY0FBY2lCLFFBQVE7UUFDekIsR0FBSSxBQUFDaUIsQ0FBQUEsUUFBUXpCLFNBQVEsS0FBTTtZQUFDQSxXQUFXYixRQUFRc0MsUUFBUXpCO1FBQVUsQ0FBQztRQUNsRSxHQUFJLEFBQUN3QixDQUFBQSxPQUFPRSxNQUFNRCxRQUFRekIsU0FBUSxLQUFNO1lBQUMwQixJQUFJeEMsY0FBY3NDLE9BQU9FLE1BQU0sQ0FBQyxRQUFRLEVBQUVELFFBQVF6QixXQUFXO1FBQUMsQ0FBQztRQUN4R0csS0FBS2YsWUFBWWUsS0FBSztRQUN0Qkc7UUFDQUUsU0FBU3BCLFlBQVl1QyxhQUFhO1FBQ2xDLEdBQUlsQixlQUFlO1lBQUNBLGFBQWFyQixZQUFZcUIsYUFBYTtRQUFJLENBQUM7UUFDL0QsR0FBSUMsWUFBWTtZQUFDQSxVQUFVdEIsWUFBWXNCLFVBQVU7UUFBSSxDQUFDO1FBQ3RELEdBQUlDLGFBQWFrQixhQUFhO1lBQUNsQjtRQUFRLENBQUM7UUFDeEMsR0FBSUUsVUFBVTtZQUFDQSxRQUFRMUIsUUFBUTBCO1FBQU8sQ0FBQztJQUN6QztJQUVBLE9BQU92QixnQkFBZ0JzQztBQUN6QjtBQUVBLE9BQU8sTUFBTUUscUJBQXFCLENBQUN0QixVQUFzQ2UsNkJBQTZCZixTQUFTIn0=