@nlabs/reaktor 0.10.0 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/.env +1 -0
  2. package/.env.example +1 -0
  3. package/DATABASE_I18N_GUIDE.md +434 -0
  4. package/TEST_UTILITIES_GUIDE.md +360 -0
  5. package/coverage/index.html +46 -76
  6. package/index.js +1 -1
  7. package/jest.config.js +17 -0
  8. package/jest.setup.js +36 -0
  9. package/lex.config.cjs +2 -2
  10. package/lib/actions/apps.js +17 -239
  11. package/lib/actions/connections.js +6 -89
  12. package/lib/actions/content.js +17 -0
  13. package/lib/actions/conversations.js +19 -336
  14. package/lib/actions/dynamodb.js +2 -150
  15. package/lib/actions/email.js +2 -152
  16. package/lib/actions/files.js +5 -283
  17. package/lib/actions/groups.js +19 -259
  18. package/lib/actions/images.js +31 -700
  19. package/lib/actions/index.js +2 -66
  20. package/lib/actions/ios.js +9 -162
  21. package/lib/actions/locations.js +7 -122
  22. package/lib/actions/messages.js +21 -196
  23. package/lib/actions/notifications.js +2 -59
  24. package/lib/actions/payments.js +11 -464
  25. package/lib/actions/posts.js +75 -527
  26. package/lib/actions/profiles.js +8 -0
  27. package/lib/actions/reactions.js +25 -312
  28. package/lib/actions/s3.js +2 -133
  29. package/lib/actions/search.js +5 -90
  30. package/lib/actions/sms.js +2 -108
  31. package/lib/actions/statistics.js +6 -60
  32. package/lib/actions/subscriptions.js +12 -0
  33. package/lib/actions/tags.js +19 -287
  34. package/lib/actions/users.js +64 -764
  35. package/lib/actions/websockets.js +14 -158
  36. package/lib/adapters/arangoAdapter.js +2 -46
  37. package/lib/adapters/contentAdapter.js +2 -0
  38. package/lib/adapters/fileAdapter.js +2 -76
  39. package/lib/adapters/imageAdapter.js +2 -40
  40. package/lib/adapters/messageAdapter.js +2 -49
  41. package/lib/adapters/postAdapter.js +2 -70
  42. package/lib/adapters/reaktorAdapter.js +2 -44
  43. package/lib/adapters/tagAdapter.js +2 -50
  44. package/lib/adapters/userAdapter.js +2 -115
  45. package/lib/config.js +2 -125
  46. package/lib/handlers/graphqlHandler.js +2 -0
  47. package/lib/index.js +2 -66
  48. package/lib/lambdas/actions/websockets.js +14 -116
  49. package/lib/lambdas/authorizer.js +2 -67
  50. package/lib/lambdas/connection.js +2 -91
  51. package/lib/lambdas/utils/message.js +2 -42
  52. package/lib/lambdas/utils/websocket.js +2 -105
  53. package/lib/mocks/conversation.js +2 -35
  54. package/lib/mocks/file.js +2 -38
  55. package/lib/mocks/group.js +2 -47
  56. package/lib/mocks/image.js +2 -44
  57. package/lib/mocks/post.js +2 -55
  58. package/lib/mocks/tag.js +2 -37
  59. package/lib/mocks/user.js +2 -88
  60. package/lib/mutations/index.js +2 -26
  61. package/lib/mutations/locations.integration.js +2 -0
  62. package/lib/mutations/locations.js +2 -44
  63. package/lib/mutations/messages.integration.js +2 -0
  64. package/lib/mutations/messages.js +2 -86
  65. package/lib/mutations/posts.integration.js +2 -0
  66. package/lib/mutations/posts.js +2 -53
  67. package/lib/mutations/profiles.integration.js +2 -0
  68. package/lib/mutations/profiles.js +2 -0
  69. package/lib/mutations/reactions.integration.js +2 -0
  70. package/lib/mutations/reactions.js +2 -51
  71. package/lib/mutations/statistics.integration.js +2 -0
  72. package/lib/mutations/statistics.js +2 -39
  73. package/lib/mutations/subscriptions.integration.js +2 -0
  74. package/lib/mutations/subscriptions.js +2 -56
  75. package/lib/mutations/tags.integration.js +2 -0
  76. package/lib/mutations/tags.js +2 -120
  77. package/lib/mutations/users.integration.js +2 -0
  78. package/lib/mutations/users.js +2 -116
  79. package/lib/objectTypes/app.js +2 -173
  80. package/lib/objectTypes/bankAccount.js +2 -76
  81. package/lib/objectTypes/connection.js +2 -48
  82. package/lib/objectTypes/conversation.js +2 -77
  83. package/lib/objectTypes/creditCard.js +2 -86
  84. package/lib/objectTypes/document.js +2 -46
  85. package/lib/objectTypes/error.js +2 -46
  86. package/lib/objectTypes/external.js +2 -74
  87. package/lib/objectTypes/file.js +2 -100
  88. package/lib/objectTypes/filter.js +2 -43
  89. package/lib/objectTypes/group.js +2 -123
  90. package/lib/objectTypes/iapSubscription.js +2 -40
  91. package/lib/objectTypes/image.js +2 -129
  92. package/lib/objectTypes/index.js +2 -68
  93. package/lib/objectTypes/location.js +2 -109
  94. package/lib/objectTypes/message.js +2 -96
  95. package/lib/objectTypes/passcode.js +2 -42
  96. package/lib/objectTypes/plan.js +2 -95
  97. package/lib/objectTypes/post.js +2 -125
  98. package/lib/objectTypes/profile.js +2 -0
  99. package/lib/objectTypes/reaction.js +2 -61
  100. package/lib/objectTypes/relation.js +2 -49
  101. package/lib/objectTypes/search.js +2 -72
  102. package/lib/objectTypes/statistics.js +2 -39
  103. package/lib/objectTypes/subscription.js +2 -117
  104. package/lib/objectTypes/tag.js +2 -65
  105. package/lib/objectTypes/user.js +2 -144
  106. package/lib/queries/index.js +2 -33
  107. package/lib/queries/locations.integration.js +2 -0
  108. package/lib/queries/locations.js +2 -45
  109. package/lib/queries/messages.integration.js +2 -0
  110. package/lib/queries/messages.js +2 -52
  111. package/lib/queries/posts.integration.js +2 -0
  112. package/lib/queries/posts.js +2 -154
  113. package/lib/queries/reactions.integration.js +2 -0
  114. package/lib/queries/reactions.js +2 -56
  115. package/lib/queries/statistics.js +2 -39
  116. package/lib/queries/subscriptions.js +2 -44
  117. package/lib/queries/tags.integration.js +2 -0
  118. package/lib/queries/tags.js +2 -75
  119. package/lib/queries/users.integration.js +2 -0
  120. package/lib/queries/users.js +2 -64
  121. package/lib/templates/email/layout.js +3 -25
  122. package/lib/templates/email/passwordForgot.js +3 -25
  123. package/lib/templates/email/passwordRecovery.js +3 -25
  124. package/lib/templates/email/verifyEmail.js +3 -25
  125. package/lib/templates/email/welcome.js +3 -25
  126. package/lib/templates/sms/passwordForgot.js +2 -24
  127. package/lib/templates/sms/passwordRecovery.js +2 -24
  128. package/lib/templates/sms/verifyEmail.js +2 -24
  129. package/lib/templates/sms/verifyPhone.js +2 -24
  130. package/lib/templates/sms/welcome.js +2 -24
  131. package/lib/types/apps.types.js +2 -32
  132. package/lib/types/arangodb.types.js +1 -16
  133. package/lib/types/auth.types.js +1 -16
  134. package/lib/types/connections.types.js +1 -16
  135. package/lib/types/content.types.js +1 -0
  136. package/lib/types/conversations.types.js +1 -16
  137. package/lib/types/email.types.js +1 -16
  138. package/lib/types/error.types.js +2 -44
  139. package/lib/types/files.types.js +1 -16
  140. package/lib/types/google.types.js +1 -16
  141. package/lib/types/groups.types.js +1 -16
  142. package/lib/types/images.types.js +1 -16
  143. package/lib/types/index.js +2 -60
  144. package/lib/types/locations.types.js +1 -16
  145. package/lib/types/messages.types.js +1 -16
  146. package/lib/types/notifications.types.js +1 -16
  147. package/lib/types/payments.types.js +1 -16
  148. package/lib/types/posts.types.js +1 -16
  149. package/lib/types/profiles.types.js +1 -0
  150. package/lib/types/statistics.types.js +1 -16
  151. package/lib/types/tags.types.js +1 -16
  152. package/lib/types/users.types.js +1 -16
  153. package/lib/types/websockets.types.js +1 -16
  154. package/lib/utils/adapterUtils.js +2 -45
  155. package/lib/utils/analyticsUtils.js +2 -72
  156. package/lib/utils/arangodbUtils.js +5 -163
  157. package/lib/utils/authUtils.js +2 -0
  158. package/lib/utils/contextUtils.js +2 -0
  159. package/lib/utils/dbI18n.example.js +6 -0
  160. package/lib/utils/dbI18n.js +2 -0
  161. package/lib/utils/googleTranslate.js +2 -0
  162. package/lib/utils/graphqlUtils.js +2 -0
  163. package/lib/utils/index.js +2 -30
  164. package/lib/utils/languageDetection.js +2 -0
  165. package/lib/utils/localeUtils.example.js +2 -0
  166. package/lib/utils/localeUtils.js +2 -0
  167. package/lib/utils/middlewareUtils.js +2 -0
  168. package/lib/utils/sessionUtils.js +2 -0
  169. package/lib/utils/stripeUtils.js +2 -43
  170. package/lib/utils/templateUtils.js +2 -0
  171. package/lib/utils/testUtils.js +2 -0
  172. package/lib/utils/translationQueue.example.js +2 -0
  173. package/lib/utils/translationQueue.js +2 -0
  174. package/package.json +27 -24
  175. package/.prettierrc.js +0 -4
  176. package/lib/actions/apps.d.ts +0 -25
  177. package/lib/actions/connections.d.ts +0 -4
  178. package/lib/actions/conversations.d.ts +0 -14
  179. package/lib/actions/dynamodb.d.ts +0 -8
  180. package/lib/actions/email.d.ts +0 -5
  181. package/lib/actions/files.d.ts +0 -19
  182. package/lib/actions/groups.d.ts +0 -14
  183. package/lib/actions/images.d.ts +0 -26
  184. package/lib/actions/index.d.ts +0 -23
  185. package/lib/actions/ios.d.ts +0 -7
  186. package/lib/actions/locations.d.ts +0 -6
  187. package/lib/actions/messages.d.ts +0 -14
  188. package/lib/actions/notifications.d.ts +0 -5
  189. package/lib/actions/payments.d.ts +0 -10
  190. package/lib/actions/personas.d.ts +0 -3
  191. package/lib/actions/personas.js +0 -110
  192. package/lib/actions/posts.d.ts +0 -22
  193. package/lib/actions/reactions.d.ts +0 -30
  194. package/lib/actions/s3.d.ts +0 -7
  195. package/lib/actions/search.d.ts +0 -3
  196. package/lib/actions/sms.d.ts +0 -9
  197. package/lib/actions/statistics.d.ts +0 -3
  198. package/lib/actions/subscription.d.ts +0 -7
  199. package/lib/actions/subscription.js +0 -208
  200. package/lib/actions/tags.d.ts +0 -34
  201. package/lib/actions/users.d.ts +0 -72
  202. package/lib/actions/websockets.d.ts +0 -20
  203. package/lib/adapters/arangoAdapter.d.ts +0 -2
  204. package/lib/adapters/fileAdapter.d.ts +0 -3
  205. package/lib/adapters/imageAdapter.d.ts +0 -2
  206. package/lib/adapters/messageAdapter.d.ts +0 -2
  207. package/lib/adapters/postAdapter.d.ts +0 -2
  208. package/lib/adapters/reaktorAdapter.d.ts +0 -6
  209. package/lib/adapters/tagAdapter.d.ts +0 -2
  210. package/lib/adapters/userAdapter.d.ts +0 -2
  211. package/lib/config.d.ts +0 -20
  212. package/lib/index.d.ts +0 -12
  213. package/lib/lambdas/actions/websockets.d.ts +0 -7
  214. package/lib/lambdas/authorizer.d.ts +0 -20
  215. package/lib/lambdas/connection.d.ts +0 -12
  216. package/lib/lambdas/utils/message.d.ts +0 -1
  217. package/lib/lambdas/utils/websocket.d.ts +0 -7
  218. package/lib/mocks/conversation.d.ts +0 -8
  219. package/lib/mocks/file.d.ts +0 -11
  220. package/lib/mocks/group.d.ts +0 -17
  221. package/lib/mocks/image.d.ts +0 -3
  222. package/lib/mocks/post.d.ts +0 -38
  223. package/lib/mocks/tag.d.ts +0 -2
  224. package/lib/mocks/user.d.ts +0 -4
  225. package/lib/mutations/index.d.ts +0 -3
  226. package/lib/mutations/locations.d.ts +0 -2
  227. package/lib/mutations/messages.d.ts +0 -2
  228. package/lib/mutations/personas.d.ts +0 -2
  229. package/lib/mutations/personas.js +0 -100
  230. package/lib/mutations/posts.d.ts +0 -2
  231. package/lib/mutations/reactions.d.ts +0 -2
  232. package/lib/mutations/statistics.d.ts +0 -2
  233. package/lib/mutations/subscriptions.d.ts +0 -2
  234. package/lib/mutations/tags.d.ts +0 -2
  235. package/lib/mutations/users.d.ts +0 -1
  236. package/lib/objectTypes/app.d.ts +0 -3
  237. package/lib/objectTypes/bankAccount.d.ts +0 -1
  238. package/lib/objectTypes/connection.d.ts +0 -1
  239. package/lib/objectTypes/conversation.d.ts +0 -2
  240. package/lib/objectTypes/creditCard.d.ts +0 -1
  241. package/lib/objectTypes/document.d.ts +0 -1
  242. package/lib/objectTypes/error.d.ts +0 -1
  243. package/lib/objectTypes/external.d.ts +0 -1
  244. package/lib/objectTypes/file.d.ts +0 -2
  245. package/lib/objectTypes/filter.d.ts +0 -1
  246. package/lib/objectTypes/group.d.ts +0 -3
  247. package/lib/objectTypes/iapSubscription.d.ts +0 -1
  248. package/lib/objectTypes/image.d.ts +0 -2
  249. package/lib/objectTypes/index.d.ts +0 -24
  250. package/lib/objectTypes/location.d.ts +0 -2
  251. package/lib/objectTypes/message.d.ts +0 -2
  252. package/lib/objectTypes/passcode.d.ts +0 -1
  253. package/lib/objectTypes/persona.d.ts +0 -3
  254. package/lib/objectTypes/persona.js +0 -87
  255. package/lib/objectTypes/plan.d.ts +0 -2
  256. package/lib/objectTypes/post.d.ts +0 -2
  257. package/lib/objectTypes/reaction.d.ts +0 -2
  258. package/lib/objectTypes/relation.d.ts +0 -1
  259. package/lib/objectTypes/search.d.ts +0 -1
  260. package/lib/objectTypes/statistics.d.ts +0 -1
  261. package/lib/objectTypes/subscription.d.ts +0 -2
  262. package/lib/objectTypes/tag.d.ts +0 -2
  263. package/lib/objectTypes/user.d.ts +0 -4
  264. package/lib/queries/index.d.ts +0 -3
  265. package/lib/queries/locations.d.ts +0 -2
  266. package/lib/queries/messages.d.ts +0 -2
  267. package/lib/queries/posts.d.ts +0 -2
  268. package/lib/queries/reactions.d.ts +0 -2
  269. package/lib/queries/statistics.d.ts +0 -2
  270. package/lib/queries/subscriptions.d.ts +0 -2
  271. package/lib/queries/tags.d.ts +0 -2
  272. package/lib/queries/users.d.ts +0 -1
  273. package/lib/templates/email/layout.d.ts +0 -2
  274. package/lib/templates/email/passwordForgot.d.ts +0 -2
  275. package/lib/templates/email/passwordRecovery.d.ts +0 -2
  276. package/lib/templates/email/verifyEmail.d.ts +0 -2
  277. package/lib/templates/email/welcome.d.ts +0 -2
  278. package/lib/templates/sms/passwordForgot.d.ts +0 -2
  279. package/lib/templates/sms/passwordRecovery.d.ts +0 -2
  280. package/lib/templates/sms/verifyEmail.d.ts +0 -2
  281. package/lib/templates/sms/verifyPhone.d.ts +0 -2
  282. package/lib/templates/sms/welcome.d.ts +0 -2
  283. package/lib/types/apps.types.d.ts +0 -46
  284. package/lib/types/arangodb.types.d.ts +0 -34
  285. package/lib/types/auth.types.d.ts +0 -9
  286. package/lib/types/connections.types.d.ts +0 -5
  287. package/lib/types/conversations.types.d.ts +0 -27
  288. package/lib/types/email.types.d.ts +0 -13
  289. package/lib/types/error.types.d.ts +0 -20
  290. package/lib/types/files.types.d.ts +0 -23
  291. package/lib/types/google.types.d.ts +0 -29
  292. package/lib/types/groups.types.d.ts +0 -18
  293. package/lib/types/images.types.d.ts +0 -52
  294. package/lib/types/index.d.ts +0 -20
  295. package/lib/types/locations.types.d.ts +0 -18
  296. package/lib/types/messages.types.d.ts +0 -16
  297. package/lib/types/notifications.types.d.ts +0 -19
  298. package/lib/types/payments.types.d.ts +0 -109
  299. package/lib/types/personas.types.d.ts +0 -32
  300. package/lib/types/personas.types.js +0 -16
  301. package/lib/types/posts.types.d.ts +0 -28
  302. package/lib/types/statistics.types.d.ts +0 -3
  303. package/lib/types/tags.types.d.ts +0 -15
  304. package/lib/types/users.types.d.ts +0 -79
  305. package/lib/types/websockets.types.d.ts +0 -18
  306. package/lib/utils/adapterUtils.d.ts +0 -1
  307. package/lib/utils/analyticsUtils.d.ts +0 -21
  308. package/lib/utils/arangodbUtils.d.ts +0 -66
  309. package/lib/utils/auth.d.ts +0 -21
  310. package/lib/utils/auth.js +0 -57
  311. package/lib/utils/index.d.ts +0 -5
  312. package/lib/utils/session.d.ts +0 -18
  313. package/lib/utils/session.js +0 -60
  314. package/lib/utils/stripeUtils.d.ts +0 -3
@@ -0,0 +1,8 @@
1
+ import{createHash as U,parseChar as E,parseId as q,parseVarChar as e}from"@nlabs/utils";import{aql as A}from"arangojs";import{useDb as I}from"../utils/arangodbUtils";const R=(N,n)=>{const{databaseName:P}=N,{city:d,country:t,street1:i,street2:r,zip:f,state:u,timezone:o,firstName:s,lastName:a,gender:p,name:m,userId:y}=n,l={city:d!==void 0?e(d,32):void 0,country:t!==void 0?e(t,32):void 0,firstName:s!==void 0?e(s,32):void 0,gender:p!==void 0?E(p,1).toUpperCase():void 0,lastName:a!==void 0?e(a,32):void 0,modified:Date.now(),name:m!==void 0?e(m,32):void 0,state:u!==void 0?e(u,2):void 0,street1:i!==void 0?e(i,32):void 0,street2:r!==void 0?e(r,32):void 0,timezone:o!==void 0?e(o,32):void 0,zip:f!==void 0?e(f,15):void 0},c={...l,_key:U(y),added:Date.now(),userId:q(y)},T=A`UPSERT {sub: ${c._key}}
2
+ INSERT ${c}
3
+ UPDATE ${l}
4
+ IN profiles RETURN NEW`;return I(P).query(T).then(z=>z.next())},$=(N,n)=>{const{databaseName:P}=N,{city:d,country:t,street1:i,street2:r,zip:f,state:u,timezone:o,firstName:s,lastName:a,gender:p,name:m,userId:y}=n,l={city:d!==void 0?e(d,32):void 0,country:t!==void 0?e(t,32):void 0,firstName:s!==void 0?e(s,32):void 0,gender:p!==void 0?E(p,1).toUpperCase():void 0,lastName:a!==void 0?e(a,32):void 0,modified:Date.now(),name:m!==void 0?e(m,32):void 0,state:u!==void 0?e(u,2):void 0,street1:i!==void 0?e(i,32):void 0,street2:r!==void 0?e(r,32):void 0,timezone:o!==void 0?e(o,32):void 0,userId:y!==void 0?q(y):void 0,zip:f!==void 0?e(f,15):void 0},c=A`UPDATE {sub: ${n._key}}
5
+ INSERT ${n}
6
+ UPDATE ${l}
7
+ IN profiles RETURN NEW`;return I(P).query(c).then(T=>T.next())};export{R as addProfile,$ as updateProfile};
8
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcHJvZmlsZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuXG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzJztcblxuaW1wb3J0IHR5cGUge0FwaUNvbnRleHQsIFByb2ZpbGVUeXBlfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmV4cG9ydCBjb25zdCBhZGRQcm9maWxlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHByb2ZpbGU6IFByb2ZpbGVUeXBlKTogUHJvbWlzZTxQcm9maWxlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtcbiAgICBjaXR5LFxuICAgIGNvdW50cnksXG4gICAgc3RyZWV0MSxcbiAgICBzdHJlZXQyLFxuICAgIHppcCxcbiAgICBzdGF0ZSxcbiAgICB0aW1lem9uZSxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgZ2VuZGVyLFxuICAgIG5hbWUsXG4gICAgdXNlcklkXG4gIH0gPSBwcm9maWxlO1xuXG4gIGNvbnN0IHVwZGF0ZTogUHJvZmlsZVR5cGUgPSB7XG4gICAgY2l0eTogY2l0eSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKGNpdHksIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBjb3VudHJ5OiBjb3VudHJ5ICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoY291bnRyeSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGZpcnN0TmFtZTogZmlyc3ROYW1lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoZmlyc3ROYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgZ2VuZGVyOiBnZW5kZXIgIT09IHVuZGVmaW5lZCA/IHBhcnNlQ2hhcihnZW5kZXIsIDEpLnRvVXBwZXJDYXNlKCkgOiB1bmRlZmluZWQsXG4gICAgbGFzdE5hbWU6IGxhc3ROYW1lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIobGFzdE5hbWUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBtb2RpZmllZDogRGF0ZS5ub3coKSxcbiAgICBuYW1lOiBuYW1lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIobmFtZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHN0YXRlOiBzdGF0ZSAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHN0YXRlLCAyKSA6IHVuZGVmaW5lZCxcbiAgICBzdHJlZXQxOiBzdHJlZXQxICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoc3RyZWV0MSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHN0cmVldDI6IHN0cmVldDIgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihzdHJlZXQyLCAzMikgOiB1bmRlZmluZWQsXG4gICAgdGltZXpvbmU6IHRpbWV6b25lICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIodGltZXpvbmUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICB6aXA6IHppcCAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHppcCwgMTUpIDogdW5kZWZpbmVkXG4gIH07XG5cbiAgY29uc3QgaW5zZXJ0OiBQcm9maWxlVHlwZSA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogY3JlYXRlSGFzaCh1c2VySWQpLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIHVzZXJJZDogcGFyc2VJZCh1c2VySWQpXG4gIH07XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge3N1YjogJHtpbnNlcnQuX2tleX19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBwcm9maWxlcyBSRVRVUk4gTkVXYDtcbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVByb2ZpbGUgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcHJvZmlsZTogUHJvZmlsZVR5cGUpOiBQcm9taXNlPFByb2ZpbGVUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNpdHksXG4gICAgY291bnRyeSxcbiAgICBzdHJlZXQxLFxuICAgIHN0cmVldDIsXG4gICAgemlwLFxuICAgIHN0YXRlLFxuICAgIHRpbWV6b25lLFxuICAgIGZpcnN0TmFtZSxcbiAgICBsYXN0TmFtZSxcbiAgICBnZW5kZXIsXG4gICAgbmFtZSxcbiAgICB1c2VySWRcbiAgfSA9IHByb2ZpbGU7XG5cbiAgY29uc3QgdXBkYXRlOiBQcm9maWxlVHlwZSA9IHtcbiAgICBjaXR5OiBjaXR5ICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoY2l0eSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIGNvdW50cnk6IGNvdW50cnkgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihjb3VudHJ5LCAzMikgOiB1bmRlZmluZWQsXG4gICAgZmlyc3ROYW1lOiBmaXJzdE5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihmaXJzdE5hbWUsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICBnZW5kZXI6IGdlbmRlciAhPT0gdW5kZWZpbmVkID8gcGFyc2VDaGFyKGdlbmRlciwgMSkudG9VcHBlckNhc2UoKSA6IHVuZGVmaW5lZCxcbiAgICBsYXN0TmFtZTogbGFzdE5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihsYXN0TmFtZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpLFxuICAgIG5hbWU6IG5hbWUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihuYW1lLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHN0YXRlICE9PSB1bmRlZmluZWQgPyBwYXJzZVZhckNoYXIoc3RhdGUsIDIpIDogdW5kZWZpbmVkLFxuICAgIHN0cmVldDE6IHN0cmVldDEgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcihzdHJlZXQxLCAzMikgOiB1bmRlZmluZWQsXG4gICAgc3RyZWV0Mjogc3RyZWV0MiAhPT0gdW5kZWZpbmVkID8gcGFyc2VWYXJDaGFyKHN0cmVldDIsIDMyKSA6IHVuZGVmaW5lZCxcbiAgICB0aW1lem9uZTogdGltZXpvbmUgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih0aW1lem9uZSwgMzIpIDogdW5kZWZpbmVkLFxuICAgIHVzZXJJZDogdXNlcklkICE9PSB1bmRlZmluZWQgPyBwYXJzZUlkKHVzZXJJZCkgOiB1bmRlZmluZWQsXG4gICAgemlwOiB6aXAgIT09IHVuZGVmaW5lZCA/IHBhcnNlVmFyQ2hhcih6aXAsIDE1KSA6IHVuZGVmaW5lZFxuICB9O1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFIHtzdWI6ICR7cHJvZmlsZS5fa2V5fX1cbiAgICBJTlNFUlQgJHtwcm9maWxlfVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBwcm9maWxlcyBSRVRVUk4gTkVXYDtcbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xufTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxPQUFRLGNBQUFBLEVBQVksYUFBQUMsRUFBVyxXQUFBQyxFQUFTLGdCQUFBQyxNQUFtQixlQUMzRCxPQUFRLE9BQUFDLE1BQVUsV0FFbEIsT0FBUSxTQUFBQyxNQUFZLHlCQUtiLE1BQU1DLEVBQWEsQ0FBQ0MsRUFBcUJDLElBQStDLENBQzdGLEtBQU0sQ0FBQyxhQUFBQyxDQUFZLEVBQUlGLEVBQ2pCLENBQ0osS0FBQUcsRUFDQSxRQUFBQyxFQUNBLFFBQUFDLEVBQ0EsUUFBQUMsRUFDQSxJQUFBQyxFQUNBLE1BQUFDLEVBQ0EsU0FBQUMsRUFDQSxVQUFBQyxFQUNBLFNBQUFDLEVBQ0EsT0FBQUMsRUFDQSxLQUFBQyxFQUNBLE9BQUFDLENBQ0YsRUFBSWIsRUFFRWMsRUFBc0IsQ0FDMUIsS0FBTVosSUFBUyxPQUFZUCxFQUFhTyxFQUFNLEVBQUUsRUFBSSxPQUNwRCxRQUFTQyxJQUFZLE9BQVlSLEVBQWFRLEVBQVMsRUFBRSxFQUFJLE9BQzdELFVBQVdNLElBQWMsT0FBWWQsRUFBYWMsRUFBVyxFQUFFLEVBQUksT0FDbkUsT0FBUUUsSUFBVyxPQUFZbEIsRUFBVWtCLEVBQVEsQ0FBQyxFQUFFLFlBQVksRUFBSSxPQUNwRSxTQUFVRCxJQUFhLE9BQVlmLEVBQWFlLEVBQVUsRUFBRSxFQUFJLE9BQ2hFLFNBQVUsS0FBSyxJQUFJLEVBQ25CLEtBQU1FLElBQVMsT0FBWWpCLEVBQWFpQixFQUFNLEVBQUUsRUFBSSxPQUNwRCxNQUFPTCxJQUFVLE9BQVlaLEVBQWFZLEVBQU8sQ0FBQyxFQUFJLE9BQ3RELFFBQVNILElBQVksT0FBWVQsRUFBYVMsRUFBUyxFQUFFLEVBQUksT0FDN0QsUUFBU0MsSUFBWSxPQUFZVixFQUFhVSxFQUFTLEVBQUUsRUFBSSxPQUM3RCxTQUFVRyxJQUFhLE9BQVliLEVBQWFhLEVBQVUsRUFBRSxFQUFJLE9BQ2hFLElBQUtGLElBQVEsT0FBWVgsRUFBYVcsRUFBSyxFQUFFLEVBQUksTUFDbkQsRUFFTVMsRUFBc0IsQ0FDMUIsR0FBR0QsRUFDSCxLQUFNdEIsRUFBV3FCLENBQU0sRUFDdkIsTUFBTyxLQUFLLElBQUksRUFDaEIsT0FBUW5CLEVBQVFtQixDQUFNLENBQ3hCLEVBRU1HLEVBQW1CcEIsaUJBQW1CbUIsRUFBTyxJQUFJO0FBQUEsYUFDNUNBLENBQU07QUFBQSxhQUNORCxDQUFNO0FBQUEsNEJBRWpCLE9BQU9qQixFQUFNSSxDQUFZLEVBQUUsTUFBTWUsQ0FBTSxFQUFFLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLENBQ3pFLEVBRWFDLEVBQWdCLENBQUNuQixFQUFxQkMsSUFBK0MsQ0FDaEcsS0FBTSxDQUFDLGFBQUFDLENBQVksRUFBSUYsRUFDakIsQ0FDSixLQUFBRyxFQUNBLFFBQUFDLEVBQ0EsUUFBQUMsRUFDQSxRQUFBQyxFQUNBLElBQUFDLEVBQ0EsTUFBQUMsRUFDQSxTQUFBQyxFQUNBLFVBQUFDLEVBQ0EsU0FBQUMsRUFDQSxPQUFBQyxFQUNBLEtBQUFDLEVBQ0EsT0FBQUMsQ0FDRixFQUFJYixFQUVFYyxFQUFzQixDQUMxQixLQUFNWixJQUFTLE9BQVlQLEVBQWFPLEVBQU0sRUFBRSxFQUFJLE9BQ3BELFFBQVNDLElBQVksT0FBWVIsRUFBYVEsRUFBUyxFQUFFLEVBQUksT0FDN0QsVUFBV00sSUFBYyxPQUFZZCxFQUFhYyxFQUFXLEVBQUUsRUFBSSxPQUNuRSxPQUFRRSxJQUFXLE9BQVlsQixFQUFVa0IsRUFBUSxDQUFDLEVBQUUsWUFBWSxFQUFJLE9BQ3BFLFNBQVVELElBQWEsT0FBWWYsRUFBYWUsRUFBVSxFQUFFLEVBQUksT0FDaEUsU0FBVSxLQUFLLElBQUksRUFDbkIsS0FBTUUsSUFBUyxPQUFZakIsRUFBYWlCLEVBQU0sRUFBRSxFQUFJLE9BQ3BELE1BQU9MLElBQVUsT0FBWVosRUFBYVksRUFBTyxDQUFDLEVBQUksT0FDdEQsUUFBU0gsSUFBWSxPQUFZVCxFQUFhUyxFQUFTLEVBQUUsRUFBSSxPQUM3RCxRQUFTQyxJQUFZLE9BQVlWLEVBQWFVLEVBQVMsRUFBRSxFQUFJLE9BQzdELFNBQVVHLElBQWEsT0FBWWIsRUFBYWEsRUFBVSxFQUFFLEVBQUksT0FDaEUsT0FBUUssSUFBVyxPQUFZbkIsRUFBUW1CLENBQU0sRUFBSSxPQUNqRCxJQUFLUCxJQUFRLE9BQVlYLEVBQWFXLEVBQUssRUFBRSxFQUFJLE1BQ25ELEVBRU1VLEVBQW1CcEIsaUJBQW1CSSxFQUFRLElBQUk7QUFBQSxhQUM3Q0EsQ0FBTztBQUFBLGFBQ1BjLENBQU07QUFBQSw0QkFFakIsT0FBT2pCLEVBQU1JLENBQVksRUFBRSxNQUFNZSxDQUFNLEVBQUUsS0FBTUMsR0FBV0EsRUFBTyxLQUFLLENBQUMsQ0FDekUiLAogICJuYW1lcyI6IFsiY3JlYXRlSGFzaCIsICJwYXJzZUNoYXIiLCAicGFyc2VJZCIsICJwYXJzZVZhckNoYXIiLCAiYXFsIiwgInVzZURiIiwgImFkZFByb2ZpbGUiLCAiY29udGV4dCIsICJwcm9maWxlIiwgImRhdGFiYXNlTmFtZSIsICJjaXR5IiwgImNvdW50cnkiLCAic3RyZWV0MSIsICJzdHJlZXQyIiwgInppcCIsICJzdGF0ZSIsICJ0aW1lem9uZSIsICJmaXJzdE5hbWUiLCAibGFzdE5hbWUiLCAiZ2VuZGVyIiwgIm5hbWUiLCAidXNlcklkIiwgInVwZGF0ZSIsICJpbnNlcnQiLCAiYXFsUXJ5IiwgImN1cnNvciIsICJ1cGRhdGVQcm9maWxlIl0KfQo=
@@ -1,322 +1,35 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
- var __getOwnPropNames = Object.getOwnPropertyNames;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- var __export = (target, all) => {
6
- for (var name in all)
7
- __defProp(target, name, { get: all[name], enumerable: true });
8
- };
9
- var __copyProps = (to, from, except, desc) => {
10
- if (from && typeof from === "object" || typeof from === "function") {
11
- for (let key of __getOwnPropNames(from))
12
- if (!__hasOwnProp.call(to, key) && key !== except)
13
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
- }
15
- return to;
16
- };
17
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
- var reactions_exports = {};
19
- __export(reactions_exports, {
20
- addReaction: () => addReaction,
21
- deleteReaction: () => deleteReaction,
22
- deleteReactionByItem: () => deleteReactionByItem,
23
- getGroupUsersByReaction: () => getGroupUsersByReaction,
24
- getItemsByReaction: () => getItemsByReaction,
25
- getReactionCount: () => getReactionCount,
26
- getReactionCountByUser: () => getReactionCountByUser,
27
- getReactionsByItem: () => getReactionsByItem,
28
- hasReaction: () => hasReaction,
29
- parseReactionOptions: () => parseReactionOptions,
30
- updateReaction: () => updateReaction
31
- });
32
- module.exports = __toCommonJS(reactions_exports);
33
- var import_utils = require("@nlabs/utils");
34
- var import_arangojs = require("arangojs");
35
- var import_error = require("../types/error.types");
36
- var import_analyticsUtils = require("../utils/analyticsUtils");
37
- var import_arangodbUtils = require("../utils/arangodbUtils");
38
- const eventCategory = "reactions";
39
- const parseReactionOptions = (options = {}) => {
40
- const {
41
- from = 0,
42
- to = 30
43
- } = options;
44
- return {
45
- limit: (0, import_arangodbUtils.getLimit)(from, to)
46
- };
47
- };
48
- const addReaction = (context, itemId, reaction = {}, allowDuplicate = false) => {
49
- const action = "addReaction";
50
- const { database, session: { userId: sessionId } } = context;
51
- if (!sessionId) {
52
- return (0, import_analyticsUtils.logException)({
53
- action,
54
- category: eventCategory,
55
- label: "unauthorized",
56
- value: "invalid_session"
57
- }, context).then(() => null);
58
- }
59
- const {
60
- name: itemName = "like",
61
- value: itemValue
62
- } = reaction;
63
- const formatItemId = (0, import_utils.parseArangoId)(itemId);
64
- const formatReactionName = (0, import_utils.parseChar)(itemName, 32);
65
- const formatValue = (0, import_utils.parseString)(itemValue, 32);
66
- const edgeCollection = database.collection("hasReaction");
67
- const sessionDocId = `users/${sessionId}`;
68
- const edgeId = (0, import_utils.createHash)(`reaction-${formatItemId}-${sessionId}`);
69
- const edge = {
70
- _from: sessionDocId,
71
- _key: edgeId,
72
- _to: formatItemId,
73
- added: Date.now(),
74
- name: formatReactionName,
75
- value: itemValue !== void 0 ? formatValue : void 0
76
- };
77
- if (!allowDuplicate) {
78
- const aqlQry = import_arangojs.aql`FOR r IN hasReaction
79
- FILTER r._from == ${sessionDocId} && r._to == ${formatItemId} && r.name == ${formatReactionName}
1
+ import{createHash as $,parseArangoId as p,parseChar as h,parseId as U,parseNum as B,parseString as b}from"@nlabs/utils";import{aql as T}from"arangojs";import{ErrorTypes as E}from"../types/error.types";import{logError as N,logException as O}from"../utils/analyticsUtils";import{getLimit as q,useDb as g}from"../utils/arangodbUtils";const m="reactions",_=(e={})=>{const{from:o=0,to:n=30}=e;return{limit:q(o,n)}},x=(e,o,n={},a=!1)=>{const r="addReaction",{databaseName:s,session:{userId:i}}=e;if(!i)return O({action:r,category:m,label:"unauthorized",value:"invalid_session"},e).then(()=>null);const{name:l="like",value:t}=n,u=p(o),c=h(l,32),d=b(t,32),R=g(s).collection("hasReaction"),I=`users/${i}`,A=$(`reaction-${u}-${i}`),y={_from:I,_key:A,_to:u,added:Date.now(),name:c,value:t!==void 0?d:void 0};if(!a){const D=T`FOR r IN hasReaction
2
+ FILTER r._from == ${I} && r._to == ${u} && r.name == ${c}
80
3
  LIMIT 1
81
- RETURN r`;
82
- return database.query(aqlQry).then((cursor) => cursor.next()).then((reaction2) => {
83
- if (!!reaction2) {
84
- return reaction2;
85
- }
86
- return edgeCollection.save(edge, { returnNew: true }).then(() => edge);
87
- }).catch((error) => {
88
- console.log("addReaction::error", error);
89
- return (0, import_analyticsUtils.logError)({
90
- action,
91
- category: eventCategory,
92
- label: import_error.ErrorTypes.DATABASE_ERROR
93
- }, error, context).then(() => null);
94
- });
95
- }
96
- return edgeCollection.save(edge, { returnNew: true }).then(() => edge);
97
- };
98
- const deleteReaction = (context, reactionId) => {
99
- const action = "deleteReaction";
100
- const { database, session: { userId: sessionId } } = context;
101
- if (!sessionId) {
102
- return (0, import_analyticsUtils.logException)({
103
- action,
104
- category: eventCategory,
105
- label: "unauthorized",
106
- value: "invalid_session"
107
- }, context).then(() => null);
108
- }
109
- const formatSessionId = `users/${(0, import_utils.parseId)(sessionId)}`;
110
- const formatReactionId = `hasReaction/${(0, import_utils.parseId)(reactionId)}`;
111
- const aqlQry = import_arangojs.aql`LET r = DOCUMENT(${formatReactionId})
112
- FILTER r._from == ${formatSessionId}
4
+ RETURN r`;return g(s).query(D).then(f=>f.next()).then(f=>f||R.save(y,{returnNew:!0}).then(()=>y)).catch(f=>N({action:r,category:m,label:E.DATABASE_ERROR},f,e).then(()=>null))}return R.save(y,{returnNew:!0}).then(()=>y)},S=(e,o)=>{const n="deleteReaction",{databaseName:a,session:{userId:r}}=e;if(!r)return O({action:n,category:m,label:"unauthorized",value:"invalid_session"},e).then(()=>null);const s=`users/${U(r)}`,i=`hasReaction/${U(o)}`,l=T`LET r = DOCUMENT(${i})
5
+ FILTER r._from == ${s}
113
6
  LIMIT 1
114
7
  REMOVE r IN hasReaction
115
- RETURN OLD`;
116
- return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analyticsUtils.logError)({
117
- action,
118
- category: eventCategory,
119
- label: import_error.ErrorTypes.DATABASE_ERROR
120
- }, error, context).then(() => null));
121
- };
122
- const deleteReactionByItem = (context, itemId, reactionName) => {
123
- const action = "deleteReactionByItem";
124
- const { database, session: { userId: sessionId } } = context;
125
- if (!sessionId) {
126
- return (0, import_analyticsUtils.logException)({
127
- action,
128
- category: eventCategory,
129
- label: "unauthorized",
130
- value: "invalid_session"
131
- }, context).then(() => null);
132
- }
133
- const formatSessionId = `users/${(0, import_utils.parseId)(sessionId)}`;
134
- const formatItemDocId = (0, import_utils.parseArangoId)(itemId);
135
- const formatReactionName = (0, import_utils.parseChar)(reactionName);
136
- const aqlQry = import_arangojs.aql`FOR r in hasReaction
137
- FILTER r._from == ${formatSessionId} && r._to == ${formatItemDocId} && r.name == ${formatReactionName}
8
+ RETURN OLD`;return g(a).query(l).then(t=>t.next()).catch(t=>N({action:n,category:m,label:E.DATABASE_ERROR},t,e).then(()=>null))},P=(e,o,n)=>{const a="deleteReactionByItem",{databaseName:r,session:{userId:s}}=e;if(!s)return O({action:a,category:m,label:"unauthorized",value:"invalid_session"},e).then(()=>null);const i=`users/${U(s)}`,l=p(o),t=h(n),u=T`FOR r in hasReaction
9
+ FILTER r._from == ${i} && r._to == ${l} && r.name == ${t}
138
10
  LIMIT 1
139
11
  REMOVE r IN hasReaction
140
- RETURN OLD`;
141
- return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analyticsUtils.logError)({
142
- action,
143
- category: eventCategory,
144
- label: import_error.ErrorTypes.DATABASE_ERROR
145
- }, error, context).then(() => null));
146
- };
147
- const updateReaction = (context, reaction = {}) => {
148
- const action = "updateReaction";
149
- const { database, session: { userId: sessionId } } = context;
150
- if (!sessionId) {
151
- return (0, import_analyticsUtils.logException)({
152
- action,
153
- category: eventCategory,
154
- label: "unauthorized",
155
- value: "invalid_session"
156
- }, context).then(() => null);
157
- }
158
- const {
159
- id: itemId,
160
- name: itemName,
161
- value: itemValue
162
- } = reaction;
163
- const formatId = (0, import_utils.parseArangoId)(itemId);
164
- const formatName = (0, import_utils.parseChar)(itemName, 32);
165
- const formatValue = (0, import_utils.parseString)(itemValue, 32);
166
- const edgeId = (0, import_utils.createHash)(`reaction-${formatId}-${sessionId}`);
167
- const update = {
168
- name: formatName,
169
- value: formatValue
170
- };
171
- const insert = {
172
- ...update,
173
- _key: edgeId,
174
- added: Date.now()
175
- };
176
- const aqlQry = import_arangojs.aql`UPSERT ${{ _id: formatId }}
177
- INSERT ${insert}
178
- UPDATE ${update}
12
+ RETURN OLD`;return g(r).query(u).then(c=>c.next()).catch(c=>N({action:a,category:m,label:E.DATABASE_ERROR},c,e).then(()=>null))},M=(e,o={})=>{const n="updateReaction",{databaseName:a,session:{userId:r}}=e;if(!r)return O({action:n,category:m,label:"unauthorized",value:"invalid_session"},e).then(()=>null);const{id:s,name:i,value:l}=o,t=p(s),u=h(i,32),c=b(l,32),d=$(`reaction-${t}-${r}`),R={name:u,value:c},I={...R,_key:d,added:Date.now()},A=T`UPSERT ${{_id:t}}
13
+ INSERT ${I}
14
+ UPDATE ${R}
179
15
  LIMIT 1
180
- RETURN NEW`;
181
- return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analyticsUtils.logError)({
182
- action,
183
- category: eventCategory,
184
- label: import_error.ErrorTypes.DATABASE_ERROR
185
- }, error, context).then(() => null));
186
- };
187
- const getReactionCount = (context, itemId, reactionName) => {
188
- const action = "getReactionCount";
189
- const { database } = context;
190
- const formatItemId = (0, import_utils.parseArangoId)(itemId);
191
- const formatReactionName = (0, import_utils.parseChar)(reactionName, 32);
192
- const aqlQry = import_arangojs.aql`FOR i, r IN INBOUND ${formatItemId} hasReaction
193
- FILTER r.name == ${formatReactionName}
16
+ RETURN NEW`;return g(a).query(A).then(y=>y.next()).catch(y=>N({action:n,category:m,label:E.DATABASE_ERROR},y,e).then(()=>null))},V=(e,o,n)=>{const a="getReactionCount",{databaseName:r}=e,s=p(o),i=h(n,32),l=T`FOR i, r IN INBOUND ${s} hasReaction
17
+ FILTER r.name == ${i}
194
18
  COLLECT WITH COUNT INTO count
195
- RETURN count`;
196
- return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analyticsUtils.logError)({
197
- action,
198
- category: eventCategory,
199
- label: import_error.ErrorTypes.DATABASE_ERROR
200
- }, error, context).then(() => void 0));
201
- };
202
- const getReactionCountByUser = (context, itemId, itemType, reactionName) => {
203
- const action = "getReactionCountByUser";
204
- const { database, session: { userId: sessionId } } = context;
205
- const formatItemId = (0, import_utils.parseArangoId)(itemId);
206
- const formatReactionName = (0, import_utils.parseChar)(reactionName, 32);
207
- const sessionDocId = `users/${sessionId}`;
208
- const aqlQry = import_arangojs.aql`FOR i, r IN INBOUND ${formatItemId} hasReaction
209
- FILTER r.name == ${formatReactionName} && r._from == ${sessionDocId}
19
+ RETURN count`;return g(r).query(l).then(t=>t.next()).catch(t=>N({action:a,category:m,label:E.DATABASE_ERROR},t,e).then(()=>{}))},G=(e,o,n,a)=>{const r="getReactionCountByUser",{databaseName:s,session:{userId:i}}=e,l=p(o),t=h(a,32),u=`users/${i}`,c=T`FOR i, r IN INBOUND ${l} hasReaction
20
+ FILTER r.name == ${t} && r._from == ${u}
210
21
  COLLECT reactionValue = r.value INTO reactionItems
211
- RETURN MERGE(r, {count: LENGTH(reactionItems[*].r.value)})`;
212
- return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
213
- action,
214
- category: eventCategory,
215
- label: import_error.ErrorTypes.DATABASE_ERROR
216
- }, error, context).then(() => []));
217
- };
218
- const getGroupUsersByReaction = (context, params = {}) => {
219
- const action = "getGroupUsersByReaction";
220
- const { database, session: { userId: sessionId } } = context;
221
- if (!sessionId) {
222
- return (0, import_analyticsUtils.logException)({
223
- action,
224
- category: eventCategory,
225
- label: "unauthorized",
226
- value: "invalid_session"
227
- }, context).then(() => null);
228
- }
229
- const { filters = [], id: groupId, value } = params;
230
- const reaction = (0, import_utils.parseChar)(value, 32);
231
- const groupDocId = (0, import_utils.parseArangoId)(groupId);
232
- const filterStr = filters.map((filter) => {
233
- const { conditional, name, value: queryValue } = filter;
234
- let filterCond = conditional;
235
- if (conditional !== ">=" && conditional !== "<=" && conditional !== ">" && conditional !== "<") {
236
- filterCond = "==";
237
- }
238
- switch (name) {
239
- case "added":
240
- return `r.added ${filterCond} ${(0, import_utils.parseNum)(queryValue)}`;
241
- default:
242
- return "";
243
- }
244
- }).concat([
245
- `r.value == "${reaction}"`,
246
- "u._id == r._from"
247
- ]).join(" && ");
248
- const aqlQry = `FOR g, r IN INBOUND "${groupDocId}" hasReaction
22
+ RETURN MERGE(r, {count: LENGTH(reactionItems[*].r.value)})`;return g(s).query(c).then(d=>d.all()).catch(d=>N({action:r,category:m,label:E.DATABASE_ERROR},d,e).then(()=>[]))},w=(e,o={})=>{const n="getGroupUsersByReaction",{databaseName:a,session:{userId:r}}=e;if(!r)return O({action:n,category:m,label:"unauthorized",value:"invalid_session"},e).then(()=>null);const{filters:s=[],id:i,value:l}=o,t=h(l,32),u=p(i),c=s.map(R=>{const{conditional:I,name:A,value:y}=R;let D=I;switch(I!==">="&&I!=="<="&&I!==">"&&I!=="<"&&(D="=="),A){case"added":return`r.added ${D} ${B(y)}`;default:return""}}).concat([`r.value == "${t}"`,"u._id == r._from"]).join(" && "),d=`FOR g, r IN INBOUND "${u}" hasReaction
249
23
  FOR u IN users
250
- FILTER ${filterStr}
251
- RETURN u`;
252
- return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
253
- action,
254
- category: eventCategory,
255
- label: import_error.ErrorTypes.DATABASE_ERROR
256
- }, error, context).then(() => []));
257
- };
258
- const getReactionsByItem = (context, itemId, reactionName, options) => {
259
- const action = "getReactionsByItem";
260
- const { database } = context;
261
- const formatItemId = (0, import_utils.parseArangoId)(itemId);
262
- const formatReactionName = (0, import_utils.parseChar)(reactionName, 32);
263
- const { limit } = parseReactionOptions(options);
264
- const aqlQry = `FOR i, r IN INBOUND "${formatItemId}" hasReaction
265
- FILTER r.name == "${formatReactionName}"
266
- ${limit.aql}
267
- RETURN MERGE(i, {reaction: r})`;
268
- return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
269
- action,
270
- category: eventCategory,
271
- label: import_error.ErrorTypes.DATABASE_ERROR
272
- }, error, context).then(() => []));
273
- };
274
- const getItemsByReaction = (context, itemId, reactionName, options) => {
275
- const action = "getItemsByReaction";
276
- const { database } = context;
277
- const formatItemId = (0, import_utils.parseArangoId)(itemId);
278
- const formatReactionName = (0, import_utils.parseChar)(reactionName, 32);
279
- const { limit } = parseReactionOptions(options);
280
- const aqlQry = `FOR u, r IN OUTBOUND "${formatItemId}" hasReaction
281
- FILTER r.name == ${formatReactionName}
282
- ${limit.aql}
283
- RETURN MERGE(u, {reaction: r})`;
284
- return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => (0, import_analyticsUtils.logError)({
285
- action,
286
- category: eventCategory,
287
- label: import_error.ErrorTypes.DATABASE_ERROR
288
- }, error, context).then(() => []));
289
- };
290
- const hasReaction = (context, itemId, reactionName, direction = "OUTBOUND") => {
291
- const action = "hasReaction";
292
- const { database, session: { userId: sessionId } } = context;
293
- const sessionDocId = `users/${sessionId}`;
294
- const formatItemId = (0, import_utils.parseArangoId)(itemId);
295
- const formatDirection = direction === "OUTBOUND" ? "OUTBOUND" : "INBOUND";
296
- const itemDirection = direction === "OUTBOUND" ? "r._to" : "r._from";
297
- const aqlQry = `FOR i, r IN ${formatDirection} "${sessionDocId}" hasReaction
298
- FILTER r.name == "${reactionName}" && ${itemDirection} == "${formatItemId}"
24
+ FILTER ${c}
25
+ RETURN u`;return g(a).query(d).then(R=>R.all()).catch(R=>N({action:n,category:m,label:E.DATABASE_ERROR},R,e).then(()=>[]))},z=(e,o,n,a)=>{const r="getReactionsByItem",{databaseName:s}=e,i=p(o),l=h(n,32),{limit:t}=_(a),u=`FOR i, r IN INBOUND "${i}" hasReaction
26
+ FILTER r.name == "${l}"
27
+ ${t.aql}
28
+ RETURN MERGE(i, {reaction: r})`;return g(s).query(u).then(c=>c.all()).catch(c=>N({action:r,category:m,label:E.DATABASE_ERROR},c,e).then(()=>[]))},k=(e,o,n,a)=>{const r="getItemsByReaction",{databaseName:s}=e,i=p(o),l=h(n,32),{limit:t}=_(a),u=`FOR u, r IN OUTBOUND "${i}" hasReaction
29
+ FILTER r.name == ${l}
30
+ ${t.aql}
31
+ RETURN MERGE(u, {reaction: r})`;return g(s).query(u).then(c=>c.all()).catch(c=>N({action:r,category:m,label:E.DATABASE_ERROR},c,e).then(()=>[]))},H=(e,o,n,a="OUTBOUND")=>{const r="hasReaction",{databaseName:s,session:{userId:i}}=e,l=`users/${i}`,t=p(o),d=`FOR i, r IN ${a==="OUTBOUND"?"OUTBOUND":"INBOUND"} "${l}" hasReaction
32
+ FILTER r.name == "${n}" && ${a==="OUTBOUND"?"r._to":"r._from"} == "${t}"
299
33
  LIMIT 1
300
- RETURN r`;
301
- console.log({ aqlQry });
302
- return database.query(aqlQry).then((cursor) => cursor.next()).then((reactions) => reactions ? reactions.value === "true" : false).catch((error) => (0, import_analyticsUtils.logError)({
303
- action,
304
- category: eventCategory,
305
- label: import_error.ErrorTypes.DATABASE_ERROR
306
- }, error, context).then(() => false));
307
- };
308
- // Annotate the CommonJS export names for ESM import in node:
309
- 0 && (module.exports = {
310
- addReaction,
311
- deleteReaction,
312
- deleteReactionByItem,
313
- getGroupUsersByReaction,
314
- getItemsByReaction,
315
- getReactionCount,
316
- getReactionCountByUser,
317
- getReactionsByItem,
318
- hasReaction,
319
- parseReactionOptions,
320
- updateReaction
321
- });
322
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcmVhY3Rpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuaW1wb3J0IHtnZXRMaW1pdH0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0LCBBcmFuZ29EYkNvbGxlY3Rpb24sIEFyYW5nb0RiTGltaXQsIFF1ZXJ5RmlsdGVyLCBVc2VyVHlwZSwgVXNlclJlYWN0aW9uUXVlcnl9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAncmVhY3Rpb25zJztcblxuZXhwb3J0IHR5cGUgUmVhY3Rpb25EaXJlY3Rpb24gPSAnSU5CT1VORCcgfCAnT1VUQk9VTkQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aW9uIHtcbiAgcmVhZG9ubHkgX2Zyb20/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IF9rZXk/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IF90bz86IHN0cmluZztcbiAgcmVhZG9ubHkgYWRkZWQ/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvdW50PzogbnVtYmVyO1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgdHlwZT86IEFyYW5nb0RiQ29sbGVjdGlvbjtcbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rpb25PcHRpb25zIHtcbiAgcmVhZG9ubHkgZnJvbT86IG51bWJlcjtcbiAgcmVhZG9ubHkgdG8/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZVJlYWN0aW9uT3B0aW9ucyA9IChvcHRpb25zOiBSZWFjdGlvbk9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCB7XG4gICAgZnJvbSA9IDAsXG4gICAgdG8gPSAzMFxuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFJlYWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb246IFJlYWN0aW9uID0ge30sXG4gIGFsbG93RHVwbGljYXRlOiBib29sZWFuID0gZmFsc2Vcbik6IFByb21pc2U8UmVhY3Rpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgbmFtZTogaXRlbU5hbWUgPSAnbGlrZScsXG4gICAgdmFsdWU6IGl0ZW1WYWx1ZVxuICB9ID0gcmVhY3Rpb247XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihpdGVtTmFtZSwgMzIpO1xuICBjb25zdCBmb3JtYXRWYWx1ZTogc3RyaW5nID0gcGFyc2VTdHJpbmcoaXRlbVZhbHVlLCAzMik7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IGRhdGFiYXNlLmNvbGxlY3Rpb24oJ2hhc1JlYWN0aW9uJyk7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgcmVhY3Rpb24tJHtmb3JtYXRJdGVtSWR9LSR7c2Vzc2lvbklkfWApO1xuICBjb25zdCBlZGdlOiBSZWFjdGlvbiA9IHtcbiAgICBfZnJvbTogc2Vzc2lvbkRvY0lkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdEl0ZW1JZCxcbiAgICBhZGRlZDogRGF0ZS5ub3coKSxcbiAgICBuYW1lOiBmb3JtYXRSZWFjdGlvbk5hbWUsXG4gICAgdmFsdWU6IGl0ZW1WYWx1ZSAhPT0gdW5kZWZpbmVkID8gZm9ybWF0VmFsdWUgOiB1bmRlZmluZWRcbiAgfTtcblxuICAvLyBDaGVjayBmb3IgZHVwbGljYXRlcyBpZiBub3QgYWxsb3dlZFxuICBpZighYWxsb3dEdXBsaWNhdGUpIHtcbiAgICAvLyBRdWVyeVxuICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHIgSU4gaGFzUmVhY3Rpb25cbiAgICAgIEZJTFRFUiByLl9mcm9tID09ICR7c2Vzc2lvbkRvY0lkfSAmJiByLl90byA9PSAke2Zvcm1hdEl0ZW1JZH0gJiYgci5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHJgO1xuXG4gICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAudGhlbigocmVhY3Rpb24pID0+IHtcbiAgICAgICAgaWYoISFyZWFjdGlvbikge1xuICAgICAgICAgIHJldHVybiByZWFjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IGVkZ2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdhZGRSZWFjdGlvbjo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBlZGdlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkOiBzdHJpbmcgPSBgdXNlcnMvJHtwYXJzZUlkKHNlc3Npb25JZCl9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25JZDogc3RyaW5nID0gYGhhc1JlYWN0aW9uLyR7cGFyc2VJZChyZWFjdGlvbklkKX1gO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgTEVUIHIgPSBET0NVTUVOVCgke2Zvcm1hdFJlYWN0aW9uSWR9KVxuICAgIEZJTFRFUiByLl9mcm9tID09ICR7Zm9ybWF0U2Vzc2lvbklkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgciBJTiBoYXNSZWFjdGlvblxuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWFjdGlvbkJ5SXRlbSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVJlYWN0aW9uQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkOiBzdHJpbmcgPSBgdXNlcnMvJHtwYXJzZUlkKHNlc3Npb25JZCl9YDtcbiAgY29uc3QgZm9ybWF0SXRlbURvY0lkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZTogc3RyaW5nID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSk7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgciBpbiBoYXNSZWFjdGlvblxuICAgIEZJTFRFUiByLl9mcm9tID09ICR7Zm9ybWF0U2Vzc2lvbklkfSAmJiByLl90byA9PSAke2Zvcm1hdEl0ZW1Eb2NJZH0gJiYgci5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgciBJTiBoYXNSZWFjdGlvblxuICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbjogUmVhY3Rpb24gPSB7fSk6IFByb21pc2U8UmVhY3Rpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCB7XG4gICAgaWQ6IGl0ZW1JZCxcbiAgICBuYW1lOiBpdGVtTmFtZSxcbiAgICB2YWx1ZTogaXRlbVZhbHVlXG4gIH0gPSByZWFjdGlvbjtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0TmFtZTogc3RyaW5nID0gcGFyc2VDaGFyKGl0ZW1OYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdFZhbHVlOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhpdGVtVmFsdWUsIDMyKTtcbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGByZWFjdGlvbi0ke2Zvcm1hdElkfS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgdXBkYXRlOiBSZWFjdGlvbiA9IHtcbiAgICBuYW1lOiBmb3JtYXROYW1lLFxuICAgIHZhbHVlOiBmb3JtYXRWYWx1ZVxuICB9O1xuICBjb25zdCBpbnNlcnQ6IFJlYWN0aW9uID0ge1xuICAgIC4uLnVwZGF0ZSxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KClcbiAgfTtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQU0VSVCAke3tfaWQ6IGZvcm1hdElkfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfVxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFJlYWN0aW9uQ291bnQnO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZSA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBpLCByIElOIElOQk9VTkQgJHtmb3JtYXRJdGVtSWR9IGhhc1JlYWN0aW9uXG4gICAgRklMVEVSIHIubmFtZSA9PSAke2Zvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICBDT0xMRUNUIFdJVEggQ09VTlQgSU5UTyBjb3VudFxuICAgIFJFVFVSTiBjb3VudGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gdW5kZWZpbmVkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudEJ5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIGl0ZW1UeXBlOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFJlYWN0aW9uQ291bnRCeVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWUgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZCA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGksIHIgSU4gSU5CT1VORCAke2Zvcm1hdEl0ZW1JZH0gaGFzUmVhY3Rpb25cbiAgICAgIEZJTFRFUiByLm5hbWUgPT0gJHtmb3JtYXRSZWFjdGlvbk5hbWV9ICYmIHIuX2Zyb20gPT0gJHtzZXNzaW9uRG9jSWR9XG4gICAgICBDT0xMRUNUIHJlYWN0aW9uVmFsdWUgPSByLnZhbHVlIElOVE8gcmVhY3Rpb25JdGVtc1xuICAgICAgUkVUVVJOIE1FUkdFKHIsIHtjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwVXNlcnNCeVJlYWN0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBhcmFtczogVXNlclJlYWN0aW9uUXVlcnkgPSB7fSk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0R3JvdXBVc2Vyc0J5UmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICBpZighc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAndW5hdXRob3JpemVkJyxcbiAgICAgIHZhbHVlOiAnaW52YWxpZF9zZXNzaW9uJ1xuICAgIH0sIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gIH1cblxuICBjb25zdCB7ZmlsdGVycyA9IFtdLCBpZDogZ3JvdXBJZCwgdmFsdWV9OiBVc2VyUmVhY3Rpb25RdWVyeSA9IHBhcmFtcztcbiAgY29uc3QgcmVhY3Rpb24gPSBwYXJzZUNoYXIodmFsdWUsIDMyKTtcbiAgY29uc3QgZ3JvdXBEb2NJZCA9IHBhcnNlQXJhbmdvSWQoZ3JvdXBJZCk7XG4gIGNvbnN0IGZpbHRlclN0cjogc3RyaW5nID0gZmlsdGVyc1xuICAgIC5tYXAoKGZpbHRlcjogUXVlcnlGaWx0ZXIpID0+IHtcbiAgICAgIGNvbnN0IHtjb25kaXRpb25hbCwgbmFtZSwgdmFsdWU6IHF1ZXJ5VmFsdWV9OiBRdWVyeUZpbHRlciA9IGZpbHRlcjtcbiAgICAgIGxldCBmaWx0ZXJDb25kOiBzdHJpbmcgPSBjb25kaXRpb25hbDtcblxuICAgICAgaWYoY29uZGl0aW9uYWwgIT09ICc+PScgJiYgY29uZGl0aW9uYWwgIT09ICc8PScgJiYgY29uZGl0aW9uYWwgIT09ICc+JyAmJiBjb25kaXRpb25hbCAhPT0gJzwnKSB7XG4gICAgICAgIGZpbHRlckNvbmQgPSAnPT0nO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2gobmFtZSkge1xuICAgICAgICBjYXNlICdhZGRlZCc6XG4gICAgICAgICAgcmV0dXJuIGByLmFkZGVkICR7ZmlsdGVyQ29uZH0gJHtwYXJzZU51bShxdWVyeVZhbHVlKX1gO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jb25jYXQoW1xuICAgICAgYHIudmFsdWUgPT0gXCIke3JlYWN0aW9ufVwiYCxcbiAgICAgICd1Ll9pZCA9PSByLl9mcm9tJ1xuICAgIF0pXG4gICAgLmpvaW4oJyAmJiAnKTtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgZywgciBJTiBJTkJPVU5EIFwiJHtncm91cERvY0lkfVwiIGhhc1JlYWN0aW9uXG4gICAgICBGT1IgdSBJTiB1c2Vyc1xuICAgICAgRklMVEVSICR7ZmlsdGVyU3RyfVxuICAgICAgUkVUVVJOIHVgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gW10pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWFjdGlvbnNCeUl0ZW0gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UmVhY3Rpb25zQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlUmVhY3Rpb25PcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgaSwgciBJTiBJTkJPVU5EIFwiJHtmb3JtYXRJdGVtSWR9XCIgaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5uYW1lID09IFwiJHtmb3JtYXRSZWFjdGlvbk5hbWV9XCJcbiAgICAke2xpbWl0LmFxbH1cbiAgICBSRVRVUk4gTUVSR0UoaSwge3JlYWN0aW9uOiByfSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gW10pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJdGVtc0J5UmVhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbXNCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUsIDMyKTtcbiAgY29uc3Qge2xpbWl0fSA9IHBhcnNlUmVhY3Rpb25PcHRpb25zKG9wdGlvbnMpO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB1LCByIElOIE9VVEJPVU5EIFwiJHtmb3JtYXRJdGVtSWR9XCIgaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfVxuICAgICR7bGltaXQuYXFsfVxuICAgIFJFVFVSTiBNRVJHRSh1LCB7cmVhY3Rpb246IHJ9KWA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1JlYWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGRpcmVjdGlvbjogUmVhY3Rpb25EaXJlY3Rpb24gPSAnT1VUQk9VTkQnXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnaGFzUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdERpcmVjdGlvbiA9IGRpcmVjdGlvbiA9PT0gJ09VVEJPVU5EJyA/ICdPVVRCT1VORCcgOiAnSU5CT1VORCc7XG4gIGNvbnN0IGl0ZW1EaXJlY3Rpb246IHN0cmluZyA9IGRpcmVjdGlvbiA9PT0gJ09VVEJPVU5EJyA/ICdyLl90bycgOiAnci5fZnJvbSc7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGksIHIgSU4gJHtmb3JtYXREaXJlY3Rpb259IFwiJHtzZXNzaW9uRG9jSWR9XCIgaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5uYW1lID09IFwiJHtyZWFjdGlvbk5hbWV9XCIgJiYgJHtpdGVtRGlyZWN0aW9ufSA9PSBcIiR7Zm9ybWF0SXRlbUlkfVwiXG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiByYDtcblxuICBjb25zb2xlLmxvZyh7YXFsUXJ5fSk7XG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVhY3Rpb25zKSA9PiAocmVhY3Rpb25zID8gcmVhY3Rpb25zLnZhbHVlID09PSAndHJ1ZScgOiBmYWxzZSkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBmYWxzZSkpO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBSUEsbUJBQW1GO0FBQ25GLHNCQUFrQjtBQUdsQixtQkFBeUI7QUFDekIsNEJBQXFDO0FBQ3JDLDJCQUF1QjtBQUt2QixNQUFNLGdCQUF3QjtBQXFCdkIsTUFBTSx1QkFBdUIsQ0FBQyxVQUEyQixDQUFDLE1BQU07QUFDckUsUUFBTTtBQUFBLElBQ0osT0FBTztBQUFBLElBQ1AsS0FBSztBQUFBLEVBQ1AsSUFBSTtBQUVKLFNBQU87QUFBQSxJQUNMLFdBQU8sK0JBQVMsTUFBTSxFQUFFO0FBQUEsRUFDMUI7QUFDRjtBQUVPLE1BQU0sY0FBYyxDQUN6QixTQUNBLFFBQ0EsV0FBcUIsQ0FBQyxHQUN0QixpQkFBMEIsVUFDSjtBQUN0QixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxVQUFVLFNBQVMsRUFBQyxRQUFRLFVB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QUMsY0FBaUIsZ0NBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTyx3QkFBVztBQUFBLEVBQ3BCLEdBQUcsT0FBTyxPQUFPLEVBQUUsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JDO0FBRU8sTUFBTSxxQkFBcUIsQ0FDaEMsU0FDQSxRQUNBLGNBQ0EsWUFDd0I7QUFDeEIsUUFBTSxTQUFpQjtBQUN2QixRQUFNLEVBQUMsU0FBUSxJQUFJO0FBQ25CLFFBQU0sbUJBQXVCLDRCQUFjLE1BQU07QUFDakQsUUFBTSx5QkFBNkIsd0JBQVUsY0FBYyxFQUFFO0FBQzdELFFBQU0sRUFBQyxNQUFLLElBQUkscUJBQXFCLE9BQU87QUFHNUMsUUFBTSxTQUFpQix5QkFBeUIsWUFBWTtBQUFBLHVCQUN2QyxrQkFBa0I7QUFBQSxNQUNuQyxNQUFNLEdBQUc7QUFBQTtBQUdiLFNBQU8sU0FBUyxNQUFNLE1BQU0sRUFDekIsS0FBSyxDQUFDLFdBQVcsT0FBTyxJQUFJLENBQUMsRUFDN0IsTUFBTSxDQUFDLGNBQWlCLGdDQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU8sd0JBQVc7QUFBQSxFQUNwQixHQUFHLE9BQU8sT0FBTyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyQztBQUVPLE1BQU0sY0FBYyxDQUN6QixTQUNBLFFBQ0EsY0FDQSxZQUErQixlQUNWO0FBQ3JCLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFVBQVUsU0FBUyxFQUFDLFFBQVEsVUFBUyxFQUFDLElBQUk7QUFDakQsUUFBTSxlQUF1QixTQUFTLFNBQVM7QUFDL0MsUUFBTSxtQkFBdUIsNEJBQWMsTUFBTTtBQUNqRCxRQUFNLGtCQUFrQixjQUFjLGFBQWEsYUFBYTtBQUNoRSxRQUFNLGdCQUF3QixjQUFjLGFBQWEsVUFBVTtBQUduRSxRQUFNLFNBQWlCLGVBQWUsZUFBZSxLQUFLLFlBQVk7QUFBQSx3QkFDaEQsWUFBWSxRQUFRLGFBQWEsUUFBUSxZQUFZO0FBQUE7QUFBQTtBQUkzRSxVQUFRLElBQUksRUFBQyxPQUFNLENBQUM7QUFDcEIsU0FBTyxTQUFTLE1BQU0sTUFBTSxFQUN6QixLQUFLLENBQUMsV0FBVyxPQUFPLEtBQUssQ0FBQyxFQUM5QixLQUFLLENBQUMsY0FBZSxZQUFZLFVBQVUsVUFBVSxTQUFTLEtBQU0sRUFDcEUsTUFBTSxDQUFDLGNBQWlCLGdDQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU8sd0JBQVc7QUFBQSxFQUNwQixHQUFHLE9BQU8sT0FBTyxFQUFFLEtBQUssTUFBTSxLQUFLLENBQUM7QUFDeEM7IiwKICAibmFtZXMiOiBbInJlYWN0aW9uIl0KfQo=
34
+ RETURN r`;return g(s).query(d).then(R=>R.next()).then(R=>R?R.value==="true":!1).catch(R=>N({action:r,category:m,label:E.DATABASE_ERROR},R,e).then(()=>!1))};export{x as addReaction,S as deleteReaction,P as deleteReactionByItem,w as getGroupUsersByReaction,k as getItemsByReaction,V as getReactionCount,G as getReactionCountByUser,z as getReactionsByItem,H as hasReaction,_ as parseReactionOptions,M as updateReaction};
35
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcmVhY3Rpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dCwgQXJhbmdvRGJDb2xsZWN0aW9uLCBBcmFuZ29EYkxpbWl0LCBRdWVyeUZpbHRlciwgVXNlclR5cGUsIFVzZXJSZWFjdGlvblF1ZXJ5fSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgdHlwZSB7RWRnZUNvbGxlY3Rpb259IGZyb20gJ2FyYW5nb2pzL2NvbGxlY3Rpb25zJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ3JlYWN0aW9ucyc7XG5cbmV4cG9ydCB0eXBlIFJlYWN0aW9uRGlyZWN0aW9uID0gJ0lOQk9VTkQnIHwgJ09VVEJPVU5EJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWFjdGlvbiB7XG4gIHJlYWRvbmx5IF9mcm9tPzogc3RyaW5nO1xuICByZWFkb25seSBfa2V5Pzogc3RyaW5nO1xuICByZWFkb25seSBfdG8/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGFkZGVkPzogbnVtYmVyO1xuICByZWFkb25seSBjb3VudD86IG51bWJlcjtcbiAgcmVhZG9ubHkgaWQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHR5cGU/OiBBcmFuZ29EYkNvbGxlY3Rpb247XG4gIHJlYWRvbmx5IHZhbHVlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aW9uT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGZyb20/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY29uc3QgcGFyc2VSZWFjdGlvbk9wdGlvbnMgPSAob3B0aW9uczogUmVhY3Rpb25PcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIHRvID0gMzBcbiAgfSA9IG9wdGlvbnM7XG5cbiAgcmV0dXJuIHtcbiAgICBsaW1pdDogZ2V0TGltaXQoZnJvbSwgdG8pIGFzIEFyYW5nb0RiTGltaXRcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRSZWFjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uOiBSZWFjdGlvbiA9IHt9LFxuICBhbGxvd0R1cGxpY2F0ZTogYm9vbGVhbiA9IGZhbHNlXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZFJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBuYW1lOiBpdGVtTmFtZSA9ICdsaWtlJyxcbiAgICB2YWx1ZTogaXRlbVZhbHVlXG4gIH0gPSByZWFjdGlvbjtcbiAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uTmFtZTogc3RyaW5nID0gcGFyc2VDaGFyKGl0ZW1OYW1lLCAzMik7XG4gIGNvbnN0IGZvcm1hdFZhbHVlOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhpdGVtVmFsdWUsIDMyKTtcbiAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gdXNlRGIoZGF0YWJhc2VOYW1lKS5jb2xsZWN0aW9uKCdoYXNSZWFjdGlvbicpO1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHJlYWN0aW9uLSR7Zm9ybWF0SXRlbUlkfS0ke3Nlc3Npb25JZH1gKTtcbiAgY29uc3QgZWRnZTogUmVhY3Rpb24gPSB7XG4gICAgX2Zyb206IHNlc3Npb25Eb2NJZCxcbiAgICBfa2V5OiBlZGdlSWQsXG4gICAgX3RvOiBmb3JtYXRJdGVtSWQsXG4gICAgYWRkZWQ6IERhdGUubm93KCksXG4gICAgbmFtZTogZm9ybWF0UmVhY3Rpb25OYW1lLFxuICAgIHZhbHVlOiBpdGVtVmFsdWUgIT09IHVuZGVmaW5lZCA/IGZvcm1hdFZhbHVlIDogdW5kZWZpbmVkXG4gIH07XG5cbiAgLy8gQ2hlY2sgZm9yIGR1cGxpY2F0ZXMgaWYgbm90IGFsbG93ZWRcbiAgaWYoIWFsbG93RHVwbGljYXRlKSB7XG4gICAgLy8gUXVlcnlcbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiByIElOIGhhc1JlYWN0aW9uXG4gICAgICBGSUxURVIgci5fZnJvbSA9PSAke3Nlc3Npb25Eb2NJZH0gJiYgci5fdG8gPT0gJHtmb3JtYXRJdGVtSWR9ICYmIHIubmFtZSA9PSAke2Zvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiByYDtcblxuICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAudGhlbigocmVhY3Rpb24pID0+IHtcbiAgICAgICAgaWYoISFyZWFjdGlvbikge1xuICAgICAgICAgIHJldHVybiByZWFjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IGVkZ2UpO1xuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdhZGRSZWFjdGlvbjo6ZXJyb3InLCBlcnJvcik7XG4gICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBlZGdlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZDogc3RyaW5nID0gYHVzZXJzLyR7cGFyc2VJZChzZXNzaW9uSWQpfWA7XG4gIGNvbnN0IGZvcm1hdFJlYWN0aW9uSWQ6IHN0cmluZyA9IGBoYXNSZWFjdGlvbi8ke3BhcnNlSWQocmVhY3Rpb25JZCl9YDtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCByID0gRE9DVU1FTlQoJHtmb3JtYXRSZWFjdGlvbklkfSlcbiAgICBGSUxURVIgci5fZnJvbSA9PSAke2Zvcm1hdFNlc3Npb25JZH1cbiAgICBMSU1JVCAxXG4gICAgUkVNT1ZFIHIgSU4gaGFzUmVhY3Rpb25cbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVSZWFjdGlvbkJ5SXRlbSA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVJlYWN0aW9uQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuXG4gIGlmKCFzZXNzaW9uSWQpIHtcbiAgICByZXR1cm4gbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6ICd1bmF1dGhvcml6ZWQnLFxuICAgICAgdmFsdWU6ICdpbnZhbGlkX3Nlc3Npb24nXG4gICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdFNlc3Npb25JZDogc3RyaW5nID0gYHVzZXJzLyR7cGFyc2VJZChzZXNzaW9uSWQpfWA7XG4gIGNvbnN0IGZvcm1hdEl0ZW1Eb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihyZWFjdGlvbk5hbWUpO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHIgaW4gaGFzUmVhY3Rpb25cbiAgICBGSUxURVIgci5fZnJvbSA9PSAke2Zvcm1hdFNlc3Npb25JZH0gJiYgci5fdG8gPT0gJHtmb3JtYXRJdGVtRG9jSWR9ICYmIHIubmFtZSA9PSAke2Zvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICBMSU1JVCAxXG4gICAgUkVNT1ZFIHIgSU4gaGFzUmVhY3Rpb25cbiAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVSZWFjdGlvbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCByZWFjdGlvbjogUmVhY3Rpb24gPSB7fSk6IFByb21pc2U8UmVhY3Rpb24+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIGlkOiBpdGVtSWQsXG4gICAgbmFtZTogaXRlbU5hbWUsXG4gICAgdmFsdWU6IGl0ZW1WYWx1ZVxuICB9ID0gcmVhY3Rpb247XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGl0ZW1JZCk7XG4gIGNvbnN0IGZvcm1hdE5hbWU6IHN0cmluZyA9IHBhcnNlQ2hhcihpdGVtTmFtZSwgMzIpO1xuICBjb25zdCBmb3JtYXRWYWx1ZTogc3RyaW5nID0gcGFyc2VTdHJpbmcoaXRlbVZhbHVlLCAzMik7XG4gIGNvbnN0IGVkZ2VJZDogc3RyaW5nID0gY3JlYXRlSGFzaChgcmVhY3Rpb24tJHtmb3JtYXRJZH0tJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IHVwZGF0ZTogUmVhY3Rpb24gPSB7XG4gICAgbmFtZTogZm9ybWF0TmFtZSxcbiAgICB2YWx1ZTogZm9ybWF0VmFsdWVcbiAgfTtcbiAgY29uc3QgaW5zZXJ0OiBSZWFjdGlvbiA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogZWRnZUlkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpXG4gIH07XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQgJHt7X2lkOiBmb3JtYXRJZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFJlYWN0aW9uQ291bnQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXRSZWFjdGlvbk5hbWUgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaSwgciBJTiBJTkJPVU5EICR7Zm9ybWF0SXRlbUlkfSBoYXNSZWFjdGlvblxuICAgIEZJTFRFUiByLm5hbWUgPT0gJHtmb3JtYXRSZWFjdGlvbk5hbWV9XG4gICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICBSRVRVUk4gY291bnRgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gdW5kZWZpbmVkKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVhY3Rpb25Db3VudEJ5VXNlciA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaXRlbUlkOiBzdHJpbmcsXG4gIGl0ZW1UeXBlOiBzdHJpbmcsXG4gIHJlYWN0aW9uTmFtZTogc3RyaW5nXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFJlYWN0aW9uQ291bnRCeVVzZXInO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZCA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lID0gcGFyc2VDaGFyKHJlYWN0aW9uTmFtZSwgMzIpO1xuICBjb25zdCBzZXNzaW9uRG9jSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBpLCByIElOIElOQk9VTkQgJHtmb3JtYXRJdGVtSWR9IGhhc1JlYWN0aW9uXG4gICAgICBGSUxURVIgci5uYW1lID09ICR7Zm9ybWF0UmVhY3Rpb25OYW1lfSAmJiByLl9mcm9tID09ICR7c2Vzc2lvbkRvY0lkfVxuICAgICAgQ09MTEVDVCByZWFjdGlvblZhbHVlID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgIFJFVFVSTiBNRVJHRShyLCB7Y291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEdyb3VwVXNlcnNCeVJlYWN0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBhcmFtczogVXNlclJlYWN0aW9uUXVlcnkgPSB7fSk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0R3JvdXBVc2Vyc0J5UmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgaWYoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogJ3VuYXV0aG9yaXplZCcsXG4gICAgICB2YWx1ZTogJ2ludmFsaWRfc2Vzc2lvbidcbiAgICB9LCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICB9XG5cbiAgY29uc3Qge2ZpbHRlcnMgPSBbXSwgaWQ6IGdyb3VwSWQsIHZhbHVlfTogVXNlclJlYWN0aW9uUXVlcnkgPSBwYXJhbXM7XG4gIGNvbnN0IHJlYWN0aW9uID0gcGFyc2VDaGFyKHZhbHVlLCAzMik7XG4gIGNvbnN0IGdyb3VwRG9jSWQgPSBwYXJzZUFyYW5nb0lkKGdyb3VwSWQpO1xuICBjb25zdCBmaWx0ZXJTdHI6IHN0cmluZyA9IGZpbHRlcnNcbiAgICAubWFwKChmaWx0ZXI6IFF1ZXJ5RmlsdGVyKSA9PiB7XG4gICAgICBjb25zdCB7Y29uZGl0aW9uYWwsIG5hbWUsIHZhbHVlOiBxdWVyeVZhbHVlfTogUXVlcnlGaWx0ZXIgPSBmaWx0ZXI7XG4gICAgICBsZXQgZmlsdGVyQ29uZDogc3RyaW5nID0gY29uZGl0aW9uYWw7XG5cbiAgICAgIGlmKGNvbmRpdGlvbmFsICE9PSAnPj0nICYmIGNvbmRpdGlvbmFsICE9PSAnPD0nICYmIGNvbmRpdGlvbmFsICE9PSAnPicgJiYgY29uZGl0aW9uYWwgIT09ICc8Jykge1xuICAgICAgICBmaWx0ZXJDb25kID0gJz09JztcbiAgICAgIH1cblxuICAgICAgc3dpdGNoKG5hbWUpIHtcbiAgICAgICAgY2FzZSAnYWRkZWQnOlxuICAgICAgICAgIHJldHVybiBgci5hZGRlZCAke2ZpbHRlckNvbmR9ICR7cGFyc2VOdW0ocXVlcnlWYWx1ZSl9YDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG4gICAgfSlcbiAgICAuY29uY2F0KFtcbiAgICAgIGByLnZhbHVlID09IFwiJHtyZWFjdGlvbn1cImAsXG4gICAgICAndS5faWQgPT0gci5fZnJvbSdcbiAgICBdKVxuICAgIC5qb2luKCcgJiYgJyk7XG5cbiAgLy8gUXVlcnlcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGcsIHIgSU4gSU5CT1VORCBcIiR7Z3JvdXBEb2NJZH1cIiBoYXNSZWFjdGlvblxuICAgICAgRk9SIHUgSU4gdXNlcnNcbiAgICAgIEZJTFRFUiAke2ZpbHRlclN0cn1cbiAgICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gW10pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZWFjdGlvbnNCeUl0ZW0gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UmVhY3Rpb25zQnlJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lOiBzdHJpbmcgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVJlYWN0aW9uT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIGksIHIgSU4gSU5CT1VORCBcIiR7Zm9ybWF0SXRlbUlkfVwiIGhhc1JlYWN0aW9uXG4gICAgRklMVEVSIHIubmFtZSA9PSBcIiR7Zm9ybWF0UmVhY3Rpb25OYW1lfVwiXG4gICAgJHtsaW1pdC5hcWx9XG4gICAgUkVUVVJOIE1FUkdFKGksIHtyZWFjdGlvbjogcn0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gW10pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJdGVtc0J5UmVhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGl0ZW1JZDogc3RyaW5nLFxuICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgb3B0aW9uczogUmVhY3Rpb25PcHRpb25zXG4pOiBQcm9taXNlPFJlYWN0aW9uW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbXNCeVJlYWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbUlkKTtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25OYW1lOiBzdHJpbmcgPSBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMik7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVJlYWN0aW9uT3B0aW9ucyhvcHRpb25zKTtcblxuICAvLyBRdWVyeVxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgdSwgciBJTiBPVVRCT1VORCBcIiR7Zm9ybWF0SXRlbUlkfVwiIGhhc1JlYWN0aW9uXG4gICAgRklMVEVSIHIubmFtZSA9PSAke2Zvcm1hdFJlYWN0aW9uTmFtZX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBSRVRVUk4gTUVSR0UodSwge3JlYWN0aW9uOiByfSlgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBbXSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc1JlYWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpdGVtSWQ6IHN0cmluZyxcbiAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gIGRpcmVjdGlvbjogUmVhY3Rpb25EaXJlY3Rpb24gPSAnT1VUQk9VTkQnXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnaGFzUmVhY3Rpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHNlc3Npb25Eb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChpdGVtSWQpO1xuICBjb25zdCBmb3JtYXREaXJlY3Rpb24gPSBkaXJlY3Rpb24gPT09ICdPVVRCT1VORCcgPyAnT1VUQk9VTkQnIDogJ0lOQk9VTkQnO1xuICBjb25zdCBpdGVtRGlyZWN0aW9uOiBzdHJpbmcgPSBkaXJlY3Rpb24gPT09ICdPVVRCT1VORCcgPyAnci5fdG8nIDogJ3IuX2Zyb20nO1xuXG4gIC8vIFF1ZXJ5XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBpLCByIElOICR7Zm9ybWF0RGlyZWN0aW9ufSBcIiR7c2Vzc2lvbkRvY0lkfVwiIGhhc1JlYWN0aW9uXG4gICAgRklMVEVSIHIubmFtZSA9PSBcIiR7cmVhY3Rpb25OYW1lfVwiICYmICR7aXRlbURpcmVjdGlvbn0gPT0gXCIke2Zvcm1hdEl0ZW1JZH1cIlxuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gcmA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHJlYWN0aW9ucykgPT4gKHJlYWN0aW9ucyA/IHJlYWN0aW9ucy52YWx1ZSA9PT0gJ3RydWUnIDogZmFsc2UpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gZmFsc2UpKTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUFRLGNBQUFBLEVBQVksaUJBQUFDLEVBQWUsYUFBQUMsRUFBVyxXQUFBQyxFQUFTLFlBQUFDLEVBQVUsZUFBQUMsTUFBa0IsZUFDbkYsT0FBUSxPQUFBQyxNQUFVLFdBR2xCLE9BQVEsY0FBQUMsTUFBaUIsdUJBQ3pCLE9BQVEsWUFBQUMsRUFBVSxnQkFBQUMsTUFBbUIsMEJBQ3JDLE9BQVEsWUFBQUMsRUFBVSxTQUFBQyxNQUFZLHlCQUs5QixNQUFNQyxFQUF3QixZQXFCakJDLEVBQXVCLENBQUNDLEVBQTJCLENBQUMsSUFBTSxDQUNyRSxLQUFNLENBQ0osS0FBQUMsRUFBTyxFQUNQLEdBQUFDLEVBQUssRUFDUCxFQUFJ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QU9sQixDQUFPLEVBQUUsS0FBSyxJQUFNLEVBQUssQ0FBQyxDQUN4QyIsCiAgIm5hbWVzIjogWyJjcmVhdGVIYXNoIiwgInBhcnNlQXJhbmdvSWQiLCAicGFyc2VDaGFyIiwgInBhcnNlSWQiLCAicGFyc2VOdW0iLCAicGFyc2VTdHJpbmciLCAiYXFsIiwgIkVycm9yVHlwZXMiLCAibG9nRXJyb3IiLCAibG9nRXhjZXB0aW9uIiwgImdldExpbWl0IiwgInVzZURiIiwgImV2ZW50Q2F0ZWdvcnkiLCAicGFyc2VSZWFjdGlvbk9wdGlvbnMiLCAib3B0aW9ucyIsICJmcm9tIiwgInRvIiwgImFkZFJlYWN0aW9uIiwgImNvbnRleHQiLCAiaXRlbUlkIiwgInJlYWN0aW9uIiwgImFsbG93RHVwbGljYXRlIiwgImFjdGlvbiIsICJkYXRhYmFzZU5hbWUiLCAic2Vzc2lvbklkIiwgIml0ZW1OYW1lIiwgIml0ZW1WYWx1ZSIsICJmb3JtYXRJdGVtSWQiLCAiZm9ybWF0UmVhY3Rpb25OYW1lIiwgImZvcm1hdFZhbHVlIiwgImVkZ2VDb2xsZWN0aW9uIiwgInNlc3Npb25Eb2NJZCIsICJlZGdlSWQiLCAiZWRnZSIsICJhcWxRcnkiLCAiY3Vyc29yIiwgImVycm9yIiwgImRlbGV0ZVJlYWN0aW9uIiwgInJlYWN0aW9uSWQiLCAiZm9ybWF0U2Vzc2lvbklkIiwgImZvcm1hdFJlYWN0aW9uSWQiLCAiZGVsZXRlUmVhY3Rpb25CeUl0ZW0iLCAicmVhY3Rpb25OYW1lIiwgImZvcm1hdEl0ZW1Eb2NJZCIsICJ1cGRhdGVSZWFjdGlvbiIsICJmb3JtYXRJZCIsICJmb3JtYXROYW1lIiwgInVwZGF0ZSIsICJpbnNlcnQiLCAiZ2V0UmVhY3Rpb25Db3VudCIsICJnZXRSZWFjdGlvbkNvdW50QnlVc2VyIiwgIml0ZW1UeXBlIiwgImdldEdyb3VwVXNlcnNCeVJlYWN0aW9uIiwgInBhcmFtcyIsICJmaWx0ZXJzIiwgImdyb3VwSWQiLCAidmFsdWUiLCAiZ3JvdXBEb2NJZCIsICJmaWx0ZXJTdHIiLCAiZmlsdGVyIiwgImNvbmRpdGlvbmFsIiwgIm5hbWUiLCAicXVlcnlWYWx1ZSIsICJmaWx0ZXJDb25kIiwgImdldFJlYWN0aW9uc0J5SXRlbSIsICJsaW1pdCIsICJnZXRJdGVtc0J5UmVhY3Rpb24iLCAiaGFzUmVhY3Rpb24iLCAiZGlyZWN0aW9uIiwgInJlYWN0aW9ucyJdCn0K