@case-framework/survey-ui 0.6.2 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/README.md +40 -34
  2. package/dist/src/index.d.ts +7 -13
  3. package/dist/src/lib/survey-assets.d.ts +2 -0
  4. package/dist/src/modules/survey-player/index.d.ts +2 -0
  5. package/dist/src/modules/survey-player/registry.d.ts +23 -0
  6. package/dist/src/modules/survey-player/survey-context.d.ts +1 -1
  7. package/dist/src/modules/survey-player/survey-item/survey-item-types/placeholder-item-renderers.d.ts +1 -1
  8. package/dist/src/modules/survey-player/survey-player.d.ts +1 -1
  9. package/dist/survey-ui.cjs +47 -0
  10. package/dist/survey-ui.cjs.map +1 -0
  11. package/dist/survey-ui.css +1 -1
  12. package/dist/survey-ui.js +14136 -0
  13. package/dist/survey-ui.js.map +1 -0
  14. package/package.json +25 -63
  15. package/dist/default-item-cores-C6VK2LFe.js +0 -10
  16. package/dist/default-item-cores-C6VK2LFe.js.map +0 -1
  17. package/dist/default-item-cores-gdu37TFX.mjs +0 -3988
  18. package/dist/default-item-cores-gdu37TFX.mjs.map +0 -1
  19. package/dist/item-core-registry.cjs.js +0 -2
  20. package/dist/item-core-registry.cjs.js.map +0 -1
  21. package/dist/item-core-registry.es.js +0 -11
  22. package/dist/item-core-registry.es.js.map +0 -1
  23. package/dist/src/components/c-ui/alert-provider.d.ts +0 -18
  24. package/dist/src/components/c-ui/dot-background.d.ts +0 -72
  25. package/dist/src/components/c-ui/filepicker-dropzone.d.ts +0 -38
  26. package/dist/src/components/c-ui/loading-button.d.ts +0 -9
  27. package/dist/src/components/common/content-editable-plain.d.ts +0 -17
  28. package/dist/src/components/common/sortable-tree.d.ts +0 -59
  29. package/dist/src/components/hooks/use-button-shortcut.d.ts +0 -18
  30. package/dist/src/components/hooks/use-document-keydown.d.ts +0 -7
  31. package/dist/src/components/rich-text/content-policy.d.ts +0 -19
  32. package/dist/src/components/rich-text/index.d.ts +0 -6
  33. package/dist/src/components/rich-text/nodes/rich-text-image-node.d.ts +0 -40
  34. package/dist/src/components/rich-text/nodes/rich-text-info-box-node.d.ts +0 -45
  35. package/dist/src/components/rich-text/nodes/survey-rich-text-heading-node.d.ts +0 -27
  36. package/dist/src/components/rich-text/rich-text-block-editor.d.ts +0 -8
  37. package/dist/src/components/rich-text/rich-text-editor-context.d.ts +0 -23
  38. package/dist/src/components/rich-text/rich-text-survey-content.d.ts +0 -7
  39. package/dist/src/components/rich-text/types.d.ts +0 -6
  40. package/dist/src/components/rich-text-editor/index.d.ts +0 -3
  41. package/dist/src/components/rich-text-editor/plugins/command-handler-plugin.d.ts +0 -5
  42. package/dist/src/components/rich-text-editor/plugins/editable-mode-plugin.d.ts +0 -3
  43. package/dist/src/components/rich-text-editor/plugins/floating-toolbar-plugin.d.ts +0 -11
  44. package/dist/src/components/rich-text-editor/plugins/image-dialog-plugin.d.ts +0 -4
  45. package/dist/src/components/rich-text-editor/plugins/info-box-popover-plugin.d.ts +0 -6
  46. package/dist/src/components/rich-text-editor/plugins/link-popover-plugin.d.ts +0 -6
  47. package/dist/src/components/rich-text-editor/plugins/rich-text-image-asset-deletion-plugin.d.ts +0 -1
  48. package/dist/src/components/rich-text-editor/plugins/slash-command-menu-plugin.d.ts +0 -15
  49. package/dist/src/components/rich-text-editor/plugins/sync-editor-value-plugin.d.ts +0 -4
  50. package/dist/src/components/rich-text-editor/rich-text-editor-utils.d.ts +0 -205
  51. package/dist/src/components/rich-text-editor/rich-text-editor.d.ts +0 -43
  52. package/dist/src/components/rich-text-editor/rich-text-image-editor-commands.d.ts +0 -12
  53. package/dist/src/components/rich-text-editor/rich-text-info-box-commands.d.ts +0 -20
  54. package/dist/src/components/rich-text-editor/style-control-icon.d.ts +0 -5
  55. package/dist/src/components/ui/alert.d.ts +0 -10
  56. package/dist/src/components/ui/badge.d.ts +0 -9
  57. package/dist/src/components/ui/breadcrumb.d.ts +0 -11
  58. package/dist/src/components/ui/card.d.ts +0 -11
  59. package/dist/src/components/ui/command.d.ts +0 -18
  60. package/dist/src/components/ui/context-menu.d.ts +0 -31
  61. package/dist/src/components/ui/dialog.d.ts +0 -20
  62. package/dist/src/components/ui/dropdown-menu.d.ts +0 -29
  63. package/dist/src/components/ui/kbd.d.ts +0 -3
  64. package/dist/src/components/ui/resizable.d.ts +0 -7
  65. package/dist/src/components/ui/scroll-area.d.ts +0 -5
  66. package/dist/src/components/ui/skeleton.d.ts +0 -2
  67. package/dist/src/components/ui/sonner.d.ts +0 -3
  68. package/dist/src/components/ui/tabs.d.ts +0 -11
  69. package/dist/src/components/ui/toggle-group.d.ts +0 -10
  70. package/dist/src/components/ui/toggle.d.ts +0 -9
  71. package/dist/src/components/ui/tooltip.d.ts +0 -7
  72. package/dist/src/dev/_components/nav-input.d.ts +0 -35
  73. package/dist/src/dev/app.d.ts +0 -2
  74. package/dist/src/dev/localizations/de.d.ts +0 -2
  75. package/dist/src/dev/main.d.ts +0 -0
  76. package/dist/src/item-core-registry.d.ts +0 -4
  77. package/dist/src/modules/default-item-registry/default-registry-entries.d.ts +0 -2
  78. package/dist/src/modules/default-item-registry/index.d.ts +0 -19
  79. package/dist/src/modules/default-item-registry/item-authoring-state.d.ts +0 -15
  80. package/dist/src/modules/default-item-registry/items/choice/editor/card.d.ts +0 -3
  81. package/dist/src/modules/default-item-registry/items/choice/editor/option-create.d.ts +0 -11
  82. package/dist/src/modules/default-item-registry/items/choice/editor/option-edit-dialog.d.ts +0 -21
  83. package/dist/src/modules/default-item-registry/items/choice/editor/option-editor-fields.d.ts +0 -17
  84. package/dist/src/modules/default-item-registry/items/choice/editor/response-options-list.d.ts +0 -20
  85. package/dist/src/modules/default-item-registry/items/choice/expression-registry.d.ts +0 -3
  86. package/dist/src/modules/default-item-registry/items/choice/preview/item.d.ts +0 -2
  87. package/dist/src/modules/default-item-registry/items/choice/search-adapter.d.ts +0 -2
  88. package/dist/src/modules/default-item-registry/items/form/editor/card.d.ts +0 -3
  89. package/dist/src/modules/default-item-registry/items/form/editor/config-editor.d.ts +0 -12
  90. package/dist/src/modules/default-item-registry/items/form/editor/field-edit-dialog.d.ts +0 -10
  91. package/dist/src/modules/default-item-registry/items/form/editor/field-group-header-dialog.d.ts +0 -12
  92. package/dist/src/modules/default-item-registry/items/form/editor/field-group-layout-dialog.d.ts +0 -9
  93. package/dist/src/modules/default-item-registry/items/form/editor/field-item-preview.d.ts +0 -15
  94. package/dist/src/modules/default-item-registry/items/form/editor/field-key-dialog.d.ts +0 -10
  95. package/dist/src/modules/default-item-registry/items/form/editor/field-sort-dialog.d.ts +0 -11
  96. package/dist/src/modules/default-item-registry/items/form/editor/field-type-shared.d.ts +0 -12
  97. package/dist/src/modules/default-item-registry/items/form/editor/response-field-groups-list.d.ts +0 -16
  98. package/dist/src/modules/default-item-registry/items/form/preview/item.d.ts +0 -2
  99. package/dist/src/modules/default-item-registry/items/form/search-adapter.d.ts +0 -2
  100. package/dist/src/modules/default-item-registry/items/info/editor-card.d.ts +0 -3
  101. package/dist/src/modules/default-item-registry/items/info/preview/item.d.ts +0 -2
  102. package/dist/src/modules/default-item-registry/items/info/search-adapter.d.ts +0 -2
  103. package/dist/src/modules/default-item-registry/items/structure/group/editor-card.d.ts +0 -3
  104. package/dist/src/modules/default-item-registry/items/structure/page-break/editor-card.d.ts +0 -3
  105. package/dist/src/modules/default-item-registry/items/structure/preview-renderers.d.ts +0 -3
  106. package/dist/src/modules/default-item-registry/items/structure/root/editor-card.d.ts +0 -3
  107. package/dist/src/modules/default-item-registry/shared/preview/question-header.d.ts +0 -6
  108. package/dist/src/modules/default-item-registry/shared/preview/utils.d.ts +0 -3
  109. package/dist/src/modules/default-item-registry/shared/question-editor/deferred-localized-rich-text-field.d.ts +0 -26
  110. package/dist/src/modules/default-item-registry/shared/question-editor/header-editor.d.ts +0 -6
  111. package/dist/src/modules/default-item-registry/shared/question-editor/layout.d.ts +0 -8
  112. package/dist/src/modules/default-item-registry/shared/question-editor/rich-text-editors.d.ts +0 -23
  113. package/dist/src/modules/default-item-registry/shared/question-editor/rich-text-policies.d.ts +0 -8
  114. package/dist/src/modules/default-item-registry/shared/question-editor/toolbar.d.ts +0 -10
  115. package/dist/src/modules/survey-editor/ai/create-provider.d.ts +0 -22
  116. package/dist/src/modules/survey-editor/ai/types.d.ts +0 -11
  117. package/dist/src/modules/survey-editor/ai/use-survey-assistant-integration.d.ts +0 -16
  118. package/dist/src/modules/survey-editor/assets/index.d.ts +0 -4
  119. package/dist/src/modules/survey-editor/assets/survey-image-asset-manager.d.ts +0 -4
  120. package/dist/src/modules/survey-editor/assets/use-survey-assets.d.ts +0 -4
  121. package/dist/src/modules/survey-editor/assets/utils.d.ts +0 -5
  122. package/dist/src/modules/survey-editor/assistant/apply.d.ts +0 -24
  123. package/dist/src/modules/survey-editor/assistant/index.d.ts +0 -2
  124. package/dist/src/modules/survey-editor/assistant/snapshot.d.ts +0 -39
  125. package/dist/src/modules/survey-editor/editor-card/add-items/constants.d.ts +0 -5
  126. package/dist/src/modules/survey-editor/editor-card/add-items/hooks/use-add-item-actions.d.ts +0 -24
  127. package/dist/src/modules/survey-editor/editor-card/add-items/hooks/use-add-item-target.d.ts +0 -9
  128. package/dist/src/modules/survey-editor/editor-card/add-items/hooks/use-option-group-navigation.d.ts +0 -20
  129. package/dist/src/modules/survey-editor/editor-card/add-items/types.d.ts +0 -21
  130. package/dist/src/modules/survey-editor/editor-card/add-items/views/back-button.d.ts +0 -5
  131. package/dist/src/modules/survey-editor/editor-card/add-items/views/blank-item-view.d.ts +0 -13
  132. package/dist/src/modules/survey-editor/editor-card/add-items/views/entry-view.d.ts +0 -15
  133. package/dist/src/modules/survey-editor/editor-card/add-items/views/item-type-grid-view.d.ts +0 -30
  134. package/dist/src/modules/survey-editor/editor-card/add-items/views/structure-view.d.ts +0 -16
  135. package/dist/src/modules/survey-editor/editor-card/add-items.d.ts +0 -1
  136. package/dist/src/modules/survey-editor/editor-card/copy-item-dropdown-menu.d.ts +0 -5
  137. package/dist/src/modules/survey-editor/editor-card/delete-item-context-menu.d.ts +0 -5
  138. package/dist/src/modules/survey-editor/editor-card/delete-item-dropdown-menu.d.ts +0 -7
  139. package/dist/src/modules/survey-editor/editor-card/editor-card-tab-trigger.d.ts +0 -15
  140. package/dist/src/modules/survey-editor/editor-card/expression-pseudo-code.d.ts +0 -8
  141. package/dist/src/modules/survey-editor/editor-card/group-items.d.ts +0 -2
  142. package/dist/src/modules/survey-editor/editor-card/hooks/use-armed-shortcut-sequence.d.ts +0 -11
  143. package/dist/src/modules/survey-editor/editor-card/hooks/use-group-list-keyboard.d.ts +0 -30
  144. package/dist/src/modules/survey-editor/editor-card/index.d.ts +0 -2
  145. package/dist/src/modules/survey-editor/editor-card/item-authoring-state-preview.d.ts +0 -16
  146. package/dist/src/modules/survey-editor/editor-card/item-color-menu.d.ts +0 -6
  147. package/dist/src/modules/survey-editor/editor-card/item-color-selector.d.ts +0 -5
  148. package/dist/src/modules/survey-editor/editor-card/item-editor-card-skeleton.d.ts +0 -2
  149. package/dist/src/modules/survey-editor/editor-card/item-editor-card.d.ts +0 -34
  150. package/dist/src/modules/survey-editor/editor-card/item-editor-context.d.ts +0 -23
  151. package/dist/src/modules/survey-editor/editor-card/item-expression-overview.d.ts +0 -33
  152. package/dist/src/modules/survey-editor/editor-card/item-key-editor.d.ts +0 -9
  153. package/dist/src/modules/survey-editor/editor-card/item-label-preview-and-editor.d.ts +0 -10
  154. package/dist/src/modules/survey-editor/editor-card/item-preview.d.ts +0 -8
  155. package/dist/src/modules/survey-editor/editor-card/item-sibling-navigation.d.ts +0 -5
  156. package/dist/src/modules/survey-editor/editor-card/item-type-icon-with-tooltip.d.ts +0 -8
  157. package/dist/src/modules/survey-editor/editor-card/survey-player-item-preview.d.ts +0 -6
  158. package/dist/src/modules/survey-editor/editor-instance-provider.d.ts +0 -9
  159. package/dist/src/modules/survey-editor/hooks/useClipboardValue.d.ts +0 -2
  160. package/dist/src/modules/survey-editor/hooks/useDeleteItem.d.ts +0 -11
  161. package/dist/src/modules/survey-editor/hooks/useEditor.d.ts +0 -12
  162. package/dist/src/modules/survey-editor/hooks/useEditorStateChange.d.ts +0 -18
  163. package/dist/src/modules/survey-editor/hooks/useKeyboardShortcuts.d.ts +0 -7
  164. package/dist/src/modules/survey-editor/index.d.ts +0 -20
  165. package/dist/src/modules/survey-editor/localization/date-fns.d.ts +0 -5
  166. package/dist/src/modules/survey-editor/localization/default-all.d.ts +0 -2
  167. package/dist/src/modules/survey-editor/localization/default-en.d.ts +0 -3
  168. package/dist/src/modules/survey-editor/localization/default-nl.d.ts +0 -2
  169. package/dist/src/modules/survey-editor/localization/index.d.ts +0 -5
  170. package/dist/src/modules/survey-editor/localization/runtime.d.ts +0 -4
  171. package/dist/src/modules/survey-editor/navigation/location.d.ts +0 -6
  172. package/dist/src/modules/survey-editor/navigation/navigation-provider.d.ts +0 -12
  173. package/dist/src/modules/survey-editor/navigation/navigation.d.ts +0 -22
  174. package/dist/src/modules/survey-editor/navigation/types.d.ts +0 -23
  175. package/dist/src/modules/survey-editor/primitives/input-with-ai-popover.d.ts +0 -35
  176. package/dist/src/modules/survey-editor/registry/authoring-state.d.ts +0 -17
  177. package/dist/src/modules/survey-editor/registry/index.d.ts +0 -8
  178. package/dist/src/modules/survey-editor/registry/registry-mappers.d.ts +0 -25
  179. package/dist/src/modules/survey-editor/registry/search-adapter.d.ts +0 -19
  180. package/dist/src/modules/survey-editor/registry/types.d.ts +0 -218
  181. package/dist/src/modules/survey-editor/routes/editor/_components/assistant-authoring-lock.d.ts +0 -7
  182. package/dist/src/modules/survey-editor/routes/editor/_components/editor-assistant-slot-context.d.ts +0 -6
  183. package/dist/src/modules/survey-editor/routes/editor/_components/editor-assistant-slot.d.ts +0 -8
  184. package/dist/src/modules/survey-editor/routes/editor/_components/editor-mode-switch.d.ts +0 -7
  185. package/dist/src/modules/survey-editor/routes/editor/_components/editor-workspace.d.ts +0 -30
  186. package/dist/src/modules/survey-editor/routes/editor/_components/footer.d.ts +0 -2
  187. package/dist/src/modules/survey-editor/routes/editor/_components/history-stack.d.ts +0 -2
  188. package/dist/src/modules/survey-editor/routes/editor/_components/main.d.ts +0 -7
  189. package/dist/src/modules/survey-editor/routes/editor/_components/workspace-presets.d.ts +0 -75
  190. package/dist/src/modules/survey-editor/routes/editor/asset-manager/index.d.ts +0 -2
  191. package/dist/src/modules/survey-editor/routes/editor/index.d.ts +0 -7
  192. package/dist/src/modules/survey-editor/routes/editor/item-editor/_components/item-editor-toolbar/breadcrumbs-nav.d.ts +0 -2
  193. package/dist/src/modules/survey-editor/routes/editor/item-editor/_components/item-editor-toolbar/item-editor-toolbar.d.ts +0 -6
  194. package/dist/src/modules/survey-editor/routes/editor/item-editor/_components/item-editor-toolbar/language-picker.d.ts +0 -2
  195. package/dist/src/modules/survey-editor/routes/editor/item-editor/_components/item-editor-toolbar/search-trigger.d.ts +0 -3
  196. package/dist/src/modules/survey-editor/routes/editor/item-editor/_components/item-editor-toolbar/survey-search.d.ts +0 -7
  197. package/dist/src/modules/survey-editor/routes/editor/item-editor/_components/survey-outline.d.ts +0 -3
  198. package/dist/src/modules/survey-editor/routes/editor/item-editor/_components/survey-workspace.d.ts +0 -12
  199. package/dist/src/modules/survey-editor/routes/editor/item-editor/index.d.ts +0 -6
  200. package/dist/src/modules/survey-editor/routes/editor/preview-mode/index.d.ts +0 -7
  201. package/dist/src/modules/survey-editor/routes/editor/preview-mode/page-break-divider.d.ts +0 -6
  202. package/dist/src/modules/survey-editor/routes/editor/preview-mode/preview-controls.d.ts +0 -15
  203. package/dist/src/modules/survey-editor/routes/editor/preview-mode/preview-tree.d.ts +0 -26
  204. package/dist/src/modules/survey-editor/routes/editor/preview-mode/survey-preview-canvas.d.ts +0 -16
  205. package/dist/src/modules/survey-editor/routes/editor/preview-mode/survey-preview-item.d.ts +0 -13
  206. package/dist/src/modules/survey-editor/routes/editor/preview-mode/use-preview-preferences.d.ts +0 -14
  207. package/dist/src/modules/survey-editor/routes/editor/translation-mode/index.d.ts +0 -2
  208. package/dist/src/modules/survey-editor/session-file.d.ts +0 -13
  209. package/dist/src/modules/survey-editor/store/editor-store-context.d.ts +0 -10
  210. package/dist/src/modules/survey-editor/store/editor-store-provider.d.ts +0 -7
  211. package/dist/src/modules/survey-editor/store/editor-store.d.ts +0 -109
  212. package/dist/src/modules/survey-editor/store/use-editor-store.d.ts +0 -4
  213. package/dist/src/modules/survey-editor/store/useItemNavigation.d.ts +0 -7
  214. package/dist/src/modules/survey-editor/survey-editor-config.d.ts +0 -38
  215. package/dist/src/modules/survey-editor/survey-editor.d.ts +0 -40
  216. package/dist/src/modules/survey-editor/utils/item-type-infos.d.ts +0 -23
  217. package/dist/src/modules/survey-editor/workspace.d.ts +0 -17
  218. package/dist/src/modules/survey-player/survey-item/survey-item-types/question-wrapper.d.ts +0 -5
  219. package/dist/survey-editor-animations.css +0 -87
  220. package/dist/survey-editor-animations.css.d.ts +0 -2
  221. package/dist/survey-editor-defaults.css +0 -15
  222. package/dist/survey-editor-defaults.css.d.ts +0 -2
  223. package/dist/survey-ui.cjs.js +0 -199
  224. package/dist/survey-ui.cjs.js.map +0 -1
  225. package/dist/survey-ui.es.js +0 -57954
  226. package/dist/survey-ui.es.js.map +0 -1
  227. package/dist/vite.svg +0 -1
  228. /package/dist/src/{components/rich-text/rich-text-link-utils.d.ts → lib/rich-text-link-url.d.ts} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"default-item-cores-C6VK2LFe.js","names":["defaultLocale"],"sources":["../../survey-core/build/survey-Dxt6iolo.mjs","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constants.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/constructFrom.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/toDate.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/defaultOptions.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startOfWeek.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startOfISOWeek.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getISOWeekYear.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/normalizeDates.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startOfDay.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/differenceInCalendarDays.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startOfISOWeekYear.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isDate.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/isValid.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startOfYear.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/en-US/_lib/formatDistance.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/en-US/_lib/formatLong.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/en-US/_lib/formatRelative.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/en-US/_lib/localize.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/_lib/buildMatchFn.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/en-US/_lib/match.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/locale/en-US.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getDayOfYear.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getISOWeek.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getWeekYear.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/startOfWeekYear.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/getWeek.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/addLeadingZeros.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/format/lightFormatters.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/format/formatters.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/format/longFormatters.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/_lib/protectedTokens.js","../../../node_modules/.pnpm/date-fns@4.1.0/node_modules/date-fns/format.js","../../survey-core/build/index.mjs","../src/modules/default-item-registry/items/form/model.ts","../src/modules/default-item-registry/items/choice/model.ts","../src/modules/default-item-registry/default-item-cores.ts"],"sourcesContent":["//#region src/utils.ts\nfunction hashString(seed) {\n\tlet hash = 2166136261;\n\tfor (let i = 0; i < seed.length; i++) {\n\t\thash ^= seed.charCodeAt(i);\n\t\thash = Math.imul(hash, 16777619);\n\t}\n\treturn hash >>> 0;\n}\nfunction createSeededRandom(seed) {\n\tlet state = hashString(seed);\n\treturn () => {\n\t\tstate = state + 1831565813 >>> 0;\n\t\tlet next = state;\n\t\tnext = Math.imul(next ^ next >>> 15, next | 1);\n\t\tnext ^= next + Math.imul(next ^ next >>> 7, next | 61);\n\t\treturn ((next ^ next >>> 14) >>> 0) / 4294967296;\n\t};\n}\nfunction shuffleArray(values, random = Math.random) {\n\tconst shuffledValues = [...values];\n\tfor (let i = shuffledValues.length - 1; i > 0; i--) {\n\t\tconst j = Math.floor(random() * (i + 1));\n\t\t[shuffledValues[i], shuffledValues[j]] = [shuffledValues[j], shuffledValues[i]];\n\t}\n\treturn shuffledValues;\n}\n/**\n* Shuffles an array of indices using the Fisher-Yates shuffle algorithm\n* @param length - The length of the array to create indices for\n* @returns A shuffled array of indices from 0 to length-1\n*/\nfunction shuffleIndices(length, random = Math.random) {\n\treturn shuffleArray(Array.from({ length }, (_, i) => i), random);\n}\nfunction structuredCloneMethod(obj) {\n\tif (typeof structuredClone !== \"undefined\") return structuredClone(obj);\n\treturn JSON.parse(JSON.stringify(obj));\n}\nconst ALPHABET = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\nfunction generateId() {\n\tconst length = 10;\n\tconst timestamp = Date.now();\n\tlet encodedTimestamp = \"\";\n\tlet t = timestamp;\n\tconst base = 62;\n\twhile (t > 0) {\n\t\tencodedTimestamp = ALPHABET.charAt(t % base) + encodedTimestamp;\n\t\tt = Math.floor(t / base);\n\t}\n\tlet randomPart = \"\";\n\tfor (let i = 0; i < length; i++) randomPart += ALPHABET.charAt(Math.floor(Math.random() * base));\n\treturn randomPart + encodedTimestamp;\n}\n/** Alphanumeric chars without ambiguous ones (0/O, 1/I) for human-readable coding keys. */\nconst CODING_KEY_ALPHABET = \"23456789ABCDEFGHJKLMNPQRSTUVWXYZ\";\n/**\n* Generates a short random coding key suitable for item keys in exports/codebooks.\n* @param length - Key length (default 4)\n* @returns A random string of the specified length.\n*/\nfunction generateCodingKey(length = 4) {\n\tconst base = 32;\n\tlet key = \"\";\n\tfor (let i = 0; i < length; i++) key += CODING_KEY_ALPHABET.charAt(Math.floor(Math.random() * base));\n\treturn key;\n}\n//#endregion\n//#region src/survey/utils/value-reference.ts\nconst SEPARATOR = \"...\";\nlet ValueReferenceMethod = /* @__PURE__ */ function(ValueReferenceMethod) {\n\tValueReferenceMethod[\"get\"] = \"get\";\n\tValueReferenceMethod[\"isDefined\"] = \"isDefined\";\n\treturn ValueReferenceMethod;\n}({});\nvar ValueReference = class ValueReference {\n\t_itemId;\n\t_name;\n\t_slotId;\n\tconstructor(str) {\n\t\tconst parts = str.split(SEPARATOR);\n\t\tif (parts.length !== 3) throw new Error(\"Invalid value reference: \" + str);\n\t\tthis._itemId = parts[0];\n\t\tthis._name = parts[1];\n\t\tthis._slotId = parts[2];\n\t}\n\tget itemId() {\n\t\treturn this._itemId;\n\t}\n\tget name() {\n\t\treturn this._name;\n\t}\n\tget slotId() {\n\t\treturn this._slotId;\n\t}\n\tset itemId(itemId) {\n\t\tthis._itemId = itemId;\n\t}\n\ttoString() {\n\t\treturn `${this._itemId}${SEPARATOR}${this._name}${this._slotId ? SEPARATOR + this._slotId : \"\"}`;\n\t}\n\tstatic fromParts(itemId, name, slotId) {\n\t\treturn new ValueReference(`${itemId}${SEPARATOR}${name}${SEPARATOR}${slotId}`);\n\t}\n};\nlet ReferenceUsageType = /* @__PURE__ */ function(ReferenceUsageType) {\n\tReferenceUsageType[\"displayConditions\"] = \"displayConditions\";\n\tReferenceUsageType[\"templateValues\"] = \"templateValues\";\n\tReferenceUsageType[\"validations\"] = \"validations\";\n\tReferenceUsageType[\"disabledConditions\"] = \"disabledConditions\";\n\tReferenceUsageType[\"prefills\"] = \"prefills\";\n\treturn ReferenceUsageType;\n}({});\n//#endregion\n//#region src/expressions/expression.ts\nconst ExpressionType = {\n\tConst: \"const\",\n\tResponseVariable: \"responseVariable\",\n\tContextVariable: \"contextVariable\",\n\tFunction: \"function\"\n};\nconst ContextVariableType = {\n\tLocale: \"locale\",\n\tParticipantFlag: \"participantFlag\",\n\tCustomValue: \"customValue\",\n\tCustomExpression: \"customExpression\"\n};\n/**\n* Base class for all expressions.\n*/\nvar Expression = class Expression {\n\ttype;\n\teditorConfig;\n\tconstructor(type, editorConfig) {\n\t\tthis.type = type;\n\t\tthis.editorConfig = editorConfig;\n\t}\n\tstatic deserialize(json) {\n\t\tif (!json) return;\n\t\tswitch (json.type) {\n\t\t\tcase ExpressionType.Const: return ConstExpression.deserialize(json);\n\t\t\tcase ExpressionType.ResponseVariable: return ResponseVariableExpression.deserialize(json);\n\t\t\tcase ExpressionType.ContextVariable: return ContextVariableExpression.deserialize(json);\n\t\t\tcase ExpressionType.Function: return FunctionExpression.deserialize(json);\n\t\t}\n\t}\n\tclone() {\n\t\treturn Expression.deserialize(this.serialize()) ?? (() => {\n\t\t\tthrow new Error(\"Failed to clone expression\");\n\t\t})();\n\t}\n};\nvar ConstExpression = class ConstExpression extends Expression {\n\tvalue;\n\tconstructor(value, editorConfig) {\n\t\tsuper(ExpressionType.Const, editorConfig);\n\t\tthis.value = value;\n\t\tthis.type = ExpressionType.Const;\n\t}\n\tstatic deserialize(json) {\n\t\tif (json.type !== ExpressionType.Const) throw new Error(\"Invalid expression type: \" + json.type);\n\t\treturn new ConstExpression(json.value, json.editorConfig);\n\t}\n\tget responseVariableRefs() {\n\t\treturn [];\n\t}\n\tserialize() {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tvalue: this.value,\n\t\t\teditorConfig: this.editorConfig\n\t\t};\n\t}\n\tupdateItemKeyReferences(_oldItemKey, _newItemKey) {\n\t\treturn false;\n\t}\n};\nvar ResponseVariableExpression = class ResponseVariableExpression extends Expression {\n\tvariableRef;\n\tconstructor(variableRef, editorConfig) {\n\t\tsuper(ExpressionType.ResponseVariable, editorConfig);\n\t\tthis.variableRef = variableRef;\n\t\tthis.type = ExpressionType.ResponseVariable;\n\t}\n\tstatic deserialize(json) {\n\t\tif (json.type !== ExpressionType.ResponseVariable) throw new Error(\"Invalid expression type: \" + json.type);\n\t\treturn new ResponseVariableExpression(json.variableRef, json.editorConfig);\n\t}\n\tget responseVariableRefs() {\n\t\treturn [new ValueReference(this.variableRef)];\n\t}\n\tget responseVariableRef() {\n\t\treturn new ValueReference(this.variableRef);\n\t}\n\tserialize() {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tvariableRef: this.variableRef,\n\t\t\teditorConfig: this.editorConfig\n\t\t};\n\t}\n};\nvar ContextVariableExpression = class ContextVariableExpression extends Expression {\n\tcontextType;\n\tkey;\n\targuments;\n\tasType;\n\tconstructor(contextType, key, args, asType, editorConfig) {\n\t\tsuper(ExpressionType.ContextVariable, editorConfig);\n\t\tthis.type = ExpressionType.ContextVariable;\n\t\tthis.contextType = contextType;\n\t\tthis.key = key;\n\t\tthis.arguments = args;\n\t\tthis.asType = asType;\n\t}\n\tstatic deserialize(json) {\n\t\tif (json.type !== ExpressionType.ContextVariable) throw new Error(\"Invalid expression type: \" + json.type);\n\t\treturn new ContextVariableExpression(json.contextType, Expression.deserialize(json.key), json.arguments?.map((arg) => Expression.deserialize(arg)), json.asType, json.editorConfig);\n\t}\n\tget responseVariableRefs() {\n\t\treturn this.arguments?.flatMap((arg) => arg?.responseVariableRefs).filter((ref) => ref !== void 0) ?? [];\n\t}\n\tserialize() {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tcontextType: this.contextType,\n\t\t\tkey: this.key?.serialize(),\n\t\t\targuments: this.arguments?.map((arg) => arg?.serialize()),\n\t\t\tasType: this.asType,\n\t\t\teditorConfig: this.editorConfig\n\t\t};\n\t}\n};\nlet FunctionExpressionNames = /* @__PURE__ */ function(FunctionExpressionNames) {\n\tFunctionExpressionNames[\"and\"] = \"and\";\n\tFunctionExpressionNames[\"or\"] = \"or\";\n\tFunctionExpressionNames[\"not\"] = \"not\";\n\tFunctionExpressionNames[\"list_contains\"] = \"list_contains\";\n\tFunctionExpressionNames[\"eq\"] = \"eq\";\n\tFunctionExpressionNames[\"gt\"] = \"gt\";\n\tFunctionExpressionNames[\"gte\"] = \"gte\";\n\tFunctionExpressionNames[\"lt\"] = \"lt\";\n\tFunctionExpressionNames[\"lte\"] = \"lte\";\n\tFunctionExpressionNames[\"in_range\"] = \"in_range\";\n\tFunctionExpressionNames[\"sum\"] = \"sum\";\n\tFunctionExpressionNames[\"min\"] = \"min\";\n\tFunctionExpressionNames[\"max\"] = \"max\";\n\tFunctionExpressionNames[\"str_eq\"] = \"str_eq\";\n\tFunctionExpressionNames[\"date_eq\"] = \"date_eq\";\n\treturn FunctionExpressionNames;\n}({});\nvar FunctionExpression = class FunctionExpression extends Expression {\n\tfunctionName;\n\targuments;\n\tconstructor(functionName, args, editorConfig) {\n\t\tsuper(ExpressionType.Function);\n\t\tthis.type = ExpressionType.Function;\n\t\tthis.functionName = functionName;\n\t\tthis.arguments = args;\n\t\tthis.editorConfig = editorConfig;\n\t}\n\tstatic deserialize(json) {\n\t\tif (json.type !== ExpressionType.Function) throw new Error(\"Invalid expression type: \" + json.type);\n\t\tconst functionName = json.functionName;\n\t\tif (!Object.values(FunctionExpressionNames).includes(functionName)) throw new Error(\"Invalid function name: \" + functionName);\n\t\tconst expr = new FunctionExpression(functionName, json.arguments.map((arg) => Expression.deserialize(arg)));\n\t\texpr.editorConfig = json.editorConfig;\n\t\treturn expr;\n\t}\n\tget responseVariableRefs() {\n\t\tconst refStrings = this.arguments.flatMap((arg) => arg?.responseVariableRefs).filter((ref) => ref !== void 0).map((ref) => ref.toString());\n\t\treturn [...new Set(refStrings)].map((ref) => new ValueReference(ref));\n\t}\n\tserialize() {\n\t\treturn {\n\t\t\ttype: this.type,\n\t\t\tfunctionName: this.functionName,\n\t\t\targuments: this.arguments.map((arg) => arg?.serialize()),\n\t\t\teditorConfig: this.editorConfig\n\t\t};\n\t}\n};\n//#endregion\n//#region src/expressions/template-value.ts\nlet TemplateDefTypes = /* @__PURE__ */ function(TemplateDefTypes) {\n\tTemplateDefTypes[\"Default\"] = \"default\";\n\tTemplateDefTypes[\"Date2String\"] = \"date2string\";\n\treturn TemplateDefTypes;\n}({});\nconst serializeTemplateValue = (templateValue) => {\n\tconst json = {\n\t\ttype: templateValue.type,\n\t\treturnType: templateValue.returnType,\n\t\texpression: templateValue.expression?.serialize()\n\t};\n\tif (templateValue.type === \"date2string\") json.dateFormat = templateValue.dateFormat;\n\treturn json;\n};\nconst serializeTemplateValues = (templateValues) => {\n\tconst json = {};\n\tfor (const [key, value] of templateValues.entries()) json[key] = serializeTemplateValue(value);\n\treturn json;\n};\nconst deserializeTemplateValue = (json) => {\n\treturn {\n\t\ttype: json.type,\n\t\texpression: json.expression ? Expression.deserialize(json.expression) : void 0,\n\t\treturnType: json.returnType,\n\t\tdateFormat: json.dateFormat\n\t};\n};\nconst deserializeTemplateValues = (json) => {\n\treturn new Map(Object.entries(json).map(([key, value]) => [key, deserializeTemplateValue(value)]));\n};\n//#endregion\n//#region src/survey/responses/value-types.ts\nconst ValueType = {\n\tstring: \"string\",\n\tduration: \"duration\",\n\treference: \"reference\",\n\tnumber: \"number\",\n\tboolean: \"boolean\",\n\tdate: \"date\",\n\tstringArray: \"string[]\",\n\tdurationArray: \"duration[]\",\n\treferenceArray: \"reference[]\",\n\tnumberArray: \"number[]\",\n\tdateArray: \"date[]\"\n};\nconst DurationUnits = {\n\tseconds: \"seconds\",\n\tminutes: \"minutes\",\n\thours: \"hours\",\n\tdays: \"days\",\n\tweeks: \"weeks\",\n\tmonths: \"months\",\n\tyears: \"years\"\n};\nconst NumberPrecision = {\n\tint: \"int\",\n\tfloat: \"float\"\n};\nfunction isPlainObject(value) {\n\treturn value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\nfunction isFiniteNumber(value) {\n\treturn typeof value === \"number\" && Number.isFinite(value);\n}\nfunction isStringArray(value) {\n\treturn Array.isArray(value) && value.every((item) => typeof item === \"string\");\n}\nfunction isNumberArray(value) {\n\treturn Array.isArray(value) && value.every((item) => isFiniteNumber(item));\n}\nfunction isOptionalNumberPrecision(value) {\n\treturn value === void 0 || value === NumberPrecision.int || value === NumberPrecision.float;\n}\nfunction isDurationUnit(value) {\n\treturn typeof value === \"string\" && Object.values(DurationUnits).includes(value);\n}\nfunction isResponseValue(value) {\n\tif (!isPlainObject(value) || typeof value.type !== \"string\") return false;\n\tswitch (value.type) {\n\t\tcase ValueType.string:\n\t\tcase ValueType.reference: return typeof value.value === \"string\";\n\t\tcase ValueType.number: return isFiniteNumber(value.value) && isOptionalNumberPrecision(value.precision);\n\t\tcase ValueType.boolean: return typeof value.value === \"boolean\";\n\t\tcase ValueType.date: return isFiniteNumber(value.value);\n\t\tcase ValueType.duration: return isFiniteNumber(value.value) && isDurationUnit(value.unit) && isOptionalNumberPrecision(value.precision);\n\t\tcase ValueType.stringArray:\n\t\tcase ValueType.referenceArray: return isStringArray(value.value);\n\t\tcase ValueType.numberArray:\n\t\tcase ValueType.dateArray: return isNumberArray(value.value) && (value.type !== ValueType.numberArray || isOptionalNumberPrecision(value.precision));\n\t\tcase ValueType.durationArray: return isNumberArray(value.value) && isDurationUnit(value.unit) && isOptionalNumberPrecision(value.precision);\n\t\tdefault: return false;\n\t}\n}\nfunction assertResponseValue(value, path) {\n\tif (!isResponseValue(value)) throw new Error(`Invalid response value at '${path}'`);\n}\n//#endregion\n//#region src/survey/items/utils.ts\nconst displayConditionsFromJson = (json) => {\n\treturn {\n\t\troot: json.root ? Expression.deserialize(json.root) : void 0,\n\t\tcomponents: json.components ? Object.fromEntries(Object.entries(json.components).map(([key, value]) => [key, Expression.deserialize(value)])) : void 0\n\t};\n};\nconst disabledConditionsFromJson = (json) => {\n\treturn { components: json.components ? Object.fromEntries(Object.entries(json.components).map(([key, value]) => [key, Expression.deserialize(value)])) : void 0 };\n};\n//#endregion\n//#region src/survey/items/prefill.ts\nconst SurveyItemPrefillApplyMode = { ifEmpty: \"ifEmpty\" };\nconst SurveyItemPrefillTargetType = {\n\titemResponse: \"itemResponse\",\n\tfield: \"field\",\n\tembeddedField: \"embeddedField\"\n};\nfunction deserializeSurveyItemPrefill(json) {\n\tswitch (json.source.type) {\n\t\tcase \"static\": return {\n\t\t\tid: json.id,\n\t\t\ttarget: json.target,\n\t\t\twhen: Expression.deserialize(json.when),\n\t\t\tapply: json.apply,\n\t\t\tsource: {\n\t\t\t\ttype: \"static\",\n\t\t\t\tvalue: json.source.value\n\t\t\t}\n\t\t};\n\t\tcase \"expression\": return {\n\t\t\tid: json.id,\n\t\t\ttarget: json.target,\n\t\t\twhen: Expression.deserialize(json.when),\n\t\t\tapply: json.apply,\n\t\t\tsource: {\n\t\t\t\ttype: \"expression\",\n\t\t\t\texpression: Expression.deserialize(json.source.expression) ?? (() => {\n\t\t\t\t\tthrow new Error(`Prefill '${json.id}' is missing a valid expression source`);\n\t\t\t\t})()\n\t\t\t}\n\t\t};\n\t\tcase \"templateValue\": return {\n\t\t\tid: json.id,\n\t\t\ttarget: json.target,\n\t\t\twhen: Expression.deserialize(json.when),\n\t\t\tapply: json.apply,\n\t\t\tsource: {\n\t\t\t\ttype: \"templateValue\",\n\t\t\t\tkey: json.source.key\n\t\t\t}\n\t\t};\n\t\tcase \"previousResponse\": return {\n\t\t\tid: json.id,\n\t\t\ttarget: json.target,\n\t\t\twhen: Expression.deserialize(json.when),\n\t\t\tapply: json.apply,\n\t\t\tsource: {\n\t\t\t\ttype: \"previousResponse\",\n\t\t\t\tref: json.source.ref,\n\t\t\t\tifUnsupported: json.source.ifUnsupported\n\t\t\t}\n\t\t};\n\t\tdefault: throw new Error(`Unsupported prefill source type: ${json.source.type}`);\n\t}\n}\nfunction serializeSurveyItemPrefill(prefill) {\n\tswitch (prefill.source.type) {\n\t\tcase \"static\": return {\n\t\t\tid: prefill.id,\n\t\t\ttarget: prefill.target,\n\t\t\twhen: prefill.when?.serialize(),\n\t\t\tapply: prefill.apply,\n\t\t\tsource: {\n\t\t\t\ttype: \"static\",\n\t\t\t\tvalue: prefill.source.value\n\t\t\t}\n\t\t};\n\t\tcase \"expression\": return {\n\t\t\tid: prefill.id,\n\t\t\ttarget: prefill.target,\n\t\t\twhen: prefill.when?.serialize(),\n\t\t\tapply: prefill.apply,\n\t\t\tsource: {\n\t\t\t\ttype: \"expression\",\n\t\t\t\texpression: prefill.source.expression.serialize() ?? (() => {\n\t\t\t\t\tthrow new Error(`Prefill '${prefill.id}' cannot serialize an empty expression source`);\n\t\t\t\t})()\n\t\t\t}\n\t\t};\n\t\tcase \"templateValue\": return {\n\t\t\tid: prefill.id,\n\t\t\ttarget: prefill.target,\n\t\t\twhen: prefill.when?.serialize(),\n\t\t\tapply: prefill.apply,\n\t\t\tsource: {\n\t\t\t\ttype: \"templateValue\",\n\t\t\t\tkey: prefill.source.key\n\t\t\t}\n\t\t};\n\t\tcase \"previousResponse\": return {\n\t\t\tid: prefill.id,\n\t\t\ttarget: prefill.target,\n\t\t\twhen: prefill.when?.serialize(),\n\t\t\tapply: prefill.apply,\n\t\t\tsource: {\n\t\t\t\ttype: \"previousResponse\",\n\t\t\t\tref: prefill.source.ref,\n\t\t\t\tifUnsupported: prefill.source.ifUnsupported\n\t\t\t}\n\t\t};\n\t\tdefault: throw new Error(`Unsupported prefill source type: ${prefill.source.type}`);\n\t}\n}\nfunction prefillTargetsEqual(left, right) {\n\tif (left.type !== right.type) return false;\n\tswitch (left.type) {\n\t\tcase SurveyItemPrefillTargetType.itemResponse: return true;\n\t\tcase SurveyItemPrefillTargetType.field: return left.fieldId === right.fieldId;\n\t\tcase SurveyItemPrefillTargetType.embeddedField: return left.optionId === right.optionId && left.fieldId === right.fieldId;\n\t\tdefault: return false;\n\t}\n}\n//#endregion\n//#region src/survey/items/survey-item.ts\n/**\n* Base class for survey item handlers.\n* Each handler holds type, id, key, and config (properly typed) and implements core methods.\n* Subclass for each item type; the core works with SurveyItemHandler only—no casting needed.\n*/\nvar SurveyItemCore = class {\n\tid;\n\tkey;\n\tconfig;\n\t_rawItem;\n\tdisplayConditions;\n\tdisabledConditions;\n\tvalidations;\n\tprefills;\n\tconstructor(rawItem) {\n\t\tthis._rawItem = rawItem;\n\t\tthis.updateExpressions();\n\t\tthis.id = this._rawItem.id;\n\t\tthis.key = this._rawItem.key;\n\t\tthis.config = this.parseConfig(this._rawItem.config);\n\t}\n\tgetAdditionalResponseValueSlots() {\n\t\treturn {};\n\t}\n\tgetAvailableResponseValueSlots(byType) {\n\t\tconst valueRefs = {};\n\t\tfor (const slot of this.getResponseSlotDefinitions()) {\n\t\t\tvalueRefs[`${this.id}...get...${slot.slotId}`] = slot.valueType;\n\t\t\tvalueRefs[`${this.id}...isDefined...${slot.slotId}`] = ValueType.boolean;\n\t\t}\n\t\tObject.assign(valueRefs, this.getAdditionalResponseValueSlots());\n\t\tif (!byType) return valueRefs;\n\t\treturn Object.fromEntries(Object.entries(valueRefs).filter(([, valueType]) => valueType === byType));\n\t}\n\tget rawItem() {\n\t\treturn this._rawItem;\n\t}\n\tget metadata() {\n\t\treturn this._rawItem.metadata ?? {};\n\t}\n\tset metadata(metadata) {\n\t\tthis.updateRawItem({\n\t\t\t...this._rawItem,\n\t\t\tmetadata\n\t\t});\n\t}\n\tget editorMetadata() {\n\t\treturn this._rawItem.editorMetadata ?? {};\n\t}\n\tsetCreatedAt(timestamp) {\n\t\tthis.updateRawItem({\n\t\t\t...this._rawItem,\n\t\t\teditorMetadata: {\n\t\t\t\t...this._rawItem.editorMetadata,\n\t\t\t\tcreatedAt: timestamp\n\t\t\t}\n\t\t});\n\t}\n\tsetModifiedAt(timestamp) {\n\t\tthis.updateRawItem({\n\t\t\t...this._rawItem,\n\t\t\teditorMetadata: {\n\t\t\t\t...this._rawItem.editorMetadata,\n\t\t\t\tcreatedAt: this._rawItem.editorMetadata?.createdAt ?? timestamp,\n\t\t\t\tupdatedAt: timestamp\n\t\t\t}\n\t\t});\n\t}\n\tupdateRawItem(rawItem) {\n\t\tif (rawItem.id !== this.id) throw new Error(\"Cannot update raw item with a different id\");\n\t\tthis._rawItem = rawItem;\n\t\tthis.updateExpressions();\n\t\tthis.key = rawItem.key;\n\t\tthis.config = this.parseConfig(rawItem.config);\n\t}\n\tupdateExpressions() {\n\t\tthis.displayConditions = this._rawItem.displayConditions ? displayConditionsFromJson(this._rawItem.displayConditions) : void 0;\n\t\tthis.disabledConditions = this._rawItem.disabledConditions ? disabledConditionsFromJson(this._rawItem.disabledConditions) : void 0;\n\t\tthis.validations = this._rawItem.validations ? Object.fromEntries(Object.entries(this._rawItem.validations).map(([key, value]) => [key, Expression.deserialize(value)])) : void 0;\n\t\tthis.prefills = this._rawItem.prefills?.map((prefill) => deserializeSurveyItemPrefill(prefill));\n\t}\n\tgetReferenceUsages() {\n\t\tconst usages = [];\n\t\tif (this.displayConditions) {\n\t\t\tfor (const ref of this.displayConditions.root?.responseVariableRefs || []) usages.push({\n\t\t\t\titemId: this.id,\n\t\t\t\tusageType: \"displayConditions\",\n\t\t\t\tvalueReference: ref\n\t\t\t});\n\t\t\tfor (const [componentKey, expression] of Object.entries(this.displayConditions.components || {})) for (const ref of expression?.responseVariableRefs || []) usages.push({\n\t\t\t\titemId: this.id,\n\t\t\t\tfullComponentKey: componentKey,\n\t\t\t\tusageType: \"displayConditions\",\n\t\t\t\tvalueReference: ref\n\t\t\t});\n\t\t}\n\t\tif (this.disabledConditions) for (const [componentKey, expression] of Object.entries(this.disabledConditions.components || {})) for (const ref of expression?.responseVariableRefs || []) usages.push({\n\t\t\titemId: this.id,\n\t\t\tfullComponentKey: componentKey,\n\t\t\tusageType: \"disabledConditions\",\n\t\t\tvalueReference: ref\n\t\t});\n\t\tif (this.validations) for (const [validationKey, expression] of Object.entries(this.validations)) for (const ref of expression?.responseVariableRefs || []) usages.push({\n\t\t\titemId: this.id,\n\t\t\tfullComponentKey: validationKey,\n\t\t\tusageType: \"validations\",\n\t\t\tvalueReference: ref\n\t\t});\n\t\tif (this.prefills) for (const prefill of this.prefills) {\n\t\t\tfor (const ref of prefill.when?.responseVariableRefs || []) usages.push({\n\t\t\t\titemId: this.id,\n\t\t\t\tfullComponentKey: prefill.id,\n\t\t\t\tusageType: \"prefills\",\n\t\t\t\tvalueReference: ref\n\t\t\t});\n\t\t\tif (prefill.source.type === \"expression\") for (const ref of prefill.source.expression.responseVariableRefs || []) usages.push({\n\t\t\t\titemId: this.id,\n\t\t\t\tfullComponentKey: prefill.id,\n\t\t\t\tusageType: \"prefills\",\n\t\t\t\tvalueReference: ref\n\t\t\t});\n\t\t}\n\t\treturn usages;\n\t}\n\tresolvePrefillTarget(target) {\n\t\tconst slotDefinitions = this.getResponseSlotDefinitions();\n\t\tconst explicitMatch = slotDefinitions.find((slot) => slot.prefillTarget !== void 0 && prefillTargetsEqual(slot.prefillTarget, target));\n\t\tif (explicitMatch) return explicitMatch;\n\t\tif (target.type === SurveyItemPrefillTargetType.itemResponse && slotDefinitions.length === 1) return slotDefinitions[0];\n\t}\n\tnormalizePrefillValue(_prefill, targetSlot, value) {\n\t\treturn value.type === targetSlot.valueType ? value : void 0;\n\t}\n};\n//#endregion\n//#region src/survey/items/types.ts\nlet ReservedSurveyItemTypes = /* @__PURE__ */ function(ReservedSurveyItemTypes) {\n\tReservedSurveyItemTypes[\"Group\"] = \"group\";\n\tReservedSurveyItemTypes[\"PageBreak\"] = \"page-break\";\n\treturn ReservedSurveyItemTypes;\n}({});\n//#endregion\n//#region src/survey/item-key.ts\n/**\n* SurveyItemKey stores the key of the item and the path to the item.\n*/\nvar SurveyItemKey = class {\n\t_itemKey;\n\t_path;\n\t_keySeparator;\n\tconstructor(itemKey, path, keySeparator = \".\") {\n\t\tthis._itemKey = itemKey;\n\t\tthis._path = path ?? [];\n\t\tthis._keySeparator = keySeparator;\n\t}\n\tget itemKey() {\n\t\treturn this._itemKey;\n\t}\n\tget path() {\n\t\treturn this._path;\n\t}\n\tget parentFullKey() {\n\t\treturn this._path.join(this._keySeparator);\n\t}\n\tget fullKey() {\n\t\treturn [...this._path, this._itemKey].join(this._keySeparator);\n\t}\n\tget isRoot() {\n\t\treturn this._path.length === 0;\n\t}\n\tget keySeparator() {\n\t\treturn this._keySeparator;\n\t}\n\tset keySeparator(keySeparator) {\n\t\tthis._keySeparator = keySeparator;\n\t}\n};\n//#endregion\n//#region src/survey/utils/group-utils.ts\n/**\n* Shared utilities for array operations.\n*/\n/**\n* Swap two elements in an array by index.\n* @returns A new array with the elements swapped\n*/\nfunction swapArrayElements(arr, fromIndex, toIndex) {\n\tconst result = [...arr];\n\t[result[fromIndex], result[toIndex]] = [result[toIndex], result[fromIndex]];\n\treturn result;\n}\n/**\n* Move an element from one index to another.\n* @returns A new array with the element moved\n*/\nfunction moveArrayElement(arr, fromIndex, toIndex) {\n\tconst result = [...arr];\n\tconst [moved] = result.splice(fromIndex, 1);\n\tresult.splice(toIndex, 0, moved);\n\treturn result;\n}\n//#endregion\n//#region src/survey/registry/built-in-items.ts\nvar GroupItemCore = class extends SurveyItemCore {\n\ttype = \"group\";\n\tparseConfig(rawConfig) {\n\t\tconst cfg = rawConfig ?? {};\n\t\treturn {\n\t\t\titems: cfg.items,\n\t\t\tshuffleItems: cfg.shuffleItems,\n\t\t\tisRoot: cfg.isRoot\n\t\t};\n\t}\n\tserializeConfig() {\n\t\treturn this.config;\n\t}\n\tisInteractive() {\n\t\treturn false;\n\t}\n\tgetResponseSlotDefinitions() {\n\t\treturn [];\n\t}\n\tisRoot() {\n\t\treturn this.config.isRoot ?? false;\n\t}\n\tget items() {\n\t\treturn this.config.items ?? [];\n\t}\n\t/**\n\t* Add a child item id to this group at the given index.\n\t* @param itemId The id of the item to add to this group.\n\t* @param index The index at which to add the item. If not provided, the item is added to the end of the group.\n\t*/\n\taddChild(itemId, index) {\n\t\tconst items = this.config.items ??= [];\n\t\tconst insertIndex = index !== void 0 ? Math.min(index, items.length) : items.length;\n\t\titems.splice(insertIndex, 0, itemId);\n\t\tthis.updateRawItem({\n\t\t\t...this.rawItem,\n\t\t\tconfig: { ...this.config }\n\t\t});\n\t}\n\t/**\n\t* Remove a child item id from this group.\n\t* @param itemId The id of the item to remove from this group.\n\t*/\n\tremoveChild(itemId) {\n\t\tconst items = this.config.items ??= [];\n\t\tconst index = items.indexOf(itemId);\n\t\tif (index !== -1) {\n\t\t\titems.splice(index, 1);\n\t\t\tthis.updateRawItem({\n\t\t\t\t...this.rawItem,\n\t\t\t\tconfig: { ...this.config }\n\t\t\t});\n\t\t}\n\t}\n\t/**\n\t* Check if an item is a direct child of this group.\n\t*/\n\thasChild(itemId) {\n\t\treturn this.items.includes(itemId);\n\t}\n\t/** Whether items in this group should be shuffled. */\n\tget shuffleItems() {\n\t\treturn this.config.shuffleItems ?? false;\n\t}\n\tset shuffleItems(value) {\n\t\tthis.config.shuffleItems = value;\n\t\tthis.updateRawItem({\n\t\t\t...this.rawItem,\n\t\t\tconfig: { ...this.config }\n\t\t});\n\t}\n\t/**\n\t* Get the ordered list of child item ids.\n\t*/\n\tgetChildrenIds() {\n\t\treturn [...this.items];\n\t}\n\t/**\n\t* Swap two items by their positions in the group.\n\t* @throws Error if indices are out of bounds\n\t*/\n\tswapItemsByIndex(from, to) {\n\t\tconst items = this.items;\n\t\tif (from < 0 || from >= items.length || to < 0 || to >= items.length) throw new Error(`Index out of bounds. Valid range is 0-${items.length - 1}`);\n\t\tif (from === to) return;\n\t\tthis.config.items = swapArrayElements(items, from, to);\n\t\tthis.updateRawItem({\n\t\t\t...this.rawItem,\n\t\t\tconfig: { ...this.config }\n\t\t});\n\t}\n\t/**\n\t* Swap two items by their ids.\n\t* @throws Error if either id is not found in this group\n\t*/\n\tswapItemsById(id, withId) {\n\t\tconst items = this.items;\n\t\tconst index1 = items.indexOf(id);\n\t\tconst index2 = items.indexOf(withId);\n\t\tif (index1 === -1) throw new Error(`Item '${id}' not found in group '${this.key}'`);\n\t\tif (index2 === -1) throw new Error(`Item '${withId}' not found in group '${this.key}'`);\n\t\tthis.swapItemsByIndex(index1, index2);\n\t}\n\t/**\n\t* Move an item by id to a specific index.\n\t* @throws Error if the item is not found or index is out of bounds\n\t*/\n\tmoveItemToIndex(id, index) {\n\t\tconst items = this.items;\n\t\tconst fromIndex = items.indexOf(id);\n\t\tif (fromIndex === -1) throw new Error(`Item '${id}' not found in group '${this.key}'`);\n\t\tif (index < 0 || index >= items.length) throw new Error(`Index out of bounds. Valid range is 0-${items.length - 1}`);\n\t\tif (fromIndex === index) return;\n\t\tthis.config.items = moveArrayElement(items, fromIndex, index);\n\t\tthis.updateRawItem({\n\t\t\t...this.rawItem,\n\t\t\tconfig: { ...this.config }\n\t\t});\n\t}\n};\nvar PageBreakItemCore = class extends SurveyItemCore {\n\ttype = \"page-break\";\n\tparseConfig(_rawConfig) {\n\t\treturn {};\n\t}\n\tserializeConfig() {}\n\tisInteractive() {\n\t\treturn false;\n\t}\n\tgetResponseSlotDefinitions() {\n\t\treturn [];\n\t}\n};\nconst builtInItemCoreRegistry = {\n\t[\"group\"]: GroupItemCore,\n\t[\"page-break\"]: PageBreakItemCore\n};\nconst isBuiltInItemType = (itemType) => itemType in builtInItemCoreRegistry;\n//#endregion\n//#region src/survey/registry/item-registry.ts\n/** Convert constructor registry to explicit definitions for higher-layer composition. */\nfunction toItemTypeDefinitionRegistry(registry) {\n\treturn Object.fromEntries(Object.entries(registry).map(([itemType, constructor]) => [itemType, {\n\t\titemType,\n\t\tconstructor\n\t}]));\n}\n/**\n* Creates a handler instance for a raw survey item.\n* Uses built-in registry for group/page-break, otherwise the provided plugin registry.\n*/\nfunction createItemCore(rawItem, pluginRegistry) {\n\tif (isBuiltInItemType(rawItem.itemType)) {\n\t\tconst HandlerClass = builtInItemCoreRegistry[rawItem.itemType];\n\t\treturn new HandlerClass(rawItem);\n\t}\n\tif (pluginRegistry && rawItem.itemType in pluginRegistry) {\n\t\tconst HandlerClass = pluginRegistry[rawItem.itemType];\n\t\treturn new HandlerClass(rawItem);\n\t}\n\tthrow new Error(`Unknown item type: ${rawItem.itemType}`);\n}\n/**\n* Merge built-in handlers with plugin registry for a complete registry.\n*/\nfunction createFullRegistry(pluginRegistry) {\n\treturn {\n\t\t...builtInItemCoreRegistry,\n\t\t...pluginRegistry\n\t};\n}\n/** Build full registry as explicit definitions for editor/ui composition. */\nfunction createItemTypeDefinitionRegistry(pluginRegistry) {\n\treturn toItemTypeDefinitionRegistry(createFullRegistry(pluginRegistry));\n}\n//#endregion\n//#region src/survey/survey-file-schema.ts\nconst CURRENT_SURVEY_SCHEMA = \"https://github.com/case-framework/case-survey-toolkit/packages/survey-core/schemas/survey-schema.json\";\n//#endregion\n//#region src/survey/utils/translations.ts\nconst validateLocale = (locale) => {\n\tif (locale.trim() === \"\") throw new Error(\"Locale cannot be empty\");\n};\nvar SurveyItemTranslations = class SurveyItemTranslations {\n\t_translations;\n\tconstructor() {\n\t\tthis._translations = {};\n\t}\n\tsetContent(locale, contentKey, content) {\n\t\tvalidateLocale(locale);\n\t\tif (!this._translations?.[locale]) {\n\t\t\tif (!content) return;\n\t\t\tthis._translations[locale] = {};\n\t\t}\n\t\tif (!content) delete this._translations[locale][contentKey];\n\t\telse this._translations[locale][contentKey] = content;\n\t}\n\tsetAllForLocale(locale, content) {\n\t\tvalidateLocale(locale);\n\t\tif (!this._translations?.[locale]) {\n\t\t\tif (!content) return;\n\t\t\tthis._translations[locale] = {};\n\t\t}\n\t\tthis._translations[locale] = content || {};\n\t}\n\tget locales() {\n\t\treturn Object.keys(this._translations || {});\n\t}\n\tgetAllForLocale(locale) {\n\t\treturn this._translations?.[locale];\n\t}\n\tgetContent(locale, contentKey, fallbackLocale) {\n\t\tconst content = this._translations?.[locale]?.[contentKey];\n\t\tif (content) return content;\n\t\tif (fallbackLocale) return this._translations?.[fallbackLocale]?.[contentKey];\n\t}\n\t/**\n\t* Create a deep clone that can be safely mutated before persisting with\n\t* `setItemTranslations` or `updateItemTranslations`.\n\t*/\n\tclone() {\n\t\tconst cloned = new SurveyItemTranslations();\n\t\tfor (const locale of this.locales) {\n\t\t\tconst localeContent = this.getAllForLocale(locale);\n\t\t\tif (!localeContent) continue;\n\t\t\tcloned.setAllForLocale(locale, structuredCloneMethod(localeContent));\n\t\t}\n\t\treturn cloned;\n\t}\n\t/**\n\t* Remove a single content key from every locale in this translation set.\n\t*/\n\tremoveContentKey(contentKey) {\n\t\tfor (const locale of this.locales) delete this._translations?.[locale]?.[contentKey];\n\t}\n\t/**\n\t* Remove every content key that is exactly the prefix or nested beneath it.\n\t*/\n\tremoveContentKeysWithPrefix(prefix) {\n\t\tfor (const locale of this.locales) {\n\t\t\tconst localeContent = this._translations?.[locale];\n\t\t\tif (!localeContent) continue;\n\t\t\tfor (const contentKey of Object.keys(localeContent)) if (contentKey === prefix || contentKey.startsWith(prefix + \".\")) delete localeContent[contentKey];\n\t\t}\n\t}\n\t/**\n\t* Remove empty locales in place.\n\t* Returns `undefined` when no translations remain so callers can pass the\n\t* result directly into `setItemTranslations` / `updateItemTranslations`.\n\t*/\n\tcompact() {\n\t\tfor (const locale of this.locales) {\n\t\t\tconst localeContent = this._translations?.[locale];\n\t\t\tif (!localeContent) continue;\n\t\t\tif (Object.keys(localeContent).length === 0) delete this._translations?.[locale];\n\t\t}\n\t\treturn this.locales.length > 0 ? this : void 0;\n\t}\n};\nvar SurveyTranslations = class {\n\t_translations;\n\tconstructor(translations) {\n\t\tthis._translations = translations || {};\n\t}\n\tserialize() {\n\t\tif (this.locales.length === 0) return;\n\t\treturn this._translations;\n\t}\n\tget locales() {\n\t\treturn Object.keys(this._translations);\n\t}\n\tremoveLocale(locale) {\n\t\tvalidateLocale(locale);\n\t\tdelete this._translations[locale];\n\t}\n\trenameLocale(oldLocale, newLocale) {\n\t\tvalidateLocale(oldLocale);\n\t\tvalidateLocale(newLocale);\n\t\tif (this._translations[oldLocale]) {\n\t\t\tthis._translations[newLocale] = this._translations[oldLocale];\n\t\t\tdelete this._translations[oldLocale];\n\t\t}\n\t}\n\tcloneLocaleAs(locale, newLocale) {\n\t\tvalidateLocale(locale);\n\t\tvalidateLocale(newLocale);\n\t\tif (this._translations[locale]) this._translations[newLocale] = structuredCloneMethod(this._translations[locale]);\n\t}\n\tget surveyCardContent() {\n\t\tconst translations = {};\n\t\tfor (const locale of this.locales) {\n\t\t\tconst contentForLocale = this._translations?.[locale]?.surveyCardContent;\n\t\t\tif (contentForLocale) translations[locale] = contentForLocale;\n\t\t}\n\t\treturn translations;\n\t}\n\tget navigationContent() {\n\t\tconst translations = {};\n\t\tfor (const locale of this.locales) {\n\t\t\tconst contentForLocale = this._translations?.[locale]?.navigationContent;\n\t\t\tif (contentForLocale) translations[locale] = contentForLocale;\n\t\t}\n\t\treturn translations;\n\t}\n\tget validationMessages() {\n\t\tconst translations = {};\n\t\tfor (const locale of this.locales) {\n\t\t\tconst contentForLocale = this._translations?.[locale]?.validationMessages;\n\t\t\tif (contentForLocale) translations[locale] = contentForLocale;\n\t\t}\n\t\treturn translations;\n\t}\n\tsetSurveyCardContent(locale, content) {\n\t\tvalidateLocale(locale);\n\t\tif (!this._translations[locale]) {\n\t\t\tif (!content) return;\n\t\t\tthis._translations[locale] = {};\n\t\t}\n\t\tthis._translations[locale].surveyCardContent = content;\n\t}\n\tsetNavigationContent(locale, content) {\n\t\tvalidateLocale(locale);\n\t\tif (!this._translations[locale]) {\n\t\t\tif (!content) return;\n\t\t\tthis._translations[locale] = {};\n\t\t}\n\t\tthis._translations[locale].navigationContent = content;\n\t}\n\tsetValidationMessages(locale, content) {\n\t\tvalidateLocale(locale);\n\t\tif (!this._translations[locale]) {\n\t\t\tif (!content) return;\n\t\t\tthis._translations[locale] = {};\n\t\t}\n\t\tthis._translations[locale].validationMessages = content;\n\t}\n\tgetItemTranslations(itemId) {\n\t\tconst itemTranslations = new SurveyItemTranslations();\n\t\tfor (const locale of this.locales) {\n\t\t\tconst contentForLocale = this._translations?.[locale].itemTranslations?.[itemId];\n\t\t\titemTranslations.setAllForLocale(locale, contentForLocale);\n\t\t}\n\t\treturn itemTranslations.locales.length > 0 ? itemTranslations : void 0;\n\t}\n\t/**\n\t* Persist item translations after normalizing them:\n\t* empty keys/locales are removed automatically, and an empty translation set\n\t* clears the item's stored translations entirely.\n\t*/\n\tsetItemTranslations(itemId, itemContent) {\n\t\tconst normalizedItemContent = itemContent?.clone().compact();\n\t\tnormalizedItemContent?.locales.forEach((locale) => validateLocale(locale));\n\t\tif (!normalizedItemContent) {\n\t\t\tfor (const locale of this.locales) if (this._translations[locale].itemTranslations?.[itemId]) delete this._translations[locale].itemTranslations?.[itemId];\n\t\t} else {\n\t\t\tconst localesInUpdate = normalizedItemContent.locales;\n\t\t\tfor (const locale of localesInUpdate) if (!this.locales.includes(locale)) this._translations[locale] = {};\n\t\t\tfor (const locale of this.locales) if (localesInUpdate.includes(locale)) {\n\t\t\t\tif (!this._translations[locale]) this._translations[locale] = {};\n\t\t\t\tif (!this._translations[locale].itemTranslations) this._translations[locale].itemTranslations = {};\n\t\t\t\tthis._translations[locale].itemTranslations[itemId] = normalizedItemContent.getAllForLocale(locale);\n\t\t\t} else delete this._translations[locale].itemTranslations?.[itemId];\n\t\t}\n\t}\n\t/**\n\t* Rename a component key (within an item) - update key in all translations and remove old key\n\t* @param itemKey - The key of the item\n\t* @param oldKey - The old key of the component\n\t* @param newKey - The new key of the component\n\t*/\n\tonComponentKeyChanged(itemKey, oldKey, newKey) {\n\t\tfor (const locale of this.locales) {\n\t\t\tconst itemTranslations = this._translations?.[locale].itemTranslations?.[itemKey];\n\t\t\tif (itemTranslations) {\n\t\t\t\tfor (const key of Object.keys(itemTranslations)) if (key.startsWith(oldKey + \".\") || key === oldKey) {\n\t\t\t\t\titemTranslations[key.replace(oldKey, newKey)] = { ...itemTranslations[key] };\n\t\t\t\t\tdelete itemTranslations[key];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t* Remove all translations for a component\n\t* @param itemId - The id of the item\n\t* @param componentKey - The key of the component\n\t*/\n\tonComponentDeleted(itemId, componentKey) {\n\t\tfor (const locale of this.locales) {\n\t\t\tconst itemTranslations = this._translations?.[locale].itemTranslations?.[itemId];\n\t\t\tif (itemTranslations) {\n\t\t\t\tfor (const key of Object.keys(itemTranslations)) if (key.startsWith(componentKey + \".\") || key === componentKey) delete itemTranslations[key];\n\t\t\t}\n\t\t}\n\t}\n\t/**\n\t* Remove all translations for an item\n\t* @param id - The id of the item\n\t*/\n\tonItemDeleted(id) {\n\t\tfor (const locale of this.locales) delete this._translations[locale].itemTranslations?.[id];\n\t}\n};\n//#endregion\n//#region src/survey/utils/content.ts\nlet ContentType = /* @__PURE__ */ function(ContentType) {\n\tContentType[\"richText\"] = \"richText\";\n\tContentType[\"plain\"] = \"plain\";\n\tContentType[\"md\"] = \"md\";\n\treturn ContentType;\n}({});\nfunction hasRenderableRichTextBlock(block) {\n\tswitch (block.type) {\n\t\tcase \"paragraph\": return block.children.length > 0;\n\t\tcase \"heading\": return block.children.length > 0;\n\t\tcase \"bulletList\": return block.items.some((item) => item.children.some((paragraph) => paragraph.children.length > 0));\n\t\tcase \"image\": return true;\n\t\tcase \"infoBox\": return true;\n\t\tcase \"separator\": return true;\n\t\tcase \"blockExtension\": return true;\n\t}\n}\nfunction hasRenderableRichTextContent(content) {\n\treturn content.doc.blocks.some((block) => hasRenderableRichTextBlock(block));\n}\nfunction createRichTextContent(text = \"\") {\n\treturn {\n\t\ttype: \"richText\",\n\t\tversion: 1,\n\t\tdoc: {\n\t\t\ttype: \"doc\",\n\t\t\tblocks: [{\n\t\t\t\ttype: \"paragraph\",\n\t\t\t\tchildren: text.length > 0 ? text.split(\"\\n\").flatMap((line, index) => {\n\t\t\t\t\tconst parts = [];\n\t\t\t\t\tif (index > 0) parts.push({ type: \"lineBreak\" });\n\t\t\t\t\tif (line.length > 0) parts.push({\n\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\ttext: line\n\t\t\t\t\t});\n\t\t\t\t\treturn parts;\n\t\t\t\t}) : []\n\t\t\t}]\n\t\t}\n\t};\n}\nfunction getPlainTextFromLinkChildren(children) {\n\treturn children.map((inline) => {\n\t\tswitch (inline.type) {\n\t\t\tcase \"text\": return inline.text;\n\t\t\tcase \"template\": return `{${inline.key}}`;\n\t\t\tcase \"lineBreak\": return \"\\n\";\n\t\t}\n\t}).join(\"\");\n}\nfunction getPlainTextFromInlineNodes(inlines) {\n\treturn inlines.map((inline) => {\n\t\tswitch (inline.type) {\n\t\t\tcase \"text\": return inline.text;\n\t\t\tcase \"template\": return `{${inline.key}}`;\n\t\t\tcase \"link\": return getPlainTextFromLinkChildren(inline.children);\n\t\t\tcase \"lineBreak\": return \"\\n\";\n\t\t\tcase \"inlineExtension\": return \"\";\n\t\t}\n\t}).join(\"\");\n}\nfunction getPlainTextFromParagraphs(paragraphs) {\n\treturn paragraphs.map((paragraph) => getPlainTextFromInlineNodes(paragraph.children)).join(\"\\n\");\n}\nfunction getPlainTextFromBlock(block) {\n\tswitch (block.type) {\n\t\tcase \"paragraph\": return getPlainTextFromInlineNodes(block.children);\n\t\tcase \"heading\": return getPlainTextFromInlineNodes(block.children);\n\t\tcase \"bulletList\": return block.items.map((item) => getPlainTextFromParagraphs(item.children)).join(\"\\n\");\n\t\tcase \"image\": {\n\t\t\tconst captionText = block.caption ? getPlainTextFromParagraphs(block.caption) : \"\";\n\t\t\treturn [block.alt ?? \"\", captionText].filter(Boolean).join(\"\\n\");\n\t\t}\n\t\tcase \"infoBox\": return [block.title ? getPlainTextFromInlineNodes(block.title) : \"\", getPlainTextFromParagraphs(block.children)].filter(Boolean).join(\"\\n\");\n\t\tcase \"separator\": return \"\";\n\t\tcase \"blockExtension\": return \"\";\n\t}\n}\nfunction getPlainTextFromRichTextContent(content) {\n\treturn content.doc.blocks.map((block) => getPlainTextFromBlock(block)).filter((text) => text.length > 0).join(\"\\n\").trim();\n}\nfunction getContentPlainText(content) {\n\tif (!content) return \"\";\n\tif (content.type !== \"richText\") return content.content ?? \"\";\n\treturn getPlainTextFromRichTextContent(content);\n}\nfunction isContentEmpty(content) {\n\tif (!content) return true;\n\tif (content.type !== \"richText\") return content.content.trim().length === 0;\n\treturn !hasRenderableRichTextContent(content);\n}\nfunction getAssetUsagesFromContent(content) {\n\tif (!content || content.type !== \"richText\") return [];\n\tconst usages = [];\n\tcontent.doc.blocks.forEach((block, blockIndex) => {\n\t\tif (block.type === \"image\" && block.source.type === \"asset\") usages.push({\n\t\t\tassetId: block.source.assetId,\n\t\t\tblockIndex\n\t\t});\n\t});\n\treturn usages;\n}\n//#endregion\n//#region src/survey/survey.ts\nvar Survey = class Survey {\n\tmaxItemsPerPage;\n\tmetadata;\n\tsurveyItems = /* @__PURE__ */ new Map();\n\t_templateValues = /* @__PURE__ */ new Map();\n\t_assets = /* @__PURE__ */ new Map();\n\t_translations;\n\tconstructor(pluginRegistry) {\n\t\tthis.pluginRegistry = pluginRegistry;\n\t\tthis._translations = new SurveyTranslations();\n\t}\n\t/** Plugin registry used when parsing items. Exposed for editors that re-parse without their own registry. */\n\tgetPluginRegistry() {\n\t\treturn this.pluginRegistry;\n\t}\n\t/**\n\t* Create a survey item from raw JSON data.\n\t* Uses the survey's plugin registry when available.\n\t*/\n\tcreateItemFromRaw(rawItem) {\n\t\treturn createItemCore(rawItem, this.pluginRegistry);\n\t}\n\t/**\n\t* Create a minimal blank survey with a root group and one empty page.\n\t*/\n\tstatic createBlankSurvey(pluginRegistry, surveyKey) {\n\t\tconst newKey = surveyKey ?? \"survey\";\n\t\tconst rawSurvey = {\n\t\t\t$schema: CURRENT_SURVEY_SCHEMA,\n\t\t\tsurveyItems: [{\n\t\t\t\tid: generateId(),\n\t\t\t\tkey: newKey,\n\t\t\t\titemType: \"group\",\n\t\t\t\tconfig: {\n\t\t\t\t\tisRoot: true,\n\t\t\t\t\titems: [],\n\t\t\t\t\tshuffleItems: false\n\t\t\t\t}\n\t\t\t}]\n\t\t};\n\t\treturn Survey.fromJson(rawSurvey, pluginRegistry);\n\t}\n\tstatic fromJson(json, pluginRegistry) {\n\t\tconst survey = new Survey(pluginRegistry);\n\t\tconst rawSurvey = json;\n\t\tif (rawSurvey.$schema !== \"https://github.com/case-framework/case-survey-toolkit/packages/survey-core/schemas/survey-schema.json\") throw new Error(`Unsupported survey schema: ${rawSurvey.$schema}`);\n\t\tsurvey.surveyItems = /* @__PURE__ */ new Map();\n\t\tif (!rawSurvey.surveyItems || rawSurvey.surveyItems.length === 0) throw new Error(\"surveyItems is required\");\n\t\trawSurvey.surveyItems.forEach((item) => {\n\t\t\tconst surveyItem = createItemCore(item, pluginRegistry);\n\t\t\tsurvey.surveyItems.set(surveyItem.id, surveyItem);\n\t\t});\n\t\tif (rawSurvey.templateValues) survey._templateValues = deserializeTemplateValues(rawSurvey.templateValues);\n\t\tif (rawSurvey.assets) survey._assets = new Map(Object.entries(rawSurvey.assets));\n\t\tsurvey._translations = new SurveyTranslations(rawSurvey.translations);\n\t\tif (rawSurvey.maxItemsPerPage) survey.maxItemsPerPage = rawSurvey.maxItemsPerPage;\n\t\tif (rawSurvey.metadata) survey.metadata = rawSurvey.metadata;\n\t\treturn survey;\n\t}\n\tserialize() {\n\t\tconst json = {\n\t\t\t$schema: CURRENT_SURVEY_SCHEMA,\n\t\t\tsurveyItems: Array.from(this.surveyItems.values()).map((item) => item.rawItem)\n\t\t};\n\t\tjson.translations = this._translations?.serialize();\n\t\tif (this._templateValues) json.templateValues = serializeTemplateValues(this._templateValues);\n\t\tif (this._assets && this._assets.size > 0) json.assets = Object.fromEntries(this._assets.entries());\n\t\tif (this.maxItemsPerPage) json.maxItemsPerPage = this.maxItemsPerPage;\n\t\tif (this.metadata) json.metadata = this.metadata;\n\t\treturn json;\n\t}\n\tget surveyKey() {\n\t\tif (!this.rootItem) return;\n\t\treturn this.rootItem.key;\n\t}\n\tget locales() {\n\t\treturn this._translations?.locales || [];\n\t}\n\tget rootItem() {\n\t\treturn Array.from(this.surveyItems.values()).find((item) => item instanceof GroupItemCore && item.isRoot);\n\t}\n\tget keyIndex() {\n\t\tconst index = [];\n\t\tfor (const item of this.surveyItems.values()) {\n\t\t\tconst path = this.getItemPath(item.id);\n\t\t\tindex.push({\n\t\t\t\titemId: item.id,\n\t\t\t\tkey: item.key,\n\t\t\t\tkeyPath: path.map((id) => this.surveyItems.get(id)?.key ?? \"\"),\n\t\t\t\tpath\n\t\t\t});\n\t\t}\n\t\treturn index;\n\t}\n\tgetItemPath(itemId) {\n\t\tconst item = this.surveyItems.get(itemId);\n\t\tif (!item) throw new Error(`Item ${itemId} not found`);\n\t\tif (item instanceof GroupItemCore && item.isRoot()) return [];\n\t\tconst parentItem = this.getParentItem(itemId);\n\t\tif (!parentItem) throw new Error(`Parent item for ${itemId} not found`);\n\t\treturn [...this.getItemPath(parentItem.id), parentItem.id];\n\t}\n\tgetItemKey(itemId) {\n\t\tconst item = this.surveyItems.get(itemId);\n\t\tif (!item) return;\n\t\tconst keyPath = this.getItemPath(itemId).map((id) => this.surveyItems.get(id)?.key ?? \"\");\n\t\treturn new SurveyItemKey(item.key, keyPath);\n\t}\n\tgetParentItem(itemId) {\n\t\tconst item = this.surveyItems.get(itemId);\n\t\tif (!item) throw new Error(`Item ${itemId} not found`);\n\t\tif (item instanceof GroupItemCore && item.isRoot()) return;\n\t\tconst parentItem = Array.from(this.surveyItems.values()).find((item) => item instanceof GroupItemCore && item.config.items?.includes(itemId));\n\t\tif (!parentItem) return;\n\t\treturn parentItem;\n\t}\n\tgetChildrenItems(parentId) {\n\t\tconst parentItem = this.surveyItems.get(parentId);\n\t\tif (!parentItem || !(parentItem instanceof GroupItemCore)) return [];\n\t\treturn parentItem.config.items?.map((id) => this.surveyItems.get(id))?.filter((item) => item !== void 0) || [];\n\t}\n\tgetSiblings(itemId) {\n\t\tif (!this.surveyItems.get(itemId)) return [];\n\t\treturn this.getParentItem(itemId)?.items?.map((id) => this.surveyItems.get(id))?.filter((item) => item !== void 0) || [];\n\t}\n\tget translations() {\n\t\tif (!this._translations) this._translations = new SurveyTranslations();\n\t\treturn this._translations;\n\t}\n\tgetItemTranslations(id) {\n\t\tif (!this.surveyItems.get(id)) throw new Error(`Item ${id} not found`);\n\t\treturn this._translations?.getItemTranslations(id);\n\t}\n\tgetTemplateValue(templateValueKey) {\n\t\treturn this._templateValues?.get(templateValueKey);\n\t}\n\tsetTemplateValue(templateValueKey, templateValue) {\n\t\tif (!this._templateValues) this._templateValues = /* @__PURE__ */ new Map();\n\t\tthis._templateValues?.set(templateValueKey, templateValue);\n\t}\n\tdeleteTemplateValue(templateValueKey) {\n\t\tthis._templateValues?.delete(templateValueKey);\n\t}\n\tgetTemplateValueKeys() {\n\t\treturn Array.from(this._templateValues?.keys() || []);\n\t}\n\tgetAsset(assetId) {\n\t\tconst asset = this._assets?.get(assetId);\n\t\treturn asset ? structuredCloneMethod(asset) : void 0;\n\t}\n\tsetAsset(assetId, asset) {\n\t\tif (!this._assets) this._assets = /* @__PURE__ */ new Map();\n\t\tthis._assets.set(assetId, structuredCloneMethod(asset));\n\t}\n\tdeleteAsset(assetId) {\n\t\tthis._assets?.delete(assetId);\n\t}\n\thasAsset(assetId) {\n\t\treturn this._assets?.has(assetId) ?? false;\n\t}\n\tgetAssetIds() {\n\t\treturn Array.from(this._assets?.keys() || []);\n\t}\n\tgetAssets() {\n\t\treturn new Map(Array.from(this._assets?.entries() || []).map(([assetId, asset]) => [assetId, structuredCloneMethod(asset)]));\n\t}\n\tgetAssetUsages(filterAssetId) {\n\t\tconst usages = [];\n\t\tconst pushContentUsages = (content, usageScope, contentKey, locale, itemId) => {\n\t\t\tfor (const usage of getAssetUsagesFromContent(content)) {\n\t\t\t\tif (filterAssetId && usage.assetId !== filterAssetId) continue;\n\t\t\t\tusages.push({\n\t\t\t\t\tassetId: usage.assetId,\n\t\t\t\t\titemId,\n\t\t\t\t\tlocale,\n\t\t\t\t\tcontentKey,\n\t\t\t\t\tusageScope,\n\t\t\t\t\tblockIndex: usage.blockIndex\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tconst serializedTranslations = this._translations?.serialize();\n\t\tconst rootItemId = this.rootItem?.id;\n\t\tif (!serializedTranslations) return usages;\n\t\tfor (const [locale, localeTranslations] of Object.entries(serializedTranslations)) {\n\t\t\tfor (const [contentKey, content] of Object.entries(localeTranslations.surveyCardContent || {})) pushContentUsages(content, \"surveyCard\", contentKey, locale, rootItemId);\n\t\t\tfor (const [contentKey, content] of Object.entries(localeTranslations.navigationContent || {})) pushContentUsages(content, \"navigation\", contentKey, locale, rootItemId);\n\t\t\tfor (const [contentKey, content] of Object.entries(localeTranslations.validationMessages || {})) pushContentUsages(content, \"validationMessages\", contentKey, locale, rootItemId);\n\t\t\tfor (const [itemId, itemTranslations] of Object.entries(localeTranslations.itemTranslations || {})) for (const [contentKey, content] of Object.entries(itemTranslations || {})) pushContentUsages(content, \"itemTranslation\", contentKey, locale, itemId);\n\t\t}\n\t\treturn usages;\n\t}\n\tgetAvailableResponseValueSlots(byType) {\n\t\tlet valueRefs = {};\n\t\tfor (const item of this.surveyItems.values()) valueRefs = {\n\t\t\t...valueRefs,\n\t\t\t...item.getAvailableResponseValueSlots(byType)\n\t\t};\n\t\treturn valueRefs;\n\t}\n\tgetResponseSlotDefinitions() {\n\t\treturn Array.from(this.surveyItems.values()).map((item) => ({\n\t\t\titemId: item.id,\n\t\t\tslots: item.getResponseSlotDefinitions()\n\t\t}));\n\t}\n\t/**\n\t* Get all reference usages for the survey\n\t* @param forItemId - optional item id to filter usages for a specific item and its children (if not provided, all usages are returned)\n\t* @returns all reference usages for the survey (or for a specific item and its children)\n\t*/\n\tgetReferenceUsages(forItemId) {\n\t\tconst usages = [];\n\t\tfor (const item of this.surveyItems.values()) {\n\t\t\tif (forItemId && item.id !== forItemId && !this.isDescendantOf(item.id, forItemId)) continue;\n\t\t\tusages.push(...item.getReferenceUsages());\n\t\t}\n\t\tif (this._templateValues) for (const [templateValueKey, templateValue] of this._templateValues.entries()) for (const ref of templateValue.expression?.responseVariableRefs || []) usages.push({\n\t\t\titemId: templateValueKey,\n\t\t\tusageType: \"templateValues\",\n\t\t\tvalueReference: ref\n\t\t});\n\t\treturn usages;\n\t}\n\tisDescendantOf(targetId, ancestorId) {\n\t\tif (targetId === ancestorId) return true;\n\t\treturn this.getItemPath(targetId).includes(ancestorId);\n\t}\n};\n//#endregion\nexport { generateId as $, DurationUnits as A, ConstExpression as B, ReservedSurveyItemTypes as C, deserializeSurveyItemPrefill as D, SurveyItemPrefillTargetType as E, TemplateDefTypes as F, FunctionExpression as G, ContextVariableType as H, deserializeTemplateValue as I, ReferenceUsageType as J, FunctionExpressionNames as K, deserializeTemplateValues as L, ValueType as M, assertResponseValue as N, prefillTargetsEqual as O, isResponseValue as P, generateCodingKey as Q, serializeTemplateValue as R, SurveyItemKey as S, SurveyItemPrefillApplyMode as T, Expression as U, ContextVariableExpression as V, ExpressionType as W, ValueReferenceMethod as X, ValueReference as Y, createSeededRandom as Z, toItemTypeDefinitionRegistry as _, getContentPlainText as a, builtInItemCoreRegistry as b, hasRenderableRichTextContent as c, SurveyTranslations as d, shuffleArray as et, validateLocale as f, createItemTypeDefinitionRegistry as g, createItemCore as h, getAssetUsagesFromContent as i, NumberPrecision as j, serializeSurveyItemPrefill as k, isContentEmpty as l, createFullRegistry as m, ContentType as n, structuredCloneMethod as nt, getPlainTextFromRichTextContent as o, CURRENT_SURVEY_SCHEMA as p, ResponseVariableExpression as q, createRichTextContent as r, hasRenderableRichTextBlock as s, Survey as t, shuffleIndices as tt, SurveyItemTranslations as u, GroupItemCore as v, SurveyItemCore as w, isBuiltInItemType as x, PageBreakItemCore as y, serializeTemplateValues as z };\n\n//# sourceMappingURL=survey-Dxt6iolo.mjs.map","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n const normalize = constructFrom.bind(\n null,\n context || dates.find((date) => typeof date === \"object\"),\n );\n return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const laterStartOfDay = startOfDay(laterDate_);\n const earlierStartOfDay = startOfDay(earlierDate_);\n\n const laterTimestamp =\n +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n const earlierTimestamp =\n +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n const year = getISOWeekYear(date, options);\n const fourthOfJanuary = constructFrom(options?.in || date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setFullYear(date_.getFullYear(), 0, 1);\n date_.setHours(0, 0, 0, 0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // [TODO] -- I challenge you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // [TODO] -- I challenge you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // [TODO] I challenge you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n const _date = toDate(date, options?.in);\n const diff = differenceInCalendarDays(_date, startOfYear(_date));\n const dayOfYear = diff + 1;\n return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (+_date >= +startOfNextYear) {\n return year + 1;\n } else if (+_date >= +startOfThisYear) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(options?.in || date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.js\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n // Year\n y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n },\n\n // Month\n M(date, token) {\n const month = date.getMonth();\n return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n\n // Day of the month\n d(date, token) {\n return addLeadingZeros(date.getDate(), token.length);\n },\n\n // AM or PM\n a(date, token) {\n const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return dayPeriodEnumValue.toUpperCase();\n case \"aaa\":\n return dayPeriodEnumValue;\n case \"aaaaa\":\n return dayPeriodEnumValue[0];\n case \"aaaa\":\n default:\n return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n\n // Hour [1-12]\n h(date, token) {\n return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n },\n\n // Hour [0-23]\n H(date, token) {\n return addLeadingZeros(date.getHours(), token.length);\n },\n\n // Minute\n m(date, token) {\n return addLeadingZeros(date.getMinutes(), token.length);\n },\n\n // Second\n s(date, token) {\n return addLeadingZeros(date.getSeconds(), token.length);\n },\n\n // Fraction of second\n S(date, token) {\n const numberOfDigits = token.length;\n const milliseconds = date.getMilliseconds();\n const fractionalSeconds = Math.trunc(\n milliseconds * Math.pow(10, numberOfDigits - 3),\n );\n return addLeadingZeros(fractionalSeconds, token.length);\n },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n // Era\n G: function (date, token, localize) {\n const era = date.getFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return localize.era(era, { width: \"abbreviated\" });\n // A, B\n case \"GGGGG\":\n return localize.era(era, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return localize.era(era, { width: \"wide\" });\n }\n },\n\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === \"yo\") {\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, { unit: \"year\" });\n }\n\n return lightFormatters.y(date, token);\n },\n\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n const signedWeekYear = getWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === \"YY\") {\n const twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === \"Yo\") {\n return localize.ordinalNumber(weekYear, { unit: \"year\" });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n\n // ISO week-numbering year\n R: function (date, token) {\n const isoWeekYear = getISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n const year = date.getFullYear();\n return addLeadingZeros(year, token.length);\n },\n\n // Quarter\n Q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"QQ\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone quarter\n q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"qq\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // Month\n M: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n case \"M\":\n case \"MM\":\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // J, F, ..., D\n case \"MMMMM\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return localize.month(month, { width: \"wide\", context: \"formatting\" });\n }\n },\n\n // Stand-alone month\n L: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return String(month + 1);\n // 01, 02, ..., 12\n case \"LL\":\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // J, F, ..., D\n case \"LLLLL\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return localize.month(month, { width: \"wide\", context: \"standalone\" });\n }\n },\n\n // Local week of year\n w: function (date, token, localize, options) {\n const week = getWeek(date, options);\n\n if (token === \"wo\") {\n return localize.ordinalNumber(week, { unit: \"week\" });\n }\n\n return addLeadingZeros(week, token.length);\n },\n\n // ISO week of year\n I: function (date, token, localize) {\n const isoWeek = getISOWeek(date);\n\n if (token === \"Io\") {\n return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n\n // Day of the month\n d: function (date, token, localize) {\n if (token === \"do\") {\n return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n }\n\n return lightFormatters.d(date, token);\n },\n\n // Day of year\n D: function (date, token, localize) {\n const dayOfYear = getDayOfYear(date);\n\n if (token === \"Do\") {\n return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n\n // Day of week\n E: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"EEEEE\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"EEEE\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Local day of week\n e: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case \"e\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"ee\":\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case \"eo\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"eee\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"eeeee\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"eeee\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case \"c\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"cc\":\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case \"co\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"ccc\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // T\n case \"ccccc\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"standalone\",\n });\n // Tuesday\n case \"cccc\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // ISO day of week\n i: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case \"i\":\n return String(isoDayOfWeek);\n // 02\n case \"ii\":\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case \"io\":\n return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n // Tue\n case \"iii\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"iiiii\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"iiiiii\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"iiii\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM or PM\n a: function (date, token, localize) {\n const hours = date.getHours();\n const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"aaa\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"aaaaa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n }\n\n switch (token) {\n case \"b\":\n case \"bb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"bbb\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"bbbbb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"BBBBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === \"ho\") {\n let hours = date.getHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return lightFormatters.h(date, token);\n },\n\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === \"Ho\") {\n return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n }\n\n return lightFormatters.H(date, token);\n },\n\n // Hour [0-11]\n K: function (date, token, localize) {\n const hours = date.getHours() % 12;\n\n if (token === \"Ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Hour [1-24]\n k: function (date, token, localize) {\n let hours = date.getHours();\n if (hours === 0) hours = 24;\n\n if (token === \"ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Minute\n m: function (date, token, localize) {\n if (token === \"mo\") {\n return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n }\n\n return lightFormatters.m(date, token);\n },\n\n // Second\n s: function (date, token, localize) {\n if (token === \"so\") {\n return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n }\n\n return lightFormatters.s(date, token);\n },\n\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return \"Z\";\n }\n\n switch (token) {\n // Hours and optional minutes\n case \"X\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case \"XXXX\":\n case \"XX\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case \"XXXXX\":\n case \"XXX\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case \"x\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case \"xxxx\":\n case \"xx\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case \"xxxxx\":\n case \"xxx\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"OOOO\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"zzzz\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Seconds timestamp\n t: function (date, token, _localize) {\n const timestamp = Math.trunc(+date / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n\n // Milliseconds timestamp\n T: function (date, token, _localize) {\n return addLeadingZeros(+date, token.length);\n },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = Math.trunc(absOffset / 60);\n const minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n if (offset % 60 === 0) {\n const sign = offset > 0 ? \"-\" : \"+\";\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n const minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n * and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const originalDate = toDate(date, options?.in);\n\n if (!isValid(originalDate)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n let parts = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp)\n .map((substring) => {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return { isToken: false, value: \"'\" };\n }\n\n const firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return { isToken: false, value: cleanEscapedString(substring) };\n }\n\n if (formatters[firstCharacter]) {\n return { isToken: true, value: substring };\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n return { isToken: false, value: substring };\n });\n\n // invoke localize preprocessor (only for french locales at the moment)\n if (locale.localize.preprocessor) {\n parts = locale.localize.preprocessor(originalDate, parts);\n }\n\n const formatterOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n return parts\n .map((part) => {\n if (!part.isToken) return part.value;\n\n const token = part.value;\n\n if (\n (!options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)) ||\n (!options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token))\n ) {\n warnOrThrowProtectedError(token, formatStr, String(date));\n }\n\n const formatter = formatters[token[0]];\n return formatter(originalDate, token, locale.localize, formatterOptions);\n })\n .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n const matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { $ as generateId, A as DurationUnits, B as ConstExpression, C as ReservedSurveyItemTypes, D as deserializeSurveyItemPrefill, E as SurveyItemPrefillTargetType, F as TemplateDefTypes, G as FunctionExpression, H as ContextVariableType, I as deserializeTemplateValue, J as ReferenceUsageType, K as FunctionExpressionNames, L as deserializeTemplateValues, M as ValueType, N as assertResponseValue, O as prefillTargetsEqual, P as isResponseValue, Q as generateCodingKey, R as serializeTemplateValue, S as SurveyItemKey, T as SurveyItemPrefillApplyMode, U as Expression, V as ContextVariableExpression, W as ExpressionType, X as ValueReferenceMethod, Y as ValueReference, Z as createSeededRandom, _ as toItemTypeDefinitionRegistry, a as getContentPlainText, b as builtInItemCoreRegistry, c as hasRenderableRichTextContent, d as SurveyTranslations, et as shuffleArray, f as validateLocale, g as createItemTypeDefinitionRegistry, h as createItemCore, i as getAssetUsagesFromContent, j as NumberPrecision, k as serializeSurveyItemPrefill, l as isContentEmpty, m as createFullRegistry, n as ContentType, nt as structuredCloneMethod, o as getPlainTextFromRichTextContent, p as CURRENT_SURVEY_SCHEMA, q as ResponseVariableExpression, r as createRichTextContent, s as hasRenderableRichTextBlock, t as Survey, tt as shuffleIndices, u as SurveyItemTranslations, v as GroupItemCore, w as SurveyItemCore, x as isBuiltInItemType, y as PageBreakItemCore, z as serializeTemplateValues } from \"./survey-Dxt6iolo.mjs\";\nimport { format } from \"date-fns\";\nimport { enUS } from \"date-fns/locale\";\n//#region src/to_mirgrate/data_types/legacy-types.ts\nconst isLegacyItemGroupComponent = (item) => {\n\tconst items = item.items;\n\treturn items !== void 0 && items.length > 0;\n};\nconst isLegacySurveyGroupItem = (item) => {\n\tconst items = item.items;\n\treturn items !== void 0 && items.length > 0;\n};\n//#endregion\n//#region src/survey/responses/item-response.ts\n/**\n* SurveyItemResponse to store the response of a survey item.\n*/\nvar SurveyItemResponse = class SurveyItemResponse {\n\titemId;\n\tmeta;\n\tresponse;\n\titemType;\n\tconstructor(itemDef, response) {\n\t\tthis.itemId = itemDef.itemId;\n\t\tthis.response = response;\n\t\tthis.itemType = itemDef.itemType;\n\t}\n\tserialize() {\n\t\treturn {\n\t\t\titemId: this.itemId,\n\t\t\titemType: this.itemType,\n\t\t\tmeta: this.meta,\n\t\t\tresponse: this.response?.serialize()\n\t\t};\n\t}\n\tstatic deserialize(json) {\n\t\tif (!json || typeof json !== \"object\" || Array.isArray(json)) throw new Error(\"Invalid survey item response payload\");\n\t\tif (typeof json.itemId !== \"string\" || json.itemId.trim().length === 0) throw new Error(\"Survey item response is missing a valid itemId\");\n\t\tif (typeof json.itemType !== \"string\" || json.itemType.trim().length === 0) throw new Error(\"Survey item response is missing a valid itemType\");\n\t\tconst newResponse = new SurveyItemResponse({\n\t\t\titemId: json.itemId,\n\t\t\titemType: json.itemType\n\t\t}, json.response ? ResponseItem.deserialize(json.response) : void 0);\n\t\tnewResponse.meta = json.meta;\n\t\treturn newResponse;\n\t}\n};\nvar ResponseItem = class ResponseItem {\n\t_slots;\n\tconstructor(initialValues) {\n\t\tthis._slots = new Map(initialValues ?? []);\n\t}\n\tget(slotId) {\n\t\treturn this._slots.get(slotId);\n\t}\n\tsetSlotValue(slotId, slotResponse) {\n\t\tif (slotResponse) this._slots.set(slotId, slotResponse);\n\t\telse this._slots.delete(slotId);\n\t}\n\tserialize() {\n\t\tif (this._slots.size === 0) return;\n\t\treturn { slots: Object.fromEntries(this._slots.entries()) };\n\t}\n\tisEmpty() {\n\t\treturn this._slots.size === 0;\n\t}\n\tclone() {\n\t\treturn new ResponseItem(Array.from(this._slots.entries()));\n\t}\n\tstatic deserialize(json) {\n\t\tif (!json || typeof json !== \"object\" || Array.isArray(json)) throw new Error(\"Invalid response item payload\");\n\t\tconst { slots } = json;\n\t\tif (!slots || typeof slots !== \"object\" || Array.isArray(slots)) throw new Error(\"Invalid response slots payload\");\n\t\treturn new ResponseItem(Object.entries(slots).map(([slotId, slotResponse]) => {\n\t\t\tif (slotId.trim().length === 0) throw new Error(\"Response slot id cannot be empty\");\n\t\t\tassertResponseValue(slotResponse, `response.slots.${slotId}`);\n\t\t\treturn [slotId, slotResponse];\n\t\t}));\n\t}\n};\n//#endregion\n//#region src/survey/responses/response-meta.ts\nconst SurveyEventTypes = {\n\topenSurvey: \"openSurvey\",\n\tpageChanged: \"pageChanged\",\n\tresponeChanged: \"responeChanged\",\n\tlanguageChanged: \"languageChanged\"\n};\n//#endregion\n//#region src/survey/responses/survey-response.ts\nconst SURVEY_RESPONSE_SCHEMA_VERSION = 1;\n/**\n* SurveyResponse to store the responses of a survey.\n*/\nvar SurveyResponse = class SurveyResponse {\n\tkey;\n\tparticipantId;\n\tsubmittedAt;\n\tversionId;\n\tresponses;\n\tevents;\n\tcontext;\n\tconstructor(key, versionId) {\n\t\tthis.key = key;\n\t\tthis.participantId = \"\";\n\t\tthis.submittedAt = 0;\n\t\tthis.versionId = versionId;\n\t\tthis.responses = /* @__PURE__ */ new Map();\n\t\tthis.events = [];\n\t}\n\tserialize() {\n\t\tconst items = Object.fromEntries(Array.from(this.responses.entries()).flatMap(([itemId, response]) => {\n\t\t\tconst serialized = response.serialize();\n\t\t\tif (!serialized.response && !serialized.meta) return [];\n\t\t\treturn [[itemId, serialized]];\n\t\t}));\n\t\treturn {\n\t\t\tschemaVersion: 1,\n\t\t\tkey: this.key,\n\t\t\tparticipantId: this.participantId,\n\t\t\tsubmittedAt: this.submittedAt,\n\t\t\tversionId: this.versionId,\n\t\t\titems,\n\t\t\tevents: this.events,\n\t\t\tcontext: this.context\n\t\t};\n\t}\n\tstatic deserialize(json) {\n\t\tif (!json || typeof json !== \"object\" || Array.isArray(json)) throw new Error(\"Invalid survey response payload\");\n\t\tif (json.schemaVersion !== 1) throw new Error(`Unsupported survey response schema version: ${String(json.schemaVersion)}`);\n\t\tif (typeof json.key !== \"string\" || json.key.trim().length === 0) throw new Error(\"Survey response is missing a valid key\");\n\t\tif (typeof json.versionId !== \"string\" || json.versionId.trim().length === 0) throw new Error(\"Survey response is missing a valid versionId\");\n\t\tif (!json.items || typeof json.items !== \"object\" || Array.isArray(json.items)) throw new Error(\"Survey response is missing a valid items object\");\n\t\tconst response = new SurveyResponse(json.key, json.versionId);\n\t\tresponse.participantId = json.participantId;\n\t\tresponse.submittedAt = json.submittedAt;\n\t\tresponse.responses = new Map(Object.entries(json.items).map(([itemId, itemResponse]) => {\n\t\t\tconst deserialized = SurveyItemResponse.deserialize(itemResponse);\n\t\t\tif (deserialized.itemId !== itemId) throw new Error(`Survey response item key mismatch for '${itemId}'`);\n\t\t\treturn [itemId, deserialized];\n\t\t}));\n\t\tresponse.events = json.events ?? [];\n\t\tresponse.versionId = json.versionId;\n\t\tresponse.key = json.key;\n\t\tif (json.context) {\n\t\t\tif (typeof json.context !== \"object\" || Array.isArray(json.context)) throw new Error(\"Survey response context must be an object\");\n\t\t\tresponse.context = Object.fromEntries(Object.entries(json.context).map(([contextKey, value]) => {\n\t\t\t\tassertResponseValue(value, `context.${contextKey}`);\n\t\t\t\treturn [contextKey, value];\n\t\t\t}));\n\t\t}\n\t\treturn response;\n\t}\n};\n//#endregion\n//#region src/survey/responses/utils.ts\nconst initValueForType = (returnType) => {\n\tswitch (returnType) {\n\t\tcase ValueType.string: return {\n\t\t\ttype: ValueType.string,\n\t\t\tvalue: \"\"\n\t\t};\n\t\tcase ValueType.number: return {\n\t\t\ttype: ValueType.number,\n\t\t\tvalue: 0\n\t\t};\n\t\tcase ValueType.boolean: return {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: false\n\t\t};\n\t\tcase ValueType.date: return {\n\t\t\ttype: ValueType.date,\n\t\t\tvalue: Math.floor(Date.now() / 1e3)\n\t\t};\n\t\tcase ValueType.stringArray: return {\n\t\t\ttype: ValueType.stringArray,\n\t\t\tvalue: []\n\t\t};\n\t\tcase ValueType.numberArray: return {\n\t\t\ttype: ValueType.numberArray,\n\t\t\tvalue: []\n\t\t};\n\t\tcase ValueType.dateArray: return {\n\t\t\ttype: ValueType.dateArray,\n\t\t\tvalue: []\n\t\t};\n\t\tcase ValueType.duration: return {\n\t\t\ttype: ValueType.duration,\n\t\t\tvalue: 0,\n\t\t\tunit: DurationUnits.seconds\n\t\t};\n\t\tcase ValueType.reference: return {\n\t\t\ttype: ValueType.reference,\n\t\t\tvalue: \"\"\n\t\t};\n\t\tcase ValueType.durationArray: return {\n\t\t\ttype: ValueType.durationArray,\n\t\t\tvalue: [],\n\t\t\tunit: DurationUnits.seconds\n\t\t};\n\t\tcase ValueType.referenceArray: return {\n\t\t\ttype: ValueType.referenceArray,\n\t\t\tvalue: []\n\t\t};\n\t\tdefault: throw new Error(\"Invalid return type: \" + returnType);\n\t}\n};\n//#endregion\n//#region src/expressions/expression-evaluator.ts\nvar ExpressionEvaluator = class {\n\tcontext;\n\tconstructor(context) {\n\t\tthis.context = context;\n\t}\n\teval(expression) {\n\t\tif (expression === void 0) return;\n\t\tswitch (expression.type) {\n\t\t\tcase ExpressionType.Const: return this.evaluateConst(expression);\n\t\t\tcase ExpressionType.Function: return this.evaluateFunction(expression);\n\t\t\tcase ExpressionType.ResponseVariable: return this.evaluateResponseVariable(expression);\n\t\t\tcase ExpressionType.ContextVariable: return this.evaluateContextVariable(expression);\n\t\t\tdefault: throw new Error(`Unsupported expression type: ${expression.type}`);\n\t\t}\n\t}\n\tsetContext(context) {\n\t\tthis.context = context;\n\t}\n\tevaluateConst(expression) {\n\t\treturn expression.value;\n\t}\n\tevaluateResponseVariable(expression) {\n\t\tconst varRef = expression.responseVariableRef;\n\t\tswitch (varRef.name) {\n\t\t\tcase \"get\": return this.context?.responses[varRef.itemId]?.response?.get(varRef.slotId);\n\t\t\tcase \"isDefined\": return {\n\t\t\t\ttype: ValueType.boolean,\n\t\t\t\tvalue: this.context?.responses[varRef.itemId]?.response?.get(varRef.slotId) !== void 0\n\t\t\t};\n\t\t\tdefault: throw new Error(`Unsupported value reference method: ${varRef.name}`);\n\t\t}\n\t}\n\tevaluateFunction(expression) {\n\t\tswitch (expression.functionName) {\n\t\t\tcase \"and\": return this.evaluateAnd(expression);\n\t\t\tcase \"or\": return this.evaluateOr(expression);\n\t\t\tcase \"not\": return this.evaluateNot(expression);\n\t\t\tcase \"str_eq\": return this.evaluateStrEq(expression);\n\t\t\tcase \"eq\": return this.evaluateEq(expression);\n\t\t\tcase \"gt\": return this.evaluateGt(expression);\n\t\t\tcase \"gte\": return this.evaluateGte(expression);\n\t\t\tcase \"lt\": return this.evaluateLt(expression);\n\t\t\tcase \"lte\": return this.evaluateLte(expression);\n\t\t\tcase \"in_range\": return this.evaluateInRange(expression);\n\t\t\tcase \"sum\": return this.evaluateSum(expression);\n\t\t\tcase \"min\": return this.evaluateMin(expression);\n\t\t\tcase \"max\": return this.evaluateMax(expression);\n\t\t\tcase \"list_contains\": return this.evaluateListContains(expression);\n\t\t\tdefault: throw new Error(`Unsupported function: ${expression.functionName}`);\n\t\t}\n\t}\n\tevaluateContextVariable(expression) {\n\t\tif (!this.context?.surveyContext) return;\n\t\tconst surveyContext = this.context.surveyContext;\n\t\tswitch (expression.contextType) {\n\t\t\tcase ContextVariableType.Locale: return {\n\t\t\t\ttype: ValueType.string,\n\t\t\t\tvalue: surveyContext.locale\n\t\t\t};\n\t\t\tcase ContextVariableType.ParticipantFlag: {\n\t\t\t\tif (!expression.key) return;\n\t\t\t\tconst flagKey = this.eval(expression.key);\n\t\t\t\tif (flagKey?.type !== ValueType.string || flagKey.value === void 0) return;\n\t\t\t\tconst flagValue = surveyContext.participantFlags?.[flagKey.value];\n\t\t\t\tswitch (expression.asType) {\n\t\t\t\t\tcase ValueType.boolean: return {\n\t\t\t\t\t\ttype: ValueType.boolean,\n\t\t\t\t\t\tvalue: flagValue !== void 0\n\t\t\t\t\t};\n\t\t\t\t\tcase ValueType.string:\n\t\t\t\t\t\tif (flagValue === void 0) return;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: ValueType.string,\n\t\t\t\t\t\t\tvalue: flagValue\n\t\t\t\t\t\t};\n\t\t\t\t\tcase ValueType.number: {\n\t\t\t\t\t\tif (flagValue === void 0) return;\n\t\t\t\t\t\tconst numValue = parseFloat(flagValue);\n\t\t\t\t\t\treturn isNaN(numValue) ? void 0 : {\n\t\t\t\t\t\t\ttype: ValueType.number,\n\t\t\t\t\t\t\tvalue: numValue\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tcase ValueType.date: {\n\t\t\t\t\t\tif (flagValue === void 0) return;\n\t\t\t\t\t\tconst timestamp = parseFloat(flagValue);\n\t\t\t\t\t\treturn isNaN(timestamp) ? void 0 : {\n\t\t\t\t\t\t\ttype: ValueType.date,\n\t\t\t\t\t\t\tvalue: timestamp\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (flagValue === void 0) return;\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\ttype: ValueType.string,\n\t\t\t\t\t\t\tvalue: flagValue\n\t\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t\tcase ContextVariableType.CustomValue: {\n\t\t\t\tif (!expression.key) return;\n\t\t\t\tconst customKey = this.eval(expression.key);\n\t\t\t\tif (customKey?.type !== ValueType.string || customKey.value === void 0) return;\n\t\t\t\tconst customValue = surveyContext.customValues?.[customKey.value];\n\t\t\t\tif (customValue === void 0) return;\n\t\t\t\tif (expression.asType !== void 0) {\n\t\t\t\t\tif (customValue?.type !== expression.asType) throw new Error(`Custom value type does not match expected type, got ${customValue?.type} and expected ${expression.asType}`);\n\t\t\t\t}\n\t\t\t\treturn customValue;\n\t\t\t}\n\t\t\tcase ContextVariableType.CustomExpression: {\n\t\t\t\tif (!expression.key) return;\n\t\t\t\tconst expressionKey = this.eval(expression.key);\n\t\t\t\tif (expressionKey?.type !== ValueType.string || expressionKey.value === void 0) return;\n\t\t\t\tconst customExpression = surveyContext.customExpressions?.[expressionKey.value];\n\t\t\t\tif (typeof customExpression !== ExpressionType.Function || customExpression === void 0) return;\n\t\t\t\ttry {\n\t\t\t\t\tconst args = expression.arguments;\n\t\t\t\t\tconst result = customExpression(args);\n\t\t\t\t\tif (expression.asType !== void 0) {\n\t\t\t\t\t\tif (result?.type !== expression.asType) throw new Error(`Custom expression result type does not match expected type, got ${result?.type} and expected ${expression.asType}`);\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t} catch (error) {\n\t\t\t\t\tthrow new Error(`Error evaluating custom expression: ${error}`);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tevaluateAnd(expression) {\n\t\treturn {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: expression.arguments.every((arg) => this.eval(arg)?.value === true)\n\t\t};\n\t}\n\tevaluateOr(expression) {\n\t\treturn {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: expression.arguments.some((arg) => this.eval(arg)?.value === true)\n\t\t};\n\t}\n\tevaluateNot(expression) {\n\t\tif (expression.arguments.length !== 1 || expression.arguments[0] === void 0) throw new Error(`Not function expects 1 argument, got ${expression.arguments.length}`);\n\t\tconst resolvedValue = this.eval(expression.arguments[0]);\n\t\tif (resolvedValue?.type !== ValueType.boolean) throw new Error(`Not function expects a boolean argument, got ${resolvedValue?.type}`);\n\t\tif (resolvedValue === void 0) return {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: false\n\t\t};\n\t\treturn {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: !resolvedValue.value\n\t\t};\n\t}\n\tevaluateListContains(expression) {\n\t\tif (expression.arguments.length !== 2) throw new Error(`List contains function expects 2 arguments, got ${expression.arguments.length}`);\n\t\tconst resolvedList = this.eval(expression.arguments[0]);\n\t\tconst resolvedItem = this.eval(expression.arguments[1]);\n\t\tif (resolvedList === void 0 || resolvedItem === void 0) return {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: false\n\t\t};\n\t\tconst allowedListTypes = [ValueType.stringArray, ValueType.referenceArray];\n\t\tconst allowedItemTypes = [ValueType.string, ValueType.reference];\n\t\tconst resolvedListType = resolvedList.type;\n\t\tconst resolvedItemType = resolvedItem.type;\n\t\tif (!allowedListTypes.includes(resolvedListType) || !allowedItemTypes.includes(resolvedItemType)) throw new Error(`List contains function expects a string array list and a string item, got ${resolvedList?.type} and ${resolvedItem?.type}`);\n\t\tconst list = resolvedList.value;\n\t\tconst item = resolvedItem.value;\n\t\treturn {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: list.includes(item)\n\t\t};\n\t}\n\tevaluateStrEq(expression) {\n\t\tif (expression.arguments.length !== 2) throw new Error(`String equals function expects 2 arguments, got ${expression.arguments.length}`);\n\t\tconst resolvedA = this.eval(expression.arguments[0]);\n\t\tconst resolvedB = this.eval(expression.arguments[1]);\n\t\tif (resolvedA === void 0 || resolvedB === void 0) return {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: false\n\t\t};\n\t\tif (resolvedA?.type !== ValueType.string || resolvedB?.type !== ValueType.string) throw new Error(`String equals function expects strings for all arguments, got ${resolvedA?.type} and ${resolvedB?.type}`);\n\t\treturn {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: resolvedA.value === resolvedB.value\n\t\t};\n\t}\n\tevaluateEq(expression) {\n\t\tif (expression.arguments.length !== 2) throw new Error(`Equals function expects 2 arguments, got ${expression.arguments.length}`);\n\t\tconst resolvedA = this.eval(expression.arguments[0]);\n\t\tconst resolvedB = this.eval(expression.arguments[1]);\n\t\tif (resolvedA === void 0 || resolvedB === void 0) return {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: false\n\t\t};\n\t\tif (resolvedA?.type !== resolvedB?.type) throw new Error(`Equals function expects the same type for all arguments, got ${resolvedA?.type} and ${resolvedB?.type}`);\n\t\treturn {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: resolvedA.value === resolvedB.value\n\t\t};\n\t}\n\tevaluateGt(expression) {\n\t\tif (expression.arguments.length !== 2) throw new Error(`Greater than function expects 2 arguments, got ${expression.arguments.length}`);\n\t\tconst resolvedA = this.eval(expression.arguments[0]);\n\t\tconst resolvedB = this.eval(expression.arguments[1]);\n\t\tif (resolvedA === void 0 || resolvedB === void 0) return {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: false\n\t\t};\n\t\tif (resolvedA?.type !== resolvedB?.type) throw new Error(`Greater than function expects the same type for all arguments, got ${resolvedA?.type} and ${resolvedB?.type}`);\n\t\treturn {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: resolvedA.value > resolvedB.value\n\t\t};\n\t}\n\tevaluateGte(expression) {\n\t\tif (expression.arguments.length !== 2) throw new Error(`Greater than or equal to function expects 2 arguments, got ${expression.arguments.length}`);\n\t\tconst resolvedA = this.eval(expression.arguments[0]);\n\t\tconst resolvedB = this.eval(expression.arguments[1]);\n\t\tif (resolvedA === void 0 || resolvedB === void 0) return {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: false\n\t\t};\n\t\tif (resolvedA?.type !== resolvedB?.type) throw new Error(`Greater than or equal to function expects the same type for all arguments, got ${resolvedA?.type} and ${resolvedB?.type}`);\n\t\treturn {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: resolvedA.value >= resolvedB.value\n\t\t};\n\t}\n\tevaluateLt(expression) {\n\t\tif (expression.arguments.length !== 2) throw new Error(`Less than function expects 2 arguments, got ${expression.arguments.length}`);\n\t\tconst resolvedA = this.eval(expression.arguments[0]);\n\t\tconst resolvedB = this.eval(expression.arguments[1]);\n\t\tif (resolvedA === void 0 || resolvedB === void 0) return {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: false\n\t\t};\n\t\tif (resolvedA?.type !== resolvedB?.type) throw new Error(`Less than function expects the same type for all arguments, got ${resolvedA?.type} and ${resolvedB?.type}`);\n\t\treturn {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: resolvedA.value < resolvedB.value\n\t\t};\n\t}\n\tevaluateLte(expression) {\n\t\tif (expression.arguments.length !== 2) throw new Error(`Less than or equal to function expects 2 arguments, got ${expression.arguments.length}`);\n\t\tconst resolvedA = this.eval(expression.arguments[0]);\n\t\tconst resolvedB = this.eval(expression.arguments[1]);\n\t\tif (resolvedA === void 0 || resolvedB === void 0) return {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: false\n\t\t};\n\t\tif (resolvedA?.type !== resolvedB?.type) throw new Error(`Less than or equal to function expects the same type for all arguments, got ${resolvedA?.type} and ${resolvedB?.type}`);\n\t\treturn {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: resolvedA.value <= resolvedB.value\n\t\t};\n\t}\n\tevaluateInRange(expression) {\n\t\tif (expression.arguments.length !== 4) throw new Error(`In range function expects 4 arguments, got ${expression.arguments.length}`);\n\t\tconst resolvedValue = this.eval(expression.arguments[0]);\n\t\tconst resolvedMin = this.eval(expression.arguments[1]);\n\t\tconst resolvedMax = this.eval(expression.arguments[2]);\n\t\tconst resolvedInclusive = this.eval(expression.arguments[3])?.value === true;\n\t\tif (resolvedValue === void 0 || resolvedMin === void 0 || resolvedMax === void 0) return {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: false\n\t\t};\n\t\tif (resolvedValue?.type !== ValueType.number || resolvedMin?.type !== ValueType.number || resolvedMax?.type !== ValueType.number) throw new Error(`In range function expects numbers for all arguments, got ${resolvedValue?.type} and ${resolvedMin?.type} and ${resolvedMax?.type}`);\n\t\tif (resolvedInclusive) return {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: resolvedValue.value >= resolvedMin.value && resolvedValue.value <= resolvedMax.value\n\t\t};\n\t\treturn {\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: resolvedValue.value > resolvedMin.value && resolvedValue.value < resolvedMax.value\n\t\t};\n\t}\n\tevaluateSum(expression) {\n\t\tif (expression.arguments.length < 1) throw new Error(`Sum function expects at least 1 argument, got ${expression.arguments.length}`);\n\t\treturn expression.arguments.reduce((sum, arg) => {\n\t\t\tif (arg === void 0) return sum;\n\t\t\tconst resolvedValue = this.eval(arg);\n\t\t\tif (resolvedValue === void 0) return sum;\n\t\t\tif (resolvedValue?.type === ValueType.number) return {\n\t\t\t\ttype: ValueType.number,\n\t\t\t\tvalue: sum.value + resolvedValue.value\n\t\t\t};\n\t\t\tthrow new Error(`Sum function expects all arguments to be numbers, got ${resolvedValue?.type}`);\n\t\t}, {\n\t\t\ttype: ValueType.number,\n\t\t\tvalue: 0\n\t\t});\n\t}\n\tevaluateMin(expression) {\n\t\tif (expression.arguments.length < 1) throw new Error(`Min function expects at least 1 argument, got ${expression.arguments.length}`);\n\t\treturn expression.arguments.reduce((min, arg) => {\n\t\t\tif (arg === void 0) return min;\n\t\t\tconst resolvedValue = this.eval(arg);\n\t\t\tif (resolvedValue === void 0) return min;\n\t\t\tif (resolvedValue?.type === ValueType.number) return {\n\t\t\t\ttype: ValueType.number,\n\t\t\t\tvalue: Math.min(min.value, resolvedValue.value)\n\t\t\t};\n\t\t\tthrow new Error(`Min function expects all arguments to be numbers, got ${typeof resolvedValue}`);\n\t\t}, {\n\t\t\ttype: ValueType.number,\n\t\t\tvalue: Infinity\n\t\t});\n\t}\n\tevaluateMax(expression) {\n\t\tif (expression.arguments.length < 1) throw new Error(`Max function expects at least 1 argument, got ${expression.arguments.length}`);\n\t\treturn expression.arguments.reduce((max, arg) => {\n\t\t\tif (arg === void 0) return max;\n\t\t\tconst resolvedValue = this.eval(arg);\n\t\t\tif (resolvedValue === void 0) return max;\n\t\t\tif (resolvedValue?.type === ValueType.number) return {\n\t\t\t\ttype: ValueType.number,\n\t\t\t\tvalue: Math.max(max.value, resolvedValue.value)\n\t\t\t};\n\t\t\tthrow new Error(`Max function expects all arguments to be numbers, got ${typeof resolvedValue}`);\n\t\t}, {\n\t\t\ttype: ValueType.number,\n\t\t\tvalue: -Infinity\n\t\t});\n\t}\n};\n//#endregion\n//#region src/expressions/item-expression-registry.ts\nfunction getItemExpressionDefinition(definitions, expressionId) {\n\treturn definitions?.find((definition) => definition.id === expressionId);\n}\nfunction buildItemExpression(item, definitions, expressionId, params) {\n\tconst definition = getItemExpressionDefinition(definitions, expressionId);\n\tif (!definition) throw new Error(`Unknown item expression: ${expressionId}`);\n\treturn definition.buildExpression(item, params);\n}\n//#endregion\n//#region src/expressions/editors/expression-editor.ts\nvar ExpressionEditor = class {\n\treturnType;\n\t_editorConfig;\n\tget editorConfig() {\n\t\treturn this._editorConfig;\n\t}\n\twithEditorConfig(editorConfig) {\n\t\tthis._editorConfig = editorConfig;\n\t\treturn this;\n\t}\n};\nvar ConstStringArrayEditor = class extends ExpressionEditor {\n\treturnType = ValueType.stringArray;\n\t_values;\n\tconstructor(values, editorConfig) {\n\t\tsuper();\n\t\tthis._values = values;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget values() {\n\t\treturn this._values;\n\t}\n\tset values(values) {\n\t\tthis._values = values;\n\t}\n\tgetExpression() {\n\t\treturn new ConstExpression({\n\t\t\ttype: ValueType.stringArray,\n\t\t\tvalue: this._values\n\t\t}, this._editorConfig);\n\t}\n};\nvar ConstStringEditor = class extends ExpressionEditor {\n\treturnType = ValueType.string;\n\t_value;\n\tconstructor(value, editorConfig) {\n\t\tsuper();\n\t\tthis._value = value;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget value() {\n\t\treturn this._value;\n\t}\n\tset value(value) {\n\t\tthis._value = value;\n\t}\n\tgetExpression() {\n\t\treturn new ConstExpression({\n\t\t\ttype: ValueType.string,\n\t\t\tvalue: this._value\n\t\t}, this._editorConfig);\n\t}\n};\nvar ConstNumberEditor = class extends ExpressionEditor {\n\treturnType = ValueType.number;\n\t_value;\n\tconstructor(value, editorConfig) {\n\t\tsuper();\n\t\tthis._value = value;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget value() {\n\t\treturn this._value;\n\t}\n\tset value(value) {\n\t\tthis._value = value;\n\t}\n\tgetExpression() {\n\t\treturn new ConstExpression({\n\t\t\ttype: ValueType.number,\n\t\t\tvalue: this._value\n\t\t}, this._editorConfig);\n\t}\n};\nvar ConstBooleanEditor = class extends ExpressionEditor {\n\treturnType = ValueType.boolean;\n\t_value;\n\tconstructor(value, editorConfig) {\n\t\tsuper();\n\t\tthis._value = value;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget value() {\n\t\treturn this._value;\n\t}\n\tset value(value) {\n\t\tthis._value = value;\n\t}\n\tgetExpression() {\n\t\treturn new ConstExpression({\n\t\t\ttype: ValueType.boolean,\n\t\t\tvalue: this._value\n\t\t}, this._editorConfig);\n\t}\n};\nvar ConstDateEditor = class extends ExpressionEditor {\n\treturnType = ValueType.date;\n\t_value;\n\tconstructor(value, editorConfig) {\n\t\tsuper();\n\t\tthis._value = value;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget value() {\n\t\treturn this._value;\n\t}\n\tset value(value) {\n\t\tthis._value = value;\n\t}\n\tgetExpression() {\n\t\tconst value = Math.floor(this._value.getTime() / 1e3);\n\t\treturn new ConstExpression({\n\t\t\ttype: ValueType.date,\n\t\t\tvalue\n\t\t}, this._editorConfig);\n\t}\n};\nvar ConstNumberArrayEditor = class extends ExpressionEditor {\n\treturnType = ValueType.numberArray;\n\t_values;\n\tconstructor(values, editorConfig) {\n\t\tsuper();\n\t\tthis._values = values;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget values() {\n\t\treturn this._values;\n\t}\n\tset values(values) {\n\t\tthis._values = values;\n\t}\n\tgetExpression() {\n\t\treturn new ConstExpression({\n\t\t\ttype: ValueType.numberArray,\n\t\t\tvalue: this._values\n\t\t}, this._editorConfig);\n\t}\n};\nvar ConstDateArrayEditor = class extends ExpressionEditor {\n\treturnType = ValueType.dateArray;\n\t_values;\n\tconstructor(values, editorConfig) {\n\t\tsuper();\n\t\tthis._values = values;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget values() {\n\t\treturn this._values;\n\t}\n\tset values(values) {\n\t\tthis._values = values;\n\t}\n\tgetExpression() {\n\t\tconst value = this._values.map((date) => Math.floor(date.getTime() / 1e3));\n\t\treturn new ConstExpression({\n\t\t\ttype: ValueType.dateArray,\n\t\t\tvalue\n\t\t}, this._editorConfig);\n\t}\n};\nvar ResponseVariableEditor = class extends ExpressionEditor {\n\t_variableName;\n\t_variableRef;\n\tconstructor(variableName, variableType, editorConfig) {\n\t\tsuper();\n\t\tthis._variableName = variableName;\n\t\tthis._variableRef = new ValueReference(variableName);\n\t\tthis._editorConfig = editorConfig;\n\t\tthis.returnType = variableType;\n\t}\n\tget variableName() {\n\t\treturn this._variableName;\n\t}\n\tget variableRef() {\n\t\treturn this._variableRef;\n\t}\n\tgetExpression() {\n\t\treturn new ResponseVariableExpression(this._variableName, this._editorConfig);\n\t}\n};\nvar ContextVariableEditor = class extends ExpressionEditor {\n\t_contextType;\n\t_key;\n\t_args;\n\t_asType;\n\tconstructor(contextType, key, args, asType, editorConfig) {\n\t\tsuper();\n\t\tthis._contextType = contextType;\n\t\tthis._key = key;\n\t\tthis._args = args;\n\t\tthis._asType = asType;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tgetExpression() {\n\t\treturn new ContextVariableExpression(this._contextType, this._key?.getExpression(), this._args?.map((arg) => arg.getExpression()), this._asType, this._editorConfig);\n\t}\n};\nvar CtxLocaleEditor = class extends ContextVariableEditor {\n\treturnType = ValueType.string;\n\tconstructor(editorConfig) {\n\t\tsuper(ContextVariableType.Locale, void 0, void 0, ValueType.string, editorConfig);\n\t}\n};\nvar CtxPFlagIsDefinedEditor = class extends ContextVariableEditor {\n\treturnType = ValueType.boolean;\n\tconstructor(key, editorConfig) {\n\t\tsuper(ContextVariableType.ParticipantFlag, key, void 0, ValueType.boolean, editorConfig);\n\t}\n};\nvar CtxPFlagStringEditor = class extends ContextVariableEditor {\n\treturnType = ValueType.string;\n\tconstructor(key, editorConfig) {\n\t\tsuper(ContextVariableType.ParticipantFlag, key, void 0, ValueType.string, editorConfig);\n\t}\n};\nvar CtxPFlagNumEditor = class extends ContextVariableEditor {\n\treturnType = ValueType.number;\n\tconstructor(key, editorConfig) {\n\t\tsuper(ContextVariableType.ParticipantFlag, key, void 0, ValueType.number, editorConfig);\n\t}\n};\nvar CtxPFlagDateEditor = class extends ContextVariableEditor {\n\treturnType = ValueType.date;\n\tconstructor(key, editorConfig) {\n\t\tsuper(ContextVariableType.ParticipantFlag, key, void 0, ValueType.date, editorConfig);\n\t}\n};\nvar CtxCustomValueEditor = class extends ContextVariableEditor {\n\tconstructor(key, asType, editorConfig) {\n\t\tsuper(ContextVariableType.CustomValue, key, void 0, asType, editorConfig);\n\t\tthis.returnType = asType;\n\t}\n};\nvar CtxCustomExpressionEditor = class extends ContextVariableEditor {\n\tconstructor(key, args, asType, editorConfig) {\n\t\tsuper(ContextVariableType.CustomExpression, key, args, asType, editorConfig);\n\t\tthis.returnType = asType;\n\t}\n};\nvar GroupExpressionEditor = class extends ExpressionEditor {\n\t_args;\n\tconstructor(args, editorConfig) {\n\t\tsuper();\n\t\tthis._args = args;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget args() {\n\t\treturn this._args;\n\t}\n\taddArg(arg, position) {\n\t\tif (position === void 0) this._args.push(arg);\n\t\telse this._args.splice(position, 0, arg);\n\t}\n\tremoveArg(position) {\n\t\tthis._args.splice(position, 1);\n\t}\n\treplaceArg(position, arg) {\n\t\tthis._args[position] = arg;\n\t}\n\tswapArgs(activeIndex, overIndex) {\n\t\tconst newOrder = [...this._args];\n\t\tnewOrder.splice(activeIndex, 1);\n\t\tnewOrder.splice(overIndex, 0, this._args[activeIndex]);\n\t\tthis._args = newOrder;\n\t}\n};\nvar AndExpressionEditor = class extends GroupExpressionEditor {\n\treturnType = ValueType.boolean;\n\tconstructor(args, editorConfig) {\n\t\tif (args.some((arg) => arg.returnType !== ValueType.boolean)) throw new Error(\"And expression editor must have boolean arguments\");\n\t\tsuper(args, editorConfig);\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"and\", this.args.map((arg) => arg.getExpression()), this._editorConfig);\n\t}\n};\nvar OrExpressionEditor = class extends GroupExpressionEditor {\n\treturnType = ValueType.boolean;\n\tconstructor(args, editorConfig) {\n\t\tif (args.some((arg) => arg.returnType !== ValueType.boolean)) throw new Error(\"Or expression editor must have boolean arguments\");\n\t\tsuper(args, editorConfig);\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"or\", this.args.map((arg) => arg.getExpression()), this._editorConfig);\n\t}\n};\nvar StrListContainsExpressionEditor = class extends ExpressionEditor {\n\treturnType = ValueType.boolean;\n\t_list;\n\t_item;\n\tconstructor(list, item, editorConfig) {\n\t\tsuper();\n\t\tif (list.returnType !== ValueType.stringArray) throw new Error(\"List contains expression editor must have a string array list\");\n\t\tif (item.returnType !== ValueType.string) throw new Error(\"List contains expression editor must have a string item\");\n\t\tthis._list = list;\n\t\tthis._item = item;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget list() {\n\t\treturn this._list;\n\t}\n\tget item() {\n\t\treturn this._item;\n\t}\n\tset list(list) {\n\t\tthis._list = list;\n\t}\n\tset item(item) {\n\t\tthis._item = item;\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"list_contains\", [this._list?.getExpression(), this._item?.getExpression()], this._editorConfig);\n\t}\n};\nvar StrEqExpressionEditor = class extends ExpressionEditor {\n\treturnType = ValueType.boolean;\n\t_a;\n\t_b;\n\tconstructor(a, b, editorConfig) {\n\t\tsuper();\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget a() {\n\t\treturn this._a;\n\t}\n\tget b() {\n\t\treturn this._b;\n\t}\n\tset a(a) {\n\t\tthis._a = a;\n\t}\n\tset b(b) {\n\t\tthis._b = b;\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"str_eq\", [this._a?.getExpression(), this._b?.getExpression()], this._editorConfig);\n\t}\n};\nvar EqExpressionEditor = class extends ExpressionEditor {\n\treturnType = ValueType.boolean;\n\t_a;\n\t_b;\n\tconstructor(a, b, editorConfig) {\n\t\tsuper();\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget a() {\n\t\treturn this._a;\n\t}\n\tget b() {\n\t\treturn this._b;\n\t}\n\tset a(a) {\n\t\tthis._a = a;\n\t}\n\tset b(b) {\n\t\tthis._b = b;\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"eq\", [this._a?.getExpression(), this._b?.getExpression()], this._editorConfig);\n\t}\n};\nvar GtExpressionEditor = class extends ExpressionEditor {\n\treturnType = ValueType.boolean;\n\t_a;\n\t_b;\n\tconstructor(a, b, editorConfig) {\n\t\tsuper();\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget a() {\n\t\treturn this._a;\n\t}\n\tget b() {\n\t\treturn this._b;\n\t}\n\tset a(a) {\n\t\tthis._a = a;\n\t}\n\tset b(b) {\n\t\tthis._b = b;\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"gt\", [this._a?.getExpression(), this._b?.getExpression()], this._editorConfig);\n\t}\n};\nvar GteExpressionEditor = class extends ExpressionEditor {\n\treturnType = ValueType.boolean;\n\t_a;\n\t_b;\n\tconstructor(a, b, editorConfig) {\n\t\tsuper();\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget a() {\n\t\treturn this._a;\n\t}\n\tget b() {\n\t\treturn this._b;\n\t}\n\tset a(a) {\n\t\tthis._a = a;\n\t}\n\tset b(b) {\n\t\tthis._b = b;\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"gte\", [this._a?.getExpression(), this._b?.getExpression()], this._editorConfig);\n\t}\n};\nvar LtExpressionEditor = class extends ExpressionEditor {\n\treturnType = ValueType.boolean;\n\t_a;\n\t_b;\n\tconstructor(a, b, editorConfig) {\n\t\tsuper();\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget a() {\n\t\treturn this._a;\n\t}\n\tget b() {\n\t\treturn this._b;\n\t}\n\tset a(a) {\n\t\tthis._a = a;\n\t}\n\tset b(b) {\n\t\tthis._b = b;\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"lt\", [this._a?.getExpression(), this._b?.getExpression()], this._editorConfig);\n\t}\n};\nvar LteExpressionEditor = class extends ExpressionEditor {\n\treturnType = ValueType.boolean;\n\t_a;\n\t_b;\n\tconstructor(a, b, editorConfig) {\n\t\tsuper();\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tget a() {\n\t\treturn this._a;\n\t}\n\tget b() {\n\t\treturn this._b;\n\t}\n\tset b(b) {\n\t\tthis._b = b;\n\t}\n\tset a(a) {\n\t\tthis._a = a;\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"lte\", [this._a?.getExpression(), this._b?.getExpression()], this._editorConfig);\n\t}\n};\nvar InRangeExpressionEditor = class extends ExpressionEditor {\n\treturnType = ValueType.boolean;\n\tvalue;\n\tmin;\n\tmax;\n\tinclusive;\n\tconstructor(value, min, max, inclusive, editorConfig) {\n\t\tsuper();\n\t\tthis.value = value;\n\t\tthis.min = min;\n\t\tthis.max = max;\n\t\tthis.inclusive = inclusive;\n\t\tthis._editorConfig = editorConfig;\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"in_range\", [\n\t\t\tthis.value?.getExpression(),\n\t\t\tthis.min?.getExpression(),\n\t\t\tthis.max?.getExpression(),\n\t\t\tthis.inclusive?.getExpression()\n\t\t], this._editorConfig);\n\t}\n};\nvar SumExpressionEditor = class extends GroupExpressionEditor {\n\treturnType = ValueType.number;\n\tconstructor(args, editorConfig) {\n\t\tsuper(args, editorConfig);\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"sum\", this.args.map((arg) => arg.getExpression()), this._editorConfig);\n\t}\n};\nvar MinExpressionEditor = class extends GroupExpressionEditor {\n\treturnType = ValueType.number;\n\tconstructor(args, editorConfig) {\n\t\tsuper(args, editorConfig);\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"min\", this.args.map((arg) => arg.getExpression()), this._editorConfig);\n\t}\n};\nvar MaxExpressionEditor = class extends GroupExpressionEditor {\n\treturnType = ValueType.number;\n\tconstructor(args, editorConfig) {\n\t\tsuper(args, editorConfig);\n\t}\n\tgetExpression() {\n\t\treturn new FunctionExpression(\"max\", this.args.map((arg) => arg.getExpression()), this._editorConfig);\n\t}\n};\n//#endregion\n//#region src/expressions/editors/expression-editor-generators.ts\nconst const_string_array = (...values) => {\n\treturn new ConstStringArrayEditor(values);\n};\nconst const_string = (value) => {\n\treturn new ConstStringEditor(value);\n};\nconst const_number_array = (...values) => {\n\treturn new ConstNumberArrayEditor(values);\n};\nconst const_number = (value) => {\n\treturn new ConstNumberEditor(value);\n};\nconst const_boolean = (value) => {\n\treturn new ConstBooleanEditor(value);\n};\nconst const_date = (value) => {\n\treturn new ConstDateEditor(value);\n};\nconst const_date_array = (...values) => {\n\treturn new ConstDateArrayEditor(values);\n};\nconst response_string = (valueRef) => {\n\treturn new ResponseVariableEditor(valueRef, ValueType.string);\n};\nconst response_string_array = (valueRef) => {\n\treturn new ResponseVariableEditor(valueRef, ValueType.stringArray);\n};\nconst response_number = (valueRef) => {\n\treturn new ResponseVariableEditor(valueRef, ValueType.number);\n};\nconst response_boolean = (valueRef) => {\n\treturn new ResponseVariableEditor(valueRef, ValueType.boolean);\n};\nconst response_date = (valueRef) => {\n\treturn new ResponseVariableEditor(valueRef, ValueType.date);\n};\nconst response_number_array = (valueRef) => {\n\treturn new ResponseVariableEditor(valueRef, ValueType.numberArray);\n};\nconst response_date_array = (valueRef) => {\n\treturn new ResponseVariableEditor(valueRef, ValueType.dateArray);\n};\nconst ctx_locale = () => {\n\treturn new CtxLocaleEditor();\n};\nconst ctx_pflag_is_defined = (key) => {\n\treturn new CtxPFlagIsDefinedEditor(key);\n};\nconst ctx_pflag_string = (key) => {\n\treturn new CtxPFlagStringEditor(key);\n};\nconst ctx_pflag_num = (key) => {\n\treturn new CtxPFlagNumEditor(key);\n};\nconst ctx_pflag_date = (key) => {\n\treturn new CtxPFlagDateEditor(key);\n};\nconst ctx_custom_value = (key, dType) => {\n\treturn new CtxCustomValueEditor(key, dType);\n};\nconst ctx_custom_expression = (key, args, returnType) => {\n\treturn new CtxCustomExpressionEditor(key, args, returnType);\n};\nconst and = (...args) => {\n\treturn new AndExpressionEditor(args);\n};\nconst or = (...args) => {\n\treturn new OrExpressionEditor(args);\n};\nconst str_list_contains = (list, item) => {\n\treturn new StrListContainsExpressionEditor(list, item);\n};\nconst str_eq = (a, b) => {\n\treturn new StrEqExpressionEditor(a, b);\n};\nconst eq = (a, b) => {\n\treturn new EqExpressionEditor(a, b);\n};\nconst gt = (a, b) => {\n\treturn new GtExpressionEditor(a, b);\n};\nconst gte = (a, b) => {\n\treturn new GteExpressionEditor(a, b);\n};\nconst lt = (a, b) => {\n\treturn new LtExpressionEditor(a, b);\n};\nconst lte = (a, b) => {\n\treturn new LteExpressionEditor(a, b);\n};\nconst in_range = (value, min, max, inclusive) => {\n\treturn new InRangeExpressionEditor(value, min, max, inclusive);\n};\nconst sum = (...args) => {\n\treturn new SumExpressionEditor(args);\n};\nconst min = (...args) => {\n\treturn new MinExpressionEditor(args);\n};\nconst max = (...args) => {\n\treturn new MaxExpressionEditor(args);\n};\n//#endregion\n//#region src/engine/engine.ts\nvar SurveyEngineCore = class {\n\tsurveyDef;\n\trenderedSurveyTree;\n\tcontext;\n\tlocale;\n\tsessionSeedValue;\n\tresponses;\n\tprefills;\n\t_events;\n\t_openedAt;\n\tdateLocales;\n\tprefillEnvironment;\n\tcache;\n\tconstructor(survey, context, prefills, dateLocales, options) {\n\t\tthis._openedAt = this._getTimestamp();\n\t\tthis.sessionSeedValue = generateId();\n\t\tthis.surveyDef = survey;\n\t\tthis.context = context ? context : { locale: \"en\" };\n\t\tthis.locale = this.context.locale;\n\t\tthis.prefills = prefills ? prefills.reduce((acc, p) => {\n\t\t\tacc[p.itemId] = SurveyItemResponse.deserialize(p);\n\t\t\treturn acc;\n\t\t}, {}) : void 0;\n\t\tthis.prefillEnvironment = options?.prefillEnvironment;\n\t\tthis.dateLocales = dateLocales || [{\n\t\t\tcode: \"en\",\n\t\t\tlocale: enUS\n\t\t}];\n\t\tthis.responses = this.initResponseObject(this.surveyDef.surveyItems);\n\t\tthis.initCache();\n\t\tthis.applyConfiguredPrefills();\n\t\tthis.evalExpressions();\n\t\tif (!survey.rootItem) throw new Error(\"constructor: root item not found\");\n\t\tthis.renderedSurveyTree = this.renderGroup(survey.rootItem);\n\t\tthis._events = [{\n\t\t\ttype: SurveyEventTypes.openSurvey,\n\t\t\ttimestamp: this._getTimestamp(),\n\t\t\tvalue: this.context.locale\n\t\t}];\n\t}\n\tsetContext(context) {\n\t\tthis.context = context;\n\t}\n\tgetDateLocales() {\n\t\treturn this.dateLocales.slice();\n\t}\n\tgetCurrentDateLocale() {\n\t\tconst found = this.dateLocales.find((dl) => dl.code === this.locale);\n\t\tif (!found) {\n\t\t\tconsole.warn(`Locale '${this.locale}' is not available. Using default locale.`);\n\t\t\tif (this.dateLocales.length > 0) return this.dateLocales[0].locale;\n\t\t\treturn enUS;\n\t\t}\n\t\treturn found?.locale;\n\t}\n\tupdateContext(context) {\n\t\tthis.context = context;\n\t\tthis.locale = context.locale;\n\t\tthis._registerSurveyEvent({\n\t\t\ttype: SurveyEventTypes.languageChanged,\n\t\t\ttimestamp: this._getTimestamp(),\n\t\t\tvalue: context.locale\n\t\t});\n\t\tthis.evalExpressions();\n\t\tthis.reRenderSurveyTree();\n\t}\n\tsetResponse(targetKey, response) {\n\t\tconst target = this.getResponseItem(targetKey);\n\t\tif (!target) throw new Error(\"setResponse: target not found for key: \" + targetKey);\n\t\ttarget.response = response;\n\t\tthis._registerSurveyEvent({\n\t\t\ttype: SurveyEventTypes.responeChanged,\n\t\t\ttimestamp: this._getTimestamp(),\n\t\t\titemId: targetKey\n\t\t});\n\t\tthis.evalExpressions();\n\t\tthis.reRenderSurveyTree();\n\t}\n\tget openedAt() {\n\t\treturn this._openedAt;\n\t}\n\tget sessionSeed() {\n\t\treturn this.sessionSeedValue;\n\t}\n\tget survey() {\n\t\treturn this.surveyDef;\n\t}\n\tgetSurveyPages(size) {\n\t\tconst renderedSurvey = flattenTree(this.renderedSurveyTree);\n\t\tconst pages = new Array();\n\t\tif (!size) size = \"large\";\n\t\tlet currentPage = [];\n\t\trenderedSurvey.forEach((item) => {\n\t\t\tif (item.type === \"page-break\") {\n\t\t\t\tif (currentPage.length > 0) {\n\t\t\t\t\tpages.push([...currentPage]);\n\t\t\t\t\tcurrentPage = [];\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcurrentPage.push(item);\n\t\t\tif (!this.surveyDef.maxItemsPerPage) return;\n\t\t\tlet max = 0;\n\t\t\tswitch (size) {\n\t\t\t\tcase \"large\":\n\t\t\t\t\tmax = this.surveyDef.maxItemsPerPage.large;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"small\":\n\t\t\t\t\tmax = this.surveyDef.maxItemsPerPage.small;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (currentPage.length >= max) {\n\t\t\t\tpages.push([...currentPage]);\n\t\t\t\tcurrentPage = [];\n\t\t\t}\n\t\t});\n\t\tif (currentPage.length > 0) pages.push([...currentPage]);\n\t\treturn pages;\n\t}\n\tgetRenderedSurveyItem(itemId) {\n\t\treturn flattenTree(this.renderedSurveyTree).find((item) => item.id === itemId);\n\t}\n\tonPageChanged(pageIndex) {\n\t\tthis._registerSurveyEvent({\n\t\t\ttype: SurveyEventTypes.pageChanged,\n\t\t\ttimestamp: this._getTimestamp(),\n\t\t\tvalue: pageIndex\n\t\t});\n\t}\n\tgetEvents() {\n\t\treturn this._events.slice();\n\t}\n\tgetResponses() {\n\t\tconst renderedPositions = /* @__PURE__ */ new Map();\n\t\tflattenTree(this.renderedSurveyTree).filter((item) => item.type !== \"page-break\").forEach((item, index) => {\n\t\t\tif (this.responses[item.id]) renderedPositions.set(item.id, index);\n\t\t});\n\t\tconst responses = [];\n\t\tthis.surveyDef.surveyItems.forEach((item, itemId) => {\n\t\t\tif (!item.isInteractive()) return;\n\t\t\tconst response = this.getResponseItem(itemId);\n\t\t\tif (!response) return;\n\t\t\tconst position = renderedPositions.get(itemId);\n\t\t\tresponse.meta = position === void 0 ? void 0 : { position };\n\t\t\tresponses.push(response);\n\t\t});\n\t\treturn responses;\n\t}\n\tgetDisplayConditionValue(itemKey, componentKey) {\n\t\tif (componentKey) return this.cache.displayConditions[itemKey]?.components?.[componentKey]?.result;\n\t\treturn this.cache.displayConditions[itemKey]?.root?.result;\n\t}\n\tgetDisabledConditionValue(itemKey, componentKey) {\n\t\treturn this.cache.disabledConditions[itemKey]?.components?.[componentKey]?.result;\n\t}\n\tgetTemplateValue(templateValueKey) {\n\t\treturn this.cache.templateValues[templateValueKey]?.value;\n\t}\n\tgetValidationValues(itemKey) {\n\t\tconst validations = this.cache.validations[itemKey];\n\t\tif (!validations) return;\n\t\treturn Object.keys(validations).reduce((acc, validationKey) => {\n\t\t\tacc[validationKey] = validations[validationKey].result;\n\t\t\treturn acc;\n\t\t}, {});\n\t}\n\tinitCache() {\n\t\tthis.cache = {\n\t\t\tvalidations: {},\n\t\t\tdisplayConditions: {},\n\t\t\ttemplateValues: {},\n\t\t\tdisabledConditions: {}\n\t\t};\n\t\tthis.surveyDef.getTemplateValueKeys().forEach((templateKey) => {\n\t\t\tthis.cache.templateValues[templateKey] = {\n\t\t\t\tvalue: void 0,\n\t\t\t\ttemplateDef: this.surveyDef.getTemplateValue(templateKey)\n\t\t\t};\n\t\t});\n\t\tthis.surveyDef.surveyItems.forEach((item, itemId) => {\n\t\t\tif (item.validations && Object.keys(item.validations).length > 0) {\n\t\t\t\tthis.cache.validations[itemId] = {};\n\t\t\t\tObject.keys(item.validations).forEach((validationKey) => {\n\t\t\t\t\tconst valExp = item.validations[validationKey];\n\t\t\t\t\tif (!valExp) {\n\t\t\t\t\t\tconsole.warn(\"initCache: validation expression not found: \" + itemId + \" \" + validationKey);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.cache.validations[itemId][validationKey] = {\n\t\t\t\t\t\texpression: valExp,\n\t\t\t\t\t\tresult: false\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (item.displayConditions !== void 0 && (item.displayConditions.root || item.displayConditions.components)) {\n\t\t\t\tthis.cache.displayConditions[itemId] = {};\n\t\t\t\tif (item.displayConditions.root) this.cache.displayConditions[itemId].root = {\n\t\t\t\t\texpression: item.displayConditions.root,\n\t\t\t\t\tresult: false\n\t\t\t\t};\n\t\t\t\tif (item.displayConditions.components) {\n\t\t\t\t\tthis.cache.displayConditions[itemId].components = {};\n\t\t\t\t\tObject.keys(item.displayConditions.components).forEach((componentKey) => {\n\t\t\t\t\t\tconst compExp = item.displayConditions?.components?.[componentKey];\n\t\t\t\t\t\tif (!compExp) {\n\t\t\t\t\t\t\tconsole.warn(\"initCache: display condition component expression not found: \" + itemId + \" \" + componentKey);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.cache.displayConditions[itemId].components[componentKey] = {\n\t\t\t\t\t\t\texpression: compExp,\n\t\t\t\t\t\t\tresult: false\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (item.disabledConditions !== void 0 && item.disabledConditions.components !== void 0) {\n\t\t\t\tthis.cache.disabledConditions[itemId] = { components: {} };\n\t\t\t\tObject.keys(item.disabledConditions.components).forEach((componentKey) => {\n\t\t\t\t\tconst compExp = item.disabledConditions?.components?.[componentKey];\n\t\t\t\t\tif (!compExp) {\n\t\t\t\t\t\tconsole.warn(\"initCache: disabled condition component expression not found: \" + itemId + \" \" + componentKey);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthis.cache.disabledConditions[itemId].components[componentKey] = {\n\t\t\t\t\t\texpression: compExp,\n\t\t\t\t\t\tresult: false\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n\tinitResponseObject(items) {\n\t\tconst respGroup = {};\n\t\titems.forEach((item, itemId) => {\n\t\t\tif (!item.isInteractive) return;\n\t\t\telse {\n\t\t\t\tconst prefill = this.prefills?.[itemId];\n\t\t\t\tconst applyPrefill = prefill && prefill.itemType === item.type;\n\t\t\t\trespGroup[itemId] = new SurveyItemResponse({\n\t\t\t\t\titemId,\n\t\t\t\t\titemType: item.type\n\t\t\t\t}, applyPrefill ? prefill.response : void 0);\n\t\t\t}\n\t\t});\n\t\treturn respGroup;\n\t}\n\tapplyConfiguredPrefills() {\n\t\tconst evalEngine = new ExpressionEvaluator({\n\t\t\tresponses: this.responses,\n\t\t\tsurveyContext: this.context\n\t\t});\n\t\tconst maxPasses = Math.max(this.surveyDef.surveyItems.size, 1);\n\t\tfor (let pass = 0; pass < maxPasses; pass++) {\n\t\t\tthis.evalTemplateValues(evalEngine);\n\t\t\tlet changedInPass = false;\n\t\t\tthis.surveyDef.surveyItems.forEach((item) => {\n\t\t\t\tif (!item.isInteractive()) return;\n\t\t\t\tchangedInPass = this.applyConfiguredPrefillsForItem(item, evalEngine) || changedInPass;\n\t\t\t});\n\t\t\tif (!changedInPass) break;\n\t\t}\n\t\tthis.evalTemplateValues(evalEngine);\n\t}\n\tapplyConfiguredPrefillsForItem(item, evalEngine) {\n\t\tconst responseItem = this.responses[item.id];\n\t\tif (!responseItem) return false;\n\t\tlet changed = false;\n\t\tfor (const prefill of item.prefills ?? []) {\n\t\t\tconst targetSlot = item.resolvePrefillTarget(prefill.target);\n\t\t\tif (!targetSlot) continue;\n\t\t\tif ((prefill.apply ?? SurveyItemPrefillApplyMode.ifEmpty) === SurveyItemPrefillApplyMode.ifEmpty && responseItem.response?.get(targetSlot.slotId) !== void 0) continue;\n\t\t\tif (!this.shouldApplyConfiguredPrefill(prefill, evalEngine)) continue;\n\t\t\tconst resolvedValue = this.resolveConfiguredPrefillValue(prefill, targetSlot, evalEngine);\n\t\t\tif (!resolvedValue) continue;\n\t\t\tconst normalizedValue = item.normalizePrefillValue(prefill, targetSlot, resolvedValue);\n\t\t\tif (!normalizedValue) continue;\n\t\t\tconst nextResponse = responseItem.response?.clone() ?? new ResponseItem();\n\t\t\tnextResponse.setSlotValue(targetSlot.slotId, normalizedValue);\n\t\t\tresponseItem.response = nextResponse.isEmpty() ? void 0 : nextResponse;\n\t\t\tchanged = true;\n\t\t}\n\t\treturn changed;\n\t}\n\tshouldApplyConfiguredPrefill(prefill, evalEngine) {\n\t\tif (!prefill.when) return true;\n\t\tconst resolved = evalEngine.eval(prefill.when);\n\t\treturn resolved?.type === ValueType.boolean && resolved.value === true;\n\t}\n\tresolveConfiguredPrefillValue(prefill, _target, evalEngine) {\n\t\tswitch (prefill.source.type) {\n\t\t\tcase \"static\": return prefill.source.value;\n\t\t\tcase \"expression\": return evalEngine.eval(prefill.source.expression);\n\t\t\tcase \"templateValue\": return this.getTemplateValue(prefill.source.key);\n\t\t\tcase \"previousResponse\": {\n\t\t\t\tif (!this.prefillEnvironment?.getPreviousResponse) return;\n\t\t\t\tconst refTarget = prefill.source.ref.target ?? prefill.target;\n\t\t\t\tconst resolved = this.prefillEnvironment.getPreviousResponse({\n\t\t\t\t\tsurveyKey: prefill.source.ref.surveyKey,\n\t\t\t\t\titemId: prefill.source.ref.itemId,\n\t\t\t\t\ttarget: refTarget\n\t\t\t\t});\n\t\t\t\tif (!resolved) return;\n\t\t\t\treturn resolved;\n\t\t\t}\n\t\t\tdefault: return;\n\t\t}\n\t}\n\tshouldRender(itemId, componentId) {\n\t\tconst displayConditionResult = this.getDisplayConditionValue(itemId, componentId);\n\t\tif (displayConditionResult !== void 0) return displayConditionResult;\n\t\treturn true;\n\t}\n\tsequentialRender(groupDef) {\n\t\tconst newItems = [];\n\t\tfor (const itemId of groupDef.items || []) {\n\t\t\tif (!this.shouldRender(itemId)) continue;\n\t\t\tconst itemDef = this.surveyDef.surveyItems.get(itemId);\n\t\t\tif (!itemDef) {\n\t\t\t\tconsole.warn(\"sequentialRender: item not found: \" + itemId);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (itemDef.type === \"group\") {\n\t\t\t\tnewItems.push(this.renderGroup(itemDef));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnewItems.push({\n\t\t\t\tid: itemId,\n\t\t\t\ttype: itemDef.type\n\t\t\t});\n\t\t}\n\t\treturn {\n\t\t\tid: groupDef.id,\n\t\t\ttype: \"group\",\n\t\t\titems: newItems\n\t\t};\n\t}\n\trandomizedItemRender(groupDef, parent) {\n\t\tconst newItems = parent.items?.filter((rItem) => this.shouldRender(rItem.id)) || [];\n\t\tconst itemIds = groupDef.items || [];\n\t\tconst shuffledIndices = shuffleIndices(itemIds.length);\n\t\tfor (const index of shuffledIndices) {\n\t\t\tconst itemId = itemIds[index];\n\t\t\tif (parent.items?.find((rItem) => rItem.id === itemId)) continue;\n\t\t\tif (!this.shouldRender(itemId)) continue;\n\t\t\tconst itemDef = this.surveyDef.surveyItems.get(itemId);\n\t\t\tif (!itemDef) {\n\t\t\t\tconsole.warn(\"randomizedItemRender: item not found: \" + itemId);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (itemDef.type === \"group\") {\n\t\t\t\tnewItems.push(this.renderGroup(itemDef, parent));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnewItems.push({\n\t\t\t\tid: itemId,\n\t\t\t\ttype: itemDef.type\n\t\t\t});\n\t\t}\n\t\treturn {\n\t\t\tid: groupDef.id,\n\t\t\ttype: \"group\",\n\t\t\titems: newItems\n\t\t};\n\t}\n\trenderGroup(groupDef, parent) {\n\t\tif (!parent) parent = {\n\t\t\tid: groupDef.id,\n\t\t\ttype: \"group\",\n\t\t\titems: []\n\t\t};\n\t\tif (groupDef.config.shuffleItems) return this.randomizedItemRender(groupDef, parent);\n\t\treturn this.sequentialRender(groupDef);\n\t}\n\treRenderSurveyTree() {\n\t\tif (!this.surveyDef.rootItem) throw new Error(\"reRenderSurveyTree: root item not found\");\n\t\tthis.renderedSurveyTree = this.renderGroup(this.surveyDef.rootItem);\n\t}\n\t_registerSurveyEvent(event) {\n\t\tthis._events.push(event);\n\t}\n\t_getTimestamp() {\n\t\treturn Math.floor(Date.now() / 1e3);\n\t}\n\tgetResponseItem(itemId) {\n\t\treturn this.responses[itemId];\n\t}\n\tevalExpressions() {\n\t\tconst evalEngine = new ExpressionEvaluator({\n\t\t\tresponses: this.responses,\n\t\t\tsurveyContext: this.context\n\t\t});\n\t\tthis.evalTemplateValues(evalEngine);\n\t\tthis.evalDisplayConditions(evalEngine);\n\t\tthis.evalDisableConditions(evalEngine);\n\t\tthis.evalValidations(evalEngine);\n\t}\n\tevalTemplateValues(evalEngine) {\n\t\tObject.keys(this.cache.templateValues).forEach((templateValueKey) => {\n\t\t\tconst templateValue = this.cache.templateValues[templateValueKey];\n\t\t\tthis.cache.templateValues[templateValueKey].value = void 0;\n\t\t\tif (!templateValue.templateDef?.expression) {\n\t\t\t\tconsole.warn(\"evalTemplateValues: template value expression not found: \" + templateValueKey);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tlet evaluatedValue = evalEngine.eval(templateValue.templateDef.expression);\n\t\t\tif (evaluatedValue === void 0) {\n\t\t\t\tconsole.warn(\"evalTemplateValues: template value expression returned undefined: \" + templateValueKey);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tswitch (templateValue.templateDef.type) {\n\t\t\t\tcase \"date2string\":\n\t\t\t\t\tif (evaluatedValue.type !== ValueType.date) {\n\t\t\t\t\t\tconsole.warn(\"evalTemplateValues: template value expression returned non-date value: \" + templateValueKey);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tevaluatedValue = {\n\t\t\t\t\t\ttype: ValueType.string,\n\t\t\t\t\t\tvalue: format(/* @__PURE__ */ new Date(evaluatedValue.value * 1e3), templateValue.templateDef.dateFormat)\n\t\t\t\t\t};\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: break;\n\t\t\t}\n\t\t\tthis.cache.templateValues[templateValueKey].value = evaluatedValue;\n\t\t});\n\t}\n\tevalDisplayConditions(evalEngine) {\n\t\tObject.keys(this.cache.displayConditions).forEach((itemKey) => {\n\t\t\tconst displayCondition = this.cache.displayConditions[itemKey];\n\t\t\tif (displayCondition.root) {\n\t\t\t\tconst resolvedValue = evalEngine.eval(displayCondition.root.expression);\n\t\t\t\tif (resolvedValue === void 0 || resolvedValue.type !== ValueType.boolean) {\n\t\t\t\t\tconsole.warn(\"evalDisplayConditions: display condition expression returned undefined: \" + itemKey);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.cache.displayConditions[itemKey].root.result = resolvedValue.value;\n\t\t\t}\n\t\t\tif (displayCondition.components) Object.keys(displayCondition.components).forEach((componentKey) => {\n\t\t\t\tconst resolvedValue = evalEngine.eval(displayCondition.components[componentKey].expression);\n\t\t\t\tif (resolvedValue === void 0 || resolvedValue.type !== ValueType.boolean) {\n\t\t\t\t\tconsole.warn(\"evalDisplayConditions: display condition component expression returned undefined: \" + itemKey + \".\" + componentKey);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.cache.displayConditions[itemKey].components[componentKey].result = resolvedValue.value;\n\t\t\t});\n\t\t});\n\t}\n\tevalDisableConditions(evalEngine) {\n\t\tObject.keys(this.cache.disabledConditions).forEach((itemKey) => {\n\t\t\tconst disableCondition = this.cache.disabledConditions[itemKey];\n\t\t\tif (disableCondition.components) Object.keys(disableCondition.components).forEach((componentKey) => {\n\t\t\t\tconst resolvedValue = evalEngine.eval(disableCondition.components[componentKey].expression);\n\t\t\t\tif (resolvedValue === void 0 || resolvedValue.type !== ValueType.boolean) {\n\t\t\t\t\tconsole.warn(\"evalDisableConditions: disable condition component expression returned undefined: \" + itemKey + \".\" + componentKey);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.cache.disabledConditions[itemKey].components[componentKey].result = resolvedValue.value;\n\t\t\t});\n\t\t});\n\t}\n\tevalValidations(evalEngine) {\n\t\tObject.keys(this.cache.validations).forEach((itemId) => {\n\t\t\tconst validation = this.cache.validations[itemId];\n\t\t\tObject.keys(validation).forEach((validationKey) => {\n\t\t\t\tconst resolvedValue = evalEngine.eval(validation[validationKey].expression);\n\t\t\t\tif (resolvedValue === void 0 || resolvedValue.type !== ValueType.boolean) {\n\t\t\t\t\tconsole.warn(\"evalValidations: validation expression returned undefined: \" + itemId + \".\" + validationKey);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.cache.validations[itemId][validationKey].result = resolvedValue.value;\n\t\t\t});\n\t\t});\n\t}\n};\nconst flattenTree = (itemTree) => {\n\tconst flatTree = new Array();\n\titemTree.items?.forEach((item) => {\n\t\tif (item.type === \"group\") flatTree.push(...flattenTree(item));\n\t\telse flatTree.push({ ...item });\n\t});\n\treturn flatTree;\n};\n//#endregion\n//#region src/json-patch.ts\nvar JsonPatchError = class extends Error {\n\tconstructor(message, code, path, operationIndex) {\n\t\tsuper(message);\n\t\tthis.code = code;\n\t\tthis.path = path;\n\t\tthis.operationIndex = operationIndex;\n\t\tthis.name = \"JsonPatchError\";\n\t}\n};\nconst hasOwn = (value, key) => Object.prototype.hasOwnProperty.call(value, key);\nconst isRecord = (value) => typeof value === \"object\" && value !== null && !Array.isArray(value);\nconst assertValidPointerSegment = (segment, pointer) => {\n\tif (/~(?![01])/.test(segment)) throw new JsonPatchError(`Invalid JSON pointer segment \"${segment}\" in \"${pointer}\". Only \"~0\" and \"~1\" escapes are allowed.`, \"invalid-json-pointer\", pointer);\n};\nconst decodeJsonPointerSegment = (segment) => {\n\tassertValidPointerSegment(segment, segment);\n\treturn segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n};\nconst encodeJsonPointerSegment = (segment) => segment.replace(/~/g, \"~0\").replace(/\\//g, \"~1\");\nconst parseJsonPointer = (pointer) => {\n\tif (pointer === \"\") return [];\n\tif (!pointer.startsWith(\"/\")) throw new JsonPatchError(`Invalid JSON pointer \"${pointer}\". It must be empty or start with \"/\".`, \"invalid-json-pointer\", pointer);\n\treturn pointer.slice(1).split(\"/\").map((segment) => {\n\t\tassertValidPointerSegment(segment, pointer);\n\t\treturn segment.replace(/~1/g, \"/\").replace(/~0/g, \"~\");\n\t});\n};\nconst parseArrayIndex = ({ segment, arrayLength, allowAppend, allowEnd, path }) => {\n\tif (segment === \"-\") {\n\t\tif (allowAppend) return arrayLength;\n\t\tthrow new JsonPatchError(`JSON pointer \"${path}\" uses \"-\" where an existing array index is required.`, \"invalid-array-index\", path);\n\t}\n\tif (!/^(0|[1-9][0-9]*)$/.test(segment)) throw new JsonPatchError(`JSON pointer \"${path}\" uses invalid array index \"${segment}\".`, \"invalid-array-index\", path);\n\tconst index = Number(segment);\n\tconst maximum = allowEnd ? arrayLength : arrayLength - 1;\n\tif (index < 0 || index > maximum) throw new JsonPatchError(`JSON pointer \"${path}\" array index ${index} is out of bounds.`, \"array-index-out-of-bounds\", path);\n\treturn index;\n};\nconst getValueAtSegments = (document, segments, path) => {\n\tlet current = document;\n\tfor (const segment of segments) {\n\t\tif (Array.isArray(current)) {\n\t\t\tconst index = parseArrayIndex({\n\t\t\t\tsegment,\n\t\t\t\tarrayLength: current.length,\n\t\t\t\tallowAppend: false,\n\t\t\t\tallowEnd: false,\n\t\t\t\tpath\n\t\t\t});\n\t\t\tcurrent = current[index];\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isRecord(current) || !hasOwn(current, segment)) throw new JsonPatchError(`JSON pointer \"${path}\" does not exist.`, \"path-not-found\", path);\n\t\tcurrent = current[segment];\n\t}\n\treturn current;\n};\nconst getValueAtJsonPointer = (document, pointer) => {\n\treturn getValueAtSegments(document, parseJsonPointer(pointer), pointer);\n};\nconst deepEqualJson = (left, right) => {\n\tif (left === right) return true;\n\tif (Array.isArray(left) || Array.isArray(right)) {\n\t\tif (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) return false;\n\t\treturn left.every((entry, index) => deepEqualJson(entry, right[index]));\n\t}\n\tif (isRecord(left) || isRecord(right)) {\n\t\tif (!isRecord(left) || !isRecord(right)) return false;\n\t\tconst leftKeys = Object.keys(left).sort();\n\t\tconst rightKeys = Object.keys(right).sort();\n\t\tif (leftKeys.length !== rightKeys.length) return false;\n\t\treturn leftKeys.every((key, index) => key === rightKeys[index] && deepEqualJson(left[key], right[key]));\n\t}\n\treturn false;\n};\nconst applyAdd = (document, path, value) => {\n\tconst segments = parseJsonPointer(path);\n\tif (segments.length === 0) return structuredCloneMethod(value);\n\tconst parentSegments = segments.slice(0, -1);\n\tconst key = segments[segments.length - 1];\n\tconst parent = getValueAtSegments(document, parentSegments, path);\n\tif (Array.isArray(parent)) {\n\t\tconst index = parseArrayIndex({\n\t\t\tsegment: key,\n\t\t\tarrayLength: parent.length,\n\t\t\tallowAppend: true,\n\t\t\tallowEnd: true,\n\t\t\tpath\n\t\t});\n\t\tparent.splice(index, 0, structuredCloneMethod(value));\n\t\treturn document;\n\t}\n\tif (!isRecord(parent)) throw new JsonPatchError(`JSON pointer \"${path}\" parent is not an object or array.`, \"invalid-target-parent\", path);\n\tparent[key] = structuredCloneMethod(value);\n\treturn document;\n};\nconst applyRemove = (document, path) => {\n\tconst segments = parseJsonPointer(path);\n\tif (segments.length === 0) throw new JsonPatchError(\"Removing the document root is not supported.\", \"remove-root\", path);\n\tconst parentSegments = segments.slice(0, -1);\n\tconst key = segments[segments.length - 1];\n\tconst parent = getValueAtSegments(document, parentSegments, path);\n\tif (Array.isArray(parent)) {\n\t\tconst index = parseArrayIndex({\n\t\t\tsegment: key,\n\t\t\tarrayLength: parent.length,\n\t\t\tallowAppend: false,\n\t\t\tallowEnd: false,\n\t\t\tpath\n\t\t});\n\t\tconst [removedValue] = parent.splice(index, 1);\n\t\treturn {\n\t\t\tdocument,\n\t\t\tremovedValue\n\t\t};\n\t}\n\tif (!isRecord(parent) || !hasOwn(parent, key)) throw new JsonPatchError(`JSON pointer \"${path}\" does not exist.`, \"path-not-found\", path);\n\tconst removedValue = parent[key];\n\tdelete parent[key];\n\treturn {\n\t\tdocument,\n\t\tremovedValue\n\t};\n};\nconst applyReplace = (document, path, value) => {\n\tconst segments = parseJsonPointer(path);\n\tif (segments.length === 0) return structuredCloneMethod(value);\n\tgetValueAtSegments(document, segments, path);\n\tapplyRemove(document, path);\n\treturn applyAdd(document, path, value);\n};\nconst assertMoveTargetIsNotDescendant = (from, path) => {\n\tif (from === \"\" || path === from || !path.startsWith(`${from}/`)) return;\n\tthrow new JsonPatchError(`JSON Patch cannot move \"${from}\" into its own descendant \"${path}\".`, \"move-into-descendant\", path);\n};\nconst applyJsonPatch = (document, operations) => {\n\tlet patchedDocument = structuredCloneMethod(document);\n\toperations.forEach((operation, operationIndex) => {\n\t\ttry {\n\t\t\tswitch (operation.op) {\n\t\t\t\tcase \"add\":\n\t\t\t\t\tpatchedDocument = applyAdd(patchedDocument, operation.path, operation.value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"remove\":\n\t\t\t\t\tpatchedDocument = applyRemove(patchedDocument, operation.path).document;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"replace\":\n\t\t\t\t\tpatchedDocument = applyReplace(patchedDocument, operation.path, operation.value);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"move\": {\n\t\t\t\t\tassertMoveTargetIsNotDescendant(operation.from, operation.path);\n\t\t\t\t\tif (operation.from === operation.path) break;\n\t\t\t\t\tconst { document: withoutValue, removedValue } = applyRemove(patchedDocument, operation.from);\n\t\t\t\t\tpatchedDocument = applyAdd(withoutValue, operation.path, removedValue);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"copy\": {\n\t\t\t\t\tconst value = getValueAtJsonPointer(patchedDocument, operation.from);\n\t\t\t\t\tpatchedDocument = applyAdd(patchedDocument, operation.path, value);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase \"test\":\n\t\t\t\t\tif (!deepEqualJson(getValueAtJsonPointer(patchedDocument, operation.path), operation.value)) throw new JsonPatchError(`JSON Patch test failed at \"${operation.path}\".`, \"test-failed\", operation.path);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof JsonPatchError) throw new JsonPatchError(error.message, error.code, error.path, operationIndex);\n\t\t\tthrow error;\n\t\t}\n\t});\n\treturn patchedDocument;\n};\n//#endregion\n//#region src/response-exporter/types.ts\n/** Meta column keys in fixed order (common attributes first). */\nconst META_COLUMN_ORDER = [\n\t\"submittedAt\",\n\t\"participantId\",\n\t\"responseId\",\n\t\"versionId\"\n];\n/** Built-in transform modes for slot export. */\nconst SlotTransformMode = {\n\tdefault: \"default\",\n\tmask: \"mask\",\n\tdateFormat: \"dateFormat\"\n};\n/** Separator between item key path and slot coding path in default export headers. */\nconst EXPORT_COLUMN_SLOT_SEPARATOR = \"__\";\n/** Source of an export column. */\nconst ExportColumnSource = {\n\tmeta: \"meta\",\n\tcontext: \"context\",\n\tresponse: \"response\"\n};\n//#endregion\n//#region src/response-exporter/slot-formatter.ts\n/** Default transform config when no profile override. */\nconst DEFAULT_TRANSFORM = { mode: SlotTransformMode.default };\n/**\n* Export a single response slot to a string. Pure function for unit testing.\n* Uses default formatting by ValueType unless overridden by transformConfig.\n*/\nfunction exportSingleResponseSlot(params) {\n\tconst { value, valueType, transformConfig } = params;\n\tif (value === void 0 || value === null) return \"\";\n\tconst mode = transformConfig.mode;\n\tif (mode === SlotTransformMode.mask) return maskValue(value, transformConfig.maskChar ?? \"***\");\n\tif (mode === SlotTransformMode.dateFormat && (valueType === ValueType.date || valueType === ValueType.dateArray)) return formatDateValue(value, transformConfig.dateFormat?.pattern ?? \"yyyy-MM-dd\");\n\treturn formatDefault(value);\n}\nconst BooleanExportValues = {\n\tTRUE: \"TRUE\",\n\tFALSE: \"FALSE\"\n};\nfunction formatDefault(value) {\n\tswitch (value.type) {\n\t\tcase ValueType.string: return String(value.value);\n\t\tcase ValueType.reference: return String(value.value);\n\t\tcase ValueType.boolean: return value.value ? BooleanExportValues.TRUE : BooleanExportValues.FALSE;\n\t\tcase ValueType.number: return value.precision === NumberPrecision.int ? String(Math.floor(value.value)) : String(value.value);\n\t\tcase ValueType.date: return (/* @__PURE__ */ new Date(value.value * 1e3)).toISOString();\n\t\tcase ValueType.duration: {\n\t\t\tconst d = value;\n\t\t\treturn `${d.precision === NumberPrecision.int ? Math.floor(d.value) : d.value} ${d.unit}`;\n\t\t}\n\t\tcase ValueType.stringArray: return value.value.join(\"; \");\n\t\tcase ValueType.referenceArray: return value.value.join(\"; \");\n\t\tcase ValueType.numberArray: {\n\t\t\tconst arr = value.value;\n\t\t\tconst prec = value.precision;\n\t\t\tconst fmt = (n) => prec === NumberPrecision.int ? Math.floor(n) : n;\n\t\t\treturn arr.map(fmt).join(\"; \");\n\t\t}\n\t\tcase ValueType.dateArray: return value.value.map((ts) => (/* @__PURE__ */ new Date(ts * 1e3)).toISOString()).join(\"; \");\n\t\tcase ValueType.durationArray: {\n\t\t\tconst d = value;\n\t\t\tconst prec = d.precision === NumberPrecision.int;\n\t\t\tconst fmt = (n) => prec ? Math.floor(n) : n;\n\t\t\treturn d.value.map((v) => `${fmt(v)} ${d.unit}`).join(\"; \");\n\t\t}\n\t\tdefault: return String(value.value ?? \"\");\n\t}\n}\nfunction formatDateValue(value, pattern) {\n\tif (value.type === ValueType.date) return format(/* @__PURE__ */ new Date(value.value * 1e3), pattern);\n\tif (value.type === ValueType.dateArray) return value.value.map((ts) => format(/* @__PURE__ */ new Date(ts * 1e3), pattern)).join(\"; \");\n\treturn formatDefault(value);\n}\nfunction maskValue(value, maskChar) {\n\treturn valueToString(value) ? maskChar : \"\";\n}\nfunction valueToString(value) {\n\tswitch (value.type) {\n\t\tcase ValueType.string:\n\t\tcase ValueType.reference: return String(value.value);\n\t\tcase ValueType.stringArray:\n\t\tcase ValueType.referenceArray: return value.value.join(\" \");\n\t\tdefault: return String(value.value ?? \"\");\n\t}\n}\n//#endregion\n//#region src/response-exporter/csv-serializer.ts\nconst DEFAULT_OPTIONS = {\n\tseparator: \",\",\n\tlineEnding: \"\\n\",\n\tincludeHeader: true\n};\n/**\n* Escape a cell value for CSV. Quotes the cell when it contains separator, quote, CR, or LF.\n* Doubles embedded quotes. Preserves multiline content inside quoted cells.\n*/\nfunction escapeCsvCell(value, separator = \",\") {\n\tif (value === \"\") return value;\n\tif (!(value.includes(separator) || value.includes(\"\\\"\") || value.includes(\"\\r\") || value.includes(\"\\n\"))) return value;\n\treturn `\"${value.replace(/\"/g, \"\\\"\\\"\")}\"`;\n}\n/**\n* Serialize export rows to CSV string.\n*/\nfunction serializeToCsv(columns, rows, options) {\n\tconst opts = {\n\t\t...DEFAULT_OPTIONS,\n\t\t...options\n\t};\n\tconst sep = opts.separator;\n\tconst lines = [];\n\tconst headers = columns.map((c) => c.header);\n\tif (opts.includeHeader) lines.push(headers.map((header) => escapeCsvCell(header, sep)).join(sep));\n\tfor (const row of rows) {\n\t\tconst cells = headers.map((header) => escapeCsvCell(row[header] ?? \"\", sep));\n\t\tlines.push(cells.join(sep));\n\t}\n\treturn lines.join(opts.lineEnding);\n}\n//#endregion\n//#region src/response-exporter/exporter.ts\nfunction slotOverrideKey(itemId, slotId) {\n\treturn `${itemId}::${slotId}`;\n}\nfunction responseColumnId(itemId, slotId) {\n\treturn `${itemId}::${slotId}`;\n}\nfunction metaColumnId(metaField) {\n\treturn `meta:${metaField}`;\n}\nfunction contextColumnId(contextKey) {\n\treturn `context:${contextKey}`;\n}\nfunction formatMetaValue(response, metaField) {\n\tswitch (metaField) {\n\t\tcase \"submittedAt\":\n\t\t\tif (response.submittedAt == null || response.submittedAt === 0) return \"\";\n\t\t\treturn format(/* @__PURE__ */ new Date(response.submittedAt * 1e3), \"yyyy-MM-dd'T'HH:mm:ss.SSSxxx\");\n\t\tcase \"participantId\": return response.participantId ?? \"\";\n\t\tcase \"responseId\": return response.key;\n\t\tcase \"versionId\": return response.versionId;\n\t\tdefault: return \"\";\n\t}\n}\nvar SurveyResponseExporter = class {\n\tversions = /* @__PURE__ */ new Map();\n\tconstructor(versionBindings, profiles = []) {\n\t\tthis.profiles = profiles;\n\t\tfor (const vb of versionBindings) this.versions.set(vb.versionId, vb);\n\t}\n\tgetSurveyForVersion(versionId) {\n\t\treturn this.versions.get(versionId);\n\t}\n\t/**\n\t* Compute response-only columns from survey definition.\n\t*/\n\tcomputeResponseColumns(versionId) {\n\t\tconst binding = this.versions.get(versionId);\n\t\tif (!binding) return [];\n\t\tconst survey = binding.survey;\n\t\tconst keyIndex = survey.keyIndex;\n\t\tconst keyByItemId = new Map(keyIndex.map((r) => [r.itemId, r]));\n\t\tconst profile = this.resolveProfileForVersion(versionId);\n\t\tconst columns = [];\n\t\tfor (const { itemId, slots } of survey.getResponseSlotDefinitions()) {\n\t\t\tconst keyInfo = keyByItemId.get(itemId);\n\t\t\tconst itemBaseKey = keyInfo ? [...keyInfo.keyPath, keyInfo.key].join(\".\") : itemId;\n\t\t\tfor (const slot of slots) {\n\t\t\t\tconst columnId = responseColumnId(itemId, slot.slotId);\n\t\t\t\tconst codingPath = [...slot.keyPath, slot.key].filter((part) => part.trim().length > 0);\n\t\t\t\tconst defaultHeader = codingPath.length > 0 ? `${itemBaseKey}__${codingPath.join(\".\")}` : `${itemBaseKey}__${slot.slotId}`;\n\t\t\t\tconst header = this.resolveColumnHeader(profile, columnId, defaultHeader);\n\t\t\t\tcolumns.push({\n\t\t\t\t\tid: columnId,\n\t\t\t\t\theader,\n\t\t\t\t\tsource: ExportColumnSource.response,\n\t\t\t\t\titemId,\n\t\t\t\t\tslotId: slot.slotId,\n\t\t\t\t\tvalueType: slot.valueType\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn columns;\n\t}\n\t/**\n\t* Compute full export columns: meta first, then context (from responses), then response columns.\n\t* Column order: meta (fixed) -> context (profile order or alphabetical) -> response (profile order + alphabetical).\n\t*/\n\tcomputeColumns(versionId, responses, versionIds) {\n\t\tconst vids = versionIds ?? [versionId];\n\t\tconst responseCols = [];\n\t\tconst seen = /* @__PURE__ */ new Set();\n\t\tfor (const vid of vids) for (const c of this.computeResponseColumns(vid)) if (!seen.has(c.id)) {\n\t\t\tseen.add(c.id);\n\t\t\tresponseCols.push(c);\n\t\t}\n\t\tconst profile = this.resolveProfileForVersion(versionId);\n\t\tconst metaColumns = META_COLUMN_ORDER.map((metaField) => ({\n\t\t\tid: metaColumnId(metaField),\n\t\t\theader: this.resolveColumnHeader(profile, metaColumnId(metaField), metaField),\n\t\t\tsource: ExportColumnSource.meta,\n\t\t\tmetaField\n\t\t}));\n\t\tconst contextKeys = /* @__PURE__ */ new Set();\n\t\tfor (const r of responses ?? []) if (r.context) for (const k of Object.keys(r.context)) contextKeys.add(k);\n\t\tconst contextOrder = profile?.contextColumnOrder;\n\t\tconst contextCols = Array.from(contextKeys).sort(contextOrder ? (a, b) => {\n\t\t\tconst ia = contextOrder.indexOf(a);\n\t\t\tconst ib = contextOrder.indexOf(b);\n\t\t\tif (ia >= 0 && ib >= 0) return ia - ib;\n\t\t\tif (ia >= 0) return -1;\n\t\t\tif (ib >= 0) return 1;\n\t\t\treturn a.localeCompare(b);\n\t\t} : void 0).map((contextKey) => ({\n\t\t\tid: contextColumnId(contextKey),\n\t\t\theader: this.resolveColumnHeader(profile, contextColumnId(contextKey), `context.${contextKey}`),\n\t\t\tsource: ExportColumnSource.context,\n\t\t\tcontextKey\n\t\t}));\n\t\tconst respOrder = profile?.responseColumnOrder ?? [];\n\t\tconst byOrder = respOrder.filter((id) => responseCols.some((c) => c.id === id)).map((id) => responseCols.find((c) => c.id === id));\n\t\tconst remaining = responseCols.filter((c) => !respOrder.includes(c.id)).sort((a, b) => a.header.localeCompare(b.header));\n\t\tconst respCols = [...byOrder, ...remaining];\n\t\tconst columns = [\n\t\t\t...metaColumns,\n\t\t\t...contextCols,\n\t\t\t...respCols\n\t\t];\n\t\tthis.assertUniqueHeaders(columns);\n\t\treturn columns;\n\t}\n\tresolveProfileForVersion(versionId) {\n\t\treturn this.profiles.find((p) => !p.versionId || p.versionId === versionId);\n\t}\n\tresolveColumnHeader(profile, columnId, defaultHeader) {\n\t\tconst override = profile?.columnHeaders?.[columnId]?.trim();\n\t\treturn override && override.length > 0 ? override : defaultHeader;\n\t}\n\tassertUniqueHeaders(columns) {\n\t\tconst seen = /* @__PURE__ */ new Map();\n\t\tfor (const column of columns) {\n\t\t\tconst existingId = seen.get(column.header);\n\t\t\tif (existingId && existingId !== column.id) throw new Error(`Duplicate export column header '${column.header}' for columns '${existingId}' and '${column.id}'`);\n\t\t\tseen.set(column.header, column.id);\n\t\t}\n\t}\n\tgetTransformConfig(versionId, itemId, slotId) {\n\t\treturn this.resolveProfileForVersion(versionId)?.slotOverrides?.[slotOverrideKey(itemId, slotId)] ?? DEFAULT_TRANSFORM;\n\t}\n\tgetContextTransformConfig(versionId, contextKey) {\n\t\treturn this.resolveProfileForVersion(versionId)?.contextOverrides?.[contextKey] ?? DEFAULT_TRANSFORM;\n\t}\n\texportResponse(response) {\n\t\tif (!this.versions.get(response.versionId)) return null;\n\t\tconst columns = this.computeColumns(response.versionId, [response]);\n\t\tconst row = {};\n\t\tfor (const col of columns) {\n\t\t\tif (col.source === ExportColumnSource.meta && col.metaField) {\n\t\t\t\trow[col.header] = formatMetaValue(response, col.metaField);\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (col.source === ExportColumnSource.context && col.contextKey) {\n\t\t\t\tconst value = response.context?.[col.contextKey];\n\t\t\t\tconst transformConfig = this.getContextTransformConfig(response.versionId, col.contextKey);\n\t\t\t\tconst valueType = value?.type ?? ValueType.string;\n\t\t\t\trow[col.header] = exportSingleResponseSlot({\n\t\t\t\t\tvalue,\n\t\t\t\t\tvalueType,\n\t\t\t\t\ttransformConfig\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (col.source === ExportColumnSource.response && col.itemId != null && col.slotId != null && col.valueType != null) {\n\t\t\t\tconst value = response.responses.get(col.itemId)?.response?.get(col.slotId);\n\t\t\t\tconst transformConfig = this.getTransformConfig(response.versionId, col.itemId, col.slotId);\n\t\t\t\trow[col.header] = exportSingleResponseSlot({\n\t\t\t\t\tvalue,\n\t\t\t\t\tvalueType: col.valueType,\n\t\t\t\t\ttransformConfig\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn row;\n\t}\n\t/**\n\t* Compute columns for a batch of responses (union of response columns across versions).\n\t*/\n\tcomputeColumnsForBatch(responses) {\n\t\tif (responses.length === 0) return [];\n\t\tconst versionIds = [...new Set(responses.map((r) => r.versionId))];\n\t\tconst primaryVersionId = versionIds[0];\n\t\treturn this.computeColumns(primaryVersionId, responses, versionIds);\n\t}\n\texportResponsesToCsv(responses, options) {\n\t\tif (responses.length === 0) return \"\";\n\t\treturn serializeToCsv(this.computeColumnsForBatch(responses), responses.map((r) => this.exportResponse(r)).filter((r) => r !== null), options);\n\t}\n};\n//#endregion\n//#region src/response-exporter/codebook.ts\n/**\n* Generate a structured codebook from a survey definition.\n*/\nfunction generateCodebook(survey, options) {\n\tconst locales = options?.locales ?? survey.locales;\n\tconst keyIndex = survey.keyIndex;\n\tconst keyByItemId = new Map(keyIndex.map((r) => [r.itemId, r]));\n\tconst slotDefsByItemId = new Map(survey.getResponseSlotDefinitions().map(({ itemId, slots }) => [itemId, slots.map((slot) => ({\n\t\tslotId: slot.slotId,\n\t\tkey: slot.key,\n\t\tkeyPath: [...slot.keyPath],\n\t\tvalueType: slot.valueType\n\t}))]));\n\tconst items = [];\n\tfor (const item of survey.surveyItems.values()) {\n\t\tconst keyInfo = keyByItemId.get(item.id);\n\t\tconst key = keyInfo?.key ?? item.id;\n\t\tconst keyPath = keyInfo?.keyPath ?? [];\n\t\tconst slotList = slotDefsByItemId.get(item.id) ?? [];\n\t\tslotList.sort((a, b) => a.slotId.localeCompare(b.slotId));\n\t\tlet contentByLocale;\n\t\tif (locales.length > 0) {\n\t\t\tcontentByLocale = {};\n\t\t\tconst itemTranslations = survey.getItemTranslations(item.id);\n\t\t\tif (itemTranslations) for (const locale of locales) {\n\t\t\t\tconst all = itemTranslations.getAllForLocale(locale);\n\t\t\t\tif (all) {\n\t\t\t\t\tconst flat = {};\n\t\t\t\t\tfor (const [contentKey, content] of Object.entries(all)) flat[contentKey] = getContentPlainText(content);\n\t\t\t\t\tcontentByLocale[locale] = flat;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\titems.push({\n\t\t\tid: item.id,\n\t\t\tkey,\n\t\t\tkeyPath,\n\t\t\ttype: item.type,\n\t\t\tinteractive: item.isInteractive(),\n\t\t\tslots: slotList,\n\t\t\tcontentByLocale\n\t\t});\n\t}\n\treturn {\n\t\tsurveyKey: survey.surveyKey,\n\t\titems: items.sort((a, b) => a.key.localeCompare(b.key))\n\t};\n}\n//#endregion\nexport { AndExpressionEditor, CURRENT_SURVEY_SCHEMA, ConstBooleanEditor, ConstDateArrayEditor, ConstDateEditor, ConstExpression, ConstNumberArrayEditor, ConstNumberEditor, ConstStringArrayEditor, ConstStringEditor, ContentType, ContextVariableExpression, ContextVariableType, CtxCustomExpressionEditor, CtxCustomValueEditor, CtxLocaleEditor, CtxPFlagDateEditor, CtxPFlagIsDefinedEditor, CtxPFlagNumEditor, CtxPFlagStringEditor, DEFAULT_TRANSFORM, DurationUnits, EXPORT_COLUMN_SLOT_SEPARATOR, EqExpressionEditor, Expression, ExpressionEditor, ExpressionEvaluator, ExpressionType, FunctionExpression, FunctionExpressionNames, GroupItemCore, GtExpressionEditor, GteExpressionEditor, InRangeExpressionEditor, JsonPatchError, LtExpressionEditor, LteExpressionEditor, META_COLUMN_ORDER, MaxExpressionEditor, MinExpressionEditor, NumberPrecision, OrExpressionEditor, PageBreakItemCore, ReferenceUsageType, ReservedSurveyItemTypes, ResponseItem, ResponseVariableEditor, ResponseVariableExpression, SURVEY_RESPONSE_SCHEMA_VERSION, SlotTransformMode, StrEqExpressionEditor, StrListContainsExpressionEditor, SumExpressionEditor, Survey, SurveyEngineCore, SurveyEventTypes, SurveyItemCore, SurveyItemKey, SurveyItemPrefillApplyMode, SurveyItemPrefillTargetType, SurveyItemResponse, SurveyItemTranslations, SurveyResponse, SurveyResponseExporter, SurveyTranslations, TemplateDefTypes, ValueReference, ValueReferenceMethod, ValueType, and, applyJsonPatch, assertResponseValue, buildItemExpression, builtInItemCoreRegistry, const_boolean, const_date, const_date_array, const_number, const_number_array, const_string, const_string_array, createFullRegistry, createItemCore, createItemTypeDefinitionRegistry, createRichTextContent, createSeededRandom, ctx_custom_expression, ctx_custom_value, ctx_locale, ctx_pflag_date, ctx_pflag_is_defined, ctx_pflag_num, ctx_pflag_string, decodeJsonPointerSegment, deserializeSurveyItemPrefill, deserializeTemplateValue, deserializeTemplateValues, encodeJsonPointerSegment, eq, escapeCsvCell, exportSingleResponseSlot, flattenTree, generateCodebook, generateCodingKey, generateId, getAssetUsagesFromContent, getContentPlainText, getItemExpressionDefinition, getPlainTextFromRichTextContent, getValueAtJsonPointer, gt, gte, hasRenderableRichTextBlock, hasRenderableRichTextContent, in_range, initValueForType, isBuiltInItemType, isContentEmpty, isLegacyItemGroupComponent, isLegacySurveyGroupItem, isResponseValue, lt, lte, max, min, or, parseJsonPointer, prefillTargetsEqual, response_boolean, response_date, response_date_array, response_number, response_number_array, response_string, response_string_array, serializeSurveyItemPrefill, serializeTemplateValue, serializeTemplateValues, serializeToCsv, shuffleArray, shuffleIndices, str_eq, str_list_contains, structuredCloneMethod, sum, toItemTypeDefinitionRegistry, validateLocale };\n\n//# sourceMappingURL=index.mjs.map","import {\n ContentType,\n SurveyItemTranslations,\n generateCodingKey,\n generateId,\n getContentPlainText,\n type Content,\n} from \"@case-framework/survey-core\";\n\nexport type FormFieldType =\n | \"input\"\n | \"textarea\"\n | \"number\"\n | \"datepicker\"\n | \"switch\"\n | \"select\"\n | \"slider\";\n\nexport const FORM_DATEPICKER_FIELD_MODES = [\"year\", \"year-month\", \"year-month-day\"] as const;\n\nexport type FormDatepickerFieldMode = (typeof FORM_DATEPICKER_FIELD_MODES)[number];\n\nexport interface FormFieldRendererSlotDefinition {\n id: \"field\" | \"label\" | \"description\" | \"error\";\n entryLabel: string;\n description: string;\n component: \"Field\" | \"FieldLabel\" | \"FieldDescription\" | \"FieldError\";\n}\n\nexport const FORM_FIELD_RENDERER_SLOTS: FormFieldRendererSlotDefinition[] = [\n {\n id: \"field\",\n entryLabel: \"Individual field\",\n description: \"One control plus label/help/error\",\n component: \"Field\",\n },\n {\n id: \"label\",\n entryLabel: \"Field label\",\n description: \"Label for one control\",\n component: \"FieldLabel\",\n },\n {\n id: \"description\",\n entryLabel: \"Field help text\",\n description: \"Description for one control\",\n component: \"FieldDescription\",\n },\n {\n id: \"error\",\n entryLabel: \"Field error\",\n description: \"Validation/error text\",\n component: \"FieldError\",\n },\n];\n\nexport interface FormFieldConfigSuggestion {\n key: string;\n label: string;\n description: string;\n}\n\nexport type FormFieldValidationType =\n | \"required\"\n | \"minLength\"\n | \"maxLength\"\n | \"pattern\"\n | \"email\"\n | \"url\"\n | \"integer\"\n | \"min\"\n | \"max\"\n | \"minDate\"\n | \"maxDate\"\n | \"mustBeTrue\";\n\nexport interface FormFieldValidationSuggestion {\n type: FormFieldValidationType;\n label: string;\n description: string;\n valueKind: \"none\" | \"number\" | \"text\" | \"date\";\n defaultValue?: number | string;\n}\n\nexport interface FormFieldValidationConfig {\n id: string;\n type: FormFieldValidationType;\n value?: number | string;\n message?: string;\n}\n\nexport type FormFieldEffectiveValidationType = \"required\" | FormFieldValidationType;\n\nexport interface FormFieldEffectiveValidationConfig {\n id: string;\n type: FormFieldEffectiveValidationType;\n value?: number | string;\n message?: string;\n source: \"required\" | \"validation\";\n}\n\nexport interface FormFieldSelectOptionConfig {\n id: string;\n value: string;\n label?: string;\n}\n\nexport interface FormInputFieldControlConfig {\n type: \"input\";\n placeholder?: string;\n inputMode?: \"text\" | \"email\" | \"tel\" | \"url\" | \"password\";\n autocomplete?: string;\n}\n\nexport interface FormTextareaFieldControlConfig {\n type: \"textarea\";\n placeholder?: string;\n rows?: number;\n}\n\nexport interface FormNumberFieldControlConfig {\n type: \"number\";\n placeholder?: string;\n step?: number;\n unit?: string;\n defaultValue?: number;\n}\n\nexport interface FormDatepickerFieldControlConfig {\n type: \"datepicker\";\n placeholder?: string;\n mode: FormDatepickerFieldMode;\n}\n\nexport interface FormSwitchFieldControlConfig {\n type: \"switch\";\n checkedLabel?: string;\n uncheckedLabel?: string;\n defaultChecked?: boolean;\n}\n\nexport interface FormSelectFieldControlConfig {\n type: \"select\";\n placeholder?: string;\n allowClear?: boolean;\n options: FormFieldSelectOptionConfig[];\n}\n\nexport interface FormSliderFieldControlConfig {\n type: \"slider\";\n min?: number;\n max?: number;\n step?: number;\n defaultValue?: number;\n showValue?: boolean;\n}\n\nexport type FormFieldControlConfig =\n | FormInputFieldControlConfig\n | FormTextareaFieldControlConfig\n | FormNumberFieldControlConfig\n | FormDatepickerFieldControlConfig\n | FormSwitchFieldControlConfig\n | FormSelectFieldControlConfig\n | FormSliderFieldControlConfig;\n\nexport interface FormFieldConfig {\n id: string;\n key: string;\n type: FormFieldType;\n label?: string;\n description?: string;\n errorMessage?: string;\n required?: boolean;\n controller: FormFieldControlConfig;\n validations: FormFieldValidationConfig[];\n hasValidations?: boolean;\n isInvalid?: boolean;\n}\n\nexport function getFormFieldEffectiveValidations(\n field: Pick<FormFieldConfig, \"id\" | \"required\" | \"validations\">,\n): FormFieldEffectiveValidationConfig[] {\n const effectiveValidations = field.validations.map((validation) => ({\n ...validation,\n source: \"validation\" as const,\n }));\n\n if (\n field.required !== true ||\n effectiveValidations.some((validation) => validation.type === \"required\")\n ) {\n return effectiveValidations;\n }\n\n return [\n {\n id: `${field.id}-required`,\n type: \"required\",\n source: \"required\",\n },\n ...effectiveValidations,\n ];\n}\n\n/**\n * Column counts keyed by field group card width (container), not the viewport.\n * Breakpoints match `@container (width >= …)` on `form-field-group`: 20rem / 24rem / 28rem / 36rem.\n */\nexport interface FormFieldGroupLayoutConfig {\n /** Below @xs (under 20rem) */\n base: number;\n /** @xs — width >= 20rem */\n xs: number;\n /** @sm — width >= 24rem */\n sm: number;\n /** @md — width >= 28rem */\n md: number;\n /** @xl — width >= 36rem */\n xl: number;\n}\n\nexport interface FormFieldGroupConfig {\n id: string;\n title?: string;\n description?: string;\n hasDisplayCondition?: boolean;\n layout: FormFieldGroupLayoutConfig;\n fields: FormFieldConfig[];\n}\n\nexport interface FormItemConfig {\n id: string;\n fieldGroups: FormFieldGroupConfig[];\n}\n\nexport function createFormItemConfig(itemId: string): FormItemConfig {\n return {\n id: itemId,\n fieldGroups: [],\n };\n}\n\nfunction createPlainTextContent(value?: string): Content | undefined {\n const normalizedValue = normalizeOptionalString(value);\n\n return normalizedValue\n ? {\n type: ContentType.plain,\n content: normalizedValue,\n }\n : undefined;\n}\n\nfunction getTranslatedPlainText(\n itemTranslations: SurveyItemTranslations | undefined,\n locale: string,\n contentKey: string,\n fallbackLocale?: string,\n): string | undefined {\n const content = itemTranslations?.getContent(locale, contentKey, fallbackLocale);\n const plainText = getContentPlainText(content).trim();\n\n return plainText || undefined;\n}\n\nconst FORM_FIELD_TRANSLATION_PREFIX = \"fields\";\nconst FORM_FIELD_GROUP_TRANSLATION_PREFIX = \"fieldGroups\";\n\nfunction withFormTranslationNamespace(prefix: string, translationNamespace?: string): string {\n return translationNamespace?.trim() ? `${translationNamespace}.${prefix}` : prefix;\n}\n\nexport function getFormFieldGroupTranslationPrefix(\n groupId: string,\n translationNamespace?: string,\n): string {\n return withFormTranslationNamespace(\n `${FORM_FIELD_GROUP_TRANSLATION_PREFIX}.${groupId}`,\n translationNamespace,\n );\n}\n\nexport function getFormFieldGroupTitleContentKey(\n groupId: string,\n translationNamespace?: string,\n): string {\n return `${getFormFieldGroupTranslationPrefix(groupId, translationNamespace)}.title`;\n}\n\nexport function getFormFieldGroupDescriptionContentKey(\n groupId: string,\n translationNamespace?: string,\n): string {\n return `${getFormFieldGroupTranslationPrefix(groupId, translationNamespace)}.description`;\n}\n\nexport function getFormFieldTranslationPrefix(\n fieldId: string,\n translationNamespace?: string,\n): string {\n return withFormTranslationNamespace(\n `${FORM_FIELD_TRANSLATION_PREFIX}.${fieldId}`,\n translationNamespace,\n );\n}\n\nexport function getFormFieldLabelContentKey(\n fieldId: string,\n translationNamespace?: string,\n): string {\n return `${getFormFieldTranslationPrefix(fieldId, translationNamespace)}.label`;\n}\n\nexport function getFormFieldDescriptionContentKey(\n fieldId: string,\n translationNamespace?: string,\n): string {\n return `${getFormFieldTranslationPrefix(fieldId, translationNamespace)}.description`;\n}\n\nexport function getFormFieldErrorMessageContentKey(\n fieldId: string,\n translationNamespace?: string,\n): string {\n return `${getFormFieldTranslationPrefix(fieldId, translationNamespace)}.error`;\n}\n\nexport function getFormFieldPlaceholderContentKey(\n fieldId: string,\n translationNamespace?: string,\n): string {\n return `${getFormFieldTranslationPrefix(fieldId, translationNamespace)}.placeholder`;\n}\n\nexport function getFormFieldUnitContentKey(fieldId: string, translationNamespace?: string): string {\n return `${getFormFieldTranslationPrefix(fieldId, translationNamespace)}.unit`;\n}\n\nexport function getFormFieldCheckedLabelContentKey(\n fieldId: string,\n translationNamespace?: string,\n): string {\n return `${getFormFieldTranslationPrefix(fieldId, translationNamespace)}.checkedLabel`;\n}\n\nexport function getFormFieldUncheckedLabelContentKey(\n fieldId: string,\n translationNamespace?: string,\n): string {\n return `${getFormFieldTranslationPrefix(fieldId, translationNamespace)}.uncheckedLabel`;\n}\n\nexport function getFormFieldOptionLabelContentKey(\n fieldId: string,\n optionId: string,\n translationNamespace?: string,\n): string {\n return `${getFormFieldTranslationPrefix(fieldId, translationNamespace)}.options.${optionId}.label`;\n}\n\nexport function getFormFieldValidationMessageContentKey(\n fieldId: string,\n validationId: string,\n translationNamespace?: string,\n): string {\n return `${getFormFieldTranslationPrefix(fieldId, translationNamespace)}.validations.${validationId}.message`;\n}\n\nexport function getFormFieldTranslationKeys(\n field: Pick<FormFieldConfig, \"id\" | \"type\" | \"controller\" | \"validations\">,\n translationNamespace?: string,\n): string[] {\n const keys = [\n getFormFieldLabelContentKey(field.id, translationNamespace),\n getFormFieldDescriptionContentKey(field.id, translationNamespace),\n getFormFieldErrorMessageContentKey(field.id, translationNamespace),\n ...field.validations.map((validation) =>\n getFormFieldValidationMessageContentKey(field.id, validation.id, translationNamespace),\n ),\n ];\n\n switch (field.type) {\n case \"textarea\":\n case \"datepicker\":\n case \"input\":\n keys.push(getFormFieldPlaceholderContentKey(field.id, translationNamespace));\n break;\n case \"number\":\n keys.push(getFormFieldPlaceholderContentKey(field.id, translationNamespace));\n keys.push(getFormFieldUnitContentKey(field.id, translationNamespace));\n break;\n case \"switch\":\n keys.push(getFormFieldCheckedLabelContentKey(field.id, translationNamespace));\n keys.push(getFormFieldUncheckedLabelContentKey(field.id, translationNamespace));\n break;\n case \"select\": {\n keys.push(getFormFieldPlaceholderContentKey(field.id, translationNamespace));\n const controller = field.controller as FormSelectFieldControlConfig;\n keys.push(\n ...controller.options.map((option) =>\n getFormFieldOptionLabelContentKey(field.id, option.id, translationNamespace),\n ),\n );\n break;\n }\n case \"slider\":\n break;\n }\n\n return keys;\n}\n\nexport function getFormFieldGroupTranslationKeys(\n group: Pick<FormFieldGroupConfig, \"id\">,\n translationNamespace?: string,\n): string[] {\n return [\n getFormFieldGroupTitleContentKey(group.id, translationNamespace),\n getFormFieldGroupDescriptionContentKey(group.id, translationNamespace),\n ];\n}\n\nexport function writeFormFieldGroupTranslations(\n itemTranslations: SurveyItemTranslations,\n locale: string,\n group: Pick<FormFieldGroupConfig, \"id\" | \"title\" | \"description\">,\n translationNamespace?: string,\n): void {\n itemTranslations.setContent(\n locale,\n getFormFieldGroupTitleContentKey(group.id, translationNamespace),\n createPlainTextContent(group.title),\n );\n itemTranslations.setContent(\n locale,\n getFormFieldGroupDescriptionContentKey(group.id, translationNamespace),\n createPlainTextContent(group.description),\n );\n}\n\nexport function writeFormFieldTranslations(\n itemTranslations: SurveyItemTranslations,\n locale: string,\n field: Pick<\n FormFieldConfig,\n \"id\" | \"type\" | \"label\" | \"description\" | \"errorMessage\" | \"controller\" | \"validations\"\n >,\n translationNamespace?: string,\n): void {\n itemTranslations.setContent(\n locale,\n getFormFieldLabelContentKey(field.id, translationNamespace),\n createPlainTextContent(field.label),\n );\n itemTranslations.setContent(\n locale,\n getFormFieldDescriptionContentKey(field.id, translationNamespace),\n createPlainTextContent(field.description),\n );\n itemTranslations.setContent(\n locale,\n getFormFieldErrorMessageContentKey(field.id, translationNamespace),\n createPlainTextContent(field.errorMessage),\n );\n\n for (const validation of field.validations) {\n itemTranslations.setContent(\n locale,\n getFormFieldValidationMessageContentKey(field.id, validation.id, translationNamespace),\n createPlainTextContent(validation.message),\n );\n }\n\n switch (field.type) {\n case \"textarea\":\n case \"datepicker\":\n case \"input\": {\n const controller = field.controller as\n | FormTextareaFieldControlConfig\n | FormDatepickerFieldControlConfig\n | FormInputFieldControlConfig;\n itemTranslations.setContent(\n locale,\n getFormFieldPlaceholderContentKey(field.id, translationNamespace),\n createPlainTextContent(controller.placeholder),\n );\n break;\n }\n case \"number\": {\n const controller = field.controller as FormNumberFieldControlConfig;\n itemTranslations.setContent(\n locale,\n getFormFieldPlaceholderContentKey(field.id, translationNamespace),\n createPlainTextContent(controller.placeholder),\n );\n itemTranslations.setContent(\n locale,\n getFormFieldUnitContentKey(field.id, translationNamespace),\n createPlainTextContent(controller.unit),\n );\n break;\n }\n case \"switch\": {\n const controller = field.controller as FormSwitchFieldControlConfig;\n itemTranslations.setContent(\n locale,\n getFormFieldCheckedLabelContentKey(field.id, translationNamespace),\n createPlainTextContent(controller.checkedLabel),\n );\n itemTranslations.setContent(\n locale,\n getFormFieldUncheckedLabelContentKey(field.id, translationNamespace),\n createPlainTextContent(controller.uncheckedLabel),\n );\n break;\n }\n case \"select\": {\n const controller = field.controller as FormSelectFieldControlConfig;\n itemTranslations.setContent(\n locale,\n getFormFieldPlaceholderContentKey(field.id, translationNamespace),\n createPlainTextContent(controller.placeholder),\n );\n for (const option of controller.options) {\n itemTranslations.setContent(\n locale,\n getFormFieldOptionLabelContentKey(field.id, option.id, translationNamespace),\n createPlainTextContent(option.label),\n );\n }\n break;\n }\n case \"slider\":\n break;\n }\n}\n\nfunction withTranslatedFieldContent(\n field: FormFieldConfig,\n itemTranslations: SurveyItemTranslations | undefined,\n locale: string,\n fallbackLocale?: string,\n translationNamespace?: string,\n): FormFieldConfig {\n const translatedField: FormFieldConfig = {\n ...field,\n label:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldLabelContentKey(field.id, translationNamespace),\n fallbackLocale,\n ) ?? field.label,\n description:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldDescriptionContentKey(field.id, translationNamespace),\n fallbackLocale,\n ) ?? field.description,\n errorMessage:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldErrorMessageContentKey(field.id, translationNamespace),\n fallbackLocale,\n ) ?? field.errorMessage,\n validations: field.validations.map((validation) => ({\n ...validation,\n message:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldValidationMessageContentKey(field.id, validation.id, translationNamespace),\n fallbackLocale,\n ) ?? validation.message,\n })),\n };\n\n switch (field.type) {\n case \"textarea\": {\n const controller = field.controller as FormTextareaFieldControlConfig;\n\n translatedField.controller = {\n ...controller,\n placeholder:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldPlaceholderContentKey(field.id, translationNamespace),\n fallbackLocale,\n ) ?? controller.placeholder,\n };\n break;\n }\n case \"number\": {\n const controller = field.controller as FormNumberFieldControlConfig;\n\n translatedField.controller = {\n ...controller,\n placeholder:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldPlaceholderContentKey(field.id, translationNamespace),\n fallbackLocale,\n ) ?? controller.placeholder,\n unit:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldUnitContentKey(field.id, translationNamespace),\n fallbackLocale,\n ) ?? controller.unit,\n };\n break;\n }\n case \"datepicker\": {\n const controller = field.controller as FormDatepickerFieldControlConfig;\n\n translatedField.controller = {\n ...controller,\n placeholder:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldPlaceholderContentKey(field.id, translationNamespace),\n fallbackLocale,\n ) ?? controller.placeholder,\n };\n break;\n }\n case \"switch\": {\n const controller = field.controller as FormSwitchFieldControlConfig;\n\n translatedField.controller = {\n ...controller,\n checkedLabel:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldCheckedLabelContentKey(field.id, translationNamespace),\n fallbackLocale,\n ) ?? controller.checkedLabel,\n uncheckedLabel:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldUncheckedLabelContentKey(field.id, translationNamespace),\n fallbackLocale,\n ) ?? controller.uncheckedLabel,\n };\n break;\n }\n case \"select\": {\n const controller = field.controller as FormSelectFieldControlConfig;\n\n translatedField.controller = {\n ...controller,\n placeholder:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldPlaceholderContentKey(field.id, translationNamespace),\n fallbackLocale,\n ) ?? controller.placeholder,\n options: controller.options.map((option) => ({\n ...option,\n label:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldOptionLabelContentKey(field.id, option.id, translationNamespace),\n fallbackLocale,\n ) ?? option.label,\n })),\n };\n break;\n }\n case \"slider\":\n break;\n case \"input\":\n default: {\n const controller = field.controller as FormInputFieldControlConfig;\n\n translatedField.controller = {\n ...controller,\n placeholder:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldPlaceholderContentKey(field.id, translationNamespace),\n fallbackLocale,\n ) ?? controller.placeholder,\n };\n break;\n }\n }\n\n return translatedField;\n}\n\nfunction withTranslatedFieldGroupContent(\n group: FormFieldGroupConfig,\n itemTranslations: SurveyItemTranslations | undefined,\n locale: string,\n fallbackLocale?: string,\n translationNamespace?: string,\n): FormFieldGroupConfig {\n return {\n ...group,\n title:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldGroupTitleContentKey(group.id, translationNamespace),\n fallbackLocale,\n ) ?? group.title,\n description:\n getTranslatedPlainText(\n itemTranslations,\n locale,\n getFormFieldGroupDescriptionContentKey(group.id, translationNamespace),\n fallbackLocale,\n ) ?? group.description,\n fields: group.fields.map((field) =>\n withTranslatedFieldContent(\n field,\n itemTranslations,\n locale,\n fallbackLocale,\n translationNamespace,\n ),\n ),\n };\n}\n\nexport function withFormItemTranslatedContent(\n config: FormItemConfig,\n itemTranslations: SurveyItemTranslations | undefined,\n locale: string,\n options: {\n fallbackLocale?: string;\n translationNamespace?: string;\n } = {},\n): FormItemConfig {\n const { fallbackLocale, translationNamespace } = options;\n\n return {\n ...config,\n fieldGroups: config.fieldGroups.map((group) =>\n withTranslatedFieldGroupContent(\n group,\n itemTranslations,\n locale,\n fallbackLocale,\n translationNamespace,\n ),\n ),\n };\n}\n\nfunction withoutTranslatedFieldContent(field: FormFieldConfig): FormFieldConfig {\n const serializedField: FormFieldConfig = {\n ...field,\n label: undefined,\n description: undefined,\n errorMessage: undefined,\n required: undefined,\n hasValidations: undefined,\n isInvalid: undefined,\n validations: field.validations.map((validation) => ({\n ...validation,\n message: undefined,\n })),\n };\n\n switch (field.type) {\n case \"textarea\": {\n const controller = field.controller as FormTextareaFieldControlConfig;\n serializedField.controller = {\n ...controller,\n placeholder: undefined,\n };\n break;\n }\n case \"number\": {\n const controller = field.controller as FormNumberFieldControlConfig;\n serializedField.controller = {\n ...controller,\n placeholder: undefined,\n unit: undefined,\n };\n break;\n }\n case \"datepicker\": {\n const controller = field.controller as FormDatepickerFieldControlConfig;\n serializedField.controller = {\n ...controller,\n placeholder: undefined,\n };\n break;\n }\n case \"switch\": {\n const controller = field.controller as FormSwitchFieldControlConfig;\n serializedField.controller = {\n ...controller,\n checkedLabel: undefined,\n uncheckedLabel: undefined,\n };\n break;\n }\n case \"select\": {\n const controller = field.controller as FormSelectFieldControlConfig;\n serializedField.controller = {\n ...controller,\n placeholder: undefined,\n options: controller.options.map((option) => ({\n ...option,\n label: undefined,\n })),\n };\n break;\n }\n case \"slider\":\n break;\n case \"input\":\n default: {\n const controller = field.controller as FormInputFieldControlConfig;\n serializedField.controller = {\n ...controller,\n placeholder: undefined,\n };\n break;\n }\n }\n\n return serializedField;\n}\n\nfunction withoutTranslatedFieldGroupContent(group: FormFieldGroupConfig): FormFieldGroupConfig {\n return {\n ...group,\n title: undefined,\n description: undefined,\n fields: group.fields.map((field) => withoutTranslatedFieldContent(field)),\n };\n}\n\nexport function withoutFormItemTranslatedContent(config: FormItemConfig): FormItemConfig {\n return {\n ...config,\n fieldGroups: config.fieldGroups.map((group) => withoutTranslatedFieldGroupContent(group)),\n };\n}\n\nfunction normalizeColumnCount(value: unknown): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return 1;\n }\n\n return Math.min(4, Math.max(1, Math.round(value)));\n}\n\nfunction normalizeFormFieldGroupLayoutConfig(rawLayout: unknown): FormFieldGroupLayoutConfig {\n const layout =\n rawLayout && typeof rawLayout === \"object\"\n ? (rawLayout as Partial<FormFieldGroupLayoutConfig> & { xs?: unknown; lg?: unknown })\n : {};\n\n const hasBaseKey = Object.prototype.hasOwnProperty.call(layout, \"base\");\n const hasXsKey = Object.prototype.hasOwnProperty.call(layout, \"xs\");\n\n // Legacy configs: three tiers as sm → md → lg (no base / xs).\n if (\n !hasBaseKey &&\n !hasXsKey &&\n (layout.sm !== undefined || layout.md !== undefined || layout.lg !== undefined)\n ) {\n const narrow = normalizeColumnCount(layout.sm);\n\n return {\n base: narrow,\n xs: narrow,\n sm: normalizeColumnCount(layout.md ?? layout.sm),\n md: normalizeColumnCount(layout.lg ?? layout.md ?? layout.sm),\n xl: normalizeColumnCount(layout.lg ?? layout.md ?? layout.sm),\n };\n }\n\n const xs = normalizeColumnCount(layout.xs ?? layout.sm ?? 1);\n const sm = normalizeColumnCount(layout.sm ?? 1);\n const md = normalizeColumnCount(layout.md ?? 1);\n const xl = normalizeColumnCount(layout.xl ?? layout.lg ?? 1);\n\n return {\n base: normalizeColumnCount(hasBaseKey ? layout.base : xs),\n xs,\n sm,\n md,\n xl,\n };\n}\n\n/** CSS custom properties for `.form-field-group-layout-scope` + `.form-field-group-grid`. */\nexport function formFieldGroupLayoutCssVars(\n layout: FormFieldGroupLayoutConfig,\n): Record<string, string> {\n return {\n \"--form-group-cols-base\": String(layout.base),\n \"--form-group-cols-xs\": String(layout.xs),\n \"--form-group-cols-sm\": String(layout.sm),\n \"--form-group-cols-md\": String(layout.md),\n \"--form-group-cols-xl\": String(layout.xl),\n };\n}\n\nfunction normalizeOptionalString(value: unknown): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const trimmedValue = value.trim();\n\n return trimmedValue || undefined;\n}\n\nfunction normalizeOptionalNumber(value: unknown): number | undefined {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n return undefined;\n }\n\n return value;\n}\n\nfunction normalizeOptionalBoolean(value: unknown): boolean | undefined {\n return value === true ? true : value === false ? false : undefined;\n}\n\nfunction normalizeFormFieldKey(id: string, key?: string): string {\n return (\n key?.trim() ||\n id\n .replace(/[^a-zA-Z0-9]/g, \"\")\n .slice(0, 4)\n .toUpperCase() ||\n generateCodingKey(4)\n );\n}\n\nfunction createDefaultFormFieldControlConfig(type: FormFieldType): FormFieldControlConfig {\n switch (type) {\n case \"textarea\":\n return {\n type,\n rows: 3,\n };\n case \"number\":\n return {\n type,\n step: 1,\n };\n case \"datepicker\":\n return {\n type,\n mode: \"year-month-day\",\n };\n case \"switch\":\n return {\n type,\n defaultChecked: false,\n };\n case \"select\":\n return {\n type,\n options: [],\n };\n case \"slider\":\n return {\n type,\n min: 0,\n max: 100,\n step: 1,\n defaultValue: 50,\n showValue: true,\n };\n case \"input\":\n default:\n return {\n type: \"input\",\n inputMode: \"text\",\n };\n }\n}\n\nexport function getFormFieldControllerComponentName(type: FormFieldType): string {\n switch (type) {\n case \"textarea\":\n return \"Textarea\";\n case \"number\":\n return \"Input[type=number]\";\n case \"datepicker\":\n return \"Date picker\";\n case \"switch\":\n return \"Switch\";\n case \"select\":\n return \"Select\";\n case \"slider\":\n return \"Slider\";\n case \"input\":\n default:\n return \"Input\";\n }\n}\n\nexport function getFormFieldConfigSuggestions(type: FormFieldType): FormFieldConfigSuggestion[] {\n switch (type) {\n case \"textarea\":\n return [\n {\n key: \"placeholder\",\n label: \"Placeholder\",\n description: \"Prompt the expected long-form response.\",\n },\n { key: \"rows\", label: \"Rows\", description: \"Set the default textarea height.\" },\n ];\n case \"number\":\n return [\n {\n key: \"placeholder\",\n label: \"Placeholder\",\n description: \"Hint at the expected numeric value.\",\n },\n { key: \"step\", label: \"Step\", description: \"Control the increment size for the input.\" },\n { key: \"unit\", label: \"Unit\", description: \"Show a suffix such as years, kg, or cm.\" },\n {\n key: \"defaultValue\",\n label: \"Default value\",\n description: \"Pre-fill an initial number when useful.\",\n },\n ];\n case \"datepicker\":\n return [\n {\n key: \"placeholder\",\n label: \"Placeholder\",\n description: \"Explain what date respondents should pick.\",\n },\n {\n key: \"mode\",\n label: \"Precision\",\n description: \"Choose whether respondents pick a year, month, or full date.\",\n },\n ];\n case \"switch\":\n return [\n {\n key: \"checkedLabel\",\n label: \"Checked label\",\n description: \"Explain the enabled or yes state.\",\n },\n {\n key: \"uncheckedLabel\",\n label: \"Unchecked label\",\n description: \"Explain the disabled or no state.\",\n },\n {\n key: \"defaultChecked\",\n label: \"Default state\",\n description: \"Start with a sensible on/off default.\",\n },\n ];\n case \"select\":\n return [\n { key: \"placeholder\", label: \"Placeholder\", description: \"Prompt users to make a choice.\" },\n {\n key: \"options\",\n label: \"Options\",\n description: \"Define the value and visible label for each option.\",\n },\n {\n key: \"allowClear\",\n label: \"Allow clear\",\n description: \"Let users clear an optional selection.\",\n },\n ];\n case \"slider\":\n return [\n { key: \"min\", label: \"Minimum\", description: \"Set the lower bound of the scale.\" },\n { key: \"max\", label: \"Maximum\", description: \"Set the upper bound of the scale.\" },\n { key: \"step\", label: \"Step\", description: \"Control how granular the slider values are.\" },\n {\n key: \"defaultValue\",\n label: \"Default value\",\n description: \"Pick the starting slider position.\",\n },\n {\n key: \"showValue\",\n label: \"Show value\",\n description: \"Display the current numeric value beside the control.\",\n },\n ];\n case \"input\":\n default:\n return [\n {\n key: \"placeholder\",\n label: \"Placeholder\",\n description: \"Guide what belongs in the input.\",\n },\n {\n key: \"inputMode\",\n label: \"Input mode\",\n description: \"Match the control to text, email, tel, URL, or password.\",\n },\n {\n key: \"autocomplete\",\n label: \"Autocomplete\",\n description: \"Hint browser autofill for known fields.\",\n },\n ];\n }\n}\n\nexport function getFormFieldValidationSuggestions(\n type: FormFieldType,\n): FormFieldValidationSuggestion[] {\n switch (type) {\n case \"textarea\":\n return [\n {\n type: \"required\",\n label: \"Required\",\n description: \"Respondents must provide a value.\",\n valueKind: \"none\",\n },\n {\n type: \"minLength\",\n label: \"Minimum length\",\n description: \"Require a longer free-text answer.\",\n valueKind: \"number\",\n defaultValue: 10,\n },\n {\n type: \"maxLength\",\n label: \"Maximum length\",\n description: \"Cap the response length.\",\n valueKind: \"number\",\n defaultValue: 500,\n },\n ];\n case \"number\":\n return [\n {\n type: \"required\",\n label: \"Required\",\n description: \"Respondents must provide a value.\",\n valueKind: \"none\",\n },\n {\n type: \"min\",\n label: \"Minimum value\",\n description: \"Reject values below the threshold.\",\n valueKind: \"number\",\n defaultValue: 0,\n },\n {\n type: \"max\",\n label: \"Maximum value\",\n description: \"Reject values above the threshold.\",\n valueKind: \"number\",\n defaultValue: 100,\n },\n {\n type: \"integer\",\n label: \"Integer only\",\n description: \"Allow whole numbers only.\",\n valueKind: \"none\",\n },\n ];\n case \"datepicker\":\n return [\n {\n type: \"required\",\n label: \"Required\",\n description: \"Respondents must provide a value.\",\n valueKind: \"none\",\n },\n {\n type: \"minDate\",\n label: \"Earliest date\",\n description: \"Reject dates before the minimum.\",\n valueKind: \"date\",\n },\n {\n type: \"maxDate\",\n label: \"Latest date\",\n description: \"Reject dates after the maximum.\",\n valueKind: \"date\",\n },\n ];\n case \"switch\":\n return [\n {\n type: \"mustBeTrue\",\n label: \"Must be enabled\",\n description: \"Useful for consent or confirmation switches.\",\n valueKind: \"none\",\n },\n ];\n case \"select\":\n return [\n {\n type: \"required\",\n label: \"Required\",\n description: \"Respondents must choose an option.\",\n valueKind: \"none\",\n },\n ];\n case \"slider\":\n return [\n {\n type: \"min\",\n label: \"Minimum value\",\n description: \"Reject slider values below the threshold.\",\n valueKind: \"number\",\n defaultValue: 0,\n },\n {\n type: \"max\",\n label: \"Maximum value\",\n description: \"Reject slider values above the threshold.\",\n valueKind: \"number\",\n defaultValue: 100,\n },\n ];\n case \"input\":\n return [\n {\n type: \"required\",\n label: \"Required\",\n description: \"Respondents must provide a value.\",\n valueKind: \"none\",\n },\n {\n type: \"minLength\",\n label: \"Minimum length\",\n description: \"Require a minimum number of characters.\",\n valueKind: \"number\",\n defaultValue: 2,\n },\n {\n type: \"maxLength\",\n label: \"Maximum length\",\n description: \"Limit the number of characters.\",\n valueKind: \"number\",\n defaultValue: 120,\n },\n {\n type: \"pattern\",\n label: \"Pattern\",\n description: \"Validate against a regular expression.\",\n valueKind: \"text\",\n },\n {\n type: \"email\",\n label: \"Email format\",\n description: \"Require a valid email address.\",\n valueKind: \"none\",\n },\n {\n type: \"url\",\n label: \"URL format\",\n description: \"Require a valid URL.\",\n valueKind: \"none\",\n },\n ];\n }\n}\n\nfunction normalizeFormFieldSelectOptionConfig(\n rawOption: unknown,\n): FormFieldSelectOptionConfig | null {\n if (!rawOption || typeof rawOption !== \"object\") {\n return null;\n }\n\n const option = rawOption as Partial<FormFieldSelectOptionConfig>;\n const id = normalizeOptionalString(option.id) ?? generateId();\n const value = normalizeOptionalString(option.value);\n const label = normalizeOptionalString(option.label);\n\n if (!value && !label) {\n return null;\n }\n\n return {\n id,\n value: value ?? label ?? id,\n label,\n };\n}\n\nfunction hasDuplicateSelectOptionValue(options: FormFieldSelectOptionConfig[]): boolean {\n const seenValues = new Set<string>();\n\n for (const option of options) {\n const normalizedValue = option.value.trim().toLowerCase();\n\n if (!normalizedValue) {\n continue;\n }\n\n if (seenValues.has(normalizedValue)) {\n return true;\n }\n\n seenValues.add(normalizedValue);\n }\n\n return false;\n}\n\nfunction normalizeFormFieldValidationConfig(\n rawValidation: unknown,\n): FormFieldValidationConfig | null {\n if (!rawValidation || typeof rawValidation !== \"object\") {\n return null;\n }\n\n const validation = rawValidation as Partial<FormFieldValidationConfig>;\n const id = normalizeOptionalString(validation.id) ?? generateId();\n const message = normalizeOptionalString(validation.message);\n\n switch (validation.type) {\n case \"minLength\":\n case \"maxLength\":\n case \"min\":\n case \"max\": {\n const value = normalizeOptionalNumber(validation.value);\n\n if (value === undefined) {\n return null;\n }\n\n return {\n id,\n type: validation.type,\n value,\n message,\n };\n }\n case \"pattern\": {\n const value = normalizeOptionalString(validation.value);\n\n if (!value) {\n return null;\n }\n\n return {\n id,\n type: \"pattern\",\n value,\n message,\n };\n }\n case \"minDate\":\n case \"maxDate\": {\n const value = normalizeOptionalString(validation.value);\n\n if (!value) {\n return null;\n }\n\n return {\n id,\n type: validation.type,\n value,\n message,\n };\n }\n case \"email\":\n case \"url\":\n case \"integer\":\n case \"required\":\n case \"mustBeTrue\":\n return {\n id,\n type: validation.type,\n message,\n };\n default:\n return null;\n }\n}\n\nfunction normalizeFormFieldControlConfig(\n rawController: unknown,\n type: FormFieldType,\n): FormFieldControlConfig {\n const controller =\n rawController && typeof rawController === \"object\"\n ? (rawController as Record<string, unknown>)\n : {};\n\n switch (type) {\n case \"textarea\": {\n const defaults = createDefaultFormFieldControlConfig(type) as FormTextareaFieldControlConfig;\n\n return {\n type,\n placeholder: normalizeOptionalString(controller.placeholder),\n rows: Math.min(\n 12,\n Math.max(2, Math.round(normalizeOptionalNumber(controller.rows) ?? defaults.rows ?? 3)),\n ),\n };\n }\n case \"number\": {\n const defaults = createDefaultFormFieldControlConfig(type) as FormNumberFieldControlConfig;\n\n return {\n type,\n placeholder: normalizeOptionalString(controller.placeholder),\n step: normalizeOptionalNumber(controller.step) ?? defaults.step,\n unit: normalizeOptionalString(controller.unit),\n defaultValue: normalizeOptionalNumber(controller.defaultValue),\n };\n }\n case \"datepicker\": {\n const defaults = createDefaultFormFieldControlConfig(\n type,\n ) as FormDatepickerFieldControlConfig;\n\n return {\n type,\n placeholder: normalizeOptionalString(controller.placeholder),\n mode:\n controller.mode === \"year\" || controller.mode === \"year-month\"\n ? controller.mode\n : defaults.mode,\n };\n }\n case \"switch\":\n return {\n type,\n checkedLabel: normalizeOptionalString(controller.checkedLabel),\n uncheckedLabel: normalizeOptionalString(controller.uncheckedLabel),\n defaultChecked: normalizeOptionalBoolean(controller.defaultChecked) ?? false,\n };\n case \"select\": {\n const defaults = createDefaultFormFieldControlConfig(type) as FormSelectFieldControlConfig;\n\n return {\n type,\n placeholder: normalizeOptionalString(controller.placeholder),\n allowClear: normalizeOptionalBoolean(controller.allowClear),\n options: Array.isArray(controller.options)\n ? controller.options\n .map((option) => normalizeFormFieldSelectOptionConfig(option))\n .filter((option): option is FormFieldSelectOptionConfig => option !== null)\n : defaults.options,\n };\n }\n case \"slider\": {\n const defaults = createDefaultFormFieldControlConfig(type) as FormSliderFieldControlConfig;\n\n return {\n type,\n min: normalizeOptionalNumber(controller.min) ?? defaults.min,\n max: normalizeOptionalNumber(controller.max) ?? defaults.max,\n step: normalizeOptionalNumber(controller.step) ?? defaults.step,\n defaultValue: normalizeOptionalNumber(controller.defaultValue) ?? defaults.defaultValue,\n showValue: normalizeOptionalBoolean(controller.showValue) ?? defaults.showValue ?? true,\n };\n }\n case \"input\":\n default:\n return {\n type: \"input\",\n placeholder: normalizeOptionalString(controller.placeholder),\n inputMode:\n controller.inputMode === \"email\" ||\n controller.inputMode === \"tel\" ||\n controller.inputMode === \"url\" ||\n controller.inputMode === \"password\"\n ? controller.inputMode\n : \"text\",\n autocomplete: normalizeOptionalString(controller.autocomplete),\n };\n }\n}\n\nfunction hasDuplicateValidationType(validations: FormFieldValidationConfig[]): boolean {\n const seenValidationTypes = new Set<FormFieldValidationType>();\n\n for (const validation of validations) {\n if (seenValidationTypes.has(validation.type)) {\n return true;\n }\n\n seenValidationTypes.add(validation.type);\n }\n\n return false;\n}\n\nfunction isFormFieldConfigInvalid(\n field: Pick<FormFieldConfig, \"key\" | \"type\" | \"controller\" | \"validations\">,\n): boolean {\n if (!field.key.trim()) {\n return true;\n }\n\n if (hasDuplicateValidationType(field.validations)) {\n return true;\n }\n\n switch (field.type) {\n case \"number\": {\n const controller = field.controller as FormNumberFieldControlConfig;\n\n if (controller.step !== undefined && controller.step <= 0) {\n return true;\n }\n\n return false;\n }\n case \"datepicker\": {\n const minDate = field.validations.find((validation) => validation.type === \"minDate\")?.value;\n const maxDate = field.validations.find((validation) => validation.type === \"maxDate\")?.value;\n\n if (typeof minDate === \"string\" && typeof maxDate === \"string\" && minDate > maxDate) {\n return true;\n }\n\n return false;\n }\n case \"select\": {\n const controller = field.controller as FormSelectFieldControlConfig;\n\n return (\n controller.options.length === 0 ||\n controller.options.some((option) => !option.value.trim()) ||\n hasDuplicateSelectOptionValue(controller.options)\n );\n }\n case \"slider\": {\n const controller = field.controller as FormSliderFieldControlConfig;\n\n if (\n controller.min === undefined ||\n controller.max === undefined ||\n controller.step === undefined ||\n controller.defaultValue === undefined\n ) {\n return true;\n }\n\n return (\n controller.min >= controller.max ||\n controller.step <= 0 ||\n controller.defaultValue < controller.min ||\n controller.defaultValue > controller.max\n );\n }\n default:\n return field.validations.some((validation) => {\n if (\n (validation.type === \"minLength\" ||\n validation.type === \"maxLength\" ||\n validation.type === \"min\" ||\n validation.type === \"max\") &&\n typeof validation.value === \"number\"\n ) {\n return validation.value < 0;\n }\n\n if (\n (validation.type === \"pattern\" ||\n validation.type === \"minDate\" ||\n validation.type === \"maxDate\") &&\n typeof validation.value === \"string\"\n ) {\n return validation.value.trim().length === 0;\n }\n\n return false;\n });\n }\n}\n\nfunction normalizeFormFieldConfig(rawField: unknown): FormFieldConfig | null {\n if (!rawField || typeof rawField !== \"object\") {\n return null;\n }\n\n const field = rawField as Partial<FormFieldConfig>;\n const trimmedId = typeof field.id === \"string\" ? field.id.trim() : \"\";\n const trimmedKey = typeof field.key === \"string\" ? field.key.trim() : \"\";\n\n if (!trimmedId) {\n return null;\n }\n\n const normalizedKey = normalizeFormFieldKey(trimmedId, trimmedKey);\n const type =\n field.type === \"textarea\" ||\n field.type === \"number\" ||\n field.type === \"datepicker\" ||\n field.type === \"switch\" ||\n field.type === \"select\" ||\n field.type === \"slider\"\n ? field.type\n : \"input\";\n const normalizedRawValidations = Array.isArray(field.validations)\n ? field.validations\n .map((validation) => normalizeFormFieldValidationConfig(validation))\n .filter((validation): validation is FormFieldValidationConfig => validation !== null)\n : [];\n const validations = getFormFieldEffectiveValidations({\n id: trimmedId,\n required: field.required === true ? true : undefined,\n validations: normalizedRawValidations,\n }).map((validation) => ({\n id: validation.id,\n type: validation.type,\n value: validation.value,\n message: validation.message,\n }));\n const controller = normalizeFormFieldControlConfig(field.controller, type);\n const hasEffectiveValidations =\n getFormFieldEffectiveValidations({\n id: trimmedId,\n validations,\n }).length > 0;\n const normalizedField: FormFieldConfig = {\n id: trimmedId,\n key: normalizedKey,\n type,\n label: normalizeOptionalString(field.label),\n description: normalizeOptionalString(field.description),\n errorMessage: normalizeOptionalString(field.errorMessage),\n required: validations.some((validation) => validation.type === \"required\") ? true : undefined,\n controller,\n validations,\n hasValidations: hasEffectiveValidations ? true : undefined,\n isInvalid: isFormFieldConfigInvalid({\n key: normalizedKey,\n type,\n controller,\n validations,\n })\n ? true\n : undefined,\n };\n\n return normalizedField;\n}\n\nfunction normalizeFormFieldGroupConfig(rawGroup: unknown): FormFieldGroupConfig | null {\n if (!rawGroup || typeof rawGroup !== \"object\") {\n return null;\n }\n\n const group = rawGroup as Partial<FormFieldGroupConfig>;\n const trimmedId = typeof group.id === \"string\" ? group.id.trim() : \"\";\n const trimmedTitle = typeof group.title === \"string\" ? group.title.trim() : \"\";\n const trimmedDescription = typeof group.description === \"string\" ? group.description.trim() : \"\";\n\n if (!trimmedId) {\n return null;\n }\n\n return {\n id: trimmedId,\n title: trimmedTitle || undefined,\n description: trimmedDescription || undefined,\n hasDisplayCondition: group.hasDisplayCondition === true ? true : undefined,\n layout: normalizeFormFieldGroupLayoutConfig(group.layout),\n fields: Array.isArray(group.fields)\n ? group.fields\n .map((field) => normalizeFormFieldConfig(field))\n .filter((field): field is FormFieldConfig => field !== null)\n : [],\n };\n}\n\nexport function normalizeFormItemConfig(rawConfig: unknown, itemId: string): FormItemConfig {\n const config = (rawConfig ?? {}) as Partial<FormItemConfig>;\n\n return {\n id: typeof config.id === \"string\" && config.id.trim() ? config.id : itemId,\n fieldGroups: Array.isArray(config.fieldGroups)\n ? config.fieldGroups\n .map((group) => normalizeFormFieldGroupConfig(group))\n .filter((group): group is FormFieldGroupConfig => group !== null)\n : [],\n };\n}\n\nexport function createFormFieldGroupConfig(): FormFieldGroupConfig {\n return {\n id: generateId(),\n layout: {\n base: 1,\n xs: 1,\n sm: 1,\n md: 1,\n xl: 1,\n },\n fields: [],\n };\n}\n\nexport function getNextAvailableFormFieldKey(fields: Pick<FormFieldConfig, \"key\">[]): string {\n const usedKeys = new Set(fields.map((field) => field.key.trim().toLowerCase()).filter(Boolean));\n\n let nextIndex = 1;\n\n while (usedKeys.has(`f${nextIndex}`)) {\n nextIndex += 1;\n }\n\n return `F${nextIndex}`;\n}\n\nexport function createFormFieldConfig(\n type: FormFieldType,\n key = generateCodingKey(4),\n): FormFieldConfig {\n return {\n id: generateId(),\n key,\n type,\n controller: createDefaultFormFieldControlConfig(type),\n validations: [],\n };\n}\n","import { generateId, structuredCloneMethod } from \"@case-framework/survey-core\";\nimport { normalizeFormItemConfig, type FormItemConfig } from \"../form/model\";\n\n/** `1` = single selection (radio). `null` = multiple selection with no upper cap. Integers above 1 cap how many options may be selected. */\nexport type ChoiceMaxSelection = number | null;\n\nexport interface ChoiceOptionConfig {\n id: string;\n key?: string;\n hasDisplayCondition?: boolean;\n embeddedFormItemId?: string;\n embeddedForm?: FormItemConfig;\n}\n\nexport interface ChoiceItemConfig {\n id: string;\n maxSelection: ChoiceMaxSelection;\n shuffleOptions: boolean;\n options: ChoiceOptionConfig[];\n}\n\nexport function choiceIsSingleSelect(maxSelection: ChoiceMaxSelection): boolean {\n return maxSelection === 1;\n}\n\nexport function createChoiceItemConfig(itemId: string): ChoiceItemConfig {\n return {\n id: itemId,\n maxSelection: 1,\n shuffleOptions: false,\n options: [],\n };\n}\n\nexport function getChoiceOptionLabelContentKey(optionId: string): string {\n return `options.${optionId}.label`;\n}\n\nexport function getChoiceOptionEmbeddedFormTranslationPrefix(optionId: string): string {\n return `embeddedForms.${optionId}`;\n}\n\nexport function getChoiceOptionEmbeddedFormResponseSlotPrefix(optionId: string): string {\n return `embedded.${optionId}`;\n}\n\nexport function getChoiceOptionEmbeddedFormResponseSlotId(\n optionId: string,\n fieldKey: string,\n): string {\n return `${getChoiceOptionEmbeddedFormResponseSlotPrefix(optionId)}.${fieldKey}`;\n}\n\nexport function getChoiceOptionEmbeddedFormResponseKeyPathSegment(\n option: Pick<ChoiceOptionConfig, \"id\" | \"key\">,\n): string {\n return normalizeChoiceOptionKey(option.key ?? \"\") || option.id;\n}\n\nexport function choiceOptionHasEmbeddedForm(\n option: Pick<ChoiceOptionConfig, \"embeddedFormItemId\" | \"embeddedForm\">,\n): boolean {\n return Boolean(option.embeddedFormItemId || option.embeddedForm?.fieldGroups.length);\n}\n\nexport function normalizeChoiceOptionKey(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/_+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n}\n\nfunction normalizeChoiceOptionConfig(rawOption: unknown): ChoiceOptionConfig | null {\n if (!rawOption || typeof rawOption !== \"object\") {\n return null;\n }\n\n const option = rawOption as Partial<ChoiceOptionConfig>;\n const trimmedId = typeof option.id === \"string\" ? option.id.trim() : \"\";\n if (!trimmedId) {\n return null;\n }\n\n const trimmedKey = typeof option.key === \"string\" ? option.key.trim() : \"\";\n const trimmedEmbeddedFormItemId =\n typeof option.embeddedFormItemId === \"string\" ? option.embeddedFormItemId.trim() : \"\";\n\n return {\n id: trimmedId,\n key: trimmedKey || undefined,\n hasDisplayCondition: option.hasDisplayCondition === true ? true : undefined,\n embeddedFormItemId: trimmedEmbeddedFormItemId || undefined,\n embeddedForm: option.embeddedForm\n ? normalizeFormItemConfig(option.embeddedForm, trimmedId)\n : undefined,\n };\n}\n\nfunction normalizeMaxSelection(config: {\n maxSelection?: unknown;\n mode?: \"single\" | \"multiple\";\n}): ChoiceMaxSelection {\n const hasMaxSelectionKey = \"maxSelection\" in config && config.maxSelection !== undefined;\n const rawMax = config.maxSelection;\n\n if (rawMax === null) {\n return null;\n }\n\n if (typeof rawMax === \"number\" && Number.isFinite(rawMax)) {\n const n = Math.floor(rawMax);\n return n >= 1 ? n : 1;\n }\n\n if (typeof rawMax === \"string\") {\n const parsed = Number.parseInt(rawMax.trim(), 10);\n if (Number.isFinite(parsed) && parsed >= 1) {\n return parsed;\n }\n }\n\n if (!hasMaxSelectionKey && config.mode === \"multiple\") {\n return null;\n }\n\n return 1;\n}\n\nexport function normalizeChoiceItemConfig(rawConfig: unknown, itemId: string): ChoiceItemConfig {\n const config = (rawConfig ?? {}) as Partial<ChoiceItemConfig> & { mode?: \"single\" | \"multiple\" };\n\n return {\n id: typeof config.id === \"string\" && config.id.trim() ? config.id : itemId,\n maxSelection: normalizeMaxSelection(\n config as { maxSelection?: unknown; mode?: \"single\" | \"multiple\" },\n ),\n shuffleOptions: config.shuffleOptions === true,\n options: Array.isArray(config.options)\n ? config.options\n .map((option) => normalizeChoiceOptionConfig(option))\n .filter((option): option is ChoiceOptionConfig => option !== null)\n : [],\n };\n}\n\nexport function createChoiceOptionConfig(\n existingOptions: ChoiceOptionConfig[],\n): ChoiceOptionConfig {\n const usedNumbers = new Set(\n existingOptions\n .map((option) => normalizeChoiceOptionKey(option.key ?? \"\").match(/^opt_(\\d+)$/)?.[1])\n .filter((value): value is string => value !== undefined)\n .map((value) => Number.parseInt(value, 10))\n .filter((value) => Number.isFinite(value)),\n );\n\n let nextNumber = 1;\n while (usedNumbers.has(nextNumber)) {\n nextNumber += 1;\n }\n\n return {\n id: generateId(),\n key: `opt_${nextNumber}`,\n };\n}\n\nexport function createDuplicatedChoiceOptionConfig(\n option: ChoiceOptionConfig,\n existingOptions: ChoiceOptionConfig[],\n): ChoiceOptionConfig {\n const generatedOption = createChoiceOptionConfig(existingOptions);\n\n return {\n ...option,\n id: generatedOption.id,\n key: generatedOption.key,\n embeddedForm: option.embeddedForm ? structuredCloneMethod(option.embeddedForm) : undefined,\n };\n}\n","import {\n SurveyItemCore,\n SurveyItemPrefillTargetType,\n type SurveyItemPrefill,\n ValueType,\n} from \"@case-framework/survey-core\";\nimport type { ResponseSlotDefinition } from \"@case-framework/survey-core\";\nimport type { ResponseValue } from \"@case-framework/survey-core\";\nimport {\n getChoiceOptionEmbeddedFormResponseKeyPathSegment,\n getChoiceOptionEmbeddedFormResponseSlotId,\n normalizeChoiceItemConfig,\n type ChoiceItemConfig,\n} from \"./items/choice/model\";\nimport {\n normalizeFormItemConfig,\n type FormFieldConfig,\n type FormItemConfig,\n} from \"./items/form/model\";\n\ntype InfoItemConfig = Record<string, never>;\n\nfunction getFormFieldValueType(field: Pick<FormFieldConfig, \"type\">): ValueType {\n return field.type === \"number\" || field.type === \"slider\"\n ? ValueType.number\n : field.type === \"datepicker\"\n ? ValueType.date\n : field.type === \"switch\"\n ? ValueType.boolean\n : ValueType.string;\n}\n\nexport class InfoItemCore extends SurveyItemCore<\"infoItem\", InfoItemConfig> {\n readonly type = \"infoItem\";\n\n parseConfig(rawConfig: unknown): InfoItemConfig {\n return (rawConfig ?? {}) as InfoItemConfig;\n }\n\n isInteractive(): boolean {\n return false;\n }\n\n getResponseSlotDefinitions(): ResponseSlotDefinition[] {\n return [];\n }\n}\n\nexport class FormItemCore extends SurveyItemCore<\"formItem\", FormItemConfig> {\n readonly type = \"formItem\";\n\n parseConfig(rawConfig: unknown): FormItemConfig {\n return normalizeFormItemConfig(rawConfig, this.id);\n }\n\n isInteractive(): boolean {\n return true;\n }\n\n getResponseSlotDefinitions(): ResponseSlotDefinition[] {\n return this.config.fieldGroups.flatMap((group) =>\n group.fields.map((field) => ({\n slotId: field.key,\n key: field.key,\n keyPath: [\"response\"],\n valueType: getFormFieldValueType(field),\n prefillTarget: {\n type: SurveyItemPrefillTargetType.field,\n fieldId: field.id,\n },\n })),\n );\n }\n}\n\nexport class ChoiceItemCore extends SurveyItemCore<\"choiceItem\", ChoiceItemConfig> {\n readonly type = \"choiceItem\";\n\n parseConfig(rawConfig: unknown): ChoiceItemConfig {\n return normalizeChoiceItemConfig(rawConfig, this.id);\n }\n\n isInteractive(): boolean {\n return true;\n }\n\n getResponseSlotDefinitions(): ResponseSlotDefinition[] {\n const slotId = this.config.id ?? this.id;\n const valueType =\n this.config.maxSelection === 1 ? ValueType.reference : ValueType.referenceArray;\n const embeddedFormSlots = this.config.options.flatMap((option) => {\n const embeddedForm = option.embeddedForm\n ? normalizeFormItemConfig(option.embeddedForm, option.id)\n : undefined;\n\n if (!embeddedForm) {\n return [];\n }\n\n return embeddedForm.fieldGroups.flatMap((group) =>\n group.fields.map((field) => ({\n slotId: getChoiceOptionEmbeddedFormResponseSlotId(option.id, field.key),\n key: field.key,\n keyPath: [\"embedded\", getChoiceOptionEmbeddedFormResponseKeyPathSegment(option)],\n valueType: getFormFieldValueType(field),\n prefillTarget: {\n type: SurveyItemPrefillTargetType.embeddedField,\n optionId: option.id,\n fieldId: field.id,\n },\n })),\n );\n });\n\n return [\n {\n slotId,\n key: \"response\",\n keyPath: [],\n valueType,\n prefillTarget: {\n type: SurveyItemPrefillTargetType.itemResponse,\n },\n },\n ...embeddedFormSlots,\n ];\n }\n\n override normalizePrefillValue(\n prefill: SurveyItemPrefill,\n targetSlot: ResponseSlotDefinition,\n value: ResponseValue,\n ): ResponseValue | undefined {\n if (targetSlot.prefillTarget?.type !== SurveyItemPrefillTargetType.itemResponse) {\n return super.normalizePrefillValue(prefill, targetSlot, value);\n }\n\n const validOptionIds = new Set(this.config.options.map((option) => option.id));\n if (this.config.maxSelection === 1) {\n if (value.type !== ValueType.reference || !validOptionIds.has(value.value)) {\n return undefined;\n }\n return value;\n }\n\n if (value.type !== ValueType.referenceArray) {\n return undefined;\n }\n\n const filteredValues = value.value.filter((optionId) => validOptionIds.has(optionId));\n if (filteredValues.length === 0) {\n return undefined;\n }\n\n if (filteredValues.length === value.value.length) {\n return value;\n }\n\n return {\n ...value,\n value: filteredValues,\n };\n }\n}\n"],"x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"mappings":"AACA,SAAS,EAAW,EAAM,CACzB,IAAI,EAAO,WACX,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,IAChC,GAAQ,EAAK,WAAW,EAAE,CAC1B,EAAO,KAAK,KAAK,EAAM,SAAS,CAEjC,OAAO,IAAS,EAEjB,SAAS,EAAmB,EAAM,CACjC,IAAI,EAAQ,EAAW,EAAK,CAC5B,UAAa,CACZ,EAAQ,EAAQ,aAAe,EAC/B,IAAI,EAAO,EAGX,MAFA,GAAO,KAAK,KAAK,EAAO,IAAS,GAAI,EAAO,EAAE,CAC9C,GAAQ,EAAO,KAAK,KAAK,EAAO,IAAS,EAAG,EAAO,GAAG,GAC7C,EAAO,IAAS,MAAQ,GAAK,YAGxC,SAAS,EAAa,EAAQ,EAAS,KAAK,OAAQ,CACnD,IAAM,EAAiB,CAAC,GAAG,EAAO,CAClC,IAAK,IAAI,EAAI,EAAe,OAAS,EAAG,EAAI,EAAG,IAAK,CACnD,IAAM,EAAI,KAAK,MAAM,GAAQ,EAAI,EAAI,GAAG,CACxC,CAAC,EAAe,GAAI,EAAe,IAAM,CAAC,EAAe,GAAI,EAAe,GAAG,CAEhF,OAAO,EAOR,SAAS,EAAe,EAAQ,EAAS,KAAK,OAAQ,CACrD,OAAO,EAAa,MAAM,KAAK,CAAE,SAAQ,EAAG,EAAG,IAAM,EAAE,CAAE,EAAO,CAEjE,SAAS,EAAsB,EAAK,CAEnC,OADI,OAAO,gBAAoB,IAAoB,gBAAgB,EAAI,CAChE,KAAK,MAAM,KAAK,UAAU,EAAI,CAAC,CAEvC,IAAM,EAAW,iEACjB,SAAS,GAAa,CACrB,IACM,EAAY,KAAK,KAAK,CACxB,EAAmB,GACnB,EAAI,EAER,KAAO,EAAI,GACV,EAAmB,EAAS,OAAO,EAAI,GAAK,CAAG,EAC/C,EAAI,KAAK,MAAM,EAAI,GAAK,CAEzB,IAAI,EAAa,GACjB,IAAK,IAAI,EAAI,EAAG,EAAI,GAAQ,IAAK,GAAc,EAAS,OAAO,KAAK,MAAM,KAAK,QAAQ,CAAG,GAAK,CAAC,CAChG,OAAO,EAAa,EAGrB,IAAM,EAAsB,mCAM5B,SAAS,EAAkB,EAAS,EAAG,CACtC,IACI,EAAM,GACV,IAAK,IAAI,EAAI,EAAG,EAAI,EAAQ,IAAK,GAAO,EAAoB,OAAO,KAAK,MAAM,KAAK,QAAQ,CAAG,GAAK,CAAC,CACpG,OAAO,EAIR,IAAM,EAAY,MACd,GAAuC,SAAS,EAAsB,CAGzE,MAFA,GAAqB,IAAS,MAC9B,EAAqB,UAAe,YAC7B,GACN,EAAE,CAAC,CACD,EAAiB,MAAM,CAAe,CACzC,QACA,MACA,QACA,YAAY,EAAK,CAChB,IAAM,EAAQ,EAAI,MAAM,EAAU,CAClC,GAAI,EAAM,SAAW,EAAG,MAAU,MAAM,4BAA8B,EAAI,CAC1E,KAAK,QAAU,EAAM,GACrB,KAAK,MAAQ,EAAM,GACnB,KAAK,QAAU,EAAM,GAEtB,IAAI,QAAS,CACZ,OAAO,KAAK,QAEb,IAAI,MAAO,CACV,OAAO,KAAK,MAEb,IAAI,QAAS,CACZ,OAAO,KAAK,QAEb,IAAI,OAAO,EAAQ,CAClB,KAAK,QAAU,EAEhB,UAAW,CACV,MAAO,GAAG,KAAK,UAAU,IAAY,KAAK,QAAQ,KAAK,QAAU,EAAY,KAAK,QAAU,KAE7F,OAAO,UAAU,EAAQ,EAAM,EAAQ,CACtC,OAAO,IAAI,EAAe,GAAG,IAAS,IAAY,IAAO,IAAY,IAAS,GAa1E,EAAiB,CACtB,MAAO,QACP,iBAAkB,mBAClB,gBAAiB,kBACjB,SAAU,WACV,CACK,EAAsB,CAC3B,OAAQ,SACR,gBAAiB,kBACjB,YAAa,cACb,iBAAkB,mBAClB,CAIG,EAAa,MAAM,CAAW,CACjC,KACA,aACA,YAAY,EAAM,EAAc,CAC/B,KAAK,KAAO,EACZ,KAAK,aAAe,EAErB,OAAO,YAAY,EAAM,CACnB,KACL,OAAQ,EAAK,KAAb,CACC,KAAK,EAAe,MAAO,OAAO,GAAgB,YAAY,EAAK,CACnE,KAAK,EAAe,iBAAkB,OAAO,GAA2B,YAAY,EAAK,CACzF,KAAK,EAAe,gBAAiB,OAAO,GAA0B,YAAY,EAAK,CACvF,KAAK,EAAe,SAAU,OAAO,GAAmB,YAAY,EAAK,EAG3E,OAAQ,CACP,OAAO,EAAW,YAAY,KAAK,WAAW,CAAC,OAAW,CACzD,MAAU,MAAM,6BAA6B,IAC1C,GAGF,GAAkB,MAAM,UAAwB,CAAW,CAC9D,MACA,YAAY,EAAO,EAAc,CAChC,MAAM,EAAe,MAAO,EAAa,CACzC,KAAK,MAAQ,EACb,KAAK,KAAO,EAAe,MAE5B,OAAO,YAAY,EAAM,CACxB,GAAI,EAAK,OAAS,EAAe,MAAO,MAAU,MAAM,4BAA8B,EAAK,KAAK,CAChG,OAAO,IAAI,EAAgB,EAAK,MAAO,EAAK,aAAa,CAE1D,IAAI,sBAAuB,CAC1B,MAAO,EAAE,CAEV,WAAY,CACX,MAAO,CACN,KAAM,KAAK,KACX,MAAO,KAAK,MACZ,aAAc,KAAK,aACnB,CAEF,wBAAwB,EAAa,EAAa,CACjD,MAAO,KAGL,GAA6B,MAAM,UAAmC,CAAW,CACpF,YACA,YAAY,EAAa,EAAc,CACtC,MAAM,EAAe,iBAAkB,EAAa,CACpD,KAAK,YAAc,EACnB,KAAK,KAAO,EAAe,iBAE5B,OAAO,YAAY,EAAM,CACxB,GAAI,EAAK,OAAS,EAAe,iBAAkB,MAAU,MAAM,4BAA8B,EAAK,KAAK,CAC3G,OAAO,IAAI,EAA2B,EAAK,YAAa,EAAK,aAAa,CAE3E,IAAI,sBAAuB,CAC1B,MAAO,CAAC,IAAI,EAAe,KAAK,YAAY,CAAC,CAE9C,IAAI,qBAAsB,CACzB,OAAO,IAAI,EAAe,KAAK,YAAY,CAE5C,WAAY,CACX,MAAO,CACN,KAAM,KAAK,KACX,YAAa,KAAK,YAClB,aAAc,KAAK,aACnB,GAGC,GAA4B,MAAM,UAAkC,CAAW,CAClF,YACA,IACA,UACA,OACA,YAAY,EAAa,EAAK,EAAM,EAAQ,EAAc,CACzD,MAAM,EAAe,gBAAiB,EAAa,CACnD,KAAK,KAAO,EAAe,gBAC3B,KAAK,YAAc,EACnB,KAAK,IAAM,EACX,KAAK,UAAY,EACjB,KAAK,OAAS,EAEf,OAAO,YAAY,EAAM,CACxB,GAAI,EAAK,OAAS,EAAe,gBAAiB,MAAU,MAAM,4BAA8B,EAAK,KAAK,CAC1G,OAAO,IAAI,EAA0B,EAAK,YAAa,EAAW,YAAY,EAAK,IAAI,CAAE,EAAK,WAAW,IAAK,GAAQ,EAAW,YAAY,EAAI,CAAC,CAAE,EAAK,OAAQ,EAAK,aAAa,CAEpL,IAAI,sBAAuB,CAC1B,OAAO,KAAK,WAAW,QAAS,GAAQ,GAAK,qBAAqB,CAAC,OAAQ,GAAQ,IAAQ,IAAK,GAAE,EAAI,EAAE,CAEzG,WAAY,CACX,MAAO,CACN,KAAM,KAAK,KACX,YAAa,KAAK,YAClB,IAAK,KAAK,KAAK,WAAW,CAC1B,UAAW,KAAK,WAAW,IAAK,GAAQ,GAAK,WAAW,CAAC,CACzD,OAAQ,KAAK,OACb,aAAc,KAAK,aACnB,GAGC,GAA0C,SAAS,EAAyB,CAgB/E,MAfA,GAAwB,IAAS,MACjC,EAAwB,GAAQ,KAChC,EAAwB,IAAS,MACjC,EAAwB,cAAmB,gBAC3C,EAAwB,GAAQ,KAChC,EAAwB,GAAQ,KAChC,EAAwB,IAAS,MACjC,EAAwB,GAAQ,KAChC,EAAwB,IAAS,MACjC,EAAwB,SAAc,WACtC,EAAwB,IAAS,MACjC,EAAwB,IAAS,MACjC,EAAwB,IAAS,MACjC,EAAwB,OAAY,SACpC,EAAwB,QAAa,UAC9B,GACN,EAAE,CAAC,CACD,GAAqB,MAAM,UAA2B,CAAW,CACpE,aACA,UACA,YAAY,EAAc,EAAM,EAAc,CAC7C,MAAM,EAAe,SAAS,CAC9B,KAAK,KAAO,EAAe,SAC3B,KAAK,aAAe,EACpB,KAAK,UAAY,EACjB,KAAK,aAAe,EAErB,OAAO,YAAY,EAAM,CACxB,GAAI,EAAK,OAAS,EAAe,SAAU,MAAU,MAAM,4BAA8B,EAAK,KAAK,CACnG,IAAM,EAAe,EAAK,aAC1B,GAAI,CAAC,OAAO,OAAO,GAAwB,CAAC,SAAS,EAAa,CAAE,MAAU,MAAM,0BAA4B,EAAa,CAC7H,IAAM,EAAO,IAAI,EAAmB,EAAc,EAAK,UAAU,IAAK,GAAQ,EAAW,YAAY,EAAI,CAAC,CAAC,CAE3G,MADA,GAAK,aAAe,EAAK,aAClB,EAER,IAAI,sBAAuB,CAC1B,IAAM,EAAa,KAAK,UAAU,QAAS,GAAQ,GAAK,qBAAqB,CAAC,OAAQ,GAAQ,IAAQ,IAAK,GAAE,CAAC,IAAK,GAAQ,EAAI,UAAU,CAAC,CAC1I,MAAO,CAAC,GAAG,IAAI,IAAI,EAAW,CAAC,CAAC,IAAK,GAAQ,IAAI,EAAe,EAAI,CAAC,CAEtE,WAAY,CACX,MAAO,CACN,KAAM,KAAK,KACX,aAAc,KAAK,aACnB,UAAW,KAAK,UAAU,IAAK,GAAQ,GAAK,WAAW,CAAC,CACxD,aAAc,KAAK,aACnB,GAUG,GAA0B,GAAkB,CACjD,IAAM,EAAO,CACZ,KAAM,EAAc,KACpB,WAAY,EAAc,WAC1B,WAAY,EAAc,YAAY,WAAW,CACjD,CAED,OADI,EAAc,OAAS,gBAAe,EAAK,WAAa,EAAc,YACnE,GAEF,GAA2B,GAAmB,CACnD,IAAM,EAAO,EAAE,CACf,IAAK,GAAM,CAAC,EAAK,KAAU,EAAe,SAAS,CAAE,EAAK,GAAO,GAAuB,EAAM,CAC9F,OAAO,GAEF,GAA4B,IAC1B,CACN,KAAM,EAAK,KACX,WAAY,EAAK,WAAa,EAAW,YAAY,EAAK,WAAW,CAAG,IAAK,GAC7E,WAAY,EAAK,WACjB,WAAY,EAAK,WACjB,EAEI,GAA6B,GAC3B,IAAI,IAAI,OAAO,QAAQ,EAAK,CAAC,KAAK,CAAC,EAAK,KAAW,CAAC,EAAK,GAAyB,EAAM,CAAC,CAAC,CAAC,CAI7F,EAAY,CACjB,OAAQ,SACR,SAAU,WACV,UAAW,YACX,OAAQ,SACR,QAAS,UACT,KAAM,OACN,YAAa,WACb,cAAe,aACf,eAAgB,cAChB,YAAa,WACb,UAAW,SACX,CACK,GAAgB,CACrB,QAAS,UACT,QAAS,UACT,MAAO,QACP,KAAM,OACN,MAAO,QACP,OAAQ,SACR,MAAO,QACP,CACK,GAAkB,CACvB,IAAK,MACL,MAAO,QACP,CACD,SAAS,GAAc,EAAO,CAC7B,OAAyB,OAAO,GAAU,YAAnC,GAA+C,CAAC,MAAM,QAAQ,EAAM,CAE5E,SAAS,EAAe,EAAO,CAC9B,OAAO,OAAO,GAAU,UAAY,OAAO,SAAS,EAAM,CAE3D,SAAS,GAAc,EAAO,CAC7B,OAAO,MAAM,QAAQ,EAAM,EAAI,EAAM,MAAO,GAAS,OAAO,GAAS,SAAS,CAE/E,SAAS,GAAc,EAAO,CAC7B,OAAO,MAAM,QAAQ,EAAM,EAAI,EAAM,MAAO,GAAS,EAAe,EAAK,CAAC,CAE3E,SAAS,EAA0B,EAAO,CACzC,OAAO,IAAU,IAAK,IAAK,IAAU,GAAgB,KAAO,IAAU,GAAgB,MAEvF,SAAS,GAAe,EAAO,CAC9B,OAAO,OAAO,GAAU,UAAY,OAAO,OAAO,GAAc,CAAC,SAAS,EAAM,CAEjF,SAAS,GAAgB,EAAO,CAC/B,GAAI,CAAC,GAAc,EAAM,EAAI,OAAO,EAAM,MAAS,SAAU,MAAO,GACpE,OAAQ,EAAM,KAAd,CACC,KAAK,EAAU,OACf,KAAK,EAAU,UAAW,OAAO,OAAO,EAAM,OAAU,SACxD,KAAK,EAAU,OAAQ,OAAO,EAAe,EAAM,MAAM,EAAI,EAA0B,EAAM,UAAU,CACvG,KAAK,EAAU,QAAS,OAAO,OAAO,EAAM,OAAU,UACtD,KAAK,EAAU,KAAM,OAAO,EAAe,EAAM,MAAM,CACvD,KAAK,EAAU,SAAU,OAAO,EAAe,EAAM,MAAM,EAAI,GAAe,EAAM,KAAK,EAAI,EAA0B,EAAM,UAAU,CACvI,KAAK,EAAU,YACf,KAAK,EAAU,eAAgB,OAAO,GAAc,EAAM,MAAM,CAChE,KAAK,EAAU,YACf,KAAK,EAAU,UAAW,OAAO,GAAc,EAAM,MAAM,GAAK,EAAM,OAAS,EAAU,aAAe,EAA0B,EAAM,UAAU,EAClJ,KAAK,EAAU,cAAe,OAAO,GAAc,EAAM,MAAM,EAAI,GAAe,EAAM,KAAK,EAAI,EAA0B,EAAM,UAAU,CAC3I,QAAS,MAAO,IAGlB,SAAS,GAAoB,EAAO,EAAM,CACzC,GAAI,CAAC,GAAgB,EAAM,CAAE,MAAU,MAAM,8BAA8B,EAAK,GAAG,CAIpF,IAAM,GAA6B,IAC3B,CACN,KAAM,EAAK,KAAO,EAAW,YAAY,EAAK,KAAK,CAAG,IAAK,GAC3D,WAAY,EAAK,WAAa,OAAO,YAAY,OAAO,QAAQ,EAAK,WAAW,CAAC,KAAK,CAAC,EAAK,KAAW,CAAC,EAAK,EAAW,YAAY,EAAM,CAAC,CAAC,CAAC,CAAG,IAAK,GACrJ,EAEI,GAA8B,IAC5B,CAAE,WAAY,EAAK,WAAa,OAAO,YAAY,OAAO,QAAQ,EAAK,WAAW,CAAC,KAAK,CAAC,EAAK,KAAW,CAAC,EAAK,EAAW,YAAY,EAAM,CAAC,CAAC,CAAC,CAAG,IAAK,GAAG,EAI5J,GAA6B,CAAE,QAAS,UAAW,CACnD,EAA8B,CACnC,aAAc,eACd,MAAO,QACP,cAAe,gBACf,CACD,SAAS,GAA6B,EAAM,CAC3C,OAAQ,EAAK,OAAO,KAApB,CACC,IAAK,SAAU,MAAO,CACrB,GAAI,EAAK,GACT,OAAQ,EAAK,OACb,KAAM,EAAW,YAAY,EAAK,KAAK,CACvC,MAAO,EAAK,MACZ,OAAQ,CACP,KAAM,SACN,MAAO,EAAK,OAAO,MACnB,CACD,CACD,IAAK,aAAc,MAAO,CACzB,GAAI,EAAK,GACT,OAAQ,EAAK,OACb,KAAM,EAAW,YAAY,EAAK,KAAK,CACvC,MAAO,EAAK,MACZ,OAAQ,CACP,KAAM,aACN,WAAY,EAAW,YAAY,EAAK,OAAO,WAAW,OAAW,CACpE,MAAU,MAAM,YAAY,EAAK,GAAG,wCAAwC,IACzE,CACJ,CACD,CACD,IAAK,gBAAiB,MAAO,CAC5B,GAAI,EAAK,GACT,OAAQ,EAAK,OACb,KAAM,EAAW,YAAY,EAAK,KAAK,CACvC,MAAO,EAAK,MACZ,OAAQ,CACP,KAAM,gBACN,IAAK,EAAK,OAAO,IACjB,CACD,CACD,IAAK,mBAAoB,MAAO,CAC/B,GAAI,EAAK,GACT,OAAQ,EAAK,OACb,KAAM,EAAW,YAAY,EAAK,KAAK,CACvC,MAAO,EAAK,MACZ,OAAQ,CACP,KAAM,mBACN,IAAK,EAAK,OAAO,IACjB,cAAe,EAAK,OAAO,cAC3B,CACD,CACD,QAAS,MAAU,MAAM,oCAAoC,EAAK,OAAO,OAAO,EAmDlF,SAAS,GAAoB,EAAM,EAAO,CACzC,GAAI,EAAK,OAAS,EAAM,KAAM,MAAO,GACrC,OAAQ,EAAK,KAAb,CACC,KAAK,EAA4B,aAAc,MAAO,GACtD,KAAK,EAA4B,MAAO,OAAO,EAAK,UAAY,EAAM,QACtE,KAAK,EAA4B,cAAe,OAAO,EAAK,WAAa,EAAM,UAAY,EAAK,UAAY,EAAM,QAClH,QAAS,MAAO,IAUlB,IAAI,EAAiB,KAAM,CAC1B,GACA,IACA,OACA,SACA,kBACA,mBACA,YACA,SACA,YAAY,EAAS,CACpB,KAAK,SAAW,EAChB,KAAK,mBAAmB,CACxB,KAAK,GAAK,KAAK,SAAS,GACxB,KAAK,IAAM,KAAK,SAAS,IACzB,KAAK,OAAS,KAAK,YAAY,KAAK,SAAS,OAAO,CAErD,iCAAkC,CACjC,MAAO,EAAE,CAEV,+BAA+B,EAAQ,CACtC,IAAM,EAAY,EAAE,CACpB,IAAK,IAAM,KAAQ,KAAK,4BAA4B,CACnD,EAAU,GAAG,KAAK,GAAG,WAAW,EAAK,UAAY,EAAK,UACtD,EAAU,GAAG,KAAK,GAAG,iBAAiB,EAAK,UAAY,EAAU,QAIlE,OAFA,OAAO,OAAO,EAAW,KAAK,iCAAiC,CAAC,CAC3D,EACE,OAAO,YAAY,OAAO,QAAQ,EAAU,CAAC,QAAQ,EAAG,KAAe,IAAc,EAAO,CAAC,CADhF,EAGrB,IAAI,SAAU,CACb,OAAO,KAAK,SAEb,IAAI,UAAW,CACd,OAAO,KAAK,SAAS,UAAY,EAAE,CAEpC,IAAI,SAAS,EAAU,CACtB,KAAK,cAAc,CAClB,GAAG,KAAK,SACR,WACA,CAAC,CAEH,IAAI,gBAAiB,CACpB,OAAO,KAAK,SAAS,gBAAkB,EAAE,CAE1C,aAAa,EAAW,CACvB,KAAK,cAAc,CAClB,GAAG,KAAK,SACR,eAAgB,CACf,GAAG,KAAK,SAAS,eACjB,UAAW,EACX,CACD,CAAC,CAEH,cAAc,EAAW,CACxB,KAAK,cAAc,CAClB,GAAG,KAAK,SACR,eAAgB,CACf,GAAG,KAAK,SAAS,eACjB,UAAW,KAAK,SAAS,gBAAgB,WAAa,EACtD,UAAW,EACX,CACD,CAAC,CAEH,cAAc,EAAS,CACtB,GAAI,EAAQ,KAAO,KAAK,GAAI,MAAU,MAAM,6CAA6C,CACzF,KAAK,SAAW,EAChB,KAAK,mBAAmB,CACxB,KAAK,IAAM,EAAQ,IACnB,KAAK,OAAS,KAAK,YAAY,EAAQ,OAAO,CAE/C,mBAAoB,CACnB,KAAK,kBAAoB,KAAK,SAAS,kBAAoB,GAA0B,KAAK,SAAS,kBAAkB,CAAG,IAAK,GAC7H,KAAK,mBAAqB,KAAK,SAAS,mBAAqB,GAA2B,KAAK,SAAS,mBAAmB,CAAG,IAAK,GACjI,KAAK,YAAc,KAAK,SAAS,YAAc,OAAO,YAAY,OAAO,QAAQ,KAAK,SAAS,YAAY,CAAC,KAAK,CAAC,EAAK,KAAW,CAAC,EAAK,EAAW,YAAY,EAAM,CAAC,CAAC,CAAC,CAAG,IAAK,GAChL,KAAK,SAAW,KAAK,SAAS,UAAU,IAAK,GAAY,GAA6B,EAAQ,CAAC,CAEhG,oBAAqB,CACpB,IAAM,EAAS,EAAE,CACjB,GAAI,KAAK,kBAAmB,CAC3B,IAAK,IAAM,KAAO,KAAK,kBAAkB,MAAM,sBAAwB,EAAE,CAAE,EAAO,KAAK,CACtF,OAAQ,KAAK,GACb,UAAW,oBACX,eAAgB,EAChB,CAAC,CACF,IAAK,GAAM,CAAC,EAAc,KAAe,OAAO,QAAQ,KAAK,kBAAkB,YAAc,EAAE,CAAC,CAAE,IAAK,IAAM,KAAO,GAAY,sBAAwB,EAAE,CAAE,EAAO,KAAK,CACvK,OAAQ,KAAK,GACb,iBAAkB,EAClB,UAAW,oBACX,eAAgB,EAChB,CAAC,CAEH,GAAI,KAAK,mBAAoB,IAAK,GAAM,CAAC,EAAc,KAAe,OAAO,QAAQ,KAAK,mBAAmB,YAAc,EAAE,CAAC,CAAE,IAAK,IAAM,KAAO,GAAY,sBAAwB,EAAE,CAAE,EAAO,KAAK,CACrM,OAAQ,KAAK,GACb,iBAAkB,EAClB,UAAW,qBACX,eAAgB,EAChB,CAAC,CACF,GAAI,KAAK,YAAa,IAAK,GAAM,CAAC,EAAe,KAAe,OAAO,QAAQ,KAAK,YAAY,CAAE,IAAK,IAAM,KAAO,GAAY,sBAAwB,EAAE,CAAE,EAAO,KAAK,CACvK,OAAQ,KAAK,GACb,iBAAkB,EAClB,UAAW,cACX,eAAgB,EAChB,CAAC,CACF,GAAI,KAAK,SAAU,IAAK,IAAM,KAAW,KAAK,SAAU,CACvD,IAAK,IAAM,KAAO,EAAQ,MAAM,sBAAwB,EAAE,CAAE,EAAO,KAAK,CACvE,OAAQ,KAAK,GACb,iBAAkB,EAAQ,GAC1B,UAAW,WACX,eAAgB,EAChB,CAAC,CACF,GAAI,EAAQ,OAAO,OAAS,aAAc,IAAK,IAAM,KAAO,EAAQ,OAAO,WAAW,sBAAwB,EAAE,CAAE,EAAO,KAAK,CAC7H,OAAQ,KAAK,GACb,iBAAkB,EAAQ,GAC1B,UAAW,WACX,eAAgB,EAChB,CAAC,CAEH,OAAO,EAER,qBAAqB,EAAQ,CAC5B,IAAM,EAAkB,KAAK,4BAA4B,CACnD,EAAgB,EAAgB,KAAM,GAAS,EAAK,gBAAkB,IAAK,IAAK,GAAoB,EAAK,cAAe,EAAO,CAAC,CACtI,GAAI,EAAe,OAAO,EAC1B,GAAI,EAAO,OAAS,EAA4B,cAAgB,EAAgB,SAAW,EAAG,OAAO,EAAgB,GAEtH,sBAAsB,EAAU,EAAY,EAAO,CAClD,OAAO,EAAM,OAAS,EAAW,UAAY,EAAQ,IAAK,KAKxD,GAA0C,SAAS,EAAyB,CAG/E,MAFA,GAAwB,MAAW,QACnC,EAAwB,UAAe,aAChC,GACN,EAAE,CAAC,CAMD,GAAgB,KAAM,CACzB,SACA,MACA,cACA,YAAY,EAAS,EAAM,EAAe,IAAK,CAC9C,KAAK,SAAW,EAChB,KAAK,MAAQ,GAAQ,EAAE,CACvB,KAAK,cAAgB,EAEtB,IAAI,SAAU,CACb,OAAO,KAAK,SAEb,IAAI,MAAO,CACV,OAAO,KAAK,MAEb,IAAI,eAAgB,CACnB,OAAO,KAAK,MAAM,KAAK,KAAK,cAAc,CAE3C,IAAI,SAAU,CACb,MAAO,CAAC,GAAG,KAAK,MAAO,KAAK,SAAS,CAAC,KAAK,KAAK,cAAc,CAE/D,IAAI,QAAS,CACZ,OAAO,KAAK,MAAM,SAAW,EAE9B,IAAI,cAAe,CAClB,OAAO,KAAK,cAEb,IAAI,aAAa,EAAc,CAC9B,KAAK,cAAgB,IAYvB,SAAS,GAAkB,EAAK,EAAW,EAAS,CACnD,IAAM,EAAS,CAAC,GAAG,EAAI,CAEvB,MADA,CAAC,EAAO,GAAY,EAAO,IAAY,CAAC,EAAO,GAAU,EAAO,GAAW,CACpE,EAMR,SAAS,GAAiB,EAAK,EAAW,EAAS,CAClD,IAAM,EAAS,CAAC,GAAG,EAAI,CACjB,CAAC,GAAS,EAAO,OAAO,EAAW,EAAE,CAE3C,OADA,EAAO,OAAO,EAAS,EAAG,EAAM,CACzB,EAIR,IAAI,EAAgB,cAAc,CAAe,CAChD,KAAO,QACP,YAAY,EAAW,CACtB,IAAM,EAAM,GAAa,EAAE,CAC3B,MAAO,CACN,MAAO,EAAI,MACX,aAAc,EAAI,aAClB,OAAQ,EAAI,OACZ,CAEF,iBAAkB,CACjB,OAAO,KAAK,OAEb,eAAgB,CACf,MAAO,GAER,4BAA6B,CAC5B,MAAO,EAAE,CAEV,QAAS,CACR,OAAO,KAAK,OAAO,QAAU,GAE9B,IAAI,OAAQ,CACX,OAAO,KAAK,OAAO,OAAS,EAAE,CAO/B,SAAS,EAAQ,EAAO,CACvB,IAAM,EAAQ,KAAK,OAAO,QAAU,EAAE,CAChC,EAAc,IAAU,IAAK,GAAoC,EAAM,OAAtC,KAAK,IAAI,EAAO,EAAM,OAAO,CACpE,EAAM,OAAO,EAAa,EAAG,EAAO,CACpC,KAAK,cAAc,CAClB,GAAG,KAAK,QACR,OAAQ,CAAE,GAAG,KAAK,OAAQ,CAC1B,CAAC,CAMH,YAAY,EAAQ,CACnB,IAAM,EAAQ,KAAK,OAAO,QAAU,EAAE,CAChC,EAAQ,EAAM,QAAQ,EAAO,CAC/B,IAAU,KACb,EAAM,OAAO,EAAO,EAAE,CACtB,KAAK,cAAc,CAClB,GAAG,KAAK,QACR,OAAQ,CAAE,GAAG,KAAK,OAAQ,CAC1B,CAAC,EAMJ,SAAS,EAAQ,CAChB,OAAO,KAAK,MAAM,SAAS,EAAO,CAGnC,IAAI,cAAe,CAClB,OAAO,KAAK,OAAO,cAAgB,GAEpC,IAAI,aAAa,EAAO,CACvB,KAAK,OAAO,aAAe,EAC3B,KAAK,cAAc,CAClB,GAAG,KAAK,QACR,OAAQ,CAAE,GAAG,KAAK,OAAQ,CAC1B,CAAC,CAKH,gBAAiB,CAChB,MAAO,CAAC,GAAG,KAAK,MAAM,CAMvB,iBAAiB,EAAM,EAAI,CAC1B,IAAM,EAAQ,KAAK,MACnB,GAAI,EAAO,GAAK,GAAQ,EAAM,QAAU,EAAK,GAAK,GAAM,EAAM,OAAQ,MAAU,MAAM,yCAAyC,EAAM,OAAS,IAAI,CAC9I,IAAS,IACb,KAAK,OAAO,MAAQ,GAAkB,EAAO,EAAM,EAAG,CACtD,KAAK,cAAc,CAClB,GAAG,KAAK,QACR,OAAQ,CAAE,GAAG,KAAK,OAAQ,CAC1B,CAAC,EAMH,cAAc,EAAI,EAAQ,CACzB,IAAM,EAAQ,KAAK,MACb,EAAS,EAAM,QAAQ,EAAG,CAC1B,EAAS,EAAM,QAAQ,EAAO,CACpC,GAAI,IAAW,GAAI,MAAU,MAAM,SAAS,EAAG,wBAAwB,KAAK,IAAI,GAAG,CACnF,GAAI,IAAW,GAAI,MAAU,MAAM,SAAS,EAAO,wBAAwB,KAAK,IAAI,GAAG,CACvF,KAAK,iBAAiB,EAAQ,EAAO,CAMtC,gBAAgB,EAAI,EAAO,CAC1B,IAAM,EAAQ,KAAK,MACb,EAAY,EAAM,QAAQ,EAAG,CACnC,GAAI,IAAc,GAAI,MAAU,MAAM,SAAS,EAAG,wBAAwB,KAAK,IAAI,GAAG,CACtF,GAAI,EAAQ,GAAK,GAAS,EAAM,OAAQ,MAAU,MAAM,yCAAyC,EAAM,OAAS,IAAI,CAChH,IAAc,IAClB,KAAK,OAAO,MAAQ,GAAiB,EAAO,EAAW,EAAM,CAC7D,KAAK,cAAc,CAClB,GAAG,KAAK,QACR,OAAQ,CAAE,GAAG,KAAK,OAAQ,CAC1B,CAAC,IAGA,GAAoB,cAAc,CAAe,CACpD,KAAO,aACP,YAAY,EAAY,CACvB,MAAO,EAAE,CAEV,iBAAkB,EAClB,eAAgB,CACf,MAAO,GAER,4BAA6B,CAC5B,MAAO,EAAE,GAGL,GAA0B,CAC9B,MAAU,EACV,aAAe,GAChB,CACK,GAAqB,GAAa,KAAY,GAcpD,SAAS,GAAe,EAAS,EAAgB,CAChD,GAAI,GAAkB,EAAQ,SAAS,CAAE,CACxC,IAAM,EAAe,GAAwB,EAAQ,UACrD,OAAO,IAAI,EAAa,EAAQ,CAEjC,GAAI,GAAkB,EAAQ,YAAY,EAAgB,CACzD,IAAM,EAAe,EAAe,EAAQ,UAC5C,OAAO,IAAI,EAAa,EAAQ,CAEjC,MAAU,MAAM,sBAAsB,EAAQ,WAAW,CAK1D,SAAS,GAAmB,EAAgB,CAC3C,MAAO,CACN,GAAG,GACH,GAAG,EACH,CAQF,IAAM,GAAwB,wGAGxB,EAAkB,GAAW,CAClC,GAAI,EAAO,MAAM,GAAK,GAAI,MAAU,MAAM,yBAAyB,EAEhE,GAAyB,MAAM,CAAuB,CACzD,cACA,aAAc,CACb,KAAK,cAAgB,EAAE,CAExB,WAAW,EAAQ,EAAY,EAAS,CAEvC,GADA,EAAe,EAAO,CAClB,CAAC,KAAK,gBAAgB,GAAS,CAClC,GAAI,CAAC,EAAS,OACd,KAAK,cAAc,GAAU,EAAE,CAE3B,EACA,KAAK,cAAc,GAAQ,GAAc,EADhC,OAAO,KAAK,cAAc,GAAQ,GAGjD,gBAAgB,EAAQ,EAAS,CAEhC,GADA,EAAe,EAAO,CAClB,CAAC,KAAK,gBAAgB,GAAS,CAClC,GAAI,CAAC,EAAS,OACd,KAAK,cAAc,GAAU,EAAE,CAEhC,KAAK,cAAc,GAAU,GAAW,EAAE,CAE3C,IAAI,SAAU,CACb,OAAO,OAAO,KAAK,KAAK,eAAiB,EAAE,CAAC,CAE7C,gBAAgB,EAAQ,CACvB,OAAO,KAAK,gBAAgB,GAE7B,WAAW,EAAQ,EAAY,EAAgB,CAC9C,IAAM,EAAU,KAAK,gBAAgB,KAAU,GAC/C,GAAI,EAAS,OAAO,EACpB,GAAI,EAAgB,OAAO,KAAK,gBAAgB,KAAkB,GAMnE,OAAQ,CACP,IAAM,EAAS,IAAI,EACnB,IAAK,IAAM,KAAU,KAAK,QAAS,CAClC,IAAM,EAAgB,KAAK,gBAAgB,EAAO,CAC7C,GACL,EAAO,gBAAgB,EAAQ,EAAsB,EAAc,CAAC,CAErE,OAAO,EAKR,iBAAiB,EAAY,CAC5B,IAAK,IAAM,KAAU,KAAK,QAAS,OAAO,KAAK,gBAAgB,KAAU,GAK1E,4BAA4B,EAAQ,CACnC,IAAK,IAAM,KAAU,KAAK,QAAS,CAClC,IAAM,EAAgB,KAAK,gBAAgB,GACtC,KACL,IAAK,IAAM,KAAc,OAAO,KAAK,EAAc,EAAM,IAAe,GAAU,EAAW,WAAW,EAAS,IAAI,GAAE,OAAO,EAAc,IAQ9I,SAAU,CACT,IAAK,IAAM,KAAU,KAAK,QAAS,CAClC,IAAM,EAAgB,KAAK,gBAAgB,GACtC,GACD,OAAO,KAAK,EAAc,CAAC,SAAW,GAAG,OAAO,KAAK,gBAAgB,GAE1E,OAAO,KAAK,QAAQ,OAAS,EAAI,KAAO,IAAK,KAG3C,EAAqB,KAAM,CAC9B,cACA,YAAY,EAAc,CACzB,KAAK,cAAgB,GAAgB,EAAE,CAExC,WAAY,CACP,QAAK,QAAQ,SAAW,EAC5B,OAAO,KAAK,cAEb,IAAI,SAAU,CACb,OAAO,OAAO,KAAK,KAAK,cAAc,CAEvC,aAAa,EAAQ,CACpB,EAAe,EAAO,CACtB,OAAO,KAAK,cAAc,GAE3B,aAAa,EAAW,EAAW,CAClC,EAAe,EAAU,CACzB,EAAe,EAAU,CACrB,KAAK,cAAc,KACtB,KAAK,cAAc,GAAa,KAAK,cAAc,GACnD,OAAO,KAAK,cAAc,IAG5B,cAAc,EAAQ,EAAW,CAChC,EAAe,EAAO,CACtB,EAAe,EAAU,CACrB,KAAK,cAAc,KAAS,KAAK,cAAc,GAAa,EAAsB,KAAK,cAAc,GAAQ,EAElH,IAAI,mBAAoB,CACvB,IAAM,EAAe,EAAE,CACvB,IAAK,IAAM,KAAU,KAAK,QAAS,CAClC,IAAM,EAAmB,KAAK,gBAAgB,IAAS,kBACnD,IAAkB,EAAa,GAAU,GAE9C,OAAO,EAER,IAAI,mBAAoB,CACvB,IAAM,EAAe,EAAE,CACvB,IAAK,IAAM,KAAU,KAAK,QAAS,CAClC,IAAM,EAAmB,KAAK,gBAAgB,IAAS,kBACnD,IAAkB,EAAa,GAAU,GAE9C,OAAO,EAER,IAAI,oBAAqB,CACxB,IAAM,EAAe,EAAE,CACvB,IAAK,IAAM,KAAU,KAAK,QAAS,CAClC,IAAM,EAAmB,KAAK,gBAAgB,IAAS,mBACnD,IAAkB,EAAa,GAAU,GAE9C,OAAO,EAER,qBAAqB,EAAQ,EAAS,CAErC,GADA,EAAe,EAAO,CAClB,CAAC,KAAK,cAAc,GAAS,CAChC,GAAI,CAAC,EAAS,OACd,KAAK,cAAc,GAAU,EAAE,CAEhC,KAAK,cAAc,GAAQ,kBAAoB,EAEhD,qBAAqB,EAAQ,EAAS,CAErC,GADA,EAAe,EAAO,CAClB,CAAC,KAAK,cAAc,GAAS,CAChC,GAAI,CAAC,EAAS,OACd,KAAK,cAAc,GAAU,EAAE,CAEhC,KAAK,cAAc,GAAQ,kBAAoB,EAEhD,sBAAsB,EAAQ,EAAS,CAEtC,GADA,EAAe,EAAO,CAClB,CAAC,KAAK,cAAc,GAAS,CAChC,GAAI,CAAC,EAAS,OACd,KAAK,cAAc,GAAU,EAAE,CAEhC,KAAK,cAAc,GAAQ,mBAAqB,EAEjD,oBAAoB,EAAQ,CAC3B,IAAM,EAAmB,IAAI,GAC7B,IAAK,IAAM,KAAU,KAAK,QAAS,CAClC,IAAM,EAAmB,KAAK,gBAAgB,GAAQ,mBAAmB,GACzE,EAAiB,gBAAgB,EAAQ,EAAiB,CAE3D,OAAO,EAAiB,QAAQ,OAAS,EAAI,EAAmB,IAAK,GAOtE,oBAAoB,EAAQ,EAAa,CACxC,IAAM,EAAwB,GAAa,OAAO,CAAC,SAAS,CAE5D,GADA,GAAuB,QAAQ,QAAS,GAAW,EAAe,EAAO,CAAC,CACrE,EAEE,CACN,IAAM,EAAkB,EAAsB,QAC9C,IAAK,IAAM,KAAU,EAAsB,KAAK,QAAQ,SAAS,EAAO,GAAE,KAAK,cAAc,GAAU,EAAE,EACzG,IAAK,IAAM,KAAU,KAAK,QAAa,EAAgB,SAAS,EAAO,EACjE,KAAK,cAAc,KAAS,KAAK,cAAc,GAAU,EAAE,EAC3D,KAAK,cAAc,GAAQ,mBAAkB,KAAK,cAAc,GAAQ,iBAAmB,EAAE,EAClG,KAAK,cAAc,GAAQ,iBAAiB,GAAU,EAAsB,gBAAgB,EAAO,EAC7F,OAAO,KAAK,cAAc,GAAQ,mBAAmB,YARvD,IAAM,KAAU,KAAK,QAAa,KAAK,cAAc,GAAQ,mBAAmB,IAAS,OAAO,KAAK,cAAc,GAAQ,mBAAmB,GAiBrJ,sBAAsB,EAAS,EAAQ,EAAQ,CAC9C,IAAK,IAAM,KAAU,KAAK,QAAS,CAClC,IAAM,EAAmB,KAAK,gBAAgB,GAAQ,mBAAmB,GACzE,GAAI,MACE,IAAM,KAAO,OAAO,KAAK,EAAiB,EAAM,EAAI,WAAW,EAAS,IAAI,EAAI,IAAQ,KAC5F,EAAiB,EAAI,QAAQ,EAAQ,EAAO,EAAI,CAAE,GAAG,EAAiB,GAAM,CAC5E,OAAO,EAAiB,KAU5B,mBAAmB,EAAQ,EAAc,CACxC,IAAK,IAAM,KAAU,KAAK,QAAS,CAClC,IAAM,EAAmB,KAAK,gBAAgB,GAAQ,mBAAmB,GACzE,GAAI,MACE,IAAM,KAAO,OAAO,KAAK,EAAiB,EAAM,EAAI,WAAW,EAAe,IAAI,EAAI,IAAQ,IAAc,OAAO,EAAiB,IAQ5I,cAAc,EAAI,CACjB,IAAK,IAAM,KAAU,KAAK,QAAS,OAAO,KAAK,cAAc,GAAQ,mBAAmB,KAKtF,GAA8B,SAAS,EAAa,CAIvD,MAHA,GAAY,SAAc,WAC1B,EAAY,MAAW,QACvB,EAAY,GAAQ,KACb,GACN,EAAE,CAAC,CACL,SAAS,GAA2B,EAAO,CAC1C,OAAQ,EAAM,KAAd,CACC,IAAK,YAAa,OAAO,EAAM,SAAS,OAAS,EACjD,IAAK,UAAW,OAAO,EAAM,SAAS,OAAS,EAC/C,IAAK,aAAc,OAAO,EAAM,MAAM,KAAM,GAAS,EAAK,SAAS,KAAM,GAAc,EAAU,SAAS,OAAS,EAAE,CAAC,CACtH,IAAK,QAAS,MAAO,GACrB,IAAK,UAAW,MAAO,GACvB,IAAK,YAAa,MAAO,GACzB,IAAK,iBAAkB,MAAO,IAGhC,SAAS,GAA6B,EAAS,CAC9C,OAAO,EAAQ,IAAI,OAAO,KAAM,GAAU,GAA2B,EAAM,CAAC,CAE7E,SAAS,GAAsB,EAAO,GAAI,CACzC,MAAO,CACN,KAAM,WACN,QAAS,EACT,IAAK,CACJ,KAAM,MACN,OAAQ,CAAC,CACR,KAAM,YACN,SAAU,EAAK,OAAS,EAAI,EAAK,MAAM;EAAK,CAAC,SAAS,EAAM,IAAU,CACrE,IAAM,EAAQ,EAAE,CAMhB,OALI,EAAQ,GAAG,EAAM,KAAK,CAAE,KAAM,YAAa,CAAC,CAC5C,EAAK,OAAS,GAAG,EAAM,KAAK,CAC/B,KAAM,OACN,KAAM,EACN,CAAC,CACK,GACN,CAAG,EAAE,CACP,CAAC,CACF,CACD,CAEF,SAAS,GAA6B,EAAU,CAC/C,OAAO,EAAS,IAAK,GAAW,CAC/B,OAAQ,EAAO,KAAf,CACC,IAAK,OAAQ,OAAO,EAAO,KAC3B,IAAK,WAAY,MAAO,IAAI,EAAO,IAAI,GACvC,IAAK,YAAa,MAAO;IAEzB,CAAC,KAAK,GAAG,CAEZ,SAAS,EAA4B,EAAS,CAC7C,OAAO,EAAQ,IAAK,GAAW,CAC9B,OAAQ,EAAO,KAAf,CACC,IAAK,OAAQ,OAAO,EAAO,KAC3B,IAAK,WAAY,MAAO,IAAI,EAAO,IAAI,GACvC,IAAK,OAAQ,OAAO,GAA6B,EAAO,SAAS,CACjE,IAAK,YAAa,MAAO;EACzB,IAAK,kBAAmB,MAAO,KAE/B,CAAC,KAAK,GAAG,CAEZ,SAAS,GAA2B,EAAY,CAC/C,OAAO,EAAW,IAAK,GAAc,EAA4B,EAAU,SAAS,CAAC,CAAC,KAAK;EAAK,CAEjG,SAAS,GAAsB,EAAO,CACrC,OAAQ,EAAM,KAAd,CACC,IAAK,YAAa,OAAO,EAA4B,EAAM,SAAS,CACpE,IAAK,UAAW,OAAO,EAA4B,EAAM,SAAS,CAClE,IAAK,aAAc,OAAO,EAAM,MAAM,IAAK,GAAS,GAA2B,EAAK,SAAS,CAAC,CAAC,KAAK;EAAK,CACzG,IAAK,QAAS,CACb,IAAM,EAAc,EAAM,QAAU,GAA2B,EAAM,QAAQ,CAAG,GAChF,MAAO,CAAC,EAAM,KAAO,GAAI,EAAY,CAAC,OAAO,QAAQ,CAAC,KAAK;EAAK,CAEjE,IAAK,UAAW,MAAO,CAAC,EAAM,MAAQ,EAA4B,EAAM,MAAM,CAAG,GAAI,GAA2B,EAAM,SAAS,CAAC,CAAC,OAAO,QAAQ,CAAC,KAAK;EAAK,CAC3J,IAAK,YAAa,MAAO,GACzB,IAAK,iBAAkB,MAAO,IAGhC,SAAS,GAAgC,EAAS,CACjD,OAAO,EAAQ,IAAI,OAAO,IAAK,GAAU,GAAsB,EAAM,CAAC,CAAC,OAAQ,GAAS,EAAK,OAAS,EAAE,CAAC,KAAK;EAAK,CAAC,MAAM,CAE3H,SAAS,GAAoB,EAAS,CAGrC,OAFK,EACD,EAAQ,OAAS,WACd,GAAgC,EAAQ,CADP,EAAQ,SAAW,GADtC,GAItB,SAAS,GAAe,EAAS,CAGhC,OAFK,EACD,EAAQ,OAAS,WACd,CAAC,GAA6B,EAAQ,CADL,EAAQ,QAAQ,MAAM,CAAC,SAAW,EADrD,GAItB,SAAS,GAA0B,EAAS,CAC3C,GAAI,CAAC,GAAW,EAAQ,OAAS,WAAY,MAAO,EAAE,CACtD,IAAM,EAAS,EAAE,CAOjB,OANA,EAAQ,IAAI,OAAO,SAAS,EAAO,IAAe,CAC7C,EAAM,OAAS,SAAW,EAAM,OAAO,OAAS,SAAS,EAAO,KAAK,CACxE,QAAS,EAAM,OAAO,QACtB,aACA,CAAC,EACD,CACK,EAIR,IAAI,GAAS,MAAM,CAAO,CACzB,gBACA,SACA,YAA8B,IAAI,IAClC,gBAAkC,IAAI,IACtC,QAA0B,IAAI,IAC9B,cACA,YAAY,EAAgB,CAC3B,KAAK,eAAiB,EACtB,KAAK,cAAgB,IAAI,EAG1B,mBAAoB,CACnB,OAAO,KAAK,eAMb,kBAAkB,EAAS,CAC1B,OAAO,GAAe,EAAS,KAAK,eAAe,CAKpD,OAAO,kBAAkB,EAAgB,EAAW,CACnD,IAAM,EAAS,GAAa,SACtB,EAAY,CACjB,QAAS,GACT,YAAa,CAAC,CACb,GAAI,GAAY,CAChB,IAAK,EACL,SAAU,QACV,OAAQ,CACP,OAAQ,GACR,MAAO,EAAE,CACT,aAAc,GACd,CACD,CAAC,CACF,CACD,OAAO,EAAO,SAAS,EAAW,EAAe,CAElD,OAAO,SAAS,EAAM,EAAgB,CACrC,IAAM,EAAS,IAAI,EAAO,EAAe,CACnC,EAAY,EAClB,GAAI,EAAU,UAAY,wGAAyG,MAAU,MAAM,8BAA8B,EAAU,UAAU,CAErM,GADA,EAAO,YAA8B,IAAI,IACrC,CAAC,EAAU,aAAe,EAAU,YAAY,SAAW,EAAG,MAAU,MAAM,0BAA0B,CAU5G,OATA,EAAU,YAAY,QAAS,GAAS,CACvC,IAAM,EAAa,GAAe,EAAM,EAAe,CACvD,EAAO,YAAY,IAAI,EAAW,GAAI,EAAW,EAChD,CACE,EAAU,iBAAgB,EAAO,gBAAkB,GAA0B,EAAU,eAAe,EACtG,EAAU,SAAQ,EAAO,QAAU,IAAI,IAAI,OAAO,QAAQ,EAAU,OAAO,CAAC,EAChF,EAAO,cAAgB,IAAI,EAAmB,EAAU,aAAa,CACjE,EAAU,kBAAiB,EAAO,gBAAkB,EAAU,iBAC9D,EAAU,WAAU,EAAO,SAAW,EAAU,UAC7C,EAER,WAAY,CACX,IAAM,EAAO,CACZ,QAAS,GACT,YAAa,MAAM,KAAK,KAAK,YAAY,QAAQ,CAAC,CAAC,IAAK,GAAS,EAAK,QAAQ,CAC9E,CAMD,MALA,GAAK,aAAe,KAAK,eAAe,WAAW,CAC/C,KAAK,kBAAiB,EAAK,eAAiB,GAAwB,KAAK,gBAAgB,EACzF,KAAK,SAAW,KAAK,QAAQ,KAAO,IAAG,EAAK,OAAS,OAAO,YAAY,KAAK,QAAQ,SAAS,CAAC,EAC/F,KAAK,kBAAiB,EAAK,gBAAkB,KAAK,iBAClD,KAAK,WAAU,EAAK,SAAW,KAAK,UACjC,EAER,IAAI,WAAY,CACV,QAAK,SACV,OAAO,KAAK,SAAS,IAEtB,IAAI,SAAU,CACb,OAAO,KAAK,eAAe,SAAW,EAAE,CAEzC,IAAI,UAAW,CACd,OAAO,MAAM,KAAK,KAAK,YAAY,QAAQ,CAAC,CAAC,KAAM,GAAS,aAAgB,GAAiB,EAAK,OAAO,CAE1G,IAAI,UAAW,CACd,IAAM,EAAQ,EAAE,CAChB,IAAK,IAAM,KAAQ,KAAK,YAAY,QAAQ,CAAE,CAC7C,IAAM,EAAO,KAAK,YAAY,EAAK,GAAG,CACtC,EAAM,KAAK,CACV,OAAQ,EAAK,GACb,IAAK,EAAK,IACV,QAAS,EAAK,IAAK,GAAO,KAAK,YAAY,IAAI,EAAG,EAAE,KAAO,GAAG,CAC9D,OACA,CAAC,CAEH,OAAO,EAER,YAAY,EAAQ,CACnB,IAAM,EAAO,KAAK,YAAY,IAAI,EAAO,CACzC,GAAI,CAAC,EAAM,MAAU,MAAM,QAAQ,EAAO,YAAY,CACtD,GAAI,aAAgB,GAAiB,EAAK,QAAQ,CAAE,MAAO,EAAE,CAC7D,IAAM,EAAa,KAAK,cAAc,EAAO,CAC7C,GAAI,CAAC,EAAY,MAAU,MAAM,mBAAmB,EAAO,YAAY,CACvE,MAAO,CAAC,GAAG,KAAK,YAAY,EAAW,GAAG,CAAE,EAAW,GAAG,CAE3D,WAAW,EAAQ,CAClB,IAAM,EAAO,KAAK,YAAY,IAAI,EAAO,CACzC,GAAI,CAAC,EAAM,OACX,IAAM,EAAU,KAAK,YAAY,EAAO,CAAC,IAAK,GAAO,KAAK,YAAY,IAAI,EAAG,EAAE,KAAO,GAAG,CACzF,OAAO,IAAI,GAAc,EAAK,IAAK,EAAQ,CAE5C,cAAc,EAAQ,CACrB,IAAM,EAAO,KAAK,YAAY,IAAI,EAAO,CACzC,GAAI,CAAC,EAAM,MAAU,MAAM,QAAQ,EAAO,YAAY,CACtD,GAAI,aAAgB,GAAiB,EAAK,QAAQ,CAAE,OACpD,IAAM,EAAa,MAAM,KAAK,KAAK,YAAY,QAAQ,CAAC,CAAC,KAAM,GAAS,aAAgB,GAAiB,EAAK,OAAO,OAAO,SAAS,EAAO,CAAC,CACxI,KACL,OAAO,EAER,iBAAiB,EAAU,CAC1B,IAAM,EAAa,KAAK,YAAY,IAAI,EAAS,CAEjD,MADI,CAAC,GAAc,EAAE,aAAsB,GAAuB,EAAE,CAC7D,EAAW,OAAO,OAAO,IAAK,GAAO,KAAK,YAAY,IAAI,EAAG,CAAC,EAAE,OAAQ,GAAS,IAAS,IAAK,GAAE,EAAI,EAAE,CAE/G,YAAY,EAAQ,CAEnB,OADK,KAAK,YAAY,IAAI,EAAO,EAC1B,KAAK,cAAc,EAAO,EAAE,OAAO,IAAK,GAAO,KAAK,YAAY,IAAI,EAAG,CAAC,EAAE,OAAQ,GAAS,IAAS,IAAK,GAAE,EADxE,EAAE,CAG7C,IAAI,cAAe,CAElB,MADA,CAAyB,KAAK,gBAAgB,IAAI,EAC3C,KAAK,cAEb,oBAAoB,EAAI,CACvB,GAAI,CAAC,KAAK,YAAY,IAAI,EAAG,CAAE,MAAU,MAAM,QAAQ,EAAG,YAAY,CACtE,OAAO,KAAK,eAAe,oBAAoB,EAAG,CAEnD,iBAAiB,EAAkB,CAClC,OAAO,KAAK,iBAAiB,IAAI,EAAiB,CAEnD,iBAAiB,EAAkB,EAAe,CACjD,AAA2B,KAAK,kBAAkC,IAAI,IACtE,KAAK,iBAAiB,IAAI,EAAkB,EAAc,CAE3D,oBAAoB,EAAkB,CACrC,KAAK,iBAAiB,OAAO,EAAiB,CAE/C,sBAAuB,CACtB,OAAO,MAAM,KAAK,KAAK,iBAAiB,MAAM,EAAI,EAAE,CAAC,CAEtD,SAAS,EAAS,CACjB,IAAM,EAAQ,KAAK,SAAS,IAAI,EAAQ,CACxC,OAAO,EAAQ,EAAsB,EAAM,CAAG,IAAK,GAEpD,SAAS,EAAS,EAAO,CACxB,AAAmB,KAAK,UAA0B,IAAI,IACtD,KAAK,QAAQ,IAAI,EAAS,EAAsB,EAAM,CAAC,CAExD,YAAY,EAAS,CACpB,KAAK,SAAS,OAAO,EAAQ,CAE9B,SAAS,EAAS,CACjB,OAAO,KAAK,SAAS,IAAI,EAAQ,EAAI,GAEtC,aAAc,CACb,OAAO,MAAM,KAAK,KAAK,SAAS,MAAM,EAAI,EAAE,CAAC,CAE9C,WAAY,CACX,OAAO,IAAI,IAAI,MAAM,KAAK,KAAK,SAAS,SAAS,EAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAS,KAAW,CAAC,EAAS,EAAsB,EAAM,CAAC,CAAC,CAAC,CAE7H,eAAe,EAAe,CAC7B,IAAM,EAAS,EAAE,CACX,GAAqB,EAAS,EAAY,EAAY,EAAQ,IAAW,CAC9E,IAAK,IAAM,KAAS,GAA0B,EAAQ,CACjD,GAAiB,EAAM,UAAY,GACvC,EAAO,KAAK,CACX,QAAS,EAAM,QACf,SACA,SACA,aACA,aACA,WAAY,EAAM,WAClB,CAAC,EAGE,EAAyB,KAAK,eAAe,WAAW,CACxD,EAAa,KAAK,UAAU,GAClC,GAAI,CAAC,EAAwB,OAAO,EACpC,IAAK,GAAM,CAAC,EAAQ,KAAuB,OAAO,QAAQ,EAAuB,CAAE,CAClF,IAAK,GAAM,CAAC,EAAY,KAAY,OAAO,QAAQ,EAAmB,mBAAqB,EAAE,CAAC,CAAE,EAAkB,EAAS,aAAc,EAAY,EAAQ,EAAW,CACxK,IAAK,GAAM,CAAC,EAAY,KAAY,OAAO,QAAQ,EAAmB,mBAAqB,EAAE,CAAC,CAAE,EAAkB,EAAS,aAAc,EAAY,EAAQ,EAAW,CACxK,IAAK,GAAM,CAAC,EAAY,KAAY,OAAO,QAAQ,EAAmB,oBAAsB,EAAE,CAAC,CAAE,EAAkB,EAAS,qBAAsB,EAAY,EAAQ,EAAW,CACjL,IAAK,GAAM,CAAC,EAAQ,KAAqB,OAAO,QAAQ,EAAmB,kBAAoB,EAAE,CAAC,CAAE,IAAK,GAAM,CAAC,EAAY,KAAY,OAAO,QAAQ,GAAoB,EAAE,CAAC,CAAE,EAAkB,EAAS,kBAAmB,EAAY,EAAQ,EAAO,CAE1P,OAAO,EAER,+BAA+B,EAAQ,CACtC,IAAI,EAAY,EAAE,CAClB,IAAK,IAAM,KAAQ,KAAK,YAAY,QAAQ,CAAE,EAAY,CACzD,GAAG,EACH,GAAG,EAAK,+BAA+B,EAAO,CAC9C,CACD,OAAO,EAER,4BAA6B,CAC5B,OAAO,MAAM,KAAK,KAAK,YAAY,QAAQ,CAAC,CAAC,IAAK,IAAU,CAC3D,OAAQ,EAAK,GACb,MAAO,EAAK,4BAA4B,CACxC,EAAE,CAOJ,mBAAmB,EAAW,CAC7B,IAAM,EAAS,EAAE,CACjB,IAAK,IAAM,KAAQ,KAAK,YAAY,QAAQ,CACvC,GAAa,EAAK,KAAO,GAAa,CAAC,KAAK,eAAe,EAAK,GAAI,EAAU,EAClF,EAAO,KAAK,GAAG,EAAK,oBAAoB,CAAC,CAE1C,GAAI,KAAK,gBAAiB,IAAK,GAAM,CAAC,EAAkB,KAAkB,KAAK,gBAAgB,SAAS,CAAE,IAAK,IAAM,KAAO,EAAc,YAAY,sBAAwB,EAAE,CAAE,EAAO,KAAK,CAC7L,OAAQ,EACR,UAAW,iBACX,eAAgB,EAChB,CAAC,CACF,OAAO,EAER,eAAe,EAAU,EAAY,CAEpC,OADI,IAAa,EAAmB,GAC7B,KAAK,YAAY,EAAS,CAAC,SAAS,EAAW,GC93C3C,GAAa,SAuCb,GAAqB,OAOrB,GAAoB,MAmCpB,GAAiB,MAOjB,GAAe,KAiDf,GAAe,KAAgB,GAOf,GAAe,EAOf,GAAe,GAOE,GAOG,EAajD,IAAa,GAAsB,OAAO,IAAI,oBAAoB,CClLlE,SAAgB,EAAc,EAAM,EAAO,CAQzC,OAPI,OAAO,GAAS,WAAmB,EAAK,EAAM,CAE9C,GAAQ,OAAO,GAAS,UAAY,MAAuB,EACtD,EAAK,IAAqB,EAAM,CAErC,aAAgB,KAAa,IAAI,EAAK,YAAY,EAAM,CAErD,IAAI,KAAK,EAAM,CCLxB,SAAgB,EAAO,EAAU,EAAS,CAExC,OAAO,EAAc,GAAW,EAAU,EAAS,CC1CrD,IAAI,GAAiB,EAAE,CAEvB,SAAgB,GAAoB,CAClC,OAAO,GC+BT,SAAgB,EAAY,EAAM,EAAS,CACzC,IAAM,EAAiB,GAAmB,CACpC,EACJ,GAAS,cACT,GAAS,QAAQ,SAAS,cAC1B,EAAe,cACf,EAAe,QAAQ,SAAS,cAChC,EAEI,EAAQ,EAAO,EAAM,GAAS,GAAG,CACjC,EAAM,EAAM,QAAQ,CACpB,GAAQ,EAAM,EAAe,EAAI,GAAK,EAAM,EAIlD,OAFA,EAAM,QAAQ,EAAM,SAAS,CAAG,EAAK,CACrC,EAAM,SAAS,EAAG,EAAG,EAAG,EAAE,CACnB,ECnBT,SAAgB,EAAe,EAAM,EAAS,CAC5C,OAAO,EAAY,EAAM,CAAE,GAAG,EAAS,aAAc,EAAG,CAAC,CCH3D,SAAgB,GAAe,EAAM,EAAS,CAC5C,IAAM,EAAQ,EAAO,EAAM,GAAS,GAAG,CACjC,EAAO,EAAM,aAAa,CAE1B,EAA4B,EAAc,EAAO,EAAE,CACzD,EAA0B,YAAY,EAAO,EAAG,EAAG,EAAE,CACrD,EAA0B,SAAS,EAAG,EAAG,EAAG,EAAE,CAC9C,IAAM,EAAkB,EAAe,EAA0B,CAE3D,EAA4B,EAAc,EAAO,EAAE,CACzD,EAA0B,YAAY,EAAM,EAAG,EAAE,CACjD,EAA0B,SAAS,EAAG,EAAG,EAAG,EAAE,CAC9C,IAAM,EAAkB,EAAe,EAA0B,CAO/D,OALE,EAAM,SAAS,EAAI,EAAgB,SAAS,CACvC,EAAO,EACL,EAAM,SAAS,EAAI,EAAgB,SAAS,CAC9C,EAEA,EAAO,EClClB,SAAgB,GAAgC,EAAM,CACpD,IAAM,EAAQ,EAAO,EAAK,CACpB,EAAU,IAAI,KAClB,KAAK,IACH,EAAM,aAAa,CACnB,EAAM,UAAU,CAChB,EAAM,SAAS,CACf,EAAM,UAAU,CAChB,EAAM,YAAY,CAClB,EAAM,YAAY,CAClB,EAAM,iBAAiB,CACxB,CACF,CAED,OADA,EAAQ,eAAe,EAAM,aAAa,CAAC,CACnC,EAAO,CAAC,ECzBlB,SAAgB,GAAe,EAAS,GAAG,EAAO,CAChD,IAAM,EAAY,EAAc,KAC9B,KACA,GAAW,EAAM,KAAM,GAAS,OAAO,GAAS,SAAS,CAC1D,CACD,OAAO,EAAM,IAAI,EAAU,CCqB7B,SAAgB,GAAW,EAAM,EAAS,CACxC,IAAM,EAAQ,EAAO,EAAM,GAAS,GAAG,CAEvC,OADA,EAAM,SAAS,EAAG,EAAG,EAAG,EAAE,CACnB,ECST,SAAgB,GAAyB,EAAW,EAAa,EAAS,CACxE,GAAM,CAAC,EAAY,GAAgB,GACjC,GAAS,GACT,EACA,EACD,CAEK,EAAkB,GAAW,EAAW,CACxC,EAAoB,GAAW,EAAa,CAE5C,EACJ,CAAC,EAAkB,GAAgC,EAAgB,CAC/D,EACJ,CAAC,EAAoB,GAAgC,EAAkB,CAKzE,OAAO,KAAK,OAAO,EAAiB,GAAoB,GAAkB,CCzB5E,SAAgB,GAAmB,EAAM,EAAS,CAChD,IAAM,EAAO,GAAe,EAAM,EAAQ,CACpC,EAAkB,EAAc,GAAS,IAAM,EAAM,EAAE,CAG7D,OAFA,EAAgB,YAAY,EAAM,EAAG,EAAE,CACvC,EAAgB,SAAS,EAAG,EAAG,EAAG,EAAE,CAC7B,EAAe,EAAgB,CCNxC,SAAgB,GAAO,EAAO,CAC5B,OACE,aAAiB,MAChB,OAAO,GAAU,UAChB,OAAO,UAAU,SAAS,KAAK,EAAM,GAAK,gBCFhD,SAAgB,GAAQ,EAAM,CAC5B,MAAO,EAAG,CAAC,GAAO,EAAK,EAAI,OAAO,GAAS,UAAa,MAAM,CAAC,EAAO,EAAK,CAAC,ECP9E,SAAgB,GAAY,EAAM,EAAS,CACzC,IAAM,EAAQ,EAAO,EAAM,GAAS,GAAG,CAGvC,OAFA,EAAM,YAAY,EAAM,aAAa,CAAE,EAAG,EAAE,CAC5C,EAAM,SAAS,EAAG,EAAG,EAAG,EAAE,CACnB,EChCT,IAAM,GAAuB,CAC3B,iBAAkB,CAChB,IAAK,qBACL,MAAO,8BACR,CAED,SAAU,CACR,IAAK,WACL,MAAO,oBACR,CAED,YAAa,gBAEb,iBAAkB,CAChB,IAAK,qBACL,MAAO,8BACR,CAED,SAAU,CACR,IAAK,WACL,MAAO,oBACR,CAED,YAAa,CACX,IAAK,eACL,MAAO,wBACR,CAED,OAAQ,CACN,IAAK,SACL,MAAO,kBACR,CAED,MAAO,CACL,IAAK,QACL,MAAO,iBACR,CAED,YAAa,CACX,IAAK,eACL,MAAO,wBACR,CAED,OAAQ,CACN,IAAK,SACL,MAAO,kBACR,CAED,aAAc,CACZ,IAAK,gBACL,MAAO,yBACR,CAED,QAAS,CACP,IAAK,UACL,MAAO,mBACR,CAED,YAAa,CACX,IAAK,eACL,MAAO,wBACR,CAED,OAAQ,CACN,IAAK,SACL,MAAO,kBACR,CAED,WAAY,CACV,IAAK,cACL,MAAO,uBACR,CAED,aAAc,CACZ,IAAK,gBACL,MAAO,yBACR,CACF,CAEY,IAAkB,EAAO,EAAO,IAAY,CACvD,IAAI,EAEE,EAAa,GAAqB,GAiBxC,MAhBA,CAKE,EALE,OAAO,GAAe,SACf,EACA,IAAU,EACV,EAAW,IAEX,EAAW,MAAM,QAAQ,YAAa,EAAM,UAAU,CAAC,CAG9D,GAAS,UACP,EAAQ,YAAc,EAAQ,WAAa,EACtC,MAAQ,EAER,EAAS,OAIb,GCnGT,SAAgB,EAAkB,EAAM,CACtC,OAAQ,EAAU,EAAE,GAAK,CAEvB,IAAM,EAAQ,EAAQ,MAAQ,OAAO,EAAQ,MAAM,CAAG,EAAK,aAE3D,OADe,EAAK,QAAQ,IAAU,EAAK,QAAQ,EAAK,eCmB5D,IAAa,GAAa,CACxB,KAAM,EAAkB,CACtB,QAAS,CAtBX,KAAM,mBACN,KAAM,aACN,OAAQ,WACR,MAAO,aAmBI,CACT,aAAc,OACf,CAAC,CAEF,KAAM,EAAkB,CACtB,QAAS,CApBX,KAAM,iBACN,KAAM,cACN,OAAQ,YACR,MAAO,SAiBI,CACT,aAAc,OACf,CAAC,CAEF,SAAU,EAAkB,CAC1B,QAAS,CAlBX,KAAM,yBACN,KAAM,yBACN,OAAQ,qBACR,MAAO,qBAeI,CACT,aAAc,OACf,CAAC,CACH,CCtCK,GAAuB,CAC3B,SAAU,qBACV,UAAW,mBACX,MAAO,eACP,SAAU,kBACV,SAAU,cACV,MAAO,IACR,CAEY,IAAkB,EAAO,EAAO,EAAW,IACtD,GAAqB,GC6BvB,SAAgB,EAAgB,EAAM,CACpC,OAAQ,EAAO,IAAY,CACzB,IAAM,EAAU,GAAS,QAAU,OAAO,EAAQ,QAAQ,CAAG,aAEzD,EACJ,GAAI,IAAY,cAAgB,EAAK,iBAAkB,CACrD,IAAM,EAAe,EAAK,wBAA0B,EAAK,aACnD,EAAQ,GAAS,MAAQ,OAAO,EAAQ,MAAM,CAAG,EAEvD,EACE,EAAK,iBAAiB,IAAU,EAAK,iBAAiB,OACnD,CACL,IAAM,EAAe,EAAK,aACpB,EAAQ,GAAS,MAAQ,OAAO,EAAQ,MAAM,CAAG,EAAK,aAE5D,EAAc,EAAK,OAAO,IAAU,EAAK,OAAO,GAElD,IAAM,EAAQ,EAAK,iBAAmB,EAAK,iBAAiB,EAAM,CAAG,EAGrE,OAAO,EAAY,ICiGvB,IAAa,GAAW,CACtB,eAzBqB,EAAa,IAAa,CAC/C,IAAM,EAAS,OAAO,EAAY,CAS5B,EAAS,EAAS,IACxB,GAAI,EAAS,IAAM,EAAS,GAC1B,OAAQ,EAAS,GAAjB,CACE,IAAK,GACH,OAAO,EAAS,KAClB,IAAK,GACH,OAAO,EAAS,KAClB,IAAK,GACH,OAAO,EAAS,KAGtB,OAAO,EAAS,MAMhB,IAAK,EAAgB,CACnB,OAAQ,CA7JV,OAAQ,CAAC,IAAK,IAAI,CAClB,YAAa,CAAC,KAAM,KAAK,CACzB,KAAM,CAAC,gBAAiB,cAAc,CA2J5B,CACR,aAAc,OACf,CAAC,CAEF,QAAS,EAAgB,CACvB,OAAQ,CA5JV,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAI,CAC5B,YAAa,CAAC,KAAM,KAAM,KAAM,KAAK,CACrC,KAAM,CAAC,cAAe,cAAe,cAAe,cAAc,CA0JxD,CACR,aAAc,OACd,iBAAmB,GAAY,EAAU,EAC1C,CAAC,CAEF,MAAO,EAAgB,CACrB,OAAQ,CAxJV,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAI,CACpE,YAAa,CACX,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACD,CAED,KAAM,CACJ,UACA,WACA,QACA,QACA,MACA,OACA,OACA,SACA,YACA,UACA,WACA,WACD,CA2HS,CACR,aAAc,OACf,CAAC,CAEF,IAAK,EAAgB,CACnB,OAAQ,CA5HV,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAI,CAC3C,MAAO,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAK,CACjD,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAM,CAC9D,KAAM,CACJ,SACA,SACA,UACA,YACA,WACA,SACA,WACD,CAiHS,CACR,aAAc,OACf,CAAC,CAEF,UAAW,EAAgB,CACzB,OAAQ,CAlHV,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,SAAU,KACV,KAAM,IACN,QAAS,UACT,UAAW,YACX,QAAS,UACT,MAAO,QACR,CACD,YAAa,CACX,GAAI,KACJ,GAAI,KACJ,SAAU,WACV,KAAM,OACN,QAAS,UACT,UAAW,YACX,QAAS,UACT,MAAO,QACR,CACD,KAAM,CACJ,GAAI,OACJ,GAAI,OACJ,SAAU,WACV,KAAM,OACN,QAAS,UACT,UAAW,YACX,QAAS,UACT,MAAO,QACR,CAqFS,CACR,aAAc,OACd,iBAAkB,CAnFpB,OAAQ,CACN,GAAI,IACJ,GAAI,IACJ,SAAU,KACV,KAAM,IACN,QAAS,iBACT,UAAW,mBACX,QAAS,iBACT,MAAO,WACR,CACD,YAAa,CACX,GAAI,KACJ,GAAI,KACJ,SAAU,WACV,KAAM,OACN,QAAS,iBACT,UAAW,mBACX,QAAS,iBACT,MAAO,WACR,CACD,KAAM,CACJ,GAAI,OACJ,GAAI,OACJ,SAAU,WACV,KAAM,OACN,QAAS,iBACT,UAAW,mBACX,QAAS,iBACT,MAAO,WACR,CAsDmB,CAClB,uBAAwB,OACzB,CAAC,CACH,CC1LD,SAAgB,EAAa,EAAM,CACjC,OAAQ,EAAQ,EAAU,EAAE,GAAK,CAC/B,IAAM,EAAQ,EAAQ,MAEhB,EACH,GAAS,EAAK,cAAc,IAC7B,EAAK,cAAc,EAAK,mBACpB,EAAc,EAAO,MAAM,EAAa,CAE9C,GAAI,CAAC,EACH,OAAO,KAET,IAAM,EAAgB,EAAY,GAE5B,EACH,GAAS,EAAK,cAAc,IAC7B,EAAK,cAAc,EAAK,mBAEpB,EAAM,MAAM,QAAQ,EAAc,CACpC,GAAU,EAAgB,GAAY,EAAQ,KAAK,EAAc,CAAC,CAElE,GAAQ,EAAgB,GAAY,EAAQ,KAAK,EAAc,CAAC,CAEhE,EAEJ,EAAQ,EAAK,cAAgB,EAAK,cAAc,EAAI,CAAG,EACvD,EAAQ,EAAQ,cAEZ,EAAQ,cAAc,EAAM,CAC5B,EAEJ,IAAM,GAAO,EAAO,MAAM,EAAc,OAAO,CAE/C,MAAO,CAAE,QAAO,QAAM,EAI1B,SAAS,GAAQ,EAAQ,EAAW,CAClC,IAAK,IAAM,KAAO,EAChB,GACE,OAAO,UAAU,eAAe,KAAK,EAAQ,EAAI,EACjD,EAAU,EAAO,GAAK,CAEtB,OAAO,EAMb,SAAS,GAAU,EAAO,EAAW,CACnC,IAAK,IAAI,EAAM,EAAG,EAAM,EAAM,OAAQ,IACpC,GAAI,EAAU,EAAM,GAAK,CACvB,OAAO,ECpDb,SAAgB,GAAoB,EAAM,CACxC,OAAQ,EAAQ,EAAU,EAAE,GAAK,CAC/B,IAAM,EAAc,EAAO,MAAM,EAAK,aAAa,CACnD,GAAI,CAAC,EAAa,OAAO,KACzB,IAAM,EAAgB,EAAY,GAE5B,EAAc,EAAO,MAAM,EAAK,aAAa,CACnD,GAAI,CAAC,EAAa,OAAO,KACzB,IAAI,EAAQ,EAAK,cACb,EAAK,cAAc,EAAY,GAAG,CAClC,EAAY,GAGhB,EAAQ,EAAQ,cAAgB,EAAQ,cAAc,EAAM,CAAG,EAE/D,IAAM,EAAO,EAAO,MAAM,EAAc,OAAO,CAE/C,MAAO,CAAE,QAAO,OAAM,EEH1B,IAAa,EAAO,CAClB,KAAM,QACU,kBACJ,cACI,kBACN,YACH,ODsEP,cAAe,GAAoB,CACjC,aAAc,wBACd,aAAc,OACd,cAAgB,GAAU,SAAS,EAAO,GAAG,CAC9C,CAAC,CAEF,IAAK,EAAa,CAChB,cAAe,CA1FjB,OAAQ,UACR,YAAa,6DACb,KAAM,6DAwFW,CACf,kBAAmB,OACnB,cAAe,CAvFjB,IAAK,CAAC,MAAO,UAAU,CAuFN,CACf,kBAAmB,MACpB,CAAC,CAEF,QAAS,EAAa,CACpB,cAAe,CAxFjB,OAAQ,WACR,YAAa,YACb,KAAM,iCAsFW,CACf,kBAAmB,OACnB,cAAe,CArFjB,IAAK,CAAC,KAAM,KAAM,KAAM,KAAK,CAqFZ,CACf,kBAAmB,MACnB,cAAgB,GAAU,EAAQ,EACnC,CAAC,CAEF,MAAO,EAAa,CAClB,cAAe,CAvFjB,OAAQ,eACR,YAAa,sDACb,KAAM,4FAqFW,CACf,kBAAmB,OACnB,cAAe,CApFjB,OAAQ,CACN,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACD,CAED,IAAK,CACH,OACA,MACA,QACA,OACA,QACA,QACA,QACA,OACA,MACA,MACA,MACA,MACD,CAwDgB,CACf,kBAAmB,MACpB,CAAC,CAEF,IAAK,EAAa,CAChB,cAAe,CAzDjB,OAAQ,YACR,MAAO,2BACP,YAAa,kCACb,KAAM,+DAsDW,CACf,kBAAmB,OACnB,cAAe,CArDjB,OAAQ,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAM,CACzD,IAAK,CAAC,OAAQ,MAAO,OAAQ,MAAO,OAAQ,MAAO,OAAO,CAoDzC,CACf,kBAAmB,MACpB,CAAC,CAEF,UAAW,EAAa,CACtB,cAAe,CArDjB,OAAQ,6DACR,IAAK,iFAoDY,CACf,kBAAmB,MACnB,cAAe,CAnDjB,IAAK,CACH,GAAI,MACJ,GAAI,MACJ,SAAU,OACV,KAAM,OACN,QAAS,WACT,UAAW,aACX,QAAS,WACT,MAAO,SACR,CA0CgB,CACf,kBAAmB,MACpB,CAAC,CC9GK,CACP,QAAS,CACP,aAAc,EACd,sBAAuB,EACxB,CACF,CCCD,SAAgB,GAAa,EAAM,EAAS,CAC1C,IAAM,EAAQ,EAAO,EAAM,GAAS,GAAG,CAGvC,OAFa,GAAyB,EAAO,GAAY,EAAM,CACzC,CAAG,ECA3B,SAAgB,GAAW,EAAM,EAAS,CACxC,IAAM,EAAQ,EAAO,EAAM,GAAS,GAAG,CACjC,EAAQ,EAAe,EAAM,CAAG,CAAC,GAAmB,EAAM,CAKhE,OAAO,KAAK,MAAM,EAAO,GAAmB,CAAG,ECOjD,SAAgB,GAAY,EAAM,EAAS,CACzC,IAAM,EAAQ,EAAO,EAAM,GAAS,GAAG,CACjC,EAAO,EAAM,aAAa,CAE1B,EAAiB,GAAmB,CACpC,EACJ,GAAS,uBACT,GAAS,QAAQ,SAAS,uBAC1B,EAAe,uBACf,EAAe,QAAQ,SAAS,uBAChC,EAEI,EAAsB,EAAc,GAAS,IAAM,EAAM,EAAE,CACjE,EAAoB,YAAY,EAAO,EAAG,EAAG,EAAsB,CACnE,EAAoB,SAAS,EAAG,EAAG,EAAG,EAAE,CACxC,IAAM,EAAkB,EAAY,EAAqB,EAAQ,CAE3D,EAAsB,EAAc,GAAS,IAAM,EAAM,EAAE,CACjE,EAAoB,YAAY,EAAM,EAAG,EAAsB,CAC/D,EAAoB,SAAS,EAAG,EAAG,EAAG,EAAE,CACxC,IAAM,EAAkB,EAAY,EAAqB,EAAQ,CAO/D,MALE,CAAC,GAAS,CAAC,EACN,EAAO,EACL,CAAC,GAAS,CAAC,EACb,EAEA,EAAO,ECxBlB,SAAgB,GAAgB,EAAM,EAAS,CAC7C,IAAM,EAAiB,GAAmB,CACpC,EACJ,GAAS,uBACT,GAAS,QAAQ,SAAS,uBAC1B,EAAe,uBACf,EAAe,QAAQ,SAAS,uBAChC,EAEI,EAAO,GAAY,EAAM,EAAQ,CACjC,EAAY,EAAc,GAAS,IAAM,EAAM,EAAE,CAIvD,OAHA,EAAU,YAAY,EAAM,EAAG,EAAsB,CACrD,EAAU,SAAS,EAAG,EAAG,EAAG,EAAE,CAChB,EAAY,EAAW,EACzB,CCjBd,SAAgB,GAAQ,EAAM,EAAS,CACrC,IAAM,EAAQ,EAAO,EAAM,GAAS,GAAG,CACjC,EAAQ,EAAY,EAAO,EAAQ,CAAG,CAAC,GAAgB,EAAO,EAAQ,CAK5E,OAAO,KAAK,MAAM,EAAO,GAAmB,CAAG,EClDjD,SAAgB,EAAgB,EAAQ,EAAc,CAGpD,OAFa,EAAS,EAAI,IAAM,IACjB,KAAK,IAAI,EAAO,CAAC,UAAU,CAAC,SAAS,EAAc,IAC9C,CCYtB,IAAa,EAAkB,CAE7B,EAAE,EAAM,EAAO,CAUb,IAAM,EAAa,EAAK,aAAa,CAE/B,EAAO,EAAa,EAAI,EAAa,EAAI,EAC/C,OAAO,EAAgB,IAAU,KAAO,EAAO,IAAM,EAAM,EAAM,OAAO,EAI1E,EAAE,EAAM,EAAO,CACb,IAAM,EAAQ,EAAK,UAAU,CAC7B,OAAO,IAAU,IAAM,OAAO,EAAQ,EAAE,CAAG,EAAgB,EAAQ,EAAG,EAAE,EAI1E,EAAE,EAAM,EAAO,CACb,OAAO,EAAgB,EAAK,SAAS,CAAE,EAAM,OAAO,EAItD,EAAE,EAAM,EAAO,CACb,IAAM,EAAqB,EAAK,UAAU,CAAG,IAAM,EAAI,KAAO,KAE9D,OAAQ,EAAR,CACE,IAAK,IACL,IAAK,KACH,OAAO,EAAmB,aAAa,CACzC,IAAK,MACH,OAAO,EACT,IAAK,QACH,OAAO,EAAmB,GAE5B,QACE,OAAO,IAAuB,KAAO,OAAS,SAKpD,EAAE,EAAM,EAAO,CACb,OAAO,EAAgB,EAAK,UAAU,CAAG,IAAM,GAAI,EAAM,OAAO,EAIlE,EAAE,EAAM,EAAO,CACb,OAAO,EAAgB,EAAK,UAAU,CAAE,EAAM,OAAO,EAIvD,EAAE,EAAM,EAAO,CACb,OAAO,EAAgB,EAAK,YAAY,CAAE,EAAM,OAAO,EAIzD,EAAE,EAAM,EAAO,CACb,OAAO,EAAgB,EAAK,YAAY,CAAE,EAAM,OAAO,EAIzD,EAAE,EAAM,EAAO,CACb,IAAM,EAAiB,EAAM,OACvB,EAAe,EAAK,iBAAiB,CAI3C,OAAO,EAHmB,KAAK,MAC7B,EAAwB,KAAI,EAAiB,GAEP,CAAE,EAAM,OAAO,EAE1D,CClFK,EAAgB,CACpB,GAAI,KACJ,GAAI,KACJ,SAAU,WACV,KAAM,OACN,QAAS,UACT,UAAW,YACX,QAAS,UACT,MAAO,QACR,CAgDY,GAAa,CAExB,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAM,EAAM,IAAK,aAAa,CAAG,GACjC,OAAQ,EAAR,CAEE,IAAK,IACL,IAAK,KACL,IAAK,MACH,OAAO,EAAS,IAAI,EAAK,CAAE,MAAO,cAAe,CAAC,CAEpD,IAAK,QACH,OAAO,EAAS,IAAI,EAAK,CAAE,MAAO,SAAU,CAAC,CAG/C,QACE,OAAO,EAAS,IAAI,EAAK,CAAE,MAAO,OAAQ,CAAC,GAKjD,EAAG,SAAU,EAAM,EAAO,EAAU,CAElC,GAAI,IAAU,KAAM,CAClB,IAAM,EAAa,EAAK,aAAa,CAE/B,EAAO,EAAa,EAAI,EAAa,EAAI,EAC/C,OAAO,EAAS,cAAc,EAAM,CAAE,KAAM,OAAQ,CAAC,CAGvD,OAAO,EAAgB,EAAE,EAAM,EAAM,EAIvC,EAAG,SAAU,EAAM,EAAO,EAAU,EAAS,CAC3C,IAAM,EAAiB,GAAY,EAAM,EAAQ,CAE3C,EAAW,EAAiB,EAAI,EAAiB,EAAI,EAc3D,OAXI,IAAU,KAEL,EADc,EAAW,IACK,EAAE,CAIrC,IAAU,KACL,EAAS,cAAc,EAAU,CAAE,KAAM,OAAQ,CAAC,CAIpD,EAAgB,EAAU,EAAM,OAAO,EAIhD,EAAG,SAAU,EAAM,EAAO,CAIxB,OAAO,EAHa,GAAe,EAGD,CAAE,EAAM,OAAO,EAYnD,EAAG,SAAU,EAAM,EAAO,CAExB,OAAO,EADM,EAAK,aACS,CAAE,EAAM,OAAO,EAI5C,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAM,EAAU,KAAK,MAAM,EAAK,UAAU,CAAG,GAAK,EAAE,CACpD,OAAQ,EAAR,CAEE,IAAK,IACH,OAAO,OAAO,EAAQ,CAExB,IAAK,KACH,OAAO,EAAgB,EAAS,EAAE,CAEpC,IAAK,KACH,OAAO,EAAS,cAAc,EAAS,CAAE,KAAM,UAAW,CAAC,CAE7D,IAAK,MACH,OAAO,EAAS,QAAQ,EAAS,CAC/B,MAAO,cACP,QAAS,aACV,CAAC,CAEJ,IAAK,QACH,OAAO,EAAS,QAAQ,EAAS,CAC/B,MAAO,SACP,QAAS,aACV,CAAC,CAGJ,QACE,OAAO,EAAS,QAAQ,EAAS,CAC/B,MAAO,OACP,QAAS,aACV,CAAC,GAKR,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAM,EAAU,KAAK,MAAM,EAAK,UAAU,CAAG,GAAK,EAAE,CACpD,OAAQ,EAAR,CAEE,IAAK,IACH,OAAO,OAAO,EAAQ,CAExB,IAAK,KACH,OAAO,EAAgB,EAAS,EAAE,CAEpC,IAAK,KACH,OAAO,EAAS,cAAc,EAAS,CAAE,KAAM,UAAW,CAAC,CAE7D,IAAK,MACH,OAAO,EAAS,QAAQ,EAAS,CAC/B,MAAO,cACP,QAAS,aACV,CAAC,CAEJ,IAAK,QACH,OAAO,EAAS,QAAQ,EAAS,CAC/B,MAAO,SACP,QAAS,aACV,CAAC,CAGJ,QACE,OAAO,EAAS,QAAQ,EAAS,CAC/B,MAAO,OACP,QAAS,aACV,CAAC,GAKR,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAM,EAAQ,EAAK,UAAU,CAC7B,OAAQ,EAAR,CACE,IAAK,IACL,IAAK,KACH,OAAO,EAAgB,EAAE,EAAM,EAAM,CAEvC,IAAK,KACH,OAAO,EAAS,cAAc,EAAQ,EAAG,CAAE,KAAM,QAAS,CAAC,CAE7D,IAAK,MACH,OAAO,EAAS,MAAM,EAAO,CAC3B,MAAO,cACP,QAAS,aACV,CAAC,CAEJ,IAAK,QACH,OAAO,EAAS,MAAM,EAAO,CAC3B,MAAO,SACP,QAAS,aACV,CAAC,CAGJ,QACE,OAAO,EAAS,MAAM,EAAO,CAAE,MAAO,OAAQ,QAAS,aAAc,CAAC,GAK5E,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAM,EAAQ,EAAK,UAAU,CAC7B,OAAQ,EAAR,CAEE,IAAK,IACH,OAAO,OAAO,EAAQ,EAAE,CAE1B,IAAK,KACH,OAAO,EAAgB,EAAQ,EAAG,EAAE,CAEtC,IAAK,KACH,OAAO,EAAS,cAAc,EAAQ,EAAG,CAAE,KAAM,QAAS,CAAC,CAE7D,IAAK,MACH,OAAO,EAAS,MAAM,EAAO,CAC3B,MAAO,cACP,QAAS,aACV,CAAC,CAEJ,IAAK,QACH,OAAO,EAAS,MAAM,EAAO,CAC3B,MAAO,SACP,QAAS,aACV,CAAC,CAGJ,QACE,OAAO,EAAS,MAAM,EAAO,CAAE,MAAO,OAAQ,QAAS,aAAc,CAAC,GAK5E,EAAG,SAAU,EAAM,EAAO,EAAU,EAAS,CAC3C,IAAM,EAAO,GAAQ,EAAM,EAAQ,CAMnC,OAJI,IAAU,KACL,EAAS,cAAc,EAAM,CAAE,KAAM,OAAQ,CAAC,CAGhD,EAAgB,EAAM,EAAM,OAAO,EAI5C,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAM,EAAU,GAAW,EAAK,CAMhC,OAJI,IAAU,KACL,EAAS,cAAc,EAAS,CAAE,KAAM,OAAQ,CAAC,CAGnD,EAAgB,EAAS,EAAM,OAAO,EAI/C,EAAG,SAAU,EAAM,EAAO,EAAU,CAKlC,OAJI,IAAU,KACL,EAAS,cAAc,EAAK,SAAS,CAAE,CAAE,KAAM,OAAQ,CAAC,CAG1D,EAAgB,EAAE,EAAM,EAAM,EAIvC,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAM,EAAY,GAAa,EAAK,CAMpC,OAJI,IAAU,KACL,EAAS,cAAc,EAAW,CAAE,KAAM,YAAa,CAAC,CAG1D,EAAgB,EAAW,EAAM,OAAO,EAIjD,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAM,EAAY,EAAK,QAAQ,CAC/B,OAAQ,EAAR,CAEE,IAAK,IACL,IAAK,KACL,IAAK,MACH,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,cACP,QAAS,aACV,CAAC,CAEJ,IAAK,QACH,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,SACP,QAAS,aACV,CAAC,CAEJ,IAAK,SACH,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,QACP,QAAS,aACV,CAAC,CAGJ,QACE,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,OACP,QAAS,aACV,CAAC,GAKR,EAAG,SAAU,EAAM,EAAO,EAAU,EAAS,CAC3C,IAAM,EAAY,EAAK,QAAQ,CACzB,GAAkB,EAAY,EAAQ,aAAe,GAAK,GAAK,EACrE,OAAQ,EAAR,CAEE,IAAK,IACH,OAAO,OAAO,EAAe,CAE/B,IAAK,KACH,OAAO,EAAgB,EAAgB,EAAE,CAE3C,IAAK,KACH,OAAO,EAAS,cAAc,EAAgB,CAAE,KAAM,MAAO,CAAC,CAChE,IAAK,MACH,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,cACP,QAAS,aACV,CAAC,CAEJ,IAAK,QACH,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,SACP,QAAS,aACV,CAAC,CAEJ,IAAK,SACH,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,QACP,QAAS,aACV,CAAC,CAGJ,QACE,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,OACP,QAAS,aACV,CAAC,GAKR,EAAG,SAAU,EAAM,EAAO,EAAU,EAAS,CAC3C,IAAM,EAAY,EAAK,QAAQ,CACzB,GAAkB,EAAY,EAAQ,aAAe,GAAK,GAAK,EACrE,OAAQ,EAAR,CAEE,IAAK,IACH,OAAO,OAAO,EAAe,CAE/B,IAAK,KACH,OAAO,EAAgB,EAAgB,EAAM,OAAO,CAEtD,IAAK,KACH,OAAO,EAAS,cAAc,EAAgB,CAAE,KAAM,MAAO,CAAC,CAChE,IAAK,MACH,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,cACP,QAAS,aACV,CAAC,CAEJ,IAAK,QACH,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,SACP,QAAS,aACV,CAAC,CAEJ,IAAK,SACH,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,QACP,QAAS,aACV,CAAC,CAGJ,QACE,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,OACP,QAAS,aACV,CAAC,GAKR,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAM,EAAY,EAAK,QAAQ,CACzB,EAAe,IAAc,EAAI,EAAI,EAC3C,OAAQ,EAAR,CAEE,IAAK,IACH,OAAO,OAAO,EAAa,CAE7B,IAAK,KACH,OAAO,EAAgB,EAAc,EAAM,OAAO,CAEpD,IAAK,KACH,OAAO,EAAS,cAAc,EAAc,CAAE,KAAM,MAAO,CAAC,CAE9D,IAAK,MACH,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,cACP,QAAS,aACV,CAAC,CAEJ,IAAK,QACH,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,SACP,QAAS,aACV,CAAC,CAEJ,IAAK,SACH,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,QACP,QAAS,aACV,CAAC,CAGJ,QACE,OAAO,EAAS,IAAI,EAAW,CAC7B,MAAO,OACP,QAAS,aACV,CAAC,GAKR,EAAG,SAAU,EAAM,EAAO,EAAU,CAElC,IAAM,EADQ,EAAK,UACa,CAAG,IAAM,EAAI,KAAO,KAEpD,OAAQ,EAAR,CACE,IAAK,IACL,IAAK,KACH,OAAO,EAAS,UAAU,EAAoB,CAC5C,MAAO,cACP,QAAS,aACV,CAAC,CACJ,IAAK,MACH,OAAO,EACJ,UAAU,EAAoB,CAC7B,MAAO,cACP,QAAS,aACV,CAAC,CACD,aAAa,CAClB,IAAK,QACH,OAAO,EAAS,UAAU,EAAoB,CAC5C,MAAO,SACP,QAAS,aACV,CAAC,CAEJ,QACE,OAAO,EAAS,UAAU,EAAoB,CAC5C,MAAO,OACP,QAAS,aACV,CAAC,GAKR,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAM,EAAQ,EAAK,UAAU,CACzB,EASJ,OARA,AAKE,EALE,IAAU,GACS,EAAc,KAC1B,IAAU,EACE,EAAc,SAEd,EAAQ,IAAM,EAAI,KAAO,KAGxC,EAAR,CACE,IAAK,IACL,IAAK,KACH,OAAO,EAAS,UAAU,EAAoB,CAC5C,MAAO,cACP,QAAS,aACV,CAAC,CACJ,IAAK,MACH,OAAO,EACJ,UAAU,EAAoB,CAC7B,MAAO,cACP,QAAS,aACV,CAAC,CACD,aAAa,CAClB,IAAK,QACH,OAAO,EAAS,UAAU,EAAoB,CAC5C,MAAO,SACP,QAAS,aACV,CAAC,CAEJ,QACE,OAAO,EAAS,UAAU,EAAoB,CAC5C,MAAO,OACP,QAAS,aACV,CAAC,GAKR,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAM,EAAQ,EAAK,UAAU,CACzB,EAWJ,OAVA,AAOE,EAPE,GAAS,GACU,EAAc,QAC1B,GAAS,GACG,EAAc,UAC1B,GAAS,EACG,EAAc,QAEd,EAAc,MAG7B,EAAR,CACE,IAAK,IACL,IAAK,KACL,IAAK,MACH,OAAO,EAAS,UAAU,EAAoB,CAC5C,MAAO,cACP,QAAS,aACV,CAAC,CACJ,IAAK,QACH,OAAO,EAAS,UAAU,EAAoB,CAC5C,MAAO,SACP,QAAS,aACV,CAAC,CAEJ,QACE,OAAO,EAAS,UAAU,EAAoB,CAC5C,MAAO,OACP,QAAS,aACV,CAAC,GAKR,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,GAAI,IAAU,KAAM,CAClB,IAAI,EAAQ,EAAK,UAAU,CAAG,GAE9B,OADI,IAAU,IAAG,EAAQ,IAClB,EAAS,cAAc,EAAO,CAAE,KAAM,OAAQ,CAAC,CAGxD,OAAO,EAAgB,EAAE,EAAM,EAAM,EAIvC,EAAG,SAAU,EAAM,EAAO,EAAU,CAKlC,OAJI,IAAU,KACL,EAAS,cAAc,EAAK,UAAU,CAAE,CAAE,KAAM,OAAQ,CAAC,CAG3D,EAAgB,EAAE,EAAM,EAAM,EAIvC,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAM,EAAQ,EAAK,UAAU,CAAG,GAMhC,OAJI,IAAU,KACL,EAAS,cAAc,EAAO,CAAE,KAAM,OAAQ,CAAC,CAGjD,EAAgB,EAAO,EAAM,OAAO,EAI7C,EAAG,SAAU,EAAM,EAAO,EAAU,CAClC,IAAI,EAAQ,EAAK,UAAU,CAO3B,OANI,IAAU,IAAG,EAAQ,IAErB,IAAU,KACL,EAAS,cAAc,EAAO,CAAE,KAAM,OAAQ,CAAC,CAGjD,EAAgB,EAAO,EAAM,OAAO,EAI7C,EAAG,SAAU,EAAM,EAAO,EAAU,CAKlC,OAJI,IAAU,KACL,EAAS,cAAc,EAAK,YAAY,CAAE,CAAE,KAAM,SAAU,CAAC,CAG/D,EAAgB,EAAE,EAAM,EAAM,EAIvC,EAAG,SAAU,EAAM,EAAO,EAAU,CAKlC,OAJI,IAAU,KACL,EAAS,cAAc,EAAK,YAAY,CAAE,CAAE,KAAM,SAAU,CAAC,CAG/D,EAAgB,EAAE,EAAM,EAAM,EAIvC,EAAG,SAAU,EAAM,EAAO,CACxB,OAAO,EAAgB,EAAE,EAAM,EAAM,EAIvC,EAAG,SAAU,EAAM,EAAO,EAAW,CACnC,IAAM,EAAiB,EAAK,mBAAmB,CAE/C,GAAI,IAAmB,EACrB,MAAO,IAGT,OAAQ,EAAR,CAEE,IAAK,IACH,OAAO,GAAkC,EAAe,CAK1D,IAAK,OACL,IAAK,KACH,OAAO,EAAe,EAAe,CAOvC,QACE,OAAO,EAAe,EAAgB,IAAI,GAKhD,EAAG,SAAU,EAAM,EAAO,EAAW,CACnC,IAAM,EAAiB,EAAK,mBAAmB,CAE/C,OAAQ,EAAR,CAEE,IAAK,IACH,OAAO,GAAkC,EAAe,CAK1D,IAAK,OACL,IAAK,KACH,OAAO,EAAe,EAAe,CAOvC,QACE,OAAO,EAAe,EAAgB,IAAI,GAKhD,EAAG,SAAU,EAAM,EAAO,EAAW,CACnC,IAAM,EAAiB,EAAK,mBAAmB,CAE/C,OAAQ,EAAR,CAEE,IAAK,IACL,IAAK,KACL,IAAK,MACH,MAAO,MAAQ,GAAoB,EAAgB,IAAI,CAGzD,QACE,MAAO,MAAQ,EAAe,EAAgB,IAAI,GAKxD,EAAG,SAAU,EAAM,EAAO,EAAW,CACnC,IAAM,EAAiB,EAAK,mBAAmB,CAE/C,OAAQ,EAAR,CAEE,IAAK,IACL,IAAK,KACL,IAAK,MACH,MAAO,MAAQ,GAAoB,EAAgB,IAAI,CAGzD,QACE,MAAO,MAAQ,EAAe,EAAgB,IAAI,GAKxD,EAAG,SAAU,EAAM,EAAO,EAAW,CAEnC,OAAO,EADW,KAAK,MAAO,EAAO,IACL,CAAE,EAAM,OAAO,EAIjD,EAAG,SAAU,EAAM,EAAO,EAAW,CACnC,OAAO,EAAgB,CAAC,EAAM,EAAM,OAAO,EAE9C,CAED,SAAS,GAAoB,EAAQ,EAAY,GAAI,CACnD,IAAM,EAAO,EAAS,EAAI,IAAM,IAC1B,EAAY,KAAK,IAAI,EAAO,CAC5B,EAAQ,KAAK,MAAM,EAAY,GAAG,CAClC,EAAU,EAAY,GAI5B,OAHI,IAAY,EACP,EAAO,OAAO,EAAM,CAEtB,EAAO,OAAO,EAAM,CAAG,EAAY,EAAgB,EAAS,EAAE,CAGvE,SAAS,GAAkC,EAAQ,EAAW,CAK5D,OAJI,EAAS,IAAO,GACL,EAAS,EAAI,IAAM,KAClB,EAAgB,KAAK,IAAI,EAAO,CAAG,GAAI,EAAE,CAElD,EAAe,EAAQ,EAAU,CAG1C,SAAS,EAAe,EAAQ,EAAY,GAAI,CAC9C,IAAM,EAAO,EAAS,EAAI,IAAM,IAC1B,EAAY,KAAK,IAAI,EAAO,CAC5B,EAAQ,EAAgB,KAAK,MAAM,EAAY,GAAG,CAAE,EAAE,CACtD,EAAU,EAAgB,EAAY,GAAI,EAAE,CAClD,OAAO,EAAO,EAAQ,EAAY,ECtwBpC,IAAM,IAAqB,EAAS,IAAe,CACjD,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,EAAW,KAAK,CAAE,MAAO,QAAS,CAAC,CAC5C,IAAK,KACH,OAAO,EAAW,KAAK,CAAE,MAAO,SAAU,CAAC,CAC7C,IAAK,MACH,OAAO,EAAW,KAAK,CAAE,MAAO,OAAQ,CAAC,CAE3C,QACE,OAAO,EAAW,KAAK,CAAE,MAAO,OAAQ,CAAC,GAIzC,IAAqB,EAAS,IAAe,CACjD,OAAQ,EAAR,CACE,IAAK,IACH,OAAO,EAAW,KAAK,CAAE,MAAO,QAAS,CAAC,CAC5C,IAAK,KACH,OAAO,EAAW,KAAK,CAAE,MAAO,SAAU,CAAC,CAC7C,IAAK,MACH,OAAO,EAAW,KAAK,CAAE,MAAO,OAAQ,CAAC,CAE3C,QACE,OAAO,EAAW,KAAK,CAAE,MAAO,OAAQ,CAAC,GAoClC,GAAiB,CAC5B,EAAG,GACH,GAlC6B,EAAS,IAAe,CACrD,IAAM,EAAc,EAAQ,MAAM,YAAY,EAAI,EAAE,CAC9C,EAAc,EAAY,GAC1B,EAAc,EAAY,GAEhC,GAAI,CAAC,EACH,OAAO,GAAkB,EAAS,EAAW,CAG/C,IAAI,EAEJ,OAAQ,EAAR,CACE,IAAK,IACH,EAAiB,EAAW,SAAS,CAAE,MAAO,QAAS,CAAC,CACxD,MACF,IAAK,KACH,EAAiB,EAAW,SAAS,CAAE,MAAO,SAAU,CAAC,CACzD,MACF,IAAK,MACH,EAAiB,EAAW,SAAS,CAAE,MAAO,OAAQ,CAAC,CACvD,MAEF,QACE,EAAiB,EAAW,SAAS,CAAE,MAAO,OAAQ,CAAC,CACvD,MAGJ,OAAO,EACJ,QAAQ,WAAY,GAAkB,EAAa,EAAW,CAAC,CAC/D,QAAQ,WAAY,GAAkB,EAAa,EAAW,CAAC,EAMnE,CC/DK,GAAmB,OACnB,GAAkB,OAElB,GAAc,CAAC,IAAK,KAAM,KAAM,OAAO,CAE7C,SAAgB,GAA0B,EAAO,CAC/C,OAAO,GAAiB,KAAK,EAAM,CAGrC,SAAgB,GAAyB,EAAO,CAC9C,OAAO,GAAgB,KAAK,EAAM,CAGpC,SAAgB,GAA0B,EAAO,EAAQ,EAAO,CAC9D,IAAM,EAAW,GAAQ,EAAO,EAAQ,EAAM,CAE9C,GADA,QAAQ,KAAK,EAAS,CAClB,GAAY,SAAS,EAAM,CAAE,MAAU,WAAW,EAAS,CAGjE,SAAS,GAAQ,EAAO,EAAQ,EAAO,CACrC,IAAM,EAAU,EAAM,KAAO,IAAM,QAAU,oBAC7C,MAAO,SAAS,EAAM,aAAa,CAAC,kBAAkB,EAAM,WAAW,EAAO,qBAAqB,EAAQ,kBAAkB,EAAM,iFCMrI,IAAM,GACJ,wDAII,GAA6B,oCAE7B,GAAsB,eACtB,GAAoB,MACpB,GAAgC,WAoStC,SAAgB,GAAO,EAAM,EAAW,EAAS,CAC/C,IAAM,EAAiB,GAAmB,CACpC,EAAS,GAAS,QAAU,EAAe,QAAUA,EAErD,EACJ,GAAS,uBACT,GAAS,QAAQ,SAAS,uBAC1B,EAAe,uBACf,EAAe,QAAQ,SAAS,uBAChC,EAEI,EACJ,GAAS,cACT,GAAS,QAAQ,SAAS,cAC1B,EAAe,cACf,EAAe,QAAQ,SAAS,cAChC,EAEI,EAAe,EAAO,EAAM,GAAS,GAAG,CAE9C,GAAI,CAAC,GAAQ,EAAa,CACxB,MAAU,WAAW,qBAAqB,CAG5C,IAAI,EAAQ,EACT,MAAM,GAA2B,CACjC,IAAK,GAAc,CAClB,IAAM,EAAiB,EAAU,GACjC,GAAI,IAAmB,KAAO,IAAmB,IAAK,CACpD,IAAM,EAAgB,GAAe,GACrC,OAAO,EAAc,EAAW,EAAO,WAAW,CAEpD,OAAO,GACP,CACD,KAAK,GAAG,CACR,MAAM,GAAuB,CAC7B,IAAK,GAAc,CAElB,GAAI,IAAc,KAChB,MAAO,CAAE,QAAS,GAAO,MAAO,IAAK,CAGvC,IAAM,EAAiB,EAAU,GACjC,GAAI,IAAmB,IACrB,MAAO,CAAE,QAAS,GAAO,MAAO,GAAmB,EAAU,CAAE,CAGjE,GAAI,GAAW,GACb,MAAO,CAAE,QAAS,GAAM,MAAO,EAAW,CAG5C,GAAI,EAAe,MAAM,GAA8B,CACrD,MAAU,WACR,iEACE,EACA,IACH,CAGH,MAAO,CAAE,QAAS,GAAO,MAAO,EAAW,EAC3C,CAGA,EAAO,SAAS,eAClB,EAAQ,EAAO,SAAS,aAAa,EAAc,EAAM,EAG3D,IAAM,EAAmB,CACvB,wBACA,eACA,SACD,CAED,OAAO,EACJ,IAAK,GAAS,CACb,GAAI,CAAC,EAAK,QAAS,OAAO,EAAK,MAE/B,IAAM,EAAQ,EAAK,OAGhB,CAAC,GAAS,6BACT,GAAyB,EAAM,EAChC,CAAC,GAAS,8BACT,GAA0B,EAAM,GAElC,GAA0B,EAAO,EAAW,OAAO,EAAK,CAAC,CAG3D,IAAM,EAAY,GAAW,EAAM,IACnC,OAAO,EAAU,EAAc,EAAO,EAAO,SAAU,EAAiB,EACxE,CACD,KAAK,GAAG,CAGb,SAAS,GAAmB,EAAO,CACjC,IAAM,EAAU,EAAM,MAAM,GAAoB,CAMhD,OAJK,EAIE,EAAQ,GAAG,QAAQ,GAAmB,IAAI,CAHxC,ECzZX,IAAI,GAAqB,MAAM,CAAmB,CACjD,OACA,KACA,SACA,SACA,YAAY,EAAS,EAAU,CAC9B,KAAK,OAAS,EAAQ,OACtB,KAAK,SAAW,EAChB,KAAK,SAAW,EAAQ,SAEzB,WAAY,CACX,MAAO,CACN,OAAQ,KAAK,OACb,SAAU,KAAK,SACf,KAAM,KAAK,KACX,SAAU,KAAK,UAAU,WAAW,CACpC,CAEF,OAAO,YAAY,EAAM,CACxB,GAAI,CAAC,GAAQ,OAAO,GAAS,UAAY,MAAM,QAAQ,EAAK,CAAE,MAAU,MAAM,uCAAuC,CACrH,GAAI,OAAO,EAAK,QAAW,UAAY,EAAK,OAAO,MAAM,CAAC,SAAW,EAAG,MAAU,MAAM,iDAAiD,CACzI,GAAI,OAAO,EAAK,UAAa,UAAY,EAAK,SAAS,MAAM,CAAC,SAAW,EAAG,MAAU,MAAM,mDAAmD,CAC/I,IAAM,EAAc,IAAI,EAAmB,CAC1C,OAAQ,EAAK,OACb,SAAU,EAAK,SACf,CAAE,EAAK,SAAW,GAAa,YAAY,EAAK,SAAS,CAAG,IAAK,GAAE,CAEpE,MADA,GAAY,KAAO,EAAK,KACjB,IAGL,GAAe,MAAM,CAAa,CACrC,OACA,YAAY,EAAe,CAC1B,KAAK,OAAS,IAAI,IAAI,GAAiB,EAAE,CAAC,CAE3C,IAAI,EAAQ,CACX,OAAO,KAAK,OAAO,IAAI,EAAO,CAE/B,aAAa,EAAQ,EAAc,CAC9B,EAAc,KAAK,OAAO,IAAI,EAAQ,EAAa,CAClD,KAAK,OAAO,OAAO,EAAO,CAEhC,WAAY,CACP,QAAK,OAAO,OAAS,EACzB,MAAO,CAAE,MAAO,OAAO,YAAY,KAAK,OAAO,SAAS,CAAC,CAAE,CAE5D,SAAU,CACT,OAAO,KAAK,OAAO,OAAS,EAE7B,OAAQ,CACP,OAAO,IAAI,EAAa,MAAM,KAAK,KAAK,OAAO,SAAS,CAAC,CAAC,CAE3D,OAAO,YAAY,EAAM,CACxB,GAAI,CAAC,GAAQ,OAAO,GAAS,UAAY,MAAM,QAAQ,EAAK,CAAE,MAAU,MAAM,gCAAgC,CAC9G,GAAM,CAAE,SAAU,EAClB,GAAI,CAAC,GAAS,OAAO,GAAU,UAAY,MAAM,QAAQ,EAAM,CAAE,MAAU,MAAM,iCAAiC,CAClH,OAAO,IAAI,EAAa,OAAO,QAAQ,EAAM,CAAC,KAAK,CAAC,EAAQ,KAAkB,CAC7E,GAAI,EAAO,MAAM,CAAC,SAAW,EAAG,MAAU,MAAM,mCAAmC,CAEnF,OADA,GAAoB,EAAc,kBAAkB,IAAS,CACtD,CAAC,EAAQ,EAAa,EAC5B,CAAC,GAKC,EAAmB,CACxB,WAAY,aACZ,YAAa,cACb,eAAgB,iBAChB,gBAAiB,kBACjB,CA0HG,GAAsB,KAAM,CAC/B,QACA,YAAY,EAAS,CACpB,KAAK,QAAU,EAEhB,KAAK,EAAY,CACZ,OAAe,IAAK,GACxB,OAAQ,EAAW,KAAnB,CACC,KAAK,EAAe,MAAO,OAAO,KAAK,cAAc,EAAW,CAChE,KAAK,EAAe,SAAU,OAAO,KAAK,iBAAiB,EAAW,CACtE,KAAK,EAAe,iBAAkB,OAAO,KAAK,yBAAyB,EAAW,CACtF,KAAK,EAAe,gBAAiB,OAAO,KAAK,wBAAwB,EAAW,CACpF,QAAS,MAAU,MAAM,gCAAgC,EAAW,OAAO,EAG7E,WAAW,EAAS,CACnB,KAAK,QAAU,EAEhB,cAAc,EAAY,CACzB,OAAO,EAAW,MAEnB,yBAAyB,EAAY,CACpC,IAAM,EAAS,EAAW,oBAC1B,OAAQ,EAAO,KAAf,CACC,IAAK,MAAO,OAAO,KAAK,SAAS,UAAU,EAAO,SAAS,UAAU,IAAI,EAAO,OAAO,CACvF,IAAK,YAAa,MAAO,CACxB,KAAM,EAAU,QAChB,MAAO,KAAK,SAAS,UAAU,EAAO,SAAS,UAAU,IAAI,EAAO,OAAO,GAAK,IAAK,GACrF,CACD,QAAS,MAAU,MAAM,uCAAuC,EAAO,OAAO,EAGhF,iBAAiB,EAAY,CAC5B,OAAQ,EAAW,aAAnB,CACC,IAAK,MAAO,OAAO,KAAK,YAAY,EAAW,CAC/C,IAAK,KAAM,OAAO,KAAK,WAAW,EAAW,CAC7C,IAAK,MAAO,OAAO,KAAK,YAAY,EAAW,CAC/C,IAAK,SAAU,OAAO,KAAK,cAAc,EAAW,CACpD,IAAK,KAAM,OAAO,KAAK,WAAW,EAAW,CAC7C,IAAK,KAAM,OAAO,KAAK,WAAW,EAAW,CAC7C,IAAK,MAAO,OAAO,KAAK,YAAY,EAAW,CAC/C,IAAK,KAAM,OAAO,KAAK,WAAW,EAAW,CAC7C,IAAK,MAAO,OAAO,KAAK,YAAY,EAAW,CAC/C,IAAK,WAAY,OAAO,KAAK,gBAAgB,EAAW,CACxD,IAAK,MAAO,OAAO,KAAK,YAAY,EAAW,CAC/C,IAAK,MAAO,OAAO,KAAK,YAAY,EAAW,CAC/C,IAAK,MAAO,OAAO,KAAK,YAAY,EAAW,CAC/C,IAAK,gBAAiB,OAAO,KAAK,qBAAqB,EAAW,CAClE,QAAS,MAAU,MAAM,yBAAyB,EAAW,eAAe,EAG9E,wBAAwB,EAAY,CACnC,GAAI,CAAC,KAAK,SAAS,cAAe,OAClC,IAAM,EAAgB,KAAK,QAAQ,cACnC,OAAQ,EAAW,YAAnB,CACC,KAAK,EAAoB,OAAQ,MAAO,CACvC,KAAM,EAAU,OAChB,MAAO,EAAc,OACrB,CACD,KAAK,EAAoB,gBAAiB,CACzC,GAAI,CAAC,EAAW,IAAK,OACrB,IAAM,EAAU,KAAK,KAAK,EAAW,IAAI,CACzC,GAAI,GAAS,OAAS,EAAU,QAAU,EAAQ,QAAU,IAAK,GAAG,OACpE,IAAM,EAAY,EAAc,mBAAmB,EAAQ,OAC3D,OAAQ,EAAW,OAAnB,CACC,KAAK,EAAU,QAAS,MAAO,CAC9B,KAAM,EAAU,QAChB,MAAO,IAAc,IAAK,GAC1B,CACD,KAAK,EAAU,OAEd,OADI,IAAc,IAAK,GAAG,OACnB,CACN,KAAM,EAAU,OAChB,MAAO,EACP,CACF,KAAK,EAAU,OAAQ,CACtB,GAAI,IAAc,IAAK,GAAG,OAC1B,IAAM,EAAW,WAAW,EAAU,CACtC,OAAO,MAAM,EAAS,CAAG,IAAK,GAAI,CACjC,KAAM,EAAU,OAChB,MAAO,EACP,CAEF,KAAK,EAAU,KAAM,CACpB,GAAI,IAAc,IAAK,GAAG,OAC1B,IAAM,EAAY,WAAW,EAAU,CACvC,OAAO,MAAM,EAAU,CAAG,IAAK,GAAI,CAClC,KAAM,EAAU,KAChB,MAAO,EACP,CAEF,QAEC,OADI,IAAc,IAAK,GAAG,OACnB,CACN,KAAM,EAAU,OAChB,MAAO,EACP,EAGJ,KAAK,EAAoB,YAAa,CACrC,GAAI,CAAC,EAAW,IAAK,OACrB,IAAM,EAAY,KAAK,KAAK,EAAW,IAAI,CAC3C,GAAI,GAAW,OAAS,EAAU,QAAU,EAAU,QAAU,IAAK,GAAG,OACxE,IAAM,EAAc,EAAc,eAAe,EAAU,OAC3D,GAAI,IAAgB,IAAK,GAAG,OAC5B,GAAI,EAAW,SAAW,IAAK,IAC1B,GAAa,OAAS,EAAW,OAAQ,MAAU,MAAM,uDAAuD,GAAa,KAAK,gBAAgB,EAAW,SAAS,CAE3K,OAAO,EAER,KAAK,EAAoB,iBAAkB,CAC1C,GAAI,CAAC,EAAW,IAAK,OACrB,IAAM,EAAgB,KAAK,KAAK,EAAW,IAAI,CAC/C,GAAI,GAAe,OAAS,EAAU,QAAU,EAAc,QAAU,IAAK,GAAG,OAChF,IAAM,EAAmB,EAAc,oBAAoB,EAAc,OACzE,GAAI,OAAO,IAAqB,EAAe,UAAY,IAAqB,IAAK,GAAG,OACxF,GAAI,CACH,IAAM,EAAO,EAAW,UAClB,EAAS,EAAiB,EAAK,CACrC,GAAI,EAAW,SAAW,IAAK,IAC1B,GAAQ,OAAS,EAAW,OAAQ,MAAU,MAAM,mEAAmE,GAAQ,KAAK,gBAAgB,EAAW,SAAS,CAE7K,OAAO,QACC,EAAO,CACf,MAAU,MAAM,uCAAuC,IAAQ,IAKnE,YAAY,EAAY,CACvB,MAAO,CACN,KAAM,EAAU,QAChB,MAAO,EAAW,UAAU,MAAO,GAAQ,KAAK,KAAK,EAAI,EAAE,QAAU,GAAK,CAC1E,CAEF,WAAW,EAAY,CACtB,MAAO,CACN,KAAM,EAAU,QAChB,MAAO,EAAW,UAAU,KAAM,GAAQ,KAAK,KAAK,EAAI,EAAE,QAAU,GAAK,CACzE,CAEF,YAAY,EAAY,CACvB,GAAI,EAAW,UAAU,SAAW,GAAK,EAAW,UAAU,KAAO,IAAK,GAAG,MAAU,MAAM,wCAAwC,EAAW,UAAU,SAAS,CACnK,IAAM,EAAgB,KAAK,KAAK,EAAW,UAAU,GAAG,CACxD,GAAI,GAAe,OAAS,EAAU,QAAS,MAAU,MAAM,gDAAgD,GAAe,OAAO,CAKrI,OAJI,IAAkB,IAAK,GAAU,CACpC,KAAM,EAAU,QAChB,MAAO,GACP,CACM,CACN,KAAM,EAAU,QAChB,MAAO,CAAC,EAAc,MACtB,CAEF,qBAAqB,EAAY,CAChC,GAAI,EAAW,UAAU,SAAW,EAAG,MAAU,MAAM,mDAAmD,EAAW,UAAU,SAAS,CACxI,IAAM,EAAe,KAAK,KAAK,EAAW,UAAU,GAAG,CACjD,EAAe,KAAK,KAAK,EAAW,UAAU,GAAG,CACvD,GAAI,IAAiB,IAAK,IAAK,IAAiB,IAAK,GAAG,MAAO,CAC9D,KAAM,EAAU,QAChB,MAAO,GACP,CACD,IAAM,EAAmB,CAAC,EAAU,YAAa,EAAU,eAAe,CACpE,EAAmB,CAAC,EAAU,OAAQ,EAAU,UAAU,CAC1D,EAAmB,EAAa,KAChC,EAAmB,EAAa,KACtC,GAAI,CAAC,EAAiB,SAAS,EAAiB,EAAI,CAAC,EAAiB,SAAS,EAAiB,CAAE,MAAU,MAAM,6EAA6E,GAAc,KAAK,OAAO,GAAc,OAAO,CAC9O,IAAM,EAAO,EAAa,MACpB,EAAO,EAAa,MAC1B,MAAO,CACN,KAAM,EAAU,QAChB,MAAO,EAAK,SAAS,EAAK,CAC1B,CAEF,cAAc,EAAY,CACzB,GAAI,EAAW,UAAU,SAAW,EAAG,MAAU,MAAM,mDAAmD,EAAW,UAAU,SAAS,CACxI,IAAM,EAAY,KAAK,KAAK,EAAW,UAAU,GAAG,CAC9C,EAAY,KAAK,KAAK,EAAW,UAAU,GAAG,CACpD,GAAI,IAAc,IAAK,IAAK,IAAc,IAAK,GAAG,MAAO,CACxD,KAAM,EAAU,QAChB,MAAO,GACP,CACD,GAAI,GAAW,OAAS,EAAU,QAAU,GAAW,OAAS,EAAU,OAAQ,MAAU,MAAM,iEAAiE,GAAW,KAAK,OAAO,GAAW,OAAO,CAC5M,MAAO,CACN,KAAM,EAAU,QAChB,MAAO,EAAU,QAAU,EAAU,MACrC,CAEF,WAAW,EAAY,CACtB,GAAI,EAAW,UAAU,SAAW,EAAG,MAAU,MAAM,4CAA4C,EAAW,UAAU,SAAS,CACjI,IAAM,EAAY,KAAK,KAAK,EAAW,UAAU,GAAG,CAC9C,EAAY,KAAK,KAAK,EAAW,UAAU,GAAG,CACpD,GAAI,IAAc,IAAK,IAAK,IAAc,IAAK,GAAG,MAAO,CACxD,KAAM,EAAU,QAChB,MAAO,GACP,CACD,GAAI,GAAW,OAAS,GAAW,KAAM,MAAU,MAAM,gEAAgE,GAAW,KAAK,OAAO,GAAW,OAAO,CAClK,MAAO,CACN,KAAM,EAAU,QAChB,MAAO,EAAU,QAAU,EAAU,MACrC,CAEF,WAAW,EAAY,CACtB,GAAI,EAAW,UAAU,SAAW,EAAG,MAAU,MAAM,kDAAkD,EAAW,UAAU,SAAS,CACvI,IAAM,EAAY,KAAK,KAAK,EAAW,UAAU,GAAG,CAC9C,EAAY,KAAK,KAAK,EAAW,UAAU,GAAG,CACpD,GAAI,IAAc,IAAK,IAAK,IAAc,IAAK,GAAG,MAAO,CACxD,KAAM,EAAU,QAChB,MAAO,GACP,CACD,GAAI,GAAW,OAAS,GAAW,KAAM,MAAU,MAAM,sEAAsE,GAAW,KAAK,OAAO,GAAW,OAAO,CACxK,MAAO,CACN,KAAM,EAAU,QAChB,MAAO,EAAU,MAAQ,EAAU,MACnC,CAEF,YAAY,EAAY,CACvB,GAAI,EAAW,UAAU,SAAW,EAAG,MAAU,MAAM,8DAA8D,EAAW,UAAU,SAAS,CACnJ,IAAM,EAAY,KAAK,KAAK,EAAW,UAAU,GAAG,CAC9C,EAAY,KAAK,KAAK,EAAW,UAAU,GAAG,CACpD,GAAI,IAAc,IAAK,IAAK,IAAc,IAAK,GAAG,MAAO,CACxD,KAAM,EAAU,QAChB,MAAO,GACP,CACD,GAAI,GAAW,OAAS,GAAW,KAAM,MAAU,MAAM,kFAAkF,GAAW,KAAK,OAAO,GAAW,OAAO,CACpL,MAAO,CACN,KAAM,EAAU,QAChB,MAAO,EAAU,OAAS,EAAU,MACpC,CAEF,WAAW,EAAY,CACtB,GAAI,EAAW,UAAU,SAAW,EAAG,MAAU,MAAM,+CAA+C,EAAW,UAAU,SAAS,CACpI,IAAM,EAAY,KAAK,KAAK,EAAW,UAAU,GAAG,CAC9C,EAAY,KAAK,KAAK,EAAW,UAAU,GAAG,CACpD,GAAI,IAAc,IAAK,IAAK,IAAc,IAAK,GAAG,MAAO,CACxD,KAAM,EAAU,QAChB,MAAO,GACP,CACD,GAAI,GAAW,OAAS,GAAW,KAAM,MAAU,MAAM,mEAAmE,GAAW,KAAK,OAAO,GAAW,OAAO,CACrK,MAAO,CACN,KAAM,EAAU,QAChB,MAAO,EAAU,MAAQ,EAAU,MACnC,CAEF,YAAY,EAAY,CACvB,GAAI,EAAW,UAAU,SAAW,EAAG,MAAU,MAAM,2DAA2D,EAAW,UAAU,SAAS,CAChJ,IAAM,EAAY,KAAK,KAAK,EAAW,UAAU,GAAG,CAC9C,EAAY,KAAK,KAAK,EAAW,UAAU,GAAG,CACpD,GAAI,IAAc,IAAK,IAAK,IAAc,IAAK,GAAG,MAAO,CACxD,KAAM,EAAU,QAChB,MAAO,GACP,CACD,GAAI,GAAW,OAAS,GAAW,KAAM,MAAU,MAAM,+EAA+E,GAAW,KAAK,OAAO,GAAW,OAAO,CACjL,MAAO,CACN,KAAM,EAAU,QAChB,MAAO,EAAU,OAAS,EAAU,MACpC,CAEF,gBAAgB,EAAY,CAC3B,GAAI,EAAW,UAAU,SAAW,EAAG,MAAU,MAAM,8CAA8C,EAAW,UAAU,SAAS,CACnI,IAAM,EAAgB,KAAK,KAAK,EAAW,UAAU,GAAG,CAClD,EAAc,KAAK,KAAK,EAAW,UAAU,GAAG,CAChD,EAAc,KAAK,KAAK,EAAW,UAAU,GAAG,CAChD,EAAoB,KAAK,KAAK,EAAW,UAAU,GAAG,EAAE,QAAU,GACxE,GAAI,IAAkB,IAAK,IAAK,IAAgB,IAAK,IAAK,IAAgB,IAAK,GAAG,MAAO,CACxF,KAAM,EAAU,QAChB,MAAO,GACP,CACD,GAAI,GAAe,OAAS,EAAU,QAAU,GAAa,OAAS,EAAU,QAAU,GAAa,OAAS,EAAU,OAAQ,MAAU,MAAM,4DAA4D,GAAe,KAAK,OAAO,GAAa,KAAK,OAAO,GAAa,OAAO,CAKtR,OAJI,EAA0B,CAC7B,KAAM,EAAU,QAChB,MAAO,EAAc,OAAS,EAAY,OAAS,EAAc,OAAS,EAAY,MACtF,CACM,CACN,KAAM,EAAU,QAChB,MAAO,EAAc,MAAQ,EAAY,OAAS,EAAc,MAAQ,EAAY,MACpF,CAEF,YAAY,EAAY,CACvB,GAAI,EAAW,UAAU,OAAS,EAAG,MAAU,MAAM,iDAAiD,EAAW,UAAU,SAAS,CACpI,OAAO,EAAW,UAAU,QAAQ,EAAK,IAAQ,CAChD,GAAI,IAAQ,IAAK,GAAG,OAAO,EAC3B,IAAM,EAAgB,KAAK,KAAK,EAAI,CACpC,GAAI,IAAkB,IAAK,GAAG,OAAO,EACrC,GAAI,GAAe,OAAS,EAAU,OAAQ,MAAO,CACpD,KAAM,EAAU,OAChB,MAAO,EAAI,MAAQ,EAAc,MACjC,CACD,MAAU,MAAM,yDAAyD,GAAe,OAAO,EAC7F,CACF,KAAM,EAAU,OAChB,MAAO,EACP,CAAC,CAEH,YAAY,EAAY,CACvB,GAAI,EAAW,UAAU,OAAS,EAAG,MAAU,MAAM,iDAAiD,EAAW,UAAU,SAAS,CACpI,OAAO,EAAW,UAAU,QAAQ,EAAK,IAAQ,CAChD,GAAI,IAAQ,IAAK,GAAG,OAAO,EAC3B,IAAM,EAAgB,KAAK,KAAK,EAAI,CACpC,GAAI,IAAkB,IAAK,GAAG,OAAO,EACrC,GAAI,GAAe,OAAS,EAAU,OAAQ,MAAO,CACpD,KAAM,EAAU,OAChB,MAAO,KAAK,IAAI,EAAI,MAAO,EAAc,MAAM,CAC/C,CACD,MAAU,MAAM,yDAAyD,OAAO,IAAgB,EAC9F,CACF,KAAM,EAAU,OAChB,MAAO,IACP,CAAC,CAEH,YAAY,EAAY,CACvB,GAAI,EAAW,UAAU,OAAS,EAAG,MAAU,MAAM,iDAAiD,EAAW,UAAU,SAAS,CACpI,OAAO,EAAW,UAAU,QAAQ,EAAK,IAAQ,CAChD,GAAI,IAAQ,IAAK,GAAG,OAAO,EAC3B,IAAM,EAAgB,KAAK,KAAK,EAAI,CACpC,GAAI,IAAkB,IAAK,GAAG,OAAO,EACrC,GAAI,GAAe,OAAS,EAAU,OAAQ,MAAO,CACpD,KAAM,EAAU,OAChB,MAAO,KAAK,IAAI,EAAI,MAAO,EAAc,MAAM,CAC/C,CACD,MAAU,MAAM,yDAAyD,OAAO,IAAgB,EAC9F,CACF,KAAM,EAAU,OAChB,MAAO,KACP,CAAC,GAioBA,GAAmB,KAAM,CAC5B,UACA,mBACA,QACA,OACA,iBACA,UACA,SACA,QACA,UACA,YACA,mBACA,MACA,YAAY,EAAQ,EAAS,EAAU,EAAa,EAAS,CAmB5D,GAlBA,KAAK,UAAY,KAAK,eAAe,CACrC,KAAK,iBAAmB,GAAY,CACpC,KAAK,UAAY,EACjB,KAAK,QAAU,GAAoB,CAAE,OAAQ,KAAM,CACnD,KAAK,OAAS,KAAK,QAAQ,OAC3B,KAAK,SAAW,EAAW,EAAS,QAAQ,EAAK,KAChD,EAAI,EAAE,QAAU,GAAmB,YAAY,EAAE,CAC1C,GACL,EAAE,CAAC,CAAG,IAAK,GACd,KAAK,mBAAqB,GAAS,mBACnC,KAAK,YAAc,GAAe,CAAC,CAClC,KAAM,KACN,OAAQ,EACR,CAAC,CACF,KAAK,UAAY,KAAK,mBAAmB,KAAK,UAAU,YAAY,CACpE,KAAK,WAAW,CAChB,KAAK,yBAAyB,CAC9B,KAAK,iBAAiB,CAClB,CAAC,EAAO,SAAU,MAAU,MAAM,mCAAmC,CACzE,KAAK,mBAAqB,KAAK,YAAY,EAAO,SAAS,CAC3D,KAAK,QAAU,CAAC,CACf,KAAM,EAAiB,WACvB,UAAW,KAAK,eAAe,CAC/B,MAAO,KAAK,QAAQ,OACpB,CAAC,CAEH,WAAW,EAAS,CACnB,KAAK,QAAU,EAEhB,gBAAiB,CAChB,OAAO,KAAK,YAAY,OAAO,CAEhC,sBAAuB,CACtB,IAAM,EAAQ,KAAK,YAAY,KAAM,GAAO,EAAG,OAAS,KAAK,OAAO,CAMpE,OALK,EAKE,GAAO,QAJb,QAAQ,KAAK,WAAW,KAAK,OAAO,2CAA2C,CAC3E,KAAK,YAAY,OAAS,EAAU,KAAK,YAAY,GAAG,OACrD,GAIT,cAAc,EAAS,CACtB,KAAK,QAAU,EACf,KAAK,OAAS,EAAQ,OACtB,KAAK,qBAAqB,CACzB,KAAM,EAAiB,gBACvB,UAAW,KAAK,eAAe,CAC/B,MAAO,EAAQ,OACf,CAAC,CACF,KAAK,iBAAiB,CACtB,KAAK,oBAAoB,CAE1B,YAAY,EAAW,EAAU,CAChC,IAAM,EAAS,KAAK,gBAAgB,EAAU,CAC9C,GAAI,CAAC,EAAQ,MAAU,MAAM,0CAA4C,EAAU,CACnF,EAAO,SAAW,EAClB,KAAK,qBAAqB,CACzB,KAAM,EAAiB,eACvB,UAAW,KAAK,eAAe,CAC/B,OAAQ,EACR,CAAC,CACF,KAAK,iBAAiB,CACtB,KAAK,oBAAoB,CAE1B,IAAI,UAAW,CACd,OAAO,KAAK,UAEb,IAAI,aAAc,CACjB,OAAO,KAAK,iBAEb,IAAI,QAAS,CACZ,OAAO,KAAK,UAEb,eAAe,EAAM,CACpB,IAAM,EAAiB,EAAY,KAAK,mBAAmB,CACrD,EAAQ,EAAW,CACzB,AAAW,IAAO,QAClB,IAAI,EAAc,EAAE,CA0BpB,OAzBA,EAAe,QAAS,GAAS,CAChC,GAAI,EAAK,OAAS,aAAc,CAC3B,EAAY,OAAS,IACxB,EAAM,KAAK,CAAC,GAAG,EAAY,CAAC,CAC5B,EAAc,EAAE,EAEjB,OAGD,GADA,EAAY,KAAK,EAAK,CAClB,CAAC,KAAK,UAAU,gBAAiB,OACrC,IAAI,EAAM,EACV,OAAQ,EAAR,CACC,IAAK,QACJ,EAAM,KAAK,UAAU,gBAAgB,MACrC,MACD,IAAK,QACJ,EAAM,KAAK,UAAU,gBAAgB,MACrC,MAEE,EAAY,QAAU,IACzB,EAAM,KAAK,CAAC,GAAG,EAAY,CAAC,CAC5B,EAAc,EAAE,GAEhB,CACE,EAAY,OAAS,GAAG,EAAM,KAAK,CAAC,GAAG,EAAY,CAAC,CACjD,EAER,sBAAsB,EAAQ,CAC7B,OAAO,EAAY,KAAK,mBAAmB,CAAC,KAAM,GAAS,EAAK,KAAO,EAAO,CAE/E,cAAc,EAAW,CACxB,KAAK,qBAAqB,CACzB,KAAM,EAAiB,YACvB,UAAW,KAAK,eAAe,CAC/B,MAAO,EACP,CAAC,CAEH,WAAY,CACX,OAAO,KAAK,QAAQ,OAAO,CAE5B,cAAe,CACd,IAAM,EAAoC,IAAI,IAC9C,EAAY,KAAK,mBAAmB,CAAC,OAAQ,GAAS,EAAK,OAAS,aAAa,CAAC,SAAS,EAAM,IAAU,CACtG,KAAK,UAAU,EAAK,KAAK,EAAkB,IAAI,EAAK,GAAI,EAAM,EACjE,CACF,IAAM,EAAY,EAAE,CASpB,OARA,KAAK,UAAU,YAAY,SAAS,EAAM,IAAW,CACpD,GAAI,CAAC,EAAK,eAAe,CAAE,OAC3B,IAAM,EAAW,KAAK,gBAAgB,EAAO,CAC7C,GAAI,CAAC,EAAU,OACf,IAAM,EAAW,EAAkB,IAAI,EAAO,CAC9C,EAAS,KAAO,IAAa,IAAK,GAAI,IAAK,GAAI,CAAE,WAAU,CAC3D,EAAU,KAAK,EAAS,EACvB,CACK,EAER,yBAAyB,EAAS,EAAc,CAE/C,OADI,EAAqB,KAAK,MAAM,kBAAkB,IAAU,aAAa,IAAe,OACrF,KAAK,MAAM,kBAAkB,IAAU,MAAM,OAErD,0BAA0B,EAAS,EAAc,CAChD,OAAO,KAAK,MAAM,mBAAmB,IAAU,aAAa,IAAe,OAE5E,iBAAiB,EAAkB,CAClC,OAAO,KAAK,MAAM,eAAe,IAAmB,MAErD,oBAAoB,EAAS,CAC5B,IAAM,EAAc,KAAK,MAAM,YAAY,GACtC,KACL,OAAO,OAAO,KAAK,EAAY,CAAC,QAAQ,EAAK,KAC5C,EAAI,GAAiB,EAAY,GAAe,OACzC,GACL,EAAE,CAAC,CAEP,WAAY,CACX,KAAK,MAAQ,CACZ,YAAa,EAAE,CACf,kBAAmB,EAAE,CACrB,eAAgB,EAAE,CAClB,mBAAoB,EAAE,CACtB,CACD,KAAK,UAAU,sBAAsB,CAAC,QAAS,GAAgB,CAC9D,KAAK,MAAM,eAAe,GAAe,CACxC,MAAO,IAAK,GACZ,YAAa,KAAK,UAAU,iBAAiB,EAAY,CACzD,EACA,CACF,KAAK,UAAU,YAAY,SAAS,EAAM,IAAW,CAChD,EAAK,aAAe,OAAO,KAAK,EAAK,YAAY,CAAC,OAAS,IAC9D,KAAK,MAAM,YAAY,GAAU,EAAE,CACnC,OAAO,KAAK,EAAK,YAAY,CAAC,QAAS,GAAkB,CACxD,IAAM,EAAS,EAAK,YAAY,GAChC,GAAI,CAAC,EAAQ,CACZ,QAAQ,KAAK,+CAAiD,EAAS,IAAM,EAAc,CAC3F,OAED,KAAK,MAAM,YAAY,GAAQ,GAAiB,CAC/C,WAAY,EACZ,OAAQ,GACR,EACA,EAEC,EAAK,oBAAsB,IAAK,KAAM,EAAK,kBAAkB,MAAQ,EAAK,kBAAkB,cAC/F,KAAK,MAAM,kBAAkB,GAAU,EAAE,CACrC,EAAK,kBAAkB,OAAM,KAAK,MAAM,kBAAkB,GAAQ,KAAO,CAC5E,WAAY,EAAK,kBAAkB,KACnC,OAAQ,GACR,EACG,EAAK,kBAAkB,aAC1B,KAAK,MAAM,kBAAkB,GAAQ,WAAa,EAAE,CACpD,OAAO,KAAK,EAAK,kBAAkB,WAAW,CAAC,QAAS,GAAiB,CACxE,IAAM,EAAU,EAAK,mBAAmB,aAAa,GACrD,GAAI,CAAC,EAAS,CACb,QAAQ,KAAK,gEAAkE,EAAS,IAAM,EAAa,CAC3G,OAED,KAAK,MAAM,kBAAkB,GAAQ,WAAW,GAAgB,CAC/D,WAAY,EACZ,OAAQ,GACR,EACA,GAGA,EAAK,qBAAuB,IAAK,IAAK,EAAK,mBAAmB,aAAe,IAAK,KACrF,KAAK,MAAM,mBAAmB,GAAU,CAAE,WAAY,EAAE,CAAE,CAC1D,OAAO,KAAK,EAAK,mBAAmB,WAAW,CAAC,QAAS,GAAiB,CACzE,IAAM,EAAU,EAAK,oBAAoB,aAAa,GACtD,GAAI,CAAC,EAAS,CACb,QAAQ,KAAK,iEAAmE,EAAS,IAAM,EAAa,CAC5G,OAED,KAAK,MAAM,mBAAmB,GAAQ,WAAW,GAAgB,CAChE,WAAY,EACZ,OAAQ,GACR,EACA,GAEF,CAEH,mBAAmB,EAAO,CACzB,IAAM,EAAY,EAAE,CAYpB,OAXA,EAAM,SAAS,EAAM,IAAW,CAC/B,GAAK,EAAK,cACL,CACJ,IAAM,EAAU,KAAK,WAAW,GAC1B,EAAe,GAAW,EAAQ,WAAa,EAAK,KAC1D,EAAU,GAAU,IAAI,GAAmB,CAC1C,SACA,SAAU,EAAK,KACf,CAAE,EAAe,EAAQ,SAAW,IAAK,GAAE,MAPpB,QASxB,CACK,EAER,yBAA0B,CACzB,IAAM,EAAa,IAAI,GAAoB,CAC1C,UAAW,KAAK,UAChB,cAAe,KAAK,QACpB,CAAC,CACI,EAAY,KAAK,IAAI,KAAK,UAAU,YAAY,KAAM,EAAE,CAC9D,IAAK,IAAI,EAAO,EAAG,EAAO,EAAW,IAAQ,CAC5C,KAAK,mBAAmB,EAAW,CACnC,IAAI,EAAgB,GAKpB,GAJA,KAAK,UAAU,YAAY,QAAS,GAAS,CACvC,EAAK,eAAe,GACzB,EAAgB,KAAK,+BAA+B,EAAM,EAAW,EAAI,IACxE,CACE,CAAC,EAAe,MAErB,KAAK,mBAAmB,EAAW,CAEpC,+BAA+B,EAAM,EAAY,CAChD,IAAM,EAAe,KAAK,UAAU,EAAK,IACzC,GAAI,CAAC,EAAc,MAAO,GAC1B,IAAI,EAAU,GACd,IAAK,IAAM,KAAW,EAAK,UAAY,EAAE,CAAE,CAC1C,IAAM,EAAa,EAAK,qBAAqB,EAAQ,OAAO,CAG5D,GAFI,CAAC,IACA,EAAQ,OAAS,GAA2B,WAAa,GAA2B,SAAW,EAAa,UAAU,IAAI,EAAW,OAAO,GAAK,IAAK,IACvJ,CAAC,KAAK,6BAA6B,EAAS,EAAW,CAAE,SAC7D,IAAM,EAAgB,KAAK,8BAA8B,EAAS,EAAY,EAAW,CACzF,GAAI,CAAC,EAAe,SACpB,IAAM,EAAkB,EAAK,sBAAsB,EAAS,EAAY,EAAc,CACtF,GAAI,CAAC,EAAiB,SACtB,IAAM,EAAe,EAAa,UAAU,OAAO,EAAI,IAAI,GAC3D,EAAa,aAAa,EAAW,OAAQ,EAAgB,CAC7D,EAAa,SAAW,EAAa,SAAS,CAAG,IAAK,GAAI,EAC1D,EAAU,GAEX,OAAO,EAER,6BAA6B,EAAS,EAAY,CACjD,GAAI,CAAC,EAAQ,KAAM,MAAO,GAC1B,IAAM,EAAW,EAAW,KAAK,EAAQ,KAAK,CAC9C,OAAO,GAAU,OAAS,EAAU,SAAW,EAAS,QAAU,GAEnE,8BAA8B,EAAS,EAAS,EAAY,CAC3D,OAAQ,EAAQ,OAAO,KAAvB,CACC,IAAK,SAAU,OAAO,EAAQ,OAAO,MACrC,IAAK,aAAc,OAAO,EAAW,KAAK,EAAQ,OAAO,WAAW,CACpE,IAAK,gBAAiB,OAAO,KAAK,iBAAiB,EAAQ,OAAO,IAAI,CACtE,IAAK,mBAAoB,CACxB,GAAI,CAAC,KAAK,oBAAoB,oBAAqB,OACnD,IAAM,EAAY,EAAQ,OAAO,IAAI,QAAU,EAAQ,OAOvD,OANiB,KAAK,mBAAmB,oBAAoB,CAC5D,UAAW,EAAQ,OAAO,IAAI,UAC9B,OAAQ,EAAQ,OAAO,IAAI,OAC3B,OAAQ,EACR,CACI,EAAU,OAGhB,QAAS,QAGX,aAAa,EAAQ,EAAa,CACjC,IAAM,EAAyB,KAAK,yBAAyB,EAAQ,EAAY,CAEjF,OADI,IAA2B,IAAK,GAC7B,GADuC,EAG/C,iBAAiB,EAAU,CAC1B,IAAM,EAAW,EAAE,CACnB,IAAK,IAAM,KAAU,EAAS,OAAS,EAAE,CAAE,CAC1C,GAAI,CAAC,KAAK,aAAa,EAAO,CAAE,SAChC,IAAM,EAAU,KAAK,UAAU,YAAY,IAAI,EAAO,CACtD,GAAI,CAAC,EAAS,CACb,QAAQ,KAAK,qCAAuC,EAAO,CAC3D,SAED,GAAI,EAAQ,OAAS,QAAS,CAC7B,EAAS,KAAK,KAAK,YAAY,EAAQ,CAAC,CACxC,SAED,EAAS,KAAK,CACb,GAAI,EACJ,KAAM,EAAQ,KACd,CAAC,CAEH,MAAO,CACN,GAAI,EAAS,GACb,KAAM,QACN,MAAO,EACP,CAEF,qBAAqB,EAAU,EAAQ,CACtC,IAAM,EAAW,EAAO,OAAO,OAAQ,GAAU,KAAK,aAAa,EAAM,GAAG,CAAC,EAAI,EAAE,CAC7E,EAAU,EAAS,OAAS,EAAE,CAC9B,EAAkB,EAAe,EAAQ,OAAO,CACtD,IAAK,IAAM,KAAS,EAAiB,CACpC,IAAM,EAAS,EAAQ,GAEvB,GADI,EAAO,OAAO,KAAM,GAAU,EAAM,KAAO,EAAO,EAClD,CAAC,KAAK,aAAa,EAAO,CAAE,SAChC,IAAM,EAAU,KAAK,UAAU,YAAY,IAAI,EAAO,CACtD,GAAI,CAAC,EAAS,CACb,QAAQ,KAAK,yCAA2C,EAAO,CAC/D,SAED,GAAI,EAAQ,OAAS,QAAS,CAC7B,EAAS,KAAK,KAAK,YAAY,EAAS,EAAO,CAAC,CAChD,SAED,EAAS,KAAK,CACb,GAAI,EACJ,KAAM,EAAQ,KACd,CAAC,CAEH,MAAO,CACN,GAAI,EAAS,GACb,KAAM,QACN,MAAO,EACP,CAEF,YAAY,EAAU,EAAQ,CAO7B,MANA,CAAa,IAAS,CACrB,GAAI,EAAS,GACb,KAAM,QACN,MAAO,EAAE,CACT,CACG,EAAS,OAAO,aAAqB,KAAK,qBAAqB,EAAU,EAAO,CAC7E,KAAK,iBAAiB,EAAS,CAEvC,oBAAqB,CACpB,GAAI,CAAC,KAAK,UAAU,SAAU,MAAU,MAAM,0CAA0C,CACxF,KAAK,mBAAqB,KAAK,YAAY,KAAK,UAAU,SAAS,CAEpE,qBAAqB,EAAO,CAC3B,KAAK,QAAQ,KAAK,EAAM,CAEzB,eAAgB,CACf,OAAO,KAAK,MAAM,KAAK,KAAK,CAAG,IAAI,CAEpC,gBAAgB,EAAQ,CACvB,OAAO,KAAK,UAAU,GAEvB,iBAAkB,CACjB,IAAM,EAAa,IAAI,GAAoB,CAC1C,UAAW,KAAK,UAChB,cAAe,KAAK,QACpB,CAAC,CACF,KAAK,mBAAmB,EAAW,CACnC,KAAK,sBAAsB,EAAW,CACtC,KAAK,sBAAsB,EAAW,CACtC,KAAK,gBAAgB,EAAW,CAEjC,mBAAmB,EAAY,CAC9B,OAAO,KAAK,KAAK,MAAM,eAAe,CAAC,QAAS,GAAqB,CACpE,IAAM,EAAgB,KAAK,MAAM,eAAe,GAEhD,GADA,KAAK,MAAM,eAAe,GAAkB,MAAQ,IAAK,GACrD,CAAC,EAAc,aAAa,WAAY,CAC3C,QAAQ,KAAK,4DAA8D,EAAiB,CAC5F,OAED,IAAI,EAAiB,EAAW,KAAK,EAAc,YAAY,WAAW,CAC1E,GAAI,IAAmB,IAAK,GAAG,CAC9B,QAAQ,KAAK,qEAAuE,EAAiB,CACrG,OAED,OAAQ,EAAc,YAAY,KAAlC,CACC,IAAK,cACJ,GAAI,EAAe,OAAS,EAAU,KAAM,CAC3C,QAAQ,KAAK,0EAA4E,EAAiB,CAC1G,OAED,EAAiB,CAChB,KAAM,EAAU,OAChB,MAAO,GAAuB,IAAI,KAAK,EAAe,MAAQ,IAAI,CAAE,EAAc,YAAY,WAAW,CACzG,CACD,MACD,QAAS,MAEV,KAAK,MAAM,eAAe,GAAkB,MAAQ,GACnD,CAEH,sBAAsB,EAAY,CACjC,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAC,QAAS,GAAY,CAC9D,IAAM,EAAmB,KAAK,MAAM,kBAAkB,GACtD,GAAI,EAAiB,KAAM,CAC1B,IAAM,EAAgB,EAAW,KAAK,EAAiB,KAAK,WAAW,CACvE,GAAI,IAAkB,IAAK,IAAK,EAAc,OAAS,EAAU,QAAS,CACzE,QAAQ,KAAK,2EAA6E,EAAQ,CAClG,OAED,KAAK,MAAM,kBAAkB,GAAS,KAAK,OAAS,EAAc,MAE/D,EAAiB,YAAY,OAAO,KAAK,EAAiB,WAAW,CAAC,QAAS,GAAiB,CACnG,IAAM,EAAgB,EAAW,KAAK,EAAiB,WAAW,GAAc,WAAW,CAC3F,GAAI,IAAkB,IAAK,IAAK,EAAc,OAAS,EAAU,QAAS,CACzE,QAAQ,KAAK,qFAAuF,EAAU,IAAM,EAAa,CACjI,OAED,KAAK,MAAM,kBAAkB,GAAS,WAAW,GAAc,OAAS,EAAc,OACrF,EACD,CAEH,sBAAsB,EAAY,CACjC,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAC,QAAS,GAAY,CAC/D,IAAM,EAAmB,KAAK,MAAM,mBAAmB,GACnD,EAAiB,YAAY,OAAO,KAAK,EAAiB,WAAW,CAAC,QAAS,GAAiB,CACnG,IAAM,EAAgB,EAAW,KAAK,EAAiB,WAAW,GAAc,WAAW,CAC3F,GAAI,IAAkB,IAAK,IAAK,EAAc,OAAS,EAAU,QAAS,CACzE,QAAQ,KAAK,qFAAuF,EAAU,IAAM,EAAa,CACjI,OAED,KAAK,MAAM,mBAAmB,GAAS,WAAW,GAAc,OAAS,EAAc,OACtF,EACD,CAEH,gBAAgB,EAAY,CAC3B,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC,QAAS,GAAW,CACvD,IAAM,EAAa,KAAK,MAAM,YAAY,GAC1C,OAAO,KAAK,EAAW,CAAC,QAAS,GAAkB,CAClD,IAAM,EAAgB,EAAW,KAAK,EAAW,GAAe,WAAW,CAC3E,GAAI,IAAkB,IAAK,IAAK,EAAc,OAAS,EAAU,QAAS,CACzE,QAAQ,KAAK,8DAAgE,EAAS,IAAM,EAAc,CAC1G,OAED,KAAK,MAAM,YAAY,GAAQ,GAAe,OAAS,EAAc,OACpE,EACD,GAGE,EAAe,GAAa,CACjC,IAAM,EAAW,EAAW,CAK5B,OAJA,EAAS,OAAO,QAAS,GAAS,CAC7B,EAAK,OAAS,QAAS,EAAS,KAAK,GAAG,EAAY,EAAK,CAAC,CACzD,EAAS,KAAK,CAAE,GAAG,EAAM,CAAC,EAC9B,CACK,GAIJ,EAAiB,cAAc,KAAM,CACxC,YAAY,EAAS,EAAM,EAAM,EAAgB,CAChD,MAAM,EAAQ,CACd,KAAK,KAAO,EACZ,KAAK,KAAO,EACZ,KAAK,eAAiB,EACtB,KAAK,KAAO,mBAGR,IAAU,EAAO,IAAQ,OAAO,UAAU,eAAe,KAAK,EAAO,EAAI,CACzE,EAAY,GAAU,OAAO,GAAU,YAAY,GAAkB,CAAC,MAAM,QAAQ,EAAM,CAC1F,IAA6B,EAAS,IAAY,CACvD,GAAI,YAAY,KAAK,EAAQ,CAAE,MAAM,IAAI,EAAe,iCAAiC,EAAQ,QAAQ,EAAQ,4CAA6C,uBAAwB,EAAQ,EAOzL,EAAoB,GAAY,CACrC,GAAI,IAAY,GAAI,MAAO,EAAE,CAC7B,GAAI,CAAC,EAAQ,WAAW,IAAI,CAAE,MAAM,IAAI,EAAe,yBAAyB,EAAQ,wCAAyC,uBAAwB,EAAQ,CACjK,OAAO,EAAQ,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,IAAK,IACvC,GAA0B,EAAS,EAAQ,CACpC,EAAQ,QAAQ,MAAO,IAAI,CAAC,QAAQ,MAAO,IAAI,EACrD,EAEG,IAAmB,CAAE,UAAS,cAAa,cAAa,WAAU,UAAW,CAClF,GAAI,IAAY,IAAK,CACpB,GAAI,EAAa,OAAO,EACxB,MAAM,IAAI,EAAe,iBAAiB,EAAK,uDAAwD,sBAAuB,EAAK,CAEpI,GAAI,CAAC,oBAAoB,KAAK,EAAQ,CAAE,MAAM,IAAI,EAAe,iBAAiB,EAAK,8BAA8B,EAAQ,IAAK,sBAAuB,EAAK,CAC9J,IAAM,EAAQ,OAAO,EAAQ,CACvB,EAAU,EAAW,EAAc,EAAc,EACvD,GAAI,EAAQ,GAAK,EAAQ,EAAS,MAAM,IAAI,EAAe,iBAAiB,EAAK,gBAAgB,EAAM,oBAAqB,4BAA6B,EAAK,CAC9J,OAAO,GAEF,GAAsB,EAAU,EAAU,IAAS,CACxD,IAAI,EAAU,EACd,IAAK,IAAM,KAAW,EAAU,CAC/B,GAAI,MAAM,QAAQ,EAAQ,CAAE,CAC3B,IAAM,EAAQ,GAAgB,CAC7B,UACA,YAAa,EAAQ,OACrB,YAAa,GACb,SAAU,GACV,OACA,CAAC,CACF,EAAU,EAAQ,GAClB,SAED,GAAI,CAAC,EAAS,EAAQ,EAAI,CAAC,GAAO,EAAS,EAAQ,CAAE,MAAM,IAAI,EAAe,iBAAiB,EAAK,mBAAoB,iBAAkB,EAAK,CAC/I,EAAU,EAAQ,GAEnB,OAAO,GAEF,IAAyB,EAAU,IACjC,EAAmB,EAAU,EAAiB,EAAQ,CAAE,EAAQ,CAElE,IAAiB,EAAM,IAAU,CACtC,GAAI,IAAS,EAAO,MAAO,GAC3B,GAAI,MAAM,QAAQ,EAAK,EAAI,MAAM,QAAQ,EAAM,CAE9C,MADI,CAAC,MAAM,QAAQ,EAAK,EAAI,CAAC,MAAM,QAAQ,EAAM,EAAI,EAAK,SAAW,EAAM,OAAe,GACnF,EAAK,OAAO,EAAO,IAAU,GAAc,EAAO,EAAM,GAAO,CAAC,CAExE,GAAI,EAAS,EAAK,EAAI,EAAS,EAAM,CAAE,CACtC,GAAI,CAAC,EAAS,EAAK,EAAI,CAAC,EAAS,EAAM,CAAE,MAAO,GAChD,IAAM,EAAW,OAAO,KAAK,EAAK,CAAC,MAAM,CACnC,EAAY,OAAO,KAAK,EAAM,CAAC,MAAM,CAE3C,OADI,EAAS,SAAW,EAAU,OAC3B,EAAS,OAAO,EAAK,IAAU,IAAQ,EAAU,IAAU,GAAc,EAAK,GAAM,EAAM,GAAK,CAAC,CADtD,GAGlD,MAAO,IAEF,GAAY,EAAU,EAAM,IAAU,CAC3C,IAAM,EAAW,EAAiB,EAAK,CACvC,GAAI,EAAS,SAAW,EAAG,OAAO,EAAsB,EAAM,CAC9D,IAAM,EAAiB,EAAS,MAAM,EAAG,GAAG,CACtC,EAAM,EAAS,EAAS,OAAS,GACjC,EAAS,EAAmB,EAAU,EAAgB,EAAK,CACjE,GAAI,MAAM,QAAQ,EAAO,CAAE,CAC1B,IAAM,EAAQ,GAAgB,CAC7B,QAAS,EACT,YAAa,EAAO,OACpB,YAAa,GACb,SAAU,GACV,OACA,CAAC,CAEF,OADA,EAAO,OAAO,EAAO,EAAG,EAAsB,EAAM,CAAC,CAC9C,EAER,GAAI,CAAC,EAAS,EAAO,CAAE,MAAM,IAAI,EAAe,iBAAiB,EAAK,qCAAsC,wBAAyB,EAAK,CAE1I,MADA,GAAO,GAAO,EAAsB,EAAM,CACnC,GAEF,IAAe,EAAU,IAAS,CACvC,IAAM,EAAW,EAAiB,EAAK,CACvC,GAAI,EAAS,SAAW,EAAG,MAAM,IAAI,EAAe,+CAAgD,cAAe,EAAK,CACxH,IAAM,EAAiB,EAAS,MAAM,EAAG,GAAG,CACtC,EAAM,EAAS,EAAS,OAAS,GACjC,EAAS,EAAmB,EAAU,EAAgB,EAAK,CACjE,GAAI,MAAM,QAAQ,EAAO,CAAE,CAC1B,IAAM,EAAQ,GAAgB,CAC7B,QAAS,EACT,YAAa,EAAO,OACpB,YAAa,GACb,SAAU,GACV,OACA,CAAC,CACI,CAAC,GAAgB,EAAO,OAAO,EAAO,EAAE,CAC9C,MAAO,CACN,WACA,eACA,CAEF,GAAI,CAAC,EAAS,EAAO,EAAI,CAAC,GAAO,EAAQ,EAAI,CAAE,MAAM,IAAI,EAAe,iBAAiB,EAAK,mBAAoB,iBAAkB,EAAK,CACzI,IAAM,EAAe,EAAO,GAE5B,OADA,OAAO,EAAO,GACP,CACN,WACA,eACA,EAEI,IAAgB,EAAU,EAAM,IAAU,CAC/C,IAAM,EAAW,EAAiB,EAAK,CAIvC,OAHI,EAAS,SAAW,EAAU,EAAsB,EAAM,EAC9D,EAAmB,EAAU,EAAU,EAAK,CAC5C,GAAY,EAAU,EAAK,CACpB,EAAS,EAAU,EAAM,EAAM,GAEjC,IAAmC,EAAM,IAAS,CACnD,SAAS,IAAM,IAAS,GAAQ,CAAC,EAAK,WAAW,GAAG,EAAK,GAAG,EAChE,MAAM,IAAI,EAAe,2BAA2B,EAAK,6BAA6B,EAAK,IAAK,uBAAwB,EAAK,EAExH,IAAkB,EAAU,IAAe,CAChD,IAAI,EAAkB,EAAsB,EAAS,CAkCrD,OAjCA,EAAW,SAAS,EAAW,IAAmB,CACjD,GAAI,CACH,OAAQ,EAAU,GAAlB,CACC,IAAK,MACJ,EAAkB,EAAS,EAAiB,EAAU,KAAM,EAAU,MAAM,CAC5E,MACD,IAAK,SACJ,EAAkB,GAAY,EAAiB,EAAU,KAAK,CAAC,SAC/D,MACD,IAAK,UACJ,EAAkB,GAAa,EAAiB,EAAU,KAAM,EAAU,MAAM,CAChF,MACD,IAAK,OAAQ,CAEZ,GADA,GAAgC,EAAU,KAAM,EAAU,KAAK,CAC3D,EAAU,OAAS,EAAU,KAAM,MACvC,GAAM,CAAE,SAAU,EAAc,gBAAiB,GAAY,EAAiB,EAAU,KAAK,CAC7F,EAAkB,EAAS,EAAc,EAAU,KAAM,EAAa,CACtE,MAED,IAAK,OAAQ,CACZ,IAAM,EAAQ,GAAsB,EAAiB,EAAU,KAAK,CACpE,EAAkB,EAAS,EAAiB,EAAU,KAAM,EAAM,CAClE,MAED,IAAK,OACJ,GAAI,CAAC,GAAc,GAAsB,EAAiB,EAAU,KAAK,CAAE,EAAU,MAAM,CAAE,MAAM,IAAI,EAAe,8BAA8B,EAAU,KAAK,IAAK,cAAe,EAAU,KAAK,CACtM,aAEM,EAAO,CAEf,MADI,aAAiB,EAAsB,IAAI,EAAe,EAAM,QAAS,EAAM,KAAM,EAAM,KAAM,EAAe,CAC9G,IAEN,CACK,IA4B0B,CAfjC,QAAS,UACT,KAAM,OACN,WAAY,aAaqB,EAAkB,QC7yDpD,IAAa,GAA8B,CAAC,OAAQ,aAAc,iBAAiB,CAkKnF,SAAgB,GACd,EACsC,CACtC,IAAM,EAAuB,EAAM,YAAY,IAAK,IAAgB,CAClE,GAAG,EACH,OAAQ,aACT,EAAE,CASH,OANE,EAAM,WAAa,IACnB,EAAqB,KAAM,GAAe,EAAW,OAAS,WAAW,CAElE,EAGF,CACL,CACE,GAAI,GAAG,EAAM,GAAG,WAChB,KAAM,WACN,OAAQ,WACT,CACD,GAAG,EACJ,CAyCH,SAAS,EAAuB,EAAqC,CACnE,IAAM,EAAkB,EAAwB,EAAM,CAEtD,OAAO,EACH,CACE,KAAM,GAAY,MAClB,QAAS,EACV,CACD,IAAA,GAGN,SAAS,EACP,EACA,EACA,EACA,EACoB,CACpB,IAAM,EAAU,GAAkB,WAAW,EAAQ,EAAY,EAAe,CAGhF,OAFkB,GAAoB,EAAQ,CAAC,MAExC,EAAa,IAAA,GAGtB,IAAM,GAAgC,SAChC,GAAsC,cAE5C,SAAS,GAA6B,EAAgB,EAAuC,CAC3F,OAAO,GAAsB,MAAM,CAAG,GAAG,EAAqB,GAAG,IAAW,EAG9E,SAAgB,GACd,EACA,EACQ,CACR,OAAO,GACL,GAAG,GAAoC,GAAG,IAC1C,EACD,CAGH,SAAgB,GACd,EACA,EACQ,CACR,MAAO,GAAG,GAAmC,EAAS,EAAqB,CAAC,QAG9E,SAAgB,GACd,EACA,EACQ,CACR,MAAO,GAAG,GAAmC,EAAS,EAAqB,CAAC,cAG9E,SAAgB,EACd,EACA,EACQ,CACR,OAAO,GACL,GAAG,GAA8B,GAAG,IACpC,EACD,CAGH,SAAgB,GACd,EACA,EACQ,CACR,MAAO,GAAG,EAA8B,EAAS,EAAqB,CAAC,QAGzE,SAAgB,GACd,EACA,EACQ,CACR,MAAO,GAAG,EAA8B,EAAS,EAAqB,CAAC,cAGzE,SAAgB,GACd,EACA,EACQ,CACR,MAAO,GAAG,EAA8B,EAAS,EAAqB,CAAC,QAGzE,SAAgB,EACd,EACA,EACQ,CACR,MAAO,GAAG,EAA8B,EAAS,EAAqB,CAAC,cAGzE,SAAgB,EAA2B,EAAiB,EAAuC,CACjG,MAAO,GAAG,EAA8B,EAAS,EAAqB,CAAC,OAGzE,SAAgB,GACd,EACA,EACQ,CACR,MAAO,GAAG,EAA8B,EAAS,EAAqB,CAAC,eAGzE,SAAgB,GACd,EACA,EACQ,CACR,MAAO,GAAG,EAA8B,EAAS,EAAqB,CAAC,iBAGzE,SAAgB,GACd,EACA,EACA,EACQ,CACR,MAAO,GAAG,EAA8B,EAAS,EAAqB,CAAC,WAAW,EAAS,QAG7F,SAAgB,GACd,EACA,EACA,EACQ,CACR,MAAO,GAAG,EAA8B,EAAS,EAAqB,CAAC,eAAe,EAAa,UAGrG,SAAgB,GACd,EACA,EACU,CACV,IAAM,EAAO,CACX,GAA4B,EAAM,GAAI,EAAqB,CAC3D,GAAkC,EAAM,GAAI,EAAqB,CACjE,GAAmC,EAAM,GAAI,EAAqB,CAClE,GAAG,EAAM,YAAY,IAAK,GACxB,GAAwC,EAAM,GAAI,EAAW,GAAI,EAAqB,CACvF,CACF,CAED,OAAQ,EAAM,KAAd,CACE,IAAK,WACL,IAAK,aACL,IAAK,QACH,EAAK,KAAK,EAAkC,EAAM,GAAI,EAAqB,CAAC,CAC5E,MACF,IAAK,SACH,EAAK,KAAK,EAAkC,EAAM,GAAI,EAAqB,CAAC,CAC5E,EAAK,KAAK,EAA2B,EAAM,GAAI,EAAqB,CAAC,CACrE,MACF,IAAK,SACH,EAAK,KAAK,GAAmC,EAAM,GAAI,EAAqB,CAAC,CAC7E,EAAK,KAAK,GAAqC,EAAM,GAAI,EAAqB,CAAC,CAC/E,MACF,IAAK,SAAU,CACb,EAAK,KAAK,EAAkC,EAAM,GAAI,EAAqB,CAAC,CAC5E,IAAM,EAAa,EAAM,WACzB,EAAK,KACH,GAAG,EAAW,QAAQ,IAAK,GACzB,GAAkC,EAAM,GAAI,EAAO,GAAI,EAAqB,CAC7E,CACF,CACD,MAEF,IAAK,SACH,MAGJ,OAAO,EAGT,SAAgB,GACd,EACA,EACU,CACV,MAAO,CACL,GAAiC,EAAM,GAAI,EAAqB,CAChE,GAAuC,EAAM,GAAI,EAAqB,CACvE,CAGH,SAAgB,GACd,EACA,EACA,EACA,EACM,CACN,EAAiB,WACf,EACA,GAAiC,EAAM,GAAI,EAAqB,CAChE,EAAuB,EAAM,MAAM,CACpC,CACD,EAAiB,WACf,EACA,GAAuC,EAAM,GAAI,EAAqB,CACtE,EAAuB,EAAM,YAAY,CAC1C,CAGH,SAAgB,GACd,EACA,EACA,EAIA,EACM,CACN,EAAiB,WACf,EACA,GAA4B,EAAM,GAAI,EAAqB,CAC3D,EAAuB,EAAM,MAAM,CACpC,CACD,EAAiB,WACf,EACA,GAAkC,EAAM,GAAI,EAAqB,CACjE,EAAuB,EAAM,YAAY,CAC1C,CACD,EAAiB,WACf,EACA,GAAmC,EAAM,GAAI,EAAqB,CAClE,EAAuB,EAAM,aAAa,CAC3C,CAED,IAAK,IAAM,KAAc,EAAM,YAC7B,EAAiB,WACf,EACA,GAAwC,EAAM,GAAI,EAAW,GAAI,EAAqB,CACtF,EAAuB,EAAW,QAAQ,CAC3C,CAGH,OAAQ,EAAM,KAAd,CACE,IAAK,WACL,IAAK,aACL,IAAK,QAAS,CACZ,IAAM,EAAa,EAAM,WAIzB,EAAiB,WACf,EACA,EAAkC,EAAM,GAAI,EAAqB,CACjE,EAAuB,EAAW,YAAY,CAC/C,CACD,MAEF,IAAK,SAAU,CACb,IAAM,EAAa,EAAM,WACzB,EAAiB,WACf,EACA,EAAkC,EAAM,GAAI,EAAqB,CACjE,EAAuB,EAAW,YAAY,CAC/C,CACD,EAAiB,WACf,EACA,EAA2B,EAAM,GAAI,EAAqB,CAC1D,EAAuB,EAAW,KAAK,CACxC,CACD,MAEF,IAAK,SAAU,CACb,IAAM,EAAa,EAAM,WACzB,EAAiB,WACf,EACA,GAAmC,EAAM,GAAI,EAAqB,CAClE,EAAuB,EAAW,aAAa,CAChD,CACD,EAAiB,WACf,EACA,GAAqC,EAAM,GAAI,EAAqB,CACpE,EAAuB,EAAW,eAAe,CAClD,CACD,MAEF,IAAK,SAAU,CACb,IAAM,EAAa,EAAM,WACzB,EAAiB,WACf,EACA,EAAkC,EAAM,GAAI,EAAqB,CACjE,EAAuB,EAAW,YAAY,CAC/C,CACD,IAAK,IAAM,KAAU,EAAW,QAC9B,EAAiB,WACf,EACA,GAAkC,EAAM,GAAI,EAAO,GAAI,EAAqB,CAC5E,EAAuB,EAAO,MAAM,CACrC,CAEH,MAEF,IAAK,SACH,OAIN,SAAS,GACP,EACA,EACA,EACA,EACA,EACiB,CACjB,IAAM,EAAmC,CACvC,GAAG,EACH,MACE,EACE,EACA,EACA,GAA4B,EAAM,GAAI,EAAqB,CAC3D,EACD,EAAI,EAAM,MACb,YACE,EACE,EACA,EACA,GAAkC,EAAM,GAAI,EAAqB,CACjE,EACD,EAAI,EAAM,YACb,aACE,EACE,EACA,EACA,GAAmC,EAAM,GAAI,EAAqB,CAClE,EACD,EAAI,EAAM,aACb,YAAa,EAAM,YAAY,IAAK,IAAgB,CAClD,GAAG,EACH,QACE,EACE,EACA,EACA,GAAwC,EAAM,GAAI,EAAW,GAAI,EAAqB,CACtF,EACD,EAAI,EAAW,QACnB,EAAE,CACJ,CAED,OAAQ,EAAM,KAAd,CACE,IAAK,WAAY,CACf,IAAM,EAAa,EAAM,WAEzB,EAAgB,WAAa,CAC3B,GAAG,EACH,YACE,EACE,EACA,EACA,EAAkC,EAAM,GAAI,EAAqB,CACjE,EACD,EAAI,EAAW,YACnB,CACD,MAEF,IAAK,SAAU,CACb,IAAM,EAAa,EAAM,WAEzB,EAAgB,WAAa,CAC3B,GAAG,EACH,YACE,EACE,EACA,EACA,EAAkC,EAAM,GAAI,EAAqB,CACjE,EACD,EAAI,EAAW,YAClB,KACE,EACE,EACA,EACA,EAA2B,EAAM,GAAI,EAAqB,CAC1D,EACD,EAAI,EAAW,KACnB,CACD,MAEF,IAAK,aAAc,CACjB,IAAM,EAAa,EAAM,WAEzB,EAAgB,WAAa,CAC3B,GAAG,EACH,YACE,EACE,EACA,EACA,EAAkC,EAAM,GAAI,EAAqB,CACjE,EACD,EAAI,EAAW,YACnB,CACD,MAEF,IAAK,SAAU,CACb,IAAM,EAAa,EAAM,WAEzB,EAAgB,WAAa,CAC3B,GAAG,EACH,aACE,EACE,EACA,EACA,GAAmC,EAAM,GAAI,EAAqB,CAClE,EACD,EAAI,EAAW,aAClB,eACE,EACE,EACA,EACA,GAAqC,EAAM,GAAI,EAAqB,CACpE,EACD,EAAI,EAAW,eACnB,CACD,MAEF,IAAK,SAAU,CACb,IAAM,EAAa,EAAM,WAEzB,EAAgB,WAAa,CAC3B,GAAG,EACH,YACE,EACE,EACA,EACA,EAAkC,EAAM,GAAI,EAAqB,CACjE,EACD,EAAI,EAAW,YAClB,QAAS,EAAW,QAAQ,IAAK,IAAY,CAC3C,GAAG,EACH,MACE,EACE,EACA,EACA,GAAkC,EAAM,GAAI,EAAO,GAAI,EAAqB,CAC5E,EACD,EAAI,EAAO,MACf,EAAE,CACJ,CACD,MAEF,IAAK,SACH,MAEF,QAAS,CACP,IAAM,EAAa,EAAM,WAEzB,EAAgB,WAAa,CAC3B,GAAG,EACH,YACE,EACE,EACA,EACA,EAAkC,EAAM,GAAI,EAAqB,CACjE,EACD,EAAI,EAAW,YACnB,CACD,OAIJ,OAAO,EAGT,SAAS,GACP,EACA,EACA,EACA,EACA,EACsB,CACtB,MAAO,CACL,GAAG,EACH,MACE,EACE,EACA,EACA,GAAiC,EAAM,GAAI,EAAqB,CAChE,EACD,EAAI,EAAM,MACb,YACE,EACE,EACA,EACA,GAAuC,EAAM,GAAI,EAAqB,CACtE,EACD,EAAI,EAAM,YACb,OAAQ,EAAM,OAAO,IAAK,GACxB,GACE,EACA,EACA,EACA,EACA,EACD,CACF,CACF,CAGH,SAAgB,GACd,EACA,EACA,EACA,EAGI,EAAE,CACU,CAChB,GAAM,CAAE,iBAAgB,wBAAyB,EAEjD,MAAO,CACL,GAAG,EACH,YAAa,EAAO,YAAY,IAAK,GACnC,GACE,EACA,EACA,EACA,EACA,EACD,CACF,CACF,CAGH,SAAS,GAA8B,EAAyC,CAC9E,IAAM,EAAmC,CACvC,GAAG,EACH,MAAO,IAAA,GACP,YAAa,IAAA,GACb,aAAc,IAAA,GACd,SAAU,IAAA,GACV,eAAgB,IAAA,GAChB,UAAW,IAAA,GACX,YAAa,EAAM,YAAY,IAAK,IAAgB,CAClD,GAAG,EACH,QAAS,IAAA,GACV,EAAE,CACJ,CAED,OAAQ,EAAM,KAAd,CACE,IAAK,WAEH,EAAgB,WAAa,CAC3B,GAFiB,EAAM,WAGvB,YAAa,IAAA,GACd,CACD,MAEF,IAAK,SAEH,EAAgB,WAAa,CAC3B,GAFiB,EAAM,WAGvB,YAAa,IAAA,GACb,KAAM,IAAA,GACP,CACD,MAEF,IAAK,aAEH,EAAgB,WAAa,CAC3B,GAFiB,EAAM,WAGvB,YAAa,IAAA,GACd,CACD,MAEF,IAAK,SAEH,EAAgB,WAAa,CAC3B,GAFiB,EAAM,WAGvB,aAAc,IAAA,GACd,eAAgB,IAAA,GACjB,CACD,MAEF,IAAK,SAAU,CACb,IAAM,EAAa,EAAM,WACzB,EAAgB,WAAa,CAC3B,GAAG,EACH,YAAa,IAAA,GACb,QAAS,EAAW,QAAQ,IAAK,IAAY,CAC3C,GAAG,EACH,MAAO,IAAA,GACR,EAAE,CACJ,CACD,MAEF,IAAK,SACH,MAEF,QAEE,EAAgB,WAAa,CAC3B,GAFiB,EAAM,WAGvB,YAAa,IAAA,GACd,CACD,MAIJ,OAAO,EAGT,SAAS,GAAmC,EAAmD,CAC7F,MAAO,CACL,GAAG,EACH,MAAO,IAAA,GACP,YAAa,IAAA,GACb,OAAQ,EAAM,OAAO,IAAK,GAAU,GAA8B,EAAM,CAAC,CAC1E,CAGH,SAAgB,GAAiC,EAAwC,CACvF,MAAO,CACL,GAAG,EACH,YAAa,EAAO,YAAY,IAAK,GAAU,GAAmC,EAAM,CAAC,CAC1F,CAGH,SAAS,EAAqB,EAAwB,CAKpD,OAJI,OAAO,GAAU,UAAY,CAAC,OAAO,SAAS,EAAM,CAC/C,EAGF,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,KAAK,MAAM,EAAM,CAAC,CAAC,CAGpD,SAAS,GAAoC,EAAgD,CAC3F,IAAM,EACJ,GAAa,OAAO,GAAc,SAC7B,EACD,EAAE,CAEF,EAAa,OAAO,UAAU,eAAe,KAAK,EAAQ,OAAO,CACjE,EAAW,OAAO,UAAU,eAAe,KAAK,EAAQ,KAAK,CAGnE,GACE,CAAC,GACD,CAAC,IACA,EAAO,KAAO,IAAA,IAAa,EAAO,KAAO,IAAA,IAAa,EAAO,KAAO,IAAA,IACrE,CACA,IAAM,EAAS,EAAqB,EAAO,GAAG,CAE9C,MAAO,CACL,KAAM,EACN,GAAI,EACJ,GAAI,EAAqB,EAAO,IAAM,EAAO,GAAG,CAChD,GAAI,EAAqB,EAAO,IAAM,EAAO,IAAM,EAAO,GAAG,CAC7D,GAAI,EAAqB,EAAO,IAAM,EAAO,IAAM,EAAO,GAAG,CAC9D,CAGH,IAAM,EAAK,EAAqB,EAAO,IAAM,EAAO,IAAM,EAAE,CACtD,EAAK,EAAqB,EAAO,IAAM,EAAE,CACzC,EAAK,EAAqB,EAAO,IAAM,EAAE,CACzC,EAAK,EAAqB,EAAO,IAAM,EAAO,IAAM,EAAE,CAE5D,MAAO,CACL,KAAM,EAAqB,EAAa,EAAO,KAAO,EAAG,CACzD,KACA,KACA,KACA,KACD,CAIH,SAAgB,GACd,EACwB,CACxB,MAAO,CACL,yBAA0B,OAAO,EAAO,KAAK,CAC7C,uBAAwB,OAAO,EAAO,GAAG,CACzC,uBAAwB,OAAO,EAAO,GAAG,CACzC,uBAAwB,OAAO,EAAO,GAAG,CACzC,uBAAwB,OAAO,EAAO,GAAG,CAC1C,CAGH,SAAS,EAAwB,EAAoC,CAC/D,UAAO,GAAU,SAMrB,OAFqB,EAAM,MAEpB,EAAgB,IAAA,GAGzB,SAAS,EAAwB,EAAoC,CAC/D,YAAO,GAAU,UAAY,CAAC,OAAO,SAAS,EAAM,EAIxD,OAAO,EAGT,SAAS,GAAyB,EAAqC,CACrE,OAAO,IAAU,GAAO,GAAO,IAAU,GAAQ,GAAQ,IAAA,GAG3D,SAAS,GAAsB,EAAY,EAAsB,CAC/D,OACE,GAAK,MAAM,EACX,EACG,QAAQ,gBAAiB,GAAG,CAC5B,MAAM,EAAG,EAAE,CACX,aAAa,EAChB,EAAkB,EAAE,CAIxB,SAAS,EAAoC,EAA6C,CACxF,OAAQ,EAAR,CACE,IAAK,WACH,MAAO,CACL,OACA,KAAM,EACP,CACH,IAAK,SACH,MAAO,CACL,OACA,KAAM,EACP,CACH,IAAK,aACH,MAAO,CACL,OACA,KAAM,iBACP,CACH,IAAK,SACH,MAAO,CACL,OACA,eAAgB,GACjB,CACH,IAAK,SACH,MAAO,CACL,OACA,QAAS,EAAE,CACZ,CACH,IAAK,SACH,MAAO,CACL,OACA,IAAK,EACL,IAAK,IACL,KAAM,EACN,aAAc,GACd,UAAW,GACZ,CAEH,QACE,MAAO,CACL,KAAM,QACN,UAAW,OACZ,EAqIP,SAAgB,GACd,EACiC,CACjC,OAAQ,EAAR,CACE,IAAK,WACH,MAAO,CACL,CACE,KAAM,WACN,MAAO,WACP,YAAa,oCACb,UAAW,OACZ,CACD,CACE,KAAM,YACN,MAAO,iBACP,YAAa,qCACb,UAAW,SACX,aAAc,GACf,CACD,CACE,KAAM,YACN,MAAO,iBACP,YAAa,2BACb,UAAW,SACX,aAAc,IACf,CACF,CACH,IAAK,SACH,MAAO,CACL,CACE,KAAM,WACN,MAAO,WACP,YAAa,oCACb,UAAW,OACZ,CACD,CACE,KAAM,MACN,MAAO,gBACP,YAAa,qCACb,UAAW,SACX,aAAc,EACf,CACD,CACE,KAAM,MACN,MAAO,gBACP,YAAa,qCACb,UAAW,SACX,aAAc,IACf,CACD,CACE,KAAM,UACN,MAAO,eACP,YAAa,4BACb,UAAW,OACZ,CACF,CACH,IAAK,aACH,MAAO,CACL,CACE,KAAM,WACN,MAAO,WACP,YAAa,oCACb,UAAW,OACZ,CACD,CACE,KAAM,UACN,MAAO,gBACP,YAAa,mCACb,UAAW,OACZ,CACD,CACE,KAAM,UACN,MAAO,cACP,YAAa,kCACb,UAAW,OACZ,CACF,CACH,IAAK,SACH,MAAO,CACL,CACE,KAAM,aACN,MAAO,kBACP,YAAa,+CACb,UAAW,OACZ,CACF,CACH,IAAK,SACH,MAAO,CACL,CACE,KAAM,WACN,MAAO,WACP,YAAa,qCACb,UAAW,OACZ,CACF,CACH,IAAK,SACH,MAAO,CACL,CACE,KAAM,MACN,MAAO,gBACP,YAAa,4CACb,UAAW,SACX,aAAc,EACf,CACD,CACE,KAAM,MACN,MAAO,gBACP,YAAa,4CACb,UAAW,SACX,aAAc,IACf,CACF,CACH,IAAK,QACH,MAAO,CACL,CACE,KAAM,WACN,MAAO,WACP,YAAa,oCACb,UAAW,OACZ,CACD,CACE,KAAM,YACN,MAAO,iBACP,YAAa,0CACb,UAAW,SACX,aAAc,EACf,CACD,CACE,KAAM,YACN,MAAO,iBACP,YAAa,kCACb,UAAW,SACX,aAAc,IACf,CACD,CACE,K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"}