@envive-ai/react-hooks 0.1.5 → 0.1.7

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 (747) hide show
  1. package/dist/NewOrgConfig-C5YL4Y62.cjs +20 -0
  2. package/dist/NewOrgConfig-CRyIfb_l.js +15 -0
  3. package/dist/SystemSettingsContext-Cb9YHln8.cjs +20 -0
  4. package/dist/SystemSettingsContext-D3mmGGcv.js +13 -0
  5. package/dist/TrackComponentVisibleEvent-C7c_rHFW.cjs +59 -0
  6. package/dist/TrackComponentVisibleEvent-DXTEBjGM.js +52 -0
  7. package/dist/amplitudeContext-CB_F-nJY.d.cts +52 -0
  8. package/dist/amplitudeContext-Cak6ijMq.js +287 -0
  9. package/dist/amplitudeContext-DFYBDc0h.d.ts +52 -0
  10. package/dist/amplitudeContext-sTEsPaVG.cjs +309 -0
  11. package/dist/api-DSFlctlc.cjs +269 -0
  12. package/dist/api-JTNjuOfc.js +190 -0
  13. package/dist/app-D_upYeqF.js +132 -0
  14. package/dist/app-KXTMPa4s.cjs +178 -0
  15. package/dist/application/models/graphql/index.cjs +4 -12
  16. package/dist/application/models/graphql/index.d.cts +1 -1
  17. package/dist/application/models/graphql/index.d.ts +1 -1
  18. package/dist/application/models/graphql/index.js +2 -10
  19. package/dist/application/models/guards/api/index.cjs +2 -2
  20. package/dist/application/models/guards/api/index.d.cts +2 -2
  21. package/dist/application/models/guards/api/index.d.ts +2 -2
  22. package/dist/application/models/guards/api/index.js +2 -2
  23. package/dist/application/models/index.cjs +52 -56
  24. package/dist/application/models/index.d.cts +10 -8
  25. package/dist/application/models/index.d.ts +11 -9
  26. package/dist/application/models/index.js +10 -11
  27. package/dist/application/models/utilityTypes/index.cjs +1 -1
  28. package/dist/application/models/utilityTypes/index.d.cts +1 -1
  29. package/dist/application/models/utilityTypes/index.d.ts +1 -1
  30. package/dist/application/models/utilityTypes/index.js +1 -1
  31. package/dist/application/models/variantInfo/index.cjs +1 -1
  32. package/dist/application/models/variantInfo/index.d.ts +1 -1
  33. package/dist/application/models/variantInfo/index.js +1 -1
  34. package/dist/application/utils/index.cjs +46 -37
  35. package/dist/application/utils/index.d.cts +21 -13
  36. package/dist/application/utils/index.d.ts +21 -13
  37. package/dist/application/utils/index.js +19 -10
  38. package/dist/{atomStore-JwGb7pcy.cjs → atomStore-DEZyFCNz.cjs} +1 -1
  39. package/dist/{atomStore-B1cgmbP0.js → atomStore-DnPEioF4.js} +1 -1
  40. package/dist/atoms/app/index.cjs +18 -16
  41. package/dist/atoms/app/index.d.cts +23 -18
  42. package/dist/atoms/app/index.d.ts +24 -19
  43. package/dist/atoms/app/index.js +14 -11
  44. package/dist/atoms/atomStore/index.cjs +2 -1
  45. package/dist/atoms/atomStore/index.d.cts +24 -2
  46. package/dist/atoms/atomStore/index.d.ts +24 -2
  47. package/dist/atoms/atomStore/index.js +2 -1
  48. package/dist/atoms/chat/index.cjs +50 -40
  49. package/dist/atoms/chat/index.d.cts +38 -35
  50. package/dist/atoms/chat/index.d.ts +39 -36
  51. package/dist/atoms/chat/index.js +20 -10
  52. package/dist/atoms/globalSearch/index.cjs +1 -1
  53. package/dist/atoms/globalSearch/index.d.cts +5 -5
  54. package/dist/atoms/globalSearch/index.d.ts +6 -6
  55. package/dist/atoms/globalSearch/index.js +1 -1
  56. package/dist/atoms/org/index.cjs +18 -38
  57. package/dist/atoms/org/index.d.cts +36 -54
  58. package/dist/atoms/org/index.d.ts +36 -54
  59. package/dist/atoms/org/index.js +5 -11
  60. package/dist/atoms/search/index.cjs +57 -41
  61. package/dist/atoms/search/index.d.cts +11 -8
  62. package/dist/atoms/search/index.d.ts +12 -9
  63. package/dist/atoms/search/index.js +26 -10
  64. package/dist/atoms/search/types.cjs +5 -0
  65. package/dist/atoms/search/types.d.cts +2 -0
  66. package/dist/atoms/search/types.d.ts +2 -0
  67. package/dist/atoms/search/types.js +3 -0
  68. package/dist/cdnContext-BMjVfBft.cjs +53 -0
  69. package/dist/cdnContext-DgsJ00Tb.js +38 -0
  70. package/dist/{chat-CHmD79E1.js → chat-B4lkFIxz.js} +1 -1
  71. package/dist/chat-D1Eat8Ih.cjs +394 -0
  72. package/dist/chat-DPJGdUkz.js +258 -0
  73. package/dist/{chat-_NzpO_Hn.cjs → chat-zA-K4tR_.cjs} +1 -1
  74. package/dist/chatElementDisplayLocation-9SW40Dd3.d.cts +25 -0
  75. package/dist/chatElementDisplayLocation-C1tRM5OD.d.ts +25 -0
  76. package/dist/chatSearch-B5jMnCYX.js +315 -0
  77. package/dist/chatSearch-DWMiyWN0.cjs +444 -0
  78. package/dist/chatState-BisPJd5g.cjs +120 -0
  79. package/dist/chatState-BrmBYY8l.js +34 -0
  80. package/dist/commerce-api-CxDIfeME.cjs +318 -0
  81. package/dist/commerce-api-DagLj3D_.js +311 -0
  82. package/dist/{components-Dl-TMD9k.js → components-B1edduHz.js} +1 -1
  83. package/dist/{components-D0XDRcaN.cjs → components-g0G58Kat.cjs} +1 -1
  84. package/dist/config/locators/components/chat/index.cjs +1 -1
  85. package/dist/config/locators/components/chat/index.d.cts +1 -1
  86. package/dist/config/locators/components/chat/index.d.ts +1 -1
  87. package/dist/config/locators/components/chat/index.js +1 -1
  88. package/dist/config/locators/components/chat/variants/index.d.cts +1 -1
  89. package/dist/config/locators/components/chat/variants/index.d.ts +1 -1
  90. package/dist/config/locators/components/index.cjs +1 -1
  91. package/dist/config/locators/components/index.d.cts +1 -1
  92. package/dist/config/locators/components/index.d.ts +1 -1
  93. package/dist/config/locators/components/index.js +1 -1
  94. package/dist/config/locators/components/search/index.d.cts +1 -1
  95. package/dist/config/locators/components/search/index.d.ts +1 -1
  96. package/dist/config/locators/index.cjs +42 -22
  97. package/dist/config/locators/index.d.cts +2 -2
  98. package/dist/config/locators/index.d.ts +3 -3
  99. package/dist/config/locators/index.js +25 -5
  100. package/dist/contexts/amplitudeContext/index.cjs +21 -0
  101. package/dist/contexts/amplitudeContext/index.d.cts +2 -0
  102. package/dist/contexts/amplitudeContext/index.d.ts +2 -0
  103. package/dist/contexts/amplitudeContext/index.js +19 -0
  104. package/dist/contexts/cdnContext/index.cjs +7 -0
  105. package/dist/contexts/cdnContext/index.d.cts +15 -0
  106. package/dist/contexts/cdnContext/index.d.ts +15 -0
  107. package/dist/contexts/cdnContext/index.js +6 -0
  108. package/dist/contexts/chatContext/index.cjs +329 -0
  109. package/dist/contexts/chatContext/index.d.cts +15 -0
  110. package/dist/contexts/chatContext/index.d.ts +15 -0
  111. package/dist/contexts/chatContext/index.js +322 -0
  112. package/dist/contexts/enviveConfigContext/index.cjs +7 -0
  113. package/dist/contexts/enviveConfigContext/index.d.cts +30 -0
  114. package/dist/contexts/enviveConfigContext/index.d.ts +30 -0
  115. package/dist/contexts/enviveConfigContext/index.js +6 -0
  116. package/dist/contexts/enviveCssContext/index.cjs +65 -0
  117. package/dist/contexts/enviveCssContext/index.d.cts +10 -0
  118. package/dist/contexts/enviveCssContext/index.d.ts +10 -0
  119. package/dist/contexts/enviveCssContext/index.js +62 -0
  120. package/dist/contexts/featureFlagContext/index.cjs +107 -0
  121. package/dist/contexts/featureFlagContext/index.d.cts +20 -0
  122. package/dist/contexts/featureFlagContext/index.d.ts +20 -0
  123. package/dist/contexts/featureFlagContext/index.js +103 -0
  124. package/dist/contexts/featureFlagServiceContext/index.cjs +6 -0
  125. package/dist/contexts/featureFlagServiceContext/index.d.cts +5 -0
  126. package/dist/contexts/featureFlagServiceContext/index.d.ts +5 -0
  127. package/dist/contexts/featureFlagServiceContext/index.js +5 -0
  128. package/dist/contexts/graphqlContext/index.cjs +15 -0
  129. package/dist/contexts/graphqlContext/index.d.cts +12 -0
  130. package/dist/contexts/graphqlContext/index.d.ts +12 -0
  131. package/dist/contexts/graphqlContext/index.js +14 -0
  132. package/dist/contexts/localStorageContext/index.cjs +6 -0
  133. package/dist/contexts/localStorageContext/index.d.cts +30 -0
  134. package/dist/contexts/localStorageContext/index.d.ts +30 -0
  135. package/dist/contexts/localStorageContext/index.js +4 -0
  136. package/dist/contexts/newOrgConfigContext/index.cjs +19 -0
  137. package/dist/contexts/newOrgConfigContext/index.d.cts +30 -0
  138. package/dist/contexts/newOrgConfigContext/index.d.ts +30 -0
  139. package/dist/contexts/newOrgConfigContext/index.js +18 -0
  140. package/dist/contexts/searchContext/index.cjs +23 -0
  141. package/dist/contexts/searchContext/index.d.cts +16 -0
  142. package/dist/contexts/searchContext/index.d.ts +16 -0
  143. package/dist/contexts/searchContext/index.js +22 -0
  144. package/dist/contexts/sessionStorageContext/index.cjs +5 -0
  145. package/dist/contexts/sessionStorageContext/index.d.cts +15 -0
  146. package/dist/contexts/sessionStorageContext/index.d.ts +15 -0
  147. package/dist/contexts/sessionStorageContext/index.js +4 -0
  148. package/dist/contexts/shopifyUrlContext/index.cjs +5 -0
  149. package/dist/contexts/shopifyUrlContext/index.d.cts +20 -0
  150. package/dist/contexts/shopifyUrlContext/index.d.ts +20 -0
  151. package/dist/contexts/shopifyUrlContext/index.js +4 -0
  152. package/dist/contexts/systemSettingsContext/index.cjs +8 -0
  153. package/dist/contexts/systemSettingsContext/index.d.cts +36 -0
  154. package/dist/contexts/systemSettingsContext/index.d.ts +36 -0
  155. package/dist/contexts/systemSettingsContext/index.js +6 -0
  156. package/dist/contexts/types.cjs +7 -0
  157. package/dist/contexts/types.d.cts +4 -0
  158. package/dist/contexts/types.d.ts +4 -0
  159. package/dist/contexts/types.js +3 -0
  160. package/dist/contexts/userIdentityContext/index.cjs +26 -0
  161. package/dist/contexts/userIdentityContext/index.d.cts +2 -0
  162. package/dist/contexts/userIdentityContext/index.d.ts +2 -0
  163. package/dist/contexts/userIdentityContext/index.js +25 -0
  164. package/dist/domObserver-B6cRGTny.js +285 -0
  165. package/dist/domObserver-DQZwhPrc.cjs +304 -0
  166. package/dist/enviveConfig-BJZ4zTJo.js +62 -0
  167. package/dist/enviveConfig-DdBrcGSQ.cjs +130 -0
  168. package/dist/enviveConfigContext-78orE_uH.cjs +60 -0
  169. package/dist/enviveConfigContext-jBCCWQH9.js +45 -0
  170. package/dist/events/index.cjs +1 -1
  171. package/dist/events/index.d.ts +1 -1
  172. package/dist/events/index.js +1 -1
  173. package/dist/{events-ClCDFK7t.js → events-BHJJjPDN.js} +1 -1
  174. package/dist/{events-Da7gpmGv.cjs → events-B_fJZf9E.cjs} +1 -1
  175. package/dist/featureFlagServiceContext-ChL7DJ53.cjs +56 -0
  176. package/dist/featureFlagServiceContext-D1PzHsEs.d.ts +23 -0
  177. package/dist/featureFlagServiceContext-DQwlCTde.d.cts +23 -0
  178. package/dist/featureFlagServiceContext-DzFfmb1Z.js +42 -0
  179. package/dist/featureGates-Blx10fwB.js +27 -0
  180. package/dist/featureGates-DcZNrUma.cjs +33 -0
  181. package/dist/frontendConfig-DrvrQSm8.d.ts +857 -0
  182. package/dist/frontendConfig-wg41mBok.d.cts +857 -0
  183. package/dist/{globalSearch-BTeZxvk1.cjs → globalSearch-Bnjlxtr5.cjs} +1 -1
  184. package/dist/{globalSearch-b0wC7ZEO.js → globalSearch-CRWUqnjq.js} +1 -1
  185. package/dist/graphql-B9HhDXYt.cjs +53 -0
  186. package/dist/graphql-W7GMIHUu.js +36 -0
  187. package/dist/graphqlConfig-Bn-HLHsh.cjs +39 -0
  188. package/dist/graphqlConfig-DtZm_YaH.js +14 -0
  189. package/dist/graphqlContext-BJg7B--J.js +96 -0
  190. package/dist/graphqlContext-DI-_VRmb.cjs +111 -0
  191. package/dist/hooks/AmplitudeOperations/index.cjs +21 -0
  192. package/dist/hooks/AmplitudeOperations/index.d.cts +12 -0
  193. package/dist/hooks/AmplitudeOperations/index.d.ts +12 -0
  194. package/dist/hooks/AmplitudeOperations/index.js +21 -0
  195. package/dist/hooks/AppDetails/index.cjs +18 -0
  196. package/dist/hooks/AppDetails/index.d.cts +26 -0
  197. package/dist/hooks/AppDetails/index.d.ts +26 -0
  198. package/dist/hooks/AppDetails/index.js +18 -0
  199. package/dist/hooks/BlockBackButton/index.cjs +29 -0
  200. package/dist/hooks/BlockBackButton/index.d.cts +5 -0
  201. package/dist/hooks/BlockBackButton/index.d.ts +5 -0
  202. package/dist/hooks/BlockBackButton/index.js +27 -0
  203. package/dist/hooks/CdnOperations/index.cjs +24 -0
  204. package/dist/hooks/CdnOperations/index.d.cts +7 -0
  205. package/dist/hooks/CdnOperations/index.d.ts +7 -0
  206. package/dist/hooks/CdnOperations/index.js +22 -0
  207. package/dist/hooks/ChatToggle/index.cjs +63 -0
  208. package/dist/hooks/ChatToggle/index.d.cts +12 -0
  209. package/dist/hooks/ChatToggle/index.d.ts +12 -0
  210. package/dist/hooks/ChatToggle/index.js +61 -0
  211. package/dist/hooks/ChatToggleAnalytics/index.cjs +37 -0
  212. package/dist/hooks/ChatToggleAnalytics/index.d.cts +9 -0
  213. package/dist/hooks/ChatToggleAnalytics/index.d.ts +9 -0
  214. package/dist/hooks/ChatToggleAnalytics/index.js +35 -0
  215. package/dist/hooks/CustomerSupportHandoff/index.cjs +36 -0
  216. package/dist/hooks/CustomerSupportHandoff/index.d.cts +16 -0
  217. package/dist/hooks/CustomerSupportHandoff/index.d.ts +16 -0
  218. package/dist/hooks/CustomerSupportHandoff/index.js +34 -0
  219. package/dist/hooks/Debounce/index.cjs +3 -0
  220. package/dist/hooks/Debounce/index.d.cts +5 -0
  221. package/dist/hooks/Debounce/index.d.ts +5 -0
  222. package/dist/hooks/Debounce/index.js +3 -0
  223. package/dist/hooks/ElementObserver/index.cjs +179 -0
  224. package/dist/hooks/ElementObserver/index.d.cts +29 -0
  225. package/dist/hooks/ElementObserver/index.d.ts +29 -0
  226. package/dist/hooks/ElementObserver/index.js +177 -0
  227. package/dist/hooks/GrabAndScroll/index.cjs +99 -0
  228. package/dist/hooks/GrabAndScroll/index.d.cts +14 -0
  229. package/dist/hooks/GrabAndScroll/index.d.ts +14 -0
  230. package/dist/hooks/GrabAndScroll/index.js +97 -0
  231. package/dist/hooks/GraphQLConfig/index.cjs +16 -0
  232. package/dist/hooks/GraphQLConfig/index.d.cts +15 -0
  233. package/dist/hooks/GraphQLConfig/index.d.ts +15 -0
  234. package/dist/hooks/GraphQLConfig/index.js +15 -0
  235. package/dist/hooks/IdentifyUser/index.cjs +59 -0
  236. package/dist/hooks/IdentifyUser/index.d.cts +10 -0
  237. package/dist/hooks/IdentifyUser/index.d.ts +10 -0
  238. package/dist/hooks/IdentifyUser/index.js +57 -0
  239. package/dist/hooks/ImageResolver/index.cjs +54 -0
  240. package/dist/hooks/ImageResolver/index.d.cts +7 -0
  241. package/dist/hooks/ImageResolver/index.d.ts +7 -0
  242. package/dist/hooks/ImageResolver/index.js +52 -0
  243. package/dist/hooks/Intersection/index.cjs +3 -0
  244. package/dist/hooks/Intersection/index.d.cts +7 -0
  245. package/dist/hooks/Intersection/index.d.ts +7 -0
  246. package/dist/hooks/Intersection/index.js +3 -0
  247. package/dist/hooks/IsSmallScreen/index.cjs +22 -0
  248. package/dist/hooks/IsSmallScreen/index.d.cts +5 -0
  249. package/dist/hooks/IsSmallScreen/index.d.ts +5 -0
  250. package/dist/hooks/IsSmallScreen/index.js +20 -0
  251. package/dist/hooks/LocalStorageOperations/index.cjs +79 -0
  252. package/dist/hooks/LocalStorageOperations/index.d.cts +17 -0
  253. package/dist/hooks/LocalStorageOperations/index.d.ts +17 -0
  254. package/dist/hooks/LocalStorageOperations/index.js +74 -0
  255. package/dist/hooks/MessageFilter/index.cjs +53 -0
  256. package/dist/hooks/MessageFilter/index.d.cts +29 -0
  257. package/dist/hooks/MessageFilter/index.d.ts +29 -0
  258. package/dist/hooks/MessageFilter/index.js +53 -0
  259. package/dist/hooks/MessageScrollObserver/index.cjs +36 -0
  260. package/dist/hooks/MessageScrollObserver/index.d.cts +5 -0
  261. package/dist/hooks/MessageScrollObserver/index.d.ts +5 -0
  262. package/dist/hooks/MessageScrollObserver/index.js +34 -0
  263. package/dist/hooks/NewOrgConfig/index.cjs +19 -0
  264. package/dist/hooks/NewOrgConfig/index.d.cts +22 -0
  265. package/dist/hooks/NewOrgConfig/index.d.ts +22 -0
  266. package/dist/hooks/NewOrgConfig/index.js +19 -0
  267. package/dist/hooks/Search/index.cjs +324 -0
  268. package/dist/hooks/Search/index.d.cts +66 -0
  269. package/dist/hooks/Search/index.d.ts +66 -0
  270. package/dist/hooks/Search/index.js +321 -0
  271. package/dist/hooks/SearchOperations/index.cjs +101 -0
  272. package/dist/hooks/SearchOperations/index.d.cts +22 -0
  273. package/dist/hooks/SearchOperations/index.d.ts +22 -0
  274. package/dist/hooks/SearchOperations/index.js +98 -0
  275. package/dist/hooks/SessionStorageOperations/index.cjs +30 -0
  276. package/dist/hooks/SessionStorageOperations/index.d.cts +8 -0
  277. package/dist/hooks/SessionStorageOperations/index.d.ts +8 -0
  278. package/dist/hooks/SessionStorageOperations/index.js +28 -0
  279. package/dist/hooks/ShopifyUrlOperations/index.cjs +53 -0
  280. package/dist/hooks/ShopifyUrlOperations/index.d.cts +23 -0
  281. package/dist/hooks/ShopifyUrlOperations/index.d.ts +23 -0
  282. package/dist/hooks/ShopifyUrlOperations/index.js +49 -0
  283. package/dist/hooks/SnapCalculator/index.cjs +29 -0
  284. package/dist/hooks/SnapCalculator/index.d.cts +12 -0
  285. package/dist/hooks/SnapCalculator/index.d.ts +12 -0
  286. package/dist/hooks/SnapCalculator/index.js +27 -0
  287. package/dist/hooks/SystemSettingsContext/index.cjs +7 -0
  288. package/dist/hooks/SystemSettingsContext/index.d.cts +22 -0
  289. package/dist/hooks/SystemSettingsContext/index.d.ts +22 -0
  290. package/dist/hooks/SystemSettingsContext/index.js +7 -0
  291. package/dist/hooks/TrackComponentVisibleEvent/index.cjs +21 -0
  292. package/dist/hooks/TrackComponentVisibleEvent/index.d.cts +18 -0
  293. package/dist/hooks/TrackComponentVisibleEvent/index.d.ts +18 -0
  294. package/dist/hooks/TrackComponentVisibleEvent/index.js +21 -0
  295. package/dist/hooks/UpdateAnalyticsProps/index.cjs +61 -0
  296. package/dist/hooks/UpdateAnalyticsProps/index.d.cts +9 -0
  297. package/dist/hooks/UpdateAnalyticsProps/index.d.ts +9 -0
  298. package/dist/hooks/UpdateAnalyticsProps/index.js +58 -0
  299. package/dist/index-BCLaqnc2.d.cts +689 -0
  300. package/dist/{index-D2VaMPA3.d.ts → index-BS7-_CW4.d.ts} +1 -1
  301. package/dist/{index-BTK5uzs6.d.cts → index-Bmub8e38.d.cts} +1 -1
  302. package/dist/index-Bs0QtkSu.d.ts +689 -0
  303. package/dist/{index-BzgkfbNO.d.cts → index-CESxqFso.d.cts} +1 -1
  304. package/dist/index-CKeS9dud.d.ts +28 -0
  305. package/dist/{index-ClJ0nMsR.d.cts → index-CiWEYzXl.d.cts} +2 -2
  306. package/dist/index-CyXULMyI.d.cts +186 -0
  307. package/dist/index-Cz10TYQA.d.cts +28 -0
  308. package/dist/{index-CSIOQD-A.d.ts → index-D8ThXrqI.d.ts} +1 -1
  309. package/dist/{index-Dxpscrvz.d.ts → index-D9VegTU-.d.ts} +1 -1
  310. package/dist/{index-Cr2y08f1.d.ts → index-DBqgBV9N.d.ts} +1 -1
  311. package/dist/{index-CKKkTsms.d.ts → index-DNUKSg6R.d.ts} +1 -1
  312. package/dist/{index-BdNKc2ix.d.cts → index-DO0s5KNA.d.cts} +1 -1
  313. package/dist/{index-Cx9e-fRi.d.ts → index-DuyZQOE1.d.ts} +2 -2
  314. package/dist/{index-BrXuc_Ck.d.cts → index-REhT-Pls.d.cts} +1 -1
  315. package/dist/index-fKJB9EFb.d.ts +186 -0
  316. package/dist/interceptors/index.cjs +3 -12
  317. package/dist/interceptors/index.d.cts +12 -18
  318. package/dist/interceptors/index.d.ts +13 -19
  319. package/dist/interceptors/index.js +3 -11
  320. package/dist/interceptors/types.cjs +1 -0
  321. package/dist/interceptors/types.d.cts +12 -0
  322. package/dist/interceptors/types.d.ts +12 -0
  323. package/dist/interceptors/types.js +3 -0
  324. package/dist/localStorageContext-6OrGDFid.js +95 -0
  325. package/dist/localStorageContext-Bld0OWmG.cjs +115 -0
  326. package/dist/{logger-Dln20ans.cjs → logger-CSL2jqI9.cjs} +1 -1
  327. package/dist/{logger-pdEEY8T2.js → logger-D5MFf3nW.js} +1 -1
  328. package/dist/models-Dn8Emdzc.js +1295 -0
  329. package/dist/models-ZpQcRZQK.cjs +1536 -0
  330. package/dist/newOrgConfigAtom--tewb_G0.js +8 -0
  331. package/dist/newOrgConfigAtom-DkSi45_Q.cjs +15 -0
  332. package/dist/newOrgConfigContext-B3aeblfE.cjs +68 -0
  333. package/dist/newOrgConfigContext-B5mzHKTG.js +53 -0
  334. package/dist/{nodeSelector-vKB44CDB.d.cts → nodeSelector-XsUa5vNH.d.cts} +1 -1
  335. package/dist/org-B2uRkPt3.js +12 -0
  336. package/dist/org-ClUxpHPZ.cjs +43 -0
  337. package/dist/orgAnalyticsConfig-CuWXijsr.cjs +39 -0
  338. package/dist/orgAnalyticsConfig-DOceTdNp.js +14 -0
  339. package/dist/search-BIomqYy6.d.ts +20 -0
  340. package/dist/search-B_Hg-Es2.d.cts +20 -0
  341. package/dist/search-Bn4x-3TG.js +126 -0
  342. package/dist/search-DsQm_pAi.cjs +205 -0
  343. package/dist/{search-filter-types-C-zZSpGo.d.ts → search-filter-types-B5xcaEit.d.ts} +1 -1
  344. package/dist/{search-filter-types-9rTb3jMj.d.cts → search-filter-types-Byd0lEUa.d.cts} +1 -1
  345. package/dist/searchContext-Cn-pCoDy.cjs +145 -0
  346. package/dist/searchContext-fQDGSvUF.js +129 -0
  347. package/dist/searchServiceAdapter-BSPZOg1r.js +16 -0
  348. package/dist/searchServiceAdapter-DrjFCiw8.cjs +34 -0
  349. package/dist/sessionStorageContext-C5MUl2zf.js +52 -0
  350. package/dist/sessionStorageContext-CXE7iHtP.cjs +66 -0
  351. package/dist/shopifyUrlContext-7ppKx1jJ.cjs +75 -0
  352. package/dist/shopifyUrlContext-BSYWsoX9.js +61 -0
  353. package/dist/spiffyWidgets-CdxRcXhW.d.ts +20 -0
  354. package/dist/spiffyWidgets-DxGuuuCG.d.cts +20 -0
  355. package/dist/systemSettingsContext-BdAe_3Ll.cjs +60 -0
  356. package/dist/systemSettingsContext-Cjyo2o3N.js +39 -0
  357. package/dist/{test-types-CuOq25VT.d.cts → test-types-DQB1JqOf.d.cts} +1 -1
  358. package/dist/{test-types-CXVJxTeu.d.ts → test-types-ZuRAYwox.d.ts} +1 -1
  359. package/dist/types/index.cjs +33 -5
  360. package/dist/types/index.d.cts +2 -2
  361. package/dist/types/index.d.ts +2 -2
  362. package/dist/types/index.js +30 -3
  363. package/dist/types-BCz-hOvv.d.ts +51 -0
  364. package/dist/types-BwNrLPSZ.cjs +106 -0
  365. package/dist/types-D3uOF0Oy.js +76 -0
  366. package/dist/types-DIk0FLwd.js +30 -0
  367. package/dist/types-DNLkuGWZ.cjs +48 -0
  368. package/dist/types-DzwBmZHy.d.cts +10 -0
  369. package/dist/types-Eip78dWv.d.cts +51 -0
  370. package/dist/types-YvACLe2e.d.ts +10 -0
  371. package/dist/types.cjs +0 -0
  372. package/dist/types.d.cts +15 -0
  373. package/dist/types.d.ts +15 -0
  374. package/dist/types.js +1 -0
  375. package/dist/unsupportedProductExceptions--t7AQFou.js +20 -0
  376. package/dist/unsupportedProductExceptions-Dak4AD-t.cjs +32 -0
  377. package/dist/urlsParser-BV5yF8sa.cjs +78 -0
  378. package/dist/urlsParser-DUgV_Qy9.js +42 -0
  379. package/dist/useAmplitudeOperations-C6Osqkso.js +34 -0
  380. package/dist/useAmplitudeOperations-Cco_B3A5.cjs +41 -0
  381. package/dist/useAppDetails-CGqtN6sJ.cjs +38 -0
  382. package/dist/useAppDetails-DwX2Rhed.js +30 -0
  383. package/dist/useDebounce-BJqnCBcl.cjs +26 -0
  384. package/dist/useDebounce-Ce31ph7m.js +19 -0
  385. package/dist/useGraphQLConfig-ByOZb3oZ.js +63 -0
  386. package/dist/useGraphQLConfig-DItL4BgM.cjs +76 -0
  387. package/dist/useIntersection-Czeo04jt.js +21 -0
  388. package/dist/useIntersection-DnZNLcnu.cjs +28 -0
  389. package/dist/useMessageInterceptor-C9p9No1n.cjs +33 -0
  390. package/dist/useMessageInterceptor-tntd2rvB.js +25 -0
  391. package/dist/userIdentityContext-C1HzZFb2.cjs +125 -0
  392. package/dist/userIdentityContext-CDfosvOO.js +109 -0
  393. package/dist/userIdentityContext-DBXoLrFu.d.cts +20 -0
  394. package/dist/userIdentityContext-W1OWF3cG.d.ts +20 -0
  395. package/dist/utilityTypes-CWJZb9BZ.js +1 -0
  396. package/dist/utilityTypes-YGiMSyV7.cjs +0 -0
  397. package/dist/utils-BA5HXmkL.cjs +74 -0
  398. package/dist/utils-BTDw2aMx.cjs +715 -0
  399. package/dist/utils-C7S9YiFp.js +54 -0
  400. package/dist/utils-CF13DfA1.js +606 -0
  401. package/dist/variantInfo-58JLeDJb.js +1 -0
  402. package/dist/variantInfo-DRFLcGc7.cjs +0 -0
  403. package/package.json +278 -25
  404. package/src/{adapters/spiffy/commerce/api.ts → application/commerce-api.ts} +31 -23
  405. package/src/application/models/colorsConfig.ts +18 -18
  406. package/src/application/models/frontendConfig.ts +3 -3
  407. package/src/application/models/graphql/queries/getMerchantColorsQuery.ts +1 -1
  408. package/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.ts +1 -1
  409. package/src/application/models/index.ts +0 -3
  410. package/src/application/models/localStorageEventListener.ts +2 -2
  411. package/src/application/models/utils/snakeToCamelTransformer.ts +8 -8
  412. package/src/application/models/validators/validateGraphQLColorsConfig.ts +0 -21
  413. package/src/application/models/validators/validateGraphQLFrontendConfig.ts +2 -2
  414. package/src/application/utils/analyticsUtils.ts +53 -22
  415. package/src/application/utils/cdnUtils.ts +11 -0
  416. package/src/atoms/amplitude/amplitudeTrackEventAtom.ts +15 -0
  417. package/src/atoms/app/index.ts +7 -17
  418. package/src/atoms/app/variant.ts +13 -4
  419. package/src/atoms/chat/chatState.ts +28 -18
  420. package/src/atoms/chat/messageQueue.ts +36 -5
  421. package/src/atoms/chat/replies.ts +45 -37
  422. package/src/atoms/envive/enviveConfig.ts +10 -6
  423. package/src/atoms/org/graphqlConfig.ts +6 -38
  424. package/src/atoms/org/index.ts +3 -4
  425. package/src/atoms/org/newOrgConfigAtom.ts +4 -0
  426. package/src/atoms/search/chatSearch.ts +11 -5
  427. package/src/atoms/search/searchAPI.ts +22 -12
  428. package/src/atoms/search/searchServiceAdapter.ts +25 -0
  429. package/src/contexts/amplitudeContext/amplitudeContext.tsx +465 -0
  430. package/src/contexts/amplitudeContext/index.ts +1 -0
  431. package/src/contexts/cdnContext/cdnContext.tsx +48 -0
  432. package/src/contexts/cdnContext/index.ts +1 -0
  433. package/src/contexts/{chatContext.tsx → chatContext/chatContext.tsx} +16 -13
  434. package/src/contexts/chatContext/index.ts +1 -0
  435. package/src/contexts/{enviveConfigContext.tsx → enviveConfigContext/enviveConfigContext.tsx} +23 -18
  436. package/src/contexts/enviveConfigContext/index.ts +1 -0
  437. package/src/contexts/enviveCssContext/enviveCssContext.tsx +49 -0
  438. package/src/contexts/enviveCssContext/index.ts +1 -0
  439. package/src/contexts/featureFlagContext/featureFlagContext.tsx +193 -0
  440. package/src/contexts/featureFlagContext/index.ts +1 -0
  441. package/src/contexts/featureFlagServiceContext/featureFlagServiceContext.tsx +87 -0
  442. package/src/contexts/featureFlagServiceContext/index.ts +1 -0
  443. package/src/contexts/graphqlContext/graphqlContext.tsx +165 -0
  444. package/src/contexts/graphqlContext/index.ts +1 -0
  445. package/src/contexts/localStorageContext/index.ts +1 -0
  446. package/src/contexts/localStorageContext/localStorageContext.tsx +159 -0
  447. package/src/contexts/newOrgConfigContext/index.ts +1 -0
  448. package/src/contexts/newOrgConfigContext/newOrgConfigContext.tsx +70 -0
  449. package/src/contexts/searchContext/index.ts +1 -0
  450. package/src/contexts/searchContext/searchContext.tsx +187 -0
  451. package/src/contexts/sessionStorageContext/index.ts +1 -0
  452. package/src/contexts/sessionStorageContext/sessionStorageContext.tsx +80 -0
  453. package/src/contexts/shopifyUrlContext/index.ts +1 -0
  454. package/src/contexts/shopifyUrlContext/shopifyUrlContext.tsx +97 -0
  455. package/src/contexts/systemSettingsContext/index.ts +1 -0
  456. package/src/contexts/types.ts +12 -8
  457. package/src/contexts/userIdentityContext/index.ts +1 -0
  458. package/src/contexts/userIdentityContext/userIdentityContext.tsx +197 -0
  459. package/src/events/registerAnalyticsListeners.ts +32 -38
  460. package/src/favicon.ico +0 -0
  461. package/src/hooks/AmplitudeOperations/index.ts +1 -0
  462. package/src/hooks/AmplitudeOperations/useAmplitudeOperations.ts +35 -0
  463. package/src/hooks/AppDetails/index.ts +1 -0
  464. package/src/hooks/AppDetails/useAppDetails.ts +47 -0
  465. package/src/hooks/BlockBackButton/index.ts +1 -0
  466. package/src/hooks/CdnOperations/index.ts +1 -0
  467. package/src/hooks/CdnOperations/useCdnOperations.ts +16 -0
  468. package/src/hooks/ChatToggle/index.ts +1 -0
  469. package/src/hooks/{useChatToggle.ts → ChatToggle/useChatToggle.ts} +5 -4
  470. package/src/hooks/ChatToggleAnalytics/index.ts +1 -0
  471. package/src/hooks/ChatToggleAnalytics/useChatToggleAnalytics.ts +15 -0
  472. package/src/hooks/CustomerSupportHandoff/index.ts +1 -0
  473. package/src/hooks/Debounce/index.ts +1 -0
  474. package/src/hooks/ElementObserver/index.ts +1 -0
  475. package/src/hooks/GrabAndScroll/index.ts +1 -0
  476. package/src/hooks/GraphQLConfig/index.ts +1 -0
  477. package/src/hooks/GraphQLConfig/useGraphQLConfig.ts +63 -0
  478. package/src/hooks/IdentifyUser/index.ts +1 -0
  479. package/src/hooks/IdentifyUser/useIdentifyUser.ts +33 -0
  480. package/src/hooks/ImageResolver/index.ts +1 -0
  481. package/src/hooks/{useImageResolver.ts → ImageResolver/useImageResolver.ts} +7 -7
  482. package/src/hooks/Intersection/index.ts +1 -0
  483. package/src/hooks/IsSmallScreen/index.ts +1 -0
  484. package/src/hooks/LocalStorageOperations/index.ts +1 -0
  485. package/src/hooks/LocalStorageOperations/useLocalStorageOperations.ts +92 -0
  486. package/src/hooks/MessageFilter/index.ts +1 -0
  487. package/src/hooks/MessageScrollObserver/index.ts +1 -0
  488. package/src/hooks/NewOrgConfig/index.ts +1 -0
  489. package/src/hooks/NewOrgConfig/useNewOrgConfig.ts +7 -0
  490. package/src/hooks/Search/index.ts +1 -0
  491. package/src/hooks/{useSearch.tsx → Search/useSearch.tsx} +24 -20
  492. package/src/hooks/SearchOperations/index.ts +1 -0
  493. package/src/hooks/SearchOperations/useSearchOperations.ts +97 -0
  494. package/src/hooks/SessionStorageOperations/index.ts +1 -0
  495. package/src/hooks/SessionStorageOperations/useSessionStorageOperations.ts +28 -0
  496. package/src/hooks/ShopifyUrlOperations/index.ts +1 -0
  497. package/src/hooks/ShopifyUrlOperations/useShopifyUrlOperations.ts +45 -0
  498. package/src/hooks/SnapCalculator/index.ts +1 -0
  499. package/src/hooks/SystemSettingsContext/index.ts +1 -0
  500. package/src/hooks/SystemSettingsContext/useSystemSettingsContext.ts +14 -0
  501. package/src/hooks/TrackComponentVisibleEvent/index.ts +1 -0
  502. package/src/hooks/{useTrackComponentVisibleEvent.ts → TrackComponentVisibleEvent/useTrackComponentVisibleEvent.ts} +12 -8
  503. package/src/hooks/UpdateAnalyticsProps/index.ts +1 -0
  504. package/src/hooks/{useUpdateAnalyticsProps.ts → UpdateAnalyticsProps/useUpdateAnalyticsProps.ts} +28 -17
  505. package/src/interceptors/index.ts +0 -1
  506. package/src/interceptors/useMessageInterceptor.ts +5 -8
  507. package/src/merchants/domInsertion.ts +30 -0
  508. package/src/merchants/gridInsertion.ts +19 -0
  509. package/src/types/config-versions.ts +6 -0
  510. package/src/types.ts +0 -53
  511. package/dist/adapters/amplitude/index.cjs +0 -14
  512. package/dist/adapters/amplitude/index.d.cts +0 -6
  513. package/dist/adapters/amplitude/index.d.ts +0 -6
  514. package/dist/adapters/amplitude/index.js +0 -12
  515. package/dist/api-B2euFL-5.cjs +0 -269
  516. package/dist/api-XRr_lAG6.js +0 -190
  517. package/dist/application/config/index.cjs +0 -43
  518. package/dist/application/config/index.d.cts +0 -15
  519. package/dist/application/config/index.d.ts +0 -15
  520. package/dist/application/config/index.js +0 -41
  521. package/dist/application/service/customerService/index.cjs +0 -4
  522. package/dist/application/service/customerService/index.d.cts +0 -3
  523. package/dist/application/service/customerService/index.d.ts +0 -3
  524. package/dist/application/service/customerService/index.js +0 -4
  525. package/dist/application/service/index.cjs +0 -42
  526. package/dist/application/service/index.d.cts +0 -413
  527. package/dist/application/service/index.d.ts +0 -413
  528. package/dist/application/service/index.js +0 -12
  529. package/dist/atomStore-ONYy0XuA.d.cts +0 -24
  530. package/dist/atomStore-kOKiEcNl.d.ts +0 -24
  531. package/dist/bandolier-Da4wt6sm.cjs +0 -1230
  532. package/dist/bandolier-DzEmYWcz.js +0 -1230
  533. package/dist/carpe-AXipz0Xl.cjs +0 -608
  534. package/dist/carpe-CaUKwcEa.js +0 -606
  535. package/dist/contexts/index.cjs +0 -26
  536. package/dist/contexts/index.d.cts +0 -10
  537. package/dist/contexts/index.d.ts +0 -10
  538. package/dist/contexts/index.js +0 -12
  539. package/dist/contexts-CtRlNXaS.js +0 -7674
  540. package/dist/contexts-CtgmnYNn.cjs +0 -9088
  541. package/dist/coterie--MGvWeVh.cjs +0 -240
  542. package/dist/coterie-oKHAT0lx.js +0 -240
  543. package/dist/customerService-BG1uNZZ1.cjs +0 -36
  544. package/dist/customerService-BHQRnLhC.js +0 -23
  545. package/dist/custservice-types-C8-9vKWb.cjs +0 -35
  546. package/dist/custservice-types-CamCiXjq.js +0 -23
  547. package/dist/default-B4fINY5_.cjs +0 -4
  548. package/dist/default-BrTQxA0c.js +0 -4
  549. package/dist/default-C3LrcbZB.cjs +0 -199
  550. package/dist/default-CXkYrLEr.js +0 -176
  551. package/dist/divIds-0Vj9g-fM.js +0 -23
  552. package/dist/divIds-CjceLRD9.cjs +0 -131
  553. package/dist/dreamlandBaby-BEqt0eKF.js +0 -347
  554. package/dist/dreamlandBaby-DBDjEJCc.cjs +0 -347
  555. package/dist/embedded-B5Wi9g0T.cjs +0 -131
  556. package/dist/embedded-_cLpd6FK.js +0 -23
  557. package/dist/entrypoints-CNUvSgnk.js +0 -7
  558. package/dist/entrypoints-DM9Sm18O.cjs +0 -19
  559. package/dist/featureFlagService-5wdmW02z.d.ts +0 -18
  560. package/dist/featureFlagService-DaelrXEk.d.cts +0 -18
  561. package/dist/fiveCbd-CdqNt16h.cjs +0 -614
  562. package/dist/fiveCbd-D6B-sgnX.js +0 -614
  563. package/dist/forLoveAndLemons-C7GsJG7f.cjs +0 -668
  564. package/dist/forLoveAndLemons-gNDlMtPR.js +0 -666
  565. package/dist/greenpan-B5AaW4M_.js +0 -398
  566. package/dist/greenpan-DrORpYms.cjs +0 -398
  567. package/dist/grooveLife-BJqsfH2H.cjs +0 -343
  568. package/dist/grooveLife-xIUmDM8s.js +0 -343
  569. package/dist/homegrownCannabis-8TZ21u6L.cjs +0 -411
  570. package/dist/homegrownCannabis-BtMuEvbZ.js +0 -411
  571. package/dist/hooks/index.cjs +0 -37
  572. package/dist/hooks/index.d.cts +0 -232
  573. package/dist/hooks/index.d.ts +0 -232
  574. package/dist/hooks/index.js +0 -12
  575. package/dist/index-CKUpnyJQ.d.ts +0 -72
  576. package/dist/index-CbJZOEU4.d.ts +0 -203
  577. package/dist/index-DFL1dIT_.d.ts +0 -7
  578. package/dist/index-DXpgMVpp.d.ts +0 -749
  579. package/dist/index-K2kNsOTw.d.cts +0 -203
  580. package/dist/index-MFbPQ8Ji.d.ts +0 -95
  581. package/dist/index-VHFMGkO-.d.cts +0 -72
  582. package/dist/index-VSFakgAI.d.cts +0 -95
  583. package/dist/index-aNW5V9fh.d.cts +0 -749
  584. package/dist/index-zZjcds15.d.cts +0 -7
  585. package/dist/jackArcher-WtkbLBZj.cjs +0 -728
  586. package/dist/jackArcher-sO9EbgrZ.js +0 -728
  587. package/dist/jordanCraig-471FcgqF.cjs +0 -1787
  588. package/dist/jordanCraig-DNOncplU.js +0 -1787
  589. package/dist/kindredBravely-BlLyHGMX.cjs +0 -491
  590. package/dist/kindredBravely-cqZ4OvXp.js +0 -491
  591. package/dist/kutFromTheKloth-3mOIryvt.cjs +0 -370
  592. package/dist/kutFromTheKloth-DtVNCMKa.js +0 -370
  593. package/dist/larryAndSerges-88Bvq-Us.cjs +0 -262
  594. package/dist/larryAndSerges-cvak6May.js +0 -262
  595. package/dist/leapsAndRebounds-Dmf8eUPq.js +0 -361
  596. package/dist/leapsAndRebounds-iWKc923H.cjs +0 -361
  597. package/dist/longevityrx-BTMI9vn-.js +0 -321
  598. package/dist/longevityrx-CobPyigd.cjs +0 -321
  599. package/dist/lookOptic-C4H_c0JZ.cjs +0 -283
  600. package/dist/lookOptic-Jwf7EAU8.js +0 -283
  601. package/dist/mantraBrand-CySGqbn6.cjs +0 -751
  602. package/dist/mantraBrand-DoaVj837.js +0 -751
  603. package/dist/medterra-BnZ5p27n.cjs +0 -584
  604. package/dist/medterra-DaICcPPp.js +0 -584
  605. package/dist/modells-CZ1L6dD_.js +0 -485
  606. package/dist/modells-DF0SndHr.cjs +0 -485
  607. package/dist/orgConfigResults--dAwtw3W.d.ts +0 -881
  608. package/dist/orgConfigResults-BL0XBA6x.d.cts +0 -881
  609. package/dist/pressedFloral-B3t2cYzs.cjs +0 -662
  610. package/dist/pressedFloral-Dsws2Kfb.js +0 -662
  611. package/dist/skinPerfection-CILQM2bR.cjs +0 -335
  612. package/dist/skinPerfection-DmQCntRf.js +0 -335
  613. package/dist/snapSupplements--X_v0KRM.js +0 -286
  614. package/dist/snapSupplements-Djuzl0Ed.cjs +0 -286
  615. package/dist/socialProofClasses-DdzG1tZy.js +0 -10
  616. package/dist/socialProofClasses-ky69yppk.cjs +0 -40
  617. package/dist/spanx-Bo81yXSF.cjs +0 -664
  618. package/dist/spanx-DauxB8KE.js +0 -662
  619. package/dist/spanxStaging-BucYQvR1.cjs +0 -849
  620. package/dist/spanxStaging-CfXUukdP.js +0 -846
  621. package/dist/suggestionBarV2-types-B3lwrENK.cjs +0 -16
  622. package/dist/suggestionBarV2-types-Penx3Y67.js +0 -10
  623. package/dist/supergoop-8qa_NV3F.cjs +0 -338
  624. package/dist/supergoop-DOaui-A6.js +0 -336
  625. package/dist/types-CD4LFta-.d.cts +0 -33
  626. package/dist/types-CGC6Oozp.cjs +0 -231
  627. package/dist/types-CnTCkyvK.js +0 -177
  628. package/dist/types-DBdI0j89.d.ts +0 -33
  629. package/dist/uniqueVintage-BWkDgt1z.js +0 -1212
  630. package/dist/uniqueVintage-DAne8XcL.cjs +0 -1214
  631. package/dist/variant-CC1nrywd.d.ts +0 -13
  632. package/dist/variant-CQTuQQSq.d.cts +0 -13
  633. package/dist/venaCbd-B1HO_Pkr.cjs +0 -366
  634. package/dist/venaCbd-CnByO-5R.js +0 -366
  635. package/dist/westonJonBoucher-BAGXegsX.js +0 -423
  636. package/dist/westonJonBoucher-BRfHWMbs.cjs +0 -423
  637. package/dist/wineEnthusiast-DW8JVwV8.cjs +0 -941
  638. package/dist/wineEnthusiast-EJbhMeKQ.js +0 -941
  639. package/dist/wolfMattress-B6INZNRJ.cjs +0 -373
  640. package/dist/wolfMattress-D9P7ErH_.js +0 -373
  641. package/dist/wolfTactical-C5Pupi3J.js +0 -350
  642. package/dist/wolfTactical-TMthZM93.cjs +0 -350
  643. package/src/adapters/amplitude/amplitudeAdapter.ts +0 -477
  644. package/src/adapters/amplitude/index.ts +0 -2
  645. package/src/adapters/amplitude/stubAmplitudeAdapter.ts +0 -34
  646. package/src/adapters/spiffy/commerce/graphql.ts +0 -219
  647. package/src/application/config/generalStaticConfig.ts +0 -40
  648. package/src/application/config/index.ts +0 -1
  649. package/src/application/models/domMutationContinuation.ts +0 -7
  650. package/src/application/models/domObservationStrategy.ts +0 -9
  651. package/src/application/models/supportedOrgs.ts +0 -161
  652. package/src/application/service/cachingService.ts +0 -84
  653. package/src/application/service/cdnService.ts +0 -20
  654. package/src/application/service/customerService/index.ts +0 -8
  655. package/src/application/service/customerService/providers/UnsupportedCustomerService.ts +0 -15
  656. package/src/application/service/domMutationObserver.ts +0 -320
  657. package/src/application/service/domMutations/GridInsertionService.ts +0 -123
  658. package/src/application/service/domMutations/dataLayer/dataLayerEventsListener.ts +0 -99
  659. package/src/application/service/domMutations/domInsertionService.ts +0 -90
  660. package/src/application/service/domMutations/domMutationListener.ts +0 -15
  661. package/src/application/service/domMutations/domMutationListenerState.ts +0 -52
  662. package/src/application/service/domMutations/floatingChat/embeddedChatsPlacementsListener.ts +0 -41
  663. package/src/application/service/domMutations/gladly/gladlyListener.ts +0 -61
  664. package/src/application/service/domMutations/spiffy/orgs/common/kustomerVisibilityListener.ts +0 -41
  665. package/src/application/service/domMutations/spiffy/orgs/common/orgsCommonDataLayerListener.ts +0 -119
  666. package/src/application/service/featureFlagService.ts +0 -130
  667. package/src/application/service/graphqlConfigService.ts +0 -59
  668. package/src/application/service/index.ts +0 -32
  669. package/src/application/service/kustomerIntegrationService.ts +0 -111
  670. package/src/application/service/localStorageService.ts +0 -77
  671. package/src/application/service/pageVariantService.ts +0 -866
  672. package/src/application/service/searchService.ts +0 -147
  673. package/src/application/service/sessionStorageService.ts +0 -27
  674. package/src/application/service/shopifyUrlService.ts +0 -63
  675. package/src/application/service/userIdentityService.ts +0 -114
  676. package/src/application/service/windowChatToggleService.ts +0 -80
  677. package/src/application/service/windowDataLayerService.ts +0 -181
  678. package/src/application/service/windowFrontendConfigService.ts +0 -129
  679. package/src/atoms/org/merchantCss.ts +0 -161
  680. package/src/atoms/org/org.ts +0 -251
  681. package/src/atoms/org/orgPageConfig.ts +0 -41
  682. package/src/atoms/org/orgUIConfig.ts +0 -142
  683. package/src/contexts/enviveCssContext.tsx +0 -20
  684. package/src/contexts/index.ts +0 -6
  685. package/src/contexts/orgConfigContext.tsx +0 -106
  686. package/src/enabled-features.ts +0 -83
  687. package/src/hooks/index.ts +0 -21
  688. package/src/hooks/useDynamicVariants.ts +0 -226
  689. package/src/hooks/useFileUpload.ts +0 -63
  690. package/src/hooks/useHideElements.ts +0 -85
  691. package/src/hooks/useNewOrgConfig.ts +0 -80
  692. package/src/hooks/useSystemSettingsContext.ts +0 -12
  693. package/src/interceptors/useFormEscalation.ts +0 -57
  694. package/src/merchants/bandolier/bandolier.ts +0 -1389
  695. package/src/merchants/carpe/carpe.ts +0 -656
  696. package/src/merchants/coterie/coterie.ts +0 -280
  697. package/src/merchants/default.ts +0 -193
  698. package/src/merchants/dreamlandBaby/dreamlandBaby.ts +0 -375
  699. package/src/merchants/fiveCbd/fiveCbd.ts +0 -697
  700. package/src/merchants/forLoveAndLemons/forLoveAndLemons.ts +0 -721
  701. package/src/merchants/greenpan/greenpan.ts +0 -440
  702. package/src/merchants/grooveLife/grooveLife.ts +0 -386
  703. package/src/merchants/homegrownCannabis/homegrownCannabis.ts +0 -468
  704. package/src/merchants/init-merchant.sh +0 -53
  705. package/src/merchants/jackArcher/jackArcher.ts +0 -974
  706. package/src/merchants/jordanCraig/jordanCraig.ts +0 -1927
  707. package/src/merchants/kindredBravely/kindredBravely.ts +0 -529
  708. package/src/merchants/kutFromTheKloth/kutFromTheKloth.ts +0 -418
  709. package/src/merchants/larryAndSerges/larryAndSerges.ts +0 -314
  710. package/src/merchants/leapsAndRebounds/leapsAndRebounds.ts +0 -424
  711. package/src/merchants/longevityrx/longevityrx.ts +0 -368
  712. package/src/merchants/lookOptic/lookOptic.ts +0 -323
  713. package/src/merchants/mantraBrand/mantraBrand.ts +0 -838
  714. package/src/merchants/medterra/medterra.ts +0 -670
  715. package/src/merchants/modells/modells.ts +0 -546
  716. package/src/merchants/pressedFloral/pressedFloral.ts +0 -734
  717. package/src/merchants/skinPerfection/skinPerfection.ts +0 -379
  718. package/src/merchants/snapSupplements/snapSupplements.ts +0 -325
  719. package/src/merchants/spanx/spanx.ts +0 -810
  720. package/src/merchants/spanx/spanxStaging.ts +0 -942
  721. package/src/merchants/supergoop/supergoop.ts +0 -376
  722. package/src/merchants/uniqueVintage/uniqueVintage.ts +0 -1314
  723. package/src/merchants/venaCbd/venaCbd.ts +0 -410
  724. package/src/merchants/westonJonBoucher/westonJonBoucher.ts +0 -473
  725. package/src/merchants/wineEnthusiast/wineEnthusiast.ts +0 -990
  726. package/src/merchants/wolfMattress/wolfMattress.ts +0 -411
  727. package/src/merchants/wolfTactical/wolfTactical.ts +0 -389
  728. /package/dist/{locators-CugndTUM.cjs → AmplitudeOperations-CgIVPUlr.cjs} +0 -0
  729. /package/dist/{locators-DnKpajbY.js → AmplitudeOperations-YpyaR7Mp.js} +0 -0
  730. /package/dist/{utilityTypes-BVikejDo.js → atomStore-C2OI76yN.js} +0 -0
  731. /package/dist/{utilityTypes-C4h2wgAK.cjs → atomStore-DWmT1six.cjs} +0 -0
  732. /package/dist/{variantInfo-CzhR5W6h.js → types-DQoXDiso.js} +0 -0
  733. /package/dist/{variantInfo-CNRTY0gH.cjs → types-o3zWarRp.cjs} +0 -0
  734. /package/src/contexts/{systemSettingsContext.tsx → systemSettingsContext/systemSettingsContext.tsx} +0 -0
  735. /package/src/hooks/{useBlockBackButton.ts → BlockBackButton/useBlockBackButton.ts} +0 -0
  736. /package/src/hooks/{useCustomerSupportHandoff.ts → CustomerSupportHandoff/useCustomerSupportHandoff.ts} +0 -0
  737. /package/src/hooks/{useDebounce.ts → Debounce/useDebounce.ts} +0 -0
  738. /package/src/hooks/{useElementObserver.ts → ElementObserver/useElementObserver.ts} +0 -0
  739. /package/src/hooks/{useGrabAndScroll.ts → GrabAndScroll/useGrabAndScroll.ts} +0 -0
  740. /package/src/hooks/{useIntersection.ts → Intersection/useIntersection.ts} +0 -0
  741. /package/src/hooks/{useIsSmallScreen.ts → IsSmallScreen/useIsSmallScreen.ts} +0 -0
  742. /package/src/hooks/{useMessageFilter.ts → MessageFilter/useMessageFilter.ts} +0 -0
  743. /package/src/hooks/{useMessageScrollObserver.ts → MessageScrollObserver/useMessageScrollObserver.ts} +0 -0
  744. /package/src/hooks/{useSnapCalculator.ts → SnapCalculator/useSnapCalculator.ts} +0 -0
  745. /package/src/{application/service/customerService/types.ts → types/customerService.ts} +0 -0
  746. /package/src/{adapters/spiffy/commerce → types}/exceptions/sessionExceptions.ts +0 -0
  747. /package/src/{adapters/spiffy/commerce → types}/exceptions/unsupportedProductExceptions.ts +0 -0
@@ -0,0 +1,315 @@
1
+ import { MessageRole, MessageType } from "./models-Dn8Emdzc.js";
2
+ import { messagesAtom, replyEventCategoryAtom, userHasRepliedAtom, userQueryAtom } from "./chatState-BrmBYY8l.js";
3
+ import { queueUserEventAtom } from "./chat-DPJGdUkz.js";
4
+ import { newOrgConfigAtom } from "./newOrgConfigAtom--tewb_G0.js";
5
+ import { ProductSorting } from "./types-DIk0FLwd.js";
6
+ import { UserEventCategory } from "@spiffy-ai/commerce-api-client";
7
+ import { atom } from "jotai";
8
+ import { v4 } from "uuid";
9
+
10
+ //#region src/atoms/search/utils.ts
11
+ const formatFilterDisplayName = (displayName) => {
12
+ const sizes = [
13
+ "xxxs",
14
+ "xxs",
15
+ "xs",
16
+ "s",
17
+ "m",
18
+ "l",
19
+ "xl",
20
+ "xxl",
21
+ "xxxl",
22
+ "xxxxl"
23
+ ];
24
+ return displayName.toLowerCase().split(" ").map((word) => {
25
+ if (sizes.includes(word)) return word.toUpperCase();
26
+ return word.charAt(0).toUpperCase() + word.slice(1);
27
+ }).join(" ").replace(/Iphone/g, "iPhone");
28
+ };
29
+
30
+ //#endregion
31
+ //#region src/atoms/search/productFilters.ts
32
+ const getPriceBucket = (price, bucketSize) => {
33
+ return Math.floor(price / bucketSize) * bucketSize;
34
+ };
35
+ const isStringArray = (value) => {
36
+ if (!Array.isArray(value)) return false;
37
+ return value.every((item) => typeof item === "string");
38
+ };
39
+ const sortFilter = (filterConfig) => {
40
+ if (filterConfig.type === "price") return (a, b) => Number(a.filterItemId) - Number(b.filterItemId);
41
+ if (filterConfig.type === "dynamic") {
42
+ if (filterConfig.sorting.type === "alphabetic") return (a, b) => a.displayName.localeCompare(b.displayName);
43
+ if (filterConfig.sorting.type === "productCount") return (a, b) => a.productCount === b.productCount ? a.displayName.localeCompare(b.displayName) : b.productCount - a.productCount;
44
+ if (filterConfig.sorting.type === "custom") {
45
+ const sortedKeys = filterConfig.sorting.map;
46
+ return (a, b) => {
47
+ if (sortedKeys[a.displayName] && sortedKeys[b.displayName]) return sortedKeys[a.displayName] - sortedKeys[b.displayName];
48
+ if (sortedKeys[a.displayName]) return -1;
49
+ if (sortedKeys[b.displayName]) return 1;
50
+ return b.productCount - a.productCount;
51
+ };
52
+ }
53
+ }
54
+ throw new Error("Invaalid search filter configuration");
55
+ };
56
+ var ProductFilters = class {
57
+ static getFiltersForProducts(products, filterConfigs, selectedFilterOptions) {
58
+ if (!products || products.length === 0) return [];
59
+ return [...filterConfigs.map((filterConfig) => products.reduce((acc, product) => {
60
+ if (filterConfig.type === "price") {
61
+ const priceBucket = getPriceBucket(product.salePrice ?? product.originalPrice ?? 0, filterConfig.bucketSize);
62
+ const current = acc.map[priceBucket] ?? {
63
+ filterItemId: priceBucket,
64
+ displayName: `$${priceBucket}-$${priceBucket + filterConfig.bucketSize}`,
65
+ productCount: 0
66
+ };
67
+ acc.map[priceBucket] = {
68
+ ...current,
69
+ productCount: current.productCount + 1
70
+ };
71
+ return acc;
72
+ }
73
+ const attributeValues = (product.filters && product.filters?.[filterConfig.attribute]) ?? [];
74
+ if (isStringArray(attributeValues)) attributeValues.forEach((val) => {
75
+ const normalizedVal = val.toLowerCase();
76
+ const current = acc.map[normalizedVal] ?? {
77
+ filterItemId: normalizedVal,
78
+ displayName: formatFilterDisplayName(val),
79
+ productCount: 0
80
+ };
81
+ acc.map[normalizedVal] = {
82
+ ...current,
83
+ productCount: current.productCount + 1
84
+ };
85
+ });
86
+ return acc;
87
+ }, {
88
+ filterConfig,
89
+ map: {}
90
+ })).map(({ filterConfig, map }) => ({
91
+ filterId: filterConfig.filterId,
92
+ displayName: filterConfig.displayName,
93
+ items: Object.values(map).map((filter) => ({
94
+ filterItemId: filter.filterItemId,
95
+ displayName: filter.displayName,
96
+ productCount: filter.productCount,
97
+ isSelected: selectedFilterOptions.some((option) => option.id === `${filterConfig.filterId}:${filter.filterItemId}`) ?? false
98
+ })).sort(sortFilter(filterConfig))
99
+ }))];
100
+ }
101
+ static filterProducts(products, filterConfigs, selectedFilterOptions, additiveDynamicFilters = false) {
102
+ const selectedFilters = filterConfigs.map((filterConfig) => ({
103
+ filterConfig,
104
+ hasSelectedOptions: selectedFilterOptions.some((option) => option.filterId === filterConfig.filterId)
105
+ })).filter(({ hasSelectedOptions }) => hasSelectedOptions);
106
+ return selectedFilterOptions.length === 0 ? products : products.filter((product) => selectedFilters.reduce((acc, selectedFilter) => {
107
+ if (!acc) return acc;
108
+ if (selectedFilter.filterConfig.type === "price") {
109
+ const priceBucket = getPriceBucket(product.salePrice ?? product.originalPrice ?? 0, selectedFilter.filterConfig.bucketSize);
110
+ if (!selectedFilterOptions.some((option) => option.id === `price:${priceBucket}`)) return false;
111
+ }
112
+ if (selectedFilter.filterConfig.type === "dynamic") {
113
+ const { filterId, attribute } = selectedFilter.filterConfig;
114
+ const attributeValues = product.filters?.[attribute];
115
+ if (!isStringArray(attributeValues)) return false;
116
+ if (selectedFilter.filterConfig.attribute === "dynamic" && !additiveDynamicFilters) {
117
+ if (!selectedFilterOptions.filter((option) => option.filterId === filterId).map((option) => option.filterItemId.toLowerCase()).every((selectedValue) => attributeValues.some((val) => val.toLowerCase() === selectedValue))) return false;
118
+ } else if (!attributeValues.some((val) => selectedFilterOptions.some((option) => option.id === `${filterId}:${val.toLowerCase()}`))) return false;
119
+ }
120
+ return true;
121
+ }, true));
122
+ }
123
+ };
124
+
125
+ //#endregion
126
+ //#region src/atoms/search/productSorter.ts
127
+ var ProductSorter = class {
128
+ static sort(products, sorting) {
129
+ switch (sorting) {
130
+ case ProductSorting.PRICE_ASC: return [...products].sort((p1, p2) => (p1.salePrice ?? p1.originalPrice ?? 0) - (p2.salePrice ?? p2.originalPrice ?? 0));
131
+ case ProductSorting.PRICE_DESC: return [...products].sort((p1, p2) => (p2.salePrice ?? p2.originalPrice ?? 0) - (p1.salePrice ?? p1.originalPrice ?? 0));
132
+ default: return products;
133
+ }
134
+ }
135
+ };
136
+
137
+ //#endregion
138
+ //#region src/atoms/search/chatSearch.ts
139
+ const chatSearchStateAtom = atom("entrypoint");
140
+ const chatSearchHasProductsAtom = atom(false);
141
+ const chatSearchProductSortingAtom = atom(ProductSorting.FEATURED);
142
+ const filterProductList = (message) => message.type === MessageType.Product && message.metadata.isForGrid === true;
143
+ const filterFilterList = (message) => message.type === MessageType.ProductSearchFilter;
144
+ const chatSearchIsLoadingAtom = atom(false);
145
+ const buildChatSearchTurn = (messages) => {
146
+ const queryMessage = messages.find((message) => message.type === MessageType.ProductSearch);
147
+ if (!queryMessage) return null;
148
+ const { generatedQuery, productCount } = queryMessage.metadata ?? {};
149
+ const productList = messages.filter(filterProductList).map((message) => message.metadata);
150
+ const filterList = messages.filter(filterFilterList).map((message) => message.metadata.filterName);
151
+ return [queryMessage.id, {
152
+ id: queryMessage.id,
153
+ generatedQuery,
154
+ productCount: productCount || productList.length,
155
+ productList,
156
+ filterList,
157
+ messages
158
+ }];
159
+ };
160
+ const chatSearchFilterConfigAtom = atom((get) => {
161
+ return get(newOrgConfigAtom)?.frontendConfig?.uiConfigs?.searchConfig?.searchFilterConfig || [];
162
+ });
163
+ const searchMapAtom = atom((get) => {
164
+ const messages = get(messagesAtom);
165
+ return Object.fromEntries(messages.map(buildChatSearchTurn).filter((v) => v !== null));
166
+ });
167
+ const internalChatSearchParamsAtom = atom({
168
+ id: null,
169
+ query: null
170
+ });
171
+ const selectedFilterOptionsAtom = atom([]);
172
+ const additiveDynamicFiltersAtom = atom((get) => {
173
+ return get(newOrgConfigAtom)?.frontendConfig?.uiConfigs?.searchConfig?.additiveDynamicFilters ?? false;
174
+ });
175
+ const createChatSearchFilterOption = (filterId, filterItemId, displayName) => ({
176
+ id: `${filterId}:${filterItemId}`,
177
+ displayName,
178
+ filterId,
179
+ filterItemId
180
+ });
181
+ const handleSearchAtom = atom(null, (get, set, message) => {
182
+ if (message.type !== MessageType.Search) return;
183
+ const querySearch = message.metadata.searchTerm;
184
+ set(replyEventCategoryAtom, UserEventCategory.Search);
185
+ set(userQueryAtom, querySearch);
186
+ set(messagesAtom, [...get(messagesAtom), [message]]);
187
+ set(userHasRepliedAtom, true);
188
+ set(queueUserEventAtom, {
189
+ eventId: message.id,
190
+ category: UserEventCategory.Search,
191
+ createdAt: message.createdAt,
192
+ attributes: {
193
+ searchTerm: message.metadata.searchTerm,
194
+ selectedFilters: message.metadata.selectedFilters
195
+ }
196
+ });
197
+ });
198
+ const chatSearchParamsAtom = atom((get) => get(internalChatSearchParamsAtom), (_, set, value) => {
199
+ set(internalChatSearchParamsAtom, value);
200
+ });
201
+ const chatSearchQueryAtom = atom((get) => get(chatSearchParamsAtom)?.query ?? null, (get, set, value) => {
202
+ const searchParams = get(chatSearchParamsAtom);
203
+ set(chatSearchParamsAtom, {
204
+ id: searchParams.id,
205
+ query: value
206
+ });
207
+ });
208
+ const chatSearchIdAtom = atom((get) => get(chatSearchParamsAtom)?.id ?? null, (get, set, value) => {
209
+ const searchParams = get(chatSearchParamsAtom);
210
+ set(chatSearchParamsAtom, {
211
+ id: value,
212
+ query: searchParams.query
213
+ });
214
+ });
215
+ const ChatSearchTurnAtom = atom((get) => {
216
+ const searchFilterConfig = get(chatSearchFilterConfigAtom);
217
+ const searchMap = get(searchMapAtom);
218
+ const chatSearchId = get(chatSearchIdAtom);
219
+ if (!chatSearchId) return null;
220
+ const ChatSearchTurn = searchMap[chatSearchId];
221
+ if (!ChatSearchTurn) return null;
222
+ const productSorting = get(chatSearchProductSortingAtom);
223
+ const selectedFilterOptions = get(selectedFilterOptionsAtom);
224
+ const additiveDynamicFilters = get(additiveDynamicFiltersAtom);
225
+ const filteredProducts = ProductFilters.filterProducts(ChatSearchTurn.productList, searchFilterConfig, selectedFilterOptions, additiveDynamicFilters);
226
+ const filteredAndSortedProducts = ProductSorter.sort(filteredProducts, productSorting);
227
+ return {
228
+ ...searchMap[chatSearchId],
229
+ productList: filteredAndSortedProducts,
230
+ productCount: filteredAndSortedProducts.length
231
+ };
232
+ });
233
+ const chatSearchProducts = atom((get) => {
234
+ return get(ChatSearchTurnAtom)?.productList ?? [];
235
+ });
236
+ const chatSearchFiltersAtom = atom((get) => {
237
+ const searchFilterConfig = get(chatSearchFilterConfigAtom);
238
+ const searchMap = get(searchMapAtom);
239
+ const chatSearchId = get(chatSearchIdAtom);
240
+ if (chatSearchId && searchMap[chatSearchId]) {
241
+ const products = searchMap[chatSearchId].productList;
242
+ const selectedFilterOptions = get(selectedFilterOptionsAtom);
243
+ return ProductFilters.getFiltersForProducts(products, searchFilterConfig, selectedFilterOptions);
244
+ }
245
+ return [];
246
+ });
247
+ const setSearchParams = (query) => {
248
+ const url = new URL(window.location.href);
249
+ url.searchParams.set("es", "true");
250
+ url.searchParams.set("esq", query);
251
+ window.history.pushState({}, "", url);
252
+ };
253
+ const getSearchParamsAtom = atom(() => {
254
+ const params = new URLSearchParams(window.location.search);
255
+ return {
256
+ es: params.get("es"),
257
+ esq: params.get("esq")
258
+ };
259
+ });
260
+ const initiateChatSearchAtom = atom(null, (_, set, query) => {
261
+ set(chatSearchIsLoadingAtom, true);
262
+ const url = new URL(window.location.href);
263
+ url.searchParams.set("es", "true");
264
+ url.searchParams.set("esq", query);
265
+ window.history.pushState({}, "", url);
266
+ window.dispatchEvent(new PopStateEvent("popstate", { state: {} }));
267
+ set(chatSearchParamsAtom, {
268
+ id: null,
269
+ query
270
+ });
271
+ set(handleSearchAtom, {
272
+ id: v4(),
273
+ role: MessageRole.User,
274
+ type: MessageType.Search,
275
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
276
+ metadata: {
277
+ searchTerm: query,
278
+ selectedFilters: []
279
+ }
280
+ });
281
+ });
282
+ const handleSearchResultsAtom = atom(null, (get, set, message) => {
283
+ if (!message || message.type !== MessageType.ProductSearch) return;
284
+ const { productCount, generatedQuery } = message.metadata;
285
+ if (productCount !== 0) {
286
+ set(selectedFilterOptionsAtom, []);
287
+ set(chatSearchStateAtom, "product-page");
288
+ const currentSearchParams = get(chatSearchParamsAtom);
289
+ const url = new URL(window.location.href);
290
+ url.searchParams.set("es", "true");
291
+ url.searchParams.set("esq", generatedQuery);
292
+ url.searchParams.set("esi", message.id);
293
+ window.history.pushState({}, "", url);
294
+ if (currentSearchParams.id === null) window.history.replaceState(null, "", url);
295
+ else window.history.pushState(null, "", url);
296
+ set(chatSearchParamsAtom, {
297
+ id: message.id,
298
+ query: generatedQuery
299
+ });
300
+ }
301
+ });
302
+ const setChatSearchParamsAtom = atom(null, (_, set, query) => {
303
+ const url = new URL(window.location.href);
304
+ url.searchParams.set("es", "true");
305
+ url.searchParams.set("esq", query);
306
+ window.history.pushState({}, "", url);
307
+ set(chatSearchParamsAtom, {
308
+ id: null,
309
+ query
310
+ });
311
+ });
312
+
313
+ //#endregion
314
+ export { ChatSearchTurnAtom, ProductFilters, ProductSorter, additiveDynamicFiltersAtom, chatSearchFiltersAtom, chatSearchHasProductsAtom, chatSearchIdAtom, chatSearchIsLoadingAtom, chatSearchParamsAtom, chatSearchProductSortingAtom, chatSearchProducts, chatSearchQueryAtom, chatSearchStateAtom, createChatSearchFilterOption, formatFilterDisplayName, getSearchParamsAtom, handleSearchResultsAtom, initiateChatSearchAtom, selectedFilterOptionsAtom, setChatSearchParamsAtom, setSearchParams };
315
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhdFNlYXJjaC1CNWpNbkNZWC5qcyIsIm5hbWVzIjpbInV1aWQiXSwic291cmNlcyI6WyIuLi9zcmMvYXRvbXMvc2VhcmNoL3V0aWxzLnRzIiwiLi4vc3JjL2F0b21zL3NlYXJjaC9wcm9kdWN0RmlsdGVycy50cyIsIi4uL3NyYy9hdG9tcy9zZWFyY2gvcHJvZHVjdFNvcnRlci50cyIsIi4uL3NyYy9hdG9tcy9zZWFyY2gvY2hhdFNlYXJjaC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUgPSAoZGlzcGxheU5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCBzaXplcyA9IFsneHh4cycsICd4eHMnLCAneHMnLCAncycsICdtJywgJ2wnLCAneGwnLCAneHhsJywgJ3h4eGwnLCAneHh4eGwnXTtcblxuICBjb25zdCBwcm9jZXNzZWRXb3JkcyA9IGRpc3BsYXlOYW1lXG4gICAgLnRvTG93ZXJDYXNlKClcbiAgICAuc3BsaXQoJyAnKVxuICAgIC5tYXAoKHdvcmQpID0+IHtcbiAgICAgIGlmIChzaXplcy5pbmNsdWRlcyh3b3JkKSkge1xuICAgICAgICByZXR1cm4gd29yZC50b1VwcGVyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpO1xuICAgIH0pO1xuXG4gIGNvbnN0IHRpdGxlQ2FzZWROYW1lID0gcHJvY2Vzc2VkV29yZHMuam9pbignICcpO1xuXG4gIC8vIEZpbmFsIHJlcGxhY2VtZW50cyBmb3Igc3BlY2lhbCBjYXNlc1xuICByZXR1cm4gdGl0bGVDYXNlZE5hbWUucmVwbGFjZSgvSXBob25lL2csICdpUGhvbmUnKTtcbn07XG4iLCJpbXBvcnQgeyBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBGaWx0ZXJBdHRyaWJ1dGUgfSBmcm9tICdzcmMvY29udGV4dHMvdHlwZXMnO1xuaW1wb3J0IHsgU2VsZWN0ZWRGaWx0ZXJPcHRpb24gfSBmcm9tICdzcmMvYXRvbXMvc2VhcmNoL3NlYXJjaEFQSSc7XG5pbXBvcnQgeyBDaGF0U2VhcmNoRmlsdGVyLCBDaGF0U2VhcmNoRmlsdGVySXRlbSB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUgfSBmcm9tICcuL3V0aWxzJztcblxuY29uc3QgZ2V0UHJpY2VCdWNrZXQgPSAocHJpY2U6IG51bWJlciwgYnVja2V0U2l6ZTogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGJ1Y2tldCA9IE1hdGguZmxvb3IocHJpY2UgLyBidWNrZXRTaXplKTtcbiAgcmV0dXJuIGJ1Y2tldCAqIGJ1Y2tldFNpemU7XG59O1xuXG5jb25zdCBpc1N0cmluZ0FycmF5ID0gKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgc3RyaW5nW10gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZS5ldmVyeSgoaXRlbSkgPT4gdHlwZW9mIGl0ZW0gPT09ICdzdHJpbmcnKTtcbn07XG5cbnR5cGUgRmlsdGVyU29ydEZ1bmN0aW9uID0gKGE6IENoYXRTZWFyY2hGaWx0ZXJJdGVtLCBiOiBDaGF0U2VhcmNoRmlsdGVySXRlbSkgPT4gbnVtYmVyO1xuXG5jb25zdCBzb3J0RmlsdGVyID0gKGZpbHRlckNvbmZpZzogRmlsdGVyQXR0cmlidXRlKTogRmlsdGVyU29ydEZ1bmN0aW9uID0+IHtcbiAgaWYgKGZpbHRlckNvbmZpZy50eXBlID09PSAncHJpY2UnKSB7XG4gICAgcmV0dXJuIChhLCBiKSA9PiBOdW1iZXIoYS5maWx0ZXJJdGVtSWQpIC0gTnVtYmVyKGIuZmlsdGVySXRlbUlkKTtcbiAgfVxuICBpZiAoZmlsdGVyQ29uZmlnLnR5cGUgPT09ICdkeW5hbWljJykge1xuICAgIGlmIChmaWx0ZXJDb25maWcuc29ydGluZy50eXBlID09PSAnYWxwaGFiZXRpYycpIHtcbiAgICAgIHJldHVybiAoYSwgYikgPT4gYS5kaXNwbGF5TmFtZS5sb2NhbGVDb21wYXJlKGIuZGlzcGxheU5hbWUpO1xuICAgIH1cbiAgICAvLyBTb3J0IGJ5IHRoZSBudW1iZXIgb2YgcHJvZHVjdHMsIGlmIHRoZXkgbWF0Y2gsIHNvcnQgYnkgYWxwaGFiZXRpY2FsXG4gICAgaWYgKGZpbHRlckNvbmZpZy5zb3J0aW5nLnR5cGUgPT09ICdwcm9kdWN0Q291bnQnKSB7XG4gICAgICByZXR1cm4gKGEsIGIpID0+XG4gICAgICAgIGEucHJvZHVjdENvdW50ID09PSBiLnByb2R1Y3RDb3VudFxuICAgICAgICAgID8gYS5kaXNwbGF5TmFtZS5sb2NhbGVDb21wYXJlKGIuZGlzcGxheU5hbWUpXG4gICAgICAgICAgOiBiLnByb2R1Y3RDb3VudCAtIGEucHJvZHVjdENvdW50O1xuICAgIH1cbiAgICBpZiAoZmlsdGVyQ29uZmlnLnNvcnRpbmcudHlwZSA9PT0gJ2N1c3RvbScpIHtcbiAgICAgIGNvbnN0IHNvcnRlZEtleXMgPSBmaWx0ZXJDb25maWcuc29ydGluZy5tYXA7XG4gICAgICByZXR1cm4gKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKHNvcnRlZEtleXNbYS5kaXNwbGF5TmFtZV0gJiYgc29ydGVkS2V5c1tiLmRpc3BsYXlOYW1lXSkge1xuICAgICAgICAgIC8vIElmIGJvdGggYXJlIGluIHRoZSBzb3J0ZWRLZXlzLCBzb3J0IGJ5IHRoZSBpbmRleFxuICAgICAgICAgIHJldHVybiBzb3J0ZWRLZXlzW2EuZGlzcGxheU5hbWVdIC0gc29ydGVkS2V5c1tiLmRpc3BsYXlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBvbmx5ICdhJyBpcyBpbiB0aGUgc29ydGVkS2V5cywgcHV0IGl0IGJlZm9yZSB0aGUgb3RoZXJcbiAgICAgICAgaWYgKHNvcnRlZEtleXNbYS5kaXNwbGF5TmFtZV0pIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgb25seSAnYicgaXMgaW4gdGhlIHNvcnRlZEtleXMsIHB1dCBpdCBiZWZvcmUgdGhlIG90aGVyXG4gICAgICAgIGlmIChzb3J0ZWRLZXlzW2IuZGlzcGxheU5hbWVdKSB7XG4gICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgbmVpdGhlciBhcmUgaW4gdGhlIHNvcnRlZEtleXMsIHNvcnQgYnkgcHJvZHVjdENvdW50XG4gICAgICAgIHJldHVybiBiLnByb2R1Y3RDb3VudCAtIGEucHJvZHVjdENvdW50O1xuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdJbnZhYWxpZCBzZWFyY2ggZmlsdGVyIGNvbmZpZ3VyYXRpb24nKTtcbn07XG5cbmV4cG9ydCBjbGFzcyBQcm9kdWN0RmlsdGVycyB7XG4gIHN0YXRpYyBnZXRGaWx0ZXJzRm9yUHJvZHVjdHMoXG4gICAgcHJvZHVjdHM6IFByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXNbJ2F0dHJpYnV0ZXMnXVtdLFxuICAgIGZpbHRlckNvbmZpZ3M6IEZpbHRlckF0dHJpYnV0ZVtdLFxuICAgIHNlbGVjdGVkRmlsdGVyT3B0aW9uczogU2VsZWN0ZWRGaWx0ZXJPcHRpb25bXSxcbiAgKTogQ2hhdFNlYXJjaEZpbHRlcltdIHtcbiAgICBpZiAoIXByb2R1Y3RzIHx8IHByb2R1Y3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbHRlcnMgPSBmaWx0ZXJDb25maWdzLm1hcCgoZmlsdGVyQ29uZmlnKSA9PlxuICAgICAgcHJvZHVjdHMucmVkdWNlKFxuICAgICAgICAoYWNjLCBwcm9kdWN0KSA9PiB7XG4gICAgICAgICAgLy8gUHJpY2UgaGFzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZSBmaWx0ZXJzXG4gICAgICAgICAgaWYgKGZpbHRlckNvbmZpZy50eXBlID09PSAncHJpY2UnKSB7XG4gICAgICAgICAgICBjb25zdCBwcmljZUJ1Y2tldCA9IGdldFByaWNlQnVja2V0KFxuICAgICAgICAgICAgICBwcm9kdWN0LnNhbGVQcmljZSA/PyBwcm9kdWN0Lm9yaWdpbmFsUHJpY2UgPz8gMCxcbiAgICAgICAgICAgICAgZmlsdGVyQ29uZmlnLmJ1Y2tldFNpemUsXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGFjYy5tYXBbcHJpY2VCdWNrZXRdID8/IHtcbiAgICAgICAgICAgICAgZmlsdGVySXRlbUlkOiBwcmljZUJ1Y2tldCxcbiAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IGAkJHtwcmljZUJ1Y2tldH0tJCR7cHJpY2VCdWNrZXQgKyBmaWx0ZXJDb25maWcuYnVja2V0U2l6ZX1gLFxuICAgICAgICAgICAgICBwcm9kdWN0Q291bnQ6IDAsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYWNjLm1hcFtwcmljZUJ1Y2tldF0gPSB7IC4uLmN1cnJlbnQsIHByb2R1Y3RDb3VudDogY3VycmVudC5wcm9kdWN0Q291bnQgKyAxIH07XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIEFzc3VtZSB0aGF0IHRoZSBcImF0dHJpYnV0ZVwiIGlzIGFuIGFycmF5IG9mIHZhbHVlc1xuICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlcyA9XG4gICAgICAgICAgICAocHJvZHVjdC5maWx0ZXJzICYmIHByb2R1Y3QuZmlsdGVycz8uW2ZpbHRlckNvbmZpZy5hdHRyaWJ1dGVdKSA/PyBbXTtcbiAgICAgICAgICBpZiAoaXNTdHJpbmdBcnJheShhdHRyaWJ1dGVWYWx1ZXMpKSB7XG4gICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMuZm9yRWFjaCgodmFsKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWwgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgY29uc3QgY3VycmVudCA9IGFjYy5tYXBbbm9ybWFsaXplZFZhbF0gPz8ge1xuICAgICAgICAgICAgICAgIGZpbHRlckl0ZW1JZDogbm9ybWFsaXplZFZhbCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogZm9ybWF0RmlsdGVyRGlzcGxheU5hbWUodmFsKSwgLy8gS2VlcCBvcmlnaW5hbCBjYXNlIGZvciBkaXNwbGF5XG4gICAgICAgICAgICAgICAgcHJvZHVjdENvdW50OiAwLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBhY2MubWFwW25vcm1hbGl6ZWRWYWxdID0geyAuLi5jdXJyZW50LCBwcm9kdWN0Q291bnQ6IGN1cnJlbnQucHJvZHVjdENvdW50ICsgMSB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGZpbHRlckNvbmZpZyxcbiAgICAgICAgICBtYXA6IHt9IGFzIFJlY29yZDxzdHJpbmcsIENoYXRTZWFyY2hGaWx0ZXJJdGVtPixcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKTtcblxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRmlsdGVyczogQ2hhdFNlYXJjaEZpbHRlcltdID0gZmlsdGVycy5tYXAoKHsgZmlsdGVyQ29uZmlnLCBtYXAgfSkgPT4gKHtcbiAgICAgIGZpbHRlcklkOiBmaWx0ZXJDb25maWcuZmlsdGVySWQsXG4gICAgICBkaXNwbGF5TmFtZTogZmlsdGVyQ29uZmlnLmRpc3BsYXlOYW1lLFxuICAgICAgaXRlbXM6IE9iamVjdC52YWx1ZXMobWFwKVxuICAgICAgICAubWFwKChmaWx0ZXIpID0+ICh7XG4gICAgICAgICAgZmlsdGVySXRlbUlkOiBmaWx0ZXIuZmlsdGVySXRlbUlkLFxuICAgICAgICAgIGRpc3BsYXlOYW1lOiBmaWx0ZXIuZGlzcGxheU5hbWUsXG4gICAgICAgICAgcHJvZHVjdENvdW50OiBmaWx0ZXIucHJvZHVjdENvdW50LFxuICAgICAgICAgIGlzU2VsZWN0ZWQ6XG4gICAgICAgICAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZShcbiAgICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmlkID09PSBgJHtmaWx0ZXJDb25maWcuZmlsdGVySWR9OiR7ZmlsdGVyLmZpbHRlckl0ZW1JZH1gLFxuICAgICAgICAgICAgKSA/PyBmYWxzZSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5zb3J0KHNvcnRGaWx0ZXIoZmlsdGVyQ29uZmlnKSksXG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIFsuLi50cmFuc2Zvcm1lZEZpbHRlcnNdO1xuICB9XG5cbiAgc3RhdGljIGZpbHRlclByb2R1Y3RzKFxuICAgIHByb2R1Y3RzOiBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ11bXSxcbiAgICBmaWx0ZXJDb25maWdzOiBGaWx0ZXJBdHRyaWJ1dGVbXSxcbiAgICBzZWxlY3RlZEZpbHRlck9wdGlvbnM6IFNlbGVjdGVkRmlsdGVyT3B0aW9uW10sXG4gICAgYWRkaXRpdmVEeW5hbWljRmlsdGVycyA9IGZhbHNlLCAvLyBTZXQgdGhpcyB0byB0cnVlIHRvIHJlc3RvcmUgdGhlIG9yaWdpbmFsIGJlaGF2aW9yIHdoZXJlIHN0YWNraW5nIGZpbHRlcnMgaGFzIE9SIGxvZ2ljLlxuICApIHtcbiAgICBjb25zdCBzZWxlY3RlZEZpbHRlcnMgPSBmaWx0ZXJDb25maWdzXG4gICAgICAubWFwKChmaWx0ZXJDb25maWcpID0+ICh7XG4gICAgICAgIGZpbHRlckNvbmZpZyxcbiAgICAgICAgaGFzU2VsZWN0ZWRPcHRpb25zOiBzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZShcbiAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24uZmlsdGVySWQgPT09IGZpbHRlckNvbmZpZy5maWx0ZXJJZCxcbiAgICAgICAgKSxcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigoeyBoYXNTZWxlY3RlZE9wdGlvbnMgfSkgPT4gaGFzU2VsZWN0ZWRPcHRpb25zKTtcbiAgICByZXR1cm4gc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLmxlbmd0aCA9PT0gMFxuICAgICAgPyBwcm9kdWN0c1xuICAgICAgOiBwcm9kdWN0cy5maWx0ZXIoKHByb2R1Y3QpID0+XG4gICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJzLnJlZHVjZSgoYWNjLCBzZWxlY3RlZEZpbHRlcikgPT4ge1xuICAgICAgICAgICAgLy8gRmluZGluZyBvbmUgZmFsc2UgcmVtb3ZlcyB0aGUgcHJvZHVjdFxuICAgICAgICAgICAgaWYgKCFhY2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFByaWNlIGlzIHNwZWNpYWxcbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEZpbHRlci5maWx0ZXJDb25maWcudHlwZSA9PT0gJ3ByaWNlJykge1xuICAgICAgICAgICAgICBjb25zdCBwcmljZUJ1Y2tldCA9IGdldFByaWNlQnVja2V0KFxuICAgICAgICAgICAgICAgIHByb2R1Y3Quc2FsZVByaWNlID8/IHByb2R1Y3Qub3JpZ2luYWxQcmljZSA/PyAwLFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZy5idWNrZXRTaXplLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzUHJpY2VGaWx0ZXIgPSBzZWxlY3RlZEZpbHRlck9wdGlvbnMuc29tZShcbiAgICAgICAgICAgICAgICAob3B0aW9uKSA9PiBvcHRpb24uaWQgPT09IGBwcmljZToke3ByaWNlQnVja2V0fWAsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGlmICghbWF0Y2hlc1ByaWNlRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzZWxlY3RlZEZpbHRlci5maWx0ZXJDb25maWcudHlwZSA9PT0gJ2R5bmFtaWMnKSB7XG4gICAgICAgICAgICAgIC8vIGR5bmFtaWMgaXMgbWlzbGVhZGluZyBoZXJlLiBJdHMgbm90IGp1c3QgZHluYW1pYyBmaWx0ZXJzLCBidXQgc3RhdGljIGZpbHRlcnMgYmVjYXVzZSB0aGUgY29uZmlnIGNvdW50cyBzdGF0aWMgZmlsdGVycyBhcyB0eXBlOiBkeW5hbWljLlxuICAgICAgICAgICAgICBjb25zdCB7IGZpbHRlcklkLCBhdHRyaWJ1dGUgfSA9IHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZztcbiAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlVmFsdWVzID0gcHJvZHVjdC5maWx0ZXJzPy5bYXR0cmlidXRlXTtcblxuICAgICAgICAgICAgICBpZiAoIWlzU3RyaW5nQXJyYXkoYXR0cmlidXRlVmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IGlzRHluYW1pY0ZpbHRlciA9IHNlbGVjdGVkRmlsdGVyLmZpbHRlckNvbmZpZy5hdHRyaWJ1dGUgPT09ICdkeW5hbWljJzsgLy8gVHJ1ZSBkeW5hbWljIGZpbHRlcnMgKHRoZSBvbmVzIHRoYXQgYXBwZWFyIGJlbmVhdGggdGhlIHNlYXJjaCBpbnB1dClcbiAgICAgICAgICAgICAgY29uc3QgaXNTdWJ0cmFjdGl2ZUxvZ2ljID0gaXNEeW5hbWljRmlsdGVyICYmICFhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzO1xuXG4gICAgICAgICAgICAgIGlmIChpc1N1YnRyYWN0aXZlTG9naWMpIHtcbiAgICAgICAgICAgICAgICAvLyBBTkQgbG9naWMgZm9yIHN1YnRyYWN0aXZlIGR5bmFtaWMgZmlsdGVycyBhbmQgYmV0d2VlbiBzdGF0aWMgZmlsdGVyIGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbnNGb3JUaGlzRmlsdGVyID0gc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXG4gICAgICAgICAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5maWx0ZXJJZCA9PT0gZmlsdGVySWQpXG4gICAgICAgICAgICAgICAgICAubWFwKChvcHRpb24pID0+IG9wdGlvbi5maWx0ZXJJdGVtSWQudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBoYXNBbGxTZWxlY3RlZFZhbHVlcyA9IHNlbGVjdGVkT3B0aW9uc0ZvclRoaXNGaWx0ZXIuZXZlcnkoKHNlbGVjdGVkVmFsdWUpID0+XG4gICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZXMuc29tZSgodmFsKSA9PiB2YWwudG9Mb3dlckNhc2UoKSA9PT0gc2VsZWN0ZWRWYWx1ZSksXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmICghaGFzQWxsU2VsZWN0ZWRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT1IgbG9naWMgZm9yIHN0YXRpYyBmaWx0ZXJzIGluIHRoZSBzaWRlYmFyIHdpdGhpbiBhIGNhdGVnb3J5LlxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBhdHRyaWJ1dGVWYWx1ZXMuc29tZSgodmFsKSA9PlxuICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLnNvbWUoXG4gICAgICAgICAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi5pZCA9PT0gYCR7ZmlsdGVySWR9OiR7dmFsLnRvTG93ZXJDYXNlKCl9YCxcbiAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0sIHRydWUpLFxuICAgICAgICApO1xuICB9XG59XG4iLCJpbXBvcnQgeyBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnc3JjL2FwcGxpY2F0aW9uL21vZGVscyc7XG5pbXBvcnQgeyBQcm9kdWN0U29ydGluZyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY2xhc3MgUHJvZHVjdFNvcnRlciB7XG4gIHN0YXRpYyBzb3J0KHByb2R1Y3RzOiBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzWydhdHRyaWJ1dGVzJ11bXSwgc29ydGluZzogUHJvZHVjdFNvcnRpbmcpIHtcbiAgICBzd2l0Y2ggKHNvcnRpbmcpIHtcbiAgICAgIGNhc2UgUHJvZHVjdFNvcnRpbmcuUFJJQ0VfQVNDOlxuICAgICAgICByZXR1cm4gWy4uLnByb2R1Y3RzXS5zb3J0KFxuICAgICAgICAgIChwMSwgcDIpID0+XG4gICAgICAgICAgICAocDEuc2FsZVByaWNlID8/IHAxLm9yaWdpbmFsUHJpY2UgPz8gMCkgLSAocDIuc2FsZVByaWNlID8/IHAyLm9yaWdpbmFsUHJpY2UgPz8gMCksXG4gICAgICAgICk7XG5cbiAgICAgIGNhc2UgUHJvZHVjdFNvcnRpbmcuUFJJQ0VfREVTQzpcbiAgICAgICAgcmV0dXJuIFsuLi5wcm9kdWN0c10uc29ydChcbiAgICAgICAgICAocDEsIHAyKSA9PlxuICAgICAgICAgICAgKHAyLnNhbGVQcmljZSA/PyBwMi5vcmlnaW5hbFByaWNlID8/IDApIC0gKHAxLnNhbGVQcmljZSA/PyBwMS5vcmlnaW5hbFByaWNlID8/IDApLFxuICAgICAgICApO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gcHJvZHVjdHM7XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBVc2VyRXZlbnRDYXRlZ29yeSB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnRcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWQgfSBmcm9tIFwidXVpZFwiO1xuaW1wb3J0IHsgYXRvbSB9IGZyb20gXCJqb3RhaVwiO1xuaW1wb3J0IHtcbiAgTWVzc2FnZSxcbiAgTWVzc2FnZVJvbGUsXG4gIE1lc3NhZ2VUeXBlLFxuICBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzLFxufSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVsc1wiO1xuaW1wb3J0IHtcbiAgbWVzc2FnZXNBdG9tLFxuICByZXBseUV2ZW50Q2F0ZWdvcnlBdG9tLFxuICB1c2VySGFzUmVwbGllZEF0b20sXG4gIHVzZXJRdWVyeUF0b20sXG59IGZyb20gXCJzcmMvYXRvbXMvY2hhdFwiO1xuaW1wb3J0IHsgcXVldWVVc2VyRXZlbnRBdG9tIH0gZnJvbSBcIi4uL2NoYXQvbWVzc2FnZVF1ZXVlXCI7XG5pbXBvcnQgeyBuZXdPcmdDb25maWdBdG9tIH0gZnJvbSBcIi4uL29yZ1wiO1xuaW1wb3J0IHsgUHJvZHVjdEZpbHRlcnMgfSBmcm9tIFwiLi9wcm9kdWN0RmlsdGVyc1wiO1xuaW1wb3J0IHsgUHJvZHVjdFNvcnRlciB9IGZyb20gXCIuL3Byb2R1Y3RTb3J0ZXJcIjtcbmltcG9ydCB7IENoYXRTZWFyY2hTdGF0ZVR5cGUsIFByb2R1Y3RTb3J0aW5nIH0gZnJvbSBcIi4vdHlwZXNcIjtcblxuLy8gTk9URTpcbi8vIFRoaXMgaXMgYSBsZWdhY3kgdmVyc2lvbiBvZiBzZWFyY2ggdGhhdCBuZWVkcyB0byBiZSBkZWNvdXBsZWQgYW5kIHJlbW92ZWQuXG4vLyB0aGUgbmV3IHNlYXJjaC50cyBmaWxlIGluIHRoaXMgZGlyZWN0b3J5IGlzIGxpa2VseSB3aGF0IHlvdSdyZSBsb29raW5nIGZvci5cblxuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hTdGF0ZUF0b20gPSBhdG9tPENoYXRTZWFyY2hTdGF0ZVR5cGU+KFwiZW50cnlwb2ludFwiKTtcbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoSGFzUHJvZHVjdHNBdG9tID0gYXRvbTxib29sZWFuPihmYWxzZSk7XG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaFByb2R1Y3RTb3J0aW5nQXRvbSA9IGF0b208UHJvZHVjdFNvcnRpbmc+KFxuICBQcm9kdWN0U29ydGluZy5GRUFUVVJFRFxuKTtcblxuY29uc3QgZmlsdGVyUHJvZHVjdExpc3QgPSAobWVzc2FnZTogTWVzc2FnZSkgPT5cbiAgbWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0ICYmIG1lc3NhZ2UubWV0YWRhdGEuaXNGb3JHcmlkID09PSB0cnVlO1xuY29uc3QgZmlsdGVyRmlsdGVyTGlzdCA9IChtZXNzYWdlOiBNZXNzYWdlKSA9PlxuICBtZXNzYWdlLnR5cGUgPT09IE1lc3NhZ2VUeXBlLlByb2R1Y3RTZWFyY2hGaWx0ZXI7XG5cbmV4cG9ydCB0eXBlIENoYXRTZWFyY2hUdXJuID0ge1xuICBpZDogc3RyaW5nO1xuICBnZW5lcmF0ZWRRdWVyeT86IHN0cmluZztcbiAgcHJvZHVjdENvdW50OiBudW1iZXI7XG4gIHByb2R1Y3RMaXN0OiBQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzW1wiYXR0cmlidXRlc1wiXVtdO1xuICBmaWx0ZXJMaXN0OiBzdHJpbmdbXTtcbiAgbWVzc2FnZXM6IE1lc3NhZ2VbXTtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoSXNMb2FkaW5nQXRvbSA9IGF0b20oZmFsc2UpO1xuXG5jb25zdCBidWlsZENoYXRTZWFyY2hUdXJuID0gKFxuICBtZXNzYWdlczogTWVzc2FnZVtdXG4pOiBbc3RyaW5nLCBDaGF0U2VhcmNoVHVybl0gfCBudWxsID0+IHtcbiAgY29uc3QgcXVlcnlNZXNzYWdlID0gbWVzc2FnZXMuZmluZChcbiAgICAobWVzc2FnZSkgPT4gbWVzc2FnZS50eXBlID09PSBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoXG4gICk7XG4gIGlmICghcXVlcnlNZXNzYWdlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgeyBnZW5lcmF0ZWRRdWVyeSwgcHJvZHVjdENvdW50IH0gPSBxdWVyeU1lc3NhZ2UubWV0YWRhdGEgPz8ge307XG4gIGNvbnN0IHByb2R1Y3RMaXN0ID0gbWVzc2FnZXNcbiAgICAuZmlsdGVyKGZpbHRlclByb2R1Y3RMaXN0KVxuICAgIC5tYXAoKG1lc3NhZ2UpID0+IChtZXNzYWdlIGFzIGFueSkubWV0YWRhdGEpO1xuICBjb25zdCBmaWx0ZXJMaXN0ID0gbWVzc2FnZXNcbiAgICAuZmlsdGVyKGZpbHRlckZpbHRlckxpc3QpXG4gICAgLm1hcCgobWVzc2FnZSkgPT4gbWVzc2FnZS5tZXRhZGF0YS5maWx0ZXJOYW1lKTtcbiAgcmV0dXJuIFtcbiAgICBxdWVyeU1lc3NhZ2UuaWQsXG4gICAge1xuICAgICAgaWQ6IHF1ZXJ5TWVzc2FnZS5pZCxcbiAgICAgIGdlbmVyYXRlZFF1ZXJ5LFxuICAgICAgcHJvZHVjdENvdW50OiBwcm9kdWN0Q291bnQgfHwgcHJvZHVjdExpc3QubGVuZ3RoLFxuICAgICAgcHJvZHVjdExpc3QsXG4gICAgICBmaWx0ZXJMaXN0LFxuICAgICAgbWVzc2FnZXMsXG4gICAgfSxcbiAgXTtcbn07XG5cbmNvbnN0IGNoYXRTZWFyY2hGaWx0ZXJDb25maWdBdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IG5ld09yZ0NvbmZpZyA9IGdldChuZXdPcmdDb25maWdBdG9tKTtcbiAgcmV0dXJuIChcbiAgICBuZXdPcmdDb25maWc/LmZyb250ZW5kQ29uZmlnPy51aUNvbmZpZ3M/LnNlYXJjaENvbmZpZz8uc2VhcmNoRmlsdGVyQ29uZmlnIHx8XG4gICAgW11cbiAgKTtcbn0pO1xuXG5jb25zdCBzZWFyY2hNYXBBdG9tID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IG1lc3NhZ2VzID0gZ2V0KG1lc3NhZ2VzQXRvbSk7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgbWVzc2FnZXMubWFwKGJ1aWxkQ2hhdFNlYXJjaFR1cm4pLmZpbHRlcigodikgPT4gdiAhPT0gbnVsbClcbiAgKTtcbn0pO1xuXG5jb25zdCBpbnRlcm5hbENoYXRTZWFyY2hQYXJhbXNBdG9tID0gYXRvbTx7XG4gIGlkOiBzdHJpbmcgfCBudWxsO1xuICBxdWVyeTogc3RyaW5nIHwgbnVsbDtcbn0+KHtcbiAgaWQ6IG51bGwsXG4gIHF1ZXJ5OiBudWxsLFxufSk7XG5cbi8vIFNlbGVjdGVkIGZpbHRlciBvcHRpb25zIHdpdGggY29tcG91bmQgb2JqZWN0cyBmb3IgYmV0dGVyIHR5cGUgc2FmZXR5IGFuZCBkaXNwbGF5XG5leHBvcnQgdHlwZSBTZWxlY3RlZENoYXRTZWFyY2hGaWx0ZXJPcHRpb24gPSB7XG4gIGlkOiBzdHJpbmc7IC8vIFwiZmlsdGVySWQ6ZmlsdGVySXRlbUlkXCIgLSBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgY29tcGFyaXNvbnNcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbiAgZmlsdGVySWQ6IHN0cmluZzsgLy8gRmlsdGVyIGNhdGVnb3J5XG4gIGZpbHRlckl0ZW1JZDogc3RyaW5nOyAvLyBGaWx0ZXIgdmFsdWVcbn07XG5cbmV4cG9ydCBjb25zdCBzZWxlY3RlZEZpbHRlck9wdGlvbnNBdG9tID0gYXRvbTxTZWxlY3RlZENoYXRTZWFyY2hGaWx0ZXJPcHRpb25bXT4oXG4gIFtdXG4pO1xuXG5leHBvcnQgY29uc3QgYWRkaXRpdmVEeW5hbWljRmlsdGVyc0F0b20gPSBhdG9tKChnZXQpID0+IHtcbiAgY29uc3QgbmV3T3JnQ29uZmlnID0gZ2V0KG5ld09yZ0NvbmZpZ0F0b20pO1xuICByZXR1cm4gKFxuICAgIG5ld09yZ0NvbmZpZz8uZnJvbnRlbmRDb25maWc/LnVpQ29uZmlncz8uc2VhcmNoQ29uZmlnXG4gICAgICA/LmFkZGl0aXZlRHluYW1pY0ZpbHRlcnMgPz8gZmFsc2VcbiAgKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQ2hhdFNlYXJjaEZpbHRlck9wdGlvbiA9IChcbiAgZmlsdGVySWQ6IHN0cmluZyxcbiAgZmlsdGVySXRlbUlkOiBzdHJpbmcsXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmdcbik6IFNlbGVjdGVkQ2hhdFNlYXJjaEZpbHRlck9wdGlvbiA9PiAoe1xuICBpZDogYCR7ZmlsdGVySWR9OiR7ZmlsdGVySXRlbUlkfWAsXG4gIGRpc3BsYXlOYW1lLFxuICBmaWx0ZXJJZCxcbiAgZmlsdGVySXRlbUlkLFxufSk7XG5cbmNvbnN0IGhhbmRsZVNlYXJjaEF0b20gPSBhdG9tKG51bGwsIChnZXQsIHNldCwgbWVzc2FnZTogTWVzc2FnZSkgPT4ge1xuICBpZiAobWVzc2FnZS50eXBlICE9PSBNZXNzYWdlVHlwZS5TZWFyY2gpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBxdWVyeVNlYXJjaCA9IG1lc3NhZ2UubWV0YWRhdGEuc2VhcmNoVGVybTtcblxuICBzZXQocmVwbHlFdmVudENhdGVnb3J5QXRvbSwgVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoKTtcbiAgc2V0KHVzZXJRdWVyeUF0b20sIHF1ZXJ5U2VhcmNoKTtcbiAgc2V0KG1lc3NhZ2VzQXRvbSwgWy4uLmdldChtZXNzYWdlc0F0b20pLCBbbWVzc2FnZV1dKTtcbiAgc2V0KHVzZXJIYXNSZXBsaWVkQXRvbSwgdHJ1ZSk7XG5cbiAgc2V0KHF1ZXVlVXNlckV2ZW50QXRvbSwge1xuICAgIGV2ZW50SWQ6IG1lc3NhZ2UuaWQsXG4gICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaCxcbiAgICBjcmVhdGVkQXQ6IG1lc3NhZ2UuY3JlYXRlZEF0LFxuICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgIHNlYXJjaFRlcm06IG1lc3NhZ2UubWV0YWRhdGEuc2VhcmNoVGVybSxcbiAgICAgIHNlbGVjdGVkRmlsdGVyczogbWVzc2FnZS5tZXRhZGF0YS5zZWxlY3RlZEZpbHRlcnMsXG4gICAgfSxcbiAgfSk7XG59KTtcblxuLy8gVGhpcyBpbnRlcm5hbCBhdG9tIGlzIHVzZWQgdG8gc3RvcmUgdGhlIHNlYXJjaCBwYXJhbXNcbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoUGFyYW1zQXRvbSA9IGF0b20oXG4gIChnZXQpID0+IGdldChpbnRlcm5hbENoYXRTZWFyY2hQYXJhbXNBdG9tKSxcbiAgKF8sIHNldCwgdmFsdWU6IHsgaWQ6IHN0cmluZyB8IG51bGw7IHF1ZXJ5OiBzdHJpbmcgfCBudWxsIH0pID0+IHtcbiAgICBzZXQoaW50ZXJuYWxDaGF0U2VhcmNoUGFyYW1zQXRvbSwgdmFsdWUpO1xuICB9XG4pO1xuXG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaFF1ZXJ5QXRvbSA9IGF0b20oXG4gIChnZXQpID0+IGdldChjaGF0U2VhcmNoUGFyYW1zQXRvbSk/LnF1ZXJ5ID8/IG51bGwsXG4gIChnZXQsIHNldCwgdmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHtcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20pO1xuICAgIHNldChjaGF0U2VhcmNoUGFyYW1zQXRvbSwgeyBpZDogc2VhcmNoUGFyYW1zLmlkLCBxdWVyeTogdmFsdWUgfSk7XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBjaGF0U2VhcmNoSWRBdG9tID0gYXRvbShcbiAgKGdldCkgPT4gZ2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tKT8uaWQgPz8gbnVsbCxcbiAgKGdldCwgc2V0LCB2YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdldChjaGF0U2VhcmNoUGFyYW1zQXRvbSk7XG4gICAgc2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tLCB7IGlkOiB2YWx1ZSwgcXVlcnk6IHNlYXJjaFBhcmFtcy5xdWVyeSB9KTtcbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IENoYXRTZWFyY2hUdXJuQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCBzZWFyY2hGaWx0ZXJDb25maWcgPSBnZXQoY2hhdFNlYXJjaEZpbHRlckNvbmZpZ0F0b20pO1xuICBjb25zdCBzZWFyY2hNYXAgPSBnZXQoc2VhcmNoTWFwQXRvbSk7XG4gIGNvbnN0IGNoYXRTZWFyY2hJZCA9IGdldChjaGF0U2VhcmNoSWRBdG9tKTtcbiAgaWYgKCFjaGF0U2VhcmNoSWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBDaGF0U2VhcmNoVHVybiA9IHNlYXJjaE1hcFtjaGF0U2VhcmNoSWRdO1xuICBpZiAoIUNoYXRTZWFyY2hUdXJuKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgcHJvZHVjdFNvcnRpbmcgPSBnZXQoY2hhdFNlYXJjaFByb2R1Y3RTb3J0aW5nQXRvbSk7XG4gIGNvbnN0IHNlbGVjdGVkRmlsdGVyT3B0aW9ucyA9IGdldChzZWxlY3RlZEZpbHRlck9wdGlvbnNBdG9tKTtcbiAgY29uc3QgYWRkaXRpdmVEeW5hbWljRmlsdGVycyA9IGdldChhZGRpdGl2ZUR5bmFtaWNGaWx0ZXJzQXRvbSk7XG4gIGNvbnN0IGZpbHRlcmVkUHJvZHVjdHMgPSBQcm9kdWN0RmlsdGVycy5maWx0ZXJQcm9kdWN0cyhcbiAgICBDaGF0U2VhcmNoVHVybi5wcm9kdWN0TGlzdCxcbiAgICBzZWFyY2hGaWx0ZXJDb25maWcsXG4gICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zLFxuICAgIGFkZGl0aXZlRHluYW1pY0ZpbHRlcnNcbiAgKTtcblxuICBjb25zdCBmaWx0ZXJlZEFuZFNvcnRlZFByb2R1Y3RzID0gUHJvZHVjdFNvcnRlci5zb3J0KFxuICAgIGZpbHRlcmVkUHJvZHVjdHMsXG4gICAgcHJvZHVjdFNvcnRpbmdcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnNlYXJjaE1hcFtjaGF0U2VhcmNoSWRdLFxuICAgIHByb2R1Y3RMaXN0OiBmaWx0ZXJlZEFuZFNvcnRlZFByb2R1Y3RzLFxuICAgIHByb2R1Y3RDb3VudDogZmlsdGVyZWRBbmRTb3J0ZWRQcm9kdWN0cy5sZW5ndGgsXG4gIH07XG59KTtcblxuLy8gVE9ETzogV29yayBvbiBkZXByZWNhdGluZyB0aGlzIGF0b20gaW4gZmF2b3Igb2YgdXNpbmcgQ2hhdFNlYXJjaFR1cm5BdG9tIGRpcmVjdGx5XG5leHBvcnQgY29uc3QgY2hhdFNlYXJjaFByb2R1Y3RzID0gYXRvbSgoZ2V0KSA9PiB7XG4gIGNvbnN0IENoYXRTZWFyY2hUdXJuID0gZ2V0KENoYXRTZWFyY2hUdXJuQXRvbSk7XG4gIHJldHVybiBDaGF0U2VhcmNoVHVybj8ucHJvZHVjdExpc3QgPz8gW107XG59KTtcblxuZXhwb3J0IGNvbnN0IGNoYXRTZWFyY2hGaWx0ZXJzQXRvbSA9IGF0b20oKGdldCkgPT4ge1xuICBjb25zdCBzZWFyY2hGaWx0ZXJDb25maWcgPSBnZXQoY2hhdFNlYXJjaEZpbHRlckNvbmZpZ0F0b20pO1xuICBjb25zdCBzZWFyY2hNYXAgPSBnZXQoc2VhcmNoTWFwQXRvbSk7XG4gIGNvbnN0IGNoYXRTZWFyY2hJZCA9IGdldChjaGF0U2VhcmNoSWRBdG9tKTtcblxuICBpZiAoY2hhdFNlYXJjaElkICYmIHNlYXJjaE1hcFtjaGF0U2VhcmNoSWRdKSB7XG4gICAgY29uc3QgcHJvZHVjdHMgPSBzZWFyY2hNYXBbY2hhdFNlYXJjaElkXS5wcm9kdWN0TGlzdDtcbiAgICBjb25zdCBzZWxlY3RlZEZpbHRlck9wdGlvbnMgPSBnZXQoc2VsZWN0ZWRGaWx0ZXJPcHRpb25zQXRvbSk7XG4gICAgcmV0dXJuIFByb2R1Y3RGaWx0ZXJzLmdldEZpbHRlcnNGb3JQcm9kdWN0cyhcbiAgICAgIHByb2R1Y3RzLFxuICAgICAgc2VhcmNoRmlsdGVyQ29uZmlnLFxuICAgICAgc2VsZWN0ZWRGaWx0ZXJPcHRpb25zXG4gICAgKTtcbiAgfVxuICByZXR1cm4gW107XG59KTtcblxuLy8gRm9yIHNlYXJjaCB3ZSB1c2UgdGhlIGZvbGxvd2luZyBxdWVyeSBwYXJhbXM6XG4vLyBlczogdHJ1ZSAtIHRoaXMgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIGluIGEgc2VhcmNoIHN0YXRlXG4vLyBlc3E6IHF1ZXJ5IC0gdGhpcyBpcyB0aGUgY3VycmVudCBzZWFyY2ggcXVlcnlcbi8vIGVzaTogc2VhcmNoIGlkIC0gdGhpcyBpcyB0aGUgdW5pcXVlIGlkIGZvciB0aGUgc2VhcmNoIHJlc3VsdHMgdGhhdCB3ZSBhcmUgZGlzcGxheWluZy4gSXQgaXMgcHVsbGVkIGZyb20gdGhlIG1lc3NhZ2UgaWQgZnJvbSB0aGUgdHVybiB0aGF0IGluY2x1ZGVzIHRoZSBzZWFyY2ggcmVzdWx0c1xuXG5leHBvcnQgY29uc3Qgc2V0U2VhcmNoUGFyYW1zID0gKHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNcIiwgXCJ0cnVlXCIpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzcVwiLCBxdWVyeSk7XG4gIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7fSwgXCJcIiwgdXJsKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTZWFyY2hQYXJhbXNBdG9tID0gYXRvbSgoKSA9PiB7XG4gIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG4gIHJldHVybiB7XG4gICAgZXM6IHBhcmFtcy5nZXQoXCJlc1wiKSxcbiAgICBlc3E6IHBhcmFtcy5nZXQoXCJlc3FcIiksXG4gIH07XG59KTtcblxuZXhwb3J0IGNvbnN0IGluaXRpYXRlQ2hhdFNlYXJjaEF0b20gPSBhdG9tKG51bGwsIChfLCBzZXQsIHF1ZXJ5OiBzdHJpbmcpID0+IHtcbiAgc2V0KGNoYXRTZWFyY2hJc0xvYWRpbmdBdG9tLCB0cnVlKTtcbiAgLy8gVXBkYXRlIFVSTCBhbmQgbWFudWFsbHkgdHJpZ2dlciBzdGF0ZSBjaGFuZ2UgKHNpbmNlIHB1c2hTdGF0ZSBkb2Vzbid0IHRyaWdnZXIgcG9wc3RhdGUpXG4gIGNvbnN0IHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzXCIsIFwidHJ1ZVwiKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc3FcIiwgcXVlcnkpO1xuICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sIFwiXCIsIHVybCk7XG5cbiAgLy8gTWFudWFsbHkgdHJpZ2dlciBwYWdlIHZhcmlhbnQgcmUtZXZhbHVhdGlvbiBieSBkaXNwYXRjaGluZyBhIHBvcHN0YXRlIGV2ZW50XG4gIC8vIFRoaXMgZW5zdXJlcyB0aGUgcGFnZSB2YXJpYW50IHN5c3RlbSBkZXRlY3RzIHRoZSBVUkwgY2hhbmdlIGFuZCBtb3VudHMgc2VhcmNoIHJlc3VsdHNcbiAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IFBvcFN0YXRlRXZlbnQoXCJwb3BzdGF0ZVwiLCB7IHN0YXRlOiB7fSB9KSk7XG5cbiAgc2V0KGNoYXRTZWFyY2hQYXJhbXNBdG9tLCB7IGlkOiBudWxsLCBxdWVyeSB9KTtcbiAgc2V0KGhhbmRsZVNlYXJjaEF0b20sIHtcbiAgICBpZDogdXVpZCgpLFxuICAgIHJvbGU6IE1lc3NhZ2VSb2xlLlVzZXIsXG4gICAgdHlwZTogTWVzc2FnZVR5cGUuU2VhcmNoLFxuICAgIGNyZWF0ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgIG1ldGFkYXRhOiB7XG4gICAgICBzZWFyY2hUZXJtOiBxdWVyeSxcbiAgICAgIC8vIEVuYWJsaW5nIHRoaXMgd2lsbCBlbmFibGUgdGhlIG5ldyBiYWNrZW5kIHNlYXJjaFxuICAgICAgc2VsZWN0ZWRGaWx0ZXJzOiBbXSxcbiAgICB9LFxuICB9KTtcbn0pO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlU2VhcmNoUmVzdWx0c0F0b20gPSBhdG9tKFxuICBudWxsLFxuICAoZ2V0LCBzZXQsIG1lc3NhZ2U6IE1lc3NhZ2UgfCB1bmRlZmluZWQpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2UgfHwgbWVzc2FnZS50eXBlICE9PSBNZXNzYWdlVHlwZS5Qcm9kdWN0U2VhcmNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBwcm9kdWN0Q291bnQsIGdlbmVyYXRlZFF1ZXJ5IH0gPSBtZXNzYWdlLm1ldGFkYXRhO1xuICAgIGlmIChwcm9kdWN0Q291bnQgIT09IDApIHtcbiAgICAgIC8vIENsZWFyIHRoZSBmaWx0ZXIgb3B0aW9ucyB3aGVuIHdlIGdldCBuZXcgcHJvZHVjdHNcbiAgICAgIHNldChzZWxlY3RlZEZpbHRlck9wdGlvbnNBdG9tLCBbXSk7XG4gICAgICAvLyBUT0RPOiBTaG91bGQgd2Ugc3RpbGwgZG8gYW55IG9mIHRoZXNlIHRoaW5ncz9cbiAgICAgIHNldChjaGF0U2VhcmNoU3RhdGVBdG9tLCBcInByb2R1Y3QtcGFnZVwiKTtcbiAgICAgIGNvbnN0IGN1cnJlbnRTZWFyY2hQYXJhbXMgPSBnZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20pO1xuICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldChcImVzXCIsIFwidHJ1ZVwiKTtcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNxXCIsIGdlbmVyYXRlZFF1ZXJ5KTtcbiAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNpXCIsIG1lc3NhZ2UuaWQpO1xuICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCBcIlwiLCB1cmwpO1xuICAgICAgaWYgKGN1cnJlbnRTZWFyY2hQYXJhbXMuaWQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgdGhlIGlkIGlzIG51bGwsIHdlIG5lZWQgdG8gcmVwbGFjZSB0aGUgc3RhdGVcbiAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIFwiXCIsIHVybCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiB0aGUgcXVlcnkgaXMgZGlmZmVyZW50LCB3ZSBuZWVkIHRvIHB1c2ggYSBuZXcgc3RhdGVcbiAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKG51bGwsIFwiXCIsIHVybCk7XG4gICAgICB9XG4gICAgICBzZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20sIHsgaWQ6IG1lc3NhZ2UuaWQsIHF1ZXJ5OiBnZW5lcmF0ZWRRdWVyeSB9KTtcbiAgICB9XG4gIH1cbik7XG5cbmV4cG9ydCBjb25zdCBzZXRDaGF0U2VhcmNoUGFyYW1zQXRvbSA9IGF0b20obnVsbCwgKF8sIHNldCwgcXVlcnk6IHN0cmluZykgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJlc1wiLCBcInRydWVcIik7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiZXNxXCIsIHF1ZXJ5KTtcbiAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHt9LCBcIlwiLCB1cmwpO1xuICBzZXQoY2hhdFNlYXJjaFBhcmFtc0F0b20sIHsgaWQ6IG51bGwsIHF1ZXJ5IH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQSxNQUFhLDJCQUEyQixnQkFBd0I7Q0FDOUQsTUFBTSxRQUFRO0VBQUM7RUFBUTtFQUFPO0VBQU07RUFBSztFQUFLO0VBQUs7RUFBTTtFQUFPO0VBQVE7RUFBUTtBQWVoRixRQWJ1QixZQUNwQixhQUFhLENBQ2IsTUFBTSxJQUFJLENBQ1YsS0FBSyxTQUFTO0FBQ2IsTUFBSSxNQUFNLFNBQVMsS0FBSyxDQUN0QixRQUFPLEtBQUssYUFBYTtBQUUzQixTQUFPLEtBQUssT0FBTyxFQUFFLENBQUMsYUFBYSxHQUFHLEtBQUssTUFBTSxFQUFFO0dBQ25ELENBRWtDLEtBQUssSUFBSSxDQUd6QixRQUFRLFdBQVcsU0FBUzs7Ozs7QUNWcEQsTUFBTSxrQkFBa0IsT0FBZSxlQUF1QjtBQUU1RCxRQURlLEtBQUssTUFBTSxRQUFRLFdBQVcsR0FDN0I7O0FBR2xCLE1BQU0saUJBQWlCLFVBQXNDO0FBQzNELEtBQUksQ0FBQyxNQUFNLFFBQVEsTUFBTSxDQUN2QixRQUFPO0FBRVQsUUFBTyxNQUFNLE9BQU8sU0FBUyxPQUFPLFNBQVMsU0FBUzs7QUFLeEQsTUFBTSxjQUFjLGlCQUFzRDtBQUN4RSxLQUFJLGFBQWEsU0FBUyxRQUN4QixTQUFRLEdBQUcsTUFBTSxPQUFPLEVBQUUsYUFBYSxHQUFHLE9BQU8sRUFBRSxhQUFhO0FBRWxFLEtBQUks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