@upstart.gg/sdk 0.0.130 → 0.0.132

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 (533) hide show
  1. package/dist/shared/ai/schemas.d.ts +13 -0
  2. package/dist/shared/ai/schemas.d.ts.map +1 -0
  3. package/dist/shared/ai/schemas.js +3 -0
  4. package/dist/shared/ai/types.d.ts +170 -0
  5. package/dist/shared/ai/types.d.ts.map +1 -0
  6. package/dist/shared/{chunk-EJGNYD4V.js → ai/types.js} +0 -1
  7. package/dist/shared/ajv.d.ts +2 -1
  8. package/dist/shared/ajv.d.ts.map +1 -1
  9. package/dist/shared/ajv.js +1 -1
  10. package/dist/shared/attributes.d.ts +300 -12
  11. package/dist/shared/attributes.d.ts.map +1 -1
  12. package/dist/shared/attributes.js +1 -1
  13. package/dist/shared/brick-manifest.d.ts +3 -1
  14. package/dist/shared/brick-manifest.d.ts.map +1 -1
  15. package/dist/shared/brick-manifest.js +1 -1
  16. package/dist/shared/bricks/manifests/accordion.manifest.d.ts +4 -3
  17. package/dist/shared/bricks/manifests/accordion.manifest.d.ts.map +1 -1
  18. package/dist/shared/bricks/manifests/accordion.manifest.js +1 -1
  19. package/dist/shared/bricks/manifests/all-manifests.d.ts +4 -1
  20. package/dist/shared/bricks/manifests/all-manifests.d.ts.map +1 -1
  21. package/dist/shared/bricks/manifests/all-manifests.js +1 -1
  22. package/dist/shared/bricks/manifests/box.manifest.d.ts +6 -4
  23. package/dist/shared/bricks/manifests/box.manifest.d.ts.map +1 -1
  24. package/dist/shared/bricks/manifests/box.manifest.js +1 -1
  25. package/dist/shared/bricks/manifests/button.manifest.d.ts +4 -3
  26. package/dist/shared/bricks/manifests/button.manifest.d.ts.map +1 -1
  27. package/dist/shared/bricks/manifests/button.manifest.js +1 -1
  28. package/dist/shared/bricks/manifests/card.manifest.d.ts +6 -5
  29. package/dist/shared/bricks/manifests/card.manifest.d.ts.map +1 -1
  30. package/dist/shared/bricks/manifests/card.manifest.js +1 -1
  31. package/dist/shared/bricks/manifests/carousel.manifest.d.ts +6 -5
  32. package/dist/shared/bricks/manifests/carousel.manifest.d.ts.map +1 -1
  33. package/dist/shared/bricks/manifests/carousel.manifest.js +1 -1
  34. package/dist/shared/bricks/manifests/footer.manifest.d.ts +40 -5
  35. package/dist/shared/bricks/manifests/footer.manifest.d.ts.map +1 -1
  36. package/dist/shared/bricks/manifests/footer.manifest.js +1 -1
  37. package/dist/shared/bricks/manifests/form.manifest.d.ts +6 -5
  38. package/dist/shared/bricks/manifests/form.manifest.d.ts.map +1 -1
  39. package/dist/shared/bricks/manifests/form.manifest.js +1 -1
  40. package/dist/shared/bricks/manifests/hero.manifest.d.ts +4 -3
  41. package/dist/shared/bricks/manifests/hero.manifest.d.ts.map +1 -1
  42. package/dist/shared/bricks/manifests/hero.manifest.js +1 -1
  43. package/dist/shared/bricks/manifests/html.manifest.d.ts +3 -2
  44. package/dist/shared/bricks/manifests/html.manifest.d.ts.map +1 -1
  45. package/dist/shared/bricks/manifests/html.manifest.js +1 -1
  46. package/dist/shared/bricks/manifests/icon.manifest.d.ts +3 -2
  47. package/dist/shared/bricks/manifests/icon.manifest.d.ts.map +1 -1
  48. package/dist/shared/bricks/manifests/icon.manifest.js +1 -1
  49. package/dist/shared/bricks/manifests/image.manifest.d.ts +10 -6
  50. package/dist/shared/bricks/manifests/image.manifest.d.ts.map +1 -1
  51. package/dist/shared/bricks/manifests/image.manifest.js +1 -1
  52. package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts +7 -6
  53. package/dist/shared/bricks/manifests/images-gallery.manifest.d.ts.map +1 -1
  54. package/dist/shared/bricks/manifests/images-gallery.manifest.js +1 -1
  55. package/dist/shared/bricks/manifests/map.manifest.d.ts +5 -4
  56. package/dist/shared/bricks/manifests/map.manifest.d.ts.map +1 -1
  57. package/dist/shared/bricks/manifests/map.manifest.js +1 -1
  58. package/dist/shared/bricks/manifests/navbar.manifest.d.ts +42 -8
  59. package/dist/shared/bricks/manifests/navbar.manifest.d.ts.map +1 -1
  60. package/dist/shared/bricks/manifests/navbar.manifest.js +1 -1
  61. package/dist/shared/bricks/manifests/sidebar.manifest.d.ts +4 -3
  62. package/dist/shared/bricks/manifests/sidebar.manifest.d.ts.map +1 -1
  63. package/dist/shared/bricks/manifests/sidebar.manifest.js +1 -1
  64. package/dist/shared/bricks/manifests/social-links.manifest.d.ts +5 -4
  65. package/dist/shared/bricks/manifests/social-links.manifest.d.ts.map +1 -1
  66. package/dist/shared/bricks/manifests/social-links.manifest.js +1 -1
  67. package/dist/shared/bricks/manifests/spacer.manifest.d.ts +3 -2
  68. package/dist/shared/bricks/manifests/spacer.manifest.d.ts.map +1 -1
  69. package/dist/shared/bricks/manifests/spacer.manifest.js +1 -1
  70. package/dist/shared/bricks/manifests/testimonials.manifest.d.ts +6 -5
  71. package/dist/shared/bricks/manifests/testimonials.manifest.d.ts.map +1 -1
  72. package/dist/shared/bricks/manifests/testimonials.manifest.js +1 -1
  73. package/dist/shared/bricks/manifests/text.manifest.d.ts +4 -3
  74. package/dist/shared/bricks/manifests/text.manifest.d.ts.map +1 -1
  75. package/dist/shared/bricks/manifests/text.manifest.js +1 -1
  76. package/dist/shared/bricks/manifests/video.manifest.d.ts +4 -3
  77. package/dist/shared/bricks/manifests/video.manifest.d.ts.map +1 -1
  78. package/dist/shared/bricks/manifests/video.manifest.js +1 -1
  79. package/dist/shared/bricks/props/align.d.ts.map +1 -1
  80. package/dist/shared/bricks/props/align.js +1 -1
  81. package/dist/shared/bricks/props/background.d.ts +6 -9
  82. package/dist/shared/bricks/props/background.d.ts.map +1 -1
  83. package/dist/shared/bricks/props/background.js +1 -1
  84. package/dist/shared/bricks/props/border.d.ts.map +1 -1
  85. package/dist/shared/bricks/props/border.js +1 -1
  86. package/dist/shared/bricks/props/color-preset.d.ts +3 -4
  87. package/dist/shared/bricks/props/color-preset.d.ts.map +1 -1
  88. package/dist/shared/bricks/props/color-preset.js +1 -1
  89. package/dist/shared/bricks/props/color.js +1 -1
  90. package/dist/shared/bricks/props/common.d.ts +6 -6
  91. package/dist/shared/bricks/props/common.d.ts.map +1 -1
  92. package/dist/shared/bricks/props/common.js +1 -1
  93. package/dist/shared/bricks/props/css-length.d.ts.map +1 -1
  94. package/dist/shared/bricks/props/css-length.js +1 -1
  95. package/dist/shared/bricks/props/datasource.d.ts +1 -1
  96. package/dist/shared/bricks/props/datasource.js +1 -1
  97. package/dist/shared/bricks/props/date.d.ts.map +1 -1
  98. package/dist/shared/bricks/props/date.js +1 -1
  99. package/dist/shared/bricks/props/direction.d.ts.map +1 -1
  100. package/dist/shared/bricks/props/direction.js +1 -1
  101. package/dist/shared/bricks/props/dynamic.d.ts.map +1 -1
  102. package/dist/shared/bricks/props/dynamic.js +1 -1
  103. package/dist/shared/bricks/props/effects.d.ts +0 -1
  104. package/dist/shared/bricks/props/effects.d.ts.map +1 -1
  105. package/dist/shared/bricks/props/effects.js +1 -1
  106. package/dist/shared/bricks/props/file.d.ts.map +1 -1
  107. package/dist/shared/bricks/props/file.js +1 -1
  108. package/dist/shared/bricks/props/geolocation.js +1 -1
  109. package/dist/shared/bricks/props/helpers.d.ts +2 -2
  110. package/dist/shared/bricks/props/helpers.js +1 -1
  111. package/dist/shared/bricks/props/image.d.ts +4 -4
  112. package/dist/shared/bricks/props/image.d.ts.map +1 -1
  113. package/dist/shared/bricks/props/image.js +1 -1
  114. package/dist/shared/bricks/props/position.d.ts +0 -2
  115. package/dist/shared/bricks/props/position.d.ts.map +1 -1
  116. package/dist/shared/bricks/props/position.js +1 -1
  117. package/dist/shared/bricks/props/string.js +1 -1
  118. package/dist/shared/bricks/props/tags.d.ts.map +1 -1
  119. package/dist/shared/bricks/props/tags.js +1 -1
  120. package/dist/shared/bricks/props/text.js +1 -1
  121. package/dist/shared/bricks/props/types.d.ts +1 -2
  122. package/dist/shared/bricks/props/types.d.ts.map +1 -1
  123. package/dist/shared/bricks.d.ts +189 -18
  124. package/dist/shared/bricks.d.ts.map +1 -1
  125. package/dist/shared/bricks.js +1 -1
  126. package/dist/shared/chunk-2CYAFF56.js +3 -0
  127. package/dist/shared/chunk-2NLDX5FG.js +3 -0
  128. package/dist/shared/chunk-3FPFR5RA.js +3 -0
  129. package/dist/shared/chunk-3P36LG6T.js +3 -0
  130. package/dist/shared/chunk-3QOAHMV4.js +5 -0
  131. package/dist/shared/chunk-46YDGGFF.js +3 -0
  132. package/dist/shared/chunk-4GIZ6WSG.js +3 -0
  133. package/dist/shared/chunk-5DZIQGY2.js +3 -0
  134. package/dist/shared/chunk-5WY7LYXK.js +3 -0
  135. package/dist/shared/chunk-5X5SX5N7.js +4 -0
  136. package/dist/shared/chunk-6L3Z5SZQ.js +3 -0
  137. package/dist/shared/{chunk-UU2MSQXY.js → chunk-6PGAWO4H.js} +1 -1
  138. package/dist/shared/chunk-6R76KIHZ.js +3 -0
  139. package/dist/shared/chunk-7UBMXMNJ.js +3 -0
  140. package/dist/shared/chunk-AB3IMRXZ.js +3 -0
  141. package/dist/shared/chunk-AMQAGDFH.js +3 -0
  142. package/dist/shared/chunk-ARMM6B47.js +3 -0
  143. package/dist/shared/chunk-ARYG4XMX.js +3 -0
  144. package/dist/shared/chunk-AZHH3XJJ.js +3 -0
  145. package/dist/shared/chunk-DHSWVVMI.js +3 -0
  146. package/dist/shared/chunk-DKNOZLA6.js +3 -0
  147. package/dist/shared/chunk-EVDZ2KND.js +6 -0
  148. package/dist/shared/chunk-F4JNKU7J.js +3 -0
  149. package/dist/shared/chunk-GC5OWY2Z.js +3 -0
  150. package/dist/shared/chunk-HP7CZB2F.js +3 -0
  151. package/dist/shared/chunk-HSRXUIVM.js +3 -0
  152. package/dist/shared/chunk-ILIWVWHC.js +8 -0
  153. package/dist/shared/chunk-JRCVYDCD.js +3 -0
  154. package/dist/shared/chunk-K5ADUHF4.js +3 -0
  155. package/dist/shared/chunk-L2HOZVBC.js +3 -0
  156. package/dist/shared/chunk-LEWKHCRI.js +3 -0
  157. package/dist/shared/chunk-LT4CW2F7.js +3 -0
  158. package/dist/shared/chunk-ML4JSDQM.js +34 -0
  159. package/dist/shared/chunk-MVCVVKBY.js +3 -0
  160. package/dist/shared/chunk-NKIEDT7V.js +3 -0
  161. package/dist/shared/chunk-NQKXDMQ5.js +3 -0
  162. package/dist/shared/chunk-PO6UODZ5.js +8 -0
  163. package/dist/shared/chunk-PW5HRVMD.js +3 -0
  164. package/dist/shared/chunk-PZYX3ACO.js +3 -0
  165. package/dist/shared/chunk-QGFQA7OZ.js +4 -0
  166. package/dist/shared/chunk-RJZZWCBD.js +3 -0
  167. package/dist/shared/chunk-SAJY7H6N.js +3 -0
  168. package/dist/shared/chunk-SFDRAHYP.js +3 -0
  169. package/dist/shared/chunk-STDCM2KD.js +3 -0
  170. package/dist/shared/chunk-TH5SONR6.js +3 -0
  171. package/dist/shared/chunk-UCR2UZOY.js +3 -0
  172. package/dist/shared/chunk-UDQWYGSO.js +3 -0
  173. package/dist/shared/{chunk-LSPN22SI.js → chunk-URRCKLAS.js} +3 -3
  174. package/dist/shared/{chunk-OIOYMECS.js → chunk-US53TNMK.js} +1 -1
  175. package/dist/shared/chunk-VDX2J22H.js +3 -0
  176. package/dist/shared/chunk-VK26ZZFR.js +3 -0
  177. package/dist/shared/chunk-VLXZMESE.js +3 -0
  178. package/dist/shared/chunk-WAML3IGZ.js +3 -0
  179. package/dist/shared/chunk-WXKRIUTA.js +3 -0
  180. package/dist/shared/chunk-X62OEAE6.js +3 -0
  181. package/dist/shared/chunk-XED6ARVN.js +3 -0
  182. package/dist/shared/chunk-XZLBM4AX.js +3 -0
  183. package/dist/shared/chunk-Y3X4F4YJ.js +3 -0
  184. package/dist/shared/chunk-Z4YKRLOX.js +3 -0
  185. package/dist/shared/context.d.ts +4 -12
  186. package/dist/shared/context.d.ts.map +1 -1
  187. package/dist/shared/datarecords/external/airtable/handler.d.ts +22 -5
  188. package/dist/shared/datarecords/external/airtable/handler.d.ts.map +1 -1
  189. package/dist/shared/datarecords/external/airtable/handler.js +1 -1
  190. package/dist/shared/datarecords/external/airtable/oauth/config.js +3 -0
  191. package/dist/shared/datarecords/external/airtable/types.d.ts +25 -0
  192. package/dist/shared/datarecords/external/airtable/types.d.ts.map +1 -1
  193. package/dist/shared/datarecords/external/airtable/types.js +3 -0
  194. package/dist/shared/datarecords/external/generic-webhook/handler.js +3 -0
  195. package/dist/shared/datarecords/external/generic-webhook/options.js +3 -0
  196. package/dist/shared/datarecords/external/google/sheets/client.js +3 -0
  197. package/dist/shared/datarecords/external/google/sheets/handler.d.ts +29 -5
  198. package/dist/shared/datarecords/external/google/sheets/handler.d.ts.map +1 -1
  199. package/dist/shared/datarecords/external/google/sheets/handler.js +5 -4
  200. package/dist/shared/datarecords/external/google/sheets/{options.d.ts → types.d.ts} +1 -1
  201. package/dist/shared/datarecords/external/google/sheets/types.d.ts.map +1 -0
  202. package/dist/shared/datarecords/external/google/sheets/types.js +3 -0
  203. package/dist/shared/datarecords/external/notion/handler.d.ts +29 -7
  204. package/dist/shared/datarecords/external/notion/handler.d.ts.map +1 -1
  205. package/dist/shared/datarecords/external/notion/handler.js +1 -1
  206. package/dist/shared/datarecords/external/notion/oauth/config.js +3 -0
  207. package/dist/shared/datarecords/external/notion/{options.d.ts → types.d.ts} +11 -1
  208. package/dist/shared/datarecords/external/notion/types.d.ts.map +1 -0
  209. package/dist/shared/datarecords/external/notion/types.js +3 -0
  210. package/dist/shared/datarecords/types.d.ts +17 -165
  211. package/dist/shared/datarecords/types.d.ts.map +1 -1
  212. package/dist/shared/datarecords/types.js +1 -1
  213. package/dist/shared/datarecords.d.ts +2 -2
  214. package/dist/shared/datarecords.d.ts.map +1 -1
  215. package/dist/shared/datarecords.js +1 -1
  216. package/dist/shared/datasources/external/facebook/posts/fetcher.js +3 -0
  217. package/dist/shared/datasources/external/facebook/posts/schema.js +3 -0
  218. package/dist/shared/datasources/external/http-json/fetcher.js +3 -0
  219. package/dist/shared/datasources/external/http-json/options.js +3 -0
  220. package/dist/shared/datasources/external/http-json/schema.js +3 -0
  221. package/dist/shared/datasources/external/instagram/feed/fetcher.js +3 -0
  222. package/dist/shared/datasources/external/instagram/feed/schema.js +3 -0
  223. package/dist/shared/datasources/external/mastodon/account/fetcher.js +3 -0
  224. package/dist/shared/datasources/external/mastodon/account/schema.js +3 -0
  225. package/dist/shared/datasources/external/mastodon/options.js +3 -0
  226. package/dist/shared/datasources/external/mastodon/status/fetcher.js +3 -0
  227. package/dist/shared/datasources/external/mastodon/status/sample.array.js +3 -0
  228. package/dist/shared/datasources/external/mastodon/status/sample.single.js +3 -0
  229. package/dist/shared/datasources/external/mastodon/status/schema.d.ts.map +1 -1
  230. package/dist/shared/datasources/external/mastodon/status/schema.js +3 -0
  231. package/dist/shared/datasources/external/meta/options.js +3 -0
  232. package/dist/shared/datasources/external/rss/fetcher.js +3 -0
  233. package/dist/shared/datasources/external/rss/options.js +3 -0
  234. package/dist/shared/datasources/external/rss/schema.js +3 -0
  235. package/dist/shared/datasources/external/threads/media/fetcher.js +3 -0
  236. package/dist/shared/datasources/external/threads/media/schema.js +3 -0
  237. package/dist/shared/datasources/external/tiktok/video/fetcher.js +3 -0
  238. package/dist/shared/datasources/external/tiktok/video/options.js +3 -0
  239. package/dist/shared/datasources/external/tiktok/video/schema.js +3 -0
  240. package/dist/shared/datasources/external/youtube/list/fetcher.js +3 -0
  241. package/dist/shared/datasources/external/youtube/list/options.js +3 -0
  242. package/dist/shared/datasources/external/youtube/list/schema.js +3 -0
  243. package/dist/shared/datasources/fetcher.js +2 -0
  244. package/dist/shared/datasources/internal/blog/schema.js +3 -0
  245. package/dist/shared/datasources/internal/changelog/schema.js +3 -0
  246. package/dist/shared/datasources/internal/contact-info/schema.js +3 -0
  247. package/dist/shared/datasources/internal/cv/schema.js +3 -0
  248. package/dist/shared/datasources/internal/faq/schema.js +3 -0
  249. package/dist/shared/datasources/internal/job-board/schema.js +3 -0
  250. package/dist/shared/datasources/internal/links/schema.js +3 -0
  251. package/dist/shared/datasources/internal/recipes/schema.js +3 -0
  252. package/dist/shared/datasources/internal/restaurant/schema.js +3 -0
  253. package/dist/shared/datasources/samples.js +3 -0
  254. package/dist/shared/datasources/schemas.d.ts +0 -49
  255. package/dist/shared/datasources/schemas.d.ts.map +1 -1
  256. package/dist/shared/datasources/schemas.js +1 -1
  257. package/dist/shared/datasources/types.d.ts +53 -130
  258. package/dist/shared/datasources/types.d.ts.map +1 -1
  259. package/dist/shared/datasources/types.js +1 -1
  260. package/dist/shared/datasources/utils.js +3 -0
  261. package/dist/shared/datasources.d.ts +7 -4
  262. package/dist/shared/datasources.d.ts.map +1 -1
  263. package/dist/shared/datasources.js +1 -1
  264. package/dist/shared/errors.js +1 -1
  265. package/dist/shared/images.d.ts +1 -12
  266. package/dist/shared/images.d.ts.map +1 -1
  267. package/dist/shared/images.js +1 -1
  268. package/dist/shared/index.js +3 -0
  269. package/dist/shared/manifest.js +3 -0
  270. package/dist/shared/page.d.ts +143 -12
  271. package/dist/shared/page.d.ts.map +1 -1
  272. package/dist/shared/page.js +1 -1
  273. package/dist/shared/site.d.ts +224 -114
  274. package/dist/shared/site.d.ts.map +1 -1
  275. package/dist/shared/site.js +1 -1
  276. package/dist/shared/sitemap.d.ts +167 -23
  277. package/dist/shared/sitemap.d.ts.map +1 -1
  278. package/dist/shared/sitemap.js +1 -1
  279. package/dist/shared/social-icons.js +3 -0
  280. package/dist/shared/theme.d.ts +41 -4
  281. package/dist/shared/theme.d.ts.map +1 -1
  282. package/dist/shared/theme.js +1 -1
  283. package/dist/shared/utils/invariant.js +1 -1
  284. package/dist/shared/utils/llm.d.ts +19 -0
  285. package/dist/shared/utils/llm.d.ts.map +1 -0
  286. package/dist/shared/utils/llm.js +3 -0
  287. package/dist/shared/utils/schema.d.ts +6 -1
  288. package/dist/shared/utils/schema.d.ts.map +1 -1
  289. package/dist/shared/utils/schema.js +1 -1
  290. package/dist/shared/utils/tests/schema.test.d.ts +2 -0
  291. package/dist/shared/utils/tests/schema.test.d.ts.map +1 -0
  292. package/dist/shared/utils/typed-ref.d.ts +1 -6
  293. package/dist/shared/utils/typed-ref.d.ts.map +1 -1
  294. package/dist/shared/utils/typed-ref.js +1 -1
  295. package/package.json +18 -19
  296. package/src/shared/ai/schemas.ts +33 -0
  297. package/src/shared/ai/types.ts +155 -0
  298. package/src/shared/ajv.ts +123 -0
  299. package/src/shared/analytics/init.ts +14 -0
  300. package/src/shared/analytics/track.ts +21 -0
  301. package/src/shared/analytics/types.ts +13 -0
  302. package/src/shared/attributes.ts +396 -0
  303. package/src/shared/brick-manifest.ts +119 -0
  304. package/src/shared/bricks/manifests/accordion.manifest.ts +482 -0
  305. package/src/shared/bricks/manifests/all-manifests.ts +121 -0
  306. package/src/shared/bricks/manifests/box.manifest.ts +551 -0
  307. package/src/shared/bricks/manifests/button.manifest.ts +208 -0
  308. package/src/shared/bricks/manifests/card.manifest.ts +320 -0
  309. package/src/shared/bricks/manifests/carousel.manifest.ts +708 -0
  310. package/src/shared/bricks/manifests/footer.manifest.ts +509 -0
  311. package/src/shared/bricks/manifests/form.manifest.ts +226 -0
  312. package/src/shared/bricks/manifests/hero.manifest.ts +365 -0
  313. package/src/shared/bricks/manifests/html.manifest.ts +127 -0
  314. package/src/shared/bricks/manifests/icon.manifest.ts +164 -0
  315. package/src/shared/bricks/manifests/image.manifest.ts +378 -0
  316. package/src/shared/bricks/manifests/images-gallery.manifest.ts +822 -0
  317. package/src/shared/bricks/manifests/map.manifest.ts +215 -0
  318. package/src/shared/bricks/manifests/navbar.manifest.ts +361 -0
  319. package/src/shared/bricks/manifests/sidebar.manifest.ts +88 -0
  320. package/src/shared/bricks/manifests/social-links.manifest.ts +497 -0
  321. package/src/shared/bricks/manifests/spacer.manifest.ts +54 -0
  322. package/src/shared/bricks/manifests/testimonials.manifest.ts +480 -0
  323. package/src/shared/bricks/manifests/tests/header.manifest.test.ts +10 -0
  324. package/src/shared/bricks/manifests/text.manifest.ts +245 -0
  325. package/src/shared/bricks/manifests/video.manifest.ts +115 -0
  326. package/src/shared/bricks/props/align.ts +63 -0
  327. package/src/shared/bricks/props/background.ts +79 -0
  328. package/src/shared/bricks/props/boolean.ts +7 -0
  329. package/src/shared/bricks/props/border.ts +86 -0
  330. package/src/shared/bricks/props/color-preset.ts +390 -0
  331. package/src/shared/bricks/props/color.ts +40 -0
  332. package/src/shared/bricks/props/common.ts +64 -0
  333. package/src/shared/bricks/props/css-length.ts +32 -0
  334. package/src/shared/bricks/props/datarecord.ts +11 -0
  335. package/src/shared/bricks/props/datasource.ts +82 -0
  336. package/src/shared/bricks/props/date.ts +21 -0
  337. package/src/shared/bricks/props/direction.ts +21 -0
  338. package/src/shared/bricks/props/dynamic.ts +112 -0
  339. package/src/shared/bricks/props/effects.ts +71 -0
  340. package/src/shared/bricks/props/enum.ts +38 -0
  341. package/src/shared/bricks/props/file.ts +10 -0
  342. package/src/shared/bricks/props/geolocation.ts +36 -0
  343. package/src/shared/bricks/props/helpers.ts +73 -0
  344. package/src/shared/bricks/props/image.ts +96 -0
  345. package/src/shared/bricks/props/number.ts +8 -0
  346. package/src/shared/bricks/props/position.ts +11 -0
  347. package/src/shared/bricks/props/string.ts +72 -0
  348. package/src/shared/bricks/props/tags.ts +26 -0
  349. package/src/shared/bricks/props/tests/background.test.ts +90 -0
  350. package/src/shared/bricks/props/tests/border.test.ts +12 -0
  351. package/src/shared/bricks/props/tests/effects.test.ts +37 -0
  352. package/src/shared/bricks/props/tests/helpers.test.ts +98 -0
  353. package/src/shared/bricks/props/tests/image.test.ts +71 -0
  354. package/src/shared/bricks/props/tests/string.test.ts +80 -0
  355. package/src/shared/bricks/props/text.ts +107 -0
  356. package/src/shared/bricks/props/types.ts +72 -0
  357. package/src/shared/bricks.ts +1237 -0
  358. package/src/shared/context.ts +32 -0
  359. package/src/shared/datarecords/external/airtable/handler.ts +501 -0
  360. package/src/shared/datarecords/external/airtable/oauth/config.ts +11 -0
  361. package/src/shared/datarecords/external/airtable/types.ts +63 -0
  362. package/src/shared/datarecords/external/generic-webhook/handler.ts +10 -0
  363. package/src/shared/datarecords/external/generic-webhook/options.ts +13 -0
  364. package/src/shared/datarecords/external/google/oauth/config.ts +30 -0
  365. package/src/shared/datarecords/external/google/sheets/client.ts +112 -0
  366. package/src/shared/datarecords/external/google/sheets/handler.ts +253 -0
  367. package/src/shared/datarecords/external/google/sheets/types.ts +10 -0
  368. package/src/shared/datarecords/external/notion/handler.ts +469 -0
  369. package/src/shared/datarecords/external/notion/oauth/config.ts +7 -0
  370. package/src/shared/datarecords/external/notion/types.ts +28 -0
  371. package/src/shared/datarecords/types.ts +165 -0
  372. package/src/shared/datarecords.ts +5 -0
  373. package/src/shared/datasources/README.md +3 -0
  374. package/src/shared/datasources/external/facebook/posts/fetcher.ts +52 -0
  375. package/src/shared/datasources/external/facebook/posts/sample.ts +35 -0
  376. package/src/shared/datasources/external/facebook/posts/schema.ts +33 -0
  377. package/src/shared/datasources/external/facebook/posts/tests/fetcher.test.ts +73 -0
  378. package/src/shared/datasources/external/http-json/fetcher.ts +31 -0
  379. package/src/shared/datasources/external/http-json/options.ts +8 -0
  380. package/src/shared/datasources/external/http-json/schema.ts +6 -0
  381. package/src/shared/datasources/external/http-json/tests/fetcher.test.ts +70 -0
  382. package/src/shared/datasources/external/instagram/feed/fetcher.ts +33 -0
  383. package/src/shared/datasources/external/instagram/feed/sample.ts +22 -0
  384. package/src/shared/datasources/external/instagram/feed/schema.ts +23 -0
  385. package/src/shared/datasources/external/instagram/feed/tests/fetcher.test.ts +64 -0
  386. package/src/shared/datasources/external/mastodon/account/fetcher.ts +24 -0
  387. package/src/shared/datasources/external/mastodon/account/sample.ts +33 -0
  388. package/src/shared/datasources/external/mastodon/account/schema.ts +45 -0
  389. package/src/shared/datasources/external/mastodon/account/tests/fetcher.test.ts +47 -0
  390. package/src/shared/datasources/external/mastodon/options.ts +6 -0
  391. package/src/shared/datasources/external/mastodon/status/fetcher.ts +35 -0
  392. package/src/shared/datasources/external/mastodon/status/sample.array.ts +59 -0
  393. package/src/shared/datasources/external/mastodon/status/sample.single.ts +55 -0
  394. package/src/shared/datasources/external/mastodon/status/schema.ts +125 -0
  395. package/src/shared/datasources/external/mastodon/status/tests/fetcher.test.ts +74 -0
  396. package/src/shared/datasources/external/meta/oauth/config.ts +16 -0
  397. package/src/shared/datasources/external/meta/options.ts +7 -0
  398. package/src/shared/datasources/external/rss/fetcher.ts +31 -0
  399. package/src/shared/datasources/external/rss/options.ts +7 -0
  400. package/src/shared/datasources/external/rss/sample.ts +22 -0
  401. package/src/shared/datasources/external/rss/schema.ts +42 -0
  402. package/src/shared/datasources/external/threads/media/fetcher.ts +53 -0
  403. package/src/shared/datasources/external/threads/media/sample.ts +44 -0
  404. package/src/shared/datasources/external/threads/media/schema.ts +37 -0
  405. package/src/shared/datasources/external/tiktok/oauth/config.ts +17 -0
  406. package/src/shared/datasources/external/tiktok/video/fetcher.ts +39 -0
  407. package/src/shared/datasources/external/tiktok/video/options.ts +8 -0
  408. package/src/shared/datasources/external/tiktok/video/sample.ts +26 -0
  409. package/src/shared/datasources/external/tiktok/video/schema.ts +27 -0
  410. package/src/shared/datasources/external/youtube/list/fetcher.ts +37 -0
  411. package/src/shared/datasources/external/youtube/list/options.ts +11 -0
  412. package/src/shared/datasources/external/youtube/list/sample.ts +33 -0
  413. package/src/shared/datasources/external/youtube/list/schema.ts +38 -0
  414. package/src/shared/datasources/external/youtube/oauth/config.ts +15 -0
  415. package/src/shared/datasources/fetcher.ts +16 -0
  416. package/src/shared/datasources/internal/blog/schema.ts +69 -0
  417. package/src/shared/datasources/internal/changelog/schema.ts +48 -0
  418. package/src/shared/datasources/internal/contact-info/schema.ts +20 -0
  419. package/src/shared/datasources/internal/cv/schema.ts +217 -0
  420. package/src/shared/datasources/internal/faq/schema.ts +27 -0
  421. package/src/shared/datasources/internal/job-board/schema.ts +228 -0
  422. package/src/shared/datasources/internal/links/schema.ts +15 -0
  423. package/src/shared/datasources/internal/recipes/schema.ts +42 -0
  424. package/src/shared/datasources/internal/restaurant/schema.ts +225 -0
  425. package/src/shared/datasources/samples.ts +26 -0
  426. package/src/shared/datasources/schemas.ts +48 -0
  427. package/src/shared/datasources/types.ts +490 -0
  428. package/src/shared/datasources/utils.ts +17 -0
  429. package/src/shared/datasources.ts +57 -0
  430. package/src/shared/env.ts +23 -0
  431. package/src/shared/errors.ts +1 -0
  432. package/src/shared/images.ts +44 -0
  433. package/src/shared/index.ts +3 -0
  434. package/src/shared/layout-constants.ts +19 -0
  435. package/src/shared/manifest.ts +50 -0
  436. package/src/shared/oauth.ts +16 -0
  437. package/src/shared/page.ts +36 -0
  438. package/src/shared/prompt.ts +9 -0
  439. package/src/shared/responsive.ts +5 -0
  440. package/src/shared/site.ts +59 -0
  441. package/src/shared/sitemap.ts +98 -0
  442. package/src/shared/social-icons.ts +307 -0
  443. package/src/shared/tests/attributes.test.ts +31 -0
  444. package/src/shared/theme.ts +244 -0
  445. package/src/shared/themes/README.md +34 -0
  446. package/src/shared/themes/color-system.ts +146 -0
  447. package/src/shared/themes/tests/color-system.test.ts +170 -0
  448. package/src/shared/utils/canvas-data-uri.ts +2 -0
  449. package/src/shared/utils/invariant.ts +25 -0
  450. package/src/shared/utils/json-date.ts +8 -0
  451. package/src/shared/utils/llm.ts +282 -0
  452. package/src/shared/utils/merge.ts +12 -0
  453. package/src/shared/utils/object-hash.ts +7 -0
  454. package/src/shared/utils/schema.ts +359 -0
  455. package/src/shared/utils/string-enum.ts +12 -0
  456. package/src/shared/utils/tests/schema.test.ts +724 -0
  457. package/src/shared/utils/try-catch.ts +12 -0
  458. package/src/shared/utils/typed-ref.ts +53 -0
  459. package/dist/shared/bricks/props/container.d.ts +0 -11
  460. package/dist/shared/bricks/props/container.d.ts.map +0 -1
  461. package/dist/shared/bricks/props/container.js +0 -3
  462. package/dist/shared/bricks/props/gap.d.ts +0 -9
  463. package/dist/shared/bricks/props/gap.d.ts.map +0 -1
  464. package/dist/shared/bricks/props/gap.js +0 -3
  465. package/dist/shared/bricks/props/padding.d.ts +0 -5
  466. package/dist/shared/bricks/props/padding.d.ts.map +0 -1
  467. package/dist/shared/bricks/props/padding.js +0 -3
  468. package/dist/shared/bricks/props/tests/padding.d.ts +0 -2
  469. package/dist/shared/bricks/props/tests/padding.d.ts.map +0 -1
  470. package/dist/shared/chunk-2IYSJYNE.js +0 -3
  471. package/dist/shared/chunk-3EM3B4DX.js +0 -3
  472. package/dist/shared/chunk-4TH3C76A.js +0 -3
  473. package/dist/shared/chunk-5N6MBJJ4.js +0 -3
  474. package/dist/shared/chunk-6FITVVZX.js +0 -3
  475. package/dist/shared/chunk-6WCGUAQN.js +0 -3
  476. package/dist/shared/chunk-7DMUDZ4H.js +0 -3
  477. package/dist/shared/chunk-ACVLF55Q.js +0 -3
  478. package/dist/shared/chunk-AQPN5SE2.js +0 -3
  479. package/dist/shared/chunk-BZGNY7LB.js +0 -3
  480. package/dist/shared/chunk-C3VGP4CA.js +0 -3
  481. package/dist/shared/chunk-CT3EI7YN.js +0 -3
  482. package/dist/shared/chunk-DQXDGV67.js +0 -3
  483. package/dist/shared/chunk-E22E4XWE.js +0 -3
  484. package/dist/shared/chunk-ETYYRWLK.js +0 -3
  485. package/dist/shared/chunk-EYPREFMH.js +0 -3
  486. package/dist/shared/chunk-FKNNTHWX.js +0 -5
  487. package/dist/shared/chunk-HHO3ONTQ.js +0 -3
  488. package/dist/shared/chunk-I46VBMLF.js +0 -3
  489. package/dist/shared/chunk-IIFTGWFZ.js +0 -3
  490. package/dist/shared/chunk-JS4K5JRM.js +0 -5
  491. package/dist/shared/chunk-KHFNN4P3.js +0 -3
  492. package/dist/shared/chunk-L6WHBSRZ.js +0 -8
  493. package/dist/shared/chunk-LFQZRGHS.js +0 -3
  494. package/dist/shared/chunk-LGP6GWIY.js +0 -3
  495. package/dist/shared/chunk-NLEWXPVM.js +0 -3
  496. package/dist/shared/chunk-NNI225RG.js +0 -3
  497. package/dist/shared/chunk-QISTDGPP.js +0 -3
  498. package/dist/shared/chunk-QSZWDE3D.js +0 -3
  499. package/dist/shared/chunk-RGLVKILY.js +0 -3
  500. package/dist/shared/chunk-SLRU4CT6.js +0 -4
  501. package/dist/shared/chunk-T3LIA4YB.js +0 -3
  502. package/dist/shared/chunk-T4LMBG2G.js +0 -3
  503. package/dist/shared/chunk-TATG6SFZ.js +0 -3
  504. package/dist/shared/chunk-TF3JVVRU.js +0 -3
  505. package/dist/shared/chunk-TTTXV7TJ.js +0 -6
  506. package/dist/shared/chunk-TWBY2GOR.js +0 -3
  507. package/dist/shared/chunk-UAQHU6L6.js +0 -3
  508. package/dist/shared/chunk-UHF6IEKV.js +0 -3
  509. package/dist/shared/chunk-UMHXXXVP.js +0 -3
  510. package/dist/shared/chunk-VGRYSAXA.js +0 -3
  511. package/dist/shared/chunk-VPFCY4DH.js +0 -3
  512. package/dist/shared/chunk-VZPXXFVX.js +0 -3
  513. package/dist/shared/chunk-WU6Q4WYD.js +0 -3
  514. package/dist/shared/chunk-X43MB5WD.js +0 -3
  515. package/dist/shared/chunk-YBGPPF7T.js +0 -3
  516. package/dist/shared/chunk-YFFTZ5T6.js +0 -3
  517. package/dist/shared/chunk-ZQGNYK5I.js +0 -8
  518. package/dist/shared/chunk-ZTDUXSWH.js +0 -3
  519. package/dist/shared/datarecords/external/airtable/client.d.ts +0 -8
  520. package/dist/shared/datarecords/external/airtable/client.d.ts.map +0 -1
  521. package/dist/shared/datarecords/external/airtable/elements.d.ts +0 -21
  522. package/dist/shared/datarecords/external/airtable/elements.d.ts.map +0 -1
  523. package/dist/shared/datarecords/external/airtable/options.d.ts +0 -10
  524. package/dist/shared/datarecords/external/airtable/options.d.ts.map +0 -1
  525. package/dist/shared/datarecords/external/google/sheets/options.d.ts.map +0 -1
  526. package/dist/shared/datarecords/external/notion/client.d.ts +0 -8
  527. package/dist/shared/datarecords/external/notion/client.d.ts.map +0 -1
  528. package/dist/shared/datarecords/external/notion/options.d.ts.map +0 -1
  529. package/dist/shared/datarecords/external/notion/utils.d.ts +0 -5
  530. package/dist/shared/datarecords/external/notion/utils.d.ts.map +0 -1
  531. package/dist/shared/utils/schema-resolver.d.ts +0 -3
  532. package/dist/shared/utils/schema-resolver.d.ts.map +0 -1
  533. package/dist/shared/utils/schema-resolver.js +0 -3
@@ -0,0 +1,2 @@
1
+ export const canvasDataURI =
2
+ "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMTYwMCA5MDAiIGlkPSJsYW5kc2NhcGUtc2NlbmUiPgogIDxkZWZzPgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJjIiB4MT0iMTE5My44NCIgeDI9IjExMjAuMTYiIHkxPSIyNzcuOCIgeTI9IjcyOC41NSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNmZmYiPjwvc3RvcD4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNjY2Ij48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNjIiBpZD0iaCIgeDE9IjMzNC41NSIgeDI9IjU5My43NSIgeTE9IjE4MyIgeTI9Ijk2MC42Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJxIiB4MT0iNzgzLjUzIiB4Mj0iODEyLjMzIiB5MT0iLTU4LjM2IiB5Mj0iNTUyLjIiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNzFhZGQyIj48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2ZmZiI+PC9zdG9wPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iaSIgeDE9IjExOTMuODQiIHgyPSIxMTIwLjE2IiB5MT0iMjc3LjgiIHkyPSI3MjguNTUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZjJmMmYyIj48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzlhYmRkYiI+PC9zdG9wPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjaSIgaWQ9InQiIHgxPSIzMzQuNTUiIHgyPSI1OTMuNzUiIHkxPSIxODMiIHkyPSI5NjAuNiI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iayIgeDE9IjQ2Ni4zMyIgeDI9IjQ1Ny42OSIgeTE9IjIxOS40IiB5Mj0iOTI3Ljg4IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzliZTZlZSI+PC9zdG9wPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkMWU1ZmYiPjwvc3RvcD4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImoiIHgxPSI0NjYuMzEiIHgyPSI0NTcuNzIiIHkxPSIyMjEuNDQiIHkyPSI5MjUuNDEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjOTFlZWVjIj48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2QxZTVmZiI+PC9zdG9wPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0idSIgeDE9IjEwMDkuMTYiIHgyPSIxMDAxLjc1IiB5MT0iMjYwLjc1IiB5Mj0iODY4LjU2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzc5ZGRlOCI+PC9zdG9wPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNkMWU1ZmYiPjwvc3RvcD4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2oiIGlkPSJ2IiB4MT0iMTAwOS4xNiIgeDI9IjEwMDEuNzUiIHkxPSIyNjAuNzUiIHkyPSI4NjguNTYiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2siIGlkPSJ3IiB4MT0iNzY0LjQ3IiB4Mj0iODA3LjY3IiB5MT0iMzAwLjI3IiB5Mj0iMTEyMS4wNyI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjaiIgaWQ9IngiIHgxPSI2NTEuMTEiIHgyPSI2ODcuNzEiIHkxPSIzMTQuMzMiIHkyPSIxMDA5LjgzIj48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJ5IiB4MT0iOTM1LjcyIiB4Mj0iOTUyLjA3IiB5MT0iMjUxLjUyIiB5Mj0iNzIwLjEyIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2VjZmM3MSI+PC9zdG9wPgogICAgICA8c3RvcCBvZmZzZXQ9Ii45IiBzdG9wLWNvbG9yPSIjOTlmMjhmIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJ6IiB4MT0iOTM2LjQiIHgyPSI5NTEuMTgiIHkxPSIyNzAuOTgiIHkyPSI2OTQuNjkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjZWNmYzcxIj48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iLjkiIHN0b3AtY29sb3I9IiNiMmYyYWIiPjwvc3RvcD4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgaWQ9ImwiIHgxPSI5NjIuMjUiIHgyPSI5NDQuMzYiIHkxPSI1MjUuNDkiIHkyPSI1NjIuNjUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjYTY3ZTFiIj48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iLjk4IiBzdG9wLWNvbG9yPSIjYjU2ZDJlIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJtIiB4MT0iMTAwMS4wNCIgeDI9IjkyNi4xNiIgeTE9IjM0NS41MyIgeTI9IjUwMS4wNSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzODg4MzAiPjwvc3RvcD4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNGZkMTQxIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNsIiBpZD0iQSIgeDE9IjEwNjUuODYiIHgyPSIxMDQ3Ljk3IiB5MT0iNTQ4LjI3IiB5Mj0iNTg1LjQ0Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNtIiBpZD0iQiIgeDE9IjEwOTMuMDUiIHgyPSIxMDM1LjQ2IiB5MT0iNDEzLjI3IiB5Mj0iNTMyLjg4Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNsIiBpZD0iQyIgeDE9IjM3OS42MSIgeDI9IjM2Ni4zMiIgeTE9IjQ3NC41MSIgeTI9IjUwMi4xIj48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNtIiBpZD0iRCIgeDE9IjM5Ni4yOCIgeDI9IjM1OC44NCIgeTE9IjM4OC4wOSIgeTI9IjQ2NS44NSI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iRSIgeDE9IjU3Mi4xNSIgeDI9IjU4Mi4zOCIgeTE9IjgzOC4xNCIgeTI9IjUxMC43MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM3MWU5NjAiPjwvc3RvcD4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjZWZmYzhiIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJGIiB4MT0iNTc5LjMxIiB4Mj0iNTgyLjMyIiB5MT0iNjA5LjA2IiB5Mj0iNTEyLjYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNzhlOTY4Ij48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2VjZmM3MSI+PC9zdG9wPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0ibiIgeDE9IjgzOC4zNCIgeDI9Ijg2NS4zMSIgeTE9IjU0MC41MyIgeTI9IjkxOC4xIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CiAgICAgIDxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2IwZDk2OCI+PC9zdG9wPgogICAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM0ZmQxNDEiPjwvc3RvcD4KICAgIDwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI24iIGlkPSJHIiB4MT0iODQ3LjMxIiB4Mj0iODU0LjI3IiB5MT0iNTkxLjg5IiB5Mj0iNjg5LjMyIj48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJvIiB4MT0iODEyLjQ3IiB4Mj0iNzk5LjU2IiB5MT0iOTA1Ljk1IiB5Mj0iNjEzLjUiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjYmJhZjUxIj48L3N0b3A+CiAgICAgIDxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2ZjZWI2YyI+PC9zdG9wPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjbSIgaWQ9IkgiIHgxPSI1MjIuNzYiIHgyPSI1MjcuOTgiIHkxPSI4MTcuMDIiIHkyPSI2OTkuMTUiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI20iIGlkPSJJIiB4MT0iNzg2LjYxIiB4Mj0iODA3LjYyIiB5MT0iMTExMy4xMSIgeTI9IjYzOC4zMyI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjbyIgaWQ9IkoiIHgxPSIxMzA5LjQ2IiB4Mj0iMTMzMy44OSIgeTE9Ijc0Ny43MiIgeTI9IjkwMy44MiI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iSyIgeDE9IjQ5MC44MyIgeDI9IjYzMS43MyIgeTE9Ijk4MS40NSIgeTI9IjcwMi4zNiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM1MWI4NDYiPjwvc3RvcD4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNDU4ODNmIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNtIiBpZD0iTCIgeDE9IjIzMC43IiB4Mj0iMjM5LjkyIiB5MT0iNzA4LjEzIiB5Mj0iNzgwLjA5Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNsIiBpZD0iTSIgeDE9IjI0Ni41OSIgeDI9IjI0OS4zIiB5MT0iNjg3LjA5IiB5Mj0iNzQ0LjQ1Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNsIiBpZD0iTiIgeDE9IjI0MS42MSIgeDI9IjI0NC4zIiB5MT0iNjg3LjMzIiB5Mj0iNzQ0LjM0Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IGlkPSJwIiB4MT0iLTI2NzAuNjEiIHgyPSItMjYzNC4yNiIgeTE9IjQwNC43OCIgeTI9IjYzNyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAtMjM5MC44OCAwKSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM1OWI4NGYiPjwvc3RvcD4KICAgICAgPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMzg4ODMwIj48L3N0b3A+CiAgICA8L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNwIiBpZD0iTyIgeDE9IjIxMS4yMSIgeDI9IjI0Ny41MSIgeTE9IjQwNS45IiB5Mj0iNjM3Ljg3Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNwIiBpZD0iUCIgeDE9IjI2NC41OSIgeDI9IjI3Ni40MiIgeTE9IjU3Ni42NyIgeTI9IjYxMi4xNyI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9IlEiIHgxPSIyNjMuNjUiIHgyPSIyNjQuMzYiIHkxPSI0NjAuMzQiIHkyPSI0MzcuNzEiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI20iIGlkPSJSIiB4MT0iMTQ5NS4yNCIgeDI9IjE1MDQuMzQiIHkxPSI3NjIuOTMiIHkyPSI4MzMuOTIiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2wiIGlkPSJTIiB4MT0iMTU0NS40OCIgeDI9IjEzNTUuMDgiIHkxPSI3MjMuOTQiIHkyPSI3MjMuOTQiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2wiIGlkPSJUIiB4MT0iMTQ5OC4yMiIgeDI9IjE0MTQuMTUiIHkxPSI2NjguNDgiIHkyPSI2NjguNDgiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2wiIGlkPSJVIiB4MT0iMTUzMS4wOCIgeDI9IjE0MjcuMDkiIHkxPSI3MjguNzUiIHkyPSI3MjguNzUiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI3AiIGlkPSJWIiB4MT0iMTQ0NC4zIiB4Mj0iMTUwMy40OSIgeTE9IjIwNy44MyIgeTI9IjY3My45MyI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9IlciIHgxPSIxNDY0LjI3IiB4Mj0iMTUyMy40NiIgeTE9IjIwNS4zMSIgeTI9IjY3MS40MSI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9IlgiIHgxPSIxNDQ1LjQyIiB4Mj0iMTQ3OS43NyIgeTE9IjQwNy44MyIgeTI9IjU3MS4zMSI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9IlkiIHgxPSIxNDU2LjY4IiB4Mj0iMTQ1OS43NCIgeTE9IjI5MS4yNCIgeTI9IjM3OC44MiI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjbSIgaWQ9IloiIHgxPSIxMzMwLjg1IiB4Mj0iMTMzOS45NSIgeTE9Ijc2Mi45MyIgeTI9IjgzMy45MiI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjbCIgaWQ9ImFhIiB4MT0iMTMzMy4yNiIgeDI9IjEzMTIuMzkiIHkxPSI3MjIuMzYiIHkyPSI4NTAuMDYiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2wiIGlkPSJhYiIgeDE9IjEzMzMuMzIiIHgyPSIxMzEyLjg0IiB5MT0iNzIyIiB5Mj0iODQ3LjMzIj48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNwIiBpZD0iYWMiIHgxPSIxMjcxLjMyIiB4Mj0iMTM1Ny43OSIgeTE9IjMyMS4wNyIgeTI9IjcwOC40NiI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9ImFkIiB4MT0iMTI4Ni42IiB4Mj0iMTM3My4wNyIgeTE9IjMxNy42NyIgeTI9IjcwNS4wNSI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9ImFlIiB4MT0iNDU3LjgzIiB4Mj0iMzYzLjE0IiB5MT0iNTguMzkiIHkyPSI1OC4zOSIgZ3JhZGllbnRUcmFuc2Zvcm09InJvdGF0ZSgyNi40OCAtMTE1LjMwNyAyMTAzLjI5MSkiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI3AiIGlkPSJhZiIgeDE9IjEzMzkuNDUiIHgyPSIxMjQ0Ljc2IiB5MT0iNDI2LjY2IiB5Mj0iNDI2LjY2Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNwIiBpZD0iYWciIHgxPSIxMzIyLjM2IiB4Mj0iMTI0MC41NyIgeTE9IjQ0Mi42NyIgeTI9IjQ0Mi42NyI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjbSIgaWQ9ImFoIiB4MT0iOTUuMjkiIHgyPSIxMDQuNTIiIHkxPSI3MTguMjMiIHkyPSI3OTAuMTkiPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI3AiIGlkPSJhaSIgeDE9IjE3OC4zIiB4Mj0iMjAxLjU5IiB5MT0iMTA4LjQxIiB5Mj0iNzc2IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKC0xMjkuNzEgLTczLjczKSI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9ImFqIiB4MT0iNzEuOTIiIHgyPSI5NS4yOSIgeTE9IjIwLjI4IiB5Mj0iNjg5Ljk2Ij48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNwIiBpZD0iYWsiIHgxPSIxMzEuNzciIHgyPSIxMzQuODUiIHkxPSIzOTcuNjEiIHkyPSI0ODUuNzciPjwvbGluZWFyR3JhZGllbnQ+CiAgICA8bGluZWFyR3JhZGllbnQgeGxpbms6aHJlZj0iI2wiIGlkPSJhbCIgeDE9IjkxLjM3IiB4Mj0iMTUwLjQ1IiB5MT0iNjU2LjQ3IiB5Mj0iODMzLjcyIj48L2xpbmVhckdyYWRpZW50PgogICAgPGxpbmVhckdyYWRpZW50IHhsaW5rOmhyZWY9IiNwIiBpZD0iYW0iIHgxPSIyNDIxLjEiIHgyPSIyNDIxLjUiIHkxPSI5NTUuMDciIHkyPSI5NDIuNTEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjQ3IC0uMTQgLjMxIC45OSAtMTMxOC4yMSAtMTUzLjQ0KSI+PC9saW5lYXJHcmFkaWVudD4KICAgIDxsaW5lYXJHcmFkaWVudCB4bGluazpocmVmPSIjcCIgaWQ9ImFuIiB4MT0iNzg1Ljc4IiB4Mj0iNzg2LjA2IiB5MT0iMTMyMC41OSIgeTI9IjEzMTEuNjQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLjg2IC0uMzIgLjQ4IDEuMzIgLTEyMDcuNTcgLTEwNzkuNTgpIj48L2xpbmVhckdyYWRpZW50PgogICAgPGZpbHRlciBpZD0iYSIgd2lkdGg9Ijc5Ni41MSIgaGVpZ2h0PSIzMjc2NiIgeD0iNzc1LjU4IiB5PSItODY0MiIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0iI2ZmZiIgcmVzdWx0PSJiZyI+PC9mZUZsb29kPgogICAgICA8ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJiZyI+PC9mZUJsZW5kPgogICAgPC9maWx0ZXI+CiAgICA8ZmlsdGVyIGlkPSJiIiB3aWR0aD0iNzYyLjA3IiBoZWlnaHQ9IjMyNzY2IiB4PSIzNy45MyIgeT0iLTg2NDIiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiNmZmYiIHJlc3VsdD0iYmciPjwvZmVGbG9vZD4KICAgICAgPGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iYmciPjwvZmVCbGVuZD4KICAgIDwvZmlsdGVyPgogICAgPGZpbHRlciBpZD0iZSIgd2lkdGg9Ijc5Ni41MSIgaGVpZ2h0PSIzODkuMTUiIHg9Ijc3NS41OCIgeT0iMTgwLjkiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPGZlRmxvb2QgZmxvb2QtY29sb3I9IiNmZmYiIHJlc3VsdD0iYmciPjwvZmVGbG9vZD4KICAgICAgPGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iYmciPjwvZmVCbGVuZD4KICAgIDwvZmlsdGVyPgogICAgPGZpbHRlciBpZD0iZyIgd2lkdGg9Ijc2Mi4wNyIgaGVpZ2h0PSIzNzMuNTUiIHg9IjM3LjkzIiB5PSIxNjMuNyIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8ZmVGbG9vZCBmbG9vZC1jb2xvcj0iI2ZmZiIgcmVzdWx0PSJiZyI+PC9mZUZsb29kPgogICAgICA8ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJiZyI+PC9mZUJsZW5kPgogICAgPC9maWx0ZXI+CiAgICA8bWFzayBpZD0iciIgd2lkdGg9Ijc5Ni41MSIgaGVpZ2h0PSIzODkuMTUiIHg9Ijc3NS41OCIgeT0iMTgwLjkiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8ZyBmaWx0ZXI9InVybCgjZSkiIG1hc2s9InVybCgjZCkiPgogICAgICAgIDxwYXRoIGZpbGw9InVybCgjYykiIGQ9Ik0xNDUyLDMzMGExMjAuNzksMTIwLjc5LDAsMCwwLTE5LjgsMS42NCwxMjAuMTYsMTIwLjE2LDAsMCwwLTEzNS40Mi02Mi4zNCwxNTguMjksMTU4LjI5LDAsMCwwLTE5NC4yNS00MSwxMDIuNjcsMTAyLjY3LDAsMCwwLTE3Ni40NSw1LjgzLDEyMC4yNiwxMjAuMjYsMCwxLDAtMzAuMjksMjM2LjY1YzU0LDAsMTk2Ljc3LDU2Ljc3LDI3OC40NSw1Ni43N2ExNTcuNTksMTU3LjU5LDAsMCwwLDk3Ljg0LTMzLjg3LDEyMC4yNCwxMjAuMjQsMCwwLDAsNzIuODUsMTAuN0ExMjAuMDYsMTIwLjA2LDAsMSwwLDE0NTIsMzMwWiIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BhdGg+CiAgICAgIDwvZz4KICAgIDwvbWFzaz4KICAgIDxtYXNrIGlkPSJzIiB3aWR0aD0iNzYyLjA3IiBoZWlnaHQ9IjM3My41NSIgeD0iMzcuOTMiIHk9IjE2My43IiBtYXNrVW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KICAgICAgPGcgZmlsdGVyPSJ1cmwoI2cpIiBtYXNrPSJ1cmwoI2YpIj4KICAgICAgICA8cGF0aCBmaWxsPSJ1cmwoI2gpIiBkPSJNODAwLDQxNC41OGE5Mi42Niw5Mi42NiwwLDAsMC0xMTEuODEtOTAuNjVBMTQ0LjE1LDE0NC4xNSwwLDAsMCw0ODIuOTIsMjEyLjU5YTExNC40NSwxMTQuNDUsMCwwLDAtMjA1LjE3LDM5LjE2LDEzNC43OSwxMzQuNzksMCwwLDAtMTQuNDMtLjc4QTEzMi43NSwxMzIuNzUsMCwwLDAsMTMwLjU3LDM4My43MmMwLC41NSwwLDEuMSwwLDEuNjZhNzYuNzcsNzYuNzcsMCwxLDAtMTUuOSwxNTEuODhINzI3LjE0djBhNDQsNDQsMCwwLDAsNDIuMi01My44NEE5Mi4zOCw5Mi4zOCwwLDAsMCw4MDAsNDE0LjU4WiIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BhdGg+CiAgICAgIDwvZz4KICAgIDwvbWFzaz4KICA8L2RlZnM+CiAgPGc+CiAgICA8cmVjdCB3aWR0aD0iMTYwMCIgaGVpZ2h0PSI1ODAuMzkiIHk9Ii42NCIgZmlsbD0idXJsKCNxKSI+PC9yZWN0PgogICAgPGcgbWFzaz0idXJsKCNyKSI+CiAgICAgIDxwYXRoIGZpbGw9InVybCgjaSkiIGQ9Ik0xNDUyLDMzMGExMjAuNzksMTIwLjc5LDAsMCwwLTE5LjgsMS42NCwxMjAuMTYsMTIwLjE2LDAsMCwwLTEzNS40Mi02Mi4zNCwxNTguMjksMTU4LjI5LDAsMCwwLTE5NC4yNS00MSwxMDIuNjcsMTAyLjY3LDAsMCwwLTE3Ni40NSw1LjgzLDEyMC4yNiwxMjAuMjYsMCwxLDAtMzAuMjksMjM2LjY1YzU0LDAsMTk2Ljc3LDU2Ljc3LDI3OC40NSw1Ni43N2ExNTcuNTksMTU3LjU5LDAsMCwwLDk3Ljg0LTMzLjg3LDEyMC4yNCwxMjAuMjQsMCwwLDAsNzIuODUsMTAuN0ExMjAuMDYsMTIwLjA2LDAsMSwwLDE0NTIsMzMwWiI+PC9wYXRoPgogICAgPC9nPgogICAgPGcgbWFzaz0idXJsKCNzKSI+CiAgICAgIDxwYXRoIGZpbGw9InVybCgjdCkiIGQ9Ik04MDAsNDE0LjU4YTkyLjY2LDkyLjY2LDAsMCwwLTExMS44MS05MC42NUExNDQuMTUsMTQ0LjE1LDAsMCwwLDQ4Mi45MiwyMTIuNTlhMTE0LjQ1LDExNC40NSwwLDAsMC0yMDUuMTcsMzkuMTYsMTM0Ljc5LDEzNC43OSwwLDAsMC0xNC40My0uNzhBMTMyLjc1LDEzMi43NSwwLDAsMCwxMzAuNTcsMzgzLjcyYzAsLjU1LDAsMS4xLDAsMS42NmE3Ni43Nyw3Ni43NywwLDEsMC0xNS45LDE1MS44OEg3MjcuMTR2MGE0NCw0NCwwLDAsMCw0Mi4yLTUzLjg0QTkyLjM4LDkyLjM4LDAsMCwwLDgwMCw0MTQuNThaIj48L3BhdGg+CiAgICA8L2c+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2spIiBkPSJNMTQ5LjIyLDUzNi45MXMyNzcuNi0xNDgsMzI5LjQ0LTE2Ni4zNCwyOTcsMTY4LjE3LDI5NywxNjguMTdaIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2opIiBkPSJNMjUxLjMsNTM2LjkxUzQxOSw1NTMuMzMsNDUwLjM3LDQzMC43N2MtMjguNDMtMTMuNjQsNDAuNjYtNjQuNTcsMjguMjktNjAuMi01MS44NCwxOC4zMi0zMjkuNDQsMTY2LjM0LTMyOS40NCwxNjYuMzRsNjI2LjQ2LDEuODMtLjQtLjNaIiBvcGFjaXR5PSIuNzIiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjdSkiIGQ9Ik03MzcuMTEsNTMzLjE1czIzOC4xNS0xMjcsMjgyLjYzLTE0Mi43LDI1NC44MSwxNDQuMjcsMjU0LjgxLDE0NC4yN1oiPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjdikiIGQ9Ik05MTQuNjksNDk0czc1LjM2LTkwLjY1LDE1MC40LTkzLjc3Yy0yMC04Ljc1LTM2LjE5LTEzLTQ1LjM1LTkuNzQtNDQuNDgsMTUuNzItMjgyLjYzLDE0Mi43LTI4Mi42MywxNDIuN2w1MzcuNDQsMS41Ny0uMjctLjJaIiBvcGFjaXR5PSIuNzIiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjdykiIGQ9Ik00NjIuNDUsNTEyLjQxczI2My43Ni0xNjMsMzA5Ljc5LTE1OS4zNGMxNy4yMywxLjM2LDYxLDM5LjQ4LDgwLjA3LDUzLjQzUzkyNiw0MzQuMzcsOTY0LjA3LDQ0NC42MSwxMDg4LjcsNTEwLDEwODguNyw1MTBsLTMzMyw0My4zMloiPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjeCkiIGQ9Ik03NzIuMjQsMzczYzE3LjIzLDEuMzYsOTkuMTUsNDcuNDUsODAuMDcsMzMuNXMtNjIuODQtNTIuMDctODAuMDctNTMuNDNjLTQ2LTMuNjMtMzA5Ljc5LDE1OS4zNC0zMDkuNzksMTU5LjM0bDkxLjA5LDIxLjA5QzgzMiw1MTEsNzM1LjIxLDM3MC4wOCw3NzIuMjQsMzczWiIgb3BhY2l0eT0iLjcyIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6c2NyZWVuIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI3kpIiBkPSJNMTYwMCw0MzYuNTFzLTQyMi43Mi0xNC4yMS04MDAsODMuNzFTMjkzLjQ2LDY5Ny43NiwyOTMuNDYsNjk3Ljc2TDE2MDAsNjc1LjU1WiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCN6KSIgZD0iTTgwMCw1MjAuMjJDNDIyLjcyLDYxOC4xNCwyOTMuNDYsNjk3Ljc2LDI5My40Niw2OTcuNzZoMEMzMzguNTYsNjc0LjI3LDQ5OC4wNiw2MDcuMzUsODAwLDUyOWMzNzcuMjgtOTcuOTIsODAwLTkyLjQ3LDgwMC05Mi40N2gwUzExNzcuMjgsNDIyLjMsODAwLDUyMC4yMloiIG9wYWNpdHk9Ii40NiIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOnNjcmVlbiI+PC9wYXRoPgogICAgPHJlY3Qgd2lkdGg9IjguMTUiIGhlaWdodD0iNDEuNTciIHg9Ijk0Ni43MyIgeT0iNTI4LjQ4IiBmaWxsPSJ1cmwoI2wpIj48L3JlY3Q+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI20pIiBkPSJNOTMyLjc1LDM3My4zcy0xNy42NCw2MS4xNy0xMi4wNiwxMDMuNTQsMTguNTQsNzAuNTQsNDAuMTQsNTcuMzIsMjItNjEuODksMjAuNzctODAuMTYtMTIuMTMtNTEuNDItMTIuMTMtNTEuNDItNC45My01Ny40NC0xOC42Ny01Mi4yMVM5MzIuNzUsMzczLjMsOTMyLjc1LDM3My4zWiI+PC9wYXRoPgogICAgPHJlY3Qgd2lkdGg9IjguMTUiIGhlaWdodD0iNDEuNTciIHg9IjEwNTAuMzQiIHk9IjU1MS4yNiIgZmlsbD0idXJsKCNBKSI+PC9yZWN0PgogICAgPHBhdGggZmlsbD0idXJsKCNCKSIgZD0iTTEwNDAuNTMsNDM0LjYzcy0xMy41Niw0Ny4wNS05LjI3LDc5LjYzLDE0LjI1LDU0LjI2LDMwLjg3LDQ0LjA5LDE2Ljk0LTQ3LjYsMTYtNjEuNjUtOS4zMy0zOS41NS05LjMzLTM5LjU1UzEwNjUsNDEzLDEwNTQuNDIsNDE3LDEwNDAuNTMsNDM0LjYzLDEwNDAuNTMsNDM0LjYzWiI+PC9wYXRoPgogICAgPHJlY3Qgd2lkdGg9IjYuMDUiIGhlaWdodD0iMzAuODYiIHg9IjM2OC4wOCIgeT0iNDc2LjczIiBmaWxsPSJ1cmwoI0MpIj48L3JlY3Q+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI0QpIiBkPSJNMzYyLjEzLDQwMnMtOC44MiwzMC41OC02LDUxLjc3LDkuMjcsMzUuMjcsMjAuMDcsMjguNjYsMTEtMzEsMTAuMzktNDAuMDgtNi4wNy0yNS43MS02LjA3LTI1LjcxLTIuNDYtMjguNzItOS4zMy0yNi4xMVMzNjIuMTMsNDAyLDM2Mi4xMyw0MDJaIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI0UpIiBkPSJNMCw1MDUuODFzMTExLjM3LTksNDMxLjQ2LDMuMWM0MDYuMDgsMTUuMzIsNzMwLjEyLDEwOC40NSw3MzAuMTIsMTA4LjQ1TDAsNzg2LjY0WiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNGKSIgZD0iTTQzMS40Niw1MTdjMzQ3LjYsMTMuMTIsNjU0LjUyLDgwLjQsNzMwLjEyLDEwMC4zM2gwcy0zMjQtOTMuMTMtNzMwLjEyLTEwOC40NUMxMTEuMzcsNDk2LjgzLDAsNTA1LjgxLDAsNTA1LjgxSDBTMTExLjM3LDUwNSw0MzEuNDYsNTE3WiIgb3BhY2l0eT0iLjQiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjbikiIGQ9Ik0xMDguNTgsNzUxLjQ1UzQ3Miw2MzMuNzEsODU0LjI5LDYwOS41NiwxNjAwLDYyNy42NywxNjAwLDYyNy42N1Y5MDBIMTA4LjU4WiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNHKSIgZD0iTTg1NC4yOSw2MDkuNTZDNDcyLDYzMy43MSwxMDguNTgsNzUxLjQ1LDEwOC41OCw3NTEuNDVoMFM0NzIsNjQ2LjM0LDg1NC4yOSw2MjIuMTksMTYwMCw2MjcuNjcsMTYwMCw2MjcuNjdoMFMxMjM2LjYzLDU4NS40MSw4NTQuMjksNjA5LjU2WiIgb3BhY2l0eT0iLjM4IiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6c2NyZWVuIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI28pIiBkPSJNNjc1LjA5LDYyNy4yOGw2Ni41Mi03LjY1czc3LjkyLTEuOTQsMTQ1Ljk1LDUzLjUzYzc2LjkxLDYyLjcyLDI2Ljc2LDExMy40OCwyNi43NiwxMTMuNDhsLTg2LjIxLDIzLjg0Uzg3NS43LDc1MS45Miw4NDYuOTIsNzAwQzgxNi4xOSw2NDQuNjIsNjc1LjA5LDYyNy4yOCw2NzUuMDksNjI3LjI4WiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNIKSIgZD0iTTEwNTAuNTIsNzk2LjExUzc3OS4xMiw3MjAuOSw0MTIuNiw3MjAuOUguMThzOTYuOTEsNi44Niw0MTkuNjIsNi44NmMzNjYuNTIsMCw2MzAuNzIsNjguMzUsNjMwLjcyLDY4LjM1WiIgb3BhY2l0eT0iLjY1IiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6c2NyZWVuIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI0kpIiBkPSJNMCw3MjFINDEyLjQyYzM2Ni41MiwwLDYzNy45Miw3NS4yLDYzNy45Miw3NS4yczE0NS40NC0xNy44MSwzMTEtMTguNlMxNjAwLDc5MC4zNiwxNjAwLDc5MC4zNlY5MDBIMFoiPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjSikiIGQ9Ik0xMDUwLjM0LDc5Ni4xNmgwYTExMDguNTYsMTEwOC41NiwwLDAsMSwyNDMuMTUsODAuNTFMMTM0My42Myw5MDBIMTYwMGwtMTY2LjUyLTQ2LjA2YTIyMDguNTIsMjIwOC41MiwwLDAsMC0zMjMuODctNjRoMFoiPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjSykiIGQ9Ik0zMDcuMzgsNzIwLjkyczQwLjQ0LTI0Ljc3LDgyLjY0LTI3LjI3YTYyLjMzLDYyLjMzLDAsMCwxLDM5LjQ2LDExLjA5YzE3LjE2LDExLjY4LDQwLjIyLDE1LjU2LDYxLjI3LDkuODVhMTQ3LjY5LDE0Ny42OSwwLDAsMSw3Ni0uODVjMjYuMzUsNi44Miw0MC4xOSwxOC4yNCw0Ny4zNiwyOS4zMiwxMC4yMiwxNS44MywzMCwyNS43Myw1MS41MSwyNSwxNi40NS0uNTQsMzUuODIuNjcsNTUuMjUsNkM3NzEsNzg4LDc4MC42Myw4NDUuNyw3ODAuNjMsODQ1LjdMODQ2LjkyLDkwMEg3MTguMDhTNjA2LjI5LDc1MS42MSwzMDcuMzgsNzIwLjkyWiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNMKSIgZD0iTTI3MC40MSw3MzcuNDFjMjEuNTIsNy43Ny0xLjYsMTIuNzctMjkuODksMTIuODksMCwwLTIzLjE2LDAtMzUuMTgtNC44Mi02LjE2LTIuNDctMjkuMzMtMTMuMDgtMS0xMy4wOEMyMTguMDgsNzMyLjQsMjY0LjA5LDczNS4xMywyNzAuNDEsNzM3LjQxWiIgb3BhY2l0eT0iLjMyIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bXVsdGlwbHkiPjwvcGF0aD4KICAgIDxwb2x5Z29uIGZpbGw9InVybCgjTSkiIHBvaW50cz0iMjU2Ljc1IDc1MC4zIDI0MC41MiA3NTAuMyAyNDIuNTIgNjg5LjM1IDI1NS43NSA2ODkuMzUgMjU2Ljc1IDc1MC4zIj48L3BvbHlnb24+CiAgICA8cG9seWdvbiBmaWxsPSJ1cmwoI04pIiBwb2ludHM9IjI0Mi41MiA2ODkuMzUgMjQwLjUyIDc1MC4zIDI0OC42MyA3NTAuMyAyNDUuNTggNjg5LjM1IDI0Mi41MiA2ODkuMzUiIG9wYWNpdHk9Ii4yNyIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BvbHlnb24+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI3ApIiBkPSJNMjQ4Ljc3LDY5My41MWMxOS40Ny0uNjcsNDMuMzItMTEuODIsNDMuMTYtNjQuODdMMjgwLjA2LDUxOGwtNC4yLTE2LjU3LTguMjEtNjVjLS45MS04LjE3LTYuODUtMTUuMTUtMTcuMzUtMTUuMTVsLS44OC05LjQ4Yy0xMC40LDAtMTguNzIsMTYtMjIuNDgsMzcuMDgtMywxNy03LjU1LDY5LjE1LTcuNTUsNjkuMTVzLTUuMzYtNC4wNi01Ljg3LTIuMjNjLTUsMTguMDctNy44NiwxMTIuNDYtNy44NiwxMTIuNDZDMjAzLjEzLDY0OC4xNSwyMTUuNTQsNjk0LjY2LDI0OC43Nyw2OTMuNTFaIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI08pIiBkPSJNMjI1LjgyLDYyOC4yMnMyLjg3LTk0LjM5LDcuODYtMTEyLjQ2Yy41MS0xLjgzLDUuODcsMi4yMyw1Ljg3LDIuMjNzNC41Mi01Mi4xMSw3LjU1LTY5LjE1YzEuOTEtMTAuNzQsNS0yMC4xNCw5LTI2Ljc5YTIwLjIyLDIwLjIyLDAsMCwwLTUuNzUtLjgxbC0uODgtOS40OGMtMTAuNCwwLTE4LjcyLDE2LTIyLjQ4LDM3LjA4LTMsMTctNy41NSw2OS4xNS03LjU1LDY5LjE1cy01LjM2LTQuMDYtNS44Ny0yLjIzYy01LDE4LjA3LTcuODYsMTEyLjQ2LTcuODYsMTEyLjQ2LTIuNTMsMTkuOTMsOS44OCw2Ni40NCw0My4xMSw2NS4yOWE0Ny44MSw0Ny44MSwwLDAsMCw5Ljc3LTEuMzFDMjMzLjExLDY4NC41NywyMjMuNTcsNjQ1LjkxLDIyNS44Miw2MjguMjJaIiBvcGFjaXR5PSIuMjkiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTptdWx0aXBseSI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNQKSIgZD0iTTI1NS4xNSw1NzkuNDhhMjkuMTEsMjkuMTEsMCwwLDEsMTIuMjEsMGM2LjY2LDEuNDQsMTMuMjMsMTQuMSwxMy4yMywxNC4xQTU1LjM4LDU1LjM4LDAsMCwwLDI1NS4xNSw1NzkuNDhaIiBvcGFjaXR5PSIuNTMiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjUSkiIGQ9Ik0yNjguNTQsNDQzLjQxbDEuODcsMTQuODJzLTgtMTcuNzEtMTEuODctMTkuNjNTMjY0LjY0LDQzNy42NSwyNjguNTQsNDQzLjQxWiIgb3BhY2l0eT0iLjUzIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6c2NyZWVuIj48L3BhdGg+CiAgICA8ZWxsaXBzZSBjeD0iMTQ5OS4zIiBjeT0iNzk0LjYxIiBmaWxsPSJ1cmwoI1IpIiBvcGFjaXR5PSIuMzIiIHJ4PSI1OC43NiIgcnk9IjkuNiIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L2VsbGlwc2U+CiAgICA8cG9seWdvbiBmaWxsPSJ1cmwoI1MpIiBwb2ludHM9IjE0OTcuOTUgNzkyLjI1IDE0NzAuNDcgNzkyLjI1IDE0NzUuOTcgNjg0LjcyIDE0NjAuODYgNjU1LjYzIDE0ODQuMjEgNjgxLjMzIDE1MTMuNzUgNjY1LjI1IDE0OTcuOTUgNjgxLjMzIDE0OTcuOTUgNzkyLjI1Ij48L3BvbHlnb24+CiAgICA8ZyBvcGFjaXR5PSIuMyIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij4KICAgICAgPHBvbHlnb24gZmlsbD0idXJsKCNUKSIgcG9pbnRzPSIxNDg0LjIxIDY4MS4zMyAxNDYwLjg2IDY1NS42MyAxNDczLjUzIDY4MC4wMiAxNDg0LjIxIDY4MS4zMyI+PC9wb2x5Z29uPgogICAgICA8cGF0aCBmaWxsPSJ1cmwoI1UpIiBkPSJNMTQ5MC4zLDY4NC45M3MzLjQ1LDIxLjQyLDMuNzYsMjguNjNjMi4wNiw0OC43Ny05LjIsNzguNjktOS4yLDc4LjY5SDE0OThWNjgxLjMzbDE1LjgtMTYuMDhaIj48L3BhdGg+CiAgICA8L2c+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI1YpIiBkPSJNMTQ4OSw2NzkuOTJjLTIxLjIyLS43OC01Ni4zMi0xNC42Ny02NC4wOS03OC01Ljk0LTQ4LjQ3LTQuNzMtMTA1LjUzLDAtMTU2LDEuMjUtMTMuMzQsOS4yMS0zLjY0LDEwLjk1LTE3LjM0LDMuNDMtMjcsNy44OC01NC40NCwxMy42NC04MS4xOSwyLTkuNDcsNi4zMS0xMS40NCw2LjgyLTIxLDIuMDgtMzkuMTYsMTguNzEtNzAuNSwzMi05Ny41OCwwLDAsMTIuNzEsMjcuNTksMjEuNzksNTQuNTgsNi42OSwxOS44OSw0LjMyLDMyLjI4LDUuNTIsMzcuNDEsMiw4LjY1LDcuODgsMTEuMzksOS43NywyMy45LDMuNzcsMjQuODUsMTMuMTIsMzkuODgsMTYuMjQsODkuMTIsMS40OCwyMy4zOC0uMTUsMzgsLjE0LDY3LjI3LDAsMCwxMS42Mi0yLjM3LDExLjMsNDhhMjY2LjA5LDI2Ni4wOSwwLDAsMS00LjU2LDQ2LjcyQzE1NDkuNzMsNjM0LjUzLDE1MTcuODMsNjgxLDE0ODksNjc5LjkyWiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNXKSIgZD0iTTE1NDEuOSw1MDFjLS4yOS0yOS4zMSwxLjM0LTQzLjg5LS4xNC02Ny4yNy0zLjEyLTQ5LjI0LTEyLjQ3LTY0LjI3LTE2LjI0LTg5LjEyLTEuODktMTIuNTEtNy43Ni0xNS4yNS05Ljc3LTIzLjktMS4yLTUuMTMsMS4xNy0xNy41Mi01LjUyLTM3LjQxLTkuMDgtMjctMjEuNzktNTQuNTgtMjEuNzktNTQuNTgtNC41Niw5LjMtOS41MiwxOS4xMS0xNC4xNSwyOS41NiwzLjEsNy44LDE0LjE1LTI5LjU2LDIyLjI5LDEzLjM3LDMuOSwyMC42MS0xMC4wNiw0NC40NC03LjU0LDQ5LjA2LDI0LjcxLDQ1LjE0LTMuNjMsMzguNTMtMS43NCw1MSwzLjc3LDI0Ljg1LDI3LjQ4LDQ0Ljg0LDM2Ljc1LDk4LjQyLDQsMjMuMDgtOS4xNSwxLjUzLTguODYsMzAuODRhMzEyLjU4LDMxMi41OCwwLDAsMS0xLjQ4LDg3Yy0zLjYsMjIuMDYsMTItNS4xNCwxNC43Myw4LjI2LDEyLDU5LjQxLTM5LDc1LjYyLTUzLjQ0LDgxLjM1YTU2LjM2LDU2LjM2LDAsMCwwLDE0LjEyLDIuMzVjMjguODMsMS4wNiw2MC43My00NS4zOSw1OS41Mi04NC4yQTI2Ni4wOSwyNjYuMDksMCwwLDAsMTU1My4yLDU0OUMxNTUzLjUyLDQ5OC42NCwxNTQxLjksNTAxLDE1NDEuOSw1MDFaIiBvcGFjaXR5PSIuNDkiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTptdWx0aXBseSI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNYKSIgZD0iTTE0MzUuODcsNDI4LjUzczE1LjM3LDMuNjgsMjUsMTEuOTIsMjYuNDQsMzEuMSwyNi40NCwzMS4xLTIzLjUzLTIxLjQyLTM4LjgxLTI4LjctMjMuNTcsMy0yMy41NywzQTIzLjcyLDIzLjcyLDAsMCwwLDE0MzUuODcsNDI4LjUzWiIgb3BhY2l0eT0iLjQ5IiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6bXVsdGlwbHkiPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjWSkiIGQ9Ik0xNDU2LjExLDMzNS41NHMtNS4zNSw1Ljg1LTYuNiwxMS44LTUuNTEsMjcuOTMtNS41MSwyNy45MywxOC4yOC00MC4yOCwyOS42MS00Ni40NkMxNDczLjYxLDMyOC44MSwxNDY5LjIzLDMyNy4zLDE0NTYuMTEsMzM1LjU0WiIgb3BhY2l0eT0iLjUzIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6c2NyZWVuIj48L3BhdGg+CiAgICA8ZWxsaXBzZSBjeD0iMTMzNC45MSIgY3k9Ijc5NC42MSIgZmlsbD0idXJsKCNaKSIgb3BhY2l0eT0iLjMyIiByeD0iNTguNzYiIHJ5PSI5LjYiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTptdWx0aXBseSI+PC9lbGxpcHNlPgogICAgPHBvbHlnb24gZmlsbD0idXJsKCNhYSkiIHBvaW50cz0iMTMzNy43NyA3OTIuMzcgMTMxNy42OSA3OTIuMzcgMTMyMC41NiA3MDIuNTMgMTMzNy43NyA3MDMuNDggMTMzNy43NyA3OTIuMzciPjwvcG9seWdvbj4KICAgIDxwYXRoIGZpbGw9InVybCgjYWIpIiBkPSJNMTMyMC41Niw3MDIuNTNsMCwuMzNzMTIuNzYsMTEuMzksMTMuMjIsMjguOGMuNCwxNS4yMy01LjU2LDYwLjcxLTUuNTYsNjAuNzFoOS41N1Y3MDMuNDhaIiBvcGFjaXR5PSIuMjkiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTptdWx0aXBseSI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNhYykiIGQ9Ik0xMzEyLjg5LDMzNi4xNWE1MC40OSw1MC40OSwwLDAsMC02LjY1LDEzLjY3Yy05LjExLDMwLjU5LTM2LjEsMTIzLjUxLTM2LDE1MCwuMDksMzEuODctOS4xNyw5Ljg0LTkuMTcsNjEuNDNzMTUuMDksMTMyLjk0LDU0LDE0My44Niw3MS43Ny0yOC4zOCw3MS4yNi05Mi41M2MtLjE2LTE5Ljc5LTExLjc0LTIzLjgxLTExLjc0LTIzLjgxcy0zLjMxLTY2LjQtNC41OC0xMTQuNjZjLTIuMy04Ny4xMy00MS4yOC0xNzYuNTYtNDEuMjgtMTc2LjU2cy0xNC45LDIyLjE3LTEzLjc2LDMwQTEyLDEyLDAsMCwxLDEzMTIuODksMzM2LjE1WiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNhZCkiIGQ9Ik0xMzc0LjU1LDU4OC43OHMtMy4zMS02Ni4zOS00LjU4LTExNC42NWMtMi4zLTg3LjE0LTQxLjI4LTE3Ni41Ny00MS4yOC0xNzYuNTdzLTUsMjUuNTEsNy4xMSw0Ny4xNGM1LjgsMTUuODQtNS4zLDEzLjUyLDEuMjksNDAuNzIsMywxMi4yMiwxNC44NiwyLjU2LDE0Ljg2LDQwLjY3LDAsMTYuNTcsMS42LDMxLjYtMi4xNCw0OC0xMC4yMSw0NC43OC01LjU5LDc5LS44Nyw5Ny45MSwxLjEsNC40My0xMi4xLDE3LjkzLTExLjE3LDIwLjYzczguMzYtLjExLDEzLTIuMTZBNy40Niw3LjQ2LDAsMCwxLDEzNTksNTkyYzMuMjUsMy4yMSw3LDkuMzcsNy4xMywyMC42NC40LDUxLjEtMjAuMzgsODYuNDQtNDguNTIsOTMuMTcsMzcuNzUsOC41MSw2OS4xOC0zMC40NSw2OC42OC05My4xN0MxMzg2LjEzLDU5Mi44MSwxMzc0LjU1LDU4OC43OCwxMzc0LjU1LDU4OC43OFoiIG9wYWNpdHk9Ii40OSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2FlKSIgZD0iTTEzMDAuMjMsNTExLjY4cy0yNS41NSwyLjI0LTMxLjUzLDcuMzFTMTI3NS42Niw0OTguMTgsMTMwMC4yMyw1MTEuNjhaIiBvcGFjaXR5PSIuNTMiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjYWYpIiBkPSJNMTI5OC43MSw0MzYuNGMzLjA5LTcuMjEsMjUtMjAuNiwyNS0yMC42QzEyOTUuNjYsNDE0LjY2LDEyOTUuNjIsNDQzLjYyLDEyOTguNzEsNDM2LjRaIiBvcGFjaXR5PSIuNTMiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjYWcpIiBkPSJNMTI4Nyw0NDcuNDhjMy45My00LjM2LDIxLjcyLTguNSwyMS43Mi04LjVDMTI5MC44MSw0MzEuMzMsMTI4My4wOCw0NTEuODMsMTI4Nyw0NDcuNDhaIiBvcGFjaXR5PSIuNTMiIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iPjwvcGF0aD4KICAgIDxwYXRoIGZpbGw9InVybCgjYWgpIiBkPSJNMTM1LDc0Ny41MWMyMS41MSw3Ljc3LTEuNiwxMi43Ny0yOS44OSwxMi44OSwwLDAtMjMuMTYsMC0zNS4xOC00LjgyLTYuMTctMi40Ny0yOS4zNC0xMy4wOC0xLTEzLjA4QzgyLjY4LDc0Mi41LDEyOC42OSw3NDUuMjMsMTM1LDc0Ny41MVoiIG9wYWNpdHk9Ii4zMiIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2FpKSIgZD0iTTk4LDMxMnMtNS4zNCwzNC42NC0xMS44NSw3Ny4yM0M4NSwzOTYuNTQsNzUuMTksNDA0LjEsNzQsNDExLjc2Yy03LjUzLDQ5LjQ0LTYuOTQsMTAzLTkuODUsMTI0LjE3LTYsNDMuNTEtNC42Nyw3NS42LDYsOTcuNTksNy4wNywxNC41NiwzNC4zMiw0MS45Myw2NC4wNiw5LjQzczE2LjYyLTEzMy42OCwxNi42Mi0xMzMuNjhMMTM4LjczLDQ4MS41UzEyMy45MSwyODcuNzYsOTgsMzEyWiI+PC9wYXRoPgogICAgPHBhdGggZmlsbD0idXJsKCNhaikiIGQ9Ik04Miw1OTMuNThjMi4xOC0yNC4zNS42LTM2LjYsMTMtNTguODYsMy41OS02LjQyLTExLjI4LTczLjUyLTMuNzUtMTIzLDEuMTctNy42NiwxNy4yOCwwLDEyLjEyLTIyLjU1LTYuMjgtMjcuNCwzLjc2LTcwLjQxLDEwLjA5LTY1Ljc5LTQuNi0xMS40OS05Ljc5LTE2Ljc5LTE1LjUyLTExLjQ0LDAsMC01LjM0LDM0LjY0LTExLjg1LDc3LjIzQzg1LDM5Ni41NCw3NS4xOSw0MDQuMSw3NCw0MTEuNzZjLTcuNTMsNDkuNDQtNi45NCwxMDMtOS44NSwxMjQuMTctNiw0My41MS00LjY3LDc1LjYsNiw5Ny41OSw1LjQsMTEuMTQsMjIuNiwyOS43NSw0My43LDIzLjM4QzEwMSw2NTMsNzcuNDYsNjQ0LjA4LDgyLDU5My41OFoiIG9wYWNpdHk9Ii4yOSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2FrKSIgZD0iTTEzOC43Myw0ODEuNWgwYTMzLjM4LDMzLjM4LDAsMCwxLTgtMzAuMDhsMy41OC0xNS42M1oiIG9wYWNpdHk9Ii4yOSIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOm11bHRpcGx5Ij48L3BhdGg+CiAgICA8cG9seWdvbiBmaWxsPSJ1cmwoI2FsKSIgcG9pbnRzPSIxMTcuODYgNzU4LjcxIDk5LjMxIDc1OC43MSAxMDEuMzEgNjUxLjQ5IDExNS44NiA2NTEuNDkgMTE3Ljg2IDc1OC43MSI+PC9wb2x5Z29uPgogICAgPHBhdGggZmlsbD0idXJsKCNhbSkiIGQ9Ik05Mi42Niw0MjkuMDdzNC0zLjU3LDctMi4xOCw4LjkyLDguOSw4LjkyLDguOVM5OS40NSw0MjcuMjgsOTIuNjYsNDI5LjA3WiIgb3BhY2l0eT0iLjUzIiBzdHlsZT0ibWl4LWJsZW5kLW1vZGU6c2NyZWVuIj48L3BhdGg+CiAgICA8cGF0aCBmaWxsPSJ1cmwoI2FuKSIgZD0iTTkzLjY1LDQxMC42NHMxMC4zNi04LDE1Ljc3LTYuNThjOC42NCwyLjI4LDExLjI5LDcuMTIsMTEuMjksNy4xMlMxMDYuMTgsNDA2LjQ5LDkzLjY1LDQxMC42NFoiIG9wYWNpdHk9Ii41MyIgc3R5bGU9Im1peC1ibGVuZC1tb2RlOnNjcmVlbiI+PC9wYXRoPgogIDwvZz4KPC9zdmc+";
@@ -0,0 +1,25 @@
1
+ const prefix: string = "Invariant failed";
2
+
3
+ export default function invariant(
4
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
5
+ condition: any,
6
+ // Not providing an inline default argument for message as the result is smaller
7
+ /**
8
+ * Can provide a string, or a function that returns a string for cases where
9
+ * the message takes a fair amount of effort to compute
10
+ */
11
+ message?: string | (() => string),
12
+ ): asserts condition {
13
+ if (condition) {
14
+ return;
15
+ }
16
+
17
+ // When not in production we allow the message to pass through
18
+ const provided: string | undefined = typeof message === "function" ? message() : message;
19
+
20
+ // Options:
21
+ // 1. message provided: `${prefix}: ${provided}`
22
+ // 2. message not provided: prefix
23
+ const value: string = provided ? `${prefix}: ${provided}` : prefix;
24
+ throw new Error(value);
25
+ }
@@ -0,0 +1,8 @@
1
+ import { Type, type TSchema, type StaticDecode, type StaticEncode } from "@sinclair/typebox";
2
+
3
+ export const jsonDate = Type.Transform(Type.String({ format: "date-time" }))
4
+ .Decode((value) => new Date(value)) // decode: number to Date
5
+ .Encode((value) => value.toISOString());
6
+
7
+ export type JsonDateObj = StaticDecode<typeof jsonDate>;
8
+ export type JsonDateStr = StaticEncode<typeof jsonDate>;
@@ -0,0 +1,282 @@
1
+ import type { TObject, TSchema } from "@sinclair/typebox";
2
+ import { createAJVInstance } from "../ajv";
3
+ import { cloneDeep } from "lodash-es";
4
+ import type Ajv from "ajv";
5
+
6
+ /**
7
+ * Clean all properties from custom metadata recursively. Custom metadata are key that:
8
+ * - Either with the name "metadata"
9
+ * - Or starting with "ui:"
10
+ * Also removes properties that have "ai:hidden" set to true
11
+ */
12
+ export function toLLMSchema<T extends TSchema = TObject>(schema: T, ajv?: Ajv): T {
13
+ return cleanSchemaRecursive(inlineSchemaRefs(schema, ajv ?? createAJVInstance())) as T;
14
+ }
15
+
16
+ /**
17
+ * Recursively removes custom metadata from schema and filters out properties with ai:hidden = true
18
+ */
19
+ function cleanSchemaRecursive(schema: TSchema): TSchema {
20
+ // Create a new object without custom metadata properties
21
+ const cleaned: Record<string, unknown> = {};
22
+
23
+ for (const [key, value] of Object.entries(schema)) {
24
+ // Skip metadata properties and ui: properties
25
+ if (key === "metadata" || key.startsWith("ui:")) {
26
+ continue;
27
+ }
28
+
29
+ // Handle nested objects and arrays
30
+ if (value && typeof value === "object") {
31
+ if (Array.isArray(value)) {
32
+ // Handle arrays - clean each item if it's a schema
33
+ cleaned[key] = value.map((item) => {
34
+ if (item && typeof item === "object" && isSchemaLike(item)) {
35
+ return cleanSchemaRecursive(item as TSchema);
36
+ }
37
+ return item;
38
+ });
39
+ } else if (isSchemaLike(value)) {
40
+ // Handle nested schemas
41
+ cleaned[key] = cleanSchemaRecursive(value as TSchema);
42
+ } else if (
43
+ key === "properties" ||
44
+ key === "definitions" ||
45
+ key === "$defs" ||
46
+ key === "patternProperties"
47
+ ) {
48
+ // Handle schema property collections - filter out properties with ai:hidden = true
49
+ const cleanedProps: Record<string, TSchema> = {};
50
+ for (const [propKey, propValue] of Object.entries(value)) {
51
+ if (propValue && typeof propValue === "object") {
52
+ // Check if this property should be hidden from AI
53
+ const propSchema = propValue as Record<string, unknown>;
54
+ if (propSchema["ai:hidden"] === true) {
55
+ continue; // Skip this property
56
+ }
57
+ cleanedProps[propKey] = cleanSchemaRecursive(propValue as TSchema);
58
+ } else {
59
+ cleanedProps[propKey] = propValue as TSchema;
60
+ }
61
+ }
62
+ cleaned[key] = cleanedProps;
63
+ } else {
64
+ // For other objects, recursively clean if they look like schemas
65
+ cleaned[key] = value;
66
+ }
67
+ } else {
68
+ // Keep primitive values as-is
69
+ cleaned[key] = value;
70
+ }
71
+ }
72
+
73
+ return cleaned as TSchema;
74
+ }
75
+
76
+ /**
77
+ * Helper function to determine if an object looks like a schema
78
+ */
79
+ function isSchemaLike(obj: unknown): boolean {
80
+ if (!obj || typeof obj !== "object") {
81
+ return false;
82
+ }
83
+
84
+ const schemaKeys = [
85
+ "type",
86
+ "$ref",
87
+ "properties",
88
+ "items",
89
+ "anyOf",
90
+ "oneOf",
91
+ "allOf",
92
+ "not",
93
+ "if",
94
+ "then",
95
+ "else",
96
+ ];
97
+ return schemaKeys.some((key) => key in obj);
98
+ }
99
+
100
+ interface SchemaWithDefs extends TSchema {
101
+ $defs?: Record<string, TSchema>;
102
+ }
103
+
104
+ /**
105
+ * Inlines referenced schemas from AJV into the schema's $defs section
106
+ * @param schema - The schema containing $ref references
107
+ * @param ajv - The AJV instance containing the referenced schemas
108
+ * @returns A new schema with references inlined in $defs
109
+ */
110
+ export function inlineSchemaRefs<T extends TSchema>(schema: T, ajv: Ajv) {
111
+ //
112
+ const inlinedSchema = cloneDeep(schema) as T & SchemaWithDefs;
113
+ // const inlinedSchema = JSON.parse(JSON.stringify(schema)) as T & SchemaWithDefs;
114
+ const collectedRefs = new Set<string>();
115
+
116
+ // Initialize $defs if it doesn't exist
117
+ if (!inlinedSchema.$defs) {
118
+ inlinedSchema.$defs = {};
119
+ }
120
+
121
+ /**
122
+ * Recursively traverse the schema to find all $ref references
123
+ */
124
+ function collectRefs(obj: unknown): void {
125
+ if (typeof obj !== "object" || obj === null) return;
126
+
127
+ if (Array.isArray(obj)) {
128
+ obj.forEach(collectRefs);
129
+ return;
130
+ }
131
+
132
+ for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {
133
+ if (key === "$ref" && typeof value === "string") {
134
+ // Extract the schema ID from the reference
135
+ if (!value.startsWith("#/")) {
136
+ collectedRefs.add(value);
137
+ }
138
+ } else {
139
+ collectRefs(value);
140
+ }
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Convert external $ref to local $defs reference
146
+ */
147
+ function convertRefsToLocal(obj: unknown, refMap: Map<string, string>): unknown {
148
+ if (typeof obj !== "object" || obj === null) return obj;
149
+
150
+ if (Array.isArray(obj)) {
151
+ return obj.map((item) => convertRefsToLocal(item, refMap));
152
+ }
153
+
154
+ const result: Record<string, unknown> = {};
155
+ for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {
156
+ if (key === "$ref" && typeof value === "string") {
157
+ const localRef = refMap.get(value);
158
+ result[key] = localRef || value;
159
+ } else {
160
+ result[key] = convertRefsToLocal(value, refMap);
161
+ }
162
+ }
163
+ return result;
164
+ }
165
+
166
+ // Collect all references in the schema
167
+ collectRefs(inlinedSchema);
168
+
169
+ // Map to track original ref -> local def reference
170
+ const refToLocalMap = new Map<string, string>();
171
+
172
+ // Process each collected reference
173
+ for (const refId of collectedRefs) {
174
+ // Get the schema from AJV
175
+ const referencedSchema = ajv.getSchema(refId);
176
+
177
+ if (!referencedSchema?.schema) {
178
+ // console.log(`Schema with ID "${refId}" not found in AJV instance`, { referencedSchema });
179
+ continue;
180
+ }
181
+
182
+ // Create a safe key for $defs (remove special characters, use last part of URI)
183
+ const defKey =
184
+ refId.replace(/[^a-zA-Z0-9_-]/g, "_").replace(/^_+|_+$/g, "") ||
185
+ refId
186
+ .split("/")
187
+ .pop()
188
+ ?.replace(/[^a-zA-Z0-9_-]/g, "_") ||
189
+ `ref_${Object.keys(inlinedSchema.$defs!).length}`;
190
+
191
+ // Ensure unique key
192
+ let uniqueDefKey = defKey;
193
+ let counter = 1;
194
+ while (inlinedSchema.$defs![uniqueDefKey]) {
195
+ uniqueDefKey = `${defKey}_${counter}`;
196
+ counter++;
197
+ }
198
+
199
+ // Add to $defs
200
+ const { $id, ...schemaWithoutId } = referencedSchema.schema as TSchema;
201
+ inlinedSchema.$defs![uniqueDefKey] = schemaWithoutId;
202
+
203
+ // Map original reference to local reference
204
+ refToLocalMap.set(refId, `#/$defs/${uniqueDefKey}`);
205
+ }
206
+
207
+ // Convert all external references to local $defs references
208
+ const finalSchema = convertRefsToLocal(inlinedSchema, refToLocalMap) as T & SchemaWithDefs;
209
+
210
+ // Recursively inline references in the newly added $defs schemas
211
+ if (finalSchema.$defs) {
212
+ // Keep processing until no new references are found
213
+ let foundNewRefs = true;
214
+ while (foundNewRefs) {
215
+ foundNewRefs = false;
216
+ const newRefsFound = new Set<string>();
217
+
218
+ // Check each $defs schema for new references
219
+ for (const [defKey, defSchema] of Object.entries(finalSchema.$defs)) {
220
+ const defCollectedRefs = new Set<string>();
221
+
222
+ // Collect refs specifically for this schema
223
+ function collectDefsRefs(obj: unknown): void {
224
+ if (typeof obj !== "object" || obj === null) return;
225
+
226
+ if (Array.isArray(obj)) {
227
+ obj.forEach(collectDefsRefs);
228
+ return;
229
+ }
230
+
231
+ for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {
232
+ if (key === "$ref" && typeof value === "string") {
233
+ const refId = value.startsWith("#/") ? value : value;
234
+ if (!refId.startsWith("#/")) {
235
+ defCollectedRefs.add(refId);
236
+ }
237
+ } else {
238
+ collectDefsRefs(value);
239
+ }
240
+ }
241
+ }
242
+
243
+ collectDefsRefs(defSchema);
244
+
245
+ // Process any new references found in this $defs schema
246
+ for (const refId of defCollectedRefs) {
247
+ if (!refToLocalMap.has(refId)) {
248
+ newRefsFound.add(refId);
249
+ foundNewRefs = true;
250
+ }
251
+ }
252
+ }
253
+
254
+ // Add all newly found references to $defs
255
+ for (const refId of newRefsFound) {
256
+ const referencedSchema = ajv.getSchema(refId);
257
+ if (referencedSchema?.schema) {
258
+ const newDefKey =
259
+ refId.replace(/[^a-zA-Z0-9_-]/g, "_").replace(/^_+|_+$/g, "") ||
260
+ `ref_${Object.keys(finalSchema.$defs).length}`;
261
+
262
+ let uniqueNewDefKey = newDefKey;
263
+ let counter = 1;
264
+ while (finalSchema.$defs[uniqueNewDefKey]) {
265
+ uniqueNewDefKey = `${newDefKey}_${counter}`;
266
+ counter++;
267
+ }
268
+
269
+ finalSchema.$defs[uniqueNewDefKey] = referencedSchema.schema as TSchema;
270
+ refToLocalMap.set(refId, `#/$defs/${uniqueNewDefKey}`);
271
+ }
272
+ }
273
+ }
274
+
275
+ // Finally, update all $defs schemas with converted references
276
+ for (const [defKey, defSchema] of Object.entries(finalSchema.$defs)) {
277
+ finalSchema.$defs[defKey] = convertRefsToLocal(defSchema, refToLocalMap) as TSchema;
278
+ }
279
+ }
280
+
281
+ return finalSchema as T & { $defs: Record<string, TSchema> };
282
+ }
@@ -0,0 +1,12 @@
1
+ import { mergeWith, isArray } from "lodash-es";
2
+
3
+ export function mergeIgnoringArrays<T>(target: T, ...sources: T[]): T {
4
+ return mergeWith(target, ...sources, customizer);
5
+ }
6
+
7
+ // biome-ignore lint/suspicious/noExplicitAny: <explanation>
8
+ function customizer(objValue: any, srcValue: any) {
9
+ if (isArray(objValue)) {
10
+ return srcValue;
11
+ }
12
+ }
@@ -0,0 +1,7 @@
1
+ export async function getObjectHash(obj: unknown): Promise<string> {
2
+ const str = JSON.stringify(obj);
3
+ const buffer = new TextEncoder().encode(str);
4
+ const hashBuffer = await crypto.subtle.digest("SHA-1", buffer);
5
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
6
+ return hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
7
+ }