@envive-ai/react-hooks 0.1.3 → 0.1.4

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 (428) hide show
  1. package/dist/adapters/amplitude/index.cjs +13 -13
  2. package/dist/adapters/amplitude/index.d.cts +5 -3
  3. package/dist/adapters/amplitude/index.d.ts +5 -3
  4. package/dist/adapters/amplitude/index.js +10 -10
  5. package/dist/api-B2euFL-5.cjs +269 -0
  6. package/dist/api-XRr_lAG6.js +190 -0
  7. package/dist/application/config/index.cjs +14 -5
  8. package/dist/application/config/index.d.cts +2 -1
  9. package/dist/application/config/index.d.ts +2 -1
  10. package/dist/application/config/index.js +14 -5
  11. package/dist/application/models/graphql/index.cjs +12 -12
  12. package/dist/application/models/graphql/index.d.cts +1 -1
  13. package/dist/application/models/graphql/index.d.ts +1 -1
  14. package/dist/application/models/graphql/index.js +10 -10
  15. package/dist/application/models/guards/api/index.cjs +2 -2
  16. package/dist/application/models/guards/api/index.d.cts +2 -2
  17. package/dist/application/models/guards/api/index.d.ts +2 -2
  18. package/dist/application/models/guards/api/index.js +2 -2
  19. package/dist/application/models/index.cjs +54 -54
  20. package/dist/application/models/index.d.cts +8 -9
  21. package/dist/application/models/index.d.ts +8 -9
  22. package/dist/application/models/index.js +10 -10
  23. package/dist/application/models/utilityTypes/index.cjs +1 -1
  24. package/dist/application/models/utilityTypes/index.d.cts +1 -1
  25. package/dist/application/models/utilityTypes/index.d.ts +1 -1
  26. package/dist/application/models/utilityTypes/index.js +1 -1
  27. package/dist/application/models/variantInfo/index.cjs +1 -1
  28. package/dist/application/models/variantInfo/index.d.cts +1 -1
  29. package/dist/application/models/variantInfo/index.d.ts +1 -1
  30. package/dist/application/models/variantInfo/index.js +1 -1
  31. package/dist/application/service/customerService/index.cjs +2 -2
  32. package/dist/application/service/customerService/index.d.cts +2 -2
  33. package/dist/application/service/customerService/index.d.ts +2 -2
  34. package/dist/application/service/customerService/index.js +2 -2
  35. package/dist/application/service/index.cjs +37 -757
  36. package/dist/application/service/index.d.cts +14 -22
  37. package/dist/application/service/index.d.ts +14 -22
  38. package/dist/application/service/index.js +12 -727
  39. package/dist/application/utils/index.cjs +37 -37
  40. package/dist/application/utils/index.d.cts +13 -13
  41. package/dist/application/utils/index.d.ts +12 -12
  42. package/dist/application/utils/index.js +10 -10
  43. package/dist/atomStore-B1cgmbP0.js +32 -0
  44. package/dist/atomStore-JwGb7pcy.cjs +58 -0
  45. package/dist/atoms/app/index.cjs +16 -16
  46. package/dist/atoms/app/index.d.cts +11 -11
  47. package/dist/atoms/app/index.d.ts +12 -12
  48. package/dist/atoms/app/index.js +10 -10
  49. package/dist/atoms/atomStore/index.cjs +1 -2
  50. package/dist/atoms/atomStore/index.d.cts +2 -1
  51. package/dist/atoms/atomStore/index.d.ts +2 -1
  52. package/dist/atoms/atomStore/index.js +1 -2
  53. package/dist/atoms/chat/index.cjs +40 -40
  54. package/dist/atoms/chat/index.d.cts +37 -37
  55. package/dist/atoms/chat/index.d.ts +38 -38
  56. package/dist/atoms/chat/index.js +10 -10
  57. package/dist/atoms/globalSearch/index.cjs +1 -1
  58. package/dist/atoms/globalSearch/index.d.cts +7 -6
  59. package/dist/atoms/globalSearch/index.d.ts +7 -6
  60. package/dist/atoms/globalSearch/index.js +1 -1
  61. package/dist/atoms/org/index.cjs +37 -40
  62. package/dist/atoms/org/index.d.cts +32 -53
  63. package/dist/atoms/org/index.d.ts +31 -52
  64. package/dist/atoms/org/index.js +11 -12
  65. package/dist/atoms/search/index.cjs +41 -43
  66. package/dist/atoms/search/index.d.cts +9 -10
  67. package/dist/atoms/search/index.d.ts +9 -10
  68. package/dist/atoms/search/index.js +10 -12
  69. package/dist/bandolier-B76-OE75.cjs +1230 -0
  70. package/dist/bandolier-DRn_x1g1.js +1230 -0
  71. package/dist/carpe-kHi4RLB5.cjs +608 -0
  72. package/dist/carpe-qrSU99gq.js +606 -0
  73. package/dist/{chat-CCgyDehy.cjs → chat-BgONoYU7.cjs} +2 -1
  74. package/dist/chat-CLJ4NWcN.js +26 -0
  75. package/dist/{components-CScS7Ii-.cjs → components-BKZbet67.cjs} +2 -1
  76. package/dist/components-CV1fhAkj.js +11 -0
  77. package/dist/config/locators/components/chat/index.cjs +1 -1
  78. package/dist/config/locators/components/chat/index.d.cts +1 -1
  79. package/dist/config/locators/components/chat/index.d.ts +1 -1
  80. package/dist/config/locators/components/chat/index.js +1 -1
  81. package/dist/config/locators/components/chat/variants/index.cjs +2 -1
  82. package/dist/config/locators/components/chat/variants/index.d.cts +2 -1
  83. package/dist/config/locators/components/chat/variants/index.d.ts +2 -1
  84. package/dist/config/locators/components/chat/variants/index.js +2 -1
  85. package/dist/config/locators/components/index.cjs +1 -1
  86. package/dist/config/locators/components/index.d.cts +1 -1
  87. package/dist/config/locators/components/index.d.ts +1 -1
  88. package/dist/config/locators/components/index.js +1 -1
  89. package/dist/config/locators/components/search/index.cjs +2 -1
  90. package/dist/config/locators/components/search/index.d.cts +2 -1
  91. package/dist/config/locators/components/search/index.d.ts +2 -1
  92. package/dist/config/locators/components/search/index.js +2 -1
  93. package/dist/config/locators/index.cjs +4 -4
  94. package/dist/config/locators/index.d.cts +4 -3
  95. package/dist/config/locators/index.d.ts +4 -3
  96. package/dist/config/locators/index.js +4 -4
  97. package/dist/contexts/index.cjs +20 -23
  98. package/dist/contexts/index.d.cts +38 -19
  99. package/dist/contexts/index.d.ts +41 -22
  100. package/dist/contexts/index.js +11 -17
  101. package/dist/contexts-CQDwe3rK.cjs +14333 -0
  102. package/dist/contexts-e2sM-B9g.js +12919 -0
  103. package/dist/coterie-mMirPcHP.js +240 -0
  104. package/dist/coterie-yQ-_JXSw.cjs +240 -0
  105. package/dist/customerService-BG1uNZZ1.cjs +36 -0
  106. package/dist/customerService-BHQRnLhC.js +23 -0
  107. package/dist/custservice-types-C83itZmy.cjs +35 -0
  108. package/dist/custservice-types-DPQ-4TI6.js +23 -0
  109. package/dist/default-8Jfv8ehQ.cjs +199 -0
  110. package/dist/default-C8PQf-38.js +176 -0
  111. package/dist/default-LukSiCz1.js +4 -0
  112. package/dist/default-rJSJ887P.cjs +4 -0
  113. package/dist/divIds-CWkntTsx.js +23 -0
  114. package/dist/{divIds-CFyAjjp3.cjs → divIds-DEL_-qU0.cjs} +2 -1
  115. package/dist/dreamlandBaby-DHltv12Z.cjs +347 -0
  116. package/dist/dreamlandBaby-cG0HM9bt.js +347 -0
  117. package/dist/{embedded-BlXJUbik.cjs → embedded--2L0F4b5.cjs} +2 -1
  118. package/dist/embedded-C5uJqmuD.js +23 -0
  119. package/dist/entrypoints-CNUvSgnk.js +7 -0
  120. package/dist/entrypoints-DM9Sm18O.cjs +19 -0
  121. package/dist/events/index.cjs +1 -1
  122. package/dist/events/index.d.cts +2 -1
  123. package/dist/events/index.d.ts +2 -1
  124. package/dist/events/index.js +1 -1
  125. package/dist/events-ClCDFK7t.js +78 -0
  126. package/dist/events-Da7gpmGv.cjs +90 -0
  127. package/dist/featureFlagService-5wdmW02z.d.ts +18 -0
  128. package/dist/featureFlagService-DaelrXEk.d.cts +18 -0
  129. package/dist/fiveCbd-Cvnwh03g.cjs +614 -0
  130. package/dist/fiveCbd-DhYMlsf9.js +614 -0
  131. package/dist/forLoveAndLemons-C8DuUexW.js +666 -0
  132. package/dist/forLoveAndLemons-DR6a1zjJ.cjs +668 -0
  133. package/dist/{globalSearch-hxbXekus.cjs → globalSearch-BTeZxvk1.cjs} +2 -1
  134. package/dist/globalSearch-b0wC7ZEO.js +14 -0
  135. package/dist/greenpan-B4Pu65kV.js +398 -0
  136. package/dist/greenpan-BL5p6j7f.cjs +398 -0
  137. package/dist/grooveLife-DjKWHoN3.cjs +343 -0
  138. package/dist/grooveLife-JK0TyaPz.js +343 -0
  139. package/dist/homegrownCannabis-DxqSDkmS.js +411 -0
  140. package/dist/homegrownCannabis-ZnfCqW-m.cjs +411 -0
  141. package/dist/hooks/index.cjs +38 -38
  142. package/dist/hooks/index.d.cts +25 -16
  143. package/dist/hooks/index.d.ts +30 -21
  144. package/dist/hooks/index.js +11 -17
  145. package/dist/index-BTK5uzs6.d.cts +98 -0
  146. package/dist/index-BfuO9b0Q.d.ts +749 -0
  147. package/dist/index-BzgkfbNO.d.cts +228 -0
  148. package/dist/index-C62lPpy4.d.cts +25 -0
  149. package/dist/index-CExtydIH.d.ts +9 -0
  150. package/dist/index-CKKkTsms.d.ts +39 -0
  151. package/dist/index-CNsGWfS6.d.cts +749 -0
  152. package/dist/index-CYtsPztZ.d.cts +203 -0
  153. package/dist/index-C_C0tLeD.d.ts +203 -0
  154. package/dist/index-ClJ0nMsR.d.cts +184 -0
  155. package/dist/index-Cx9e-fRi.d.ts +184 -0
  156. package/dist/index-D2VaMPA3.d.ts +98 -0
  157. package/dist/index-D46Rd0io.d.cts +39 -0
  158. package/dist/index-DFL1dIT_.d.ts +7 -0
  159. package/dist/index-DPx8s5YH.d.ts +25 -0
  160. package/dist/index-Dxpscrvz.d.ts +228 -0
  161. package/dist/index-MFbPQ8Ji.d.ts +95 -0
  162. package/dist/index-VSFakgAI.d.cts +95 -0
  163. package/dist/index-jBATkcc_.d.cts +9 -0
  164. package/dist/index-zZjcds15.d.cts +7 -0
  165. package/dist/interceptors/index.cjs +12 -13
  166. package/dist/interceptors/index.d.cts +10 -10
  167. package/dist/interceptors/index.d.ts +10 -10
  168. package/dist/interceptors/index.js +10 -11
  169. package/dist/jackArcher-CXf_IAmC.js +728 -0
  170. package/dist/jackArcher-mGkojXek.cjs +728 -0
  171. package/dist/jordanCraig-BvCvPRoR.js +1787 -0
  172. package/dist/jordanCraig-Dv8pVCiS.cjs +1787 -0
  173. package/dist/kindredBravely-UQP7wiNu.cjs +491 -0
  174. package/dist/kindredBravely-X8F_LNph.js +491 -0
  175. package/dist/kutFromTheKloth-BhYKk3CN.cjs +370 -0
  176. package/dist/kutFromTheKloth-D1xsTSJr.js +370 -0
  177. package/dist/larryAndSerges-1411NuZa.cjs +262 -0
  178. package/dist/larryAndSerges-DVIRLItu.js +262 -0
  179. package/dist/leapsAndRebounds-BJ8mwr33.js +361 -0
  180. package/dist/leapsAndRebounds-UcP9EJVO.cjs +361 -0
  181. package/dist/logger-Dln20ans.cjs +26 -0
  182. package/dist/logger-pdEEY8T2.js +20 -0
  183. package/dist/longevityrx-BFSv9GF5.cjs +321 -0
  184. package/dist/longevityrx-Cp6wleWr.js +321 -0
  185. package/dist/lookOptic-BGhU4910.js +283 -0
  186. package/dist/lookOptic-KieSqskd.cjs +283 -0
  187. package/dist/mantraBrand-CHQw-0nw.cjs +751 -0
  188. package/dist/mantraBrand-DrqG9uqO.js +751 -0
  189. package/dist/medterra-CLG6Co1C.cjs +584 -0
  190. package/dist/medterra-D8ZX9NZC.js +584 -0
  191. package/dist/modells-BzyPwN2m.cjs +485 -0
  192. package/dist/modells-CAfqOCW4.js +485 -0
  193. package/dist/nodeSelector-B3bPtEjX.d.cts +31 -0
  194. package/dist/nodeSelector-BiCDowlK.d.ts +31 -0
  195. package/dist/orgConfigResults--dAwtw3W.d.ts +881 -0
  196. package/dist/orgConfigResults-BL0XBA6x.d.cts +881 -0
  197. package/dist/pressedFloral-DULBuQwR.cjs +662 -0
  198. package/dist/pressedFloral-Dp-7Fk3S.js +662 -0
  199. package/dist/search-filter-types-BNTLVXqQ.d.cts +102 -0
  200. package/dist/search-filter-types-DkmH1TxJ.d.ts +102 -0
  201. package/dist/skinPerfection-BxuYCeJX.js +335 -0
  202. package/dist/skinPerfection-Cd3XZ6By.cjs +335 -0
  203. package/dist/snapSupplements-Bf6htPM0.js +286 -0
  204. package/dist/snapSupplements-ZFnXyMuZ.cjs +286 -0
  205. package/dist/socialProofClasses-DdzG1tZy.js +10 -0
  206. package/dist/socialProofClasses-ky69yppk.cjs +40 -0
  207. package/dist/spanx-CwDPQaGj.js +662 -0
  208. package/dist/spanx-Cyd4qDlK.cjs +664 -0
  209. package/dist/spanxStaging-D43nyAGy.js +846 -0
  210. package/dist/spanxStaging-ijbYnHzr.cjs +849 -0
  211. package/dist/suggestionBarV2-types-CwOXzIKq.js +10 -0
  212. package/dist/{suggestionBarV2-types-DG3Ekk44.cjs → suggestionBarV2-types-Dc4-zJlV.cjs} +2 -1
  213. package/dist/supergoop-BnbFG7hm.cjs +338 -0
  214. package/dist/supergoop-CY043wIg.js +336 -0
  215. package/dist/test-types-CXVJxTeu.d.ts +40 -0
  216. package/dist/test-types-CuOq25VT.d.cts +40 -0
  217. package/dist/types/index.cjs +2 -2
  218. package/dist/types/index.d.cts +2 -2
  219. package/dist/types/index.d.ts +2 -2
  220. package/dist/types/index.js +2 -2
  221. package/dist/types-BF_CJeck.js +177 -0
  222. package/dist/types-CD4LFta-.d.cts +33 -0
  223. package/dist/types-CNH4sfF-.cjs +231 -0
  224. package/dist/types-DBdI0j89.d.ts +33 -0
  225. package/dist/uniqueVintage-Cui74mlJ.js +1212 -0
  226. package/dist/uniqueVintage-R2Jcu1y1.cjs +1214 -0
  227. package/dist/variant-CKVRF2-W.d.ts +13 -0
  228. package/dist/variant-raYuOP4L.d.cts +13 -0
  229. package/dist/venaCbd-o5_vOp4e.js +366 -0
  230. package/dist/venaCbd-r-IxEVc1.cjs +366 -0
  231. package/dist/westonJonBoucher-C95EuCl-.js +423 -0
  232. package/dist/westonJonBoucher-DjGEW3ZB.cjs +423 -0
  233. package/dist/wineEnthusiast-DeTFY8Gm.js +941 -0
  234. package/dist/wineEnthusiast-DvfcV5B3.cjs +941 -0
  235. package/dist/wolfMattress-6xPfOJt3.js +373 -0
  236. package/dist/wolfMattress-BjGnGKjP.cjs +373 -0
  237. package/dist/wolfTactical-Bi3WZu0m.cjs +350 -0
  238. package/dist/wolfTactical-C_F9-oPX.js +350 -0
  239. package/package.json +1 -1
  240. package/src/adapters/amplitude/amplitudeAdapter.ts +32 -9
  241. package/src/adapters/spiffy/commerce/api.ts +17 -8
  242. package/src/adapters/spiffy/commerce/graphql.ts +16 -5
  243. package/src/application/config/generalStaticConfig.ts +5 -2
  244. package/src/application/models/api/orgConfigResults.ts +6 -2
  245. package/src/application/models/validators/validateGraphQLColorsConfig.ts +23 -21
  246. package/src/application/service/cdnService.ts +4 -2
  247. package/src/application/service/index.ts +0 -1
  248. package/src/application/service/pageVariantService.ts +5 -5
  249. package/src/application/service/searchService.ts +9 -2
  250. package/src/application/service/windowChatToggleService.ts +28 -19
  251. package/src/application/service/windowFrontendConfigService.ts +7 -4
  252. package/src/atoms/app/index.ts +26 -17
  253. package/src/atoms/app/variant.ts +1 -0
  254. package/src/atoms/chat/messageQueue.ts +1 -1
  255. package/src/atoms/envive/enviveConfig.ts +81 -0
  256. package/src/atoms/org/graphqlConfig.ts +29 -11
  257. package/src/atoms/org/merchantCss.ts +114 -0
  258. package/src/atoms/org/org.ts +101 -64
  259. package/src/atoms/org/orgPageConfig.ts +9 -6
  260. package/src/atoms/org/orgUIConfig.ts +22 -9
  261. package/src/atoms/search/chatSearch.ts +85 -67
  262. package/src/contexts/chatContext.tsx +4 -1
  263. package/src/contexts/enviveConfigContext.tsx +37 -26
  264. package/src/contexts/enviveCssContext.tsx +20 -0
  265. package/src/contexts/index.ts +2 -0
  266. package/src/contexts/orgConfigContext.tsx +106 -0
  267. package/src/contexts/systemSettingsContext.tsx +2 -2
  268. package/src/contexts/types.ts +12 -9
  269. package/src/hooks/index.ts +1 -0
  270. package/src/hooks/useSearch.tsx +10 -6
  271. package/src/hooks/utils.ts +1 -1
  272. package/src/interceptors/useFormEscalation.ts +26 -9
  273. package/src/types.ts +0 -2
  274. package/dist/api-BtzLHcfU.cjs +0 -268
  275. package/dist/api-kpPTZhV9.js +0 -189
  276. package/dist/atomStore-BNQyGmU_.cjs +0 -57
  277. package/dist/atomStore-TnLPtYns.js +0 -31
  278. package/dist/bandolier-CQrxBHsk.cjs +0 -1230
  279. package/dist/bandolier-Di9DpZ8e.js +0 -1230
  280. package/dist/carpe-3NJOR-Rj.cjs +0 -608
  281. package/dist/carpe-DmWKaIQq.js +0 -606
  282. package/dist/cdnService-BNreZjqy.js +0 -18
  283. package/dist/cdnService-vLxePdrU.cjs +0 -23
  284. package/dist/chat-CCQMmhc1.cjs +0 -5057
  285. package/dist/chat-Dk6KPb1K.js +0 -25
  286. package/dist/chat-H6YcCS4I.js +0 -4113
  287. package/dist/components-DAQxVIn9.js +0 -10
  288. package/dist/coterie-D0UFsFC5.cjs +0 -240
  289. package/dist/coterie-JblRmIZL.js +0 -240
  290. package/dist/customerService-C4wc0glQ.js +0 -22
  291. package/dist/customerService-zsDlp7g2.cjs +0 -35
  292. package/dist/custservice-types-D8Npo-5Z.js +0 -22
  293. package/dist/custservice-types-E9_OSaZ7.cjs +0 -34
  294. package/dist/default-C5ZTV8HA.cjs +0 -4
  295. package/dist/default-DPv8m-eQ.js +0 -175
  296. package/dist/default-DRKBosow.cjs +0 -198
  297. package/dist/default-ao0vRl0W.js +0 -4
  298. package/dist/divIds-BWvq-i6I.js +0 -22
  299. package/dist/dreamlandBaby-CyS8oW8X.js +0 -347
  300. package/dist/dreamlandBaby-y7kSvwH2.cjs +0 -347
  301. package/dist/embedded-C1jvFj3v.js +0 -22
  302. package/dist/entrypoints-CmmOszXO.js +0 -6
  303. package/dist/entrypoints-fowCLUT2.cjs +0 -18
  304. package/dist/enviveConfigContext-Bs8kepnO.cjs +0 -48
  305. package/dist/enviveConfigContext-CWVdVWKW.js +0 -34
  306. package/dist/events-DgFzlVJR.js +0 -77
  307. package/dist/events-bH-24eRW.cjs +0 -89
  308. package/dist/featureFlagService-CroFRxvD.d.cts +0 -17
  309. package/dist/featureFlagService-NkJ2fuEj.d.ts +0 -17
  310. package/dist/featureGates-BMWXU0dS.d.ts +0 -90
  311. package/dist/featureGates-N_gyHCTn.d.cts +0 -90
  312. package/dist/fiveCbd-CXVuIBiZ.cjs +0 -614
  313. package/dist/fiveCbd-Cyc3-Ab9.js +0 -614
  314. package/dist/forLoveAndLemons-CxQS0USq.cjs +0 -668
  315. package/dist/forLoveAndLemons-D8mcgmdk.js +0 -666
  316. package/dist/frontendConfig-KeNqU1wa.d.cts +0 -790
  317. package/dist/frontendConfig-cPvCTWm6.d.ts +0 -790
  318. package/dist/globalSearch-BC0rOX3E.js +0 -13
  319. package/dist/greenpan-JM6SHcqO.js +0 -398
  320. package/dist/greenpan-eIzyxVsn.cjs +0 -398
  321. package/dist/grooveLife-BmsUc2cD.js +0 -343
  322. package/dist/grooveLife-KdTizVUn.cjs +0 -343
  323. package/dist/homegrownCannabis-C0GDai4r.cjs +0 -411
  324. package/dist/homegrownCannabis-a9udocBT.js +0 -411
  325. package/dist/hooks-DjOa7ihH.cjs +0 -7331
  326. package/dist/hooks-fneW8SWw.js +0 -7152
  327. package/dist/index-BQErGgfM.d.cts +0 -202
  328. package/dist/index-BdNKc2ix.d.cts +0 -8
  329. package/dist/index-BrXuc_Ck.d.cts +0 -24
  330. package/dist/index-C4zjAR1c.d.cts +0 -227
  331. package/dist/index-CGB6CAmr.d.ts +0 -6
  332. package/dist/index-CIco0cCQ.d.ts +0 -183
  333. package/dist/index-COG1kOZG.d.ts +0 -749
  334. package/dist/index-CVxe7FpL.d.cts +0 -6
  335. package/dist/index-Cn1SeI5y.d.cts +0 -183
  336. package/dist/index-CnqHN_jz.d.ts +0 -202
  337. package/dist/index-Cqg6ltII.d.ts +0 -38
  338. package/dist/index-DE_7Q8qK.d.ts +0 -94
  339. package/dist/index-Da0UzyI9.d.ts +0 -24
  340. package/dist/index-DbWWcYax.d.cts +0 -749
  341. package/dist/index-DtoVXd6O.d.cts +0 -97
  342. package/dist/index-JClBRnSX.d.cts +0 -94
  343. package/dist/index-ghzD_356.d.ts +0 -8
  344. package/dist/index-hdbCEjYy.d.cts +0 -38
  345. package/dist/index-luJrHgPN.d.ts +0 -97
  346. package/dist/index-tfRj22E1.d.ts +0 -227
  347. package/dist/jackArcher-B6OJ0N3a.cjs +0 -728
  348. package/dist/jackArcher-B9fe4Hv8.js +0 -728
  349. package/dist/jordanCraig-0CB_m_ts.cjs +0 -1787
  350. package/dist/jordanCraig-DNm1iw1L.js +0 -1787
  351. package/dist/kindredBravely-CZgt7DJA.js +0 -491
  352. package/dist/kindredBravely-KvYPbckZ.cjs +0 -491
  353. package/dist/kutFromTheKloth-BxgtWZs9.cjs +0 -370
  354. package/dist/kutFromTheKloth-SmteSZjk.js +0 -370
  355. package/dist/larryAndSerges-6O_u3L90.cjs +0 -261
  356. package/dist/larryAndSerges-DO-zG8ES.js +0 -261
  357. package/dist/leapsAndRebounds-BK62AmXw.js +0 -361
  358. package/dist/leapsAndRebounds-gPsWVUmQ.cjs +0 -361
  359. package/dist/logger-Be0NyKaY.cjs +0 -25
  360. package/dist/logger-BexDfK3W.js +0 -19
  361. package/dist/longevityrx-DjKbwJo3.cjs +0 -321
  362. package/dist/longevityrx-eq5TeUcy.js +0 -321
  363. package/dist/lookOptic-BPPqms_j.cjs +0 -283
  364. package/dist/lookOptic-jRpBXQCN.js +0 -283
  365. package/dist/mantraBrand-BZOZfkUK.js +0 -751
  366. package/dist/mantraBrand-Cp8zptkj.cjs +0 -751
  367. package/dist/medterra-BHYCBgvQ.cjs +0 -584
  368. package/dist/medterra-CShe6CLY.js +0 -584
  369. package/dist/modells-DE7-gmjK.cjs +0 -485
  370. package/dist/modells-DFyJxNwT.js +0 -485
  371. package/dist/nodeSelector-DpKXszfU.d.ts +0 -30
  372. package/dist/nodeSelector-vKB44CDB.d.cts +0 -30
  373. package/dist/org-Bkn6fl6I.cjs +0 -106
  374. package/dist/org-CX8HFbc9.js +0 -63
  375. package/dist/pressedFloral-BMkCVs8c.cjs +0 -662
  376. package/dist/pressedFloral-aK9br-LF.js +0 -662
  377. package/dist/search-DtIFZeMA.cjs +0 -743
  378. package/dist/search-eWwg8pNn.js +0 -542
  379. package/dist/search-filter-types-ByJnFPc4.d.cts +0 -101
  380. package/dist/search-filter-types-DPgeG8FS.d.ts +0 -101
  381. package/dist/skinPerfection-B9G6yLM2.js +0 -335
  382. package/dist/skinPerfection-BBC1q65Z.cjs +0 -335
  383. package/dist/snapSupplements-D7hx6Kgj.cjs +0 -286
  384. package/dist/snapSupplements-DKvJl__T.js +0 -286
  385. package/dist/socialProofClasses-BYLiEXpU.cjs +0 -39
  386. package/dist/socialProofClasses-CkJufEGb.js +0 -9
  387. package/dist/spanx-D-ZKkxjM.cjs +0 -664
  388. package/dist/spanx-yl7YfVrf.js +0 -662
  389. package/dist/spanxStaging-CXeIg6zI.cjs +0 -849
  390. package/dist/spanxStaging-DzGXL9wD.js +0 -846
  391. package/dist/suggestionBarV2-types-B0RbMStE.js +0 -9
  392. package/dist/supergoop-CSpDPOpl.cjs +0 -337
  393. package/dist/supergoop-D0UkuRiA.js +0 -335
  394. package/dist/test-types-C9b_OdfO.d.ts +0 -39
  395. package/dist/test-types-CpKCxk8U.d.cts +0 -39
  396. package/dist/types-BE4faOO_.d.cts +0 -32
  397. package/dist/types-C3S1H4hl.js +0 -176
  398. package/dist/types-TD8g7LnH.d.ts +0 -32
  399. package/dist/types-lcjuhDBt.cjs +0 -230
  400. package/dist/uniqueVintage-DygVpCqU.cjs +0 -1214
  401. package/dist/uniqueVintage-_n0FZFVj.js +0 -1212
  402. package/dist/useMessageInterceptor-BP6gzo8a.js +0 -57
  403. package/dist/useMessageInterceptor-BnUG2Pzt.cjs +0 -72
  404. package/dist/variant-DH4zusMi.d.cts +0 -12
  405. package/dist/variant-DTEqSBHd.d.ts +0 -12
  406. package/dist/variantInfo-BTvC6CQh.js +0 -1
  407. package/dist/variantInfo-Cz2YXraO.cjs +0 -0
  408. package/dist/venaCbd-BS0dvdBm.js +0 -366
  409. package/dist/venaCbd-Pqg0bj-P.cjs +0 -366
  410. package/dist/westonJonBoucher-CLw8Hy6u.js +0 -423
  411. package/dist/westonJonBoucher-CeA0jwxe.cjs +0 -423
  412. package/dist/wineEnthusiast-M9P18d1w.js +0 -941
  413. package/dist/wineEnthusiast-gHBaQMbe.cjs +0 -941
  414. package/dist/wolfMattress-BQHjoQYu.js +0 -373
  415. package/dist/wolfMattress-CdmN-Evm.cjs +0 -373
  416. package/dist/wolfTactical-Cc2ZLBRh.js +0 -350
  417. package/dist/wolfTactical-dObnPgAG.cjs +0 -350
  418. package/src/application/service/environmentService.ts +0 -51
  419. package/src/extension.ts +0 -63
  420. package/src/initialize.ts +0 -163
  421. package/src/main.tsx +0 -108
  422. package/src/merchants/uniqueVintage/views/useUniqueVintageChatSearch.ts +0 -147
  423. /package/dist/{atomStore-FSZd_20F.js → locators-Dc5ZT0aF.js} +0 -0
  424. /package/dist/{atomStore-B3tsg6mF.cjs → locators-lQMJj830.cjs} +0 -0
  425. /package/dist/{locators-C2DX_nX6.js → utilityTypes-BVikejDo.js} +0 -0
  426. /package/dist/{locators-CUpyd9Wt.cjs → utilityTypes-C4h2wgAK.cjs} +0 -0
  427. /package/dist/{utilityTypes-DMdsI0DG.cjs → variantInfo-CNRTY0gH.cjs} +0 -0
  428. /package/dist/{utilityTypes-UWdNHElu.js → variantInfo-CzhR5W6h.js} +0 -0
@@ -1,14 +1,14 @@
1
- require('../../events-bH-24eRW.cjs');
2
- require('../../logger-Be0NyKaY.cjs');
3
- const require_chat = require('../../chat-CCQMmhc1.cjs');
4
- require('../../types-lcjuhDBt.cjs');
5
- require('../../enviveConfigContext-Bs8kepnO.cjs');
6
- require('../../atomStore-BNQyGmU_.cjs');
7
- require('../../api-BtzLHcfU.cjs');
8
- require('../../customerService-zsDlp7g2.cjs');
9
- require('../../utilityTypes-DMdsI0DG.cjs');
10
- require('../../variantInfo-Cz2YXraO.cjs');
1
+ require('../../logger-Dln20ans.cjs');
2
+ require('../../api-B2euFL-5.cjs');
3
+ const require_contexts = require('../../contexts-CQDwe3rK.cjs');
4
+ require('../../types-CNH4sfF-.cjs');
5
+ require('../../atomStore-JwGb7pcy.cjs');
6
+ require('../../customerService-BG1uNZZ1.cjs');
7
+ require('../../globalSearch-BTeZxvk1.cjs');
8
+ require('../../utilityTypes-C4h2wgAK.cjs');
9
+ require('../../variantInfo-CNRTY0gH.cjs');
10
+ require('../../events-Da7gpmGv.cjs');
11
11
 
12
- exports.AmplitudeAdapter = require_chat.AmplitudeAdapter;
13
- exports.SpiffyMetricsEventName = require_chat.SpiffyMetricsEventName;
14
- exports.StubAmplitudeAdapter = require_chat.StubAmplitudeAdapter;
12
+ exports.AmplitudeAdapter = require_contexts.AmplitudeAdapter;
13
+ exports.SpiffyMetricsEventName = require_contexts.SpiffyMetricsEventName;
14
+ exports.StubAmplitudeAdapter = require_contexts.StubAmplitudeAdapter;
@@ -1,4 +1,6 @@
1
- import "../../featureGates-N_gyHCTn.cjs";
2
- import "../../featureFlagService-CroFRxvD.cjs";
3
- import { AmplitudeAdapter, SpiffyMetricsEventName, StubAmplitudeAdapter } from "../../index-JClBRnSX.cjs";
1
+ import "../../orgConfigResults-BL0XBA6x.cjs";
2
+ import "../../types-CD4LFta-.cjs";
3
+ import "../../test-types-CuOq25VT.cjs";
4
+ import "../../featureFlagService-DaelrXEk.cjs";
5
+ import { AmplitudeAdapter, SpiffyMetricsEventName, StubAmplitudeAdapter } from "../../index-VSFakgAI.cjs";
4
6
  export { AmplitudeAdapter, SpiffyMetricsEventName, StubAmplitudeAdapter };
@@ -1,4 +1,6 @@
1
- import "../../featureGates-BMWXU0dS.js";
2
- import "../../featureFlagService-NkJ2fuEj.js";
3
- import { AmplitudeAdapter, SpiffyMetricsEventName, StubAmplitudeAdapter } from "../../index-DE_7Q8qK.js";
1
+ import "../../orgConfigResults--dAwtw3W.js";
2
+ import "../../types-DBdI0j89.js";
3
+ import "../../test-types-CXVJxTeu.js";
4
+ import "../../featureFlagService-5wdmW02z.js";
5
+ import { AmplitudeAdapter, SpiffyMetricsEventName, StubAmplitudeAdapter } from "../../index-MFbPQ8Ji.js";
4
6
  export { AmplitudeAdapter, SpiffyMetricsEventName, StubAmplitudeAdapter };
@@ -1,12 +1,12 @@
1
- import "../../events-DgFzlVJR.js";
2
- import "../../logger-BexDfK3W.js";
3
- import { AmplitudeAdapter, SpiffyMetricsEventName, StubAmplitudeAdapter } from "../../chat-H6YcCS4I.js";
4
- import "../../types-C3S1H4hl.js";
5
- import "../../enviveConfigContext-CWVdVWKW.js";
6
- import "../../atomStore-TnLPtYns.js";
7
- import "../../api-kpPTZhV9.js";
8
- import "../../customerService-C4wc0glQ.js";
9
- import "../../utilityTypes-UWdNHElu.js";
10
- import "../../variantInfo-BTvC6CQh.js";
1
+ import "../../logger-pdEEY8T2.js";
2
+ import "../../api-XRr_lAG6.js";
3
+ import { AmplitudeAdapter, SpiffyMetricsEventName, StubAmplitudeAdapter } from "../../contexts-e2sM-B9g.js";
4
+ import "../../types-BF_CJeck.js";
5
+ import "../../atomStore-B1cgmbP0.js";
6
+ import "../../customerService-BHQRnLhC.js";
7
+ import "../../globalSearch-b0wC7ZEO.js";
8
+ import "../../utilityTypes-BVikejDo.js";
9
+ import "../../variantInfo-CzhR5W6h.js";
10
+ import "../../events-ClCDFK7t.js";
11
11
 
12
12
  export { AmplitudeAdapter, SpiffyMetricsEventName, StubAmplitudeAdapter };
@@ -0,0 +1,269 @@
1
+ const require_chunk = require('./chunk-CUT6urMc.cjs');
2
+ const require_logger = require('./logger-Dln20ans.cjs');
3
+ let __spiffy_ai_commerce_api_client = require("@spiffy-ai/commerce-api-client");
4
+ __spiffy_ai_commerce_api_client = require_chunk.__toESM(__spiffy_ai_commerce_api_client);
5
+
6
+ //#region src/application/models/guards/api/isApiSuggestion.ts
7
+ const isSuggestion = (data) => {
8
+ if (data == null || typeof data !== "object") return false;
9
+ if (!("id" in data) || typeof data.id !== "string") return false;
10
+ if (!("category" in data) || typeof data.category !== "string" || !Object.values(__spiffy_ai_commerce_api_client.SuggestionCategory).includes(data.category)) return false;
11
+ if (!("created_at" in data) || typeof data.created_at !== "string") return false;
12
+ if (!("content" in data) || typeof data.content !== "string") return false;
13
+ if ("is_answer" in data && data.is_answer != null && typeof data.is_answer !== "boolean") return false;
14
+ return true;
15
+ };
16
+
17
+ //#endregion
18
+ //#region src/application/models/guards/api/isApiUserEvent.ts
19
+ const isApiUserEvent = (data) => {
20
+ if (data == null || typeof data !== "object") return false;
21
+ if (!("event_id" in data) || typeof data.event_id !== "string") return false;
22
+ if (!("created_at" in data) || typeof data.created_at !== "string") return false;
23
+ if (!("category" in data) || typeof data.category !== "string" || !Object.values(__spiffy_ai_commerce_api_client.UserEventCategory).includes(data.category)) return false;
24
+ return true;
25
+ };
26
+
27
+ //#endregion
28
+ //#region src/application/models/guards/api/isApiPDPEventAttributes.ts
29
+ const isApiPDPAttributes = (data) => {
30
+ if (data == null || typeof data !== "object") return false;
31
+ if (!("product_id" in data) || typeof data.product_id !== "string") return false;
32
+ if ("parent_product_id" in data && typeof data.parent_product_id !== "string") return false;
33
+ if ("url" in data && data.url != null && typeof data.url !== "string") return false;
34
+ return true;
35
+ };
36
+
37
+ //#endregion
38
+ //#region src/application/models/guards/api/isApiQueryTypedEventAttributes.ts
39
+ const isApiQueryTypedAttributes = (data) => data != null && typeof data === "object" && "query" in data && typeof data.query === "string";
40
+
41
+ //#endregion
42
+ //#region src/application/models/guards/api/isApiSearchEventAttributes.ts
43
+ const isApiSearchAttributes = (data) => {
44
+ if (data == null || typeof data !== "object") return false;
45
+ if (!("search_term" in data) || typeof data.search_term !== "string") return false;
46
+ if ("selected_filters" in data && !Array.isArray(data.selected_filters)) return false;
47
+ if (!!data.search_term) return true;
48
+ if (!("search_results" in data) || !Array.isArray(data.search_results) || !data.search_results.every((v) => typeof v === "string")) return false;
49
+ return true;
50
+ };
51
+
52
+ //#endregion
53
+ //#region src/application/models/guards/api/isApiSuggestionClickedEventAttributes.ts
54
+ const isApiSuggestionClickedAttributes = (data) => data != null && typeof data === "object" && "suggestion_id" in data && typeof data.suggestion_id === "string";
55
+
56
+ //#endregion
57
+ //#region src/application/models/guards/utils.ts
58
+ /**
59
+ * Checks if an object has a property of a specific type
60
+ *
61
+ * @param obj - The object to check
62
+ * @param prop - The property name to check
63
+ * @param type - The expected type of the property
64
+ * @param isOptional - Whether the property is optional (defaults to false)
65
+ *
66
+ * @returns boolean indicating if the object has the property of the specified type
67
+ */
68
+ const hasPropertyOfType = (obj, prop, type, isOptional = false) => {
69
+ try {
70
+ if (obj == null || typeof obj !== "object") return false;
71
+ if (!(prop in obj)) return isOptional;
72
+ const value = obj[prop];
73
+ if (isOptional && value == null) return true;
74
+ if (type === "array") return Array.isArray(value);
75
+ return typeof value === type;
76
+ } catch (err) {
77
+ return false;
78
+ }
79
+ };
80
+
81
+ //#endregion
82
+ //#region src/application/models/guards/api/isApiResponse.ts
83
+ const isApiResponse = (data) => {
84
+ if (data == null || typeof data !== "object") {
85
+ require_logger.logger_default.logError("isApiResponse: data is null or not an object", void 0, { data });
86
+ return false;
87
+ }
88
+ if (!hasPropertyOfType(data, "id", "string")) {
89
+ require_logger.logger_default.logError("isApiResponse: id is not a string", void 0, { data });
90
+ return false;
91
+ }
92
+ if (!hasPropertyOfType(data, "category", "string") || !Object.values(__spiffy_ai_commerce_api_client.ResponseCategory).includes(data.category)) {
93
+ require_logger.logger_default.logError("isApiResponse: category is not a string or not a valid response category", void 0, { data });
94
+ return false;
95
+ }
96
+ if (!hasPropertyOfType(data, "created_at", "string")) {
97
+ require_logger.logger_default.logError("isApiResponse: created_at is not a string", void 0, { data });
98
+ return false;
99
+ }
100
+ if (!hasPropertyOfType(data, "attributes", "object", true)) {
101
+ require_logger.logger_default.logError("isApiResponse: attributes is not an object", void 0, { data });
102
+ return false;
103
+ }
104
+ return true;
105
+ };
106
+
107
+ //#endregion
108
+ //#region src/application/models/guards/api/isApiProductResponseAttributes.ts
109
+ const isApiProductResponseAttributes = (attributes) => {
110
+ if (attributes == null || typeof attributes !== "object") {
111
+ require_logger.logger_default.logError("isApiProductResponseAttributes: attributes is null or not an object", void 0, { attributes });
112
+ return false;
113
+ }
114
+ if (!hasPropertyOfType(attributes, "description", "string", true)) {
115
+ require_logger.logger_default.logError("isApiProductResponseAttributes: description is not a string", void 0, { attributes });
116
+ return false;
117
+ }
118
+ if (!hasPropertyOfType(attributes, "image_url", "string", true)) {
119
+ require_logger.logger_default.logError("isApiProductResponseAttributes: image_url is not a string", void 0, { attributes });
120
+ return false;
121
+ }
122
+ if (!hasPropertyOfType(attributes, "title", "string")) {
123
+ require_logger.logger_default.logError("isApiProductResponseAttributes: title is not a string", void 0, { attributes });
124
+ return false;
125
+ }
126
+ if (!hasPropertyOfType(attributes, "url", "string")) {
127
+ require_logger.logger_default.logError("isApiProductResponseAttributes: url is not a string", void 0, { attributes });
128
+ return false;
129
+ }
130
+ if (!hasPropertyOfType(attributes, "original_price", "number", true)) {
131
+ require_logger.logger_default.logError("isApiProductResponseAttributes: original_price is not a number", void 0, { attributes });
132
+ return false;
133
+ }
134
+ if (!hasPropertyOfType(attributes, "sale_price", "number", true)) {
135
+ require_logger.logger_default.logError("isApiProductResponseAttributes: sale_price is not a number", void 0, { attributes });
136
+ return false;
137
+ }
138
+ if (!hasPropertyOfType(attributes, "average_rating", "number", true)) {
139
+ require_logger.logger_default.logError("isApiProductResponseAttributes: average_rating is not a number", void 0, { attributes });
140
+ return false;
141
+ }
142
+ if (!hasPropertyOfType(attributes, "number_reviews", "number", true)) {
143
+ require_logger.logger_default.logError("isApiProductResponseAttributes: number_reviews is not a number", void 0, { attributes });
144
+ return false;
145
+ }
146
+ if (!hasPropertyOfType(attributes, "metadata", "array", true)) {
147
+ require_logger.logger_default.logError("isApiProductResponseAttributes: metadata is not an array", void 0, { attributes });
148
+ return false;
149
+ }
150
+ return true;
151
+ };
152
+
153
+ //#endregion
154
+ //#region src/application/models/guards/api/isApiReviewRichInformation.ts
155
+ const isApiReviewRichInformation = (richInfo) => {
156
+ if (richInfo == null || typeof richInfo !== "object") return false;
157
+ if ("cons" in richInfo && (!Array.isArray(richInfo.cons) || richInfo.cons.some((con) => typeof con !== "string"))) return false;
158
+ if ("pros" in richInfo && (!Array.isArray(richInfo.pros) || richInfo.pros.some((pro) => typeof pro !== "string"))) return false;
159
+ if ("review_date" in richInfo && typeof richInfo.review_date !== "string") return false;
160
+ if ("reviewer_title" in richInfo && typeof richInfo.reviewer_title !== "string") return false;
161
+ if ("product_familiarity" in richInfo && typeof richInfo.product_familiarity !== "string") return false;
162
+ return true;
163
+ };
164
+
165
+ //#endregion
166
+ //#region src/application/models/guards/api/isApiReviewResponseAttributes.ts
167
+ const isApiReviewResponseAttributes = (obj) => {
168
+ if (obj == null || typeof obj !== "object") return false;
169
+ if ("title" in obj && obj.title != null && typeof obj.title !== "string") return false;
170
+ if ("review" in obj && typeof obj.review !== "string") return false;
171
+ if ("reviewer" in obj && typeof obj.reviewer !== "string") return false;
172
+ if ("stars" in obj && typeof obj.stars !== "number") return false;
173
+ if ("rich_information" in obj && !isApiReviewRichInformation(obj.rich_information)) return false;
174
+ return true;
175
+ };
176
+
177
+ //#endregion
178
+ //#region src/application/models/guards/api/isApiTextResponseAttributes.ts
179
+ const isApiTextResponseAttributes = (attributes) => typeof attributes === "object" && attributes != null && "content" in attributes && typeof attributes.content === "string";
180
+
181
+ //#endregion
182
+ //#region src/application/models/guards/api/isApiProductSearchAttributes.ts
183
+ const isApiProductSearchResponseAttributes = (attributes) => {
184
+ if (attributes == null || typeof attributes !== "object") return false;
185
+ if ("generated_query" in attributes && typeof attributes.generated_query !== "string") return false;
186
+ if ("product_count" in attributes && attributes.product_count != null && typeof attributes.product_count !== "number") return false;
187
+ return true;
188
+ };
189
+
190
+ //#endregion
191
+ Object.defineProperty(exports, 'hasPropertyOfType', {
192
+ enumerable: true,
193
+ get: function () {
194
+ return hasPropertyOfType;
195
+ }
196
+ });
197
+ Object.defineProperty(exports, 'isApiPDPAttributes', {
198
+ enumerable: true,
199
+ get: function () {
200
+ return isApiPDPAttributes;
201
+ }
202
+ });
203
+ Object.defineProperty(exports, 'isApiProductResponseAttributes', {
204
+ enumerable: true,
205
+ get: function () {
206
+ return isApiProductResponseAttributes;
207
+ }
208
+ });
209
+ Object.defineProperty(exports, 'isApiProductSearchResponseAttributes', {
210
+ enumerable: true,
211
+ get: function () {
212
+ return isApiProductSearchResponseAttributes;
213
+ }
214
+ });
215
+ Object.defineProperty(exports, 'isApiQueryTypedAttributes', {
216
+ enumerable: true,
217
+ get: function () {
218
+ return isApiQueryTypedAttributes;
219
+ }
220
+ });
221
+ Object.defineProperty(exports, 'isApiResponse', {
222
+ enumerable: true,
223
+ get: function () {
224
+ return isApiResponse;
225
+ }
226
+ });
227
+ Object.defineProperty(exports, 'isApiReviewResponseAttributes', {
228
+ enumerable: true,
229
+ get: function () {
230
+ return isApiReviewResponseAttributes;
231
+ }
232
+ });
233
+ Object.defineProperty(exports, 'isApiReviewRichInformation', {
234
+ enumerable: true,
235
+ get: function () {
236
+ return isApiReviewRichInformation;
237
+ }
238
+ });
239
+ Object.defineProperty(exports, 'isApiSearchAttributes', {
240
+ enumerable: true,
241
+ get: function () {
242
+ return isApiSearchAttributes;
243
+ }
244
+ });
245
+ Object.defineProperty(exports, 'isApiSuggestionClickedAttributes', {
246
+ enumerable: true,
247
+ get: function () {
248
+ return isApiSuggestionClickedAttributes;
249
+ }
250
+ });
251
+ Object.defineProperty(exports, 'isApiTextResponseAttributes', {
252
+ enumerable: true,
253
+ get: function () {
254
+ return isApiTextResponseAttributes;
255
+ }
256
+ });
257
+ Object.defineProperty(exports, 'isApiUserEvent', {
258
+ enumerable: true,
259
+ get: function () {
260
+ return isApiUserEvent;
261
+ }
262
+ });
263
+ Object.defineProperty(exports, 'isSuggestion', {
264
+ enumerable: true,
265
+ get: function () {
266
+ return isSuggestion;
267
+ }
268
+ });
269
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLUIyZXVGTC01LmNqcyIsIm5hbWVzIjpbIlN1Z2dlc3Rpb25DYXRlZ29yeSIsIlVzZXJFdmVudENhdGVnb3J5IiwiUmVzcG9uc2VDYXRlZ29yeSJdLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVN1Z2dlc3Rpb24udHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlVc2VyRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQRFBFdmVudEF0dHJpYnV0ZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlRdWVyeVR5cGVkRXZlbnRBdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpU2VhcmNoRXZlbnRBdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpU3VnZ2VzdGlvbkNsaWNrZWRFdmVudEF0dHJpYnV0ZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy91dGlscy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVJlc3BvbnNlLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVJldmlld1JpY2hJbmZvcm1hdGlvbi50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVJldmlld1Jlc3BvbnNlQXR0cmlidXRlcy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQcm9kdWN0U2VhcmNoQXR0cmlidXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTdWdnZXN0aW9uIGFzIENvbW1lcmNlU3VnZ2VzdGlvbixcbiAgU3VnZ2VzdGlvbkNhdGVnb3J5LFxufSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuXG5leHBvcnQgY29uc3QgaXNTdWdnZXN0aW9uID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIENvbW1lcmNlU3VnZ2VzdGlvbiA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2lkJyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS5pZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgISgnY2F0ZWdvcnknIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuY2F0ZWdvcnkgIT09ICdzdHJpbmcnIHx8XG4gICAgIU9iamVjdC52YWx1ZXMoU3VnZ2VzdGlvbkNhdGVnb3J5KS5pbmNsdWRlcyhkYXRhLmNhdGVnb3J5IGFzIFN1Z2dlc3Rpb25DYXRlZ29yeSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2NyZWF0ZWRfYXQnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmNyZWF0ZWRfYXQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2NvbnRlbnQnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmNvbnRlbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdpc19hbnN3ZXInIGluIGRhdGEgJiYgZGF0YS5pc19hbnN3ZXIgIT0gbnVsbCAmJiB0eXBlb2YgZGF0YS5pc19hbnN3ZXIgIT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCB7IFVzZXJFdmVudCwgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuXG5leHBvcnQgY29uc3QgaXNBcGlVc2VyRXZlbnQgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgVXNlckV2ZW50ID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoISgnZXZlbnRfaWQnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmV2ZW50X2lkICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdjcmVhdGVkX2F0JyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS5jcmVhdGVkX2F0ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdjYXRlZ29yeScgaW4gZGF0YSkgfHxcbiAgICB0eXBlb2YgZGF0YS5jYXRlZ29yeSAhPT0gJ3N0cmluZycgfHxcbiAgICAhT2JqZWN0LnZhbHVlcyhVc2VyRXZlbnRDYXRlZ29yeSkuaW5jbHVkZXMoZGF0YS5jYXRlZ29yeSBhcyBVc2VyRXZlbnRDYXRlZ29yeSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IHsgUERQQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVBEUEF0dHJpYnV0ZXMgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgUERQQXR0cmlidXRlcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3Byb2R1Y3RfaWQnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLnByb2R1Y3RfaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdwYXJlbnRfcHJvZHVjdF9pZCcgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5wYXJlbnRfcHJvZHVjdF9pZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3VybCcgaW4gZGF0YSAmJiBkYXRhLnVybCAhPSBudWxsICYmIHR5cGVvZiBkYXRhLnVybCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgeyBRdWVyeVR5cGVkQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVF1ZXJ5VHlwZWRBdHRyaWJ1dGVzID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzID0+XG4gIGRhdGEgIT0gbnVsbCAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3F1ZXJ5JyBpbiBkYXRhICYmIHR5cGVvZiBkYXRhLnF1ZXJ5ID09PSAnc3RyaW5nJztcbiIsImltcG9ydCB7IFNlYXJjaEF0dHJpYnV0ZXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuXG5leHBvcnQgY29uc3QgaXNBcGlTZWFyY2hBdHRyaWJ1dGVzID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIFNlYXJjaEF0dHJpYnV0ZXMgPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdzZWFyY2hfdGVybScgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEuc2VhcmNoX3Rlcm0gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICgnc2VsZWN0ZWRfZmlsdGVycycgaW4gZGF0YSAmJiAhQXJyYXkuaXNBcnJheShkYXRhLnNlbGVjdGVkX2ZpbHRlcnMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEhZGF0YS5zZWFyY2hfdGVybSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKFxuICAgICEoJ3NlYXJjaF9yZXN1bHRzJyBpbiBkYXRhKSB8fFxuICAgICFBcnJheS5pc0FycmF5KGRhdGEuc2VhcmNoX3Jlc3VsdHMpIHx8XG4gICAgIWRhdGEuc2VhcmNoX3Jlc3VsdHMuZXZlcnkoKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IHsgU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcblxuZXhwb3J0IGNvbnN0IGlzQXBpU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzID0gKFxuICBkYXRhOiB1bmtub3duLFxuKTogZGF0YSBpcyBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgPT5cbiAgZGF0YSAhPSBudWxsICYmXG4gIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAnc3VnZ2VzdGlvbl9pZCcgaW4gZGF0YSAmJlxuICB0eXBlb2YgZGF0YS5zdWdnZXN0aW9uX2lkID09PSAnc3RyaW5nJztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBvZiBhIHNwZWNpZmljIHR5cGVcbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVja1xuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIHR5cGUgLSBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBpc09wdGlvbmFsIC0gV2hldGhlciB0aGUgcHJvcGVydHkgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvIGZhbHNlKVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNQcm9wZXJ0eU9mVHlwZSA9IDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgb2JqOiB1bmtub3duLFxuICBwcm9wOiBrZXlvZiBULFxuICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ29iamVjdCcgfCAnYXJyYXknLFxuICBpc09wdGlvbmFsOiBib29sZWFuID0gZmFsc2UsXG4pOiBvYmogaXMgVCA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKG9iaiA9PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIGl0J3MgdmFsaWQgZm9yIGFuIG9wdGlvbmFsIHByb3BlcnR5XG4gICAgaWYgKCEocHJvcCBpbiBvYmopKSB7XG4gICAgICByZXR1cm4gaXNPcHRpb25hbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IChvYmogYXMgVClbcHJvcF07XG5cbiAgICAvLyBGb3Igb3B0aW9uYWwgcHJvcGVydGllcywgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIGFyZSB2YWxpZFxuICAgIGlmIChpc09wdGlvbmFsICYmIHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnYXJyYXknKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gc3dhbGxvdyB0aGUgZXJyb3IgYXMgaXQgc2hvdWxkIGJlIHJlcG9ydGVkIGluIG1vcmUgZGV0YWlsIGJ5IHRoZSBjYWxsZXJcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCJpbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBSZXNwb25zZSwgUmVzcG9uc2VDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0eU9mVHlwZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGlzQXBpUmVzcG9uc2UgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgUmVzcG9uc2UgPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlSZXNwb25zZTogZGF0YSBpcyBudWxsIG9yIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpZCcsICdzdHJpbmcnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlSZXNwb25zZTogaWQgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnY2F0ZWdvcnknLCAnc3RyaW5nJykgfHxcbiAgICAhT2JqZWN0LnZhbHVlcyhSZXNwb25zZUNhdGVnb3J5KS5pbmNsdWRlcyhkYXRhLmNhdGVnb3J5IGFzIFJlc3BvbnNlQ2F0ZWdvcnkpXG4gICkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdpc0FwaVJlc3BvbnNlOiBjYXRlZ29yeSBpcyBub3QgYSBzdHJpbmcgb3Igbm90IGEgdmFsaWQgcmVzcG9uc2UgY2F0ZWdvcnknLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgeyBkYXRhIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdjcmVhdGVkX2F0JywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaVJlc3BvbnNlOiBjcmVhdGVkX2F0IGlzIG5vdCBhIHN0cmluZycsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2F0dHJpYnV0ZXMnLCAnb2JqZWN0JywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ2lzQXBpUmVzcG9uc2U6IGF0dHJpYnV0ZXMgaXMgbm90IGFuIG9iamVjdCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgaGFzUHJvcGVydHlPZlR5cGUgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgPSAoXG4gIGF0dHJpYnV0ZXM6IHVua25vd24sXG4pOiBhdHRyaWJ1dGVzIGlzIFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMgPT4ge1xuICBpZiAoYXR0cmlidXRlcyA9PSBudWxsIHx8IHR5cGVvZiBhdHRyaWJ1dGVzICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdpc0FwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMgaXMgbnVsbCBvciBub3QgYW4gb2JqZWN0JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGF0dHJpYnV0ZXMsICdkZXNjcmlwdGlvbicsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzOiBkZXNjcmlwdGlvbiBpcyBub3QgYSBzdHJpbmcnLCB1bmRlZmluZWQsIHtcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICFoYXNQcm9wZXJ0eU9mVHlwZShhdHRyaWJ1dGVzLCAnaW1hZ2VfdXJsJywgJ3N0cmluZycsIHRydWUpXG4gICkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzOiBpbWFnZV91cmwgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBhdHRyaWJ1dGVzLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoYXR0cmlidXRlcywgJ3RpdGxlJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXM6IHRpdGxlIGlzIG5vdCBhIHN0cmluZycsIHVuZGVmaW5lZCwge1xuICAgICAgYXR0cmlidXRlcyxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGF0dHJpYnV0ZXMsICd1cmwnLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ2lzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlczogdXJsIGlzIG5vdCBhIHN0cmluZycsIHVuZGVmaW5lZCwge1xuICAgICAgYXR0cmlidXRlcyxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGF0dHJpYnV0ZXMsICdvcmlnaW5hbF9wcmljZScsICdudW1iZXInLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzOiBvcmlnaW5hbF9wcmljZSBpcyBub3QgYSBudW1iZXInLCB1bmRlZmluZWQsIHtcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShhdHRyaWJ1dGVzLCAnc2FsZV9wcmljZScsICdudW1iZXInLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzOiBzYWxlX3ByaWNlIGlzIG5vdCBhIG51bWJlcicsIHVuZGVmaW5lZCwge1xuICAgICAgYXR0cmlidXRlcyxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGF0dHJpYnV0ZXMsICdhdmVyYWdlX3JhdGluZycsICdudW1iZXInLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzOiBhdmVyYWdlX3JhdGluZyBpcyBub3QgYSBudW1iZXInLCB1bmRlZmluZWQsIHtcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShhdHRyaWJ1dGVzLCAnbnVtYmVyX3Jldmlld3MnLCAnbnVtYmVyJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ2lzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlczogbnVtYmVyX3Jldmlld3MgaXMgbm90IGEgbnVtYmVyJywgdW5kZWZpbmVkLCB7XG4gICAgICBhdHRyaWJ1dGVzLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoYXR0cmlidXRlcywgJ21ldGFkYXRhJywgJ2FycmF5JywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ2lzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlczogbWV0YWRhdGEgaXMgbm90IGFuIGFycmF5JywgdW5kZWZpbmVkLCB7XG4gICAgICBhdHRyaWJ1dGVzLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCB7IEFwaVJldmlld1JpY2hJbmZvcm1hdGlvbiB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlR2VuZXJpY3MnO1xuXG5leHBvcnQgY29uc3QgaXNBcGlSZXZpZXdSaWNoSW5mb3JtYXRpb24gPSAoXG4gIHJpY2hJbmZvOiB1bmtub3duLFxuKTogcmljaEluZm8gaXMgQXBpUmV2aWV3UmljaEluZm9ybWF0aW9uID0+IHtcbiAgaWYgKHJpY2hJbmZvID09IG51bGwgfHwgdHlwZW9mIHJpY2hJbmZvICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAnY29ucycgaW4gcmljaEluZm8gJiZcbiAgICAoIUFycmF5LmlzQXJyYXkocmljaEluZm8uY29ucykgfHwgcmljaEluZm8uY29ucy5zb21lKChjb24pID0+IHR5cGVvZiBjb24gIT09ICdzdHJpbmcnKSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdwcm9zJyBpbiByaWNoSW5mbyAmJlxuICAgICghQXJyYXkuaXNBcnJheShyaWNoSW5mby5wcm9zKSB8fCByaWNoSW5mby5wcm9zLnNvbWUoKHBybykgPT4gdHlwZW9mIHBybyAhPT0gJ3N0cmluZycpKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3Jldmlld19kYXRlJyBpbiByaWNoSW5mbyAmJiB0eXBlb2YgcmljaEluZm8ucmV2aWV3X2RhdGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdyZXZpZXdlcl90aXRsZScgaW4gcmljaEluZm8gJiYgdHlwZW9mIHJpY2hJbmZvLnJldmlld2VyX3RpdGxlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgncHJvZHVjdF9mYW1pbGlhcml0eScgaW4gcmljaEluZm8gJiYgdHlwZW9mIHJpY2hJbmZvLnByb2R1Y3RfZmFtaWxpYXJpdHkgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IHsgQXBpUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VHZW5lcmljcyc7XG5pbXBvcnQgeyBpc0FwaVJldmlld1JpY2hJbmZvcm1hdGlvbiB9IGZyb20gJy4vaXNBcGlSZXZpZXdSaWNoSW5mb3JtYXRpb24nO1xuXG5leHBvcnQgY29uc3QgaXNBcGlSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMgPSAob2JqOiB1bmtub3duKTogb2JqIGlzIEFwaVJldmlld1Jlc3BvbnNlQXR0cmlidXRlcyA9PiB7XG4gIGlmIChvYmogPT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgndGl0bGUnIGluIG9iaiAmJiBvYmoudGl0bGUgIT0gbnVsbCAmJiB0eXBlb2Ygb2JqLnRpdGxlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgncmV2aWV3JyBpbiBvYmogJiYgdHlwZW9mIG9iai5yZXZpZXcgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdyZXZpZXdlcicgaW4gb2JqICYmIHR5cGVvZiBvYmoucmV2aWV3ZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdzdGFycycgaW4gb2JqICYmIHR5cGVvZiBvYmouc3RhcnMgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdyaWNoX2luZm9ybWF0aW9uJyBpbiBvYmogJiYgIWlzQXBpUmV2aWV3UmljaEluZm9ybWF0aW9uKG9iai5yaWNoX2luZm9ybWF0aW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCB7IEFwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9yZXNwb25zZUdlbmVyaWNzJztcblxuZXhwb3J0IGNvbnN0IGlzQXBpVGV4dFJlc3BvbnNlQXR0cmlidXRlcyA9IChcbiAgYXR0cmlidXRlczogdW5rbm93bixcbik6IGF0dHJpYnV0ZXMgaXMgQXBpVGV4dFJlc3BvbnNlQXR0cmlidXRlcyA9PlxuICB0eXBlb2YgYXR0cmlidXRlcyA9PT0gJ29iamVjdCcgJiZcbiAgYXR0cmlidXRlcyAhPSBudWxsICYmXG4gICdjb250ZW50JyBpbiBhdHRyaWJ1dGVzICYmXG4gIHR5cGVvZiBhdHRyaWJ1dGVzLmNvbnRlbnQgPT09ICdzdHJpbmcnO1xuIiwiaW1wb3J0IHsgUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMgPSAoXG4gIGF0dHJpYnV0ZXM6IHVua25vd24sXG4pOiBhdHRyaWJ1dGVzIGlzIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMgPT4ge1xuICBpZiAoYXR0cmlidXRlcyA9PSBudWxsIHx8IHR5cGVvZiBhdHRyaWJ1dGVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnZ2VuZXJhdGVkX3F1ZXJ5JyBpbiBhdHRyaWJ1dGVzICYmIHR5cGVvZiBhdHRyaWJ1dGVzLmdlbmVyYXRlZF9xdWVyeSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgJ3Byb2R1Y3RfY291bnQnIGluIGF0dHJpYnV0ZXMgJiZcbiAgICBhdHRyaWJ1dGVzLnByb2R1Y3RfY291bnQgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBhdHRyaWJ1dGVzLnByb2R1Y3RfY291bnQgIT09ICdudW1iZXInXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBS0EsTUFBYSxnQkFBZ0IsU0FBOEM7QUFDekUsS0FBSSxRQUFRLFFBQVEsT0FBTyxTQUFTLFNBQ2xDLFFBQU87QUFHVCxLQUFJLEVBQUUsUUFBUSxTQUFTLE9BQU8sS0FBSyxPQUFPLFNBQ3hDLFFBQU87QUFHVCxLQUNFLEVBQUUsY0FBYyxTQUNoQixPQUFPLEtBQUssYUFBYSxZQUN6QixDQUFDLE9BQU8sT0FBT0EsbURBQW1CLENBQUMsU0FBUyxLQUFLLFNBQStCLENBRWhGLFFBQU87QUFHVCxLQUFJLEVBQUUsZ0JBQWdCLFNBQVMsT0FBTyxLQUFLLGVBQWUsU0FDeEQsUUFBTztBQUdULEtBQUksRUFBRSxhQUFhLFNBQVMsT0FBTyxLQUFLLFlBQVksU0FDbEQsUUFBTztBQUdULEtBQUksZUFBZSxRQUFRLEtBQUssYUFBYSxRQUFRLE9BQU8sS0FBSyxjQUFjLFVBQzdFLFFBQU87QUFHVCxRQUFPOzs7OztBQ2hDVCxNQUFhLGtCQUFrQixTQUFxQztBQUNsRSxLQUFJLFFBQVEsUUFBUSxPQUFPLFNBQVMsU0FDbEMsUUFBTztBQUdULEtBQUksRUFBRSxjQUFjLFNBQVMsT0FBTyxLQUFLLGFBQWEsU0FDcEQsUUFBTztBQUdULEtBQUksRUFBRSxnQkFBZ0IsU0FBUyxPQUFPLEtBQUssZUFBZSxTQUN4RCxRQUFPO0FBR1QsS0FDRSxFQUFFLGNBQWMsU0FDaEIsT0FBTyxLQUFLLGFBQWEsWUFDekIsQ0FBQyxPQUFPLE9BQU9DLGtEQUFrQixDQUFDLFNBQVMsS0FBSyxTQUE4QixDQUU5RSxRQUFPO0FBR1QsUUFBTzs7Ozs7QUNyQlQsTUFBYSxzQkFBc0IsU0FBeUM7QUFDMUUsS0FBSSxRQUFRLFFBQVEsT0FBTyxTQUFTLFNBQ2xDLFFBQU87QUFHVCxLQUFJLEVBQUUsZ0JBQWdCLFNBQVMsT0FBTyxLQUFLLGVBQWUsU0FDeEQsUUFBTztBQUdULEtBQUksdUJBQXVCLFFBQVEsT0FBTyxLQUFLLHNCQUFzQixTQUNuRSxRQUFPO0FBR1QsS0FBSSxTQUFTLFFBQVEsS0FBSyxPQUFPLFFBQVEsT0FBTyxLQUFLLFFBQVEsU0FDM0QsUUFBTztBQUdULFFBQU87Ozs7O0FDakJULE1BQWEsNkJBQTZCLFNBQ3hDLFFBQVEsUUFBUSxPQUFPLFNBQVMsWUFBWSxXQUFXLFFBQVEsT0FBTyxLQUFLLFVBQVU7Ozs7QUNEdkYsTUFBYSx5QkFBeUIsU0FBNEM7QUFDaEYsS0FBSSxRQUFRLFFBQVEsT0FBTyxTQUFTLFNBQ2xDLFFBQU87QUFHVCxLQUFJLEVBQUUsaUJBQWlCLFNBQVMsT0FBTyxLQUFLLGdCQUFnQixTQUMxRCxRQUFPO0FBRVQsS0FBSSxzQkFBc0IsUUFBUSxDQUFDLE1BQU0sUUFBUSxLQUFLLGlCQUFpQixDQUNyRSxRQUFPO0FBR1QsS0FBSSxDQUFDLENBQUMsS0FBSyxZQUNULFFBQU87QUFHVCxLQUNFLEVBQUUsb0JBQW9CLFNBQ3RCLENBQUMsTUFBTSxRQUFRLEtBQUssZUFBZSxJQUNuQyxDQUFDLEtBQUssZUFBZSxPQUFPLE1BQU0sT0FBTyxNQUFNLFNBQVMsQ0FFeEQsUUFBTztBQUdULFFBQU87Ozs7O0FDeEJULE1BQWEsb0NBQ1gsU0FFQSxRQUFRLFFBQ1IsT0FBTyxTQUFTLFlBQ2hCLG1CQUFtQixRQUNuQixPQUFPLEtBQUssa0JBQWtCOzs7Ozs7Ozs7Ozs7OztBQ0VoQyxNQUFhLHFCQUNYLEtBQ0EsTUFDQSxNQUNBLGFBQXNCLFVBQ1Q7QUFDYixLQUFJO0FBQ0YsTUFBSSxPQUFPLFFBQVEsT0FBTyxRQUFRLFNBQ2hDLFFBQU87QUFJVCxNQUFJLEVBQUUsUUFBUSxLQUNaLFFBQU87RUFHVCxNQUFNLFFBQVMsSUFBVTtBQUd6QixNQUFJLGNBQWMsU0FBUyxLQUN6QixRQUFPO0FBR1QsTUFBSSxTQUFTLFFBQ1gsUUFBTyxNQUFNLFFBQVEsTUFBTTtBQUc3QixTQUFPLE9BQU8sVUFBVTtVQUNqQixLQUFLO0FBRVosU0FBTzs7Ozs7O0FDcENYLE1BQWEsaUJBQWlCLFNBQW9DO0FBQ2hFLEtBQUksUUFBUSxRQUFRLE9BQU8sU0FBUyxVQUFVO0FBQzVDLGdDQUFPLFNBQVMsZ0RBQWdELFFBQVcsRUFBRSxNQUFNLENBQUM7QUFDcEYsU0FBTzs7QUFHVCxLQUFJLENBQUMsa0JBQWtCLE1BQU0sTUFBTSxTQUFTLEVBQUU7QUFDNUMsZ0NBQU8sU0FBUyxxQ0FBcUMsUUFBVyxFQUFFLE1BQU0sQ0FBQztBQUN6RSxTQUFPOztBQUdULEtBQ0UsQ0FBQyxrQkFBa0IsTUFBTSxZQUFZLFNBQVMsSUFDOUMsQ0FBQyxPQUFPLE9BQU9DLGlEQUFpQixDQUFDLFNBQVMsS0FBSyxTQUE2QixFQUM1RTtBQUNBLGdDQUFPLFNBQ0wsNEVBQ0EsUUFDQSxFQUFFLE1BQU0sQ0FDVDtBQUNELFNBQU87O0FBR1QsS0FBSSxDQUFDLGtCQUFrQixNQUFNLGNBQWMsU0FBUyxFQUFFO0FBQ3BELGdDQUFPLFNBQVMsNkNBQTZDLFFBQVcsRUFBRSxNQUFNLENBQUM7QUFDakYsU0FBTzs7QUFHVCxLQUFJLENBQUMsa0JBQWtCLE1BQU0sY0FBYyxVQUFVLEtBQUssRUFBRTtBQUMxRCxnQ0FBTyxTQUFTLDhDQUE4QyxRQUFXLEVBQUUsTUFBTSxDQUFDO0FBQ2xGLFNBQU87O0FBR1QsUUFBTzs7Ozs7QUNqQ1QsTUFBYSxrQ0FDWCxlQUM0QztBQUM1QyxLQUFJLGNBQWMsUUFBUSxPQUFPLGVBQWUsVUFBVTtBQUN4RCxnQ0FBTyxTQUNMLHVFQUNBLFFBQ0EsRUFDRSxZQUNELENBQ0Y7QUFDRCxTQUFPOztBQUdULEtBQUksQ0FBQyxrQkFBa0IsWUFBWSxlQUFlLFVBQVUsS0FBSyxFQUFFO0FBQ2pFLGdDQUFPLFNBQVMsK0RBQStELFFBQVcsRUFDeEYsWUFDRCxDQUFDO0FBQ0YsU0FBTzs7QUFHVCxLQUNFLENBQUMsa0JBQWtCLFlBQVksYUFBYSxVQUFVLEtBQUssRUFDM0Q7QUFDQSxnQ0FBTyxTQUFTLDZEQUE2RCxRQUFXLEVBQ3RGLFlBQ0QsQ0FBQztBQUNGLFNBQU87O0FBR1QsS0FBSSxDQUFDLGtCQUFrQixZQUFZLFNBQVMsU0FBUyxFQUFFO0FBQ3JELGdDQUFPLFNBQVMseURBQXlELFFBQVcsRUFDbEYsWUFDRCxDQUFDO0FBQ0YsU0FBTzs7QUFHVCxLQUFJLENBQUMsa0JBQWtCLFlBQVksT0FBTyxTQUFTLEVBQUU7QUFDbkQsZ0NBQU8sU0FBUyx1REFBdUQsUUFBVyxFQUNoRixZQUNELENBQUM7QUFDRixTQUFPOztBQUdULEtBQUksQ0FBQyxrQkFBa0IsWUFBWSxrQkFBa0IsVUFBVSxLQUFLLEVBQUU7QUFDcEUsZ0NBQU8sU0FBUyxrRUFBa0UsUUFBVyxFQUMzRixZQUNELENBQUM7QUFDRixTQUFPOztBQUdULEtBQUksQ0FBQyxrQkFBa0IsWUFBWSxjQUFjLFVBQVUsS0FBSyxFQUFFO0FBQ2hFLGdDQUFPLFNBQVMsOERBQThELFFBQVcsRUFDdkYsWUFDRCxDQUFDO0FBQ0YsU0FBTzs7QUFHVCxLQUFJLENBQUMsa0JBQWtCLFlBQVksa0JBQWtCLFVBQVUsS0FBSyxFQUFFO0FBQ3BFLGdDQUFPLFNBQVMsa0VBQWtFLFFBQVcsRUFDM0YsWUFDRCxDQUFDO0FBQ0YsU0FBTzs7QUFHVCxLQUFJLENBQUMsa0JBQWtCLFlBQVksa0JBQWtCLFVBQVUsS0FBSyxFQUFFO0FBQ3BFLGdDQUFPLFNBQVMsa0VBQWtFLFFBQVcsRUFDM0YsWUFDRCxDQUFDO0FBQ0YsU0FBTzs7QUFHVCxLQUFJLENBQUMsa0JBQWtCLFlBQVksWUFBWSxTQUFTLEtBQUssRUFBRTtBQUM3RCxnQ0FBTyxTQUFTLDREQUE0RCxRQUFXLEVBQ3JGLFlBQ0QsQ0FBQztBQUNGLFNBQU87O0FBR1QsUUFBTzs7Ozs7QUNqRlQsTUFBYSw4QkFDWCxhQUN5QztBQUN6QyxLQUFJLFlBQVksUUFBUSxPQUFPLGFBQWEsU0FDMUMsUUFBTztBQUdULEtBQ0UsVUFBVSxhQUNULENBQUMsTUFBTSxRQUFRLFNBQVMsS0FBSyxJQUFJLFNBQVMsS0FBSyxNQUFNLFFBQVEsT0FBTyxRQUFRLFNBQVMsRUFFdEYsUUFBTztBQUdULEtBQ0UsVUFBVSxhQUNULENBQUMsTUFBTSxRQUFRLFNBQVMsS0FBSyxJQUFJLFNBQVMsS0FBSyxNQUFNLFFBQVEsT0FBTyxRQUFRLFNBQVMsRUFFdEYsUUFBTztBQUdULEtBQUksaUJBQWlCLFlBQVksT0FBTyxTQUFTLGdCQUFnQixTQUMvRCxRQUFPO0FBR1QsS0FBSSxvQkFBb0IsWUFBWSxPQUFPLFNBQVMsbUJBQW1CLFNBQ3JFLFFBQU87QUFHVCxLQUFJLHlCQUF5QixZQUFZLE9BQU8sU0FBUyx3QkFBd0IsU0FDL0UsUUFBTztBQUdULFFBQU87Ozs7O0FDaENULE1BQWEsaUNBQWlDLFFBQXFEO0FBQ2pHLEtBQUksT0FBTyxRQUFRLE9BQU8sUUFBUSxTQUNoQyxRQUFPO0FBR1QsS0FBSSxXQUFXLE9BQU8sSUFBSSxTQUFTLFFBQVEsT0FBTyxJQUFJLFVBQVUsU0FDOUQsUUFBTztBQUdULEtBQUksWUFBWSxPQUFPLE9BQU8sSUFBSSxXQUFXLFNBQzNDLFFBQU87QUFHVCxLQUFJLGNBQWMsT0FBTyxPQUFPLElBQUksYUFBYSxTQUMvQyxRQUFPO0FBR1QsS0FBSSxXQUFXLE9BQU8sT0FBTyxJQUFJLFVBQVUsU0FDekMsUUFBTztBQUdULEtBQUksc0JBQXNCLE9BQU8sQ0FBQywyQkFBMkIsSUFBSSxpQkFBaUIsQ0FDaEYsUUFBTztBQUdULFFBQU87Ozs7O0FDMUJULE1BQWEsK0JBQ1gsZUFFQSxPQUFPLGVBQWUsWUFDdEIsY0FBYyxRQUNkLGFBQWEsY0FDYixPQUFPLFdBQVcsWUFBWTs7OztBQ05oQyxNQUFhLHdDQUNYLGVBQ2tEO0FBQ2xELEtBQUksY0FBYyxRQUFRLE9BQU8sZUFBZSxTQUM5QyxRQUFPO0FBR1QsS0FBSSxxQkFBcUIsY0FBYyxPQUFPLFdBQVcsb0JBQW9CLFNBQzNFLFFBQU87QUFHVCxLQUNFLG1CQUFtQixjQUNuQixXQUFXLGlCQUFpQixRQUM1QixPQUFPLFdBQVcsa0JBQWtCLFNBRXBDLFFBQU87QUFHVCxRQUFPIn0=
@@ -0,0 +1,190 @@
1
+ import { logger_default } from "./logger-pdEEY8T2.js";
2
+ import { ResponseCategory, SuggestionCategory, UserEventCategory } from "@spiffy-ai/commerce-api-client";
3
+
4
+ //#region src/application/models/guards/api/isApiSuggestion.ts
5
+ const isSuggestion = (data) => {
6
+ if (data == null || typeof data !== "object") return false;
7
+ if (!("id" in data) || typeof data.id !== "string") return false;
8
+ if (!("category" in data) || typeof data.category !== "string" || !Object.values(SuggestionCategory).includes(data.category)) return false;
9
+ if (!("created_at" in data) || typeof data.created_at !== "string") return false;
10
+ if (!("content" in data) || typeof data.content !== "string") return false;
11
+ if ("is_answer" in data && data.is_answer != null && typeof data.is_answer !== "boolean") return false;
12
+ return true;
13
+ };
14
+
15
+ //#endregion
16
+ //#region src/application/models/guards/api/isApiUserEvent.ts
17
+ const isApiUserEvent = (data) => {
18
+ if (data == null || typeof data !== "object") return false;
19
+ if (!("event_id" in data) || typeof data.event_id !== "string") return false;
20
+ if (!("created_at" in data) || typeof data.created_at !== "string") return false;
21
+ if (!("category" in data) || typeof data.category !== "string" || !Object.values(UserEventCategory).includes(data.category)) return false;
22
+ return true;
23
+ };
24
+
25
+ //#endregion
26
+ //#region src/application/models/guards/api/isApiPDPEventAttributes.ts
27
+ const isApiPDPAttributes = (data) => {
28
+ if (data == null || typeof data !== "object") return false;
29
+ if (!("product_id" in data) || typeof data.product_id !== "string") return false;
30
+ if ("parent_product_id" in data && typeof data.parent_product_id !== "string") return false;
31
+ if ("url" in data && data.url != null && typeof data.url !== "string") return false;
32
+ return true;
33
+ };
34
+
35
+ //#endregion
36
+ //#region src/application/models/guards/api/isApiQueryTypedEventAttributes.ts
37
+ const isApiQueryTypedAttributes = (data) => data != null && typeof data === "object" && "query" in data && typeof data.query === "string";
38
+
39
+ //#endregion
40
+ //#region src/application/models/guards/api/isApiSearchEventAttributes.ts
41
+ const isApiSearchAttributes = (data) => {
42
+ if (data == null || typeof data !== "object") return false;
43
+ if (!("search_term" in data) || typeof data.search_term !== "string") return false;
44
+ if ("selected_filters" in data && !Array.isArray(data.selected_filters)) return false;
45
+ if (!!data.search_term) return true;
46
+ if (!("search_results" in data) || !Array.isArray(data.search_results) || !data.search_results.every((v) => typeof v === "string")) return false;
47
+ return true;
48
+ };
49
+
50
+ //#endregion
51
+ //#region src/application/models/guards/api/isApiSuggestionClickedEventAttributes.ts
52
+ const isApiSuggestionClickedAttributes = (data) => data != null && typeof data === "object" && "suggestion_id" in data && typeof data.suggestion_id === "string";
53
+
54
+ //#endregion
55
+ //#region src/application/models/guards/utils.ts
56
+ /**
57
+ * Checks if an object has a property of a specific type
58
+ *
59
+ * @param obj - The object to check
60
+ * @param prop - The property name to check
61
+ * @param type - The expected type of the property
62
+ * @param isOptional - Whether the property is optional (defaults to false)
63
+ *
64
+ * @returns boolean indicating if the object has the property of the specified type
65
+ */
66
+ const hasPropertyOfType = (obj, prop, type, isOptional = false) => {
67
+ try {
68
+ if (obj == null || typeof obj !== "object") return false;
69
+ if (!(prop in obj)) return isOptional;
70
+ const value = obj[prop];
71
+ if (isOptional && value == null) return true;
72
+ if (type === "array") return Array.isArray(value);
73
+ return typeof value === type;
74
+ } catch (err) {
75
+ return false;
76
+ }
77
+ };
78
+
79
+ //#endregion
80
+ //#region src/application/models/guards/api/isApiResponse.ts
81
+ const isApiResponse = (data) => {
82
+ if (data == null || typeof data !== "object") {
83
+ logger_default.logError("isApiResponse: data is null or not an object", void 0, { data });
84
+ return false;
85
+ }
86
+ if (!hasPropertyOfType(data, "id", "string")) {
87
+ logger_default.logError("isApiResponse: id is not a string", void 0, { data });
88
+ return false;
89
+ }
90
+ if (!hasPropertyOfType(data, "category", "string") || !Object.values(ResponseCategory).includes(data.category)) {
91
+ logger_default.logError("isApiResponse: category is not a string or not a valid response category", void 0, { data });
92
+ return false;
93
+ }
94
+ if (!hasPropertyOfType(data, "created_at", "string")) {
95
+ logger_default.logError("isApiResponse: created_at is not a string", void 0, { data });
96
+ return false;
97
+ }
98
+ if (!hasPropertyOfType(data, "attributes", "object", true)) {
99
+ logger_default.logError("isApiResponse: attributes is not an object", void 0, { data });
100
+ return false;
101
+ }
102
+ return true;
103
+ };
104
+
105
+ //#endregion
106
+ //#region src/application/models/guards/api/isApiProductResponseAttributes.ts
107
+ const isApiProductResponseAttributes = (attributes) => {
108
+ if (attributes == null || typeof attributes !== "object") {
109
+ logger_default.logError("isApiProductResponseAttributes: attributes is null or not an object", void 0, { attributes });
110
+ return false;
111
+ }
112
+ if (!hasPropertyOfType(attributes, "description", "string", true)) {
113
+ logger_default.logError("isApiProductResponseAttributes: description is not a string", void 0, { attributes });
114
+ return false;
115
+ }
116
+ if (!hasPropertyOfType(attributes, "image_url", "string", true)) {
117
+ logger_default.logError("isApiProductResponseAttributes: image_url is not a string", void 0, { attributes });
118
+ return false;
119
+ }
120
+ if (!hasPropertyOfType(attributes, "title", "string")) {
121
+ logger_default.logError("isApiProductResponseAttributes: title is not a string", void 0, { attributes });
122
+ return false;
123
+ }
124
+ if (!hasPropertyOfType(attributes, "url", "string")) {
125
+ logger_default.logError("isApiProductResponseAttributes: url is not a string", void 0, { attributes });
126
+ return false;
127
+ }
128
+ if (!hasPropertyOfType(attributes, "original_price", "number", true)) {
129
+ logger_default.logError("isApiProductResponseAttributes: original_price is not a number", void 0, { attributes });
130
+ return false;
131
+ }
132
+ if (!hasPropertyOfType(attributes, "sale_price", "number", true)) {
133
+ logger_default.logError("isApiProductResponseAttributes: sale_price is not a number", void 0, { attributes });
134
+ return false;
135
+ }
136
+ if (!hasPropertyOfType(attributes, "average_rating", "number", true)) {
137
+ logger_default.logError("isApiProductResponseAttributes: average_rating is not a number", void 0, { attributes });
138
+ return false;
139
+ }
140
+ if (!hasPropertyOfType(attributes, "number_reviews", "number", true)) {
141
+ logger_default.logError("isApiProductResponseAttributes: number_reviews is not a number", void 0, { attributes });
142
+ return false;
143
+ }
144
+ if (!hasPropertyOfType(attributes, "metadata", "array", true)) {
145
+ logger_default.logError("isApiProductResponseAttributes: metadata is not an array", void 0, { attributes });
146
+ return false;
147
+ }
148
+ return true;
149
+ };
150
+
151
+ //#endregion
152
+ //#region src/application/models/guards/api/isApiReviewRichInformation.ts
153
+ const isApiReviewRichInformation = (richInfo) => {
154
+ if (richInfo == null || typeof richInfo !== "object") return false;
155
+ if ("cons" in richInfo && (!Array.isArray(richInfo.cons) || richInfo.cons.some((con) => typeof con !== "string"))) return false;
156
+ if ("pros" in richInfo && (!Array.isArray(richInfo.pros) || richInfo.pros.some((pro) => typeof pro !== "string"))) return false;
157
+ if ("review_date" in richInfo && typeof richInfo.review_date !== "string") return false;
158
+ if ("reviewer_title" in richInfo && typeof richInfo.reviewer_title !== "string") return false;
159
+ if ("product_familiarity" in richInfo && typeof richInfo.product_familiarity !== "string") return false;
160
+ return true;
161
+ };
162
+
163
+ //#endregion
164
+ //#region src/application/models/guards/api/isApiReviewResponseAttributes.ts
165
+ const isApiReviewResponseAttributes = (obj) => {
166
+ if (obj == null || typeof obj !== "object") return false;
167
+ if ("title" in obj && obj.title != null && typeof obj.title !== "string") return false;
168
+ if ("review" in obj && typeof obj.review !== "string") return false;
169
+ if ("reviewer" in obj && typeof obj.reviewer !== "string") return false;
170
+ if ("stars" in obj && typeof obj.stars !== "number") return false;
171
+ if ("rich_information" in obj && !isApiReviewRichInformation(obj.rich_information)) return false;
172
+ return true;
173
+ };
174
+
175
+ //#endregion
176
+ //#region src/application/models/guards/api/isApiTextResponseAttributes.ts
177
+ const isApiTextResponseAttributes = (attributes) => typeof attributes === "object" && attributes != null && "content" in attributes && typeof attributes.content === "string";
178
+
179
+ //#endregion
180
+ //#region src/application/models/guards/api/isApiProductSearchAttributes.ts
181
+ const isApiProductSearchResponseAttributes = (attributes) => {
182
+ if (attributes == null || typeof attributes !== "object") return false;
183
+ if ("generated_query" in attributes && typeof attributes.generated_query !== "string") return false;
184
+ if ("product_count" in attributes && attributes.product_count != null && typeof attributes.product_count !== "number") return false;
185
+ return true;
186
+ };
187
+
188
+ //#endregion
189
+ export { hasPropertyOfType, isApiPDPAttributes, isApiProductResponseAttributes, isApiProductSearchResponseAttributes, isApiQueryTypedAttributes, isApiResponse, isApiReviewResponseAttributes, isApiReviewRichInformation, isApiSearchAttributes, isApiSuggestionClickedAttributes, isApiTextResponseAttributes, isApiUserEvent, isSuggestion };
190
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLVhScl9sQUc2LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVN1Z2dlc3Rpb24udHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlVc2VyRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQRFBFdmVudEF0dHJpYnV0ZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlRdWVyeVR5cGVkRXZlbnRBdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpU2VhcmNoRXZlbnRBdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpU3VnZ2VzdGlvbkNsaWNrZWRFdmVudEF0dHJpYnV0ZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy91dGlscy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVJlc3BvbnNlLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlcy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVJldmlld1JpY2hJbmZvcm1hdGlvbi50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVJldmlld1Jlc3BvbnNlQXR0cmlidXRlcy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQcm9kdWN0U2VhcmNoQXR0cmlidXRlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBTdWdnZXN0aW9uIGFzIENvbW1lcmNlU3VnZ2VzdGlvbixcbiAgU3VnZ2VzdGlvbkNhdGVnb3J5LFxufSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuXG5leHBvcnQgY29uc3QgaXNTdWdnZXN0aW9uID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIENvbW1lcmNlU3VnZ2VzdGlvbiA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2lkJyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS5pZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgISgnY2F0ZWdvcnknIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuY2F0ZWdvcnkgIT09ICdzdHJpbmcnIHx8XG4gICAgIU9iamVjdC52YWx1ZXMoU3VnZ2VzdGlvbkNhdGVnb3J5KS5pbmNsdWRlcyhkYXRhLmNhdGVnb3J5IGFzIFN1Z2dlc3Rpb25DYXRlZ29yeSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2NyZWF0ZWRfYXQnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmNyZWF0ZWRfYXQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2NvbnRlbnQnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmNvbnRlbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdpc19hbnN3ZXInIGluIGRhdGEgJiYgZGF0YS5pc19hbnN3ZXIgIT0gbnVsbCAmJiB0eXBlb2YgZGF0YS5pc19hbnN3ZXIgIT09ICdib29sZWFuJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCB7IFVzZXJFdmVudCwgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuXG5leHBvcnQgY29uc3QgaXNBcGlVc2VyRXZlbnQgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgVXNlckV2ZW50ID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoISgnZXZlbnRfaWQnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmV2ZW50X2lkICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdjcmVhdGVkX2F0JyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS5jcmVhdGVkX2F0ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdjYXRlZ29yeScgaW4gZGF0YSkgfHxcbiAgICB0eXBlb2YgZGF0YS5jYXRlZ29yeSAhPT0gJ3N0cmluZycgfHxcbiAgICAhT2JqZWN0LnZhbHVlcyhVc2VyRXZlbnRDYXRlZ29yeSkuaW5jbHVkZXMoZGF0YS5jYXRlZ29yeSBhcyBVc2VyRXZlbnRDYXRlZ29yeSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IHsgUERQQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVBEUEF0dHJpYnV0ZXMgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgUERQQXR0cmlidXRlcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3Byb2R1Y3RfaWQnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLnByb2R1Y3RfaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdwYXJlbnRfcHJvZHVjdF9pZCcgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5wYXJlbnRfcHJvZHVjdF9pZCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3VybCcgaW4gZGF0YSAmJiBkYXRhLnVybCAhPSBudWxsICYmIHR5cGVvZiBkYXRhLnVybCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgeyBRdWVyeVR5cGVkQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVF1ZXJ5VHlwZWRBdHRyaWJ1dGVzID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIFF1ZXJ5VHlwZWRBdHRyaWJ1dGVzID0+XG4gIGRhdGEgIT0gbnVsbCAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgJiYgJ3F1ZXJ5JyBpbiBkYXRhICYmIHR5cGVvZiBkYXRhLnF1ZXJ5ID09PSAnc3RyaW5nJztcbiIsImltcG9ydCB7IFNlYXJjaEF0dHJpYnV0ZXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuXG5leHBvcnQgY29uc3QgaXNBcGlTZWFyY2hBdHRyaWJ1dGVzID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIFNlYXJjaEF0dHJpYnV0ZXMgPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdzZWFyY2hfdGVybScgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEuc2VhcmNoX3Rlcm0gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICgnc2VsZWN0ZWRfZmlsdGVycycgaW4gZGF0YSAmJiAhQXJyYXkuaXNBcnJheShkYXRhLnNlbGVjdGVkX2ZpbHRlcnMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEhZGF0YS5zZWFyY2hfdGVybSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKFxuICAgICEoJ3NlYXJjaF9yZXN1bHRzJyBpbiBkYXRhKSB8fFxuICAgICFBcnJheS5pc0FycmF5KGRhdGEuc2VhcmNoX3Jlc3VsdHMpIHx8XG4gICAgIWRhdGEuc2VhcmNoX3Jlc3VsdHMuZXZlcnkoKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IHsgU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcblxuZXhwb3J0IGNvbnN0IGlzQXBpU3VnZ2VzdGlvbkNsaWNrZWRBdHRyaWJ1dGVzID0gKFxuICBkYXRhOiB1bmtub3duLFxuKTogZGF0YSBpcyBTdWdnZXN0aW9uQ2xpY2tlZEF0dHJpYnV0ZXMgPT5cbiAgZGF0YSAhPSBudWxsICYmXG4gIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAnc3VnZ2VzdGlvbl9pZCcgaW4gZGF0YSAmJlxuICB0eXBlb2YgZGF0YS5zdWdnZXN0aW9uX2lkID09PSAnc3RyaW5nJztcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eSBvZiBhIHNwZWNpZmljIHR5cGVcbiAqXG4gKiBAcGFyYW0gb2JqIC0gVGhlIG9iamVjdCB0byBjaGVja1xuICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBjaGVja1xuICogQHBhcmFtIHR5cGUgLSBUaGUgZXhwZWN0ZWQgdHlwZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwYXJhbSBpc09wdGlvbmFsIC0gV2hldGhlciB0aGUgcHJvcGVydHkgaXMgb3B0aW9uYWwgKGRlZmF1bHRzIHRvIGZhbHNlKVxuICpcbiAqIEByZXR1cm5zIGJvb2xlYW4gaW5kaWNhdGluZyBpZiB0aGUgb2JqZWN0IGhhcyB0aGUgcHJvcGVydHkgb2YgdGhlIHNwZWNpZmllZCB0eXBlXG4gKi9cbmV4cG9ydCBjb25zdCBoYXNQcm9wZXJ0eU9mVHlwZSA9IDxUIGV4dGVuZHMgb2JqZWN0PihcbiAgb2JqOiB1bmtub3duLFxuICBwcm9wOiBrZXlvZiBULFxuICB0eXBlOiAnc3RyaW5nJyB8ICdudW1iZXInIHwgJ2Jvb2xlYW4nIHwgJ29iamVjdCcgfCAnYXJyYXknLFxuICBpc09wdGlvbmFsOiBib29sZWFuID0gZmFsc2UsXG4pOiBvYmogaXMgVCA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKG9iaiA9PSBudWxsIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIGl0J3MgdmFsaWQgZm9yIGFuIG9wdGlvbmFsIHByb3BlcnR5XG4gICAgaWYgKCEocHJvcCBpbiBvYmopKSB7XG4gICAgICByZXR1cm4gaXNPcHRpb25hbDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IChvYmogYXMgVClbcHJvcF07XG5cbiAgICAvLyBGb3Igb3B0aW9uYWwgcHJvcGVydGllcywgbnVsbCBvciB1bmRlZmluZWQgdmFsdWVzIGFyZSB2YWxpZFxuICAgIGlmIChpc09wdGlvbmFsICYmIHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSAnYXJyYXknKSB7XG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gdHlwZTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gc3dhbGxvdyB0aGUgZXJyb3IgYXMgaXQgc2hvdWxkIGJlIHJlcG9ydGVkIGluIG1vcmUgZGV0YWlsIGJ5IHRoZSBjYWxsZXJcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG4iLCJpbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBSZXNwb25zZSwgUmVzcG9uc2VDYXRlZ29yeSB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0eU9mVHlwZSB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IGlzQXBpUmVzcG9uc2UgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgUmVzcG9uc2UgPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlSZXNwb25zZTogZGF0YSBpcyBudWxsIG9yIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpZCcsICdzdHJpbmcnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlSZXNwb25zZTogaWQgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnY2F0ZWdvcnknLCAnc3RyaW5nJykgfHxcbiAgICAhT2JqZWN0LnZhbHVlcyhSZXNwb25zZUNhdGVnb3J5KS5pbmNsdWRlcyhkYXRhLmNhdGVnb3J5IGFzIFJlc3BvbnNlQ2F0ZWdvcnkpXG4gICkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdpc0FwaVJlc3BvbnNlOiBjYXRlZ29yeSBpcyBub3QgYSBzdHJpbmcgb3Igbm90IGEgdmFsaWQgcmVzcG9uc2UgY2F0ZWdvcnknLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgeyBkYXRhIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdjcmVhdGVkX2F0JywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaVJlc3BvbnNlOiBjcmVhdGVkX2F0IGlzIG5vdCBhIHN0cmluZycsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2F0dHJpYnV0ZXMnLCAnb2JqZWN0JywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ2lzQXBpUmVzcG9uc2U6IGF0dHJpYnV0ZXMgaXMgbm90IGFuIG9iamVjdCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuaW1wb3J0IHsgaGFzUHJvcGVydHlPZlR5cGUgfSBmcm9tICcuLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgPSAoXG4gIGF0dHJpYnV0ZXM6IHVua25vd24sXG4pOiBhdHRyaWJ1dGVzIGlzIFJlc3BvbnNlUHJvZHVjdEF0dHJpYnV0ZXMgPT4ge1xuICBpZiAoYXR0cmlidXRlcyA9PSBudWxsIHx8IHR5cGVvZiBhdHRyaWJ1dGVzICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdpc0FwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXM6IGF0dHJpYnV0ZXMgaXMgbnVsbCBvciBub3QgYW4gb2JqZWN0JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGF0dHJpYnV0ZXMsICdkZXNjcmlwdGlvbicsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzOiBkZXNjcmlwdGlvbiBpcyBub3QgYSBzdHJpbmcnLCB1bmRlZmluZWQsIHtcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICFoYXNQcm9wZXJ0eU9mVHlwZShhdHRyaWJ1dGVzLCAnaW1hZ2VfdXJsJywgJ3N0cmluZycsIHRydWUpXG4gICkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzOiBpbWFnZV91cmwgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBhdHRyaWJ1dGVzLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoYXR0cmlidXRlcywgJ3RpdGxlJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXM6IHRpdGxlIGlzIG5vdCBhIHN0cmluZycsIHVuZGVmaW5lZCwge1xuICAgICAgYXR0cmlidXRlcyxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGF0dHJpYnV0ZXMsICd1cmwnLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ2lzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlczogdXJsIGlzIG5vdCBhIHN0cmluZycsIHVuZGVmaW5lZCwge1xuICAgICAgYXR0cmlidXRlcyxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGF0dHJpYnV0ZXMsICdvcmlnaW5hbF9wcmljZScsICdudW1iZXInLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzOiBvcmlnaW5hbF9wcmljZSBpcyBub3QgYSBudW1iZXInLCB1bmRlZmluZWQsIHtcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShhdHRyaWJ1dGVzLCAnc2FsZV9wcmljZScsICdudW1iZXInLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzOiBzYWxlX3ByaWNlIGlzIG5vdCBhIG51bWJlcicsIHVuZGVmaW5lZCwge1xuICAgICAgYXR0cmlidXRlcyxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGF0dHJpYnV0ZXMsICdhdmVyYWdlX3JhdGluZycsICdudW1iZXInLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignaXNBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzOiBhdmVyYWdlX3JhdGluZyBpcyBub3QgYSBudW1iZXInLCB1bmRlZmluZWQsIHtcbiAgICAgIGF0dHJpYnV0ZXMsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShhdHRyaWJ1dGVzLCAnbnVtYmVyX3Jldmlld3MnLCAnbnVtYmVyJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ2lzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlczogbnVtYmVyX3Jldmlld3MgaXMgbm90IGEgbnVtYmVyJywgdW5kZWZpbmVkLCB7XG4gICAgICBhdHRyaWJ1dGVzLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoYXR0cmlidXRlcywgJ21ldGFkYXRhJywgJ2FycmF5JywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ2lzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlczogbWV0YWRhdGEgaXMgbm90IGFuIGFycmF5JywgdW5kZWZpbmVkLCB7XG4gICAgICBhdHRyaWJ1dGVzLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCB7IEFwaVJldmlld1JpY2hJbmZvcm1hdGlvbiB9IGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvYXBpL3Jlc3BvbnNlR2VuZXJpY3MnO1xuXG5leHBvcnQgY29uc3QgaXNBcGlSZXZpZXdSaWNoSW5mb3JtYXRpb24gPSAoXG4gIHJpY2hJbmZvOiB1bmtub3duLFxuKTogcmljaEluZm8gaXMgQXBpUmV2aWV3UmljaEluZm9ybWF0aW9uID0+IHtcbiAgaWYgKHJpY2hJbmZvID09IG51bGwgfHwgdHlwZW9mIHJpY2hJbmZvICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAnY29ucycgaW4gcmljaEluZm8gJiZcbiAgICAoIUFycmF5LmlzQXJyYXkocmljaEluZm8uY29ucykgfHwgcmljaEluZm8uY29ucy5zb21lKChjb24pID0+IHR5cGVvZiBjb24gIT09ICdzdHJpbmcnKSlcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdwcm9zJyBpbiByaWNoSW5mbyAmJlxuICAgICghQXJyYXkuaXNBcnJheShyaWNoSW5mby5wcm9zKSB8fCByaWNoSW5mby5wcm9zLnNvbWUoKHBybykgPT4gdHlwZW9mIHBybyAhPT0gJ3N0cmluZycpKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3Jldmlld19kYXRlJyBpbiByaWNoSW5mbyAmJiB0eXBlb2YgcmljaEluZm8ucmV2aWV3X2RhdGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdyZXZpZXdlcl90aXRsZScgaW4gcmljaEluZm8gJiYgdHlwZW9mIHJpY2hJbmZvLnJldmlld2VyX3RpdGxlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgncHJvZHVjdF9mYW1pbGlhcml0eScgaW4gcmljaEluZm8gJiYgdHlwZW9mIHJpY2hJbmZvLnByb2R1Y3RfZmFtaWxpYXJpdHkgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IHsgQXBpUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscy9hcGkvcmVzcG9uc2VHZW5lcmljcyc7XG5pbXBvcnQgeyBpc0FwaVJldmlld1JpY2hJbmZvcm1hdGlvbiB9IGZyb20gJy4vaXNBcGlSZXZpZXdSaWNoSW5mb3JtYXRpb24nO1xuXG5leHBvcnQgY29uc3QgaXNBcGlSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMgPSAob2JqOiB1bmtub3duKTogb2JqIGlzIEFwaVJldmlld1Jlc3BvbnNlQXR0cmlidXRlcyA9PiB7XG4gIGlmIChvYmogPT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgndGl0bGUnIGluIG9iaiAmJiBvYmoudGl0bGUgIT0gbnVsbCAmJiB0eXBlb2Ygb2JqLnRpdGxlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgncmV2aWV3JyBpbiBvYmogJiYgdHlwZW9mIG9iai5yZXZpZXcgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdyZXZpZXdlcicgaW4gb2JqICYmIHR5cGVvZiBvYmoucmV2aWV3ZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdzdGFycycgaW4gb2JqICYmIHR5cGVvZiBvYmouc3RhcnMgIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdyaWNoX2luZm9ybWF0aW9uJyBpbiBvYmogJiYgIWlzQXBpUmV2aWV3UmljaEluZm9ybWF0aW9uKG9iai5yaWNoX2luZm9ybWF0aW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCB7IEFwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tICdzcmMvYXBwbGljYXRpb24vbW9kZWxzL2FwaS9yZXNwb25zZUdlbmVyaWNzJztcblxuZXhwb3J0IGNvbnN0IGlzQXBpVGV4dFJlc3BvbnNlQXR0cmlidXRlcyA9IChcbiAgYXR0cmlidXRlczogdW5rbm93bixcbik6IGF0dHJpYnV0ZXMgaXMgQXBpVGV4dFJlc3BvbnNlQXR0cmlidXRlcyA9PlxuICB0eXBlb2YgYXR0cmlidXRlcyA9PT0gJ29iamVjdCcgJiZcbiAgYXR0cmlidXRlcyAhPSBudWxsICYmXG4gICdjb250ZW50JyBpbiBhdHRyaWJ1dGVzICYmXG4gIHR5cGVvZiBhdHRyaWJ1dGVzLmNvbnRlbnQgPT09ICdzdHJpbmcnO1xuIiwiaW1wb3J0IHsgUHJvZHVjdFNlYXJjaFJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMgPSAoXG4gIGF0dHJpYnV0ZXM6IHVua25vd24sXG4pOiBhdHRyaWJ1dGVzIGlzIFByb2R1Y3RTZWFyY2hSZXNwb25zZUF0dHJpYnV0ZXMgPT4ge1xuICBpZiAoYXR0cmlidXRlcyA9PSBudWxsIHx8IHR5cGVvZiBhdHRyaWJ1dGVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnZ2VuZXJhdGVkX3F1ZXJ5JyBpbiBhdHRyaWJ1dGVzICYmIHR5cGVvZiBhdHRyaWJ1dGVzLmdlbmVyYXRlZF9xdWVyeSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgJ3Byb2R1Y3RfY291bnQnIGluIGF0dHJpYnV0ZXMgJiZcbiAgICBhdHRyaWJ1dGVzLnByb2R1Y3RfY291bnQgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBhdHRyaWJ1dGVzLnByb2R1Y3RfY291bnQgIT09ICdudW1iZXInXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7OztBQUtBLE1BQWEsZ0JBQWdCLFNBQThDO0FBQ3pFLEtBQUksUUFBUSxRQUFRLE9BQU8sU0FBUyxTQUNsQyxRQUFPO0FBR1QsS0FBSSxFQUFFLFFBQVEsU0FBUyxPQUFPLEtBQUssT0FBTyxTQUN4QyxRQUFPO0FBR1QsS0FDRSxFQUFFLGNBQWMsU0FDaEIsT0FBTyxLQUFLLGFBQWEsWUFDekIsQ0FBQyxPQUFPLE9BQU8sbUJBQW1CLENBQUMsU0FBUyxLQUFLLFNBQStCLENBRWhGLFFBQU87QUFHVCxLQUFJLEVBQUUsZ0JBQWdCLFNBQVMsT0FBTyxLQUFLLGVBQWUsU0FDeEQsUUFBTztBQUdULEtBQUksRUFBRSxhQUFhLFNBQVMsT0FBTyxLQUFLLFlBQVksU0FDbEQsUUFBTztBQUdULEtBQUksZUFBZSxRQUFRLEtBQUssYUFBYSxRQUFRLE9BQU8sS0FBSyxjQUFjLFVBQzdFLFFBQU87QUFHVCxRQUFPOzs7OztBQ2hDVCxNQUFhLGtC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