robopark 3.1.2 → 3.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (312) hide show
  1. package/README.md +15 -5
  2. package/dist/robopark/frontend-service.js +80 -0
  3. package/dist/robopark/serve.js +2 -2
  4. package/dist/robopark/standalone.js +30 -8
  5. package/package.json +34 -3
  6. package/ui/ROBOVOICE_BUILD.json +9 -0
  7. package/ui/standalone/.next/BUILD_ID +1 -0
  8. package/ui/standalone/.next/app-build-manifest.json +391 -0
  9. package/ui/standalone/.next/app-path-routes-manifest.json +55 -0
  10. package/ui/standalone/.next/build-manifest.json +33 -0
  11. package/ui/standalone/.next/package.json +1 -0
  12. package/ui/standalone/.next/prerender-manifest.json +41 -0
  13. package/ui/standalone/.next/react-loadable-manifest.json +14 -0
  14. package/ui/standalone/.next/required-server-files.json +362 -0
  15. package/ui/standalone/.next/routes-manifest.json +246 -0
  16. package/ui/standalone/.next/server/app/(app)/opengraph-image-xg4ifa/route.js +1 -0
  17. package/ui/standalone/.next/server/app/(app)/opengraph-image-xg4ifa/route.js.nft.json +1 -0
  18. package/ui/standalone/.next/server/app/(app)/opengraph-image-xg4ifa/route_client-reference-manifest.js +1 -0
  19. package/ui/standalone/.next/server/app/(app)/page.js +2 -0
  20. package/ui/standalone/.next/server/app/(app)/page.js.nft.json +1 -0
  21. package/ui/standalone/.next/server/app/(app)/page_client-reference-manifest.js +1 -0
  22. package/ui/standalone/.next/server/app/(app)/voice/page.js +12 -0
  23. package/ui/standalone/.next/server/app/(app)/voice/page.js.nft.json +1 -0
  24. package/ui/standalone/.next/server/app/(app)/voice/page_client-reference-manifest.js +1 -0
  25. package/ui/standalone/.next/server/app/_not-found/page.js +12 -0
  26. package/ui/standalone/.next/server/app/_not-found/page.js.nft.json +1 -0
  27. package/ui/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -0
  28. package/ui/standalone/.next/server/app/api/connection-details/route.js +1 -0
  29. package/ui/standalone/.next/server/app/api/connection-details/route.js.nft.json +1 -0
  30. package/ui/standalone/.next/server/app/api/connection-details/route_client-reference-manifest.js +1 -0
  31. package/ui/standalone/.next/server/app/api/device-character/route.js +1 -0
  32. package/ui/standalone/.next/server/app/api/device-character/route.js.nft.json +1 -0
  33. package/ui/standalone/.next/server/app/api/device-character/route_client-reference-manifest.js +1 -0
  34. package/ui/standalone/.next/server/app/api/download-piper-model/route.js +1 -0
  35. package/ui/standalone/.next/server/app/api/download-piper-model/route.js.nft.json +1 -0
  36. package/ui/standalone/.next/server/app/api/download-piper-model/route_client-reference-manifest.js +1 -0
  37. package/ui/standalone/.next/server/app/api/model-status/route.js +1 -0
  38. package/ui/standalone/.next/server/app/api/model-status/route.js.nft.json +1 -0
  39. package/ui/standalone/.next/server/app/api/model-status/route_client-reference-manifest.js +1 -0
  40. package/ui/standalone/.next/server/app/api/models/route.js +1 -0
  41. package/ui/standalone/.next/server/app/api/models/route.js.nft.json +1 -0
  42. package/ui/standalone/.next/server/app/api/models/route_client-reference-manifest.js +1 -0
  43. package/ui/standalone/.next/server/app/api/prewarm/route.js +1 -0
  44. package/ui/standalone/.next/server/app/api/prewarm/route.js.nft.json +1 -0
  45. package/ui/standalone/.next/server/app/api/prewarm/route_client-reference-manifest.js +1 -0
  46. package/ui/standalone/.next/server/app/api/prompt/route.js +1 -0
  47. package/ui/standalone/.next/server/app/api/prompt/route.js.nft.json +1 -0
  48. package/ui/standalone/.next/server/app/api/prompt/route_client-reference-manifest.js +1 -0
  49. package/ui/standalone/.next/server/app/api/reload-tools/route.js +1 -0
  50. package/ui/standalone/.next/server/app/api/reload-tools/route.js.nft.json +1 -0
  51. package/ui/standalone/.next/server/app/api/reload-tools/route_client-reference-manifest.js +1 -0
  52. package/ui/standalone/.next/server/app/api/robopark/camera-token/route.js +1 -0
  53. package/ui/standalone/.next/server/app/api/robopark/camera-token/route.js.nft.json +1 -0
  54. package/ui/standalone/.next/server/app/api/robopark/camera-token/route_client-reference-manifest.js +1 -0
  55. package/ui/standalone/.next/server/app/api/robopark/character-ai/route.js +1 -0
  56. package/ui/standalone/.next/server/app/api/robopark/character-ai/route.js.nft.json +1 -0
  57. package/ui/standalone/.next/server/app/api/robopark/character-ai/route_client-reference-manifest.js +1 -0
  58. package/ui/standalone/.next/server/app/api/robopark/device-access/route.js +1 -0
  59. package/ui/standalone/.next/server/app/api/robopark/device-access/route.js.nft.json +1 -0
  60. package/ui/standalone/.next/server/app/api/robopark/device-access/route_client-reference-manifest.js +1 -0
  61. package/ui/standalone/.next/server/app/api/robopark/devices/[deviceId]/control/route.js +1 -0
  62. package/ui/standalone/.next/server/app/api/robopark/devices/[deviceId]/control/route.js.nft.json +1 -0
  63. package/ui/standalone/.next/server/app/api/robopark/devices/[deviceId]/control/route_client-reference-manifest.js +1 -0
  64. package/ui/standalone/.next/server/app/api/robopark/live-rooms/route.js +1 -0
  65. package/ui/standalone/.next/server/app/api/robopark/live-rooms/route.js.nft.json +1 -0
  66. package/ui/standalone/.next/server/app/api/robopark/live-rooms/route_client-reference-manifest.js +1 -0
  67. package/ui/standalone/.next/server/app/api/robopark/monitor-token/route.js +1 -0
  68. package/ui/standalone/.next/server/app/api/robopark/monitor-token/route.js.nft.json +1 -0
  69. package/ui/standalone/.next/server/app/api/robopark/monitor-token/route_client-reference-manifest.js +1 -0
  70. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/operations/route.js +1 -0
  71. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/operations/route.js.nft.json +1 -0
  72. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/operations/route_client-reference-manifest.js +1 -0
  73. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/voice-engine/route.js +1 -0
  74. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/voice-engine/route.js.nft.json +1 -0
  75. package/ui/standalone/.next/server/app/api/robopark/robots/[robotId]/voice-engine/route_client-reference-manifest.js +1 -0
  76. package/ui/standalone/.next/server/app/api/robopark/robots/route.js +1 -0
  77. package/ui/standalone/.next/server/app/api/robopark/robots/route.js.nft.json +1 -0
  78. package/ui/standalone/.next/server/app/api/robopark/robots/route_client-reference-manifest.js +1 -0
  79. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/metrics/route.js +1 -0
  80. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/metrics/route.js.nft.json +1 -0
  81. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/metrics/route_client-reference-manifest.js +1 -0
  82. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/route.js +1 -0
  83. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/route.js.nft.json +1 -0
  84. package/ui/standalone/.next/server/app/api/robopark/servers/[serverId]/route_client-reference-manifest.js +1 -0
  85. package/ui/standalone/.next/server/app/api/robopark/servers/route.js +1 -0
  86. package/ui/standalone/.next/server/app/api/robopark/servers/route.js.nft.json +1 -0
  87. package/ui/standalone/.next/server/app/api/robopark/servers/route_client-reference-manifest.js +1 -0
  88. package/ui/standalone/.next/server/app/api/robopark/sessions/[sessionId]/end/route.js +1 -0
  89. package/ui/standalone/.next/server/app/api/robopark/sessions/[sessionId]/end/route.js.nft.json +1 -0
  90. package/ui/standalone/.next/server/app/api/robopark/sessions/[sessionId]/end/route_client-reference-manifest.js +1 -0
  91. package/ui/standalone/.next/server/app/api/robopark/sessions/route.js +1 -0
  92. package/ui/standalone/.next/server/app/api/robopark/sessions/route.js.nft.json +1 -0
  93. package/ui/standalone/.next/server/app/api/robopark/sessions/route_client-reference-manifest.js +1 -0
  94. package/ui/standalone/.next/server/app/api/robopark/transcripts/[sessionId]/route.js +1 -0
  95. package/ui/standalone/.next/server/app/api/robopark/transcripts/[sessionId]/route.js.nft.json +1 -0
  96. package/ui/standalone/.next/server/app/api/robopark/transcripts/[sessionId]/route_client-reference-manifest.js +1 -0
  97. package/ui/standalone/.next/server/app/api/robopark/transcripts/route.js +1 -0
  98. package/ui/standalone/.next/server/app/api/robopark/transcripts/route.js.nft.json +1 -0
  99. package/ui/standalone/.next/server/app/api/robopark/transcripts/route_client-reference-manifest.js +1 -0
  100. package/ui/standalone/.next/server/app/api/robovoice/robots/[robotId]/media-health/route.js +1 -0
  101. package/ui/standalone/.next/server/app/api/robovoice/robots/[robotId]/media-health/route.js.nft.json +1 -0
  102. package/ui/standalone/.next/server/app/api/robovoice/robots/[robotId]/media-health/route_client-reference-manifest.js +1 -0
  103. package/ui/standalone/.next/server/app/api/settings/route.js +1 -0
  104. package/ui/standalone/.next/server/app/api/settings/route.js.nft.json +1 -0
  105. package/ui/standalone/.next/server/app/api/settings/route_client-reference-manifest.js +1 -0
  106. package/ui/standalone/.next/server/app/api/setup/complete/route.js +1 -0
  107. package/ui/standalone/.next/server/app/api/setup/complete/route.js.nft.json +1 -0
  108. package/ui/standalone/.next/server/app/api/setup/complete/route_client-reference-manifest.js +1 -0
  109. package/ui/standalone/.next/server/app/api/setup/status/route.js +1 -0
  110. package/ui/standalone/.next/server/app/api/setup/status/route.js.nft.json +1 -0
  111. package/ui/standalone/.next/server/app/api/setup/status/route_client-reference-manifest.js +1 -0
  112. package/ui/standalone/.next/server/app/api/setup/test-groq/route.js +1 -0
  113. package/ui/standalone/.next/server/app/api/setup/test-groq/route.js.nft.json +1 -0
  114. package/ui/standalone/.next/server/app/api/setup/test-groq/route_client-reference-manifest.js +1 -0
  115. package/ui/standalone/.next/server/app/api/setup/test-hass/route.js +1 -0
  116. package/ui/standalone/.next/server/app/api/setup/test-hass/route.js.nft.json +1 -0
  117. package/ui/standalone/.next/server/app/api/setup/test-hass/route_client-reference-manifest.js +1 -0
  118. package/ui/standalone/.next/server/app/api/setup/test-n8n/route.js +1 -0
  119. package/ui/standalone/.next/server/app/api/setup/test-n8n/route.js.nft.json +1 -0
  120. package/ui/standalone/.next/server/app/api/setup/test-n8n/route_client-reference-manifest.js +1 -0
  121. package/ui/standalone/.next/server/app/api/setup/test-ollama/route.js +1 -0
  122. package/ui/standalone/.next/server/app/api/setup/test-ollama/route.js.nft.json +1 -0
  123. package/ui/standalone/.next/server/app/api/setup/test-ollama/route_client-reference-manifest.js +1 -0
  124. package/ui/standalone/.next/server/app/api/test-tts/route.js +1 -0
  125. package/ui/standalone/.next/server/app/api/test-tts/route.js.nft.json +1 -0
  126. package/ui/standalone/.next/server/app/api/test-tts/route_client-reference-manifest.js +1 -0
  127. package/ui/standalone/.next/server/app/api/turn-credentials/route.js +1 -0
  128. package/ui/standalone/.next/server/app/api/turn-credentials/route.js.nft.json +1 -0
  129. package/ui/standalone/.next/server/app/api/turn-credentials/route_client-reference-manifest.js +1 -0
  130. package/ui/standalone/.next/server/app/api/voices/route.js +1 -0
  131. package/ui/standalone/.next/server/app/api/voices/route.js.nft.json +1 -0
  132. package/ui/standalone/.next/server/app/api/voices/route_client-reference-manifest.js +1 -0
  133. package/ui/standalone/.next/server/app/api/wake/route.js +1 -0
  134. package/ui/standalone/.next/server/app/api/wake/route.js.nft.json +1 -0
  135. package/ui/standalone/.next/server/app/api/wake/route_client-reference-manifest.js +1 -0
  136. package/ui/standalone/.next/server/app/api/wake-word/models/route.js +1 -0
  137. package/ui/standalone/.next/server/app/api/wake-word/models/route.js.nft.json +1 -0
  138. package/ui/standalone/.next/server/app/api/wake-word/models/route_client-reference-manifest.js +1 -0
  139. package/ui/standalone/.next/server/app/api/wake-word/status/route.js +1 -0
  140. package/ui/standalone/.next/server/app/api/wake-word/status/route.js.nft.json +1 -0
  141. package/ui/standalone/.next/server/app/api/wake-word/status/route_client-reference-manifest.js +1 -0
  142. package/ui/standalone/.next/server/app/api/wake-word/upload/route.js +1 -0
  143. package/ui/standalone/.next/server/app/api/wake-word/upload/route.js.nft.json +1 -0
  144. package/ui/standalone/.next/server/app/api/wake-word/upload/route_client-reference-manifest.js +1 -0
  145. package/ui/standalone/.next/server/app/favicon.ico/route.js +1 -0
  146. package/ui/standalone/.next/server/app/favicon.ico/route.js.nft.json +1 -0
  147. package/ui/standalone/.next/server/app/favicon.ico.body +0 -0
  148. package/ui/standalone/.next/server/app/favicon.ico.meta +1 -0
  149. package/ui/standalone/.next/server/app/fed/[...path]/route.js +4 -0
  150. package/ui/standalone/.next/server/app/fed/[...path]/route.js.nft.json +1 -0
  151. package/ui/standalone/.next/server/app/fed/[...path]/route_client-reference-manifest.js +1 -0
  152. package/ui/standalone/.next/server/app/fed/media/robots/[robotId]/video_feed/route.js +1 -0
  153. package/ui/standalone/.next/server/app/fed/media/robots/[robotId]/video_feed/route.js.nft.json +1 -0
  154. package/ui/standalone/.next/server/app/fed/media/robots/[robotId]/video_feed/route_client-reference-manifest.js +1 -0
  155. package/ui/standalone/.next/server/app/robopark/[...path]/route.js +1 -0
  156. package/ui/standalone/.next/server/app/robopark/[...path]/route.js.nft.json +1 -0
  157. package/ui/standalone/.next/server/app/robopark/[...path]/route_client-reference-manifest.js +1 -0
  158. package/ui/standalone/.next/server/app/robopark/api/[...path]/route.js +1 -0
  159. package/ui/standalone/.next/server/app/robopark/api/[...path]/route.js.nft.json +1 -0
  160. package/ui/standalone/.next/server/app/robopark/api/[...path]/route_client-reference-manifest.js +1 -0
  161. package/ui/standalone/.next/server/app/robopark/api/robots/[robotId]/stream/route.js +1 -0
  162. package/ui/standalone/.next/server/app/robopark/api/robots/[robotId]/stream/route.js.nft.json +1 -0
  163. package/ui/standalone/.next/server/app/robopark/api/robots/[robotId]/stream/route_client-reference-manifest.js +1 -0
  164. package/ui/standalone/.next/server/app/robopark/page.js +2 -0
  165. package/ui/standalone/.next/server/app/robopark/page.js.nft.json +1 -0
  166. package/ui/standalone/.next/server/app/robopark/page_client-reference-manifest.js +1 -0
  167. package/ui/standalone/.next/server/app/tailnet/route.js +1 -0
  168. package/ui/standalone/.next/server/app/tailnet/route.js.nft.json +1 -0
  169. package/ui/standalone/.next/server/app/tailnet/route_client-reference-manifest.js +1 -0
  170. package/ui/standalone/.next/server/app/vendor/livekit-client.umd.js/route.js +1 -0
  171. package/ui/standalone/.next/server/app/vendor/livekit-client.umd.js/route.js.nft.json +1 -0
  172. package/ui/standalone/.next/server/app/vendor/livekit-client.umd.js/route_client-reference-manifest.js +1 -0
  173. package/ui/standalone/.next/server/app/voice-tester/page.js +2 -0
  174. package/ui/standalone/.next/server/app/voice-tester/page.js.nft.json +1 -0
  175. package/ui/standalone/.next/server/app/voice-tester/page_client-reference-manifest.js +1 -0
  176. package/ui/standalone/.next/server/app-paths-manifest.json +55 -0
  177. package/ui/standalone/.next/server/chunks/1428.js +1 -0
  178. package/ui/standalone/.next/server/chunks/1692.js +1 -0
  179. package/ui/standalone/.next/server/chunks/37.js +1 -0
  180. package/ui/standalone/.next/server/chunks/4876.js +1 -0
  181. package/ui/standalone/.next/server/chunks/5232.js +9 -0
  182. package/ui/standalone/.next/server/chunks/5455.js +11 -0
  183. package/ui/standalone/.next/server/chunks/5611.js +6 -0
  184. package/ui/standalone/.next/server/chunks/5873.js +22 -0
  185. package/ui/standalone/.next/server/chunks/6018.js +1 -0
  186. package/ui/standalone/.next/server/chunks/8755.js +1 -0
  187. package/ui/standalone/.next/server/chunks/9077.js +11 -0
  188. package/ui/standalone/.next/server/functions-config-manifest.json +9 -0
  189. package/ui/standalone/.next/server/middleware-build-manifest.js +1 -0
  190. package/ui/standalone/.next/server/middleware-manifest.json +6 -0
  191. package/ui/standalone/.next/server/middleware-react-loadable-manifest.js +1 -0
  192. package/ui/standalone/.next/server/next-font-manifest.js +1 -0
  193. package/ui/standalone/.next/server/next-font-manifest.json +1 -0
  194. package/ui/standalone/.next/server/pages/500.html +1 -0
  195. package/ui/standalone/.next/server/pages/_app.js +1 -0
  196. package/ui/standalone/.next/server/pages/_app.js.nft.json +1 -0
  197. package/ui/standalone/.next/server/pages/_document.js +1 -0
  198. package/ui/standalone/.next/server/pages/_document.js.nft.json +1 -0
  199. package/ui/standalone/.next/server/pages/_error.js +19 -0
  200. package/ui/standalone/.next/server/pages/_error.js.nft.json +1 -0
  201. package/ui/standalone/.next/server/pages-manifest.json +5 -0
  202. package/ui/standalone/.next/server/server-reference-manifest.js +1 -0
  203. package/ui/standalone/.next/server/server-reference-manifest.json +1 -0
  204. package/ui/standalone/.next/server/webpack-runtime.js +1 -0
  205. package/ui/standalone/.next/static/T3eGaQUuZNb6rhEStcouc/_buildManifest.js +1 -0
  206. package/ui/standalone/.next/static/T3eGaQUuZNb6rhEStcouc/_ssgManifest.js +1 -0
  207. package/ui/standalone/.next/static/chunks/1255-404bb8de49c90395.js +1 -0
  208. package/ui/standalone/.next/static/chunks/144d3bae-bd5d150c0cab972e.js +1 -0
  209. package/ui/standalone/.next/static/chunks/1646.9123ee47220ed70b.js +1 -0
  210. package/ui/standalone/.next/static/chunks/2333-43c39acb531f7d4e.js +3 -0
  211. package/ui/standalone/.next/static/chunks/4bd1b696-f785427dddbba9fb.js +1 -0
  212. package/ui/standalone/.next/static/chunks/5139.c5e46d26064a85db.js +1 -0
  213. package/ui/standalone/.next/static/chunks/76e8f37e-2ae0e3fe7b44d874.js +1 -0
  214. package/ui/standalone/.next/static/chunks/9880-53262785284464cc.js +1 -0
  215. package/ui/standalone/.next/static/chunks/adfb71a7-625c1b5ebd039b6a.js +1 -0
  216. package/ui/standalone/.next/static/chunks/app/(app)/layout-5f312b128a0caf75.js +1 -0
  217. package/ui/standalone/.next/static/chunks/app/(app)/opengraph-image-xg4ifa/route-5f312b128a0caf75.js +1 -0
  218. package/ui/standalone/.next/static/chunks/app/(app)/page-5f312b128a0caf75.js +1 -0
  219. package/ui/standalone/.next/static/chunks/app/(app)/voice/page-72d72d9a70d9c1d4.js +1 -0
  220. package/ui/standalone/.next/static/chunks/app/_not-found/page-cfd7daa82d71540c.js +1 -0
  221. package/ui/standalone/.next/static/chunks/app/api/connection-details/route-5f312b128a0caf75.js +1 -0
  222. package/ui/standalone/.next/static/chunks/app/api/device-character/route-5f312b128a0caf75.js +1 -0
  223. package/ui/standalone/.next/static/chunks/app/api/download-piper-model/route-5f312b128a0caf75.js +1 -0
  224. package/ui/standalone/.next/static/chunks/app/api/model-status/route-5f312b128a0caf75.js +1 -0
  225. package/ui/standalone/.next/static/chunks/app/api/models/route-5f312b128a0caf75.js +1 -0
  226. package/ui/standalone/.next/static/chunks/app/api/prewarm/route-5f312b128a0caf75.js +1 -0
  227. package/ui/standalone/.next/static/chunks/app/api/prompt/route-5f312b128a0caf75.js +1 -0
  228. package/ui/standalone/.next/static/chunks/app/api/reload-tools/route-5f312b128a0caf75.js +1 -0
  229. package/ui/standalone/.next/static/chunks/app/api/robopark/camera-token/route-5f312b128a0caf75.js +1 -0
  230. package/ui/standalone/.next/static/chunks/app/api/robopark/character-ai/route-5f312b128a0caf75.js +1 -0
  231. package/ui/standalone/.next/static/chunks/app/api/robopark/device-access/route-5f312b128a0caf75.js +1 -0
  232. package/ui/standalone/.next/static/chunks/app/api/robopark/devices/[deviceId]/control/route-5f312b128a0caf75.js +1 -0
  233. package/ui/standalone/.next/static/chunks/app/api/robopark/live-rooms/route-5f312b128a0caf75.js +1 -0
  234. package/ui/standalone/.next/static/chunks/app/api/robopark/monitor-token/route-5f312b128a0caf75.js +1 -0
  235. package/ui/standalone/.next/static/chunks/app/api/robopark/robots/[robotId]/operations/route-5f312b128a0caf75.js +1 -0
  236. package/ui/standalone/.next/static/chunks/app/api/robopark/robots/[robotId]/voice-engine/route-5f312b128a0caf75.js +1 -0
  237. package/ui/standalone/.next/static/chunks/app/api/robopark/robots/route-5f312b128a0caf75.js +1 -0
  238. package/ui/standalone/.next/static/chunks/app/api/robopark/servers/[serverId]/metrics/route-5f312b128a0caf75.js +1 -0
  239. package/ui/standalone/.next/static/chunks/app/api/robopark/servers/[serverId]/route-5f312b128a0caf75.js +1 -0
  240. package/ui/standalone/.next/static/chunks/app/api/robopark/servers/route-5f312b128a0caf75.js +1 -0
  241. package/ui/standalone/.next/static/chunks/app/api/robopark/sessions/[sessionId]/end/route-5f312b128a0caf75.js +1 -0
  242. package/ui/standalone/.next/static/chunks/app/api/robopark/sessions/route-5f312b128a0caf75.js +1 -0
  243. package/ui/standalone/.next/static/chunks/app/api/robopark/transcripts/[sessionId]/route-5f312b128a0caf75.js +1 -0
  244. package/ui/standalone/.next/static/chunks/app/api/robopark/transcripts/route-5f312b128a0caf75.js +1 -0
  245. package/ui/standalone/.next/static/chunks/app/api/robovoice/robots/[robotId]/media-health/route-5f312b128a0caf75.js +1 -0
  246. package/ui/standalone/.next/static/chunks/app/api/settings/route-5f312b128a0caf75.js +1 -0
  247. package/ui/standalone/.next/static/chunks/app/api/setup/complete/route-5f312b128a0caf75.js +1 -0
  248. package/ui/standalone/.next/static/chunks/app/api/setup/status/route-5f312b128a0caf75.js +1 -0
  249. package/ui/standalone/.next/static/chunks/app/api/setup/test-groq/route-5f312b128a0caf75.js +1 -0
  250. package/ui/standalone/.next/static/chunks/app/api/setup/test-hass/route-5f312b128a0caf75.js +1 -0
  251. package/ui/standalone/.next/static/chunks/app/api/setup/test-n8n/route-5f312b128a0caf75.js +1 -0
  252. package/ui/standalone/.next/static/chunks/app/api/setup/test-ollama/route-5f312b128a0caf75.js +1 -0
  253. package/ui/standalone/.next/static/chunks/app/api/test-tts/route-5f312b128a0caf75.js +1 -0
  254. package/ui/standalone/.next/static/chunks/app/api/turn-credentials/route-5f312b128a0caf75.js +1 -0
  255. package/ui/standalone/.next/static/chunks/app/api/voices/route-5f312b128a0caf75.js +1 -0
  256. package/ui/standalone/.next/static/chunks/app/api/wake/route-5f312b128a0caf75.js +1 -0
  257. package/ui/standalone/.next/static/chunks/app/api/wake-word/models/route-5f312b128a0caf75.js +1 -0
  258. package/ui/standalone/.next/static/chunks/app/api/wake-word/status/route-5f312b128a0caf75.js +1 -0
  259. package/ui/standalone/.next/static/chunks/app/api/wake-word/upload/route-5f312b128a0caf75.js +1 -0
  260. package/ui/standalone/.next/static/chunks/app/fed/[...path]/route-5f312b128a0caf75.js +1 -0
  261. package/ui/standalone/.next/static/chunks/app/fed/media/robots/[robotId]/video_feed/route-5f312b128a0caf75.js +1 -0
  262. package/ui/standalone/.next/static/chunks/app/layout-fcce963da1d8220f.js +1 -0
  263. package/ui/standalone/.next/static/chunks/app/robopark/[...path]/route-5f312b128a0caf75.js +1 -0
  264. package/ui/standalone/.next/static/chunks/app/robopark/api/[...path]/route-5f312b128a0caf75.js +1 -0
  265. package/ui/standalone/.next/static/chunks/app/robopark/api/robots/[robotId]/stream/route-5f312b128a0caf75.js +1 -0
  266. package/ui/standalone/.next/static/chunks/app/robopark/page-5f312b128a0caf75.js +1 -0
  267. package/ui/standalone/.next/static/chunks/app/tailnet/route-5f312b128a0caf75.js +1 -0
  268. package/ui/standalone/.next/static/chunks/app/vendor/livekit-client.umd.js/route-5f312b128a0caf75.js +1 -0
  269. package/ui/standalone/.next/static/chunks/app/voice-tester/page-ae699e048e0eb834.js +1 -0
  270. package/ui/standalone/.next/static/chunks/framework-e60c938074ff7136.js +1 -0
  271. package/ui/standalone/.next/static/chunks/main-9e24e8708ff075fc.js +1 -0
  272. package/ui/standalone/.next/static/chunks/main-app-a1f59168303c7f84.js +1 -0
  273. package/ui/standalone/.next/static/chunks/pages/_app-131c90850aef965b.js +1 -0
  274. package/ui/standalone/.next/static/chunks/pages/_error-e4ba546eb376bdf4.js +1 -0
  275. package/ui/standalone/.next/static/chunks/polyfills-42372ed130431b0a.js +1 -0
  276. package/ui/standalone/.next/static/chunks/webpack-5252e5254da079b5.js +1 -0
  277. package/ui/standalone/.next/static/css/3f478a573f9be82e.css +1 -0
  278. package/ui/standalone/.next/static/css/51560c4af1d5a21f.css +1 -0
  279. package/ui/standalone/.next/static/media/27fe93087559d480-s.p.otf +0 -0
  280. package/ui/standalone/.next/static/media/4d3869dd8a56345a-s.p.otf +0 -0
  281. package/ui/standalone/.next/static/media/63f3bb9ce29e22d5-s.p.otf +0 -0
  282. package/ui/standalone/.next/static/media/79e1c5d0f2fe9f68-s.p.otf +0 -0
  283. package/ui/standalone/.next/static/media/8bf7b2ceda89477b-s.p.woff2 +0 -0
  284. package/ui/standalone/.next/static/media/98baa4a7809fbf72-s.woff2 +0 -0
  285. package/ui/standalone/.next/static/media/f7650dfaa438c37c-s.woff2 +0 -0
  286. package/ui/standalone/package.json +57 -0
  287. package/ui/standalone/public/caal-logo.svg +3 -0
  288. package/ui/standalone/public/commit-mono-400-regular.woff +0 -0
  289. package/ui/standalone/public/cwl-logo-round.png +0 -0
  290. package/ui/standalone/public/everett-light.woff +0 -0
  291. package/ui/standalone/public/hey_cal.ppn +0 -0
  292. package/ui/standalone/public/install-robot-kiosk.sh +242 -0
  293. package/ui/standalone/public/lk-logo-dark.svg +18 -0
  294. package/ui/standalone/public/lk-logo.svg +18 -0
  295. package/ui/standalone/public/lk-wordmark.svg +12 -0
  296. package/ui/standalone/public/opengraph-image-bg.png +0 -0
  297. package/ui/standalone/public/porcupine_params.pv +0 -0
  298. package/ui/standalone/public/robopark-control.html +9200 -0
  299. package/ui/standalone/public/static/robopark/barracuda.png +0 -0
  300. package/ui/standalone/public/static/robopark/bmw.png +0 -0
  301. package/ui/standalone/public/static/robopark/jaguar.png +0 -0
  302. package/ui/standalone/public/static/robopark/magnus.jpg +0 -0
  303. package/ui/standalone/public/static/robopark/panda.png +0 -0
  304. package/ui/standalone/public/static/robopark/tesla.png +0 -0
  305. package/ui/standalone/public/static/robopark/titan.jpg +0 -0
  306. package/ui/standalone/public/static/robopark/volt.png +0 -0
  307. package/ui/standalone/public/tailnet/index.html +8995 -0
  308. package/ui/standalone/public/transcript-analytics.html +72 -0
  309. package/ui/standalone/public/vendor/elevenlabs-client.iife.js +24200 -0
  310. package/ui/standalone/public/vendor/livekit-client.umd.js +2 -0
  311. package/ui/standalone/public/voice-join.html +89 -0
  312. package/ui/standalone/server.js +38 -0
@@ -0,0 +1,242 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ # Serialize installs/restarts for this user. Re-running the curl command while a
5
+ # previous verification loop is active used to launch a second kiosk publisher.
6
+ lock_dir="${XDG_RUNTIME_DIR:-/tmp}/robopark-kiosk-${UID}.lock"
7
+ if ! mkdir "$lock_dir" 2>/dev/null; then
8
+ echo "Another RoboPark kiosk install/restart is already running. Wait for it to finish, or stop that shell with Ctrl-C." >&2
9
+ exit 5
10
+ fi
11
+ trap 'rmdir "$lock_dir" 2>/dev/null || true' EXIT
12
+
13
+ device_id="${1:-}"
14
+ origin="${2:-https://robo2.tail45774e.ts.net:3543}"
15
+ origin="${origin%/}"
16
+
17
+ if [[ ! "$device_id" =~ ^[a-f0-9]{32}$ ]]; then
18
+ echo "Missing or invalid robot device ID" >&2
19
+ exit 2
20
+ fi
21
+
22
+ if [[ ! "$origin" =~ ^https://[A-Za-z0-9.-]+(:[0-9]+)?$ ]]; then
23
+ echo "Invalid HTTPS production origin: $origin" >&2
24
+ exit 2
25
+ fi
26
+
27
+ firefox_bin="$(command -v firefox || true)"
28
+ if [[ -z "$firefox_bin" ]]; then
29
+ echo "Firefox is not installed" >&2
30
+ exit 1
31
+ fi
32
+
33
+ echo "Preflight: validating $device_id against $origin"
34
+ registry="$(curl -fsSL --connect-timeout 5 --max-time 12 "$origin/robopark/api/devices")"
35
+ if ! printf '%s' "$registry" | grep -q "\"$device_id\""; then
36
+ echo "Device ID is not registered on the V2 control center; production was not changed" >&2
37
+ exit 3
38
+ fi
39
+
40
+ distribution_dir="$(dirname "$(readlink -f "$firefox_bin")")/distribution"
41
+ system_policy_dir="/etc/firefox/policies"
42
+ tmp_policy="$(mktemp)"
43
+ backup_dir="$HOME/.robopark-kiosk-backup"
44
+ mkdir -p "$backup_dir"
45
+ policy_path="$system_policy_dir/policies.json"
46
+ service_path="$HOME/.config/systemd/user/robopark-kiosk.service"
47
+ recovery_path="$HOME/.local/bin/robopark-media-recovery"
48
+ recovery_service_path="$HOME/.config/systemd/user/robopark-media-recovery.service"
49
+ [[ -f "$policy_path" ]] && sudo cp -f "$policy_path" "$backup_dir/policies.json" || true
50
+ [[ -f "$service_path" ]] && cp -f "$service_path" "$backup_dir/robopark-kiosk.service" || true
51
+
52
+ rollback() {
53
+ echo "V2 verification failed; restoring the previous production kiosk" >&2
54
+ if [[ -f "$backup_dir/policies.json" ]]; then sudo install -m 0644 "$backup_dir/policies.json" "$policy_path"; fi
55
+ if [[ -f "$backup_dir/robopark-kiosk.service" ]]; then cp -f "$backup_dir/robopark-kiosk.service" "$service_path"; fi
56
+ systemctl --user daemon-reload 2>/dev/null || true
57
+ systemctl --user restart robopark-kiosk.service 2>/dev/null || true
58
+ }
59
+ trap 'rm -f "$tmp_policy"; rmdir "$lock_dir" 2>/dev/null || true' EXIT
60
+
61
+ cat >"$tmp_policy" <<JSON
62
+ {
63
+ "policies": {
64
+ "Permissions": {
65
+ "Camera": { "Allow": ["$origin"], "BlockNewRequests": false, "Locked": true },
66
+ "Microphone": { "Allow": ["$origin"], "BlockNewRequests": false, "Locked": true },
67
+ "Autoplay": { "Allow": ["$origin"], "Default": "block-audio-video", "Locked": true }
68
+ },
69
+ "Preferences": {
70
+ "media.autoplay.default": { "Value": 0, "Status": "locked" },
71
+ "media.autoplay.blocking_policy": { "Value": 0, "Status": "locked" }
72
+ }
73
+ }
74
+ }
75
+ JSON
76
+
77
+ sudo install -d -m 0755 "$system_policy_dir"
78
+ sudo install -m 0644 "$tmp_policy" "$system_policy_dir/policies.json"
79
+ # Traditional distro Firefox also reads its adjacent distribution directory.
80
+ # Snap packages are read-only there, so failure is deliberately non-fatal.
81
+ if sudo install -d -m 0755 "$distribution_dir" 2>/dev/null; then
82
+ sudo install -m 0644 "$tmp_policy" "$distribution_dir/policies.json" 2>/dev/null || true
83
+ fi
84
+
85
+ join_url="$origin/?device_id=$device_id&autostart=1&hardware_autobind=1"
86
+ export DISPLAY="${DISPLAY:-:0}"
87
+ export XAUTHORITY="${XAUTHORITY:-$HOME/.Xauthority}"
88
+
89
+ # Bind playback at the PipeWire/Pulse layer. Browser setSinkId is retained as
90
+ # a second guard, but unattended Firefox cannot reliably repair a stale HDMI
91
+ # default on every Raspberry Pi image.
92
+ if command -v pactl >/dev/null 2>&1; then
93
+ usb_sink="$(pactl list short sinks 2>/dev/null | awk 'BEGIN{IGNORECASE=1} /usb/{print $2; exit}')"
94
+ [[ -z "$usb_sink" ]] && usb_sink="$(pactl list short sinks 2>/dev/null | awk 'NR==1{print $2}')"
95
+ if [[ -n "$usb_sink" ]]; then
96
+ pactl set-default-sink "$usb_sink" || true
97
+ pactl set-sink-mute "$usb_sink" 0 || true
98
+ pactl set-sink-volume "$usb_sink" 100% || true
99
+ echo "Audio output bound through PulseAudio: $usb_sink"
100
+ fi
101
+ elif command -v wpctl >/dev/null 2>&1; then
102
+ usb_sink_id="$(wpctl status -n 2>/dev/null | awk 'BEGIN{IGNORECASE=1; sinks=0} /Sinks:/{sinks=1;next} /Sources:/{sinks=0} sinks && /usb/{line=$0; sub(/^.*[[:space:]]/,"",line); if(match($0,/[0-9]+\./)){id=substr($0,RSTART,RLENGTH-1); print id; exit}}')"
103
+ if [[ -n "$usb_sink_id" ]]; then
104
+ wpctl set-default "$usb_sink_id" || true
105
+ wpctl set-mute "$usb_sink_id" 0 || true
106
+ wpctl set-volume "$usb_sink_id" 1.0 || true
107
+ echo "Audio output bound through PipeWire: $usb_sink_id"
108
+ fi
109
+ fi
110
+
111
+ mkdir -p "$HOME/.config/systemd/user"
112
+ cat >"$HOME/.config/systemd/user/robopark-kiosk.service" <<UNIT
113
+ [Unit]
114
+ Description=RoboPark production kiosk
115
+ After=graphical-session.target network-online.target
116
+ Wants=network-online.target
117
+
118
+ [Service]
119
+ Environment=DISPLAY=${DISPLAY}
120
+ Environment=XAUTHORITY=${XAUTHORITY}
121
+ ExecStart=${firefox_bin} --kiosk ${join_url}
122
+ Restart=always
123
+ RestartSec=5
124
+
125
+ [Install]
126
+ WantedBy=default.target
127
+ UNIT
128
+
129
+ # A small unprivileged control worker lets the central UI release media devices
130
+ # held by duplicate browser/test processes. It deliberately never terminates
131
+ # PipeWire, WirePlumber, PulseAudio, SSH, or unrelated system services.
132
+ mkdir -p "$HOME/.local/bin" "$HOME/.local/state/robopark"
133
+ cat >"$recovery_path" <<'RECOVERY'
134
+ #!/usr/bin/env bash
135
+ set -u
136
+ device_id="$1"
137
+ origin="${2%/}"
138
+ state="$HOME/.local/state/robopark/kill-media-revision"
139
+ while sleep 2; do
140
+ payload="$(curl -fsSL --connect-timeout 3 --max-time 6 "$origin/api/robopark/devices/$device_id/control" 2>/dev/null || true)"
141
+ revision="$(printf '%s' "$payload" | sed -n 's/.*"kill_competitors_revision"[[:space:]]*:[[:space:]]*\([0-9][0-9]*\).*/\1/p')"
142
+ [[ -z "$revision" ]] && continue
143
+ if [[ ! -f "$state" ]]; then printf '%s\n' "$revision" >"$state"; continue; fi
144
+ previous="$(cat "$state" 2>/dev/null || printf 0)"
145
+ [[ "$revision" -le "$previous" ]] && continue
146
+ printf '%s\n' "$revision" >"$state"
147
+ systemctl --user stop robopark-kiosk.service 2>/dev/null || true
148
+ systemctl --user kill --kill-who=all robopark-kiosk.service 2>/dev/null || true
149
+ pkill -TERM -f 'firefox[^ ]*.*robo2\.tail45774e\.ts\.net:(3443|3543)' 2>/dev/null || true
150
+ for name in firefox firefox-esr firefox-bin chromium chromium-browser ffmpeg gst-launch-1.0 cheese guvcview libcamera-vid libcamera-still rpicam-vid rpicam-still arecord speaker-test; do
151
+ pkill -TERM -x "$name" 2>/dev/null || true
152
+ done
153
+ sleep 2
154
+ for node in /dev/video0 /dev/video1; do
155
+ [[ -e "$node" ]] && fuser -k "$node" 2>/dev/null || true
156
+ done
157
+ systemctl --user start robopark-kiosk.service 2>/dev/null || true
158
+ done
159
+ RECOVERY
160
+ chmod 0755 "$recovery_path"
161
+ cat >"$recovery_service_path" <<UNIT
162
+ [Unit]
163
+ Description=RoboPark guarded media recovery worker
164
+ After=network-online.target
165
+ Wants=network-online.target
166
+
167
+ [Service]
168
+ ExecStart=${recovery_path} ${device_id} ${origin}
169
+ Restart=always
170
+ RestartSec=3
171
+
172
+ [Install]
173
+ WantedBy=default.target
174
+ UNIT
175
+ systemctl --user daemon-reload || true
176
+ systemctl --user enable robopark-kiosk.service || true
177
+ systemctl --user enable --now robopark-media-recovery.service || true
178
+
179
+ # Stop the managed cgroup first, then close only Firefox-family processes that
180
+ # are attached to this RoboPark origin. `pkill -x firefox` misses firefox-esr
181
+ # and firefox-bin on some Pi images, leaving duplicate LiveKit publishers.
182
+ systemctl --user stop robopark-kiosk.service 2>/dev/null || true
183
+ systemctl --user kill --kill-who=all robopark-kiosk.service 2>/dev/null || true
184
+ pkill -TERM -f 'firefox[^ ]*.*robo2\.tail45774e\.ts\.net:3543' 2>/dev/null || true
185
+ pkill -TERM -x firefox 2>/dev/null || true
186
+ pkill -TERM -x firefox-esr 2>/dev/null || true
187
+ pkill -TERM -x firefox-bin 2>/dev/null || true
188
+ # Release stale user-level capture/playback clients before Firefox asks
189
+ # PipeWire for the production devices. Never terminate PipeWire,
190
+ # WirePlumber, PulseAudio, SSH, or unrelated services.
191
+ for name in chromium chromium-browser ffmpeg gst-launch-1.0 cheese guvcview libcamera-vid libcamera-still rpicam-vid rpicam-still arecord speaker-test; do
192
+ pkill -TERM -x "$name" 2>/dev/null || true
193
+ done
194
+ for _ in 1 2 3 4 5; do
195
+ pgrep -u "$UID" -f 'firefox|firefox-esr|firefox-bin' >/dev/null || break
196
+ sleep 1
197
+ done
198
+ # Escalate only for this user's remaining Firefox family after the graceful
199
+ # wait. A stale browser otherwise keeps the microphone/camera and LiveKit room.
200
+ if pgrep -u "$UID" -f 'firefox|firefox-esr|firefox-bin' >/dev/null; then
201
+ pkill -KILL -u "$UID" -f 'firefox|firefox-esr|firefox-bin' 2>/dev/null || true
202
+ sleep 1
203
+ fi
204
+ # A crashed camera client can survive under a different executable name. Free
205
+ # only the two conventional USB-camera nodes after graceful process cleanup;
206
+ # do not touch /dev/snd because PipeWire legitimately owns those handles.
207
+ if command -v fuser >/dev/null 2>&1; then
208
+ for node in /dev/video0 /dev/video1; do
209
+ [[ -e "$node" ]] && fuser -k "$node" 2>/dev/null || true
210
+ done
211
+ sleep 1
212
+ fi
213
+
214
+ if systemctl --user restart robopark-kiosk.service 2>/dev/null; then
215
+ echo "Persistent kiosk service started"
216
+ else
217
+ nohup "$firefox_bin" --kiosk "$join_url" >"$HOME/robovoice-kiosk.log" 2>&1 &
218
+ fi
219
+
220
+ echo "Verifying V2 room join (allowing up to 120 seconds for Pi media initialization)..."
221
+ verified=0
222
+ for attempt in $(seq 1 60); do
223
+ robots="$(curl -fsSL --connect-timeout 3 --max-time 6 "$origin/robopark/api/robots" 2>/dev/null || true)"
224
+ # `status` may legitimately be `degraded` while audio and the voice worker
225
+ # are live (for example, a camera-less/blocked Vixen). Migration success is
226
+ # the physical kiosk connection, represented by connection_status=online.
227
+ if printf '%s' "$robots" | grep -q "\"id\":\"$device_id\"[^}]*\"connection_status\":\"online\""; then verified=1; break; fi
228
+ if (( attempt % 10 == 0 )); then
229
+ echo "Still waiting for $device_id ($((attempt * 2))s): Firefox may be completing microphone/camera initialization..."
230
+ fi
231
+ sleep 2
232
+ done
233
+ if [[ "$verified" != 1 ]]; then
234
+ echo "V2 did not observe the registered device after 120 seconds." >&2
235
+ systemctl --user status robopark-kiosk.service --no-pager -l >&2 || true
236
+ journalctl --user -u robopark-kiosk.service -n 40 --no-pager >&2 || true
237
+ rollback
238
+ exit 4
239
+ fi
240
+
241
+ echo "V2 migration verified: $join_url"
242
+ echo "Rollback snapshot: $backup_dir"
@@ -0,0 +1,18 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g clip-path="url(#clip0_646_420)">
3
+ <path d="M14.4004 9.59961H9.59962V14.4004H14.4004V9.59961Z" fill="#1fd5f9" />
4
+ <path d="M19.2011 4.80078H14.4004V9.60153H19.2011V4.80078Z" fill="#1fd5f9" />
5
+ <path d="M19.2011 14.4004H14.4004V19.2011H19.2011V14.4004Z" fill="#1fd5f9" />
6
+ <path d="M24 0H19.1992V4.80075H24V0Z" fill="#1fd5f9" />
7
+ <path d="M24 19.1992H19.1992V24H24V19.1992Z" fill="#1fd5f9" />
8
+ <path
9
+ d="M4.80075 19.1992V14.4004V9.59962V4.80075V0H0V4.80075V9.59962V14.4004V19.1992V24H4.80075H9.59963H14.4004V19.1992H9.59963H4.80075Z"
10
+ fill="white" />
11
+ </g>
12
+ <defs>
13
+ <clipPath id="clip0_646_420">
14
+ <rect width="24" height="24" fill="white" />
15
+ </clipPath>
16
+ </defs>
17
+ </svg>
18
+
@@ -0,0 +1,18 @@
1
+ <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g clip-path="url(#clip0_646_420)">
3
+ <path d="M14.4004 9.59961H9.59962V14.4004H14.4004V9.59961Z" fill="#002cf2" />
4
+ <path d="M19.2011 4.80078H14.4004V9.60153H19.2011V4.80078Z" fill="#002cf2" />
5
+ <path d="M19.2011 14.4004H14.4004V19.2011H19.2011V14.4004Z" fill="#002cf2" />
6
+ <path d="M24 0H19.1992V4.80075H24V0Z" fill="#002cf2" />
7
+ <path d="M24 19.1992H19.1992V24H24V19.1992Z" fill="#002cf2" />
8
+ <path
9
+ d="M4.80075 19.1992V14.4004V9.59962V4.80075V0H0V4.80075V9.59962V14.4004V19.1992V24H4.80075H9.59963H14.4004V19.1992H9.59963H4.80075Z"
10
+ fill="black" />
11
+ </g>
12
+ <defs>
13
+ <clipPath id="clip0_646_420">
14
+ <rect width="24" height="24" fill="white" />
15
+ </clipPath>
16
+ </defs>
17
+ </svg>
18
+
@@ -0,0 +1,12 @@
1
+ <svg width="143" height="33" viewBox="0 0 143 33" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M5.47344 0.5H0.000244141V32.1311H19.8555V27.5113H5.47344V0.5Z" fill="white"/>
3
+ <path d="M28.89 14.8997H23.5867V32.1294H28.89V14.8997Z" fill="white"/>
4
+ <path d="M44.5022 31.5056L37.7567 9.69678H32.4534L39.5387 32.1303H49.4657L56.5511 9.69678H51.205L44.5022 31.5056Z" fill="white"/>
5
+ <path d="M69.7073 9.19946C62.8334 9.19946 58.4639 14.0279 58.4639 20.8946C58.4639 27.7206 62.7063 32.6317 69.7073 32.6317C75.0521 32.6317 78.9132 30.3008 80.3554 25.5144H74.9627C74.1573 27.6786 72.671 28.9712 69.7438 28.9712C66.5195 28.9712 64.2718 26.765 63.8477 22.4378H80.7329C80.8136 21.8862 80.8557 21.3297 80.8588 20.7724C80.8601 13.7773 76.4478 9.19946 69.7073 9.19946ZM63.8892 18.8131C64.4417 14.7773 66.6051 12.8625 69.7073 12.8625C72.9731 12.8625 75.1792 15.2341 75.4347 18.8131H63.8892Z" fill="white"/>
6
+ <path d="M111.871 0.5H104.998L91.6771 14.9841V0.5H86.2039V32.1311H91.6771V16.1495L106.356 32.1311H113.356L97.9985 15.4828L111.871 0.5Z" fill="white"/>
7
+ <path d="M121.032 9.69678H115.729V26.9265H121.032V9.69678Z" fill="white"/>
8
+ <path d="M23.5872 9.69678H18.2839V14.8993H23.5872V9.69678Z" fill="white"/>
9
+ <path d="M126.337 26.9282H121.033V32.1307H126.337V26.9282Z" fill="white"/>
10
+ <path d="M142.183 26.9282H136.88V32.1307H142.183V26.9282Z" fill="white"/>
11
+ <path d="M142.182 14.9001V9.69759H136.879V0.5H131.576V9.69759H126.272V14.9001H131.576V26.9286H136.879V14.9001H142.182Z" fill="white"/>
12
+ </svg>